Well, time to start the journal again this year. I had fun re-reading the entries from last year (all 26,381 words), so I figure this year's will be useful as well. So that future entries don't seem to come out of the blue, here are the projects I'm currently working on:
Iconographer: last year's IB Dossier project. It has now become a shareware icon editor (currently up to version 1.0.2). I have a bunch of things planned for it (planned versions are 1.1, 1.5 and 2.0), so I'll be working on it this year too. In addition, I'm working with some people at Apple to make it their official internal icon editor. I should be getting the specs to see what they want in a few days. Hopefully it'll be compatible with my plans, or better yet theirs will be better :p In any case, although I most major work is done, it'll still be taking up my time.
I'm also planning to use Iconographer as a codebase onto which to experiment with new concepts that I'm trying to learn. For example, I'm thinking of adding a plug-in architecture for Photoshop-like filter effects. Although a plug-in system for an icon editor in itself might be overkill, it'll still be useful in the future. Another thing which I've had any experience with whatsoever is networking. Therefore I'm planning to create a simple stream class, which I'll be using in Iconographer. Some applications (e.g. Transmit and Audion from Panic, a company I admire and would be proud to work for them) display a "Do you want to subscribe to the update mailing list for this product" dialog when they're first run. If the user clicks yes, then a message is sent out with the user's email address. Now this obviously requires networking (specifically the SMTP protocol) and I think that this small task would be appropriate for a first networking-related project (as opposed to say implementing a real-time 16 player Internet based game).
Meshroom: this year's IB Dossier project. Since I learned how to use OpenGL this summer, and want to further practice my skills, I think that this project will help me do that while at the same time fulfill all the IB requirements (yes, I know specifically where recursion will be involved, and it'll be in a very reasonable and relevant place). The idea is to create a simple 3D modeler. In my case, I'll define simple as basic 3D primitives (cubes, spheres, cones, etc.) and vertex meshes. If I have time, I'll add terrain map support (at least loading of grayscale maps into meshes) and whatever else comes to mind. Although I'll be using OpenGL, I still want to make it behave as a Mac application (I had initially considered doing my own controls, etc. and working in full screen mode, but using the Mac ones will be much easier, and they wouldn't have fulfilled any IB purpose anyway). I'm currently in the planning stages, I have a basic idea of the class nomenclature in my head and I need to get it down in order to make sure that it'll work (unlike Iconographer, where I only had two or three classes, this project will require several, and there'll be inheritance and polymorphism to think about). For the final aim of this project (as opposed to it being just a dossier thing) I don't see it being released as shareware or anything of that nature. I'm still quite an amateur when it comes to 3D things (especially concepts involving heavy math, which I really haven't had/don't remember). Instead it'll serve to:
1) further improve MFrame, a homegrown application framework which I've so far used in all my apps, but isn't quite coherent (e.g. I've only recently added a window class, even though this is a basic thing, and I still have no uniform policy for handling controls). My belief is that instead of using a ready-made framework such as PowerPlant, I'll learn much better the concepts involved when implementing them on my own. Even if in the end (that is, when I do real applications) I'll use PowerPlant/MacZoop/whatever, I think my experience will still be beneficial
2) when the project gets to a stable state (most likely when it'll be handed in to the IB) I plan to release the source code under the GPL (GNU General Public License, it basically says that you can do whatever you want with the source code, including modify it and redistribute it for money, but the source code and modifications must be available upon request. It's the license that Linux is distributed under). This is because I admire the power that the open source community has shown so far (the uninitiated should read The Cathedral and the Bazaar, a seminal paper on the subject). And if I'm lucky I'll learn something new, and besides, it's good to attempt to give back something to the community.
Sonar: a web based discussion board. This is actually a project for the Info Tech class, but since it involves programming (with Perl, I'm finally learning the language) it's also relevant here. Right now I have the basic functionality implemented (a threaded view of posts, reading of messages, and posting), and I'll be polishing it until the end of the quarter (when I'll most likely have to move on to another project, but I'll try to make sure that it also involves Perl, so that I can keep learning it). In any case, since this is a web-based program, it can be tested anywhere. The address is:
The long term plans for the source base of Sonar involve turning it into a bug tracking system (I've found several ones with source code on the net, but all of them require root (administrator) access on the server, which I don't have). This actually explains why it's called Sonar: Apple's bug tracking system is called Radar, and Sonar is a word in the same vein.