Saturday, July 30, 2005
Well, fine relative to the rest of the problems.
The CD-ROM tended to lock up Windows when auto-play is struggling to burp up. Mouse clicks kept registering strangely so that it thought the button was held down (maybe an accessibility thing?). The keyboard's control key did not want to do anything. I had to practically use all my physical prowess to get CTRL+ESC to work. Sheesh. I could not find the right driver for the Number Nine Revolution 4 video card in there and that ended up killing it for me. After trying several drivers and having Windows lock up consistently on shut down (booting was always fine) I decided this was not for me.
Then I also realized Windows 98 probably didn't have an Event Log, which I am already coding for. Oops.
So I'm back to XP, but I don't mind so much. I need to find a replacement computer and make up for the 3+ hours I wasted.
alfred, let's go shopping
If you want to send email to a bunch of people, just fork it! I was surprised that this domain name (forkemail.com) was available (forkmail.com is not). So the concept is you can fork your email, but creating a fork list (got forklist.com too, ha!).
I had come up with a huge brainstormed list of names which couldn't fit in the survey thing I had found to take votes. So I stepped back and spent a lot of time playing out words with Dictionary.com as my reference. Here's the names that were left on my brainstorm list (I removed a bunch):
NeatPost (got neatpost.com)
ForkEmail (got forkemail.com)
NeatList (got neatlist.com)
ForkList (got forklist.com)
ForkEmail.com might not've been the best in everyone's mind, but I took to it immediately and it filled me with a charge of inspiration. Suddenly it was fork this and fork that, and god dammit I just want this forking thing to work. It sticks to my ideals. Corporate creeps might not like it, but it'll fit for the tight-nit groups of friends and customers. It's short, easy to remember, and doesn't twist your tongue to say. The one thing it doesn't have is a link to Otechski, but that's alright with me.
You'll notice I almost used NeatPost and NeatList, and I actually bought the domain names. I liked those names too (short, sweet, and neat), but they weren't self-describing in the least. You could use either of those for a huge range of products, not just email. I have them both for a year, maybe something will happen with them, or someone else wants them!
there are some who call me ... tim
I'm not actually in a lab, or even another office building. My ass is firmly planted in our round chair (I forget the name of these things) which I have transplanted to the bedroom. Here we have a mobile air condition (read: a big lump with small wheels at the bottom), a ceiling fan, and an oscillating floor fan on high. To be fair, you can't hear the ceiling fan unless the other devices are off and the streets are empty of vehicles (midnight to 5:00am).
Okay so none of this has any bearing on the List Server, I just wanted a nice setup. You see, it is very hot outside ... to me. That means there are people with their shirts off or in skimpy clothes out wandering around and enjoying what they consider to be "good weather". I enjoy the sun, but when I get too hot (and sweat) just by standing still then it is too hot in my book. That book, incidentally, is looking for a lucrative publishing deal if you are interested.
I spent way too much time today looking for my copy of Windows 98 Second Edition, only to find I couldn't find it. Yah, ha ha, very funny. I could've spent that time plunging into MSDN's subscriber downloads, which is what I resorted to. That reminds me, I need to complain about their stupid navigation tree. I can't believe the ISO was 640mb! That's crazy; I mean Windows 95 you could fully install in under 50mb. What the hell happened with Win98 SE?!
Suffice to say it was not instant gratification with MSDN. Even at a rate of 150k a second, the flitty "Time Remaining" indicated I'd be waiting for quite some time, maybe even an hour! I say maybe, because it changed its mind every 200 milliseconds or so. That's the best denomination I could come up with. What programmer thought it'd be a good idea to update a value representing expectation that fast? "Sorry honey, we can't leave until I know if this is going to take 40 minutes or an hour 5. It just keeps changing." Damn man, just leave it at the high end of the curve and let me be pleasantly surprised if it finishes early.
Anyway (can you tell I haven't gotten any real work done yet?), I decided to wander over to Staples to look for a little laptop lock like Cowherd has so I could work in a public place and use the restroom. My portable catheter+bedpan needs cleaning you see. They had nothing of this sort except a combination lock and it's all I need to remember some other password so I passed. They did however have the most beautiful hard-bound notebook I have ever seen. Clean, smooth, sturdy 150 physical pages (300 total, front and back) with razor sharp page numbering in the far left corners. It was one of those "Record" books for accounting, but I imagined plotting so much more than money in it. I must've picked it up and put it down half a dozen times. My finger prints are smudged all over it and I can only hope it's never involved in some kind of crime. Logic and frugality finally won out when I decided it was too bulky to be carried everywhere and at $35, it wouldn't be used to the full extent of its potential (here I shed a tear).
I did buy a neat stencil with shapes I told myself I'd use for flow charting (ha ha ha ha), a flip-top notebook with tear-out pages and standard binder holes, and finally a couple of twin-pocket portfolios with binder clasps to store all of these random papers I have floating around about the List Server.
I went to Starbucks there, a crowded little building in the middle of the pavement inferno.
I sat for a while and pondered my next move. Where the heck could I work from?
Finally, I came back here and created this office for myself. Hmm, cave more like it, but it suits me.
Now maybe I can actually get some work done. I'm comfortably tempered, I have music, WiFi, all the water I can drink, and the ability to piss myself silly without worrying about my equipment (my laptop you sicko, not the other equipment).
this one you can blame on the dog
Friday, July 29, 2005
I still joined the fellowship this morning, but much later.
Thursday, July 28, 2005
Some companies we visited but are not pictured: Borland, Symantec, Mcafee. Our efforts to find Adobe were hilarious. I'm going to let Kopp tell that story though.
Last week I decided to take a new approach with the spec process. It is my own abbreviated version of a spec that is not really a spec at all, but tackles the problem of having a clear path.
First, let me explain that I like to come up with my own designs of very specialized search trees, hash tables, linked lists, etc tailored to be highly efficient for the task at hand. This is a large part of what drives me and means that typically the applications or services that I write have very complex structures and algorithms. It is the structures I am pointing out here.
In order to quickly lay out my path while keeping as much drive as I could, I decided to start with a new angle to my coding instead. I created all of my memory structures, enumerations, defines and function definitions first. I guess stepping back, you could say that I almost completely flushed out my headers before starting in on the .cpp files.
How well did it work? It seemed to work fantastically. I feel like I have cut my development time in almost half, while only having to go back and correct a structure once.
Why? This is my perception: Normally, I define my structures as needed, and add the required members when I run across them. I think that most of the increased speed has come from the fact that I was not doing so much context switching. That is, I was not leaving my code to go over and add the newly created variable to a appropriate structure every few minutes. Every time I do this, I believe that I lose some time coming back to my code and figuring out where I was. It's not that it takes is much time to figure this out, but simply finding where you left off typing takes more time than if you never left.
Perhaps I'm just a bonehead and the only one that had not considered taking this direction. In any case, I have seen a marked improvement in both speed and organization. I plan on continuing to experiment in this area.
Wednesday, July 27, 2005
Yes, I know I've talked about this before. Today I'm speaking from the experience of working on the technical specification for the List Server, or SimpList or whatever I end up calling it. I used to have four processes, well I boiled one away and now there are three. It makes so much more sense now I don't know how I ever ended up with four (for the purposes they're intended to address). The process which is gone was called the "Processor". Yeah, having such a generic name is a red flag alone. Then I tried to explain it and differentiate it from the "Deliverer". Hmm, and how is that different again? Maybe it will bite me in the ass later, who knows. After chucking it, though, the road block was removed and I started grinding out the spec.
Keeping to my little schedule, even though some items can be thrown off now, I added 2 (two hours) next to time spent on the technical specification. It took me all of 30 seconds to open the laptop, open the schedule, change the numbers, save the file, and double-click the "build list server" short-cut. If it doesn't help in the long run at least it won't be taking any of my time either.
It's actually been well nigh an entire week since I last sat down at Starbucks. I didn't think I'd be able to get into the zone, but I did, even if it was only for two hours. That's two hours of progress, so it's all good.
Monday, July 25, 2005
one, two, three steps back and so many left to go
Thursday, July 21, 2005
The correct behavior is for the fat guy to target the nearest sandwich and go after it. He obviously doesn't do that. One of the problems is that the code is a mess and hard to debug. Hence my earlier post about starting a framework.
Today I worked on my framework and got the key parts finished. It's not perfect but it does perform the seeking behavior fairly well. Below is a movie I created to test the framework.
All you do is click the mouse to set a target and the little thingys will seek out the target. They will pass through the target and try to turn around to continually seek it out. Like flies that never land. :)
Each unit has a velocity, calculated in real time based on forces applied. They also have a rotational velocity. I basically calculate the angle between the units rotation (the direction its facing) and the target. I then set the rotational velocity to this angle clamped by the maximum rotational velocity.
This has the effect of rotating the unit toward the target. Then I calculate the velocity based on the distance to the target and the angle the unit is facing. This makes it behave like it can only move in the direction is facing forcing it to turn around.
Fairly basic but critical for getting this thing to work.
Wednesday, July 20, 2005
The way I see it, developing a video game taps into the creative side of your brain which has no trouble producing wonderful ideas. You could say this of any development project but I would say more so for games. Video games are a form of virtual reality; where there are no bounds placed on you so you are free to put whatever you want into it. This leaves many doors wide open and without some kind of game design spec to close some of those doors off and create some order, you are probably doomed to never finish.
I suffered from this fate early on. Call it a personal disapline problem which is partially why the Fellowship was formed. I made many grand plans with lots of ideas and sketches but if I would have spec'd it out from the beginning it would be obvious it would have taken too long to develop right away. I figured this out pretty late in the game when I decided to scale back.
So why write a spec now? Well, I might still argue that I don't need one but then I ask myself, if it's so clear in my head, it should not take any effort to produce the spec, right?
I like that NeilO came to the realization that he will miss his date if he keeps his feature set. I need to know this as well.
Also, I'm planning on writing another game following this one. Of course it will be even more ambitious and I really want to do it right.
Well, *ahem*, it was fairly surprising. Sure, I estimated on the conservative side, but I've also been dropping features like crazy. I got 132 hours of work to do, or 8.8 weeks if I am only doing 3 hours a day for 5 days a week (the current Starbucks way). By this schedule I could have something ready to use publicly by September 21st which is past my original thought of September 5th.
Ouch, that hurts
Tuesday, July 19, 2005
can't have more than 200 friends. must discard a friend. kmart sucks.
I spent the remaining 1.5 hours working on a way to dump ISAPI callback information. There are two reasons I need to dump the information:
- In an ISAPI filter, you are able to register for twelve different types of callbacks. With each of these, you have access to different information and different callback functions. In using Weblock, you will be able to set rules based on any of these. Since I currently don't know 100% what you have access to at what stages, a way to dump all of the information is ideal.
- ISAPI filters are a little bit of a pain to debug. If IIS is using the filter, you have to restart the iisadmin service before you can rebuild, then you have to find and attach to the correct process. Not really that bad, but when you have to do it time and time again, it can slow you down. In my experience, this can cause a drain on your mental process as it is monotonous. So, by having something that is constantly dumping this information to the debug stream I will be able to cut out some of the monotony.
As it turns out running this at work for just a few minutes has solved a problem that I was working on for many hours yesterday. It promises be a great help in the future.
Monday, July 18, 2005
This Week (07/18 - 07/22): Finish Schedule and User Guide
Next Week (07/25 - 07/29): Finished Advanced User Reference and Functional Specification
August (08/01 - 09/02): Develop and Test
First Monday of September (09/05): Release Public Trial
I won't really know the specifics of the development, until I write the schedule this week. It's going to be tough, because schedules are easier assumed than done.
A goal in the construction of most of the code I intend to reuse has been to make it as simple as possible to consume. If I don't have to think about using it at all, I am much more likely to use it. With that idea in mind, I cut out a lot of the functionality that I was considering. On wrapping up the class, you had the ability to make only a few function calls: Get(), Set(), Load(), Save() That seems easy enough. I allowed for the ability to specify a hierarchical path in the calls to Get() and Set(). This should give the ability to have a little organization.
At this point, I have a very simple way of dealing with settings. You don't even have to worry about the file path for the settings file. It is something that I will most likely use in many of my future projects. I have realized, unfortunately, that the weblock project will need something that I chose to leave out of this class. That is the ability to enumerate settings. I don't really want to start adding things and spoil the simplicity. Perhaps I will follow Neil's suggestion and make a complex version, then derive a simple one from that.
What could I have done to avoid realizing this upon completion? Perhaps a detailed and formalized written spec would have done that. I tend to avoid them because I feel they squash my creativity on a project. For me, the creativity is a major driving force that I'm not quite ready to give up. :)
So why didn't I show up this morning? I don't know why the alarm didn't go off. I've been using it for weeks now. I don't think I did anything wrong in setting it. *shrug* In any case I was not awakened by it at 4:30, but rather the sound of an alarm clock coming from the building across the street at 8:00.
Say what I will, the observers will only be convinced by action. I don't blame it at all.
Sunday, July 17, 2005
Friday, July 15, 2005
What I have done so far follows that pattern and it has been very successful in getting a lot of stuff out as you have seen here on the site. What I have identified, though, are a very clear set of classes I can go ahead and create to wrap some stuff up in a neater package.
I am going to fight the urge to build out a game whole framework. I am only going to make the classes for the code I have already written. Believe me, I came up with a million ideas on how to continue to embellish the classes with future functionality but I am going to keep it to its most basic form putting only what's necessary for this game.
Thursday, July 14, 2005
After copying files over to a directory in explorer, I had to hit refresh to see them, hit refresh to see a folder I created, and hit refresh to see the files disappear after I had moved them into that folder. One of those annoying bugs, but Cowherd had never seen it. Damn I'm a good tester and I don't even have to do anything weird.
I mainly worked with TextPad and WordPad since I had the code opened in the former and my specs opened in the latter. At one point I moved to one spec and hit CTRL+X to cut some text. A message box popped up that said "Access denied" and before I could click "OK", I got a blue screen of death. BSOD! BSOD! The laptop quickly restarted itself as if changing clothes after vomiting all over them. I love their thinking that we don't want to see error messages anymore, so if one happens just restart. Reminds me of the old Macs which would simply LOCK and die. No error, just lock and die.
Again, I am a good tester and I don't have to do anything abnormal. Beware the X Control Crash sequence!
The last two days I've just worked on the specs for the List Server. There's two specs that I'm going between: Functional and Technical. I'm writing the Functional as if it were end user documentation whereas the Technical will have all of the under carriage exposed. Both of them are equally tough and I'm no stellar writer, despite any reputation I might've earned from fluffy emails.
Joel on Software has some good things to say about writing functional specifications, but he doesn't cover the darkest areas of it. For example, getting started is the most difficult part and creating each new section is just like learning to ride your bike all over again. Oh sure, it's probably fine after you've written your umpteenth one, but on your first few its pulling teeth. The decision on how to lay it out, when do you describe what, just making it linear is very difficult. I think you shouldn't bother with making it consumable until you have something semi-organized. Otherwise you write yourself into a corner.
What helped me really get started, and maybe this will help others, is to start in with some general Scenarios, Nongoals (Future Features), and then a Terms section. The Scenarios expose the parts of your features which people will be interested in and you can narrow down your focus by adding things that pop into your head to the Nongoals. Finally, you've got this jumbled storm cloud in your mind of how it all works based on all the features you cut out. Now, start writing out Terms. I thought there'd only be a few with the List Server, and I'm up to over 20.
For each Term you want to give it a short description and an example. I wouldn't really care which order these came in, but I'm starting with the description. Even mundane things, someone will get confused about if you don't explain it. If your explanation is more than a sentence, it might be too long. Usually even the most complex ones can be heaved into a light sentence and then followed with an example sentence that clicks it into place for anyone reading it. As Joel has mentioned, keep the messy details elsewhere.
For myself, I want the user documentation to be readable by my Mom. The ultra non-computer-user. She will use a computer for the bare basics and has no interest in learning anything more about it. She does use email and so if I can communicate my project to her, then I can pretty much explain it to anyone. My initial target audience is for fun (the ol' gamers list) and I want any non-technical person with basic email skills to be able to use it.
There are some bugs obviously but NeilO says I should post it anyway! So here it is.
- Created the first creep: the fat man. A random number of them are generated (will be flexible by level) and they currently pick a random direction and walk that way.
- Consolidated duplicated movement code
- Fat man wanders to the wall and stops or continues beyond the border.
- Fat man does not always face the same direction as he is walking.
- Firing is now broken
- Fat man does not consume sandwiches
- Fat man needs to locate nearest sandwich and head that direction
- Occasionally, player down movement stops responding
Wednesday, July 13, 2005
Arrived at 5:00AM sharp today. As I stepped from my car I did my usual look through the Starbucks window to see who's here and !!! someone was sitting in my chair! I think the girls behind the counter forgot to let folks know that the chair on the north side is my chair. I proceeded to have a seat in the south chair that Critter-Tigger usually sits in. It's not quite as comfortable but it's also close to the outlet. I rearrange the pillows, pounded them into shape and managed to get comfortable. Maybe I'll sit here from now on!
I got about an hours worth of solid work on the game. I did a lot of clean up and polishing. All things considered, I'm pretty happy with today's result.
- Fixed the NaN score problem
- Created animated score when sandwich is picked up
- Levels increment and reset properly
- Made some color changes for a more retro look
Tuesday, July 12, 2005
Typically you have an embed tag with a src= just like an image. I have all the swf files on my ftp server at www.chriscowherd.com but that path was stripped off all of them. I put it back on and now its all working again.
Move FW with the W,S,A and D keys.
You can also click and move the mouse around to shoot in the direction of the mouse. When you get a sandwich, your score will go from zero to NaN. I have a bug.
I want the game to have a retro feel so it is very blocky. It also frees me from concentrating on detailed artwork :) No wonder retro is so cool.
Note: you may have to click inside the movie so it will capture your keyboard presses.
Monday, July 11, 2005
Joel says you must have source control and a one-step build process, so I also killed both of those on Saturday. After complaining, as I am wont to do, about the lack of decent software in this area Cowherd joked, "I just zip everything up each day, that's my source control!" Really, he's right. The organization of my source tree would only serve as an additional mole hill and we can upload the ZIP's to our web server for central, safe keeping. The minimal amount of software and thought required to create daily archives make them ideal for our one-man-in-the-boat crews. So, I made a nifty little CMD script which I run to create a dated ZIP (YYYY-MM-DD.BB-ListServer.zip) with an increment minor build number (BB) that goes up to 20. Another small tid bit of progress to make me happy.
Anyway, getting back to today, I went through some user scenarios in writing. Then I started thinking about simply how one would go about starting a list, assuming you wanted to use this product. So, I ran through a website wizard in a doc to create the flow of setup and it helped to nail down the feature set in general. If you can't explain the jist of the product's capabilities when a user is configuring them for the first time, maybe they're best left "advanced" and pushed off to a later release. This is exactly what I ended up doing.
It's very sad to see so many features go. You believe the product you're making to be a very simple thing, and its full of small demons. As you're going along you realize that in order to fulfill its destiny in a timely manner, you really need to cut down to the bone. That said, I need to make the skeleton fit in its closet before I attach any more flesh. And if I want to make this thing extremely fit and self-preserving, then any extra feature is going to be that many more things to make sure are kept under control.
How do I end up writing so much about so little?
On to the weblock project. Part of the reason I have been working on the helper libraries is that I have been putting something off. I need to clearly define *exactly* where I plan to be by the end of the summer and map it all out. I've been trying to give a little thought to the feature set and goals while working on things that I know I'll need. I think that as soon as I am able to wrap up this section, that is my next task.
I'm not convinced that I 'll be able to make much progress in the next 35 minutes before we need to leave, but we'll see what happens.
Saturday, July 09, 2005
I arrived at Starbucks at 6:03 AM and quickly went to work illustrating. I carefully crafted each piece so that they could be separate symbols which makes for easier animation. The first Flash movie below shows the results. It's a little big (450K) so you may have to wait for it. The goofy things at the left are shoes I was experimenting with. You can see the scanned sketch in the background.
When I got home I started on the walk cycle you see below. By using all the parts, I could re-assemble the FW in different positions easily. I looked up a tutorial for the classic walk cycle because as you have seen, I just can't get it right from memory. This one looks much better and is very usable after adding a couple more in-between frames to smooth it out. The second movie below is the resulting walk cycle with some scenery thrown in.
Friday, July 08, 2005
Yesterday I got some work done, but I got hung up on a stupid problem for far longer than I should have. By moving some object statically to the class level, they were being created before COM was initialized, which happens in the constructor. Stupid mistake. What makes it stupid is that I have made it before.
I am currently working on a helper class for storing settings in an xml file. It uses the msxml object to do the parsing, but basically makes it much quicker and easier to deal with in C++.
I feel still need to spend a couple of days on my helper functions before I cut myself off. Basically since I've barely spent time on them.
I arrived at 5:22 AM. I thought Kopp would already be here but I don't think he's going to show. Neil already said ahead of time that he would not be here because of work.
Have you ever noticed how those Top Pot doughnuts stare at you when you order a coffee at Starbucks? How rude! I tried one today so I can ignore them from now on. Ugh! I feel like a pig. It was really tasty though. I bet Starbucks owns them.
I worked on keyboard control today. I had more trouble than I expected. This seems to be a common occurrence for me. I think it would be wise for me to just plan on having trouble and if I don't, well, that's a bonus.
I had also whipped up some cheesy flaming weenie animations to test out the control. I realized that I need to put some character into my character :) I wanted to explore what personality I wanted my main character to have so for the last 10 or 15 minutes I did a character sketch on some graph paper (of course) then scanned it in and drew it up in Flash. NeilO told me today that Flaming Weenie is definitely open to interpretation. I would like your comments.
Thursday, July 07, 2005
The next step is the Deliverer task itself, but I won't be getting to that tomorrow. I've got some serious deadlines creeping down my neck at my job job, and it's been tough distracting myself long enough to work on the List Server in the mornings. So I will be getting up rather early, but I'm going to go to my place of employment and try to get some things under control so I can sleep easier and relax enough to spend some mental power on the List Server.
Even getting this far into our projects has been kinda tough. I mentioned my professional employment intruding itself, but there are many distractions. One of them I encounter a lot is the need for a simple, decent tool will present itself and I will scamper off to try and "do it really quick and get back". Well, this is where I become the Hare and a Tortoise manages to beat me to the finish line, because I'm dilly dallying all about.
For instance, I've just been writing my bugs to a WordPad (RTF) document and started to think about developing a "very simple" bug tracker. Or, the need for synchronizing files with our FTP server (which was already a project). Or the need for a decent source control application. No, I have to steer clear of these little things. Kopp finds the same irritation in helper libraries which he can gleefully and endlessly battle without ever really getting back to a core project.
Perfectionism is another distraction. You'll see an existing project which does the same thing and you'll use that as your bar for quality. Instead of simply meeting your own bar, you will try to exceed theirs and be disappointed when it begins to drag out, and eventually give up. This is where you need your own ghost racer, like in Mario Kart. You need to finish your project based on your intentions. Once you've finished, you've set a bar you know you can meet, because you established it. Then you just keep beating your ghost to make progress and reach the level of quality required for heavy duty competition.
I always liked racing with Bowser, but I think I'm actually more like Toad. I get easily excited and up to speed on something, but I tend to turn too sharply and fall off or even get bumped off by other people.
Following the mouse is pretty easy:
rotation = Math.atan2(_ymouse - mc._y, _xmouse - mc._x) * 180 / Math.PI;
The problem is I was doing it with a nested movie clip and got all hung up on local / global coordinates. I won't go into details but let it be known I was pretty irritated with myself for not getting as far as I expected.
As you can see, it does not behave as I have described. I wasted too much time just getting the rotation correct. Oh well.
Wednesday, July 06, 2005
After he left I reviewed my code, but then spent a bunch of time answering his questions in a written document for reference. I might've gotten to coding after that, but I had to pee.
Here's a big part of multiple people meeting that you might never think about. If someone has to use the restroom, you can simply watch their stuff while they do it. If you're alone, and in a public place like this, you have no other choice besides packing up and taking all your stuff in there. When you come out you can unpack and try to continue where you left off, but you've really chopped the head off of any momentum you'd built up.
So, when I came out of the bathroom with my backpack on my back, I simply left. I told myself I'd write in the blog and then look for some more source/version control software and perhaps install VSS on my laptop. Upon arriving at the office, however, I made the mistake of checking my mail (which was left open) and answering an item. Soon I was knee deep in migration muck and other management issues. Dear friggin' god, it's now almost 9:00am and I didn't do crap on my own thing this morning. How lame is that?
I tried My Screen Recorder on my laptop which worked well besides the fact that it generated a massive AVI file. You can have it use other compressors, but I'm thinking DivX might suck up the battery pretty quick. It was fun to use and I'll probably use it going forward to have visual documentation of my progressive (which is much more interesting than reading these posts), despite the fact the trial leaves a huge message on every frame. I can live with that so I don't have to pay 30 bucks!
Tuesday, July 05, 2005
Monday, July 04, 2005
When I left things I was working on a library of helper functions for working with ISAPI filters. I need to be careful in doing this, as it is very easy to spend more time on the support functions than the actual project. I think that I have done exceptionally well in the past year with making the decisions on where to draw the line, and actually reusing the libraries I spend time on. I will probably make at least one more ISAPI filter within the next year, so I feel justified in at least a little time on this.
The place I need to be careful is in my optimizations. I tend to get so very focused on the way that memory is used or designing the perfect algorithm that I lose steam on the main project. I guess that I have high standards for myself. I like to be proud of my work and know that it was done with the highest level of craftsmanship I could provide. In the end, I still need to have some fruit come from my labor.
I have decided that I will spend three more days on this helper library before forcing myself to move on. If this means that I have to do some things the hard way then so be it. I will at least be working on them.
My goal for this last week was to finish a working prototype which would download and distribute mail to subscribers, the very basics. I did not meet this. I got the Downloader and Filer processes complete, but not the Processor or Deliverer. I did, however, complete a file/xml-based data system decent enough to proceed. In fact, I will probably use this system for the finished product as well, pending no horrid limitations.
Next week is four days and enough time to finish this prototype and install it on some server by Friday. I have a lot of computer parts floating around to build a lackluster server, but something to get the job done. So the coming Friday I plan on staying home to build the server and install the operating system ... Windows 98. The CPU I will be using is a 300mhz Pentium II, there is 128mb of memory, and a small hard drive. I just don't believe Windows XP will squeeze onto that. Besides, the machine merely needs to have scheduled tasks and run JScript 5.5.
We still have not found a decent source control (or version control depending on which terminology you prefer) system. Myself, I am looking for a particularly simple one which is accessed via the web (or even email) so I don't have to maintain a server. What it does need is a decent interface, side-by-side diff's, capability to download/archive an entire project, and multiple users. Cowherd is looking into Visual SourceSafe 2005 or, at the very least, VSS 6.0 with a web interface installed. I started signing up for SourceForge, but all projects there are available to the public via your choice of Open Source license.
The List Server will not be Open Source at release. If I do release the source, it will be as id did with Wolfenstein 3D and Doom: I'll open up previous stable versions while keeping the newest ones closed down.
Happy 4th everyone!