General purpose computing is under attack. Watch this presentation from Cory Doctorow and read this post from Read Write Web for the backdrop.
From the Read Write Web article:
Doctorow says that we haven't lost the war on general purpose computing, "but we have to win the copyright war first if we want to keep the Internet and the PC free and open." I don't disagree that winning the copyright war is important, but the first priority needs to be convincing the public at large that general purpose computing is important in the first place. Failing that, we are always going to be fighting a losing battle.
When I look at the perception of general purpose computing in the eyes of the public at large, what I see is a population who sort of knows it exists, but is unable to grasp the fundamentals or the importance. The good news in my observation is that they sort of know it exists, as opposed to being completely ignorant. Of course my evidence is my purely anecdotal experience based on interactions with luddite friends, family members, and coworkers - but that experience seems to be broad enough to be valid for anyone in the Western world.
If this "war" on general purpose computing is to be won by our side, the number one thing that has to happen is a ground up push for education in what computing really means and the level of enablement it provides everyone who has access to it; that number of people happens to be very large now compared to when I first got ahold of a computer in 1997.
The analog to the state of understanding computing is science before it became a mainstay in elementary education. Science is presently introduced to our children as a basic primitive building block of their education at a very early age. Of course, it has not always been this way. When the education system was all about "readin', writin', and 'rithmetic" there was at least a loose knowledge that scientific practices existed even though it may not have been thoroughly accepted or thought of as a tool to better understand the world and enabled the create marvelous things that have advanced human society.
We are at that stage with computing. The population, by in large, knows it exists but does not know what it entails. If that is to change, our young people must learn how to use computers at a young age. By "learn how to use computers" I mean not learning how to simply type and use Microsoft Excel and Word in elementary school for their homework or learn what appropriate email etiquette is, but be enabled to learn how to do things like write a program or understanding how operating systems and hardware works - even if both of those collections of knowledge are only understood at their rudimentary levels. Of course, the skill learned in this aspect of a young person's education isn't going to be a mainstay in everyone's day to day work, just like science isn't (especially in mine). But it is important that the foundation for what computing is, what it means, and what it allows be fully understood. We understand that for science... now it is time to do the same for computing in our education system.
But how? I don't have the answers, but things like NYC's new high school for Software Engineering or a program like Byte Works in St. Louis seem to be absolutely wonderful foundations to start and learn from.
[I'm a little late posting about this one, but it is still a cool feature]
AWS just keeps pumping out features. One of the latest was multi object delete in s3.
Previously, if you wanted to delete multiple objects within an s3 bucket, each delete operation had to be contained in a single API requests... which quite honestly is slow and clunky. If you wanted to delete 5,000 objects you are going to have to make 5,000 API calls.
We don't need no stinkin' resolutions!
It is the first day of 2012 and for about five seconds this morning I thought about "resolutions" for myself. For two of those seconds I considered what resolutions I would have if I believed in resolutions. For the remaining three seconds I uttered the phrase "we don't need no stinking resolutions!".
If a service doesn’t have a way for me to support it directly, and isn’t depending on my support, I’m going to be very wary of depending on it. -- From "2011 The Year the Free Ride Died" on ReadWriteCloud
I use Amazon's EC2 for a multitude of things - including personal use as an IRC bouncer, a website host, and a SOCKS 5 proxy. Sure, there are more cost effective VPS providers out there for the types of things I'm using EC2 for when it comes to my personal usage pattern. However, I pay the extra money because I love the API and I totally grok Infrastructure as a Service.
Case in point, I open only ports 22 and my port for IRC bouncing to whatever my public IP address is at the time. I don't switch public IP addresses that often, so it was never onerous to do this through the AWS console.
But this morning I decided to sharpen my boto and python knife and script up this process too. What I have now is a script I can evoke on the command line that accepts two options, --port and --group. For whatever --group I specify, rules will be created to allow inbound traffic from my current public IP address on those ports to any instances that belong to the group I specify. Additionally, if any rules previously existed on that security group that have a port range that is upper and lower bounded by a port specified (meaning, a rule listing a single port instead of a true port range), then those rules are moved. This allows me to make sure access to the instance(s) in my security group is limited to only the public IP address that I'm coming in from.
Here's an example usage:
Here, 99.98.113.100 is the public IP I'm coming in from.
What this doesn't do (yet) is detect when my public IP address has changed and automatically change the security group rules to take my new public IP address in to account. There might be fun ways to do this - possibly by listening to OS events for changes to network interfaces. More crudely, the script could just run in the background and hit http://whatismyip.org periodically to check if the response body has changed since the last time it was run.
I'm watching Cesar Millan on National Geographic TV right now. This is a great example of a man who followed his passions. What an example to go by.
He loves dogs.
He loves helping dogs.
He makes helping dogs his life.
He makes helping other people with their dogs his life.
… and he seems to always have a smile on when he does it. Even if it isn't an external smile, watching him work with dogs reveals an intense focus that is only possible when a smile exists on the inside.
Roughly a year ago I started taking a look at Scala and decided to whip up a quick TicTacToe example just to see what coding in the Scala language was like. I was very fascinated by the pattern matching available in Scala since it works like a switch statement on crack (putting it simply, though it is a bit more). The results of that are found in a previous post here.
Recently I've been reading through Programming in Scala 2nd Edition which does a great job of introducing Scala in steps while also lightly nudging you to write code in a more functional manner. I like reading a book while also coding on the side to put in to practice what I'm reading, so I found my old TicTacToe code, put it on Github to share and started hacking at it to try and do some things in that code base that are more functional. This post describes my basic thought process through those changes.
Apparently Adium attempts to use Safari in some way, shape, or form to initial authorize itself to Facebook to connect to Facebook chat. However, if you already have Facebook cookies from a previous session sitting in Safari, Adium goes in to a never-ending loop of authorizing Adium to use Facebook auth.
The trick around this is to simply just clear your Safari cookies for Facebook and then attempt to connect to Facebook chat via Adium again.
Build a service-oriented architecture: Jeff Bezos once said that when you load a product page on Amazon, you are calling 200 different services. This type of architecture, with a clear, externalized, and easy to use API, allows you to quickly build native client apps that serve as thin interfaces to your application.
The average dog is a nicer person than the average person.
-- Andy Rooney
Andy Rooney died yesterday. He represented one of the few things I enjoy about modern television - a dry, sarcastic (but straightforward), humorous approach to the current state of our world. He was essentially the only thing worth viewing on major media news television as well.
May he Rest In Peace.