<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>tim howard</title><link>http://example.org/</link><description>Recent content on tim howard</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Thu, 04 Jan 2024 13:08:38 -0700</lastBuildDate><atom:link href="http://example.org/index.xml" rel="self" type="application/rss+xml"/><item><title>Using Forgejo Actions to Build a Hugo site and deploy it</title><link>http://example.org/posts/hugo_build_and_post/</link><pubDate>Thu, 04 Jan 2024 13:08:38 -0700</pubDate><guid>http://example.org/posts/hugo_build_and_post/</guid><description>I have gone through several CI/CD solutions while using Forgejo (since it did not have it integrated for a long time) and most recently have this blog built and deployed using Woodpecker CI, which was fine if not amazing.
Since Forgejo now has Actions I wanted to redo it for that. I also moved my instance to a different host and had to setup a runner again. I encountered an issue with submodules in a workflow that I was sure worked before but at any rate had to fix that also.</description></item><item><title>Building a SaaS with Rust</title><link>http://example.org/posts/building_a_saas/</link><pubDate>Thu, 04 Jan 2024 10:24:51 -0700</pubDate><guid>http://example.org/posts/building_a_saas/</guid><description>Today I&amp;rsquo;m starting a series of posts about my journey to build a SaaS with Rust. I have an idea for a service that would satisfy a particular interest that I have and I&amp;rsquo;ve decided to start building it. I may talk more about that later or just wait until I can launch it.
In the meantime this series is about building the generic SaaS parts in Rust and how all of those things come together.</description></item><item><title>Announcing Oh! Tracks!</title><link>http://example.org/posts/announcing_oh_tracks/</link><pubDate>Wed, 29 Nov 2023 14:40:41 -0700</pubDate><guid>http://example.org/posts/announcing_oh_tracks/</guid><description>Today I&amp;rsquo;m excited to Oh! Tracks!. It&amp;rsquo;s a project I&amp;rsquo;ve been working on a little bit to learn Rust but because I&amp;rsquo;m also passionate about privacy base location tracking. I have been a big fan of tracking my position for a lot trips, outtings, etc. using various apps that do that as a discreet event.
I do it so often that I liked the idea of essentially doing it all the time.</description></item><item><title>.NET 8.0 on Linux</title><link>http://example.org/posts/net_8_0_linux/</link><pubDate>Mon, 27 Nov 2023 14:18:26 -0700</pubDate><guid>http://example.org/posts/net_8_0_linux/</guid><description>Yesterday I wanted to start doing a little hacking on Jellyfin&amp;rsquo;s server (and maybe frontend) so I needed to setup a development environment. The thing is it&amp;rsquo;s in C# and .NET. In a life long ago I spent several years as a C#/.NET developer (as a C++ developer) and I didn&amp;rsquo;t mind the experience especially since Mono existed at the time and gave at least some of the functionality available on Windows to the Linux world.</description></item><item><title>Self-hosting Firefox Accounts, Sync and other accompanying servers</title><link>http://example.org/posts/self_hosted_firefox_accounts/</link><pubDate>Wed, 11 Oct 2023 16:33:39 -0600</pubDate><guid>http://example.org/posts/self_hosted_firefox_accounts/</guid><description>If you&amp;rsquo;re like me (and even if you&amp;rsquo;re not) having all of your Firefox instances (including LibreWolf with some additional configuration) synchronized is quite the produtivity boost. It&amp;rsquo;s really nice (or will be) when I setup / try a new OS. This includes Firefox Mobile and sending tabs to your phone. It&amp;rsquo;s very nice. But I&amp;rsquo;m a self-hoster and that&amp;rsquo;s always my default if possible so that&amp;rsquo;s what I did.</description></item><item><title>Getting started with PyTorch and Rust</title><link>http://example.org/posts/tch_test/</link><pubDate>Wed, 27 Sep 2023 08:00:47 -0600</pubDate><guid>http://example.org/posts/tch_test/</guid><description>By the end of the post, my hope is that we have a working environment for experimenting with Rust and Pytorch/ML. One of our end goals (not this post) is to be able to run Stable Diffusion and train/refine models. To do this I&amp;rsquo;m going to be using tch-rs. I&amp;rsquo;m not going to go over basic Rust environment setup and assume that you can compile and run (debugging at your option) a basic Rust Hellow World application.</description></item><item><title>Let's Write a Hypervisor, Part 1</title><link>http://example.org/posts/lets_write_a_hypervisor/</link><pubDate>Thu, 24 Aug 2023 13:08:43 -0600</pubDate><guid>http://example.org/posts/lets_write_a_hypervisor/</guid><description>A common thing for those of us in this world to do is write an toy OS. And while I&amp;rsquo;ve never quite done that it may still be in the cards someday. But I am hyper-interested (see what I did there) in virtualization. And in my quest to continue on the path of learning Rust I figured it would be fun to write one in Rust. That way I learn a lot about low level virtualization details which includes the CPU support necessary for it as well as hopefully a couple of things about virtualizing various operating systems, microkernels, etc.</description></item><item><title>Using a vsock with Go</title><link>http://example.org/posts/vsock_qemu_go/</link><pubDate>Mon, 14 Aug 2023 12:24:58 -0600</pubDate><guid>http://example.org/posts/vsock_qemu_go/</guid><description>Let&amp;rsquo;s add a virtio-vsock to a virtual machine and then connect to it with Go. First things first let&amp;rsquo;s install ncat. We&amp;rsquo;ll do this both on the host AND guest.
sudo apt install -y ncat Now, we run the virtual machine and give it a vhost-vsock-pci device; customize for your needs.
sudo qemu-system-x86_64 -drive file=~/development/pop\!_os_base.qcow2 -m 16384 -cpu host --enable-kvm -device vhost-vsock-pci,guest-cid=10 -smp cpus=8 Now on the guest we&amp;rsquo;ll run ncat in listen mode.</description></item><item><title>Create an OCI image from a snap</title><link>http://example.org/posts/snap_to_container_image/</link><pubDate>Fri, 11 Aug 2023 14:14:55 -0600</pubDate><guid>http://example.org/posts/snap_to_container_image/</guid><description>Continuing from this post.
What if we wanted to make a snap an OCI container image and use it that way? As we previously looked at in the simplest case a snap can be combined with its base snap and then we can use chroot and use the binaries in the root filesystem that way.
So let&amp;rsquo;s take that root filesystem we created previously and make an image out of it.</description></item><item><title>Running a snap without snapd</title><link>http://example.org/posts/run_snap_without_snapd/</link><pubDate>Fri, 04 Aug 2023 13:44:48 -0600</pubDate><guid>http://example.org/posts/run_snap_without_snapd/</guid><description>Say we want to run a snap without involving snapd at all. Can we do that? Of course and it&amp;rsquo;s quite easy if the snap is a very simple one. Let&amp;rsquo;s look at the curl snap. First we need to get the snap.
URL=$(curl -s -H &amp;#39;Snap-Device-Series: 16&amp;#39; http://api.snapcraft.io/v2/snaps/info/curl | jq -r &amp;#39;.&amp;#34;channel-map&amp;#34; | map(select(.channel.architecture == &amp;#34;amd64&amp;#34; and .channel.name == &amp;#34;stable&amp;#34;)) | .[0].download.url&amp;#39;) wget $URL -O curl.snap I won&amp;rsquo;t get into the details of the snap store API but basically we are asking for a JSON document that has URLs in it for a given snap by name, we find the one we want and extract it and then use that to download the snap using wget.</description></item><item><title>Run and test built kernel with Rust support</title><link>http://example.org/posts/run_built_kernel/</link><pubDate>Thu, 03 Aug 2023 13:32:27 -0600</pubDate><guid>http://example.org/posts/run_built_kernel/</guid><description>Now that you have a fancy new kernel built with Rust support (from previous post) how do we easily test it? The easiest way (subjectively) is to use QEMU&amp;rsquo;KVM. One possible way is to create the initial ramdisk and separately a root filesystem and boot that way. The other is to just boot from a disk image with a completely installed OS on it and still specify what kernel you want to use.</description></item><item><title>Getting Rust support in the Linux kernel configured</title><link>http://example.org/posts/rust_linux_kernel/</link><pubDate>Tue, 01 Aug 2023 09:00:38 -0600</pubDate><guid>http://example.org/posts/rust_linux_kernel/</guid><description>Trying to get Rust support building in the kernel last night was a bit tricky. Despite following the quickstart guide and using the rustavailable target and getting the &amp;ldquo;Rust is available&amp;rdquo; message I still couldn&amp;rsquo;t get the Rust support option to show up in the General setup menu.
After going over it a number of times and verifying I had done everything in the setup correctly I set about trying to answer the question as to why it wasn&amp;rsquo;t showing up for me.</description></item><item><title>System Extensions with systemd</title><link>http://example.org/posts/system_extensions_with_systemd/</link><pubDate>Thu, 29 Jun 2023 11:01:01 -0600</pubDate><guid>http://example.org/posts/system_extensions_with_systemd/</guid><description>Recently I wanted to try out Cosmic DE on my Linux Mint setup and so I cloned the repo and started to look into what it would take. But as I read the README.md I noticed there was talk of the easiest way to test being with a system-extension fascilitated by systemd sysext. I was able to use this method and test out the basics of Cosmic DE (albiet sort of broken probably due to a lack of proper configuration).</description></item><item><title>Added Revault GUI Mock to Projects</title><link>http://example.org/posts/revault_gui_mock/</link><pubDate>Mon, 26 Jun 2023 10:43:55 -0600</pubDate><guid>http://example.org/posts/revault_gui_mock/</guid><description>I added the Revault GUI mock source to my Projects.
Discussion: https://social.futuretim.io/@futuretim/110611535664170854</description></item><item><title>DMS Test / Demo Instance Set-up</title><link>http://example.org/posts/dms_test_instance/</link><pubDate>Fri, 23 Jun 2023 14:37:56 -0600</pubDate><guid>http://example.org/posts/dms_test_instance/</guid><description>I&amp;rsquo;ve setup a Device Management Service (DMS) test/demo instance. It is currently managing a Raspberry PI 4 device running Ubuntu Core. If you have an Ubuntu SSO account and want to check it out let me know and I&amp;rsquo;ll grant you access.
https://dms.futuretim.io
Registered Devices:
Connected Devices:
Snap List / Management For a Device</description></item><item><title>Added Project Kebe</title><link>http://example.org/posts/added_project_kebe/</link><pubDate>Thu, 22 Jun 2023 12:31:51 -0600</pubDate><guid>http://example.org/posts/added_project_kebe/</guid><description>I added Project Kebe to my Projects section. Project Kebe was a hack project to provide an alternative Snap store. It only required a small patch to snapd and then allowed users to operate their own snap store. Basic functionality was implemented but was not anywhere near complete or production code. I had hopes that there would be a lot of community interest in this but that failed to materialize and so it&amp;rsquo;s basically archived now.</description></item><item><title>Using our Flatpak Repository (part 2 of 3)</title><link>http://example.org/posts/using_flatpak_repository/</link><pubDate>Fri, 16 Jun 2023 10:26:11 -0600</pubDate><guid>http://example.org/posts/using_flatpak_repository/</guid><description>Discussion: https://social.futuretim.io/@futuretim/110555219379335576
Continuing from part 1 we now need to complete the setup of our repository, add it to a host where we want to use it, add an application to the repository and then install and run it.
In this series we are managing applications and repositories at the system level. This can all be done withour elevated privileges using the --user flag. You can read more about that here.</description></item><item><title>Flatpak Repo Setup (Part 1 of 3)</title><link>http://example.org/posts/flatpak_repository_setup/</link><pubDate>Thu, 15 Jun 2023 08:21:18 -0600</pubDate><guid>http://example.org/posts/flatpak_repository_setup/</guid><description>Discussion: https://social.futuretim.io/@futuretim/110548688810770751
If you want to setup a flatpak repository it&amp;rsquo;s relatively straightforward but getting all the pieces connected can take a bit of trial and error if you aren&amp;rsquo;t as familiar with the setup.
I&amp;rsquo;ll walk through the process I used to setup a personal flatpak repository on my internal network. I&amp;rsquo;ll be using podman and podman-compose to do this but Docker should work. I assume you have either setup and that you know how to use them.</description></item><item><title>Building and Serving Hugo w/Woodpecker CI</title><link>http://example.org/posts/served-from-git/</link><pubDate>Wed, 14 Jun 2023 15:15:28 -0600</pubDate><guid>http://example.org/posts/served-from-git/</guid><description>Discussion: https://social.futuretim.io/@futuretim/110544651394970985
This content now officially served from a private Gitea repository with Woodpecker CI.</description></item><item><title>Going Social</title><link>http://example.org/posts/going-social/</link><pubDate>Tue, 13 Jun 2023 16:19:24 -0600</pubDate><guid>http://example.org/posts/going-social/</guid><description>I wanted a way to have a comments for posts (not that I expect many) and I evaluated the various comment systems that are compatible with Hugo and in the end decided to use Mastodon instead!
https://social.futuretim.io/@futuretim/110539246794052220</description></item><item><title>Getting Setup</title><link>http://example.org/posts/getting-setup/</link><pubDate>Mon, 05 Jun 2023 16:35:38 -0600</pubDate><guid>http://example.org/posts/getting-setup/</guid><description>Setting up my blog/resume/contact website. This is powered by Hugo and Coder (see below for links). It&amp;rsquo;s static content served using Docker and Traefik as a reverse proxy.
The content is managed on my self-hosted, local Gitea instance and will be built and pushed with Woodpecker CI.</description></item><item><title>Contact</title><link>http://example.org/contact/</link><pubDate>Mon, 05 Jun 2023 16:34:21 -0600</pubDate><guid>http://example.org/contact/</guid><description> email: futuretim (the at symbol) proton (a dot) me linked in: www.linkedin.com/in/futuretim</description></item><item><title>Projects</title><link>http://example.org/projects/</link><pubDate>Mon, 05 Jun 2023 16:30:32 -0600</pubDate><guid>http://example.org/projects/</guid><description>Oh! Tracks! Link to heading Oh! Tracks! (ohtrx) is a partial implementation of the Owntracks recorder and REST API service in Rust. In its current form it does the basics and can serve content so that the Owntracks Frontend can use it instead of the original otrecorder.
The plan is to continue the implementation of original Owntracks features and add additional features. Backward compatibility is not guaranteed and eventually may have its own versions of the various apps.</description></item><item><title>About</title><link>http://example.org/about/</link><pubDate>Mon, 05 Jun 2023 12:25:07 -0600</pubDate><guid>http://example.org/about/</guid><description>An expert generalist. I&amp;rsquo;ve been programming one way or another for the past 20+ years. While I officially got my start with BASIC on consoles like the Atari 400 it wasn&amp;rsquo;t until I started programming in x86 Assembly that it started to feel powerful and super interesting. That low level CPU access was fascinating. It wasn&amp;rsquo;t long before I moved on to C and then a bit later C++. I spent a large portion of my career programming C++ with a couple of short interludes in C#.</description></item></channel></rss>