My biggest problems with NixOS

Probably a year ago today, I learned about the magic of Nix and it’s Linux distribution NixOS. In theory, NixOS did/does everything I’ve ever wanted from a Linux distribution. I say in theory because unfortunately, NixOS suffers from a very common problem within the tech world, what I’m going to call the “Day Two” problem. The “Day Two” problem, as I’m calling it here (though I’m sure it has another name) is when you’ve gotten past the “Hello World” phase of a new technology - you’ve gotten the tech demo working and you’re excited, - but then you have the uphill battle of learning the skeletons in the closet. »

Experimenting with vault

One problem I’ve been strugglinging with over the past few months is how to configure a secure way to set and get variables for my various environments. I’ve considered building a tool for this (one that you’ll probably hear about soon) but while deciding what the MVP should be I realized that I might be able to strap a few different tools together to get the result I’m looking for. »

You should know (about): Ember.computed.@each & Ember.Enumberable.invoke

So say you have a any array of objects in your ember app testArray = [{name: "bob the builder"}, {name: "sarah the smasher"}] > [Object, Object] Did you know that there is a ‘magic’ keyword called @each you can use to pluck properties from all your objects like this: testArray.get('@each.name') > v {_keyName: "name", _owner: v, _content: Array[2], __nextSuper: undefined, __ember1448307773263: null…} It returns a weird ember object array thing that you can convert into a normal array with toArray() like so: »

Michael Francis

Introducing: Infestation - a zero* dependency portable environment manager

Infestation is a portable environment manager currently implemented as a makefile. Infestation allows a user to install specific versions of all their favorite apps and their dot (configuration) files wherever they go regardless of host operating system or architecture or root privileges. Why? As a consultant, I’m often called in to fix clients’ server problems. When I’m responsible for building a server, I would make an ansible playbook with all the server config and store it in a shared git repo for easy reference if something needs to be fixed, but often I’m fixing servers strung together by other developers, which means spending time discovering how things are already configured. »

Michael Francis

Avoiding g-ir-scanner cache issues during compile

I was recently attempting to compile megatools 1.9.9.5 for my UbuntuNAS and ran into an issue with g-ir-scanner during the make Traceback (most recent call last): File "/usr/bin/g-ir-scanner", line 46, in <module> sys.exit(scanner_main(sys.argv)) File "/usr/lib/gobject-introspection/giscanner/scannermain.py", line 470, in scanner_main transformer = create_transformer(namespace, options) File "/usr/lib/gobject-introspection/giscanner/scannermain.py", line 337, in create_transformer accept_unprefixed=options.accept_unprefixed) File "/usr/lib/gobject-introspection/giscanner/transformer.py", line 53, in __init__ self._cachestore = CacheStore() File "/usr/lib/gobject-introspection/giscanner/cachestore.py", line 83, in __init__ self._check_cache_version() File "/usr/lib/gobject-introspection/giscanner/cachestore.py", line 103, in _check_cache_version self. »

Michael Francis

Installing MAAS on Discovery

It’s 4am local time and I can’t sleep. I’ve been tossing and turning thinking about how I’m going to crunch some “Big Data” I have on my small cluster of 3 machines (+a dedicated NAS). Ideally I’d like to deploy Mesosphere DCOS and run Spark with Scala, however Mesosphere DCOS isn’t available to the public yet outside of the “Enterprise Edition” which the sales team said they were only releasing to “Select Customers”. »

Michael Francis

Ruby Tricks I've learned

I’m not sure if this will be an constantly updated post or if I’ll just make new blog posts as I discover new tricks but here are some interesting ruby tricks I’ve recently learned anyway #partition So this is one I actually learned from elixir but I’m happy to say it’s available in ruby and javascript (via lo-dash) Say you have two groups of things and you need to separate them. »

Michael Francis

TIL Git Clean

git clean -f -d Easily cleanup unintended files in your git repo. »

Michael Francis

Manual this binding with IIFEs in Coffeescript

I recently had an issue where I wanted to access the outer scope of a function, while also using the this scope inside the function. Often in Javascript developers will do something like that = this obj.doThing(function() { that.something() }) allowing you to access the outerscope and the inner scope. In coffeescript (and ES6) this functionality can be accessed using the => (fat arrow) function obj.doThing => @something() If you look at the compiled output, coffescript builds an IIFE (Immediately invoked function expression) that looks like this »

Michael Francis

Nexus Player, buggy to the point of unusability

Limited bandwidth caused poor video quality Videos had to be controlled by a smartphone / tablet Core Experience Multiuser Management Inconsistent Search Limited Content Bugs Wifi issues Remote pairing issues Paused tracks randomly play App Crashes No soft reboot (Fixed in 5.1) After having the Chromecast for a year, I was excited to hear at Google IO 2014 that the Chromecast I had come to love would be getting a tricked out big brother that promised to solve the issues I had with the Chromecast. »

Michael Francis