Saturday, April 9, 2011

The desktops with the potential to change computing

Right now, someone, somewhere is developing the killer operating system feature of the future - a feature that will change computing and make us wonder how we lived without it.

However, the person responsible probably isn't grafting away in the labs of Microsoft, Apple or Red Hat - he or she is more likely to be working in a bedroom or loft. Big companies can grow reticent to change, slow to move and adopt new technologies. Features must be escalated through approval bodies, management and bean-counters. Hobbyist projects don't have those commercial pressures and can experiment freely. It might seem audacious to claim that the next Windows is cooking in some part-time coder's house, but it's nothing new. Microsoft's OS empire started with the purchase of QDOS, which stood for 'Quick and Dirty Operating System'. Apple didn't create Mac OS X out of thin air, but took an open source kernel and some BSD code (grounded in academia) to get the foundations of its operating system working. The most successful projects often begin life in ways we'd never expect, and it can take a while for their potential to be fully realised.Into the futureWe'll look at the best alternative operating systems, with the potential to change the computing landscape over the next decade. There's only one rule - no Microsoft, Apple or Linux. While some of these new operating systems are still relatively early in development, the technology that they're introducing could make its way into the next round of updates for the mainstream OSes we use. Helpfully, you can try these projects without having to repartition your hard drive thanks to the excellent (and free) PC virtualisation and emulation tool available from www.virtualbox.org. These OSes are all supplied as disk images - usually CD ISOs - so you can install VirtualBox, grab the ISO and tell VirtualBox to boot from it to try it out. You can burn the ISO files to CD-Rs and boot them on your real PC if you want to see how they handle the bare metal, but remember that mid-development releases could contain bugs. 10. GNU/HURDFighting for microkernels www.gnu.org/software/hurd The GNU project started in 1984 to create a completely free software Unix OS. By the early '90s it had many tools finished, but still no kernel. Linux arrived and was paired with GNU to form what we now call Linux (also known as GNU/Linux). However, the GNU project has been developing a kernel called HURD. This is based on the Mach microkernel, as used in Mac OS X, and consists of servers running in their own address spaces. There are services for hardware drivers, filesystems, authentication and more. These are more isolated than in a typical OS, so HURD should - in theory - be more reliable. It will also be easier to update and replace OS components without reboots. 9. JNodeDesktop Java to the extreme www.jnode.org Java's heyday on the desktop is long gone, with web-based games and apps mostly delivered by Flash and HTML5. But there's one project that aims to prove that Java can still hack it when it comes to desktop computing - JNode. Apart from a very small assembly language core, the vast majority of the JNode operating system is written in Java. JNode's goal is to run any Java application, although it's currently only at version 0.2.8. The interface is simple, there's some decent documentation online, and progress is being made towards 0.3. Planned future features include lower memory consumption, wireless networking and more hardware acceleration for video. 8. FreeVMSIndustrial strength OS www.freevms.net Back in the '70s and '80s, the main competitor to Unix on big-iron hardware was VMS. Famed for its stability, running on chunky fridge-like boxes called VAXes, it included advanced clustering and security features for its time, along with an automatic versioning file system. Dave Cutler, one of the designers of the VMS operating system, went on to lead development of Windows NT, but OpenVMS stuck around and now runs on Itanium systems. FreeVMS is striving to build on VMS's feature set, although unlike many clone projects where developers can get easy access to the original OS, VMS gurus are hard to find. FreeVMS is currently only at version 0.4, but is still making solid progress. 7. DexOSMini OS with console-like GUIwww.dex4u.comFor a desktop operating system, we expect the usual assortment of window furniture, panels and launchers. DexOS is a small project that provides a more console-like approach. This works in two ways: the graphical front-end is more like a video game launcher than a traditional OS, and programmers can easily access the bare metal for maximum performance. It's an intriguing concept, and the take up of Android and iOS in the last couple of years has shown that traditional desktop computing metaphors are starting to look long in the tooth. DexOS demonstrates what a bunch of part time hobbyist coders can achieve, without lots of funding or commercial backing. 6. InfernoSharing, everywhere www.vitanuova.com/inferno/ Inferno has been doing the rounds for almost a decade, and in some respects it's still way ahead of other OSes. Inferno is built to be a distributed OS - it's designed to share resources across machines. Using a protocol called Styx, systems running Inferno can share hardware and networking devices with one another seamlessly. For instance, an application on Inferno box A is able to access the hard drive of Inferno box B without knowing it's actually on a remote machine.Inferno applications are written in a language called Limbo, which is compiled down to code for a virtual machine called Dis, so they're portable across the various architectures Inferno supports. 5. KolibriOSThe fastest GUI OS in existence? www.kolibrios.org Operating systems used to be written in assembly language, but you'd be hard pressed to find much in the source tree of a modern OS. It's true that programming in assembly is hard work, but it can often lead to results that a typical compiler can't compete with. KolibriOS, a fork of MenuetOS, is written entirely in assembly, and it shows - it's tiny (4.9MB for the ISO) and ridiculously fast (booting in a couple of seconds). Despite this, it includes a web browser, mail client, games, desktop utilities, impressive demos and more, all running at light speed. They're nowhere near as feature-packed as their Windows counterparts, but they underline how much bloat and wastefulness we're now used to. 4. OpenBSDSecurity before style www.openbsd.org Security is OpenBSD's mantra. Unlike other operating systems, which consider security a feature like performance or prettiness, the OpenBSD team won't add any code unless it's sure that it's completely free of security holes. It audits parts of the codebase for vulnerabilities, and have made modifications to the standard C libraries to prevent buffer overruns and other problems. OpenBSD was the first non-research OS to integrate many features we now take for granted, including address space layout randomisation, which puts libraries and memory sections in random locations in RAM, so crackers can't assume their location. 3. AROSSomething for Amiga lovers http://aros.sourceforge.net You may have fond memories of the Amiga. The dazzling graphics and crisp sound (when PCs were faffing around with text mode and beeps), the super-fast multi-tasking, and the, er, lack of protected memory… Well, forget that last one. It was one of the best-loved computers of all time, and it still has many fans today. AROS - the Amiga Research Operating System - is intensely fast. Blisteringly so. It apes the Amiga design, both superficially and with its inner workings, and is designed to be source compatible with AmigaOS 3.1 (software written for the old Amiga OS should only need a recompile to work). AROS has great potential as a light and fast OS for low-end netbooks and tablets. 2. ReactOSOpen source Windows clone that could save businesses a fortune www.reactos.orgIf you've dabbled in Linux, you may have heard of WINE, a compatibility layer that lets certain Windows programs run on Linux. Effectively, it intercepts calls to the Windows API, replacing them with Linux equivalents. It includes its own batch of DLLs, but it can use native Windows DLLs too for improved software compatibility. WINE's compatibility ranges from superb to terrible, with the focus on triple-A applications such as Microsoft Office and Photoshop. Generally, older applications work better, and anything that doesn't poke around in the undocumented internals of Windows has a chance of running. However, WINE mixes up the Windows and Unix approaches to operating systems, with the end result being a pretty ugly mess. It also can't use Windows drivers. ReactOS aims to fix all this. Instead of being a layer on top of another OS, ReactOS is a completely standalone project, bootable from an install or live CD. It does use WINE DLLs, but it has its own bootloader, kernel and other low-level facilities that should - in theory - make it compatible with Windows drivers. ReactOS aims to be an open source, drop-in replacement for Windows. This gives it potential to radically shake up the market. ReactOS, a Windows clone, could one day be the next Windows - at least, for a good chunk of people. That sounds outrageous, but the vast majority of Windows boxes run a very small range of programs: IE or Firefox, MS Office and a couple of games, with a bit of Photoshop or Dreamweaver. ReactOS doesn't have to run 50,000 Windows applications adequately; it just needs to run the top 10 well. Imagine you're a netbook manufacturer in a crowded market, and you want to get your prices down as low as possible. Instead of paying licenses to Microsoft for Windows, you could install ReactOS on your machines for free, put a list of ticks on the box saying 'Runs Microsoft Office, Internet Explorer, Photoshop and World of Warcraft' and save a lot of money. Or imagine that you're a business with 5,000 Windows PCs that need upgrading because XP is end of life. Instead of buying 5,000 Windows 7 licenses, you could drop ReactOS any PCs that just run Office and Outlook. These scenarios are still a while off: ReactOS is only at version 0.3.12, having been developed since the late '90s, and there's still a lot of work to be done. But compatibility is improving and you can see the status of your favourite programs at www.reactos.org/compat. 1. HaikuThe lightning-fast BeOS lives on in the speedy, simple Haiku www.haiku-os.org And so we come to the number one project - the OS most likely to be the next big desktop hit. Why have we chosen Haiku for this slot? Firstly, it intends to simply recreate an existing operating system, BeOS, but as open source. There's no room for changes of direction, random new features or endless arguments on mailing lists about trivial design decisions. Secondly, the developers are passionate about their work - they love BeOS. Thirdly, a great deal of attention has been paid to presentation, documentation and the other bits developers often ignore because they'd rather be hacking code. If you were active in the PC world in the late 1990s, you may remember BeOS. Designed for the PowerPC, it was ported to the x86 PC architecture, offering a unique experience that was designed from the ground-up for desktop computing. BeOS demos typically showed several spinning OpenGL teapots running flawlessly on screen as multiple MP3s played in the background. In the days of Windows 9x and Mac OS 8/9, BeOS's stellar performance, simplicity and lack of historical baggage won it an army of hardcore fans. Its file system supported attributes for storing metadata, with features making it rather like a database. However, from a commercial perspective, BeOS suffered greatly. Be Inc, the OS's makers, found it very hard to break into the Windows-dominated PC market. Ultimately, Be Inc sued Microsoft for allegedly preventing PC makers from selling BeOS machines; Microsoft never admitted guilt, but settled out of court for $23 million. However, by this point it was too late for BeOS to gain a serious foothold in the market. Haiku, formerly known as OpenBeOS, began life in 2001 and is now capable of running many older BeOS programs (along with newer ports like Firefox). It retains the clean, modern architecture and desktop design of BeOS, but with added support for more recent hardware devices. The developers are huge BeOS fans - they stuck by the OS in hard times and still champion its strengths today. They've also put a lot of effort into making the website look smart and ensuring the documentation is thorough. Haiku offers a chance to bring speed, simplicity and enjoyment back to computing. It's a system designed purely as a modern, graphical desktop operating system without carrying sacks of historical baggage.

You aren't using those toolbar buttons. Certainly not all of them. In fact, ScottGu once bet a group that they couldn't name every button from left to right. In some cases toolbars get added, then added and forgotten about. But they are there, up there in toolbar-space and they are taking up not only pixels, but also mental space.Go ahead and take two minutes. Free your mind and clean house.

Go setup your virtual development workspace and make it fresh and personal.

Change your colors and even make make the Visual Studio 2010 IDE colors look like Visual Studio 2008 if you want. Personalize.

Get a nice Visual Studio Wallpaper (or three) from this collection of dozen of VS 2010 Wallpapers submitted by the community.

Doesn't that feel better?Here's my Visual Studio after cleaning house. It feels faster (it's not) and it looks cleaner and it imposes less psychic weight on me.Right click on your Toolbar and remove the ones you don't use. Even better, while you're in customize mode, grab just those commands that you use (maybe ones that aren't on your toolbar even though you use them) and get rid of ANYTHING you don't use every day.Now, all those docked/pinned Tool Windows? Close the ones you don't use every day. Ah, to use a Rob Conery-ism, it's like rolling up the window in you car while driving on the freeway.Next, head over my friends at http://studiostyl.es and get a nice Visual Studio Color Scheme and then a new Wallpaper from http://vs2010wallpapers.com. Or, get creative and submit your own creation to both sites!Enjoy and be happy.

What? A blog post on how to take a screenshot? Seriously? Sure, this might seem a silly or superfluous blog post, but I can assure you that I see lousy screenshots on blogs, online tutorials and more (including some of my old posts) at least daily. Perhaps it's my "geek eye" but I (and I assume you, Dear Reader) just know when something is wrong with a screenshot. Just like you are the only one who notices when someone is running a 4:3 image on a 16:9 flat screen at a convention and it looks darned unprofessional, the same is true with screenshots.

"A bad screenshot is equivalent to a misspelled world. It makes both you and the word look unprofessional." - Me, just now.

Sometimes the best way to show you how to do something is to first talk about how not to do something.

Don't save Screenshots as JPEGs

Don't do uncomfortable, unnecessary or bad resizing

When resizing, only do it if you have to. Always use the highest quality resize algorithm your paint application supports. I use Paint.NET. It's one of the greatest pieces of software out there that should have shipped with Windows. Try to resize things "evenly," like 50% or 25%. If you resize to 73% or or 431 pixels by something, you are throwing data away and your screenshot will look bad.Try to avoid small resizes, like taking an image and resizing it to 95%. If you are that close, try reframing or resizing the thing you're shooting, rather than doing such a small resize.

Don't customize your environment to the point it's unrecognizable

Think about Framing Your Screenshot as you would a photograph. I don't care about your toolbars. I don't care about your add-ins or your browser bookmarks. Turn EVERYTHING unnecessary off. That means toolbars, toolboxes, windows, add-ins, bookmark bars - anything that would make your screenshot look like your system and not mine. Keep everything stock and standard if you can.

Don't use tiny fonts and fancy colors.

As you can guess by now, these rules apply to screencasts as well. That means 16pt or better, folks. I use Consolas 16pt, minimum. 20 or 24 for Console Windows. Keep the default colors for your IDE. For Command Windows, use either White Text on a Blue Background or Green Text on a Black Background. Both have been proven to be the highest contrast and easiest to see (by me in totally scientific tests.)

Don't show me what's underneath your transparent Aero Title Bar

Notice how you can almost see stuff underneath the transparent title bars of these last few screenshots? That's lame. There's two ways to fix it. One, open up notepad with its white background and put it behind the application you are shooting so the white is what you see behind the transparency. Then, you can crop around it and get a title bar that doesn't look like crap:Two, use a proper screenshot tool like Window Clippings. More on this later, but it's truly a great tool and worth it if you are taking more than a few screenshots a week. It'll save you time and make you look good. Window Clippings does two things right around transparency. First, it'll programmatically and automatically put a background behind your image while its taking the screenshot, and second, it'll make your transparent regions actually transparent when it makes a PNG.See this square corner? That's not transparent and looks subtly lame. This was taken with the Window Selection option in the Snipping Tool that came with Windows. See this one taken with Window Clippings? It's correctly transparent as a PNG and there's even an option to include a nice drop shadow.

Don't use Raster Fonts or Disable ClearType

We're going for aesthetics and standardization, here. Consider these two screenshots. The first has ClearType off. Notice the blocky capital A, for example.Next, the same shot with ClearType on.

Don't Over-Annotate or use wacky Callout Effects

Another great screenshot program is SnagIt from TechSmith. I use their Camtasia product for all my screencasts. As great as SnagIt is, it has the powerful ability to create "callouts" easily. Too easily. Don't get me wrong, SnagIt is an awesome tool. But just don't point it at your face. Avoid callouts, and when you do, stay classy.

Use ALT text

Try to use ALT text for all your screenshots. There's a blind person (or a hundred) reading your blog. Do them a favor and put in some nice descriptive ALT text on your screenshots. I like to leave them personal messages that you never see. It takes only a second, but it lives in your post forever and helps the visually impaired participate.

Don't forget to squish your PNGs

PNG may be a lossless format but you can often still squeeze 5-30% of the size out of them with tools like PNGOut. This is a must-have tool in your path. I add PNGOut as a post-build step when I make tutorials and you can even hook up Window Clippings to run it for you after a screenshot. It is CPU intensive, but it's worth the effort when publishing your content. Go do it now, get all the PNGs from your blog, run PNGGauntlet on them (it'll take a while) and compare the directories. You'll save tens of megs if you're like me, and your readers will reap the benefits every time they visit your site. So, rolling all this advice up, here's a good screenshot and a bad one.

Bad Example

Here's a common example that completely bad. This screenshot is:

Using the Basic Theme

It was likely taken on a Virtual Machine that didn't have Aero turned on.

Not Transparent

The window corners are curved, but there's a corner pixel.

Oddly cropped to fit

The right side is missing, but just a bit. Either chop a lot, or none. Don't chop a little.

Note the highlight in the listbox is gray? That means the window didn't have focus when the screenshot was taken. It makes it hard to see the point of the screenshot.

Good Example

Or, given our self-imposed width limitation of 600 pixels, perhaps:I hope this guide helps you, Dear Reader, if you create screenshots as a part of your job.Please, care about your screenshots as much as you care about your text.

"If a picture is worth a thousand words, a crappy screenshot is a thousand misspelled words." - Me, Just now. Again.

What? A blog post on how to take a screenshot? Seriously? Sure, this might seem a silly or superfluous blog post, but I can assure you that I see lousy screenshots on blogs, online tutorials and more (including some of my old posts) at least daily. Perhaps it's my "geek eye" but I (and I assume you, Dear Reader) just know when something is wrong with a screenshot. Just like you are the only one who notices when someone is running a 4:3 image on a 16:9 flat screen at a convention and it looks darned unprofessional, the same is true with screenshots.

"A bad screenshot is equivalent to a misspelled world. It makes both you and the word look unprofessional." - Me, just now.

Sometimes the best way to show you how to do something is to first talk about how not to do something.

Don't save Screenshots as JPEGs

Don't do uncomfortable, unnecessary or bad resizing

When resizing, only do it if you have to. Always use the highest quality resize algorithm your paint application supports. I use Paint.NET. It's one of the greatest pieces of software out there that should have shipped with Windows. Try to resize things "evenly," like 50% or 25%. If you resize to 73% or or 431 pixels by something, you are throwing data away and your screenshot will look bad.Try to avoid small resizes, like taking an image and resizing it to 95%. If you are that close, try reframing or resizing the thing you're shooting, rather than doing such a small resize.

Don't customize your environment to the point it's unrecognizable

Think about Framing Your Screenshot as you would a photograph. I don't care about your toolbars. I don't care about your add-ins or your browser bookmarks. Turn EVERYTHING unnecessary off. That means toolbars, toolboxes, windows, add-ins, bookmark bars - anything that would make your screenshot look like your system and not mine. Keep everything stock and standard if you can.

Don't use tiny fonts and fancy colors.

As you can guess by now, these rules apply to screencasts as well. That means 16pt or better, folks. I use Consolas 16pt, minimum. 20 or 24 for Console Windows. Keep the default colors for your IDE. For Command Windows, use either White Text on a Blue Background or Green Text on a Black Background. Both have been proven to be the highest contrast and easiest to see (by me in totally scientific tests.)

Don't show me what's underneath your transparent Aero Title Bar

Notice how you can almost see stuff underneath the transparent title bars of these last few screenshots? That's lame. There's two ways to fix it. One, open up notepad with its white background and put it behind the application you are shooting so the white is what you see behind the transparency. Then, you can crop around it and get a title bar that doesn't look like crap:Two, use a proper screenshot tool like Window Clippings. More on this later, but it's truly a great tool and worth it if you are taking more than a few screenshots a week. It'll save you time and make you look good. Window Clippings does two things right around transparency. First, it'll programmatically and automatically put a background behind your image while its taking the screenshot, and second, it'll make your transparent regions actually transparent when it makes a PNG.See this square corner? That's not transparent and looks subtly lame. This was taken with the Window Selection option in the Snipping Tool that came with Windows. See this one taken with Window Clippings? It's correctly transparent as a PNG and there's even an option to include a nice drop shadow.

Don't use Raster Fonts or Disable ClearType

We're going for aesthetics and standardization, here. Consider these two screenshots. The first has ClearType off. Notice the blocky capital A, for example.Next, the same shot with ClearType on.

Don't Over-Annotate or use wacky Callout Effects

Another great screenshot program is SnagIt from TechSmith. I use their Camtasia product for all my screencasts. As great as SnagIt is, it has the powerful ability to create "callouts" easily. Too easily. Don't get me wrong, SnagIt is an awesome tool. But just don't point it at your face. Avoid callouts, and when you do, stay classy.

Use ALT text

Try to use ALT text for all your screenshots. There's a blind person (or a hundred) reading your blog. Do them a favor and put in some nice descriptive ALT text on your screenshots. I like to leave them personal messages that you never see. It takes only a second, but it lives in your post forever and helps the visually impaired participate.

Don't forget to squish your PNGs

PNG may be a lossless format but you can often still squeeze 5-30% of the size out of them with tools like PNGOut. This is a must-have tool in your path. I add PNGOut as a post-build step when I make tutorials and you can even hook up Window Clippings to run it for you after a screenshot. It is CPU intensive, but it's worth the effort when publishing your content. Go do it now, get all the PNGs from your blog, run PNGGauntlet on them (it'll take a while) and compare the directories. You'll save tens of megs if you're like me, and your readers will reap the benefits every time they visit your site. So, rolling all this advice up, here's a good screenshot and a bad one.

Bad Example

Here's a common example that completely bad. This screenshot is:

Using the Basic Theme

It was likely taken on a Virtual Machine that didn't have Aero turned on.

Not Transparent

The window corners are curved, but there's a corner pixel.

Oddly cropped to fit

The right side is missing, but just a bit. Either chop a lot, or none. Don't chop a little.

Note the highlight in the listbox is gray? That means the window didn't have focus when the screenshot was taken. It makes it hard to see the point of the screenshot.

Good Example

Or, given our self-imposed width limitation of 600 pixels, perhaps:I hope this guide helps you, Dear Reader, if you create screenshots as a part of your job.Please, care about your screenshots as much as you care about your text.

"If a picture is worth a thousand words, a crappy screenshot is a thousand misspelled words." - Me, Just now. Again.

iPhone Tutorials

This site contains a ton of fun tutorials – so many that they were becoming hard to find! So I put together this little page to help everyone quickly find the tutorial they’re looking for. Hope you enjoy! :]

Beginning iPhone Programming

iPhone programming is like a ladybug - fun and only a little scary!

If you’re completely new to iPhone programming, start here! First there’s a tutorial series that will walk you through the process of creating an iPhone app from start to finish – using the most common APIs that almost every app uses. Next there’s a tutorial about memory management – the area where beginners most often get confused about!

Game Programming with Cocos2D, Box2D, and Chipmunk

Ninjas Going Pew-Pew!

If you want to make games on the iPhone, the easiest way by far is to use the Cocos2D iPhone framework and the physics libraries that come with it – Box2D and Chipmunk. These tutorials will help get you started by showing you how to make some simple games and solve common problems.In addition to these tutorials, you might be interested in the Cocos2D book Rod Strougo and I are working on.

Graphics and Animation

Welcome to Core Graphics 101!

In order to be successful on the App Store these days, your app needs to look good. Here are a few tutorials that you can use to up the quality level of your apps, and your gain mad skills with graphics and animation programming.

iPad Development

What it will look like when we're done!

If you know how to program for the iPhone, it’s a simple matter to program for the iPad as well! These tutorials walk you through some of the differences and help get you started with some of the new APIs available on the iPad.