[
  
    {
      "title": "nMigen – a new improved Migen developed by whitequark!",
      "excerpt": "As people may know, I’m a big supporter of the Migen and associated LiteX ecosystem. As of today if you are starting a new project today, I would instead recommend...",
      "content": "As people may know, I’m a big supporter of the Migen and associated LiteX ecosystem. As of today if you are starting a new project today, I would instead recommend that you chose to use nMigen instead.\n\nnMigen, A refreshed Python toolbox for building complex digital hardware is a project that whitequark has been working on for the last couple of years and I’m really liking the new improve syntax and the fact that it interfaces directly to Yosys.\n\nThere seems a lot of interesting things happening in the nMigen ecosystem;\n\n  Lambda Concept has built an 32-bit RISC-V soft processor called Minerva. The CPU core currently implements the RISC-V RV32IM instruction set, is pipelined on 6 stages and largely inspired by the LatticeMico32 processor.\n  Robert Baruch has a multipart series where he uses nMigen — a Python toolbox — to recreate a 6800 CPU like the one used in many vintage video games and pinball machines.\n  Kate Temkin is also working on creating a new USB 2.0 protocol stack in nMigen for the LUNA: a USB multitool (&amp; nMigen library). I believe that she is also hoping to work on a USB 3.0 stack using the ECP5 high speed transceivers by rewriting the Daisho core and the work that Enjoy Digital did to make a transceivers adapter.\n\n",
      "url": "/archives/hardware/2186-nmigen-new-improved-by-whitequark",
      "date": "2020-05-02T10:12:03+10:00",
      "categories": ["hardware","python"]
    },
  
    {
      "title": "Using “IdentitiesOnly” without key files",
      "excerpt": "If you want to restrict the keys that ssh tries when connecting to a server, you need to use the IdentityFile and IdentitiesOnly configuration options in your ssh_config. However, a...",
      "content": "If you want to restrict the keys that ssh tries when connecting to a server, you need to use the IdentityFile and IdentitiesOnly configuration options in your ssh_config.\n\nHowever, a couple of the keys I have are auto generated, with the key being loaded directly into ssh-agent and never written to a file on disk. For hopefully obvious reasons, you can’t dump a private key back out of the agent, but it turns out that IdentityFile only needs the public key which you can get.\n\nI ended up using the following script to dump the public keys to files;\n\n\n  # Dump the public keys\nfor KEY in $(ssh-add -l | sed -e's/[^ ]\\+ [^ ]\\+ \\([^ ]\\+\\) .*/\\1/'); do\n  if echo $KEY | grep -q '^/'; then\n    continue\n  fi\n  export KEY_FILE=\"$HOME/.ssh/agent.$(echo $KEY | sed -e's/[^A-Za-z0-9]/_/g').pub\"\n  echo \"Saving $KEY into $KEY_FILE\"\n  ssh-add -L | grep $KEY &gt; $KEY_FILE\ndone\n  \n\n\nThen I added the following to the ssh_config\n\n\n  \n    IdentitiesOnly true\n  IdentityFile ~/.ssh/agent.keyname.pub\n\n\n\nWhen running with “ssh -vv” I see the following in the output;\n\n\n  \n  debug2: set_newkeys: mode 1\ndebug1: SSH2_MSG_NEWKEYS sent\ndebug1: expecting SSH2_MSG_NEWKEYS\ndebug2: set_newkeys: mode 0\ndebug1: SSH2_MSG_NEWKEYS received\ndebug1: SSH2_MSG_SERVICE_REQUEST sent\ndebug2: service_accept: ssh-userauth\ndebug1: SSH2_MSG_SERVICE_ACCEPT received\ndebug2: key: /home/tansell/.ssh/agent.keyb.pub (0x2257da0), explicit\ndebug1: Authentications that can continue: publickey,password\ndebug1: Next authentication method: publickey\ndebug1: Offering ECDSA public key: //home/tansell/.ssh/agent.keyb.pub\ndebug2: we sent a publickey packet, wait for reply\n\n\n",
      "url": "/archives/useful-bits/2172-using-identitiesonly-without-key-files",
      "date": "2016-05-03T12:26:52+10:00",
      "categories": ["useful-bits"]
    },
  
    {
      "title": "TimVideos.us and Google Summer of Code 2016!",
      "excerpt": "This is a cross post from the HDMI2USB website. TimVideos.us and Google Summer of Code 2016! The TimVideos.us project is happy to announce that it has been selected to participate...",
      "content": "This is a cross post from the HDMI2USB website.\n\n\n  TimVideos.us and Google Summer of Code 2016!\n  The TimVideos.us project is happy to announce that it has been selected to participate in the Google Summer of Code for 2016 (GSoC). GSoC is a program where students are paid to contribute to selected open source projects over the northern hemisphere summer, flip bits not burgers!\n\n  The application period is now open and students have until 25 March 19:00 UTC to apply to work with the TimVideos.us project. The list of proposal ideas includes contributing to the HDMI2USB and things related to the Numato Opsis.\n\n  \n\n  Due to the focus on hardware, we are very interested in students who are interested in things like VHDL/Verilog and other HDLs, embedded C programming and operating systems and electronic circuit/PCB design. Some possible ideas include;\n\n  \n    Working on USB 3.0 support for ultra high speed video capture.\n    Porting a real operating system such as Linux or RTEMS to our SoC to allow easier development of new features.\n    Making use of the Ethernet interface for connecting multiple devices together and alternative capture interfaces.\n    Creating new expansion board and supporting the professional SDI standard.\n    and many, many more.\n  \n\n  If you are interested in applying, your first point of call should be our Google Summer of Code page. Even if you can’t apply to GSoC, you can also help us by forwarding this message to anyone you might think who is interested!\n\n  \n\n",
      "url": "/archives/summer-of-code/2169-timvideos-us-and-google-summer-of-code-2016",
      "date": "2016-03-15T17:32:13+10:00",
      "categories": ["summer-of-code","hardware","timvideos-us","hdmi2usb"]
    },
  
    {
      "title": "TimVideos.us 2016 New Year’s Resolutions",
      "excerpt": "This is a cross post from the HDMI2USB website about my plans for 2016 and the TimVideos project. Last year was an exciting time for my personal projects! TimVideos.us 2016...",
      "content": "This is a cross post from the HDMI2USB website about my plans for 2016 and the TimVideos project. Last year was an exciting time for my personal projects!\n\n\n  TimVideos.us 2016 New Year’s Resolutions\n  \n\n  Hello everyone,\n\n  Hope everyone has had an awesome start to 2016 so far. As is tradition in many western countries, I thought I would put together some New Year’s Resolutions and reflect on our progress in 2015. I guess more business minded people might call it a “project roadmap” 🙂\n\n  TimVideos Project\n\n  In 2015, I decided to focus the TimVideos project on the HDMI2USB project. The three key results of this focus were;\n\n  \n    Starting and completing a rewrite of the HDMI2USB firmware based on the Migen and MiSoC system developed by M-Labs.\n    Launching a successful crowdfunding campaign for Numato Opsis, our first open hardware for the HDMI2USB firmware.\n    Having the HDMI2USB firmware on Atlys boards used in production by multiple people!\n      \n        Carl Karsten from NextDayVideo in the US for both PyCon ZA and Nodevember.\n        The DebConf Video team for their MiniDebConf in November.\n        Myself for recording my own talks on the HDMI2USB project at user groups here in Sydney!\n      \n    \n  \n\n  With the success of this focus in 2015, the TimVideos project is going to continue to focus on theHDMI2USB project for 2016 (and I’ll go into more detailed goals shortly).\n\n  The TimVideos project has also been mildly successful in collaborating with other open source groups doing things related to video recording and production. In 2016, I hope we can strengthen these bonds and forge new ones. Some specific goals around this include;\n\n  \n    Getting the TimVideos project to join Software Freedom Conservancy (or similar organisation).\n    Figure out the right way to collaborate with the C3VOC team on voctomix and start adding missing features from gst-switch allowing that project to be retired.\n    Continue to work with supporting groups like NextDayVideo, the DebConf Video team and Linux Australia.\n    Support and help Mike “Hamster” Field continue to develop a fully open source DisplayPort core.\n    Collaborate with the apertus° project on high end (4k and greater!) video capture and processing.\n  \n\n  HDMI2USB Project\n\n  As we are concentrating on the HDMI2USB project, we have some specific goals around that.\n\n  HDMI2USB firmware goals;\n\n  \n    Refactor the HDMI core to allow support a wider range of interfaces, better debugging and addition of more features. A document about the refactor has been started here.\n    Add support for the high-speed GTP transceivers and Mike “Hamster” Field open source DisplayPort core.\n    Get Ethernet support working (on both the Atlys and Opsis boards). The two major Ethernet features are;\n      \n        Ethernet supports identical capture and control feature set to the USB port.\n        Allowing HDMI2USB boards to act has “HDMI over Ethernet extenders”.\n      \n    \n    Support for more hardware;\n      \n        miniSpartan6+\n        Digilent Nexys Video\n        New HDMI2USB designed hardware!\n      \n    \n    Stretch Goals (1)\n      \n        Add support for hardware based mixing.\n        Have either a RTOS or Linux running on the FPGA softcore.\n      \n    \n  \n\n  HDMI2USB hardware goals;\n\n  \n    (By end of year) Development of a low cost PCI-Express capture card.\n    (By middle 2017) Development of an Opsis V2 based around either an high end Artix-7 or a low end Kintex-7 FPGA.\n  \n\n  (1): Stretch goals are things we plan to try and achieve if things go well.\n\n  Hope this update give you an idea of what we have planned for 2016! We would love your help making it all possible.\n\n  Tim ‘mithro’ Ansell\n\n",
      "url": "/archives/lca/2167-timvideos-us-2016-new-years-resolutions",
      "date": "2016-01-15T01:00:58+10:00",
      "categories": ["lca","pcb","timvideos-us","hdmi2usb"]
    },
  
    {
      "title": "First V2 “HDMI2USB Production Board” constructed!",
      "excerpt": "For the last year and a half, I have been working with Numato Labs to create a “HDMI2USB Production Board” for our HDMI2USB firmware that was originally developed on the...",
      "content": "For the last year and a half, I have been working with Numato Labs to create a “HDMI2USB Production Board” for our HDMI2USB firmware that was originally developed on the Digilent Atlys board. On Friday, they sent me a picture of the first constructed board!\n\nHDMI2USB “Production Board” Version 2\n\nAt the end of last year, we decided to abandon our first attempt and start again from scratch, this picture is the result of that work. Some of the reasons we decided to start from scratch was;\n\n\n  A “de facto standard” for locking HDMI ports was established and low cost connectors became available. This meant we no longer needed to support both DVI and HDMI connectors, reducing the complexity significantly and solving some persistent issues.\n  Not only did the cost of Spartan 6 parts with high speed “GTP” transceivers drop but our understanding of how to use them increased. This would allow us to create a board which natively supports DisplayPort.\n  The idea streaming via not only USB, but also Ethernet became a stronger possibility, meaning the extra cost of adding ethernet was now worth it.\n\n\nOverall, our board has the following differences with the Atlys board;\n\n\n  Has DDR3 memory instead of DDR2, increasing the memory bandwidth.\n  Has a Spartan S6LX45T with the GTP broken out to DisplayPort headers.\n  Has a PCI-Express style expansion connector instead of the expensive VHDCI connector, allow much cheaper expansion boards.\n  Has all the extra pins on the FX2, increasing the potential USB interface options.\n  Has control over all the HDMI functionality, including hot plug and CEC functionality.\n  Removes parts we don’t need such as the audio, buttons, switches and LEDs.\n  Mounts in any ITX style computer case.\n  Adds UTMI USB (as well as the Cypress FX2)\n  Adds MicroSD connector.\n\n",
      "url": "/archives/timvideos-us/2045-first-v2-hdmi2usb-production-board-constructed",
      "date": "2015-07-05T14:47:57+10:00",
      "categories": ["timvideos-us","hdmi2usb","hardware"]
    },
  
    {
      "title": "HDMI2USB – Production Board Bring Up – Day 8 (28th July 2014)",
      "excerpt": "Updated the HDMI2USB variant spreadsheet with new Numato board pin out. Successfully generated a HDMI2USB firmware for Numato board with new pin information. That fixes the constraint issue! Successfully generated...",
      "content": "\n  Updated the HDMI2USB variant spreadsheet with new Numato board pin out.\n  Successfully generated a HDMI2USB firmware for Numato board with new pin information. That fixes the constraint issue!\n  Successfully generated a HDMI2USB firmware for Numato board with second receive port (RX2) disabled!\n    \n      Was able to view the HDMI2USB test image output on TX2!\n      Was able to capture the HDMI2USB test image via mplayer!\n      Was unable to detect a screen on RX1.\n    \n  \n  Created a “flash.sh” script to use libFPGALink to flash the FPGA and then load the Cypress firmware.\n  Wrote a Python script to interrogate the CDC serial port for status of the firmware.\n\n",
      "url": "/archives/timvideos-us/2009-hdmi2usb-production-board-bring-up-day-8-28th-july-2014",
      "date": "2014-07-29T00:13:02+10:00",
      "categories": ["timvideos-us","hdmi2usb"]
    },
  
    {
      "title": "HDMI2USB – Production Board Bring Up – Day 5, 6 and 7 (25th, 26th and 27th July 2014)",
      "excerpt": "25th July 2014 Setup xob‘s hacked up colormake in our build system. Nice colorized output now! Fought more with ERROR:Place - Constraint Resolved NO placeable site for hdmiMatri_Comp/dvi_rx1/ioclk_buf issue Watched...",
      "content": "25th July 2014\n\n\n  \n    Setup xob‘s hacked up colormake in our build system. Nice colorized output now!\n  \n  Fought more with\n    ERROR:Place - Constraint Resolved NO placeable site for hdmiMatri_Comp/dvi_rx1/ioclk_buf issue\n  \n  Watched Paul Fenwick’s OSCon Keynote.\n\n\nStreaming System Hacking\n\n\n  Made the configuration system better and adding a lot of comments to the json file (which isn’t really valid json any more).\n  Made pycon2internal.py slightly better and able to parse PyOhio format (based on the PyCon US format).\n  Added hack to make event2internal.py to use pycon2internal.py at some periods.\n  Set up a bunch of encoders in the Oregon EC2 region.\n  Get access to www.timvideos.us again and deployed the updated website.\n\n\n \n\n26th July 2014\n\n\n  Went into the Adelaide Hackerspace and created a cable to interface the USB3300 ULPI chip to 2xPMOD headers.\n  Got streaming working for day 1 of PyOhio, it was late as we were disorganised.\n  aps-sids foolishly pointed out a bug in the title of the streaming system, so I taught him about how we actually flumotion for an event.\n\n\n \n\n 27th July 2014\n\n\n  Did a lot of spreadsheet hacking on the production board pin planning spreadsheet;\n    \n      Added half bank / BUFIO2 regions.\n      Added dedicated clock pin information.\n    \n  \n  Started work on reshuffling the pins to fix the timing issue.\n  Helped aps-sids get Flumotion working on the latest Twisted release. Turned out that someone else had already done most of the work and only a couple very small fixes where needed. aps-sids reported that he was now able to run flumotion on Ubuntu Trusty!\n\n\n \n",
      "url": "/archives/timvideos-us/2003-hdmi2usb-production-board-bring-up-day-5-6-and-7th-25th-26th-and-27th-july-2014",
      "date": "2014-07-28T23:39:31+10:00",
      "categories": ["timvideos-us","hdmi2usb"]
    },
  
    {
      "title": "HDMI2USB – Production Board Bring Up – Day 4 (24th July 2014)",
      "excerpt": "Generally slow progress today, but some success. Able to successfully load libFPGALink firmware onto Cypress chip and programmed the FPGA using it. Yay! Wrote a test firmware based on http://hamsterworks.co.nz/mediawiki/index.php/DVI-D_Serdes...",
      "content": "Generally slow progress today, but some success.\n\n  Able to successfully load libFPGALink firmware onto Cypress chip and programmed the FPGA using it. Yay!\n  Wrote a test firmware based on http://hamsterworks.co.nz/mediawiki/index.php/DVI-D_Serdes to transmit 720p output from both the TX ports.\n    \n      Images are successfully received on both devices but there is a weird artifact in the image.\n    \n  \n\n\n\n     \n\n\n\n  Rohit’s VGA expansion board was received, but yet to turn it on. Looking forward to seeing that working live!\n\n\n\n\n \n\n\n  Set up the streaming system for Carl and PyOhio\n    \n      Tried to figure out where www.timvideos.us was hosted.\n    \n  \n\n",
      "url": "/archives/timvideos-us/1995-hdmi2usb-production-board-bring-up-day-4-24th-july-2014",
      "date": "2014-07-25T12:18:12+10:00",
      "categories": ["timvideos-us","hdmi2usb"]
    },
  
    {
      "title": "HDMI2USB – Production Board Bring Up – Day 3 (23rd July 2014)",
      "excerpt": "Looked into if Travis CI has IPv6 connectivity. It appears so! Investigated git server side hooks as a method to run CI on build.timvideos.tv Travis-CI does a git push to...",
      "content": "\n  Looked into if Travis CI has IPv6 connectivity. It appears so!\n  Investigated git server side hooks as a method to run CI on build.timvideos.tv\n    \n      Travis-CI does a git push to build.timvideos.tv which does a make in the post-recieve.\n      Issues;\n        \n          For non-pull requests we could encode the private key using Travis’s encrypted environment variables.\n          What about pull requests? Mean anyone can send arbitrary code to build.timvideos.tv – Maybe use QEmu’s COW support and reboot after each build?\n        \n      \n      Looked a jig for a nice way to write the git hooks.\n        \n          Sent a pull request to fix some documentation.\n          Really designed to run as a “pre-commit” hook locally on a person’s machine rather than a server side hook. Logged an issue to discuss that.\n          Has a lot of nice plugins for Python development already.\n          Would allow us to add hdl-pretty as a commit hook.\n        \n      \n      Alternatives to jig appear to be;\n        \n          https://github.com/icefox/git-hooks – Written in bash\n          https://pypi.python.org/pypi/git-pre-commit-hook – Written in python\n        \n      \n    \n  \n  Got my “fake” Xilinx Platform Cable USB (Model DLC9G) working under Linux – Full instructions can be found at https://github.com/timvideos/HDMI2USB/wiki/Xilinx-Platform-Cable-USB-under-Linux\n    \n      The device was purchased from eBay on the 11th July, costed $37 USD with shipping and arrived at Joel’s house on Monday.\n      First issue was /opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/setup_pcusb didn’t understand I had udev and was trying to install for the ancient hotplug.\n        \n          Fixed by changing line 26 from TP_USE_UDEV=”0″ to TP_USE_UDEV=”1″\n        \n      \n      Next setup_pcusb didn’t tell udev to reload the udev rules. Had to do that with udevadm control –reload-rules\n      Next setup_pcusb didn’t ask me to install fxload, so I needed to install it with apt-get install fxload\n      Next the rules that were installed to /etc/udev/rules.d/xusbdfwu.rules were invalid; they caused the following errors in /var/log/daemon.log\n    \n  \n\n\nJul 23 16:40:29 laptop udevd[841]: unknown key 'SYSFS{idVendor}' in /etc/udev/rules.d/xusbdfwu.rules:2\nJul 23 16:40:29 laptop udevd[841]: invalid rule '/etc/udev/rules.d/xusbdfwu.rules:2'\nJul 23 16:46:11 laptop udevd[841]: unknown key 'SYSFS{idVendor}' in /etc/udev/rules.d/xusbdfwu.rules:3\nJul 23 16:46:11 laptop udevd[841]: invalid rule '/etc/udev/rules.d/xusbdfwu.rules:3'\n\n\n  This was fixed with;\n    \n      Changing SYSFS to ATTRS\n      Changing BUS to SUBSYSTEM\n      Changing $TEMPNODE to $tempnode\n    \n  \n  The little status light then turned on red! Yay!\n  Was able to do a boundary scan in iMPACT on a Zybo development board after soldering a header onto it.\n\n\n\n  Received the HDMI2USB production boards created by Numato!\n    \n      Started with bunch of stuff to do with LEDs;\n        \n          Logged issues about LEDs not been label intelligently. Such as the “power” LED being labeled “D33”.\n          Researched the DONE net again so I could understand the D2 LED (which should be named D_FPGA_NOT_CONFIGURED or DNCFG for short). Started adding the information to the JTAG/Reset documentation.\n          Figured out why D3 (connected to the Cypress INT1 pin) was only faintly lit.\n        \n      \n      Logged a bunch of issue regarding small silk screen fixes to make future boards easier to understand.\n      Logged an issue about adding some standoffs in the center of the board for mechanical stability.\n      Logged an issue about having a good GND point to connect your probe too.\n        \n          This page describes the two good ways to add a GND test point – http://www.robotroom.com/PCB-Layout-Tips.html\n        \n      \n      Starting researching the 5V rail and if we could remove it totally (thus saving a bunch of stuff). Looks like we can, but needs more investigation.\n      After replacing the JTAG cable was able to use iMPACT to boundary scan and it found Spartan 6 chip!\n    \n  \n  Discovered CEC is 3V3 signal.\n\n\nNon HDMI2USB stuff\n\n\n  Tried to figure out why my home router has decided that it wants to hand out address in the 2001:44b8:31dc:8d01::/64 rather than the 2001:44b8:31dc:8d00::/64 range it use too.\n  Found a bunch of issues with domains served of ns1.mithis.com as the secondary servers where disabled. Root cause was an old version of PowerDNS failing on TCP zone transfers causing domains to become stale and get dropped from the secondaries. Enabled email notification when secondary disables the zones.\n\n\n \n",
      "url": "/archives/timvideos-us/1993-hdmi2usb-production-board-bring-up-day-3-23rd-july-2014",
      "date": "2014-07-24T01:54:52+10:00",
      "categories": ["timvideos-us","hdmi2usb"]
    },
  
    {
      "title": "HDMI2USB – Production Board Bring Up – Day 2 (22nd July 2014)",
      "excerpt": "Non-HDMI2USB related stuff Answered a bunch of work emails. Read and answered bunch of PyCon AU related emails. Fix DLV records for a bunch of domains. Helped aps-sids with flumotion...",
      "content": "Non-HDMI2USB related stuff\n\n\n  Answered a bunch of work emails.\n  Read and answered bunch of PyCon AU related emails.\n  Fix DLV records for a bunch of domains.\n  Helped aps-sids with flumotion porting work.\n\n\nHDMI2USB related stuff\n\n\n  Worked from Joel’s house today to receive the production HDMI2USB boards, they didn’t turn up 🙁\n  Create a trusty VM on server for Joel to setup HDMI2USB CI on.\n  Investigated origin of files in HDMI2USB code. Current status seems to be;\n    \n      hdl/edid – Written by us (Jahanzeb).\n      hdl/hdmi – Mostly written by Xilinx and released in application notes. Need to figure out the exact licensing of the files (are they MIT? Only for use on Xilinx parts?) and move them to third party.\n      hdl/jpeg_encoder – OpenCores mkjpeg core. Need to move to third party.\n      hdl/usb – Written by us (Jahanzeb).\n      ipcore_dir – Cores generated by Xilinx. Need to figure out the exact licensing of the files (are they MIT? Only for use on Xilinx parts?) and move them to third party.\n      cypress – Confusing mess. We know this and plan to rewrite the firmware using only FOSS tools.\n        \n          Bunch of proprietary binary blobs.\n          Bunch of headers of unknown copyright.\n          Bunch of code written by us.\n        \n      \n    \n  \n  Logged a lot of bugs about warnings Xilinx tools are generating when compiling the firmware.\n  Made generate_ucf.py generate a file for Atlys functionally identical to existing HDMI2USB.ucf file. Was able to successfully build the firmware with generate HDMI2USB.ucf file for the Atlys board.\n  Started trying to get firmware to compile with the Numato HDMI2USB.ucf file, ran into the following issue\n\n\n\nPhase 4.2 Initial Placement for Architecture Specific Features\nERROR:Place - ConstraintResolved NO placeable site for\n hdmiMatri_Comp/dvi_rx1/ioclk_buf\nERROR:Place - SIO has over-constrained componet hdmiMatri_Comp/dvi_rx1/ioclk_buf\n to have to placeable sites. Constraints come from driver constraints AND load\n IO constraints\n/bin/sh: line 16: 28981 Segmentation fault (core dumped) map -filter \"../ise/iseconfig/filter.filter\" -intstyle ise -p xc6slx45-csg324-3 -w -logic_opt off -ol high -xe n -t 1 -xt 0 -register_duplication off -r 4 -global_opt off -mt off -ir off -pr b -lc off -power off -o hdmi2usb_map.ncd hdmi2usb.ngd hdmi2usb.pcf\nmake: *** [map] Error 139\n\n\n\n  Rohit GSoC mentoring;\n    \n      Emailed Rohit about reimbursement for VGA Board hardware parts.\n      Rohit has shipped me a board which should arrive at Joel’s tomorrow.\n      Weekly mentoring meeting.\n      Reviewed Rohit’s weekly summary blog post.\n      Reviewed Rohit’s VGA board V2 schematic.\n      Reviewed Rohit’s VGA board V2 PCB.\n    \n  \n\n",
      "url": "/archives/timvideos-us/1988-hdmi2usb-production-board-bring-up-day-2-22nd-july-2014",
      "date": "2014-07-23T01:32:55+10:00",
      "categories": ["timvideos-us","hdmi2usb"]
    },
  
    {
      "title": "HDMI2USB – Production Board Bring Up – Day 1 (21st July 2014)",
      "excerpt": "Wrote snippets for the last 3 days. slidelint work Further updated some slidelint site documentation. Committed the slidelint nginx configuration. Got set up in Joel and Rusty’s coworking space. Explained...",
      "content": "\n  Wrote snippets for the last 3 days.\n  slidelint work\n    \n      Further updated some slidelint site documentation.\n      Committed the slidelint nginx configuration.\n    \n  \n  Got set up in Joel and Rusty’s coworking space.\n  Explained to Ajit the idea of routing the debug output to multiple locations. Added a diagram to the Debug Design document.\n  Fixed command line processing in hdl-pretty code. Started down the path of auto-generating help from the customize stuff and then realised I had more important things to do.\n  Got most of my way through a Python program to generate UCF files from the HDMI2USB Variants spreadsheet.\n  Xilinx “Compatible” JTAG programmer turned up at Joel’s house. Yet to test to see if it works.\n\n",
      "url": "/archives/timvideos-us/1985-hdmi2usb-production-board-bring-up-day-1-21st-july-2014",
      "date": "2014-07-22T11:16:49+10:00",
      "categories": ["timvideos-us","hdmi2usb"]
    },
  
    {
      "title": "HDMI2USB – Production Board Bring Up – Snippets – Prep Work",
      "excerpt": "Two weeks ago I decided that I was going to take a week of work and spend it full time working on bringing up the HDMI2USB Production board that I’m...",
      "content": "Two weeks ago I decided that I was going to take a week of work and spend it full time working on bringing up the HDMI2USB Production board that I’m working on creating with Numato. Since I’m making all our GSoC students do daily snippets, I thought it would be good for me to do snippets too! Will be good to look back on the week and see what I ended up actually doing.\n\nThe following snippets are for the preparation work I did before the week;\n\n\n  Spent a whole bunch of time cleaning up and organising the GitHub issues, including;\n    \n      Creating a bunch of tasks and milestone to track the bring up work,\n      Writing some documentation on how we use labels in the GitHub issue tracker,\n      Organising issues related to GSoC2014. Found a bunch of pull requests from the start of GSoC that hadn’t been merged and looked at merging them.\n    \n  \n  Created a spreadsheet which compares the production board to the Atlys prototyping board and will be used for tracking all HDMI2USB variants into the future.\n  Created a document proposing a future directory structure for HDMI2USB firmware to allow multiple boards, interfaces and other features.\n  Organised with Rohit to get a VGA capture board during this time.\n  Probably a bunch of other stuff I have totally forgotten.\n\n\n \n\nFriday – 18th July\n\n\n  Finished a bunch of paid work.\n  Flew to Adelaide. Joel picked me up from the Airport.\n  Started work on using ‘git-filter-branch’ to extract our PTZ and speaker tracking modules out of the gst-plugins-bad repo into a normal plugins repository while preserving history.\n  Helped Joel get IPv6 working at his place.\n  Fixed up IPv6 on home server to allow VMs public access.\n  Started up the slidelint website VM and got it a working public IPv6 address.\n  Set up a Ubuntu Precise VM to help test aps-sids flumotion porting work.\n\n\n \n\nSaturday – 19th July\n\n\n  Day off. Spent day playing DOTA 2 and StarCraft 2 with Joel’s mates.\n\n\n \n\nSunday – 20th\n\n\n  Concentrated on getting slidelint website up and running, targeting announcement at PyCon AU.\n  Created DNS configuration and deployed it. Also updated the domain tracking spreadsheet.\n  Rewrote the setup documentation (and ported it to Markdown).\n  Set up a nginx frontend.\n  Attempted to get circus-web interface working.\n    \n      Turns out it doesn’t work under Python 3 as torandio2 is unmaintained.\n      Ported circus-web to sockjs-torando.\n      Found the tests don’t work.\n    \n  \n\n\n \n",
      "url": "/archives/timvideos-us/1980-hdmi2usb-production-board-bring-up-snippets-prep-work",
      "date": "2014-07-21T12:47:13+10:00",
      "categories": ["timvideos-us","hdmi2usb"]
    },
  
    {
      "title": "Connecting to a Fritz!Box under Linux using vpnc",
      "excerpt": "I have two Fritz!Box 7390 (one at my place and one at my parents primary residence) and one Fritz!Box 7270 devices (the house they are building). They are pretty reasonable...",
      "content": "I have two Fritz!Box 7390 (one at my place and one at my parents primary residence) and one Fritz!Box 7270 devices (the house they are building). They are pretty reasonable “high end” ADSL routers and a cool feature is they integrated VPN support. I use this functionality to connect the three networks securely together (but that is not what this post is about). This VPN functionality can also be used to connect to your home network while not at home, but information on how to do this from Linux is very sparse (specially if you only want to use FOSS tools to do the connection), so here is how I did it.\n\nConfiguring your Fritz!Box\n\nTo set up your Fritz!Box you need a configuration file, there is no GUI available in the web interface to support create new VPN configurations. While a number of sites have pre-built .cfg files that look like they should work, my Fritz!Boxes only accept encrypted VPN configuration files (see end of post for more information) and no open source tool exists to encrypt them.\n\nI instead needed to use the FRITZ!Box VPN Connection tool (while it is a Windows program but runs fine under Wine) to create the configuration. It can be downloaded from the AVM website (This is different to the VPN client that AVM also provide). Annoyingly the tool doesn’t just read existing .cfg configuration files, it instead reads it’s own vpnadmin.cfg found in c:/users/your username/Application Data/AVM/FRITZ!VPN and then generates a .cfg file and encrypts it.\n\nUsing the FRITZ!Box VPN Connection tool to create a configuration that is compatible with vpnc you must:\n\n\n  Select “Configure VPN for one User” type connection\n  On the “Select Device” screen, select “iPhone, iPod touch or iPad” option\n  On the “Enter the user’s email address” screen, despite the admin tool calling this field the user email, just enter a username. I recommend not having any special characters like @ or . in it.\n  On the “Enter IP address of the User” screen, be careful about what IP address you use (the default should be okay).\n    \n      Don’t use the same IP address that the computer uses when connected via wireless/wired. While it seems like a good idea, as the computer would have the same IP address even when remote, it does not work and will mean the device is unable to access the internet when connected to wireless/wired.\n      The “Send all data over the VPN tunnel” option on this page does not seem to affect vpnc, it will always route all your data over the vpn connection. See later for how to fix this problem.\n    \n  \n  On the “Key for the connection” screen enter a password. Copy down the shared secret key, you’ll want it when creating the vpnc config. I recommend also keeping the default shared secret key it generates unless your super paranoid about entropy.\n\n\nYou can check that you have done this correctly in two ways;\n\n\n  \n    The vpnadmin.cfg will have the iphone=1 and xauth_key=\"your password\" options. See below for a partial example;\n\n    \n    \n...\n  user {\n    nameoremail = \"xxxx\";\n    key = \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\";\n    ip = 192.168.179.201;\n    internetaccess = 0;\n    iphone = 1;\n    xauth_key = \"xxxxx\";\n  }\n...\n\n    \n    \n    \n  \n  \n    If you export an unencrypted config file (remember this can’t be loaded onto the Fritz!Box – so make sure you also export an encrypted version!), the remoteid section will have a key field and not a fqdn field, use_xauth will be set to yes and an xauth section will exist. See below for a partial example;\n\n    \n    \n...\n  keepalive_ip = 0.0.0.0;\n  remoteid {\n    key_id = \"qnap\";\n  }\n  mode = phase1_mode_aggressive;\n  phase1ss = \"all/all/all\";\n  keytype = connkeytype_pre_shared;\n  key = \"f3e0hcca19ca2a3gaafbI.{1dGe3q8f84\";\n  cert_do_server_auth = no;\n  use_nat_t = yes;\n  use_xauth = yes;\n  xauth {\n    valid = yes;\n    username = \"qnap\";\n    passwd = \"qnappassword\";\n  }\n  use_cfgmode = yes;\n...\n    \n    \n    \n  \n\n\nConfiguring vpnc on your Linux box\n\nThe Fritz!Box needs both draft-ietf-ipsec-nat-t-ike-03 support and the client to adopt the server suggested lifetime (which for the Fritz!Box is 3600 seconds). These features where only added to vpnc recently, so make sure your vpnc is newer than subversion revision 511. Both the version in Debian Unstable and any Ubuntu newer than Precise (12.04) have vpnc 0.5.3r512, which is new enough version and you can just apt-get install vpnc. For Fedora 17 x86 systems you can find RPMs at http://www.pabloendres.com/2013/02/27/vpnc-and-fritzbox/\n\nCreate the vpnc config in /etc/vpnc/fritzbox.conf using the following as a template (replace the parts in bold/brackets):\n\n\n\nIPSec gateway ip address or DNS name of your FritzBox\n\nIKE DH Group dh2\nPerfect Forward Secrecy nopfs\n\nIPSec ID [username entered into the \"Enter the user's email address\" screen]\n# \"key\" from the Fritz!Box VPN configuration\nIPSec secret [shared secret key from the \"Key for the connection\" screen]\n\nNAT Traversal Mode force-natt\n\nXauth username [username entered into the \"Enter the user's email address\" screen]\nXauth password [password entered into the \"Key for the connection\" screen - Not the password use to encrypt the vpnc configuration!]\n\n\n\nAs this file contains usernames and password, the config file should be owned by root and only readable by the owner.\n\nsudo chown root /etc/vpnc/fritzbox.conf\nsudo chmod 0600 /etc/vpnc/fritzbox.conf\n\n\nYou should now be able to connect to your home internet using:\n\nsudo vpnc-connect fritzbox\n\n\nWhen you are finished, use:\n\nsudo vpnc-disconnect fritzbox\n\n\nInternet Access while using vpnc\n\nWhen vpnc connects it will change your default route to go via the tunnel. This will send all your local internet traffic over the VPN connection. If you are setting up the VPN to secure your internet browsing while on a hostile network such as a public WiFi hotspot (such as at a coffee shop) this is what you want.\n\nHowever, if you just want to be able to access the hosts on your home network, you don’t want this as it will make your internet browsing extraordinarily slow.  These routes are set up by /etc/vpn/vpnc-script script, so you will need custom one. Normally this script is provided a lot of information when connecting to other VPN concentrators (such as a Cisco EasyVPN device) but when connecting to the Fritz!Box you only seem to get limited information.\n\nI created the following script in /etc/vpnc/fritzbox-script, marked it as executable (chmod a+x /etc/vpnc/fritzbox-script) and then added “Script /etc/vpnc/fritzbox-script” to my /etc/vpnc/fritzbox.conf file.\n\n\n\n#!/bin/sh\n\nIPROUTE=/sbin/ip\n\ncase \"$reason\" in\n  pre-init)\n    /etc/vpnc/vpnc-script pre-init\n    ;;\n  connect)\n    INTERNAL_IP4_PREFIX=$(echo $INTERNAL_IP4_ADDRESS | sed -e's/\\.[0-9]\\+$//')\n    $IPROUTE link set dev \"$TUNDEV\" up mtu 1024\n    $IPROUTE addr add \"$INTERNAL_IP4_ADDRESS/255.255.255.0\" peer \"$INTERNAL_IP4_ADDRESS\" dev \"$TUNDEV\"\n    $IPROUTE route replace \"$INTERNAL_IP4_PREFIX.0/255.255.255.0\" dev \"$TUNDEV\"\n    $IPROUTE route flush cache\n    ;;\n  disconnect)\n    $IPROUTE link set dev \"$TUNDEV\" down\n    ;;\n  *)\n    echo \"unknown reason '$reason'. Maybe vpnc-script is out of date\" 1&gt;&amp;2\n    exit 1\n    ;;\nesac\nexit 0\n\n\n\n\n\n\n  Fritz!Box encrypted VPN configuration files\n\n  Fritz!Boxes will only accept VPN configurations which are encrypted. Otherwise when try to import the file you will get the cryptic \"Error: Import of the VPN settings failed.\" as seen below;\n\n\n  To create an encrypted file you must use the FRITZ!Box VPN Connection tool. Then when exporting, select \"Save VPN settings in a file under\" option, check the \"Encrypt VPN settings\" check box (the file type should change to .eff), and enter your chosen password twice.\n\n  \n\n  \n\n",
      "url": "/archives/ubuntu/1833-connecting-to-a-fritzbox-under-linux-using-vpnc",
      "date": "2013-10-06T23:44:04+10:00",
      "categories": ["ubuntu","useful-bits"]
    },
  
    {
      "title": "Lightning Timer website",
      "excerpt": "When doing lightning talks it is very useful to have a timer so that people don’t over time. There use to be a very simple website called lightningtimer.net but it...",
      "content": "When doing lightning talks it is very useful to have a timer so that people don’t over time. There use to be a very simple website called lightningtimer.net but it appears to have gone AWOL. I have set up a mirrored the code at lightningtimer.cc and lightningtimer.info\n\nBy default it does 5 minutes, but if you can set the hash value to get different times;\n\n  http://lightningtimer.cc#480 – 8 minutes\n  http://lightningtimer.cc#30 – 30 seconds\n\n\nCode found at https://github.com/simonw/lightningtimer.net\n",
      "url": "/archives/useful-bits/1823-lightning-timer-website",
      "date": "2013-08-30T19:04:10+10:00",
      "categories": ["useful-bits"]
    },
  
    {
      "title": "FastComplete, making bash completion fast on remote file systems",
      "excerpt": "Here at Google we have quite a few remote file systems which contain various tools we use in our day-to-day work. As typing sucks we generally want the tools in...",
      "content": "Here at Google we have quite a few remote file systems which contain various tools we use in our day-to-day work. As typing sucks we generally want the tools in our $PATH. When you try to tab complete Bash needs to stat a couple of thousand files and even on fast remote file systems this takes a drastically long time.\n\nI wrote FastComplete as a solution to this problem. The tool creates a local cache of links on your hard drive to everything in your $PATH. It uses a couple of tricks to make sure all the stats remain locally, while still allowing the remote file to change without needing to update the cache. Linux should also keep this information in memory disk cache making tab completion almost instant again. Yay!\n\nYou can find FastComplete at https://github.com/mithro/rcfiles/blob/master/bin/fastcomplete It is a stand alone python program which shouldn’t have any non-core dependencies. The usage documentation is as follows;\n\n\n  Fast complete creates a local disk cache of your path.\nIt’s specifically designed to make bash tab complete run much faster. The correct fix would be to add caching to bash, but it was to hard to do so.\n\n  To find out what path fastcomplete is currently using:\n\n  &gt; ~tansell/bin/fastcomplete\n# Found 3977 commands\nexport PATH=/home/tansell/bin: ... :/home/build/google3/googledata/validators:/home/build/google3/ads/db\n  \n\n  To get fastcomplete to rebuild it’s cache:\n\n  &gt; ~tansell/bin/fastcomplete --rebuild\n# Using path of '/home/tansell/bin: ... :/home/build/google3/googledata/validators:/home/build/google3/ads/db'\n# Cache /usr/local/google/users//tansell/tabcache/d7e5fb63454ae33b4a171b6437be904a did not exist! Rebuilding....\n# Looking in: /home/tansell/bin (execv)\n...\n# Looking in: /usr/bin (symlink)\n...\n# Looking in: /home/build/google3/ads/db (execv)\n# Found 3977 commands\nexport PATH=/usr/local/google/users//tansell/tabcache/d7e5fb63454ae33b4a171b6437be904a\n  \n\n  To use fastcomplete all the time add the following as the *LAST* line in your ~/.bashrc file. Fastcomplete will echo some output to stderr so you can see what is happening.\n\n  # Create a cache of the command\neval `~tansell/bin/fastcomplete $PATH`\n  \n\n",
      "url": "/archives/useful-bits/407-fastcomplete",
      "date": "2011-12-16T14:05:46+10:00",
      "categories": ["useful-bits"]
    },
  
    {
      "title": "Can haz kernel patches?",
      "excerpt": "As it’s only a couple of weeks till another Linux.conf.au is underway, I thought I better post this draft from the last one! This year LCA is in Wellington, New...",
      "content": "As it’s only a couple of weeks till another Linux.conf.au is underway, I thought I better post this draft from the last one! This year LCA is in Wellington, New Zealand, sadly I didn’t get my act together enough to make a proper holiday of it. I’m definitely looking forward to catching up with all the cool hackers at the conference.\n\nOne of the best talks I went to Linux.conf.au last year was the Ksplice talk. This is a wonderful tool which allows people to develop “hot patches” so that you never need to reboot again. The developers have done some very cool work which means for 88% of patches a hot fix can be generated automatically. The presenter was a really great speaker too, during the talk he explains some advanced concepts (like hot to fix-up memory structures) I was able to easily understand it all. I can’t watch until I never have to reboot my Linux machines again!\n\nI also attended Rusty‘s tutorial on hacking lguest. Two years ago I submitted a very important patch to lguest which is now included in the kernel. This year I didn’t get as far as I had wanted mostly because I had not gotten enough sleep the night before. I did however submit one patch which was accepted. I guess that makes me a kernel hacker :).\n\nSadly, Rusty won’t be running another lguest tutorial this year, so it’s unlikely I’ll submit a third patch.\n",
      "url": "/archives/lca/96-lguest-and-ksplice",
      "date": "2010-01-03T13:05:37+10:00",
      "categories": ["lca"]
    },
  
    {
      "title": "Starhunter, Firefly’s little known older cousin.",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "\n\nI have recently been watching and really enjoying a little known series called Starhunter. At first I thought it was an enjoyable rip off of Firefly, so i was surprised to find out that it was made first.\n\nIt has so many of the same elements, the quirky ship mechanic, the captain who doesn’t play by the rules with a darker background, raiders, etc. I have no doubt that Joss Whedon stole many the ideas for Firefly from this series and in the process improving on them in many ways. Sadly, like Firefly this series was canceled way before it reached a wide audience.\n\nYou can watch the “second season” (Starhunter 2300), which is closer to a spin off  rather then a second season (most of the characters have changed), on Youtube. I would highly recommend people who enjoyed Firefly check it out. Since its free, what have you got to loose?\n\nWhile the first season is available on Joost, it is apparently horrible mangled. Sadly, the DVD’s are not available here in Australia so I’m going I’m going to have to buy them from Amazon.\n",
      "url": "/archives/sci-fi/102-starhunter-fireflys-little-known-older-cousin",
      "date": "2009-05-26T00:05:06+10:00",
      "categories": ["sci-fi"]
    },
  
    {
      "title": "Programmer art, it’s deadly!",
      "excerpt": "So one of the other things I worked on at Linux.conf.au was a project Joel Stanley started, “Open Velociraptor Per Child, the Game!”. The game comes out of the Open...",
      "content": "So one of the other things I worked on at Linux.conf.au was a project Joel Stanley started, “Open Velociraptor Per Child, the Game!”.\n\nThe game comes out of the Open Velociraptor Per Child project’s ideas. The OVPC project aims to give every child in the world their very own Velociraptor. The game simulates what would happen if this project was ever to achieve it’s wonderful but lofty goal.\n\nMy main contribution was adding support for (very bad) collision detection, scoring and difficult levels. However, what I spent most of my time was spent making bad programmer art, that of the particularly gruesome child death animation. I like to think it was this artwork that meant we won top spot at the Gaming Miniconf competition, beating the “Shave Bdale” game.\n\nYou can download the game from the git repository. Have fun!\n",
      "url": "/archives/gaming-miniconf/97-programmer-art-its-deadly",
      "date": "2009-01-28T18:33:02+10:00",
      "categories": ["gaming-miniconf"]
    },
  
    {
      "title": "Compiling for Windows using Cygwin on Linux….",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "So for the past week while I have been at the best conference in the world I have been trying to compile tpserver-cpp for Windows. I had done the hard work and gotten it to compile (as documented here, here and here) on Windows previously. However, as I was in Hobart at a Linux conference I didn’t really have access to Windows computer. That was not going to stop me, so I attempted to cross compile the binaries under Linux. This has a number of advantages as it would mean when someone finally gets around to creating a autobuilder, we can produce Windows binaries too.\n\nUbuntu provides the mingw32 compilers in the repository so I didn’t think it would be all that hard to get working. The problem is that tpserver-cpp does not have a “native” Windows support but cygwin comes to the rescue and provides a compatibly layer. Using cygwin turned out to not be as simple as using mingw32 compiler with the cygwin headers.\n\nI ended up using crosstool to build my own cygwin compiler. I battled for a long while with the fact that Ubuntu now enables “fortify source” by default. This breaks many versions of things like binutils and gcc (which often do naughty things which fortify source does not like). After I figured out how to disable it, I was still was only able to get an ancient version of gcc to compile (3.3.6) which meant I had to fix a lot of problems in the tpserver-cpp code. I guess someone had to do it eventually, but it was annoying that I was forced too.\n\nI then manually downloaded a bunch of cygwin packages to build a tree for the dependencies (such as boost and guile). This was much faster then trying to compile them on my own.  Finally, I was able to build tperver-cpp and create a Windows binary! I can confirm it runs fine under Wine and am now getting friends who are still shacked to Windows to test it there.\n\nIt sounds much simpler now, but it took me over a week of work to boil it down to these steps. It was like a constant game of wack-a-mole, once I had solved one problem another popped up.\n\nSo what now in this area? I want to get a recent version of the compiler working and preferably build all the dependencies ourselves (rather then rely on the cygwin compiled versions). I would ultimately like to see the cygwin compilers being packaged with Ubuntu/Debian in the same way that the mingw32 compilers are. I don’t know if any of that is likely to happen however as I never seem to have enought time. For now I have uploaded a copy of my cross compiler (It needs to be extracted so it is found in /opt/crosstool).\n\nI hope this helps someone!\n",
      "url": "/archives/tp/95-xcompiling-cygwin-on-linux-for-windows",
      "date": "2009-01-27T16:22:22+10:00",
      "categories": ["lca","tp"]
    },
  
    {
      "title": "OSDC & orbital death, better late then never…",
      "excerpt": "So last year at the end of November I spoke at OSDC. I had been meaning to blog about the conference but never gotten around to doing so. The conference...",
      "content": "So last year at the end of November I spoke at OSDC. I had been meaning to blog about the conference but never gotten around to doing so. The conference was great, but like previous OSDC’s I came down with something. Sadly, this meant that missed Andrew Tridgell’s talk about the EU-Microsoft agreement. Joel, who had been camped out in my lounge room for the week, said it was really worth listening too. I really wish OSDC recorded all the talks like Linux.conf.au does.\n\nAs part of speaking at the conference I had to produce a paper. This paper puts into writing a lot of what I have been talking about. I wasn’t going to post it, but after getting a email out of the blue about the topic, I’ve decided to put a copy here on my blog. I might as well also upload the presentation I gave, but it won’t be very interesting by itself. Both are released under a CC-BY-SA.\n\nIf there is one thing that any budding game developer (open source or otherwise) should take away from this talk, it is the following:\n\n\n  When a person is looking for normal software, they have an issue to solve.\nWhen looking for computer games, they are looking to be entertained.\n\n\nThis fundamental difference in mindset should drive every aspect of your game, website and release process.\n\nEdit: How could I forget? A big thanks goes out to Leslie Hawthorn who helped proof read the paper and making it much easier to read!\n",
      "url": "/archives/games/99-osdc-orbital-death-better-late-then-never",
      "date": "2009-01-26T14:43:32+10:00",
      "categories": ["games"]
    },
  
    {
      "title": "Reading cookies from most Firefox versions…",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "Yesterday, I wrote about how to reading the cookies from Firefox 3.0 from Python. This code snippet extends the previous example by adding code which finds the cookie file on various different operating systems (Windows, Linux and Mac OS X). Hope this helps people who need to do this.\n\n\n  #! /usr/bin/env python\n# Reading the cookie's from Firefox/Mozilla. Supports Firefox 3.0 and Firefox 2.x\n#\n# Author: Noah Fontes &lt;nfontes AT cynigram DOT com&gt;, \n#         Tim Ansell &lt;mithro AT mithis DOT com&gt;\n# License: MIT\n \ndef sqlite2cookie(filename):\n    from cStringIO import StringIO\n    from pysqlite2 import dbapi2 as sqlite\n \n    con = sqlite.connect(filename)\n \n    cur = con.cursor()\n    cur.execute(\"select host, path, isSecure, expiry, name, value from moz_cookies\")\n \n    ftstr = [\"FALSE\",\"TRUE\"]\n \n    s = StringIO()\n    s.write(\"\"\"\\\n# Netscape HTTP Cookie File\n# http://www.netscape.com/newsref/std/cookie_spec.html\n# This is a generated file!  Do not edit.\n\"\"\")\n    for item in cur.fetchall():\n        s.write(\"%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\n\" % (\n            item[0], ftstr[item[0].startswith('.')], item[1],\n            ftstr[item[2]], item[3], item[4], item[5]))\n \n    s.seek(0)\n \n    cookie_jar = cookielib.MozillaCookieJar()\n    cookie_jar._really_load(s, '', True, True)\n    return cookie_jar\n \nimport cookielib\nimport os\nimport sys\nimport logging\nimport ConfigParser\n \n# Set up cookie jar paths\ndef _get_firefox_cookie_jar (path):\n    profiles_ini = os.path.join(path, 'profiles.ini')\n    if not os.path.exists(path) or not os.path.exists(profiles_ini):\n        return None\n \n    # Open profiles.ini and read the path for the first profile\n    profiles_ini_reader = ConfigParser.ConfigParser();\n    profiles_ini_reader.readfp(open(profiles_ini))\n    profile_name = profiles_ini_reader.get('Profile0', 'Path', True)\n \n    profile_path = os.path.join(path, profile_name)\n    if not os.path.exists(profile_path):\n        return None\n    else:\n        if os.path.join(profile_path, 'cookies.sqlite'):\n            return os.path.join(profile_path, 'cookies.sqlite')\n        elif os.path.join(profile_path, 'cookies.txt'):\n            return os.path.join(profile_path, 'cookies.txt')\n \ndef _get_firefox_nt_cookie_jar ():\n    # See http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/473846\n    try:\n        import _winreg\n        import win32api\n    except ImportError:\n        logging.error('Cannot load winreg -- running windows and win32api loaded?')\n    key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, r'Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders')\n    try:\n        result = _winreg.QueryValueEx(key, 'AppData')\n    except WindowsError:\n        return None\n    else:\n        key.Close()\n        if ret[1] == _winreg.REG_EXPAND_SZ:\n            result = win32api.ExpandEnvironmentStrings(ret[0])\n        else:\n            result = ret[0]\n \n    return _get_firefox_cookie_jar(os.path.join(result, r'Mozilla\\Firefox\\Profiles'))\n \ndef _get_firefox_posix_cookie_jar ():\n    return _get_firefox_cookie_jar(os.path.expanduser(r'~/.mozilla/firefox'))\n \ndef _get_firefox_mac_cookie_jar ():\n    # First of all...\n    result = _get_firefox_cookie_jar(os.path.expanduser(r'~/Library/Mozilla/Firefox/Profiles'))\n    if result == None:\n        result = _get_firefox_cookie_jar(os.path.expanduser(r'~/Library/Application Support/Firefox/Profiles'))\n    return result\n \nFIREFOX_COOKIE_JARS = {\n    'nt': _get_firefox_nt_cookie_jar,\n    'posix': _get_firefox_posix_cookie_jar,\n    'mac': _get_firefox_mac_cookie_jar\n}\n \ncookie_jar = None\ntry:\n    cookie_jar = FIREFOX_COOKIE_JARS[os.name]()\nexcept KeyError:\n    cookie_jar = None\n \npath = raw_input('Path to cookie jar file [%s]: ' % cookie_jar)\nif path.strip():\n    # Some input specified, set it\n    cookie_jar = os.path.realpath(os.path.expanduser(path.strip()))\n \nif cookie_jar.endswith('.sqlite'):\n    cookie_jar = sqlite2cookie(cookie_jar)\nelse:\n    cookie_jar = cookielib.MozillaCookieJar(cookie_jar)\n  \n\n\nEdit: The latest version of this code can be found at http://blog.mithis.com/cgi-bin/gitweb.cgi and includes numerous fixes and updates.\n",
      "url": "/archives/python/94-reading-cookies-firefox",
      "date": "2009-01-20T09:29:49+10:00",
      "categories": ["python"]
    },
  
    {
      "title": "WTF power scripts went in Intrepid….",
      "excerpt": "On previous versions of Ubuntu, the scripts which are called after a resume from suspend have been found in /etc/acpi/resume.d directory. I used this functionality to turn off.....",
      "content": "On previous versions of Ubuntu, the scripts which are called after a resume from suspend have been found in /etc/acpi/resume.d directory. I used this functionality to turn off some of the hardware in my Vaio which I don’t use (such as the bluetooth and the cdrom drive).\n\nThis stopped working when I upgraded to Ubuntu Intrepid. Even more strangely while the scripts are still installed, even they are never called.\n\nIt appears that thanks to moving towards HAL (which is probably a “Good Thing”) these scripts are no longer used. The scripts which are used can be found in /etc/pm/. Not only has the location changed, but the script format has too.\n\nPreviously, my script was found in /etc/acpi/resume.d/99-custom.sh looked like the following,\n\n\n  #! /bin/sh\n# Turn off the CD drive and the bluetooth device\necho 1 &gt; /sys/devices/platform/sony-laptop/cdpower\necho 0 &gt; /sys/devices/platform/sony-laptop/cdpower\n\necho 1 &gt; /sys/devices/platform/sony-laptop/bluetoothpower\necho 0 &gt; /sys/devices/platform/sony-laptop/bluetoothpower\n  \n\n\nNow my script script must be found in /etc/pm/sleep.d/10-custom and looks like the following,\n\n\n  #!/bin/sh -e\ncase \"$1\" in\n\tresume)\n\t\t# Turn off the CD drive and the bluetooth device\n\t\techo 1 &gt; /sys/devices/platform/sony-laptop/cdpower\n\t\techo 0 &gt; /sys/devices/platform/sony-laptop/cdpower\n\n\t\techo 1 &gt; /sys/devices/platform/sony-laptop/bluetoothpower\n\t\techo 0 &gt; /sys/devices/platform/sony-laptop/bluetoothpower\n\t;;\nesac\n  \n\n\nThe main reason I’m posting this on my blog is that this change does not seem to be documented anywhere. Searching on Google for things like “resume script intrepid” or “/etc/acpi/resume.d intrepid” does not come up with anything useful. Hopefully some people will find this helpful.\n",
      "url": "/archives/uncategorized/92-power-scripts-in-intrepid",
      "date": "2009-01-19T15:12:19+10:00",
      "categories": ["uncategorized"]
    },
  
    {
      "title": "$#%#! UTF-8 in Python",
      "excerpt": "This is not a post about using UTF-8 properly in Python, but doing evil, evil things. Python dutifully respects the $LANG environment variable on the terminal. It turns out that...",
      "content": "This is not a post about using UTF-8 properly in Python, but doing evil, evil things.\n\nPython dutifully respects the $LANG environment variable on the terminal. It turns out that a lot of the time this variable is totally wrong, it’s set to something like C even though the terminal is UTF-8 encoding.\n\nThe problem is that there is no easy way to change a file’s encoding after it’s open, well until this horrible hack! The following code will force the output encoding of stdout to UTF-8 even if started with LANG=C.\n\n\n  # License: MIT\ntry:\n    print u\"\\u263A\"\nexcept Exception, e:\n    print e\n\nimport sys\nprint sys.stdout.encoding\n\nfrom ctypes import pythonapi, py_object, c_char_p\nPyFile_SetEncoding = pythonapi.PyFile_SetEncoding\nPyFile_SetEncoding.argtypes = (py_object, c_char_p)\nif not PyFile_SetEncoding(sys.stdout, \"UTF-8\"):\n    raise ValueError\n\ntry:\n    print u\"\\u263A\"\nexcept Exception, e:\n    print e\n  \n\n",
      "url": "/archives/python/91-utf-8-in-python",
      "date": "2009-01-19T13:24:08+10:00",
      "categories": ["python"]
    },
  
    {
      "title": "Reading Firefox 3.x cookies in Python",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "I found the following code snippet on my hard drive today. It allows you to access Firefox 3.x cookies in Python. Firefox 3.x moved away from the older text file format to a sqlite database.\n\nThis code is useful if you want to access something behind an authentication gateway and you also access the page through your web browser. You can also use this code to convert a sqlite database into a cookie file CURL can read.\n\nI didn’t write this code, it was written by Noah Fontes when we where doing some scraping of the Google Summer of Code website (before I joined Google).\n\n\n  #! /usr/bin/env python\n# Protocol implementation for handling gsocmentors.com transactions\n# Author: Noah Fontes nfontes AT cynigram DOT com\n# License: MIT\n \ndef sqlite2cookie(filename):\n    from cStringIO import StringIO\n    from pysqlite2 import dbapi2 as sqlite\n \n    con = sqlite.connect(filename)\n \n    cur = con.cursor()\n    cur.execute(\"select host, path, isSecure, expiry, name, value from moz_cookies\")\n \n    ftstr = [\"FALSE\",\"TRUE\"]\n \n    s = StringIO()\n    s.write(\"\"\"\\\n# Netscape HTTP Cookie File\n# http://www.netscape.com/newsref/std/cookie_spec.html\n# This is a generated file!  Do not edit.\n\"\"\")\n    for item in cur.fetchall():\n        s.write(\"%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\n\" % (\n            item[0], ftstr[item[0].startswith('.')], item[1],\n            ftstr[item[2]], item[3], item[4], item[5]))\n \n    s.seek(0)\n \n    cookie_jar = cookielib.MozillaCookieJar()\n    cookie_jar._really_load(s, '', True, True)\n    return cookie_jar\n  \n\n",
      "url": "/archives/python/90-firefox3-cookies-in-python",
      "date": "2009-01-19T12:58:28+10:00",
      "categories": ["python"]
    },
  
    {
      "title": "In the land of the sheep…",
      "excerpt": "I wrote this post while in New Zealand but never posted it, now I’m at Linux.conf.au I have time to finish it up. Well its been a long time since...",
      "content": "I wrote this post while in New Zealand but never posted it, now I’m at Linux.conf.au I have time to finish it up.\n\nWell its been a long time since I have posted on my blog. As I lasted mentioned I now work at Google, which has been going well but keeping me fairly busy. For the last month (October, 2009) I have been back in Mountain View, California. While I was there for mainly work purposes, I did get the chance to go to both the Summer of Code Mentor Summit and the GitTogether. Both where a lot of fun but tiering.\n\nIt was good to see the BZFlag guys again – they even had cool t-shirts this year. Not as cool as our Thousand Parsec shirts, however. 🙂 I was finally able to meet kblin who I had know through the WorldForge project for many years. As always he looked nothing like I expected.\n\nAt the GitTogther I was mainly interested in trying to make git usable with large media repositories. This is one area which Subversion still has an advantage. After much discussion we came up with a solution to the problem which I gave a short presentation.\n\nIt also gave me a chance to catch up with the Open Source Progams Office. It was great to catch up with Leslie Hawthorn and her fabulous crew.\n\nNo sooner had I gotten back from the states, I headed of to New Zealand. Lee Begg who I also first met through the WorldForge project and was the co-founder of the Thousand Parsec project, is getting married and I will be a grooms man.\n",
      "url": "/archives/tp/93-in-the-land-of-the-sheep",
      "date": "2008-11-15T16:27:27+10:00",
      "categories": ["diary","google","summer-of-code","tp","uni"]
    },
  
    {
      "title": "But…",
      "excerpt": "\nthey can fall to bits from too much love!\n",
      "content": "they can fall to bits from too much love!\n",
      "url": "/archives/uncategorized/88-leslie-tshirts-response",
      "date": "2008-07-08T17:38:00+10:00",
      "categories": ["uncategorized"]
    },
  
    {
      "title": "Babylon 5, the adventure with DVD copy protection",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "I still have not found an apartment so as I have no internet to entertain me on the weekend I got a copy of the first season of Babylon 5 (it was only $20.00 AUD for the whole season). I had been working my way through Andromeda but no where seems to have the third season.\n\nAnyway when I put the DVD video in the drive in my Sony Vaio Laptop running Ubuntu Hardy all I got where I/O errors, some examples are below;\n\n\n  [ 2283.614887] end_request: I/O error, dev sr0, sector 418256\n[ 2283.620351] end_request: I/O error, dev sr0, sector 418264\n[ 2283.626273] end_request: I/O error, dev sr0, sector 418264\n[ 2283.631766] end_request: I/O error, dev sr0, sector 418272\n[ 2283.637013] end_request: I/O error, dev sr0, sector 418272\n[ 2283.642384] end_request: I/O error, dev sr0, sector 418280\n\n\nThe Vaio’s DVD drive is connected via the USB bus. This is done so that drive can be completely powered down. The device turned out to be a MATSHITA DVD-RAM drive as shown via the dmesg output below;\n\n\n  [ 2909.596251] scsi11 : SCSI emulation for USB Mass Storage devices\n[ 2909.596944] usb-storage: device found at 24\n[ 2909.596952] usb-storage: waiting for device to settle before scanning\n[ 2911.901103] usb-storage: device scan complete\n[ 2911.903506] scsi 11:0:0:0: CD-ROMÂ Â Â Â Â Â Â Â Â Â Â  MATSHITA DVD-RAM UJ-852SÂ  1.31 PQ: 0 ANSI: 0\n[ 2911.948247] sr1: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray\n[ 2911.948372] sr 11:0:0:0: Attached scsi CD-ROM sr1\n[ 2911.948460] sr 11:0:0:0: Attached scsi generic sg1 type 5\n\n\nIt took me forever to figure out what was going on. I had seen similar problems on my desktop before when the disk was scratched but these where brand new disks. So I took the disks into work and tested it out on a friends Mac, it played perfectly. There happened to be a Steve Irwin DVD video disk lying around, so I popped it in the Vaio, it also played perfectly! What was going on?\n\nAfter much searching I came across some reference to problems with region coding. It turns out thatÂ  MATSHITA drives won’t let you read a dvd unless they they have a region set. As I had never played a DVD video before the region on the drive had never been set.\n\nThere is a tool in Linux which can be used to do the region setting, it is helpfully called regionset. After setting the region to “Region 4” I am now able to play my new DVDs! I wonder if I will be able to read my discs from the US and the UK. The libdvdcss2 should be able to decode the data if it can be read, hopefully the drive will still let that occurring. I will report back in comments here when I find out for sure.\n\nIt has been repetitively found that region encoding is anticompetitive and hence un-unenforceable in Australia. I have included a quote from the Stevens v Kabushiki Kaisha Sony Computer Entertainment case from 2005*.\n\n\n  Ordinary principles of statutory construction, observed by this Court since its earliest days, have construed legislation, where there is doubt, to protect the fundamental rights of the individual. The right of the individual to enjoy lawfully acquired private property (a CD ROM game or a PlayStation console purchased in another region of the world or possibly to make a backup copy of the CD ROM) would ordinarily be a right inherent in Australian law upon the acquisition of such a chattel. This is a further reason why sÂ 116A of the Copyright Act and the definition of TPM in sÂ 10(1) of that Act should be read strictly. Doing so avoids an interpretation that would deprive the property owner of an incident of that person’s ordinary legal rights.\n\n\nI thought I would just log my info here as there was very little information in Google about this problem. Hopefully I help some poor fool which brought a Sony Vaio like me.\n",
      "url": "/archives/uncategorized/87-babylon-5-dvd-copy-protection",
      "date": "2008-07-08T14:43:04+10:00",
      "categories": ["uncategorized"]
    },
  
    {
      "title": "My three weeks on a Mac",
      "excerpt": "As everyone knows, I recently started at Google. When I started I was given a MacBook Pro to use as the company laptop before I had a chance to change it, I had to head off to Mountain View for training.....",
      "content": "As everyone knows, I recently started at Google. When I started I was given a MacBook Pro to use as the company laptop before I had a chance to change it, I had to head off to Mountain View for training. This meant I ended up using a Mac for 3 and half weeks.\n\nNow I am back in Australia I have decided to trade in my Mac for a nice PC running Linux. People have continually told me that Macs are the epitome for polished UI and once you get use to them, there is no going back. When I suggested that this might not be the case, I was told “but you have never used Mac” – well now I have and I have specific examples of why Apple’s are less usable then Linux.\n\nMy first bone to pick is with the unlock screen. As I work at Google and might have the codes for the orbital space laser on my laptop, I need to lock my screen anytime I walk away from my desk. In gnome on Linux I can just walk back to my computer and start typing my password, it makes sure that all the keys end up in the password box – no so on a Mac. When I get back, I first have to move the mouse or hit a key, I then have to wait for the twirling multi-color ball and then I get to type my password. If I just start typing I loose the first 3 or more characters of the password.\n\nNext is the useless wireless indicator that Mac has. On Linux I can clearly see if I am connected, trying to connect or waiting, I can also see if I am on wireless or wired network. This is all thanks to Network Manager which is very, very cool. On Mac, you can’t tell if you are connected or the Mac is having a shit and still trying to connect. Often, I had to bring up a ping program to see if the wireless bars meant I was actually connected or not. If I plug in the ethernet, without specifically disabling the Airport how do I know where my packets are going?\n\nThe twirling ball of doom. Normally programs either lock hard or work. Not on Mac, instead you get a ball which twirls forever. After waiting for 15 minutes I just hard reset my computer. At least if I knew the computer was locked up I wouldn’t have to wait that 15 minutes.\n\nI have often gotten this error “You cannot move any item to the Trash because it is being emptied” when doing a secure empty of my trash bin. How hard is it to put things in the trash while emptying it?\n\nAlt Tab doesn’t work. It doesn’t change between windows, only applications. Often I have multiple windows open in one application. I first have to “alt tab” to the correct application, then I have to “command tab” to the correct window. How annoying!\n\nSo that was just a few issues I have had. Overall, I am much happier with Ubuntu and it keeps getting even better.\n",
      "url": "/archives/ubuntu/84-my-three-weeks-on-a-mac",
      "date": "2008-07-08T14:00:38+10:00",
      "categories": ["google","ubuntu"]
    },
  
    {
      "title": "Tech Talk at Google – Gaming for Freedom",
      "excerpt": "Last week on friday, I gave a Tech Talk about Open Source Gaming as part of Leslie Hawthorn’s “Open Source Developers @ Google” talk series. For those who were silly...",
      "content": "Last week on friday, I gave a Tech Talk about Open Source Gaming as part of Leslie Hawthorn’s “Open Source Developers @ Google” talk series. For those who were silly enough to miss it, it should be soon coming to a YouTube near you.\n\nI had given a similar talk at my local LUG only recently, I think that version went a little better but it was quite a different crowd. The first part of my talk came across way more preachy then I had hoped. I also see now how I can better use Thousand Parsec as examples of the tips I came up for releasing FOSS games. I guess practice makes perfect, maybe I’ll get it right to one day be able to give it at Linux.conf.au.\n\nAt the beginning this time I tried some of the “one word per slide quick succession” talk which Anthony Baxter had suggested. I think however think I ended up just insulting every American! I don’t think I speak fast enough to make this type of talk successful, but I’ll keep experimenting.\n\nIf you have any feedback on the talk, please do send me an email!\n\nThe real reason for this post is to upload the slides for the tech talk so they can be linked from the YouTube video.\n\nEdit: The talk has now been uploaded, you can access it via the following link or see it below,\n\n\n\n",
      "url": "/archives/games/82-techtalk-gamingforfreedom",
      "date": "2008-06-10T03:15:04+10:00",
      "categories": ["games","google"]
    },
  
    {
      "title": "I will survive…",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "It’s been a hectic week, but I have managed to survive my first week as a Noogler. As everyone knows, I started at Google last week. The first week has been quite hectic as I started at the Sydney office and then in the middle of week flew to the Googleplex in Mountain View, California (if anyone is located in this area and wants to have lunch, feel free to look me up!).\n\nThe week has been a little bit of a mess for a number of reasons. I’m joining the PSO group at Google which is only just started to establish a presence at the Sydney office, this has meant not a lot of people know what I should be doing. To make matters worse, I managed to arrive for the Memorial Day weekend (public holiday on Monday) which means the normal schedule for training (which starts on a Monday) is all changed. It’s still be very demanding and interesting anyway.\n\nI arrived here in San Francisco on a Thursday (before I actually left according to wall time, Yay timezones!)Â  and after sleeping for about 18 hours straight managed to make it into the office on the Friday. The jet lag didn’t really end up hitting me until the weekend, so I’ve spent the last three days trying to reset my body clock instead of doing anything interesting.\n\nI’m very pleased with the transparency inside of Google. I have yet to find a door which my keycard won’t open or a website which I can not access with my login. Of course I can’t tell anyone outside of Google what I have found out which is annoying, there is a lot of cool stuff going on.\n\nHaving worked mainly for small companies in the past, it’s nice to be able to walk into TechStop (Google’s tech support department) and get both hardware and support. It’s nice having small things like beverages (such as that all important coffee) and food provided. The food in the Sydney office is not bad, but it pales in comparison to the variety and quality that you get here at the Googleplex.\n\nI have heard that people worry that with all the food at Google you just end up going to lunch with your work mates, I don’t think that is something having food provided creates. At the my previous work I ended up in that situation, always having lunch with the same people at the same locations, the only difference is that I was paying for it! Google is liberal about letting you invite friends to have lunch at their free cafeteria’s too.\n\nOver all, it has been a very busy and interesting week. I’m looking forward to what tomorrow (and the rest of this week) holds.\n",
      "url": "/archives/google/81-noogler-week-1",
      "date": "2008-05-27T09:25:18+10:00",
      "categories": ["google"]
    },
  
    {
      "title": "“rock” verses “rocks”",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "A guy on the Summer of Code asked about the following.\n\n\n  Linux rocks, FreeBSD rocks – but Linux and FreeBSD rock.\n\n\nWhich is correct use of rock verse rocks but I have no idea why. Suck also works like this,\n\n\n  Windows sucks, MacOS X sucks – but Windows and MacOS X suck.\n\n\nThis just proves that I know nothing about this language I use every day. Could a linguist please explain this?\n",
      "url": "/archives/uncategorized/80-rocks",
      "date": "2008-04-27T23:05:53+10:00",
      "categories": ["uncategorized"]
    },
  
    {
      "title": "Packing your bags…",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "About 6 months ago I started interviewing with Google Australia and about a month ago they made me a job offer that I could not refuse. So now I’m packing my bags and heading to Sydney, I start work in about three weeks but I am being sent to the States for some training first. Unlike most of the Googlers in Sydney, I’m not going to be working on Google Maps.\n\nI’m very excited too start working with Google but it has been pretty big decision to make. I have never moved anywhere permanently before and I’m currently still living at home with my parents. I did live in Sweden for 6 months, but that was always with the intention of coming back home. On the other hand, it is not like I am moving to totally a different country and I already have loads of friends and family living in Sydney.\n\nI have been thinking that I want to move to a big city for a number of reasons. An example of this that I often use, is that “I want to be able to order pizza after midnight”. It is annoying that just when I’ve started getting more involved in the local FOSS groups I’m leaving for another state. I do hope to continually be involved with SLUG and other FOSS events going on in Sydney too.\n\nI’ve spent most of this ANZAC Day long weekend trying to organize all my stuff. You never realize how much crap you have until you decide to move and I don’t even own any furniture yet! Luckily my parents have plenty of storage space. Having never done this before, I’m sure that I’m probably doing it all wrong.\n\nI’m a little bit of a technology pack rat (like most geeks) but I have been trying to give away all the old computer bits that I had always being meaning to fix or use. There should be plenty of happy Adelaide FOSS people soon 😉\n\nIf you are in Adelaide and want to catch up before I head off (Friday the 16th), or in Sydney (or even the Mountain View, USA) and want to come and say “Hi!” please feel free to email me.\n",
      "url": "/archives/google/79-going-to-sydney",
      "date": "2008-04-27T22:51:50+10:00",
      "categories": ["google","sydney"]
    },
  
    {
      "title": "Quotidian!",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "I’m sure most people are wondering what he hell “quotidian” is, I myself did not know this word existed.  The word actually means mundane or everyday, a work colleague suggested it when I asked is anyone knew what the opposite to epiphany was. So you probably wondering why I’m going on about some stupid word, well the reason is that I have finally converted from the gnome Epiphany web browser to Firefox.\n\nFor thoses who don’t know, Epiphany is generally described as “the closest thing to Gnome’s official web browser”. It has lots of nifty features and use to have much better intergration with the Gnome desktop (things like actually using the Gnome print dialog). I use to advocate that Gnome should push Epiphany instead of Firefox.\n\nSo why have I given up? I’m tired of my browser being broken.\n\nThe developers of Epiphany decided to make some huge changes in the latest version, they started adding support for the WebKit (the render behind Safari) instead of just being dependent on Gecko (the same render Firefox uses). This is actually a very good goal, being able to have a choice of renders in my browser would be great. However, in the process of doing this change they broke everything! Things like the vitally important Adblock extension no longer work and the password manager is totally broken in a number of ways – for a long time they didn’t even show up in the dialog.\n\nI’m okay with a few bugs here and there (even these quite serious ones) to get something better in the long run. I have diligently reported bugs as I found them (even firing up a different browser when the gnome bug browser was crashing Epiphany). I even started porting Google Gears to Epiphany because I had faith that Epiphany was going to remain a killer browser.\n\nNow I find out that it has all been for nothing, the developers have decided they are going to totally ditch Gecko and move only to WebKit (with all the compatibility problems it will bring). There are so many reasons why this is a bad idea, none of which I’m going to repeat here.\n\nSo I’m now writing this in Firefox instead of Epiphany and I’m pretty happy. Having access to all the extensions that Firefox has is really nice for once. There a number of features which I miss from Epiphany and extensions have filled most of that void, so what did I install?\n\n\n  Tab History, this means that new tabs have the same history as the parent tab. This is something Epiphany does by default and I find absolutely vital.\n  Compact Menu 2, a little extension which gives you the ability to have all your menus in a single button saving you precious vertical screen space.\n  Ad Block Plus, got to keep away those evil ads. It’s amazing how annoying the web is with ads, I had gotten so use to not seeing them that I didn’t know how bad it actually was.\n  NoScript, get rid of all that annoying flash and evil javascript. In epiphany I generally ended up just apt-get removing flash, now I can still watch stupid Youtube videos without being violated by monkies.\n\n\nI also installed two extensions that have no equivalent under Epiphany, they are\n\n\n  Greasemonkey, the extension for making websites the way you like them.\n  Firebug, a really cool tool for figuring out how a website is made up and various problems with them.\n\n\nI’m still looking for an extension which makes the Firefox 3.0 URL bar sane. I really like how the Epiphany one behaves and will probably end up writing my own extension if I don’t find anything. The important features that I require are,\n\n\n  Single line per URL with the title on the right.\n  Support for “smart bookmarks” as the last option. These let you search for the current term at Google or Wikipedia without prefixing it with a stupid keyword or something.\n\n\nHere is what my Firefox looks like currently. As you can see I have significantly customized the toolbar to remove all that excesses.\n\n\n",
      "url": "/archives/uncategorized/77-epiphany2firefox",
      "date": "2008-04-10T10:04:50+10:00",
      "categories": ["uncategorized"]
    },
  
    {
      "title": "Thousand Parsec accepted into Google Summer of Code 2008!",
      "excerpt": "As I’m too lazy to write a post myself, here is one from JLP: Google has just published the list of accepted mentoring organizations for Google Summer of Code 2008...",
      "content": "As I’m too lazy to write a post myself, here is one from JLP:\n\n\n  Google has just published the list of accepted mentoring organizations for Google Summer of Code 2008 and it is great to see that Thousand Parsec has made it once again. We must be doing something right 🙂\n\n  So, if you are into turn-based 4X space strategy games and would like to help in game development, this is your chance. Take a look at our Google Summer of Code and Ideas for Programmers pages and get involved. There is even US$ 4500 to encourage you to take that step into the world of open source software programming.\n\n  Interested students now have about a week to get to know us better. You can chat with us on IRC (Freenode network, #tp channel) or write to our development mailing list. Starting March 24 student applications can be submitted, all applications must be in by March 31. Iâ€™m looking forward to be a mentor again.\n\n",
      "url": "/archives/tp/76-gsoc2008",
      "date": "2008-03-18T14:23:32+10:00",
      "categories": ["summer-of-code","tp"]
    },
  
    {
      "title": "Gaming Miniconf Videos",
      "excerpt": "At Linux.conf.au 2008 the AV team did a great job of recording the main conference and almost all the talks can be downloaded from the main website. They where however,...",
      "content": "At Linux.conf.au 2008 the AV team did a great job of recording the main conference and almost all the talks can be downloaded from the main website. They where however, unable to record all the miniconf proceedings. I ran the Gaming Miniconf again and like last year I was able to record the proceedings myself. It took me a while, but I have finally finished encoding the videos and you can now download the videos. They should be of similar quality to the main conference videos.\n\nThe day on a whole was fairly successfully and there where lots of interesting talks, panels and tutorials. One of the coolest talks was Douglas Bagnall’s “Playing with Crayons“, while we had a number of technical difficulties with getting his laptop talking to the projector (he has an evil Nvidia card), it was really cool to learn about this program which turns a kid’s crayon drawing into a playable game. Douglas has now open sourced the code and looking to port it to the OLPC!\n\nWe also had some very cool panels sessions. The first was about using FOSS in Game Development education, we had some representatives from some of the top game education institutes in Australia. The second was an interesting licensing panel which includes Jessica Coats from Creative Commons Australia and Kimberly Weatherall – a former Rusty Wrench winner. I think our last panel was the best however, people got to grill representatives of the Australian commercial game industry on how they are using FOSS at their commercial game companies!\n\nThere where also some really good talks by Richard and Alex about pyglet, including the most impressive live coding I have ever seen. As the pyglet tutorial is so cool and I have also uploaded it to Google Video for your viewing pleasure. Of course, we couldn’t keep Rusty Russell away, he gave a short lightening talk about his new Pong Hero!\n\nSo why not download the Gaming Miniconf vidoes and take a look.\n",
      "url": "/archives/lca/75-gaming-miniconf-videos",
      "date": "2008-03-06T22:44:25+10:00",
      "categories": ["gaming-miniconf","lca"]
    },
  
    {
      "title": "Google Summer of Code on again!",
      "excerpt": "Leslie Hawthorn has announced that the Google Summer of Code is on again. Like, nobody saw that comming! Hopefully, Thousand Parsec will be a mentor organisation again. Have to keep...",
      "content": "Leslie Hawthorn has announced that the Google Summer of Code is on again. Like, nobody saw that comming! Hopefully, Thousand Parsec will be a mentor organisation again. Have to keep those southern hemisphere mentor numbers up!\n",
      "url": "/archives/tp/74-gsoc-2008",
      "date": "2008-02-26T08:46:09+10:00",
      "categories": ["google","summer-of-code","tp"]
    },
  
    {
      "title": "Thousand Parsec primary client 0.3.0 released!",
      "excerpt": "As announced at Linux.conf.au, I’m happy to point out that we have finally anounced the 0.3.0 release of the Thousand Parsec client which I work on. It’s been a long...",
      "content": "As announced at Linux.conf.au, I’m happy to point out that we have finally anounced the 0.3.0 release of the Thousand Parsec client which I work on.\n\n  It’s been a long time since the last release of the primary client for playing Thousand Parsec games. Now, the wait is finally over and it was well worth it. Large parts of the client have drastically changed. Connecting to game servers is simplified. The new user interace enables you to more easily see important information and then more efficiently issue orders. Translation support makes it possible to conqueror the universe in your mother language. For all the details check out the full release announcement. If you downloaded a previous release and didn’t like it, please give this new release a try!\n\n",
      "url": "/archives/tp/73-tp-release-v3",
      "date": "2008-02-19T09:35:23+10:00",
      "categories": ["lca","tp"]
    },
  
    {
      "title": "CFXS free at last!",
      "excerpt": "Those who either know me personally, or have read more of my blog might remember my final year honours project. The project was to build a budget 8 line USB...",
      "content": "Those who either know me personally, or have read more of my blog might remember my final year honours project. The project was to build a budget 8 line USB channel bank. Originally, I had hope to commercialise the project, the prospects looks good until two competing products where released into the market for only a slightly higher cost point. I had always hoped to make the system a piece of open hardware, but both the Uni rules and trying to commercialise it had made that difficult.\n\nAs a strange coincidence,  David Rowe, a guy doing open source embedded Asterisk hardware, lives less then 15 minutes walk from my home. His main motivation behind this open hardware is to try and bring technology to the developing world in a way which empowers them instead of making them dependent on external supplies. We got chatting at a local LinuxSA meeting and he was partly inspired by my device to start the $10 ATA project. (David also has a bunch of other cool projects like his own electric car and trying to go off the grid).\n\nSometime during that, I removed the access controls on the subversion repository that I had used for the CFXS so that David could look at it. It turns out though, that I never told anyone else! So that is the main aim of this post, to tell you all where you can get a copy of source files for my honours project.\n\nThe subversion repository is located at the following url http://verbal.mithis.com/svn/cfxs/trunk/. You can check it out using the following subversion command,\n\n\nsvn co http://verbal.mithis.com/svn/cfxs/trunk cfxs\n\n\nSo why not check it out and build your own? I have some left over components which I’m happy to dole out if you agree to actually use them in a useful way. Just send me an email.\n\nDavid (hopefully I’m not putting words in his mouth here) is hoping that we can use this device in combination with the OLPC XO laptop to bring telephony to a whole village. The mesh networking wireless would be ideal for doing VOIP, while my 8 port CFXS device and some very cheap handsets can give a bunch of people “real” phones. The system can also be made very low power as both the OLPC and the CFXS device can be in power down modes while nothing is happening.\n\nSo I guess we will see what happens in the near future, it seems like it’s an exciting area of FOSS to be involved in. Sadly, I don’t have much time to work on any of this.\n\n\n",
      "url": "/archives/ideas/72-cfxs-free",
      "date": "2008-02-18T10:31:14+10:00",
      "categories": ["ideas","pcb","uni"]
    },
  
    {
      "title": "Google Patchwork",
      "excerpt": "I live in Adelaide and have been playing around with Google maps recently. I have no sense of direction which makes Google quite useful for getting to places. It appears...",
      "content": "I live in Adelaide and have been playing around with Google maps recently. I have no sense of direction which makes Google quite useful for getting to places. It appears that Google has some problems with satellite images for South Australia. If you take a look at the map below, you should see that it is built out of three totally different captures, you can even see a few clouds.\n\n\n\nIf you zoom out one more level, the map data totally change,\n\n\n\nI wonder how they decided what data to use?\n",
      "url": "/archives/google/67-google-patchwork",
      "date": "2008-02-04T14:41:09+10:00",
      "categories": ["google"]
    },
  
    {
      "title": "LCA2008 all over :(",
      "excerpt": "Well, I am back at work after spending last week at Linux.conf.au, it was a huge amount of fun and the organisers did a great job. I am really happy...",
      "content": "Well, I am back at work after spending last week at Linux.conf.au, it was a huge amount of fun and the organisers did a great job. I am really happy that I got to catch up with all the people cool I had not seen for almost a year. We managed to have a Thousand Parsec developer meeting which was pretty fruitful. As with last year, I ran the Gaming Miniconf and a large “Open Source Gaming” stand on Open Day.\n\nThe Gaming Miniconf was a little slow to start, my first speaker turned up late and my second speaker was unable to get his laptop to work with the projector. I was disappointed with the turn out during the morning, last year we easily had 70 people for most of the day, while this year it was closer to 40. The competition for people’s attention in the morning was tough, there where 8 other miniconfs running. The keynote speeches before the Miniconfs last year, really helped make everyone was getting out of bed.\n\nI am much happier with the afternoon, things ran significantly smoother and the pyglet tutorial was a huge hit. It was amazing to watch Richard and Alex work, they really should give a main conference tutorial next year. I am currently encoding all the talks and hope to have them up very soon (for those who where silly enough to attend the wrong Miniconf). Watch this space for more information.\n\nThe Open Day was pretty cool, I would like to thank all the helpers – they did a great job and allowed me to concentrate on organising things (like setting up hardware and finding lunch for everyone). I do wish that the Open Day venue was much larger, it was rather cramped for most of the day. The open day is one of the best events we have to show the general public all the cool things FOSS is doing and I would like to see it become a bigger and longer event.\n\nI belive that previously Miniconf organisers had been given the short end of the stick. The effort required to organise a Miniconf is significantly more then required for a talk, yet they received none of the perks or recognition that speakers did. I’m glad that the organising committee decided to make a change this year and I feel this small gesture made a huge difference.\n\nOf course, I also managed to attended a number of cool talks. I would recommend going and watching some of them.\n",
      "url": "/archives/lca/66-lca2008-over",
      "date": "2008-02-04T14:23:24+10:00",
      "categories": ["gaming-miniconf","lca"]
    },
  
    {
      "title": "In the news!",
      "excerpt": "As I have been organising the Gaming Miniconf, I was interviewed for a “blog” on ITWire. The post was finally publish today, you can find it here. It wasn’t to...",
      "content": "As I have been organising the Gaming Miniconf, I was interviewed for a “blog” on ITWire. The post was finally publish today, you can find it here. It wasn’t to bad and the stuff comes of pretty positive.\n",
      "url": "/archives/lca/65-itwire",
      "date": "2007-12-18T14:59:44+10:00",
      "categories": ["gaming-miniconf","lca"]
    },
  
    {
      "title": "Cool Python, Swaping two variables",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "Some people say “you learn something new everyday” or something like that. Today someone on #python showed me a cool trick I never would have thought of on my own.\n\nOften there is a time when you want to swap the contents of two variables. The most popular way to do this is using a third variable as shown below:\n\n\n\n  temp = a\na = b\nb = temp\n\n\nThis looks sucky and doesn’t really express very well what you want to do. A much better way to do this in Python is with the following magic line:\n\n\n\n  a, b = b, a\n\n\nDoesn’t that look so much better? And it is very clear to anyone who has used Python before what is going on. To think, I have been using Python for about 7 years now and never thought of doing that.\n\nJust thought I would share this tidbit.\n",
      "url": "/archives/ideas/64-python-swap-var",
      "date": "2007-11-11T00:37:39+10:00",
      "categories": ["ideas","python"]
    },
  
    {
      "title": "Gaming Miniconf CFP open!",
      "excerpt": "Just in case you missed this, the Gaming Miniconf has opened it’s call for participation. We are not just after presenters either! This will be the second year that the...",
      "content": "Just in case you missed this, the Gaming Miniconf has opened it’s call for participation. We are not just after presenters either!\n\n\n  This will be the second year that the Gaming Miniconf runs and with your help it will be even better. This Miniconf is not just a bunch of cool talks, it aims to be FUN! The Miniconf will be running some cool interactive demonstrations of FOSS games at the Open Day.\n\n  So why not come and participate in this exciting event?\n\n  The latest version of the announcement can always be found at http://miniconf.mel8ourne.org/wiki/index.php?title=Gaming/CFP\n\n",
      "url": "/archives/lca/62-gaming-miniconf-cfp",
      "date": "2007-10-22T17:44:05+10:00",
      "categories": ["gaming-miniconf","lca"]
    },
  
    {
      "title": "Linux.conf.au woo!",
      "excerpt": "As you may have already noticed, Linux.conf.au 2008 has announce that registrations are finally open, woot! If you are planning on coming, don’t forget to come to the best miniconf...",
      "content": "As you may have already noticed, Linux.conf.au 2008 has announce that registrations are finally open, woot! If you are planning on coming, don’t forget to come to the best miniconf there is, the Gaming Miniconf! I am running it again this year and it is going to be packed with Gaming and Game Development goodness.\n\nMuch to my embarrassment I managed to accidentally announce the fact early to the #linux.conf.au channel, I just happened to check the website for some Gaming Miniconf business and noticed the registration button. Thinking I had missed the announcement (it has been long day) I hopped on to the #linux.conf.au channel to ask how long it had been opened. Turned out they had just started doing some testing and thanks to me the whole channel jump on being the first to register. Sorry guys!\n\nI have booked my flights and registered, so I am all good to go.\n",
      "url": "/archives/lca/61-lca08-rego",
      "date": "2007-10-22T17:16:40+10:00",
      "categories": ["gaming-miniconf","lca"]
    },
  
    {
      "title": "Summer of Code results",
      "excerpt": "If you read my blog but not the Thousand Parsec news feed, you might have missed my wrap up of our Summer of Code. You can find the complete post...",
      "content": "If you read my blog but not the Thousand Parsec news feed, you might have missed my wrap up of our Summer of Code. You can find the complete post here, some highlights include;\n\n\n  According to Oholo, over the summer the students made a total of 371 commits to our public repository, changing a total of 39,050 lines of code.\n\n\nand\n\n\n  Participating in the Summer of Code has meant that students from around the world have started trying to figure out how to make Thousand Parsec part of their course work. One such student is   Nathan Partlan aka greywhind who is doing a full year internship with Thousand Parsec.\n\n\nYou should check it out.\n",
      "url": "/archives/tp/60-gsoc-results",
      "date": "2007-10-22T17:03:04+10:00",
      "categories": ["summer-of-code","tp"]
    },
  
    {
      "title": "GSoC Mentor Summit",
      "excerpt": "Well, I am currently sitting in the famous Googleplex. I’m attending the Google Summer of Code Mentor Summit that Google paid to fly me out for, which is very very...",
      "content": "Well, I am currently sitting in the famous Googleplex. I’m attending the Google Summer of Code Mentor Summit that Google paid to fly me out for, which is very very cool (thanks Google!). I have never been to the USA before,  so I have about 3 days next week to look around the San Francisco bay area.\n\nWork was suprisingly cool about me disappearing for a week and a half when I had only been working there for 4 weeks!\n\nAs I have said previously, the Summer of Code was a really cool program to be part of and we had some really cool success. Hopefully we can get in again next year!\n",
      "url": "/archives/tp/59-mentor-summit",
      "date": "2007-10-07T03:27:50+10:00",
      "categories": ["summer-of-code","tp"]
    },
  
    {
      "title": "Network Manager – OpenVPN, DNS Domain support",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "My new job uses OpenVPN to provide secure access to their private network. They also make heavy use of the dns domain search so that you only have to type “wiki” to get to their wiki. It turns out that the Open VPN plugin for network manager ignores the “dns-domain” setting, this means I have to manually change /etc/resolv.conf (to add the needed “search” section) after every connection.\n\nThis annoyed me enough that I have developed a small patch for the plugin which fixes support. I’ve submitted the patch to Ubuntu, hopefully it will get included soon. In the meantime I have attached the patch and the deb for Ubuntu Gusty.\n\nEdit: This patch has been included in Ubuntu Gusty!\n",
      "url": "/archives/ideas/54-nm-openvpn-dns",
      "date": "2007-09-08T15:31:41+10:00",
      "categories": ["ideas","ubuntu"]
    },
  
    {
      "title": "Network Manager – Autostart VPN",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "UPDATE: Dorian Scholz writes in the comments; There is now a command line tool nmcli which can interact with the nm-applet and Network Manger directly. Connecting to a VPN is as easy as:  nmcli con up id NAME_OF_THE_VPN\n\nRecently I started a new job, to get my laptop on the network I first connect to their wireless LAN and then VPN into the network. Network Manager makes this fairly easily, it will automatically try and associated with the wireless network, I then have to start the VPN connection manually.\n\nThis wouldn’t be a problem if I only had to do it once or twice a day. However, wireless being wireless, drops out 4-5 times a day. While, Network Manager will automatically reassociated, I have to manually reconnect to the VPN which is a pain.\n\nTo fix this I have developed two small scripts, the first is a small shell script which will automatically call a command when connecting to certain wireless networks (/etc/NetworkManager/dispatcher.d/02runcmd). The second is a little Python script which will tell Network Manager to connect to a VPN from the command line (/usr/local/bin/nm-startvpn). When you combind these two, you get auto VPN connection goodness, yay!!\n\nIf people find this useful I might put together a config utility and properly package them.\n",
      "url": "/archives/ideas/51-nm-autovpn",
      "date": "2007-09-06T12:39:48+10:00",
      "categories": ["ideas"]
    },
  
    {
      "title": "Open Source @ Freeplay debrief",
      "excerpt": "As some of you may know, I was invited to speak about my experiences with Open Source games at the Independent Game Developers conference, Freeplay. The conference was in Melbourne...",
      "content": "As some of you may know, I was invited to speak about my experiences with Open Source games at the Independent Game Developers conference, Freeplay. The conference was in Melbourne at the ACMI and at my guess around 250 people attended the event.\n\nI organised with the Freeplay organisers to have Linux.conf.au postcards available at the registration desk and dotted around the other venues. About 100 cards where picked up and the remainder where given to Geoff Leach (who lectures at RMIT) to distribute to students. I also advertised the “Gaming Miniconf” which I will be organising at Linux.conf.au.\n\nI gave a talk entitled “The best things in life are free” which was split into two sections. The first was an introduction to what FOSS actually is, while the second was a brief tour of various open source game technologies and games which exist. I hoped to show how the independent game developers and open source game developers where closer then both sides realise.\n\nThe talk went well and there seemed quite a bit of interest. There was quite a bit of interest (among game library developers) in the dual-licensing model that MySQL and Trolltech both use. More importantly many of the upcoming game development students attending were interested in both using open source and open sourcing their own games.\n\nI also talked directly to a variety of leading Australian game developers to find out how, where and why they are using FOSS in there company and games. As I have previously thought (and discussed at last year’s Gaming Miniconf), the amount of FOSS being used is extensive. Python, for example, been embedded in many AAA games and is used in multiple MMORPGs. Hopefully I will have some cool case studies very soon.\n",
      "url": "/archives/lca/50-freeplay-debrief",
      "date": "2007-08-23T22:43:58+10:00",
      "categories": ["games","lca"]
    },
  
    {
      "title": "Summer comes to an end, but it’s not over.",
      "excerpt": "Well, not really – I’m in the Southern Hemisphere and Summer is yet to arrive. What I am ranting about is the “Google Summer of Code”. This year, much to...",
      "content": "Well, not really – I’m in the Southern Hemisphere and Summer is yet to arrive. What I am ranting about is the “Google Summer of Code”. This year, much to our suprise Thousand Parsec the space strategy empire building game I founded “oh so many years ago”, was selected to become a mentor organisation.\n\nWe had 3 students accepted into the program and then Google also agreed to fund an extra student outside the program! Sadly only 3 out of these 4 students passed the mid-term evaluation, but the work they have been doing is really, really cool!\n\nThis last 6 months have been really rewarding personally. I started the project in 2001 and it has been a long slog to grow the project past just the other founder and me. With all these new people who are actively excited about the project (and not just the SoCers!) it has been a huge relief that time over the last 6 years has not been wasted. With myself recently graduating, the nature of my contributions to the project is going to change and it’s nice to know that others will be helping to keep the project alive.\n\nIt use to be the case that if I stop working on the project, no progress would be made. Now almost everytime I turn on the computer I see new commits. When I go to our gitweb there is always a lot of green. It’s an absolutely wonderful feeling!\n\nThe next 6 months are also going to be really exciting, with TP04 reaching the final stages of specification, a new website reorg, a bunch of new games and an almost complete rewrite of the primary client. We might actually start attracting users :).\n\n",
      "url": "/archives/uncategorized/49-soc-end",
      "date": "2007-08-17T12:08:53+10:00",
      "categories": ["summer-of-code","tp","uncategorized"]
    },
  
    {
      "title": "Exotic VPN support!",
      "excerpt": "It would be cool is someone added support to network Network Manager for the following “VPN”s. nstx or iodine, tunneling over DNS ssh, tunneling over ssh http, tunneling over that...",
      "content": "It would be cool is someone added support to network Network Manager for the following “VPN”s.\n\n  nstx or iodine, tunneling over DNS\n  ssh, tunneling over ssh\n  http, tunneling over that “wonderful” web protocol\n\n\nIt would be also good if we could enter proxy servers for particular locations – in many locations in Australia they are mandatory.\n",
      "url": "/archives/ideas/7-nm-vpn",
      "date": "2007-08-17T08:36:42+10:00",
      "categories": ["ideas"]
    },
  
    {
      "title": "Resume",
      "excerpt": "\nHere is a copy of my Resume. You can find it in PDF form or plain TXT form.\n",
      "content": "Here is a copy of my Resume. You can find it in PDF form or plain TXT form.\n",
      "url": "/archives/uncategorized/48-resume",
      "date": "2007-08-17T08:29:45+10:00",
      "categories": ["uncategorized"]
    },
  
    {
      "title": "Going to FreePlay",
      "excerpt": "Well, I am going to FreePlay this weekend. I will be giving a talk about FOSS Game Development called “The best things in life are free”. If you are in Melbourne and have nothing to do on Saturday, w....",
      "content": "Well, I am going to FreePlay this weekend. I will be giving a talk about FOSS Game Development called “The best things in life are free”. If you are in Melbourne and have nothing to do on Saturday, why not come a long and see some cool talks?\n\nI am running the Gaming Miniconf at LCA 2008 (I also ran it at 2007) which I will be advertising. I have also managed to organised to have linux.conf.au 2008 postcards given out at the registration desk, which is pretty cool.\n",
      "url": "/archives/lca/46-freeplay",
      "date": "2007-08-15T21:16:53+10:00",
      "categories": ["gaming-miniconf","lca"]
    },
  
    {
      "title": "Skimpy, Scheme in Python",
      "excerpt": "For something a bit different, I decided to work on making embedding Scheme in Python easier. I’ve previously been using the cool PyScheme, however it hasn’t been updated in quite a long time (since.....",
      "content": "For something a bit different, I decided to work on making embedding Scheme in Python easier. I’ve previously been using the cool PyScheme, however it hasn’t been updated in quite a long time (since 2004) and is quite slow.\n\nThe reason I would want to do something crazy like this is that Thousand Parsec use a subset of Scheme called TPCL. The is used to transmit information from the server to clients about rules for creating designs. Servers also need to be able to parse TPCL for “dumb clients” which can’t parse TPCL for themselves.\n\nRecent developments by DystopicFro on his Summer of Code project, a Ruleset Development Environment have meant that he also needs the ability to parser TPCL (and specifically the ability to detect errors). This got us chatting about PyScheme and it’s inadequacies.\n\nWhat I have decided to do is create a module called SchemePy (pronounced Skimpy). On platforms where speed is of no concern, we will fall back to using a modified version of PyScheme. However, we can also use C scheme systems such as Guile (or other libraries) to improve speed.\n\nWhy have multiple implementations? It stops us from using custom things in one scheme implementation which are not compatible with other implementations. It also makes installation easier for the user, as they are much more likely to already have a compatible scheme library installed. Different scheme’s also have different speed advantages.\n\nSo far I have got the Guile wrapper 95% working. It’s written mainly in Python using ctypes. I needed a small C helper module as well because of the extensive Macro’s used by Guile. So far, you can convert between Guile and Python types easily, you can register Python functions into the Guile context and exceptions are caught. There is also the ability to pass  python objects thru the Scheme environment to Python functions. I would like to thank the guys who hang out on #guile for all their help, it has made doing this wrapper much easier.\n\nI’m happy enough with the outcome. My guess it will be between 10 and 20 times faster then PyScheme, but I’ve yet to do any benchmarking. I’m going to move to wrapping mzscheme too soon enough. It should be much easier to do now that I have gotten most of the hard stuff sorted out. I think a lot of it will be common between the implementations.\n\nWhat I really need to do is get a test-suit working. Once I have more then one implementation working  it will be very important to make sure that they all work the same way, the only way I can see to do that properly is to have a test suite which I can run every implementation against.\n\nOne thing which might be really cool to investigate is using a similar system to lython which compiles Lisp s-expressions directly to python byte code. If this was done well it should be the fastest method as it would mean no type conversion needs to be done.\n\nOverall this has been quite a good learning experience. I have improve my ctype skills quite a lot (this wasn’t my first ctypes wrapper, that being libmng-py, a Python wrapper around libmng). I also understand how Scheme works quite a lot better now.\n",
      "url": "/archives/tp/45-schemepy",
      "date": "2007-07-23T03:06:02+10:00",
      "categories": ["tp","scheme","python"]
    },
  
    {
      "title": "I’m free!",
      "excerpt": "I have been meaning to post here for quite a while but have been busy doing nothing.\nAs anyone who chats on IRC with me knows, I got my “Eligible to Graduate” letter from my University. This means th....",
      "content": "I have been meaning to post here for quite a while but have been busy doing nothing.\n\nAs anyone who chats on IRC with me knows, I got my “Eligible to Graduate” letter from my University. This means that as of the 31st of July I will officially have both a “Bachelor of Engineering (Information Technology and Telecommunications)” and a “Bachelor of Arts” in Philosophy. I’ve been studying at Uni for 5+1/2 years, so I will be glad to finally leave. The last 6 months of Uni have been the most enjoyable because I have spent most of the time working on my Honours project, I did pretty well (ended up with 94% which is a High Distinction).\n\nI’ve been working on a little contract that I picked up off the Linux Australia jobs list. Sadly it’s not open source, but it should tide me over for about a month. I badly need to update my Resume as I haven’t needed it for about 4 years.\n\nI’m still yet to calculate the numbers to work out if going commercial with my Honours project is going to be worth pursuing. David Rowie has been giving me some advice and templates to work with. He has been working embedded Asterisk which is very cool.\n",
      "url": "/archives/uni/44-freeatlast",
      "date": "2007-07-19T16:01:53+10:00",
      "categories": ["uni"]
    },
  
    {
      "title": "My Honours Project – All done!",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "Well, as of Wednesday I have completed my Honours project. On Wednesday I gave my final presentation for the project and it went really well (at least for me).  It is a great relief to have finally “finished” something which I have been working on for a good 10 months of my life.Â  I have spent the last couple of days recovering.\n\nThe day was way more stressful then it needed to be. I needed quite a bit of time to setup for my presentation (I need to setup 8 telephones at various locations and get the power supply and such working. However, the room I had been scheduled to give my presentation room which was being used all morning. It then took us ages to find a room which I could use, we ended up using the student study room.\n\nThe demonstration worked pretty well. I had two problems, but neither of them where significant or really noticed by the moderator or supervisor.\n\nMy documentation turned out pretty good too. I was required to produce two documents, the first was a “ Final Report” which covered what I actually did. The second was as a “Technical Document”, my supervisor suggested I do this in the form of a data sheet for my project. I’ve attached both the documents here for people to have a look over.\n\nSo where do I go from here? Most people just stop once they had done their final project. The University has some strange rules about collaboration on Honours projects, so I wasn’t able to do this project as an piece of Open Source Hardware. Now however that restriction has been lifted, over the next couple of months I hope to move it all to Open Source.\n\nIt also turns out that a guy working on embedded Asterisk lives just around the corner from me. I invited him along to my presentation and he is now helping me pursue getting this device on to the market.\n\nAt the current price point, it looks likes is it possible to do the 8  FXS channel USB device for around $US 300. Hopefully, we can get this down even lower, ultimately my end target is for it to be half that price. If you are interested in the device (either as a developer or as an end user) I would love to hear from you.\n",
      "url": "/archives/uni/41-cfxs-all-done",
      "date": "2007-05-19T16:26:06+10:00",
      "categories": ["uni"]
    },
  
    {
      "title": "Almost there..",
      "excerpt": "Well, I’ve almost finished my Honours project, less then a week left until it’s done. I have been working on this project officially for almost a year now, however it’s original inception occurred ab....",
      "content": "Well, I’ve almost finished my Honours project, less then a week left until it’s done. I have been working on this project officially for almost a year now, however it’s original inception occurred about 2 and a half years ago.\n\nFor those who don’t know, my project is to build a budget 8 line computer to telephone interface. My hope was to eventually be able to sell the device for $US 150, allowing somebody to interface a whole house cheaply. The design is nothing more then a glorified ADC/DAC device – the computer its connected to does all the work.\n\nI have built a prototype board which is working a lot better then expected, you can see it below. I will however be glad when I can get back to just working on the board instead of writing all this documentation. Anyway, I should get back to it.\n\n\n",
      "url": "/archives/pcb/40-almost-there",
      "date": "2007-05-09T21:28:16+10:00",
      "categories": ["pcb","uni"]
    },
  
    {
      "title": "TV Idiots",
      "excerpt": "People are continually talking about the end of Television. The TV executives blame people downloading off the Internet via “peer to peer” for there gradual decline. TV series are a huge part of most....",
      "content": "People are continually talking about the end of Television. The TV executives blame people downloading off the Internet via “peer to peer” for there gradual decline. TV series are a huge part of most television programming, viewers get hooked and then continually tune in.\n\nHowever, the idiots who schedule TV series are ruining them for everyone. TV series need consistent time slots to keep building suspense and grow viewers. Having inconsistent breaks and time slots ruins that processes and drives ratings down. How are people going to know to tune in to the program if they can never be sure it’ll be on?\n\nInconsistent breaks and timing killed Lost and Prison Break for me, the breaks ruined the suspense both programs rely on and I’m no longer watching either. The recent break in Heroes really dampened the enthusiasm I had for the program.\n\nAnother huge problem which happens very often in Australian TV is that they mix old episodes with new episodes to make seasons longer. This confuses continuing stories and characters which have died randomly reappear. As well, they continually advertise things as new episodes when they are actually airing repeats. They are particularly bad with programs like NCIS or Law and Order.\n\nWhy are commercial TV stations trying to destroying themselves?\n\nCompare this to our national broadcaster ABC, which now has full VOD casts of all their productions. I don’t have to worry about missing things like the Chaser as I can just go and download them later.\n",
      "url": "/archives/diary/38-tv-idiots",
      "date": "2007-04-25T21:36:04+10:00",
      "categories": ["diary"]
    },
  
    {
      "title": "Using Tailor to go to git",
      "excerpt": "As our code repositories for Thousand Parsec where down anyway (because of the host being compromised), we decided to do something we had been thinking about for a while.....",
      "content": "As our code repositories for Thousand Parsec where down anyway (because of the host being compromised), we decided to do something we had been thinking about for a while. We converted all our code repositories to git.\n\nWe had previously been using darcs, however the unbounded memory usage was getting out of hand. The straw which broke the camel’s back was when nash couldn’t even checkout the web repository because darcs kept getting killed by the Out of Memory Manager (on a machine which has more then 512Mb of RAM).\n\nAfter much discussion we decided to move to git. The biggest reason we choose to use git was that we didn’t want to get stuck with another non-mainstream SCM system. With large people like Xorg, the Linux Kernel and many others, I’m pretty sure git will become the SCM of choice in the near future.\n\nAs I had previously had a large amount of experience converting the darcs repositories to subversion (for our mirrors), I was put in charge of converting the repositories to git. As previously, I used Tailor.\n\nThe first problem is that darcs has git repository support. The suppose solution to this is using disjunct working directories. However, git did not appear to like this, I need to hack up the source code to get it to work. I’ve submitted the patches back the Tailor repository and they have already been included!\n\nAnother problem I ran into was that I don’t have a machine which has enough memory to convert the web repository! I don’t have a computer with more then 768mb of ram (feel free to send me some more if you want! :P). Luckily thanks to the Summer of Code, a student who goes by the name cherez (who I was very disappointed we didn’t have enough slots to select) gave me a shell account on his machine with 4Gb of Ram.\n\nAs a result of converting to git, I was also able to merge the development and stable branches (of both tpclient-pywx and libtpclient-py) into one repository. This was a little bit trickier then I would have liked, it involved finding the branch point manually and then telling tailor about it, in the end it worked out. You can find a copy of the config I used for branching here.\n\nYou can see the results of our conversion at our gitweb.\n\nI have to say, I’m amazed by git. Every single operation is very, very fast, I guess it’s why they called themselves “Git – Fast Version Control System”. Another thing that amazes me is the size of the repositories, under darcs our repositories where about 4Gb, with git they are around 200Mb! Overall, I’m happy with our choice.\n",
      "url": "/archives/tp/35-using-tailor-to-go-to-git",
      "date": "2007-04-21T08:17:42+10:00",
      "categories": ["tp","rcs-darcs","tailor"]
    },
  
    {
      "title": "Doh! Pictures gone…",
      "excerpt": "The server I run my blog on got hacked. In a hurry to make a backup of everything before taking the site down I forgot to copy across all the pictures in my blog. I’m now hosting my blog on wordpres.....",
      "content": "The server I run my blog on got hacked. In a hurry to make a backup of everything before taking the site down I forgot to copy across all the pictures in my blog. I’m now hosting my blog on wordpress.com so I don’t have to deal with all the maintenance problems of running WordPress myself.\n",
      "url": "/archives/uncategorized/34-doh-pictures-gone",
      "date": "2007-04-14T05:48:54+10:00",
      "categories": ["uncategorized"]
    },
  
    {
      "title": "Reading News in the future!",
      "excerpt": "\nToday the RSS feed reader I use called Liferea displayed something very strange. I’ve included a screenshot for you all to see.Yay for numbers wrapping around! \n\n\n",
      "content": "Today the RSS feed reader I use called Liferea displayed something very strange. I’ve included a screenshot for you all to see.Yay for numbers wrapping around!\n\n \n",
      "url": "/archives/uncategorized/28-liferea-bug",
      "date": "2007-03-24T13:57:07+10:00",
      "categories": ["uncategorized"]
    },
  
    {
      "title": "Summer of Code Woo!",
      "excerpt": "As everyone should know by now, Thousand Parsec got accepted as a Google Summer of Code.\nIt’s been very hectic, but a load of fun. This graph shows how much extra traffic the SoC has produced. Our IR....",
      "content": "As everyone should know by now, Thousand Parsec got accepted as a Google Summer of Code.\n\nIt’s been very hectic, but a load of fun. This graph shows how much extra traffic the SoC has produced. Our IRC channel which normally has about 9 people on it has had around 20.\n\nI’ve been really busy commenting on applications and introducing the newbies. It’s really been a lot of work but I think it will be worth it in the end. The amount of progress which could be made in the 3 months SoC runs for is really huge. A $US 4500 payment is also a good incentive to actually finish what you said you would too.\n\nWe have 9 application so far, of which 8 are of very high quality. I would really like to see 30 applications in total, however being realistic we will probably only get around 20.\n",
      "url": "/archives/tp/27-summer-of-code-woo",
      "date": "2007-03-21T23:36:31+10:00",
      "categories": ["summer-of-code","tp"]
    },
  
    {
      "title": "I want a Cool Desktop!",
      "excerpt": "I upgraded my laptop to Feisty this weekend to see if there was anything good. One thing I have been hoping for is to get Beryl running on this laptop.\nI tried a couple of times to get it working, ho....",
      "content": "I upgraded my laptop to Feisty this weekend to see if there was anything good. One thing I have been hoping for is to get Beryl running on this laptop.\n\nI tried a couple of times to get it working, however it starts of fine and then goes down hill. It just seems that my graphics card which is an evil Intel Extreme 855 just isn’t fast enough.\n\nThere are two main reasons I want Beryl,\n\n\n  The Scale Effect, this is where you put your mouse up in the top corner and all your windows are laid out so you can easily select the one you want.\n  Task Bar window previews, this is where you mouse over a task bar item and a little preview of the item appears. This again makes it easy to switch tasks.\n\n\nThere are also two “bugs” which prevent me from using beryl even if it worked.\n\n\n  I have an auto hide gnome panel on the right hand side of my desktop. I use it to display “status” about my computer and my notification area is also there. This panel doesn’t pop-up when Beryl is running, it appears to be caused by the edge switcher which allows you to rotate the cube.\n  I also use the Deskbar Applet a huge amount. It’s really handy to type Ctrl-F3 and get a box you can use to do all sorts of things. (I use it mainly as a glorified run box).\n\n\nI have to wonder however, these features shouldn’t really need a 3d desktop. For live preview they would, but I don’t really care about seeing my Video’s or 3d applications running while I’m just trying to find them. I guess it’s comes down to, 3d hardware is cheap, programmer time is not, hence it’ll only be done in 3d.\n\nOn a side note, I do like a bunch of new features in Feisty,\n\n\n  Suspend is fast again! It takes less then 3 seconds to get back to my desktop when coming our of Suspend to Ram. Previously it would take up to a minute!\n  New gaim is cool. A lot of the small annoyances I had with the gaim in Edgy have been fixed.\n  It boots faster. Not that I reboot often, with Suspend to Ram I hardly ever reboot.\n  Automatic Codec downloads. Totem will now ask me to install the correct plugin packages to play media it can’t play.\n  Cleaner default theme. The default theme for gnome is that little bit nicer and cleaner.\n  Newer Liferea.\n  Ephiphany has Titles in the URL drop down.\n\n\nOverall, it’s not a major change, just a continually progress towards perfection.\n",
      "url": "/archives/highlights/26-i-want-a-cool-desktop",
      "date": "2007-03-11T05:42:05+10:00",
      "categories": ["highlights"]
    },
  
    {
      "title": "eagle2geda Symbol Converter",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "\n\n\nWell, after the last post I thought I would give the Eagle to gEDA converter a try. At first I thought about reverse engineering the Eagle format and then output the result. This would have the advantage that you wouldn’t need to run Eagle to do this. I decided that this would be too much work and was about to give up, but then I remembered that Eagle has quite a good scripting language called ULP. About 2 hours later I have this script which converts “symbols” in an Eagle library to a gEDA symbol. As this seems so easy I may continue and see if I can make a converter for a complete Schematic and PCB. I’ve attached a picture of a symbol in both gschem and Eagle at the same time.Hope other people find this useful too.\n\n\n\n\n",
      "url": "/archives/pcb/23-eagle2geda-symbol-converter",
      "date": "2007-03-07T14:09:50+10:00",
      "categories": ["pcb"]
    },
  
    {
      "title": "Eagle for PCB",
      "excerpt": "Recovered from Wayback Machine archive",
      "content": "\n\n\n\nFor the last 3 days I have been working on routing the Honours project. For the design I use CadSoft Eagle. However, it’s been annoying me quite a bit.Here is just a shortlist of things,\n\n\n  You can’t change pads unless you modify a library. At my Uni they use a rivet system for doing plated through holes, these means that the holes and pads have to be a certain size as you have to solder the rivets to the pads. This means that you often want to change a hole and pad for a particular instance of an IC so that it can have a rivet put in it.\n  Polygon Pours can not be put in “outline” mode. This makes it quite annoying, as you want to put in the GND plane first so it removes all the GND airwires, but then you are constantly using the “rip-up” command so you can see where you are putting signals.\n\n\nI’m thinking of moving to gEDA because it’s free software, I would no longer be restricted with what I do. However, it’s quite hard to use and doesn’t come with the extensive libraries that Eagle has.\n\nI’m thinking that I’m going to write a ULP script which converts EAGLE stuff to the format used by gEDA. We’ll see what happens.\n\n\n\n",
      "url": "/archives/ideas/21-eagle-for-pcb",
      "date": "2007-03-07T11:53:32+10:00",
      "categories": ["ideas","pcb"]
    },
  
    {
      "title": "Graphical Programming?",
      "excerpt": "I spent today at a “conference” called NI Days, which was really just a day long pitch by National Instruments about their LabView software. It was however quite interesting, the two parts which caug....",
      "content": "I spent today at a “conference” called NI Days, which was really just a day long pitch by National Instruments about their LabView software. It was however quite interesting, the two parts which caught my attention where the “graphical programming” and the “dll importer”.\n\nThe graphical programming worked by creating graphical boxes (which represent functions) and then wiring input and output together. The system looked like a very good for doing parallel and concurrent systems.\n\nThe problem with our current programming languages, like Python is that it doesn’t scale well, both in performance and code development time, to multiple processor and concurrent systems. Things like stackless and greenlets are attempts to make this much easier.\n\nThe problem with these “solutions” is that when using their system is then very hard to visualise where data is going and what critical paths exist (IE Where the system will block waiting for data). Graphical Programming would have a real advantage in this area. In the world of human resource scheduling, visualisation processes have long been used in the form of Gantt charts (or Gnat chart as my brain keeps making me type).\n\nAnother problem with these systems is they are based around message passing. When you want to move around and process large blocks of continuous data (such as when you are doing Software Defined Radio – which would otherwise fit perfectly into the blocked based concurrent systems) this sucks. The main reason the systems are based around message passing is because it gets rid of the problem of locks. Locking is the cause of most headaches in concurrent systems and involves horrible corner cases like “thread a has lock alpha and wants lock beta but thread b has lock beta and wants lock alpha”. By having data “flow” out of one system into another via a queue like structure (probably a circular queue for most systems) means many of these locking problems go away (as a queue is inherently lock safe).\n\nThe other thing which caught my eye was the “dll importer” which look suspiciously like how the ctypes code generator works. The importer uses the C header file to figure out how to call C code in a DLL. It then “automagically” creates the graphical elements which you then places and wire like anything else in LabView.\n\nI think you could easily build a basic graphical programming language very quickly using some type of existing canvas (maybe Dia, Inkscape or wxFloatCanvas). It’s then just a matter of doing a ctypes (which uses FFI and gcc-xml) like system to automatically generate the graphical elements for currently existing code. You would probably want to output run on something like the Erlang VM (Erlang is a cool language with a syntax designed by retarded monkeys) so you have access to microthreads. The result would be something which should be easy to use, scales well and already has a huge amount of code which can be used.\n\nActual implementation is left up to the reader as I just don’t have the time to do it :/. I need to concentrate on Thousand Parsec, I may come back to it at some later date, but I doubt it. If you do end up doing something – please send me a line.\n",
      "url": "/archives/ideas/20-graphical-programming",
      "date": "2007-03-01T11:59:16+10:00",
      "categories": ["ideas"]
    },
  
    {
      "title": "darcs almost perfect.",
      "excerpt": "Darcs is a really cool SCM system. We use it for Thousand Parsec and I really like all the way it works. However there are some very annoying bugs which keep pissing me off. So now I’m going to rant.....",
      "content": "Darcs is a really cool SCM system. We use it for Thousand Parsec and I really like all the way it works. However there are some very annoying bugs which keep pissing me off. So now I’m going to rant about what these problems are,\n\n\n  Using Massive amounts of memory with Binary files\n  Darcs is an absolute memory hog when you try and use it to manage even small binary files. I have seen it balloon to over 700mb on a little 7mb binary file. This keeps biting me in the arse because we are using darcs to manage our web repository. It’s starting to get so bad I’m thinking of switching that repository to subversion. We have already had to convert our media repository to subversion because of this problem :-/.\n  Not using good terminal interaction.\n  Darcs is design to be used interactively. However it crashes if you send it weird control characters or other strange stuff. It also doesn’t let you use the cursor keys to change long message title and such. Currently I have to use the “add long comment” if I want to fix anything in a patch title (which is very annoying for small patches).\n  Darcs being written in Haskel\n  By writing Darcs in Haskel I am unable to try and fix the above bugs. It is also the main reason using Darcs under “alternative” operating systems (such as Windows or Mac OS X) sucks so much (getting a working Haskell compiler is a real chore). Even when you do get it working it doesn’t quite fit properly (and the console IO is even more fragile). Mathematical correctness doesn’t mean you code doesn’t have any bugs. Being unusable is very much a huge bug.\n\n\nIt’s starting to get to the Stage that I’m considering other SCM tools such as Mercurial or maybe even monotone.\n",
      "url": "/archives/rcs/darcs/19-darcs-almost-perfect",
      "date": "2007-02-26T05:07:56+10:00",
      "categories": ["rcs-darcs"]
    },
  
    {
      "title": "Using Tailor – Creating Subversion Repository for Thousand Parsec",
      "excerpt": "To try and get our activity rating up on SourceForge I’m in the progress of trying to mirror our darcs repositories in SourceForge’s SVN repositories.\nThis would also be useful for things like oholh.....",
      "content": "To try and get our activity rating up on SourceForge I’m in the progress of trying to mirror our darcs repositories in SourceForge’s SVN repositories.\n\nThis would also be useful for things like oholh as JLP pointed out. It might make it easier for people to track the development version under Windows/Mac as they wouldn’t need to get a working darcs version.\n\nTo do this I need to use a program called Tailor which lets you convert between a wide range of different SCM systems. It took me a while to get a combination of tailor, darcs and svn which seems to work okay.\n\nWhat I ended up with is the following Darcs to Subversion Conversion script.\n\nEach time you run it, it rebuilds the svn repository from scratch. This was useful during testing so that I could get my comment formatting correct (and fiddle with the other settings).\n\nA ran into another problem however, to use Tailor and get nice author and actual commit date you need the special hook installed. This hook is just an empty pre-revprop-change. However, SourceForge in all their wisdom don’t have support for this yet, there is a pending change request but it hasn’t been touched in about 3 months. Here is hoping they figure out something in the near future. There have been about 20 requests if you do a search for pre-revprop-change.\n",
      "url": "/archives/tp/16-tailor-darcs2svn-tp",
      "date": "2007-02-25T15:01:22+10:00",
      "categories": ["tp","rcs-darcs"]
    },
  
    {
      "title": "Thousand Parsec Protocol Overview",
      "excerpt": "I’ve been planning to try and get tp04 into draft stage for a while now. However the AI competition and RL has kept me really busy so I haven’t got time to do the draft yet....",
      "content": "I’ve been planning to try and get tp04 into draft stage for a while now. However the AI competition and RL has kept me really busy so I haven’t got time to do the draft yet. I am going to however go over some highlights of the new tp04 protocol.\n\nFirstly, what does tp03 currently have?\n\n\n  Dynamic Orders\n  Thousand Parsec servers can define new orders and clients can automatically discover these orders and show the user quite a bit of detail about what arguments should be given to the order.\n  Comprehensive Design Support with tpcl\n  Designing things is a very important part of most empire building games. tp03 includes support for building designs out of “components”, these components dynamical describe their properties and requirements. They can be either calculated on the server or calculated on the client. It is quite possible to have components which require other components, forbid other components via either specific exclusion or by using property values.\n  Dynamic Resources\n  Resources which are used for doing things are dynamical described by the server.\n  Message and Board system\n  Support for a wide variety of messages including referencing objects related to a message (IE This message came from this object). Servers can also have both private and public boards.\n  Partial Design Discover\n  Although no server currently implements a system where as you can only discover partial information about enemy designs, this option is total supported.\n\n\nThe next version of the tp protocol tp04 will have a bunch of new features. It is going to be built in an incremental way based on tp03. All the highlights of tp03 will still exist in tp04.\n\nSome of the new highlights include.\n\n\n  Full XML protocol specification\n  The protocol will be completely specified in an XML document. This will allow more dynamic languages (such as Python, Ruby and PHP) to read in the protocol document and dynamical create the correct data. This doesn’t mean our good documentation is going away (for those people who want to implement it the “hard way”), instead it will be more accurate and contain better linking, lot more useful tables and even an index. The documentation will all be generated using XSLT from the protocol XML document so it will also always be current.\n  Meta Protocol definition\n  A definition on how to talk the “meta protocol”, IE talking to the metaserver and find local games will be specified. It will be almost identical to the current protocol specified separately.\n  Filter Support\n  The protocol will support filters such as encryption and compression (or even a 32bit aligned strings filter), there will be a way to negotiate which filters to use.\n  Difference Support\n  The protocol will include (and servers will be required to support) a proper method for downloading “what has changed” lists. This will be extended from the current “get id sequence” stuff but made so it doesn’t require downloading every single ID in the universe to find out the differences.\n  Dynamic Objects\n  Like how servers can define new a interesting order types, with tp04 servers will also be able to do the same for objects. A wide variety of object properties types will exist, from Graph like properties to just plain strings. This will rapidly allow many more advanced rulesets to exist.\n\n    \n      Old Data support\n      As a side effect of Dynamic Objects, object properties will be able to be “aged”. This means that if you could detect/determine the value in the past, but can’t determine the value now, the client will be able to understand this.\n      Multiple Instruction queue support\n      As another side effect of Dynamic Objects, objects will be able to have multiple instruction queues. These will allow for things like “standing battle orders” and “research queues” (and probably plenty of other things I can’t think of at this very moment).\n      Media support\n      The current “media support” is just a hack in tpclient-pywx. The dynamic objects will allow proper specification of what media should be used for objects and such.\n    \n  \n  Research support\n  The protocol will include support for figuring out which “Research options” are available. It will support a wide range of research methods too (from researching for a specific object, to researching in a general area).\n  EOT Support\n  There will be support for things like saying “I’m Done” and “Please end the turn now.”. This will mean we are no longer just stuck with the EOT at a certain time problem like in tpserver-cpp (or when admin runs a special program like in tpserver-py).\n  Frame Type Versions\n  Support for changing frames (in a backward compatible way) separately. This will allow better updates of the protocol without having to do a complete new version.\n\n\ntp05 will very much be another incremental version on top of tp04, the following is a list of what is planned for tp05 (and will not be included in tp04).\n\n\n  History Support\n  Servers should start worrying about storing history as it will definitely be added in tp05.\n  Trading or Diplomacy\n  Diplomacy will still be able to be done via sending messages to each other, however the server will not support guaranteed diplomacy and trading. (IE If a person says they won’t attack you, the server will have no knowledge of this and they could still attack you.)\n  Player / Race Separation\n  There will be no specific support for a player controlling multiple races or a race having multiple players until tp05.\n  Other stuff?\n  Probably plenty of other stuff which I have forgotten.\n\n",
      "url": "/archives/tp/15-tp-protocol-overview",
      "date": "2007-02-23T01:21:13+10:00",
      "categories": ["highlights","tp"]
    },
  
    {
      "title": "Compiling tpserver-cpp under windows – Part 3",
      "excerpt": "Well here is a binary, I have tested under Windows 2000 and Windows XP. It should also run under Windows Vista too, but I don’t have a copy of it to test with.\nIt currently only supports the modules.....",
      "content": "Well here is a binary, I have tested under Windows 2000 and Windows XP. It should also run under Windows Vista too, but I don’t have a copy of it to test with.\n\nIt currently only supports the modules it has been linked against. This means that it will only support MiniSec and no persistence modules.\n\nYou can download it using the following link Windows Binary of tpserver-cpp.\n",
      "url": "/archives/tp/13-compiling-tpserver-cpp-under-windows-part-3",
      "date": "2007-02-21T12:13:06+10:00",
      "categories": ["tp"]
    },
  
    {
      "title": "Compiling tpserver-cpp under windows – Part 2",
      "excerpt": "\nWell it’s finally done. I managed to get tpserver-cpp to compile under Windows. I just need to fix a few things and then I’ll upload “unsupported” binaries.\nHere is a picture of it all working! \n",
      "content": "Well it’s finally done. I managed to get tpserver-cpp to compile under Windows. I just need to fix a few things and then I’ll upload “unsupported” binaries.\n\nHere is a picture of it all working! \n",
      "url": "/archives/tp/12-compiling-tpserver-cpp-under-windows-part-2",
      "date": "2007-02-20T12:18:11+10:00",
      "categories": ["tp"]
    },
  
    {
      "title": "Compiling tpserver-cpp under windows.",
      "excerpt": "I had hoped that compiling tpserver-cpp under windows would be easy. Turns out I was very, very wrong. I am even going the easy route of using Cygwin to handle all the select/signal/pthread stuff whi....",
      "content": "I had hoped that compiling tpserver-cpp under windows would be easy. Turns out I was very, very wrong. I am even going the easy route of using Cygwin to handle all the select/signal/pthread stuff which wouldn’t work easily under Microsoft products.\n\nCompiling it was relatively easy once I had all the dependencies installed. Cygwin comes out of the box with guile (1.6 and 1.8) which was the only dependency I was concerned about. (Everything else is pretty standard.)\n\nHowever, this is where I ran into a problem. The server uses shared libraries to contain important modules like game rule data and persistence. This doesn’t work to well under Windows. At first I should it should just be an easy step of convincing the autotools to build .dll versions of the modules. Turns out dll’s aren’t at all like .so files. They have to have “no unresolved symbols” which makes it very hard to do what tpserver-cpp does (IE modules use the core functions in the main server like the logger).\n\nNext step was to find out what other applications did, I found this library made by libtool guys called ‘libltdl’ which lets you “fake” dlopen stuff. So I “ported” tpserver-cpp to use this instead of just a raw dlopen. (This should also make tpserver-cpp more portable to such weird operating systems as BeOS and HPUX.) Dunno if Lee will like it or not 🙂\n\nStill not done yet but it’s looking much more hopeful.\n",
      "url": "/archives/tp/10-compiling-tpserver-cpp-under-windows",
      "date": "2007-02-20T07:39:04+10:00",
      "categories": ["tp"]
    },
  
    {
      "title": "Swap Nice?",
      "excerpt": "It would be nice if you could say “swap out these applications at a last choice”.\nThe main reason for this is that I use the deskbar application quite a lot. I would really like the system not to swa....",
      "content": "It would be nice if you could say “swap out these applications at a last choice”.\n\nThe main reason for this is that I use the deskbar application quite a lot. I would really like the system not to swap it out so that it is always really responsive.\n\nSearching google doesn’t turn up anything all that useful. I did recently find memlockd which would be quite useful for Servers.\n",
      "url": "/archives/ideas/5-swap-nice",
      "date": "2007-02-18T09:20:41+10:00",
      "categories": ["ideas"]
    },
  
    {
      "title": "Resume",
      "excerpt": "\n",
      "content": "\n",
      "url": "/archives/uncategorized/3-resume",
      "date": "2007-02-18T08:02:57+10:00",
      "categories": ["uncategorized"]
    },
  
    {
      "title": "Gnome Improvements",
      "excerpt": "Here are a bunch of things which I would love to see added to gnome to make it much easier for me to use.\n\nAdd the ability to drag around the items in the task bar like you can in the tabs in the bro....",
      "content": "Here are a bunch of things which I would love to see added to gnome to make it much easier for me to use.\n\n\n  \n    Add the ability to drag around the items in the task bar like you can in the tabs in the browser\n  \n  \n    Add the ability to lock panels so you can’t drag them about\n\n    This is needed because when the computer gets loaded the mouse interprets the clicks as click and drag. It is also a problem were people aren’t skilled with the mouse (IE hold and drag the item). The means panel ends up getting dragged about. I have the same frustration under older versions of windows.\n  \n  \n    Network applets should display information about the connection status in tool tip (IE IP Address/essid/etc)\n\n    Everything else seems to display useful information. The CPU applet displays the current CPU speed. The laptop temp applet displays the current temperature. Why doesn’t the network applets show the current configuration?\n  \n  \n    Memory improvements, I know gnome is already working on this but 256MB is painful to use.\n\n    Recently the 512MB stick of ram in my laptop died. This means that I’m currently restricted to 256MB of ram. Gnome positively sucks with this much ram.  This is annoying because XP runs quite nicely with this amount.\n\n    Evolution and Epiphany are the to biggest hogs but all the other little things really add up. Disabling the SPAM filtering in Evolution seems to have make a fairly big difference.\n\n    Not to mention my video card has to steal main memory (It’s a Intel i855, I have to restricted to 32mb).\n\n    To make matters even worse I have a very very slow hard drive (4200rpm, 1.5 Inch drive) this makes swapping even more painful then most people.\n  \n  \n    Disk access improvements, things seem to access the disk a lot more then needed.\n\n    My hard drive seems to do a lot of work even when not swapping. Doing a “echo 1 &gt; /proc/sys/vm/block_dump” shows that a lot of things are accessing the hard drive when they are idle or not doing anything.\n\n    The hard drive is one of the biggest consumers of battery life in the laptop. Reducing the accesses would make everything faster. I guess this is counter reducing memory usage however.\n  \n\n",
      "url": "/archives/ideas/6-gnome-improvements",
      "date": "2007-01-03T12:59:53+10:00",
      "categories": ["ideas"]
    },
  
    {
      "title": "Linux.conf.au Proposal Suggestions",
      "excerpt": "Firstly, every LCA (linux.conf.au) I have been to has been really brilliant. I’ve been to 6 other conferences and LCA is my definite favourite. I think that for the conference to be this consistently....",
      "content": "Firstly, every LCA (linux.conf.au) I have been to has been really brilliant. I’ve been to 6 other conferences and LCA is my definite favourite. I think that for the conference to be this consistently good, there must be because of a huge effort by the organisers and LA.\n\nI’m interested to find out if any of the following suggestions have been considered and why they have possibly been discarded? I’m sure there are obvious reasons I have missed because I have never been part of either the LA committee or the LCA organisers.\n\nA possible “People Choice” track. This would be a track were the talks are selected by the LA members directly. The biggest problem with this type of selection is that it can rapidly turn into a popularity contest. I think this would however be a good way for the LCA committee to check that they are actually providing what people want, by looking at what people are actually voting for.\n\nWhy are the submissions not publicly accessible? Having public submissions would have numerous benefits,\n\n\n  People would be able to compare their own submissions to others and self evaluate their quality\n  Allows the community to check the proposals for correctness (IE Person A has actually been involved with projects they say they are)\n  Allows the community to see all the cool stuff which missed out on being in the conference\n  Allows the community to make sure that the committee is not “playing favorites” (not that I believe that they ever would)\n\n\nThe proposals had to be submitted under an Open Source license anyway so that should not be a problem.\n\nFrom people’s blogs I know that you only get about 5 minutes per submission. This doesn’t give you much time to write any type of feedback. However, I think a big part of any learning process is getting feedback on your work. A good start would be a set of check boxes which say something like:\n\n\n  The content of this talk is not related to the conference\n  The content is of proprietary nature\n  The content is still too immature\n  Could not find more information on content\n  Not enough information for informed decision\n  Proposal to long, not enough time to read whole thing\n  Not enough specific detail\n  Speaker doesn’t have enough experience speaking\n  Talk better suited for a Miniconf\n  Talk by other speaker already covered the content\n  etc….\n\n\nOn another feedback note, during the conference it would be nice if there was a way to provide feedback on the talks you attend. I seem to remember there being something similar to this in the past but my memory is failing me.\n",
      "url": "/archives/lca/8-lca-proposal-suggestions",
      "date": "2006-11-19T11:25:58+10:00",
      "categories": ["lca"]
    }
  
]