The current version of Halebopp is dead, but I learned a lot:
- Clutter is not as extraordinary it seems. Sure, it renders everything in GL, but it doesn't give you much freedom over its widgets. All coordinates are stored as integers to support embedded targets better, which mades a zoomable UI a pain to implement.
- Writing your own alternative to Clutter is no fun, especially when writing a music editor is your main goal.
- I hate traditional widgets, windowed layouts, text and cursors. I love multi-touch, images, zoomable interfaces, animations. I want to be able to control everything with my fingers. I need to reinvent the interface here. What I dream of does not exist yet. The subprojects name is "Mjoo" (A revived old project of mine).
- Offline audio rendering is an optimization, not a paradigm. It gets too complicated, especially if you want (some) live input support. I'm better off rendering DSP in the traditional way, with a bit of mix-ahead cache magic to use up free CPU cycles.
- I hate writing UI code directly. I love to set up simple databindings and static/functional structure. I explored that concept in Holygrail (another subproject), and it went pretty beautiful. So I actually have an idea what I'm doing here.
- Nobody needs components in Python. Simple enumeration of modules and auto-import is fine. Anything else becomes self-serving rather quickly.
- Function decorators in Python are mighty.
- The logging module is good enough for any log output job.
- SQLite is too low-level to be used directly. Writing your own wrapper doesn't cut it. SQLAlchemy does the trick - for any kind of SQL RDBMS.
- SQL blobs suck for asynchronous R/W. Use files and store only references in your DB.
- I hate trees. I love flat lists and dictionaries.
- Python can't do DSP work efficiently and never will.
- Python can't do multithreading efficiently and never will. Use multiple processes and RPC.
- Boost.Python is a friend to keep, but never wrap anything not especially written for it.
- SCons remains a great build system, as long as you don't get creative; stick to best practice.
- It's impossible to track DB changes directly from multiple processes using the DB file alone. I assume best is some kind of RPC document server doing all transactions and providing changesets to clients - like Verse for 3D editors.
- C++ is a dish best served stupid. Stick to the STL, no clever tricks, especially if you plan to expose stuff to Python.
- Twisted is a great framework for writing anything socket related.
- SndObj has nice processing plugins and Python bindings.
- Python SWIG bindings can be understood by Boost.Python.
- Don't do anything nobody asked for. No docs, no tests, no website, no mailing list until there is actually something that you use yourself productively. Community building is for later.
- Mercurial is fun to work with, so is Eclipse and it's numerous plugins, including PyDev.
- Top down development doesn't work for science and experiments. Don't make big plans.
I'm currently working on the second revision of Halebopp. Right now the (small) plan is (in this order) to get the document server working, write a player client, write an editing frontend.
I'm not trying to get revolutionary with the DSP technology this time. I want to support a DSP graph for SndObj objects and, later, a sequencer to script events. Also, something to easily import and record waves.
So long.