Well, the first week of Minim development is drawing to a close so it’s time for the first of the development diaries. For those who aren’t familiar with why I’m doing it you can read the idea here:
Finding a point of attack
Like any project, the hardest part is finding where to start. It’s easy coming up with a vision for an update and to see exactly how it should work. Unfortunately, seeing what a user will see is not helpful in seeing what a developer needs to do. I decided to tackle the file management update first, but finding where to start is like finding a weakness in the Death Star: it’s hard to find and hard to hit but when you hit it the whole thing explodes.
As this is essentially a complete re-write of the feature I had two options: replace it bit by bit, always being close to having something that could be releasable, or taking out all traces of the feature and starting from scratch. As I have no real need to release Minim part way through development and because I often prefer a blank canvas to painting over my previous work, I gave my source a rather violent introduction to the delete key. Under an hour later I had Minim compiling with no traces of file management, barring the now blank Files tab.
Ok, so I’ve managed to get past the outer defences of the Death Star, now to find the point of entry. Unfortunately at stages like this of a project I end up procrastinating to a rather large extent and doing practically anything I can do, barring work on this problem. Eventually I get round to forcing myself to do something and everything starts to snow ball after that. Luckily I managed to hit the exhaust port of this problem yesterday.
Data, data everywhere
So I’ve started writing the data migration so I can get the file management features working with files already in the system. Adding new files is just a small step after that. Regular users may not appreciate the true extent of a data migration. It is by no means a simple mundane task as the small window that appears for a few seconds when you install a new version would have you believe. Not only do I have to worry about properly updating a database from version 1.1 to 1.2, which involves reading in files from 1.1 and copying them all to 1.2, I also need to deal with those upgrading from 1.0 to 1.2. And as time goes on you need to focus more and more on these sorts of changes which will get more and more complex as time goes on. An unfortunate but necessary bit of code that requires a lot of testing.
One thing that working on the migration does, however, is bring the data layer into sharp focus. This is a great opportunity for asking the age all question: “What the hell was I smoking when I wrote this?”. One feature of the Audio files tab is the selected audio file. This is the file from which Minim takes the time of the song, and is also for some future features we have planned. In order to select a file as the main audio file you clicked on a radio button next to the file. What this did was to loop through all files, disabling them, and then selecting the file you just clicked on. Looking at this now, it was a completely idiotic way of doing things. Why not have a drop down list in the song info panel that lets you choose the primary audio file? It makes things much simpler both from my perspective and the user’s perspective.
The next hurdle
So what is next? Well the next job is getting files to display. Then I can get on to customising the importer for different file types. This will allow you to, say, see the tempo of a GarageBand file, but also the running time of a movie. Unfortunately, it always sounds easy when you think about it like that, but you often find some annoying little problem that messes up your development process.
So that’s all I have for this week, it’s not much and I’ve waffled quite a bit (it’s a talent of mine) but hopefully it’s given you a bit of an insight into how I develop software and the issues I have. Have a good weekend, and look out for Code Collector Pro 1.0.1 by early next week.
Code Collector Pro 1.0 is out and doing well, Minim 1.1.3 has been released to fix some bugs and we have some other projects going on that we’re keeping under wraps for now. But I thought it would be interesting to try an experiment. For shareware, development processes are usually very secretive. Few people know about what goes on and while this can sometimes be an advantage, it can also be a disadvantage. There is all too often the misconception that programming is easy, that the amazing feature you thought of should “only take a few hours to implement”. Unfortunately development is a very rough and tumble ride, and what you set out to do might not be what you achieve. So I thought it would be nice to try a little experiment….
I’m starting development of Minim 1.2. I’m hoping to have the bulk of it done by mid september at the latest. But I thought I would have a change from the norm and be completely open about the development. Each week I’m going to post an update on the development process, with screenshots, mockups, ideas and general thoughts or problems I’ve had during that week. I’m also going to be completely open about what I’m planning on putting in to Minim 1.2. However, you must be aware that I work in a very fluid way. Some of the features planned for 1.2 were originally planned for 1.0 but pushed back. Some planned for 1.0 and 1.1 aren’t even going to get into 1.2. This fluid movement of features in the roadmap happens up until I tell myself that I have the first beta of a version ready, as such what I say is going into Minim 1.2 now may not be what is in the 1.2 that is released.
What is Minim 1.2?
So what is Minim 1.2 going to be? Well, it’s going to focus heavily on the file management and searching, which I have long thought of as the two weak spots of Minim. File Management is confusing:
- What goes in the audio tab and what goes in the media tab?
- Why can’t I drag files to and from Minim?
- Why can’t I see more information about files?
Well these are questions that even I have but unfortunately various problems have caused me to not fix them until now. The biggest problem is what to do with the audio tab and media tab. Audio files behave slightly differently to other files. But then, images behave differently to videos which behave differently to text files. Luckily when I was in iTunes the solution hit me in the face, and so here it is:
The new Minim 1.2 UI (mockup edition). Various things will change. I’m not 100% sure of the current groups and the icons were just quick things I made, but it gives the general idea of what you will get in Minim 1.2. There is also something else in that screenshot that is a change. Gone are the glossy bars of old and in our smoother bars which look less “in your face”, especially on Leopard. What about file information? Well each group will have it’s own set of columns and show information specific to that type of file. And of course this new system will finally have drag and drop.
The second thing is searching. Searching in Minim is unfortunately broken and in short… sucks. Searching in Minim 1.2 is going to be far more powerful. For one you will be able to search by anything visible to you in Minim. Want to see all songs that have a GarageBand file in the key of C? It will show you. We’re also going a bit retro and adding an iTunes 5-esque search bar. When you search this will slide down and show you how many matches are in song info, lyrics, collaborators or files and filter by them accordingly. One feature I’m also considering, but is one of the more likely features to be move to a later release is smart albums.
There are other some other improvements going in. Two of them will be the ability to create a new song from a GarageBand file and integration with WonderWarp’s SimpleChord. GarageBand ‘08 added some new stuff to it’s file format that will allow me to fill in a lot of data for users from a GarageBand file, though the feature can be scaled back for older versions of GarageBand. The integration with SimpleChord is simply because I wanted to have a chord progression/look-up feature in Minim, but it would have taken quite a while to code and would’ve been hard to successfully integrate. So why not work with an application that already does 90% of what I wanted and keeps a separate UI designed to work with chord progressions. You will be able to pull progressions in from SimpleChord to go into a song, and even make a new song from a chord progression (like with GarageBand files) or create a new progression from within Minim to edit in SimpleChord.
And one last feature that is in the iffy category with Smart Albums: Import/Export of songs. They will work like snippets in Code Collector Pro, where you can export a song into a single file to send to a friend who can import it back into Minim. These are at the bottom of my list simply because of the amount of other features that will be going in.
What does it all mean?
So… you may be asking, “Why is he doing this? Why is he showing me his plans?”. Well the hope is that it will give people an insight into the development process of at least one developer. Users will get an idea of how an application is developed and developers will see my processes in making an application, whether they agree with them or not. Lots of developers have different styles. Some meticulously plan everything before hand. What features go in, how they work, what they look like, how they will be tested. I’m a much more flexible sort of person who likes to focus on one task at a time. The first thing I’m working on is the file management, so I’m thinking about how that will work and what it will look like. I don’t really know what the UI for the GB import or SimpleChord integration will look like, because they’re further down the road. The advantage of being small is that you don’t need to plan as far ahead, because planning restricts flexibility and most things that are innovative or just “pretty cool” came about by chance, not by lots of planning.
Expect to see the first update on Friday.
Minim 1.1.3 is now available for your consumption. This is just a general bug fix of a few annoying bugs. Unfortunately I’ve not had the time to focus on Minim recently due to Code Collector Pro and various other things (University being the most obvious). But don’t worry all you Minim users, I’ll be starting work on Minim 1.2 soon and I’m going to try a bit of an experiment while developing it that I will inform you about at a later date.
And for anyone interested in our open source stuff, the update to the M3 Extensions Framework is going to be delayed a bit. Unfortunately time is limited and I don’t have the time to properly clean up and document it at the moment. Hopefully I’ll have time to do it before the end of August.
I’ve got a stupid question? Why is everyone picking on Bob Keefe? No, I’m serious… why? For those of you who don’t know, Bob Keefe is the “Intel Sticker Guy”. He asked a rather mundane question: “Why doesn’t Apple take part in the Intel Inside program?”. This is the program that allows computer manufacturers to make millions of dollars a year by putting Intel Inside stickers on their computers (it also includes the TV jingle you see in many computer adverts.
Now, I’m not denying that the question was stupid. After all, the answer is simple, “Because it’s Apple!”. But why does the whole (Mac) world and it’s wife feel the need to pick on the guy calling him dastardly and a jackass. Now this post isn’t an all out defence of Keefe (though in a way it does go someway to defend his question). It also isn’t an attack on those who went after him. It’s simply me asking the stupidest question of all: Why do people attack stupid questions?
OK, so I’m British. As such I spend my 4th of July usually cursing the rain that makes up the British summer. But if I went to America on the 4th of July and asked, “Why do you set off fireworks on Independence Day?” I would get told that it was a stupid question and it’s because it’s just what you do on Independence Day. Now that’s fair enough but in Britain there is the 5th of November, which is where we celebrate the foiling of the Gunpowder Plot and set off fireworks. The reason for those fireworks is that they contain gunpowder and as such symbolise the gunpowder used in the plot. So to me asking for the meaning behind why American’s set off fireworks on the 4th of July is a good question.
NB: Just to point out that I don’t actually know why, so if someone does feel free to post in the comments even if it is, “Just to celebrate”.
So now imagine that the Mac world is a country and Bob Keefe is from another country (the Windows world). In that country they all wear these things called Intel stickers and so he comes over here to the Mac world and asks, “Why don’t you wear Intel stickers?”. To this everybody points and laughs at him having such a stupid question. “It’s because we’re Macs,” they say and then go on with their lives. That has just left Mr Keefe with more questions than answers.
Now the Intel sticker question was not the only stupid question asked on Tuesday. Someone asked the question, “Does the iMac have a future?”. Why isn’t that being picked on as being a stupid question? What did people expect Jobs to say to that. Maybe, “No, not really. We released this for a laugh and are dropping the iMac from the product line next week”. But the thing is this is a stupid question that we in the Mac world ask ourselves. Does the iMac have a future?
On the whole most of the question asked were stupid, yet the one with the best answer was probably the sticker question. Instead of saying, “because we’re Apple,” Jobs said why being Apple makes them not choose to use the stickers. Sometimes we have to ask the stupid questions to get the smart answers, so don’t go deriding someone for asking a stupid question. Hell, science is the pursuit of answers to the stupid questions of the day, yet without those stupid questions we wouldn’t have answers that make our lives easier or save lives. After all it is stupid questions such as, “Why should humans stay on the ground?”, “Why should humans stay on the earth?” and, “Why should computers be so hard to use?” that brought us air travel, men on the moon and the Macs that sit before you as you read this.