Everything in Particular

September 15, 2008

Speed Up Your Computer

Filed under: Technology — omatase @ 4:34 pm

This is a beginners guide to speeding up your computer. This is step one of the guide. For step one we will focus on hard drives. The slowest components in your computer are those with moving parts. This is why it is best to start here. The more RAM, faster CPU craze is something that even consumes some of the experts. The fact is though, that more RAM, faster CPU might not actually be what you need. Indeed spending money on these components might not do anything to speed up your computer at all!

This is the first in a series of articles designed to make it easy for you to know how to speed up your computer (pc or laptop) with the least amount of money or work.

How to know if you need a faster hard drive

Laptop Users:

Most laptops come with slow hard drives to help increase battery life. Although this is the case, putting in a faster hard drive is not likely to cause any battery life problems.

Step 1: What am I working with now?

Most laptops come with 5400 RPM hard drives and most PCs come with 7200 RPM drives. If this is the case for your computer and you are looking to speed up your computer and extend its life, you need to upgrade that to a faster drive. First, though, let’s check your current drive speed. Click: Start, All Programs, Accessories, System Tools, System Information. This should give you a screen that looks like the following:

System Information - Disks

System Information - Disks

Using the above image as your guide, expand Components, Storage then select Disks. On the right-hand pane you will see a description of your disk drive.  Write down the Model (In my case HTS721080G9AT00) and do a search for it on Google. This should bring up results that will give you specification information for your drive and tell you what speed it is. To find the speed look for the numbers 5400 or 7200 and the letters RPM. Drive speed is measured in many ways, the RPM specification shows you how fast the disk spins. Here are the specifications on newegg for my drive:

 

I have highlighted the RPM specification to make it stand out a little more for you.

Once you know your speed you know if an upgrade can help speed up your computer. This is the case if you are using a laptop and you have a 5400 RPM drive (or less) or if you are on a desktop and have a 7200 RPM drive (or less). Here are some links to some good drives that I can recommend to help speed up your computer.

All of these links are from a company called Newegg. I have been a Newegg customer since October of 2003 when they were first getting started. I cannot recommend any online retailer more highly which is why all of my product recommendations link to them.

These links are for some great hard drives focused at performance for your PC or laptop (ordered by most highly recommended) - Updated 09/2008:

Laptop (price range before shipping: $99.99 - $164.99):

Laptop Hard Drive #1

Laptop Hard Drive #2

Laptop Hard Drive #3

PC (price range before shipping :  ($149.99 - $294.99)

PC Hard Drive #1

PC Hard Drive #2

PC Hard Drive #3

June 23, 2008

Bulk / Batch Printing on a Network Attached Epson Dot Matrix Printer

Filed under: Development, Technology — omatase @ 9:49 am

I recently had the “opportunity” to learn first hand how to go attack the topic of batch printing against an Epson Dot Matrix Printer. I’m posting this here to document my woes and difficulties on this very bumpy road.

Defining the Problem

Why should batch printing be any different than single printing? There are a few simple reasons this is different:

  1. Running out of paper
  2. Paper jams
  3. Printer becomes paused

Basically the problem is, if you send 100 print jobs to the printer, you want some way of assuring the jobs actually completed. Imagine if you sent 100 print jobs to the printer and the printer runs out of paper at 50. If your application isn’t set up to do batch printing properly it will send the remaining 50 jobs to the printer even though the printer may have no way of receiving them. Whether it is capable of receiving these jobs is really a matter of the model and how much memory it has to queue up your jobs. The size of the print jobs is also a factor. So your application happily sends the remaining 50 jobs to the printer, how many ultimately print successfully when the paper is loaded? 20? If so what happens to the other 30 print jobs? How does the user even know that they didn’t print or which ones didn’t print?

Finding the Answer

Epson was exactly 0 help on this issue. There was no information online that even gives a hint of a clue of an inkling of where to even start looking. So, I emailed their support department. Here is the email I sent them:

I am writing an application that will print invoices to [a printer with model #LQ-2090]. One requirement of this application is for batch printing. I have a few questions about the support for batch printing with this printer:
1. If it runs out of paper while jobs are being sent to it, what is its behavior? Does it queue requests? What queue limitations (memory limit etc) does it have?
2. If #1 isn’t possible is there a programmatic way to query when the printer is out of paper or otherwise unable to print?
This email was sent originall on 06_05_2008. Since I was actively working on the application I couldn’t wait for their response. The chances it would take too long or that it wouldn’t be helpful were too great. So I did some researching of my own as well. Ultimately the answer came through my own research. I think Epson sent some response about how much memory was available on the printer and then said there was “no way” to ask the printer for a status. So just as I anticipated the response didn’t yield any information that would be helpful, in fact it was wrong about not being able to query the printer for a response. Their email also came several days after I wrapped up the project. I can’t find their response so I can’t say the date exactly but I want to say it took them something like 2 weeks to respond.

The Solution

Ultimately, as I said, I found the answer myself. I was coding along happily one day when one of my colleagues mentioned there was a web server built in to the network card we installed in the printer. Curious, I decided to check it out. It was from that web site that I got my first glimmer of hope. The printer supported SNMP and there were configuration items for setting up SNMP and SNMP traps Sweet! My first instinct was to do it all through traps. Surely the printer would send me a message saying “Please Load Paper” or something like that whenever there was an alert. So I pulled out my Trap Receiver application (iReasoning) and told the printer to send all traps to my desktop. With that all set up I simulated a few scenarios by forcing an out of paper situation, a paused situation and a jam situation. From across the room I could see my trap receiver filling up with traps. Excited I ran over to my computer to see what information the printer was sending me. My elation was premature and short lived. For a few minutes I compared the different traps I had received trying to notice differences. If I was sent the number 12398521 for instance whenever the printer was out of paper, I could just put those values in a config file and be done with it. What I found though over the course of a few minutes was that every trap was the same! What? It didn’t even matter if the trap was sent for a different reason, the data I recieved was exactly the same! Well, the same save for the fact that it was including in the trap an incrementing number. So the first trap sent 0, the second sent 1, the third 2 and so on. Well this is completely useless! If I want to know how many traps I have received I can count them myself! :). I have a little experience with SNMP traps but if this is a standard thing to do with traps this is a new one for me. Whenever I send a trap I include a human readable message letting someone (or some program) know what is going on. Ultimately I did figure out (I think) what these incrementing numbers were supposed to be telling me. More on that later though. Well, it was apparant that the SNMP traps weren’t going to be of any use. I could treat them like a toggle I guess, but how would I know to have the toggle on or off to begin with? How would I know if I got a message even if the printer was capable of continuing to print? This is not a solution I would except, so I decided to keep looking. The next place I began looking was google. I decided to do a search for something less specific, a search that didn’t include Epson or LQ2090. Doing that got me a hit that ultimately led to the answer. The hit I got was of someone asking how to use SNMP messages to get printer status information. While the article I found was for a different printer and didn’t have any information in it that was, in the end, directly usable getting the hint that SNMP messaging is a possible route I could go was invaluable.

From there it was more and more google searches that led me to this real gem (extreme sarcasm applied here): ftp://ftp.pwg.org/pub/pwg/pmp/mibs/rfc1759.txt. This my friends is rfc 1759. I recommend you look away, look away! Everytime I try to get any useful information from an RFC it always leaves me asking “WHY!?!”. Why on earth would someone write this, and how is it supposed to be useful? After a lot of searching I was finally able to find a guide that explains the RFC. This guide broke down the RFC terminology and explained what it meant, then gave the SNMP OID for each item. This guide, IMO should be the RFC. In any case, guide useful, RFC useLESS! *sigh* ok I feel better now.

As much as I have talked up the guide, it was also ultimately of no help :(. Although it did contain what I was searching for, I couldn’t find what I was looking for as a consequence of just not expecting what I was looking for to be called what it was called.

So how did I find the answer? Good old trial and error / brute force. I opened up my MIB browser app (also by iReasoning) and told it to hit the printer with every SNMP message possible by doing a walk on OID 0. This yielded hundreds of results, with after a little doing I was able to copy into a text file and save it. I did this 3 times: once when the printer had paper and was good to go, once when the printer was in an out-of-paper error state, and once when the printer was paused. I then took those 3 files and did a diff on them using KDiff (a very nice diffing tool). What I found is below (you will want to click to enlarge):

printer diff

The OID that is shown in this diff is the “printmib.prtAlert.prtAlertTable.prtAlertEntry.prtAlertDescription.1″ OID. While this seems like a very reasonable thing to call it I was still unable to find it through my searches either in google or in the above-mentioned guide. I was always searching for things like “printer status” or “out of paper”. In any case, this brute force method did give me all I needed to begin querying the printer for its current state and so I was basically done with my discovery session. I don’t know all of the unique alert descriptions that can be retrieved from this printer on this OID (I couldn’t find a list anywhere from epson even after I knew some items on the list) but here are those I have found: supply the paper, remove the paper, paused. Of course it is not unlikely for this to be different between printer manufacturers and models so you may have to do a bit of trial and error.

One Final Small Problem

One minor final thing I ran into was that the OID would change slightly upon each new alert. The first alert would show up under OID printmib.prtAlert.prtAlertTable.prtAlertEntry.prtAlertDescription.1.0, the second printmib.prtAlert.prtAlertTable.prtAlertEntry.prtAlertDescription.1.1 and so on up the number scale until the printer was power cycled. This gave me another “A-HA!” moment when I suddenly realized what those stupid traps I mentioned before were all about. The aforementioned printer RFC had some information in it indicating the printer could have multiple rows of alerts in a table in its MIB and that there needs to be some method by which one can return things like total number of alerts and current alert index via SNMP. I never figured out how to send an SNMP message to the printer to retrieve the current alert index (although the RFC seems to indicate it is possible), but I now realized the incrementing number in the traps was the alert index. I could then use that number to construct the correct OID for my SNMP message querying the printer for its alert status description! Pretty cool!

Now, For those of you who aren’t receiving or cannot programmatically receive traps from your printer another solution to this problem (and the one I ended up implementing) is to attempt to get the alert description at OID .0. If that fails (or returns an empty value), tell your SNMP client to do a GetNext(). If the GetNext returns a non-empty value that belongs to an OID that begins with “printmib.prtAlert.prtAlertTable.prtAlertEntry.prtAlertDescription.1″, then you are good to go. Here is some sample code that does that for your reference:

while (manager.LastError == 0 && returnedValue.OID.StartsWith(oid))

{

value = returnedValue.Value;

returnedValue = (SnmpObject)manager.GetNext();

}

When this loop completes “value” will have the “next”-most value for the OID we are targeting.

All Done

This marks the end of the material I set out to cover. Hopefully this will be useful to anyone trying to get a batch printing application off the ground. SNMP is universal so as long as your printer is network attached, even with vastly different features, the solution could likely be similar.

Comments and questions welcome, thanks!

January 24, 2008

Making Use of the Find, FindIndex or FindAll Methods With Generic Lists in C#

Filed under: Development — omatase @ 12:59 pm

I often find myself in a position where I have a collection of objects and I need to determine if a particular element exists in the list. In the past (versions of C# prior to 2.0) whenever I had a list I knew I was going to have to search through I would make use of a Dictionary object. The Dictionary object provides built-in very fast searching. In my pre-.Net life I was a VB6 developer and was always forced to write my own quick sort and binary search routine for such a task. Fortunately for us Microsoft has seen the value and need of making this available in the framework.

Aren’t Dictionaries Overkill?

The difference between a generic List however, and a Dictionary are that the Dictionary requires a name and a value for each item in your collection. What if you only want a list of values? I have to admit I have made up some “names” just to appease the requirements of the Dictionary object so I can add my values and take advantage of the great searching capabilities already provided by the dictionary object. Whenever I do this though it never quite sits right with me. No, I’m not worried about memory overhead. I haven’t even checked memory usage but that’s because there really wouldn’t be any point with the amount of memory available on even relatively older machines compared to the amount of memory a few thousand integers would take. No, the nagging feeling has always been that it’s a work around. I’m using a screw driver to do the job of a hammer in some ways and it doesn’t sit right with me.

Let’s do it right

One day I decided enough was enough. I was going to figure out a way to use built-in framework methods to do searching on a generic list. Looking at the intellisense for an instantiated List<string> showed there were a few methods that might do exactly what I needed. (In retrospect I do believe these are methods I had seen and tried to use before but without any luck. You may see here shortly why I gave up the first time I tried, it is certainly not implemented in an intuitive way). Those methods are Find, FindIndex, and FindAll. That might not be a complete list but these three all work the same and so any others may very well as well. I’m also not going to show how to do this on all three methods since, as stated earlier, they work the same.

Searching for the answer

My quest to begin using these methods started with the intellisense. I looked at the parameters for all of the overloads on the Find method. I noticed a recurring parameter it expected was a “predicate” which excuse my ignorance but I had no idea what that was. Since each of the overloads required a predicate, and I didn’t know what one was, I knew my searching through the intellisense quest was over. I needed an example of how to use this. So I did a Google search, something like [Generic List Find] (without the brackets). The first result was to this MSDN article http://msdn2.microsoft.com/en-us/library/x0b5b5bc.aspx . Below is the relevant code excerpt from the article.

using System;
using System.Collections.Generic;

public class Example
{
public static void Main()
{
List dinosaurs = new List();

dinosaurs.Add(“Compsognathus”);
dinosaurs.Add(“Amargasaurus”);
dinosaurs.Add(“Oviraptor”);
dinosaurs.Add(“Velociraptor”);
dinosaurs.Add(“Deinonychus”);
dinosaurs.Add(“Dilophosaurus”);
dinosaurs.Add(“Gallimimus”);
dinosaurs.Add(“Triceratops”);

Console.WriteLine();
foreach(string dinosaur in dinosaurs)
{
Console.WriteLine(dinosaur);
}

Console.WriteLine(“nTrueForAll(EndsWithSaurus): {0}”,
dinosaurs.TrueForAll(EndsWithSaurus));

Console.WriteLine(“nFind(EndsWithSaurus): {0}”,
dinosaurs.Find(EndsWithSaurus));

Console.WriteLine(“nFindLast(EndsWithSaurus): {0}”,
dinosaurs.FindLast(EndsWithSaurus));

Console.WriteLine(“nFindAll(EndsWithSaurus):”);
List sublist = dinosaurs.FindAll(EndsWithSaurus);

foreach(string dinosaur in sublist)
{
Console.WriteLine(dinosaur);
}

Console.WriteLine(
“n{0} elements removed by RemoveAll(EndsWithSaurus).”,
dinosaurs.RemoveAll(EndsWithSaurus));

Console.WriteLine(“nList now contains:”);
foreach(string dinosaur in dinosaurs)
{
Console.WriteLine(dinosaur);
}

Console.WriteLine(“nExists(EndsWithSaurus): {0}”,
dinosaurs.Exists(EndsWithSaurus));
}

// Search predicate returns true if a string ends in "saurus".
private static bool EndsWithSaurus(String s)
{
if ((s.Length &gt; 5) &amp;&amp;
(s.Substring(s.Length - 6).ToLower() == “saurus”))
{
return true;
}
else
{
return false;
}
}
}

I won’t go into detail on how this code works. Please visit the article directly for that. But I will point out one big problem with this example. The method that tells Find how to determine if it has ‘found’ what it is looking for has a hard-coded string in it. It is searching for a hard-coded value. This method is the “EndsWithSaurus” method. Notice how it is doing a string comparison on “saurus”.

This doesn’t help me at all! Unless I know at design time what I would be searching for. But what if I have two lists. One list is a master list of countries in Asia and the other list is a supposed subset of that list. Let’s say it is a list provided from user input. I want to validate the list the user has provided contains only countries that exist in Asia. So I need to iterate through each item in the user-provided list and for each iteration of the loop determine if the current item exists in the Asia master list. Something like this:

private void validateUserInput(List listWithValuesEnteredByUser)
{
List asiaList = MethodThatReturnsAllCountriesInAsia();

foreach (string current in listWithValuesEnteredByUser)
{
// determine here if the value exists
}
}

Now I’m suddenly in a sport where I can’t hardcode the search routine that Find, FindIndex or FindAll might use. We all know that hard coding is a bad idea anyway so we shouldn’t get away with it even if we can but you see my point. And since we all know hard coding is bad, we all also know making use of a wider scoped variable in this case would be bad as well right? We shouldn’t even look twice at that temptation. It’s a hack and a work around as seen here:

// ugly work around hack
string _widelyScopedVariable = string.Empty;

private void validateUserInput(List listWithValuesEnteredByUser)
{
List asiaList = MethodThatReturnsAllCountriesInAsia();

foreach (string current in listWithValuesEnteredByUser)
{
// ugly work around hack
_widelyScopedVariable = current;

if (string.IsNullOrEmpty(asiaList.Find(findCountry)))
{
// country not found. user input found to be invalid
}
}
}

private bool findCountry(string input)
{
// ugly work around hack
return _widelyScopedVariable == input;
}

The Answer

So what is the correct way of doing the above? Anonymous delegates. With anonymous delegates we can embed a method that will share the scope of our loop. This means it will have access to “current” which is what we are searching for. Here is some sample code:

private void validateUserInput(List listWithValuesEnteredByUser)
{
List asiaList = MethodThatReturnsAllCountriesInAsia();

foreach (string current in listWithValuesEnteredByUser)
{
if (string.IsNullOrEmpty(asiaList.Find(delegate(string input)
{
return (input == current);
})))
{
// country not found. user input found to be invalid
}
}
}

Wrapup

Not only does this significantly shorten the code we have to write (a definite plus) but we also don’t have to use any ugly hacks.

It is important to note that “input” is defined as a string because the list I am searching through is a list of strings (List). If for instance you have a generic list defined like: List<Animal> then the parameter changes from “string input” to “Animal input”.

It is also important to say that since it cannot be assumed that your generic list is sorted and in some cases can’t be sorted it is not possible for this built-in routine to search your list using a binary search and therefore is likely to be less efficient than the dictionary search.

September 5, 2007

Clearing the read-only flag on a file in C#

Filed under: Development — omatase @ 4:58 pm
FileInfo myFile = new FileInfo(“c:\\myfile.txt”);

if ((myFile & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
// remove the read only attribute
myFile.Attributes = (FileAttributes)(Convert.ToInt32(myFile.Attributes) - Convert.ToInt32(FileAttributes.ReadOnly));
}

August 14, 2007

Final Fantasy XII Revives the Series (Part 2)

Filed under: Entertainment — omatase @ 5:48 pm

If you havent already read part 1, here is a link to that article: FF XII (Final Fantasy 12) Revives the Series

And then there was XII

My first look at Final Fantasy XII was as a playable demo; reminiscent of the demo I played of Final Fantasy VII at Incredible Universe at least 3 years before its release. I saw the Final Fantasy XII playable demo available at a local Game Stop and played it briefly. The demo left me quite unimpressed. This was after having played Final Fantasy XI which was a very similar game. The obvious initial difference is that, since there is no multiplayer aspect to the game, that a single person is expected to play as all members of the party. I didn’t see how that could even be reasonable with the active gameplay battle system. The demo had me walking around a dungeon, I recall fighting bombs which is a typical enemy found in the Final Fantasy series. The spell animations and sounds were quite unimpressive as well. Even the art on the box gave me the impression of a game with no real depth (don’t ask me why I thought I knew this just from looking at a box).

Better than the First Impression … By a Long Shot

Initially I didn’t purchase this Final Fantasy. It’s not the first Final Fantasy since my initial Final Fantasy experience that I didn’t buy. I also didn’t buy Final Fantasy X-2 which most people I talk to agree is not really a Final Fantasy. It’s Final Fantasy X with some new content (art, audio, dialogue) added. I started playing Final Fantasy XII after borrowing it from my brother who is obviously more dedicated a fan than I. The game started out slow to be honest, the story is a bit boring at the beginning. After about 15 minutes of that though you are into the gameplay. And I have to say that from minute one of gameplay I was drawn in and loving it. It didn’t take much more than 2 or 3 hours of play before I didn’t want to put it down. This is a game I could (and have) played for 8 hours straight (I only put it down after 8 hours because my wife made me).

Gameplay

One thing I didn’t experience from playing the demo that you encounter out after about an hour of playing is gambits. Gambits is a mechanism by which you can add a bit of AI to members on your team. Each playable character has a small list of configurable gambits. A gambit consists of a trigger and an action. A trigger is something like “Self HP < 40%” and an action is something like “Curaga”. This particular trigger / action combo will tell your character to cast curaga upon him or herself when their HP is less than 40%. Triggers available range from enemy and character statuses to enemy weaknesses. For instance you can have a gambit that says Character status = blind -> blinda, or Enemy weak fire -> firaga. Gambits are arranged by priority and will resolve if the trigger is met and there are no higher priority gambits. With this system you can reasonably control your characters from a set of instructions rather than having to make them perform an action manually each time. This solved one of the biggest problems I saw in the demo and to be honest gambits are pretty well done. It doesn’t take any enjoyment from the game and leaves you with a feeling of satisfaction when you come up with a particularly useful or clever gambit. There are a huge number of triggers and while there are some things you can’t do with a gambit, it’s probably for the best because having fully automated battles wouldn’t be fun anyway.

As for the other bad half of my first impression, spell animations and sounds, they were overall pretty disappointing after my second impression as well. I would rather they had taken the sounds and animations directly from FFXI, those were some nice effects!

Now to my favorite part… hunts! Hunts are brand new in the Final Fantasy series (as far as I know) and they really add most of the enjoyment to this game. To segway why I love hunts so much, let me first tell you about one of my biggest problems with Final Fantasy games… the difficulty level. They are by and large too easy! And remember, Too is a Negative Word. The Final Fantasy series has long needed a difficulty level boost. My favorite in the series was 2. Much of the reason for this affinity is because it is more difficult than every game since. Other games had their moments but to underscore my love for a challenge let me tell you about my favorite part on FFVII. Near the end of the game enemies called “weapons” are roaming around. These were not enemies you encountered randomly and there was a finite number of them. Of these creatures, emerald weapon was my absolute favorite. You had to pull out all stops to defeat him. I remember trying at level 89, 90, 92, 93 only to eventually defeat him at level 94. Part of this was because I was leveling up my knights of the round, final attack and phoenix materias. What was this battle like you ask? Well, you have a 20 minute time limit and you’re fighting an enemy with 1,000,000 hit points. This meant you had to deal maximum damage each tturn and that meant that you had to use knights of the round with the mimic materia. Since it was pretty much guaranteed he would execute is kill-everyone-in-one-hit attack at least once and obliterate your entire party giving you no chance to recover you also had to come up with a way of surviving the battle. The best (maybe only?) survival strategy is to equip the final attack + phoenix materia in combination. This way whenever he killed your entire party in one fell swoop, the phoenix would come revive you. Now mind you, this would only work up to 4 times and that’s only if your materia is fully leveled up, which would only be the case if you did this intentionally(both materia in the combination had to be at least level 4). This was absolutely the coolest part of the game. I wanted 10 more battles just like it.

Hunts in FFXII are like the weapons in FFVII only there are dozens of them! Now, honestly, some hunts are not very difficult to defeat at all but if you breeze through a battle against a particular hunt you can bet dollars to doughnuts it’s because you didn’t seek out the hunt when it was freshly posted, and you have gained too many levels before fighting it. Ok, so what are hunts? Hunts are bills posted on a public message board displayed in a prominent place in most major cities. You find the board, read the bill then find the person who posted the bill. When you do you will learn about some new notorious monster that did some such thing or the other, where and how to find him. Once you have talked to the poster and accepted the hunt you are free to go find, and kill the great beast. If you do it right (meaning you find and defeat these hunts as soon as you are able) most of them are very difficult and very fun. I remember fighting a giant turtle no less than 5 times because whenever I got his hit points down around the 10% mark he would cast some magic spell that doubled his level. Now all of a sudden he is hitting for 2000 damage instead of 200 damage. I fought an antlion that would kill me in 2 hits and had a speed of roughly twice any of my characters. This amounted to a pattern of me reviving a fallen ally only to fall myself. I then change the party leader to the ally just revived and revive the ally that was just ko’d only to immediately become fatally wounded myself again and the whole pattern would start over. I kid you not I continued this pattern in this battle for no less than 15 revolutions before I finally decided to give up. I revived one last party member for good measure, brought in my only remaining living party member and prepared for death. By this time the antlion really only had a few thousand hit points left, but I was completely and utterly unable to land even a single blow as all of my efforts were focused on reviving. Well, with the last 3 members of the party that were still living I stopped the reviving pattern and went on a full attack fully expecting a prompt death. I was literally jumping up and down on my feet cheering about 2o seconds later when a near-fatal Vaan got pissed or something (I don’t know) and started landing blow after blow not letting the antlion even respond. He landed no less than 6 blows consecutively and fell the antlion. It was probably the happiest moment of my life (don’t tell my family).

Not only the hunts are difficult though. You can make a wrong turn in a dungeon somewhere and find yourself facing a foe that is twice your level. I don’t know why but something about being able to encounter enemies orders of magnitude more powerful than yourself is exciting. Whenever I happen upon enemies like this I break out all of my tricks to try and defeat even just one of them just to see how much experience I can gain. Sometimes if they are only 10 levels or so higher than me I will try and onesy twosey the enemies to make it to the other side of the dungeon to see if there is some treasure that is only supposed to be collected once I am at their level. I think “wouldn’t it be cool if I find a sword or some armor that I am not supposed to have until I am 10 levels higher?”. Yes, it’s geeky, but we are who play these games :).

July 25, 2007

FFVI Hard Type

Filed under: Entertainment — bhart @ 10:07 am

What is FFVI Hard Type?

FFVI is an altered rom of the original FFVI (FFIII US) video game. I decided to alter the original version of the game using two editors. Why bother? The main reason for my doing so is because I wanted to make a more challenging version of the game. It is a great game in many ways, but let’s face it, it was way too easy. Sure, its fun going around killing almost anything without much effort. But that wears off and it gets boring getting into battles where all you do is hold down the ‘A’ button and wait a few seconds until the battle ends. When you can defeat the end boss only being around lvl 35 or lower, that’s pathetic. Something had to be done to give this game a decent challenge. Below I’ll explain some of the things that were changed in the game.

Changes

Harder Battles Battles
The most obvious since this is what desperately needs to be changed in order to make the game harder. Pretty self-explanitory.
changed dialog text Dialogue
In no way affects the difficulty of the game, but something fun to change to make the game funny and to poke fun at the characters in it.

GP
Issues relating to money such as how much earned and store prices were changed to make the game more enjoyable. This doesn’t really affect the difficulty of the game either, just makes it less tedious when trying to buy items for your characters.

Espers/Magic
The spells the espers teach you have been changed as well as the rates at which you learn them. Some of the level up bonuses have been changed as well.

Rages
Most of Gau’s rages have been changed. In the original version of the game, only about 20 something rages were even worth using most of the time. That’s more or less 10% of them. Quite sad. While it would be too cumbersome to list all of the changed rages here, I will list a few that will definitely kick some A. The names of the enemies you learn them from have also been changed. Just keep an eye out for them.

Kishkumen
Osteosaur
Humpty
Oscar Ochu
Power Demon
Roc
Exoray
Evil Wreath
Evil Genie
Fuzzy Eye
Lancer
Lurp Prince

Lore
Strago’s Lore spells suffered a similar fate to Gau’s rages. Some of them just sucked. Some of the Lore spells had to be changed. According to the editor, Strago should be able to learn new spells in place of the old stupid ones. If it doesn’t work, at least you’ll be spared learning lame Lore spells such as Exploder and Pep Up. Below is a list of the new Lore spells you’re supposed to be able to learn.

Absolute 0
Flash Rain
South Cross
Hyper Drive
Shrapnel
Meteo
Blaze
Sewage
Goner
bye bye Chupon Colosseum
The items you can win at the colosseum have also changed. I’m not going to list any changes here. You’ll just have to figure out for yourself what they are. You won’t have to fight Cheapon, er I mean Chupon nearly as often anymore.

Altered Rom
Well, those are the main changes made to the game. Below is a link where you can get the rom if you wanna try it out. You may have to right click and select ’save target as’.
Final Fantasy 3 Mod

July 12, 2007

FF XII (Final Fantasy 12) Revives the Series

Filed under: Entertainment — admin @ 10:47 pm

Final Fantasy XII case

In the beginning … (for me)

Final Fantasy IV case

I have been an avid Final Fantasy fan since Final Fantasy II (Final Fantasy IV JPN)was about a year and half into its run in the US market. My first impression of the game was not a favorable one. You see, up to this point in my life my favorite games had been Super Mario Brothers, Megaman 2, Blaster Master, Contra I & III. Basically shoot-em-up games that involve moving left and right and pushing one of two buttons (in some cases both at the same time).

Being a gamer with this background seeing the Final Fantasy II interface I wondered why in the heck anyone would ever want to play a game where they have to read so much. Not only that but you’re going through menus looking at player statistics pouring through hundreds of items in an inventory list. Why would anyone want to play this game!? Fortunately for me I was so addicted to video games that I played anything that I could blow the dust off sufficiently to get it to work in my Nintendo. Soon after borrowing it from my friend I was off killing Imps with a lowly 6 hit points, learning what a Paladin was and how such a lame-looking, turn-based battle system could actually be fun.

Looking back on my first Final Fantasy experience the part I remember enjoying the most was the part that I had the most trouble with. The three sisters battle. One sister healed, one did powerful black magic spells while the third provided a wall for the other two. It was in this battle I learned the dynamics of a delta attack and it was the first battle I had to develop a real strategy to get through. It was awesome!

Deterioration of the series

Blitz Ball

Fast-forward ten years to the year 2001. Final Fantasy X is released in December and like a mindless zombie going through the, now habitual, motions embedded in me like muscle memory I trek to the local game store and pick up a copy. The outcome of the Final Fantasy X gaming experience was … disappointing. I hated blitz ball (seen left) which is compounded by the fact that for the story to progress there are times you actually have to play it! The characters were ok I guess. The story was strange and hard to follow but it didn’t completely turn me off. Ten years of living through the same turned-based battle system was really starting to wear on me. It was no longer just lame looking anymore it was actually lame playing now too! It had been given a bit more life with Final Fantasy VII when they gave the enemies and players more movement in battle and made it 3D but even that was getting old being introduced 4 years previously.

Enter Final Fantasy XI onto the scene

Final Fantasy XI case

This game was fun! … for a few months. It really was a fun game, but it was a Final Fantasy by name only. Because it was an MMORPG it didn’t have persistent worlds, it didn’t really have a story line (nothing very engaging anyway) and you were unable to control your entire team as each character was played by someone else somewhere in the world. When I say it was fun for a few months that is because after about three months if you were playing moderately you would be about level 30. Once you’re level 30, without investing 3 or 4 hours each night to play you could no longer progress at a reasonable rate. Take the progression away and you take away the fun of it all. This game warrants special attention however as it marks the first Final Fantasy game to introduce a new battle system. It was more active and engaging. Your characters weren’t 20 yards from the enemy running back and forth when attacking (or just standing in place and swinging a sword from BFE in the earlier versions of the games). I stopped playing Final Fantasy XI about 6 months after I started. It isn’t really a game you can get to the end of with any reasonable investment of time and so I had to abandon it. Because it really was a fun game I did miss playing it. So while my opinion of the game is that it was ultimately very fun I don’t give credit to this game for breathing new, much-needed life into the series simply because it was basically a non Final Fantasy Final Fantasy.

read on: Final Fantasy XII Revives the Series (Part 2)

July 7, 2007

Why Does No One Remember Apple’s Mistakes? Pt 1

Filed under: Technology — admin @ 5:20 pm

Apple enjoys the most loyal, forgiving (and forgetting) customer base in any industry in the history of the world…

At least that’s the explanation that I have come to. Who was it that said when you have eliminated all other possibilities, that which remains, however unlikely, is the answer? Sherlock Holmes? And when did we start quoting fictional characters giving them credit for coining phrases? Maybe it started with me, here, now?

I for one cannot understand this loyalty. I have to write this article assuming that the latest versions of OSX (within the last 5 years) are absolutely perfect (100% bug free) and have every feature anyone could ever want. This is simply because I haven’t used OSX for about 5 years and it’s only fair to give Apple the benefit of the doubt for products with which I have no experience. So it is entirely possible that loyal fans of Apple may have very good reason to be loyal right now; I really don’t know. What this article is about is how?!?!?! did Apple survive through the end of the 20th century?

My wife who is a PC convert has a degree in Graphical Arts. As everyone knows you can’t learn Graphical Arts in a public school without using a macintosh computer, it’s just not possible. I don’t know what the numbers are, but my impression is that any school that ever teaches this degree does it exclusively with Apple machines. I don’t know why for sure, maybe it’s cheaper for the school that way. I don’t know what kind of deals Apple gives schools on computers. Not really important for the sake of this article.

When I met my wife it was at a time in my life when I had still yet to form an opinion about Apple or Apple-branded hardware and software. It was a simpler time when things made sense. Ignorance was very bliss.

Shortly after I met my wife she got a job working at Smith’s corporate (Smith’s is a grocery store in some mid-western states). Her main function was to use Quark Xpress, Illustrator and Photoshop to create the ads Smith’s would send out in newspapers, etc. There were about half a dozen people in her department. They all used G3 powermacs as their primary machines. I cannot count the number of times the discussion of her day included the number of times her and her coworker’s machines crashed. To this day when asked on an average day how often her work-provided macintosh would crash the number she gives is 2-3. These G3s used the latest and greatest version of Mac OS at the time (OS 9.x, OSX for desktops was released in March of 2001). The time period in which my wife was at this job using these particular computers was 2000 - 2003. This means this was happening when the two prominent Microsoft operating systems on the market were Windows 2000 and Windows XP. Windows ME was hardly prominent as it was released with a bad reputation and was not widely used.

Having your OS crashing 2-3 times per day on average is astronomical! No, this is not an overreaction or sarcasm. It is literally “relating to astronomy” wait… no that’s not it. Oh, here it is “immeasurably numerous, high, or great“. Wow, that’s actually the definition of sarcasm. Ok, this time it’s astronomical and measurable. Trust me 15 years experience working on, fixing, restoring, installing, recovering and just plain old using an operating system says this is a beta-quality software product at best!

I have used some form of Windows OS in a professional work environment since Nov of 1996. I have used Windows 95 (OSR2.1), 98 SE, 2000, XP and Server 2003 as the operating system for my desktop PC over the years. None of these operating systems crashed even once daily on average. In fact I would be compelled to discontinue use of an operating system that crashes that often even if it were a Windows operating system which have had great features that Apple has never had. A few examples of these features are things like compatibility and affordable pricing.

This is the source of my confusion over the loyalty just gushing from the Apple fan base. I have a lot of points to make on this topic and so I am making them in parts.

Stay tuned…

Here’s that quote from above “… when you have eliminated the impossible, whatever remains, however improbable, must be the truth”

wikipedia.org. Sherlock Holmes. Retrieved on 2007-07-03.

June 27, 2007

“Too” is a Negative Word

Filed under: Philosophy — admin @ 10:33 pm

Are you thinking “what the [exclamatory word goes here] does that mean? “? If you are, just remember your stupor now for when you say “well duh!” at the end of the thought. The idea here isn’t what’s important, the phrase (”too is a negative word”) is.

What???

Just like when listing our vowels we say “A, E, I, O, U and sometimes Y”. When listing negatives we can say “not, cannot, can’t, will not, won’t, couldn’t, shouldn’t, …, wouldn’t, haven’t and sometimes too”.

examples:

too hungry, too tired, too sweet, too sour, too much etc etc etc.

That’s right put “too” in front of just about anything and (as long as sarcasm isn’t implied) it’s probably not a good thing. This is certainly no revelation for any native or even ESL English speaker, but calling “too” a negative word is probably new for most people.

And so I say again “too is a negative word” … sometimes :).

An obvious example of when it’s not negative: “I would like some pizza too.” (as I often hear my friend Alma exclaim)

June 26, 2007

There IS No Lane For Speeding

Filed under: Life — admin @ 3:29 pm

Am I wrong here? Who thinks that “pass on the left” means it is legal to speed in the left-most lane? If you are behind someone in the fast lane going slower than you AND you are speeding realize that it is you that is in the wrong, not they.

IF you intend to go over the posted speed limit (especially by a large margin) then you will be going faster than some (in some cases most, in some cases all :0) of the other vehicles on the road. When you create a situation like that there is no avoiding the fact that you WILL be going faster than someone in your own lane; indeed it is likely there will be someone in your lane that is in front of you that is traveling at a velocity slower than yours. What I mean to say is if you intend to go over the posted speed limit you need to come to grips with the fact that you will likely often need to slow down for someone obeying the law. This gives you no justification to become angry. If you want to coexist happily with vehicles around you, you need to play by the same rules they do.

Where there is more than one lane available for a particular direction, there is a lane designated for passing. You pass on the left. However, it is rightfully called a “passing” lane, not a “speeding” lane. Get caught going too fast in that lane and yes indeed you will get ticketed. It is because of this that no amount of pressure from behind is going to cause me to exert sufficient speed such that I will get ticketed.

Having said all of that. I understand people get late for work or an appointment or they just hurry to any destination. That is of course their right and I have no problem whatsoever in getting out of their way when I see them coming. Please do realize however that I will get and stay in the left lane (going the speed limit no less) when I have a left turn to make a short distance down the road. I will also be using that lane for passing myself. Yes, in fact I go the speed limit wherever I am and still (pretty regularly actually) happen upon people going under the speed limit.

Thanks for allowing me my rant

Comments welcome

Next Page »

Powered by WordPress