Hoverbear https://hoverbear.org A computer scientist working in open source towards a more hopeful future. Zola en Fri, 10 Oct 2025 00:00:00 +0000 Custom fonts in Obsidian Fri, 10 Oct 2025 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/custom-fonts-obsidian/ https://hoverbear.org/blog/custom-fonts-obsidian/ <p><a rel="noopener external" target="_blank" href="https://obsidian.md/">Obsidian</a> lets you customize your fonts with its built in settings apparatus, but that's not always quite enough for more compicated use cases. Let's quickly review the basic settings, then take a look at how to use <a rel="noopener external" target="_blank" href="https://help.obsidian.md/snippets">CSS Snippets</a> to fine tune fonts (and other styles) on the theme or selector level. Then, we'll look at how to do the same on an <a rel="noopener external" target="_blank" href="https://obsidian.md/publish">Obsidian Publish</a> site.</p> Folder Notes in Obsidian Publish Sun, 28 Sep 2025 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/folder-notes-in-obsidian-publish/ https://hoverbear.org/blog/folder-notes-in-obsidian-publish/ <p>Recently, I've been participating in some very fun TTRPG games. <a rel="noopener external" target="_blank" href="https://obsidian.md/">Obsidian</a> has become my favorite tool for taking notes. One plugin I've found which I quite like is <a rel="noopener external" target="_blank" href="https://github.com/LostPaul/obsidian-folder-notes">Folder Notes</a>.</p> <p>I ended up getting a <a rel="noopener external" target="_blank" href="https://obsidian.md/publish">Publish</a> subscription, and wanted mimic the behavior of Folder Notes on the published site. This weekend, I sat down and hacked on it a bit. I'm relatively pleased with the end result and wanted to share.</p> Instrumenting Axum projects Wed, 19 Jul 2023 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/instrumenting-axum-projects/ https://hoverbear.org/blog/instrumenting-axum-projects/ <p>Recently I was helping someone get bootstrapped on their Axum project, and they were getting a bit frustrated with the lack of context about the goings on in their application. While Axum and it's ecosystem are well instrumented, by default most of it is not very well surfaced for beginners. It can be a bit intimidating figuring out how to put the pieces together and use them.</p> Extending NixOS Configurations Wed, 29 Mar 2023 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/extending-nixos-configurations/ https://hoverbear.org/blog/extending-nixos-configurations/ <p><a rel="noopener external" target="_blank" href="https://nixos.org/">NixOS</a> <a rel="noopener external" target="_blank" href="https://nixos.wiki/wiki/NixOS_modules">modules</a> and configurations offer us a tantilizing way to express and share systems. My friends and I can publish our own flakes containing <code>nixosModules</code> and/or <code>nixosConfigurations</code> outputs which can be imported, reused, and remixed. When it comes to secret projects though, that openness and ease of sharing can be a bit of a problem.</p> <p>Let's pretend my friend wants to share a secret NixOS module or package with me, they've already given me access to the GitHub repository, and now I need to add it to my flake. My <a rel="noopener external" target="_blank" href="https://github.com/Hoverbear-Consulting/flake">flake</a> is public and has downstream users. I can't just up and add it as an input. For one thing, it'd break everything downstream. More importantly, my friend asked me not to.</p> <p>It's terribly inconvienent to add the project as an input and be careful to never commit that change to the repository. Worse, if I did screw up and commit it, my friend might be disappointed in me. We simply can't have that.</p> <p>Let's explore how to create a flake which extends some existing flake, a pattern which can be combined with a <code>git+ssh</code> flake URL to resolve this precarious situation.</p> Nix on the Steam Deck Tue, 06 Dec 2022 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/nix-on-the-steam-deck/ https://hoverbear.org/blog/nix-on-the-steam-deck/ <p>When I first started using Linux in 2006 I remember dreaming of a Linux Console. The idea maybe wasn't so far fetched at the time, the PlayStation 3 had just been released with OtherOS support which allowed users to install Linux (or BSD). Still, it seemed that a Linux-first console would only ever be a dream. Now in 2022, Valve's Steam Deck is a hackable Linux-first portable console.</p> <p>Today, we'll be putting Nix on it, because what's Linux without Nix?</p> Declarative GNOME configuration with NixOS Mon, 26 Sep 2022 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/declarative-gnome-configuration-in-nixos/ https://hoverbear.org/blog/declarative-gnome-configuration-in-nixos/ <p>I <em>adore</em> tinkering with my machine, trying new tools, extensions, themes, and ideas. When I was younger, it was simply a way to learn. Now, it's a way for me to refine my workspace and bring myself small joys.</p> <p>While tinkering can be fun, it can be a chore to set up a new machine, keep configurations up to date between machines, or even just remember to keep up to date backups. We've previously explored how to create <a href="/blog/configurable-nix-packages/"><strong>Configurable Nix packages</strong></a>, which solves the problem for things like <code>neovim</code>, but what about when a package isn't practically configurable?</p> <p>What about when we want to configure a whole desktop environment? While <a rel="noopener external" target="_blank" href="https://nixos.org/">NixOS</a> offers configuration settings like <code>services.gnome.gnome-keyring.enable</code> for systemwide features, there's a void of knobs when you want to set things like user-specific GNOME 'Favorite Apps' or extensions.</p> <p>Let's explore a useful addition to your NixOS configuration: <a rel="noopener external" target="_blank" href="https://nix-community.github.io/home-manager/">Home Manager</a> and its <a rel="noopener external" target="_blank" href="https://wiki.gnome.org/Projects/dconf"><code>dconf</code></a> module.</p> Xbox Controllers on Arch Linux Wed, 29 Jun 2022 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/xbox-controllers-on-arch/ https://hoverbear.org/blog/xbox-controllers-on-arch/ <p>I fumbled a bit setting up my Xbox controller in Arch, but managed it and wanted to share.</p> <p>Let's quickly cover how to use <a rel="noopener external" target="_blank" href="https://github.com/medusalix/xone"><code>xone</code></a> to set up a <a rel="noopener external" target="_blank" href="https://www.xbox.com/en-CA/accessories/controllers/elite-wireless-controller-series-2">Xbox Elite Wireless Controler Series 2</a> connecting to <a rel="noopener external" target="_blank" href="https://archlinux.org/">Arch Linux</a> via a <a rel="noopener external" target="_blank" href="https://www.xbox.com/en-CA/accessories/adapters/wireless-adapter-windows">Xbox Wireless Adapter for Windows 10</a>. Once we're done, it should 'just work' in <a rel="noopener external" target="_blank" href="https://archlinux.org/packages/multilib/x86_64/steam/"><code>steam</code></a>, <a rel="noopener external" target="_blank" href="https://archlinux.org/packages/multilib/x86_64/wine/"><code>wine</code></a>, <a rel="noopener external" target="_blank" href="https://archlinux.org/packages/community/any/lutris/"><code>lutris</code></a>, or your other games.</p> Visually debugging PGX extensions Thu, 23 Jun 2022 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/debugging-pgx-extensions/ https://hoverbear.org/blog/debugging-pgx-extensions/ <p>Rust spoils me, I rarely need to reach for a debugger thanks to structured logging via <a rel="noopener external" target="_blank" href="https://docs.rs/tracing/"><code>tracing</code></a> and errors with spantraces thanks to <a rel="noopener external" target="_blank" href="https://docs.rs/eyre/"><code>eyre</code></a>. When I do find myself wanting to really dig my grubby little paws into some code, configuring the debugger targets can feel intimidating.</p> <p>Experience has taught me that I can conquer intimidating things though, and sometimes that is best done with a little help. While hacking on a <a rel="noopener external" target="_blank" href="https://github.com/tcdi/pgx"><code>pgx</code></a> bug, I realized I was using a newly installed system, and needed to reconfigure my debugger settings.</p> <p>This made a good opportunity for me to share with you! This short article will cover how to configure <a rel="noopener external" target="_blank" href="https://code.visualstudio.com/">Visual Studio Code</a> with <a rel="noopener external" target="_blank" href="https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb">CodeLLDB</a> so you can visually debug your <a rel="noopener external" target="_blank" href="https://github.com/tcdi/pgx"><code>pgx</code></a> extensions. This includes being able to step into the <a rel="noopener external" target="_blank" href="https://github.com/tcdi/pgx"><code>pgx</code></a> or <a rel="noopener external" target="_blank" href="https://github.com/postgres/postgres"><code>postgres</code></a> sources. While the instructions may be <a rel="noopener external" target="_blank" href="https://archlinux.org/">Arch Linux</a> specific, they should be able to be adapted to a different Linux.</p> Getting started with Xous and the Precursor Thu, 16 Jun 2022 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/exploring-xous/ https://hoverbear.org/blog/exploring-xous/ <p>A few years ago, I saw <a rel="noopener external" target="_blank" href="https://www.bunniestudios.com/">bunnie</a>'s <a rel="noopener external" target="_blank" href="https://precursor.dev">Precursor</a> on Crowd Supply and instantly fell in love. The idea enamored me despite hardly knowing what FPGAs were at the time.</p> <p>Embedded development has always been a fun hobby of mine, and I think it's an excellent pursuit for any developer to improve their knowledge. If you like Rust (like me), some great starting points are the <a rel="noopener external" target="_blank" href="https://embedded-trainings.ferrous-systems.com/">nRF52840s</a>, the <a rel="noopener external" target="_blank" href="https://espressif-trainings.ferrous-systems.com/">ESP32-C3-DevKitC-02</a>, or one of the <a rel="noopener external" target="_blank" href="https://www.tockos.org/">TockOS boards (like the Hail)</a>.</p> <p>While I love those, one thing I've wanted for a long time was a portable board with a battery, screen, keyboard, SDR, and user-servicable parts that could be hacked on top to bottom.</p> <p>The Precursor offers all of the above list (except, sadly, the SDR) and is powered by a <a rel="noopener external" target="_blank" href="https://www.origin.xilinx.com/products/silicon-devices/fpga/spartan-7.html">XC7S50-1L CSG324I System-on-Chip (SoC)</a> running the open <a rel="noopener external" target="_blank" href="https://github.com/betrusted-io/betrusted-soc">Betrusted SoC</a> and an <a rel="noopener external" target="_blank" href="https://www.latticesemi.com/-/media/LatticeSemi/Documents/DataSheets/iCE/iCE40-UltraPlus-Family-Data-Sheet.ashx">iCE40UP5K SG48 Embedded Controller (EC)</a> running the open <a rel="noopener external" target="_blank" href="https://github.com/betrusted-io/betrusted-ec">Betrusted EC</a> on an open <a rel="noopener external" target="_blank" href="https://github.com/betrusted-io/betrusted-hardware">hardware design</a>. It seems <strong>almost perfect</strong> for me.</p> <p>Well... I finally convinced myself to order one as a reward for doing a big thing, and it has now arrived! So, let's explore!</p> PostgreSQL Aggregates with Rust Wed, 09 Feb 2022 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/postgresql-aggregates-with-rust/ https://hoverbear.org/blog/postgresql-aggregates-with-rust/ <p>Reaching for something like <code>SUM(vals)</code> or <code>AVG(vals)</code> is a common habit when using PostgreSQL. These <a rel="noopener external" target="_blank" href="https://www.postgresql.org/docs/current/functions-aggregate.html">aggregate functions</a> offer users an easy, efficient way to compute results from a set of inputs.</p> <p>How do they work? What makes them different than a function? How do we make one? What kinds of other uses exist?</p> <p>We'll explore creating some basic ones using SQL, then create an extension that defines aggregates in Rust using <a rel="noopener external" target="_blank" href="https://github.com/zombodb/pgx"><code>pgx</code></a> 0.3.0's new aggregate support.</p> Configurable Nix packages Sat, 01 Jan 2022 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/configurable-nix-packages/ https://hoverbear.org/blog/configurable-nix-packages/ <p>The <a rel="noopener external" target="_blank" href="https://github.com/NixOS/nixpkgs/tree/98f82e9c35aaf1eb32f0d8787e948da5ca970449/pkgs/applications/editors/vim"><code>vim</code></a> and <a rel="noopener external" target="_blank" href="https://github.com/NixOS/nixpkgs/tree/98f82e9c35aaf1eb32f0d8787e948da5ca970449/pkgs/applications/editors/neovim"><code>neovim</code></a> packages in <a rel="noopener external" target="_blank" href="https://github.com/NixOS/nixpkgs">Nixpkgs</a> allow users to set custom configuration, including their <code>customRC</code> and any plugins they might want.</p> <p>How do they accomplish it?</p> <p>In this article, we'll explore how to create packages with similar behavior. We'll create a simple Rust app that consumes a configuration file, then create a Nix flake containing both an unwrapped binary package as well as a configurable package.</p> Forging SQL from Rust Mon, 20 Sep 2021 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/forging-sql-from-rust/ https://hoverbear.org/blog/forging-sql-from-rust/ <p>PostgreSQL offers an extension interface, and it's my belief that Rust is a fantastic language to write extensions for it. <a rel="noopener external" target="_blank" href="https://twitter.com/zombodb">Eric Ridge</a> thought so too, and started <a rel="noopener external" target="_blank" href="https://github.com/zombodb/pgx"><code>pgx</code></a> awhile back. I've been working with him to improve the toolkit, and wanted to share about one of our latest hacks: improving the generation of extension SQL code to interface with Rust.</p> <p>This post is more on the advanced side, as it assumes knowledge of both Rust and PostgreSQL. We'll approach topics like foreign functions, dynamic linking, procedural macros, and linkers.</p> A Flake for your Crate Fri, 25 Jun 2021 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/a-flake-for-your-crate/ https://hoverbear.org/blog/a-flake-for-your-crate/ <p><a rel="noopener external" target="_blank" href="https://edolstra.github.io/pubs/phd-thesis.pdf">Nix (PDF)</a> provides users a way to access the massive <a rel="noopener external" target="_blank" href="https://github.com/NixOS/nixpkgs">Nixpkgs</a> library of packages, create reproducable builds of software, roll slim containers, create declarative VMs, or run their whole machines. A new feature of Nix, <em>Flakes</em>, is bringing a convention to how projects like Rust crates can be accessed, integrated, and used within Nix (or NixOS.)</p> <p>Let's explore how we can make our Rust crate usable as a Nix flake. At the end of this, any <code>nix</code> user with Flakes enabled should be able to run your project with something like <code>nix run github:user/project</code>. They'll be able to add your repository as a <a rel="noopener external" target="_blank" href="https://nixos.wiki/wiki/Overlays">Nix overlay</a>, install the package, do interactive builds, or create a portable bundle of it.</p> Using rust-bindgen in Nix Tue, 04 May 2021 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/rust-bindgen-in-nix/ https://hoverbear.org/blog/rust-bindgen-in-nix/ <p>While building the Nix packages for <a rel="noopener external" target="_blank" href="https://github.com/zombodb/plrust">pl/Rust</a> I bumped into a curious issue: I couldn't link to <code>stdio.h</code>, or <code>stdbool.h</code>! They were clearly on my path, too.</p> <p>It flummoxed me for quite some time, but exploring the <a rel="noopener external" target="_blank" href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/networking/browsers/firefox/common.nix#L247-L253"><code>firefox</code></a> package led to a way forward. It was <a rel="noopener external" target="_blank" href="https://github.com/rust-lang/rust-bindgen"><code>rust-bindgen</code></a> not finding libraries!</p> Custom live media with Nix flakes Thu, 15 Apr 2021 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/nix-flake-live-media/ https://hoverbear.org/blog/nix-flake-live-media/ <p>I've always been quite fond of booting live media. To test or install a new operating system, to recover an old one, find some privacy, or to do a myriad of other specialized tasks. LiveUSBs and liveCDs introduced to me a new way of thinking about my computer.</p> <p>It improved my mental model of the separation of between the machine, the UEFI (or BIOS), any bootloaders, and the operating system itself.</p> <p>As I learnt about them over 15 years ago I spent months exploring ways to use them. I used them to rescue systems for myself and others, diagnose hardware, recovery files, and quickly set up machines.</p> <p>With Nix flakes, we can define a custom live system and build it with minimal steps. This NixOS live system which could be a composition of existing NixOS modules, or an entirely new configuration.</p> The Entanglement of Purpose & Success Thu, 31 Dec 2020 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/the-entanglement-of-purpose-and-success/ https://hoverbear.org/blog/the-entanglement-of-purpose-and-success/ <p>There are few things I remember more clearly from my post-secondary than this question from professor Rob Hancock:</p> <blockquote> <p>How do you define success?</p> </blockquote> <p>I was as much impacted by the question as I was by how my cohort grappled with the question over the next semester, and beyond. It's a question I've continually faced throughout my whole life.</p> <p>It turns out that success to me is an elusive, ephemeral, amorphous concept. It slips from me fingers as I grasp at it, crumbles away as I try to hold onto it, and escapes me if I become too bold or complacent.</p> <p>Success doesn't need to some end goal to capstone your life: some glorious retirement in a great mansion, a C-level job title, or your offspring seeking out their own success. Success can be just a step away than what you have right now, a short walk, or a long hike. Sometimes, it's exactly where you are.</p> <p>If success is a destination, then purpose is the way there. Purpose is the wind in the sails of a ship, success is a port of call. Purpose guides your path through weathering storms, treacherous seas, and emotional outbursts. It steers you away from the siren's call of whirlpools and icebergs of burnout, and ushers you aginst the looming void of utter failure.</p> Finding direction, defining goals Thu, 30 Jan 2020 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/finding-direction-defining-goals/ https://hoverbear.org/blog/finding-direction-defining-goals/ <p>The simple passage of time changes us. Our personalities, identities, social circles, fears, and passions all shift to meet our needs throughout life. As we grow and mature, we must reconcile our past and resolve ourselves to the future. Time trawls up existential questions again and again: <em>Who am I? What is my purpose? What do I want in life? What am I willing to struggle with? What happens if I fail? What could have been, but never will be?</em> These kinds of questions can prompt deep introspection, and act as reasons for change.</p> <p>My life is unrecognizable compared to even two years ago, and with these changes, new answers to those questions started to form. I found myself desiring a change.</p> Hierarchical Structures in PostgreSQL Sun, 19 Jan 2020 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/postgresql-hierarchical-structures/ https://hoverbear.org/blog/postgresql-hierarchical-structures/ <p>It's a common pattern: a database developer at a startup is probably on the Product subteam of the Engineering team at their company. In a department store, shoes are a subcategory of clothing, while your favorite thermos is probably in the travel department.</p> <p>In any Github organization, there are teams within teams within teams. In any large department store there are categories deeply nested. In any recipe book, there are many ways to classify food.</p> <p>So how can we model them?</p> Getting the most of WSL Wed, 11 Dec 2019 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/getting-the-most-out-of-wsl/ https://hoverbear.org/blog/getting-the-most-out-of-wsl/ <p>Not long ago, Microsoft started iterating more heavily on their long-existing "Windows Subsystem for Linux" feature. The feature has existed for some time, but recently has it become much more usable for everyday Linux development work.</p> <p>In this post, we'll investigate some ways to get the most out of WSL. I won't present anything new here, just providing a single place for how I or someone else <strong>could</strong> get things set up.</p> Common Safety Pitfalls found by Jepsen Wed, 18 Sep 2019 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/common-safety-pitfalls-found-by-jepsen/ https://hoverbear.org/blog/common-safety-pitfalls-found-by-jepsen/ <p>When <a rel="noopener external" target="_blank" href="https://jepsen.io/">Jepsen</a> appeared in the industry several years ago our team at PingCAP couldn't have been happier. Finally, an approachable, understandable reliability testing framework along with an enjoyable and rigorous library of analyses of popular databases.</p> <p>Jepsen is an umbrella term for the software library, collection of articles, and service of the same name. Together, the project pushes distributed systems to be more accurate in their claims and more thorough in their testing.</p> <p>It's been indispensable for battle-testing TiDB and TiKV, our distributed databases, as we deploy them in some of the largest technology companies in the world.</p> Why Benchmarking Distributed Databases Is So Hard Mon, 08 Jul 2019 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/benchmarking-is-hard/ https://hoverbear.org/blog/benchmarking-is-hard/ <p>If you’re an avid reader of distributed systems news like I am, you’ve probably seen your share of benchmarks. You’ve also probably stopped taking them at face value. Unfortunately, benchmarks are hard to get right, and even more unfortunately, many articles touting benchmarks are actually benchmarketing, showcasing skewed outcomes to sell products.</p> <p>So why do it at all? Let’s take a look at some of the motivations of benchmarking, the common tools, and discuss a few things to keep in mind when benchmarking.</p> Optional Arguments in Rust Sun, 04 Nov 2018 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/optional-arguments/ https://hoverbear.org/blog/optional-arguments/ <p>When designing an API for your crate one topic which can come is how to handle optional arguments. Let's explore our <code>Option</code>s in Rust!</p> Ascend Tue, 09 Oct 2018 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/ascend/ https://hoverbear.org/blog/ascend/ <p>It seems that at times of monumental change in life there is a 'before' time, and an 'after' time. For example, the time 'before' graduation, and the time 'after'. It feels appropriate for the moment. Over the other side of the summit is unknowns. Unknowns about the future, about ones place in it, and about what changes might come next.</p> <p>While it is convenient at moments to make distinct 'before' and 'after' perspectives, it is not accurate. Life marches monotonically from change to change, and each before time is a composition of all previous 'before' <em>and</em> 'after' times. After one change, another will come, and the current ominous 'after' time, and its unknowns, will become a 'before' time, with less unknowns.</p> Learning to Tread the Dawn Fri, 03 Aug 2018 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/treading-dawn/ https://hoverbear.org/blog/treading-dawn/ <p>In the time since my last writing life has been nothing short of a whirlwind. It's been good though. I've relocated, started at PingCAP, found a new apartment, bought furniture(!!!), traveled, travelled more, and been working on a few other bit things.</p> <p>Moving back to Victoria from Berlin was (as predicted) quite a change. Having lived here most of my life though, I still have old friends here and know the city well. The city has been changing, some areas are completely full of construction, even minutes outside of downtown. I'm quite interested in seeing where the city is going, and how they tackle problems like homelessness as the city becomes more and more expensive.</p> A New Year Dawns Mon, 01 Jan 2018 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/a-new-dawn/ https://hoverbear.org/blog/a-new-dawn/ <p>First of all, <strong>happy new year!</strong></p> <p>It's been awhile since I wrote anything, and there are many things I'd love to write more about. Sadly, time is a limited resource and I've been managing to keep quite busy. For now, I'll stick to an update about a wave of change in my life.</p> The Path to Rust on the Web Thu, 06 Apr 2017 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/the-path-to-rust-on-the-web/ https://hoverbear.org/blog/the-path-to-rust-on-the-web/ <p>Recently there has been quite a bit of talk about <em>WebAssembly</em>, a new format for code for the web. It is a compile target for languages like C and Rust that enables us to write, and run, code from these languages in our browser.</p> <p>In the interest of learning more about this technology (and to avoid writing more Javascript) let's explore together and get our hands dirty!</p> <blockquote> <p><strong>Disclaimer:</strong> WebAssembly is stabilized, but most implementations are not. The information contained here may become out of date or be incorrect, despite working at the time of writing.</p> </blockquote> Setting up a Rust Development Environment Fri, 03 Mar 2017 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/setting-up-a-rust-devenv/ https://hoverbear.org/blog/setting-up-a-rust-devenv/ <p>In this post we'll be discussing one way to set up your machine for Rust development. There are different ways, particularly related to the text editor, so feel free to skip what is irrelevant to you. We'll focus on:</p> <ul> <li>Setting up Rust via Rustup.</li> <li>Valuable tools like <code>clippy</code> and <code>rustfmt</code>.</li> <li>Configuring VS Code for Rust.</li> <li>Debugging with the command line and inside of VS Code.</li> <li>Using different compile targets.</li> </ul> <p>Everything we do should be functional on both Linux and MacOS, on Windows your mileage may vary. I, unfortunately, don't have a Windows instance to test on.</p> The Future with Futures Wed, 01 Mar 2017 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/the-future-with-futures/ https://hoverbear.org/blog/the-future-with-futures/ <p>Recently there has been a lot of progress in the Rust language towards a robust asynchronous stack. In this article we'll take a look at what these things are, take a tour of what's available, play with some examples, and talk about how the pieces fit together.</p> <p>We'll get started with the <code>futures</code> crate to start, move on to <code>futures_cpupool</code>, and then eventually to <code>tokio</code>. We will assume you have some knowledge of programming, and have at least thought about trying Rust before.</p> Pretty State Machine Patterns in Rust Wed, 12 Oct 2016 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/rust-state-machine-pattern/ https://hoverbear.org/blog/rust-state-machine-pattern/ <p>Lately I've been thinking a lot about the <em>patterns</em> and <em>structures</em> which we program with. It's really wonderful to start exploring a project and see familiar patterns and styles which you've already used before. It makes it easier to understand the project, and empowers you to start working on the project faster.</p> <p>Sometimes you're working on a new project and realize that you need to do something in the same way as you did in another project. This <em>thing</em> might not be a functionality or a library, it might not be something which you can encode into some clever macro or small crate. Instead, it may be simply a pattern, or a structural concept which addresses a problem nicely.</p> <p>One interesting pattern that is commonly applied to problems is that of the 'State Machine'. Let's take some time to consider what exactly we mean when we say that, and why they're interesting.</p> An HTTPS Terminator Box Thu, 29 Sep 2016 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/an-https-terminator-box/ https://hoverbear.org/blog/an-https-terminator-box/ <p>Over the last couple days at <a rel="noopener external" target="_blank" href="http://asquera.de/">asquera</a> we've been on a retreat at the <a rel="noopener external" target="_blank" href="http://landhaus-fredenwalde.de/">Landhaus Fredenwalde</a>. It's really beautiful out here and it's given me a chance to work on a few small projects which I've been wanting to explore for awhile now.</p> <p>Anyways, yesterday I set up a system that uses <a rel="noopener external" target="_blank" href="https://www.ansible.com/">Ansible</a>, <a rel="noopener external" target="_blank" href="http://letsencrypt.org/">Let's Encrypt</a>, <a href="https://hoverbear.org/blog/an-https-terminator-box/nginx.com">nginx</a>, and <a rel="noopener external" target="_blank" href="http://digitalocean.com/">DigitalOcean</a> to terminate HTTP and proxy requests to arbitrary hosts. The intended use case for this is to have <a rel="noopener external" target="_blank" href="http://pages.github.com/">Github Pages</a> sites able to be dropped onto a custom domain that is SSL enabled, but there are many other use cases which I haven't experimented with (yet).</p> <p>I was, primarily, interested in exploring using Ansible and DigitalOcean. It worked out quite well <a rel="noopener external" target="_blank" href="http://hoverbear.org/">http://hoverbear.org/</a> is running on it at the moment!</p> Winds of Change Wed, 13 Jul 2016 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/winds-of-change/ https://hoverbear.org/blog/winds-of-change/ <p>Unlike most of this blog this post is not technical in the slightest, instead it's a personal update. Though, I have been wanting to write this post for a long time now!</p> <p>Many things have happened in the last few months, and life is still swirling all around me. Many things seemed uncertain, other things still do. Irregardless, things are pretty darn cool.</p> <p>Anyways, here's what's happened lately.</p> New Roots part 5, Erecting Container Infrastructure Tue, 10 May 2016 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/new-roots-5/ https://hoverbear.org/blog/new-roots-5/ <p>This is the fifth part of an ongoing series on configuring a new server. In our <a href="/2016/05/09/new-roots-4/">last post</a> we discussed and configured some basic tools. For all intensive purposes, our 'root' system is complete. What we'll be doing now is building the infrastructure to run containers the way we want to.</p> <p>Before we get around to setting things up, let's describe the what we're up to.</p> New Roots part 4, Making it 127.0.0.1 Mon, 09 May 2016 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/new-roots-4/ https://hoverbear.org/blog/new-roots-4/ <p>This is the fourth of a series on taking up residence on a new server. In our <a href="/2016/05/07/new-roots-3/">last post</a> we talked about how to set up some basic network services like <code>ssh</code> and configure <code>iptables</code>, our firewall. In this post we'll talk about making your server feel like home.</p> <p>There are a grand number of things we can do at this point to make our time on the machine enjoyable. Take time to evaluate your choices though. This 'root' host is going to be our 'control seat' so it's not going to be doing much more than orcestrating virtualized environments. Once we configure these environments (next post) we'll be using these for any sort of development, deployment, or experiments.</p> <p>With 'root' our goal is to make a simple set of good, sharp tools to do what we need to do. These are tools like <code>nvim</code> which we installed earlier. If you were following the last host you may have installed <code>mosh</code> as well, which makes our <code>ssh</code> sessions safe from network changes and comfortable against latency.</p> New Roots part 3, Services & Hardening Sat, 07 May 2016 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/new-roots-3/ https://hoverbear.org/blog/new-roots-3/ <p>This is the third in a series of posts about getting settled into a server. First we talked about <a href="/2016/05/06/new-roots-1/">choosing a server</a>, then we talked about <a href="/2016/05/06/new-roots-2/">installing a base OS on a dedicated server</a>. In this post we'll discuss configuring, securing, and hardening our server.</p> <p>In our last post we left our new server in a very, very minimal state. Heck, we didn't even tell it it's own name! In this post we'll talk about configuration. Throughout this process we're going to try to keep things simple and tightly knit. Through most of this guide you'll need to be using <code>sudo</code> or acting as <code>root</code>.</p> New Roots part 2, On the Metal Fri, 06 May 2016 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/new-roots-2/ https://hoverbear.org/blog/new-roots-2/ <p>This is the second post of a series on settling into new servers. The first was about <a href="/2016/05/06/new-roots-1/">choosing a server</a>. This post is specifically targetted at newly acquired VPS and Dedicated servers. We'll talk about installing our chosen distribution, configuring its basics, and familiarizing ourselves with the new metal.</p> New Roots part 1, Choosing a Server Thu, 05 May 2016 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/new-roots-1/ https://hoverbear.org/blog/new-roots-1/ <p>This is the first in a series of posts where we'll discuss the process of obtaining, setting up, and settling into a new headless server. Along the way we'll install Linux, configure firewalls and web servers, set up virtual machines, tinker with system knobs, explore automation tools, and generally have a great time.</p> <p>In this post, We'll discuss things to keep in mind when searching for your own hosting, things to look for, and the differences between distinctions.</p> <p>This series is not intended to be a comprehensive guide. These are just the notes and rambling of a hobbyist server admin who's loved tinkering for over a decade. I'm writing these both for my own future reference, and so my readers can suggest improvements! As always, comments are welcome via <a href="mailto:[email protected]">email</a>.</p> The Menagerie of Badssl Fri, 22 Apr 2016 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/the-menagerie-of-badssl/ https://hoverbear.org/blog/the-menagerie-of-badssl/ <p>Late last year I was given an opporunity to participate in the Mozilla Winter of Security 2016! I'm happy to report it was, and still is, super cool. Plans diverted significantly at the very start of the project as it was discovered that the "menagerie" of certificates we wanted to build already existed.</p> <p>What joy! In order to avoid any "not-invented-here" syndrome problems we pivoted, like a failing startup, and I moved to become a contributor to <a rel="noopener external" target="_blank" href="http://badssl.com/">BadSSL</a>. One of my mentors, <a rel="noopener external" target="_blank" href="https://github.com/marumari">April King</a>, happened to already be a contributor to BadSSL and helped me get acquainted with the repository and the maintainer, <a rel="noopener external" target="_blank" href="https://github.com/lgarron/">Lucas Garron</a>.</p> <p>I was glad to discover that BadSSL is a <a rel="noopener external" target="_blank" href="http://jekyllrb.com/">Jekyll</a> site. I've used Jekyll a number of times for different tasks and really enjoy working with the program. BadSSL is deployed on the <a rel="noopener external" target="_blank" href="https://cloud.google.com/">Google Cloud Platform</a> and is primarily powered via extensive nginx configurations.</p> Site Redesign Wed, 06 Apr 2016 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/site-redesign/ https://hoverbear.org/blog/site-redesign/ <p>I've begun redesigning my website with my own theme! With school finishing and new employment looming I decided to take the time to make my site truly my own.</p> Gathering Our Voices 2016 Fri, 25 Mar 2016 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/gathering-our-voices-2016/ https://hoverbear.org/blog/gathering-our-voices-2016/ <p>This year helped again with Gathering Our Voices. I worked in the same capacity as previous years and had a similarly great time.</p> <p>Rather than talking at length about events I'd rather share pictures. All of these photos were taken by my friend Geoff Howe. All images are wholly owned by the BCAAFC and you may not reproduce or use them in anything without their permission.</p> Arch Linux on Docker Revisited Wed, 13 Jan 2016 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/docker-archlinux/ https://hoverbear.org/blog/docker-archlinux/ <p>Back in <a href="/2014/07/14/arch-docker-baseimage/">2014</a> when I was learning about <a rel="noopener external" target="_blank" href="https://docker.com">Docker</a> I got around to making a base image for <a rel="noopener external" target="_blank" href="http://archlinux.org/">Arch Linux</a>. It was a really fun exploration and I got to know a lot more about how Docker worked from it. I'd highly suggest trying to make your own sometime!</p> <p>Docker has matured a lot since, and I've enjoyed following it. I took some time this last week to revisit my Arch Linux image and ensure it's still functional. I wasn't surprised when the scripts continued to work just fine, even after two years.</p> <p>With nothing broken, I knew I only had one choice. <strong>I had to improve it!</strong></p> A Rust Heroku Buildpack Mon, 04 Jan 2016 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/heroku-rust-buildpack/ https://hoverbear.org/blog/heroku-rust-buildpack/ <p>I'm happy to introduce the first stable version of my Rust Heroku Buildpack!</p> <blockquote> <p>Just looking to get your hands dirty? Look <a rel="noopener external" target="_blank" href="https://github.com/Hoverbear/heroku-buildpack-rust"><strong>here</strong></a>.</p> </blockquote> <p>The project was a really interesting learning experience about how <a rel="noopener external" target="_blank" href="http://heroku.com/">Heroku</a> does things, on <code>bash</code> scripting, and about <a rel="noopener external" target="_blank" href="https://github.com/brson/multirust/"><code>multirust</code></a>, which I'd not used before but now am quite a fan of! (I previously just <code>rustup</code>'d the newest nightly every few days.)</p> The Way Forward Wed, 30 Dec 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/the-way-forward/ https://hoverbear.org/blog/the-way-forward/ <p>In April, I will be graduating from University. It's pretty darn exciting! Once that's happened I'll officially have a Computer Science Degree with a Networking option, meaning I focused primarily on networking for my upper year studies. I'll be completing my degree with (approximately) a 7.75 (out of 9.00) GPA and I'm pretty proud of that!</p> <p>I've been placing a lot of thought into what comes next for me, and the only solid decision I've come to is that <em>it's dependent on external factors</em>. The problem with trying to build a plan is that many of the factors I have little control over.</p> <p>What choices I make, and where my next years take me, will be dependent the opportunities which I am able to seize and which present themselves to me. In the past few years I've been <strong>incredibly</strong> lucky to have had a grand number of opportunities to engage with all sorts of amazing people and organizations. I'd like to continue that.</p> It's a Let's Encrypt Beta! Wed, 28 Oct 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/lets-encrypt/ https://hoverbear.org/blog/lets-encrypt/ <p>I was privileged to recieve one of the early <a rel="noopener external" target="_blank" href="https://letsencrypt.org/">Let's Encrypt</a> beta certificates for <a rel="noopener external" target="_blank" href="https://hoverbear.org/">https://hoverbear.org</a>. I had an easy and fun time setting it up this evening on my <a rel="noopener external" target="_blank" href="http://www.funtoo.org/Funtoo_Hosting">Funtoo Container</a> and wanted to quickly jot down how to!</p> Understanding Over Guesswork Sat, 12 Sep 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/understand-over-guesswork/ https://hoverbear.org/blog/understand-over-guesswork/ <h1 id="evolving-how-we-learn-systems-with-lessons-from-programming-in-the-large"><a class="zola-anchor" href="#evolving-how-we-learn-systems-with-lessons-from-programming-in-the-large" aria-label="Anchor link for: evolving-how-we-learn-systems-with-lessons-from-programming-in-the-large">Evolving How We Learn Systems with Lessons from Programming in the Large</a></h1> <blockquote> <p>Some bugs are just that+++a one off. A wayward moth that just happens to be innocently fluttering through the wrong relay at the wrong time. But some kinds of bugs aren't like that. Instead, they have risen to superstar status, plaguing veterans and newcomers alike. But what if these aren't bugs at all? What if they are actual deficiencies in safety and robustness offered by the C programming language as a consequence of the degree to which guesswork is introduced. Here we explore a more explicit approach to systems level programming supported by Rust, which we believe will better promote understanding of design intent, and eliminate some of the guesswork. Guided by a set of classic, but still relevant, bugs identified almost 15 years ago by Engler, we consider this in the context of the new generation of students learning about systems in a typical OS course, where students often first encounter these deficiencies.</p> </blockquote> Photos: San Fransisco Trip Mon, 31 Aug 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/sf-trip-recap/ https://hoverbear.org/blog/sf-trip-recap/ <p>A selection of images from my trip that I thought I'd share with the world.</p> <blockquote> <p>If you want to use one of these for anything at all, just fire me an email and ask!</p> </blockquote> The Raft-rs Rust Meetup Thu, 27 Aug 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/meetup/ https://hoverbear.org/blog/meetup/ <iframe src="https://air.mozilla.org/bay-area-rust-meetup-august-2015/video/" width="896" height="524" frameborder="0" allowfullscreen></iframe> <p><strong>Wow.</strong> Was that ever fun! I hope that those that came had an equally enjoyable time and everyone got something useful out of it! I sure did!</p> <h2 id="slides"><a class="zola-anchor" href="#slides" aria-label="Anchor link for: slides">Slides</a></h2> <ul> <li><a rel="noopener external" target="_blank" href="http://slides.com/ycoady/a-long-long-time-ago/">Yvonne Coady</a></li> <li><a rel="noopener external" target="_blank" href="https://ongardie.net/static/raft-mozilla/#/">Diego Ongaro</a> &amp; <a rel="noopener external" target="_blank" href="https://raft.github.io/raftscope-replay/">Visualization</a></li> <li><a rel="noopener external" target="_blank" href="http://slides.com/hoverbear/raft-rs#/">Ana Hobden</a></li> <li><a rel="noopener external" target="_blank" href="http://slides.com/danburkert/simple-kv">Dan Burkert</a></li> <li><a rel="noopener external" target="_blank" href="https://slides.com/alexnewman-2/raft-for-realz">Alex Newman</a></li> </ul> Exciting Times Sun, 23 Aug 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/exciting-times/ https://hoverbear.org/blog/exciting-times/ <p>The next few weeks are full of excitement and busy-ness! First up is the <a rel="noopener external" target="_blank" href="http://www.meetup.com/Rust-Bay-Area/events/219696985/">Meetup</a> in San Fran <a rel="noopener external" target="_blank" href="https://github.com/Hoverbear/raft-rs/issues/74">(See our planning)</a>. I can't wait! It will be so fun to meet many people I've already met in IRC and through the community!</p> <p>If you'd like to do something, or show me around the city, let me know! I've never been to the USA before, let alone San Fransisco.</p> <p>After that I'm moving into a new place! A friend and I landed a great location for the next year and we're looking forward to the changes ahead. Once I'm settled in classes will be starting and I have a very busy term ahead!</p> Blog Changeover Tue, 11 Aug 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/blog-changeover/ https://hoverbear.org/blog/blog-changeover/ <p>I've moved my feed over from <a rel="noopener external" target="_blank" href="https://ghost.org/">Ghost</a> to <a rel="noopener external" target="_blank" href="http://jekyllrb.com/">Jekyll</a>! It took several hours spread across several days to transfer all of my posts out of Ghost since it's (experimental) export functionality just dumps a bunch of junk into a JSON document.</p> <p>In this move <strong>most</strong> page links should still map to the same thing as before. This does not hold for images, diagrams, etc <em>(but you should have hosted your own copy anyways)</em>.</p> Trackpad Drivers for Linux on a Mac Tue, 04 Aug 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/mtrack/ https://hoverbear.org/blog/mtrack/ <p>If you're like me and have Mac hardware but run Linux you might also run into the slight annoyance with the trackpad drivers X.org defaults to.</p> <p>If you haven't explored, there is a fantastic replacement called <a rel="noopener external" target="_blank" href="https://github.com/BlueDragonX/xf86-input-mtrack"><code>mtrack</code></a> that I've had great luck with.</p> Raft Progress & Examples! Sat, 01 Aug 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/raft-examples/ https://hoverbear.org/blog/raft-examples/ <p>We've also got couple nice working examples! Yes, they're ready to play with!</p> <blockquote> <p>Can't wait, need code? Visit <a rel="noopener external" target="_blank" href="https://github.com/hoverbear/raft">Raft</a> and check out the <code>examples/</code> directory!</p> </blockquote> Raft: Tooling & Infra Update Thu, 23 Jul 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/raft-tooling/ https://hoverbear.org/blog/raft-tooling/ <p>In preparation for the forthcoming 0.0.1 release of Raft we've taken several forward steps to improve our (already pretty darn cool!) tooling and infrastructure. If you attempt to set up any of these on your own and have issues let me know! I'd be more than happy to help. You can find our <a rel="noopener external" target="_blank" href="https://github.com/Hoverbear/raft/blob/master/.travis.yml"><code>.travis.yml</code> here</a>.</p> Raft: New Crates! Thu, 16 Jul 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/raft-new-crates/ https://hoverbear.org/blog/raft-new-crates/ <p>We've been resoundingly busy with our <a rel="noopener external" target="_blank" href="http://raftconsensus.github.io/">Raft</a> implementation after a brief period of calm in the early summer! I'll be posting a few bits over the next weeks to help people both learn Rust, and learn about Raft!</p> <p>As a result of Raft development two new crates have been put together for general consumption! Both of these are macro-centric and lead mainly by James.</p> Reading Rust Function Signatures Fri, 10 Jul 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/reading-rust-function-signatures/ https://hoverbear.org/blog/reading-rust-function-signatures/ <p>In Rust, function signatures tell a story. Just from glancing at the signature of a function an experienced Rust user can tell much of the functions behaivor.</p> <p>In this article we'll explore some signatures and talk about how to read them and extract information from them. While exploring, you can find many great function signature examples in the <a rel="noopener external" target="_blank" href="https://doc.rust-lang.org/stable/std/">Rust API docs</a>. You can play around on the <a rel="noopener external" target="_blank" href="https://play.rust-lang.org/">Playpen</a>.</p> <p>This article assumes some knowledge of Rust, glossing over a bit of the <a rel="noopener external" target="_blank" href="https://doc.rust-lang.org/stable/book/README.html">book</a> should be quite sufficient if you are lacking that but have programmed before.</p> Collecting Results from Collections Wed, 08 Jul 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/a-useful-error-pattern/ https://hoverbear.org/blog/a-useful-error-pattern/ <p>I've been playing around with a new project that uses a lot of collections of results, for example <code>Vec&lt;Result&lt;()&gt;&gt;</code> and asked some folks on Rust if they new a good way of transforming this into a <code>Result&lt;Vec&lt;()&gt;&gt;</code>.</p> <p>Turns out, <code>.collect()</code> can do it for you!</p> ACM papers in Pandoc Tue, 16 Jun 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/acm-papers-in-pandoc/ https://hoverbear.org/blog/acm-papers-in-pandoc/ <p>Based partially off <a rel="noopener external" target="_blank" href="http://hoverbear.org/2015/03/06/rust-travis-github-pages/">my earlier article</a> I've set up a repository <a rel="noopener external" target="_blank" href="https://github.com/Hoverbear/acm-pandoc-paper">here</a> that demonstrates how to use Travis CI to build yourself ACM styled PDFs (along with fairly decent looking HTML versions) out of a simple <code>pandoc</code> markdown document!</p> Quadcopters: Motors Thu, 11 Jun 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/quadcopters-motors/ https://hoverbear.org/blog/quadcopters-motors/ <p>We've already talked a bit about motors in our <a rel="noopener external" target="_blank" href="http://hoverbear.org/tag/quadcopters/">previous articles</a>, in this article we'll talk more about <strong>motors</strong> than the quadcopter as a whole.</p> Quadcopters: Stabilization Wed, 10 Jun 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/quadcopters-stabilization/ https://hoverbear.org/blog/quadcopters-stabilization/ <p>In our <a href="/tag/quadcopters/">past articles</a> we've explored some of the basics of the mechanics of Quadcopters. In this article we'll be doing something a bit different and discussing the algorithms behind how the Quadcopter keeps itself stable.</p> <p>To do this we'll actually be inspecting some of the official <a rel="noopener external" target="_blank" href="https://github.com/bitcraze/crazyflie-firmware">Bitcraze Firmware</a> and it's <a rel="noopener external" target="_blank" href="https://github.com/bitcraze/crazyflie-firmware/blob/crazyflie2/modules/src/stabilizer.c"><code>stabilizer.c</code></a> implementation.</p> <blockquote> <p>It's okay if you don't know C or understand what's going on in this file, that's part of the purpose of this article!</p> </blockquote> Quadcopters: Sensors Thu, 04 Jun 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/quadcopters-sensors/ https://hoverbear.org/blog/quadcopters-sensors/ <p>Most intelligent devices existing in the physical world, a quadcopter included, take input from sensors and act on them in some way, possibly producing an output.</p> Arduino: Motor Fun! Tue, 02 Jun 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/arduino-motor-fun/ https://hoverbear.org/blog/arduino-motor-fun/ <p>Lately we've been playing with Quadcopters a lot, one of the key components of any copter is it's motors! I'll be writing about motors next, but before that I wanted to share some small, short Arduino 'labs' that you can do either on your own or with your cohort!</p> <p>All of these 'labs' are as inexpensive as we could manage in terms of parts, with the exception of the Arduino.</p> Quadcopters: Yaw Wed, 27 May 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/quadcopters-yaw/ https://hoverbear.org/blog/quadcopters-yaw/ <p>So, in our <a href="/2015/05/19/quadcopters-orientation/">earlier article</a> we talked about Yaw a little but, but we didn't get into details. First, let's take a look at what yaw looks like under simple circumstances, then we'll explain the motion.</p> Quadcopters: The Board Tue, 26 May 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/quadcopters-board/ https://hoverbear.org/blog/quadcopters-board/ <p>This post is less about the mechanics of the quadcopter and more to satisfy those curious about what exactly is on the board.</p> <p>Here are links to the schematics and component placements:</p> <ul> <li><a rel="noopener external" target="_blank" href="https://wiki.bitcraze.io/_media/projects:crazyflie2:hardware:crazyflie_2.0_rev.c_component_placement_top.pdf">Component Placement - Top</a></li> <li><a rel="noopener external" target="_blank" href="https://wiki.bitcraze.io/_media/projects:crazyflie2:hardware:crazyflie_2.0_rev.c_component_placement_bottom.pdf">Component Placement - bottom</a></li> <li><a rel="noopener external" target="_blank" href="https://wiki.bitcraze.io/_media/projects:crazyflie2:hardware:crazyflie_2.0_rev.c_schematics.pdf">Schematics</a></li> </ul> <p>On the pictures below we'll use the <strong>schematic symbols</strong> as they are shortest.</p> Quadcopters: Orientation Tue, 19 May 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/quadcopters-orientation/ https://hoverbear.org/blog/quadcopters-orientation/ <blockquote> <p>Spinnning tens of thousands times a second, four rotors cut through the air with their propellors. Their motion lifts them in unison, for they are connected together. In the center of the apparatus sits a bank of sensors, processors, and a radio acting in concert to control the great flow of air passing over it.</p> </blockquote> <blockquote> <p>Some ways away, perhaps near, perhaps far, its pilot watches over it. Whether by program or controller, they hold the fate of the airborne being in their hands.</p> </blockquote> <p>Quadcopters are fascinating marriages of physics, electronics, aviation, and computer science that have only become popular in the last couple of years. Examining them allows us to explore a number of interesting topics.</p> <p>But first, a bit of an introduction...</p> A Journey into Iterators Sat, 02 May 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/a-journey-into-iterators/ https://hoverbear.org/blog/a-journey-into-iterators/ <p>One of my favorite features of Rust is iterators. They are a fast, safe, 'lazy' way of working with data structures, streams, and other more creative applications.</p> <blockquote> <p>You can play along on http://play.rust-lang.org/ and by browsing <a rel="noopener external" target="_blank" href="http://doc.rust-lang.org/core/iter/index.html">here</a>. This article is not a subtitute for the documentation or experience.</p> </blockquote> Reflections on a Quarter Century Thu, 23 Apr 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/reflections-on-a-quarter-century/ https://hoverbear.org/blog/reflections-on-a-quarter-century/ <blockquote> <p>Twenty five years is a fairly long time, it turns out.</p> </blockquote> <p>Stepping over the boundary for another year of life brings tends to bring about it a whirl of emotions, at least temporarily. Simultaneously the <em>past, present, and future</em> being about a poignant picture.</p> <p>I find myself deeply in such a situation, and I have been for a couple months now. I've taken time to reflect on what has happened, what is happening, and what is to come. A few things seemed worth sharing. They may not be relevant to your situation, be the best advice, or make sense to you, but they are what I have experienced.</p> <blockquote> <p>Don't take everyone seriously.</p> </blockquote> Photography from Last Decade Fri, 10 Apr 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/photoghaphy-last-decade/ https://hoverbear.org/blog/photoghaphy-last-decade/ <p>I did a fair amount of photography and digital imaging in high school. Please, enjoy.</p> Raft: Status Update Wed, 08 Apr 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/raft-the-next-generation-3/ https://hoverbear.org/blog/raft-the-next-generation-3/ <p>In order to celebrate the new <a rel="noopener external" target="_blank" href="http://blog.rust-lang.org/2015/04/03/Rust-1.0-beta.html">beta</a> release of Rust, and as part of reporting requirements for my class, I'm happy to write to you regarding <a rel="noopener external" target="_blank" href="https://github.com/hoverbear/raft">hoverbear/raft</a>!</p> Gathering Our Voices 2015 Sat, 14 Mar 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/gathering-our-voices-2015/ https://hoverbear.org/blog/gathering-our-voices-2015/ <p>Over the past <a rel="noopener external" target="_blank" href="http://www.hoverbear.org/2014/03/21/gathering-our-voices-2014/">two</a> <a rel="noopener external" target="_blank" href="http://www.hoverbear.org/2013/03/21/gathering-our-voices-2013/">years</a> I helped the <a rel="noopener external" target="_blank" href="http://bcaafc.com/">BC Association of Aboriginal Friendship Centres</a> host <a rel="noopener external" target="_blank" href="http://gatheringourvoices.bcaafc.com/">Gathering Our Voices</a>, the largest annual Youth Conference in BC.</p> <p>This year, I helped out again! I also teamed up with Science Venture again to host 4 workshops!</p> Learning Cap'n Proto RPC Mon, 09 Mar 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/learning-capn-proto-rpc/ https://hoverbear.org/blog/learning-capn-proto-rpc/ <p>Awhile ago, I wrote a <a href="/2015/02/11/capn-proto-in-rust/">First Look at Cap'n Proto</a>. Unfortunately I didn't cover how to utilize it's RPC capabilities. In Rust, this is via the <a rel="noopener external" target="_blank" href="https://github.com/dwrensha/capnp-rpc-rust"><code>capnp-rpc-rust</code></a> crate.</p> <p>Let's do that!</p> Rust, Travis, and Github Pages Sat, 07 Mar 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/rust-travis-github-pages/ https://hoverbear.org/blog/rust-travis-github-pages/ <p><a rel="noopener external" target="_blank" href="http://rust-lang.org/">Rust</a> is probably my favorite programming language (as the contents of this site suggests). My interests in networks, development operations, and systems programming align strongly with Rust. They're pursuing the trifecta: <em>Safe, Fast, Concurrent.</em> It's been a great learning journey for me so far and I learnt to write better code in <strong>all</strong> languages.</p> <p><a rel="noopener external" target="_blank" href="https://pages.github.com/">Github Pages</a> is Github's very generous offering of web hosting to your projects. Basically, you create a branch <code>gh-pages</code> and push it to Github, then browse to <a rel="noopener external" target="_blank" href="https://hoverbear.github.io/raft"><code>https://$USERNAME.github.io/$REPOSITORY</code></a>.</p> Getting Acquainted with MIO Tue, 03 Mar 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/getting-acquainted-with-mio/ https://hoverbear.org/blog/getting-acquainted-with-mio/ <p>One of my next goals in my <a rel="noopener external" target="_blank" href="http://hoverbear.org/tag/raft/">Raft</a> project is to tame the <code>tick()</code> with <a rel="noopener external" target="_blank" href="https://github.com/carllerche/mio"><code>mio</code></a>. In this post, we'll explore what it is, what it can do, and why it matters. First things first: What is MIO?</p> <blockquote> <p>MIO is a lightweight IO library for Rust with a focus on adding as little overhead as possible over the OS abstractions.</p> </blockquote> On C-51 Thu, 26 Feb 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/on-c51/ https://hoverbear.org/blog/on-c51/ <p>I've been following the story about the proposed <a rel="noopener external" target="_blank" href="https://www.documentcloud.org/documents/1513457-bill-c-51.html">bill C-51</a> for a couple weeks now. When the Conservatives <a rel="noopener external" target="_blank" href="http://www.cbc.ca/news/politics/stephen-harper-to-unveil-new-anti-terror-bill-in-richmond-hill-1.2937477">introduced the bill</a> I was quite unimpressed with it's lack of oversight, among other things I heard and read about it. I expected it would change due to opposition, so I did not look much further into it.</p> <p>When the Liberals decided <a rel="noopener external" target="_blank" href="http://www.cbc.ca/news/politics/anti-terrorism-bill-to-be-supported-by-liberals-justin-trudeau-says-1.2945187">they would support the bill</a> I was suprised, but was busy with midterms, so did not get a chance to look more deeply into the content of the bill. But I couldn't help but be reminded of what <a rel="noopener external" target="_blank" href="http://www.cbc.ca/news/politics/ottawa-shooting-harper-mulcair-trudeau-speak-about-attack-1.2809530">Trudeau said</a> about the attack on Parliment months ago:</p> <blockquote> <p>We are a proud democracy, a welcoming and peaceful nation and a country of open arms and open hearts. We are a nation of fairness, of justice and of the rule of law. We will not be intimidated into changing that. If anything, these are the values and principles to which we must hold on even tighter.</p> <p>Our dedication to democracy and to the institutions we have built is the foundation of our society and a continued belief in both will guide us correctly into the future. Staying true to our values in a time of crisis will make us an example to the world.</p> <p>Criminals cannot and will not dictate to us how we act as a nation, how we govern ourselves or how we treat each other. They cannot and will not dictate our values, and they do not get to decide how we use our shared public spaces.</p> </blockquote> Raft: A First Prototype Mon, 23 Feb 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/raft-update-3/ https://hoverbear.org/blog/raft-update-3/ <p>As you may have <a href="/2015/02/05/raft-update-1/">previously</a> <a href="/2015/02/18/raft-update-2/">read</a>, I've been working on implementing the <a rel="noopener external" target="_blank" href="https://raftconsensus.github.io/">Raft Distributed Consensus Algorithm</a> in <a rel="noopener external" target="_blank" href="http://rust-lang.org/">Rust</a> for my classes (and fun!).</p> Raft: Progress on the Log Wed, 18 Feb 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/raft-update-2/ https://hoverbear.org/blog/raft-update-2/ <p>I've spent the majority of my free time this last week working on <a rel="noopener external" target="_blank" href="https://github.com/hoverbear/raft">Raft</a>. As you can see from this <a rel="noopener external" target="_blank" href="https://github.com/Hoverbear/raft/issues/1">issue</a> I've been mostly working on the idea of transactions.</p> <p>A lot has taken shape in the codebase. It still will panic at <code>unimplemented!()</code> about 300ms after you start a node, but "That's a feature!"</p> <blockquote> <p>Note: All interfaces and code are not final, and are for educational and interest purposes.</p> </blockquote> First look at Cap'n Proto in Rust Wed, 11 Feb 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/capn-proto-in-rust/ https://hoverbear.org/blog/capn-proto-in-rust/ <p>So, I found <a rel="noopener external" target="_blank" href="https://github.com/dwrensha/capnproto-rust">this</a> (<a rel="noopener external" target="_blank" href="https://github.com/dwrensha/capnpc-rust">this</a>, and <a rel="noopener external" target="_blank" href="https://github.com/dwrensha/capnp-rpc-rust">this</a>) <a rel="noopener external" target="_blank" href="https://kentonv.github.io/capnproto/">Cap'n Proto</a> library for <a rel="noopener external" target="_blank" href="http://www.rust-lang.org/">Rust</a> and wanted to explore it a bit. Unfortunately the documentation is sparse for the library, and I haven't played with Cap'n Proto before.</p> <blockquote> <p>Cap'n Proto is what's billed as a 'Data Interchange Format' and 'Capability-Based RPC System'. Or a 'Cerealization Protocol'.</p> </blockquote> Raft Experiences and Repo Made Public! Thu, 05 Feb 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/raft-update-1/ https://hoverbear.org/blog/raft-update-1/ <blockquote> <p>TL;DR: I've made <a rel="noopener external" target="_blank" href="https://github.com/Hoverbear/raft">Hoverbear/raft</a> publicly available <em>(It's still not ready)</em>! Feel encouraged to contribute feedback or code via Github or email!</p> </blockquote> Raft So Far Sun, 25 Jan 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/raft-so-far/ https://hoverbear.org/blog/raft-so-far/ <p>I've been working quite a bit on my Raft implementation over the last few days and I must say it's been quite a pleasure to work in Rust, which recently released it's 1.0.0-alpha.</p> <p>It takes the work out of needing to serialize and deserialize data, it enforces data safety, and it's type checking is incredible. I'm very quickly able to make a change, build it, fix the errors the compiler catches for me, and build again, then test. So far the only times my tests have failed after a successful build was when I was accidently disgarding one of my channels.</p> Raft in Rust Wed, 21 Jan 2015 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/raft/ https://hoverbear.org/blog/raft/ <p>I'm currently working on implementing the Raft Distributed Consensus protocol in Rust.</p> <p>This is a project I'm doing for my CSC466 class at the University of Victoria, and I'm hoping to use it as part of one of my projects for CSC462.</p> <p>At the end of the project I plan to release it as MIT licensed code. Please stay tuned...</p> OpenWRT QoS Sat, 06 Dec 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/openwrt-qos/ https://hoverbear.org/blog/openwrt-qos/ <p>Using the setup from my <a href="/2014/11/23/openwrt-in-virtualbox/">last</a> <a href="/2014/12/03/vagrant-clients-for-openwrt-vms/">two</a> posts, let's play with some QoS parameters and observe the results.</p> <blockquote> <p>The <a rel="noopener external" target="_blank" href="http://wiki.openwrt.org/doc/uci/qos">documentation</a> for OpenWRT's QoS is rather lacking, please feel encouraged to improve it as you go!</p> </blockquote> Vagrant Clients for OpenWRT VMs Wed, 03 Dec 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/vagrant-clients-for-openwrt-vms/ https://hoverbear.org/blog/vagrant-clients-for-openwrt-vms/ <p>In my <a href="/2014/11/23/openwrt-in-virtualbox/">last post</a>, we explored how to set up a OpenWRT VM in VirtualBox.</p> <p>Let's give it some clients! Since the router is using a <code>intnet</code>s we need to configure some machines to use that as their primary way to connect to the internet.</p> <p>Since <a rel="noopener external" target="_blank" href="http://vagrantup.com/">Vagrant</a> has support for <a rel="noopener external" target="_blank" href="https://docs.vagrantup.com/v2/multi-machine/index.html">multi-machine configurations</a> and gives us <a rel="noopener external" target="_blank" href="https://vagrantcloud.com/chef/boxes/debian-7.4">minimal builds of machines</a>, we'll use this for our clients.</p> OpenWRT in Virtualbox Sun, 23 Nov 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/openwrt-in-virtualbox/ https://hoverbear.org/blog/openwrt-in-virtualbox/ <p>For my CSC 467 project I'm studying the configuration and performance of various QoS parameters in OpenWRT.</p> <p>The plan is to set up an OpenWRT router in <a rel="noopener external" target="_blank" href="https://www.virtualbox.org/">VirtualBox</a> and orcestrate some <a rel="noopener external" target="_blank" href="http://vagrantup.com/">Vagrant</a> boxes to create a VM network.</p> A First Look at DACS Mon, 17 Nov 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/first-look-at-dacs/ https://hoverbear.org/blog/first-look-at-dacs/ <p>At Simbioses Lab, we've been recently looking at the federated authentication <a rel="noopener external" target="_blank" href="http://dacs.dss.ca/">DACS</a> as well as <a rel="noopener external" target="_blank" href="http://keycloak.jboss.org/">Keycloak</a>. I've previously written about Keycloak, so let's take a look at DACS.</p> Parsing Arguments in Rust Sat, 15 Nov 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/command-line-args-in-rust/ https://hoverbear.org/blog/command-line-args-in-rust/ <p>I was reading about the <a rel="noopener external" target="_blank" href="http://docopt.org/">Docopt</a> project the other day and really liked the standardized approach to <code>--help</code> prompts and argument parsing that it offers.</p> <p>Luckly, there is a <a rel="noopener external" target="_blank" href="https://github.com/docopt/docopt.rs">Rust Package</a> to play with!</p> Longest Common Increasing Sequence Sat, 15 Nov 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/lcis/ https://hoverbear.org/blog/lcis/ <p>A really 'cute' problem popped up in our Data Structures &amp; Algorithms homework and I wanted to write about it.</p> <blockquote> <p>If you're in the class this will obviously ruin the fun, so read it later, after you're done!</p> </blockquote> Init - Configuration Fri, 14 Nov 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/init-configuration/ https://hoverbear.org/blog/init-configuration/ <p>An initialization system's main interface with the user is through it's configuration scripts and service files. Let's take a look at what this looks like for <code>systemd</code> and OpenRC.</p> <p>With systemd, daemon configuration is handled by <code>.toml</code> configuration files. With OpenRC, this task is performed by shell scripts.</p> A Ghost OpenRC Script Sun, 02 Nov 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/a-ghost-openrc-script/ https://hoverbear.org/blog/a-ghost-openrc-script/ <p>Whipped up an OpenRC script for <a rel="noopener external" target="_blank" href="https://ghost.org/">Ghost</a>. Feel free to use it for yourself.</p> <p>Things to be aware of:</p> <ul> <li>The script was designed for <a rel="noopener external" target="_blank" href="http://www.funtoo.org/Welcome">Funtoo</a>.</li> <li>The script expects Ghost to be in <code>$GHOST_ROOT</code>.</li> <li>The script runs Ghost as <code>$GHOST_USER:$GHOST_GROUP</code>.</li> <li>The script exports the <code>$NODE_ENV</code> to <code>production</code>.</li> </ul> Init - Runlevels and Targets Mon, 29 Sep 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/init-runlevels-and-targets/ https://hoverbear.org/blog/init-runlevels-and-targets/ <p>In this post, we'll look at how runlevels work in two major init systems, systemd and OpenRC. If you're interested in trying out <code>systemd</code>, I'd suggest using an <a rel="noopener external" target="_blank" href="https://www.archlinux.org/download/">Arch Linux Live ISO</a>. For those interested in trying OpenRC, check out <a rel="noopener external" target="_blank" href="http://www.funtoo.org/Funtoo_Linux_Installation">Funtoo</a>. Both of these will work great in your favorite virtualization solution.</p> Command Execution in Rust Sun, 07 Sep 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/command-execution-in-rust/ https://hoverbear.org/blog/command-execution-in-rust/ <p>One of my projects over the upcoming semester is to explore the Linux boot process and the job of the init (initialization) system. The init system is considered <strong>PID 1</strong> and is responsible for a significant portion of userspace functionality. Common init systems on Linux are OpenRC and systemd. One of the key parts of an init system is to spawn new processes, like in command shell.</p> <p>Executing child processes may be useful to any number of programs, but common applications include:</p> <ul> <li>Shells</li> <li>Init systems</li> <li>Launchers</li> <li>Interfacing with command line applications</li> </ul> Option Monads in Rust Tue, 12 Aug 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/option-monads-in-rust/ https://hoverbear.org/blog/option-monads-in-rust/ <p>One common monadic structure is the <code>Option</code> (or <code>Maybe</code> in Haskell and other languages) type. This can be seen as an encapsulation type. Consider a function which may fail to produce a meaningful value for certain inputs. For example,</p> <pre class="giallo z-code"><code data-lang="rust"><span class="giallo-l"><span class="z-keyword">fn</span><span class="z-source"> main</span><span class="z-punctuation"> () {</span></span> <span class="giallo-l"><span class="z-punctuation z-definition z-comment z-comment"> // Parses a string into an integer.</span></span> <span class="giallo-l"><span class="z-entity z-name z-function"> from_str</span><span class="z-keyword z-operator">::</span><span class="z-punctuation z-brackets z-angle z-rust">&lt;</span><span class="z-variable z-other z-rust">int</span><span class="z-punctuation z-brackets z-angle z-rust">&gt;</span><span class="z-punctuation">(</span><span class="z-punctuation z-definition z-string z-string">&quot;4&quot;</span><span class="z-punctuation">);</span><span class="z-punctuation z-definition z-comment z-comment"> // A valid input.</span></span> <span class="giallo-l"><span class="z-entity z-name z-function"> from_str</span><span class="z-keyword z-operator">::</span><span class="z-punctuation z-brackets z-angle z-rust">&lt;</span><span class="z-variable z-other z-rust">int</span><span class="z-punctuation z-brackets z-angle z-rust">&gt;</span><span class="z-punctuation">(</span><span class="z-punctuation z-definition z-string z-string">&quot;Potato&quot;</span><span class="z-punctuation">);</span><span class="z-punctuation z-definition z-comment z-comment"> // Definitely invalid.</span></span> <span class="giallo-l"><span class="z-punctuation">}</span></span></code></pre> Back Channel Keycloak Requests Mon, 04 Aug 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/back-channel-keycloak-requests/ https://hoverbear.org/blog/back-channel-keycloak-requests/ <p>While using <a rel="noopener external" target="_blank" href="http://keycloak.jboss.org/">Keycloak</a> you may need to make authenticated requests between various services. How can this be accomplished with <a rel="noopener external" target="_blank" href="http://immutant.org/">Immutant</a>?</p> <blockquote> <p>You may want to check <a href="/2014/07/25/integrating-immutant-and-keycloak/">this</a> link to learn how to use Immutant with Keycloak.</p> </blockquote> Integrating Immutant and Keycloak Fri, 25 Jul 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/integrating-immutant-and-keycloak/ https://hoverbear.org/blog/integrating-immutant-and-keycloak/ <p>In my past two posts, we took a <a href="/2014/07/14/starting-with-immutant/">surface level look at Immutant</a> then took a look at <a href="/2014/07/22/deploying-immutant-to-wildfly/">deploying immutant applications to the Wildfly application server.</a> This time, we'll take a look at how to integrate Keycloak with an Immutant app, again using Docker heavily.</p> <blockquote> <p>If you haven't read the previous few articles, it might be useful to give them a quick glance over.</p> </blockquote> Deploying Immutant to Wildfly Tue, 22 Jul 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/deploying-immutant-to-wildfly/ https://hoverbear.org/blog/deploying-immutant-to-wildfly/ <p>Currently, the <a rel="noopener external" target="_blank" href="http://immutant.org/tutorials/wildfly/index.html">tutorial on deploying to Wildfly with Immutant 2</a> is not written. Furthermore,the JBoss documentation isn't particularly tailored towards Clojure applications.</p> <p>So, let's take a look at how to do this using the convenient <a rel="noopener external" target="_blank" href="https://registry.hub.docker.com/u/jboss/">dockerfiles provided by the JBoss project</a>. We'll use Docker to simplify deployment and setup of Wildfly, but instructions for a non-docker application should be similar.</p> <h3 id="create-a-basic-immutant-application"><a class="zola-anchor" href="#create-a-basic-immutant-application" aria-label="Anchor link for: create-a-basic-immutant-application">Create a basic Immutant application.</a></h3> <p>Starting from a <code>lein new app learning</code> command, set up your project like so:</p> Arch Docker Baseimage Mon, 14 Jul 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/arch-docker-baseimage/ https://hoverbear.org/blog/arch-docker-baseimage/ <h2 id="problem"><a class="zola-anchor" href="#problem" aria-label="Anchor link for: problem">Problem</a></h2> <p>You need a base image of Arch Linux that you're sure is a-okay.</p> Starting with Immutant Mon, 14 Jul 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/starting-with-immutant/ https://hoverbear.org/blog/starting-with-immutant/ <p>Immutant is suite of <strong>Clojure</strong> libraries that is part of the JBossAS/Wildfly ecosystem. Great, fantastic! Clojure is a lisp that runs on the JVM, the CLR, and compiles to Javascript. Lets get started!</p> <p>Some links we'll need:</p> <ul> <li><a rel="noopener external" target="_blank" href="http://immutant.org/">Immutant</a> - The framework.</li> <li><a rel="noopener external" target="_blank" href="http://clojure.org/">Clojure</a> - The language.</li> <li><a rel="noopener external" target="_blank" href="http://leiningen.org/">Leiningen</a> - The package manager.</li> </ul> Async Auto Thu, 05 Jun 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/async-auto/ https://hoverbear.org/blog/async-auto/ <p>I've been exploring the handy <a rel="noopener external" target="_blank" href="https://github.com/caolan/async"><code>async</code></a> over the last few days in the lab. One of my projects is a MongoDB API Adapter in Node.js and I was pleased by a novel way of handling control flow.</p> <p><a rel="noopener external" target="_blank" href="https://github.com/caolan/async#autotasks-callback"><code>async.auto()</code></a> is a function offered by the libary which allows you to declare a set of tasks and their dependencies, then the library determines the best way to compose the initialization.</p> Gathering Our Voices 2014 Fri, 21 Mar 2014 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/gathering-our-voices-2014/ https://hoverbear.org/blog/gathering-our-voices-2014/ <p>I played dual roles for Gathering Our Voices 2014. One role was with the B.C. Association of Aboriginal Friendship Centres, and the other was with Science Venture.</p> <p>The purpose of these conferences is to unite youth from throughout the country in learning, healing and sharing and to provide tangible experiences of tools, resources and knowledge that the youth can bring back to their communities.</p> <p>The conference had 1800 delegates and over 2000 participants.</p> Gathering Our Voices 2013 Thu, 21 Mar 2013 00:00:00 +0000 Ana Hobden https://hoverbear.org/blog/gathering-our-voices-2013/ https://hoverbear.org/blog/gathering-our-voices-2013/ <p>I helped plan and host the 11th Gathering Our Voices Aboriginal Youth Conference in Penticton, British Columbia. Much of my time was spent learning proper software design and refining the management and registration software I developed. This was my first 'real' software project.</p>