Posts Tagged 'programming'


Notepad (software)

I love doing too many things. My interests cover such a wide gamut that I wonder if I’ll ever settle on a career path. But that’s not why I decided to write this blog post.

I’ve been writing JavaScript for a long time. It all started when a friend of mine showed me how you could make a webpage using nothing but Notepad in the late nineties. I was immediately hooked. But HTML was so limited (especially back then), and I wanted more. It began with copying (stealing) and modifying a simple mouseover script for making an image change when you hovered the mouse over it, and from there it exploded into rewriting Minesweeper (poorly), creating my own “encryption” software (ha ha, “encryption”), writing simple chat bots, making guessing games, and occasionally even making a website for one thing or another (with plenty of mouseover effects).

But I soon learned that programming could be so much more than what I was using it for. After a decade of believing that I could never learn object-oriented programming (the ideas just seemed too advanced for me), as recently as last year I learned that JavaScript handled everything in the code as an object and that it was an object-based (even object-oriented) language.

This opened up worlds of possibilities. I had heard many wonderful things about what one could do in an object-oriented environment. I was excited to dive in and try it.

My favorite hypothetical usage for objects in programming, and something I had never really grasped how to accomplish with JavaScript, was the idea of defining one object with its own behaviors and attributes and setting many of them loose in an environment in which they could interact. I immediately wanted to try something like this, but it proved too difficult for me at first.

So I applied my new knowledge about JavaScript objects in other projects. I was timid and unimaginative about it at first. Looking back at those early projects that incorporated custom objects I can’t help but imagine that I was afraid of these new blocks of code. It felt foreign, and my code was awkward (not that I’m doing much better now). Eventually the idea of objects clicked, and I was ready to try my idea again, but I didn’t realize it right away.

children_raidThen, last weekend, I was sitting on the couch with my family watching Chitty Chitty Bang Bang (written, apparently, by Ian Fleming, with a screenplay co-written, oddly enough, by Roald Dahl), and the idea seized hold of me again. It was the scene where the children raid the castle toward the end. They rushed the adults, and I pictured it from a bird’s eye view as dozens of little dots moving in and attacking other little dots.

Not an hour later I was writing code. I started by defining an Army object, then I wrote the Warrior object constructor. It was complex, with dozens of little stats to track, and several complicated functions for thinking, targeting, moving, attacking, defending, and more (nearly 300 lines of code just for the Warrior object). I wrote code to define the starting position boxes for the armies (bases, essentially), code to draw the objects as stylized DIVs on the page, and I wrote an HTML page with a basic framework to display it all. I’ve been learning to use the CANVAS element for drawing, but I wanted to stay away from it as this was going to be a project I could play around with at work where they still have us using IE8 and the CANVAS element isn’t recognized.

Surprisingly enough, when I first ran it (about five hours after I wrote the first line of code) everything worked (kind of) as expected. I had to rework the rendering code (I was trying to redraw everything each frame, and with hundreds of little HTML objects that initial approach was impractical). After fixing the rendering issue it ran smoothly and most of the behavior was exactly as I had imagined it.

bbsI’ve tweaked several of the systems since then, but the essential framework hasn’t changed. You can try it here if the link doesn’t get overloaded (who am I kidding – I couldn’t possibly generate enough traffic to take down a dropbox link). The one item I re-worked the most was the targeting code. In fact, I’m still not happy with a lot of things in this project, but there are even more things that I love about it.

First, it’s the very first time I’ve made something visual with what I would consider emergent behavior. I wrote a primitive chat bot (I cannot be held responsible for anything Jimmy says) once that had some pretty unpredictable responses (many layers of code analyzing your input and outputting based on more criteria than I could keep track of), but that “emergent” behavior wasn’t always contextually appropriate (Me: “Hi there! How are you?” Him: “You’re not being very nice.”). My little battle simulator behaves very much like a little battle. The winner is determined by a mixture of attributes (leadership scores, strength and number of warriors, amount of supplies available, location of base, etc.) and circumstantial happenings. I’m just as incapable of predicting the winner as anyone else, yet there is very little variation between the armies in the way of random number generation.

If you do check out the link, I apologize in advance for some of the Leader names. The idea of giving each army a leader is credited to my co-workers, but the names for those leaders were also their ideas. I made some slight modifications to a couple of the names, but one of them I left in a fairly inappropriate state simply because changing it would have taken away from the effect. Some of the names are not child friendly, just so you know.

The thing I’m least happy about with this is the targeting code. It’s limited, inefficient, and doesn’t accomplish all the goals I had for it. I realized yesterday that what I really wanted was a collision detecting framework. I imagined a centralized process being aware of everyone’s location and allowing any one of the Warrior objects to perform a simple query to get his nearest neighbors. I was unfamiliar with actual collision detection methods for software, and was pleased to learn that what I had devised wasn’t too far off from reality.

In my current system each individual on the screen has to scan every other army’s soldiers and rule out targets that are outside of his visual range. This takes a lot of processor time, and whenever anyone was selecting a target there was an awful performance drop (especially at the very beginning of the battle when nobody had selected a target yet). I did a couple of things to mitigate this: any time around half of the soldiers in the army’s array are dead it clears out the dead from the array, shortening the amount of time it takes enemies to scan for a new target (since they no longer have to process dead people); and I spread the search function out over several frames rather than attempting to do it all in one rendering cycle (I also learned how to make recursive or pseudo-recursive functions this year).

Obviously, with each and every dot doing his own collision detection and targeting it’s still pretty inefficient. I need a centralized collision detection system.

But now I have to learn how to implement something like that. I might implement it in my current project, but I think starting a new project would be better. I want to redo a lot more than the targeting. Perhaps version 2.0 will be rendered in the CANVAS element with animated graphics, explosions, terrains, etc. I wanted to incorporate tanks and other vehicles, other soldier types (archers?), goal oriented behavior (capture the flag), stealing supplies from enemies, communicating with each other when in proximity (“hey, watch your back”), and other behaviors that would require something like “sight” to be implemented. But most of all I want their movement and behavior to feel just a little more deliberate. As it is they inexplicably fail to engage each other sometimes, their movement isn’t very confident looking or smooth, and there are a lot of undesired artifacts that come from the fact that I’m still not all that great at writing code that does what I want it to.

rvwOne final, and related, note. A good friend of mine shared a post on Google+ recently (yes, some people actually use that – though I almost never use anything but Notepad++ lately) and she reminded me of one of the primary reasons I love programming. I used to want nothing more than to program robots. You can see the video from her post here.

In the video they mention a piece of software they created called Robot Virtual Worlds. It looks like something that should have been made twenty or thirty years ago for me! The other link from the conversation at right is for a website where you can register for their Robotics Summer of Learning. In conjunction with the Robotics Summer of Learning, it appears as though you get a limited (Summer only, I think) license for Robot Virtual Worlds when you buy(?) ROBOTC. I’m not going to pretend to know which version of ROBOTC you need (poking around on the site for a minute didn’t give any answers, but I plan to return on May 20th as they suggest on the website to find out more), but even just playing around with Robot Virtual Worlds for one summer could be super fun. I’d have to learn C, but how hard could that be? Right?

New Computer? – Start Here


If you’re just looking for a list of free software to install on your computer, I’ve created a Springpad notebook full of links to my favorites. If I find anything else to add, I’ll put it there.

I want to start out by saying that I am just a guy. I wasn’t paid to write any of this, I don’t work for any of the companies mentioned, and these are all just my opinions. If any of the mentioned companies wanted to pay me because I wrote all these nice things about them, I’d be willing to talk to them about an arrangement. 😉

Having said that, here are the chronicles of my recent adventure procuring and setting up my new laptop. I’m going to break this down into three separate categories: Hardware, Pre-installed Software you Don’t Need, and Free Software you Might Need. Lucky for you, I’m all about free, open-source and simplicity; so the only part that I spent money on was the hardware.

I’ve designed this as a sort of guide to assist YOU in purchasing and setting up a new computer. People are always looking at my glasses. After they get a good look at my glasses, they say, “Hey, I need a new computer. What kind should I get?” People with new computers are always asking me, “Is it better to just use Internet Explorer, or should I get one of those new browsers?” Also, it has been my own experience that just using all of the default software (that ships with the system) for document editing, virus handling, and many other tasks is a bad idea. So, here are all of my answers and tips in one place. This may not be the definitive guide to getting a new computer, but it is MY definitive guide for those who need it.

So, without further chit-chat, let’s look at your hardware options.


This one’s easier than you might be inclined to believe. Sure there are a lot of choices, but it all comes down to what you want to use the computer for.

The computer I wanted this time around was a laptop I could actually take places. Last time I got a laptop (over five years ago) it weighed ten pounds, it was more of a desktop replacement and cost me over two thousand dollars. Now I’ve got a desktop, and I wanted an inexpensive computer that could go places with me AND do stuff. I’ve got an Asus eee PC (a netbook), but that thing can’t really do stuff. I mean, it can do some stuff (I use it for NaNoWriMo every year), but it’s a little wimpy when it comes to multitasking and other processor/RAM intensive activities.

The Argument for Desktops

First, if you’ve got the space for it and you don’t need to move it, get a desktop. Laptops have really gone down in price lately, but an equivalent (as far as hardware and capabilities) desktop will always cost less than its laptop counterpart (as of this writing).

Desktops have the greatest range in options as well. You can get a cheap-o system that is really only good for running your web browser and a word processor for under a hundred dollars, or you can pay tens of thousands of dollars for systems that can perform at speeds rivaling supercomputers. No matter what you’ll be using the desktop for, you can always find a system that perfectly meets your needs without spending more than you have to. Always.

The first step in selecting a desktop is to imagine yourself using that computer for the next two years. What will you use it for? Do you play many games? You might need to spend more for a system that will be compatible with future game releases. Will you be hooking it up to your TV to watch shows and movies? There are a lot of media center pc options. If you’re a Mac person (which, I might be if I had more money), you might want an Apple TV rather than a new computer.

Just decide what you’ll need the computer to be able to do, and consider these simple guidelines (which, unless you’re a “power user,” will more than cover the basics). I don’t need to say it, but if you know enough about computers to know that these guidelines aren’t comprehensive, then these guidelines weren’t written for you.

  • RAM – For most users, this is arguably the most important decision. More RAM means faster, smoother, more powerful computing. You want to open and use every program installed on your computer at the same time? You need lots of RAM. Will you only do one thing at a time for the rest of the time you own the computer? You can get by with 2 Gigs or less (depending on that one program you’ll be running!).
  • Operating System Bits – Related to RAM, but separate, is the operating system you’ll be using. Right away I have to mention that a 32 bit operating system cannot handle a full 4 Gigabytes of RAM, and certainly not more. If you will want 4 Gigs or more of RAM, you’ll need a 64 bit OS. Otherwise, 32 vs 64 bits will not have much of an impact on you.
  • Operating System Flavor – Which OS you choose will depend on many factors, but at the risk of bringing on hoards of criticism, I’m going to go ahead and simplify things this way: If you’re lost when it comes to choosing your operating system, just get Windows 7. Sure, Macs are simple, but getting software for them can be a hassle. Windows may have a poor track-record when it comes to stability and ease of use, but I’m putting a lot of faith in Windows 7, and I think it’s a safe choice for YOU. If you know you want a Mac though, please get it!
  • Processor – When it comes to desktops, you’re really only going to concern yourself with how many cores and processors you want. Adding processors and cores means better ability to process multiple instructions at a time (translating to blazing speed and excellent multitasking), while a single core on a single processor will more than meet the needs of most users. Don’t get the fancy processor set-up unless you know you need it. For most modern operating systems and software, though, I recommend at least a single processor with dual cores. More than that and you’d better be doing some serious video editing or 3D graphics (like games).
  • Hard Drive – If you’re doing video editing or if you’re archiving your DVD collection on the hard drive, get something huge. If you’re just surfing the Internet and writing papers in Word, you don’t need much hard drive space. Even the smallest hard drives shipping these days are more than ample for the average user. Note that media center systems should have more hard drive space to store videos or recorded television.

Sure, there are more factors than just these to consider, but if you’re not a power user who already knows about the other factors, then you don’t need to worry about them. What you don’t know can’t hurt you here.

The only other thing I would caution is to avoid brands you’re not familiar with and be wary of prices that are significantly lower than competing systems with similar capabilities. Your desktop shouldn’t be too expensive, but don’t be a cheapskate once you know what you want. Just pay what the trusted manufacturers are charging.

I currently use a first generation HP TouchSmart for my desktop, and it’s held up very well in the two years we’ve owned it. Both of my laptops are Toshibas, and we love them. Namebrand systems are always a good bet.

Where Desktops Fail

The only problem with a desktop is that it is not very portable. Sure, some of the newer CPU box form-factors (especially in the case of media center computers) are very small and lightweight. However, the screen and input devices are not built in, thus to use the system it must be hooked up to these things, and to move it you have to unplug everything. Convenient? No.

So what if you really need something you can take to class with you? You need either a laptop or a netbook. Can’t decide which one? Consider this:

I thought I could get a netbook and do the same things with it as I do with my laptop. I was wrong. Even with a full size keyboard attached and an external mouse, the netbook screens are too small to be practical in a number of applications. For a true, natural computing experience, you’ll still want a larger system. They make laptops that are much closer in size (and price) to netbooks, but they are much more convenient. If you’re not sure about getting a netbook, don’t. Just go for a smaller laptop. I promise you’ll be happy with it.

If you know you want a netbook, get it. If you’re not sure, don’t. You’ve got to be committed to liking your netbook, or you’re going to hate it.

Other than the netbook vs laptop decision, there isn’t a whole lot more to think about. How portable do you want it? There are a range of sizes from 13 inches to over 18 inches for screens. Some are less than an inch thin, and others have huge 12 cell batteries that lift them about three inches off your table top. Some run hot from having their hardware crammed in to a small space, while others have minimal hardware configurations and are quiet and cool. Again, the considerations for desktops will all hold true for laptops, but you might want to consider the following IN ADDITION to the desktop suggestions:

  • Overall Size – You’re getting a laptop because a desktop isn’t portable enough for you, but how portable do you need your laptop to be? If you are still just going to leave it set up in one place for long periods of time, you might consider a larger desktop replacement laptop. These systems offer the same performance as a desktop, at often competitive prices, but at the end of the day the screen folds up and you can pack it away in a bag. Expect these to weigh close to ten pounds though! Then there are the ultra portables that weigh in at under five pounds (mine weighs like three pounds!). Keep in mind that a netbook can weigh close to one pound, but you’ve already decided you want a laptop, right?
  • Battery Size/Usage – Some laptops these days are being designed as marathon machines. They can squeeze almost a full day of usage out of a single charge, but that efficiency comes at a price (both in dollars and performance). Most laptops are designed to fully contain a six cell battery, but by doubling the number of cells to twelve (and subsequently, increasing the size of the battery pack itself, causing it to protrude out the back or bottom of the computer), you can double the life of the battery. Also, Intel and AMD make processors specifically designed to use less power. They usually run at far less than 2 Gigahertz, and they cannot handle too many big tasks like gaming and video editing as well. You could try, but if that’s what you need the system for (primarily) you’ll just have to charge the system more often.
  • USB Ports – If you use a lot of devices at once, you’ll need at least three USB ports. I always recommend using an external keyboard and mouse with a laptop whenever possible simply because they can be replaced much easier than the built-in devices. The less you use them, the less likely they are to break. So, with a keyboard and mouse plugged in, you will want to have at least one more USB port for external hard drives, thumb drives, cameras or whatever else tickles your fancy. A few laptops only have two ports (one on each side), most have three, and a few have up to five USB ports. Get as many as you can without spending too much just for that feature. Also keep in mind that some USB devices have a special “Y” shaped cable that plugs into two USB ports. If you might need one of these devices, you’ll want a laptop with two USB ports that are close together, not one on each side.

In my most recent purchase, I wanted something far more portable than my old laptop but more capable than a netbook. I went with a Toshiba Satellite, ultra thin system. This particular system (like most ultra thin, lightweight systems) does not have an optical drive (no DVD or CD drive). That wasn’t an issue for me because I knew that all of the software I could ever need I was going to download for free once I got it connected to the Internet. If you install a lot of software from disks but still want a system like mine, there are some great external drives that will meet your needs. I may end up getting one too so I can watch movies on my laptop, but for now I’m fine without an optical drive.


The final hardware consideration is, what else do you need? Some people need lots of storage but end up choosing a laptop with a smaller hard drive. In that case, just get an external hard drive. Do you transfer a lot of files between systems? Get a thumb drive. Actually, I recommend that people get thumb drives even if they don’t need them for transferring files. They make a great place to keep backups of your most important files.


The only thing I know you’ll need if you got a laptop is a mouse and keyboard. There’s no getting around it – using the laptop keyboard puts wear on it that could eventually require maintenance. If you use an external keyboard, and it breaks, you can just unplug it and get another one. My favorite typing keyboard ever (that I’ve used anyhow) is the Logitech Classic Keyboard 200. It currently sells for $13.99 on, it is comfortable, and I’ve never had any problems with it. I love it.


I do recommend spending a little more for your external mouse though. Touch pads are great for basic navigation and occasional clicking, but nothing beats a scroll wheel on the Internet, and when doing graphics work or gaming you just can’t live without a mouse. My current favorite is the Microsoft Explorer series. Specifically, my wife and I love our Explorer Mini mice. sells them for about $40, they retail for about $60, and there is currently a vendor on Amazon that is selling them for under $20 (with $4 shipping). The great thing about the Explorer mice is that they will track on literally anything but glass and mirrors (although in some tests these mice have actually tracked on glass and mirrors!). We can use them on shag carpet, glossy surfaces, pitted surfaces, hair, clothing, anything at all, and more. If you want a great mouse, Microsoft actually has a great product.


All computers come with what is lovingly called “bloat-ware.” This is software that people pay the manufacturer to include pre-installed from the factory. In some ways I guess it’s good because I’d like to think that the money they earn from that endeavor goes toward keeping costs lower for me, but I rather doubt it.

Anyhow, the first program I highly suggest you uninstall (if it’s installed) is Norton Anti-Virus. Many computers come with it pre-installed along with an offer for a whole year or month or day of free updates. It’s not worth it. Microsoft has a free program you can download right away that does the same thing (well, roughly the same thing).

To get rid of Norton (or any program, for that matter), just go to the control panel and look for “Add/Remove Programs” or something like that. Find the offender, click “uninstall,” and follow the directions. Most virus protection software will require that you restart after removing it. That’s OK.

Now, I don’t recommend you leave your computer virus-protection-free for long. It is a dangerous thing. So once you’ve finished uninstalling the crud you don’t need, make sure you immediately download the “essential” software I have listed below, in the order I’ve listed them.

First though, look for any programs that say “offer” or “setup” next to them and get rid of them (still in the Add/Remove Software tool). Also, some systems (most Toshibas and HPs) come with some kind of game portal that you should get rid of.

Many people will tell you to get rid of a lot more than this, but it’s not always necessary. After you’ve been using the computer for a month or so, go back to the Add/Remove Software tool and look over the list. If you recognize the program and you know you use it a lot, don’t get rid of it. If you recognize it and you know you don’t use it a lot, get rid of it (just make sure you know what it does first!). Everything else is probably OK to leave installed.


Some of these are more essential than others. I’ll categorize them to simplify this. In some cases it won’t matter what program you get as long as you get something that does the job. So, if you’re ready to get started, open Internet Explorer (unless your system came with another browser pre-installed, in which case you should DEFINITELY use the other one!).

Note: This list is designed for Windows users ONLY. Many of these programs are cross platform, but I’m not going to say which ones because I’m not making this list for Mac users. Sorry guys. Maybe another time.

Essential Software

These are programs that you will need to get – almost everyone needs these programs. Right away, before downloading anything, you need virus protection!

  • Virus Protection – Search for “Microsoft Security Essentials,” or go to Click on the big “Download Now” button, save the executable and run it. Make sure you have already removed any virus protection that shipped with your computer, then close your web browser while the program installs. Once it installs make sure it runs OK, then let it scan your system. Depending on the size of your hard drive, this can take anywhere from a few minutes to a few hours. Since this is the first thing you’re doing on your new system, everything should be clean. After it scans your system, you may proceed with this list.
  • New Browser – DO NOT USE INTERNET EXPLORER. Sure, there are a lot of sites that require it, but I can show you how to get around that later. For now, just download one or both of the following browsers and try them out. You won’t miss Internet Explorer after a few days. I promise. My favorite is Google Chrome, but I was once a die-hard Firefox fan (I even have an embroidered FireFox shirt). They are both worlds better than IE, more secure, faster, and prettier. While I might catch some heat for this, I am going to recommend that you just get Google Chrome. It’s better. Once you’ve downloaded and selected a new browser, close Internet Explorer and never open it again (unless you really have to).
  • Free Office Software – While there are a few options for this, my favorite (and arguably the most user friendly and robust) is Just go to their website in your new, shiny browser, and download. It’s that easy. The installation is easy and the program operates a lot like Microsoft Office. There are some differences, but can do just about anything Microsoft Office can do, and in some cases it does it better. If you ever find that just isn’t meeting your needs, feel free to go back to the Microsoft version, but I don’t think most people will ever need to.
  • Media Player – Windows Media Player is pretty good, but there are a lot of things it can’t handle. For everything else, there’s VLC. VLC can’t do everything, but I’ve never found a video it couldn’t play.
  • Photo Organizer – Since most people maintain some kind of image collection (from digital cameras, web graphics, etc.), you’ll probably want a good program to organize and lightly edit those photos. Google Picasa is a great product that is completely free and I recommend it to everyone.

Everything Else

Those, to me, represent the bare-bones necessities for a new computer. If you get nothing else, make sure you get those things. The remainder of my list is specific to my needs and wants, based on what I want to use the computer for. If you know of other great free programs that aren’t listed here, please add them in the comments.

  • Dropbox – This is a really cool file program. It creates a special folder that automatically backs itself up online any time you add or change files in the folder. If you install Dropbox on other computers and link them with your account, Dropbox will synchronize all of the folders across all of the computers and devices you have Dropbox installed on. I love it.
  • Notepad ++ – If you do any web development or coding the old fashioned way (in notepad) you might want to try Notepad ++. I found this little gem several years ago and have installed it on all of my computers ever since.
  • Skype – For video calls and VoIP, my favorite is still Skype. We’ve been using it for quite a while now and we love it.
  • Google Talk – Actually, I didn’t download the Talk program, I installed the Video and Voice plug-in. While most of our video chats are handled over Skype, we have more friends with Google accounts than Skype accounts. With this plug-in, I can have a video call with any Google Talk contact who is also using the plug-in or the desktop client. I’ve only done it once, and it was a long time ago, but this is a valuable thing to have on standby.
  • Google Earth – There’s nothing cooler than exploring your planet in 3D with a nearly infinitely scalable, detailed and textured model with Google Maps plastered all over it. This is as fun as it is useful.
  • Google SketchUp – I am a bit of a 3D hobbyist, and SketchUp is a great way to rapidly visualize a model. It’s a wildly different experience from most of the 3D software I’ve used, but once I got the hang of it I realize it was easier and more intuitive than anything else I’ve ever tried. Plus, it’s free!
  • Blender – On the subject of 3D, how does a free 3D program with advanced features sound? SketchUp may be easy and fast, but it’s not anywhere near Blender’s level. I don’t know if it’s just me, but Blender is extremely un-intuitive to learn. However, I’ve seen what it can do, and I’m impressed enough to trudge over the learning curve and figure it out.
  • Paint.NET – If I’m going to make awesome 3D images in Blender, I’ll need software like Photoshop to make textures, composites, do touch-ups, and more. Windows Paint won’t do any of that. In fact, Paint is nearly useless. Luckily, there’s a better Paint. This program can do layers, adjustments, transparency and even some cool effects. Sure, there’s a lot that it can’t do, but it’s free. If it does what you need it to then you’ve lost nothing, right? I even made the cover for my new book entirely in Paint.NET.
  • Inkscape – Paint.NET can handle most of my 2D needs, but it is primarily for raster images (bitmaps). For vector images, I love Inkscape. It’s relatively easy to learn, and it can handle almost anything you can dream up.
  • GIMP – Many people believe GIMP capable of anything Photoshop can do. I don’t agree, but I do think GIMP is better than Paint.NET for more advanced jobs. A lot like Blender, I find GIMP hard to learn, but that doesn’t stop me from trying. I want to learn it so I can see how long I can live without Photoshop. Someday I’ll be rich and it won’t matter. Until then, I’ll be struggling with GIMP.
  • WavePad – I haven’t tried this yet, but it’s a free audio editing tool that I hope will allow me to make simple audio tracks for animations or an audio book. We shall see. Once I’ve tried it, I’ll write a review (and link to it from here).
  • VideoPad – Like WavePad, I downloaded this to see if it would be suitable for creating simple promotional or family videos. I just want to be able to cut scenes together, edit things out and add simple effects. If this program is a winner, I’ll write a review.


I hope this helped. As I use my system and learn more about what programs are meeting my needs and which ones I don’t have that could help, I may modify this list.

I’m 100% sure of all of the hardware tips though, as well as the “essential software” bit. The important thing to remember is that there are hundreds of thousands of free programs out there that you can find that will do the same things that more expensive software can do. Look to the free stuff first, and if it doesn’t work out, pay for what you need.

Good luck and happy computing!

Game Progress

OK, here I am again with another update on that game I’ve been working on.

Lately, it’s been rough. I’ve been trying to balance my deep desire to work on my coding project and my family life. I think I’ve been doing OK, but I’m sure my wife wishes she could have me just a little bit more than she has had me.

If I must say so myself though, I think everything is turning out fairly nicely. Sure, I’m not really focusing on the graphics, so the pictures I’m sharing below shouldn’t be taken too seriously (they are for example purposes only), and I’m not really working on the story of the game yet (I have friends that are helping with that because they’re excited about it), so a lot of what is written in the instructions is bogus and silly, but the underlying code is working really nicely and I have a lot of ideas written down for making it even more efficient and flexible.

Some of the ideas include a more efficient system for handling the doors and linkages between maps (I think I can reduce the lines of code per door by up to 66%), I have to add support for conversations with different responses (the mechanics are all worked out, I just haven’t coded it yet), I have to add support for doors that lock now that my keys are working properly (I had a wonderful moment of genius yesterday where I figured out a simple, elegant way to handle the locking mechanism in code), and I want to explore the idea of having a border-less map system (where the walls around the edges would be unnecessary). Of course, I need to make tons of new maps (and I keep thinking that some kind of cool editor would be fun, for now I use Notepad), I have to do more with the part of the game where you die (we have some good ideas for a heaven/hell situation based on your choices in the game, the tracking system of which does not yet exist in the code, but I think I’m ready to add it), and I want to do a tutorial mode where you are sent on a brief, simple mission just to learn how to play.

Of course, if the actual game play is going to last more than five minutes it would be nice if the user could save their progress. Right now all of the progress information is stored in variables on the web page and all of the information is lost when you reload the page (close your browser, navigate away from the page and back to it, etc.). I know that cookies could help me save the key information and reload it when the page is loaded again, but I’ve never worked with cookies before so it would be a learning experience. I think I will wait until the game is done and playable before getting into that though, because it would be a pain to make changes to the game code that would require the cookie code to change.

Below I am sharing a few screen shots and the entire written portion of the instructions I’ve drafted up (they are more for fun that serious, and they have not been spell checked so have mercy). The version that is pulled up from the game shows the images associated with each ASCII character, but I didn’t want to upload all of them so you could see. If anyone is interested in playing around in my unfinished version (you can’t win because there is no story yet), just let me know and if I feel like it I’ll upload a .zip file with all of the images and .htm files you need to play. Really all you can do is walk around collecting stuff, talking to people (most of whom have nothing to say) and killing things. Most of the doors don’t work and most of the items don’t do anything. If you want to play around with it though, just let me know and I’ll upload it all. Just don’t go stealing my code! 😀

Click on the image to see the full sized version (I am especially proud of my water monster and the two headed dragon, and no, that woman does not have arms).

Help and Instructions

Story and General Instructions

For now, there isn’t much of a story. Just like any other game, you take control of the worthless and expendable life of some poor little man who needs you to tell him what to do all of the time. The rest of the story will become more clear as you play, or it won’t. Either way, it’s a game, not a movie.

This game is controlled entirely through the keyboard (which is impressive considering that most of the original code was written before I incorporated the keyboard controls). For details on which keys do what, see the table below titled “General Keyboard Commands” and the “Items” table as some items have a keyboard command associated with them.

Most spaces in the game can be walked on, some cannot. The “Terrain” table contains details about that. If there is anything you’re curious about, try to step on it and see what happens. Most item, character and enemy interaction is handled this way.

Look over the tables below to learn more details, then get back to playing the game! This screen can be called up any time throughout the game by pressing the “h” key on your keyboard. To return to normal gameplay, press the space bar. Good luck and have fun!

General Keyboard Commands

Key Action
h Displays this help file. Can be used at any time during the game.
space Function varries based on the situation. If pressed now, it will return you to the game.
t Currently, pressing this key causes the rendering code to switch from using image tiles to using ASCII letters and from ASCII to image tiles.
arrow keys These are the keys you use to move around. You can press an arrow key once to move one space, or hold one of them down to travel a greater distance. While holding down a directional key you cannot change directions without releasing the key you are already holding down. By standing next to an interactive item, such as an enemy, another character or an item, and pressing the arrow key toward that item you will interact with it.
numbers 1-4 These are used in conversation to select your response.
Y/N Sometimes, rather than a complicated response, a character will simply ask a yes or no question, in which case you will hit “y” or “n” to respond.
F5 Pressing the F5 key refreshes the page and starts everything over completely. Your progress is not saved, though a saving system is being considered. Can only be used during game play, not now.


ASCII Key Name Description
a backpack The backpack is used for carrying items. It is required before you can start the game (officially) and carry other items.
o small orb The small orb adds a little attack power to your weapon attack power. The orb is carried in the backpack.
i c candle The candle is used to light up dark rooms. Some rooms have areas of darkness which the candle can also light up, but only momentarily. The candle is carried in the backpack.
# raft Once you have the raft, you can travel over water. The raft is also carried in the backpack.
small stick The small stick is the least effective weapon. Choosing it at the beginning of the game may give you certain advantages however. The backpack is required to carry the small stick.
_ big stick The big stick is a little more powerful than the small stick, though less powerful than the sword. The backpack is required to carry the big stick.
t basic sword The basic sword is the most powerful weapon you can choose at the beginning of the game, though you may find yourself in a disadvantage sometimes throughout the game should you choose it. The backpack is used to carry the basic sword.
/ arrows As of right now, arrows don’t do anything. You carry them in your backpack.
D bow Currently, the bow just sits there and looks pretty. You carry it in your backpack.
~ w gummi-worm The gummi-worm is carried in the backpack until you need it. Pressing the “w” key causes you to eat one from your inventory and restore health.
O big orb The big orb adds even more attack power to your weapon. Requires the backpack.
C lucky horseshoe The lucky horseshoe is useless. You carry it in your backpack.
l k key The key is required for opening locked doors. You need a backpack to carry them in. An inventory is kept for when you have more than one.
B b bomb Bombs blow some things up, but not everything. Use with caution – if you blow one next to another bomb you will get hurt. You carry them in the backpack.
* health star Find one of these to restore some health.
$ money Collect lots of cash. Mostly just because you never know what you’ll need it for.


ASCII Name Description
X wall Walls cannot be stepped on or passed, but some are easy to blow up with a bomb.
H/I doors Some doors are locked, others take you random places. Have fun with doors.
= bridge/wooden floor Some of the bridge sections may blow up when you use a bomb. Be careful.
| railing On occasion you will find a rail that can blow up. It never hurts to check, unless there are other bombs nearby.
w water Once you have the raft, you can travel over water.
! tree Some trees can be blown up, but that’s not a very nice thing to do.
A/M mountains Mountains cannot be crossed for now, but some funny people often live among them.
^ hill You can walk on these with no problem.
P flag I’m not sure what these are for.
grass Feel it between your toes…
E darkness You can’t even see yourself in the darkness, you need light.
`/./,/: sand For walking in. Not good for eating.


ASCII Name Description
@ hero This silly moron doesn’t know how to think for himself and needs you (of all people) to guide him through every little aspect of his meaningless 2-dimensional life.
& old man Usually friendly, these people just want to have a word with you.
K woman Maybe she needs your help, maybe not. You never know which woman will turn out to be the princess in your life.
e basic enemy These are weak, but not the weakest of enemies. The small stick will not kill one alone.
s small snake These are among the weakest of all the enemies. Even a smack from a small stick will beat one to death.
Q “Q” enemy These are a little more fearsome. You’ll need more than just the sword to take these out.
S big snake These are a gamble, even with the sword. Once you’ve got an orb or two though, they’re hardly worth mentioning.
Z “Z” enemy These are some of the strongest enemies made so far.
F water monster These mysterious enemies are strong, so watch out.
N horse monster These are as strong as the “Z” enemies, but harder to find.
Y two-headed dragon These ultra-strong enemies are dangerous, and even a few orbs and a sword cannot kill them. You’re going to have to find something else that may be effective against them.

Where I Went

Occasionally I may disappear from time to time. I should hope that anyone who knows me at all would realize that my disappearing does not mean that I have ceased to be actively engaged in something. In fact, when I neglect something like my “thing” here it’s usually because I have something more exciting going on.

In fact, over the last week I have had several more exciting things happening than this.

In small news, we rented a fun game over the weekend. I loved the movie “Wall-e” so much that I just had to try the Wii game. Overall, my impression of the game was a good one. I think the developers rushed through parts of the game, but the majority was well thought out and fun.

The real time sucker for me the last week or so has been related to my last post about the game project. Shortly after writing that post, I came up with the bright idea to set the actual game portion aside and continue with an aspect of my original idea – the part where simple games could be made even by a novice or child.

I remembered the days when I had a TI-eighty-something graphing calculator that allowed for some simple code writing (scripting) in its native language. I was able to program it to play a number guessing game. It would print out on the screen “guess a number between 0 and 100” or whatever two numbers I chose, then I could guess. It would tell me “too high” or “too low” until I got the answer and it reset to “guess a number…” The experience with programming that simple application was enough to spark my interest in computer and web programming and has led me to better learn linear/sequential-thinking skills (I guess I’m a visual/spatial person, and linear or sequential thinking is difficult for me).

What I’m getting at is this: I thought, “wouldn’t it be great if I could write a program that would ease my son into the world of programming!?!” My son is definitely sequentially challenged and could certainly benefit from a bit of computer interaction at the programming level. How do you teach a five-year-old to write code though? So, I devised a plan (like I always do).

The plan was only complicated because of how elegantly simplistic and straightforward it was. It would be able to teach anyone the basics of a simple web programming language known as JavaScript. I developed an outline for a set of lessons that would walk the user through various levels of difficulty in programming functions. The program itself would adapt its interface to grow with the user as he progressed through the lessons and became more proficient.

I may or may not create the JavaScript teaching program, but I am already nearly done with one of the projects the program would walk the user through creating.

In fact, the project has grown into something far more complicated than anything I would ever ask a new programmer to attempt. It has even stumped me a couple of times in big ways.

When I finish it, I’ll try to upload it to my Google page so you can try it out. Quickly, before I go off to bed, I’m going to explain what it is and ask for your input and suggestions.

I’m making a simple game that will be played in the web browser. It is programmed entirely in JavaScript and is (as of right now) designed to be played in one sitting, though each time you play it your choices will create a different experience. If I go back and review techniques for writing and reading cookies to your local machine, I may be able to allow you to save your progress, but for now the entire game resets when you close the browser, refresh the page or load the page.

Right now, the entire look of the game is achieved with text. Here are a couple of screen-shots to illustrate:

Eventually I may take screen-shots like these into Photoshop and modify each individual character to better represent its item (saving the modifications as small images and having the program assemble the images in the same manner as it assembles the text).

For now, I would simply have to explain what each character represents for a person to be able to play the game. The @ symbol represents the main character. The & represents other people, the s and S are snakes, the $ is money, * is health and the C is a lucky horseshoe. Of course, the e is an enemy, as are the Q’s and the snakes. The H’s at the tops and bottoms of the screens are doors, and the I’s are also doors on the sides. The ^ represents a hill that can be walked on, but an A is a mountain and cannot be initially transversed (perhapse special shoes could be obtained allowing one to scale a mountain). The w is water, and a raft (#) is required before one can cross rivers that do not have a bridge (=). Sand and grass are represented by periods, semicolons and commas, and trees are exclamation points.

Of course, there are many other characters that I have used, but it would be a simple job to have the Javascript replace each letter or character with an image and thus create a much less jarring visual experience for the user.

Essentially, I have too many ideas (just for the game engine, the inner-workings of the code that drives the game) to outline everything here. The room on the right in my example was dark (represented by a screen full of E’s) until I used my candle to light it up (many ideas are drawn from games like the Zelda and Link series). I have set my code up to be flexible enough to do almost anything. All I need now are more ideas.

What kinds of stories would you tell if you had an open ended game like this? What kind of adventure would you go on? You can’t bring any friends with you, and your items may be limited (with no features for animating, enemies don’t move and it would be nearly impossible to actually use the bow and arrow – for now I don’t plan on animating anything), but many quests and adventures are still possible. Send me your best ideas and I’ll see if anything sounds fun to me.

My wife has already contributed (Burt and the gummi worm are her handiwork). What ideas will you contribute?

Once I’ve finished the basic game engine I’ll try to post it online somewhere so you can see what it’s capable of. I won’t have a story fully developed by then, of course, but everything should function properly (as of right now, it is possible to lose a battle and end up with negative health points, but you don’t die). I’ll work out the bugs and you can come up with ideas for me. If your idea requires a reworking of the basic engine, but it’s good, I’ll see what I can do. Remember, I’m keeping things fairly simple, but complicated enough to be fun.

Oh, and in case you’re wondering… The portion I expected an intermediate beginner to be able to code was finised within the first day. It consisted of a few lines of code to draw the map and some buttons that moved the little man around in the map. From there I just kind of went crazy… And what if you could collect items? Oh, and what if you could have a raft? Wow, and how about doors? Let’s put some enemies in! We need weapons, and battles, and candles for darkness, and keys for doors, and guys to talk to, and boss battles, and stores, and dynamic items and terrain, and conversations, and why won’t he die?, and, and, and… … …

Game Project

RPG Maker once brought simple game creation to the masses. Back then, from my perspective, it was the first and only one of its kind. I recently discovered other, similar ideas (some dating back before my first experiences with RPG Maker), but my first love was RPG Maker 95 (which, to my squealing delight, I was able to find cached online and I downloaded it!).

I bring this up because I have recently been feeling a desire to make some games with and for my son as a way to educate, engage and entertain him.

It all started when I was playing (and rather enjoying) a very simple game on my cell phone. Unfortunately, the game required no longer than fifteen minutes to complete, but it called to mind hundreds of ideas for similar, longer games that I could create on the computer and would be simple enough for a child to play.

I know some limited Visual Basic, so when I see something like a simple point-and-click cell phone game I often think to myself, “I could do that.” I am wrong sometimes, but if I can’t do it I find a way to do it or I find someone else who can.

The sad thing is, if I had set out a month ago when I had the idea, and just started making the game, it’d be done by now. Unfortunately, this is not possible with me, as I outlined in a previous post. In fact, I specifically brought this idea up in that post when I mentioned that I had an idea for a game that has since evolved into an idea for a game creator and editor.

Uncharacteristically, I was able to restrain my ambitious tendencies and keep the game type specific. My game/game maker was to be for a simple scene based game where the user can click on and interact with items in a static environment, changing scenes with simple navigation buttons. In my technical write-ups I was often tempted to add in functionality for scrolling or 3D, but I kept things as simple as I could within my already exploding idea.

Today I was working out a few of the technical aspects of my idea when it occurred to me that the project had grown larger than my plate. I was either going to need to enlist outside help, or find someone else who has already done what I wanted to do.

So, I came up with a plan. I was going to outsource the programming. I found a site online that offers programmers for hire. Unfortunately, I have no money or budget for this project, so I set that idea aside and decided to look for communities of programmers that do programming work for free (yes, they actually do exsist, but they are difficult to enlist). In order to pitch my idea I needed to write up a very detailed description of what I wanted to accomplish.

I planned on creating a main page with Google Sites, then drafting up more specific, technical documents in Google Docs with schematic drawings and images. I would advertise it by linking to the project homepage with a quick plug at several developer community sites and forums. In thinking of what I could write for the project’s introduction, I had an idea.

That’s when I remembered RPG Maker. In a sense, RPG Maker was a lot like my idea. Rather than just make an RPG, the creator of RPG Maker made a program to assist anyone and everyone who wanted to make an RPG. I wanted to do the same thing for a much more lame type of game. The boring, static, simple games. So, just for the heck of it, I decided to research RPG Maker in preparation for writing this entry, and that led to something else, and one thing kept leading to another thing…

What I’ve discovered is that the game maker programs are out there, they’ve just been hiding (there is even one called “Game Maker“). I found dozens of free tools that offer all of the functionality I had planned for my big project (I think) plus a whole lot more. Obviously, I downloaded a bunch of them. Now I just have to install and evaluate each of them to find one that I can use for my purposes.

I’ll be sure to let you know which one I like the best and I’ll share whatever I create with you (many of them will be targeted at or designed by children, but there might be a little something for you too!). If I were a little better organized I would have been saving links to the sites I found while doing all that research so I could list them here. In fact, if I were less lazy I could just go to my browsing history and pull it all back up.

Just because I’m nice, here are two that I found that look promising. The first is called Game Maker by YoYo Games and the second is called Adventure Game Studio. I’m pretty sure I downloaded at least one more, but I really can’t remember which one(s). Oh, and I downloaded RPG Maker 95 too, of course!

Stay tuned for updates on this exciting new adventure!

Ultimate List Handler

Ultimate Intelligent List Handler for People Who Love Lists

This is a quick outline of the features and organization I think belong in a good list handler. I love lists, and sometimes just assembling a list of things I want can make me feel as though I have received what I wanted. It’s like getting a craving for Mexican food, then collecting pictures of Mexican food items and having the craving satisfied. That’s what lists do for me, and I know there are other people like me out there.

I shall now use this description as my model and go out looking for the perfect list handler to meet my needs. If I can find nothing close enough, I may have to create my own program (which I am capable of doing given enough time). I have found one online wishlist handler which almost does what I want it to do, but it lacks some simple ideas which would make it more useful to me.

So, here is what the perfect list handler should be able to do:

List Groups
An individual list can be a part of one or more list groups. Group specific image and icon options would make these a good basic organizational level. Groups are like categories, in that you can have a “Wishlist” group and several different themed wishlists could belong to that group – “My Christmas WIshlist,” “My Spouse’s Wishlist,” and so on. A wishlist for video production equipment that is in the “Wishlists” group could also be a member of the “Future Purchases” and “Expensive” groups.

Each list can have a description, representational image and icon, and a list of creators & benefactors. Additionally, the list can be tailored to meet special needs. A list can be started by just adding items to it, or a more complicated list can be begun by outlining item types that would be needed. A more complicated list formed on a frame of “types” could give a variable, flexible budgeting plan with options to help organize what item would do best in what slot in the list. Lists can be ordered or unordered, based on priority, price, alphabet, date added, etc. You can simply put one item above another item because you like it there if you want, or you can assign priority values and have the list grouped by priority. You can even have phases, where the list is grouped into items that need to be purchased first, second, third, etc.

Once a list has been made, it can output HTML, Documents, perhaps even Spreadsheets with the items, costs, descriptions, images/icons, etc. using options made possible with the item types.  These outputs could be tailored to fit in budgets, show a time line of when to purchase what, and so many other possibilities.

Item Types
Inside of a list, several options could be variable. To help organize the variables “types” would become important. For example, if I am creating a list of things I need for video production, I can have requirements (specified at the List level) such as camera(s), light(s), microphone(s), and so forth that would be types. Each item I add to the list would then be grouped into a specific type. Each type can have characteristics associated with it that would specify how many of each item I need. Perhaps I find three different camera models I like, but I only plan on needing two cameras. My “Camera” item type could be programmed to know that only two cameras need purchasing and that any of them could fill the spots. Then, when I am outputting a cost breakdown, a range of camera prices would show based on combinations of the prices of the cameras filling that type position in the list.

Items can be associated with more than just one type or list. Once the program has an item inputted, adding it to another list can be achieved easily by pulling the item up in the new list or from another list and adding it. Items can have more than one image associated with them, one as the main image, and they can update pricing and get new images easily within the program. Links to different vendors and prices could also be retrieved within the program.

Keywords & Tags
Sorting, organizing and browsing items, lists and groups would be handled primarily by tags & keywords. By searching one or more keywords an item could be found easily to be added to a new list.

If you know of anything that does all of this, please let me know in the comments. If you have any other ideas of what a list handler should be able to do, also leave a comment!

Call to Arms

I propose that the whole idea of an operating system that needs to restart in order to update or fix errors is fundamentally flawed and has its roots in the days when processor time and memory use were drastically more limited and more carefully budgeted in programming than they need to be now. If we continue to hold on to programming habits and traditions formed in those early days, future progress may slow or even halt when our technology begins demanding more efficient, dynamic infrastructures on which to think and perform calculations. When such a day comes, we might be left scratching our heads wondering what the big holdup is – unless we are ready.

For what reason do we have files in our systems that the operating system needs to protect from change while running? I believe that this may have originated in the days when the first two digits of the year were dropped to save space in the memory. The programmers didn’t consider that eventually the year wouldn’t start with a nineteen, or that such savings in memory would be trivial in just a few short years. I think that in order to keep the processor free to run programs in the operating system, programmers avoided having to reference certain system files more than once while the operating system is running. By reading them once at startup, then deeming them “untouchable” during operation, they avoided having to read the same information several times while running. Whether I have this particular detail correct or not, I think the basics of the idea are based in processor usage or memory management somehow. Either way, programmers did not realize that one day computer processors would be capable of performing calculations several times faster than most users would require of them and memory would be measured in terabytes rather than kilobytes.

In order to clearly see a need for change, we can travel into the future. Imagine a robotic surgeon performing an emergency surgery in a remote area of the world. This robot may be completely autonomous, or it may be remotely guided in some capacity by a human surgeon. The operation begins, the first slice cleanly revealing the innards of our poor, doomed example subject. A few cuts later and a major organ will be in jeopardy. There will be a thirty second window to take needed precautions to prevent this patient from being seriously injured or even killed. Our multi-limbed machine is fully capable of performing this task in under ten seconds, but suddenly, as the thirty second window opens, a fatal error occurs in the operating system code. A blue screen of death shines in the background while our patient is beginning to die in the foreground. A redundant system realizes the problem and restarts the main computer. Backup processes would have been able to carry out the instructions necessary to save this man’s life, but the data has been corrupted and needs to be restored. Luckily, this is the future, and our system restarts in just under ten seconds. The local data is restored by logging into the robot’s online data cloud and reconstructing the damaged areas. Finally, nearly fifteen seconds in to this critical countdown the surgeon begins saving the dying organ. Unfortunately, the process takes twenty seconds, and fatal damage has already been done. The patient dies.

Admittedly, even more redundant systems would probably exist on such an important machine, several of which redundancies would be fully capable of accessing uncorrupted, collectively managed data and completing the surgery without incident. My point wouldn’t be made quite so clearly though if redundant systems had saved the patient. The question is, why should our systems need to restart when an error is encountered? Shouldn’t proper, modular programming techniques be able to circumvent the need to completely reboot the whole operating system? It is both expensive and impractical to simply give every important computer system several redundant iterations of itself.

With processor speed so high and memory so freely available, I don’t see why we can’t have a certain amount of built-in redundancy for every individual computer without having to install physical clones of the computer. Systems exist that will add redundancy to data storage (like the Drobo), but even these techniques cannot prevent your system from needing to restart after certain errors. In a modular operating system, a fatal error should only require the affected module to restart, not the entire system. If the module that encounters the error is a critical system module that would cripple the entire operating system while disabled, then a redundant module should exist to prevent the user from being affected by the error.

For another silly example from the future, let’s visit the computer system that handles traffic movements. This system monitors traffic needs and controls traffic flow in an entire city. It networks with traffic computers in other cities to gather data about movements between the two cities. It connects with individuals’ calendars to help them get to appointments on time. This computer is a very busy system. Once a week, though, at three am (on Wednesday), it logs in to its manufacturer’s website to check for updates. If it finds any updates, it stops traffic for ten seconds while it reboots.

Ridiculous? Yes. If a computer is controlling traffic, the vehicles may be moving at amazing speeds. Ten seconds holding still, rather than moving at five hundred miles per hour, could mean big financial loss for businesses that rely on the quick movements of goods or people. Ten seconds not moving might seem like an eternity to a mother in labor on the way to the hospital, or a young man who has swallowed his iPhone and can’t breathe.

The traffic computer should be able to make changes to its system files without needing to shut down and restart. A modular system that isn’t afraid to reference itself dynamically should be able to make changes on the fly without exhibiting the archaic behavior of our current computers.

Why should we wait for such changes in operating system philosophy to become necessary? We are ready now, we have the processing power now, let’s do this – now. I call on operating system programmers everywhere (and anyone else who wants to help) to organize and begin redesigning the operating system from the ground up to be modular, redundant, resilient to errors and dynamically capable of updating without ever needing to restart, reboot or shut down.

Subscribe to Me

What I’m Reading

When I Post

April 2017
« Sep    

RSS My Favorite Quotes

  • Quote #60
    "The greatest minds are capable of the greatest vices as well as the greatest virtues." - Rene Descartes
  • Quote #59
    "There is nothing noble in being superior to your fellow man; true nobility is being superior to your former self." - Ernest Hemingway
  • Quote #58
    "The fool doth think he is wise, but the wise man knows himself to be a fool." - William Shakespeare

I have had:

  • 50,212 page views (so far)

I’m a Twit