Tag Archives: Alarm

Biding Time

Until President Obama waves his hand and magically fixes the economy so I can find a job, I’ve been biding my time with several projects as usual. As mentioned in my post a couple months ago, I expected to complete a major overhaul of the content system by the end of last year and amazingly actually did so. I felt like the content pages were too bulky with the varying number of images and description lengths, and it didn’t look very clean. So I crafted a custom vertical tabview to organize the information into specific tabs for description, images (dynamically loaded with AJAX), changelog, and downloads (also AJAX). The default tab, called “Vitals”, is a combination of the other tabs, showing general information, a shortened description, one image, and the number of total downloads. The succinctness of the vitals tab helps keep the tabview height down and thus all the items on the page look uniform.

Of course, it all looks rather well until you go to test in Internet Explorer. Despite my attempts to keep everything within standards, IE6 still has issues such as flickering tab button background images and the always enjoyable broken box model. However, IE7 isn’t without its problems either and the tabviews seem to adversely affect my fixed positioning hack from last post.

I’ve also been redoing parts of the site to use more CSS and less inline formatting. Most of the web seems to be in love with CSS to the point that they blindly use only CSS, but I tend to be more pragmatic about it. Certainly, CSS is useful for centralizing style information that is to be used repeatedly or as part of an overarching theme. But the CSS standard is not quite complete enough to handle everything a developer might want to do. I frequently need a property that tells an element to be springy (i.e. fills up the remaining height or width of its parent), but there exists no such property in CSS2. A trick that I like to do with (100% height) tables is to use them to keep something vertically centered in a page or at the bottom of a window but able to expand. CSS has no way to do these things; its vertical-align property only works on inline elements (and don’t get me started on margin hacks). So I think I’ve made my point: it’s a good start, but it’s not there yet. (Plus: IE6. So even if it were there, we still couldn’t use it.)

But I haven’t just been diddling web development lately; I’ve also been back at VB.Net to release a public beta of my much slaved over alarm program cleverly named “Snake’s Alarm”. Not much has changed since I last worked on it in earnest in August 2007. I finally fixed any instability with the FMOD system playing two alarm sounds concurrently by just preventing it from doing so, figuring there wasn’t much use for two overlapping sounds playing. I have also perfected the snooze feature by adding options to control the max amount of snooze time allowed and to turn off the monitor when snoozing. There’s still a lot left in the TODO file, but this version is still completely functional and reliable.

In hardware news, I recently replaced my Radeon 9600XT with a GeForce 7300GT as a stopgap upgrade until I can finally afford a new system. It was seriously the best AGP nVidia card I could get on Newegg–they’re going like hot-cakes (whatever the hell that means). I had my eye on a 7600GS until it sold out when I went to buy. Now the 7300GT that I got is already sold out. I wrote a lengthy review on Newegg for the video card about a week before it sold out (albeit one person labeled it as helpful before then) that I’m going to republish below.

Pros: I haven’ t done a lot of benchmarks, but it looks to be about 60-120% faster than the Radeon 9600XT it replaced, depending on the game or benchmark of course. I chose to switch to nVidia because this card supposedly runs cooler and with less power than ATI’s final AGP offerings (and to prevent fanboy-ism). My tests with RivaTuner show the core runs a bit hot at idle (~116°F), but it only creeps up marginally in most games (~140°F). Video stress tests put it at about 166°F. Overall, the 7300GT’s performance is only somewhat noticeably better in most newer games compared to its predecessor.

Read More…

What’s silly is that I’ve mostly been playing Diablo 2 (an eight year old game) since getting this new video card. I convinced Kaylen to play it with me, being that it would run on just about any computer and she was in exile over winter break. Though it seems I got her hooked since we played all the way through with my Paladin and her Sorceress. Since the first completion, I’ve been poking around in the game’s data files for any changes I can make to perceived flaws.

My biggest complaint about Diablo 2 has always been that you level too frequently at the beginning and hardly ever later on. I did a huge spreadsheet with player experience, monster level, and level-to-area calculations trying to come up with the best solution for a balanced and steady leveling system. One of the most telling graphs of this data is at right, showing the percentage increase in experience needed to get to the next level compared to the last level. In vanilla Diablo 2, after level 11, the player needs 25% more experience to get to each subsequent level, which can lengthen the process significantly as one approaches level 27, where the experience difference levels out at a more respectable 9%. I created a modification to the leveling system that merely smooths out the experience difference from level 5 to 30 and balances the resultant increased difficulty by lowering monster stats according to how far behind in levels the player is.

I’m not sure if it’s all as complicated as it sounds, but when I finally release the mod, I’ll be sure to include the spreadsheet for others to marvel at. I’ve also done a number of smaller mods and have already uploaded three such mods as of this post. One fixes the ever-annoying game font where the 5’s look like 6’s–a huge confusion when looking at item stats. More will follow as soon as they’re thoroughly tested in our new Barbarian and Assassin game. 😛

Posted in Benchmarking, Hardware, Modding, Programming, Website | Tagged , , | Leave a comment

Links and Alarm


First of all, you may notice that there is actually a link for the “Links” item in the nav. Over the past few days, I’ve been designing, coding, and adding the links themselves for this new links system. The building process was pretty similar to all the systems I’ve done so far, especially the Photo Album. I design the page in HTML first, so I can preview how tables and such will look and debug browser compatibility locally. Then I take this HTML page and convert it to server-side form, quantifying item HTML blocks with PHP loops and adding the necessary SQL queries. Somewhere in there, I create the database tables and start adding in records. This is pretty much how every system was built.

The links system is seemingly the most simple system I’ve built so far, but it’s actually a bit more complex. For one, the category (directory) hierarchy is not linked through paths like the Photo Album, but is linked by item IDs and parent category IDs (a tree). This makes sense because the category hierarchy is logical here, instead of being based on physical paths with the Photo Album. The advantage of this method is that items (links and categories alike) are not dependent on a whole chain of parent categories but merely the parent ID. This makes moving items, renaming items, and the MySQL queries easier. The disadvantage being that mapping the category paths is a recursive nightmare.

Another complex part of the links system is the feature that checks link status–whether or not the URL of the link is working. I’ve set it up so that every Friday morning (or when I run it manually), a script will request every link URL in the database. It then takes the HTTP response code from the requests and puts them into the database (this will appear as a popup tip for the link status), decrypting them into a brief OK, MOVED, or BROKEN status that appears for each link on the page. This seems to be working quite bitchin so far, except that FilePlanet always returns 403 Forbidden. I suspect that they filter out non-supported browsers through their default index this way.

Except for any bug-fixes that may pop up, the new links system is done. I’d recommend you comb through the more than fifty links already there; you may find something useful.

Snake’s Alarm

I put some more work into my alarm program before getting involved with the links business. Mainly, I’ve been working on improving the stability of the sound system. Luckily, FMOD handles all of the low-level loading, decoding, and outputting stuff for me, but I still have to implement when, what, and how it does its job. My original implementation of FMOD would crash whenever you tried to play two sounds at once. Because I didn’t want FMOD to hold onto some sound resources when alarms aren’t being played, it didn’t initialize until an alarm went off. Thus if two alarms happen to overlap, the second will indeed try to reinitialize the system, crashing it in the process.

I solved this problem by making a simple sound system stack. When the first sound is pushed onto the stack, the system initializes. When the last sound is popped, it closes. This fixes the problem with multiple sounds playing, but now I’m working on a problem when sounds end. I’ve traced this back to the fact that each sound alarm gets its own thread. My next big challenge will be bringing the different alarm threads together into one big sound system thread (with the stack). Easier said than done, but I will prevail!

I was also going to talk about my current gaming trends in this post, but I’ll save that for another time. In the meantime, here’s a rare picture of Kaylen and I out in the sun. Oh noes!

Kaylen and I catching some much-needed rays on the beach at Kiptopeke State Park.

Posted in Programming, Website | Tagged | Leave a comment

Stalker and Alarm Progress

A couple weeks ago, I started playing Stalker again to see if I could get into it. It’s a bit more palatable with the right assortment of mods but still buggy and not realizing its full potential. Although I’m not experiencing as many locks and crashes during play (since cleaning the computer out), I still get some crashes when loading games or exiting. I also started getting weird input hangs similar to the ones Titan Quest had. Fortunately, the fix was the same; just set the game to below normal priority in Task Manager. I think the problem is caused by a combination of my system and current game technologies and practices, as not all games have the same troubles.

But as I just mentioned, I had to use mods to plug up some of the gameplay holes in Stalker. Actually, I even did a small mod of my own. I found the hunger and starvation aspect of the game to be made an annoyance by the too-frequent need of opening your inventory and double-clicking some food. This gave me an excuse to write a program that can change the necessary hunger variables of an oft-modded game file without overwriting any previous modifications. Probably overkill for such a simple thing, but it’s still a lot more convenient. You can download it from here or a really awesome site for Stalker mods, FileFront. Additionally, I compiled a list earlier of all the game aspects that I thought needed improvement and have mods available to fix them:

  • lowered respawn-makes things repopulate the world less quickly (but apparently some areas continually respawn specific stalkers/creatures, like the industrial region on the way to Yantar). i haven’t actually found a mod to do this one yet, but information on how to can be found at this thread.
  • A-Life-allows the stalkers to move around more, improving the atmosphere by creating unique encounters
  • weather overhaul-you shouldn’t be able to not distinguish between night and day
  • remove annoying sounds like the nightvision loop or the npcs that repeat one phrase over and over
  • non-degrading armor-because it sucks having to throw away good armor that got trashed, unless you have…
  • repair mod-allowing you to keep your weapons (and armor) from getting worn out and jamming
  • detectors-locates anomalies and marks them on your minimap, so you don’t have to spend so much time later in the game watching for anomally effects
  • more realistic location damage-because a headshot should always drop um
  • extended loot mod-puts a wider range of goodies on bodies
  • increased weight limit-because it sucks only carrying around a couple large guns (albeit more realistic). i prefer a 150/200kg limit.
  • increased or no time limit on quests-it’s too difficult getting back in the same day to complete quests. i’d rather just wander around freely and choose when i want to do a quest.
  • increased flash light range-the original flashlight feels unrealistically short-range
  • real-world weapon names-i’m tired of games pussing out and making up weapon names (like CS does and then you have to mod every time an update comes out).
  • mp5/sawed-off/aksmu fitting in the pistol weapon slot-it’s pretty useless only having weak pistols in that slot all the time.
  • decreased stalker vision and perception-too much terminator vision going on here, and it’s hard to sneak up on them.

June 2007 build

But I haven’t just been loafing around playing games all month. I’ve also made a lot of progress on my alarm program (cleverly named “Snake’s Alarm”), and a closed beta is in sight. I’m fairly certain that I’ve located the reliability bug that existed in earlier beta versions and have thus fixed it. There have been numerous other bug-fixes and changes, but also a lot of additions, such as: handling standby to either wake up the computer for an alarm or keep it awake for alarms; program settings are finally available with about ten useful user preferences; systray popups and message box actions available; multiple sound files for sound alarms; and integrated help documentation.

I just remembered that I also added a new feature to the image viewer pages here. It’s another little icon next to the “Break out of frames” one that will toggle between original image size and a size that will fit in the window. PHP finds a ratio of width to height for the image and then Javascript is used to find the window dimension and size the image according to the ratio. And because it’s just a ratio, you can resize the window to any dimension and it still works. Very nifty.

I also did a little work on a mod of Baryonyx’s Extended World CTW mod for Rise of Nations to make it an “Imperial” CTW. That is, only Gunpowder and Enlightenment age are available. I redid a few scenario scripts and was working on a new field battle scenario with large numbers of troops, moving in groups so they attack in lines. I’m not sure when I’ll finish this–maybe after I’m done with Stalker. Or the next time I spend a week at Kaylen‘s place with only my laptop.

Posted in Gaming, Modding, Website | Tagged , | Leave a comment

Things and Stuff

This is going to be a rather random post–just a list of some of the cooler things I’ve been up to. I’ve been noticing how this feels more and more like a blog, but I do try to keep the personal details out of it. I don’t think anyone (maybe Kaylen) cares what I had for dinner last night (Pork Lo Mein), what I last watched on TV (CNN), or when I stumbled out of bed today (3PM).

Since the spring semester of college was over a couple weeks ago (one A, two B’s, and a C), Kaylen and I finally got a chance to go camping. Her school, UVA, is only 30 minutes from the lovely Shenandoah National Park, so we went there and stayed at a centrally-located campground called Lewis Mountain. It was a decent campground (well-maintained), albeit pricey (want a 10 minute shower? 2 bucks). It was surprisingly popular, too; most days there were almost no free spots by the evening. I enjoyed making fires and gathering firewood so we could cook the food, but the low abundance of good wood meant short-lived fires. The second day, we went hiking on a trail called White Oak Canyon, but alas we turned around not far from the actual falls and only saw cascades; we’ll be sure to carry trail maps in the future. I’ve uploaded most of the pictures we took (including some impressive panoramas) to the photo album in this directory.


I said "Don't you like popsicles?"

When we got back home, I uncovered a set of popsicle makers in the basement. Kaylen and I had much fun trying out different frozen snacks such as Dr. Pepper, Code Red, apple juice, orange juice, pudding, and raspberry snowcone syrup. The only problem is the amount of water in the substances. Many of the drinks just have too much water; causing mostly ice crystals and little flavor. So we tried experimenting with reducing the water by heating the beverage on the stove; it works perfectly for sodas. About half syrup and half water is the best blend. Delicious.

With my new time off, I’ve been back to work on several things, of course. I dabbled with the code to my as-of-yet-unreleased alarm program some a few days ago, mainly touching on a few bugs and missing features (buttons that go to nowhere). It’s been a little hard going back to it since I haven’t really looked at the code much since last summer (it’s a shame); I’m wishing now that I had commented the code more. But with any luck, I might be able to finally get the few kinks out of it and release it publicly, maybe even to some download sites. The reason I only gave it out to a select few beta testers previously is that it was proving to be unreliable in a few rare instances, and an alarm that’s unreliable is no good.

But for the last few days, I’ve been putting together a new column on PC air cooling. I took some logs from MBM and turned the data into some pretty graphs in Excel and then analyzed the results. It’s mostly just neat to see how the temperatures interact to certain events, as my conclusions are pretty obvious for any computer professional. You can find it here.

As for entertainment, I’ve been getting back into Rise of Nations after being disappointed with Stalker’s linear, buggy gameplay. I finally finished Alexander the Great’s campaign for the first time and now I’ve moved on to a mod version of the Entire World (Baryonyx’s Extended mod). This could be good news for anyone still playing RoN as I may get into making some more scripts and improvements to my ScriptMaker, as well as finally releasing my map pack mod.

I’ve also been having some fun with the new Sam & Max season. I tried playing some adventure games before, but just couldn’t get into all the walking around and trying every combination of things to progress the story. With Sam & Max, either the puzzles are easier than they used to be or I’m just more intelligent enough to figure them out now. Either way, it’s an amusing little game that I can’t get enough of.

Posted in Gaming, Miscellaneous, Modding | Tagged , , , | Leave a comment

Alarm Status and Ti83plus Game

Nothing really to report on any previously mentioned projects. I haven’t really had time to delve into my alarm too much since I got it running stably several weeks ago. It hasn’t failed any in the last month, not even from human error (which I tried to minimize the possibility of). Still, it needs a few more features, options, and documentation-type stuff before I feel like it can be released for a public beta. (If you beta test it and give useful feedback, I will put you in the program credits; so there’s all the incentive I can give.)

Also of interest is a game for the TI-83 plus line of calculators that I’ve been programming between classes. I’m actually making it based on code for another game, found here. It’s an RPG with 10 areas (or floors, albeit they all look the same), randomized loot, XP and character development, spells (sorta), and a combat system.

I’m redoing practically everything (or planning on it). The maps are no longer static: every map is loaded from a simplified storage program into a matrix for easy X,Y coordinate access through a grid subroutine which can turn any coord into a graphic block. There will be a new enemy type which uses spells. And spells will be totally revamped. In the original game, you could only get spells by having them as enchantments on items. In my remake, you’ll get to upgrade your spells when you level (the mage class gets more points to distribute) and choose from a larger selection like curses, healing, lightning damage, fire damage, damage reflection, etc. There will also be skills like knockdown, disarm, leech mana, steal life (vampire), and more. Obviously, to permit all these new combat features, the fight system will have to be augmented and enemies given very basic AI.

There’s tons of other features that I’m conceptualizing as well, but the only part well underway is the new map system. Programming on the calculator is difficult, though. For one thing, all variables and data structures are global. 😕 The editor has only 7 lines and no indenting. And debugging consists of programmer breaks and printing out variable values. It’s an interesting break from the norm, though. Here’s a screenshot from the new map system. You can compare it to one from the aforementioned link.


Posted in Gaming, Programming | Tagged , , | Leave a comment

Time for an update.

As school is a real bitch for me this semester (OS, Stats, Databases, Assembler, etc.), time for personal projects is at a minimum. Still, I’ve got a few things complete or in progress. The Columns are all up–or at least the ones since 2001. I’m still noticing some issues with search engines not updating the paths to them, though. But most users seem to be able to find the correct item from the simple, new navigation frame.

I also took a few days to learn some Flash “ActionScript” and coded a scrolling logo banner animation. It picks a random logo file, loads it, and moves the view around the image while tweening blur and opacity. The blur effect takes a bit of processing though, so the animation settles down after a few minutes. I’m not sure if it will be permanent, but hell, it’s still rather bitchin.

I’m also working on a new program in VB.Net. It’s the alarm to end all alarms. You can set up multilple alarms of varying types (timer, daily, one-time, weekdays, etc.) with any action you’ve defined. The actions (sound, strobe, command) are setup separately so that multiple alarms can use the same action. The time monitoring routine runs in a separate, higher-priority thread from the editor windows; it uses an intelligent sleep system to minimize polling (and thus CPU usage) when alarms are far into the future. I’m also using the FMOD Soundsystem to play various sound formats, unlike with Dark, which could only use WAVs with its pure DirectSound implementation. My alarm app is nearing a public release soon. It should be the perfect wake-up call for anyone that sleeps in the same room as their computer (i.e. college students).

Posted in Academics, Programming, Website | Tagged | Leave a comment