This is my August update, and by the far the coolest thing in it is Debconf.
I don’t get tired of saying it is the best conference I ever attended. First it’s a mix of meeting both new people and old friends, having the chance to chat with people whose work you admire but never had a chance to meet before. Second, it’s always quality time: an informal environment, interesting and constructive presentations and discussions.
This year the venue was again very nice. Another thing that was very nice was having so many kids and families. This was no coincidence, since this was the first DebConf in which there was organized childcare. As the community gets older, this a very good way of keeping those who start having kids from being alienated from the community. Of course, not being a parent yet I have no idea how actually hard is to bring small kids to a conference like DebConf. ;-)
I presented two talks:
- Tutorial: Functional Testing of Debian packages, where I introduced the basic concepts of DEP-8/autopkgtest, and went over several examples from my packages giving tips and tricks on how to write functional tests for Debian packages.
- Packaging the Free Software Web for the end user, where I presented the motivation for, and the current state of shak, a project I am working on to make it trivial for end users to install server side applications in Debian. I spent quite some hacking time during DebConf finishing a prototype of the shak web interface, which was demonstrated live in the talk (of course, as usual with live demos, not everything worked :-)).
There was also the now traditional Ruby BoF, where discussed the state and future of the Ruby ecosystem in Debian; and an in promptu Ruby packaging workshop where we introduced the basics of packaging in general, and Ruby packaging specifically.
Besides shak, I was able to hack on a few cool things during DebConf:
- debci has been updated with a first version of the code to produce britney hints files that block packages that fail their tests from migrating to testing. There are some issues to be sorted out together with the release team to make sure we don’t block packages unecessarily, e.g. we don’t want to block packages that never passed their test suite — most the test suite, and not the package, is broken.
- while hacking I ended up updating jquery to the newest version in the 1.x series, and in fact adopting it I guess. This allowed emeto drop the embedded jquery copy I used to have in the shak repository, and since then I was able to improve the build to produce an output that is identical, except for a build timestamp inside a comment and a few empty lines, to the one produced by upstream, without using grunt (.
- Rails 4.2 in unstable: in order to support Diaspora (currently in experimental), and an upcoming Gitlab package (WIP). This requires quite some updates, NEW packages, and also making sure that Redmine is updated to a new upstream version. I did a few updates as part of this effort:
- rails 2:4.2.3-3
- ruby-arel 6.0.3-1
- ruby-coffee-script 2.4.1-1
- ruby-coffee-script-source 220.127.116.11-1
- ruby-commander 4.3.5-1
- ruby-execjs 2.4.0-1
- ruby-globalid 0.3.6-1
- ruby-jbuilder 2.3.1-1
- ruby-jquery-rails 4.0.4-2
- ruby-minitest 5.8.0-1
- ruby-multi-json 1.11.2-1
- ruby-rack-test 0.6.3-1
- ruby-sass-rails 5.0.3-1
- ruby-spring 1.3.6-1
- ruby-sprockets 3.3.0-1~exp2
- ruby-sprockets-rails 2.3.2-1~exp1
- ruby-sqlite3 1.3.10-1
- ruby-turbolinks 2.5.3-1
- rerun (NEW), a tool to launch commands and restart them on filesystem change. Very useful when writing sinatra/rack applications.
- vagrant: new upstream relaese, supporting VirtualBox 5.0
- pinpoint: new upstream release, ported to clutter-gst-3.0
- chake: new upstream release
- gem2deb: new release with several improvements, and a bug fix followup
- chef: fix installation of initscripts
- pry: fixed imcompatibility with new ruby-slop (RC bug)
- foodcritic: fixed test suite run during build (RC bug)
- library updates:
- ruby-hashie (2 RC bugs)
- ruby-listen: new upstream release, fixed test suite (RC bug)
- ruby-rspec-retry: new upstrean release, fixed test suite (RC bug)
- ruby-dbf: new upstream release (sponsored, work by Christopher Baines)
- ruby-bootstrap-sass: new upstream release + fixed to work on non-Rails apps
- ruby-rails-dom-testing (NEW, dependency for rails 4.2)
- ruby-rails-deprecated-sanitizer (NEW, dependency for rails 4.2)
- ruby-rmagick new upstream release
- ruby-uglifier new upstream release
- ruby-cri (RC bug)
In June I started keeping track of my Debian activities, and this is my July update.
Elixir in Debian
Elixir is a functional language built on top of the Erlang virtual machine. If features imutable data structures, interesting concurrency primitives, and everything else that Erlang does, but with a syntax inspired by Ruby what makes it much more aproachable in my opinion.
Those interested in Elixir for Debian are encouraged to hang around in #debian-elixir on the OFTC IRC servers. There are still a lot of things to figure out, for example how packaging Elixir libraries and applications is going to work.
MiniDebconf at FISL, and beyond
I helped organize a MiniDebconf at this year’s FISL, in Porto Alegre on the 10th of July. The whole program was targetted at getting more people to participate in Debian, so there were talks about translation, packaging, and a few other more specific topics.
I myself gave two talks: one about Debian basics, “What is Debian, and how it works”, and second one on “packaging the free software web”, which I will also give at Debconf15 later this month.
The recordings are available (all talks in Portuguese) at the Debian video archive thanks to Holger Levsen.
We are in the middle of a transition to switch to Ruby 2.2 as default in Debian unstable, and we are almost there. The Ruby transition is now on hold while GCC 5 one is going on, but will be picked up as soon as were are done with GCC 5.
ruby-defaults has been uploaded to experimental for those that want to try having Ruby 2.2 as default before that change hits unstable. I myself have been using Ruby 2.2 as default for several weeks without any problem so far, including using vagrant on a daily basis and doing all my development on sid with it.
I started taking notes about Ruby interpreter transitions work to make sure that knowledge is registered.
I have updated a few packages:
Debian Continuous Integration
This month I have made good progress with the changes needed to make debci work as a distributed system with one master/scheduler node and as many worker nodes (running tests) as possible.
I have sponsored a few packages:
- ruby-rack-mount, ruby-grape-entity, and ruby-grape for Hleb Valoshka.
- redir and tmate twice for Lucas Kanashiro.
- lxc to wheezy-backports for Christian Seiler.
Last month I started to track all the small Debian-related things that I do. My initial motivation was to be concious about how often I spend short periods of time working on Debian. Sometimes it’s during lunch breaks, weekends, first thing in the morning before regular work, after I am done for the day with regular work, or even during regular work, since I do have the chance of doing Debian work as part of my regular work occasionally.
Now that I have this information, I need to do something with it. So this is probably the first of monthly updates I will post about my Debian work. Hopefully it won’t be the last.
Upgrades to Jessie
I (finally) upgraded my two servers to Jessie. The first one, my home server, is a Utilite which is a quite nice ARM box. It is silent and consumes very little power. The only problem I had with it is that the vendor-provided kernel is too old, so I couldn’t upgrade udev, and therefore couldn’t switch to systemd. I had to force systemv for now, until I can manage to upgrade the kernel and configure uboot to properly boot the official Debian kernel.
On my VPS things are way better. I was able to upgrade nicely, and it is now running a stock Jessie system.
fixed https on ci.debian.net
pabs had let me know on IRC of an issue with the TLS certificate for ci.debian.net, which took me a few iterations to get right. It was missing the intermediate certificates, and is now fixed. You can now enjoy Debian CI under https .
Ruby 2.2 transition
I was able to start the Ruby 2.2 transition, which has the goal of switch to Ruby 2.2 on unstable. The first step was updating ruby-defaults adding support to build Ruby packgaes for both Ruby 2.1 and Ruby 2.2. This was followed by updates to gem2deb (0.18, 0.18.1, 0.18.2, and 0.18.3) and rubygems-integration . At this point, after a few rebuild requests only 50 out of 137 packages need to be looked at; some of them just use the default Ruby, so a rebuild once we switch the default will be enough to make it use Ruby 2.2, while others, specially Ruby libraries, will still need porting work or other fixes.
Updated the Chef stack
Bringing chef to the very latest upstream release into unstable was quite some work.
I had to update:
- ruby-columnize (0.9.0-1)
- ruby-mime-types (2.6.1-1)
- ruby-mixlib-log 1.6.0-1
- ruby-mixlib-shellout (2.1.0-1)
- ruby-mixlib-cli (1.5.0-1)
- ruby-mixlib-config (2.2.1-1)
- ruby-mixlib-authentication (1.3.0-2)
- ohai (8.4.0-1)
- chef-zero (4.2.2-1)
- ruby-specinfra (2.35.1-1)
- ruby-serverspec (2.18.0-1)
- chef (12.3.0-1)
- ruby-highline (1.7.2-1)
- ruby-safe-yaml (1.0.4-1)
In the middle I also had to package a new dependency, ruby-ffi-yajl, which was very quickly ACCEPTED thanks to the awesome work of the ftp-master team.
- Sponsored a upload of redir by Lucas Kanashiro
- chake, a tool that I wrote for managing servers with chef but without a central chef server, got ACCEPTED into the official Debian archive.
- vagrant-lxc , a vagrant plugin for using lxc as backend and lxc containters as development environments, was also ACCEPTED into unstable.
- I got the deprecated ruby-rack1.4 package removed from Debian
A Computação Brasil é revista publicada pela Sociedade Brasileira de Computação (SBC), e publica edições temáticas cobrindo assuntos importantes na Computação. A ultima edição, de número 27, é dedicada ao Software Livre.
Citando o editorial, escrito pelo professor Paulo Roberto Freire Cunha, presidente da SBC:
Software Livre é hoje um assunto importantíssimo para toda a sociedade, ultrapassando a questão ideológica e tornando-se um ecossistema complexo e de interesse global, que inclui pesquisa científica, educação, tecnologia, segurança, licença de uso e políticas públicas.
Um ponto fundamental é o impacto que ele gera no mercado, atuando hoje como um facilitador para milhares de startups em todo o mundo. Por isso, tem um papel essencial num país como o Brasil, onde o sucesso do empreendedorismo e da inovação tecnológica está diretamente ligado à redução de custos, à criatividade e à flexibilidade.
Para destacar o assunto, a revista traz diversos especialistas que mostrarão as mais recentes análises e pesquisas sobre Software Livre, com o propósito de estimular o leitor a fazer uma reflexão sobre o futuro do desenvolvimento de plataformas com código aberto e suas aplicações em diferentes frentes.
Eu e o Paulo escrevemos juntos 2 textos para esta edição. O primeiro, com co-autoria da professora Christina Chavez, que foi minha orientadora de doutorado, é sobre Controle de Qualidade em projetos de software livre. O segundo, em autoria com o Rodrigo Maia, é sobre a reformulação do Software Público Brasileiro, projeto no qual trabalhamos juntos desde a metade e 2014.
Yesterday I was hacking on some Ruby code and getting a weird error which I thought was caused by mutually recursive require statements (i.e. A requires B, and B requires A). Later I realized that this is not an issue in Ruby, since the intepreter keeps track of what has already been required and will not enter a loop. But during the investigation I came up with something that turned out to be useful.
rrg will read the source code of a Ruby project and generate a graph based on the require statements in the code; nodes represent the source files and an arrow from A to B means that A contains a `require ‘B’` statement.
rrgat the root of your project.
rrgwill parse the code inside
lib/, and generate a graph description in the Graphviz format. You can pipe the output to Graphviz directly, or store it in a file and process it to generate an image.
If you call
rrgvinstead, it will automatically process the graph with Graphviz, generate a PNG image, and open it.
Let’s see some examples. First the classical “analysing itself” example, the require graph for
Not very interesting, since all of the logic is currently in the main binary and not on library code. But 1) when I do the refactorings I want to, there will be more library code and 2) while writing this I implemented also parsing scripts in
Now chake which is a slightly larger project:
An even larger (but still not that big) project, gem2deb:
Note that these visualizations may not be accurate representations of the actual source code. In Ruby, nothing stops one from implementing class
lib/x/y.rb, but most reasonable code will make sure that filenames and the classes namespaces actually match.
If you are working on a sane codebase, though, visualizing graphs like this helps understand the general structure of the code and perceive possible improvements. The
gem2deb graph gave me some ideas already and I didn’t even paid much attention to it yet.