<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://puzzleduck.github.io/Development-Adventures/feed.xml" rel="self" type="application/atom+xml" /><link href="https://puzzleduck.github.io/Development-Adventures/" rel="alternate" type="text/html" /><updated>2026-10-11T08:32:38+00:00</updated><id>https://puzzleduck.github.io/Development-Adventures/feed.xml</id><title type="html">Development Adventures</title><subtitle>Adventures in software development with PuZZleDucK.
</subtitle><entry><title type="html">Mixtape Launch Party</title><link href="https://puzzleduck.github.io/Development-Adventures/mixtape-launch-party/" rel="alternate" type="text/html" title="Mixtape Launch Party" /><published>2026-10-11T08:27:00+00:00</published><updated>2026-10-11T08:27:00+00:00</updated><id>https://puzzleduck.github.io/Development-Adventures/mixtape-launch-party</id><content type="html" xml:base="https://puzzleduck.github.io/Development-Adventures/mixtape-launch-party/"><![CDATA[<p><a href="/Development-Adventures/assets/mixtape-launch/Mixtape_Launch_Flyer.pdf"><img src="/Development-Adventures/assets/mixtape-launch/flyer.png" alt="Mixtape Android app launch party. Friday 16 October 2026 at 8:00pm, Loop Roof, Level 4, 23 Meyers Place. Get the app from Friday the 16th. Open the original PDF flyer." width="1136" height="1600" style="display: block; width: 100%; height: auto; max-height: none;" /></a></p>]]></content><author><name></name></author><category term="article" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Mixtape: real music, pretend plastic</title><link href="https://puzzleduck.github.io/Development-Adventures/mixtape-real-music-pretend-plastic/" rel="alternate" type="text/html" title="Mixtape: real music, pretend plastic" /><published>2026-10-01T09:59:12+00:00</published><updated>2026-10-01T09:59:12+00:00</updated><id>https://puzzleduck.github.io/Development-Adventures/mixtape-real-music-pretend-plastic</id><content type="html" xml:base="https://puzzleduck.github.io/Development-Adventures/mixtape-real-music-pretend-plastic/"><![CDATA[<p>Mixtape is my attempt to keep the things I loved about cassette players, while letting a modern phone handle the convenient bits. The reels turn, the cases catch the light, and the track list lives on a handwritten sleeve. Underneath all that pretend plastic is an Android player for the music already on your device.</p>

<p>You can tap straight to a song, listen with the screen off, and use Android’s playback controls. You don’t have to wind a real tape back to the beginning or rescue it with a pencil. I wanted the retro feel, not every inconvenience that came with it.</p>

<h2 id="the-cassette-test-that-became-an-app">The cassette test that became an app</h2>

<p>A cassette tape sitting in a player had become one of the tests I’d give new models. Could they make something that felt like a real object, rather than just a rectangle with two circles in it?</p>

<p>Fable was the first to do a good enough job with the cassette player and tape design that I actually wanted to use the result. That was the spark for Mixtape. What had been a recurring model test started turning into something I wanted to listen to music with.</p>

<p>The design grew through an HTML and SVG component demo, then became a native Android interface. Keeping the tape, deck, sticker, case and paper insert separate meant they could each have their own character.</p>

<figure class="post-screenshots mixtape-screenshots">
  <div class="screenshot-pair">
    <a href="/Development-Adventures/assets/images/mixtape/player-portrait.png"><img src="/Development-Adventures/assets/images/mixtape/player-portrait.png" alt="Mixtape's cassette player above a matching spine and handwritten track list." width="1080" height="2400" loading="lazy" /></a>
  </div>
  <figcaption>Safety Yellow with a Ghost Clear cassette, Ruled Notebook sleeve and Cloudy Clear case. These app screenshots use a sample local music library; tap an image to see it full size.</figcaption>
</figure>

<h2 id="radio-sets-and-stacks-of-tapes">Radio sets and stacks of tapes</h2>

<p>Once there was a player I liked, other memories started finding their way in. One was the little sets of three songs by an artist that I’d hear on the radio. Mixtape can group an artist’s tracks into those three-song sets and spread them across tapes: enough time to settle into an artist before moving on to someone else. There are other grouping options too, and a choice of how many songs go on each tape.</p>

<p>The library itself looks back to stacks of cassette cases. When nothing is playing, you get a page of spines to browse, rather than a player waiting over an empty track list. Pick a tape and its player and sleeve open together.</p>

<p>The last button on the deck does two jobs: <strong>tap the double-arrow/gear button</strong> to toggle between the track list and the mixtape list; <strong>long-press that same button</strong> to open <strong>Settings</strong>. On the opening tape stack, the corner gear takes you straight there.</p>

<p>In landscape, the full-page collection becomes two columns. It is still a stack of tapes, just making sensible use of a different-shaped screen.</p>

<figure class="post-screenshots mixtape-screenshots">
  <div class="screenshot-pair">
    <a href="/Development-Adventures/assets/images/mixtape/tape-library.png"><img src="/Development-Adventures/assets/images/mixtape/tape-library.png" alt="A full-page stack of cassette spines with different papers, handwriting, colours and small drawn symbols." width="1080" height="2400" loading="lazy" /></a>
    <a href="/Development-Adventures/assets/images/mixtape/tape-list-player.png"><img src="/Development-Adventures/assets/images/mixtape/tape-list-player.png" alt="A Graphite Tall deck with a blue cassette above a shelf of mixtape spines, including the selected Night Windows tape in a violet case." width="1080" height="2400" loading="lazy" /></a>
  </div>
  <figcaption>The full collection, and the Graphite Tall player with its tape shelf open. The selected tape pairs Midnight Grid paper with a Violet Clear case.</figcaption>
</figure>

<h2 id="paper-inside-plastic">Paper inside plastic</h2>

<p>I wanted the track list to feel like the back of a cassette sleeve, not a conventional playlist dropped underneath a decorative player. The spine and back use the same paper design, and both sit behind the same case tint and plastic finish.</p>

<p>There are plain and lined papers, album-style inserts, clear and coloured cases, and tapes with clear or opaque shells. Reflections vary a little between cases so the stack doesn’t look mechanically identical. The open-fronted decks leave the cassette and its moving reels in view, with chunky transport buttons you can actually use.</p>

<p>The modern conveniences are still there. Turn the phone sideways and the player and sleeve sit alongside each other. Long track names can run off to the right; drag the list sideways when you want to read the rest.</p>

<p>For a bit of pruning, <strong>long-press a track name</strong> to open its menu. <strong>Remove from mixtape</strong> keeps the music file on your phone; <strong>Delete from device</strong> asks you to confirm before deleting the file itself.</p>

<figure class="post-screenshots mixtape-screenshots screenshot-wide">
  <div class="screenshot-pair">
    <a href="/Development-Adventures/assets/images/mixtape/player-landscape.png"><img src="/Development-Adventures/assets/images/mixtape/player-landscape.png" alt="A Studio Silver cassette deck beside the After the Rain spine and Forest Fleck track-list sleeve in an amber case, in landscape." width="2400" height="1080" loading="lazy" /></a>
  </div>
  <figcaption>A different combination in landscape: Studio Silver, a Warm Ivory tape, and Forest Fleck paper inside an Amber Archive case.</figcaption>
</figure>

<h2 id="listening-for-the-gap">Listening for the gap</h2>

<p>On the Walkmans I used, I’d mash Play and Fast Forward together to hear the tape rushing past the heads. I’d listen for the breaks between tracks, trying to land on that great song somewhere in the middle of a mixtape. It was a very particular way of knowing your music.</p>

<p>I liked that half-recognisable rush enough to include it by default in Mixtape. Fast-forward and rewind use snippets of the actual tracks, with a spin-up, a quick journey through the music, and a spin-down near the destination. Longer jumps take a little longer, up to a cap, rather than squeezing a whole album into an impossible squeak. The winding audio is a little quieter than normal playback.</p>

<p>There is no two-button squeeze required this time. And if you’d rather skip the nostalgia, <strong>Fast-forward / rewind sound</strong> can be switched off in <strong>Settings → Mixtapes → Playback</strong>.</p>

<h2 id="the-bits-that-make-it-yours">The bits that make it yours</h2>

<p>Then there are the little imperfections. You start writing a title with a texta, confident it will fit, and discover halfway through that your plan was optimistic. Some Mixtape titles do the same thing: they reach the end of the paper and get cut off, rather than politely turning into an ellipsis.</p>

<p>The small hand-drawn symbols matter too. A star, a music note, a little swirl in a different colour; not always in quite the same place. A few sleeves even have those tiny boxed letters or numbers. They help a collection feel like individual tapes somebody has handled and labelled.</p>

<p>To make a tape your own, <strong>long-press its spine in the collection</strong> to configure its name and appearance. There is also a dice button for trying a fresh combination, with the changes kept in the editor until you <strong>Save</strong>.</p>

<figure class="post-screenshots mixtape-screenshots">
  <div class="screenshot-pair">
    <a href="/Development-Adventures/assets/images/mixtape/spine-editor.png"><img src="/Development-Adventures/assets/images/mixtape/spine-editor.png" alt="The Pocket Radio mixtape editor with a pink spine preview, handwriting controls and dice button, over a green Park Life deck." width="1080" height="2400" loading="lazy" /></a>
  </div>
  <figcaption>Customising Pocket Radio: Pink Zine Border paper in a Ruby Clear case, with the green Park Life deck behind the editor.</figcaption>
</figure>

<h2 id="more-ideas-for-the-next-tape">More ideas for the next tape</h2>

<p>There are a few things I’d like to explore next:</p>

<ul>
  <li>Building custom mixtapes with just your favourites.</li>
  <li>An Android Auto interface.</li>
  <li>Searching for tracks or mixtapes.</li>
  <li>A more intuitive way to customise tapes and tracks.</li>
  <li>A home-screen player widget.</li>
</ul>

<p>Those are future plans, not features to hunt for in the current app.</p>

<p>Mixtape runs on Android 7 or later. The <a href="https://github.com/PuZZleDucK/Android-Mixtape">source code is on GitHub</a> if you’d like to look under the plastic or follow along.</p>

<p>For now, put a tape on. No pencil required.</p>]]></content><author><name></name></author><category term="article" /><summary type="html"><![CDATA[The feel of a cassette collection, with the convenience of an Android music player: turning reels, handwritten sleeves and a familiar rush of fast-forwarded music.]]></summary></entry><entry><title type="html">Mixtape — privacy and data-retention policy</title><link href="https://puzzleduck.github.io/Development-Adventures/mixtape-privacy-policy/" rel="alternate" type="text/html" title="Mixtape — privacy and data-retention policy" /><published>2026-09-30T14:00:00+00:00</published><updated>2026-09-30T14:00:00+00:00</updated><id>https://puzzleduck.github.io/Development-Adventures/mixtape-privacy-policy</id><content type="html" xml:base="https://puzzleduck.github.io/Development-Adventures/mixtape-privacy-policy/"><![CDATA[<p>This policy covers Mixtape for Android, package <code class="language-plaintext highlighter-rouge">org.puzzleduck.mixtape</code>.</p>

<p>Mixtape is developed by <strong>PuZZleDucK</strong>. Privacy questions can be sent to <a href="mailto:PuZZleDucK+mixtape@gmail.com">PuZZleDucK+mixtape@gmail.com</a>.</p>

<h2 id="in-brief">In brief</h2>

<p>Mixtape plays music stored on your device. It has no user account, advertising SDK, developer-operated analytics service or automatic upload of your music library. The app does not request Android’s internet permission.</p>

<p>The app does access and store some information locally to work. Android media controls and Android-managed backups are separate data flows described below. “No upload to us” does not mean “no data is processed” or “nothing can leave the device”.</p>

<h2 id="music-and-permissions">Music and permissions</h2>

<p>With your permission, Mixtape reads Android’s audio library and opens audio files for playback. It uses track titles, artist and album names, filenames, durations, file types and sizes, track numbers, media identifiers and added/modified dates to organise tapes, display track information and play your music.</p>

<p>Fast-forward and rewind effects decode short portions of those same files locally. They do not record the microphone or upload audio for processing.</p>

<ul>
  <li>On Android 13 and later, Mixtape asks for access to music and audio.</li>
  <li>On Android 7–12, it uses the older storage-read permission.</li>
  <li>On Android 7–9, a separate storage-write permission is requested if you choose to permanently delete an audio file. Newer Android versions use the relevant system permission or deletion-consent flow.</li>
</ul>

<p>You can deny or revoke audio access in Android’s app-permission settings. Library access and playback of inaccessible files will then be unavailable. Revoking a permission does not itself erase the app’s saved tape settings.</p>

<p>The app also uses Android’s media-playback service and wake-lock facilities for background playback. Its playback dependencies declare network-state access; this is not permission to send music or other information over the internet.</p>

<h2 id="information-saved-on-the-device">Information saved on the device</h2>

<p>Mixtape stores app-private preferences for permission-request history, tape names and appearance, handwriting and theme choices, library grouping, filename exclusions, and tape membership. Membership includes media identifiers and identifiers of songs removed from tapes, so a library refresh does not silently add them back.</p>

<p>The app reads audio from its existing location. Creating or editing a virtual tape does not create a new copy of each music file.</p>

<p>Mixtape uses Android’s app-private storage protections for its preferences. This is not a promise of protection against someone who has access to an unlocked, rooted or otherwise compromised device.</p>

<h2 id="android-playback-controls-and-connected-systems">Android playback controls and connected systems</h2>

<p>Track metadata, the playback queue and playback state are made available through Android’s media-session interface. This enables notifications, lock-screen controls and headset or Bluetooth media controls. Mixtape does not provide an Android Auto or Automotive browsing interface.</p>

<p>Those surfaces may show song titles, artists and other media information outside Mixtape’s own screen. Their operation and any further processing are controlled by Android and the connected host or service, not a Mixtape server.</p>

<h2 id="android-backup-and-device-transfers">Android backup and device transfers</h2>

<p>Mixtape allows Android backup of its saved preferences. Depending on your device and backup settings, Android or your backup provider may copy and later restore that data, including during a device transfer.</p>

<p>These are system-managed copies, not uploads to a server operated by PuZZleDucK. Uninstalling the app does not guarantee removal of an existing backup. See your device’s backup controls and <a href="https://developer.android.com/identity/data/autobackup">Android’s backup documentation</a>.</p>

<h2 id="retention-and-deletion">Retention and deletion</h2>

<ul>
  <li><strong>Saved app data:</strong> preferences and tape membership remain until changed or removed by clearing Mixtape’s storage or uninstalling it.</li>
  <li><strong>Tape edits:</strong> removing a song from a tape or adding an exclusion does not delete the underlying audio file. Resetting tapes is a reshuffle/reset feature, not a complete personal-data erasure tool.</li>
  <li><strong>Music files:</strong> clearing app storage or uninstalling Mixtape does not delete your shared music collection. The separate <strong>Delete from device</strong> action can permanently remove a selected audio file after confirmation and any required Android permission or consent.</li>
  <li><strong>Backups:</strong> manage these through Android or the relevant backup provider. App-level deletion does not promise deletion of their copies.</li>
  <li><strong>Developer accounts:</strong> there is no Mixtape account or developer-hosted music-library database to delete.</li>
</ul>

<h2 id="support-messages-and-external-services">Support messages and external services</h2>

<p>If you contact PuZZleDucK, the email address, message and any attachments you choose to send are received through the email provider. They are separate from the app’s local-only operation. Please avoid including unnecessary personal information.</p>

<p>External websites, app stores, email providers and connected platform services have their own privacy policies. This statement describes Mixtape itself; it does not make promises on their behalf.</p>

<h2 id="changes-and-questions">Changes and questions</h2>

<p>We will update this policy when the way Mixtape handles data changes. Questions or requests about information you have voluntarily sent can be directed to <a href="mailto:PuZZleDucK+mixtape@gmail.com">PuZZleDucK+mixtape@gmail.com</a>.</p>]]></content><author><name></name></author><category term="policy" /><summary type="html"><![CDATA[How Mixtape uses local music, saves tape settings, works with Android media controls and backup, and handles deletion.]]></summary></entry><entry><title type="html">Orbitals returns: old dots, new Android, and a little help from Codex</title><link href="https://puzzleduck.github.io/Development-Adventures/article/2026/09/27/orbitals-old-dots-new-android.html" rel="alternate" type="text/html" title="Orbitals returns: old dots, new Android, and a little help from Codex" /><published>2026-09-27T12:00:00+00:00</published><updated>2026-09-27T12:00:00+00:00</updated><id>https://puzzleduck.github.io/Development-Adventures/article/2026/09/27/orbitals-old-dots-new-android</id><content type="html" xml:base="https://puzzleduck.github.io/Development-Adventures/article/2026/09/27/orbitals-old-dots-new-android.html"><![CDATA[<p><em>A development update, not a new store-release announcement.</em></p>

<p>Orbitals started with a fairly modest ambition. Make some dots move around the screen in an interesting way. Touch the screen, disturb the pattern, and watch it settle into something else.</p>

<p>Fourteen years later, the dots still appeal to me. The Android project around them needed rather more attention.</p>

<p>This September I’ve been revisiting Orbitals with help from Codex. The work has been about getting an old app building and behaving on current Android, without throwing away the little mathematical toy that made it worth writing in the first place.</p>

<p><img src="/Development-Adventures/assets/images/orbitals-revival/orbitals-showcase.png" alt="Enlarged screenshot details of the pink Trefoil knot pattern and multicoloured Chasing dots on black." /></p>

<p><em>Real Android 16 emulator captures from the revived Orbital_LWP app. These are enlarged crops, not concept art. The full screenshots below show the original, much smaller dot scale.</em></p>

<h2 id="before-orbitals-had-its-own-app">Before Orbitals had its own app</h2>

<p>The trail starts with Target Live Wallpaper. In <a href="/article/2012/02/29/these-messes-i-in-and-out-of.html">February 2012</a>, I was writing about fireworks, custom models and the usual collection of unfinished Android experiments. Near the bottom of that post was a small addition: “Also just added ‘orbitals’”.</p>

<p>By <a href="/article/2012/05/03/announcing-first-release-of-orbitals.html">3 May 2012</a>, it had become a separate release. I described Orbitals as the second spin-off from Target Live Wallpaper.</p>

<p>The inspirations were quite specific. Windows 8’s loading bubbles suggested the chasing dots. Ordinary orbits supplied the simpler patterns, and the trefoil knot inspired the knotted ones. Ubuntu, XDA and Slashdot were among the references for the tech and open-source colour schemes.</p>

<p>There was no astronomy simulation hiding underneath. This was an excuse to play with motion, colour and a few equations. In the original release, touching the screen changed the randomised colour scheme, trail length and speed.</p>

<p>In <a href="/article/2012/08/19/orbitals-and-adb.html">August 2012</a>, I wrote about fixing some “shifty maths” and separating the transition away from an orbit from the transition back. That let the dots make interesting patterns between the settled ones. The movement between shapes was becoming part of the fun.</p>

<h2 id="a-small-naming-tangle">A small naming tangle</h2>

<p>There are two related repositories in this story. <a href="https://github.com/PuZZleDucK/Orbital-Live-Wallpaper">Orbital-Live-Wallpaper</a> holds the original 2012 app. <a href="https://github.com/PuZZleDucK/Orbital_LWP">Orbital_LWP</a> has its own Android package identity and a later Android Studio history, including settings fixes from 2015.</p>

<p>Both received modernisation work on 22 September 2026. They are related, but they are not interchangeable builds. The screenshots in this post show Orbital_LWP, which retains six orbital patterns, nine palettes and its red-arc widget.</p>

<h2 id="what-the-codex-assisted-revival-actually-changed">What the Codex-assisted revival actually changed</h2>

<p>Getting a successful build was the first job. Both projects now target Android 16, API 36, with modern Gradle tooling, Java 17 source compatibility and AndroidX. But a fresh build alone would have left plenty of old assumptions intact.</p>

<p>A live wallpaper can have more than one engine. Android may be showing a preview while another instance is active. Each engine now owns its animation state, rather than letting a preview interfere with another instance. Animation callbacks stop when the wallpaper is hidden or its surface disappears, and listeners are removed when the engine is destroyed.</p>

<p>Settings also needed to do what they said. In the original app, placeholder switches became working touch-follow and orbit-transition controls. In Orbital_LWP, the work repaired ignored direction and transition-speed settings, preference loading on a cold start, and mismatched colour labels. Existing preference keys and palette values were preserved.</p>

<p>The surrounding screens received day and night themes and system-bar insets. Widget configuration now starts from cancellation, so backing out does not accidentally create a widget. The widgets remain static; there is no reason to keep waking up a background task to redraw an unchanging image.</p>

<p>That is the useful part of this Codex-assisted return for me. It made it practical to revisit the build, lifecycle code and tests around an old experiment, while keeping the original orbit formulas and visual character.</p>

<h2 id="a-look-at-the-revived-app">A look at the revived app</h2>

<figure class="post-screenshots">
  <div class="screenshot-pair">
  <a href="/Development-Adventures/assets/images/orbitals-revival/trefoil-1.png"><img src="/Development-Adventures/assets/images/orbitals-revival/trefoil-1.png" alt="Full Android wallpaper preview showing small pink and magenta Trefoil dots against black." width="1080" height="2400" loading="lazy" /></a>
  <a href="/Development-Adventures/assets/images/orbitals-revival/chasing-preview.png"><img src="/Development-Adventures/assets/images/orbitals-revival/chasing-preview.png" alt="Full Android wallpaper preview showing a short trail of coloured Chasing dots." width="1080" height="2400" loading="lazy" /></a>
  </div>
  <figcaption>Trefoil and Chasing in Android's system wallpaper preview. The original pixel-sized dots look small on a dense display. These captures show previews, not a newly applied home-screen wallpaper.</figcaption>
</figure>

<figure class="post-screenshots">
  <div class="screenshot-pair">
  <a href="/Development-Adventures/assets/images/orbitals-revival/trefoil-settings.png"><img src="/Development-Adventures/assets/images/orbitals-revival/trefoil-settings.png" alt="Orbital settings for pattern, speed, direction, dot colours, size, count and transitions." width="1080" height="2400" loading="lazy" /></a>
  <a href="/Development-Adventures/assets/images/orbitals-revival/widget-two.png"><img src="/Development-Adventures/assets/images/orbitals-revival/widget-two.png" alt="Android emulator home screen with two static red-arc Orbital widgets." width="1080" height="2400" loading="lazy" /></a>
  </div>
  <figcaption>The restored settings screen and two launcher-hosted red-arc widgets. The widgets are static images, not additional animated wallpapers.</figcaption>
</figure>

<h2 id="tested-with-a-few-limits">Tested, with a few limits</h2>

<p>The original app’s revival records five passing instrumentation tests on an Android 16 phone, plus manual preview, touch and settings checks. Orbital_LWP records six Android 16 instrumentation tests, five JVM tests and seven compatibility contracts containing 48 assertions. A separate review reran the local contracts, unit tests and lint, and inspected the saved device evidence.</p>

<p>Those checks matter more than a claim that the app is simply “modern”. They cover things such as settings surviving recreation, real wallpaper-engine callbacks, and widget configuration behaving properly.</p>

<p>They do not establish long-term battery performance or compatibility with every Android release. Android 6 runtime support remains untested. The original dot sizing and low-resolution static widget artwork also remain visible reminders of the app’s age. The revival is working development code, not a claim that a new store release has shipped.</p>

<h2 id="privacy-and-local-app-data">Privacy and local app data</h2>

<p><strong>No accounts, advertising or usage analytics.</strong> The two development builds described here do not include a service that collects wallpaper-user data for PuZZleDucK, and neither requests internet access. They do not send us personal information, advertising identifiers, location or a history of your touches.</p>

<p>Touch input drives the animation while you use it. It is not kept as an interaction history.</p>

<p>The apps do save configuration on your device, such as your chosen pattern, colours and speed. Those settings are still data: they let the wallpaper remember how you set it up, but they are not tracking records and we do not receive them.</p>

<p>There is no developer-operated database of wallpaper users to retain, sell or share. Local settings normally remain until you clear the app’s storage or uninstall it. Both current builds allow Android backup, so your device or backup provider may preserve and restore settings. Uninstalling does not promise deletion of an Android-managed backup; use your device’s backup controls for those copies. <a href="https://developer.android.com/identity/data/autobackup">Android’s backup documentation</a> explains this separate system behaviour.</p>

<p>This statement covers the September 2026 development versions discussed here: Orbital Live Wallpaper 2.1 (<code class="language-plaintext highlighter-rouge">orbitlivewallpaperfree.puzzleduck.com</code>) and Orbital_LWP 2.0 (<code class="language-plaintext highlighter-rouge">org.puzzleduck.orbital_lwp</code>). If you follow an external link, the browser, app store or other service has its own privacy policy.</p>

<p>For questions, <a href="mailto:PuZZleDucK+DevAdventure@gmail.com">email PuZZleDucK</a>. Any message you choose to send is separate from the apps’ operation and is handled through the email service.</p>

<h2 id="back-to-the-dots">Back to the dots</h2>

<p>The appeal is still the same as it was in 2012. A few coloured dots follow a pattern, a touch sends them somewhere else, and the screen becomes a small experiment in motion again.</p>

<p>It is good to have the code moving too.</p>]]></content><author><name></name></author><category term="article" /><summary type="html"><![CDATA[Revisiting a 2012 live wallpaper with Codex and Android 16: loading dots, trefoil knots, local settings and no analytics.]]></summary></entry><entry><title type="html">Configuring GitLab CI to run Angular5 e2e Tests</title><link href="https://puzzleduck.github.io/Development-Adventures/article/2018/05/11/angular-e2e-on-gitlab.html" rel="alternate" type="text/html" title="Configuring GitLab CI to run Angular5 e2e Tests" /><published>2018-05-11T08:37:56+00:00</published><updated>2018-05-11T08:37:56+00:00</updated><id>https://puzzleduck.github.io/Development-Adventures/article/2018/05/11/angular-e2e-on-gitlab</id><content type="html" xml:base="https://puzzleduck.github.io/Development-Adventures/article/2018/05/11/angular-e2e-on-gitlab.html"><![CDATA[<p>Recently I had the responsibility of setting up testing for an existing Angular5 project using Protractor, Jasmine and Kama. The project had existing unit tests, but no End to End (e2e) tests.</p>

<p>To configure Kama we need to add PhantomJS and the PhantomJS launcher, adjust <code class="language-plaintext highlighter-rouge">karma.conf.js</code> and enable the es6 polyfills in <code class="language-plaintext highlighter-rouge">src/polyfills.ts</code>.</p>

<p>For e2e testing we need to configure protractor to run the tests in a headless browser in <code class="language-plaintext highlighter-rouge">protractor.conf.js</code>. Then we can make a few small changes to a standard <code class="language-plaintext highlighter-rouge">.gitlab-ci.yml</code> and we are ready to run <code class="language-plaintext highlighter-rouge">ng e2e</code> tests in GitLab CI.</p>

<h2 id="les-get-started">Les get started</h2>

<p>To start our project we run:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ng new GitLab-Angular-e2e-CI
cd GitLab-Angular-e2e-CI/
</code></pre></div></div>

<p>now running the tests we find that Karma and Protractor both launch chrome browsers to run the tests.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ng test --single-run
ng e2e
</code></pre></div></div>

<h2 id="karma-configuration">Karma Configuration</h2>

<p>Lets install the dependencies and plugins to let Karma run without a browser window:</p>

<h4 id="packagejson">package.json</h4>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> "devDependencies": {
    ...
    "karma-phantomjs-launcher": "^1.0.4",
    "phantomjs-prebuilt": "^2.1.16",
    ...
</code></pre></div></div>

<h4 id="karmaconfjs">karma.conf.js</h4>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    plugins: [
      ...
      require('karma-phantomjs-launcher'),
    ...
    browsers: ['Chrome', 'PhantomJS'],
</code></pre></div></div>

<h4 id="srcpolyfillsts">src/polyfills.ts</h4>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import 'core-js/es6/symbol';
import 'core-js/es6/object';
import 'core-js/es6/function';
import 'core-js/es6/parse-int';
import 'core-js/es6/parse-float';
import 'core-js/es6/number';
import 'core-js/es6/math';
import 'core-js/es6/string';
import 'core-js/es6/date';
import 'core-js/es6/array';
import 'core-js/es6/regexp';
import 'core-js/es6/map';
import 'core-js/es6/weak-map';
import 'core-js/es6/set';
</code></pre></div></div>

<p>After updating npm our unit tests are ready for CI and can run headless with the command:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm install
ng test --single-run --browser PhantomJS
</code></pre></div></div>

<p>Now we’ll’ enable Protractor to do the same:</p>

<h2 id="protractor-configuration">Protractor Configuration</h2>

<p>Modify the protractor capabilities to target a headless chrome browser. This has the added benefit of running without popping up a browser when running <code class="language-plaintext highlighter-rouge">ng e2e</code> locally during development.</p>

<h4 id="protractorconfjs">protractor.conf.js</h4>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  capabilities: {
    browserName: 'chrome',
    chromeOptions: {
       args: ["--no-sandbox", "--headless", "--disable-gpu", "--window-size=800,600" ]
     }
  },
</code></pre></div></div>

<h2 id="gitlab-ci-configuration">GitLab CI Configuration</h2>

<p>Add the test_e2e_with_lab job to your CI pipeline to run in parallel with the regular <code class="language-plaintext highlighter-rouge">angular test</code> test suite. While the rest of the build and test process will happen on the <strong>node:latest</strong> docker image, the test_e2e_with_lab job will run on the <strong>trion/ng-cli-e2e</strong> image as it was the docker image with the most pre-installed dependencies for the basic e2e setup with a global install of protractor required to push it over the edge (despite protractor already being in the projects dev dependencies).</p>

<h4 id="gitlab-ciyml">.gitlab-ci.yml</h4>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>variables:
  DEPENDENCY_PATH: "./node_modules"
  NG_CLI_PATH: "./node_modules/@angular/cli/bin/ng"

image: node:latest

cache:
  paths:
    - node_modules/

stages:
  - install_dependencies
  - test

install_dependencies:
  stage: install_dependencies
  script:
    - npm install --quiet

  artifacts:
    paths:
      - $DEPENDENCY_PATH

test_with_lab:
  stage: test
  script: $NG_CLI_PATH test --browser PhantomJS --single-run --progress=false

test_e2e_with_lab:
  image: trion/ng-cli-e2e
  stage: test
  script:
    - npm rebuild node-sass --force
    - npm install -g protractor
    - $NG_CLI_PATH e2e --progress=false
</code></pre></div></div>

<h2 id="job-done">Job Done!</h2>

<p>Now your project should be running <code class="language-plaintext highlighter-rouge">ng test</code> and <code class="language-plaintext highlighter-rouge">ng e2e</code> test suites on every push to master and on every branch pushed for review.</p>

<p>You can checkout a minimal example at <a href="https://gitlab.com/puzzleduck/GitLab-Angular-e2e-CI">GitLab-Angular-e2e-CI</a></p>

<p>Next time we’ll look at adding coverage reporting and vulnerability code analysis.</p>]]></content><author><name></name></author><category term="article" /><summary type="html"><![CDATA[Recently I had the responsibility of setting up testing for an existing Angular5 project using Protractor, Jasmine and Kama. The project had existing unit tests, but no End to End (e2e) tests.]]></summary></entry><entry><title type="html">Linux Kernel: Missing in action</title><link href="https://puzzleduck.github.io/Development-Adventures/jekyll/update/2018/03/09/linux-kernel-mia.html" rel="alternate" type="text/html" title="Linux Kernel: Missing in action" /><published>2018-03-09T15:00:00+00:00</published><updated>2018-03-09T15:00:00+00:00</updated><id>https://puzzleduck.github.io/Development-Adventures/jekyll/update/2018/03/09/linux-kernel-mia</id><content type="html" xml:base="https://puzzleduck.github.io/Development-Adventures/jekyll/update/2018/03/09/linux-kernel-mia.html"><![CDATA[<p>This week I had the unfortunate experience of rebooting my laptop and finding out the hard way that the linux kernel image i was running from had mysteriously vanished. It seems that some updates had failed to complete and had left the system in an unbootable state (at least that is what I think happened).</p>

<p>It happened that I’d just turned up to the first FOSS hack night at YBF Teamsquare when this tragedy unfolded and I was able to borrow a <a href="https://www.kali.org/">Kali Linux</a> boot usb from someone at the meetup to boot up the laptop and confirm the hardware was still all functional. Memory was ok, I could read the drive fine, and almost everything seemed to be the there… except in the boot directory only the memtest86 images were present… What happened to my kernel images :o</p>

<p>Spoiler alert: I never figured out why they dissapeared, but there is a very Linuxey happy ending to it all. A few people at the hack night pointed me in the direction of <a href="http://man7.org/linux/man-pages/man2/chroot.2.html">chroot-ing</a> into the disk and repairing the system in place. It took a few tries to get everything to work, but for future reference the process was as follows:</p>

<p>From the live-system open a terminal and run the following:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>umount /dev/mmcblk1p1   <span class="c"># unmount the automounted drive before starting</span>
<span class="nb">cd</span> /mnt
<span class="nb">sudo mkdir </span>duck     <span class="c"># create a working directory to use</span>
<span class="nb">sudo </span>mount /dev/mmcblk1p1 /mnt/duck   <span class="c"># mount the disk in our temp directory</span>
<span class="nb">sudo </span>mount <span class="nt">-t</span> proc none /mnt/duck/proc   <span class="c"># mount system directories for chroot</span>
<span class="nb">sudo </span>mount <span class="nt">-o</span> <span class="nb">bind</span> /dev /mnt/duck/dev
<span class="nb">sudo </span>mount <span class="nt">-o</span> <span class="nb">bind</span> /run /mnt/duck/run
<span class="nb">sudo </span>mount <span class="nt">-o</span> <span class="nb">bind</span> /sys /mnt/duck/sys
<span class="nb">sudo chroot</span> /mnt/duck /bin/bash
</code></pre></div></div>

<p>Now we are running the non-booting-system with its devices, processes and system. We can now run commands to repair the system:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>apt upgrade
apt search linux-image
apt <span class="nb">install </span>linux-image-extra-4.13.0-36-generic linux-image-4.13.0-31-generic
apt purge grub grub-pc grub-common
apt <span class="nb">install </span>grub-common grub-pc
<span class="nb">exit</span>
</code></pre></div></div>

<p>Finally we need to cleanly unmount everything else before unmounting the drive:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>umount /mnt/duck/proc
<span class="nb">sudo </span>umount /mnt/duck/dev
<span class="nb">sudo </span>umount /mnt/duck/run
<span class="nb">sudo </span>umount /mnt/duck/sys
<span class="nb">sudo </span>umount /mnt/duck
<span class="nb">exit</span>
</code></pre></div></div>

<p>Now the system can boot again (allowing me to write this update amongst other things)</p>

<p>Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at . If you have questions, you can ask them on [Jekyll Talk][jekyll-talk].</p>]]></content><author><name></name></author><category term="jekyll" /><category term="update" /><summary type="html"><![CDATA[This week I had the unfortunate experience of rebooting my laptop and finding out the hard way that the linux kernel image i was running from had mysteriously vanished. It seems that some updates had failed to complete and had left the system in an unbootable state (at least that is what I think happened).]]></summary></entry><entry><title type="html">Migrating to Jekyll!</title><link href="https://puzzleduck.github.io/Development-Adventures/minor/update/2017/10/09/migrating-to-jekyll.html" rel="alternate" type="text/html" title="Migrating to Jekyll!" /><published>2017-10-09T08:37:56+00:00</published><updated>2017-10-09T08:37:56+00:00</updated><id>https://puzzleduck.github.io/Development-Adventures/minor/update/2017/10/09/migrating-to-jekyll</id><content type="html" xml:base="https://puzzleduck.github.io/Development-Adventures/minor/update/2017/10/09/migrating-to-jekyll.html"><![CDATA[<p>Today I’ve started migrating my old (and ongoing) blogs over to a Jekyll blog hosted on github pages. The reasons for this change are that I found the Google hosting to be a bit too restrictive, difficult to maintain, and yet another Google service I could do without.</p>

<p>Apart from the initial Jekyll build command I’ve been able to do most of the configuration and this post from a mobile device.</p>]]></content><author><name></name></author><category term="minor" /><category term="update" /><summary type="html"><![CDATA[Today I’ve started migrating my old (and ongoing) blogs over to a Jekyll blog hosted on github pages. The reasons for this change are that I found the Google hosting to be a bit too restrictive, difficult to maintain, and yet another Google service I could do without.]]></summary></entry><entry><title type="html">Testing Adventures</title><link href="https://puzzleduck.github.io/Development-Adventures/article/2016/05/12/testing-adventures.html" rel="alternate" type="text/html" title="Testing Adventures" /><published>2016-05-12T08:45:00+00:00</published><updated>2016-05-12T08:45:00+00:00</updated><id>https://puzzleduck.github.io/Development-Adventures/article/2016/05/12/testing-adventures</id><content type="html" xml:base="https://puzzleduck.github.io/Development-Adventures/article/2016/05/12/testing-adventures.html"><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">
<h4 style="text-align: left;">
Building a verification toolkit ...</h4>
<h4 style="text-align: left;">
... without a software department - Part 1</h4>
<h2 style="text-align: left;">
Binary image verification</h2>
<div style="text-align: left;">
For larger companies and manufacturers who already heavily invest in R&amp;D and software development there is a low barrier to produce in-house binary image writing and verification tools. However for the new entrant into the industry and entities who do not invest in producing their own software the prospect of commissioning custom software could seem a daunting challenge. However many may not be aware that the state of the art in cryptographic verification is right at our fingertips in an open source format which is itself verifiable and inspectable.<br /><br />OpenSSL provides a plethora of hash based verification methods and with very few exceptions (and combining it with crc32) can be used to verify the binary images for almost all jurisdictions. If you are part of a regulatory body considering a new hash technique, ensuring it is available in OpenSSL makes sure you'll always have an independent, verifiable reference implementation that is easy for manufacturers to verify their implementations against and easy for test labs to start utilizing.<br /><br />The following bash functions can be put into your bashrc file to allow very convenient verification of binaries:<br />&nbsp;</div>
<h2 style="text-align: left;">
Image Verification Functions</h2>
<blockquote class="tr_bq">
function hmac-sha1 () { date &gt; hmac-sha1.txt; openssl dgst -sha1 -mac HMAC -macopt hexkey:0000 $@ | tee -a hmac-sha1.txt; }<br /><br />function sha1 () { date &gt; sha1.txt; openssl dgst -sha1 $@ | tee -a sha1.txt; }<br /><br />function crc () { date &gt; crc.txt; crc32 $@ | tee -a crc.txt; }</blockquote>
<div style="text-align: left;">
<br /><br />so now we can just run the commands (replacing &lt;file-name&gt; with the aquired image):</div>
<blockquote class="tr_bq">
<div style="text-align: left;">
sha1 &lt;file-name&gt;<br />hmac-sha1 &lt;file-name&gt;<br />crc &lt;file-name&gt;</div>
</blockquote>
<div style="text-align: left;">
<br />and we get the output files below containing timestamps and the cryptographic digest of the supplied file:</div>
<blockquote class="tr_bq">
sha1.txt<br />hmac-sha1.txt<br />crc.txt</blockquote>
<div style="text-align: left;">
<br />&nbsp;</div>
<div style="text-align: left;">
This give us timestamped logs of the digest values that allow us to verify binary images for the majority of jurisdictions around the world. Next in the series we'll look into tools for acquiring the binary images from a given device.<br />&nbsp;</div>
<div style="text-align: left;">
<br /></div>
<h2 style="text-align: left;">
OpenSSL Resources</h2>
<div style="text-align: left;">
<a href="https://www.openssl.org/docs/apps/openssl.html">OpenSSL Command</a>&nbsp;</div>
<div style="text-align: left;">
<a href="https://www.openssl.org/docs/apps/sha.html">Digest Function</a><br /><br /></div>
</div>]]></content><author><name></name></author><category term="article" /><summary type="html"><![CDATA[Building a verification toolkit ... ... without a software department - Part 1 Binary image verification For larger companies and manufacturers who already heavily invest in R&D and software development there is a low barrier to produce…]]></summary></entry><entry><title type="html">The Rest of May</title><link href="https://puzzleduck.github.io/Development-Adventures/article/2015/06/08/the-rest-of-may.html" rel="alternate" type="text/html" title="The Rest of May" /><published>2015-06-08T04:57:00+00:00</published><updated>2015-06-08T04:57:00+00:00</updated><id>https://puzzleduck.github.io/Development-Adventures/article/2015/06/08/the-rest-of-may</id><content type="html" xml:base="https://puzzleduck.github.io/Development-Adventures/article/2015/06/08/the-rest-of-may.html"><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjooGR5UHeQ0wNDUWRv-dCLYv53VbttG7swsG0uFYxYEMiQjjUEx42OVUGIr1wRdp_s_YSw8owb2-iI1QsOs3blsIobrcTJoCT4d_i0AyQFIKIVkWYZa5BvTecl4RriCwmkdp_5EYmXCkiY/s1600/may-02.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="274" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjooGR5UHeQ0wNDUWRv-dCLYv53VbttG7swsG0uFYxYEMiQjjUEx42OVUGIr1wRdp_s_YSw8owb2-iI1QsOs3blsIobrcTJoCT4d_i0AyQFIKIVkWYZa5BvTecl4RriCwmkdp_5EYmXCkiY/s320/may-02.jpg" width="320" /></a></div>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
Open Knowledge Melbourne</h4>
OpenKnowledge were hosting GovHack on the 13th which I figured I'd go to as I thought GovHack might be a good fit for Free Software Melbourne. Turns out it was a great fit, but b going to the O.K. event I got three times the bang with Alisha, Ruth &amp; Rosie the Melbourne, Gelong and Balarat GovHack fellows. I never knew you could email a tree, but I did when they were done because apparently you can email the CBD trees ha! Anyhow it seems like a pretty interesting Hackathon and I keep hearing more and more from the Open Data movement recently and transparency and access can only be a step in the right direction.<br />
<h3 style="text-align: left;">
Links:</h3>
<div style="text-align: left;">
<a href="http://www.meetup.com/Open-Knowledge-Melbourne/events/221907703/">http://www.meetup.com/Open-Knowledge-Melbourne/events/221907703/</a><br /><a href="http://www.govhack.org/melbourne2015/">http://www.govhack.org/melbourne2015/</a><br /><a href="http://melbourneurbanforestvisual.com.au/">http://melbourneurbanforestvisual.com.au/</a></div>
<div style="text-align: left;">
<br /></div>
<h4 style="text-align: left;">
YOW Nights</h4>
<div style="text-align: left;">
There was also the YOW night in Melbourne on the 14th with Dave Thomas talking about the past, present and event future of memory and computing in general. He seems to be excited about the new memory models proposed by HP's "The Machine" thingy, however he was just as vague and enthusiastic. He also discussed a (possibly related) new programming model where reads are fast and writes are slow and uncertain, which also fits the pattern of a web-based-architecture where reads can be cached close to the consumers, but writes have to follow the chain all the way back to the origin and the origins disk/storage before a write is completed (probably without confirmation). For the future he recomended focusing on collections and queries, with this absolute gem "think more ... write less code"</div>
<h4 style="text-align: left;">
Do Right </h4>
<div style="text-align: left;">
On the 20th I took an interesting detour down the path of the Samurai at the Do Right meetup, who are a branch of the new acropolis group. Looking into the group they seem to be well intentioned and "mostly harmless", but the ethos seems somewhat flaky and unstated and I think my time is better spent elsewhere.</div>
<div style="text-align: left;">
<br /></div>
<h4 style="text-align: left;">
Free Software Melbourne</h4>
<div style="text-align: left;">
The 21st was the Free Software Melbourne meetup with guests from GovHack and Russell Coker. We trialled our first live stream of the meetings which was a particular success with a few regular members unable to attend in person but listening in from around Melbourne. Jordan Wilson-Otto and Alisha Ryans-Taylor from GovHack gave us a run down on the upcoming competition and outlined it's goals in regard to Open Government and some of it's history in Australia. After another frantic Gnews Russell gave us an account of his journey with open source and in particular Debian and SELinux. I especially enjoyed the Debian SElinux demo box stories... If I'd been given an offer like that I do more than just try "rm -Rf /". I also found the amusing story about email client bugs another good reasons to stick with server side email storage, where I can't mess it up :p. They were definitely some interesting topics this month sparking discussions that continued over to dinner at Classic Curry.</div>
<h3 style="text-align: left;">
Links:</h3>
<div style="text-align: left;">
<a href="http://www.meetup.com/Free-Software-Melbourne/events/222521963/">http://www.meetup.com/Free-Software-Melbourne/events/222521963/</a><br /><a href="http://govhack.org/">http://govhack.org/</a><br /><a href="http://freesoftware.org.au/blog/alisha-ryans-taylor-on-govhack-melbourne-21-may/">http://freesoftware.org.au/blog/alisha-ryans-taylor-on-govhack-melbourne-21-may/</a><br /><a href="http://freesoftware.org.au/static/media/uploads/audio/fsm-2015-05-21.ogg">http://freesoftware.org.au/static/media/uploads/audio/fsm-2015-05-21.ogg</a></div>
<div style="text-align: left;">
<br /></div>
<h4 style="text-align: left;">
OWASP Melbourne</h4>
<div style="text-align: left;">
The OWASP meetup was on the 22nd and Julian Berton gave a cool demo using the exposed framework (there it is again) to bypass root and proxy checking on installed apps. To be honest I didn't know apps did that (although in the context it is quite understandable for this kind of app) and I'd might have had to learn this earlier if my bank did that (or change bank).</div>
<h3 style="text-align: left;">
Links:</h3>
<div style="text-align: left;">
<a href="http://www.meetup.com/Application-Security-OWASP-Melbourne/events/222367114/">http://www.meetup.com/Application-Security-OWASP-Melbourne/events/222367114/</a><br /><a href="https://twitter.com/julianberton">@JulianBerton</a></div>
<div style="text-align: left;">
<br /></div>
<h4 style="text-align: left;">
Data Science</h4>
<div style="text-align: left;">
Unfortunately I missed the Data Science meetup on the 26th and instead spent the evening wandering around Ettihad Stadium wondering where I was, it even took me over half an hour to find my car again... I'm so geographically challenged.</div>
<h3 style="text-align: left;">
Links:</h3>
<div style="text-align: left;">
<a href="http://www.meetup.com/Data-Science-Melbourne/events/220621482/">http://www.meetup.com/Data-Science-Melbourne/events/220621482/</a></div>
<div style="text-align: left;">
<br /></div>
<h4 style="text-align: left;">
Open Knowledge</h4>
<div style="text-align: left;">
Then on the 27th the Open Knowledge Foundation had a mapping meetup in preparation for the upcoming GovHack. Matthew Cengia took us through a tour of JQ (json editor/viewer), CVS Kit (collection of cvs tools) and even slipped in a couple of command like skills (actually this might be hard not to do while demoing command line tools). Then Steve Bennett crammed a weekend workshop on TileMill into about an hour of slides and tutorials. Stowing data on proprietary clouds still gives me the creeps, so I'll probably skip that one if I can at GovHack, but we'll see what happens.</div>
<h3 style="text-align: left;">
Links:</h3>
<div style="text-align: left;">
<a href="http://www.meetup.com/Open-Knowledge-Melbourne/events/222118028/">http://www.meetup.com/Open-Knowledge-Melbourne/events/222118028/</a><br /><a href="https://stedolan.github.io/jq/">https://stedolan.github.io/jq/</a><br /><a href="https://csvkit.readthedocs.org/">https://csvkit.readthedocs.org/</a><br /><a href="https://www.mapbox.com/tilemill">https://www.mapbox.com/tilemill</a></div>
<div style="text-align: left;">
<br /></div>
<h4 style="text-align: left;">
Engineering Machine Consciousness</h4>
<div style="text-align: left;">
The Engineering Machine Consciousness meet was a thought provoking night as always. It certainly will be an interesting time ahead with the rise of resources. Let me give that some context James Newton-Tho­mas was discussing the idea that the economy (at least as we know it) is made up of three fundamental units: resources, capital and labour. Now even mainstream news is catching onto the fact that labour is about to be taken out of that equation with the rise of automated vehicles and factories. I also think the capital part of the equation is in doubt with the rise of home fabrication and the pending self-manufacturing era, this will lead to an economy based solely on the possession of resources... unless something else changes, and what are the chances of that.</div>
<h3 style="text-align: left;">
Links:</h3>
<div style="text-align: left;">
<a href="http://www.meetup.com/Engineering-Machine-Consciousness/events/219770018/">http://www.meetup.com/Engineering-Machine-Consciousness/events/219770018/</a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<h4 style="text-align: left;">
RHoK Melbourne Winter Hackathon</h4>
<div style="text-align: left;">
On the weekend of the 30th I joined about 50 other hackers at the RHoK Winter Hackathon. This was just a great weekend, if only more hackathons could be this focused on positive projects and relaxed about the competitive side. All the projects were interesting and seemed to have a real need and purpose, it was also interesting tackling projects with such a firm direction rather than the usual hackathon kind of "shot in the dark" kind of attitude.</div>
<h3 style="text-align: left;">
Links:</h3>
<div style="text-align: left;">
<a href="http://www.meetup.com/Random-Hacks-of-Kindness-Melbourne/events/222142660/">http://www.meetup.com/Random-Hacks-of-Kindness-Melbourne/events/222142660/</a><br /><a href="http://www.rhokaustralia.org/">http://www.rhokaustralia.org/</a><br /></div>
</div>]]></content><author><name></name></author><category term="article" /><summary type="html"><![CDATA[Open Knowledge Melbourne OpenKnowledge were hosting GovHack on the 13th which I figured I'd go to as I thought GovHack might be a good fit for Free Software Melbourne. Turns out it was a great fit, but b going to the O.K. event I got three…]]></summary></entry><entry><title type="html">Meetups from May in Melbourne</title><link href="https://puzzleduck.github.io/Development-Adventures/article/2015/06/07/meetups-from-may-in-melbourne.html" rel="alternate" type="text/html" title="Meetups from May in Melbourne" /><published>2015-06-07T18:27:00+00:00</published><updated>2015-06-07T18:27:00+00:00</updated><id>https://puzzleduck.github.io/Development-Adventures/article/2015/06/07/meetups-from-may-in-melbourne</id><content type="html" xml:base="https://puzzleduck.github.io/Development-Adventures/article/2015/06/07/meetups-from-may-in-melbourne.html"><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBFUW6UiHMvDmxD6G_A8XoWIzOb7kmUQ8d8Px-WacpCUyxw0SLgVCNgUT56jLHrhPYOUC49lIwbZUU63HFoyXGR_DmPzJRla-qBJSeKXJ8XZh1Yc_dyibDWxahV-wtUoog47vFVkXzbkcK/s1600/May-blog-01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBFUW6UiHMvDmxD6G_A8XoWIzOb7kmUQ8d8Px-WacpCUyxw0SLgVCNgUT56jLHrhPYOUC49lIwbZUU63HFoyXGR_DmPzJRla-qBJSeKXJ8XZh1Yc_dyibDWxahV-wtUoog47vFVkXzbkcK/s320/May-blog-01.png" width="320" /></a></div>
<br />
<br />
What a busy month of may that was, kicking off on the 1st with the virtual reality meetup. A guy form @TSRCTCO discussed and demonstrated some interactive imersive applications... the Occulus display was amazingly reactive and quick to react to movement without blur or lag. I also got to have a play with the Google Project Tango which had a few cute demo apps and I can't wait till those kind of sensors are standard. It's such a shame Occulus just got bought by Facebook because that looked like being the most open VR platform out there, but I'm terrified that the probably will still be the most "open".<br />
<br />
<h4 style="text-align: left;">
Links:</h4>
<div style="text-align: left;">
<a href="http://www.meetup.com/Melbourne-Virtual-Reality/events/221881543/">http://www.meetup.com/Melbourne-Virtual-Reality/events/221881543/</a><br />
<a href="https://twitter.com/tsrctco">@TSRCTCO</a><br />
<br />
<br />
Linux Users Victoria was on the 5th and Nathan Scott inspired me to have a fiddle around with PCP (Performance Co-Pilot) as remote historical logging coult be a very handy tool someday. Check out acksyn.org for more PCP resources. Then Paul Fenwick reminded me (and us all) to keep and eye on our apps, lest they keep an eye on us. His recomendations include afwall+, xprivacy, all the guardian project apps including orbot and off-the-record and also talked up Serval which I've been meaning to have a play with again (but haven't).</div>
<h4 style="text-align: left;">
Links:</h4>
<div style="text-align: left;">
<a href="http://www.meetup.com/Linux-Users-of-Victoria/events/222126397/">http://www.meetup.com/Linux-Users-of-Victoria/events/222126397/</a><br />
<a href="http://pcp.io/">http://pcp.io/</a><br />
<a href="https://play.google.com/store/apps/details?id=biz.bokhorst.xprivacy.installer/">https://play.google.com/store/apps/details?id=biz.bokhorst.xprivacy.installer/</a><br />
<br />
The next day was the Melbourne JVM meeting celebrating 20 years of Java with an international guest (New Zeland counts doesn't it). There were a couple of quite syncronynis news items with the Gradle 2.4 release and the BioWare Orbit release also making Free Software Melbourns Gnews. Then Pablo Caif gave us a great demo of performing geospatial queries in Java using GeoTools allowing for easy importing geo data in various formats. It also allows easy plotting and overlays on screen and usefull querying capabilities.<br />
<br />
Then Sumit Khanna talked in depth about his experience with BigSense, a sensor network monitoring tool written mostly in Scala (with a splash of Jetty and Tomcat). It was quite an interesting project involving moitoring environmental impact and effects, in this case for storm water monitoring. One of the coolest things was simply the idea of repurposing old/cheap routers that run OpenWRT as microcontrollers for inputing sensor data through one wire interface and return data through wifi. I also checked out Sumits open mike night on th 13th which was a cool night and I particularly liked being reminded of the "this too shall pass" story.</div>
<h4 style="text-align: left;">
Links:</h4>
<div style="text-align: left;">
<a href="http://www.meetup.com/Melbourne-Java-JVM-Users-Group/events/220242061/">http://www.meetup.com/Melbourne-Java-JVM-Users-Group/events/220242061/</a><br />
<a href="https://gradle.org/gradle-2-4-the-fastest-yet/">https://gradle.org/gradle-2-4-the-fastest-yet/</a><br />
<a href="https://github.com/electronicarts/orbit">https://github.com/electronicarts/orbit</a><br />
<a href="http://en.wikipedia.org/wiki/This_too_shall_pass">http://en.wikipedia.org/wiki/This_too_shall_pass</a></div>
</div>]]></content><author><name></name></author><category term="article" /><summary type="html"><![CDATA[What a busy month of may that was, kicking off on the 1st with the virtual reality meetup. A guy form @TSRCTCO discussed and demonstrated some interactive imersive applications... the Occulus display was amazingly reactive and quick to…]]></summary></entry></feed>