<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>sigmaris.info</title>
    <link>http://sigmaris.info/blog/</link>
    <description>Recent content on sigmaris.info</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 11 Jan 2025 19:21:35 +0000</lastBuildDate>
    <atom:link href="http://sigmaris.info/blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>U-Boot for ayn Odin</title>
      <link>http://sigmaris.info/blog/2025/01/ayn-odin-u-boot/</link>
      <pubDate>Sat, 11 Jan 2025 19:21:35 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2025/01/ayn-odin-u-boot/</guid>
      <description>&lt;p&gt;Last year, I picked up a new &lt;a href=&#34;https://www.ayn.hk&#34;&gt;ayn&lt;/a&gt; Odin gaming handheld, and ended up working on installing Linux on it (regular Linux, not Android). I thought the process and things I learned during it would make for some good blog posts, so part of the way through the process I started writing down what I was doing, in the hope it would be interesting to others when published. This post will be the first in a series hopefully following the journey in getting full, or at least workable, support for it in upstream Linux so that anyone can install Linux on their Odin device and keep it up to date with the latest emulators, graphics drivers and so on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NanoPC-T6 Notes</title>
      <link>http://sigmaris.info/blog/2024/02/nanopc-t6-notes/</link>
      <pubDate>Sun, 04 Feb 2024 18:29:00 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2024/02/nanopc-t6-notes/</guid>
      <description>&lt;p&gt;Recently I&amp;rsquo;ve been following progress on support for the Rockchip RK3588 System-on-Chip in mainline Linux. I have been using a &lt;a href=&#34;https://www.pine64.org/rockpro64/&#34;&gt;RockPRO64&lt;/a&gt; single-board computer based on Rockchip&amp;rsquo;s previous top-end SoC RK3399 for several years as a media centre running Kodi, on Debian with a &lt;a href=&#34;https://github.com/sigmaris/linux/releases/tag/6.1.23-rockpro64-ci&#34;&gt;mainline Linux kernel&lt;/a&gt; (plus some &lt;a href=&#34;https://github.com/LibreELEC/LibreELEC.tv/tree/master/projects/Rockchip/patches&#34;&gt;patches&lt;/a&gt; for improved multimedia support from the LibreELEC project).&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been pretty satisfied with the support for RK3399 in mainline Linux, as opposed to a vendor BSP based on an old kernel like 4.4. The good level of upstream support is partly due to the fact the RK3399 was used in several Chromebook devices, and thanks to Chromium OS&amp;rsquo;s &amp;ldquo;&lt;a href=&#34;https://www.chromium.org/chromium-os/chromiumos-design-docs/upstream-first/&#34;&gt;Upstream First&lt;/a&gt;&amp;rdquo; policy they contributed a large amount of support for the RK3399 in the open source projects used in Chromium OS, most importantly Coreboot, ARM Trusted Firmware and the Linux kernel.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Multipath routing with Oracle Cloud IPSec tunnel</title>
      <link>http://sigmaris.info/blog/2024/01/multipath-routing-ipsec-tunnel/</link>
      <pubDate>Sat, 06 Jan 2024 13:20:35 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2024/01/multipath-routing-ipsec-tunnel/</guid>
      <description>&lt;p&gt;This weekend I figured out how to set up multipath routing with Oracle Cloud&amp;rsquo;s Site-to-Site VPN. I have been using Oracle Cloud for a while as they have a generous &amp;ldquo;Always Free&amp;rdquo; plan for their 64-bit ARM virtual servers. To create a site-to-site connection between my home network and the Oracle Cloud network, I use their IPSec Site-to-Site VPN service. This type of VPN is made up of two IPSec tunnels, with different endpoints on the Oracle side, though strangely you can only specify one IP address for the endpoint on your side of the tunnels - Oracle calls this the Customer Premises Equipment or CPE. But in any case, the idea is you establish two tunnels to Oracle for redundancy, even though they both go to one endpoint on the &amp;ldquo;customer premises&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making life easier with Yubikeys for browser TOTP</title>
      <link>http://sigmaris.info/blog/2020/01/yubikey-browser/</link>
      <pubDate>Sat, 25 Jan 2020 13:49:00 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2020/01/yubikey-browser/</guid>
      <description>&lt;p&gt;Following on from the post about AWS logins with Yubikey, I also wanted to share another helpful bit of code to automate typing &lt;a href=&#34;https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm&#34;&gt;TOTP codes&lt;/a&gt; from a Yubikey into web pages on macOS.&lt;/p&gt;&#xA;&lt;p&gt;The usefulness of this is hopefully on the decline as websites migrate to &lt;a href=&#34;https://webauthn.guide/&#34;&gt;WebAuthentication&lt;/a&gt; - which interfaces directly with a token like a Yubikey instead of requiring a code input as text, and doesn&amp;rsquo;t require this approach - but TOTP codes are still used by many sites at the time of writing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making life easier with Yubikeys and the AWS CLI</title>
      <link>http://sigmaris.info/blog/2019/12/yubikey-aws-cli/</link>
      <pubDate>Sat, 07 Dec 2019 11:24:00 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2019/12/yubikey-aws-cli/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re working with Amazon Web Services, and want the highest level of security around usage of your AWS account, AWS recommends that you use IAM users instead of the account&amp;rsquo;s root user, &lt;a href=&#34;https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html&#34;&gt;set up Multi-Factor authentication&lt;/a&gt; (MFA) on the IAM users, and then &lt;a href=&#34;https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html&#34;&gt;require MFA for API operations&lt;/a&gt;. Typically this requires the person performing operations on AWS to provide a one-time code when they authenticate to AWS, as well as their more permanent password (for the web console) or their Access Key (for the CLI and SDKs).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automating Debian install in QEMU</title>
      <link>http://sigmaris.info/blog/2019/04/automating-debian-install-qemu/</link>
      <pubDate>Sun, 28 Apr 2019 10:57:12 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2019/04/automating-debian-install-qemu/</guid>
      <description>&lt;p&gt;I recently wanted to automate building a headless Debian testing (codename &amp;ldquo;buster&amp;rdquo;) virtual&#xA;machine, hosted on macOS, and it turned out to be somewhat more complicated than I expected, so I&#xA;thought I&amp;rsquo;d document it here for others&amp;rsquo; benefit.&lt;/p&gt;&#xA;&lt;p&gt;Instead of installing VirtualBox, VMWare Fusion or Parallels which are quite heavyweight virtual&#xA;machine apps, I wanted to run a headless VM using QEMU, which can be installed easily using&#xA;&lt;a href=&#34;https://brew.sh/&#34;&gt;Homebrew&lt;/a&gt;. QEMU now supports hardware accelerated x86 virtualisation on Macs using the&#xA;Hypervisor.framework built in to macOS.&lt;/p&gt;&#xA;&lt;p&gt;The script and preseed file to perform the fully automated install is &lt;a href=&#34;https://gist.github.com/sigmaris/dc1883f782d1ff5d74252bebf852ec50&#34;&gt;here&lt;/a&gt;, and I&amp;rsquo;ll explain&#xA;the details behind what it does in this post.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cross compiling Rust on Mac OS for an ARM Linux router</title>
      <link>http://sigmaris.info/blog/2019/02/cross-compiling-rust-on-mac-os-for-an-arm-linux-router/</link>
      <pubDate>Mon, 04 Feb 2019 22:57:12 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2019/02/cross-compiling-rust-on-mac-os-for-an-arm-linux-router/</guid>
      <description>&lt;p&gt;Wanting to compile a small program I’d written in Rust to run on my home router, I found &lt;a href=&#34;https://github.com/japaric/rust-cross&#34;&gt;this guide&lt;/a&gt; to cross compilation of Rust code. The router is a Netgear R7000 with an ARM processor, running FreshTomato, a distribution of Linux for ARM and MIPS architecture consumer routers. The top of that guide shows an example of installing the cross-compilation toolchain for ARM on Ubuntu, but it required some work to adapt to Mac OS High Sierra, my desktop environment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Make certbot Let’s Encrypt certificates readable by Debian ssl-cert group</title>
      <link>http://sigmaris.info/blog/2019/01/make-certbot-lets-encrypt-certificates-readable-by-debian-ssl-cert-group/</link>
      <pubDate>Sat, 05 Jan 2019 12:09:15 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2019/01/make-certbot-lets-encrypt-certificates-readable-by-debian-ssl-cert-group/</guid>
      <description>&lt;p&gt;On Debian, there’s a group named &lt;em&gt;ssl-cert&lt;/em&gt; which grants access to TLS certificates and private keys, so that services that don’t run as the root user can still use TLS certificates. For example, the PostgreSQL Debian package installs PostgreSQL to run as a user named &lt;em&gt;postgres&lt;/em&gt;, which is a member of the &lt;em&gt;ssl-cert&lt;/em&gt; group, and so it can use certificates and private keys in &lt;strong&gt;/etc/ssl&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The certbot Let’s Encrypt client, by default, makes the certificates and private keys it installs only readable by the root user. There is an &lt;a href=&#34;https://github.com/certbot/certbot/issues/1425&#34;&gt;open issue&lt;/a&gt; against certbot, requesting that on Debian, certbot should follow the Debian standard of making the certificates and keys readable by the &lt;em&gt;ssl-cert&lt;/em&gt; group as well. In the meantime, until that issue is resolved, the ownership can be set by a post-hook which will be run by certbot after obtaining or renewing a certificate.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Encoding DNS URI records for DNSMASQ</title>
      <link>http://sigmaris.info/blog/2018/04/encoding-dns-uri-records-for-dnsmasq/</link>
      <pubDate>Sat, 21 Apr 2018 11:42:08 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2018/04/encoding-dns-uri-records-for-dnsmasq/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.thekelleys.org.uk/dnsmasq/doc.html&#34;&gt;Dnsmasq&lt;/a&gt; can be configured to add various types of records like SRV, PTR, and NAPTR to its internal DNS server by &lt;a href=&#34;http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html&#34;&gt;various directives&lt;/a&gt; in its configuration file. But what if there’s a less common type of DNS record that you want to serve, which dnsmasq doesn’t have a specific configuration directive to handle?&lt;/p&gt;&#xA;&lt;p&gt;Handily, dnsmasq also supports serving arbitrary DNS resource records using the &lt;strong&gt;dns-rr&lt;/strong&gt; option. However you have to supply the binary value of the response encoded in hexadecimal. Here’s an example of how to do this for a URI record with Python. The URI record type is described in &lt;a href=&#34;https://tools.ietf.org/html/rfc7553&#34;&gt;RFC 7553&lt;/a&gt; which describes the binary value of the response (“wire format”) as:&lt;/p&gt;</description>
    </item>
    <item>
      <title>A handy reference list of GSS-API mechanism OIDs</title>
      <link>http://sigmaris.info/blog/2016/12/a-handy-reference-list-of-gss-api-mechanism-oids/</link>
      <pubDate>Mon, 12 Dec 2016 23:56:14 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2016/12/a-handy-reference-list-of-gss-api-mechanism-oids/</guid>
      <description>&lt;p&gt;This is more for my own reference, but might be useful for others.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1.2.840.113554.1.2.2&lt;/strong&gt; – Kerberos v5 – &lt;!-- raw HTML omitted --&gt;RFC 1964&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1.2.840.48018.1.2.2&lt;/strong&gt; – Kerberos V5 (incorrect, used by old Windows versions)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1.3.6.1.5.5.2&lt;/strong&gt; – SPNEGO – &lt;!-- raw HTML omitted --&gt;RFC 4178&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1.3.6.1.5.2.5&lt;/strong&gt; – IAKERB – &lt;!-- raw HTML omitted --&gt;draft-ietf-kitten-iakerb-03&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1.3.6.1.4.1.311.2.2.10&lt;/strong&gt; – NTLM SSP – &lt;!-- raw HTML omitted --&gt;Heimdal:lib/gssapi/oid.txt&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Home IPv6 Tunnel</title>
      <link>http://sigmaris.info/blog/2012/06/home-ipv6-tunnel/</link>
      <pubDate>Sat, 09 Jun 2012 17:34:27 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2012/06/home-ipv6-tunnel/</guid>
      <description>&lt;p&gt;The news of &lt;a href=&#34;http://www.worldipv6launch.org&#34; title=&#34;World IPv6 Launch Day&#34;&gt;World IPv6 Launch Day&lt;/a&gt; last week prompted me to properly set up IPv6 for my home network. Unfortunately my ISP doesn’t offer native IPv6 connectivity — not many consumer ISPs do — but fortunately there are free services which will provide an IPv6 ‘tunnel’ over the IPv4 internet, to the wider IPv6 world. I signed up to Hurricane Electric’s service at &lt;a href=&#34;http://tunnelbroker.net&#34; title=&#34;Hurricane Electric Tunnel Broker&#34;&gt;tunnelbroker.net&lt;/a&gt; and was soon up and running. Hurricane Electric will issue you a /64 block of IPv6 addresses, which you can allocate as you see fit. You need to set up one system to handle your end of the tunnel, and route all traffic destined for the wider IPv6 internet over the tunnel. I already had a Linux server running that was handling the local end, but since I’ve recently acquired an Asus RT-N16 router running &lt;a href=&#34;http://www.dd-wrt.com/&#34; title=&#34;DD-WRT open source router firmware&#34;&gt;DD-WRT&lt;/a&gt;, I decided to enable IPv6 support on it and use it as the tunnel endpoint, so it can serve as the default gateway for both IPv4 and IPv6 on my LAN.&lt;/p&gt;&#xA;&lt;p&gt;To do this you need to be running one of the DD-WRT builds with IPv6 support, I am using the “mega” build which includes pretty much everything. As well as enabling IPv6 support in the DD-WRT admin web interface, you need to set up a custom script to bring up the tunnel when the router starts up. The script I used is below – you need to replace the following:&lt;/p&gt;&#xA;&lt;dl&gt;&#xA;&lt;dt&gt;&lt;code&gt;(userid)&lt;/code&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;the User ID shown on the tunnelbroker.net page when you log in&lt;/dd&gt;&#xA;&lt;dt&gt;&lt;code&gt;(md5password)&lt;/code&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;the MD5 hash of your tunnelbroker.net password&lt;/dd&gt;&#xA;&lt;dt&gt;&lt;code&gt;(tunnelid)&lt;/code&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;the Tunnel ID of your tunnel&lt;/dd&gt;&#xA;&lt;dt&gt;&lt;code&gt;(remotev4)&lt;/code&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;the IPv4 address of the remote end&lt;/dd&gt;&#xA;&lt;dt&gt;&lt;code&gt;(localv6)&lt;/code&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;the IPv6 address of the local end&lt;/dd&gt;&#xA;&lt;dt&gt;&lt;code&gt;(lanv6)&lt;/code&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;one IPv6 address, out of your routed IPv6 /64, allocation that you want to use for your router on your LAN&lt;/dd&gt;&#xA;&lt;/dl&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;insmod ipv6&#xD;&#xA;WANIP=$(nvram get wan_ipaddr);&#xD;&#xA;wget -O - &amp;#39;https://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=AUTO&amp;amp;user_id=(userid)&amp;amp;pass=(md5password)&amp;amp;tunnel_id=(tunnelid)&amp;#39;&#xD;&#xA;ip tunnel add he-ipv6 mode sit remote (remotev4) local $WANIP ttl 255&#xD;&#xA;ip link set he-ipv6 up&#xD;&#xA;ip -6 addr add (localv6) dev he-ipv6&#xD;&#xA;ip -6 addr add (lanv6) dev br0&#xD;&#xA;ip -6 route add ::/0 dev he-ipv6&#xD;&#xA;echo 1 &amp;gt; /proc/sys/net/ipv6/conf/all/forwarding&#xD;&#xA;radvd -C /tmp/radvd.conf&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This image shows where to find some of the information in your tunnelbroker.net page:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://sigmaris.info/blog/blog/uploads/2012/06/tunneldetails.png&#34; alt=&#34;Tunnelbroker.net configuration page&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The setup script needs to be saved, as a custom startup script, in the Administration -&amp;gt; Commands section of the DD-WRT web interface.&lt;/p&gt;&#xA;&lt;p&gt;I had also enabled &lt;a href=&#34;http://www.litech.org/radvd/&#34; title=&#34;Routing Advertisement Daemon&#34;&gt;radvd&lt;/a&gt; in the DD-WRT web interface to advertise the gateway to the wider IPv6 world on my LAN, but for me it failed to start on boot, so I added the &lt;code&gt;radvd -C /tmp/radvd.conf&lt;/code&gt; line to make sure it starts after the tunnel is configured. The configuration file used for &lt;code&gt;radvd&lt;/code&gt; is below, replace &lt;code&gt;(routedv6)&lt;/code&gt; with your routed IPv6 /64 allocation, including the /64, and paste it into the box for &lt;code&gt;radvd&lt;/code&gt; config in the DD-WRT web interface:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;interface br0&#xD;&#xA;{&#xD;&#xA;   AdvSendAdvert on;&#xD;&#xA;   prefix (routedv6)&#xD;&#xA;   {&#xD;&#xA;       AdvOnLink on;&#xD;&#xA;       AdvAutonomous on;&#xD;&#xA;   };&#xD;&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This setup means that on the other computers on the LAN (all Macs), I can set “Configure IPv6: Automatically” in the Network Preferences and IPv6 connectivity just works. The other machines on the LAN will configure themselves based on the information &lt;code&gt;radvd&lt;/code&gt; sends out, using &lt;a href=&#34;http://tools.ietf.org/html/rfc4862&#34; title=&#34;IPv6 Stateless Address Autoconfiguration&#34;&gt;stateless autoconfiguration&lt;/a&gt;. However, this ease of use comes with a security risk…&lt;/p&gt;</description>
    </item>
    <item>
      <title>Two-factor authentication with Mac OS X and OpenSC part 2</title>
      <link>http://sigmaris.info/blog/2011/02/two-factor-authentication-with-mac-os-x-and-opensc-part-2/</link>
      <pubDate>Sun, 20 Feb 2011 23:11:50 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2011/02/two-factor-authentication-with-mac-os-x-and-opensc-part-2/</guid>
      <description>&lt;p&gt;This is the second part of the guide to smartcard-based authentication on Mac OS X. In this part of the guide, I’m going to assume that following Part 1, you have installed OpenSC, initialised your smartcard, and loaded or generated some certificates and private keys onto it. Now I’m going to show you how to use the card for actual authentication.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Two-factor authentication with Mac OS X and OpenSC part 1</title>
      <link>http://sigmaris.info/blog/2010/11/two-factor-authentication-with-mac-os-x-and-opensc-part-1/</link>
      <pubDate>Sat, 13 Nov 2010 22:59:27 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2010/11/two-factor-authentication-with-mac-os-x-and-opensc-part-1/</guid>
      <description>&lt;p&gt;Interested in using a smartcard for secure two-factor authentication on OS X? What about E-mail signing and encryption, SSH key authentication, and more? All of these applications are possible, using the built-in smartcard support in OS X and open source software. What follows is the first part of a guide to using smartcards on OS X, using software from the &lt;!-- raw HTML omitted --&gt;OpenSC Project&lt;!-- raw HTML omitted --&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Service for unmounting volumes in OS X</title>
      <link>http://sigmaris.info/blog/2010/04/a-service-for-unmounting-volumes-in-os-x/</link>
      <pubDate>Mon, 05 Apr 2010 00:13:47 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2010/04/a-service-for-unmounting-volumes-in-os-x/</guid>
      <description>&lt;p&gt;A little while ago I had a problem. My phone is a Sony Ericsson K800i, with 64MB of internal storage and a slot for Memory Stick expansion storage. I was using it as an MP3 player, and so had an 8GB memory stick in there to store MP3s.&lt;/p&gt;&#xA;&lt;p&gt;When I connected it to my Mac in USB drive mode to transfer files, it appeared in the Finder as two storage devices, one for the internal storage and one for the memory stick. When I’d finished transferring files I would click Eject on the memory stick’s device to safely remove it. Then I’d do the same on the internal storage’s device, but this would eventually fail and report an I/O error. The phone’s screen would show that the USB connection had ended, but one of the devices would still show in the Finder. If I then unplugged the USB cable the Finder would tell me that data might have been lost since I didn’t eject the storage device properly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UnmountService</title>
      <link>http://sigmaris.info/blog/page/unmountservice/</link>
      <pubDate>Mon, 05 Apr 2010 00:11:42 +0000</pubDate>
      <guid>http://sigmaris.info/blog/page/unmountservice/</guid>
      <description>&lt;p&gt;Services are a means in Mac OS X for the user to pass small pieces of data out of one application to another. The pieces of data may be snippets of text, images or files. Applications can publish Services that accept certain types of data, and these Services can be passed data out of almost any other Mac application.&lt;/p&gt;&#xA;&lt;p&gt;In Snow Leopard, the role of Services has been expanded somewhat; they can now be accessed through the context menu of items they support. This means I can right-click on a file in the Finder, and get a context menu option “Send File To Bluetooth Device” which is a Service which can be sent files, published by the Bluetooth File Exchange utility. This application does the same kind of thing – it publishes a Service which can be sent volumes and attempts to unmount them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Student Tech Meetup talk</title>
      <link>http://sigmaris.info/blog/2010/02/student-tech-meetup-talk/</link>
      <pubDate>Thu, 18 Feb 2010 09:13:35 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2010/02/student-tech-meetup-talk/</guid>
      <description>&lt;p&gt;On Wednesday, I gave a talk at the Student Techmeetup here in Edinburgh on DS homebrew development. As promised, I&amp;rsquo;ve uploaded the slides from that talk as a PDF &lt;a href=&#34;http://sigmaris.info/blog/files/dspreso.pdf&#34;&gt;here&lt;/a&gt;, with links to a few tutorials and resources included in them, along with some notes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>emitSMS plugin update</title>
      <link>http://sigmaris.info/blog/2010/01/emitsms-plugin-update/</link>
      <pubDate>Sat, 16 Jan 2010 15:10:00 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2010/01/emitsms-plugin-update/</guid>
      <description>&lt;p&gt;The emitSMS plugin has been updated with a small new feature – it will now strip out dashes and spaces from your phone numbers in Address Book before sending them to the phone, as most phones don’t seem to accept numbers in this format. Grab the new version &lt;a href=&#34;http://sigmaris.info/blog/files/emitSMSAddressBookPlugin.bundle.zip&#34; title=&#34;emitSMS Address Book Plugin&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Address Book SMS Plugin</title>
      <link>http://sigmaris.info/blog/page/address-book-sms-plugin/</link>
      <pubDate>Wed, 09 Dec 2009 15:56:48 +0000</pubDate>
      <guid>http://sigmaris.info/blog/page/address-book-sms-plugin/</guid>
      <description>&lt;p&gt;In the distant past, the Address Book app in Mac OS X Tiger could send mobile SMS messages directly from within the app, if you paired your mobile phone with your Mac via Bluetooth. Along came Leopard, and the feature mysteriously vanished without trace or explanation, and hasn’t reappeared since. Missing the feature, I found a roundabout replacement in the &lt;!-- raw HTML omitted --&gt;emitSMS&lt;!-- raw HTML omitted --&gt; dashboard widget. It offers SMS sending via Bluetooth and can also search the Address Book for phone numbers. Having seen that the &lt;!-- raw HTML omitted --&gt;source code&lt;!-- raw HTML omitted --&gt; for emitSMS was released, I adapted the backend into a plugin for Address Book.app to provide the missing former functionality.&lt;/p&gt;</description>
    </item>
    <item>
      <title>emitSMS plugin bug fix</title>
      <link>http://sigmaris.info/blog/2009/10/emitsms-plugin-bug-fix/</link>
      <pubDate>Sun, 25 Oct 2009 23:26:38 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2009/10/emitsms-plugin-bug-fix/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://sigmaris.info/blog/files/emitSMSAddressBookPlugin.bundle.zip&#34;&gt;Here’s&lt;/a&gt; a new version of the Address Book plugin for SMS sending, with a small bug fix intended to stop it hanging after sending an SMS. If you’ve seen this problem with earlier versions, please let me know if this version has fixed it or not 🙂&lt;/p&gt;</description>
    </item>
    <item>
      <title>emitSMS Address Book Plugin updated</title>
      <link>http://sigmaris.info/blog/2009/10/emitsms-address-book-plugin-updated/</link>
      <pubDate>Thu, 01 Oct 2009 11:26:13 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2009/10/emitsms-address-book-plugin-updated/</guid>
      <description>&lt;p&gt;The emitSMS plugin for Address Book has been updated to use native Mac OS methods to access the phone over Bluetooth, rather than using an emulated serial port. This should make it less flaky when used under Snow Leopard. You can get the updated plugin &lt;a href=&#34;http://sigmaris.info/blog/files/emitSMSAddressBookPlugin.bundle.zip&#34; title=&#34;emitSMS address book plugin&#34;&gt;here&lt;/a&gt;, and the new source code is &lt;!-- raw HTML omitted --&gt;here&lt;!-- raw HTML omitted --&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>emitSMS plugin for Mac OS X Address Book.app</title>
      <link>http://sigmaris.info/blog/2009/09/emitsms-plugin-for-mac-os-x-address-book-app/</link>
      <pubDate>Mon, 14 Sep 2009 16:16:27 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2009/09/emitsms-plugin-for-mac-os-x-address-book-app/</guid>
      <description>&lt;p&gt;In the distant past, the Address Book app in Mac OS X Tiger could send mobile SMS messages directly from within the app, if you paired your mobile phone with your Mac via Bluetooth. Along came Leopard, and the feature mysteriously vanished without trace or explanation, and hasn’t reappeared since. Missing the feature, I found a roundabout replacement in the &lt;a href=&#34;http://algoritmer.dk/widget/&#34; title=&#34;emitSMS widget homepage&#34;&gt;emitSMS&lt;/a&gt; dashboard widget. It offers SMS sending via Bluetooth and can also search the Address Book for phone numbers. Having seen that the &lt;a href=&#34;http://algoritmer.dk/widget/develop.php&#34; title=&#34;emitSMS development page&#34;&gt;source code&lt;/a&gt; for emitSMS was released, I adapted the backend into a plugin for Address Book.app to provide the missing former functionality.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deflektor remake for Nintendo DS</title>
      <link>http://sigmaris.info/blog/2009/06/deflektor-remake-for-nintendo-ds/</link>
      <pubDate>Sun, 07 Jun 2009 23:32:03 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2009/06/deflektor-remake-for-nintendo-ds/</guid>
      <description>&lt;p&gt;Here is a project I’ve been working on for a few weeks to learn more about DS homebrew coding. It’s a remake of Deflektor, an old puzzle game that I played on the Amiga. I’ve tried to keep the retro feel of the original while updating it to use the touchscreen interface.&lt;/p&gt;&#xA;&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;&#xA;&lt;p&gt;The aim is to rotate the mirrors (&lt;!-- raw HTML omitted --&gt;) to reflect the laser beam from the source (&lt;!-- raw HTML omitted --&gt;) to blow up all the triggers (&lt;!-- raw HTML omitted --&gt;) and then enter the target (&lt;!-- raw HTML omitted --&gt;). Rotate the mirrors by tapping on them and then dragging to align the mirror at a particular angle. You start with an amount of energy which is constantly declining (the green bar). Directing the beam into a spike (&lt;!-- raw HTML omitted --&gt;) or reflecting the beam back to the source will cause it to overload (represented by the red bar). If the source is overloaded too much or if you run out of energy, you lose a life. There are also rotating blocks which only allow the beam to pass at a certain angle (&lt;!-- raw HTML omitted --&gt;), teleports (&lt;!-- raw HTML omitted --&gt;) which work in pairs, and blocks which randomize the beam direction (&lt;!-- raw HTML omitted --&gt;). In addition, in some levels there are gremlins which roam about the board and mess with your stuff. You can get rid of them by tapping on them repeatedly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DesMuME for Mac OS X with GDB stub support</title>
      <link>http://sigmaris.info/blog/2009/04/desmume-for-mac-os-x-with-gdb-stub-support/</link>
      <pubDate>Mon, 06 Apr 2009 04:00:11 +0000</pubDate>
      <guid>http://sigmaris.info/blog/2009/04/desmume-for-mac-os-x-with-gdb-stub-support/</guid>
      <description>&lt;p&gt;I’ve built a Mac (Intel) binary of DesMuME, from the latest SVN code, with a patch to enable masscat’s GDB stub. With it you can load a homebrew rom, connect to DesMuME with the copy of GDB that’s provided with devkitARM, and start debugging your homebrew code while it’s running in the emulator. For more details check out &lt;a href=&#34;http://forums.desmume.org/viewtopic.php?id=85&#34; title=&#34;Desmume + GDB debugger stub&#34;&gt;this post&lt;/a&gt; on the official forums.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
