I’m celebrating 9 months at Akiles, and wanted to share an update on what I’ve been up to and how it’s going, sort of a self-evaluation, or performance review as it’s called at “BigCorp”.
-
posts
-
Performance review
-
The new guy
On December 4th, I started working for Akiles, a PropTech company selling products such as door locks integrated with a cloud service for access control. In the past three years, I’ve spent a lot of time creating generic IoT infrastrucure both on the embedded and backend side, and I’m very excited to experience IoT in a real world use case.
-
Leaving Red Hat
Today (November 27th) is my last day at Red Hat. I joined Red Hat in May 2016, so it’s over 7 years, some of the most eventful years of my life so far. I moved from Trondheim to Hamar, became father for the second time, and found a new home where I’ll likely be staying for a long time.
-
On digitizing an ice hockey table game
Stiga Table Hockey is a classical table game here in Norway.
-
Making an indoor self-watering greenhouse
This post should’ve been written one year ago, when I actually did this project. With another holiday project coming up, it feels necessary to at least post a summary of last years project.
-
Gitops and EnMasse - Part 2 (Operations)
With the EnMasse 0.28.0 release, using a Gitops workflow to manage your messaging application is even easier than before. Part 2 is a followup on Gitops and EnMasse with focus on the operations side of things. I recommend that you read that article first to get an overview of gitops and EnMasse in general.
-
Gitops and EnMasse
With the EnMasse 0.28.0 release, using a Gitops workflow to manage your messaging application is even easier than before. This article explores the service model of EnMasse and how it maps to a Gitops workflow.
-
Building containers on Travis CI using Podman
Since Podman and Buildah appeared on my radar, I’ve been wanting to try replacing docker. Podman is a replacement for docker, whereas buildah is a replacement for docker build. Although docker works OK, I’ve seen various issues with different versions of docker not working with Kubernetes and OpenShift, and that the local docker daemon sometimes becomes unresponsive and causes build failure in the EnMasse CI. Since podman and buildah does not use a local daemon for building images, they will work without root privileges.
-
Setting up EnMasse on AWS EC2
Note: The latest version of this guide can be found at github
-
Messaging as a Service
Inspired by a great blog post by Jakub Scholz on “Scalable AMQP infrastructure using Kubernetes and Apache Qpid”, I wanted to write a post about the ongoing effort to build Messaging-as-a-Service at Red Hat. Messaging components such as the Apache Qpid Dispatch Router, ActiveMQ Artemis and Qpidd scales well individually, but scaling a large deployment can become unwieldy. As Scholtz demonstrates, there are a lot of manual setup when creating such a cluster using kubernetes directly.
-
Performance mindset
You’ve all heard it, and you all know it: premature optimizations are the root of all evil. But what does that mean? When is an optimization premature? I’ve come to think of this sort of ‘dilemma’ many times at work, where I see both my self and coworkers judging this by different standards.
-
Haskell and continuous delivery on debian
Having run my toy web service wishsys for a few months, I thought it would be nice to setup a continuous delivery/deployment pipeline for it, so that I could develop a new feature and push it into production as quickly as possible (if it passes all tests). I thought writing a small article about this would be nice as well, as I found few resources for doing CD with haskell.
-
Wishing with yesod
Today, I launched my wishsys service, which is just a simple service for creating wish lists with separate access for owners and guests. The original use case was my own wedding, so I created an even simpler version for that using snap. Snap worked great, but I had some hassle building the authentication mechanisms properly.
-
Learning haskell through project euler
I have tried using Haskell to various smaller projects, such as wishsys and a game that I never got really far into making. But learning a new programming language through the means of hobby projects only work as long as the project is contained and small. For my part, most hobby projects start out with great ideas and grand designs, but end up as a mess since I am unfamiliar with the programming language.
-
Dinner menu week 18
This time I thought I’d share our dinner plans for the next week. We take turns creating dinner list every week, and next week is my turn!
-
Haskell is awesome
I have started to learn myself haskell using the book named “Real world Haskell”. I have so far only come to chapter 4, but I am already in love with some of the features:
-
Back to compiling software
For a while now, I have been using Ubuntu Linux on my desktop, and it as worked really well. In fact, I even installed Windows 7 on my media center (replacing Linux) just to stop bothering with configuring my system all the time. Since I started working at Yahoo!, I did not really feel like having to do extra work at home in order for my computer to function properly. Moreover, I did not have much time left to work on FreeBSD, so I simply reinstalled my desktop with Linux, and that has been working well for almost a year now.
-
Using 4k sector drives
I just bought two Western Digital 2 TB disks the other day in order to increase storage capacity. I was planning on putting a ZFS mirror on them. The other day I discovered that the disks uses a new drive format called “Advanced Disk Format”. This format basically extends the sector size from 512 to 4096 bytes.
-
Locale fix
After looking for a long time as to why my default locale in gnome changed after a recent upgrade, I finally found out where to change the locale setting. The problem was that gnome did not seem to pick up my system locale settings, and the norwegian characters in my terminal came up as question marks.
-
Sometimes ports make me cry
I guess I’m not the typical FreeBSD user, because I do not enjoy using ports much. Mainly this is because I also use it as a desktop. On a powerful server or workstation, ports is fine. It’s super flexible and everything works quite well. And kudos to all people working on updating and making improvements to it.
-
Bsdadminscripts to the rescue
I just learned of sysutils/bsdadminscripts after my previous post about how hard it was to use packages only in FreeBSD. Well, I think I found a partial solution to my problem, as the bsdadminscripts port contains a pkg_upgrade utility, which is able to update your system without a ports tree available, as long as the INDEX file exist on the packages server.
-
Iaudio d2 upgrade
Last year in Japan I bought a Cowon iAudio D2 player, which have proven to be quite good. But a few days ago, I thought I’d try to upgrade the firmware of it. I then discovered that there are four different types of firmware depending on where you bought it. As I bought it in Japan, my firmware was not compatible with other firmwares. The reason for this are mostly due to small differences in hardware. In my case, I have the possiblity of watching Japanese television (not really useful in Norway).
-
Linuxulator to the rescue
As I usually have a few classes at school which requires special software, I wanted to be able to run some of this software on my own computer, as there are student versions of some of the software. One of these is ModelSim from MentorGraphics. ModelSim is basically a simulator for hardware designs, and I use it to simulate VHDL. Unfortunately, ModelSim only comes for Windows, Linux and Solaris. As I only run FreeBSD on my laptop, no software for me :( But wait, FreeBSD have the linuxulator!, which allows Linux binaries to be run unmodified on a FreeBSD host (It is basically an implementation of Linux syscalls within the FreeBSD kernel). The steps I needed to go through to install the Linux version of ModelSim was pretty easy.
-
Vacation over
Today, I’m sitting in a café in Oslo, waiting until we’re leaving for Gardermoen and our flight back to the Netherlands after one week vacation in Norway. The weather was nice, and I got to do some skiing at least. However, I was actually supposed to be in the Netherlands already. The reason that I’m not, is that we (my girlfriend and I) missed the flight on Sunday. We actually missed it by one day, as we were 100% sure that we were leaving yesterday, so when we showed up at the airport, we were shocked to learn that we were 24 hours late! This was a silly mistake, as neither of us really looked at the date, we always assumed that we were leaving on Monday. Unfortunately, to be able to board the flight that we assumed was our flight, we had to pay 3000 NOK extra per ticket! In other words, we had to find other ways of getting back. Luckily, we got to stay at my sister place last night, and got new tickets for today’s flight at approximately the same price as our original tickets (700 NOK per ticket). Hopefully, we’ll be back in our apartment tonight :)
-
Avr32 port
After Arnar Mar Sig posted his patchset for an initial skeleton of the AVR32 port almost a year ago, things started to catch speed in the beginning of this year. The work is done in perforce, and is progressing well. Currently, the system boots and recognizes most of the hardware, but linker work is required to be able to run init.
-
Gvinum imported
Last weekend I imported gvinum into HEAD, and I hope many users (and old users) of gvinum will try it out, as it have some nice improvements. Moving it into HEAD now, means it also will become part of 8.0-RELEASE which is coming later this year, and since it is a lot of changes, the intention is to have it in HEAD now for a while before the release process begins. Among the most interesting updates for users are:
-
Exam reading
Damn, reading for exams is really not my favorite thing. It’s not that it’s very hard material, but the motivation is the problem. I always tend to get a bit sloppy with classes where the only form of assessment is the exam, and if the class is not very interesting either, it gets hard. However, these kind of classes are typically very theoretical courses, and one way I cope with it is to make them practical. For instance, in this course there are lot of distributed algorithms that the student is expected to know. Some of them are almost several pages long, and I’m really not the type for keeping all that in my head, and if I did, it would only be because I memorized it. So instead, I tried to implement the algorithm, as it helps with understanding because you can see how it works in action! What I did in this case was to create a node abstraction/class which I could re-use in several algorithms. The nodes definition is something like this:
-
First quarter finished
Phew, the first quarter of my exchange study is almost over. So far, the stay here in the Netherlands have been very exciting. First of all, we did an awesome project creating a quad rotor controller using a joystick to fly. A demo of the previous years group can be found here. We were actually able to make it work like in this video. The hardware consists of a Xilinx Spartan 3E starter kit running the X32 CPU core developed here at TU-Delft, a PC with serial link to the FPGA board, a joystick connected to the PC, and the Quad Rotor itself connected to the FPGA board via a modified serial link. We implemented the control software, signal filtering etc on the X32 in C, and after optimizations, we had a cycle time almost half of the required, and it flew!
-
Setting up a zfs only system
After loader support for ZFS was imported into FreeBSD around a month ago, I’ve been thinking of installing a ZFS-only system on my laptop. I also decided to try out using the GPT layout instead of using disklabels etc.
-
Csup status
Finally, I have been able to resolve all current known issues with cvsmode support in csup. I just sent out a new announcement with the patch, and I hope to get some more testing and perhaps some reviews soon, but it is a big patch and few people are familiar with the code base.
-
Testing csup
The last couple of weeks I’ve been very busy with school (and I expected this to be a quiet semester). However, I’ve found some of the last few bugs lurking around in csup:
-
Improving csup
It’s been a while. Partially because I’ve become a FreeBSD committer and had more productive stuff to do than writing in my weblog, and partially because my account was disabled after Google Summer of Code (Also, thanks to Google for SoC).
-
Hunting bugs
More status updates… I’ve been fixing many small gvinum bugs the last couple of weeks:
- The state of gvinum objects were changed after reloading. This meant that objects got the wrong state when gvinum was brought up.
- Made gvinum always use the most recent configuration it finds when setting object states.
- Make sure the newest drive is always the newest, and not the first in the drivelist, as was previously assumed.
- Add "growable"-state to be used when a plex is ready to be grown.
- Allow a plex to be rebuilt even though it's also growable.
- Do not change the size of the volume until the plex is completely grown.
- Add status of growing and rebuild of a plex in the list output.
- Prevent rebuild to take over the I/O system increasing access-count at the start and end of the rebuild.
Probably a couple of other fixes as well. Also, I’ve updated the vinum-examples page in the handbook to reflect new features and more practical examples. I’ve posted a “call for testers” on current@, arch@ and geom@, and have received some response from people who are willing to help me test. Thanks to them. I’ve uploaded the code-sample that I’ll be delivering to google here: http://folk.ntnu.no/lulf/gvinum_soc2007.tar.gz
-
Finishing up
The last couple of weeks I’ve tested and done bugfixing and cleanup of gvinum code. I refactored some parts to make the code belong where it seems logical. I also implemented growing for striped plexes, but that was quite easy since I could reuse most of the code for growing RAID-5 plexes. Unfortunately I was sick for a week and unable to work.
-
Growing up
Since last post I haven’t really done that much do gvinum, but a few things.
- I added a few automated test-scripts to check if a volume behaves properly
- Go through test-plan and make sure that gvinum passes the tests.
- I've been thinking a lot on how to best implement growing RAID-5 plexes.
- I've implemented growing of RAID-5 plexes.
Now, the first and second points are quite boring to do, but I had to do it. Now the last points were trickier, since I didn’t really know where I should start. Finally I decided the best way was to let the plex overwrite itself! A more detalied explanation can be found in the TODO of my perforce branch. I need to test the implementation a bit now. Other than that, I’ve been a bit lazy on my own work this week, and tried to help other students with reviews etc.
-
Bugathon week
Since last post, there has been many small bugfixes to gvinum. After some debating with myself on how I should implement concat/stripe/mirror, I think I got it pretty much right. The event system changed gvinum a lot, so I had to rewrite most of the code I already had on this.
-
Bug monster dying slowly
Finally, an update on what I've been doing since the last time. This time I have a lot of small changes that have been done:
-
Even happier
Finally I did the initalization code for raid5 plexes, and this means I’m pretty much complete with updating old gvinum to the new event system, but it will probably need some fixes here and there as it gets tested.
-
Subdisks nodw live happy in raid5 town
So, finally the exams are over, and I’ve been able to work sort of full-time on my project the last days. What I’ve done is (a bit technical this time perhaps, but this stuff tends to become that):
-
Raid5 improvements
The last couple of weeks I had to practice for some exams. In other words, a great time for coding :)
-
Getting started
Well, there has been some time now to get familiar with the projects and how things are done, although I am already quite familiar with the procedures. Therefore I started a bit earlier on the actual project, since I have a period with finishing exams from now until 8. June.
-
Ready set go
Hi, and welcome to this blog and my first post! I’m Ulf Lilleengen, and I will work on improving the Gvinum Volume Manager this summer. I’ll try as good as I can to keep people updated on my work through this blog.