Quantcast
Channel: Chris McCormick - News
Viewing all 248 articles
Browse latest View live

Priority Queue

$
0
0

scout-and-dad-photo-wall-at-harukis-house.png

Photo by John Leonard.

Warning: post contains serious navel gazing.

Lying around in the dark trying to get my sleeping patterns back into Western Australia time from Western Scotland time has got me thinking a lot about focus and priorities.

  • I used to spend about twenty hours per week in my spare time doing Free-Libre and Open Source Software. I currently manage to allocate about zero hours per week to FLOSS.

  • Almost all of my time is now taken up with commercial work, social life, and family time. Although I would love to write more Free Software, I am ok with this balance for now because spending time with family and friends is definitely not the worst thing to do with your life.

  • I am officially orphaning the Infinite 8-Bit Platformer project. If you are a Free Software developer interested in taking over that project please contact me! There have been a ton of irregular users but the codebase badly needs some love. It's written in Python and Pygame and is GPL licensed.

Infinite 8-Bit 
Platformer

  • I still get to contribute a bit to Free Software projects during the course of my commercial work - I just don't have the luxury of pioneering my other vanity projects any more - except maybe jsGameSoup which gets used by one of my clients.

  • This whole shift is in general probably a good thing as it is turning me into more of a team oriented and social programmer. It forces me to re-use other people's code and work on other people's ideas more which is a good and efficient way to roll.

  • I have a plan to recover some of my commercial time for specific use on Free Software again in future. This basically comes down to making a way to fund some of that time myself and still keep my family in sustenance. Hopefully that pans out!

  • The one thing I wish I had more time to do is make music. I guess if I wanted this bad enough I would just make it happen but right now, no.

None of this is really a bad thing, just a fact of life. Friends and family are super-important to me right now, life is happy, and I still get to write a crapload of code for my wonderful clients and the very interesting projects they have created. :)


Epic Problemz

Infinity And Beyond

$
0
0

I think about this video all the time:

What an incredible moment. Humans defying the crushing immensity of the gravity well of our 4 billion year old world. Filmed onto an incredibly powerful turing machine that fits inside your pocket and allows you to communicate with almost anybody on the planet at any time and can perform millions of mathematical operations every second. Shot from the air in an invention that allows us to collectively travel great distances, and holy shit, while there - 8 kilometers up in the sky - you can still be connected to a pan-planetary network that lets you share the video before you even land.

Wow.

"The future is already here - it's just not very evenly distributed." --William Gibson

None of those things would be possible without the anonymous people who have dedicated their lives to doing the druging hard work of science every single day. Those people are my heroes and I am lucky enough to call some of them my friends.

Segue: my friend Dave came up with a great analogy for parenthood soon after the birth of his first daughter. Parents are the genetic equivalent of the boosters on a space rocket. The booster rockets get all used up, out of fuel, and then fall away into the ocean before the rocket breaches the atmosphere and enters space.

As a parent you know this to be true. You can feel yourself burning up all of your resources to launch these little people into the world. You burn harder than you've ever burned before, age faster than you've aged before, and sleep less than you ever have before, because you're now a privileged link in the chain of humans going down through the generations. You feel with absolute certainty that you are expendable now because you've created something greater than yourself.

I don't think I've ever been happier than in my role as a booster rocket. I feel so lucky.

Thomisidae? In South Western Australia

$
0
0

IMG_20121027_152155.jpg IMG_20121027_152048.jpg

From deep in forest territory last weekend.

Water Corporation

My first Makerbot print

$
0
0

IMG_20121115_181922.jpg

My first makerbot print. Felt like the first time Mum and Dad brought home the Apple IIe. Everything feels different today than it was yesterday. Thanks so much to Mike for letting me (ab)use his makerbot!

The lego man is from Thingiverse. The arcade machine is a hack of one on sketchup warehouse.

Thank You, LMG

$
0
0

IMG_20121118_112241.jpg

The good folks at Let's Make Games have been supporting the Western Australian indie and commercial game making scene for a while now with generous amounts of their own time poured into reports, moral support, game jams, and numerous events each year, so I makerbotted up these little arcade cabinet award thingies for each of them and gave them out at their recent end-of-year party, which was also great, as always! Thanks again LMGPPL!

Irony At The Heart Of Capitalism

$
0
0

Irony: the most valuable capitalist icon in the marketplace right now, Apple, got rich selling products containing millions of hours of socialist labour - Free and Open Source software.

AAPL stock price graph

This is the new normal and we are all very much an active part of it.


Crqlr

Optimise HTML5 Apps For Mobile WebKit

$
0
0
  • Use zepto.js not jQuery.
  • Use -webkit-transition and -webkit-transform wherever possible.

Especially useful if you are developing with PhoneGap/Cordova on iPad and iPhone, or Android. Those webkit transforms saved my bacon on a recent iPad project. Here is the basic CSS you want to put on an element you want to optimise:

-webkit-transition: -webkit-transform 0ms;
-webkit-backface-visibility: hidden;

Try replacing $(this).hide(); with a transform that moves the element off screen like this (might need overflow: hidden on your body tag):

$(this).css("-webkit-transform", "translateX(1500px)");

Then when you want to show the element again do this instead:

$(this).css("-webkit-transform", "translateX(0px)");

I also had great success replacing jQuery UI drag-and-drop code with something hand-rolled:

$(this).css("-webkit-transform", "translateX(" + relativeX + "px) translateY(" + relativeY + "px)");

Hope this helps you!

Xmas Billabong Times

$
0
0

IMG_20121223_154310.jpg

-- Sent from my Android phone with K-9 Mail. Please excuse my brevity.

How to Open a Coconut

Stylus Prediction

$
0
0

Prediction: within 3 years the stylus will be the killer feature of Android tablets.

I'm talking about true stylus input via induction, not those capacitive styluses you can buy for the current crop of tablets.

HTC Flyer, Lenovo ThinkPad Tablet, Asus Eee Pad MeMo, and Samsung Galaxy Note are at the forefront of this wave of hybrid capacitive + inductive (e.g. finger + stylus input in separate channels) Android tablets.

Pretty soon we'll all be wondering how we managed on tablets that only had capacitive/finger input.

Note: the most cutting edge versions of Android support full stylus support. Maybe this will be one of the rare times Android beats iOS to a killer feature.

I've long anticipated a logographic / hand drawn social network or micro-blogging platform where status updates come in the form of sketches. Maybe the upcoming stylus ubiquity will bring it about?

Isolated Browsing with Chrome

$
0
0

Pac-Man Ghost

You can run a single-use instance or site specific browser using Chrome web browser with it's own self-contained user data on GNU/Linux like this:

chromium-browser --app=https://plus.google.com/ --user-data-dir=$HOME/.chromium-googleplus

This launches Chrome in an 'app' style window with just that particular web app visible (in this case, Google Plus) and no location bar, navigation buttons, etc. It isolates the browsing session from your other browsing preventing e.g. social networking sites from tracking you too effectively. If you are logged into Facebook in a regular browser for example, that company can tell every site you visit that contains a Facebook 'like' button or Facebook comments section. They are effectively gathering a comprehensive browsing history of every Facebook user who remains logged in. Do you want Facebook to know your browsing history?

It should be possible to do something very similar with Chrome for Windows and a batch file.

On Mac you can use Fluid if you want to pay for ease of use, or the same trick as above with Chrome by accessing the binary directly e.g. something like /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --app=https://plus.google.com/ --user-data-dir=$HOME/.chrome-googleplus. Save that as a shell script for one-click access.

If you want to further anonymise your browsing (e.g. obscure your IP address for example) you might consider using software like Tor.

Moving to Great Grandma's House


Working From the Beach

$
0
0

IMG_20130308_091255.jpg

-- Sent from my Android phone with K-9 Mail. Please excuse my brevity.

Deviator ARG-like in Perth

Script to Fetch BitBucket Tasks as Text

$
0
0

sunset-newhouse.jpg

These days I am using Bitbucket for the git repository hosting and task management on my commercial projects. One thing I often need to do is fetch a list of current tasks so that I can update a client with what is on our current agenda for them, get feedback about priorities etc. Here's a short Python script I hacked together to do that based on some other public domain scripts I found out there:

import base64
import cookielib
import urllib2
import json

class API:
    api_url = 'http://api.bitbucket.org/1.0/'

    def __init__(self, username, password, proxy=None):
    encodedstring = base64.encodestring("%s:%s" % (username, password))[:-1]
    self._auth = "Basic %s" % encodedstring
    self._opener = self._create_opener(proxy)

    def _create_opener(self, proxy=None):
    cj = cookielib.LWPCookieJar()
    cookie_handler = urllib2.HTTPCookieProcessor(cj)
    if proxy:
        proxy_handler = urllib2.ProxyHandler(proxy)
        opener = urllib2.build_opener(cookie_handler, proxy_handler)
    else:
        opener = urllib2.build_opener(cookie_handler)
    return opener

    def get_issues(self, username, repository, arguments):
    query_url = self.api_url + 'repositories/%s/%s/issues/' % (username,

repository) if arguments: query_url += "?" + "&".join(["=".join(a) for a in arguments]) try: req = urllib2.Request(query_url, None, {"Authorization": self._auth}) handler = self._opener.open(req) except urllib2.HTTPError, e: print e.headers raise e return json.load(handler)

if __name__ == "__main__":
    import sys
    if len(sys.argv) < 5:
        print "Usage: %s username password baseuser repository" % (sys.argv[0],)
    else:
        result = API(sys.argv[1], sys.argv[2]).get_issues(sys.argv[3],

sys.argv[4], (("status", "new"), ("status", "open"), ("limit", "50"))) for p in result["issues"]: print " %s %s" % (p.has_key("responsible") and "*" or "", p["title"]) #print p["content"] print

Run it to get a usage message.

I secretly wish that bzr had won the distributed version control wars because of its superior user interface, but these days I am resigned to using git because pretty much everybody I have to inter-operate with is using it. It's not that bad.

Arrow of Time

Saturday Afternoon Webcam Noodling

Viewing all 248 articles
Browse latest View live