• Click here for a list of all my projects.
  • Click here for Touchlib info. Source code here.
  • Click here for our multitouch community site.

Saturday, March 08, 2008

Staying motivated on large hobby coding projects

  1. First, evaluate whether this project really is something you want to do. Here are some questions you may want to answer: What will you get out of it? Possible benefits include: money, experience, recognition and the joy of a job well done. Or it could just be a tool you hope to use. Are you doing this for yourself or for other people? Visualizing the end goal is a good first step.
  2. How long will it take and how much time can you commit to it? Even a small project will take a few months. However, you don't have to worry about tackling it all at once. With Genome, I try to put in a half an hour before I go to work every day, which usually allows me to tackle one small item from my todo list. It's huge project but I am making steady progress. Which brings us to #3...
  3. Set small, easily achievable goals. Big projects are made of thousands of very small steps. Whenever I start a new project I set the bar very low. Step one is always to get something compiled and up on the screen that I can see. I don't start out trying to write a huge chunk of code.
  4. Work on whatever interests you. If you are stuck on something, work on something else or some other part of the code. Don't feel like programming? Organize your todo list, work on your website for the project, or brainstorm. That way you are always getting something done. If you feel stuck and stop working on it, there's a better chance that you'll abandon the project.
  5. Make coding an enjoyable experience. I like to put on some music, get a nice cup of coffee and crank on some code. If you find yourself getting frustrated with bugs or your slow progress then it's time for some introspection and self reflection. Where does your sense of urgency come from? It may be that you are telling yourself that you should be further along than you are or 'I'm stupid, I can't figure this out' or other such things. These thoughts aren't really productive. The only way to overcome obstacles is to put fourth a steady effort. Instead of feeling down or complaining, try to focus on "What can I try next? Where can I find the resources I need?". Bugs are part of the process, part of the challenge, and part of what makes the task rewarding.
  6. Take breaks, do other stuff.
  7. Celebrate your progress and successes. I like to write what I've accomplished in this blog to help motivate me.
  8. Be organized. I like to use Mindmapping software such as Freemind to brainstorm, diagram my code, and also keep track of my todo's. It's easy to drag things around so I can prioritize and reorganize if necessary. Things that I want to look at soon I give a bigger / bolder font, things that I don't want to pay any attention to yet I shrink down or hide in sub categories.
  9. Deal with one thing at a time. Trying to think about everything that needs to be done will make you crazy. The human brain can only hold a few variables at once.
  10. Use lists to help unload things from your brain. As soon as you think of something that needs to be done, write it down, that way you don't have to stress about it.

Wednesday, February 27, 2008

Touchlib svn updates

I added a new class meant to replace the old RotatableScalable. It inherits from Multitouchable. The new class is called Physical and it provides more realistic behavior for dragging / rotation / scaling. I updated the Photo app with this class and overall I think it's less glitchy and more interesting to interact with. It's more like if you were manipulating a real piece of paper. Extending Physical and Multitouchable should make it easy to write your own widgets and applications and allow easy access to the multitouch information and basic gestures.

Monday, February 25, 2008

Genome Work Log

  • Finished re-coding the network module in Juce. Basic tests indicate that it is working ok, but more in depth testing will have to wait until I finish re-adding the gui elements to support it (doing that next). Unit tests for this module would be really useful.
  • Coded a 'ChatWindow' component. Basic IRC-style chatting is working. In the future I will expand it to allow for different text colors and graphics.
  • misc fixes
  • overall the network aspect I think is going to be the 'killer app' for genome. I am excited to see it up and running again.

Labels:

Touchlib svn updates


I added a new Flash application to touchlib. It's a game called Pegs and it uses the great Box2d physics engine. There's really nothing about it that leverages the fact that it's multitouch, but it's fun. I think Box2d could be a nice platform for writing simple games. Check out Pegs for examples on how to do basic things like collision detection and using Sprites in place of the simple wireframes. The PhysicsCanvas class should be your basis for multitouchable physics apps. I will be adding additional features to it as needed. For now, you can override it's methods to get a working physics system with very little work.
I also added a basic demo of Box2d physics with touchlib support. You can grab and manipulate multiple shapes at once. Nui (chris moore) is reportedly working on an update to that with the rest of the Box2d demos. It's called Phys1 in the AS3\src directory. Code is in AS3\app\demos\Phys\, if my memory serves me.

Labels: ,

Saturday, February 23, 2008

Genome Work Log

  • Successfully converted all std::string references to Juce String's. It generally went really smoothly ( thanks to the fact that juce's String works pretty similarly ), even though hundreds of changes were necessary. Code is a lot cleaner now since I could remove references to string conversion and tokenizer classes that are no longer needed thanks to Juce. Having unit tests really helped catch and resolve bugs introduced by the change quickly. Hopefully I can take the time to write some unit tests for the network module (see below)
  • Converted my existing streaming classes to Juce MemoryOutputStreams. This was also a pretty big change (affecting every module), but also made easy thanks to the fact that juce's streams work almost exactly the same.
  • With these two changes I am almost completely free of other dependencies.
  • Next up: re-writing the Network module using juce's network classes. Hoping to have this done this weekend.
  • Big outstanding items after Network: OSC Control. Automation. Control surfaces.

Monday, February 18, 2008

Genome Work Log

  • added track delete
  • started converting the last external dependencies to Juce classes. Also working on converting all std::string's to Juce Strings. Should take a few days but when I'm done I should have an application that compiles on Mac, Linux and PC with no major changes (since I'm using Juce for everything..).

Labels:

Saturday, February 16, 2008

Genome Work Log

Refactored some stuff with the main song view to separate the track info area (so it scrolls properly now). I thought I would have to do some tricky component juggling to get the pattern selector to appear over top of the song tracks but it turns out that Juce already has a really easy solution - I just used 'addToDesktop' which basically moves the component into a top level window. This is what is used for the popup menus and tooltips. That's the nice thing about Juce - the base Component class already has almost every feature you could possibly dream of built in and ready to use in an easy manner.

Labels:

Sunday, February 10, 2008

Genome Work Log



  • Added mute / solo buttons
  • made track names renameable
  • added ability to delete patterns

Labels: