Virtualbox

I recently stumbled across a new (to me) option for virtual machines called Virtualbox, provided for free by Oracle. Like VMWare and Parallels, Virtualbox allows you to create a virtual computer that runs inside it’s own window on your desktop. You can install Windows, Linux, etc., on these virtual machines, and even have multiple virtual servers running on the same computer – though that takes a LOT of memory.

Cons compared to its non-free cousins, VMWare and Parallels perform better and handle 3D graphics better. Pros: it’s a solid product from a reputable company, and it’s free. if you need to test and see if a virtual machine might be the solution for you without shelling out $80 or more, this is definitely the way to go.

Accessibility

Recently stumbled into this excellent programming related article on how to make iOS apps handicapped “accessible.” 

If you’re interested in programming for the iOS, you should read it. What’s interesting to note for everyone else though is this point – how easy it is for visually impaired people to use iOS (iPhone, iPad) devices, how much of that support is just simply “there” courtesy of the standard Apple interface toolkit, and how easy it is to make that support complete for many utility apps.

A number of the biggest iPhone/iPad fans I know of are visually impaired.

2001 Forever

With a tip to the excellent Daring Fireball where I heard this story, It seems that a) 17+ minutes of “lost” footage from the classic SciFi movie 2001 has been “found,” and b) That Warner Brothers has no intention of making an expanded edit of 2001. To wit: 

“The additional footage from 2001: A Space Odyssey has always existed in the Warner vaults. When [director Stanley] Kubrick trimmed the 17 minutes from 2001 after the NY premiere, he made it clear the shortened version was his final edit. The film is as he wanted it to be presented and preserved and Warner Home Video has no plans to expand or revise Mr. Kubrick’s vision.”

There are people violently averse to re-issues and post-facto changes and modified “editors cuts – and George Lucas is probably to blame for a lot of that. There are those that relish seeing “what the editor intended.”

For me, it depends. 

On one hand, the extended editions of The Abyss, and Blade Runner, already long movies, a) were in line with what the director wanted to do in the first place, and b) clarified or improved the story. Story elements that were vague, or unclear after the supporting information was edited out were made clear once more without having to read the excellent Orson Scott Card companion novel.

On the other hand, despite enjoying the improved FX in the Star Wars trilogy rerelease and the scene where Solo negotiates with Jabba that had been in the novel since day one, George went back and fundamentally changed the nature of Han Solo’s character by changing a scene after the fact in a way that had nothing to do with time, studio, or FX limitations.

In most cases, I’d side with the Director (and even Lucas has the right to do what he wishes with his movies), and I’m glad that here, Warner chose to say that the director put down his vision, and they’re sticking with it.

Different Kinds of Programming

An article at Time:Code on “Life Beyond the Browser.” Interestingly, it echoes some points I made about the different tool/learning paths required for web vs. desktop programming, but also explains part of why they are different, and use different languages. Math. I can state from my own experience, web programming uses relatively little math as opposed to anything even approaching doing desktop data optimization and animation. 

Getting Started With Programming: Tools of the Trade

In programming, the actual “code” programmers create is merely written text, and programs are little more than text files. As a result, the most important tool anyone can have is a solid, reliable editor. Sure, you can use Notepad to whip up a batch file, or TextEdit on the Mac, but most projects require more than Notepad provides, while the rich text features of Wordpad or TextEdit will only get in the way.

The nice thing is that to get started you don’t have to invest a lot of money in fancy IDE’s (integrated development environments) or hours downloading the hundreds of megabytes of XCode or its equivalent. The Eclipse IDE for Java – while fairly large still smaller than Xcode – is free, and most web or Perl/Python/etc. development can be done quite nicely with a broad selection of free editors. Outside of Java and Cocoa (Mac) programming, all of my coding is done in BBEdit.

On the Mac-only side, I recommend getting started with Textwrangler – the “lite” version of BBEdit. Despite missing some advanced features it has the critical ones – syntax color hilights, multiple-file searches, regular expression searches that let you search by pattern definitions, and my favorite file comparison tool for displaying the difference between two files.

For Windows, check out Notepad++.

Finally, for free, ridiculously powerful, and cross-platform (including Linux) there’s Vim and Emacs. Both have all the features you need and then some, come in command-line and GUI variants, and have fanatical adherents who will tell you at the drop of a hat why Vim/Emacs is awesome and the other one sucks. No matter which one you choose, you’ll end up with an editor powerful enough to handle your needs for years (One of the guys handling FX for the movie 2012 uses Emacs for handling 3D render programming…).

For more suggestions, take a look at this lifehacker page on the best text editors.

Learning to Program

Programming is an art form where we ask a question, and then write out very detailed instructions on how to answer that question. The instructions are written in a very limited subset of words, with a very precisely defined grammar. From this foundation, we can eventually end up at Microsoft Office or the latest XBox game.

Of course, there is a long, long road from writing out your first “hello world” tutorial to the latest word processor or Portal adventure from Valve. On this road, the byways will include a bewildering array of languages, options, tools, and a seemingly insurmountable mountain of functions, libraries, and bizarre vocabulary you’ve never seen before.

It’s very easy to get discouraged if you allow yourself to. The trick is to break the process down into chunks that you can manage, that give you some feedback, that let you go “Yes, I succeeded!” so you don’t feel like you’re churning away without making any progress whatsoever. This comes under the header of “Choosing your projects wisely.”

Actually, the first trick is to remember that trying to program gets you nowhere. You’ve actually got to do it.

What Have I gotten Myself Into?

A challenge. Like all worthwhile challenges, it will not be easy. The good news? You don’t have to invest a lot of time or money to get started. So first choose a goal – a mid-term one. 

What are you interested in creating? An iPhone app? An android app? A web-based app? The next Twitter? That will determine your starting point, your choice of starting languages, and what tools you need to pick up.

The path is not straight.

Keep in mind that programming, like math, depends on you learning concepts and then building on them. Programming as a process though, is not the same as programming as a language. Don’t get hung up on mastering PHP first if you really want to develop in Ruby “on Rails,” for the web. You don’t have to master HTML to start learning scripting languages for web programming, but you do need to know enough to build a webpage using those languages. Learn enough of the current toolset to start being proficient, and advance to the next one. Once you’ve learned the basics of a couple languages, the rest is mostly a matter of syntax and available functions. It’s how you learn to think about the problem, and break it down, that’s important.

For the web

For web-based applications, the baseline is to learn HTML. No, its not a programming language, but it IS a structured language that defines what kind of information you’re putting on the page, and where. It is used in combination with CSS: stylesheets that allow you to separately define how that information looks once it is on the screen. Since any programming for the web will involve manipulating and modifying HTML and CSS, you need to know these. HTML is also a subset of XML – which is used as a document and information storage format by many programs.

The next layer to add once you’ve become comfortable with basic tags would likely be Javascript as it’s easily integrated into any web page and required to handle any interaction after the page is loaded. 

For more advanced programming – the next step is learning how to change and construct what HTML, Javascript, etc. web server delivers to the user dynamically. PHP is a common language that is easily integrated into web pages and allows you to do this, while MySQL is a database language so you can store and recover data for later use. From there, you can pick up Java, Perl, Python, Ruby, or even C for more advanced programming.

Mobile and Desktop

Unless you’re building low-level driver code, this will eventually require you to learn a set of daunting “API’s” that allow you to open windows and otherwise graphically manipulate data. For Macs and iPhones, you need to learn Objective-C. For Windows, check other people’s recommendations, but you’ll end up learning some variant of C, C++, or C# and the .net libraries. For Android based devices, and a number of other applications, you will need to learn Java. 

Again, the real trick is to learn to think like a programmer. All else is syntax, and understanding what will happen when you type out any given command. The choice of languages here determines what types of features are already wrapped up for you, which ones you have to program yourself, and how quickly and flexibly you can write down the concept you’re thinking. 

There are arguments for starting in Java. If you’re planning on making a living outside of the Mac or Windows world, you definitely need to learn it. That said, I personally prefer Python as a starting point. It comes pre-loaded on Macs, it’s easily available for Windows, it has a very clean syntax, and it easily bridges the gap from simpler, “procedural” languages to learning object oriented ones. While relatively slow performance wise, it has been repeatedly used by experienced programmers to prototype out software for later optimization, or even tackle projects they never would have dreamed of in high-performance languages like “C”.

Either way, there are plenty of good sources of information and starting tutorials. Once you get your feet wet, you can start progressing into more complex languages that require more attention to details like memory allocation, but give you better performance in the tradeoff, or start learning the basics of creating Mac, Windows, Android, or iPhone apps.

Growl

Growl is a notification tool that puts little unobtrusive message bubbles on your screen to let you know what’s happening in the background.  It doesn’t work with many of Apple’s built-in apps, but does work with a number of third-party programs and extensions. These include file transfer programs like Transmit, instant messaging programs like Adium and Yahoo, dashboard widgets like eBay watcher, and many Mac twitter apps. This can be when an upload or download is complete (Transmit), when a new IM message comes in (Adium), or when your plugged-in status on your laptop changes (Unplugged).

Google Chrome

This Windows and Mac (Intel-only) browser is incredibly fast, incredibly lightweight, somewhat more secure than IE for Windows, and better than Safari when it comes to juggling multiple google logins to different domains. I recommend it to any Windows client who doesn’t have to use Internet Explorer due to banking or other access requirements – and in many cases those people use Chrome for everything else. 

While I still prefer to use Safari on the Mac due to the bookmark synching and a slight aesthetic preference – I often turn to Chrome.

Chrome is available from google at: www.google.com/chrome

Adium

Adium is a chat client for the Mac that can handle almost any messaging network in existence. While it doesn’t provide some features (say, video chat) and I’ve yet to find ANY Mac AOL client that gracefully deals with AOL chatrooms, this has completely taken over for iChat. The times I’m using iChat it’s for screen sharing or video chatting (and Skype has been cutting into that somewhat).

OpenDNS

openDNS is a company who’s purpose is to replace the sometimes flaky DNS service that comes with your ISP (Hi, Comcast!) and provide an alternate means to look up addresses on the internet. This means that every time you try to look up www.apple.com, their computer takes the web address and sends back the numerical address, much like looking up phone numbers in a phonebook by name.

The side benefit of this is that with openDNS, you can also specify corrections of typos, define what kind of websites you don’t want visited from your household or office, and specify what exceptions you want to allow, because they control what computer you connect to when you ask for a website.

Specifying what you want to block follows the same categories used in many common filtering apps, and the logs give you a nice list of sites that have been denied. What it doesn’t do is let you know who in your network made the request, give you a weight for how strict to be within a category, or let you see what sites have been visited that were not blocked.

I can deal with those weaknesses, as it simplifies my computer setup and makes it a little more difficult for the kids to work around the restraints (I still make sure I eyeball their activity and computers on a regular basis). It has one other “plus” – the instructions. They have excellent documentation that should go a long way in helping you set up your router or computer to use their DNS servers as well as tracking changes in the IP address your ISP hands you.

Best of all, it’s “free.”