Posts Tagged 'javascript'

Awareness

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?

RE: Chrome

Amazon knows almost everything about nearly every major purchase I’ve made in the last four years (or longer, I can’t even remember when I started shopping on Amazon). Google knows all about who I’ve been in touch with, what I’ve been looking at, looking for and reading all over the Internet for at least the last three years, but probably even longer since I was using their search engine shortly after they first appeared online about a decade ago.

And, until recently (just today, actually), Firefox has been quietly and dependably facilitating all of my activities, communications and learning via the World Wide Web since I converted from Internet Explorer near the beginning of the millennium, around 2004 (not that I needed a good reason to leave that tired piece of reject code behind). All the way from 1.0 to version 3+ I’ve been a loyal supporter, fan and avid user of Mozilla’s beautifully designed desktop icon, Firefox. I upgrade every chance I get. I install plug-ins. I even bought a Firefox t-shirt and some stickers.

I still love Firefox, but now I’m feeling a little… confused.

It’s not like I didn’t tell her. Firefox knew all about our little “thing” since it started. Since February of 2005 I’ve been a raving fan of Gmail, Google’s (still beta, three years later) e-mail service, and Firefox was there when I signed up. When Google really started branching out into other services, especially with the iGoogle homepage, Google Docs and Google Reader, I was interested. After all, Google was a strong supporter of Firefox, so using their services wasn’t a disservice to my beloved web browser at all, was it? In fact, I was supporting a supporter of Firefox.

A couple of days ago I heard that Google was on the verge of releasing their new browser, Chrome. I read a nice article about it from a source I enjoy reading (and usually trust) and decided to give it a try. I had already been using Google Desktop on my Linux laptop and Google’s Picasa photo software on my Windows computer, and I love Google Earth, Google Talk and Google’s release of SketchUp, so a Google web browser didn’t sound all that bad.

My first impressions are a mess of mixed feelings, but overall I am both impressed and pleased. I can come up with really only one major gripe (other than that Chrome doesn’t support any good plug-ins yet, like Adblock Plus) having to do with the way it handles RSS and other subscription feeds, but despite how much I do like the newcomer, my beloved Firefox is dormant even now while I use Google Docs to write this from within Chrome, and I’m not sure how I feel about that.

I’m enjoying the experience, but with a touch of bitterness. Chrome is not Firefox. Mozilla took on a web browser giant and made some major headway and history, significantly impacting Microsoft’s monopoly on the web browser market. Now Google wants to offer Internet goers yet another option, and I’m all for competition, but now I am forced to question my personal definitions of loyalty and support in this grand game of Hungry Hungry Web Browsers.

Would making the complete switch to Chrome be betrayal? I’m not ready for that yet, as I have fallen in love with the features many of Firefox’s plug-ins offer as well as Firefox’s inherent feature-set. I don’t think Chrome is that far behind though, and it will probably catch up soon. What should I do? Obviously I’ve switched before, and it’s not like I’m married to Firefox, but I had never felt loyalty for a product before like I do for Firefox – or so I thought. Perhaps what I felt wasn’t loyalty at all, but satisfaction. If I can find satisfaction somewhere else, and we’re not talking about marriage here (of course) then perhaps I belong somewhere else.

That’s how I handled my switch from a mail service I liked (go.com, before Disney bought them – do you even remember them?) to a mail service I love. That’s how we should do business, that’s why there’s competition. There has to be choice.

But then, I’ve been with Firefox longer than I’ve been with my wife. We go way back (in Internet years, anyhow). Just now I was doing some research to get the dates right for when Firefox was first released, and when Google really got their start. I typed “http://www.wikipedia.org” into the address bar, then hit “TAB” and it displayed this:

Then I could type in my search without ever having to load the main Wikipedia page. Of course, Firefox and other browsers have offered this function in one way or another (separate search bars, toolbars, plug-ins, etc.) but never has the workflow been this natural and easy (from later tests I found that I didn’t even have to hit the tab). That’s just one of many features they’ve included in their browser (the Omnibox).

They also snatched up the fastest JavaScript engine on the market (up to ten times than the system Firefox is running, and WAY faster than the IE JavaScript), and they set up their infrastructure to prevent many of the problems that older browsers are facing today with common viruses, bugs and page crashes that can disable the browser or even the whole computer.  
For more details on the technical aspects of this new browser, check out some of these articles:

  • Wired Magazine – the one I read that got me interested – the history, reasons behind it and some of the new technology in a well-written, easy-to-read, fun presentation
  • Blogoscoped – very good basic rundown of the features
  • Washington Post – good review of some of the features
  • PC World – good article, seven reasons for it and against it
  • USA Today – a nice, brief review

In the end, Chrome has many awesome, powerful features that make it very attractive to me. I may end up switching when they make those last couple of changes to make it just a little more attractive to this (still) loyal Firefox user.

No matter what happens, though, I’m keeping my Firefox t-shirt.

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.

Items

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.

Terrain

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.

Characters

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… … …


Subscribe to Me

What I’m Reading

When I Post

July 2017
M T W T F S S
« Sep    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

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,370 page views (so far)

I’m a Twit