The long way through Software Craftsmanship

Self-Study in November 2015

Nov 2, 2015 - 6 minute read - Comments - self-study-aggregationNovember2015read=====adrian-thurstonagileagile-methodologyanswerat-least-once-deliveryat-most-once-deliverybart-bakkerbbmbipolar-lisp-programmerblockblpbrillian-bipolar-mindbroken-windowccap-theoremcarlos-blecentralizationclojurecobolcode-generationcoman-hamiltoncomparisoncontextcounterexampledecentralizationdescribedifferencedistributed-systemdistributioneqequalessayfederationfinite-state-machinefortranfsmfunctional-programminghackinghaskellhindley-milnerhofideaintegrated-testintegration-testipfsj-rainsbergerjames-coglanjavajava-eejavier-garzasjbrainsjepsenjiri-knesljose-lopezjtbandeskanbanknossoskoankyle-drakekyle-kingsburylegacy-languagelessonlisplisp-programmerlispmlockmacromanagementmanagement-frameworkmark-tarvermethod-referencemutexnative-extensionno-free-lunchobsolescenceone-man-bandoraclepareto-principlepedagogypermanent-webplanned-obsolescenceprincipleprogrammerquestionquoterabbitmqragelreid-mckenzierelationshiprspecrubyrubymonkrudolf-winestockscalaschemescrumscrum-implementationslidestackoverflowstate-machinesymbolicstddteacherteachingteamtheorythreadtype-inferencetype-inference-algorithmvalueweb-archivewikipedia

Call me maybe: RabbitMQ

I’ve read this article by Kyle Kingsbury on using RabbitMQ as a lock service. It investigates and gives a counterexample of using it for this purpose.

Uses Knossos to do the testing and surfaces a problem with it. Explains specific problems on locking: at-most-once and at-least-once message delivery

Note: References Jepsen (I guess an inside joke to the song “Call me maybe” by Carly Rae Jepsen) for at-most-once and at-least-once message delivery.

Tags: rabbitmq, kyle-kingsbury, lock, cap-theorem, distributed-system, jepsen, knossos, at-most-once-delivery, at-least-once-delivery, counterexample, mutex

Everyone is potentially a teacher

I’ve read this article by Carlos Blé where he explains that everyone can have ideas worth spreading and that the knowledge not only comes from others but also from the relationships that tie you to other people.

Tags: carlos-ble, teaching, pedagogy, idea, teacher, relationship

Ragel State Machine Compiler

I’ve read this article explaining what the Ragel project is about: a code generator from regex to code in languages such as C#, Java, etc. It is limited to finite state machines (FSM), with determinism. It can also handle some indeterminism. Written by Adrian D. Thurston

Tags: adrian-thurston, fsm, state-machine, finite-state-machine, code-generation, ragel

HTTP is obsolete. It’s time for the distributed, permanent web

I’ve read this article by Kyle Drake explaining the need for a permanent, distributed web archive.

Using a distributed file system (IPFS) and software similar to Bitcoin, they can host parts of the web locally, making it immutable and distributed

Tags: kyle-drake, web-archive, centralization, decentralization, distribution, permanent-web, ipfs, federation,

Recovering From the Integrated Tests Scam

I’ve read this article from J. B. Rainsberger on the integrated test scam and how to solve it: refactoring.

Tags: jbrains, tdd, integrated-test, integration-test, j-rainsberger

Broken windows theory

I’ve read this wikipedia article that talks about the broken windows theory, that states that controlling and monitoring public spaces leads to lowering the serious crimes.

Cites three causes for this:

  • Social norms and conformity
  • Lack of routing monitoring
  • Social signaling and signal crime

Also discusses examples in the US and in the Netherlands, as well as criticisms.

I’ve read it to better understand how to apply this theory to software development, on a day-to-day basis.

Tags: wikipedia, theory, broken-window


I’ve read the wikipedia page for Scsh, the Scheme shell.

Why is Scala’s type inference not as powerful as Haskell’s?

I’ve read the reasoning why Haskell supports other type inferences that are not present in Scala, in this StackOverflow question

Tags: scala, haskell, type-inference, hindley-milner, type-inference-algorithm

The Future of the LispM

I’ve read this article explaining the past and current situation in the Lisp world: from Lisp, to LispM, to the MIT and Symbolics Inc., to Clojure and Scheme.

Also talks about integration with the operating system and its execution in the microprocessor. Written by Reid McKenzie

Tags: reid-mckenzie, lisp, lispm, clojure, scheme, symbolics

The Lisp Curse

I’ve read this essay by Rudolf Winestock, where he explains the low barrier (or low cost) for people in powerful languages (such as Lisp) to not accept the status quo in their project and fork / start their own.

It also compares languages and the people attracted to them. Cites Mark Tarver’s essays several times, including the Brilliant Bipolar Mind (BBM) in this other essay (from WebArchive). Compares the BBM and the normal worker in usefulness to companies.

Cites the Pareto principle (80-20 rule): a single hacker will port 80% the library from another language, leaving it buggy, undocumented and only understandable by the original author (assuming this is only 20% of the work). The rest (e.g., documentation, bugfixing, maintenance) are dropped and never taken care of.

Cites that this could be somewhat based on the facility of creating new features for the language. A small effort implies small implementation time, leaving no margin for thinking it through and seeing other corner cases. Also, a single person working on the project means no code review. The style might be coherent (always the same one), but might not be idiomatic, understandable by others, maintainable, etc.

Closes the essay with this quote:

The expressive power of Lisp has drawbacks. There is no such thing as a free lunch.

Tags: rudolf-winestock, essay, pareto-principle, hacking, one-man-band, lisp, no-free-lunch, quote

The Bipolar Lisp Programmer

I’ve read this essay by Mark Tarver on the Bipolar Lisp programmmer or the koan of Lisp.

It explains the history of the Brilliant Bipolar Mind (BBM) when they attend high school and college. The freedom they’re given, exactly the same as in Lisp, as you don’t need to mix and socialize with others to create a good-enough solution.

In this fashion, he says, most of the projects are 80% finished, not documented, not maintained. The same problems that worry enterprises.

Cites the article “Lisp: Good News, Bad News, How to Win Big”

Tags: essay, mark-tarver, bipolar-lisp-programmer, lisp-programmer, programmer, brillian-bipolar-mind, blp, bbm, koan

Note: this article was no longer present on its original site. Fetched it from the Web Archive (WayBack Machine).

Writing readable Clojure code

I’ve read these slides by Jiří Knesl, that explains how to write better clojure code:

  • Macros
  • HOFs
  • left-to-right vs right-to-left code

Tags: clojure, jiri-knesl, macro, hof, thread, slide

How can I get a reference to a method?

I’ve read this question, another question from StackOverflow

Tags: stackoverflow, question, ruby, functional-programming, method-reference

Implicit and Explicit Blocks

I’ve read this lesson from rubyMonk

Tags: rubymonk, lesson, block, ruby

What’s Point-free Programing?

I’ve read this article by Xah Lee explaining point-free programming, which requires a glance at function decomposition (currying)

[…] “point-free programing” is:

  • It is about a particular syntax for function definition.
  • When defining a function, no symbol is used for function parameter.

Oracle’s “planned obsolescence” for Java

I’ve read this article by Coman Hamilton on the possible Java’s planned obsolescence by Oracle.

Discusses features pushed to future releases, comparing it to other legacy languages.

Tags: obsolescence, legacy-language, planned-obsolescence, java, java-ee, oracle, fortran, cobol, coman-hamilton

Your first Ruby native extension: C

I’ve read this article about writing a native extension for ruby. Written by James Coglan

Tags: james-coglan, ruby, c, native-extension

What’s the difference between equal?, eql?, ===, and ==?

I’ve read this stackoverflow question regarding Ruby operators: equal?, eql?, ===, ==:

  • ==: generic equality
  • ===: case equality (for case - when)
  • eql?: hash equality
  • equal?: identity comparison (pointer comparison)

Tags: comparison, stackoverflow, ruby, equal, eq, ==, ===, question, answer, jtbandes


I’ve read the wikipedia page for Kanban (Spanish)

Tags: wikipedia, kanban, agile-methodology, management

Is your Scrum team Agile?

I’ve read this article by Bart Bakker where he discusses some common patterns in Agile implementations (in software companies)

Tags: scrum, team, agile, scrum-implementation, bart-bakker

Mejora tu trabajo en equipo con el método Kanban

I’ve read this article that explains then kanban management framework, with its principles and its values. Written by Jose López (in Spanish)

Tags: kanban, management, agile-methodology, management-framework, principle, value, jose-lopez

¿Qué es el método Kanban para la gestión de proyectos?

I’ve read this article (Spanish) written by Javier Garzás where it is explained the kanban methodology and three of its main rules:

  • visualize workflow
  • limit WIP
  • measure {lead, cycle} time

Tags: kanban, management, agile-methodology, management-framework, principle, value, javier-garzas

describe vs. context in rspec

I’ve read this article that explains the (lack of) functional difference between RSpec’s describe and context methods. The difference is contextual (i.e., the amount of information they convey). Written by LM

Tags: rspec, ruby, describe, context, difference