Page 2 of 2

Previous page

Notes for KWRuby February 2016: Technical Debt

Declan Whelan presented to KWRuby meeting on February 17. He spoke about how to deal with technical debt in agile software projects:


  • old code bases tend to have lots of debt which slows down development
  • Martin Fowler described the tech debt quadrants (i.e., deliberate vs inadvertent, reckless vs prudent)
  • the term was originally coined by Ward Cunningham when describing technical trade-offs to the financial people on a project
  • Declan's definition is: anything in the code that slows me down
  • code which does not map well to the problem domain
  • badly written code, however, should not be considered technical debt (e.g., not tests, not TDD, not SOLID
  • Simon pointed out that technical debt can slow down paying feature debt, and that it can change as features change over time
  • Domain Driven Design(DDD) can help my continuously driving the code back towards the problem domain


  • there are various software metrics which can be used measure/estimate technical debt (e.g., various kinds of static analysis, churn analysis)
  • the Agile Alliance working from is trying to develop tools for analyzing finance and risk related to technical debt in a project
  • Garter wrote a technical debt report in 2010
    • estimated the global cost of technical debt was $500 billion, and expected it to rise to $1 trillion by 2015
  • a more informally definition could include
    • how happy are you in the code
    • what % of time is wasted
    • what would it take to fix

Dealing with it

  • increasing tech debt will increase the desire for a re-write and it is well establish that a re-write can be VERY risky
    • this is something that Declan has seen in large companies
  • it is a deeper problem than "our developers write crappy code"
  • What are the underlying reasons?
  • over time is gets hard to do fundamental fixes
    • this gets worse unless there is specific push back on this
  • our cognitive bias of recency bias, leads us to short term/fast solutions
    • one strategy is to not offer short term/faster options to client, because they will always chooser faster
  • forward looking leaders are important to choosing slower but longer term solutions
  • legal liability may eventually apply some pressure
    • Uncle Bob had discussed this before
    • Declan did an interviewed with [Martin Fowler] and Uncle Bob at Remote Agile Conference
    • maybe some big catastrophic event will precipitate this
  • avoid short term project which build on underlying products
    • this encourages the short term choices
    • instead align team/projects to maintaining the products over the long term
  • Test Driven Developer(TDD) is a useful tool for guiding your code towards the better long term choices
  • [Scrum]( has been a problem because is frequently adopted as a management practise without also adopting a corresponding technical process (i.e., Agile engineering practices, XP) such as:

  • some suggestions from the audience for helping with technical debt

    • business agreement
    • static analysis
    • explicitly organized dealing with technical debt with epics, sprints, or chore stories
    • education

Notes for KWLUG January 2016: Mageia & Taxes

Marc Paré presented on the Mageia linux distribution and talk about doing Canadian taxes using Linux and Wine. These are some of my notes from the night:

Special mention: I was really impressed with Marc's organization. He started a Mageia install, then flipped to a finished install, then showed off some tax preparation, and finally returned to the first machine after the install had finished. Very smooth.


  • Mageia is a community distribution forked from Mandriva
    • seems to be a similar relationship as between RedHat and CentOS
  • mentioned Rosa, which is also derived from Mandriva
  • Mandriva had a difficult time when Ubuntu come out and never really recovered
  • Mandriva devs moved on to establish Mageia, as a community driven distribution
  • Marc participated in the founding help writing their mission statement, and continues to help out with QA
  • various architectures are supported
  • although, they will be scaling back this support a bit for the next release
  • Marc does tech support for about 40 people, who wanted to leave the Windows and he has successfully used Mageia for them
  • he uses separate root and home partitions
    • keeps the OS in one place
    • makes it easy to format and re-install root, without loosing home data
    • has found it easier to recovered the data in home this way
  • uses TeamViewer to remotely access his clients machines
  • installs the default KDE and LXDE as a fall back
  • version 6 of Mageia is supposed to be release in 2 months
  • MCC(Mageia Control Centre) has been very successful for Marc's clients
  • MCC makes it straight forward to add remote repositories after doing an install from CD
    • core and non-free are auto-selected
    • tainted repos are for packages that could have legal issues (mostly from a French point of view, as that is where the majority of Mageia's developers are located)
  • some of the package that Marc installs during an install
    • mplayer
    • wine
    • flash
    • faad
    • comes from the tainted repository
    • livdvdcss2
    • used to be installed by default but recently moved into tainted
  • Marc mentioned an issue about people accidentally moving or re-configuring this, which can cause confusion
    • I wonder if KDE can have its configuration locked down
  • Marc suggested leaving network update of packages until after the initial install is finished

Tax Filing on Linux

  • Marc is the UFile in Wine maintainer, and is currently working on some issues in the 2015 release
  • Ufile has been friendly to Marc's Wine related requests in the past, but have seemed less interested recently. Perhaps related to their push to the web, instead of the desktop client?
  • it has been necessary to install Microsoft fonts so that everything will be displayed correctly
  • CRA has a legal limit of 20 returns for a non-professional
  • apparently Canada has a 90% tax payment compliance rate, Australia in comparison has 60%
  • Wine packages are updated pretty quickly for various distributions, so fixes will show up pretty quickly

Some comments from the audience

  • StudioTax is a free tax package, mentioned from the audience
    • Marc mentioned that it is maintained by some ex-CRA employees located in Ottawa
    • also appears to be supported in Wine but does not seem to have a current maintainer
  • ProFile which is an example of software for Canadian tax professionals

Notes for KWLUG December 2015: GNUSocial

Bob Jonkman presented on GNUSocial at the KWLUG on December 7 2015 meeting. These are some of my notes from the night, mostly on topic:

  • during the intro Jeff mentioned that Let's Encrypt has gone into beta and he installed it on some of his own servers
  • GNUSocial is implementing various OStatus protocols
  • is there a GNUSocial docker image?
  • can WebFinger or OpenId be implemented on a static web site?
  • various options for publishing avatar images
  • Evan Podromo the creator of, which became StatusNet, which has now been folded into GNUSocial
    • he also started the service
    • what is he working on at the moment? is company E14N is still operating
  • Bob showed off the poll type post in GNUSocial, had anyone defined a poll microformat for IndieWeb?
  • Bob was asking about whether there was any interested in setting up a GnuSocial server for KWLUG
    • what would we do with it, and how many of use would participate?
    • would CCJClearLine be willing to host this, in addition to the regular website?
    • would one of the one-time cost CloudAtCost servers work for this?
  • there are other clients which can communicate with GNUSocial 2 were mentioned:

OPTIONS HTTP Method in Ruby on Rails

The HTTP protocol includes the OPTIONS method, which does not seem to be widely used, but along with the Access-Control-Allow-Methods can allow a HATEOS API to hint what capabilities are currently available. A client using this API can now choose what to present to the user based upon which HTTP methods which are available and building create or update forms based upon the templates.

Additionally, according to the HTTP spec the OPTIONS calls must not be cached. Hence the content of the API could be cacheable while still allowing access controls to be indicated in the uncacheable OPTIONS headers and documents.

OPTIONS is not a method that Ruby on Rails supports by default but it can be made to work with appropriate routes and appropriate Controller class.


Api::Application.routes.draw do
  resource :resources
  match '/resources'     => 'resource#collection_options', via: [:options]
  match '/resources/:id' => 'resource#options', via: [:options]


class ResourcesController
  # Collection endpoints #######################################################
  before_filter :only => [:index, :collection_options] do
    headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS'

  def index; end

  def collection_options
    render(json: {
      creation_field_with_options: [
        {val: 'value1', label: 'Value Number One'},
        {val: 'value2', label: 'Value Number Two'},

  # Resource endpoints #########################################################
  before_filter :except => [:index, :collection_options] do
    headers['Access-Control-Allow-Methods'] = 'GET, PUT, DELETE, OPTIONS'

  def show; end
  def delete; end
  def update; end

  def options
    render(json: {
      update_field_with_options: [
        {val: 'value1', label: 'Value Number One'},
        {val: 'value2', label: 'Value Number Two'},

You can check the output of your endpoints with the following commands:

curl -v --request OPTIONS http://localhost:3000/resources
curl -v --request OPTIONS http://localhost:3000/resources/1111

in which should should see the allowed method heads and the JSON documents describing the allowed field data.


Second Post

...and its still neglected.

But for now I have an update to my resume and made a small improvement in style. I have also added a wiki section, where I am hoping to start putting some of my notes and research that can be public. But we'll start with some recipes.

I still have not put in the time to get ikiwiki really doing what I want. Either I need to dig in to it, or seriously consider another website platform. Jekyll or Octopress might be interesting possibilities.

We'll leave that for another time.

First Post

Time to start my long neglected web presence.

My name is Andrew Sullivan Cant. I am a software developer living and working in Kitchener-Waterloo.

I am an avid user of free and open source software and involved with various Free/Open software groups in area. This website is going to be a place to tie together my various points of presence on the web, and to start publishing some of the things that I am experimenting with.

Experiment #1: I am publishing this homepage using the ikiwiki wiki compiler. From ikiwiki's website:

Ikiwiki is a wiki compiler. It converts wiki pages into HTML pages suitable for publishing on a website. Ikiwiki stores pages and history in a revision control system such as Subversion or Git. There are many other features, including support for blogging, as well as a large array of plugins.

I am still learning ikiwiki's features and how to arrange things to my liking. So expect changes for the moment.

Finally, the site also gives me a place to put my resume. If you are an employer in the KW area looking for a programmer who likes to solve problems by integrating and extending open source software please contact me at