Famous Quotes

Insults – they just don’t make them as they used to

“He has all the virtues I dislike and none of the vices I admire.”
Winston Churchill

“A modest little person, with much to be modest about.”
Winston Churchill

“I have never killed a man, but I have read many obituaries with great pleasure.”
Clarence Darrow

“He has never been known to use a word that might send a reader to the dictionary.”
William Faulkner (about Ernest Hemingway)

“Poor Faulkner. Does he really think big emotions come from big words?”
Ernest Hemingway (about William Faulkner)

“Thank you for sending me a copy of your book; I’ll waste no time reading it.”
Moses Hadas

“He can compress the most words into the smallest idea of any man I know.”
Abraham Lincoln

“I’ve had a perfectly wonderful evening. But this wasn’t it.”
Groucho Marx

“I didn’t attend the funeral, but I sent a nice letter saying I approved of it.”
Mark Twain

“He has no enemies, but is intensely disliked by his friends.”
Oscar Wilde

“I am enclosing two tickets to the first night of my new play, bring a friend… if you have one.”
George Bernard Shaw to Winston Churchill

“Cannot possibly attend first night, will attend second…if there is one.”
Winston Churchill, in response

“I feel so miserable without you, it’s almost like having you here.”
Stephen Bishop

“He is a self-made man and worships his creator.”
John Bright

“I’ve just learned about his illness. Let’s hope it’s nothing trivial.”
Irvin S. Cobb

“He is not only dull himself, he is the cause of dullness in others.”
Samuel Johnson

“He is simply a shiver looking for a spine to run up.”
Paul Keating

“He had delusions of adequacy.”
Walter Kerr

“There’s nothing wrong with you that reincarnation won’t cure.”
Jack E. Leonard

“He has the attention span of a lightning bolt.”
Robert Redford

“They never open their mouths without subtracting from the sum of human knowledge.”
Thomas Brackett Reed

“He inherited some good instincts from his Quaker forebears, but by diligent hard work, he overcame them.”
James Reston (about Richard Nixon)

“In order to avoid being called a flirt, she always yielded easily.”
Charles, Count Talleyrand

“He loves nature in spite of what it did to him.”
Forrest Tucker

“Why do you sit there looking like an envelope without any address on it?”
Mark Twain

“His mother should have thrown him away and kept the stork.”
Mae West

“Some cause happiness wherever they go; others, whenever they go.”
Oscar Wilde

“He uses statistics as a drunken man uses lamp-posts…for support rather than illumination.”
Andrew Lang (1844-1912)

“He has Van Gogh’s ear for music.”
Billy Wilder

davidandkiko.com 5.0 – Post Styles

So welcome to the test style post for the Sawchuk Scheme, for K2. I think its great as its designed to emphasize the content over the style of the site. Anyway, there is a lot of dummy text here, where possible I have indicated the style used. Feel free to look at the HTML source if confused. Anyway, so then after I earned my first million, I learned how to speak latin! Ulla hendrerit massa sit amet nunc. Donec pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc dolor. Duis dui. Aliquam erat volutpat. Suspendisse nulla. Aenean vehicula lacinia lacus. Nulla facilisi. Fusce tincidunt nibh ut libero.


p class=”code” Donec pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc dolor. Duis dui. Aliquam erat volutpat. Suspendisse nulla. Aenean vehicula lacinia lacus. Nulla facilisi. Fusce tincidunt nibh ut libero.

Nulla hendrerit massa sit amet nunc. Donec pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc dolor. Duis dui. Aliquam erat volutpat. Suspendisse nulla. Aenean vehicula lacinia lacus. Nulla facilisi. Fusce tincidunt nibh ut libero.

class=”blue_hilite” Donec pede. Here is a link!

class=”callout” In porttitor. Suspendisse nonummy felis nec lacus. Quisque sapien nisi, viverra ut, accumsan vitae, tincidunt at, tortor. Etiam nisi libero, porttitor in, ultrices sed, lobortis vitae, lorem.

class=”alert” Danger Will Robinson!

class=”download” The Official Sawchuk Wallpaper

class=”other” Danger Will Robinson!

class=”blue_hilite”

class=”construction”

THIS IS THE CODE CLASS

Read the rest of this entry »’); ?>
Pages: ‘, ‘’, ‘number’); ?>
Unordered List:

  • Weblog
  • Articles
    • How to Beat the Red Sox
    • Pitching Past the 7th Inning
      • Part I
      • Part II
    • Eighty-Five Years Isn’t All That Long, Really
  • About

Ordered List:

  1. Cheddar
  2. Motzeralla
  3. Marble
  4. Tickle Me Elmo
  5. Gouda
  6. Parma

Default Blockquote Style
Maecenas eu sapien. Phasellus et augue. Mauris a mauris a elit bibendum porttitor. Sed eu enim. Pellentesque eget ante. Mauris dictum pede a nisl mollis commodo. Ut vel urna et tellus imperdiet varius. In varius sapien quis nunc. Morbi a dolor a sem interdum condimentum. Donec tellus libero, egestas eu, pellentesque a, auctor a, odio. Aliquam condimentum fermentum nunc. In eros dolor, adipiscing et, ultricies id, tempus vitae, diam. Morbi vehicula sagittis massa. Nunc feugiat. Mauris accumsan erat in orci. Sed blandit libero eu purus. Vivamus et risus. Etiam id pede quis justo laoreet euismod.

blockquote class=”green” Vestibulum sem magna, adipiscing eget, elementum sit amet, interdum id, mauris. Fusce aliquet nulla a lacus. Vestibulum blandit nulla quis odio. Nullam sem felis, molestie a, pulvinar ut, mattis vitae, sem. Integer ut justo. Quisque bibendum metus ut diam. Fusce accumsan condimentum erat. Vestibulum ornare nunc sed orci. Maecenas erat felis, tempus ut, molestie ac, sodales a, neque. Duis ac arcu. Donec tellus tortor, elementum in, imperdiet eget, sodales ut, lectus. Aenean scelerisque velit vitae sem. Pellentesque neque.

class=”callout” (with no links) Nunc euismod mi non nisl. Donec consectetuer. Donec nonummy. Duis vitae est vitae odio rutrum pellentesque. Nunc hendrerit pretium pede. Pellentesque fringilla vestibulum erat. Quisque volutpat vestibulum mauris.

Goalie Hero

blockquote class=”red” Praesent pulvinar pellentesque magna. Pellentesque feugiat diam eu eros. Praesent id arcu. Morbi in odio. Nullam eu orci ut tortor vehicula viverra. Phasellus mollis. Morbi pede elit, volutpat iaculis, posuere in, placerat vel, enim. Sed leo pede, feugiat at, ornare vel, pulvinar ac, nunc. Phasellus viverra, metus sit amet scelerisque volutpat, metus erat dignissim velit, eget hendrerit enim turpis eu nunc. In viverra semper massa. Mauris dolor lacus, consectetuer id, tincidunt ac, fermentum id, lectus. Cras elementum vestibulum turpis. Suspendisse non est imperdiet mauris dapibus nonummy. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Quisque non mauris. Donec risus. Vivamus id pede. Cras non dolor nec mi congue fringilla.

Linux – Netcat Command

Netcat: The TCP/IP Swiss army knife

Posted by Steve in the Packages section on Thu 16 Dec 2004 at 11:28

Of all the networking tools I’m familiar with I use four more than any other; ping, traceroute, nmap, and netcat. The first two utilities are standard on many operating systems. nmap is a port scanner which makes it simple to identify the services running on a machine. Netcat? That’s a general purpose tool described by its author as a TCP/IP swiss army knife.

The utility of netcat comes from its extreme simplicity, it does one simple job very well. The main job of the package is to open up a network pipe, you connect to a host and it sends all input to it, and shows you the output.

It’s almost the same as a telnet client, but much more scriptable.

For example we can connect to a webserver using netcat and send a command to it – getting the result piped back to us.

skx@lappy:~$ echo -e "HEAD / HTTP/1.0\n" | nc www.foo.com 80
Date: Wed, 15 Dec 2004 23:05:36 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.8
X-Powered-By: PHP/4.3.8
X-Accelerated-By: PHPA/1.3.3r2
Location: http://0.0.0.0/
Connection: close
Content-Type: text/html

Here we used the echo command to send get input to the process, instead we could type it manually:

nc www.foo.com 80
HEAD / HTTP/1.0
[ret]
HTTP/1.1 302 Found
Date: Wed, 15 Dec 2004 23:06:41 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.8
X-Powered-By: PHP/4.3.8
X-Accelerated-By: PHPA/1.3.3r2
Location: http://0.0.0.0/
Connection: close
Content-Type: text/html

As well as setting up a pipe to a remote machine sending our input to it, and showing us the output from the far side we can use it in the reverse manner.

In this case we tell it to listen to a port – and send some text back to anybody who connects to us:

skx@lappy:~$ nc -l  -p 2000 -e /usr/bin/uptime

The command line flags used here are -l for listen, -p 2000 for listening on port 2000, and -e /usr/bin/uptime to execute the uptime command when clients connect.

From a different machine you can test this, by connecting to port 2000 and seeing the output:

skx@lappy:~$ telnet localhost 2000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
00:07:50 up 3:03, 4 users, load average: 0.08, 0.11, 0.20
Connection closed by foreign host.

There we see that we’ve been sent the output of the uptime command, after which the netcat process has exited.

We can write a very simple servers that do simple jobs, or forward traffic between machines using this principle.

For example if you wished to redirect traffic from port 24 on one machine to port 22 on another then you could insert a line like this inside your /etc/inetd.conf file:

24		stream 	tcp	nowait	nobody	/usr/sbin/tcpd /bin/nc 192.168.1.1 22

(Don’t forget to restart inetd by executing /etc/init.d/inetd restart).

Now when you connect to your server on port 24 you’ll be seamlessly redirected to the SSH port (22) on the remote machine 192.168.1.1.

This is just one example of the kind of job netcat can be setup to handle, for more inspiration read the manpage by running "man netcat".

There’s also a good page online with a few samples of fun things to do with netcat here:

Japanese / JET Taxes

JET Base Salary: 300,000

      →       雇用保険 (koyou hoken) Employment Insurance
保険   →       厚生年金 (kousei nenkin) pension
      →       社会保険 (shakai hoken)     → 健康保険 (kenkou hoken) health scheme

税金      (CO pays these taxes)

      →       住民税 (jyuuminzei) inhabitants tax (町民税か市民税と県民税)
      →       源泉所得税 (gensen shotokuzei) income tax

確定申告 (kakuteishinkoku) Personal Income Taxes

 

Getting a Job (a resume…)

Dear prospective job hunters.

Thank you for taking the time to look at our site, and thank you for
being interested in working with us.

Most applications I receive go straight to the deleted-items folder
because of a few simple mistakes. I’m beginning to feel bad, so if you
are going to make the effort to apply for a job here, or anywhere
else, I’d like to offer you some advice.

To successfully interest me in hiring you, you need understand what we
as business owners face on the other side of the fence. Hiring is the
most important task I face, but it is also 76th on my list of a
hundred other things to do today. When we put a posting on Craigslist,
we usually get around 100 responses within 48 hours. They flood into
my inbox, and I have to push them aside until I have time to give them
the attention they deserve. In the meantime, I have phones ringing,
deadlines to meet, problems with our systems, employees with
questions, and much more to compete for the limited capacity of my
brain.

But, don’t let this put you off. It doesn’t take much to distinguish
yourself. Here’s how :
1. YOUR COVER LETTER MUST ANSWER OUR NEEDS.

When I do get round to your email, I do not have time to look at every
detail. I make quick and rapid decisions about whether I will call you
or not. I don’t even get to most resume’s because the cover letter is
so drab. If you want to stand a chance at getting a response, you
ABSOLUTLY MUST spend some time on this.

So, how should you write a cover letter? – Simple, read our post, and
tell me quickly how you can meet the needs we have listed. Use
examples wherever possible. Take a look at these two different
letters….
An excellent cover letter (5% are like this)    The run of the mill
cover letter (95% are exactly the same)

James,

OK, I admit. I saw your posting just now for the Product Marketing
Manager for Outdoor Adventures and Experiences just now on Craigs
List, and I’m salivating. so I can’t imagine a better adventure for a
career than to market excitement and fun. Let me tell you 3 reasons
you should consider me for this position :

  1. Strong Design Skills You’re ad said you were looking for someone
who can design brochures and other marketing materials. I have 2 years
of design, and am proficient in Adobe Illustrator and Pagemaker. I
have created brochures for XYZ company, and ABC company, and have
attached a PDF of my work. I’d be happy to show you my portfolio in an
interview.
  2. Good communication and writing skills – In my former job, I
regularly led meetings that involved dozens of people. Several times a
year, I would speak for my company at industry events… sometimes to
audiences of several hundred people. I know how to craft a good press
release and have successfully managed to get several articles into
print.
  3. I love experiences – I completely relate to your philosophy that
life is about experiences. I love to travel, and have recently
returned from 2 months in Peru where I helped feed orphan children in
a small town. I’ve never been skydiving, but it is on my top ten list
of things to do next year. Perhaps this is my opportunity.

ExperienceTHIS is a place where I know I can make a difference, and
with my experience at conceiving plans and putting projects into
motion, I’m sure I could impact you very quickly without spending too
much time in the starting gate. I would love to meet with you in
person to talk about how I can help take the adventure to a whole new
level.

Dear Sir/Madam

Please accept this letter and resume for the Product Marketing Manager
position as referenced on craigslist.com .

As a recent MBA graduate, I believe that I offer the skills that are
crucial to this position. My background in public relations, as well
as my formal education in business and marketing from the University
of San Francisco will serve as a complement to your firm.

After doing some extensive research about experienceTHIS.us, I am sure
that my work history and educational background will greatly benefit
the future endeavors of your organization. (Did you really do
extensive research on us??? – no evidence here, that’s for sure) My
work history coupled with my education in business administration has
provided me with an invaluable sense of communication and negotiation,
as well as quantitative analytical skills. Blah Blah Blah

From both my professional and personal experiences, I have developed
an enthusiastic, entrepreneurial, and disciplined work ethic. I
possess the ability to work under pressure and rapidly adapt to
changing work conditions. I excel in both individual and team driven
environments. With this in mind, I am confident that my employment
background, eagerness to learn, and genuine character will prove to be
an asset to your company. Blah Blah Blah

I look forward to discussing employment opportunities with you in the
near future. I am available for an interview at your earliest
convenience. Thank you in advance for your consideration. Blah Blah
Blah

Which one would you call back? – The one on the right doesn’t even
come close to responding to what we’re looking for. If you just
regurgitate a form cover letter from some book you read, or the email
you sent to the last company, I’m going to yawn and hit the delete key
before I ever get to your resume. I feel bad doing it, but I just
don’t have time for blah blah blah.
2. Don’t blah blah blah.
Be super clear and concise. Use the same language to describe your
achievements to me, as you would to your grandmother. For example…

   "My work history coupled with my education in business
administration has provided me with an invaluable sense of
communication and negotiation, as well as quantitative analytical
skills"

*yawn* – This means nothing to me. Compare it to this…

   "I have only really had one job. It was at Larry’s Video Store
near my college. We were losing customers to Netflix so I helped
convince my boss to offer a subscription service to our customers. I
made up a business model of our projected sales, and showed how this
would improve our bottom line. My boss agreed, and tasked me with
spreading the word. I designed flyers and put up posters around campus
to promote our new service. Our subscription model was a success, and
I’m sure my boss Larry would sing my praises for my business and
marketing initiative.

Be clear, concise, and factual. Don’t use fluffy words. Describe
yourself, who you are, and how exactly you can help. – If you can’t
make a selling proposition for yourself, how on earth will you do it
for me?
3. Don’t make the mistake of attaching your cover letter as a word document.

You’re writing me an email…. imagine me sitting at my desk with my
inbox dinging every minute. Do you think I really want to fire up Word
to see a formatted cover letter. No… just write your cover letter as
you would any other email. That’s what email is for.
4. Respond with the title of the job advertisement in the subject heading.

Yes, it’s good to use some initiative in the subject line to grab my
attention, but I sort my email based on subject, and if you’re not in
the right subject, you’re going to get lost.

   * Bad : I love skydiving and work really hard
   * Good : Product Manager job
   * Best : Product Manager job (I love skydiving and work really hard)

5. Win me over by being open and honest.

I respect failure, and I look for potential. Yet, it seems to be
common practice to BS on resume’s nowadays. It’s ok to be proud of
your accomplishments, but a little modesty makes you look human. I’d
much rathe

r meet with someone who admits they’ve failed, than someone
who pretends they’ve always been successful.

   "I successfully led a ten person team to generate sales of $200,000"

Yeah, ok… but I’d respect that person even more if they had the
balls to write this :

   In my last job, I had ten people working for me. It was stressful,
and I didn’t have a clue about how to manage at the time. Two of my
team resigned in the first month, and I found it difficult to motivate
the other eight who were all older than me. We still met our quota,
but I was let go. To be fair, I was in over my head at the time. I
have since been to two leadership training seminars, and I can see now
where I went wrong.

Which one would you rather talk to?

Must get back to work now, but I hope this has helped you out.

James Dilworth, CEO
experienceTHIS.us – Experiences make better gifts

Gaijin Super Powers

After arriving here in Japan, I have discovered that the concept of
Gaijin Superpowers is not quite as farcical as I’d first thought.
After comparing notes with some of the other local foreigners, on
occasion we have all noticed the presence of these supposed abilities
when interacting with the Japanese. For the purposes of clarity, the
known list includes:

Gaijin Smash – The ability to manipulate the outcome of a given
situation by using your will in an overbearing manner to dominate the
Japanese.

Gaijin Optic Blast – A ranged version of the Gaijin Smash,
particularly effective on trains. If correctly mastered, you can even
get a physical flinching response from your target.

Gaijin Perimeter – The ability to project an invisible barrier around
yourself that only the Japanese can sense and thus be repelled by it.
It’s range and effectiveness grows exponentially with the addition of
other gaijin – particularly tall males.

Gaijin Power (AKA: Gaijin Charisma) – Similar to a vampire’s ability
to mesmerize (and considered by many Japanese to be just as unholy),
it is the ability to charm Japanese members of the opposite sex
despite the best efforts of any Japanese that might try to compete
with you. This power is more common to gaijin males, but instances of
use by gaijin females have also been reported.

Gaijin Telepathy – This is the ability that gaijin use not only to
communicate with each other, but also to gather necessary information
from their Japanese co-workers when such information is otherwise
being withheld.

… as well as a couple of newer ones that some of the local JETs and
I have identified:

Gaijin Locator – The ability to instantly locate other gaijin amongst
large crowds of Japanese people.

Gaijin Constitution – The ability to withstand and thrive in frigid
temperatures that the Japanese consider to be unbearable. Note that
this is usually anything lower than 19 degrees Celsius.

Recent Notable Additions:

Gaijin Invisibility (from Futureal) – Confusing Japanese people by
speaking to them while being an invisible non-socializable entity, and
forcing them to turn immediately to the nearest Japanese person and
ask for confirmation of what the wind just said.

Gaijin Disguise (also from Futureal)- Asian gaijins’ ability to
temporarily fool Japanese into forgetting that they’re in the presence
of outsiders. Note that this nullifies most other Gaijin Superpowers
for its duration.

Gaijin Police Teflon (from kydynamic)- Ability to slip out of the grip
of Japanese police officers by staring at them blankly, claiming
ignorance of the law, claiming stupidity, and potentially involving a
lot more paperwork than the officer wants to do. Note: only 68%
reliable and potentially a way to get in even more trouble. Still
being perfected back at the Gaiquarters.
** This just in from Gaiquarters R&D: rate of success with this power
can increase to at least 85% if combined with the use of high-speed
English, a lot of frantic hand-waving and speaking absolutely no
Japanese. **

The Gaijin Slip (also kdynamic) – When a gaijin pisses off a coworker,
superior, or girlfriend or boyfriend, the Gaijin Slip can be called
upon with a simple shrug of the shoulders and an offhanded mention
that gaijin just say or do things like the offence in question, and
uh, the gaijin’s really sorry and stuff.

Gaijin Stun (from Power-up!) – The ability to throw any and all
Japanese parties encountered into a panic-inducing confusion by a
combination of both physical appearance and use of crappy Japanese.
This shock and confusion often allows the gaijin to get what they are
after with relative ease or have the most elementary task done for
them.

Gaijin Tongues (Futureal again)- Mastery of a language with such
magnetism that people will pay half a day’s wages just to hear it for
an hour.

Gaijin Wa Disruptor (Noritsujin) – The ability to disrupt the psychic
harmony of an entire group of Japanese — regardless of number — and
thereby increase their susceptibility to other gaijin powers. This is
often used as an opposite to the Gaijin Disguise.

Gaijin Charge (from madmonkey) – The ability to withstand the constant
barrage of identical questions voiced by nearly all Japanese upon
first meeting. Anger is stored for use at a later
day when said Gaijin
chooses to relase all pent up emotion in the form of one final
devastating attack.

Gaijin Superhero Creed: Though we are here in Japan on a mission of
peace, we shall call upon the full arsenal of gaijin superpowers to
aid us whenever the situation might call for them. We shall battle our
nefarious foe, known to all as the evil Nihonjinron & his sidekick
Nihonjin Apathy, and strike a blow in the name of internationalisation
and common sense!

<cue superhero theme music>

MythTV .nuv -> mpg and DVD

I started this way, but it takes forever time wise on my Mac Mini and
my quality was pretty bad with all the reencoding that went on. Also,
iDVD is not good for controlling the bit rate on the final DVD. iDVD
would record my content at full DVD quality which would just fit a one
hour show on my single layer DVD-R (lame!).


  I am now doing the following with Linux which takes far less CPU time,
but does take a fair amount of I/O time. Which of course assumes you
have a Linux box.

  1. Demux/Cut MPEG2 content from MythTV with Java based ProjectX. You
can download ProjectX from http://www.doom9.org/DigiTV/projectx.htm .
This application not only has the ability to cut the MPEG (only on
keyframes) without reencoding, but it appears to have fixed all of the
audio sync problems for me. I have yet to tackle real long stuff but my
kids two hour shows are fine.

  2. Re-multiplex audio/video streams with mplex

  3. Create DVD structures with dvdauthor

  4. Create DVD ISO with mkisofs (not sure why others are using
growisofs, mkisofs works fine for me).

  5. Copy DVD ISO to my Mac for burning (My Mac has the only DVD burner
in the house.)

  I started using avidemux2 for step 1. but I had audio sync issues that
I could not correct with a static audio skew. ProjectX seems to do some
kind of correction, and in fact it says it is fixing frame ordering
when I use it in the logs. Total time from transfer of the MPEG2 to my
Linux box to a burned DVD is about 45 minutes. I even have a little
content on one single layer DVD-R which plays on every settop DVD
player I have tried so far (including some xboxes) with zero audio sync
issues. This means three one hour episodes minus commercials on each
DVD-R! Excellent! I started with the following HOW-TO and adapted as I
stated above:

http://www.mythtv.info/moin.cgi/ArchiveRecordingsToDvdHowTo . If you
want all the gory tech details, then I will put together an HTML based
HOW-TO and post it someplace.

Regards,
   John P. Mitchell <john@cepros.com>

Atari 2600 Development

Original available here.

 

Inside the Homebrew Atari 2600 Scene

by Howard Wen

"Have you played Atari today?" was an ad jingle for the Atari 2600 VCS game console during its reign in the early years of the video game industry, from the late 1970s to early 1980s. That question that could apply even now, thanks to the passion of programmers who’ve continued to make new Atari games for the past few years. These "homebrew" games come in cartridge form (for use on actual Atari 2600 consoles) and have free public releases as code that runs on Atari 2600 emulators. (Homebrew developers use two of the most popular emulators, z26 and Stella, to test their games.) Emulators have greatly increased the audience for homebrew games outside of those who still own the consoles.

The Atari 2600 homebrew community is the largest among groups who develop original games for classic video game consoles. (This probably corresponds with the fact that the 2600 was the top-selling console during its time. The 2600 was the first video game system for many gaming enthusiasts who were alive then.) The scene is competitive but friendly, where authors share their expertise, advice, and even source code with one another and with those who are looking to program their own homebrew games.

"It’s a lot of fun, with various trade meets and video game expos organized every year. Homebrew development seems to be taking off more than ever," says Joe Grand. In 2001, Grand released SCSIcide (see Figure 1), the first homebrew Atari 2600 game to use the console’s paddle controllers (a technical challenge to implement for the system). This fast-paced "twitch" game — its theme and gameplay inspired by the inner workings of a hard drive — also has the distinction of being the Atari 2600 homebrew game that has sold the most number of copies in cartridge form — over 200 copies. The 28-year-old, an electrical engineer by trade, resides in San Diego, California.

SCSIcide
Figure 1. SCSIcide by Joe Grand

Nostalgia is a primary, initial motivation for most who homebrew their own games. Many were children during the heyday of the Atari and daydreamed of making their own games for it. A more practical reason is the challenge; it takes a certain finesse, and patience, in coding ability to make good games for the decades-old system.

The Art of Minimalism

Programming the 2600 is the art of dealing with limitations. Developers must find ways to optimize for speed and limited memory space. The system has no video buffer, the total code size cannot exceed 4K and can only use 128 bytes of RAM, and, adds Simon Quernhorst, "you even have to share that with the processor stack. This means that occupying too much memory results in crashing programs, as you might have deleted some information used by the processor."

Quernhorst, a 28-year-old IT consultant in Wesel, Germany, created the puzzler Mental Kombat. At present, he is making another Atari 2600 homebrew game, based on Aztec Challenge, a 1983 game originally for the Commodore 64 home computer.

In terms of graphics and sound, the Atari only has two sprite objects — each just eight pixels wide. The background is restricted to 40 pixels per scanline. There are only two available sound voices.

To hear these homebrew Atari programmers put it, these very technical constraints make programming the system … fun?

"It’s a lot like working a puzzle," Paul Slocum describes, "and there’s something satisfying about working so closely with the hardware [and] not having layers of software between you and the CPU." Slocum, 29, lives in Dallas, Texas, where he works as an embedded systems programmer. He wrote Marble Craze and Synthcart, a program that produces music on the Atari 2600. (He even uses the Atari as an instrument in his own band.) Currently, he’s developing an RPG officially featuring characters of the cult online animated series, Homestar Runner.

"I’m still attracted by the simplicity of gameplay, graphics, and sound. It’s the art of minimalism," says Quernhorst. "The limitations of graphic registers, RAM, sound voices, and colors increase the challenge of getting nice results."

"Because the Atari 2600 hardware is so limited, you must concentrate on the gameplay," emphasizes Thomas Jentzsch, who has created two homebrew games for the Atari — Thrust and Jammed. The 39-year-old is a software developer for a mobile phone company in Düsseldorf, Germany. "The gameplay must be as perfect as possible. Then the player will soon forget the limitations of the system. That makes the biggest difference between the classic games and many modern ‘games’ that concentrate way too much on eye and ear ‘candy,’ and often neglect the gameplay dramatically."

Bits and Bytes

The tools needed to make games for the 2600 are surprisingly simple. There are only three: a text editor (many Atari homebrew game developers recommend TextPad), a 6502 cross assembler (such as DASM), and one of the aforementioned emulators (z26 or Stella) to test the code.

The programmer’s skillset is more important. Developers need very good familiarity with the 65xx assembly language in order to understand the architecture and addresses that set the sprites, read the input devices, play the sounds, and do everything else on the 2600.

"You must love dealing with bits and bytes, because the Atari 2600 requires 100 percent Assembler coding," warns Jentzsch. "And you need some perseverance; often, coding is quite frustrating and sometimes a solution for a problem seems to be almost impossible. There are far more abandoned than finished projects for the Atari 2600, mainly because the programmer burned out."

"It’s not actually that tough a technical challenge to program the machine. But programming it efficiently and effectively is what separates the experts from the rest," says Andrew Davie, a 40-year-old professional programmer in Hobart, Tasmania, Australia. Davie developed the game Qb (Figure 2), as well as many technologically innovative programs for the Atari 2600 that other homebrew authors have put to use, such as Interleaved ChronoColour, which brings full-color bitmap capability to the machine. He’s also written several articles guiding newbies on how to program the 2600.

Qb
Figure 2. Qb by Andrew Davie

Playing the final product on an actual Atari 2600 system requires that the code be burned onto RO

M chips. Those who are not interested in figuring out the intricacies required to do this can usually seek out assistance from others in the Atari 2600 homebrew scene who make game cartridges for the system. The easiest and quickest way to test homebrew code on an Atari is the Cuttle Cart, is a cartridge that can hold downloaded code.

"There’s nothing like playing a game on the real hardware using real controllers — emulators can only get you so far," says Grand.

Thanks to emulators and the processing speed of modern computers, the development process for making Atari 2600 games is far more convenient and faster now than it was for those programmers on staff at Atari back in the late 1970s. One advantage they had over present-day homebrewers, though, was the availability of better debugging tools. The members of the Atari 2600 homebrew scene make up for this by relying upon each other’s advice and assistance.

"The hardware, simple as it is, is still not fully understood [by us]," says Davie. The homebrew scene learned yet more about the Atari when one of the companies that previously owned the Atari name released additional technical information to the public. "It’s only since the circuit diagrams for the TIA chip [a central component of the Atari 2600] have been available, and since some clever individuals started analyzing the operation of the chip, that we’re coming to understand why the hardware behaves as it does — and how to use this knowledge to make effective programs," says Davie.

Display Kernel Issues

Besides the 2600’s limited amount of memory, homebrew game developers say that the most difficult aspect about writing software for it is dealing with its display kernel. Since the system lacks video RAM, each scanline must be programmed directly. The picture on the screen has to be drawn in synchronization with the video beam, which can be a tricky feat to pull off, and there are only 76 CPU cycles per scanline. The game code must also control vertical synchronization, repositioning the electron beam at the top of the screen to start a new frame.

"Following the raster beam, you have to set each pixel and color just in the right moment to show it. If you want to show a sprite from lines 50 to 60, for example, you have to set the sprite values by hand at exactly the scanlines 50 to 60 on the correct horizontal cycle," explains Quernhorst. "This makes variable sprite positioning quite difficult. Such things are much more easy on other machines, as you can simply set the X or Y values to their registers at any time during your program."

To squeeze out the best screen display under this restriction, the display kernel usually has a unique design for each game. The display for an action game, where objects on the screen move quickly, would need to function differently from that of a puzzle game, where the objects would probably be static.

"You have a limited amount of time [for] each TV frame to do game processing before you have to start drawing the screen again. So you have to guarantee that under all conditions, your game-handling code will finish within that amount of time," says Slocum. "This can be tough since you usually have to cut it close."

Another issue with the 2600’s display is that the color order and location of the data bits on the screen are randomly selected. This routine is a time-consuming function which, if not executed properly and placed in the right section of the code, can result in annoying flickering of objects on the screen. For his game, Grand says he made the decision "to run the routine once at the beginning of each level, which led to a quick flicker of the screen. This way, gameplay wouldn’t be noticeably affected by flickering every time a data bit was read."

New Games for Old Systems

All of this extreme, stripped-down simplicity does have one benefit: making a game can be a one-person effort. "Game development projects for old machines can be done by single developers, while modern game systems require a lot more manpower, if you want to make state-of-the-art games for these platforms," says Quernhorst." It’s almost impossible for a single person to create a cool game on a modern platform. It’s easier to develop cool games for the ancient machines due to their limitations."

Ultimately, it’s more than just the challenge that attracts programmers like Quernhorst and his colleagues to make new games for the Atari — or for any classic game console. There’s a passion and love, not only for the systems themselves, but for the community of fans who have been helping the old hardware remain relevant today.

"It really feels good to know that the time, frustration, and money spent to develop and manufacture the game was all worth it. It’s nice to give back to the community and provide people with a new game for an old platform," Grand says.

The Developers Speak

Homebrew game authors Andrew Davie, Joe Grand, Thomas Jentzsch, Simon Quernhorst, and Paul Slocum discussed with the O’Reilly Network their experiences in making games for the Atari 2600.

O’Reilly Network: What inspired you to make your own Atari 2600 game?

Andrew Davie: I had many games under my belt, but only as programmer/designer. I’d not had the opportunity to develop a full product from concept through programming, marketing, and sales. I saw the 2600 as an ideal platform to do all of these in one go. I also happen to adore the 6502 processor — the Atari has a variant of this, and was fascinated by the technical challenge of getting the machine to do anything, let alone something interesting. I was originally motivated by Bob Colbert’s pioneering work on Okie Dokie.

Thomas Jentzsch: I must admit that I had almost completely forgotten my Atari 2600 when I accidentally found a working emulator for it on the Web. But almost immediately I remembered the fun I had back then. Soon after that, I found the Stella developers group and saw a new challenge for my Assembler programming hobby.

Simon Quernhorst: I’m a collector of Atari VCS cartridges for years now, and I decided to start a development project in 2001. I’ve been programming demos and games for the Commodore 64 for years. Therefore, the machine language of the VCS was nothing new to me — just different addresses had to be learned and checked. (Quernhorst created A-VCS-tec, as seen in Figure 3.)

A-VCS-tec Challenge
Figure 3. A-VCS-tec Challenge by Simon Quernhorst

Joe Grand: I was already collecting cartridges for the Atari 2600, and I wanted to work on a project that combined my hobby and my professional life — electrical engineering. Not only did I code the game, but I created a custom circuit board. The boards fit into the standard Atari cartridge cases and all components are easily obtainable at many electronics stores. This made the manufacturing process much easier and less frustrating. I built the first 50 games by hand to sell at a gaming expo and sold out almost instantly.

Paul Slocum: The challenge of programming for such a minimal system, and I really wanted to when I was a kid. I actually still have game designs I drew up in elementary school, although I don’t think many are feasible on the 2600.

O’Reilly Network: What’s your personal favorite Atari 2600

game? Why?

JG: Activision’s Kaboom!. It’s the type of game that forces you to get "into the zone" and just space out. It’s a very "Zen-like" game. It was the inspiration for SCSIcide.

AD: I don’t really have a favorite. I am mostly interested in the technology, rather than the game itself. Having said that, Dig Dug was a very good conversion effort, so I’m partial to that at the moment. Many of the modern homebrews are excellent.

SQ: I’d mention H.E.R.O. It’s really good and was well-designed overall. I also enjoy most of the modern homebrew games. Just to mention a few: Qb, Star Fire, Marble Craze, Merlin’s Walls, and Thrust (Figure 4).

Thrust
Figure 4. Thrust by Thomas Jentzsc

TJ: From the classic period, Starmaster. It was one of the very few games I owned, and it combined action with some strategy. I was very addicted to the game back then.

From the modern homebrew games, Oystron. This was one of the first homebrews I found, and it is a great game. It was Oystron that made me want to program my own game. It defined a new level for Atari 2600 homebrewing and showed that a homebrew game could match the old classics.

O’Reilly Network: What interesting technical challenges did you came across when you made your game?

PS: I made it extra hard on myself by doing a paddle game. Paddles must be read while displaying whatever’s on the screen, and timing is critical during the display. Since SCSIcide was the first homebrew game to use the paddle, there was no previous work to reference.

One byte of RAM was used to store the current numerical value of the paddle. At the beginning of each frame in the vertical blank, the capacitor inside of the paddle controller is discharged and, a few cycles later, set to recharge. During every scanline draw, the value of the capacitor is read. How long the capacitor in the paddle takes to charge determines the vertical position of the [player character] on the screen.

For example, less resistance in the potentiometer of the paddle will cause the capacitor to charge more quickly, and place the [player] towards the top of the screen. If the paddle is moved in the other direction, increasing the resistance of the potentiometer, the capacitor will take a longer time to charge, and the [player] will be placed lower down the screen. Programming efficient and "non-fluttering" paddle control took the longest amount of development time and required a great deal of experimentation with the Atari 2600 system.

SQ: The Atari VCS can only handle banks of 4kb at one time, and a technique called "bankswitching" is used to access more ROM. You can tell the machine which of the 4kb banks is currently in use and access this ROM then. The problem is that the memory is always numbered in the same way. This means that an address $0F00, for example, is used two times; once in Bank 1 and once in Bank 2. When jumping from one bank to the other, the processor jumps into Bank 2 at just the address where you left Bank 1. For example, a bankswitch command at $0E03 in Bank 1 lets the processor continue at Address $0E06 in Bank 2.

O’Reilly Network: Did you develop any unique code that takes advantage of the Atari 2600’s technology?

TJ: For Thrust, I invented a smooth looking, bi-directional "delayed" scrolling that is still quite unique for the 2600.

JG: My proudest achievement was implementing the paddle support, but I also created a six-digit hexadecimal scoring routine based on some old score display code, and implemented a cool random number to generate the random color and location of the data bits on the screen.

AD: The Interleaved ChronoColour technology was independently developed, but does duplicate similar technology already available on other machines. It introduces "full-color" bitmap images on the Atari 2600, where previously only single-color-per-pixel images were possible. This has extended the graphics capability of the 2600 significantly. The technology involves real-time multiplexing, in time and space, of red-green-blue-component images to achieve a color image.

SQ: I invented a PAL/NTSC-switch on Mental Kombat. As far as I know, no other game now uses this technique. This makes the cartridge run on any machine worldwide without problems or mixed-up colors.

PS: I’d say my most innovative work was with music. I wrote a music driver that managed to do fairly decent music in spite of only having two sound channels and very limited pitch. And the driver uses very little processor time, so you can easily run it in the background in-game.

O’Reilly Network: What advice do you have for others who are interested in making their own homebrew games for the Atari 2600?

SQ: If you already know assembly and machine language: take a lot of time and patience and prepare for a very exact programming challenge. The 2600 is very timing-sensitive. Using too many cycles in one scanline may, for example, lead to mixed-up graphics and colors. In very timing-sensitive routines, counting the cycles of every operation by hand might help to ensure that you’re not using too many cycles.

JG: Experiment, experiment, experiment, and be patient! There are a huge number of resources available now that provide disassembled games, commented source code, development tools, emulators, and discussion lists.

It might appear easy, since there are so many homebrew game projects going on right now. But take small steps and play around a lot. That is the best way to learn. There are lots of people in the community willing to help out new developers.

Writing a game takes time, as does thinking up graphics and packaging, making the cartridges, etc. You won’t make a quick buck, so only do it if you love it.

2600 Homebrew Resources