The long way through Software Craftsmanship

Tip: automate the blog publishing

Dec 2, 2015 - 1 minute read - Comments - metaautomationblogtraviscioctopress

I’ve automated the generation of the blog using Travis CI. Using this new way, each commit generates a new version of the pages. These resources have been very useful: Prose.io + Octopress + Travis-CI + GitHub Pages = ♥. First post (in this set) that explains how this automation is possible Auto-deploying to My Octopress Blog With Travis-CI. Explains how to generate your key, encript it with travis Octopress + GitHub Pages + Travis: The most useful page, explains step by step what to do for mac and linux.

Self-Study in December 2015

Dec 2, 2015 - 17 minute read - Comments - self-study-aggregationDecember2015read10x-engineer2015abstract-syntax-treeacceptance-testactive-passiveactor-modeladviceaestheticsagilealain-helailialan-skorkinallison-kapturanalogyanarchyandrew-burgessangularanswerantipatternapplication-gatewayarchetypeastbankbarcelona-software-craftsmanshipbddbenchmarkbenjamin-hoffmanbidibinary-searchbonilistabookbook-reviewbozhidar-batsovbranch-mispredictionbruceSchneierbus-factorbusiness-metricbusiness-ruleccareercareer-changecareer-managementcarol-dweckchallengechangechaptercheatingcheatingsoftwarechris-fordclangclean-codeclear-codeclever-codeclientclojurecodecode-analysiscode-smellcode=datacodelycodely-tvcommentcomparisoncompilercompojurecomputer-sciencecrankshaftcredentialcristobal-garciacryptogramctocursivedaniel-higginbothamdata=codedatabasedavid-bonilladavid-farrelldefinitiondenotationdesign-patterndevoxxdomain-specific-languagedottydownsidedsldynamicedneffectivenessefficiencyelixiremacsequalityeric-evanseric-normanderlangessayevaluationevaluatoreventexampleexperience-reportfailoverfeaturefirebasefixed-deadlinefixed-mindsetfolkloreformingfred-georgefunction-inlinefunctional-compilerfunctional-programmingfunctional-testfunctorgiftgilles-harogithubglenn-smithgood-programmergppgreg-hurrellgrowth-mindsetguidehabithadi-haririhigh-availabilityhomoiconicityhow-tohttp-kitidealistaimportant-vs-urgentimpostor-syndromeinlineintellij-ideainvestmentiotisra-alcazarisrael-alcazarjaime-pererajames-reevesjason-gormanjavajavier-ferrerjavier-garzasjobjon-pitherjulien-crouzetjunior-developerjunitjuozas-kaziukenaskaran-goelkeela-robisonkellan-elliott-mccreakevin-dishmankhelllanguage-syntaxlatencylateral-thinkinglawleaklearninglearning-strategylevel-7-firewallliberationlistlone-wolfmacromanagementmanagement-stylemartin-fowlermartin-jeemartin-oderskymass-adoptionmathias-verraesmetaprogrammingmethodologymichael-loppmicrosecondmike-sherovmindsetmistakemodern-perlmoneymulti-linestringmvpneil-sloanenitor-creationsnodejsnormingo3objectoeisold-stuffopen-sourceoptimizationoptimizeroracleorganizationoversightpatternpechakuchaperformingperlpetri-kainulainenpieter-hintjenspluginpost-mortemposter-and-keypreventionprioritizationprofessional-careerprofileprogrammerprogrammer-analogyprogrammer-anarchyprojectproject-managementproject-thinkingpull-requestqualityquotingreaderreadingrecruitmentrecurse-centerreductionreeditionrefactorrefactoringreferencereflectionremoteremote-firstresearchreviewringroger-hughesroopesh-shenoyroy-osheroverspecrubyrulerule-enginerunnerryan-haaseryan-tomaykoscalacscbcnscbcn15screencastscrumscrum30sebastian-radicssenior-developersilver-bulletsimplicityslidesloanesoftware-creationsoftware-engineeringspecification-patternsplicingstack-overflowstartupsteve-cohenstmstormingstringstyle-guidesuccess-storysupportsymbolsyntaxtalktddteamteam-managementteam-thinkingtechniquetechnologytelescoping-constructortesttest-pyramidthomas-neumanntim-potetime-managementtiptitletooltransparencytuckmantutorialtypeunit-testunquotingvaluevideoville-tormalavolkswagenwolfworkxavi-gost

Ruby Equality And Object Comparison I’ve read this article, written by Alan Skorkin, that explains equality comparisons in ruby: equal? is reference equality == is value equality eql? is value and type equality Tags: ruby, comparison, equality, object, reference, alan-skorkin Software Folklore I’ve watched this PechaKucha by Chris Ford on what are laws and how they relate to creating software. Also talks on what could be an analogy to software creation (says not science, not engineering)

Functional Implementation Patterns

Nov 2, 2015 - 3 minute read - Comments -

Collection of HOFs Select Attribute class Array def select_attribute attr self.map { |unit| unit[attr] } end end usage: [71] pry(main)> [ {:element => 1, :even? => false}, {:element => 2, :even? => true}, {:element => 3, :even? => false}] .select_attribute :even? => [false, true, false] Collection of patterns Decorating a collection Introduction You want to materialize properties from a collection Alternative names Intermediary Functional decorator Collection Annotation (from Wallingford’s Roundabout, especially Interface procedure) Example [62] pry(main)> [1,2,3] .

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.

Tip: calling all methods in an Object in Ruby

Oct 12, 2015 - 1 minute read - Comments - rubymetaprogrammingobjectmethod

In Ruby, you can query the methods an object accepts: pry(main)> 1.methods => [:to_s, :-@, :+, :-, :*, :/, :div, :%, :modulo, :divmod, :fdiv, ... In case you want to call all methods, this can be useful (plus its tests): def call_all_methods(object, *args) # remove methods that modify the PRY environment or are too verbose success = {} error = {} exclusions = [:pry, :methods, :private_methods, :public_methods, :gem].map { |x| x.

Tool: Building a local pipeline

Oct 10, 2015 - 3 minute read - Comments - polish-your-tooltoolbuilding-pipelinepipelineautomationworking-directorytrapgitgit-hookpipes-and-filtersrepositorysignal-trappingtriggergrowlnotification

Motivation At a client, one of the projects has a long building process and the tests are mostly slow, so I use a local building pipeline, an example of the Pipes and Filters pattern. This allows for executing manually only the fast unit tests, then automatically (no user intervention, no time spent) executing the rest of them before pushing. In case the latter fails, it is possible to do git push -f to the pipeline without corrupting the central repository (origin) history, possibly disturbing others.