RSSAmplifier

Blog

kyrofa's blog

Recent content on kyrofa's blog

kyrofa.comRSS feed ↗73 posts

Latest posts

New and improved way to review GitHub pull requests for snaps

Reviewing pull requests for snaps has been pretty terrible ever since snaps were introduced. There are a few very simple reasons: Building snaps locally in order to review is too much work. This is a fine place to start, but it doesn’t scale, especially if it takes any amount of time to build the snap in question (mine takes over an hour). Most CI engines use Docker. You can build snaps in…

Monitoring a Nextcloud snap upgrade

The Nextcloud snap updates automatically. By default it might happen any time, although you can configure that. The snap provides a wonderful, user-friendly indicator that an upgrade is happening: it will become unresponsive and unvisitable until the upgrade has finished. Okay, I’m kidding, this is terrible and something we know we need to work on. My point is, there are times when your snap…

Nextcloud snap finds a new home

If you’re an avid reader of the blog (and come on, who isn’t?), you’ll know that I’ve been maintaining a snap for Nextcloud since Nextcloud came into existence. Originally, though, that snap wasn’t called “nextcloud”, it was called “nextcloud-kyrofa”. My original goal was that I would bootstrap the snap for them, and then they’d take it…

Demystifying Rails autoloading

When I first started learning Rails back in the day, it was my first introduction to Ruby: I was learning them both at the same time. As a result, the line between them was rather blurry; I didn’t know what was coming from Ruby, and what was coming from Rails. The Rails approach of monkey-patching Ruby didn’t help. If I’m being honest, I didn’t realize that Object#blank?…

My phone isn't as smart as yours

I remember the first mobile phone I ever saw. A “car phone.” It looked a bit like an old corded telephone hooked up to a car battery in a bag that weighed 30 pounds. I thought it was awesome; my father was on the bleeding edge of a technological revolution, and he was pretty much a super hero. Was it pretty? No. Actually mobile? It couldn’t leave the car, but the car could move,…

The end of my journey at Canonical, and new adventures ahead

I am a staff engineer at Canonical, where I have worked for six years. My time here has been filled with brilliant people and amazing technology, and I’ve had the pleasure and privilege of playing pivotal roles getting a number of new projects off the ground. As I’ve said in the past, I joined Canonical to help my technical growth, and they delivered in spades. I have really loved my…

How to build a snap using ROS 2 Foxy

The snapcraft CLI (the tool used to create snaps) has long had support for building snaps that use both ROS 1 and ROS 2. ROS 2 Foxy Fitzroy is the latest ROS 2 LTS, which runs on Ubuntu 20.04 (Focal Fossa). The snapcraft CLI recently gained experimental support for building Foxy snaps, so I wanted to walk you through doing exactly that with the goal of helping both of us: getting you familiar with…

Four years of Nextcloud

I’m a few weeks late on celebrating Nextcloud’s four year anniversary, but I’m doing it anyway! My how time flies. I became a part of the ownCloud community back in 2012. Heck, you can still find blog posts about how I ran it on this very blog if you scroll down far enough. Then, in 2015, I saw the post about the Western Digital/ownCloud collaboration on what would eventually…

PSA for ROS users: Some things to know as Python 2 approaches EOL

We got an interesting question from a customer today, and I think the answer might be helpful to a wider audience. Python 2 will reach end of life in two months. This shouldn’t be news to anyone who hasn’t been living under a rock, and plans are in place to use Python 3 in Noetic (whereas ROS 2 has always used Python 3). However, the question from our customer was this: What does that…

Robotics security: What is SROS 2?

We at Canonical have been hard at work on the security features of version 2 of the Robot Operating System (ROS 2). However, if we lift our collective heads up out of the weeds it’s easy to see folks completely misunderstanding how security works today in ROS 2. We’ve written some design articles to help distill all the moving pieces into something comprehensible, but I wanted to do…

Canonical joins the ROS 2 Technical Steering Committee

We at Canonical care deeply about robotics. We firmly believe that robots based on Linux are cheaper to develop, more flexible, more secure, and faster to market. One of the contributing factors to this being the case is the Robot Operating System (ROS). ROS is by far the most popular middleware for creating Linux-powered robots. It provides all sorts of open source tools and libraries and…

A better way to review GitHub pull requests for snaps

I’ve had a very particular itch for a long time, now. Something I love about open source is that it empowers developers to scratch their own itches, and a while back I decided to do exactly that. We’ve used it in production on the Nextcloud snap for a few months with relatively few issues, so I think it’s time to open it up for wider use… in case you share my itch.

Speed up your ROS snap builds

A while back I wrote a post about distributing a ROS system among multiple snaps. If you want to enable some sort of add-on story, you need to have multiple snaps, and that remains the way to do it today with ROS. That approach works, but I’ll be the first to admit that it’s not terribly elegant, and we’re working on making it better. However, in my experience talking to various…

Cipher update for the Nextcloud snap

Security is a always a balancing act between safety and practicality. If we’re talking about the internet, you can go all the way from something impenetrable and completely useless to something easy to use and also part of a botnet. In the case of the Nextcloud snap’s SSL cipher suite, as with any website, it’s a balance of supporting only the best ciphers while also ensuring…

ROS 2 launch: required nodes

When using the Robot Operating System (ROS), it&rsquo;s fairly common to want to shut down a launched system if a specific node (or set of nodes) exits. This is pretty easy in ROS1, because launch files support the required attribute on each node. As a result, crafting a two-node system where one of the nodes is required is straightforward: <launch> <node name = 'talker' pkg = 'talker' type =…

Building ROS 2 snaps with Colcon

The snapcraft CLI has supported building ROS1 snaps for a while via the catkin plugin. We supported the ROS2 betas via the ament plugin, but that was before Open Robotics had a ROS 2 package repository setup, which meant that the ament plugin built the ROS 2 underlay from source, and it was predictably dreadfully slow. However, the stable releases of ROS2 introduced a new build system called…

Are you passionate about open-source robotics? Join us.

Ubuntu is a very popular operating system for robotics, for a number of reasons. Perhaps the software stack one happens to use prefers Ubuntu, or the hardware one is using only distributes drivers for Ubuntu. Maybe one&rsquo;s team is already familiar with it, or decision-makers like that it has long-term support releases and extended security maintenance. Perhaps one views snaps as the perfect…

Develop your snaps faster

Snaps bundle their dependencies, which take time to fetch and unpack, and they&rsquo;re typically made up of multiple parts, each of which need to be built and installed into the snap. Once you finish this process, you need to install the snap and test it out. Once you notice that your code is terrible and doesn&rsquo;t work the way you thought, you have to make a change and go back through that…

ROS Melodic on Fedora 27

Part of the snapcraft CLI&rsquo;s development roadmap this cycle includes the ability to build snaps on distros other than Ubuntu. Part of that work includes investigating each plugin to determine if it&rsquo;s possible to get it working on other distros. As a result, I&rsquo;ve been looking into the Catkin plugin recently, using Fedora 27 as my proving ground (since that&rsquo;s the distro with…

Your first robot: Sharing with others [5/5]

UPDATE: I&rsquo;m leaving this series up for historical purposes, but please note that I no longer recommend Ubuntu Core or snaps for use in robotics. This is the fifth (and final) blog post in this series about creating your first robot with ROS and Ubuntu Core. In the previous post we discussed methods of control, did a little math, and wrote the ROS driver for our robot. But it still required…

Your first robot: The driver [4/5]

UPDATE: I&rsquo;m leaving this series up for historical purposes, but please note that I no longer recommend Ubuntu Core or snaps for use in robotics. This is the fourth blog post in this series about creating your first robot with ROS and Ubuntu Core. In the previous post we worked on getting data out of the wireless controller and into ROS in a format meant for controlling differential drive…

Your first robot: The controller [3/5]

UPDATE: I&rsquo;m leaving this series up for historical purposes, but please note that I no longer recommend Ubuntu Core or snaps for use in robotics. This is the third blog post in this series about creating your first robot with ROS and Ubuntu Core. In the previous post you were introduced to the Robot Operating System (ROS), and got your robot moving by ROSifying one of the CamJam worksheets.…

Your first robot: Introduction to the Robot Operating System [2/5]

UPDATE: I&rsquo;m leaving this series up for historical purposes, but please note that I no longer recommend Ubuntu Core or snaps for use in robotics. This is the second blog post in this series about creating your first robot with ROS and Ubuntu Core. In the previous post we walked through all the hardware necessary to follow this series, and introduced Ubuntu Core, the operating system for IoT…

Your first robot: A beginner&#39;s guide to ROS and Ubuntu Core [1/5]

UPDATE: I&rsquo;m leaving this series up for historical purposes, but please note that I no longer recommend Ubuntu Core or snaps for use in robotics. Some time ago I created a blog/video series that walked the reader through creating a prototype using the Robot Operating System (ROS) and taking it to production using Ubuntu Core. However, that series was intended more for robotics professionals;…

Google Code-in 2017

Tomorrow, it begins. The culmination of weeks of research, documentation, and preparation by multiple open-source projects, just waiting to start hacking away with students. Tomorrow, students aged 13-17 can begin participating in Google Code-in 2017. Ubuntu is one of the mentoring organizations, with several of my colleagues and me as mentors. Just in case you haven&rsquo;t heard of it, Ubuntu is…

Nextcloud snap to be updated to v12

If you&rsquo;re a user of the Nextcloud snap, you may have noticed that upstream Nextcloud released v12 a while back, but you&rsquo;re still on v11. That&rsquo;s because v12 introduced several regressions that made us maintainers decide to hold off on the upgrade. Thankfully, things are finally looking up. As of today, it seems that all the blocking regressions have been fixed. Which means that,…

Ubuntu 17.10 Release Party

Were you busy today? Did you forget that Ubuntu 17.10 was released today (no way)? Perhaps you agree that Thursdays are lame for a party anyway? Walla Walla University&rsquo;s ACM club is having their kick-off event, a joint retro video game and Ubuntu 17.10 release party, on Sunday, October 22nd from 3pm to 5pm! This event will be taking place in room 348 of Kretschmar Hall on the Walla Walla…

Snap configuration: the configure hook

You&rsquo;ve heard it a million times: snaps bundle their dependencies. People seem to understand and accept the technical aspects of this, but today I want to talk about a more philosophical aspect. If you&rsquo;re used to more traditional packaging, then you&rsquo;re used to each project being standalone, e.g. Apache is its own package, with its own configuration; PHP is its own package, with…

Snap install-time setup: the install hook

When it comes to developing snaps, there&rsquo;s a particular confusion out there that I see over and over again: build-time versus run-time. For example: &ldquo;I&rsquo;m building a snap, but I can&rsquo;t seem to convince Snapcraft to place my config file in $SNAP_DATA.&rdquo; In this post, I want to show you how to get the results you want. First of all, we need to clear something up. Snapcraft…

Integrating your Rails project with GitLab review apps

My first foray into software development when I was a kid was as a web developer. I don&rsquo;t admit this to many people, but the first language I ever learned halfway decently was PHP. I led a confused childhood. After that, though, I was introduced to Ruby on Rails, and I&rsquo;ve been using it ever since. I don&rsquo;t do web development professionally anymore, but I have a number of web-based…

Ubuntu Core: Making a factory image with private snaps

This is a follow-up to the ROS prototype to production on Ubuntu Core series to answer a question I received: &ldquo;What if I want to make an image for the factory, but don&rsquo;t want to make my snaps public?&rdquo; This question is of course not robotics-specific, and neither is its answer. In this post we&rsquo;ll cover two ways to do this. Before we start, you&rsquo;ll need a little bit of…

How to use Snapcraft v2 on Trusty

As of this writing there are two major versions of Snapcraft: v1 and v2. Snapcraft v1 creates snaps that target Ubuntu Core 15, and Snapcraft v2 creates snaps that target Ubuntu Core 16. Series 16 snaps are much more widely used, being supported not only in Ubuntu Core 16 but also classic Ubuntu Xenial (desktop and server) and more recently even Trusty! It&rsquo;s also supported across a range of…

Continuous acceptance tests for complex applications

So you&rsquo;re developing a complex application. Maybe it has some really specific dependencies, or requires a lot of setup. In many cases (such as my own), it&rsquo;s a web application. I have a suite of tests, varying all the way from unit tests through integration tests. The latter typically uses Selenium, and I often integrate it with Sauce Labs. I&rsquo;ve written an article about this…

Call for testing: Nextcloud snap v11.0.3snap3

We&rsquo;re getting ready to release a new version of the Nextcloud snap. v11.0.3snap3-rc1 is now in the candidate channel: $ sudo snap install --candidate nextcloud This update includes: An update to MySQL v5.7.18 An update to certbot v0.14.1 We&rsquo;d love this new version (particularly features that involve those updates) to get some exercise before we release it. Feel like helping?…

ROS production: behind the scenes

I&rsquo;m an engineer, and am pretty clueless when it comes to film-making. However, I&rsquo;ve been asked by a few different people how I made the ROS prototype to production on Ubuntu Core video series. While I&rsquo;m not deluding myself into thinking I&rsquo;m a pro, I&rsquo;m happy with how they turned out, and they were made on a shoestring budget with open-source software. This post is for…

Call for testing: Darktable v2.2.4snap1

The Darktable snap (darktable-kyrofa) is terribly out-of-date. I&rsquo;d like to bring it up to the latest release, but I could use your help verifying that things still work. If you&rsquo;re a photographer, particularly if you have some experience using Darktable, mind putting it through its paces? v2.2.4snap1-rc1 is in the candidate channel: $ sudo snap install --candidate darktable-kyrofa…

Call for testing: Nextcloud snap v11.0.3snap2

We&rsquo;re getting ready to release a new version of the Nextcloud snap with a few new features, including: Supporting changing ports from the default 80/443. Supporting Samba shares. We&rsquo;d love this new version (particularly these new features) to get some exercise before we release it. Feel like helping? We&rsquo;ve put together some smoke tests to get you started. Please test all you can,…

ROS production: create an Ubuntu Core image with our snap preinstalled [5/5]

UPDATE: I&rsquo;m leaving this series up for historical purposes, but please note that I no longer recommend Ubuntu Core or snaps for use in robotics. This is the fifth (and final) blog post in this series about ROS production. In the previous post we created a gadget snap to allow confined access to the Turtlebot. In this post, we&rsquo;re going to put all the pieces from this series together and…

ROS production: obtaining confined access to the Turtlebot [4/5]

UPDATE: I&rsquo;m leaving this series up for historical purposes, but please note that I no longer recommend Ubuntu Core or snaps for use in robotics. This is the fourth blog post in this series about ROS production. In the previous post we created a snap of our prototype, and released it into the store. In this post, we&rsquo;re going to work toward an Ubuntu Core image by creating what&rsquo;s…

ROS production: our prototype as a snap [3/5]

UPDATE: I&rsquo;m leaving this series up for historical purposes, but please note that I no longer recommend Ubuntu Core or snaps for use in robotics. This is the third blog post in this series about ROS production. In the previous post we came up with a simple ROS prototype. In this post we&rsquo;ll package that prototype as a snap. For justifications behind why we&rsquo;re doing this, please see…

ROS production: our prototype [2/5]

UPDATE: I&rsquo;m leaving this series up for historical purposes, but please note that I no longer recommend Ubuntu Core or snaps for use in robotics. This is the second blog post in this series about ROS production. In the previous post we discussed why Ubuntu Core was a good fit for production robotics. In this post we&rsquo;ll be on classic Ubuntu, creating the example ROS prototype that…

From ROS prototype to production on Ubuntu Core [1/5]

UPDATE: I&rsquo;m leaving this series up for historical purposes, but please note that I no longer recommend Ubuntu Core or snaps for use in robotics. My background is pretty heavily littered with robotics. A natural side effect of this is that I&rsquo;ve published numerous posts discussing snaps, Ubuntu Core, and different robotics frameworks (ROS and MOOS specifically). But my robotics…

Distributing a ROS system among multiple snaps

One of the key tenets of snaps is that they bundle their dependencies. The fact that they&rsquo;re self-contained helps their transactional-ness: upgrading or rolling back is essentially just a matter of unmounting one snap and mounting the other. However, historically this was also one of their key downsides: every snap must be standalone. Fortunately, snapd v2.0.10 saw the addition of a content…

ROS on arm64 with Ubuntu Core

Previous Robot Operating System (ROS) releases only supported i386, amd64, and armhf. I even tried building ROS Indigo from source for arm64 about a year ago, but ran into dependency issues with a missing sbcl. Well, with surprisingly little fanfare, ROS Kinetic was released with support for arm64 in their prebuilt archive! I thought it might be time to take it for a spin with Ubuntu Core and its…

Snap updates: automatic rollbacks

When researching snaps, one of the main advantages everyone talks about is the fact that they&rsquo;re transactionally updated. That is, an upgrade either succeeds or fails, it doesn&rsquo;t leave the snap in a broken state. If you have snap &ldquo;A&rdquo; installed and an update for it is released, it&rsquo;ll automatically update. If that update is somehow broken, the snap will roll back to the…

Ubuntu Core on VirtualBox

If you read the official Ubuntu Core docs, you&rsquo;ll see that the recommended way to run Ubuntu Core virtually is with KVM. However, it&rsquo;s probably even easier to use it in VirtualBox, and I&rsquo;ve been getting some questions about that, so I wanted to devote a quick post to it. Prerequisites: A Linux machine (using Ubuntu 16.04 here). This guide will work on Windows as well, but the…

Snapping Nextcloud: Nextcloud itself

In the previous post of this series, we discussed the process of and lessons learned from building Redis for the Nextcloud snap. That means we&rsquo;ve covered all the major pieces except for Nextcloud itself, so for this post that&rsquo;s what we&rsquo;ll focus on getting that into the snap. As I mentioned previously, Nextcloud is a PHP application. As such, it&rsquo;s not difficult to get…

Snapping Nextcloud: The memcache

In the previous post of this series, we discussed the process of and lessons learned from building MySQL for the Nextcloud snap. The last piece of infrastructure we need to introduce is the memcache, for which we&rsquo;ll use Redis. Nextcloud supports a number of memcache backends; I chose Redis because it can provide both a local cache as well as file locking, so for this post that&rsquo;s what…

Snapping Nextcloud: MySQL

In the previous post of this series, we discussed the process of and lessons learned from building PHP 7 for the Nextcloud snap. Nextcloud supports a number of databases, but they recommend MySQL (the v9 docs that I used when making this decision are lost to the dust of time, but MySQL is still the recommended option in v21), so for this post that&rsquo;s what we&rsquo;ll focus on getting into the…

Snapping Nextcloud: PHP 7

In the previous post of this series, we discussed the process of and lessons learned from building Apache for the Nextcloud snap. Nextcloud is a web application written in PHP, so for this post we&rsquo;ll focus on getting PHP into the snap. PHP 7, like Apache, is included in the Ubuntu archives. However, I was planning on using the PHP Apache module, and since I was building Apache from source, I…