…doing it right. =)
Editra: Setup as a Python IDE
I can’t believe that I had overlooked this application at first, but I’m glad that I finally started using it. So far, this is the best free Python IDE that I’ve found, and it’s a fantastic general text editor as well!
Here’s the official guide on how to set up Editra as a Python IDE:
Keyboard Geekery, Part 2
Now that I’ve received the XArmor U9W keyboard that I mentioned in my last post, and had a chance to use it for about a week, I thought I’d post a follow-up review for anyone who might be interested. =)
(FWIW, I’ve added this review to the product page on Amazon as well.)
—-
I’ve been drooling over the Das Keyboard Model S Professional Silent Keyboard for a while (and the original Model S Ultimate, before that), but I wanted to find something a little smaller, and wireless. The XArmor U9W totally fits that bill, and I love it. =)
Pros:
- Cherry MX Brown keyswitches
(I’d love to see this model with the Blues, but my coworkers appreciate that I picked a keyboard with the browns instead, and the feel is just as good, IMO.) - Relatively compact size
- Solid feel
- Wrist-rest included is quite nice
- Itty-bitty USB wireless receiver
- Solid signal (haven’t had a missed/dropped key yet)
Cons:
- The mini-USB cable included only provides power, but doesn’t charge the batteries or carry any data. (Not really a big deal, since the point of this keyboard is to be wireless anyway)
- The transmit (Tx) light that flashes every time you press a key. (I think I might just put some electrical tape over it, since there’s no way to turn it off)
- The Num Lock light turns off when the keyboard goes to sleep (Again, might just put electrical tape over the whole lighting area and use on-screen notifcations instead.)
- No USB ports included (Not really a con, but notable in comparison to the wired Das Keyboard).
Summary:
If you’re looking for a great, (relatively) inexpensive, and wireless alternative to the Das Keyboard Model S Professional Silent, this is it. I’m very happy with my purchase. =)
Keyboard Geekery
Ok, I’m hooked. I’ve been using the Kinesis Advantage at work for a couple days now, and both my typing speed and accuracy have improved.

As much as I love this keyboard, I can’t quite justify the price ($299), but I’ve been really wanting to get a keyboard with mechanical (clicky) switches for a long time, and I finally found a good compromise.
A huge part of the appeal of the Kinesis keyboard to me is the feel of the keyswitches, which happen to be Cherry MX Browns. I had looked in to getting the Das Keyboard S Ultimate Silent, which has the same keyswitches, but wanted to get something less expensive, and preferably wireless.
It just so happens that there is exactly *one* keyboard that meets those criteria, the X-Armor U9W, which I just picked up on Amazon. 
If you’re interested, here’s a link to the product page on Amazon:
http://www.amazon.com/XArmor-U9W-wireless-mechanical-keyboard/dp/B004S862FW
…and here’s what it sounds like:
http://geekhack.org/attachment.php?attachmentid=12493&d=1284500440
(same switches, different keyboard)
Yep, I’m a *huge* geek. =)
The Best Time Tracking App for Windows
This looks pretty fantastic. Do you have any suggestions for time tracking apps – for Windows, Mac, or Linux? I’ve had great luck with RescueTime, but I can definitely use something like Klok for tracking time on consulting projects manually.
The Best Time Tracking App for Windows
There are a number of different ways to track your work time, but for the majority of people, something like the free, cross-platform Klok is perfect for managing your workday, seeing how long your projects take, and tracking how you spend your time.
The Pirate Bay’s Press Release Concerning SOPA/PIPA
INTERNETS, 18th of January 2012.
PRESS RELEASE, FOR IMMEDIATE RELEASE.Over a century ago Thomas Edison got the patent for a device which would “do for the eye what the phonograph does for the ear”. He called it the Kinetoscope. He was not only amongst the first to record video, he was also the first person to own the copyright to a motion picture.
Because of Edisons patents for the motion pictures it was close to financially impossible to create motion pictures in the North american east coast. The movie studios therefor relocated to California, and founded what we today call Hollywood. The reason was mostly because there was no patent. There was also no copyright to speak of, so the studios could copy old stories and make movies out of them – like Fantasia, one of Disneys biggest hits ever.
So, the whole basis of this industry, that today is screaming about losing control over immaterial rights, is that they circumvented immaterial rights. They copied (or put in their terminology: “stole”) other peoples creative works, without paying for it. They did it in order to make a huge profit. Today, they’re all successful and most of the studios are on the Fortune 500 list of the richest companies in the world. Congratulations – it’s all based on being able to re-use other peoples creative works. And today they hold the rights to what other people create. If you want to get something released, you have to abide to their rules. The ones they created after circumventing other peoples rules.
The reason they are always complainting about “pirates” today is simple. We’ve done what they did. We circumvented the rules they created and created our own. We crushed their monopoly by giving people something more efficient. We allow people to have direct communication between eachother, circumventing the profitable middle man, that in some cases take over 107% of the profits (yes, you pay to work for them).
It’s all based on the fact that we’re competition.
We’ve proven that their existence in their current form is no longer needed. We’re just better than they are.And the funny part is that our rules are very similar to the founding ideas of the USA. We fight for freedom of speech. We see all people as equal. We believe that the public, not the elite, should rule the nation. We believe that laws should be created to serve the public, not the rich corporations.
The Pirate Bay is truly an international community. The team is spread all over the globe – but we’ve stayed out of the USA. We have Swedish roots and a swedish friend said this:
The word SOPA means “trash” in Swedish. The word PIPA means “a pipe” in Swedish. This is of course not a coincidence. They want to make the internet inte a one way pipe, with them at the top, shoving trash through the pipe down to the rest of us obedient consumers.
The public opinion on this matter is clear. Ask anyone on the street and you’ll learn that noone wants to be fed with trash. Why the US government want the american people to be fed with trash is beyond our imagination but we hope that you will stop them, before we all drown.SOPA can’t do anything to stop TPB. Worst case we’ll change top level domain from our current .org to one of the hundreds of other names that we already also use. In countries where TPB is blocked, China and Saudi Arabia springs to mind, they block hundreds of our domain names. And did it work? Not really.
To fix the “problem of piracy” one should go to the source of the problem. The entertainment industry say they’re creating “culture” but what they really do is stuff like selling overpriced plushy dolls and making 11 year old girls become anorexic. Either from working in the factories that creates the dolls for basically no salary or by watching movies and tv shows that make them think that they’re fat.In the great Sid Meiers computer game Civilization you can build Wonders of the world. One of the most powerful ones is Hollywood. With that you control all culture and media in the world. Rupert Murdoch was happy with MySpace and had no problems with their own piracy until it failed. Now he’s complainting that Google is the biggest source of piracy in the world – because he’s jealous. He wants to retain his mind control over people and clearly you’d get a more honest view of things on Wikipedia and Google than on Fox News.
Some facts (years, dates) are probably wrong in this press release. The reason is that we can’t access this information when Wikipedia is blacked out. Because of pressure from our failing competitors. We’re sorry for that.
THE PIRATE BAY, (K)2012
http://static.thepiratebay.org/legal/sopa.txt
http://www.reddit.com/r/politics/comments/on5uq/the_piratebay_press_release_concerning_sopa_and/
Portal 2: Final Transmission, Decoded
I have to give the Portal team some epic geek credit (and some to myself for actually trying this out) – if you record the signal played on the radio when you find the “Final Transmission” achievement location, you’ll have a SSTV signal which you can decode into an image of the companion cube on the moon. So, I did. This screenshot is the decoded result.
Update: I’ve just uploaded the transmission sound clip, so you can hear what the transmission actually sounds like: Portal – Final Transmission.m4a
mobiletuts: Learn Objective-C (Series)
I picked up a new MacBook Pro from Amazon.com in April (2011) with the intention of learning Objective-C to write iOS and Mac software, but made little progress with any of the tutorials I found, until I found this series on mobiletuts:
http://mobile.tutsplus.com/series/learn-objective-c/
I think the thing that kept me away from understanding Objective-C until now was the strange look of the significantly different syntax used in Objective-C, as compared to languages I’m familiar with like C#, Java, JavaScript, and C/C++. Objective-C syntax is derived from Smalltalk, in which one sends a message, as opposed to the more common Simula-derived languages, where one calls a function. (More detail on this concept can be found on Wikipedia here: Objective-C: Messages).
In other words, code like this (C#) looks familiar:
public interface SimpleCar : Object
{
// Public Accessors
public String Make { get; set; }
public String Model { get; set; }
public int Vin { get; set; }
// Not really necessary, since we already have an accessor...
public void SetVin (int newVin);
}
…while this (Objective-C), until recently, looked incredibly foreign and confusing:
@interface SimpleCar : NSObject {
NSString* make;
NSString* model;
NSNumber* vin;
}
// set methods
- (void) setVin: (NSNumber*)newVin;
- (void) setMake: (NSString*)newMake;
- (void) setModel: (NSString*)setModel;
// convenience method
- (void) setMake: (NSString*)newMake
andModel: (NSString*)newModel;@end
Unfortunately, despite sincere interest and significant motivation, most of the Objective-C guides I came across were too dense, too verbose, or not particularly interesting. So, my MacBook got a ton of use as my primary home computer (I’m an ASP.NET software engineer by day, and I use Windows exclusively at the office, but I do love me some OS X…), but Xcode gathered dust in my dock, and I went about exploring alternatives that used a more familiar syntax – like the Qt SDK (C++), MonoDevelop (C#), and NetBeans(an impressive array of different languages).
Now that the back story is out of the way, here’s why the mobiletuts Objective-C series turned that all around and actually got me to *enjoy* developing with Objective-C:
-
It’s very simple.
While I do have an extensive background in software engineering, I appreciate guides that break concepts down to their simplest parts and rebuild them slowly, with no assumption of the reader’s background (other than interest in the topic). For most of you who already know your way around another language and who are familiar with the Terminal, the first lesson (Day 1) will seem almost too basic, but stick with it, because you’ll find that the author, Dan Walker, really knows his stuff. His approach reminds me of a quote
fromcommonly mis-attributed to Einstein: “If you can’t explain it simply, you don’t understand it well enough”. -
It starts with what you know.
I didn’t fully realize this from reading other sources about Objective-C, but it really is a strict superset of C. The benefit of this fact, for developers familiar with Simula-derived languages (C#, C++, Java, etc.) is that you can start writing Objective-C code in a syntax you’re familiar with (C), then sprinkle in bits of Objective-C syntax slowly, while you become more familiar with its Smalltalk-derived syntax. For instance, this code is valid, and compiles successfully in Xcode – Notice the use of Objective-C syntax within a familiar C-style method. (This clip is from the Day 3 post.):
#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSString *testString; testString = [[NSString alloc] init]; testString = @"Here's a test string in testString!"; NSLog(@"testString: %@", testString); return 0; } -
It’s actually interesting.
Dan has a great conversational style to his posts that make them very accessible and compelling, while slowly introducing increasingly complex topics. In Day 1, he explains how to open the Terminal app and invoke gcc from the command line, and by Day 2, he’s provided a great synopsis of the benefits of concepts like encapsulation, abstraction, and inheritance.
I’m nowhere near an expert on Objective-C, since I literally (yes, literally) started reading this article yesterday, but I feel confident enough in what I’ve learned from this article to start poking around in Xcode and trying to refactor some of my existing code into a working Objective-C implementation. I hope this article helps you as much as it’s helped me, and please, let me know what you think by posting in the comment section below.
Happy coding! =)
Google Code Channel: Become a Javascript Console Power-User
Level up on the Javascript console in the Chrome DevTools. Look at XHR requests, learn console helper functions to monitor events or explore objects better. Paul Irish from the Chrome team gives you a rundown.
http://www.youtube.com/watch?v=4mf_yNLlgic
Computer Science Question of the Day
Fun question for all the CS nerdz out there:
What is the simplest and/or most efficient function you can write to determine whether a given string has balanced brackets or not?
Examples:
- Balanced: “(This is balanced)”
- Not Balanced: “(((This is *not*) balanced.”
Function prototype:
bool stringHasBalancedBrackets(string inputString)
The function should return true if the brackets are balanced, otherwise false.
(BTW, there is a great solution on Stack Overflow; I’m looking to see what everyone can come up with off the top of their heads.)
Git: Complex Simplicity.
I may be totally off on some/all of these points here, but I thought I’d share some tidbits I’ve learned during my deep-dive of Git research tonight:
Git is deceptively simple.
Coming from a background in Subversion, I expected to have to jump through a bunch of hoops to get a repository configured, then get a server configured, etc. It took me most of the night to realize that you really don’t need anything other than the git binaries and a place to put your repository (local or remote).
If you do want to use a remote server to coordinate your repository, try just creating a bare repository on a remote server you can access via SSH, and “git clone” from there. Check out this Stack Overflow post for a great example: http://stackoverflow.com/questions/4948190/git-repository-sync-between-computers-when-moving-around
If you’re coming from Subversion, start by abandoning the concept of a partial checkout.
This concept kept me from making progress with Git longer than any other misconception I had. If you get caught up in trying to recreate your Subversion workflow in Git, you’ll get frustrated. If you embrace the concept of lots of small repositories that represent the folders/projects that you’d selectively check out from a master repository, then you’ll get Git right away. (FWIW, I did read about git submodules, but for my own purposes, fully separate repositories work best.)
The best way to learn is to experiment!
The best advice I can give is to just get your feet wet. Once you have a local version of Git installed, just start creating repositories and experiment with clones, commits, pushes, and pulls. If you do plan to work with a team and/or a remote repository, I highly suggest signing up for a GitHub account – it’s free for public repositories and pretty cheap ($7/mo starting) for private repositories.
There’s tons of help out there…
Speaking of GitHub, they also have a great site to help you get started using both Git and GitHub: http://help.github.com/
Besides the guide on GitHub, here are some of the best guides I’ve found yet:
- Pro Git – Great free book on Git usage and configuration.
- GitSvnCrashCourse – Git concepts for Subversion users.
- Git on Wikibooks
- Git User’s Manual: Git Quick Reference – A tl;dr for the rest of the manual.
svn – How to solve merge issues in large Subversion repository? – Stack Overflow
After spending the night playing with Git and trying to wrap my head around the best way to migrate our large Subversion repository to Git (or Mercurial), I realized that I was really trying to solve a core issue with our Subversion merge workflow at the office and that it might help to post the issue on Stack Overflow for more input from the community.
So, here’s the question I posted to Stack Overflow, along with a link to the post there:
How to solve merge issues in large Subversion repository?
Before I explain the core issue, let me say that I’m actually quite interested in migrating our source control from Subversion to Git/Mercurial if it really is a better solution for our issues, but I’m really looking for the best solution without causing a lot of unnecessary stress on the team. (In other words, I’m not looking for the “dump Subversion altogether and move to Git” answer, since that involves a lot of thrashing and a steep learning curve.)
Now that’s out of the way, here’s our core issue:
My development team is working with a relatively large Subversion repository, where all development used to be done directly on the Trunk. A request from above for a faster release cycle led us to split our work into separate branches, with each branch containing a mirror of Trunk at the time the branch was created and sub-teams working in parallel on each branch. The new cycle is to release a specific branch to production, then merge the new changes into trunk, and merge trunk changes into each of the other branches.
Unfortunately, this has become a very painful and error-prone process, and we need to find a better way to perform our merges that also takes into account simple changes between branches such as code reformatting (some of us use “cleanup code” on our source files, some don’t).
To summarize, we need help figuring out a better way to merge that doesn’t require one or more of our developers to spend an entire day manually resolving conflicts.
(Sorry if that’s a little vague or rambling; I’ll be happy to clarify or provide more details upon request.)
Thanks in advance for any help you can provide!
Aperture, I am disappoint.
After wrestling with Aperture’s Flickr integration for weeks, I thought it might be worthwhile to explain why my photostream has been so erratic lately. =P
As I sorted and processed photos I had taken during my trip to China, I used the Aperture Flickr export/upload tool to begin transferring my photos to Flickr, and I had assumed that it would upload the photos, in order, to the sets I had created for each album… this assumption was incorrect.
Every few times I attempted to upload photos, Aperture would hang during the upload process, and I’d force quit. When I investigated my Flickr stream, I found that some of the sets hadn’t been created (not a big deal), that most photos were uploaded to my stream at least two or three times each (big deal), and that all of my photos had been uploaded out of order (infuriating).
I heard that a recent Aperture patch had fixed this issue, so I removed all of my previously uploaded photos (some which had already been commented on and shared with others, unfortunately), installed the patch, and re-attempted the upload.
This time, two sets uploaded in the correct order, so I thought it would work with a larger album (about 400 photos from Shanghai). During the upload, I noticed that Aperture had frozen, again, and I force-quit the application, again.
And, again, my Flickr stream was mangled. Lots of duplicates, most photos out of order, no set created, and when I opened Aperture the next time, it attempted to “finish” the last sync session…which mangled my stream even more.
At this point, I’ve given up on Aperture’s Flickr “integration” (which is giving it too much credit), and I’m going to upload the rest manually through Flickr Uploadr.
I’ll give Aperture credit for being an otherwise solid photo management application, but this experience makes me wish I’d chosen Lightroom instead. =(
(tl;dr – Don’t use Aperture Flickr sync, it’s buggy as hell and will screw up your stream.)
jsFiddle
I just started using jsFiddle today at work. Best web development tool since Firebug. Seriously, check it out. http://www.jsfiddle.net
Amazon S3 Access with ASP.NET/C#
Overview
I’ve recently had the pleasure of working with Amazon S3‘s .NET API while investigating ways to offload our existing content delivery model to the cloud. I must say that I’m quite impressed with Amazon’s documentation and examples provided in the SDK, but it still took me a little time to develop the functionality I needed, so I thought I’d share my experiences and hopefully save other devs a bit of time and effort. =)
Getting Started
If you’re planning to integrate S3 into your existing ASP.NET website, you’ll need to start by getting yourself an AWS account here: http://aws.amazon.com/. Luckily, Amazon now provides a “Free Usage Tier” for development/testing purposes, which allows you to use “5 GB of Amazon S3 standard storage, 20,000 Get Requests, and 2,000 Put Requests” for 12 months from your first sign-up, free. Once you’ve signed up for an AWS account, you’ll want to download the AWS SDK for .NET, which includes Visual Studio templates, and a few excellent sample projects to help you get started.
…
(This is a work in progress; I’ll be updating this post regularly over the next couple of days. Be sure to check back often for more info!)


















