The long way through Software Craftsmanship

Writing safe(r) bash scripts

Jul 13, 2018 - 13 minute read - Comments - bashshguidescriptone-offmaintenancesolidsingle-responsibility-principleperlrubymaketip

After writing more and more bash scripts for a client, I’ve decided to write down my thoughts about it. This assumes you have some knowledge about bash, as it is not intended as a beginner’s tutorial. Why bash scripts? Bash is present in almost every unix/linux-based stack, now some Windows as well. An exception is the ‘alpine’ docker images, which have a smaller, lighter shell (more on that later) Everything that you can automate, you can do from bash.

Questioning the existing choices

Jul 4, 2018 - 2 minute read - Comments - clientquestioningchoicepragmatismversioninggitsolutionif-it-aint-broke-dont-fix-it

Context For a client, we have worked on a service that works with files (containing sensitive data) that get corrupted very often. The use case is generally: Two/Three file opens per day One modification per 10 file opens One corruption per 100 file opens Initial solution The initial solution was just to copy the file (file.txt) before opening, after closing. This results in two files (YYY-MM-DDTHH-mm-ss_before_file.txt, YYY-MM-DDTHH-mm-ss_after_file.txt).

Self-Study in July 2018

Jul 1, 2018 - 3 minute read - Comments - self-study-aggregationjuly2018analogyawsbarbonilistaburn-outburnoutcareercareer-managementchesterton-fenceclientcloud-scalecollaboratorconsultingcontractordatabasedavid-bonilladeliverydependencydevelopmentdiscoverydummyexactly-once-deliveryfacebookfixgerard-meszarosgogolanggoosgrowing-object-oriented-softwarehacker-newshaskellhealthhistoryhypekafkakeith-leeksuidlearninglewis-menelawslisticlelucas-di-ciocciomanagementmessagemessage-deliverymockmonadnotificationoaooonboardingonce-and-only-oncepartpeoplepolicyprocessproductive-haskell-barproductivityproject-managementpsychologypyramidrelationshiprick-bransonrocksdbsabbaticalsegmentslack-timesteve-freemanstubtest-doubletime-managementtiptooltopicuuidvertical-slicexunitxunit-patternxunitpatterns

The Haskell Pyramid I’ve read this article on how the productivity for Haskell is achieved: not using the topics discussed on social networks (monads, functors, laws, lenses, etc) but using more basic tools Tags: haskell, productivity, lucas-di-cioccio, learning, development, tool, monad, hype, pyramid, productive-haskell-bar, bar Id: 454f53fc-7dd6-11e8-8208-0242ac110003 Read: Mon, 02 Jul 2018 08:59:47 +0000 El verde más verde I’ve read this article on how to structure creative projects (e.g., UX, programming) by professionals, as told by David Bonilla.

Books read in 2018Q2

Jun 30, 2018 - 11 minute read - Comments - bookreading2018Q2self-studycoduranceaprendicesreading-club

Read this quarter: Note: re+read means I’m re-reading this book. The (+) stands for one-or-more times, as in the regexes. Quien se ha llevado mi queso; Johnson; own-it, guillem One minute manager, the; Blanchard; own-it, non-technical, guillem En defensa de los ociosos; Stevenson; non-technical, own-it Ladybird Book of Mindfulness, the (Ladybirds for Grown-Ups); Hazeley, Morris; non-technical Art of the start, the; Kawasaki; own-it, non-technical, guillem Getting started with NoFap; non-technical Emotional intelligence; Goleman; non-technical Quien se ha llevado mi queso I’ve read this fable explaining the little story of two mice and two lilliputians that end up without any cheese.

Testing a component that includes randomness

Jun 15, 2018 - 6 minute read - Comments - testingrandomnesstddjavacodesnippet

Context We have been tasked with designing a component to generate secrets for two-factor authentication (2FA), to ensure that the you also own that other ‘channel’. It has to be secure enough to pass to verify a user, meaning no other user should be able to impersonating another one by guessing the secret. Solution A first solution that he have implemented is to provide a 6-digit pin code. The solution (in java) is straightforward: get a Random to generate ints for you.

Self-Study in June 2018

Jun 1, 2018 - 25 minute read - Comments - self-study-aggregationjune201810x20172faacceptance-testingaccesibilityactivityagileaiai-winteralfred-northalison-birraneallcountjsamazonandy-gavinanton-arhipovapiappappleapplicationaptitudearchiveartificial-intelligenceassemblerattackerattentionattention-heistattitudeattitude-vs-aptitudeattribute-based-cryptographyattribute-fingerprintingauthorautodidacticautodidactic-iterationawsbackupbehemothbelongingbertrand-russellbest-tool-for-the-jobbiasbillbirthdaybjorn-bensonblindnessbonilistabookbook-reviewborilloboringbraillebraille-readerbreathingbrett-mckaybrian-goetzbridget-kromhoutbrowserbugbug-bountyburner-phonebusinessbusiness-valuecabcalendarcanary-testcareercareer-managementcase-statementcertificate-pinningcfochaptercharity-majorschatbotchris-wellerchristian-birdchristian-charukiewiczchromeciocity-bikeclassificationclauseclean-codeclojurecodecode-fatiguecode-reviewcombinatorcomfort-zonecommand-query-responsibility-segregationcommentcommunicationcomparisoncompilercomplexitycomputabilityconcentrationcone-of-uncertaintyconfigurationconsumercore-businesscore-competencecostcountermeasurecoursecqrscrackercrash-bandicootcross-border-flightcrudcrypto-currencycryptographyctodan-luudan-mckinleydan-weinrebdatadata-analyticsdata-structuredata-visualizationdavid-bonilladavid-hilbertdavid-nolendavid-porterddddeep-learningdefectdefinitionderek-comartindesigndesign-staminadesktop-appdesktop-publishingdevelopmentdevicedevopsdigital-sabbathdisabilitydockerdomain-driven-designdonn-felkerdori-reuvenidrew-gallatindruckerdynamic-typingearl-barreconomyeditingelizabeth-saunderselmencryptionequalityeric-normanderic-raymondestimateethereumethiceulaevan-jonesexampleexecutionexerciseexperience-reportfake-datafatiguefearfeature-by-abstractionfeature-togglefebin-jamesfeedbackfeminismfinite-gamefiodar-sazanavetsfizzbuzzflightflowfocusforecastformattingfortranframeworkfree-resourcefree-tierfree-trialfrontendfulfillmentfull-disclosurefunction-compositionfunctionalfunctional-languagefunctional-programminggadgetgamegame-developmentganganngarbage-collectorgary-hamelgendergeneralgenerative-adversarial-neural-networkgitgit-lfsgithubgithub-lfsgogoalgolanggooglegoolgraphqlgrayson-kooncegreg-younggregor-trefsguardian-syndromeguessinghackerhackinghacking-backhappinessharvard-business-reviewhbrhelphigher-order-functionhmrchofhomehoney-pothoneypothonsshhousehtmlhtml5httphttpsibmicoideide-supportideaidentity-based-cryptographyimageimaginaryincompleteness-theoreminequalityinfinite-gameinfinite-listinformationintegrationintegration-testintellij-ideainternational-flightinternetinterviewinventioninvestoriterationjames-haguejanitorjason-brownleejavajava-9java-eejavascriptjdkjdk-9jeronimo-palaciosjetbrainsjim-birdjobjohn-belljohn-henryjohn-ivejohn-mccarthyjohn-zadajoshua-fairfieldjrejustine-arrechejvmkaren-mcgranekatakate-mckaykent-beckkevin-bourrillionkeybasekiller-appknowledgekodakkotlinkurt-godelkurt-goedellabellambda-calculuslanguagelaptoplaunchlawlawrence-paulsonlazy-listleanleanpublegalitylexnetlfslibrarylicenselifelisplisp-dialectlisp-machinelist-processinglmilong-articlelow-techlynne-tyem-expressionmachinemachine-learningman-in-the-middlemanagementmapmarc-chernoffmaria-scrivenermark-reinholdmartin-fowlermathematicsmathias-verraesmatthew-greenmattias-geniarmcaleermeanmediameditationmediummentormercermeta-researchmfamicroservicemike-hearnmike-kruzeniskimindmlmmapmonetizationmoneymoney-managementmonolithmonte-carlomonte-carlo-tree-searchmoocmoses-sohnathan-epsteinnative-appneil-irwinnet-neutralitynetflixneural-networknew-yorknew-york-citynick-leenick-rosenernnno-estimatesnpmnpm-moduleobject-orientationoleg-shelajevom-nexton-demandoodopen-apiopen-sourceopenbsdoperationsoptimizationoracleorganizationpairingpasswordpattern-matchingpaul-grahampauseperformancepet-projectphilosophyphonepillarplain-textpodcastpositionpotter-stewartprahaladprincipia-mathematicaprivacyprivate-keyproductproduct-managementproduction-readyproductivityprogrammerprogrammingprojectproject-managementpropertyprovenproxypsychologypublic-keypublishingpull-requestpull-request-fatiguepurposeqsmqualityquantitative-software-managementquincy-larsonquoterrafe-colburnrantreadingrebecca-holmanrebel-labsrecovering-programmerred-bookrediscoveryreflectionreframereleaserelease-managementrelease-trainremoteremote-toolremote-workreportreportingresearchresourceresponsible-disclosurerestrewardricardo-borillorichard-stallmanright-to-repairriskrisk-identificationrmsrobert-puttrolersarubikrubik-cuberyan-dahls-expressionsabbathsaint-syndromesalarysamer-bunasandi-metzscalascandalscreen-readerscrumsecuritysecurity-alertself-helpself-publishingself-studysequenceserverservicesexismshamirside-projectsimplicitysimulationskillsmart-contractsmartphonesocial-mediasoftwaresoftware-engineering-dailysoftware-qualityspainspanishspringstacked-pull-requeststarbucksstarter-kitstartupstatic-typingsteve-mcconnellstoragestorytellingstreamsunsurprisingsven-johannsymbolicstaxitddteamteam-managementteammatetechnical-debttechnical-valuetechniquetechnologytelegramtendigitesttest-datatest-driven-developmenttestcontainerstestingtheoremtim-wutimetime-managementtips-and-trickstodd-schneidertodo-listtooltoolchaintrainingtranscendencetrisha-geetrustlesstuukka-ojalatype-systemtypescriptuberto-barbiniudi-dahanukunknownunknown-unknownususer-centricuxvaluevavrvenkatesh-raovisionwalled-gardenwatchwebweb-appweb-serverwomenwomen-in-techworkwork-husbandwork-spousework-wifewysiwygx0rzyash-ranadivezemnmezzero-turnaroundzheng-gao

[Don’t look, don’t tell]() I’ve read this bonilista by David Bonilla on what strategies companies use to deal with security and defects. Explains full disclosure, responsible disclosure and bug bounties. Tags: david-bonilla, bonilista, security, full-disclosure, responsible-disclosure, bug-bounty, reporting, hacker, cracker Id: a1a6925a-7958-11e8-a87f-0242ac110002 Read: Tue, 26 Jun 2018 15:50:21 +0000 [La vida de las ideas]() I’ve read this bonilista by David Bonilla about the value of the ideas and what differentiates a good idea from a good execution from a good outcome