Category Archives: Thoughts

Article Featured on Qualcomm Spark Website

I realized while responding to some comments that I completely forgot to mention some exciting news!  Last month, I was fortunate enough to have an article featured on the Qualcomm Spark website, “Can We Grow Artificial Intelligence?”   It explores some of the capabilities we currently have of emulating DNA and biological growth, and incorporating these abilities into our normal programming tools to develop all sorts of AI.  I had a lot of fun writing it, as well as reading the other articles featured on the site.  So many exciting technologies on the horizon (or already here!)

 

The Beauty of the Demoscene

In this uber-connected, social media driven world, it seems like the time between when an idea is born and when it completely saturates the Internet twenty times over is almost nil.  While this does mean seeing Dramatic Chipmunk and Nyan Cat until the point of retinal damage, it also has the benefit of introducing the masses to really cool ideas and projects from all around the globe.  It means more people sharing their creations, which is a win-win for everyone.

Because of this mass spread of information, it always surprises me how many people are unfamiliar with the demoscene.  Having grown up a Commodore 64 (and later Amiga) kid who hung out on BBSes, intros and demos were always a part of my computer world.  At that time, they were amazing, mysterious creations, made by programmers with futuristic-sounding handles from far away countries.  As I grew older, I started to not only befriend many sceners, but also think more about both the Computer Science and art that actually went into these – and my amazement only increased.  Now I do everything I can to show off these programmatic, musical, and artistic feats to anyone who will watch.

The Scene

To quote Wikipedia, “The demoscene is a computer art subculture that specializes in producing demos, which are audio-visual presentations that run in real-time on a computer. The main goal of a demo is to show off programming, artistic, and musical skills.”  Originally, they started as shout-outs and other introductions in game cracks on 8-bit computers, showing off programming skill.  They quickly bloomed into an entire culture of demogroups, competitions, parties, boards, etc – and is still going strong today with a strong European core (though still prevalent in the US!).  I encourage you to learn more about all the awesome history behind the scene – there is more than can be covered in one blog post.

Favorite Demos

While the history is interesting, what is more important are the demos themselves!  Below I’ve included 4 of my favorite demos.  The first two are 64K PC demos.  When I say 64K, I mean the entire demo is 64K big.  Graphics, music, code – everything.  This is procedural programming on steroids – artistic and algorithmic wonderment.



 

The second two are for the Commodore 64.  While they are more limited by the hardware, the talent still shines through.  The first is a great example of an amazing musical score, and the second is unbelievable coding and use of the C64 hardware, making it look more like a 16-bit machine.




This is just a taste of what has come out over the years – I encourage you to take a look at sites like pouet.net and The Commodore Scene Database for some more examples.  Be prepared to be amazed!

Helping the World Through Software

Recently, I started talking with my girlfriend about the idea of writing a life plan.  The idea is similar in nature to a business plan, but instead of outlining the structure, mission statements, and strategies of a financial venture, you’re focused on the values, goals, and eventualities of your life as a whole.  I’ve researched a bit online, and the more I thought about it, the more I realized what a completely awesome tool a life plan could be – not only for organizing your life, but just the process of writing one can really illuminate and flesh out life-goals.  More importantly though, as I realized by talking with my friends, it can truly be a living document, one that grows over time as life, values, and situations change.

Though I am only in the planning stages now of what I want to include in my plan, I know before I put a single word down that there are two items that I will inevitably focus on.  The first is one of my true passions in life – creating.  Specifically, creating through computer science – games, AI, network utilities, or anything.  But ultimately I know this isn’t truly fulfilling.  I read article after tweet after blog post about software development and computer science – and some writing inspires me, and some falls flat.  It took me a while to figure out why, and as of late I realize more why that is.  Which brings me to the second item I will focus on – helping the world.  If I have a limited time on this big, blue globe, I want to do whatever I can to ensure that hopefully, at least in some small part, my creations will make the life a better place.  This – and making connections with other people who want to use their awesome skills to do some serious good!  I’m lucky enough to lots of friends with this attitude, and I’d love to make more.

Resources

To say there are a lot of amazing organizations out there changing the world on a daily basis would be an understatement – our lives change constantly with the evolution of social networks, mobile devices, and interconnectivity.  And while many of these changes attack very real problems and improve quality of life, there is still infinite amounts of space to effect positive change – still countless opportunities to do good.  And I think it’s important to deliberately focus on these items as a core goal.   I’ve recently begun to search online for resources and other like-minded buddies to help in this quest – and I’ve found a number in academia, as well awesome sites like TED that have some truly brilliant people focused on these very issues.

If you know of any other resources that talk about helping the world through computer science or other technology-driven philanthropy, please feel free to send them this way!

Or if you have any experience with writing a life plan or steps you’ve taken to clarify goals for yourself, please feel free to drop me a line!

I know there are other people much smarter than me who have tackled these areas before, so I’d love any guidance or tips.  I hope to continue to post on these subjects as I learn more and make further connections.

 

Spotlight: Leah Creates

One of the best things about being involved in the world of technology, besides getting a front row seat to all the amazing advancements made every day, is meeting and talking with the creative people who make the magic happen. I think I’m especially lucky, having strong ties to a range of different areas such as networking and development, to have met a diverse mix of very talented people.

Web Developer Extraordinaire

To say business exists in a social media world where online presence and reputation is important would be the understatement of the century. Companies today live and die by their ability to harness the power of the web. And while there are many developers out there, a true burden lies in finding talented and experienced ones. Not only does Leah fall into this camp, combining expert design skill with seasoned web development knowledge, but she possesses something that many in the industry don’t – a real love and respect for what her customers are trying to accomplish with their website. This truly shines through both in her work, and how she treats her clients. It translates into a special website that speaks its goals and connects to its visitors like no other site could. It is the difference between a good looking site and a truly powerful site.

The Proof is in the Pudding

I’ve known Leah for a number of years, having had the privilege of working with her on a number of projects professionally – and her sites continue to really impress me. Some excellent examples of recent projects: Be Irreplaceable | Donna Heart.

I love these examples, as they show how she has taken a general framework like WordPress, and turned it into a beautiful site that really communicates the site’s message. They feel personable and comfortable when you visit them, unlike a lot of cold and bland sites out there. They have that truly personal touch which is key to connecting with the audience.

For even more examples of her work, check out her online portfolio.

So if you’re looking to build a new website for your business, or need to re-imagine the one you already have, I really suggest keeping Leah Creates in mind. She is amazing at both what she does, and how she does it – something setting her apart from so many other development houses out there.

LeahCreates

10 Reasons the Commodore 64 Will Never Die

As some of you might have guessed by now, I’m pretty heavily into retro computers. I love them all in different ways, but the C64 holds a very special place in my heart in particular. It was my very first computer (and my only machine for 8 years) – and it introduced me into a world which I never escaped. I learned how to program on it, played my first computer game on it, and spent a great deal of my childhood on it. So while I might be biased as I write this, I’ll try to be as objective as possible.

1. The Game Library

The C64 has always been known as a gaming machine, and for good reason. While the computer has been used across all areas of computing, from music composition and graphic design to business management and financial accounting, its library of games is MASSIVE. Estimates come in at over 21,000 titles, and new titles are still being developed all the time (Check out the most comprehensive database at GB64). And like any media, from music to movies, just because the title is older doesn’t mean it’s not still enjoyable – there are some simply great games for the C64 that are still lots of fun to play.

2. Quantity Produced

The Commodore 64 is still the best selling computer to this day – and most likely will be forever. Saying it sold well would be a gross understatement – it crushed the home computer market. Jack Tramiel, founder of Commodore, did a lot of things right in his day, and one was the price point of the machine. While it started at $595, it eventually dropped to $200, and estimates of units sold range from 17 to 30 MILLION. Even with a large portion of owners throwing their machine away over time, 30 million computers simply don’t disappear. It is still extremely easy to pick up a C64 off of eBay, Craigslist, or other online sites.

3. The Community

While this is true of a lot of the classic computers, it is especially true of the Commodore line – there is still a huge following for this machine. It’s likely if you look enough online, you’ll still find a user’s group, yearly convention, or informal get-together that includes, or even focuses on, the C64. I’ve personally attended a couple conferences (TPUG‘s World of Commodore and ECCC), and have been in close contact with other groups (Commodore Computer Club and Users Group in Vancouver, WA) – and they’re all friendly guys and gals who have a common love for all things Commodore (and Amiga, and Apple, and Atari, etc…). They are the true heart that continues to drive the C64 onward!

4. The SID Chip

The MOS 6581/8580 SID is arguably one of the greatest sound chips to ever be produced. During its time, there was no other 8-bit computer that had the sound capabilities of the C64. Even in contemporary times, the unique sound quality of the SID is still a desired effect that modern musicians seek to take advantage of. Newer dedicated hardware, such as the SIDStation, has been used by groups such as Timbaland and Machinae Supremacy to produce the sweet C64-style synth sounds that can’t be gotten anywhere else.

5. Hackability

While computers today can render 3D worlds while playing a 20 part symphony and downloading a set of encyclopedias, this comes at a cost – and that cost is complexity. The beauty of a machine like the C64 is a hardware or software developer’s ability to interact directly with the machine. You can read and write directly from/to memory, tie into the system bus, and do a whole other array of low level things that 62 layers of hardware and operating system don’t allow you to do on a new PC. For those who love to tinker, this is a dream.

6. New Capabilities

Due in large part to #2 and #5, new hardware still being made constantly, which breathes incredible new life into the machine. From SD/CF card readers and Ethernet adapters, to mp3 players and accelerators, the Commodore 64 of today is a different beast than in its 80s heyday. When a machine with a 1 MHz processor and 64K of RAM can surf the web, tweet on Twitter, and can access files on an 160GB IDE hard drive, that’s truly amazing.

7. Strong Emulator Support

Using a Commodore 64 doesn’t necessarily mean you need the hardware anymore. Since the advent of faster machines with emulation capabilities, many developers have been working on virtual versions of the hardware counterpart. Many years have passed, and these are now solid, amazing, and free applications that allow you to use a C64 on a variety of devices, from computers and laptops to PSPs and iPhones. Even if all the hardware one day disappeared, emulators never will. Two of the most popular ones are VICE and CCS64).

8. FPGA Implementations

In the same vein as #7, some hardware wizards have gone the emulation route, but instead of producing a software version, have reimplemented the machine in FPGA hardware. In this manner, the C64 exists as firmware on a programmable chip, which allows for smaller, cheaper, and easily upgradable/hackable versions of the C64. And since the machine exists as firmware, many of these devices have different models of computers on the same device – flip the switch and go from using a C64 to an Amiga 500. Examples include Jeri Ellsworth’s DTV and the MCC (Multiple Classic Computer).

9. The Scene

Since the beginning, due to its powerful sound and graphics capability, the C64 has been used to demonstrate elite programming skills through dazzling shows of animation and music. While it started in large part as intros to software cracks, the demo scene grew into a beast all of itself. Some of the greatest artistic, musical, and programming talent to ever hit a computer has gone into software demos. And to this day, programming gurus continue to show off their talents on the C64 – not only because it’s a great platform to program for, but feats are all the more impressive when accomplished in minimal space/computation. A list of upcoming Demo parties can be found at Demo Party.net

10. The Shameless Plug

And the C64 is the only place to find Shredz64 (Guitar Hero for the C64)! ;) It’s just fun to show your friends that a machine made in 1982 can do the same things that a new PS3 or Wii can do. (Sorry, had to do it)

So if you’ve never tried a C64, or haven’t touched one for a long time – find an emulator, pick one up off eBay, or borrow a friend’s – and find out for yourself why it’s still the most amazing computer ever made!

Fun Ways to Sharpen Your CS Skills

If you’re anything like me, once you learned how to code, you would take any chance you could get to write little programs for fun. I remember once I finally “got” BASIC on my Commodore 64 growing up, I would spend hours writing the cheeziest (looking back) programs. A favorite of mine was writing countless “Question and Answer” programs, where the computer would ask “How are you?” and depending on your answer, the program would issue a different (and probably inappropriate given my age at the time) response.

Time Marches On

As time went on though, and I got better at programming, learned the fundamentals, studied Computer Science – things started to change. I still loved to program, but my goals became larger and more complex. Pet projects would take days to complete, then weeks, then months. Once I started doing it professionally, that added a whole new level, where the projects were for money, and project management, sustainability, fiscal viability, etc, all became factors. I had to specialize and focus on specific areas to remain competitive. And the technology changed – whereas once I was communicating directly with the processor and memory I/O, now I was communicating 17 levels up to a a COM object or framework API. It was just a different ballgame – which isn’t necessarily a bad thing, but sometimes working at such a high level for different purposes can make you lose site of the underlying CS. Sometimes it’s important to keep your CS skills as fresh and sharp as your software engineering ones.

Some Fun Ways to Up Your CS Game

Luckily, there are some sites out there that are awesome for keeping those little grey CS cells active in your head.

Project Euler
This is by far my favorite one. Euler offers a large number of problems (currently 300) that require a computer program to solve. They are generally geared toward mathematics of different levels and areas (generally the higher the problem, the more difficult it is), and you can solve them using any method or programming language you wish. The website keeps track of how many you’ve solved and how you’re faring with the rest of the members, but really you’re competing with yourself to write the best program you can. As you get into later problems, even your efficiency matters, as your first solution might take 3 days to complete, whereas the better one takes .25 seconds. They have discussion forums for each problem as well (once you’ve solved it), where people show their solutions and help each other out. Some example problems on the site:

1. Add all the natural numbers below one thousand that are multiples of 3 or 5.
7. Find the 10001st prime.
15. Starting in the top left corner in a 20 by 20 grid, how many routes are there to the bottom right corner?
109. How many distinct ways can a player checkout in the game of darts with a score of less than 100?
157. Solving the diophantine equation 1/a+1/b= p/10n

As you can see, there are a large range of problems targeting different areas and algorithms. I’ve solved 34 to date – sometimes I’ll spend a lunch hour working on a problem, they’re great fun and you can do them at your own pace – and learn new techniques in the process.

Hack This Site!
No, that wasn’t an invitation! Hack This Site . Org is an interesting site that offers a number of security, reverse engineering, and application development missions. While I’m actually against the practice of unauthorized computer access (especially being a IT Manager by day) – penetration testing is a great thing for a network administrator to know, and reverse engineering is a fantastic thing for a programmer to know. In the high-level development world we now live in, getting back to the processor and memory level is definitely a plus – and studying the binary structure of an executable certainly achieves that. Not only does it strengthen your machine language skills, but it also gives you great insight into how compilers work, how operating systems link DLLs, management memory, and achieve IPC.

Many More

Project Euler and Hack This Site are the two I focus on (and between the two of them, there are enough problems to keep me busy for years), but if they aren’t your cup of tea, here are a list of other programming problem related sites:

Bright Shadows
Electrica
Programming Challenges
Python Challenge
TopCoder

Have fun, and get your CS in shape!

5 Reasons for Putting Your Personal Code Into Subversion

If you’ve ever programmed for an organization with multiple developers, you’ve most likely used some kind of system to synchronize, combine, and version code. Without a such a tool, changes to the same files amongst two or more people can get very confusing and hard to manage very quickly. However, even if you’re just dealing with your own, personal projects, a code repository is still a must.

1 – Versioning

One of the most powerful aspects of subversion is the ability to track changes to your code. I can’t count the number of times in the past where I’d make a change to my source and totally botch the program up. And often times, I wouldn’t realize the screw up until later on, when it was too late to remember exactly when it had started acting up. With your code versioned (using copious comments), it is easy to look through the history of changes, revert back to a version or just grab the specific lines of code you need.

2 – Multiple Backups

Though it is, of course, possible to manually back up your code, the nice thing about working with a repository is the ease in maintaining backups. First off, if you’re actively working on a project, you’ll have two copies already – your working copy, and the copy in the repository. And when you backup the repository, you’ll be grabbing all your versions and comments at the same time. Combined with having all your repositories in one location that can be easily be grabbed, this makes for an easy to manage solution.

3 – Synchronize Code Between Multiple Computers

Like many people, I have both a desktop and a laptop (well, a netbook), and when at home, I of course prefer the large screen of the desktop. But I also am a fan of enjoying a cup of tea and a little programming at the cafe around the corner from me. Because of that, having code on my netbook is a necessity. Subversion allows me to quickly and easily synchronize my code between both machines, no problem.

4 – Secure Method of Remotely Accessing Code

Related to #3, since SVN can integrate with SSH, it provides a method of securely accessing your code from anywhere in the world. Though I’ll normally sync my code to my netbook at home, if I get in a jam and ever need to grab my code from another machine, or if I forget to update my code at home, I have the ability to do so. And since it uses SSH, I simply need to map 1 port on my firewall, no crazy set up required.

5 – Integration With Popular IDEs

With Subversion being so popular, many IDEs and other tools have plugins to integrate the use of a svn repository directly into the program. Visual Studio, Eclipse, Anjuta, and Emacs all have subversion plugins/support. Additionally, Windows, OS X and Linux all have utilities to integrate SVN into the file managers/explorers (E.g. TortoiseSVN for Windows). With all these plugins, it makes using subversion a snap.

So if you haven’t already, take a day some weekend and move your source over into Subversion – it’ll take a little time depending on how much code you have, but you’ll be happy you did in the long run – it’s a fantastic tool, whether dealing with 50 developers or just yourself.

A Thought on Efficiency

WARNING
This borders on a rant – I get into moods where I like to rant, and this is one of them. Treat it accordingly ;)

A (semi) quick thought before I go to bed. There are times in my technology filled life of smart phones, streaming, bluetooth, web 2.0, multitasking, scheduling, interoperability, synchronization, single sign on, and coordination that I honestly just get sick and tired of being efficient all the time. I understand the theory in that by working smarter, not harder, you can get more done – but what’s the point?

People have a lot of reasons for being more efficient – one of the major points: getting more done in a shorter amount of time. The theory is that we either don’t like doing crap, or there is a reward for doing crap, so we devise ways of doing more crap in less time so we have a bigger reward – this reward being the extra free time we saved from doing the crap quickly, or a payment we received in exchange for doing the crap.

The Fisherman

One of the problems that comes into play is we usually take the time we’ve saved by being efficient and put it back into activities surrounding the crap again – either working more or devising even better ways of being efficient for work in the future.

My friend Leah had read me a story once, and I’ll do my best to only semi-misquote it here. It concerns a business man talking to a guy fishing on a beach. The conversation goes a little something like this:

Businessman: Why don’t you go get a job, you lazy fisherman?
Fisherman: Why should I get a job?
Businessman: So you can make it into a career.
Fisherman: Why should I have a career?
Businessman: So you can climb up the ladder, make a lot of money
Fisherman: Why do I need a lot of money?
Businessman: So you can invest it, build up a retirement fund
Fisherman: Why do I need a retirement fund?
Businessman: So you can live out your final days relaxing, fishing on a beach somewhere

Obviously the story leaves out any points of the fisherman having a family, responsibilities, or supporting himself, but the point is still there. The dig here is not against business, but the attitude of the businessman, this “prerequisite of happiness” thing where you’re constantly working to get to somewhere that can be reached without doing all that crap in the first place. The bigger paycheck, the larger office, and the faster car always seem more appealing from far away, but when you’re actually there, they give no happiness compared to the proverbial sitting on the beach and fishing. And if that truly is the goal, then why not cut out the middle man?

The Driving Force

We live in a nation of bigger, better, faster, compete, win, more, more, more. It’s driven into us in a number of ways – we must excel in all that we do. Our country’s finances operate on capitalism, and it’s a survival of the fittest game. And while this drive pushes us to achieve amazing things and delivers us glory, does it truly make us happier in the long run? Especially considering new abilities are often paired with new issues?

All this is the subject of a much more detailed and lengthy article than I could write, and I’m definitely not arguing against progress. But there are many times in my life when I want to unplug – when I’d rather hand write a letter to a friend than send them a Facebook message, or give them a call on the phone instead of text messaging them. There are times when I don’t want to be the fastest or the best, I don’t want to be connected wherever I go – I just want some quiet, some peace, and some happiness.

I think what it really comes down to is needing balance – it’s something I’ve been working on quite a bit the last month or so. As odd as it sounds, I need to put more fisherman into my life.

Play Adventure Games, Be a Better Programmer

> Open trapdoor
> Go down
> Turn on lantern

I can’t count the number of times I typed the sentences above on my faithful Commodore 64 immediately after getting home from school every weekday afternoon. An explanation to the uninitiated: these simple statements were a way of communicating with a style of game known as “interactive fiction”, or “text adventure”. The particular one that started it all for me was the classic masterpiece known as Zork, where every day I could explore a mysterious underground empire from my room. While the magic of text adventures is an article in itself, after playing Zork once I was completely hooked. Not only did I seek out more adventures to sink my teeth into, I was also lucky enough that my parents purchased a PC for me soon after. From there I discovered the wonder of graphical adventure games, like the Monkey Island series from Lucas Arts and the Kings Quest series from Sierra. From then, and even to this day, I was a complete adventure game junky. No other genre of game could come close to giving me as much enjoyment.

How are adventure games relevant though?

For those who haven’t played an adventure game before, the premise is generally one of accomplishing goals through a series of small tasks. For example, in the popular classic from Lucas Arts, “The Secret of Monkey Island” (spoilers ahead!), at one point in the game it’s necessary to obtain money to purchase a number of items. There isn’t, of course, a pile of money sitting on the ground – that would be too easy. You need to earn it, in this case, from getting paid to get yourself shot out of a cannon at the circus. However, they won’t stick you in the cannon unless you’re wearing a helmet. Guess what? You need to find a helmet, and there is no helmet in the game. There is, however, a cooking pot in the tavern’s kitchen that would fit perfectly on your head. However, you can’t get into the kitchen because the cook won’t let you in…

As you can see, there is a goal (obtain sum of money), and a number of tasks involved in getting there (get into kitchen, get pot, wear it, fire out of cannon). Before you can accomplish a task, there are a number of prerequisite tasks that must be completed first. Each of those tasks has its own set of tasks to complete first, etc. In Computer Science, we call this step-by-step procedure an algorithm.

Algorithms are the heart of programming

Computers, the powerful machines they are, are at their core relatively dumb. They need to be given a list of instructions to follow. They can perform about 4 billion of them a second, but at the end of the day they still need that list of procedures, outlined step-by-step. This is where you, the programmer comes in. Given a goal you wish to accomplish, you must devise a series of steps to lead to that goal, then translate these steps into a language the computer (ultimately) recognizes, such as Visual Basic, C++, or Java.

The same mentality that guides us to get the helmet, to get the cannon, to get the money, is the same process that guides us to be good programmers: to think in steps. A top down approach of taking an overall goal, breaking it into smaller pieces, further dividing each of those pieces into easy steps, until we’ve turned a very large and complex problem into a series of tiny, easy to handle tasks. And sometimes in programming we need to take alternate avenues – just as there is no helmet in Money Island but a cooking pot which makes an excellent substitute, there will be many times in programming where alternative over conventional thinking is necessary to accomplish a goal.

Why adventure games build these skills effectively

The one issue with programming, especially if you’re new to it as I imagine many people reading this article are, is it is a fairly foreign concept. You’re so busy struggling with the syntax of the new language you’re learning that the overall design of the program itself suffers. While this is a necessary part of learning to program, wouldn’t it be great if there were other exercises you could do in the meantime to strengthen your algorithm building skills?

Enter adventure games. They are a great tool to improve your “algorithmic dexterity” as they are enjoyable and usually take place in recognizable situations that you are accustomed to. We all know what a cooking pot is, and we all know we can put it on our head. We know if we turn a lantern on, it’s going to provide light. These are situations we’re used to seeing. However, these common situations put to the extreme focus of step-by-step procedures are what build our instruction-making skills – and adventure games are the absolute masters of requiring this brand of thinking for hours at a time.

So start playing games!

I don’t want to give the wrong impression – learning to program is a lot of hard (but enjoyable!) work, and there are some dry moments when it takes memorization and reading a book/screen. However, when dealing with the flowcharts academia will make you draw out when learning algorithms (a favorite seems to be “Draw out your morning routine!”), or if you’re learning on your own, try supplementing the boring with a little fun. Fire up an adventure game and train your algorithmic brain! Not only will you build a necessary skill, but you’ll also have fun doing it.