Andy Balaam | Andy Balaam's Blog         FreeGuide | GSSMP | Wrestles with God | mop(e)snake | duckmaze | Gnome Attacks         RSS

Planet Andy


kuro5hin : 4A 01-23-2012 LETTER Letter F/defendant To Court

Sunday 05 February 2012 11:50 MST

Michael David Crawford CFN: 205307 Clark County Jail PO Box 1147 Vancouver, WA 98666-1147 law@softwareproblem.net (###) ###-#### Mobile After My Release: PO Box 6888 Portland, OR 97228 January 18, 2012 Your Honor, Before you proceed with this letter please read the following quite short essay on my company's website: "Every Engineer's Solemn Duty" http://www.dulcineatech.com/ethics/whistle-blower.html. That page is not yet linked from the rest of my website so you'll need to enter the complete URL. Because an aerospace engineer by the name of Roger Boisjoly failed to fulfill his solemn duty by bringing to NASA Mission Control's attention that Cape Canaveral's temperature had fallen well below the rated specification of the O-Rings that sealed the gaps between the sections of the Challenger's solid rocket boosters, seven incredibly brave and completely innocent astronauts were killed in the most horrifyingly gruesome way - they are thought to have been still fully conscious when they struck the ocean - and America lost one-fifth of her shuttle fleet at a cost to the taxpayer of several billion dollars.

Phoronix : Intel's Brewing New Linux Graphics Driver Features

Sunday 05 February 2012 09:29 MST

Eric Anholt of Intel spoke on Saturday at FOSDEM 2012 in Belgium about the state of the Intel Linux graphics driver user-space and some of their future plans...


Phoronix : Wayland 1.0 Is Set For H1'2012 Release

Sunday 05 February 2012 08:16 MST

A few days ago I wrote that the Wayland Display Server is preparing for a stable 1.0 release and now this weekend from FOSDEM new information has been learned...


Phoronix : KMS For FreeBSD Is Still A Work In Progress

Sunday 05 February 2012 07:51 MST

FreeBSD still lacks mainline support for kernel mode-setting (KMS) on modern hardware, but at least it's still being worked on...


Phoronix : Talk Of A Brand New API For KVM Virtualization

Sunday 05 February 2012 07:45 MST

A discussion has been started about a next-generation API for Linux KVM (Kernel-based Virtual Machine) virtualization...


Planet Gnome : Jovanka Gulicoska: Using git add -p

Sunday 05 February 2012 07:23 MST

Currently I?m working on changing the look of the dialogs in Empathy. So here is the problem. One button was not the same size as the other buttons because it had size group. I had to remove the size group to make that button look same as the others. That?s where the problem occured. Removing the size group made more changes to the file because of the version of Glade. Some important rows were also deleted, and some were added.


This how my patch look like:

Here is what I had to do:
* reset the patch
* see that your changes: git status
* type: git add -p and this will take you to this:

(following the instructions you can let the rows to stay changed or remove the rows that you didn?t change)
* when you have only the rows that you need you can make git commit
* format patch: git format-patch HEAD~1
And that?s it. You have what you need.  :)

Planet Python : Tennessee Leeuwenburg: Resources and tips

Sunday 05 February 2012 06:42 MST

In working on this project, I've hard to source my own resources for learning. As a software guy, my hardware knowledge is limited to whatever I can still remember from high school physics, which is 15 years ago now. Granted, I don't seem to need much more than high school physics here, but 15 years is a long time between study sessions.

I discovered that a great many electronics books are structured as follows: fluffy introduction, definition of all terms, history of physics, all of physics, now do it. Unfortunately, I can't assimilate knowledge that way. It's impossible (for me) to integrate an abstract set of definitions and history lessons, and come out with a working knowledge of building circuits. It's hard just to get through the introduction without falling asleep, frankly. So here is where I go:

Book: "Make: electronis: learning by discovery"
http://books.google.com.au/books/about/Make_electronics.html?id=PQzYdC3BtQkC

This video series, an intro to circuits from the absolute, total beginning; by Bucky Roberts:
http://thenewboston.org/list.php?cat=41

This video series, specifically covering the Arduino, by Jeremy Blum: http://www.youtube.com/watch?v=fCxzA9_kg6s

I'm sure I'll end up assembling some more resources as I learn and need more advanced topics, but these constitute a really great start with a gentle learning curve.

Cheers,
-Tennessee

UKJJS : Bad Ass C# Software Engineers at HotelsCombined.com (Sydney, Australia)

Sunday 05 February 2012 06:31 MST

Help us build great products and have fun doing it. If you are a world class coder we will find something interesting for you to work on.

JJ : Bad Ass C# Software Engineers at HotelsCombined.com (Sydney, Australia)

Sunday 05 February 2012 06:31 MST

UKJJS : Application Developer/Analyst (Junior to Mid-level) at Behavioral Media Networks (Somerville, MA; Providence, RI; San Francisco, CA)

Sunday 05 February 2012 04:31 MST

We are looking for a junior to mid-level multi-tier application developer responsible for working in and collaborating within an R&D team with direct guidance from senior team members. We're a quickly growing group of closely affiliated technology firms developing a number of server-based applications. You will have the opportunity to work with cutting-edge technologies originated from the MIT Mind Machine Project and the Harvard Biophysics Program.

JJ : Application Developer/Analyst (Junior to Mid-level) at Behavioral Media Networks (Somerville, MA; Providence, RI; San Francisco, CA)

Sunday 05 February 2012 04:31 MST

Planet Gnome : Karen Sandler: FOSDEM, part 1

Sunday 05 February 2012 01:54 MST

My day started out bright and early, meeting Tom Marble, Richard Fontana and Bradley Kuhn to get breakfast and prepare ourselves for the legal issues and policy devroom. I have to credit Tom, there really was a demand for the room and I thought we had some really interesting conversations. I did slip out throughout the day to get to various GNOME related things, but the devroom was my anchor, which was sometimes difficult when it was stuffed to the gills!

I held two sessions today. One was was an unexpected talk I gave with Bradley about fiscal sponsorship organizations when one of morning speakers let us know that he was stuck on a train and wasn?t going to make it. The second was moderating a panel on software patents, which is always interesting.

The whole track was good, but I have to admit that one of my favorite things was having Harald Welte in the room while Philippe Laurent described the German case law.

I also made it to the cross-desktop room to see a few talks including Dave Neary?s talk on mentorship and Allan Day?s talk on Every Detail Matters. The rest of the day was jam packed with intense conversations and meeting people, which was capped off with a really fun time at the GNOME beer event. I even met a few GNOME hackers I?d not met before. It was also great to hang out with my mentee, Emily Gonyer who not only is experiencing her first conference, but also manned the GNOME booth most of the day!

Must get some sleep to prepare myself for tomorrow?s FOSDEM craziness.

UKJJS : Drupal Developer, Marketing + Communications Team at Teach For America (New York, NY)

Sunday 05 February 2012 01:31 MST

Position Summary
The Drupal Developer works with the Manager of Front-end Web Development in collaboration with designers and members of the marketing team to develop and improve Teach For America's public-facing website, www.teachforamerica.org.

Our Drupal Developer will oversee all aspects of back-end development for teachforamerica.org, including module development, feature building, and everyday back-end maintenance. The Drupal Developer reports to the Managing Director of Digital Initiatives on Teach For America's marketing team.

Qualifications

Responsibilities
Responsibilities will include, but are not limited to: 

  • Executing all Drupal development and maintenance for teachforamerica.org, independently and in consultation with freelance development support

  • Working with the Manager of Front-end Web Development to design, code, and test new dynamic site features

  • Troubleshooting existing performance and back-end configuration issues

  • Contributing ideas and execution strategies for new projects and site features

  • Serving as an integral member of the teachforamerica.org team

  • Will partner closely with our IT team to ensure performance and stability of www.teachforamerica.org


  • Education and experience 

  • 3-5 years of experience in web development, including experience in Drupal and PHP

  • Bachelor's degree required, preferably in CS or a related field 

  • Experience working with technology, marketing, and design teams


  • Knowledge, skills, and abilities

  • Proficient in Drupal 7, including custom module development, key contributed modules, the core API, CCK, and Views

  • Proven experience programming in PHP and SQL

  • Proficient in JavaScript and major JavaScript libraries (jQuery)

  • Proficient coding standards-compliant XHTML/HTML and CSS

  • Proficient in maintenance and administration of Drupal modules and sites

  • Experience with revision control systems such as Subversion and Git

  • Familiarity with Drupal theming and templating

  • Familiarity with mobile development and responsive design

  • Involvement in the Drupal community is a plus, but not required

  • A positive attitude and a passion for creating beautiful and functional websites
  • JJ : Drupal Developer, Marketing + Communications Team at Teach For America (New York, NY)

    Sunday 05 February 2012 01:31 MST

    Planet Python : Ludvig Ericson: So you're a joker?

    Sunday 05 February 2012 00:34 MST

    I read an article by some guy called SM on the subject of jokers, he's saying the world is full of jokers - people who talk a lot but do little.

    I am a fuck-up at my current workplace - I handle sick leaves poorly, I show up for work five minutes late rather than five minutes early; I am a fuck-up at house chores - I rarely do the dishes, laundry is everywhere, cleaning is the last thing I think about; I sometimes fuck up with friends - I miss out on keeping in touch, I borrow money and forget about it, I hit on some poor guy's ex, the list goes on.

    I am not a fuck-up in my true nature, in fact I'm probably more of an over-zealous Asperger kid inside. I don't give up before it's too late, and I find a way when I need to. I move heaven and earth, as SM puts it.

    At first the logics seem counter-intuitive, but really it's an ages old problem: you have an infinite set of chores, and a limited rate of chore churning. How do you balance the workload; what do you do well, half-assed and not at all? More often than not, there is a conflict of interest between the various aspects of life. You have to call the shots.

    The todo list is the only way to avoid being a joker. You will have to defer tasks. That's just reality. You will sometimes defer tasks up to a point where you realize, "ah man wish I was going to do this but I'm not." That's not being a joker, that's just you being rational.

    So while I agree that it's a good thing to go into tunnel vision mode and just churn out a product in no time, it's also not a viable lifestyle. SM makes it seem as if the only way to live is 150% speed all the time and get rich.

    Call me complicated, but I want more out of life than that. If what it takes to make piles of money is complete tunnel vision, then I shall have none of it. Let me sit smug-faced in my middle-class bed and enjoy life before it flashes me by.

    Save on Delicious delicious.com

    UKJJS : ELITE STARTUP TEAM - JAVA SOFTWARE ENGINEER/ARCHITECT at Webalo, Inc (Los Angeles, CA)

    Saturday 04 February 2012 23:31 MST

    Are you an outstanding software engineer looking for an intellectually stimulating opportunity to create revolutionary software?


    If so, then we may have what you are looking for.


    Webalo, Inc., a software start-up located in West Los Angeles, is seeking a few highly qualified software engineers to join a world-class team in the ongoing development of Webalo's leading technology for delivering applications to mobile devices. Webalo transforms the economics of mobile computing by providing an end-to-end cloud-based solution that enables non-technical users to select individual features and functions from their desktop applications -- even custom enterprise applications -- and immediately deliver them to mobile devices.


    This position will give you the opportunity to:



    Candidates should be prepared to work both individually and as part of a larger team. Candidates should generally be prepared to work at Webalo's offices in West Los Angeles. The position involves both architecture and hands-on coding of both client and server software in Java, XML, and other assorted languages (C#, C, C++, Objective C, Python, ECMAScript/ActionScript, etc.).

    JJ : ELITE STARTUP TEAM - JAVA SOFTWARE ENGINEER/ARCHITECT at Webalo, Inc (Los Angeles, CA)

    Saturday 04 February 2012 23:31 MST

    Martin Fowler : photostream 20

    Saturday 04 February 2012 21:54 MST

    Stowe, VT

    UKJJS : Senior C# Developer at Data Access, Inc. (Charlotte, NC)

    Saturday 04 February 2012 21:31 MST

    Data Access provides custom development services to a variety of clients, as well as several COTS packages that serve several service-oriented markets. As part of a large overhaul of our flagship business management package, we are in need of a skilled C# developer with experience in ASP.NET MVC.


    This job will entail writing web applications that are optimized for mobile (phone and tablet) platforms; the desktop arena is served by our WPF application and WCF services. You'll be working with the latest Microsoft tools; Visual Studio 2010, .NET 4.0, and Entity Framework 4 (Database First) against SQL Server 2008 R2 databases. Working conditions are great, too; specific working hours are flexible and you can wear mostly anything you want (kakhis, jeans, shorts, t-shirts, Members Only jackets, etc.).


    While this will initially be a three month contract, the possibility exists for a future full-time position. Payment is competitive, too. Since payment during the contract will be on an hourly basis, please be sure to include your pay requirements with your resume.

    JJ : Senior C# Developer at Data Access, Inc. (Charlotte, NC)

    Saturday 04 February 2012 21:31 MST

    Planet Gnome : Jens Georg: FOSDEM 2012 Talk

    Saturday 04 February 2012 19:21 MST

    Here are my slides to the short talk I did today about Rygel here at FOSDEM.

    Phoronix : What The New Linux Game Publishing Will Look Like

    Saturday 04 February 2012 15:46 MST

    Clive Crous, the new CEO of Linux Game Publishing following the resignation of founder and CEO Michael Simms, has issued a message to Linux gamers concerning the future of LGP...


    OSNews : EU Regulators Want Google to Halt New Privacy Policy

    Saturday 04 February 2012 14:53 MST

    "A group of European regulators has written to Google calling on it to halt the introduction of its new privacy policy, saying it needs to investigate whether the proposals sufficiently protect users' personal data." I'd rather regulators are on top of this now than when it's too late and we're all plugged into the Google Hivemind Overlord.

    OSNews : Samsung Says EU Probe Will Find it Compliant

    Saturday 04 February 2012 14:37 MST

    "Samsung, in its first acknowledgment of the European Commission's antitrust investigation of its patent licensing practices, Friday said it believed the commission would ultimately conclude the company complies with the rules. The investigation arose out of Samsung's dispute with Apple over trademarks and patents that cover smartphones and tablet computers."

    Planet Python : Stefan Scherfke: Designing and Testing PyZMQ Applications ? Part 1

    Saturday 04 February 2012 13:34 MST

    ZeroMQ (or ØMQ or ZMQ) is an intelligent messaging framework and described as ?sockets on steroids?. That is, they look like normal TCP sockets but actually work as you?d expect sockets to work. PyZMQ adds even more convenience to them, which makes it a really a good choice if you want to implement a distributed application. Another big plus for ØMQ is that you can integrate sub-systems written in C, Java or any other language ØMQ supports (which are a lot).

    If you?ve never heard of ØMQ before, I recommend to read ZeroMQ an Introduction by Nicholas Piël, before you go on with this article.

    The ØMQ Guide and PyZMQ?s documentation are really good, so you can easily get started. However, when we began to implement a larger application with it (a distributed simulation framework), several questions arose which were not covered by the documentation:

    I didn?t find something like a best practice article that answered my questions. So in this series of articles, I?m going to talk about what I?ve learned during the last months. I?m not a PyZMQ expert (yet ;-)), but what I?ve done so far works quite well and I never had more tests in a project than I do have now.

    You?ll find the source for the examples at bitbucket. They are written in Python 3.2 and tested under Mac OS X Lion, Ubuntu 11.10 and Windows 7, 64 bit in each case. If you have any suggestions or improvements, please fork me or just leave a comment.

    In this first article, I?m going to talk a bit about how you could generally design your application to be flexible, maintainable and testable. The second part will be about unit testing and the finally, I?ll cover process and system testing.

    Comparison of Different Approaches

    There are basically three possible ways to implement a PyZMQ application. One, that?s easy, but limited in practical use, one that?s more flexible, but not really pythonic and one, that needs a bit more setup, but is flexible and pythonic.

    All three examples feature a simple ping process and a pong process with varying complexity. I use multiprocessing to run the pong process, because that?s what you should usually do in real PyZMQ applications (you don?t want to use threads and if both processes are running on the same machine, there?s no need to invoke both of them separately).

    All of the examples will have the following output:

    (zmq)$ python blocking_recv.py
    Pong got request: ping 0
    Ping got reply: pong 0
    ...
    Pong got request: ping 4
    Ping got reply: pong 4
    

    Let?s start with the easy one first. You just use on of the socket?s recv methods in a loop:

    # blocking_recv.py
    import multiprocessing
    import zmq
    
    
    addr = 'tcp://127.0.0.1:5678'
    
    
    def ping():
        """Sends ping requests and waits for replies."""
        context = zmq.Context()
        sock = context.socket(zmq.REQ)
        sock.bind(addr)
    
        for i in range(5):
            sock.send_unicode('ping %s' % i)
            rep = sock.recv_unicode()  # This blocks until we get something
            print('Ping got reply:', rep)
    
    
    def pong():
        """Waits for ping requests and replies with a pong."""
        context = zmq.Context()
        sock = context.socket(zmq.REP)
        sock.connect(addr)
    
        for i in range(5):
            req = sock.recv_unicode()  # This also blocks
            print('Pong got request:', req)
            sock.send_unicode('pong %s' % i)
    
    
    if __name__ == '__main__':
        pong_proc = multiprocessing.Process(target=pong)
        pong_proc.start()
    
        ping()
    
        pong_proc.join()
    

    So this is very easy and no that much code. The problem with this is, that it only works well if your process only uses one socket. Unfortunately, in larger applications that is rather rarely the case.

    A way to handle multiple sockets per process is polling. In addition to your context and socket(s), you need a poller. You also have to tell it which events on which socket you are going to poll:

    # polling.py
    def pong():
        """Waits for ping requests and replies with a pong."""
        context = zmq.Context()
        sock = context.socket(zmq.REP)
        sock.bind(addr)
    
        # Create a poller and register the events we want to poll
        poller = zmq.Poller()
        poller.register(sock, zmq.POLLIN|zmq.POLLOUT)
    
        for i in range(10):
            # Get all sockets that can do something
            socks = dict(poller.poll())
    
            # Check if we can receive something
            if sock in socks and socks[sock] == zmq.POLLIN:
                req = sock.recv_unicode()
                print('Pong got request:', req)
    
            # Check if we cann send something
            if sock in socks and socks[sock] == zmq.POLLOUT:
                sock.send_unicode('pong %s' % (i // 2))
    
        poller.unregister(sock)
    

    You see, that our pong function got pretty ugly. You need 10 iterations to do five ping-pongs, because in each iteration you can either send or reply. And each socket you add to your process adds two more if-statements. You could improve that design if you created a base class wrapping the polling loop and just register sockets and callbacks in an inheriting class.

    That brings us to our final example. PyZMQ comes with with an adapted Tornado eventloop that handles the polling and works with ZMQStreams, that wrap sockets and add some functionality:

    # eventloop.py
    from zmq.eventloop import ioloop, zmqstream
    
    
    class Pong(multiprocessing.Process):
        """Waits for ping requests and replies with a pong."""
        def __init__(self):
            super().__init__()
            self.loop = None
            self.stream = None
            self.i = 0
    
        def run(self):
            """
            Initializes the event loop, creates the sockets/streams and
            starts the (blocking) loop.
    
            """
            context = zmq.Context()
            self.loop = ioloop.IOLoop.instance()  # This is the event loop
    
            sock = context.socket(zmq.REP)
            sock.bind(addr)
            # We need to create a stream from our socket and
            # register a callback for recv events.
            self.stream = zmqstream.ZMQStream(sock, self.loop)
            self.stream.on_recv(self.handle_ping)
    
            # Start the loop. It runs until we stop it.
            self.loop.start()
    
        def handle_ping(self, msg):
            """Handles ping requests and sends back a pong."""
            # req is a list of byte objects
            req = msg[0].decode()
            print('Pong got request:', req)
            self.stream.send_unicode('pong %s' % self.i)
    
            # We?ll stop the loop after 5 pings
            self.i += 1
            if self.i == 5:
                self.stream.flush()
                self.loop.stop()
    

    This even adds more boilerplate code, but it will pay of if you use more sockets and most of that stuff in run() can be put into a base class. Another drawback is, that the IOLoop only uses recv_multipart(). So you always get a lists of byte strings which you have to decode or deserialize on your own. However, you can use all the send methods socket offers (like send_unicode() or send_json()). You can also stop the loop from within a message handler.

    In the next sections, I?ll discuss how you could implement a PyZMQ process that uses the event loop.

    Communication Design

    Before you start to implement anything, you should think about what kind of processes you need in your application and which messages they exchange. You should also decide what kind of message format and serialization you want to use.

    PyZMQ has built-in support for Unicode (send sends plain C strings which map to Python byte objects, so there?s a separate method to send Unicode strings), JSON and Pickle.

    JSON is nice, because it?s fast and lets you integrate processes written in other languages into you application. It?s also a bit safer, because you cannot receive arbitrary objects as with pickle. The most straightforward syntax for JSON messages is to let them be triples [msg_type, args, kwargs], where msg_type maps to a method name and args and kwargs get passed as positional and keyword arguments.

    I strongly recommend you to document each chain of messages your application sends to perform a certain task. I do this with fancy PowerPoint graphics and with even fancier ASCII art in Sphinx. Here is how I would document our ping-pong:

    Sending pings
    -------------
    
    * If the ping process sends a *ping*, the pong processes responds with a
      *pong*.
    * The number of pings (and pongs) is counted. The current ping count is
      sent with each message.
    
    ::
    
        PingProc      PongProc
         [REQ] ---1--> [REP]
               <--2---
    
    
        1 IN : ['ping, count']
        1 OUT: ['ping, count']
    
        2 IN : ['pong, count']
        2 OUT: ['pong, count']
    

    First, I write some bullet points that explain how the processes behave and why they behave this way. This is followed by some kind of sequence diagram that shows when which process sents which message using which socket type. Finally, I write down how the messages are looking. # IN is what you would pass to send_multipart and # OUT is, what is received on the other side by recv_multipart. If one of the participating sockets is a ROUTER or DEALER, IN and OUT will differ (though that?s not the case in this example). Everything in single quotation marks (') represents a JSON serialized list.

    If our pong process used a ROUTER socket instead of the REP socket, it would look like this:

    1 IN : ['ping, count']
    1 OUT: [ping_uuid, '', 'ping, count']
    
    2 IN : [ping_uuid, '', 'pong, count']
    2 OUT: ['pong, count']
    

    This seems like a lot of tedious work, but trust me, it really helps a lot when you need to change something a few weeks later!

    Application Design

    In the examples above, the Pong process was responsible for setting everything up, for receiving/sending messages and for the actual application logic (counting incoming pings and creating a pong).

    Obviously, this is not a very good design. What we can do about this is to put most of that nasty setup stuff into a base class which all your processes can inherit from, and to put all the actual application logic into a separate (PyZMQ independent) class.

    ZmqPocess ? The Base Class for all Processes

    The base class basically implements two things:

    It also inherits multiprocessing.Process so that it is easier to spawn it as sub-process. Of course, you can also just call its run() method from you main().

    # zmqproc.py
    import multiprocessing
    
    from zmq.eventloop import ioloop, zmqstream
    import zmq
    
    
    class ZmqProcess(multiprocessing.Process):
        """
        This is the base for all processes and offers utility functions
        for setup and creating new streams.
    
        """
        def __init__(self):
            super().__init__()
    
            self.context = None
            """The ØMQ :class:`~zmq.Context` instance."""
    
            self.loop = None
            """PyZMQ's event loop (:class:`~zmq.eventloop.ioloop.IOLoop`)."""
    
        def setup(self):
            """
            Creates a :attr:`context` and an event :attr:`loop` for the process.
    
            """
            self.context = zmq.Context()
            self.loop = ioloop.IOLoop.instance()
    
        def stream(self, sock_type, addr, bind, callback=None, subscribe=b''):
            """
            Creates a :class:`~zmq.eventloop.zmqstream.ZMQStream`.
    
            :param sock_type: The ØMQ socket type (e.g. ``zmq.REQ``)
            :param addr: Address to bind or connect to formatted as *host:port*,
                    *(host, port)* or *host* (bind to random port).
                    If *bind* is ``True``, *host* may be:
    
                    - the wild-card ``*``, meaning all available interfaces,
                    - the primary IPv4 address assigned to the interface, in its
                      numeric representation or
                    - the interface name as defined by the operating system.
    
                    If *bind* is ``False``, *host* may be:
    
                    - the DNS name of the peer or
                    - the IPv4 address of the peer, in its numeric representation.
    
                    If *addr* is just a host name without a port and *bind* is
                    ``True``, the socket will be bound to a random port.
            :param bind: Binds to *addr* if ``True`` or tries to connect to it
                    otherwise.
            :param callback: A callback for
                    :meth:`~zmq.eventloop.zmqstream.ZMQStream.on_recv`, optional
            :param subscribe: Subscription pattern for *SUB* sockets, optional,
                    defaults to ``b''``.
            :returns: A tuple containg the stream and the port number.
    
            """
            sock = self.context.socket(sock_type)
    
            # addr may be 'host:port' or ('host', port)
            if isinstance(addr, str):
                addr = addr.split(':')
            host, port = addr if len(addr) == 2 else (addr[0], None)
    
            # Bind/connect the socket
            if bind:
                if port:
                    sock.bind('tcp://%s:%s' % (host, port))
                else:
                    port = sock.bind_to_random_port('tcp://%s' % host)
            else:
                sock.connect('tcp://%s:%s' % (host, port))
    
            # Add a default subscription for SUB sockets
            if sock_type == zmq.SUB:
                sock.setsockopt(zmq.SUBSCRIBE, subscribe)
    
            # Create the stream and add the callback
            stream = zmqstream.ZMQStream(sock, self.loop)
            if callback:
                stream.on_recv(callback)
    
            return stream, int(port)
    

    PongProc ? The Actual Process

    The PongProc inherits ZmqProcess and is the main class for our process. It creates the streams, starts the event loop and dispatches all messages to the appropriate handlers:

    # pongproc.py
    from zmq.utils import jsonapi as json
    import zmq
    
    import zmqproc
    
    
    host = '127.0.0.1'
    port = 5678
    
    
    class PongProc(zmqproc.ZmqProcess):
        """
        Main processes for the Ponger. It handles ping requests and sends back
        a pong.
    
        """
        def __init__(self, bind_addr):
            super().__init__()
    
            self.bind_addr = bind_addr
            self.rep_stream = None
    
            # Make sure this is pickle-able (e.g., not using threads)
            # or it won't work on Windows. If it's not pickle-able, instantiate
            # it in setup().
            self.ping_handler = PingHandler()
    
        def setup(self):
            """Sets up PyZMQ and creates all streams."""
            super().setup()
    
            self.rep_stream, _ = self.stream(zmq.REP, self.bind_addr, bind=True,
                    callback=self.handle_rep_stream)
    
        def run(self):
            """Sets up everything and starts the event loop."""
            self.setup()
            self.loop.start()
    
        def stop(self):
            """Stops the event loop."""
            self.loop.stop()
    
        def handle_rep_stream(self, msg):
            """
            Handles messages from a Pinger:
    
            *ping*
                Send back a pong.
    
            *plzdiekthxbye*
                Stop the ioloop and exit.
    
            """
            msg_type, data = json.loads(msg[0])
    
            if msg_type == 'ping':
                rep = self.ping_handler.make_pong(data)
                self.rep_stream.send_json(rep)
    
            elif msg_type == 'plzdiekthxbye':
                self.stop()
    
            else:
                raise RuntimeError('Received unkown message type: %s' % msg_type)
    

    There are a couple of things to note here:

    PingHandler ? The Application Logic

    The PingHandler contains the actual application logic (which is not much, in this example). The make_pong method just gets the number of pings sent with the ping message and creates a new pong message. The serialization is done by PongProc, so our Handler does not depend on PyZMQ:

    class PingHandler(object):
    
        def make_pong(self, num_pings):
            """Creates and returns a pong message."""
            print('Pong got request number %s' % num_pings)
    
            return ['pong', num_pings]
    

    Summary

    Okay, that?s it for now. I showed you three ways to use PyZMQ. If you have a very simple process with only one socket, you can easily use its blocking recv methods. If you need more than one socket, I recommend using the event loop. And polling ? you don?t want to use that.

    If you decide to use PyZMQ?s event loop, you should separate the application logic from all the PyZMQ stuff (like creating streams, sending/receiving messages and dispatching them). If your application consists of more then one process (which is usually the case), you should also create a base class with shared functionality for them.

    In the next part, I?m going to talk about how you can test your application.

    kuro5hin : What the Clark County, WA courts should know about K5.

    Saturday 04 February 2012 11:50

    The Clark County, Washington Superior Court has been made award of this website, http://www.kuro5hin.org, in the State v. Michael David Crawford case. Since the FAQ is woefully outdated, I thought I would take it upon myself to introduce any visitors from the court(s) of Clark County to the website. Below are some facts you should know.

    Planet Gnome : Stuart Langridge: It's cold outside

    Saturday 04 February 2012 11:41 MST

    You're gonna catch a cold
    From the ice inside your soul
    Christina Perri ? Jar of Hearts

    I bet at four o'clock this morning you weren't in a police station.

    Or, at least, if you were I bet you were drunk and I bet it wasn't voluntary.

    After the usual Friday night poor showing from my local pub (people who follow me on twitter will be aware that the torture of watching a hundred people think they're affirming their lives by singing Mr Brightside at the top of their voices is a regular part of my balanced weekly diet), I walked home, on a cold and cloudless night. I live about ten minutes walk from town, so the walk's no hardship, except that I was dressed in shirt and no coat and it was, as mentioned, cold.

    I need to be clear about this. Ten degrees below zero, Celsius, is seriously chilly when you're standing in it in shirt-sleeves. I'm sure people in actually cold places like Canada or Minneapolis or Refrigeration, North Dakota will be laughing mockingly at this point, but firstly, bugger off, secondly I bet you lot bother to put a coat on when you go out, thirdly it's not two in the morning for you, and fourthly bugger off.

    Anyway, I get home and... no door key in my pocket.

    You know that feeling when the Fist of Fear grabs your balls when you realise something disastrous has happened? (I don't know what the Fist grabs for women. Feel free to fill me in, or actually maybe not.) Anyway: yeah, that. I went through the usual search-all-pockets-and-then-search-them-all-again routine, just in case a mischievous cold-tolerant leprechaun hid my key from the first search and then put it back, and... no door key. Oh dear.

    I'll tell you this; the walk back to the pub again seems a much longer trek. Nowhere near as long as the second return to the house without my key, though, after it turned out no-one had handed it in. And now, what the hell to do, eh? I'm not prescient enough to hide a key in the garden, especially since that's a damned good way to come home one night and find no television where a television used to be, so... locksmith? Do they have 24-hour locksmiths? I can't be the first moron to have done this.

    If you're bored today, I have a suggestion for you. Go and find a dude who claims to be a 24-hour locksmith and punch him in his stupid lying face.

    Incidentally, how in Jah's name did anyone manage in this situation five years ago without a smartphone, huh?

    Not that the internet helps when no-one frigging answers their supposedly-24-hour phone. Also, it turns out that about four of the local 24-hour locksmith companies are actually the same company, who did answer their phone, agreed to send someone, and then after an hour of me standing in the freezing bloody freezing cold confessed that they didn't actually have anyone to send.

    It's now half three in the morning, and the shivering is starting to get on my nerves, and I can't get into my house without destroying something like a double-glazed plate glass window which will cost me hundreds of pounds to fix and my hands are shaking enough that I can barely light a cigarette, let alone throw a brick through a door that probably wouldn't break anyway, and I'd like to avoid the police showing up since I have no way of proving that I actually live here except for being able to describe where all the broken bits of skirting-board are, and everywhere is closed and the doors are all locked and it's really spectacularly bone-shudderingly mightily arse-clenchingly ridiculously psychopathically cold, and what to do? I tried sleeping in the shed. Now, cold is not like wind. Being inside a thin empty wooden building does not protect you from it. I was shivering like a jackhammer on a bouncy castle and it was becoming clear, even in my not-very-operational brain state, that lying on the floor at minus ten with only a shirt on could quite possibly lead to me actually freezing to death for real.

    Well, if the police came, either I'd get into the house or they'd arrest me, and being arrested would at least make me warm, and right now I'd cut my right hand off if Pol Pot showed up as long as he brought a pair of gloves and some soup.

    And then, through the frozen and frosty neurons came the sparkling thought that the police station would be open, wouldn't it?

    I actually felt warmer just at the thought. Not much warmer, though.

    Anyway, that's how I came to be sitting in the cop shop voluntarily at four am. One lovely copper even made me a cup of tea after I poured out my tale of woe in one long sentence, breaking only for my teeth to chatter together like I was trying to bite through the world.

    Police stations: while I appreciate that you're generally there to deal with miscreants and so on, it wouldn't kill you to get rid of two screwed-to-the-ground plastic chairs and put in, say, a chaise longue. After switching my phone to airplane mode I managed to eke out enough battery life that I could sit and read while huddled up against the radiator for five hours until nine o'clock this morning, whereupon I went and fetched the spare key from my estate agent after the longest and coldest and most sleepless night I have ever experienced.

    So, tips, for surviving a similar situation.

    1. Have a spare key. Note: I do not have a spare key hidden in my garden, burglars, so don't go looking for it. I do not know how to have a spare key somewhere where you can get at it but thieves cannot; suggestions welcomed.
    2. Have a girlfriend so that there's someone to let you back in.
    3. Next time you see a policeman, be nice to him.

    I think I might have a nap now.

    Planet Python : Patrick Stinson: Magic

    Saturday 04 February 2012 09:56 MST


    There is a small window between learning and knowing where it's possible to surprise yourself with a good design. Sometimes you are confronted with a new set of technologies and a new problem domain, and armed with a solid background in the fundamentals software engineering. You lay out the plans and begin work taking the best things from your previous experience, but only some of it applies. The rest is subject to your intuition and inherent skill, something that has nothing to do with experience with toolkits and successful or failed projects.

    You trudge on almost blindly, building the system to match the "requirements" as well as you understand them. Gradually the behavioral nuances of the new technology bubble to the service, and little by little your skill set rises to meet them.

    You proceed conservatively and test thoroughly, hoping for the best on the big day when you'll pull the switch. But your experience keeps tugging at your sleeve with the reminder that no matter how hard you design and test, the fact is that you simply can't be completely sure until it's all over.

    But, the system rolls out and you move on. You've done well. Clients are happy, and minor bugs roll in. Your hard work is rewarded with service requests that fall well within the realm of fixable flaws. You charge for them, and a wish list grows.

    Then some day down the road you finally have a chance to look back and get a feel for the process. "Wow," you think, it's kind of amazing how all of this works. Amazing how easy it is to get caught up in the confusion of the process while it's happening. But all in all, well done. Hard work always pays off.

    Planet Python : Daniel Greenfeld: Resolutions for 2012

    Saturday 04 February 2012 06:59 MST

    Planet Gnome : Jasper St. Pierre: GJS Improvements

    Saturday 04 February 2012 01:07 MST

    Myself, Giovanni Campagna as well as Colin Walters have all been working hard trying to make GJS somewhat of a competitor to PyGObject, being a full introspection stack for the GNOME Desktop Environment. Rather than give you a bunch of history, let me just give you a quick taste. There?s much more to the landing than this, such as implementing your own signals, properties, as well as implementing interfaces, but it will take me a few days to come up with an exciting example that fully showcases the power that you now have.

    const Lang = imports.lang;
    
    const Cogl = imports.gi.Cogl;
    const Clutter = imports.gi.Clutter;
    const Gio = imports.gi.Gio;
    
    const MyClutterActor = new Lang.Class({
        Name: 'MyClutterActor',
        Extends: Clutter.Actor,
    
        vfunc_get_preferred_width: function(actor, forHeight) {
            return [100, 100];
        },
    
        vfunc_get_preferred_height: function(actor, forWidth) {
            return [100, 100];
        },
    
        vfunc_paint: function(actor) {
            let alloc = this.get_allocation_box();
            Cogl.set_source_color4ub(255, 0, 0, 255);
            Cogl.rectangle(alloc.x1, alloc.y1, alloc.x2, alloc.y2);
        }
    });
    
    const MyClutterEffect = new Lang.Class({
        Name: 'MyClutterEffect',
        Extends: Clutter.DeformEffect,
    
        vfunc_deform_vertex: function(effect, width, height, vertex) {
            vertex.x += Math.random() * 20 - 10;
            vertex.y += Math.random() * 20 - 10;
        }
    });
    
    let actor = new MyClutterActor();
    let stage = new Clutter.Stage();
    actor.animatev(Clutter.AnimationMode.EASE_IN_OUT_CUBIC, 2000, ['x', 'y'], [200, 200]);
    actor.add_effect(new MyClutterEffect());
    stage.add_actor(actor);
    stage.show_all();
    
    Clutter.main();
    

    OSNews : Do iOS Applications Crash More Often than Android Applications?

    Friday 03 February 2012 23:43 MST

    There's an article making the rounds right now about how applications on iOS crash more often than applications on Android. I'm not going to detail the entire methodology - the article itself does so - but it does raise an interesting talking point about how both mobile operating systems handle application crashes and updates.

    Planet Classpath : Dalibor Topic: Next Gig: JDK 7 Updates in OpenJDK at FOSDEM in Brussels, Belgium on Saturday, February 4th

    Friday 03 February 2012 23:43 MST

    Edvard Wendelin and I will be speaking at the FOSDEM conference's Java Libre developer room about the JDK 7 Updates Project in OpenJDK in room K.4.401 starting at 11:30 AM.

    See you there!

    LWN : The end of LinuxDevices?

    Friday 03 February 2012 19:57 MST

    LinuxDevices.com is carrying a brief note from the "outgoing editor-in-chief" stating that the site's owner has been acquired. "At this point, the future of LinuxDevices.com is uncertain. What we can say for sure is that it has been a pleasure serving our readers -- the best in the business."

    LWN : Slackware updates

    Friday 03 February 2012 19:52 MST

    Slackware has been silent for some time (noted in this comment thread). Although we haven't seen any advisories in the LWN mailbox, the changelogs are showing some new updates. Slackware users should update their systems.

    LWN : Stable kernels 3.0.19, 3.2.3 and 2.6.32.56

    Friday 03 February 2012 19:21 MST

    Greg KH has released stable kernels 3.0.19, 3.2.3 and 2.6.32.56. All of them have important fixes across the board.

    Update 3.2.4 has now been released to address a compilation problem in 3.2.3.

    LWN : Friday's security updates

    Friday 03 February 2012 18:34 MST

    CentOS has updated ghostscript (C6; C5; C4: multiple vulnerabilities), php (C6; C5; C4: remote code execution), and C5: php53 (remote code execution).

    Debian has updated iceweasel (multiple vulnerabilities), iceape (multiple vulnerabilities), and php5 (remote code execution).

    Mandriva has updated mozilla (multiple vulnerabilities).

    Red Hat has updated RHEL5: php53 (remote code execution), RHEL4,5,6: php (remote code execution), ghostscript (RHEL5,6; RHEL4: multiple vulnerabilities), and RHEL5.6: freetype (code execution).

    Scientific Linux has updated SL5: php53 (remote code execution), SL4,5,6: php (remote code execution), and ghostscript (SL5,6; SL4: multiple vulnerabilities).

    Don Marti : Stop H.R. 3699

    Friday 03 February 2012 15:20 MST

    (Finally. I really need to move my "blog to Congress" script over to ikiwiki.)

    Dear Representative Stark:

    I am writing to ask you to oppose H.R. 3699, the Research Works Act.

    If Rep. Darrell Issa came to you and said, "Let's give our grant recipients permission to steal taxpayer-funded equipment from the lab and resell it on the Internet," you would say he was nuts. But this is exactly what H.R. 3699 would do with those scientists' research results.

    The Public Access Policy at the National Institutes of Health has been a success, and makes original papers available to health professionals, patients, and their families. Open access to research also encourages follow-up research in the public and private sectors.

    H.R. 3699 would throw away these benefits for no gain. The foreign publishing companies that would benefit from this bill are not publishers in the usual sense. They do not provide the same editing and selection functions that a typical magazine does in-house. Our Federally funded researchers already do the work of reviewing and editing at no charge.

    Please do what you can to stop H.R. 3699.

    Sincerely,

    Donald B. Marti Jr.

    kuro5hin : kuro5hin's Membership Fees Are a Good Thing

    Friday 03 February 2012 11:50

    Welcome, new readers, to kuro5hin, the online blog with a classic Web 1.0 style. Whether you visited the site because of its stimulating articles on SOPA and the Fat Acceptance Movement or the thought-provoking diary entires, we welcome you to our humble community.  As you might have already figured out, this is an exclusive community that charges a one-time membership fee of $5. This might upset some of you and give the impression that we kuro5hiners (as we like to call ourselves) are elitists, but know that there is method to our madness, and the $5 membership fee, also known as the paywall, is for the benefit of the entire kuro5hin community.

    Coding Horror : Listen to Your Community, But Don't Let Them Tell You What to Do

    Friday 03 February 2012 10:18 MST

    You know how interviewers love asking about your greatest weakness, or the biggest mistake you've ever made? These questions may sound formulaic, maybe even borderline cliche, but be careful when you answer: they are more important than they seem.

    So when people ask me what our biggest mistake was in building Stack Overflow I'm glad I don't have to fudge around with platitudes. I can honestly and openly point to a huge, honking, ridiculously dumb mistake I made from the very first day of development on Stack Overflow – and, worse, a mistake I stubbornly clung to for a solid nine month period after that over the continued protestations of the community. I even went so far as to write a whole blog post decrying its very existence.

    For the longest time, I had an awfully Fight Club-esque way of looking at this: the first rule of Stack Overflow was that you didn't discuss Stack Overflow! After all, we were there to learn about programming with our peers, not learn about a stupid website. Right?

    Fight-club-soap

    I didn't see the need for a meta.

    Meta is, of course, the place where you go to discuss the place. Take a moment and think about what that means. Meta is for people who care so deeply about their community that they're willing to go one step further, to come together and spend even more of their time deciding how to maintain and govern it. So, in a nutshell, I was telling the people who loved Stack Overflow the most of all to basically … f**k off and go away.

    As I said, not my finest hour.

    In my defense, I did eventually figure this out, thanks to the continued prodding of the community. Although we'd used an external meta site since beta, we eventually launched our very own meta.stackoverflow in June 2009, ten months after public beta. And we fixed this very definitively with Stack Exchange. Every Stack Exchange site we launch has a meta from day one. We now know that meta participation is the source of all meaningful leadership and governance in a community, so it is cultivated and monitored closely.

    I also paid penance for my sins by becoming the top user of our own meta. I've spent the last 2 years and 7 months totally immersed in the morass of bugs, feature requests, discussions, and support that is our meta. As you can see in my profile, I've visited meta 901 unique days in that time frame, which is disturbingly close to every day. I consider my meta participation stats a badge of honor, but more than that, it's my job to help build this thing alongside you. We explicitly do everything in public on Stack Exchange – it's very intentionally the opposite of Ivory Tower Development.

    Along the way I've learned a few lessons about building software with your community, and handling community feedback.

    1. 90% of all community feedback is crap.

    Let's get this out of the way immediately. Sturgeon's Law can't be denied by any man, woman, child … or community, for that matter. Meta community, I love you to death, so let's be honest with each other: most of the feedback and feature requests you give us are just not, uh, er … actionable, for a zillion different reasons.

    But take heart: this means 10% of the community feedback you'll get is awesome! I guarantee you'll find ten posts that are pure gold, that have the potential to make the site clearly better for everyone … provided you have the intestinal fortitude to look at a hundred posts to get there. Be prepared to spend a lot of time, and I mean a whole freaking lot of time, mining through community feedback to extract those rare gems. I believe every community has users savvy enough to produce them in some quantity, and they're often startlingly wonderful.

    2. Don't get sweet talked into building a truck.

    You should immediately triage the feedback and feature requests you get into two broad buckets:

    We need power windows in this car!

    or

    We need a truck bed in this car!

    The former is, of course, a reasonable thing to request adding to a car, while the latter is a request to change the fundamental nature of the vehicle. The malleable form of software makes it all too tempting to bolt that truck bed on to our car. Why not? Users keep asking for it, and trucks sure are convenient, right?

    Don't fall into this trap. Stay on mission. That car-truck hybrid is awfully tempting to a lot of folks, but then you end up with a Subaru Brat. Unless you really want to build a truck after all, the users asking for truck features need to be gently directed to their nearest truck dealership, because they're in the wrong place.

    3. Be honest about what you won't do.

    It always depressed me to see bug trackers and feedback forums with thousands of items languishing there in no man's land with no status at all. That's a sign of a neglected community, and worse, a dishonest relationship with the community. It is sadly all too typical. Don't do this!

    I'm not saying you should tell your community that their feedback sucks, even when it frequently does. That'd be mean. But don't be shy about politely declining requests when you feel they don't make sense, or if you can't see any way they could be reasonably implemented. (You should always reserve the right to change your mind in the future, of course.) Sure, it hurts to be rejected – but it hurts far more to be ignored. I believe very, very strongly that if you're honest with your community, they will ultimately respect you more for that.

    All relationships are predicated on honesty. If you're not willing to be honest with your community, how can you possibly expect them to respect you … or continue the relationship?

    4. Listen to your community, but don't let them tell you what to do.

    It's tempting to take meta community requests as a wholesale template for development of your software or website. The point of a meta is to listen to your community, and act on that feedback, right? On the contrary, acting too directly on community feedback is incredibly dangerous, and the reason many of these community initiatives fail when taken too literally. I'll let Tom Preston-Werner, the co-founder of GitHub, explain:

    Consider a feature request such as ?GitHub should let me FTP up a documentation site for my project.? What this customer is really trying to say is ?I want a simple way to publish content related to my project,? but they?re used to what?s already out there, and so they pose the request in terms that are familiar to them. We could have implemented some horrible FTP based solution as requested, but we looked deeper into the underlying question and now we allow you to publish content by simply pushing a Git repository to your account. This meets requirements of both functionality and elegance.

    Community feedback is great, but it should never be used as a crutch, a substitute for thinking deeply about what you're building and why. Always try to identify what the underlying needs are, and come up with a sensible roadmap.

    5. Be there for your community.

    Half of community relationships isn't doing what the community thinks they want at any given time, but simply being there to listen and respond to the community. When the co-founder of Stack Exchange responds to your meta post – even if it wasn't exactly what you may have wanted to hear – I hope it speaks volumes about how committed we are to really, truly building this thing alongside our community.

    Regardless of whether money is changing hands or not, you should love discovering some small gem of a community request or bugfix on meta that makes your site or product better, and swooping in to make it so. That's a virtuous public feedback loop: it says you matter and we care and everything just keeps on getting better all in one delightful gesture.

    And isn't that what it's all about?

    [advertisement] What's your next career move? Stack Overflow Careers has the best job listings from great companies, whether you're looking for opportunities at a startup or Fortune 500. You can search our job listings or create a profile and let employers find you.

    XKCD : Wrong Superhero

    Friday 03 February 2012 05:00 MST

    Hi! Someone call for me? I'm a superhero who specializes in the study of God's creation of Man in the Book of Genesi-- HOLY SHIT A GIANT BUG!

    OSNews : *Parabola GNU/Linux: Freedom Packaged*

    Thursday 02 February 2012 23:22 MST

    There are different reasons people use Unix-like operating systems, including configurable, availability free of charge, powerful command line interface an many more. Some people are motivated by the moral issue: they reject non-free software. Specifically for such users Free Software Foundation developed Guidelines for Free System Distributions and created the list of absolutely free ("as in freedom") distributions. In this article we are going to look at the most recent entry on the list - Parabola GNU/Linux. Read more on this exclusive OSNews article...

    OSNews : Google Now Scanning Android Apps for Malware

    Thursday 02 February 2012 23:11 MST

    "Google has added an automated scanning process that is designed to keep malicious apps out of the Android Market , the company announced today. The new service, code-named 'Bouncer', scans apps for known malware, spyware, and Trojans, and looks for suspicious behaviors and compares them against previously analyzed apps. Every app is then run on Google's cloud infrastructure to simulate how the software would operate on an Android device, he said. Existing apps are continuously analyzed, too."

    LWN : PHP 5.3.10 released with critical security fix

    Thursday 02 February 2012 22:26 MST

    The PHP 5.3.10 release is out; it contains a fix for a remote code execution bug introduced recently by another security fix. Anybody running 5.3.9 should probably upgrade as soon as possible.

    kuro5hin : Jetset Psychopath Pleads Guilty

    Thursday 02 February 2012 11:50

    From the New York Times: Joran van der Sloot, the Dutchman who became notorious as the prime suspect in the disappearance of an 18-year-old Alabama woman in Aruba in 2005, pleaded guilty in a Lima courtroom on Wednesday to the 2010 murder of a Peruvian woman he met at a casino. The case of the American woman, Natalee Holloway, who vanished during a senior class trip, remains unresolved despite being the subject of several books and television programs, as well as many lurid tabloid headlines over the years. The Peruvian woman, Stephany Flores, 21, was strangled in a Lima hotel room five years to the day after Ms. Holloway's disappearance. "I am truly sorry for this act," Mr. van der Sloot told the judges on Wednesday, according to The Associated Press. He bowed his head as his lawyer argued that he had killed Ms. Flores in a state of "extreme psychological trauma" brought on because he was "persecuted" during the Holloway investigation. Prosecutors have asked for a 30-year sentence. There's a partial transcript of Van Der Sloot's confession here. Basically he caught her reading an email on his PC, elbowed her in the nose and strangled her to death. It appears he was psychotically paranoid, and that could be related to the torrent of accusations that he murdered Natalee Holloway. Or, it could just as easily be evidence that he is pathologically violent when it comes to young women.

    Coding Horror : The One Button Mystique

    Wednesday 01 February 2012 21:15 MST

    I enjoy my iPhone, but I can't quite come to terms with one aspect of its design: Apple's insistence that there can be only ever be one, and only one, button on the front of the device.

    Iphone-4s-button

    I also own a completely buttonless Kindle Fire, and you'll get no argument from me that there should be at least one obvious "Jesus Handle" button on the front of any gadget. I do wonder why Amazon decided to make the Fire buttonless, when every other Kindle they ship has a home button. Amazon has a track record of making some awfully rough version 1.0 devices; I'm sure they'll add a home button in a version or two. And, hey, at only $199 I'm willing to cut them a little slack. For now.

    Even Apple is no stranger to buttonless devices. Consider the oddly buttonless third generation iPod Shuffle, where you had to double and even triple click the controls on the headphones to do basic things like advance tracks. Oh, and by the way, this also made every set of headphones you own obsolete, at least for use with this model. The fourth gen shuffle rapidly switched back to physical controls on the device, and the fifth gen went to touch controls on the device, as expected.

    Ipod-shuffle-3g-vs-4g

    Microsoft is just as guilty. I sometimes struggle with the otherwise awesome Xbox 360 Wireless Microphone. It has only a power button and some lights.

    Xbox-360-wireless-microphone

    In its defense, for the most part it does just work when you pick it up and start singing (badly, in my case), but I admit to being slightly perplexed every time I have to sync it with an Xbox, or figure out what's going on with it. Can you blame me?

    When you turn on the microphone, the built-in lights shine to display the microphone status as follows:

    When your battery power is low, the built-in lights shine to display the battery charge status as follows:

    When your microphone moves out of the wireless range of your console, the lights flash green one time every second. The lights can also change color together with supported game titles.

    If we can agree that no buttons is clearly a bad idea, I think it follows that one button is problematic in its own way. I have the same issue with the single button on the iPhone that I do with the single button mouse – it may be OK-ish at the very beginning, but over time it leads to absurd, almost comical overloading of functionality. Consider how many different things the single button on the face of an iPhone now controls:

    How-to-use-the-home-button-excerpt
    (diagram courtesy Andrew Durdin, source)

    The iPhone home button? Why, it's easy! You have your choice of…

    All of which have different meanings at different times, of course. In particular I spend a lot of time double-clicking to get to the active apps list, and I often mis-tap which kicks me over to the home screen. I have so many apps installed on my iPhone that search is the only rational way to navigate. This means I search a lot, which requires clicking once to get to the default home page, pausing, then clicking again. Sometimes I click too long, which is then detected as click-and-hold, and I get the voice search app which I am … er, not a fan of, to put it mildly.

    I've gotten to the point where I dread using the home button on my iPhone because it Makes Me Think. And I get it wrong a significant percentage of the time. This isn't the way it's supposed to be.

    You might be expecting me to turn into a rabid Windows Phone or Android fanboy about now and snarkily note how they get it right. I'm not sure they do. Either of them. They all manage to suck in their own special way.

    Phone-windows-and-android-buttons

    When there's one button on the device, at least it's clear what that button is supposed to do, right? Well, sometimes.

    There is one theme I agree with here – the clearly marked back button on both Android and Windows phones, just like a web browser. I mostly use my iPhone as a platform for the Internet, and the simplicity of the Internet is its primary strength: a collection of obvious things to click, and an easy, giant honking back button so you never get lost in its maze of twisty passages, all alike. It is true that browsers have a home button, but the latest versions of Chrome, Firefox, and Internet Explorer have all but pushed that home button off the UI in favor of the ginormous back button. While I'll tentatively agree that not all phone apps have to behave like the Internet, the Internet is becoming more and more of a platform for bona fide applications every day. The back button is a UI paradigm that works like gangbusters for webapps, and I'd argue strongly in favor of that being a hard button on a device.

    But once you add three buttons, thinking starts to creep in again. Am I pressing the correct button? That's never good. And I don't even know what that third button is supposed to be on the Android phone! I could possibly be in favor of the hard search button on the Windows phone, I suppose, but I'd rather see good, consistent use of two buttons on the face of a device before willy-nilly adding Yet Another Button. I think there's a reason the industry has more or less standardized on a two-button mouse, for example. (Yes, there is that pesky middle button, but it's a nice to have, not an essential part of the experience.)

    What about the one finger solution? Even with touch devices, one finger does not seem to be enough; there's a curious overloading of the experience over time.

    On the iPad, there are a number of system-wide gestures, such as swiping left or right with four fingers to switch between apps. Four-finger swipes? That's convoluted, but imagine a virtual mixing console with horizontal sliders. Quickly move four of them at once...and you switch apps. Application designers have to work around these, making sure that legitimate input methods don't mimic the system-level gestures.

    The worst offender is this: swipe down from the top of the screen to reveal the Notification Center (a window containing calendar appointments, the weather, etc.). A single-finger vertical motion is hardly unusual, and many apps expect such input. The games Flight Control and Fruit Ninja are two prime examples. Unintentionally pulling down the Notification Center during normal gameplay is common. A centered vertical swipe is natural in any paint program, too. Do app designers need build around allowing such controls? Apparently, yes.

    Yes, our old friend overloading is now on the touch scene in spades: for all but the simplest use of a tablet, you will inevitably find yourself double-tapping, tapping and holding, swiping with two fingers, and so on.

    Apple's done a great job of embodying simplicity and clean design, but I often think they go too far, particularly at the beginning. For example, the first Mac didn't even have cursor keys. Everything's a design call, and somewhat subjective, but like Goldilocks, I'm going to maintain that the secret sauce here is not to get the porridge too cold (no buttons) or too hot (3 or more buttons), but just right. I'd certainly be a happier iPhone user if I didn't have to think so much about what's going to happen when I press my home button for the hundredth time in a day.

    [advertisement] What's your next career move? Stack Overflow Careers has the best job listings from great companies, whether you're looking for opportunities at a startup or Fortune 500. You can search our job listings or create a profile and let employers find you.

    schwuk : Photo

    Wednesday 01 February 2012 20:00 MST



    Charlie Brooker : Charlie Brooker in Tokyo: 'In Japan geeks are comfortably mainstream'

    Wednesday 01 February 2012 12:45 MST

    Video game aficionado Charlie Brooker makes a pilgrimage to Japan, a mecca for electronics, games and comics, and feels right at home among Tokyo's unfathomable futuristic madness
    ? Browse our Tokyo city guide
    ? See our immersive video experiment
    ? Play classic games in our arcade

    People often cite admirably high-minded reasons for wanting to visit a specific foreign country. An interest in history or architecture, perhaps. A desire to walk in the footsteps of their favourite author or artist. Or maybe they want to make a musical pilgrimage to the spiritual birthplace of jazz.

    Bully for them, but that's not me. I wanted to visit Japan because of a video game in which you had to jump over animated turds.

    The game was called Kato-chan & Ken-chan ? a cheerful platform game in the vein of Super Mario Land, except the lead characters urinated, farted and defecated throughout each level. Kato-chan & Ken-chan was one of many imported, inexplicable Japanese titles I encountered while working in a games shop in the early 90s. Mario and Sonic made sense to western players, but lurking just beyond these palatable mascots was a world of entertainment too strange to ever secure an official European release: fascinating, crazy games full of talking octopuses and jaunty tunes. American games were fun but bland. Japanese games oozed a demented spirit. Unfathomable, futuristic madness: that's what made me want to visit Japan.

    Of course, it helps that Japan has, for years, been presented as a kind of Nerd Mecca. Not only is it the undisputed gadget capital of the world, it's a place where being a geek (or otaku) is comfortably mainstream. Former Prime Minister Taro Aso is an enthusiastic manga-collecting otaku, the TV ad breaks heave with glossy commercials for collectible card games, and multi-storey games arcades are commonplace. There's a gadget in every hand. Outside rush hour, the subway is eerily silent: thanks to a strong underground signal, everyone's staring at their smartphones, texting, playing games, or reading. Only after a fortnight did it strike me: not once did I hear a single person actually speaking into their phone on the Tokyo subway. Everyone ? and I mean everyone ? seemed to be perpetually tapping and swiping in silence. Unnerving to many: to a geek like me, it felt strangely comforting.

    It's easy to find grand-scale geek spectacle in Tokyo: just hop on the monorail to Odaiba, a man-made island in the middle of Tokyo bay. There, nestled amongst a collection of Bizarro skyscrapers straight out of Starship Troopers, is Miraikan, the National Museum of Emerging Science and Innovation. Here you can watch celebrity robot Asimo go through his paces, or simply gawp in astonishment at the gigantic "geo-cosmos globe": an LCD-clad model of the Earth capable of depicting metrological data in real time. This is what Logan's Run would've looked like if they'd had more money and time. There are also a series of frankly baffling exhibits, including one which, apparently impossibly, projects a gigantic microbe-style creature around your feet as you enter. This virtual floor-dwelling entity then follows you around the room as you shuffle about, interacting with monitors with giant eyes on them, some of which offer to "turn you into a song". It's like a cheese dream on a mothership.

    For a more down-to-earth nerd-out, Tokyo's Akihabara district is to geeks what San Francisco's Castro Street is to the LGBT community. It's an otaku paradise, an overwhelming whirl of shops selling electronics, games and comics. Any object you can conceive of having a USB attachment poking out of it is for sale, along with several hundred thousand that you can't.

    I'd been looking forward to browsing the shelves for zany gadgets, but the reality was slightly disappointing. Smartphone apps have replaced many of the charmingly pointless Japanese gizmos that used to be pop up on late-90s travel shows. More significantly, the west has become overtly tech-obsessed too. At home, we're routinely battered over the head with so many miraculous widgets, a sort of amazement fatigue has set in. So while in Japan you can easily stumble across a remote-control tissue box or a battery-operated planetarium for your bathroom (by which I mean a waterproof Saturn-shaped orb that floats in the bath and projects the entire visible universe onto the ceiling), the sense of surrounding novelty has diminished. It's less "WTF", more "yeah, that figures". Touring the electronic shops is still an entertainment in itself: I was merely surprised to discover I didn't actually want to buy anything.

    One of the few places I did want to spend money was in the arcades. In Britain, arcades have largely died out: we play at home, on Xboxes and PlayStations. Consoles are even more widespread in Japan, of course, but for many, finding the time and space to play in comfort is tricky. Home is often a cramped flat for all the family. Hence the evolving use of manga cafes (or mangakissa) for the nerd seeking a bit of peace and quiet. Originally these were internet cafes where otaku could gather to drink coffee and read comics: they've subsequently morphed into surrogate bedroom services. For an hourly fee you can hire a private cubicle containing a TV, a BluRay player, a computer, a games console, a stereo ? everything you'd find in a techno-savvy twentysomething's home den, right down to the bed (increasing numbers of people sleep in these bedrooms-for-hire overnight: they're open 24 hours and are considerably cheaper than a capsule hotel).

    Given this environment ? herds of itinerant otaku wandering the streets ? the continued survival of games arcades in Japan makes sense. But these are a far cry from the traditional British seaside arcade packed with flickery old Track and Field cabinets. These are bleeping, whirring, multistorey citadels filled with people doing things that scarcely make sense to an outsider. Let's run through a typical example, level-by-level ?

    On the ground floor: endless rows of what the Japanese call "UFO grabbers" ? those familiar fairground games in which you make a doomed attempt to grab an underwhelming prize using a mechanised claw. They seem to love these things, despite the fact that to the best of my knowledge no human being has ever successfully extracted a prize from one. Failure booths, I call them.

    Go up a floor and the crazy video-gaming begins. Given the competition from home consoles, arcade machines have to offer something different. Case in point: Cho Chabudai Gaeshi ("Flipping the Tea Table Game") which consists of an arcade cabinet with a small table attached to it. It's actually more of a stress reliever than a game: the aim is to vent your frustration by hammering furiously on the tabletop before tipping the whole thing over in a rage. Time it properly and you'll cause maximum on-screen chaos. My favourite level was set in an office, with the table doubling as a desk: upend your workstation at just the right moment and you'll send co-workers plummeting out of the window to their deaths.

    Above that: a floor filled with super-advanced photo booths known as purikura ? essentially digital dressing-up boxes. There are two main uses of a purikura: either jostle in with a bunch of friends to commemorate a night out, or, if you're a teenage girl and/or a psychopath, spend hours perfecting your costume before having your image digitally altered until you resemble a creepily infantilised manga cover girl.

    Top floor: a roomful of sombre youths vying for individual supremacy using some form of networked arcade strategy game that uses collectible cards. Imagine witnessing a game of bridge being played in the Cabinet War Rooms in the year 2072 AD. Some of the games are based around recognisable sports (like football), others around ancient samurai conflicts ? but whatever the theme, the nature of the action is absolutely impenetrable to the casual onlooker. The players may as well be communicating psychically. I had no idea what I was looking at: the one thing I did know was that this unfathomable futuristic madness was precisely the sort of thing I'd come to Japan to see. Somehow, I was home.

    ? Virgin Atlantic (0844 2092 770, virginatlantic.com) flies from London Heathrow to Tokyo from £846pp return. Mandarin Oriental Tokyo (00800 28 28 38 38, mandarinoriental.com/tokyo) offers rooms from £357 per night, B&B.; Conrad Tokyo (+81 3 6388 8000conradhotels.com) has Bay View Rooms from ¥42,000 (around £350). The Peninsula Tokyo (+81 3 6270 2888, peninsula.com) costs from £374 B&B;, excluding taxes, for a superior room.

    Specialist operator Inside Japan (0117 370 9751, insidejapantours.com) offers small group tours, self-guided or fully tailor-made trips. Its 14-night Best of Japan self-guided holiday, which includes stays in the mountains of Hakone, on the island of Miyajima and in the craft town of Takayama as well as Tokyo, Osaka and Kyoto, costs £2,280pp, excluding flights and local transport. For more information go to the Japan National Tourism Organization website: seejapan.co.uk

    Charlie Brooker

    guardian.co.uk © 2012 Guardian News and Media Limited or its affiliated companies. All rights reserved. | Use of this content is subject to our Terms & Conditions | More Feeds


    kuro5hin : Fuck the Fat Acceptance Movement

    Wednesday 01 February 2012 11:50

    Ms. Drive recently wrote a diary entry on the Fat Acceptance Movement, which is the movement that promotes obesity as not only normal, but healthy. To quote Ms. Drive, "There is no reliable evidence at all that carrying the equivalent of a grown man (or more) in pure fat on your body might put your heart under strain or be bad for you."  Sorry Holly, but that's bullshit. Heart disease is the number one killer in America, even worse than lung cancer, and what is the number one cause of heart disease? Obesity. That there is a movement that promotes obesity as an acceptable lifestyle to our nation's children is no less disgusting than the tobacco companies' attempts to advertise cigarettes to children. When I responded to those candy cigarettes they sold in ice cream trucks with "Fuck the tobacco companies!", I made many enemies, but I was vindicated when scientists proved that smoking is unhealthy. I expect to suffer the same outrage but also enjoy the same vindication by my next statement: Fuck the Fat Acceptance Movement!

    schwuk : Photo

    Wednesday 01 February 2012 11:00 MST



    Greg K-H : Time to update your email address book

    Wednesday 01 February 2012 05:08 MST

    sed -i 's/gregkh@suse.de/gregkh@linuxfoundation.org/g' .addressbook

    XKCD : Baby Names

    Wednesday 01 February 2012 05:00 MST

    I've been trying for a couple years now but I haven't been able to come up with a name dumber than 'Renesmee'.

    Planet Classpath : David Gilbert: FOSDEM

    Tuesday 31 January 2012 20:58 MST

    I'll be fighting the cold and the snow to get to Brussels this weekend for FOSDEM 2012. See you there!

    schwuk : Photo

    Tuesday 31 January 2012 20:00 MST



    Planet Classpath : Andrew Overholt: Eclipse at FOSDEM

    Tuesday 31 January 2012 19:59 MST

    This coming weekend is FOSDEM in Brussels, Belgium. It will be my first FOSDEM and I?m really looking forward to it. Lots of my fellow Red Hat, JBoss, and Fedora colleagues will be there, too (list of talks by Red Hatters as a PDF and as HTML). Eclipse content this year includes:

    ?FOSDEM is the biggest free and non-commercial event organized by and for the community.? There?s no registration required, so if you?re in the area, swing by! There are a lot of people that I?m looking forward to seeing and having a beer with this weekend but I?m especially looking forward to seeing the ever-awesome Alex Kurtakov again and to meeting my new teammate Krzysztof Daniel in person for the first time.

    Safe travels and see you in Brussels!

    I'm going to FOSDEM, the Free and Open Source Software Developers' European Meeting

    Update: Gregoire de Hemptinne pointed out his talk on an EMF-based declaritive UI system, Wazaabi.

    schwuk : Save Ferris!

    Tuesday 31 January 2012 17:00 MST



    Save Ferris!

    Planet Classpath : Andrew Hughes: IcedTea6 1.11 Released!

    Tuesday 31 January 2012 13:00 MST

    We are pleased to announce a new major release of IcedTea6, 1.11!

    The IcedTea project provides a harness to build the source code from OpenJDK6 using Free Software build tools. It includes an ARM assembly port as well as support for alternate virtual machines such as CACAO and JamVM.

    What?s New

    New in release 1.11 (2012-01-31):

    The tarball can be downloaded from:

    The following people helped with this release:

    A huge thanks to everyone who helped us test and reported bugs! And a special thanks to Omair for acting as release manager for this release!

    To get started:

    $ tar xf icedtea6-1.11.tar.gz
    $ cd icedtea6-1.11
    $ ./configure
    $ make
    

    Full build requirements and instructions are available in the INSTALL file.

    Planet Classpath : Dalibor Topic: Movies: We Need to Talk About Kevin

    Tuesday 31 January 2012 04:13 MST

    A highly enjoyable drama that feels like a prequel to Haneke's "Funny Games". In other words, as much as "La Pianiste" is a movie about love, so is "We Need to Talk About Kevin" a movie about parenthood - gone really, really bad. The script slices the story into many tiny fragments that quickly begin to make sense, and as minutes flow by and increasingly disturbing things start to happen, a lot is left to the imagination to fill in the gaps, and then dread the inevitable. You'll never see lychees again in the same way, thanks to the excellent acting from all leading characters.

    Git Blame : The Vertical Farm: Feeding the World in the 21st Century, by Dickson Despommier

    Tuesday 31 January 2012 00:31 MST

    This book was given to me by a happy Git user (Thanks, Michael!) as a gift, picked from my wish list at Amazon.


    The book was fascinating and somewhat disappointing at the same time. Perhaps disappointing is not a good word, and I should say somewhat frustrating.

    I found that the first half of the main argument of the book very convincing: conventional soil-based agriculture that relies heavily on agro-chemicals (herbicide, insecticide and fertilizer) and causes terrible damage to the environment due to run-off water, is not simply sustainable. The other half of the premise, however, looked rather sketchy, day-dreaming and hand-wavey: multi-story high-tech greenhouses can be built inside city boundaries, and using the state of the art scientific method (e.g. supplying the plants with purified water spiked with necessary nutrients and growing them aeroponically; lighting with OLED that emits only the wavelengths absorbed by chlorophyll; burning plant waste with plasma-arc gassification) sufficient amount of high-quality food can be produced, freeing vast farmland that we have been wasting back to the nature, while reclaiming as much water and energy as possible.


    I am reasonably sure that the author has some solid numbers to convince policy people about the benefit and feasibility of his dream, but I found them solely lacking in the book. Here is only one passage with some numbers I remember:
    One strawberry farmer who wishes to remain anonymous decided to replace his now destroyed 30 acre farm by constructing a high-tech greenhouse with a 1 acre footprint. Using hydrostackers, he was able to produce the equivalent of 29 acres? worth of fruit, with year-round production. He elected to return the rest of his farm to its natural setting by simply leaving it alone. Within two years, the understory had returned and the biodiversity of the land improved dramatically.
    That is a nice story, but isn't strawberry rather special? It is sufficiently high-value kind of produce that would pay for a farmer to invest in high-tech. If the book had some back-of-the-envelope attempt at some math, like, "To supply a small city of 20,000 people, we would need X tons of grains, Y tons of cabbage, Z tons of ..., and it would need to treat W gallons of black water a year. A vertical farm consisting of N buildings (M stories high) of L sqft footprint would be sufficient for all of the above. The net intake of water and energy, offsetting with the water and energy reclaimed, would be such and such", even if the numbers were qualified with "this is just a back-of-the envelope with my own optimistic assumption that in 5 years technology will sufficiently advance to solve this and that problems", it would have been able to convert me, a mere interested reader, into a believer, somebody who shares the dream.

    In the chapter on funding, after discussing that not everything is money and governments will be the likely sources of sponsorship, Dickson alludes to commercial sponsorship possibilities, and there I found this passage:
    Google would be my first choice. This giant has an altruistic streak a mile wide. Google could afford to promote the concept with significant financial aid.
    This is what made me the most frustrated about the book, because that was exactly what I was feeling while reading earlier parts of the book. Google is a green company; it for example uses many solar photo-voltaic panels (1.6MW), supplying about 30% peak electricity in the four main buildings. Significant number of employees take company shuttles, instead of driving their own cars to work.


    If I were to bump into Larry or Sergey at the campus tomorrow and have a chance to chat with them (not likely to happen, as my workplace is on the other side of the campus that is a mile wide), I would love to suggest them that we build an experimental vertical farm near the Mountain View campus, supplying all 20+ cafes and micro-kitchens. Even though the book managed to convert me enough to be very much attracted to the idea, it didn't give me enough to come up with an intelligently-sounding answer to a very basic question, such as "OK, we will go ahead with Dickson's idea?how much space and how much workers do you want?"


    Nevertheless, the author's enthusiasm jumps at you from every page, while deep knowledge and experience in his professional area (the author is a microbiologist, ecologist and Professor of Public Health in Environmental Health Sciences at Columbia University) showing through between lines. It was a very pleasant read, and I would highly recommend it to anybody.


    Lanedo : Aleksander Morgado: FOSDEM 2012

    Monday 30 January 2012 21:07 MST

    Only some days left for FOSDEM 2012; which this [1] year is organized in Brussels (Belgium).

    For anyone interested, I?ll be giving a talk about LTE and ModemManager in the Telephony devroom (room H.2213), in the best time slot possible: Sunday 5th at 09:00 am. If you wake up that early just to attend the talk, you?ll get cookies for free!! [2].

    Some GNU hackers will also attend the conference, but this year there won?t be a GNU devroom. If you want to suggest a place for dinner on Friday or Saturday, please do so in the ghm-discuss mailing list.

    Cheers and see you there!

    I'm going to FOSDEM, the Free and Open Source Software Developers' European Meeting

    [1] (and every)
    [2] no, this is not true


    Filed under: GNU Planet, Lanedo Planet, Meetings, Planets Tagged: FOSDEM, LTE, ModemManager, NetworkManager

    Allan Kelly : Now out: Business Patterns

    Monday 30 January 2012 17:56 MST

    Business Patterns for Software Developers is now out!
    Early too!

    See for yourself:


    Some frequently asked questions:
    Q: How long did it take to write?
    A: Eight years end to end, although the first patterns aren?t in the book, in fact I didn?t realise I was writing a book until about 2008. Years 6 and 8 were the busy ones.

    Q: What is a business patterns?
    A: Its like a software pattern, or an architecture pattern, but concerns itself with business and business strategy.

    Q: Is it available on Kindle?
    A: Not immediately but it will be in a few weeks

    Q: Where can I read more about the book?
    A: Early versions of most of the pattern are available for free on my website - follow links for business strategy design patterns

    Q: What are the buildings on the cover?
    A: The Three Graces on Liverpool pier head, a UNESCO World Heritage site. I prefer the daylight pictures but the evening picture on the cover works well in the design.

    XKCD : Etymology-Man

    Monday 30 January 2012 05:00 MST

    'I can't believe I'm saying this, but I wish Aquaman were here instead--HE'D be able to help.'

    Charlie Brooker : I'm all for sharing, but why the online obsession with revealing every detail of your life? | Charlie Brooker

    Sunday 29 January 2012 20:00 MST

    Facebook and Spotify automatically want to share my every waking action, so that I'm like a character in The Sims. Hover the cursor over my head and watch that stat feed scroll

    Sharing. Now there's a basic social concept that has somehow got all out of whack. The idea behind sharing is simple. Let's say I'm a caveman. I hunt and slaughter a bison, but I can't eat it all myself, so I share the carcass with others, many of whom really appreciate it, such as my infirm 86-year-old neighbour who hasn't had a proper meal in weeks because he is incapable of killing anything larger than a woodlouse. Have you tried grilling a woodlouse? It's scarcely worth the effort.

    But it's not all bison meat. Let's say I am still a caveman. The other thing I share is information: the thoughts inside my head or stirring tales of the things I have done. I grunt a hilarious anecdote about the time I dropped a huge rock on a duck and an egg popped out, and mime scandalous gossip about well-known tribesmen. I'm the life and soul of the cave-party.

    All this sharing served a purpose. It kept the community fed, as well as entertained and informed. Now zip forward to the present day and, like I say, sharing has somehow got all out of whack. A small percentage of the population hoards more bison meat than it could eat in 2,000 lifetimes, awarding itself huge bison meat bonuses on top of its base-rate bison meat "salary". I say "bison meat". In case you hadn't noticed, I'm using it as a clever metaphor for money.

    The huge salaries and bonuses, we are told, are essential if we are to prevent this tiny percentage of selfish, hoarding arseholes from moving overseas. Imagine if they flew to Singapore and started selfishly hoarding things over there instead. Drained of their expertise and reassuring presence, how would Britain cope? Within days we'd be walking on all fours and devouring our offspring for food.

    I don't want to panic you, but that's the reality. Never mind weeping over the size of their bonuses: we should be dropping to our knees and giving them blowjobs, tearfully imploring them to remain seated each time we come up for air. Treble their wages. Form a human ring around Britain's airports to prevent them from leaving. And for God's sake don't ask them to share anything. That kind of talk merely angers them.

    Sharing is for the rest of us. Not sharing money or bison meat, but personal information. Where we are. What we're doing. Share it! Make it public! Go on! It's fun!

    Increasingly, I stumble across apps and services that expect me to automatically share my every waking action on Facebook and Twitter. The key word here is "automatically". Take Spotify, the streaming music service. I have written before about my admiration for Spotify, about what a technical marvel it is. A world of music at your fingertips! Incredible!

    The love affair was doomed. Spotify recently reinvented itself as a kind of adjunct to Facebook and has subsequently adopted some truly hideous "social features". For instance: it will tell other people what you're listening to, live. Yes, you can switch this feature off. That's not the point. The point is that it does it by default. By default. IT DOES IT BY DEFAULT.

    When Sony launched the Walkman back in the late 70s, its main appeal was that for the first time in history you could stroll down the high street listening to Neil Diamond belting out Sweet Caroline and no one could judge you for it. It made you the master of a private world of music. If the Walkman had, by default, silently contacted your friends and told them what you were listening to, not only would no one have bought a Walkman in the first place, its designers would have been viewed with the utmost suspicion.

    Don't get me wrong. I'm all for sharing thoughts, no matter how banal (as every column I have ever written rather sadly proves). Humans will always babble. If someone wants to tweet that they can't decide whether to wear blue socks or brown socks, then fair enough. But when sharing becomes automated, I get the heebie-jeebies. People already create exaggerated versions of themselves for online consumption: snarkier tweets, more outraged reactions. Online, you play at being yourself. Apply that pressure of public performance to private, inconsequential actions ? such as listening to songs in the comfort of your own room ? and what happens, exactly?

    It'll only get worse. Here's what I am listening to on Spotify. This is the page of the book I am reading. I am currently watching the 43rd minute of a Will Ferrell movie. And I'm not telling you this stuff. The software is. I am a character in The Sims. Hover the cursor over my head and watch that stat feed scroll.

    You know how annoying it is when you're sitting on the train with a magazine and the person sitting beside you starts reading over your shoulder? Welcome to every single moment of your future. Might as well get used to it. It's an experience we'll all be sharing.

    Yes, sharing. A basic social concept that's somehow got all out of whack.

    Charlie Brooker

    guardian.co.uk © 2012 Guardian News and Media Limited or its affiliated companies. All rights reserved. | Use of this content is subject to our Terms & Conditions | More Feeds


    Charlie Brooker : Charlie Brooker swims with the fishes in Australia

    Friday 27 January 2012 23:01 MST

    'When you tell people you're going swimming with tuna, they laugh in your face'

    Swimming with dolphins. Everyone yaps on about wanting to do that before they die. But swimming with tuna? For some reason, when you tell people you're going swimming with tuna, they laugh in your face. It sounds inherently absurd, and I'm not entirely sure why. I think it's because we often encounter tuna in tins. Also ? and I know this is a stupid thing to think, but it's hard not to think it ? there's that smell. You expect tuna to smell like, well, to smell like tuna, even though they're still alive, still in one piece and, most importantly, they're underwater where you can't smell anything.

    My lack of knowledge was, in retrospect, stunning. I figured the tuna was a fairly docile fish, probably about the size of a shoe. I was to be disabused of this and several other notions during my visit to Australia. But it wasn't "regular" Australia I was heading for. Most overseas tourists visit Sydney or the Gold Coast. I was bound for South Australia, an area that's often overlooked. Would this be the equivalent of visiting Britain and staying only in Croydon?

    Adelaide quickly struck me as a superb place to live. It's clean, it's pretty and despite being the largest city in South Australia, it's easy to walk around. We stayed in a variety of eccentric and inviting heritage homes run by the equally eccentric and inviting Rodney and Regina Twiss. Staying in a house in a residential area would be frustrating in many cities; given the compact nature of the city, it's a great idea in Adelaide. After 24 hours, you feel like a local, even though you absolutely aren't.

    Adelaide makes an ideal base for touring the region. For sun worshippers, there are beaches a short tram ride away; for alcoholics, the Barossa Valley lies just to the north-east; and for people who want to swim with tuna ? or sharks ? a short plane journey will take you to Port Lincoln. Australians seem to catch small planes like we catch buses. It takes less time to fly from Adelaide to Port Lincoln than to take the 159 bus from Streatham Hill to Oxford Circus. Unlike the 159, they serve snacks on the plane and nobody tries to stab you.

    There's not much to see in Port Lincoln itself: its appeal lies in the water, in the scenery of Boston Bay and the fishing and diving opportunities there. Our tuna-swimming expedition was going to be part of a two-day "ocean safari" with Adventure Bay Charters, run by the affable Matt Waller. Once on board, we sailed to Matt's tuna farm (he's a fisherman, see) which essentially consists of a huge floating bowl made of netting ? picture a giant sieve wafting in the ocean and you're not far off. At this point we had to don wetsuits. There may be photographs of me in a wetsuit accompanying this article. I urge you not to look at them. They will be images of overpowering sexuality.

    Anyway, fact file: contrary to earlier statements, a tuna is not about the size of a shoe. It's massive. Bloody massive. It has cold, unknowable eyes and is covered in sharp scales. And it swims very quickly indeed, especially when you hold out a smaller, dead fish for it to eat. It leaps and snatches the damned thing out of your hand so fast, you can't even see it: it's like being mugged. Mugged by a fish. And the giant underwater tuna bowl teems with them. In summary: although "swimming with tuna" sounds inherently comic in theory, in practice it's bizarre, exhilarating and faintly scary.

    From the tuna farm, we made our way to a nearby island, where we jumped off the boat to swim with sea lions. Sea lions are so outrageously cute, even I had to concede they were charming, and I usually vomit at the sight of rainbows. They were friendly, too, and swam alongside us, diving, rolling and generally behaving like something from a Disney film: almost like Care Bears of the sea, except, unlike Care Bears, you don't want to kill them with hammers.

    Then it was on to a prime spot for great white sharks. The viewing cage went in the water, and I went in after it. I'll admit to being nervous at this point: having been shocked by the size of tuna, I was trying mentally to prepare myself for a moment of life-altering terror. Most tours toss buckets of bait into the water, whereas Matt has a more eco-friendly method of attracting sharks. He lowers speakers into the water and pumps out rock music. He claims great whites are particularly attracted to AC/DC.

    Floating in a cage underwater, keeping watch for sharks like Richard Dreyfuss in Jaws, while simultaneously listening to loud, driving rock, is a uniquely surreal experience. It could have been bettered only by the appearance of an actual shark. Sadly, on the day, none was forthcoming. This didn't seem to be down to the music, incidentally: neighbouring boats, hurling berley into the water by the bucketload, were having no luck either. Sharks aren't predictable. If they were, no one would ever get eaten by them.

    It's a measure of how much fun the rest of the ocean safari was that the nonappearance of the most fearsome creature on the planet wasn't much of a downer. The following day we visited another island to peer at a larger sea lion colony, caught fish, stuffed our faces and ate fresh oysters (once I managed to overcome my inherent fear of eating anything with a 1% chance of making me puke). Then it was back to Port Lincoln, the airport and Adelaide.

    The next day, we caught another shuttle flight, this time to Kangaroo Island. Kangaroo Island sounds like a sarcastic nickname for Australia itself: fitting, in a sense, because it's almost like a compressed version of how Australia looks in your head as a child. It's known as Australia's Galapagos because of its abundance of wildlife. There are creatures everywhere. Kangaroos hop along the roadside, koalas laze in trees, echidnas shuffle through the undergrowth: it's like a huge safari park with no fencing.

    We stayed at the Southern Ocean Lodge, a place so confidently swish and friendly, I instantly felt like a burglar. It's easily the most upmarket place I've ever stayed: I was almost ashamed to go to the toilet. The architecture is straight out of Grand Designs: all floor-to-ceiling windows and understated modernity, not to mention stunning views across the ocean ? the lodge is perched atop a cliff, overlooking a beach, situated in between two national parks. If it housed a death ray (which I'm fairly sure it doesn't), this would be precisely the sort of place a taste-conscious Bond villain might construct.

    Not that you're there to laze around indoors. A tour of Kangaroo Island is essential, particularly if your time is tight, as ours was. We were shown round the island by Rob Ellson, a former local newspaper editor turned tour guide. The nature here truly is bizarre and fascinating: not only the kangaroos, which, if you're quiet, you can sneak hilariously close to, but the plant life, and I say that as someone who yawns himself half to death at the mere mention of a stamen. Kangaroo Island has a species of tree that thrives following a fire: the Xanthorrhoea (or "Grass Tree", for those who prefer words you can actually pronounce) flowers and sheds seeds when burnt. It even flowers when exposed to smoke. Just as well: in 2007, a series of bushfires destroyed 95,000 hectares of woodland. Today, the casual visitor would be hard-pressed to tell where the flames had been.

    It's hard to describe how relaxing a place Kangaroo Island is. There are so few people, so few cables and billboards and cars and buildings and things, that your mind soon starts to stretch out and lie down. It was almost like being deprogrammed. Accommodation isn't cheap, and it's easy to see why. Leaving the place was a wrench, like knowing you have to get out of bed on a cold morning and turning back beneath the duvet in a bid to get a few more moments of comfort.

    Having never visited the other bits of Australia, I had nothing to directly compare South Australia with, but if the rest of the country gets any better than this, it's quite frankly taking the piss as a nation.

    ? Black Tomato can arrange an exclusive 12-night, three-centre trip to South Australia, taking in Port Lincoln, Kangaroo Island and Adelaide, from £4,199pp (based on two sharing). For more information on South Australia, go to southaustralia.com. For more information on Adventure Bay Charters, go to adventurebaycharters.com.au. For more information on Southern Ocean Lodge, go to southernoceanlodge.com.au. For more information on the North Adelaide Heritage Group, go to adelaideheritage.com.

    ? WIN: Surfing lessons in France. For full details of the holiday on offer, plus how to enter the competition and full terms and conditions, go to weekend travel competition

    Charlie Brooker

    guardian.co.uk © 2012 Guardian News and Media Limited or its affiliated companies. All rights reserved. | Use of this content is subject to our Terms & Conditions | More Feeds


    Aquarion : More Portal

    Friday 27 January 2012 21:36 MST

    So, if the problem with the original Portal was that there wasn’t enough of it, the solution is probably Rexaura, a new mod for Portal 1 (Which it requires). It’s a new set of test chambers in the original universe, based around extended mechanics for energy balls, including one-shot redirects, balls that explode if you stop holding the button and energy gate switches they have to pass though.

    Rexaura does a very good job of introducing you to its new concepts, all of which seem logically thought through (Caveat: I’ve not played though the entire set yet) and while the writing falls short of the original, it’s better than most games. If there’s a complaint, it’s that it tends slightly further towards the timing-based shoot-portals-quickly mechanics that Valve themselves steered away from for the sequel, but it’s still an entertaining series of new and original Portal levels, and well worth the nothing you’re paying for it.

    (Please leave comments on the original article rather than any syndications thereof) 0c89b0a701d3cda4ecf6e3837c2783c2)

    Lanedo : Lionel Dricot: FlattrStat, a small statistic tool for Flattr

    Friday 27 January 2012 16:09 MST

    I'm a big fan of Flattr. But I find it hard to have some statistics about your things that have been flattered.

    On my Flattr account, I receive flatts for both my blog and for Getting Things GNOME!. But I want to keep a clear separation. There are multiple persons now involved in GTG and they deserve part of the money (we will use that to buy beers at FOSDEM).

    Also, on my own blog, I was interested to know which posts where the more successful, speaking of revenue. I knew that, so far, this post had the most clicks but I had no idea which one received the most money (for the curious, it is that one).

    In order to do that, I quickly wrote FlattrStat, a python script. You need to download all the csv files from flatr, put them in a folder then run the script with "python flattrstat.py".

    output of flattrstat

    It will outputs the total clicks and revenues for each domain separately and, for each domain, sort all your things from the most successful to the least one.

    Ideally, it should download the CSV files automatically and have a nice GUI but I don't really need that. It was for my own needs but I realize that it might be useful to someone else. So, feel free to use it or to contribute, it is under the WTFPL license.

    FlattrStat on GitHub


    Flattr our API Documentation

    Don Marti : SCALE Poker Quiz

    Friday 27 January 2012 15:31 MST

    SCALE this year had a quiz game for attendees, and here are my notes on how to play and some things we could do better next time. Lori Barfield, who was in charge of SCALE Game Night, brought it all together on a very tight schedule.

    The object of the game for the players is to put together the best possible 5-card poker hand. Each card has an answer printed on it, and in order for that card to count as part of the player's hand, the player has to find the matching question. Card photo at Lisa's iXsystems marketing blog.

    All of the questions are about information revealed at booths, talks, and other show events. It's important to get questions that are hard to look up online. The object of the game for the organizers is to get attendees to talk with each other, because they pretty much have to trade cards and information to win.

    We gave out seven cards per player.

    With a little more time we'll be able to make the game easier to run at the show. Things to improve next time:

    Some people thought the questions were too hard, but groups of attendees working together were able to figure everything out.

    Git Blame : Git 1.7.9

    Friday 27 January 2012 14:00 MST

    The latest feature release Git 1.7.9 is now available at the usual places.

    The release tarballs are found at:

        http://code.google.com/p/git-core/downloads/list

    Also the following public repositories all have a copy of the v1.7.9 tag and the master branch that the tag points at:

      url = git://repo.or.cz/alt-git.git
      url = https://code.google.com/p/git-core/
      url = git://git.sourceforge.jp/gitroot/git-core/git.git
      url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
      url = https://github.com/gitster/git


    As already reported in various places (including lwn.net and Linus Torvalds), the most notable feature in this release is unarguably the improved support for the pull-request based workflow, in which participants can exchange their histories more securely, even over a potentially untrustable hosting service. This is truly an end-to-end support, starting from the inception of a topic branch with its own description, use of the branch description and the message in a signed tag in a pull-request message, use of the message in a signed tag in the resulting merge commit and verification of the signature when reviewing the resulting history (see this for a tutorial).

    There also are many other updates that hopefully make working with Git a more delightful experience. Highlights are:
     Have fun.


    XKCD : Sigh

    Friday 27 January 2012 05:00 MST

    If you're annoying enough, you can get them to respond with an involuntary second sigh and get a rhythm going.

    Aquarion : Something Positive About Facebook

    Thursday 26 January 2012 23:34 MST

    I’ve not had a great day.

    I’ve got a rotten cold that’s filled my brain with cotton wool, my computer rejected a software update hard enough to require a system restore (Advice: Avoid Catalyst 12.1), I had to throw out dinner when it became obvious the chicken was out of date (which was after I’d spent the time making it), and I’m generally feeling like the universe was waiting for today in order to subdue any optimism I have.

    But over the course of the day, starting yesterday afternoon as my Australian friends started the day, I’ve had a steady stream of trills from my phone as people from every part of my life and lives have wished me happy birthday, from family to people I haven’t seen or spoken to since I walked out of the office I worked with them in, though to people from Usenet, IRC, computer games and larp systems. A stream of people who give enough of a care to write two to five words into a text box on Facebook, which is nice.

    (Please leave comments on the original article rather than any syndications thereof) 0c89b0a701d3cda4ecf6e3837c2783c2)

    schwuk : Nice UI in Realmac Software?s forthcoming Clear app.

    Thursday 26 January 2012 20:00 MST



    Nice UI in Realmac Software?s forthcoming Clear app.

    Martin Fowler : Rebecca and I will be Keynoting at QCon London

    Thursday 26 January 2012 15:24 MST

    QCon invited Rebecca and I to do a keynote at QCon London (March 7). Over the last year or so we’ve been seeing more and more of a change in how organizations think about data, so that seems a natural choice to talk about. Our clients are seeing larger volumes of data, that they need to analyze more quickly and more cleverly. We’re seeing different technologies for data storage that have loosened the vice-like grip of relational databases. And we find our profession needs to start thinking about what our responsibilities are in managing all of this information.

    Martin Fowler : Rebecca and I talk about DSLs on Software Engineering Radio

    Thursday 26 January 2012 14:36 MST

    I’ve long been a fan of the podcast series Software Engineering Radio. The team there have built an excellent series of podcasts on various aspects of software development and I often listen to them while taking my afternoon walk. So I’m glad to get a spot on there myself. In this episode I’m on the program with Rebecca Parsons, my colleague and co-author of my DSL book to talk about DSLs. We talk about what DSLs are, the differences between internal and external DSLs, and when you should (and shouldn’t use DSLs). The episode is hosted by Markus Völter, who, of course, is a considerable expert on DSLs too - so it’s really a three way conversation on the topic.

    Aquarion : 31

    Thursday 26 January 2012 11:33 MST

    > Sleep

    You sleep. Time passes. Thorin sits and sings about gold.

    You have levelled up! You are now level 31. You have one ability point to spend on a feat of your choice.

    > Select ‘Gainful Employment’

    Processing….

    (Please leave comments on the original article rather than any syndications thereof) 0c89b0a701d3cda4ecf6e3837c2783c2)

    Michele Simionato : The wonders of cooperative inheritance, or using super in Python 3

    This essay is intended for Python programmers wanting to understand the concept of cooperative inheritance and the usage of super. It does not require any previous reading. The target is Python 3.0, since it has a nicer syntax for super, even if most of what I say here can be backported down to Python 2.2.

    Michele Simionato : EuroPython 2010

    The EuroPython conference will be held in Birmingham UK, 19th to 22nd July 2010.

    Michele Simionato : plac, the easiest command line arguments parser in the Python world

    Announcing the first public release of plac, a declarative command line arguments parser designed for simplicity and concision.

    Michele Simionato : Threads, processes and concurrency in Python: some thoughts

    Removing the hype around the multicore (non) revolution and some (hopefully) sensible comment about threads ad other forms of concurrency.

    Michele Simionato : What's new in plac 0.7

    plac is much more than a command-line arguments parser. You can use it to implement interactive interpreters (both on a local machine on a remote server) as well as batch interpreters. It features a doctest-like mode, the ability to launch commands in parallel, and more. And it is easy to use too!
    Make your own planet, DIYBlog style - just FTP web space needed.