Week 2018-W50 in reading

2018-12-16 23:55:00 +0100

This week’s list is rather short as I’m still ill.

  • Some materials about Information Mapping(R):
  • Elliptic Curve Cryptography:
    • A brief introduction by Nick Sullivan. It helped me grasp the key concepts and while I’m far from ready to start implementing anything based on that limited knowledge, I have at least got an idea how it works.
    • Another article on math behind ECC is still on my list. It contains some more math so maybe I’ll get to understand it a bit better? Let’s see.
    • It all started when I’ve read about Ed25519, which I would like to implement one day in Scheme. I’ve already started porting DJB’s python version to Racket a few days ago but decided I first need to understand it better because just rewriting it in another language won’t be useful even a bit.
  • Christopher Lemmer Webber on MediaGoblin and ActivityPub, a not so short interview with a very interesting person who took part in standardizing the protocol that the Fediverse uses.
  • I’ve been reading The Racket Guide, which is very nice and whenever it’s not enough, one has the option of reading the full docs (e.g. Byte Strings).

Whenever I had some spare time, I’ve been reading Christopher Lemmer Webber’s blog.

In the paper books department, I’ve picked a book I’ve suspended a while ago: “How Not to Be Wrong. The Power of Mathematical Thinking” by Jordan Ellenberg.

Week 2018-W48 in reading

2018-12-02 20:00:00 +0100

Although I have’t read it, I’ve started this week with the first episode of Libre Lounge, a podcast by Christopher Lemmer Webber and Serge Wroclawski. I liked it very much and got inspired to refresh my GNU Emacs setup to adjust it to use features I wasn’t aware Org-Mode had. That led me to Org-Mode’s manual’s section on clock table. Then, I’ve read GNU Emacs manual section about text display as I’ve been interested in making octal sequences (used to denote non-alpha-numeric characters) more standing out / highlighted. (Hint: adjusting escape-glyph face did the trick.)

I’ve also read vermaden’s The Power to Serve - FreeBSD Power Management. Vermaden’s texts are always very informative and good to read.

This week I’ve started using FunkWhale instance open.audio and learned about Luka Prinčič. It turned out he’s also available on fediverse as @luka@mastodon.art.

Now back to strictly reading items: I’ve read Design Patterns for Micro-Service Architecture but haven’t found it particularly well-written. I’ve also finished reading AOSA chapter about Bash. It’s interesting how GNU Readline design (also covered in this chapter) is similar to how Emacs does some of the stuff internally (esp. keymaps and the philosophy of redisplay).

From time to time I read stuff about monads and this week it’s been about the Reader Monad.

And the creative part of me, finding a link to Lisp generative art I have saved a long time ago, started wondering if I could play around with extempore, but I had no time to make it compile on FreeBSD (which it doesn’t out of the box), so I’ve given up for now. Unfortunately SuperCollider doesn’t support FreeBSD either and don’t know any other such software so… I’ll have to get back to it later.

Information mapping and structured writing, a topic I’ve found out about when learning about knowledge sharing and representation, got me very interested but I’m still reading a summary of its methods. So far I’ve decided I’d like to write a simple Clojure PDF genenrator to format text according to structured writing guidelines. I’ve already done some first experiments and they look nice, but I’ll need to read more before I continue.

And finally there’ve been two texts about philosophy: Emptying Your Boat, which gives a hint how we can improve our lives by caring less about the self and focusing more on living our lives (at least that’s how I’ve interpreted it); and an excerpt from Enchiridion of Epictetus which opens with a very nice idea:

Of things some are in our power, and others are not. In our power are opinion, movement toward a thing, desire, aversion (turning from a thing); and in a word, whatever are our own acts: not in our power are the body, property, reputation, offices (magisterial power), and in a word, whatever are not our own acts.

This is an incredibly important thing to keep in mind when we are angry because anger usually means we don’t accept something. Thinking about what we can and cannot do about our situation might turn liberating – I’ve tried it myself and it worked like a charm!

Week 2018-W47 in reading

2018-11-24 22:55:00 +0100

I’ve been quite busy this week, so the list is very short. I’ve been mostly reading Dave Snowden’s Christmas blogs (from 2017) about anthro-complexity, as he named the inherent complexity of human populations. Although it doesn’t relate to what I do at work, I find his writing thought-provoking.

A side-note: you might have heard of Dave Snowden as the creator of the Cynefin framework.

For the past few days I’ve been reading bits of “The Architecture of Open-Source Applications” chapter about Bash, but now on my company’s ebook reader as I’ve asked them to order that book. The license is very nice: not only is this book available under CC-BY 3.0 (Unported) – they also donate all royalties to Amnesty International!

Zostań swoim własnym zewnętrznym konsultantem

2018-11-21 07:00:00 +0100

Poniższy wpis został również opublikowany na blogu analizait.pl.


We wszystkich profesjach spotykamy się na co dzień z różnymi problemami, a żeby rozwiązywać te problemy skutecznie, musimy umiejętnie korzystać z najpotężniejszego narzędzia, w jakie każdy z nas jest wyposażony: umysłu. Jedną ze szczególnie przydatnych umiejętności jest tzw. myślenie lateralne, tłumaczone czasem na język polski jako “myślenie w bok”, czyli takie podejście do znajdowania rozwiązań problemów, w którym pomija się najbardziej oczywiste rozwiązanie i za cel stawia się znalezienie nowego, bardziej odpowiedniego.

Podczas analizy i modelowania systemów, myślenie lateralne sprawdzi się szczególnie dobrze wówczas, gdy znamy już potrzeby klienta i trzeba przekuć je na wymagania. Jeśli potraktujemy oczekiwania klienta względem systemu wprost jako wymagania, które system musi spełnić, możemy zamknąć sobie drogę do opracowania systemu lepiej wspierającego klienta w jego działalności, na który nasz klient z powodu mocnego ukorzenienia w swojej branży mógł nie wpaść.

Termin myślenie lateralne ukuł w swojej pracy “The Use of Lateral Thinking” Edward de Bono, włoski lekarz i psycholog (znany również jako autor “Sześciu myślowych kapeluszy”). Określenie “lateralne” ma w tym kontekście odróżniać sposób rozumowania od myślenia wertykalnego, czyli przemieszczającego nas w głąb, coraz bliżej ku zrozumieniu problemu i jego rozwiązaniu. Nie bez znaczenia jest kierunkowość tego określenia, ponieważ jest ona również charakterystyczną cechą myślenia wertykalnego, w którym niejako zmierzamy do wyznaczonego celu. Celem myślenia lateralnego jest natomiast znalezienie nowego pomysłu a - jak stwierdził sam Edward de Bono - nie da się wykopać nowej dziury drążąc coraz głębiej tę, w której już jesteśmy.

Według de Bono reguły, którymi rządzi się myślenie lateralne, można zebrać w kilku grupach, których sens sprowadza się do:

  1. zidentyfikowania dominującego pomysłu;
  2. poszukiwania alternatywnych perspektyw;
  3. rozluźnienia surowej kontroli naturalnego dla nas myślenia wertykalnego;
  4. aktywne wykorzystanie przypadku.

Dzięki dobremu zrozumieniu mechanizmów działania ludzkiego umysłu, de Bono daje kilka bardzo wartościowych wskazówek. Przykładowo: ludzie mają skłonność do podążania ścieżką największego prawdopodobieństwa. Innymi słowy łatwo fiksujemy się na pewnych konkretnych pomysłach i od tego momentu trudno nam wyjść poza ich ramy. (Stąd powszechne przekonanie, że warto skonsultować problem z dwoma lekarzami - ponieważ ten, który problem poznał jako pierwszy, może przez swoje pierwsze skojarzenie nie dostrzec dowodów na to, że nie było ono trafne.)

Dlatego spory nacisk kładzie de Bono na ten problem: rozpoznanie dominującej idei a następnie oddalenie się od niej. W końcu w myśleniu lateralnym nie ma jednego właściwego kierunku, więc warto zostawić ów dominujący pomysł choć na chwilę aby poznać inne możliwości. Między innymi proponuje kilka technik, które mogą w tym pomóc:

  • Rozłożenie problemu na czynniki pierwsze a następnie połączenie składowych w inny sposób.
  • Odnalezienie analogicznego problemu w innej dziedzinie a następnie przeniesienie pomysłów do dziedziny naszego problemu.
  • Unikanie nazywania rzeczy, gdyż nazwy nadają pojęciom sztywne ramy, podczas gdy w znalezieniu nowego pomysłu potrzebne jest otwarcie się na nowe możliwości.

Wszystko to może brzmieć bardzo abstrakcyjnie, więc warto zastanowić się nad praktycznymi korzyściami poszukiwania alternatywnych perspektyw.

Przede wszystkim, najkrótsza lub najbardziej oczywista droga do celu nie zawsze jest najbardziej odpowiednia w danym momencie. Kiedy nie możemy sobie pozwolić na porażkę ale dopuszczamy spędzenie dodatkowego czasu na poszukiwanie alternatyw, myślenie lateralne pomoże nam znaleźć warianty, z których następnie wybierzemy ten najbardziej odpowiedni w danej sytuacji. Przystępując do realizacji naszego pierwszego pomysłu nie mielibyśmy szansy na porównanie go a zatem na dobrą ocenę jego przydatności.

Jeśli pracujemy nad jakimś zagadnieniem dostatecznie długo, dominujący pomysł zaczyna się wydawać jedynym możliwym. W takich sytuacjach czasem zatrudnia się zewnętrznego konsultanta, żeby ten ze swoim “świeżym spojrzeniem” pomógł dostrzec to, czego nasz zespół dostrzec nie może. Zastosowanie technik proponowanych przez de Bono może zastąpić wsparcie konsultanta przynajmniej w niektórych przypadkach.

Przykładem z mojej własnej pracy może być problem, z którym zetknąłem się niedawno: zgłoszono potrzebę zmiany pewnej aplikacji, o której cały zespół programistów wie, że jest bardzo skomplikowana i przydałby się solidny refaktoring. Zacząłem więc przyglądać się specyfikacji i implementacji, dochodząc w końcu do wniosku że obie są skomplikowane, jednak przystają do siebie. Dlatego zaproponowałem zaniechanie refaktoringu, zamiast którego zasugerowałem:

  1. lepszą dokumentację kodu źródłowego;
  2. poprawienie nazewnictwa w implementacji aby lepiej odzwierciedlało realizowaną logikę biznesową;
  3. minimalny refaktoring polegający na redukcji zbędnych bytów.

Książka de Bono zawiera liczne przykłady owocnego zastosowania myślenia lateralnego a przy tym jest na tyle zwięzła, że pozwolę sobie nie przytaczać ich tutaj, zachęcając zamiast tego do lektury.

Na zakończenie chciałbym zaznaczyć, że myślenie lateralne nie jest kamieniem filozoficznym. Czasem potrzebna jest po prostu ciężka praca o jasno określonym kierunku i poszukiwanie alternatyw mogłoby w najlepszym przypadku oznaczać stratę czasu a w najgorszym porażkę. Warto jednak włączyć je do swoich narzędzi, ponieważ zwiększa nasze szanse na sukces w podejmowanych przedsięwzięciach.

Week 2018-W46 in reading

2018-11-17 21:05:00 +0100

This week’s list is rather short as I’ve been mostly skimming through short answers to simple questions about Clojure or Scala which I’m re-learning at the moment.

  • An article about Growing a DSL with Clojure.
  • Documentation of the clj-pdf package. I’ve already used it to generate wedding schedules when I was getting married but I needed to refresh it since I’m working on a concept of a Clojure-generated document at the moment.
  • I’ve also come across the Logic-Starter project which is a simple introduction to logic programming with core.logic Clojure package. Its wiki contains some interesting example applications. core.logic itself seems to be very interesting.

I’m collecting links to articles explaining how Google and other huge companies make privacy harder. Google and Amazon disabled domain-fronting some time ago. There’s also a good wrap-up of the large players’ practices: The price of free.

I’m also interested in ethics, so this title caught my attention: Is curing patients a sustainable business model?.

I also enjoyed re-reading existentialism at the beach.