Tuesday, December 28, 2010

A new display

I just bought myself a Christmas present: a new 24" LED display in Full HD. :D

I bet this will, in the end, produce better code. :)

Happy New Year!

Wednesday, December 8, 2010

More studies, about a month left

Hey guys!

I left quiet in a hurry. I have a total of five exams in December and another one in January. It seems that studying 150% has really taken its toll, especially now at the end of the term. I only got about two-three weeks of working on Stoffi between the two exam periods but hopefully I can get a bunch of work done after the holidays and a few weeks before the midterm exams in the spring.

So what does this mean? It means I cannot release a stable version before the year's end. But that doesn't matter. It will come in due time and it will be awesome. Trust me. :D Right now I am doing some really heavy-lifting in the code area. Moving stuff around and organizing it better. I am almost done, when it's finished it will let me treat every "view" separately. This means that you can use one search on History and have another search for playlist 'Chill Music', etc. You can also have one sort order in Queue, another sort order in History, etc. Each list is different and separate. Of course I will continue to have an ability to have just one sort and one search for every list in case you don't want this new feature. :)

While in the middle of my Chinese studies and trying to get a hang of Discrete Mathematics and Database Design I have asked my server provider if they have support for IPv6. I started thinking of it when I read that the IPv4 addresses will run out next year at IANA. They kindly gave me two addresses to play with. I have also registered a new domain and created a new website for Stoffi. So while I cannot confirm it (my home router doesn't support IPv6) this new website should support IPv6. However Stoffi itself does not yet support IPv6 (while doing the upgrades) but it is a planned feature to make sure that Stoffi is future-proof.

So that's pretty much it. Sorry for keeping you waiting but I have to put the university first, I wish I had more time but right now I don't. However as you can tell I have a lot of great new things coming your way as soon as I can find some time and I assure you that you will not be disappointed.

Keep on posting bugs and feature requests in the meantime. Or maybe help me update the wiki? :P

Anyway, happy holidays! Hope you have a wonderful time!

Monday, November 1, 2010

Beta update: customizable shortcuts, add button in toolbar

Good news everyone...

I just released a big batch of upgrades to the beta. This relase contains a number of bugfixes as well as some new features that you've asked for.

To begin with we have a new, shiny "Add"-button in the toolbar to easily allow you to add your music to Stoffi. The second and biggest feature improvement is that keyboard shortcuts can now be changed! Each shortcut can be set to just about anything. Just be careful if you set it to a single letter. You will still be able to type into the searchbox and such but some planned feature may not work as well. You can also use profiles, which allows you to save a specific set of shortcuts and change between different profiles when you like. There's a default set of profiles that comes with Stoffi, which uses the same shortcuts as a number of big music applications (such as Windows Media Player, Winamp and iTunes). Last, but not least you can make the playback commands (play, pause, next, previous, etc) into global shortcuts. This means that Stoffi will listen to them even when Stoffi doesn't have focus.

So, that's almost about it for now. Oh, yeah. One last thing: you can't upgrade from the latest version. I just found a big, scary bug that makes it impossible to upgrade from that version. It will crash and burn. So go to the download page and reinstall Stoffi. I'm sorry!

Oh, and I will soon release a new update on the good old website. Just to make it look fresh and modern when we prepare for the stable release (which will not have any upgrade bugs!).

So, install this new and awesome release and find me some new bugs! Good luck!

Monday, October 18, 2010

Work batch soon to arrive


I'm sorry I haven't been active for a while. I have my midterm exams coming up and I am all focused on studying right now. However, they are soon over and I can do some heavy coding in two weeks. I plan to fix all the known bugs and maybe even get time to fix some features.

Just a heads up: there seems to be a few bugs around that were introduced with the new sound library. I have myself seen some weird bug with me wanting to play one song, and Stoffi playing another. I will fix this as soon as I can.

See you in two weeks! I'm gonna hit the books now. :)

Monday, September 20, 2010

Beta update: more format support, loads of bugfixes

Good news, everyone!

I have just released a new upgrade to Stoffi Beta. It contains a lot of neat stuff for you to enjoy.

This upgrade is a bit tricky since I had to fix a bug in the upgrade system. So Stoffi will first download and install the first upgrade which fixes the upgrade system, then after a restart it will download this upgrade.

So what's in the upgrade?

First of all this is mainly a bugfix release. It fixes a lot of bugs, actually I don't have any issues of type 'defect' left on the tracker anymore. However, I am pretty sure there are still at least 50 bugs left to find. Who will find the most? Come on, let's hunt!

However, there's a small surprise in this for you. I have had people asking me to add support for more formats. Stoffi is pretty useless if it can only play mp3 files. I had a long look at the issue and tried a few approaches. I ended up with one that I feel pretty confident about. Here's a list of all the file extensions that Stoffi now supports:

  1. aac
  2. ac3
  3. aif
  4. aiff
  5. ape
  6. apl
  7. bwf
  8. flac
  9. m1a
  10. m2a
  11. m4a
  12. mov
  13. mp+
  14. mp1
  15. mp2
  16. mp3
  17. mp3pro
  18. mp4
  19. mpa
  20. mpc
  21. mpeg
  22. mpg
  23. mpp
  24. mus
  25. ofr
  26. ofs
  27. ogg
  28. spx
  29. tta
  30. wav
  31. wv
Woah! That's a lot! However, I will later add cda when I add support for Audio CDs. If there's any format that you feel is missing from this list please let me know and I will try my best to add it.

Note that no additional installation of any codecs or software is required. Stoffi will play these out of the box!

One problem, though. A lot of these formats support DRM. If you have any protected files Stoffi can't play them. It will just skip them. In order to play DRM music I need to purchase a license. This cheapest of these costs €125 and I can't really afford that right now. So if you really, really, really want Stoffi to play your DRM music just send me some money for a license and I will fix it. Until then, enjoy your free music instead. :)


Thursday, September 16, 2010

Beta update: installation bug is gone!


Bug #24 is fixed! Installation will now succeed even if you don't have Microsoft .NET Framework 4.0 Client Profile installed.

I have now created a custom installer and created a self-extracting archive which contains both .NET and Stoffi. So it's pretty big: almost 50 Mb. Stoffi is under 4 Mb, the rest is the installer and .NET.

I have also released a few bug releases, which I managed to work on while I was waiting for a solution to this.

Let the bug hunt (finally) begin!

The aim is to find as many bugs as possible and get them fixed before the stable release sometime before the end of the year. Check out the buglist and report new bugs here.


Sunday, September 5, 2010

An update on the installation bug


I am back from celebrating my birthday. Finally I can continue the hunt for a fix to that big bug that prevents some users from having a clean installation.

I have managed to find out more about what's wrong. It seems that even if I create an entirely empty project in Visual Studio 2010 and select to choose ClickOnce as the deployment method I will wind up with this bug. I have tried this both on my desktop and my laptop, so it shouldn't be something in my Visual Studio installation.

I have searched the net a bit for this specific error message and got some interesting results. First I found some post on MSDN where a Microsoft employee answered and told the developer that this was a bug with the installation of Microsoft .NET Framework. The installation was supposed to restart the computer after the installation of .NET and then continue the installation when the computer started again. However, since it seems that the bug in Stoffi does not require a restart to be solved (just a re-run of the installation) this doesn't seem to apply here.

I also found a few results where developers were encountering this problem on a specific set of machines, a number somewhere around 3% of the clients (this seemed to be consistent for several developers). I, however, have no idea how widespread this bug is.

One friend of mine e-mailed me and told me that his installation failed. Of course the installation had been successful on my two machines where I develop and test Stoffi. So I tried to install it on my girlfriends machine which is pretty much a vanilla Win7 installation. It failed. I then managed to find out that the bug only appeared if Microsoft .NET Framework as not installed. The dirty fix to just re-run the installation worked for my friend as well.

Have you tried to install Stoffi? Can you tell me how it went. Also let me know if the installation needed to install .NET for you or not.

I have also posted a post on MSDN asking for assistance, one Microsoft employee is looking that the problem right now.

However, I am looking at a completely different fix for this. I have planned to use my own installer instead of ClickOnce later on. This will make file associations better and will let me control the installation procedure more. I am right now trying to switch to a custom installer instead and see if that may remove this problem for me. This will probably introduce some permission problems since now Stoffi will be installed in Program Files instead of the user catalog, which means that it will not longer be able to write to itself. So the upgrade system will need more privileges in order to work. I really don't want to go the usual way and move the upgrade system into a separate application running in the background. I hate that approach and want to keep the upgrade code inside Stoffi. However, the alternative is to force Stoffi to run with heighten privileges, which is pretty bad from a security point.

So, what do you think? Let Stoffi run high security privileges or create a separate service that runs in the background (with high security privileges)? I vote for the first approach.

Wednesday, September 1, 2010

A few fixes and a warning


It has come to my attention that there's a problem with the installation in certain cases. I have investigated this for a few hours and come down to this:

If you have Microsoft .NET Framework 4 installed you are not affected.

Otherwise the Click Once system will download it for you after you clicked that "Accept" button when you were asked to accept Microsoft's license for the .NET Framework. It then installed the framework and proceeded to ask you if you want to install Stoffi. When you clicked "Install" it started to download Stoffi, but then it failed and gave you an error dialog.

However, if you just close that last error dialog and then start setup.exe again it works!

I am not really sure what the cause of this is but it looks like it could be something with the manifest file, perhaps a security related problem. I will try to fix it as soon as possible!

However, trying to make up for that mistake I have released an upgrade with a few bugfixes for you. I have fixed bug #1, #2, #3 and #4.

Monday, August 30, 2010

Stoffi Beta released


I promised a beta release before the end of August and here I am, giving you the brand new beta of Stoffi Player.

Wait! I haven't even told you about the new name. A few weeks ago I asked around for some suggestions on a new name. I got a ton of answers on Facebook, this blog and even via e-mail. I wish I could use them all, some were extra awesome. However, I cannot have more than one name so I had to choose one.

I went with Stoffi. It is short, sounds kinda funny and resembles my name a bit (Christoffer). I like it.

Anyway, not everything is in the name. There's tons of new features on this beta as well:

Application Preferences
You can now change settings for Stoffi. The About page and the Settings are combined into a Windows 7 Control Panel look alike.

Application Preferences

System Tray
Stoffi will by default hide in the system tray when it is minimized. Left click the icon to bring back the main window, right click to show a menu or just hover the icon to see what is currently playing. There's also an option to show a notification in the system tray every time a new track is played. This is turned off by default.

Track Notification

Upgrade System
Stoffi will let you choose if you want the application to just upgrade itself in the background or you can choose to either get a notification when there's an upgrade available or check for upgrades manually.

The default setting is "Upgrade automatically" which will download and install upgrades quietly in the background while you can concentrate on other stuff. If you want more control over when to upgrade but don't want to manually check for upgrades every day you can choose "Notify me when I can upgrade". This will show you a notification in the system tray as soon as an upgrade is available. You can click the notification to start the download and installation. A new notification will tell you when the upgrade is completed.

Upgrade Notification

If you really want control or want to turn off upgrades you can choose "Let me check for upgrades". This will add a "Check for upgrade" button.

When clicked it will ask the server if there are any upgrades and ask you if you want to install them if any are found. If you choose to download and install them a progressbar will appear.

You will also see a progressbar in the taskbar icon. This way you can continue doing your tasks while keeping an eye on the upgrading.

Progressbar in Taskbar

No matter what you choose the new version of Stoffi will be run the next time Stoffi is launched. This means that you will not see any new features or fixes until you restart the application. If an upgrade has been downloaded and installed and Stoffi will be upgraded on the next restart a small icon in the About page will be shown to let you know.

And much more...
There also the new quick creation of playlists from searches, quick keyboard shortcuts for navigation around, Windows 7 Jumplists, much faster startup time, file association and many small bugfixes.

...but watch out!
Remember that this is beta! There are certain bugs and quirks left to be fixed. Some of the things to look out for:

  • Track sorting is not saved
  • Volume is not saved
  • Impossible to drag multiple items
  • Rendering glitches with Windows Classic theme
  • Impossible to double-click or right-click -> "Play" from inside the Queue
  • Doesn't update "Last Played" unless track is started manually
  • Doesn't save changes to settings done during current session when upgrading
  • No settings for keyboard shortcuts
All of these will be fixed before the Stable release. If you find any bugs please report them. Thanks.

Happy testing!

Thursday, August 19, 2010

Alpha update: file associations and updated settings


I have tried to find some small spots of time between work and life and I have managed to implement file associations. Now you can choose to open files with Yama. I have also polished the settings a bit and implemented the placeholders that were there earlier. I will add more options for upgrades and keyboard shortcuts later on.

With this part finished there is only one feature left to implement before we can go beta: ID3 tag editor. The plan still stands, the beta will be released before the end of August.

When the beta is released there will be a feature freeze. So no more features will be implemented after the beta. Only bugfixes and overall polish of existing features will go into the beta channel. When the beta is considered to be "good enough" I will release the stable channel (this is equivalent to the 1.0 release of Yama).

New features will of course keep coming to the alpha channel. I still have grand plans for features such as support for Youtube, Last.fm, Spotify, Audio CDs, MP3 players, Radio stations, Visualizers, Equalizer and much more.

Do you have any ideas for a great feature? Post it in the comments.

I look forward to some heavy beta testing in about two weeks, hunting down all those bugs and smashing them silly. :)


Tuesday, August 3, 2010

Requesting a new name


As the application is moving towards the beta release it needs a great name. I am really eager to hear your suggestions so just write down any ideas you might have in the comments. The more suggestions the better.

Cheers! :)

Sunday, August 1, 2010

Improved startup time - up to 80% faster


A day late I have finished doing some benchmarking on the startup time of Yama. I have moved a lot of code into threads that run in the background. This makes the main window appear more quickly and gives you the impression of a snappier application.

The test was fairly simple. I have two computers:

System 1
CPU: Core 2 Duo @ 2.66 Ghz
RAM: 4 Gb DDR3
OS: Windows 7 64-bit
Tracks: 6 851

System 2
CPU: Core Duo @ 1.86 Ghz
RAM: 2 Gb DDR2
OS: Windows 7 32-bit
Tracks: 24

I ran Yama five times before the optimizations and five times after. Each run I recorded the time it took from the first line of code in the startup procedure to the last line..

Worth noting here is that System 1 has several thousand tracks, while System 2 has just 24. This made Yama slow since it had to read all those tracks from the settings file on the harddrive each time it started. It still has to do that but now this code has been moved out into a thread that runs in the background. In fact, all code that interacts with the harddrive during startup has been moved into background threads. The startup time after the optimizations is now spent on one thing: Initialize the GUI. The GUI is initialized by Windows so I can't do much about that part. But at least now you won't suffer any performance hits during startup if you have a large number of tracks or playlists.

So, on to the actual numbers. The decrease in startup time on System 1 is 80%, going from 2.40 seconds to 0.47 seconds. System 2 saw a smaller dip of 64% going from 1.89 seconds to 0.69 seconds.

It is my intention to make Yama feel very lightweight and fast. Hopefully this will do exactly that.

Friday, July 30, 2010

Letting the Managers manage


I have now moved a lot of the core code into what I call "managers". There's the MediaManager which takes care of playback, the PlaylistManager which is pretty self-explanatory, along with the FilesystemManager which takes care of finding the tracks and keeping sync with the filesystem, the UpgradeManager which talks to the upgrade server and installs all the new files, and finally the SettingsManager which remembers settings and initializes stuff upon first run.

This makes the code much easier to work with. Having everything separated instead of everything all over the place. But the benefit is not only for me as a code. There's also some nice results here for the users as well. Thanks to this I managed (no pun intended) to optimize the code a bit. Most of the startup time of Yama is spent on 1) initialize the GUI and 2) scan the filesystem for any changes since the last run. I cannot do much about Windows initializing the GUI but I did bring the FilesystemManager up to some speed.

I will do some testing on my other machine which is a bit slower but on my desktop which is equipped with a 64bit Core 2 Duo I have measured a 25% improvement in startup speed. Tomorrow I will be back with a nice graph and some nice numbers to show the improvement on both machines.

The goal is to keep Yama fast and light, so I try to always find ways to improve the startup time and overall responsiveness of the GUI.

Have a nice weekend!

Friday, July 23, 2010

Designing application interaction and user experience


In the middle of some coding on file association and major code cleanup I still have time to reflect over interface design. Not just in the sense of the actual graphical interface but also the design of the experience the users will have with the application.

During the semester starting this fall I will take a course in Human-Machine interaction which will hopefully provide me with even greater insights into the psychology of the average user and how to optimize the interface of the application to make the user's experience with the application as smooth and effective as possible. However, I already have some thoughts on the best approach for my application and applications in general.

The Text
When a user reads the text of an application they don't actually read it, they scan it in order to quickly find what they are looking for. They will only read blocks of text if they find it necessary. With this in mind the text should be short and straightforward. The title should say it all and the description should be brief. Any extra text should be added via a help link in order to further explain a certain setting, term, etc.

The text should also be very light in tone. Treat the user in a friendly and non-technical way. As an example the error messages should be very descriptive (but not too long!) and include a proposed solution to the cause of the problem. The application should be written to always "understand" what went wrong in order to avoid error messages such as "unknown error".

The wording of the text is important. The text should include positive wording and try to encourage the user. Telling the user all the wonderful things they can do instead of telling them what their limits are. It is also important to not intimidate the user via bad wording. For example let them know that they can "create quick playlists" instead of telling them that the application lets them "create quick playlists".

The text should sound warm and encouraging, like a good friend explaining how to perform a certain task, instead of sounding like a mechanical machine or an anonymous corporation.

The Settings
One of the biggest questions when designing an application is what should go into the settings/preferences/options/configuration window and what shouldn't. There are downsides to both extremes. It is not desirable to go the Apple/Gnome way and treat the users as dumb idiots that you can't trust to do things their own way, instead paving a way of how to use the application with electric fences on both sides so that the user can never get lost. This is extremely insulting to people's intelligence and not a good practice. There is nothing wrong in letting the user decide what they want, cause they do know that better they the developer.

However, the other extreme is not ideal either. Puking a massive load of settings onto the unsuspecting user will result in either scaring them off in confusion, or have them tinker and tweak until the end of days, trying to find "just the right setup". But there's another downside: the support will be so much more complex for an application with a high number of combination of settings and preferences. It is never wrong to just go with a certain implementation and move on.

A good balance between the two evil extremes is the best approach. Besides, it is always possible to implement certain settings later on, if it turns out that most users want a certain settings that the developer omitted. It is also always good to do surveys finding out the most and least used features and settings in order to find out if something can be removed or changed. Listen to the users! Don't just release and forget.

The Interface
Human beings will always judge on appearance, at least partially. If something looks good, it will give a better impression. But more importantly, the interface will always be the main portal for the users to interact with the application and its functions. There's many examples on how not to do. Winamp comes to mind. The interface is a mess, a prime example of bad interface design. The interface is extremely cluttered with buttons, labels and controls. To make things even worse the different parts of the interface does not have a clearly and well balanced focus. A music application should focus on two things: playback of tracks and the actual tracks. Creating a good layout of the controls is very important in order to make it easy for a user to quickly find, identify and use the controls, so that they can complete the task at hand effectively.

Continuing the rant on Winamp's horrid interface that looks like something a 14-year old have designed in his mom's basement: it is an alien invading your system. It has one of the worst integration with the underlying operating system. It does not use the default look, making it stand out and feel awkward and out of place. Even if that may be just a personal preferences for most people more importantly the Winamp interface suffers from a great number of accessibility shortcomings. It doesn't have any respect for the DPI settings of Windows, making it very hard to read for visually impaired people who do not wish to decrease the screen resolution just to be able to quickly find their way around their music application. Also, respecting the system colors is important from an accessibility viewpoint.

But not only Winamp is a good example on bad interface design. iTunes follows in the theme of not respecting system DPI, colors and using native controls, window borders, etc. This is very interesting given the fact that Steve Jobs is criticizing developers for not porting their application to Cocoa, or bashing Flash and other third party developer platforms for standing in they way of full system integration and exposing all features of the operating system to the application developers.

Although not related to Interface design, another bad move by the iTunes developers (and many, many other developers) is not using the tools available on the platform and instead requiring users to install extra software. Bundling iTunes with Apple Bonjour, Apple Software Update and Apple QuickTime. Bundling is bad. Use the existing tools instead.

Spotify seems to be impressed by the bad interface of iTunes and tries to mimic it, managing to surpass iTunes on bad interface design. A lot of Qt and GTK application that get ported to Windows also integrates poorly with the system. The situation is a mess.

A number of studies have shown that familiarity is very important to user experience. Blending in with the rest of the system is key to make the user feel at home. Integration with system features is also important. After all, that's what the operating system is there for in the first place, to provide developers with a set of tools to use.

A careful layout with balanced margins and spacing will give the user a feeling of a clean interface, avoiding the impression of clutter and information mess.

The Flow
When someone is using an application they have a clear focus and a well defined flow. There are a number of ways to interrupt that flow. A warning message is one example. The application should do everything it can to stay out of the user's way. Try to solve a problem without alerting the user. One good example is when you launch an application. If we analyze this situation a bit we can quite easily determine what the focus of the user is. If you launch an application you have a clear goal: you want to use it for a specific, well defined purpose. Taking my application as an example the situation may be a party where the guests have demanded some music to be played. The host decides to launch the application in order to start some tunes. A popup message telling the user that they can upgrade the application will be an extremely inappropriate disruption of the flow and most likely ignored. The worst scenario (but not uncommon) is the popup telling the user that there's a new version available and a link to the website.

No, not cool. The application should stay in the background, and automate as much as possible in order to let the user focus on the actual functions (in my case: playing music).

The Focus
The focus of a lot of applications is the application itself. The developers are living inside the application, looking on the world from the inside out. This is often reflected in the communication between the application and the user and will in many cases confuse, intimidate or alienate the user. The developer should always look at the application from the user's point of view, and describe tasks, labels and error messages from the user's perspective. This will create a more friendly tone in the communication and will encourage the user, helping him or her complete a certain task in a more effective way. It will also leave the user with a warmer and more relaxed feeling instead of sounding mechanical or corporate.

Furthermore the focus should be not on features, but on function and tasks. The user will not be interested in looking at pretty gradients and amazing animation (although they have their place in usability design as well), they are interested in completing a certain task at hand. However, they will notice ugly gradients and annoying animations, so the goal is to actually keep the user from focusing on the skin and let them keep their focus on what they want to do instead. Of course, a nice and beautiful interface that is not in the way beats an ugly interface that's not in the way. There's always a place for beauty in our software.

There's a whole lot more to talk about when it comes to interface design, user experience and information architecture but I don't have time for everything right now. However, I will try to keep my focus on creating a great experience and make my application a pleasure to use. Maybe I will have to rethink a few principles but hopefully the end result will turn out great.

Do you have any additional thoughts on the topic? Is there anything you disagree with? Your comment is more than welcome.


Wednesday, July 14, 2010

Settings and about done


As I am testing the upgrade function before I am ready to release it to the rest of you I am implementing features to see if they get pushed out to installed applications.

The first feature that I have just finished is the preferences and about pages. As mentioned in the previous post I tried to make it look like the Control Panel of Windows 7. Here's the result:

General Settings
Music source settings
About Yama

I haven't yet implemented the feature that will use the settings on the "General" page but they will come soon enough. My goal is to have as few settings as possible, since I believe in good default settings and clean interfaces. If anyone wishes to change the interval for checking for upgrades (the default value is once every hour, btw) one is free to just change the code and compile it (just go to this file and edit line 20).

Anyway, so this is what the settings will look like. As mentioned in an earlier post it is possible to control playback while inside the settings pages thanks to the upper part of the window being static.

Next on the agenda will be file association, minimize to tray or an OSD. Haven't decided which one is the most fun yet.

Oh, and as always, any feedback is more than welcome.

Have a nice day!

Wednesday, July 7, 2010

Thoughts on settings


So the upgrade system is now almost finished. The next thing on the agenda will be to implement the settings, about and help. Since the goal of Yama is to be really tightly integrated with Windows my main thought here would be to make it work like the Control Panel.

If you click on the Start Menu, open Computer and click on System Properties you will come to "Control Panel\System and Security\System". I thought that this could be the look of Yama's settings. The upper area will be the normal Yama controls. There will be Play, Pause, Forward and Previous, Seek and so on. This means that you can control the playback even as you are navigating the settings.

The left part will be used as the navigation links. The top link (the one that says "Control Panel Home") will be "Back to Yama" or something similar. Under that there will be "General", "Library", "About" and "Help". General and Library will be usual settings, About will be similar to the screenshot above and provide the user with basic information about Yama, while Help will contain some guides on how to use Yama as well as tips and tricks (such as keyboard shortcuts or quick playlists).

The "See Also" links will be to external websites (which will open in the default web browser). They will be "Website", "Blog" and "Project Site" most probably.

The Control Panel in Windows 7 is quite a mess. It opens new windows and the links to the left changes as you navigate around. This will not be the case in Yama. The left part will be static, always displaying the same links. No new windows will open, everything will be done in the right area (the white one). The only new windows that will open will be when the "See Also" links are clicked to open a web browser.

So that's pretty much how it will work. The reason I want to do the settings this way is:
  1. It will make it really easy to navigate the settings, giving it a clean interface
  2. It will be less intrusive since it doesn't open any new windows
  3. It looks good
  4. It will look more like a natural part of Windows 7
So what do you think?

Friday, July 2, 2010

Feedback on privacy concerns

Hi, all!

I am right in the middle of coding the Upgrade System. I just finished the server side code. It works like this:

The client (Yama) will connect to our server in Canada via HTTPS. This ensures that all information between our server and Yama is encrypted and safe. It also makes it easy to use behind a firewall since most firewalls have the correct ports open for HTTPS to work. In the request to the server Yama will send the current version number and a unique client ID if it has been given one.

If the client does not have an ID it will be created by the server. The server will either send a package back with all required upgrades, or send a message that Yama is up-to-date.

Each request will be logged on the server. The information will be client ID, current version (upgrade from), latest version (upgrade to) and IP address. I will use this information to track the number of active clients out there (the client ID is used for this), and any abuse of the system (the IP will be used for this). Since all my source code is open for anyone it is pretty easy to see how to connect to the server with your own code and try to abuse it (find a security hole or the like).

My idea was to keep the IP address for a period of time and then delete it.

How do you guys feel about this? Is it OK? Does it intrude too much on privacy? The encryption is there to protect you from other people but in the end we will have your IP address, which can be used to track you, on our servers for a while. How long should it be kept? A month?

Please, send me feedback via the comments.


Sunday, June 27, 2010

New features imminent

Hi, all!

I just committed some new code. I have done a lot of cleaning of the code but there are some areas left to improve. However, I choose to put the rest on hold for a while and start coding the upgrade system instead. The main cleanup is done, the rest is small and trivial and will be used to test the upgrade system.

Thursday, June 10, 2010

Back in the game

Finally. The exams are over for the semester.

I just finished my last exam and now I can go back to coding on this project. I will still be tied up to my daytime job over the summer but at least now I can get a few features implemented. The goal is to have a feature complete beta out before the end of the summer.

First order on the list is a restructure of the code. It may take some time and it will not bring anything user-wise. But it will help me bring new features more quickly in the future. As soon as that's done I will start work on an upgrade manager to keep the application up-to-date. I am thinking of doing a Google approach here, with silent updates like in Chrome.

Unlike Chrome, though, I will probably put an option somewhere letting users change the policy to ask the user to install and download upgrades when they are available. Let me know in the comments if you have any thoughts on this.

As soon as the upgrade manager is in place I will release a second alpha for you to enjoy. Hopefully this will be released before the end of June. After that all releases will be silently pushed to users.

So, that's the plan. :)

Monday, April 26, 2010

Alpha update: keyboard shortcuts

A new feature has just landed. One of the aims of Yama is to make it possible to completely avoid touching the mouse. Therefore Yama supports a number of keyboard shortcut that makes it easy to navigate around and control the application from the keyboard.

Yama will also respond to media keys such as play/pause, next and forward. It expects Windows to take care of volume and muting, though.

Here's a list of the current keyboard shortcuts implemented:
  • Ctrl+F Move focus to search box
  • Ctrl+1 Move focus to "Library" in navigation tree
  • Ctrl+2 Move focus to "Queue" in navigation tree
  • Ctrl+3 Move focus to "History" in navigation tree
  • Ctrl+4 Move focus to "Playlists" in navigation tree
  • Ctrl+T Move focus to track list
  • Ctrl+Numpad 4 Play next song
  • Ctrl+Numpad 6 Play previous song
  • Ctrl+Numpad 5 Play or pause song
  • Ctrl+Numpad 8 Increase volume
  • Ctrl+Numpad 2 Decrease volume
  • Ctrl+Numpad 1 Seek backward in song
  • Ctrl+Numpad 3 Seek forward in song
  • Ctrl+Numpad 7 Toggle shuffle
  • Ctrl+Numpad 9 Toggle repeat

I have also added two new columns: Last Played and Play Count, which shows when the song was last played and how many times it has been played, respectively. I also added a column in the play queue that shows the index of the song in the queue. In addition to that, sorting is disabled in the play queue and history only allows sorting by date.

Sunday, April 25, 2010

Manage your playlists

Playlists are probably the most important part of a music application. Yama recognizes this and makes it dead simple to create and modify playlists.

You can create a "temporary" playlist by just doing a quicksearch. Yama will recognize the search when it switches to the next song. If you want to save the search you can just right click on it and add the search to a playlist. The inverse is also possible, you can do a search, right click on the search box and remove all tracks that match the search from a playlist. Of course you can create a new playlist directly from your search as well.

If that is not simple enough you can just drag the text in the search box to a playlist to add it, or drag it to "Create New" to create a new playlist.

Playlists have never been easier!

Saturday, April 24, 2010

Yama Alpha released

So, I decided that it was time to release a first build of Yama. Download it and try it out. It is very early so a lot of the features are missing. There is no upgrade functionality yet so bear with me. :)

You can download Alpha One here.

Let me know in the comments what you think. :)

File system synchronization

I have just commited a new update. This update brings file system synchronization to Yama. I have made a short video demonstrating this new feature. In short it keeps Yama in sync with your local files. If you delete a file it will be removed from you playlists, your play queue, history and the music collection. If you add a new Windows 7 Library of type "Music" all files inside it will automatically be added to Yama. You can also modify and rename files while playing them, with changes being reflected instantly.

Thursday, April 22, 2010

Thumbnail buttons

I just finished adding a new Windows 7 feature: thumbnail buttons. It's those small buttons you can see when you hover over an application in your taskbar. I added the obvious ones: previous, play/pause and next. I am just allowed to add buttons, so I cannot have a slider there.

Tuesday, April 20, 2010

Introducing Yet Another Music Application


For a long time I have been grunting over missing features in all the major music applications. Winamp looks like it's from another planet, iTunes doesn't have a queue function, Windows Media Player doesn't have good tools for editing ID3 tags and I don't like the layout of the list, Foobar2000 doesn't have quicksearch, Spotify doesn't have visualizers, The GUI of Amarok has really gone downhill since the good 'ol days, and so on.

While these application may certainly be great for other people they give me such an itch I just have to scratch it. So I created my own music application.

Anyway, I'm right in the middle of some exams right now so I don't have much time to dedicate to doing this, but I'll try to find some spots of time when I can sit down and do some coding. It's pretty much that.

I will try to keep this blog updated so you can follow the process as it moves forward. Meanwhile, you can check out the project at Google Code