Control Keynote presentation with your mobile browser

A little moan to start with…

I owned a mid 2009 MacBook Pro, I never used it for presenting stuff to others but I actually bought a remote control for it. The computer cost me a lot of money, it was top end stuff when it was bought. The remote control cost me the money as well. I also have a copy of Keynote. It also cost me money. A while ago I’ve switched to a new MacBook, the Retina one, top end as well. It cost even more money than the first one.

Crowd sourced unit testing / CI

Unit testing has evolved a long way over the years, continuous integration services even more so. Few years back, when mentioning CI, Jenkins was the only reasonable choice someone would take. It was kind of easy to set up, depending on what one was planning to do with it. Looking at this space today there are plenty of services offering painless CI for the masses. The most known one - Travis CI. Compared to Jenkins it’s night and day. Simply sign in with Github, go to settings, enable repository to be tested and you are off. The build can be customised by modifying .travis.yml file placed in the root of the repository to be tested. Every push to Github, every pull request and every merge is automatically tested. Results are available on Github together with full history of the project. Easy.

State of gossiperl and some JavaScript Thrift goodies

The gossiperl project is growing. I had a great, productive, working Christmas break, implementing a number of client libraries for the message bus. In the last couple of weeks a number of client libraries for gossiperl have been released. The full list now includes:

Gossiperl gossip middleware in Erlang

Today I’ve released a project called gossiperl. Gossiperl is a language agnostic gossip middleware written in Erlang. The purpose of the project was purely research on gossip based systems, as well as, learning Erlang.

Main intent was to create a common communication middleware enabled over gossip using a standard binary transport mechanism. Gossiperl is a result of over 6 months of research, reading, learning, planning and implementation. Gossiperl uses Apache Thrift binary serialisation over UDP. Gossiperl is intended for projects where order of delivery is not important and latency is acceptable. Intended projects require a messaging layer but not necessarily want to implement their own communication stack.

Apache Thrift via UDP in Erlang

A few months ago I have started learning Erlang, mostly for fun but it was right about time to jump on the functional bandwagon. The best way to learn a new language is to find an engaging project, in my case its been something what has been on my mind for quite a while: a cloud communication protocol / framework for distributed computing. Some basic principles of what it is about can be found here: CloudDDS.

Erflux, InfluxDB client for Erlang

It’s been already a month since I released erflux on github. Erflux is an Erlang client for InfluxDB HTTP protocol.

Installation

1
2
3
4
{deps, [
  {erflux, ".*",
    {git, "git://github.com/radekg/erflux.git", {tag, "version-1"}}}
}]}

and run

./rebar get-deps

Configuration

Erflux allows configuring a number of parameters:

Apache Zookeeper authentication

The problem

One of my Zookeeper clusters has to be available to everyone. But I want to make sure only specific known hosts are allowed to connect. The problem was, those known hosts are dynamic and I didn’t want any configuration for this component. The servers are running in the cloud, they come and go.

Git: chopping out part of the repo into a separate repo

I had to cut out cookbooks/nodejs from the develop into a separate repository and move develop to master.

The problem is, there is a git repository called XYZ with the following structure:

  • cookbooks
    • nodejs ...
    • mysql ...
  • other_stuff ...

and following branches:

Setting up knife ec2

I keep getting Fog::Compute::AWS::NotFound: The key pair ... does not exist error!

How to solve this problem isn’t explained well enough anywhere.

Install knife-ec2 first:

sudo gem install knife-ec2

Then I added this to my knife.rb:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# key name, as defined in EC2 Key Pairs,
# this value has to be exactly the same as the one in the management console:
knife[:aws_ssh_key_id]        = "my-ec2-key"

# AWS ID/SECRET:
knife[:aws_access_key_id]     = "..."
knife[:aws_secret_access_key] = "..."

# Some defaults
knife[:region]                = "eu-west-1"
knife[:availability_zone]     = "eu-west-1a"
knife[:ssh_user]              = "ubuntu"
knife[:flavor]                = "m1.medium"
# Ubuntu 12.04 LTS 64bit:
knife[:image]                 = "ami-f2191786"
knife[:use_sudo]              = "true"

As I was trying to create an instance with this command: