<?xml version="1.0" encoding="utf-8"?>
    <feed xmlns="http://www.w3.org/2005/Atom">
      <title>Mauro Bieg&#39;s blog</title>
      
      <link rel="self" href="https://mb21.github.io/blog/feed.xml" />
      <link rel="alternate" href="https://mb21.github.io/blog/" />
      <updated>2008-07-26T12:00:00.000Z</updated>
      
      <id>https://mb21.github.io/blog/</id>
      
      
      
    <entry>
      <id>https://mb21.github.io/blog/2008/07/26/err-right-my-blog</id>
      <title>err… right, my blog…</title>
      <updated>2008-07-26T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2008/07/26/err-right-my-blog" />
      
      <content type="html">&lt;p&gt;Generally, I’m a very technology-friendly person. But strangely enough I’m sometimes quite slow in adopting new technologies when it isn’t immediately obvious to me at first sight in what way they might benefit me personally. Mobile phone? No, I have one at home. Tabbed browsing? No, I have Exposé on Mac OS X. RSS-feed reader? No, I have bookmarks in my browser. Now I use all those mentioned. But I still refuse to use some stuff like multiple Desktops (aka Spaces) or digital television (I watch video mostly on my computer anyway) for example.&lt;/p&gt;
&lt;p&gt;Now, look at this. I have a blog! I’m still not quite sure what I’m gonna use it for, but it stroke me that I might as well put some of my notes and thoughts on the Internet instead of my local harddisk. As they accumulate over the years, maybe somebody will find at least one of them interesting… ;-)&lt;/p&gt;
&lt;p&gt;Another thing that held me back is that I’m cautious about letting too much information about my personal life slip loose on the internet. Call me paranoid if you feel better then, but the &lt;a href=&quot;http://en.wikipedia.org/wiki/Semantic_Web&quot;&gt;semantic web&lt;/a&gt; is coming (sooner or later and in one form or another). And when it’s fully arrived I’m not sure whether I’d appreciate that people might be able to find out just about everything about me by typing my name into semantic Google. So that’s why I don’t write my full name here.&lt;/p&gt;
&lt;p&gt;Yet another thing: I don’t like having my data hosted by a company that doesn’t allow me (or others for that matter) to re-download it again (like it’s the case on YouTube). Neither do I like having my data stored in some kind of proprietary file format that I might not be able to read in ten years because I won’t have the software (or the computer to run the old software on). That’s why I’m very glad that WordPress is open source software and that wordpress.com allows my posts to be exported as XML-files.&lt;/p&gt;
&lt;p&gt;So, I might just getting starting now… ;-)&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2008/07/30/hi-tech-and-low-power</id>
      <title>hi tech and low power</title>
      <updated>2008-07-30T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2008/07/30/hi-tech-and-low-power" />
      
      <content type="html">&lt;blockquote&gt;
&lt;p&gt;I believe that this nation should commit itself to achieving the goal, before this decade is out, of landing a man on the Moon and returning him back safely to the earth.&lt;/p&gt;
&lt;p&gt;— John F. Kennedy, 1961&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Our nation must commit to producing 100 percent of our electricity from renewable energy and other clean sources within 10 years.&lt;/p&gt;
&lt;p&gt;— &lt;a href=&quot;http://www.wecansolveit.org/&quot;&gt;Al Gore&lt;/a&gt;, 2008&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well, I feel like all humanity (not only the US) has to solve this problem (and most other problems, too) together. But besides that, I think he’s right. we need to make the problem of climate change a positive challenge.&lt;/p&gt;
&lt;p&gt;I wanna make a sci-fi story/film/whatever that shows people having succeeded in this challenge. I wanna show a world that is both &lt;em&gt;hi tech&lt;/em&gt; and &lt;em&gt;low power/energy&lt;/em&gt;. In opposition to Wikipedia’s description of Cyberpunk as &lt;em&gt;hi tech, low living&lt;/em&gt;, I wanna show a society that maintains a high living standard with the help of hi tech and avoids messing up the whole planet, because this hi tech is so smart and efficient that it can do without much energy (or is able to recycle it to a large extent). The little energy that is indeed needed should be renewable and is gained decentralized.&lt;/p&gt;
&lt;p&gt;I hope I get around to doing that story one day…&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2008/08/09/Happiness</id>
      <title>Happiness</title>
      <updated>2008-08-09T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2008/08/09/Happiness" />
      
      <content type="html">&lt;p&gt;I watched &lt;a href=&quot;http://blog.ted.com/2008/07/why_is_psycholo.php&quot;&gt;this video of a talk by Martin Seligman&lt;/a&gt; on TED.com (there are really tons of videos of great talks from TED conferences there). He is a psychologist and when he talks about &lt;em&gt;happiness&lt;/em&gt; in his framework of &lt;em&gt;positive psychology&lt;/em&gt;, he seperates happiness into three different kind of things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pleasure&lt;/strong&gt; – this form of happiness is about senses, emotions, makes you laugh spontaneously or giggling and is quite short-lived, heritable and not that much modifiable by yourself.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Engagement&lt;/strong&gt; – this form is about being &lt;em&gt;in the zone&lt;/em&gt;, you are just so occupied, concentrated and engaged in a fulfilling task (be it social activity, work or a hobby). Time passes on the fly, you never feel bored.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Meaning in Live&lt;/strong&gt; – Do you feel your personal live has a purpose or meaning? Do you already know it or are in search for it? Are you content in looking for it, for all your live, or does it make you restless not knowing what your place in the universe is? This is a lot about religion and your personal life-philosophy.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can fill out different forms at &lt;a href=&quot;http://www.authentichappiness.org&quot;&gt;that website of his&lt;/a&gt; and see how happy you are… quite funny actually. And they are quite transparent, if you know the theory behind it, you see the questions were crafted scientifically.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2008/08/24/linear-vs-cyclic</id>
      <title>linear vs. cyclic</title>
      <updated>2008-08-24T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2008/08/24/linear-vs-cyclic" />
      
      <content type="html">&lt;p&gt;&lt;img src=&quot;%7B%7Bsite.url%7D%7D/assets/2008-08-24-linear-vs-cyclic/linear-vs-cyclic.png&quot; alt=&quot;linear-vs-cyclic&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I guess, one way to look at things is that there are two fundamental concepts at how to look at things. Either you think of things as &lt;em&gt;linear&lt;/em&gt; or &lt;em&gt;cyclic&lt;/em&gt;: Life, the universe and everything. What about life? Does it have a beginning and an end, are we born out of nothing and fade into nothingness again? Or is it rather a cycle of life and death, spring and autumn; are we reborn in one way or another? Same with the universe: was the Big Bang really &lt;strong&gt;the&lt;/strong&gt; beginning? Or does the whole universe fold out only to collapse again, and to fold out again? And yes, ultimately it’s the same with everything: do we think of them as linear or as cyclic?&lt;/p&gt;
&lt;p&gt;The weird thing is that within the framework of logic, you can’t explain something coming into existence out of nothing. It’s not possible as logic is the study of deriving a conclusion based solely on what is known before. It’s a strictly linear process. Something before the beginning simply doesn’t exist. In this framework of thinking, the pursuit of progress is one of the highest goals, because you need to make use of the limited time before the end.&lt;/p&gt;
&lt;p&gt;Thinking of life and everything as of cyclic processes is extremely relaxing and liberating. You are under virtually no pressure to achieve any set goal or make any progress in a certain time period because you have infinite time. If not in this life, then in the next. Eternity is then a reality.&lt;/p&gt;
&lt;p&gt;Both ways of living can be extremely rewarding. The pleasure of having achieved something, of having made progress, as well as the pure pleasure of experienced stimuli. I guess that’s where my previous post about happiness fits into the picture. My conclusion for now is the same as with many things: the key is to find the right balance between the two.&lt;/p&gt;
&lt;p&gt;I feel like related concepts that go with the cyclist vs. linear concept are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cyclist vs. linear&lt;/li&gt;
&lt;li&gt;static vs. progressive&lt;/li&gt;
&lt;li&gt;save vs. dangerous&lt;/li&gt;
&lt;li&gt;holistic, communitarian vs. individualistic, liberal&lt;/li&gt;
&lt;li&gt;man is part of the environment vs. man controls his environment&lt;/li&gt;
&lt;li&gt;‘eastern’ vs. ‘western’ philosophy&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2009/02/21/When-morality-gets-in-the-way-of-justice</id>
      <title>When morality gets in the way of justice</title>
      <updated>2009-02-21T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2009/02/21/When-morality-gets-in-the-way-of-justice" />
      
      <content type="html">&lt;p&gt;This &lt;a href=&quot;http://www.ted.com/talks/jonathan_haidt_on_the_moral_mind.html&quot;&gt;TED Talk&lt;/a&gt; tries to explain the different views that political conservatives and liberals have on issues of justice and morality. Jonathan Haidt thinks that humans have five innate psychological systems that are the foundations of their moral views.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Harm/care&lt;/li&gt;
&lt;li&gt;Fairness/reciprocity&lt;/li&gt;
&lt;li&gt;Ingroup/loyalty&lt;/li&gt;
&lt;li&gt;Authority/respect&lt;/li&gt;
&lt;li&gt;Purity/sanctity&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Liberals have moral intuitions primarily based upon the ﬁrst two foundations, and therefore misunderstand the moral motivations of conservatives, who generally rely upon all ﬁve foundations.&lt;/p&gt;
&lt;p&gt;This explains why conservatives emphasize &lt;em&gt;stability&lt;/em&gt; and &lt;em&gt;order&lt;/em&gt; (and thus promote &lt;em&gt;tradition&lt;/em&gt; and institutions like the &lt;em&gt;state, family&lt;/em&gt;, and&lt;em&gt;church&lt;/em&gt;) while liberals are usually more &lt;em&gt;progressive&lt;/em&gt; and promote &lt;em&gt;individual freedom&lt;/em&gt; even if this means radical change and may threaten society as we know it.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2009/05/27/The-European-Union-sucks-without-its-people</id>
      <title>The European Union sucks without its people</title>
      <updated>2009-05-27T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2009/05/27/The-European-Union-sucks-without-its-people" />
      
      <content type="html">&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/b/b7/Flag_of_Europe.svg&quot; alt=&quot;&quot; title=&quot;Flag of Europe&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Yes, the current EU sucks. But it still is the best platform we have to tackle problems that concern the whole of Europe and which no country can solve alone (like global warming) as well as to facilitate collaboration (like the free movement of goods and people and the Euro).&lt;/p&gt;
&lt;p&gt;The EU has become so undemocratic because right after the two world wars, the politicians didn’t trust the people to do the right thing, to start building a new Europe based on mutual interests instead of confrontation. And probably they were right, the people wouldn’t have dared to trust their former enemies. But now this time is long over and the political elite has to learn to let go and give more power over Europe back to its people.&lt;/p&gt;
&lt;p&gt;But this can only happen if the people start acting like European citizens, not nay-sayers. For this, the first step is to vote in the election of the European parliament. We have to show the politicians that we are ready to take on us more responsibility, to think not only as national citizens but also as European citizens. Yes, there are lots of things that each nation state has to solve on its own, but there are an equal number of things that need to be solved on a European level, in cooperation and coordination with each other.&lt;/p&gt;
&lt;p&gt;After having proved we care about our European parliament by participating in the elections of our representatives, we should also demand to have pan-European votes on proposals by the European council and parliament (referendum) as well as to have the ability to make such proposal ourselves (initiatives that simply need enough collected signatures). Only when we can have a direct impact on European politics most people will start to care about them. But for this to happen, we need to demand the right to do so first.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2009/06/07/Beauty-as-the-balance-between-simplicity-and-complexity</id>
      <title>Beauty as the balance between simplicity and complexity</title>
      <updated>2009-06-07T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2009/06/07/Beauty-as-the-balance-between-simplicity-and-complexity" />
      
      <content type="html">&lt;p&gt;All beauty lies in the tension between order and chaos, simplicity and complexity, pattern and randomness.&lt;/p&gt;
&lt;p&gt;If we humans see or hear something that is too simple, too obvious to us we find it boring and blunt – an insult to our intellect and not worth thinking about, because we always crave for new experiences, to explore and discover. But if we experience something way too complex to comprehend and it is beyond our ability to recognize a pattern or a logic in it, we get frustrated and frame it with the simple concept of randomness to hide its inner complexity from our interest in order to not waste more of our energy on it. So either way, if something is too simple or too complex we turn our back on it and move on.&lt;/p&gt;
&lt;p&gt;But what really interest us are those things that seem new, exciting and strange but that at the same time we feel have an intrinsic logic, patter or familiarity – something to hang on and work with, to study the phenomenon and bring meaning and understanding to it. And the utter reward is when we succeed in comprehending it. Then we feel gratitude, contempt and happiness. Not long after that, we might feel bored by the same phenomenon, because now it seems trivial and too simple for us.&lt;/p&gt;
&lt;p&gt;But there are things in nature and elsewhere that we clearly can see a pattern in, but at the same time we cannot fully comprehend or understand it. The most beautiful works of art are often those that take something well-known, like the shape of a human body or face, or geometrical shapes, and take it one step further, transform it somehow to imply some additional meaning and thus slightly elevate its level of complexity. Or we see beauty in nature, because it is clearly organized; every organism strives purposefully to grow and reproduce, everything strictly bound by the laws of physics and biology, yet the resulting complexity in colors, shapes and movements is just overwhelming and astonishing. Just look at the clouds, reflections on the water or the movement of shadows on different surfaces, leaves dancing in the wind.&lt;/p&gt;
&lt;p&gt;But the example that got me thinking today (thx Annina!) (and made me remember this &lt;a href=&quot;http://www.ted.com/talks/john_maeda_on_the_simple_life.html&quot;&gt;TED talk&lt;/a&gt;) was actually music: when you recognize a song as good, but still don’t like it. My theory now is that you realize that there is an interesting, well crafted and well executed pattern to the sound or the lyrics, but you just can’t get the hang on it, cannot decipher it, so you get kind of frustrated and start disliking the song. Maybe, when you hear it again and again, or somewhen later in life, you’ll understand it better and feel differently about it, but now it just doesn’t feel right. On the other hand, we get bored by songs that we find just too simplistic or have heard too many times, over and over again.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2009/09/29/Marglins-The-Dismal-Science-How-Thinking-Like-an-Economist-Undermines-Community</id>
      <title>Marglin’s “The Dismal Science: How Thinking Like an Economist Undermines Community”</title>
      <updated>2009-09-29T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2009/09/29/Marglins-The-Dismal-Science-How-Thinking-Like-an-Economist-Undermines-Community" />
      
      <content type="html">&lt;p&gt;I just read Stephen A. Marglin’s &lt;a href=&quot;http://www.hup.harvard.edu/catalog/MARDIS.html&quot;&gt;The Dismal Science: How Thinking Like an Economist Undermines Community&lt;/a&gt;. He questions some fundamental assumptions of mainstream economic theory and makes the case for a more humane understanding of society. I found a great part of the book really interesting but I’m missing a conclusive ending. Anyway, here’s my personal summary in keywords which neither claims to be comprehensive nor one hundred per cent accurate.&lt;/p&gt;
&lt;h3&gt;1.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;individual vs. community -&amp;gt; tension: good, healthy, creative&lt;/li&gt;
&lt;li&gt;community is important to a good and meaningful life&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;community (as opposed to ‘just’ association): asks for loyalty, commitment, identity:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;not easy to opt out. leaving the community must come at a cost, otherwise it is vulnerable to centrifugal forces that often are irresistible.&lt;/li&gt;
&lt;li&gt;diametrically opposed to the idea of market agents with set preferences that are free to choose&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;communities of necessity (the poor have to band together) are endangered by prosperity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;communities of affinity (family, religious communities)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;examples of community:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Amish barn raising. insurances undermines mutual dependence of the villagers and thus community&lt;/li&gt;
&lt;li&gt;care for the elderly and sick. now nurses/professional health care&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;markets undermine community&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;markets push for expansion/competition/rivalry -&amp;gt; efficiency is the only measurement&lt;/li&gt;
&lt;li&gt;impersonal market relations replace personal ties, undermine reciprocity, altruism, mutual obligations&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ideology of modernity:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;four assumptions in economic theory:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;individuals: have given/fixed/unchanging preferences, are rational, calculating, self-interested&lt;/li&gt;
&lt;li&gt;privileging algorithmic over experimental knowledge&lt;/li&gt;
&lt;li&gt;nation-state: only legitimate social grouping.&lt;/li&gt;
&lt;li&gt;unlimited wants&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Marglin challenges those ‘myths’: foundational critique&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;individualism in economics is a very different kind of individualism than in other fields:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;given preferences: individual doesn’t get influenced by its environment. idea is also opposed to self-realization&lt;/li&gt;
&lt;li&gt;universal agency: act without coercion&lt;/li&gt;
&lt;li&gt;radical subjectivism: there is no judge beyond the individual of his preferences&lt;/li&gt;
&lt;li&gt;self-interest: it is a circular argument that everything an individual does is by self-interest, otherwise it wouldn’t do it. so it makes sense to define ‘self-interest’ in narrow terms (non-altruistic etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;holism as a different way to look at the world&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5.&lt;/h3&gt;
&lt;p&gt;what gave rise to modernity?&lt;/p&gt;
&lt;p&gt;loss of community is an unavoidable byproduct of a growing economy/increasing standard of living, or isn’t it? or is it about distribution (landlords pushing enclosure to save their fading power)&lt;/p&gt;
&lt;h3&gt;6.&lt;/h3&gt;
&lt;p&gt;the rise of the idea that if all individuals act in their self-interest, this is best for society as a whole&lt;/p&gt;
&lt;h3&gt;7. / 8.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;algorithmic knowledge: can be written down, logically calculated&lt;/li&gt;
&lt;li&gt;experimental knowledge: rooted in one’s own experience as well as trust in the accounts of others (parents-child, master-apprentice), therefore rooted in community&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;(bosses get their share of the pie only for knowing how to assemble all the parts and keeping this knowledge to themselves)&lt;/li&gt;
&lt;li&gt;economic theory doesn’t take experimental knowledge seriously: cannot model real people&lt;/li&gt;
&lt;li&gt;economics as a mathematical science (algorithmic knowledge) heaves it above politics and withdraws it from political debate/democracy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;10.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;economists are responsible for growing the pie (whatever the cost), politicians for (re-)distributing it.&lt;/li&gt;
&lt;li&gt;nation-state legitimizes this&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;11.&lt;/h3&gt;
&lt;p&gt;modernity:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;possibility of abundance as close as never before because of increased efficiency/productivity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;impossibility of abundance because of unlimited wants&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;relative wants:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;economic rivalry (having more stuff than the Joneses). wealth is now the dominating factor in defining people&lt;/li&gt;
&lt;li&gt;believe in infinite growth as a non-zero-sum game (everybody wins as the pie keeps growing) makes it a common goal&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;absolute needs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;in an individualistic world-view new goods and stuff substitute for personal relations&lt;/li&gt;
&lt;li&gt;as long as good health is a commodity, and med-tech keeps improving, it will remain scarce&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;we cannot rethink society when we have reached ‘enough’. rather, we shall have enough when we rethink society.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;12.&lt;/h3&gt;
&lt;p&gt;fair trade as an imagined community between producers and consumers&lt;/p&gt;
&lt;h3&gt;13.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;dominant views:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;culture doesn’t exist, everybody thinks like a homo economics (a ‘modern’ individual)&lt;/li&gt;
&lt;li&gt;western culture is superior, ‘developing countries’ need to catch up and become ‘modern’&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;but people can keep (and further develop) their cultures while modern technology is being introduced&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;individualism vs. holism: rights of individuals (liberty, autonomous and algorithmic decision-making) vs. rights of communities (experimental knowledge: tradition, spirituality)&lt;/li&gt;
&lt;li&gt;nation vs. other communities&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2009/11/16/Mind-and-Body-as-only-two-out-of-many-conceptual-levels</id>
      <title>Mind and Body as only two out of many conceptual levels</title>
      <updated>2009-11-16T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2009/11/16/Mind-and-Body-as-only-two-out-of-many-conceptual-levels" />
      
      <content type="html">&lt;p&gt;I just watched &lt;a href=&quot;http://en.wikipedia.org/wiki/Ghost_in_the_Shell_%28film%29&quot;&gt;Ghost in the Shell&lt;/a&gt; once again. Love it. Got into a discussion about &lt;em&gt;Mind/Body&lt;/em&gt; or &lt;em&gt;Mind/Matter dualism&lt;/em&gt; after that – is a person’s mind in some way something non-physical or not? A lot of the talk surrounding this question seems kind of weird to me. Because the way I have come to understand or imagine the world, is that words/concepts like &lt;em&gt;mind, consciousness, thoughts&lt;/em&gt; and even &lt;em&gt;emotions&lt;/em&gt; are just a handy vocabulary to talk about certain properties of a physical object (like the brain).&lt;/p&gt;
&lt;p&gt;This is very similar to the software and hardware of a computer. You can explain 100% of what is on your screen and what calculations are done when you click a button by looking at the hardware and what state it is in what moment of time. But it’s just way more convenient to talk about &lt;em&gt;files&lt;/em&gt; and &lt;em&gt;windows&lt;/em&gt; instead of a bunch of zeros or ones in a particular order. Analogous, I believe, it would be theoretically possible to explain any &lt;em&gt;state of mind&lt;/em&gt; or &lt;em&gt;thought&lt;/em&gt; by looking at the state of the brain and maybe some additional physical properties of the world around. But it’s totally not convenient to think about our minds in such terms. Thus, it is a question of at which level you look. The &lt;em&gt;body&lt;/em&gt; (including brain) is a &lt;strong&gt;conceptual level&lt;/strong&gt; below the mind and provides a kind of &lt;em&gt;shell&lt;/em&gt; for the &lt;em&gt;ghost.&lt;/em&gt; Like software couldn’t exist without a physical CD or harddisk to hold it (but it can be moved, and so might also a soul or mind – maybe). So the world is made of only one substance or physicality, but you can talk about it and study it on different conceptual levels.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;%7B%7Bsite.url%7D%7D/assets/2009-11-16-Mind-and-Body/layers-of-reality-tree.jpg&quot; alt=&quot;partial tree of one possible reality&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You can extend this rationale by thinking of the film &lt;em&gt;The Matrix&lt;/em&gt;. If it is indeed the case that we all live in some kind of matrix or virtual reality, then this matrix is clearly a level below what we have been calling &lt;em&gt;physical&lt;/em&gt; before. So now we have three levels: 1) the computers/machines running the matrix, 2) all the objects and bodies in the matrix, and on top of the bodies 3) the minds of the people. Or also hardware like your cellphone in the matrix (on level 2) that are running software (level 3). So because there are lots of people carrying lots of mind and lots of computers running lots of software, the structure kind of unfolds into a tree structure which you can expand arbitrarily on either side. Either on the root: you can imagine that the &lt;em&gt;real&lt;/em&gt; world of the machines running the matrix might not be that &lt;em&gt;real&lt;/em&gt; at all, but rather is some sort of simulation on its own. Or in the other direction, at the leaves: you can for example run an application (like Firefox) on top of an Operating System (like Windows), or you can even run a whole Operating System like Windows on top of another Operating System like Mac OS X through making it think it actually runs directly on a physical PC (this technique is called &lt;a href=&quot;http://en.wikipedia.org/wiki/Virtual_machine&quot;&gt;Virtualization&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;So we have an ever-expanding tree structure with a host of different ways to create sub-layers. Some examples include a brain providing for a mind, a computer running software or an author writing a book in which there live characters in a world of their own. Obviously, all these worlds on several layers have radically different properties and laws, but it seems possible to order them all in this tree.&lt;/p&gt;
&lt;p&gt;The ultimate question is of course: “Does the tree have a root?” i.e. “Is there a lowest layer, under which there is no further layer?”. In many religions, this lowest layer would sort of correspond to a god or a similar being. I might also add, that now you can choose from two different definitions of &lt;em&gt;physical&lt;/em&gt;: 1) &lt;em&gt;absolutely physical&lt;/em&gt;: in which physical is only that which is on this lowest layer of all, or 2) &lt;em&gt;relatively physical&lt;/em&gt;: where &lt;em&gt;physical&lt;/em&gt; is simply that which is one layer below another layer (which you might call &lt;em&gt;virtual&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Anyway. I have no idea whether there is indeed one lowest layer, and if so, whether there is a way to prove of a layer that it is actually the lowest. It seems rather difficult indeed. Nonetheless I think it is in human nature to always look for deeper meaning and lower layers. But as the journey is the reward, I guess this is not so grave after all.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2010/01/11/Margrit-Kennedys-Interest-and-Inflation-Free-Money</id>
      <title>Margrit Kennedy’s Interest and Inflation Free Money</title>
      <updated>2010-01-11T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2010/01/11/Margrit-Kennedys-Interest-and-Inflation-Free-Money" />
      
      <content type="html">&lt;p&gt;So here comes another personal summary of a book I read. And again, it neither claims to be comprehensive nor one hundred per cent accurate. The book is Margrit Kennedy’s &lt;a href=&quot;http://www.margritkennedy.de/index.php?id=96&amp;amp;ord=55&quot;&gt;Interest &amp;amp; Inflation Free Money&lt;/a&gt;. I read the newest revision in German from 2006 which I think hasn’t been translated to English yet. The text is available online in several editions though.&lt;/p&gt;
&lt;h3&gt;1. Five Basic Misconceptions About Money&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;%7B%7Bsite.url%7D%7D/assets/2010-01-11-kennedy/growth_patterns.jpg&quot; alt=&quot;&quot; title=&quot;growth patterns&quot; /&gt;&lt;/p&gt;
&lt;p&gt;and the truth:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Three kinds of growth: A: natural (logarithmic, flattening out), B: linear and C: exponential. Our current economy grows exponentially, that is the GDP and on pair the money supply increase exponentially. Because of interest, and more importantly interest on interest, a loan of 10’000$ at an interest rate of 6% increases within 50 years exponentially to 184’000$. If the money supply wouldn’t keep growing, not all the loans plus interest could be payed back, the extra money needs to come from somewhere. So indeed, our current economy must grow exponentially to sustain itself.&lt;/li&gt;
&lt;li&gt;We don’t only pay interest when we take up a loan. Because in every product we buy, 30-50% of the price goes actually into paying back the loans the producer took up for production. If he didn’t have to take out a loan, his products would be that much cheaper.&lt;/li&gt;
&lt;li&gt;Through the system of loans and debt, quite obviously there is a reallocation of money happening. The rich lending out money get even richer as the poor repay their dept plus interest.&lt;/li&gt;
&lt;li&gt;Inflation, the fact that our money is loosing value all the time, doesn’t need to be taken for granted. If there were no need to keep the money supply growing, there would be no risk of overgrowing it and thus no inflation.&lt;/li&gt;
&lt;li&gt;The current monetary system is prone to volatilities and repeating crisis, fixed towards growth no matter what, in favour of the already rich and because every sustainable long-term investment needs to measure itself against short-term gainings and interest favours short-term thinking.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Creating Interest and Inflation Free Money&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;%7B%7Bsite.url%7D%7D/assets/2010-01-11-kennedy/circulation-guarantee.jpg&quot; alt=&quot;When interest is replaced by a parking fee for money.&quot; title=&quot;circulation guarantee&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Already towards the end of the 19. century the German/Argentinian economist &lt;a href=&quot;http://en.wikipedia.org/wiki/Silvio_Gesell&quot;&gt;Silvio Gesell&lt;/a&gt; observed economic cycles, fluctuations in prices although there were no fluctuations in actual demand. One explanation is that when interest rates are low, people with money withhold it (no incentive to lend) and thus less will be bought (because people cannot take up loans) and therefore less produced, leading the economy into a down turn. Because money becomes scarce then, interest rates go up again, the people with money are more willing to lend it, spending goes up and everything goes smooth again, until there is too much money (little demand for more) and interest rates start dropping again.&lt;/p&gt;
&lt;p&gt;Gesell realized that money, as opposed to all other goods, can be withheld at no cost (no storage costs) and proposed to fight these economic cycles by introducing such an inventory cost. Instead of giving a reward to those lending money (through interest), those hoarding it should be punished by a small fee (one to five percent) on money. With this parking or holding fee (also called &lt;a href=&quot;http://en.wikipedia.org/wiki/Demurrage_%28currency%29&quot;&gt;Demurrage&lt;/a&gt;) people are encouraged to spend their cash quickly or invest it in long-term deposits where the fee would be lower or zero. Instead of demanding interest they would be glad to invest it. Demurrage makes sure that the money remains in circulation and that its core function as a medium of exchange is conserved.&lt;/p&gt;
&lt;p&gt;In 1932, during the Great Depression, the Austrian town of &lt;a href=&quot;http://en.wikipedia.org/wiki/W%C3%B6rgl#The_W.C3.B6rgl_Experiment&quot;&gt;Wörgl&lt;/a&gt; gave this &lt;em&gt;neutral money&lt;/em&gt; (or &lt;em&gt;Freigeld&lt;/em&gt;) a try. For banknotes to remain valid, people had to pay to get a stamp applied to the money at the end of each month (this could obviously be done electronically today). Therefore everybody spent their money as quickly as possible, unemployment dropped by 25% within a year, and with the fee that the town government collected more projects were financed. Although a full success, the experiment was terminated only one year later by the Austrian National Bank because it saw its monopoly on printing money in danger. Similar experiments in other countries were (and often still are) prohibited on the same grounds.&lt;/p&gt;
&lt;p&gt;The less money can be made from lending money the more attractive it obviously becomes to buy land and lend that. Thus the price of land increases. Therefore we do not only need a money reform but also a land reform. All land is seen to belong to everybody, the community then grants usage rights to those who are willing to pay most and this money is then distributed equally to every member of the community/citizen. This way, if somebody uses just as much land as the average, he doesn’t have to pay anything because what he pays for usage rights is equal to what he gets back from the community. If someone needs more land, he simply needs to pay more. But land wouldn’t be hoarded as property and couldn’t be used for speculation any more.&lt;/p&gt;
&lt;p&gt;Furthermore, a tax reform could help save the environment: Stop taxes on income and put taxes only on products, based on how much harm they do to the environment (in production and usage). This way, human labour gets cheaper while new production of goods gets more expensive. It suddenly pays off to repair products instead of buying new ones, fewer employees get replaced by machines, illegal unreported employment disappears because nobody has to pay income tax anyway.&lt;/p&gt;
&lt;h3&gt;3. Who Would Profit from a New Monetary System?&lt;/h3&gt;
&lt;p&gt;Such a monetary reform would abolish inflation and the flow of money as interest from the poor to the rich, reduce unemployment, lower prices, get rid of the &lt;em&gt;infinite growth imperative&lt;/em&gt; and boost long-term investments.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Politicians and Banks: are struggling to keep the current system running, infinite growth cannot be sustained forever. National debt has been rising for several years, a lot in industrialized but even more in developing nations.&lt;/li&gt;
&lt;li&gt;The Rich: would be able to keep their current savings and have already enough, so most would choose a stable system over the current one.&lt;/li&gt;
&lt;li&gt;The Poor: In 2001, half of the German population owned only 5% of all monetary assets, the other half 95%. While the already poor pay interest to the rich (people in a country as well as from developing to industrialized countries), the welfare state and development aid try to get some of that money back to the poor in a very inefficient way.&lt;/li&gt;
&lt;li&gt;Churches and Spiritual Groups: Moses, Aristoteles, Jesus, Mohammed, Luther, Zwingli and Gandhi all condemned the payment of interest. Communities must have instinctively known some of the problems interest would introduce (like social inequality).&lt;/li&gt;
&lt;li&gt;Trade and Industry: The free market economy would continue to run as now, simply without the distortion of interest. Small and medium enterprises wouldn’t have to pay more interest than global giants.&lt;/li&gt;
&lt;li&gt;Agriculture: more sustainable and ecological farming&lt;/li&gt;
&lt;li&gt;Artists: works of art would be a save storage of value (as opposed to money with a holding fee), so the demand for art would rise.&lt;/li&gt;
&lt;li&gt;Women and children: equal chances.&lt;/li&gt;
&lt;li&gt;The Ecology of Our Planet: When the economy isn’t growing, the discrepancies between poor and rich, loaning and lending, become even more apparent. But through the infinite growth imperative, we are depleting our natural ressources. And as long as every financial investment has to measure up against the profit from interest, many long-term ecological investments won’t cut a deal. If you had 10’000$ and had to choose between taking the money to the bank and getting 5% interest, or buying solar panels and earn only, say, 3% of your investment by selling that energy, what would you choose?. With neutral money there is no interest and the pressure to generate a high return on an investment would go away, too. When loaning money, you only have to pay back the amount you loaned instead of paying the interest on the interest on the debt which increases exponentionally the longer you wait.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;6. Three Models of the Future&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Infinite growth: To keep the economy growing, the state has to loan ever more money into existance and fall in debt ever more. Infinite growth cannot be sustained forever. The model will reach its limits either when natural ressources get too scarce or when the trust in the state gurarantee on its money fails.&lt;/li&gt;
&lt;li&gt;No growth at all: While many people talk about stopping growth while ignoring the current monetary system as the root cause (this is only fighting symptoms), others see monetary reform as the cure to solve all problems (which isn’t true neither, we need to change our lifestyle, too).&lt;/li&gt;
&lt;li&gt;Qualified growth: What we really want is a limited, flattening out growth in the material, physical domain while having an exponential growth in the immaterial, informational, social, ethical and cultural domain.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7. Practical Cases Today: Embryos of a New Economy&lt;/h3&gt;
&lt;p&gt;Three examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LET-System: &lt;a href=&quot;http://en.wikipedia.org/wiki/LETS&quot;&gt;Local Exchange Trading Systems&lt;/a&gt; are initiatives, all over the world, to foster the local economy. There is no physical money, instead the system is based on central bookkeeping. Each participant has an account and when he pays another participant, the amount is simply subtracted from his account and added to the other’s. This concept can also be thought of interest-free loans and connects supplies and demands that the ordinary market doesn’t serve.&lt;/li&gt;
&lt;li&gt;WIR: Founded in 1934, &lt;a href=&quot;http://en.wikipedia.org/wiki/WIR_Bank&quot;&gt;WIR&lt;/a&gt; is a complementary currency in Switzerland supporting small and medium-sized businesses.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/JAK_members_bank&quot;&gt;JAK&lt;/a&gt;: is a Swedish member-owned bank that in order to give interest-free loans, demands interest free savings from its members. So while you pay back your loan, at the same time you also save. These savings can then be used to give &lt;a href=&quot;http://www.feasta.org/documents/review2/carrie2.htm&quot;&gt;interest-free loans&lt;/a&gt; to other members.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What most of these initiatives have in common is a central bookkeeping account (electronically or with pen and paper), an alternative currency (points, local Dollars, etc.), the account is allowed to go into debt up to a limited amount (people with positive balances then act as debitors), no or low interest and legal tender can usually be exchanged for the alternative currency but not the other way around. These systems currently constitue the best experiments we have on what kind of monetary systems work in what size.&lt;/p&gt;
&lt;h3&gt;8. Complementary Currencies&lt;/h3&gt;
&lt;p&gt;The goal of &lt;a href=&quot;http://en.wikipedia.org/wiki/Complementary_currencies&quot;&gt;complementary currencies&lt;/a&gt; is to fill the nieches that the current system doesn’t serve and are usually tailored towards a specific need. Examples include small businesses, care of the elderly, education or to serve economically underdeveloped regions. They are meant to solve specific problems without pressuring the national budget and often create or strengthen communities at the same time.&lt;/p&gt;
&lt;h3&gt;9. What Can I Do to Help in the Transition Period?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Inform yourself and spread the knowledge&lt;/li&gt;
&lt;li&gt;Invest your money in ethical projects or give interest-free loans.&lt;/li&gt;
&lt;li&gt;Stimulate modell experiments like complementary currencies or LETS&lt;/li&gt;
&lt;li&gt;Political lobbying to introduce neutral money on a larger scale&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2010/01/29/iPad-as-a-post-PC-platform</id>
      <title>iPad as a post-PC platform</title>
      <updated>2010-01-29T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2010/01/29/iPad-as-a-post-PC-platform" />
      
      <content type="html">&lt;p&gt;What does the Apple &lt;a href=&quot;http://www.apple.com/ipad/&quot;&gt;iPad&lt;/a&gt; need to become a viable replacement for your laptop?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;multi-tasking user interface (fast application switching)&lt;/li&gt;
&lt;li&gt;usb port (and support for more external devices like printers etc.)&lt;/li&gt;
&lt;li&gt;and what’s going be by far the biggest challenge for apple: it shouldn’t be an external device to plug in your computer to sync, but it should be a computer on its own, equal to and not subordinated to your main computer. and all your data should be able to sync over the cloud with whatever there is&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I sincerely hope (and believe) that Apple is thinking of replacing the mouse/keyboard computers with this platform. Not trying to move the PC forward step by step, but instead starting with the current iPad (which is solely a giant iPhone) and then slowly pushing its capabilities to gradually replace PCs while consumer adoption and the third-party ecosystem of applications is growing with the iPad hardware and software platform. Because Apple want this to happen as quickly as possible they priced the iPad rather low and are willing to take a smaller profit margin.&lt;/p&gt;
&lt;p&gt;For this, bigger models (more like a 24” iMac) and probably a virtualized legacy mode with support for a mouse to run old mac/windows applications are eventually needed. Although most private consumers might not care, to get this really going I think it is inevitable for Apple to open up the platform a bit and remove &lt;a href=&quot;http://www.defectivebydesign.org/ipad&quot;&gt;that nasty DRM&lt;/a&gt; and let people install their own apps not bought on the appstore.&lt;/p&gt;
&lt;p&gt;Here is hoping.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2010/05/09/On-hipsterism</id>
      <title>On Hipsterism</title>
      <updated>2010-05-09T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2010/05/09/On-hipsterism" />
      
      <content type="html">&lt;p&gt;Today I realized I had to read up on Hipsterdom, get this phenomenon straight for me. So I headed to &lt;a href=&quot;http://en.wikipedia.org/wiki/Hipster_(contemporary_subculture)&quot;&gt;Wikipedia&lt;/a&gt; (“middle class adults and older teenagers with interests in non-mainstream fashion and culture, particularly alternative music, indie rock, independent film”) and grabbed the article’s first three References. Here are my sources, my mashing them up (note: I’m not sure I necessarily agree with everything being quoted) and in the end my personal conclusion.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.independent.co.uk/life-style/fashion/features/meet-the-global-scenester-hes-hip-hes-cool-hes-everywhere-894199.html&quot;&gt;The Independent – Meet the global scenester&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://www.independent.co.uk/life-style/fashion/features/meet-the-global-scenester-hes-hip-hes-cool-hes-everywhere-894199.html&quot;&gt;link&lt;/a&gt;, 14. August 2008&lt;/p&gt;
&lt;p&gt;“There always used to be a particular city that was the centre of cool at a particular point in time. But now there’s no longer a place where it’s ‘at’; there’s no longer any centre of the world’s popular cultural universe. … The further [American Apparel&#39;s] global reach stretches, the more easily the company can study and copy street style, before repackaging it and selling it back to the originators of that style, with an American Apparel label attached. … It’s no coincidence that American Apparel’s often controversial advertising campaigns imitate the Vice look [&lt;a href=&quot;http://www.lesmads.de/upload/vice_mag_51.php&quot;&gt;example&lt;/a&gt;], … His style has countless amateur copycats worldwide, whose photos have found a home on fast-growing photo-sharing websites such as Flickr and MySpace. … Making fun of the global scenesters is futile, for they love nothing more than to mock themselves. Everything a scenester does is rendered in air quotes: ironic moustaches, ironic trucker caps, faux-offensive Urban Outfitters T-shirts, white guys with afros, or musical acts with names like Does It Offend You, Yeah?… the internet has been a key factor in the globalisation of hip. … You once had a series of gatekeepers in the adoption of a trend: the innovator, the early adopter, the late adopter, the early mainstream, the late mainstream, and finally the conservative. But now it goes straight from the innovator to the mainstream. … the only prevailing trend is that there are no prevailing trends … the result is that same brand of individuality is sold, worn and celebrated the world over, simultaneously. … ‘What’s the next big thing?’ but there will never again be a next big thing. The future of fashion is that all of these places will participate. There will never ever again be one ‘the place’.”&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://newyork.timeout.com/articles/features/4840/why-the-hipster-must-die&quot;&gt;Time Out New York – Why the hipster must die&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://newyork.timeout.com/articles/features/4840/why-the-hipster-must-die&quot;&gt;link&lt;/a&gt;, Juni 2007 by Christian Lorentzen&lt;/p&gt;
&lt;p&gt;– funny text, but almost as &lt;em&gt;quote&lt;/em&gt; &amp;lt; oxymoronic as the “mainstream hipster” &amp;gt; &lt;em&gt;end quote&lt;/em&gt;, i.e. self-contradictory.&lt;/p&gt;
&lt;p&gt;“Yes, the assassins of cool still walk our streets: Any night of the week finds the East Village, the Lower East Side and Williamsburg teeming with youth—a pageant of the bohemian undead. These hipster zombies—now more likely to be brokers or lawyers than art-school dropouts—are the idols of the style pages, the darlings of viral marketers and the marks of predatory real-estate agents. And they must be buried for cool to be reborn. … Under the guise of “irony,” hipsterism fetishizes the authentic and regurgitates it with a winking inauthenticity. Those 18-to-34-year-olds called hipsters have defanged, skinned and consumed the fringe movements of the postwar era—Beat, hippie, punk, even grunge. … I propose that the only hope for a reanimated bohemia, if not a dezombified hipsterdom, is civil war. … We know that there are Sweet hipsters, who practice the sort of irony you can take home to meet the parents, and there are those Vicious hipsters, who practice the form of not-quite-passive aggression called snark. … On the Sweet end of the spectrum, The Believer lavishes its literary and pop-culture idols with a uniform layer of affection that renders it near impossible to distinguish the great from the mediocre. … Meanwhile, among those who adopt the Vicious pose, a lighthearted scorn perfected by Gawker is roundly applied to the objects of pop celebrity, both talented and (mostly) otherwise.”&lt;/p&gt;
&lt;p&gt;– So what he’s saying is that Sweet hipsters and Vicious hipsters are supposed to kill each other and make way for a dezombified hipsterdom? Guess how long after that hipsterdom would become zombified once more…&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;https://www.adbusters.org/magazine/79/hipster.html&quot;&gt;Adbusters – Hipster: The Dead End of Western Civilization&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.adbusters.org/magazine/79/hipster.html&quot;&gt;link&lt;/a&gt;, 29. Juli 2008 by Douglas Haddow&lt;/p&gt;
&lt;p&gt;‘Now, one mutating, trans-Atlantic melting pot of styles, tastes and behavior has come to define the generally indefinable idea of the “Hipster.” … initially sported by Jewish students and Western protesters to express solidarity with Palestinians, the keffiyeh has become a completely meaningless hipster cliché fashion accessory. … of a class of individuals that seek to escape their own wealth and privilege by immersing themselves in the aesthetic of the working class. … With nothing to defend, uphold or even embrace, the idea of “hipsterdom” is left wide open for attack. And yet, it is this ironic lack of authenticity that has allowed hipsterdom to grow into a global phenomenon that is set to consume the very core of Western counterculture. Most critics make a point of attacking the hipster’s lack of individuality, but it is this stubborn obfuscation that distinguishes them from their predecessors, while allowing hipsterdom to easily blend in and mutate other social movements, sub-cultures and lifestyles. … it is rare, if not impossible, to find an individual who will proclaim themself a proud hipster. It’s an odd dance of self-identity – adamantly denying your existence while wearing clearly defined symbols that proclaims it. … “cool-hunters” will also be skulking the same [web]sites, taking note of how they dress and what they consume. … get paid to co-opt youth culture and then re-sell it back at a profit. … Hipsterdom is the first “counterculture” to be born under the advertising industry’s microscope, leaving it open to constant manipulation but also forcing its participants to continually shift their interests and affiliations. Less a subculture, the hipster is a consumer group – using their capital to purchase empty authenticity and rebellion. But the moment a trend, band, sound, style or feeling gains too much exposure, it is suddenly looked upon with disdain. Hipsters cannot afford to maintain any cultural loyalties or affiliations for fear they will lose relevance.&lt;/p&gt;
&lt;p&gt;The cultural zeitgeists of the past have always been sparked by furious indignation and are reactionary movements. But the hipster’s self-involved and isolated maintenance does nothing to feed cultural evolution. … We are a lost generation, desperately clinging to anything that feels real, but too afraid to become it ourselves. We are a defeated generation, resigned to the hypocrisy of those before us, who once sang songs of rebellion and now sell them back to us. We are the last generation, a culmination of all previous things, destroyed by the vapidity that surrounds us. The hipster represents the end of Western civilization – a culture so detached and disconnected that it has stopped giving birth to anything new.’&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://trekkerdrew.blogspot.com/2010/02/its-hipsterdom-article-to-be-published.html&quot;&gt;Defining the modern-day San Francisco hipster&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://trekkerdrew.blogspot.com/2010/02/its-hipsterdom-article-to-be-published.html&quot;&gt;link&lt;/a&gt;, 20. March 2010 by Andrew Leonard&lt;/p&gt;
&lt;p&gt;‘a group of individuals who want to be different, but in the end form cliques because so many others strive to do the same. … redefining style by taking vintage clothes and embellishing them to their own tastes. … if someone asks you if you’re a hipster, and someone says [you say] ‘no, I’m not a hipster!,’ it kinda means you’re a hipster.”… That circle has been described as “exclusive” and even elusive. … the level of acceptance she’s seen hipsters project “depends on the club or group of hipsters.”’&lt;/p&gt;
&lt;p&gt;– Hipsters, so it seems, don’t form a group of people that identify with each other and have a common goal. They are just everybody that doesn’t want to be mainstream (that’s practically everyone today) and tries to take refuge in irony.&lt;/p&gt;
&lt;h2&gt;Concluding&lt;/h2&gt;
&lt;p&gt;Since the beginning of the 19th century there has been a word for people that were (perceived to be) different: &lt;a href=&quot;http://en.wikipedia.org/wiki/Bohemianism&quot;&gt;bohemian&lt;/a&gt;. What is changed today is that through the total victory of capitalism and consumerism the commercialization of everything is a reality now. We can trust nothing and nobody to be what it/(s)he claims to be. In fact, we know that ads are fake and that most music advertised is less a product of musicians and more a product of deliberately calculating marketers. Thus we crave for authenticity and that’s why today more people want to be &lt;em&gt;non-mainstream&lt;/em&gt;, &lt;em&gt;independent&lt;/em&gt; or &lt;em&gt;hip&lt;/em&gt; than ever before.&lt;/p&gt;
&lt;p&gt;But because there are so many people trying to be different they inevitable end up forming a huge group or a demographic themselves. To their resentment, they discover soon that they are not different any more. So they need to change again. At the same time, they want to change into what’s the new hip, clinching to everything that is not mainstream. Through globalization, the internet and cheap digital cameras this has become a cat-and-mouse game with amazing speed. What’s even worse, not only will other hipsters quickly catch up on a new thing to do, but all the marketers will constantly analyse the internet and the streets of the world for the latest trends, update their products and sell the hipsters their own ideas back at a healthy profit. And when a successful marketing campaign has at last pushed something into mainstream it’s definitely not hip any more.&lt;/p&gt;
&lt;p&gt;In this perspective the phenomenon and especially its causes are quite tragic. I’m not against a global umbrella culture, I’m even for a certain kind of global identity, but there needs to be space for smaller groups of people to come together and define themselves as a community, which always includes defining who is different. I applaud hipsters all over the world for their attempts to make past and present mainstream cultures their own, by mashing them together, dragging symbols out of context and into irony and thus changing their meaning. But sadly, more often than not there is no new meaning created, no new idea proposed, that is, besides the omnipresent one: “mainstream is dead”. Sure, as everything gaining momentum, also a critique of hipsters is dragged into irony by them, but that doesn’t change facts. So maybe the articles cited above and blogs like &lt;a href=&quot;http://www.latfh.com/&quot;&gt;Look at this Fucking Hipster&lt;/a&gt; and &lt;a href=&quot;http://unhappyhipsters.com/&quot;&gt;Unhappy Hipsters&lt;/a&gt; are signs of the imminent death of hipsterdom as we know it. But as long as corporate- and profit-driven globalisation is a reality the idea will live on. People always wanted and always will want to be different than most, while at the same time be similar to a few they know and value.&lt;/p&gt;
&lt;p&gt;P.S. &lt;a href=&quot;http://en.wikipedia.org/wiki/Hipster_(1940s_subculture)&quot;&gt;Wikipedia&lt;/a&gt; quotes from &lt;em&gt;Jazz&lt;/em&gt; by Frank Tirro where the 1940s (jazz-) hipster was described with: “an underground man. He is to the Second World War what the dadaist was to the first.” From a historical perspective, Dadaism was a protest-movement against WWI and the 1940s hipsters denounced the white establishment of post-WWII America. Both movements explicitly refused to formulate a reasoning for their respective philosophies, instead they focused on art or a certain lifestyle to demonstrate the absurdity of the then-current orthodoxy. One could argue that the 1990s-2000s hipster does exactly the same, this time rebelling against mainstream consumerism with absurdity and irony. But while both Dadaism and the 40s hipsters were conscious of solutions (pacifism and a more relaxed lifestyle resp.) to the respectitive grievances, the contemporary hipsters don’t seem to have any perspective on alternatives. If they had, they wouldn’t be hipsters but hippies. Then hipsterism is the manifestation of the widespread hatred of mainstream consumerism, coupled with the realization that the ideas of 1968 failed to realize and the perception that no new or viable alternatives are in sight. This is the real tragedy of which hipsters are only a symtom. All hipster (can) do is touch on that sore spot of our society and that’s probably why hipsters are so often despised.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2010/07/11/Escaping-the-collapsing-global-socio-economic-system</id>
      <title>Escaping the collapsing global socio-economic system</title>
      <updated>2010-07-11T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2010/07/11/Escaping-the-collapsing-global-socio-economic-system" />
      
      <content type="html">&lt;p&gt;People don’t like rapid change. They prefer things to stay more or less the way they know and have gotten used to them. So if you tell them that their world is going to stand upside down in only a few decades they prefer to ignore that and hope that they’ll just be able to continue with business and life as usual. I’m like that, too. But let’s be realistic. This world is going to change drastically – whether you want it to or not.&lt;/p&gt;
&lt;p&gt;I’m slightly above 20 years old now and either in my lifetime or in the lifetime of my children cheap oil is simply going to run out. We’ve known that since the 1970s but our global system has been unable to change trajectory at all. And while talk about &lt;em&gt;green&lt;/em&gt; and &lt;em&gt;climate change&lt;/em&gt; has accelerated significantly between 2000 and 2010 (note, that’s 30 years after mainstream society had realized that we are destroying our planet and with it our livelihood), it seems to me that this is rather another trick to get consumers to buy new (greener) stuff and keep the economy on its exponential-growth-track. What has actually been happening in the last half a century is that our global society has slowly but steadily been taken hostage by the global economic system. All of us, politicians, middle-class workers as well as CEOs of huge companies, seem unable to change course under the dictate of the so-called laws of the free market. The difference is that a tiny minority is profiting astonishing amounts at the cost of the rest of the population and at the cost of whole generations centuries into the future. While the sales volume of some multi-nationals have risen above the GDP of small countries, nation states around the world have continuously been losing power. The states of the &lt;em&gt;developing world&lt;/em&gt; have long known to be corrupt and serve only as an empty hull for an established elite that draws its power from global business. But the financial crises has shown us clearly that also the states of the industrialized world are mere henchmen and have no choice but to risk everything and go into deep debt themselves to rescue the global banking system if they don’t want to destroy their national economy and go down themselves. Virtually all states around the world are &lt;em&gt;hollow states&lt;/em&gt;, and are becoming more and more so every day.&lt;/p&gt;
&lt;p&gt;In the words of &lt;a href=&quot;http://globalguerrillas.typepad.com/globalguerrillas/2010/05/the-decline-of-the-west.html&quot;&gt;John Robb&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;… the nation-states of the West will join those of the global south as hollow states: mere shells of states that serve only to enforce the interests of the global economic system. These new states, more market-states than nation-states, will offer citizens a mere vestige of the public goods they offered historically.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Our current global economic, social and political system is totally dependent on an economy of infinite growth which is fueled by cheap oil. This is coupled with a highly speculative financial system and food stocks in our cities that last only a few days after being cut off from resupply-trucks. Whether it’s going to be quick and noisy or slow and painful, one way or another, this global system will eventually break down. The question is, will we have something to replace it with?&lt;/p&gt;
&lt;p&gt;I, as quite a few others, believe the answer are &lt;a href=&quot;http://en.wikipedia.org/wiki/Resilience_(organizational)&quot;&gt;resilient&lt;/a&gt; local &lt;a href=&quot;http://en.wikipedia.org/wiki/Transition_Towns&quot;&gt;communities&lt;/a&gt;, connected through the internet, that work through the principles of &lt;a href=&quot;http://p2pfoundation.net/Manifesto&quot;&gt;peer-to-peer&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Open_source&quot;&gt;open source&lt;/a&gt;. The next question is of course when this transformation will start taking place, and much more importantly how much time it will take to accomplish the transition: more like 15 years or more like the 300 years of the decline of the Roman Empire? That is, of course, assuming such a transition will be successful. While I think it is inevitable that a few such communities will form, I do not wish to examine the bleak possibility that such a transformation will fail to reach large parts of our global society.&lt;/p&gt;
&lt;p&gt;So I ask you, is it not the responsibility, indeed the duty, of every capable human being on earth to work towards such a transition? May it be swift and peaceful.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2010/09/18/Humanism-vs-Ecocentrism</id>
      <title>Humanism vs. Ecocentrism</title>
      <updated>2010-09-18T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2010/09/18/Humanism-vs-Ecocentrism" />
      
      <content type="html">&lt;p&gt;I just read &lt;a href=&quot;http://www.opendemocracy.net/paul-kingsnorth/confessions-of-recovering-environmentalist&quot;&gt;Confessions of a recovering environmentalist&lt;/a&gt; by Paul Kingsnorth, co-founder of the &lt;a href=&quot;http://www.dark-mountain.net/&quot;&gt;Dark Mountain Project&lt;/a&gt;. His writing style is great but there is one key point in which I beg to differ: I do not see humans solely as a plague that has befallen nature, I see them as a part of nature.&lt;/p&gt;
&lt;p&gt;You can say what you want, but humans are at least very different from other animals. Maybe the difference between humans and other mammals is less than the difference between bacteria and mammals. But there is one thing humans have developed which no other animal has to such an extent: culture, an extensive set of knowledge, know-how, tools and artifacts that are relayed from generation to generation not through the genetic code but by language and observation. It is hard to argue against the fact that this is currently unique to humans.&lt;/p&gt;
&lt;p&gt;Where opinions differ, however, is whether this development is mainly positive or mainly negative. If you focus on the environmental impact humans have made on the rest of the planet you might reach the conclusion that they are a plague destroying nature. And if they make the planet uninhabitable and go extinct that’s the just punishment and maybe after a while there will be room for other living beings on the planet again. Or if you don’t want to go that far you might say that at least the number of humans should be drastically reduced to lower their impact on the biosphere. But what if you were an alien, looking down on planet earth from your spaceship, what would you deem appropriate then? Would you add sterilizer to human drinking water supply to reduce their spreading if you had the power? Would an alien have the right to do that to safe the rest of the planet from human influence? Probably not. You might still argue however that we as humans have the responsibility to suppress our growing numbers. But what right do you as an individual have to ask another individual, a young woman maybe, not to have a child? What does have more value, a human being or a tree? Or what about a child and a blade of grass?&lt;/p&gt;
&lt;p&gt;If you really stay true to the egalitarian argument that humans and the rest of nature have equal value and take the holistic stance that they all are simply part of a greater whole, then humans must be protected, too. Because it would be a real shame if all that culture (and even the raw capability to produce culture) just went the way of the dodo. And yes, of course it’s a shame too that the dodo went its way.&lt;/p&gt;
&lt;p&gt;So to make my position clear, I neither subscribe to a radical ecocentrism that is in favour of killing all of humanity in order to save the rest of nature nor an anthropocentric view that proclaims that humans have more intrinsic value than other animals and plants. Instead, I feel that we humans are a part of nature and therefore need to be part of the solution. To make that work, I agree with &lt;a href=&quot;http://www.opendemocracy.net/paul-kingsnorth/from-ecocide-to-ecocentrism-response-to-andrew-dobson&quot;&gt;Paul Kingsnorth&lt;/a&gt;, it is not enough to change our technologies to more efficient ones. Our values need to change, too. But it is unrealistic to believe that people will single-handedly descent back into caves to safe the planet. That’s why efficient technologies are still needed. This is not to say that any human being on the planet has a right to such an ultra-mobile and consumerist lifestyle as the majority of the people in industrialized nations are indulging in right now – we need to do away with cars, planes and a new smartphone and laptop every half a year – but I do think it’s possible with efficient technologies and a new, reasonable social-economic system for the human population to live a decent life without destroying nature in the process. And yes, for that to work we need a radical change of values and a radical change of the system. And you cannot change one without changing the other. So what we need to do is to work on both of them simultaneously.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2010/10/22/Mac-OS-X-Lion-predestined-for-touchscreen-Macs</id>
      <title>Mac OS X Lion predestined for touchscreen Macs</title>
      <updated>2010-10-22T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2010/10/22/Mac-OS-X-Lion-predestined-for-touchscreen-Macs" />
      
      <content type="html">&lt;p&gt;&lt;img src=&quot;%7B%7Bsite.url%7D%7D/assets/2010-10-22-Mac-OS-X/touchscreen_macs.jpeg&quot; alt=&quot;&quot; title=&quot;Touchscreen Macs&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Anyone else watched Apple’s &lt;a href=&quot;http://events.apple.com.edgesuite.net/1010qwoeiuryfg/event/index.html&quot;&gt;Back to the Mac Event&lt;/a&gt; and thought how great this software would fit on a multi-touch Mac? Apple demoed a few features of &lt;a href=&quot;http://www.apple.com/macosx/lion/&quot;&gt;Mac OS X Lion&lt;/a&gt;, the next major Mac OS X release. Lion includes an iPad/iPhone-like app launcher and every app is encouraged to provide a fullscreen view, again much like on the iOS devices where every app is always fullscreen. Most new &lt;a href=&quot;http://en.wikipedia.org/wiki/ILife&quot;&gt;iLife ’11&lt;/a&gt; apps shown already come with such a fullscreen mode.&lt;/p&gt;
&lt;p&gt;Apple said gestures on the Magic Mouse or a MacBook’s Trackpad could be used to switch between apps and do things within the app. But I cannot help but feel that gesturing around on top of a mouse isn’t the way this is supposed to work. My own experience with three-finger-gestures on a Magic Mouse as well as what we saw during the demo shows that those just don’t always work as expected or are triggered by accident. So what I’m hoping for is that with the release of Lion in the summer, Apple will ship multi-touch enabled Macs as shown in this &lt;a href=&quot;http://arstechnica.com/apple/news/2010/08/apple-looking-at-dual-mode-touchscreen-desktops-and-laptops.ars&quot;&gt;recent patent filing&lt;/a&gt; (see picture). Then the software shown off now will really start to shine.&lt;/p&gt;
&lt;p&gt;Of course, it seems there is still a lot of work to do, both for Apple and third-party developers. But the conventional window and mouse metaphor is still prominently integrated into Lion, and the Mission Control feature helps switching between the two experiences seamlessly. With the Mac App Store and the iPad gaining traction, apps should be upgraded for the touchscreen reasonably fast. A further cue that all this might be true is that Lion seems to &lt;a href=&quot;http://www.appleinsider.com/articles/10/10/21/apple_leaks_new_scroll_bar_ui_details_in_mac_os_x_10_7_lion.html&quot;&gt;hide scrollbars&lt;/a&gt; when not in use which makes perfect sense for a touchscreen environment. Also, this might explain what Apple is working on with iOS 4 for iPad which is still only available for iPhones.&lt;/p&gt;
&lt;p&gt;I’m convinced that if it’s not coming with Lion, it’s coming with the next release after that (but what cat-name is there left for a next release?). As I’ve argued in an &lt;a href=&quot;http://mb2100.wordpress.com/2010/01/29/ipad-as-a-post-pc-platform/&quot;&gt;earlier post&lt;/a&gt; about the iPad as a post-PC platform, Apple still needs to figure out how to easily sync data between apps and between iOS-devices as well as PCs. They seem determined to abandon the long-serving file metaphor – which I think is a good thing – but they need to come up with something better that is accessible to third-party apps and the cloud.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;%7B%7Bsite.url%7D%7D/assets/2010-10-22-Mac-OS-X/lion_springboard.jpeg&quot; alt=&quot;&quot; title=&quot;Lion Springboard aka Launchpad&quot; /&gt;&lt;/p&gt;
&lt;p&gt;No, this image isn’t a mockup but an official Apple picture of Mac OS X Lion. What’s also interesting is that the file name on Apple’s server is &lt;a href=&quot;http://images.apple.com/macosx/lion/images/lion_springboard1_20101020.jpg&quot;&gt;lion_springboard&lt;/a&gt; (it’s called Springboard on the iPhone) and not Launchpad which is the official name mentioned on the &lt;a href=&quot;http://www.apple.com/macosx/lion/&quot;&gt;website&lt;/a&gt; and by Steve Jobs.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2010/11/27/Is-the-Internet-making-us-stupid-Nicholas-Carrs-The-Shallows</id>
      <title>Is the Internet making us stupid? – Nicholas Carr’s The Shallows</title>
      <updated>2010-11-27T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2010/11/27/Is-the-Internet-making-us-stupid-Nicholas-Carrs-The-Shallows" />
      
      <content type="html">&lt;p&gt;I have just finished Nicholas Carr’s book &lt;a href=&quot;http://www.theshallowsbook.com/&quot;&gt;The Shallows&lt;/a&gt; in which he makes the argument that while the internet has its benefits, it basically makes us stupid. He claims that using the internet improves our ability to sift through large chunks of data quickly while at the same time we cannot concentrate at one thing at a time anymore. We only read headlines and a few sentences on websites to then head off to click on a link or check our mail, newsfeed reader, etc. We loose our ability to &lt;em&gt;read deep&lt;/em&gt; and focus on the subject matter, think about it clearly and instead get always distracted – or what others call&lt;em&gt;multitasking&lt;/em&gt;. He goes further and argues that these habits have a lasting impact on our brain whose circuits are rewired to get better at superficial and shallow reading and thinking while at the same time lessens our ability to follow and make complicated and extended arguments. And in order to memorize facts or a concept we need to focus and engage our mind with it for some amount of time, otherwise it will not make the jump from short to long-term memory.&lt;/p&gt;
&lt;p&gt;I think he’s certainly on to something – otherwise I wouldn’t have bothered reading his book. But I conclude that he overdid it. Carr isn’t a luddite and he acknowledges that through all intellectual technologies such as books, maps and the compass we have gained some things while at the same time lost others. Indeed, his historical and cultural digressions and accounts of neurological and psychological research that take up a good part of the book are very interesting, sometimes I felt almost like reading National Geographic. But even as he acknowledges that the internet is here to stay, he offers no cues on how to fix it but paints a bleak picture of a medium that is inherently broken and that make its users shallower.&lt;/p&gt;
&lt;p&gt;Carr also criticizes the view that a brain works like a complicated computer. While I’ll save the philosophical debate about that for another post, I certainly agree that in everyday life the metaphor isn’t all that helpful. Right now, computers are good (and even better than humans) at some task while they fail spectacularly at others. Humans think and feel massively parallel while computers still work mostly sequentially. Humans can get a grasp at a complicated problem even though it might be impossible to rigorously proof step by step that the intuitive solution is right. So I agree that for now we have to be careful when looking towards computers to help us at certain tasks and problems. Or more precisely, we should think carefully about what way we expect them to help us.&lt;/p&gt;
&lt;p&gt;Towards the end of the book Carr argues that user interfaces and web sites shouldn’t be designed in a user friendly way but instead should be hard on the user in order to make him or her think. That way they will have to focus more and remember the contents better.&lt;/p&gt;
&lt;p&gt;I think the exact opposite is true. The key to fixing computers and the internet and lessening their effect as a medium of distractions is better user interface design. The user interface should hide the complexity of problems that the computer is good at solving for us. Like when you are writing an email and enter the recipients name in the receiver-field it’s great that his email address gets filled in and you don’t have to look it up yourself. But on the other hand, the user interface shouldn’t try to hide the complexity of the problem we want to solve ourselves, as humans. When we only ask the computer to give us a word processor we don’t want it to write the text for us. Similarly, the computer or website shouldn’t flood us with notifications and other offers to be distracted as is often the case today. That’s why some people actually prefer the iPad’s approach to applications. You can work with only one app at a time and while you’re reading an ebook you haven’t any Facebook notifications popping in.&lt;/p&gt;
&lt;p&gt;Another interesting note in The Shallows is that hyperlinks don’t necessarily improve the understanding of a text, indeed Carr cites a study that shows the opposite. The reader is preoccupied making the decision to either follow the link or not which distracts him of following the argument from beginning to end. This is a again a point where I tend to agree with him. More than just a few links in a text are too distracting. Better list them as references at the end of the text.&lt;/p&gt;
&lt;p&gt;In conclusion I can say that I don’t think all hope is lost for the internet. But we certainly need to rethink the way we design websites and user interfaces. And as users we have to pay a lot more attention to the way we follow links mindlessly and are easily distracted. We need to make more conscious decisions on what we actually want to do right now and then focus on that and not stop until we’re done with it. And then we can take a conscious break instead of drifting off to Youtube or Facebook which doesn’t help us to really relax and tank energy.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2011/01/20/TV-in-the-age-of-the-Internet</id>
      <title>TV in the age of the Internet</title>
      <updated>2011-01-20T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2011/01/20/TV-in-the-age-of-the-Internet" />
      
      <content type="html">&lt;blockquote&gt;
&lt;p&gt;If the networked TV of 2013 has as much CPU and GPU horsepower as, say, the iMac of 2010, and if the software environment is suitably flexible and extensible (via app stores or hacking), then why would you need an HTPC, AppleTV, media extender, or DVR? Indeed, such a TV would have much more gaming horsepower than the current generation of consoles, so you might be able to skip those, too. And if 2TB or so of storage is good enough for you, why would you need separate NAS or fileserver.&lt;/p&gt;
&lt;p&gt;Given where things are headed, I can easily imagine the enthusiast home theater of 2013 consisting of a TV and maybe a game console, and that’s it. At some point, talking about home theater may once again amount to talking about TVs, receivers, speakers, and not much else. We’ll look at the vast tracts of empty space beneath our TVs and think back on the array of service- and task-specific boxes that we once used. If that’s the future of TV, then I, for one, am definitely looking forward to it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://arstechnica.com/gadgets/future-of-tv/2011/01/the-ars-av-club-weighs-in-on-the-future-of-tv.ars&quot;&gt;Ars Technica, January 2011&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That’s what I’ve been thinking for ages! Here a note of mine from October 2006:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a computer that looks and behaves like a TV&lt;/p&gt;
&lt;p&gt;what-in-one:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TV, Video, Audio&lt;/li&gt;
&lt;li&gt;Computer: dual-boot (GNU/Linux, Windows)&lt;/li&gt;
&lt;li&gt;game console&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hardware:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HD Display&lt;/li&gt;
&lt;li&gt;CPU, GPU (HD-Video)&lt;/li&gt;
&lt;li&gt;Big Harddisk&lt;/li&gt;
&lt;li&gt;DVD-drive&lt;/li&gt;
&lt;li&gt;Infraredport, Remote&lt;/li&gt;
&lt;li&gt;5.1 Soundcard&lt;/li&gt;
&lt;li&gt;cable TV-card&lt;/li&gt;
&lt;li&gt;USB (iPod, optional Mouse&amp;amp;Keyboard)&lt;/li&gt;
&lt;li&gt;Bluetooth (Gamepad, optional Mouse&amp;amp;Keyboard)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think that’s the only reasonable way to build a video-home-entertainment device in the age of the Internet. Granted, you might not need the cable TV-card when you have Netflix and BitTorrent and you won’t need dual-boot if your main OS is such a strong platform that you have enough apps and games to run on that, but the rest pretty much still stands. That’s the way to do to TV what the iPod did to music, the iPhone did to phones and the Kindle and iPad are doing to reading and light mobile computing. It seems odd that Apple is so far off this time with their Apple TV, which is nothing more but yet another set-top box and it doesn’t even run apps or games.&lt;/p&gt;
&lt;p&gt;The key is of course, again, a simple and nice user interface which is the thing that Google TV is so far away from (a full-scale keyboard! wtf?) and that’s what might prevent Sony and the likes from producing that dream-TV of mine for yet another few years. Even now that the idea has hit mainstream.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2011/02/08/Ten-principles-to-good-design</id>
      <title>Ten principles to “good design”</title>
      <updated>2011-02-08T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2011/02/08/Ten-principles-to-good-design" />
      
      <content type="html">&lt;p&gt;Just watched a short &lt;a href=&quot;http://vimeo.com/7917568&quot;&gt;interview-video&lt;/a&gt; with &lt;a href=&quot;http://en.wikipedia.org/wiki/Dieter_Rams&quot;&gt;Dieter Rams&lt;/a&gt;. And here his ten principles to “good design”:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Good design is innovative&lt;/li&gt;
&lt;li&gt;Good design makes a product useful&lt;/li&gt;
&lt;li&gt;Good design is aesthetic&lt;/li&gt;
&lt;li&gt;Good design makes a product understandable&lt;/li&gt;
&lt;li&gt;Good design is unobtrusive&lt;/li&gt;
&lt;li&gt;Good design is honest&lt;/li&gt;
&lt;li&gt;Good design is long-lasting&lt;/li&gt;
&lt;li&gt;Good design is thorough down to the last detail&lt;/li&gt;
&lt;li&gt;Good design is environmentally friendly&lt;/li&gt;
&lt;li&gt;Good design is as little design as possible&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This indeed seems still very true to me today. And it seems like Apple is mastering just about all of them. Maybe except &lt;em&gt;environmentally friendly&lt;/em&gt; (non-replaceable batteries) and &lt;em&gt;long-lasting&lt;/em&gt; (the new version of the product always makes the old one look dated, but the old one on its own is long-lasting nonetheless). More companies should invest more energy and time in “good design” instead of simply producing a lot of trash.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2011/04/18/Embracing-uncertainty</id>
      <title>Embracing uncertainty</title>
      <updated>2011-04-18T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2011/04/18/Embracing-uncertainty" />
      
      <content type="html">&lt;p&gt;There are certainly many ways to come to personal self-confidence and peace of mind. One way may be faith, another (I guess my way) is to embrace uncertainty. That is to say: “hey, I don’t know what’s going to happen, but whatever happens, I’ll give my best”.&lt;/p&gt;
&lt;p&gt;This attitude seems related to the scientific method where a theory can never be proved. A scientific or philosophical theory is just a useful working concept until proven wrong. Then a better theory has to be developed. In this method there is no &lt;em&gt;right&lt;/em&gt;, no &lt;em&gt;absolute truth&lt;/em&gt;, only a constant struggle to improve.&lt;/p&gt;
&lt;p&gt;From this concept of embracing and working with uncertainty, indeed never accepting that some theory might be the absolute truth, comes a great deal of self-confidence because you haven’t that much to lose anymore, because you always knew you couldn’t have had discovered the absolute truth anyway. And while there might be a few so-called scientist that have forgotten this, I think that the great majority take this way of thinking for granted. Indeed, they take it so much for granted that they often fail to mention it explicitly to the public.&lt;/p&gt;
&lt;p&gt;The result of all this, I think, is that many people that don’t take uncertainty for granted but are looking for some kind of genuine truth will think that scientists are overconfident and they might feel that scientists think they can explain everything while actually the exact opposite is the case.&lt;/p&gt;
&lt;p&gt;All in all a quite unfortunate situation. So what is there to do? Scientists on one hand should get better at &lt;a href=&quot;http://arstechnica.com/science/news/2010/06/successful-science-communication-a-case-study.ars&quot;&gt;communicating with the general public&lt;/a&gt;, the public on the other hand needs to get a better understanding of &lt;a href=&quot;http://en.wikipedia.org/wiki/Science#Certainty_and_science&quot;&gt;science&lt;/a&gt; and the scientific method.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2011/04/23/About-Science</id>
      <title>About Science</title>
      <updated>2011-04-23T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2011/04/23/About-Science" />
      
      <content type="html">&lt;p&gt;The word “science” is from Latin “scientia” which was one of several words for “knowledge” in that language. For Aristotle, &lt;em&gt;scientific knowledge&lt;/em&gt; was a body of reliable knowledge that can be logically and rationally explained (Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Science&quot;&gt;Wikipedia&lt;/a&gt;). This understanding of the term &lt;em&gt;science&lt;/em&gt; dominanted for many hundreds of years and was often used interchangeably with the term &lt;em&gt;philosophy&lt;/em&gt;. It was only in the 20th century that the natural sciences (physics, chemistry, biology, etc.) came to dominate and the meaning of the term &lt;em&gt;science&lt;/em&gt; changed. &lt;em&gt;Science&lt;/em&gt; in the English language now usually refers to what used to be known only as &lt;em&gt;natural science&lt;/em&gt;. But in many European languages, the word that corresponds to the English &lt;em&gt;science&lt;/em&gt; continues to carry the former meaning.&lt;/p&gt;
&lt;p&gt;In English one can use the term &lt;em&gt;academic discipline&lt;/em&gt; to refer to the old, broader meaning of science. Here is a classification of &lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_academic_disciplines&quot;&gt;academic disciplines&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Natural sciences&lt;/strong&gt; apply the &lt;a href=&quot;http://en.wikipedia.org/wiki/Scientific_method&quot;&gt;scientific method&lt;/a&gt; to the study of nature. Examples are physics, chemistry, biology, geology, astronomy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Social sciences&lt;/strong&gt; study society. Examples are sociology, anthropology, political science, religious studies, linguistics.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Natural sciences and most of the social sciences are empirical sciences, that is to say that their primary methods rely on data to support or falsify their theories.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Humanities&lt;/strong&gt; study the human condition while not relying on data but rather on analytical, critical or speculative methods. Examples are philosophy and literature. Usually visual and performing arts such as music and theatre are included in the humanities although they do not rely on logic or rationality and as such even Aristotle probably wouldn’t have considered them part of science.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Formal sciences&lt;/strong&gt;, that is mathematics and related fields, use &lt;em&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/A_priori_and_a_posteriori&quot;&gt;a priori&lt;/a&gt;&lt;/em&gt; methods. They are concerned with formal systems based on abstract definitions and rules. As such, the formal sciences themselves are detached from the physical, observable world. However, empirical sciences often rely on mathematics to analyse data gathered from observations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Applied sciences&lt;/strong&gt; use scientific knowledge for practical means. They are very close and sometimes overlap with engineering and R&amp;amp;D.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Depending on their methodology and focus, the fields of history, law, and psychology among others are sometimes assigned to the social sciences, the humanities or even the applied sciences. Computer science also consists of natural science, formal science and applied science.&lt;/p&gt;
&lt;p&gt;If we consider all these academic disciplines and exclude the arts, following Aristotle’s understanding of &lt;em&gt;science&lt;/em&gt; that is still widespread in continental Europe, what do these sciences then have in common? What makes them scientific? Here is my personal working definition:&lt;/p&gt;
&lt;p&gt;‘Science’ (in the general sense) is the systematic and methodical acquisition of knowledge that follows these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Formulation of a question or problem concerning the world or a general state of affairs (German: “allgemeiner Sachverhalt”).&lt;/li&gt;
&lt;li&gt;Formulation of a theory that is objectively (or &lt;a href=&quot;http://en.wikipedia.org/wiki/Intersubjectivity&quot;&gt;intersubjectively&lt;/a&gt;) reviewable.&lt;/li&gt;
&lt;li&gt;Publication of the work done in the previous two steps. The publication should document the work as accurately and consistently as possible with the aim of making it rationally or logically comprehensible, reproducible and verifiable (or rather falsifiable, see &lt;a href=&quot;http://en.wikipedia.org/wiki/Critical_rationalism&quot;&gt;critical rationalism&lt;/a&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Within the academic disciplines, there has historically been a debate between &lt;a href=&quot;http://en.wikipedia.org/wiki/Empiricism&quot;&gt;empiricism&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Rationalism&quot;&gt;rationalism&lt;/a&gt;. The former holding that valid knowledge can only be obtained by sensory experiences while the latter holds that also reasoning is a valid source of knowledge.&lt;/p&gt;
&lt;p&gt;I think it would be great if the other sciences, in the old meaning of the word, would reclaim some ground from the empirical, especially natural sciences. Because not everything that matters can be measured (cf. &lt;a href=&quot;http://www.ted.com/talks/david_brooks_the_social_animal.html&quot;&gt;TED Talk by David Brooks&lt;/a&gt;).&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2011/05/05/Prosecution-of-international-criminals-or-was-bin-Ladens-killing-legal</id>
      <title>Prosecution of international criminals – or was Osama bin Laden’s killing legal?</title>
      <updated>2011-05-05T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2011/05/05/Prosecution-of-international-criminals-or-was-bin-Ladens-killing-legal" />
      
      <content type="html">&lt;p&gt;Osama bin Laden was killed by US special forces in Pakistan on May 2 2011. Was this killing legal?&lt;/p&gt;
&lt;p&gt;The first question to ask, I think, is whether Osama bin Laden (and international terrorists in general) are to be considered criminals or enemy-combatants as defined in international law.&lt;/p&gt;
&lt;p&gt;If they are to be considered criminals, they have to be dealt with in a court of law. But it is questionable at best that the US military or police do have the authority to capture someone in a foreign country without cooperating with local police. On the other hand, if international terrorists are to be considered enemy-combatants and Osama bin Laden indeed didn’t make his surrender clear, then the killing was lawful.&lt;/p&gt;
&lt;p&gt;Unfortunately, there isn’t even an internationally binding definition of terrorism. And for a person to be considered an enemy combatant under classical international law, there needs to be a war between two or more states or a civil war.&lt;/p&gt;
&lt;p&gt;What I’m calling for is an extension of international law and a strengthening of the International Criminal Court (ICC) which prosecutes individuals for genocide, crimes against humanity, war crimes, and the crime of aggression. A first step must be for all states of the world to recognize the ICC and ratify its convention. A second step would be to provide the ICC with its own police force to get hold of the individuals that are under warrant. Possibly existing military forces of member countries (e.g. US) could be used if they were to get permission from the ICC.&lt;/p&gt;
&lt;p&gt;That way, the prosecution of Osama bin Laden could have taken place as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The ICC opens an investigation&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The ICC issues a warrant for Osama bin Laden&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Forces with a clear mandate under international law try to capture him&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If he resists arrest and is killed that’s handled similar to when a national police officer kills someone upon resisting arrest. If Osama bin Laden is successfully arrested he’s put on trial by the ICC.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Violent dictators such as Muammar Gaddafi could be handled similarly if they are committing crimes against humanity or equally grave crimes under international law. I see no reason to wage war against a whole country if the problem lies in the leadership.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2011/07/16/deja-vu</id>
      <title>Déjà vu</title>
      <updated>2011-07-16T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2011/07/16/deja-vu" />
      
      <content type="html">&lt;p&gt;I hate that feeling. You look at something or hear a story and then you go on to other stuff while somewhere in the back of your mind you keep thinking about what you just heard or saw. And then, suddenly it strikes you that you might have heard or seen this before, you feel like this wasn’t the first time you heard that story or watched that video. But now it’s already too late. It’s impossible to tell with certainty whether you really had experienced this before and remembered only after contemplating a few minutes the just experienced or whether this was actually the first time and this experience has already become entangled with similar memories of the past, up to the point where you cannot tell anymore whether it is a fresh memory or just a refreshed memory.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Déjà vu&lt;/em&gt;, as they say…&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2011/10/10/Why-do-some-people-hate-Apple</id>
      <title>Why do some people hate Apple</title>
      <updated>2011-10-10T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2011/10/10/Why-do-some-people-hate-Apple" />
      
      <content type="html">&lt;p&gt;I just entered “why consumers should care about design” into Google, excluding results about &lt;em&gt;health care&lt;/em&gt; and what I stumbled over was not exactly what I was looking for, but interesting nonetheless. It was this article by The Guardian: &lt;a href=&quot;http://www.guardian.co.uk/technology/2011/oct/06/why-do-people-hate-apple&quot;&gt;Why do some people really hate Apple?&lt;/a&gt; The author writes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Buying or using products that engage our emotions strongly will inevitably alienate those who don’t share those emotions – and just as strongly.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This may well be true. But the article doesn’t go on to ask why this is the case.&lt;/p&gt;
&lt;p&gt;Many (but not all) people having used an Apple product for some amount of time fall in love with it one way or another. There is something catchy about those beautifully designed products. While touching and interacting with them they connect with something deep within us. And the longer you use your iPhone, carrying it with you every day wherever you go, the more personal your relation with the device becomes.&lt;/p&gt;
&lt;p&gt;So why is it that people not using and not owning such a product react almost equally as strong in the opposite way? Why do some people hate Apple and all their products? Are they simply jealous? I don’t think it’s that simple. I think that when you buy a new Apple product your non-Apple-using friends feel similar to when they would see you falling in love with somebody they think is not good for you. That new flame who is only after your money, for example. They see you acting irrationally and falling prey to an evil force that persuades you of buying expensive products that aren’t any better than all the others. What they don’t see is all the joy you are having with your new love.&lt;/p&gt;
&lt;p&gt;On a more rational note, do I think it makes sense to buy Apple products? An often voiced criticism is that they are expensive toys that actually can do less than their mundane counterparts. It is probably true that you can think of a few things that you cannot do or at least cannot do as easily with an Apple product as with that of another manufacturer (like moving your music files to your iPhone without using iTunes). But the things you want it to do 99.95% percent of the time it does splendidly on the other hand. By not incorporating some exotic features Apple is able to offer a very streamlined design with few distractions. It is intuitive and efficient to use, letting the user easily accomplish his goal without forcing him to think about all the technology that enables his experience.&lt;/p&gt;
&lt;p&gt;But of course there are also those restrictions that do not only serve the simplicity of the product but are mostly there to increase Apple’s profit. And I hate those just as much as everybody else. But the sad truth is that at the moment there are no other computers or phones that are designed as well as Apple’s. And by &lt;em&gt;design&lt;/em&gt; I don’t just mean that they look beautiful and stylish. By &lt;em&gt;design&lt;/em&gt; &lt;a href=&quot;http://mb2100.wordpress.com/2011/02/08/ten-principles-to-good-design/&quot; title=&quot;Ten principles to “good design”&quot;&gt;I mean the process&lt;/a&gt; of the people creating the product pushing themselves to improve it again and again and again. Thinking carefully about the best solution, questioning every tiny detail – is it really necessary? – making the device from hardware to software as simple and enjoyable to use as humanly possible thus saving millions of people countless hours of frustration.&lt;/p&gt;
&lt;p&gt;I think design is important. But so is open source and freedom. Right now, there is this trade-off and everybody has to choose for himself where to draw the line.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2011/12/26/A-shift-towards-design-as-problem-solving</id>
      <title>A shift towards design as problem solving</title>
      <updated>2011-12-26T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2011/12/26/A-shift-towards-design-as-problem-solving" />
      
      <content type="html">&lt;p&gt;The last year or two I have noticed more and more designers talking about changing the meaning of &lt;em&gt;design&lt;/em&gt; or at least what the &lt;em&gt;design profession&lt;/em&gt; is about. They are advocating a shift away from just designing beautiful graphics and creating smart solution to isolated problems towards understanding &lt;em&gt;design&lt;/em&gt; really as a school or a way of problem solving. This notion was probably first articulated in the term &lt;a href=&quot;http://en.wikipedia.org/wiki/Design_thinking&quot;&gt;Design Thinking&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Today, we live in a world where on one hand potentially everybody with a computer can create great-looking prints and websites and on the other hand we have more complex problems than ever that cannot be solved by looking at them in isolation but are really properties of globally interconnected systems or &lt;a href=&quot;http://en.wikipedia.org/wiki/Emergence&quot;&gt;emergent systems&lt;/a&gt;. So the thinking goes, and I tend to agree, that designers should not stand in the way of the democratization of poster-making but instead focus on tackling these interconnected and interdisciplinary problems. Because it seems that designers are in a unique position to look at these systems in a holistic way and are able to get to grasp with them using a mix of different methodologies.&lt;/p&gt;
&lt;p&gt;That is, of course, unless you believe that the market is going to figure it all out by itself. Then we don’t need as many designers but are well served with continuing to hire economists in all possible positions…&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2012/05/19/XQuery,-Node</id>
      <title>XQuery, Node.js and Opa – which is the “new Java” of web development?</title>
      <updated>2012-05-19T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2012/05/19/XQuery,-Node" />
      
      <content type="html">&lt;p&gt;I know it’s dangerous to draw conclusions from analogies, but what are we supposed to learn from, if not from the past?&lt;/p&gt;
&lt;p&gt;This was before my time, but from what I gather, the programming language and development environment Smalltalk failed because the competitor Java came along which borrowed a few concepts from Smalltak but additionally had…&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a C-like syntax that was familiar to almost all programmers&lt;/li&gt;
&lt;li&gt;applets to run the code in the browser,&lt;/li&gt;
&lt;li&gt;free (initially as in beer) development tools provided by Sun, and&lt;/li&gt;
&lt;li&gt;is statically typed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As of today, Java is one of the most widely used programming languages in a variety of domains, taught in schools and universities and known by every respectable software developer. Although Java applets in the browser were since displaced by first Flash and more recently HTML5+JavaScript.&lt;/p&gt;
&lt;p&gt;The web as a platform is only gaining in importance and everybody is waiting for the “next big thing”. A language that could be used through all three tiers of web development: database queries, server-side programming, plus client-side programming of the browser. There are a number of contenders, such as &lt;a href=&quot;http://opalang.org/&quot;&gt;Opa&lt;/a&gt;, XQuery (e.g. using &lt;a href=&quot;http://www.28msec.com&quot;&gt;Sausalito&lt;/a&gt; which uses &lt;a href=&quot;http://www.zorba-xquery.com/&quot;&gt;Zorba&lt;/a&gt;) and JavaScript (e.g. using &lt;a href=&quot;http://meteor.com/&quot;&gt;Meteor&lt;/a&gt;, &lt;a href=&quot;http://derbyjs.com/&quot;&gt;Derby&lt;/a&gt; or &lt;a href=&quot;http://www.socketstream.org/&quot;&gt;SocketStream&lt;/a&gt; which all run on the &lt;a href=&quot;http://www.nodejs.org&quot;&gt;Node.js&lt;/a&gt; server). But which one, if any of those, will ensue to be the dominant one, the “new Java”?&lt;/p&gt;
&lt;p&gt;Since the only language that is supported by all major browsers on all major platforms is JavaScript, we’re pretty much stuck with it on the client side. (I think it’s rather doubtful that Google’s Dart will catch on). So whatever language will win, will necessarily need to compile to JavaScript – or be JavaScript.&lt;/p&gt;
&lt;p&gt;So how do they compare through the lens at the analogy with Smalltalk and Java? While XQuery and Opa are statically typed which is an advantage in my opinion, JavaScript scores high in having…&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a C-like (and by extension Java-like) syntax that is still very familiar to almost all programmers (and those that don’t like that can still use CoffeeScript),&lt;/li&gt;
&lt;li&gt;native support in the browser,&lt;/li&gt;
&lt;li&gt;free (as in freedom and as in beer) tools and libraries.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Zorba is also distributed under the permissive Apache license, but it is not even a complete Application Server. Opa is available under the GNU Affero General Public License which &lt;a href=&quot;http://news.ycombinator.com/item?id=2925609&quot;&gt;requires&lt;/a&gt; any provider making use of it to open source his code as well. On the other hand, Node.js, Meteor, Derby and SocketStream are all available under the permissive MIT license which make them even more free (in the sense that you don’t have to contribute back to the community if you don’t want to).&lt;/p&gt;
&lt;p&gt;So if history is any indication, JavaScript might have an edge over the other contenders. What do you think? Which one (or what other language/tool set) will win?&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2012/06/16/Infinite-economic-growth,-space-and-population-growth</id>
      <title>Infinite economic growth, space and population growth</title>
      <updated>2012-06-16T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2012/06/16/Infinite-economic-growth,-space-and-population-growth" />
      
      <content type="html">&lt;h3&gt;Growth in energy consumption&lt;/h3&gt;
&lt;p&gt;If we pause to think for a moment, we all know that infinite growth of energy consumption is not possible on a finite planet. This fact can be mathematically proven, assuming the physical laws of thermo-dynamics that is. If you want to see the math, take a look at this &lt;a href=&quot;http://physics.ucsd.edu/do-the-math/2011/07/galactic-scale-energy/&quot;&gt;excellent blog post&lt;/a&gt; – at the current annual energy use growth rate (which has been quite steady for the last 350 years), within 400 years, we will need more energy than what the surface of the earth (including oceans) receives from the sun.&lt;/p&gt;
&lt;h3&gt;Economic growth&lt;/h3&gt;
&lt;p&gt;However, the conclusion that economic growth requires a growth in energy consumption cannot absolutely be proven but requires some common sense thinking. Besides the fact that economic growth has historically never been achieved without a raise in energy consumption (see this &lt;a href=&quot;http://www.bit.ly/K5C3Qg&quot;&gt;animation on Gapminder&lt;/a&gt;), it could be argued that by some means (e.g. hefty energy or carbon taxes), the economy could be forced to consume less energy (or at least to stop consume more), and be made to grow in the unphysical sector (e.g. services, information economy). It seems unlikely that politicians could ever push through such a regime because the moment something like that is proposed, everybody starts shouting that higher energy prices are bad for ‘the economy’ and we wouldn’t want to risk losing jobs, would we? But even if such a regime were enforced, we would wind up in a pretty strange world were the unphysical sector would dominate the economy and the prices for physical goods eventually became almost zero relative to the whole economic production und thus relative to a person’s income. So food (and all other physical resources) would become so cheap for all the people working in the unphyiscal sector, that it would basically be free. (See the &lt;a href=&quot;http://physics.ucsd.edu/do-the-math/2011/07/can-economic-growth-last/&quot;&gt;argument in more detail&lt;/a&gt;.) I cannot imagine such a world becoming reality, can you? So what that leaves us with is that infinite economic growth implies infinite growth in energy consumption which is impossible on a finite planet.&lt;/p&gt;
&lt;h3&gt;Space&lt;/h3&gt;
&lt;p&gt;While expanding into space would buy us some more time, the mathematics of exponentially increasing energy consumption would not even work out in space (see this already mentioned &lt;a href=&quot;http://physics.ucsd.edu/do-the-math/2011/07/galactic-scale-energy/&quot;&gt;blog post&lt;/a&gt;). Additionally, sending energy or physical resources from space down to earth, would only put additional strain on the environment and climate of our small planet. Mind you, I’m all for going to space. But not in order to retain growth (that’s quite impossible in the long run), but simply in order to learn more about our universe as well as to put humanity’s eggs in one than more basket, should one or another catastrophy make our home planet unlivable (think nuclear/chemical war, climate change, major asteroid/meteroid impact, etc). Unfortunately, the political will in the US and Europe to build a permanent presence in &lt;a href=&quot;http://thearchdruidreport.blogspot.com/2011/08/elegy-for-age-of-space.html&quot;&gt;space is dwindling&lt;/a&gt; (the US has even lost its capability to ship astronauts to the International Space Station, momentarily relying on Russia for that). So our hopes must rest on &lt;a href=&quot;http://en.wikipedia.org/wiki/Private_spaceflight#Private_spaceflight_companies&quot;&gt;private companies&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Chinese_space_program&quot;&gt;China&lt;/a&gt; or &lt;a href=&quot;http://www.freesoftwaremagazine.com/articles/free_matter_economy_7&quot;&gt;Open Source ventures&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Population growth&lt;/h3&gt;
&lt;p&gt;When you start talking about infinite growth on a finite planet, people often mention population growth. While it is undoubtedly true that infinite population growth on a finite planet is just as impossible as infinite economic growth, I think it is morally quite something different to ask families all over the world to stop having more babies than to ask the drivers of economic growth to stop making more profits. We know that it easier for the economy to grow when population increases and easier to degrow when population would dwindle. But there are plenty of examples of countries having positive economic growth while negative population growth (e.g. Eastern European states in the early nineties) as well as countries being in a recession while still having population growth (e.g. Sub-Saharan African states). Meanwhile, the majority of industrialized countries have a population growth rate of less than one percent while often retaining economic growth rates of more than two percent. (Again, have a look at this &lt;a href=&quot;http://www.bit.ly/L8u7Lg&quot;&gt;animation on Gapminder&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;In a future post I’ll look at the drivers of economic growth…&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2012/07/08/Haskell,-XQuery,-JavaScript-or-Opa-for-web-development</id>
      <title>Haskell, XQuery, JavaScript or Opa for web development</title>
      <updated>2012-07-08T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2012/07/08/Haskell,-XQuery,-JavaScript-or-Opa-for-web-development" />
      
      <content type="html">&lt;p&gt;This is a follow up on a previous post of mine, &lt;a href=&quot;http://mb2100.wordpress.com/2012/05/19/xquery-node-js-and-opa-which-is-the-new-java-of-web-development/&quot; title=&quot;XQuery, Node.js and Opa – which is the “new Java” of web development?&quot;&gt;XQuery, Node.js and Opa – which is the “new Java” of web development?&lt;/a&gt;. So here comes the table…&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Haskell&lt;/th&gt;
&lt;th&gt;XQuery&lt;/th&gt;
&lt;th&gt;JavaScript&lt;/th&gt;
&lt;th&gt;Opa&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Purely functional&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;as pure as it gets&lt;/td&gt;
&lt;td&gt;not so pure but mostly functional&lt;/td&gt;
&lt;td&gt;cumbersome to write functional code&lt;/td&gt;
&lt;td&gt;not pure but functional&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Statically typed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;integrates well with a database&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;with RDMSs (via &lt;a href=&quot;http://trac.haskell.org/haskelldb&quot;&gt;HaskellDB&lt;/a&gt;) and with a native Haskell store called &lt;a href=&quot;http://happstack.com/docs/crashcourse/AcidState.html&quot;&gt;acid-state&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;with XML-DBs&lt;/td&gt;
&lt;td&gt;with MongoDB or CouchDB&lt;/td&gt;
&lt;td&gt;with MongoDB or CouchDB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Web server&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;good&lt;/td&gt;
&lt;td&gt;good, e.g. &lt;a href=&quot;http://28msec.com&quot;&gt;Sausalito&lt;/a&gt; or &lt;a href=&quot;http://exist-db.org&quot;&gt;eXist&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;e.g. Node.js&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Web client (browser)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.haskell.org/haskellwiki/The_JavaScript_Problem&quot;&gt;experimental Haskell to JavaScript compilers&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.xqib.org&quot;&gt;experimental, see XQuery in the Browser&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;great (native)&lt;/td&gt;
&lt;td&gt;good (compiles to JavaScript)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GUI code executed seamlessly on client and server&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes, using &lt;a href=&quot;http://meteor.com&quot;&gt;Meteor&lt;/a&gt; or &lt;a href=&quot;http://derbyjs.com&quot;&gt;Derby&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;yes, integrated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Templating system&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yes, e.g. HStringTemplate&lt;/td&gt;
&lt;td&gt;not that I know of&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://handlebarsjs.com/&quot;&gt;yes, e.g. Handlebars&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Parallelism and distribution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;wide range of facilities for parallelism, maybe less distribution on multiple servers?&lt;/td&gt;
&lt;td&gt;current implementations spawn a new process for each request, inside that no parallelism afaik&lt;/td&gt;
&lt;td&gt;requests handled by the Node.js event loop which is non-blocking but unfair and starving. Inside WebSockets can be used&lt;/td&gt;
&lt;td&gt;uses Node.js, but automates distribution&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;… and now some explanations. Keep in mind that these are my research notes, I’m no expert (yet ;)).&lt;/p&gt;
&lt;p&gt;This started when I was thinking how nice a language Haskell was, &lt;strong&gt;purely functional&lt;/strong&gt;, monads, lazy evaluation and a rich &lt;strong&gt;static type system&lt;/strong&gt;. What more can you ask? Going from top to bottom in the table, unfortunately Haskell doesn’t integrate that well with NoSQL &lt;strong&gt;databases&lt;/strong&gt; as XQuery and JavaScript do with XML databases and MongoDB respectively. When you have to use a different language to query your database than what you use for the application tier, you have an impedance mismatch: you have to convert all the data back and forth and have to think in different ways depending on what tier you’re on as well as having to decide what should be handled in what tier. A similar impedance mismatch arises when you have to use a different language on the &lt;strong&gt;client-side&lt;/strong&gt; (i.e. the browser where we’re stuck with JavaScript) and on the server side. Ideally, you write your &lt;strong&gt;GUI code&lt;/strong&gt; once and it is transparently executed either on the server (upon the initial page load) or on the client (upon further navigation by the user). To pull this off, it seems to help a lot to have a &lt;strong&gt;templating system&lt;/strong&gt; which also separates presentation and computation/business logic. Finally, it would be nice if you could easily (and without introducing hard to find errors) &lt;strong&gt;parallelize&lt;/strong&gt; your code to run on multiple cores of a machine as well as distribute it to run on a cloud. Maybe I’ll have to look at Clojure or Erlang for that as well.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://opalang.org&quot;&gt;Opa&lt;/a&gt; seems to do a lot of things right, the question is how it fares in practice and also how open its application stack really is. For Haskell, we’ll have to wait until it compiles properly to JavaScript, and I’ll have to look at whether there is a database that performs and integrates well with Haskell, otherwise it seems to rule (except that it’s hard to learn). XQuery seems well suited for large amounts of XML data and JavaScript is pretty easy to learn, so it might become the &lt;a href=&quot;http://mathias-biilmann.net/posts/2011/10/is-haskell-the-cure&quot;&gt;new (concurrent) PHP&lt;/a&gt;. So, we’ll see… ;)&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2012/07/17/On-optimism,-being-wrong-and-truth</id>
      <title>On optimism, being wrong and truth</title>
      <updated>2012-07-17T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2012/07/17/On-optimism,-being-wrong-and-truth" />
      
      <content type="html">&lt;p&gt;A very good TED Talk by &lt;a href=&quot;http://www.ted.com/talks/tali_sharot_the_optimism_bias.html&quot;&gt;Tali Sharot on The optimism bias&lt;/a&gt; tells us something many of us have known (or shall we say suspected) already for a long time: the brains of healthy (non-depressed) people are fundamentally tilted towards optimism. For example, even when told that 40% of all marriages break, newly married people still don’t think there is a possibility they’ll get divorced. Likewise we underestimate the likelihood that bad things will happen to us personally. Sharot suggests that when doing financial budgets or when in dangerous situations, we should remember that we have this innate bias and calculatingly adjust for it. But most of the time, the human optimism bias is a good thing. Otherwise we would never dare to venture into anything new or risky.&lt;/p&gt;
&lt;p&gt;The flipside of all this optimism is obviously that we always think we’re right. There is a great TED Talk by &lt;a href=&quot;http://www.ted.com/talks/kathryn_schulz_on_being_wrong.html&quot;&gt;Kathryn Schulz: On being wrong&lt;/a&gt;. We will do almost anything to avoid having that nasty feeling creep up on us when we realize we were wrong. When somebody disagrees with us, we rather think that he or she either:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;doesn’t have the same information as we do,&lt;/li&gt;
&lt;li&gt;is plain stupid, or if neither of those apply,&lt;/li&gt;
&lt;li&gt;that he’s plain evil.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Rather seldom the thought crosses our minds that we ourselves might be wrong. Or that different people have simply different models of the world that they think in and in which they integrate new information, and that there might be a multitude of valid worldviews. So we should pause more often and think about all the complexities of our world, and allow ourselves to recognize that we may not know, or that we may be wrong.&lt;/p&gt;
&lt;p&gt;To the smart fellow who chips in now and says we should just abide to the scientific method and reason objectively: 1) objectivity does not exist, see &lt;a href=&quot;http://en.wikipedia.org/wiki/Intersubjectivity&quot;&gt;intersubjectivity&lt;/a&gt;. 2) read the closing words of this unsettling &lt;a href=&quot;http://www.newyorker.com/reporting/2010/12/13/101213fa_fact_lehrer?currentPage=all&quot;&gt;article by Jonah Lehrer in The New Yorker&lt;/a&gt; about the ‘decline effect’ when trying to reproduce the results of scientific studies in fields such as medicine or psychology.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Although many scientific ideas generate conflicting results and suffer from falling effect sizes, they continue to get cited in the textbooks and drive standard medical practice. Why? Because these ideas seem true. Because they make sense. Because we can’t bear to let them go. And this is why the decline effect is so troubling. Not because it reveals the human fallibility of science, in which data are tweaked and beliefs shape perceptions. (Such shortcomings aren’t surprising, at least for scientists.) And not because it reveals that many of our most exciting theories are fleeting fads and will soon be rejected. (That idea has been around since Thomas Kuhn.) The decline effect is troubling because it reminds us how difficult it is to prove anything. We like to pretend that our experiments define the truth for us. But that’s often not the case. Just because an idea is true doesn’t mean it can be proved. And just because an idea can be proved doesn’t mean it’s true. When the experiments are done, we still have to choose what to believe.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While I always say that it’s problematic to apply the term “prove” or “proved” to anything other than pure mathematics (in science, theories can only be substantiated or falsified), I agree with the point being made. In anything that involves living beings (as opposed to e.g. physics or chemistry), interactions pretty quickly become so complex that it is hard to tell anything with certainty. That doesn’t mean that the scientific method might not be the best (or shall we say one very good) way to approach these problems as well. But we should keep in mind that just because some theory has been substantiated by a scientific study or even two, that doesn’t mean that it’s the absolute truth.&lt;/p&gt;
&lt;p&gt;So the bottom line is that it is good to question things every once in a while, to remember that we actually know pretty little, to remember that we’re wrong way more often than we think. And to really consider other people’s worldviews and try to learn from them. But at some point, if you want to stay sane, you have to start believing in something again. How could you ever start a venture or bring any change to the world without believing in it in the first place? That’s when our innate optimism bias is essential. So that we do something – even when all the estimates say that the odds are low – to see whether it might be possible nonetheless. And sometimes it is. Just sometimes it is.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2012/07/20/On-uncertainty,-success-and-failure</id>
      <title>On uncertainty, success and failure</title>
      <updated>2012-07-20T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2012/07/20/On-uncertainty,-success-and-failure" />
      
      <content type="html">&lt;p&gt;The truth is, most things aren’t as predictable as we’ve come to believe them to be. There are just way too many factors at play, too many unknown variables, and too many variable we don’t even know that we would have to take into consideration.&lt;/p&gt;
&lt;p&gt;As noted in these two great TED talks by &lt;a href=&quot;http://www.ted.com/talks/alain_de_botton_a_kinder_gentler_philosophy_of_success.html&quot;&gt;Alain de Botton&lt;/a&gt; and &lt;a href=&quot;http://www.ted.com/talks/elizabeth_gilbert_on_genius.html&quot;&gt;Elizabeth Gilbert&lt;/a&gt;, our perception of who is responsible for our success has changed a lot. Before the modern era, poor people were called “unfortunates”, now they are simply “losers”, implying that it is mostly their own fault that they’re in this miserable situation they are now. Never before in history have we as humans believed so much in our own power to make informed decisions, to enforce our will on the world around us. Much was always believed to be in the hand of the gods or some other transcendent entity, but now it’s always our own fault when something doesn’t turn out the way it was supposed or planned to. In the &lt;em&gt;tragedy&lt;/em&gt;, the ancient greeks had even an entire genre of drama dedicated to letting the audience empathically follow the stories of people that were simply struck by very bad luck.&lt;/p&gt;
&lt;p&gt;It is true that the physical world at certain small scales is quite accurately modelled by sciences like physics and chemistry and that this has enabled us to achieve things our ancestor didn’t even dare to dream about. But the bigger and more complex things get, the harder to model them and be precise about them it is. Some might argue that intuition is better suited to the job then, but this is only sometimes true. Usually a combination of both, intuition and the scientific method, yields the best results. But still, usually things just don’t turn out exactly the way we predicted.&lt;/p&gt;
&lt;p&gt;So should we stop trying just because the outcome is not as predictable as we’ve been led to believe? No, of course not. I think we should try nonetheless. And maybe we are lucky and it works. And maybe we fail and try to do better next time. And we fail again. And again. And again. And then we succeed. (Or at least we’ve helped others to come closer to the solution.)&lt;/p&gt;
&lt;p&gt;Maybe rapid prototyping and short feedback loops help figuring out when we go into the wrong direction. And &lt;a href=&quot;http://en.wikipedia.org/wiki/Systems_thinking&quot;&gt;systems&lt;/a&gt;- and &lt;a href=&quot;http://en.wikipedia.org/wiki/Design_thinking&quot;&gt;design thinking&lt;/a&gt; help seeing the bigger picture.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2012/08/11/Gratitude-and-why-you-shouldnt-expect-things-to-just-work</id>
      <title>Gratitude and why you shouldn’t expect things to “just work”</title>
      <updated>2012-08-11T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2012/08/11/Gratitude-and-why-you-shouldnt-expect-things-to-just-work" />
      
      <content type="html">&lt;blockquote&gt;
&lt;p&gt;I’m utterly convinced that the key to lifelong success is the regular exercise of a single emotional muscle: gratitude.&lt;/p&gt;
&lt;p&gt;— &lt;a href=&quot;http://www.inc.com/geoffrey-james/gratitude-true-secret-to-success.html&quot;&gt;Geoffrey James&lt;/a&gt; (hat tip to &lt;a href=&quot;http://www.swiss-miss.com/2012/08/amen.html&quot;&gt;swissmiss&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Continuing the line of thought from my two &lt;a href=&quot;http://mb2100.wordpress.com/2012/07/17/on-optimism-being-wrong-and-truth/&quot; title=&quot;On optimism, being wrong and truth&quot;&gt;previous&lt;/a&gt; &lt;a href=&quot;http://mb2100.wordpress.com/2012/07/20/on-uncertainty-success-and-failure/&quot; title=&quot;On uncertainty, success and failure&quot;&gt;posts&lt;/a&gt;, it feels like many of us have (or at least I have) come to expect many things that probably shouldn’t be expected. What I mean is this conception of “how things are supposed to work”, and the believe that somewhere on this planet there are those “true professionals” that do things that way. That conception, that if you adhere to a couple of smart principles, including the scientific method, sound reasoning and a lot of grit, you eventually end up with a process that is “the right way”. And the thought that if you do things that way and do them thoroughly, you will eventually come up with a “proper” product, solution, or at least a satisfactory conclusion concerning that particular problem. And if you don’t, you are just doing it wrong, have too little experience and probably aren’t (yet) one of those “true professionals”.&lt;/p&gt;
&lt;p&gt;But what I’ve come to realize, is that those “true professionals” don’t really exist. That even the most professional experts, most of the time, have not much of a clue of what they are actually doing and are just making things up along the way. Of course, experience and formal training help, but even the best of us, most of the time, have to navigate a vast decision tree with simply too little information.&lt;/p&gt;
&lt;p&gt;So what’s that got to do with gratitude? Well, if you expect that things can, should and are done “the right way” (that is assuming you are not working with or using a product of complete idiots, or believe you are yourself one), then you expect things to “just work” in the “expected way”. If they don’t, you are disappointed. But what’s even worse: if they do, you just ignore the fact that it just worked, without ever feeling any gratitude. Simply because that’s what you were expecting all along, that things work the way they are supposed to. So however things turn out, either you get disappointed or don’t feel much at all.&lt;/p&gt;
&lt;p&gt;On the other hand, if you were to expect that things usually don’t “just work”, it is much easier to feel gratitude every time they actually do. And you will have a much happier life, giving you the power to tackle harder problems (not expecting to solve them on the first attempt).&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2012/08/16/Parallel-and-Concurrent-Programming-Models</id>
      <title>Parallel and Concurrent Programming Models</title>
      <updated>2012-08-16T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2012/08/16/Parallel-and-Concurrent-Programming-Models" />
      
      <content type="html">&lt;p&gt;This is a simple (non-exhaustive) categorization of different approaches for parallel and concurrent programming, inspired by &lt;a href=&quot;http://community.haskell.org/~simonmar/par-tutorial.pdf&quot;&gt;Parallel and Concurrent Programming in Haskell&lt;/a&gt; (PDF). They state that parallelism and concurrency are two solutions to two different problems (as do &lt;a href=&quot;http://existentialtype.wordpress.com/2011/03/17/parallelism-is-not-concurrency/&quot;&gt;others&lt;/a&gt;).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Parallelism (i.e. &lt;em&gt;data parallelism&lt;/em&gt;, is deterministic)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;static and dynamic &lt;a href=&quot;http://en.wikipedia.org/wiki/Loop_scheduling&quot;&gt;scheduling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;forking, yielding (directed graph of data flowing: &lt;a href=&quot;http://en.wikipedia.org/wiki/Dataflow_programming&quot;&gt;&lt;em&gt;dataflow parallelism&lt;/em&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Concurrency (i.e. threads or &lt;em&gt;task parallelism&lt;/em&gt;, is nondeterministic thus cannot be expressed in purely functional code)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;locking shared resources&lt;/li&gt;
&lt;li&gt;blocking/synchronous channels (e.g. &lt;a href=&quot;http://en.wikipedia.org/wiki/Communicating_sequential_processes&quot;&gt;CSP&lt;/a&gt;) and asynchronous message passing (e.g. Erlang)&lt;/li&gt;
&lt;li&gt;cancellation: asynchronous exceptions&lt;/li&gt;
&lt;li&gt;software transactional memory (&lt;a href=&quot;http://en.wikipedia.org/wiki/Software_transactional_memory&quot;&gt;STM&lt;/a&gt;), i.e. group code into atomic blocks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Instead of concurrency, event loops with callbacks (as in Node.js) can be used to solve the problem of multiple external agents interacting with each other.&lt;/p&gt;
&lt;p&gt;The paper also notes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In the world of concurrency and parallelism, there is good reason to believe that no one size fits all programming model for concurrency and parallelism exists, and so prematurely committing to one particular paradigm is likely to tilt the language towards favouring certain kinds of problem[s].&lt;br /&gt;
[...]&lt;br /&gt;
We might wonder whether the compiler could automatically parallelise programs for us. After all, it should be easier to do this in a pure functional language where the only dependencies between computations are data dependencies, and those are mostly perspicuous and thus readily analysed. In contrast, when effects are unrestricted, analysis of dependencies tends to be much harder, leading to greater approximation and a large degree of false dependencies. However, even in a language with only data dependencies, automatic parallelisation still suffers from an age-old problem: managing parallel tasks requires some bookkeeping relative to sequential execution and thus has an inherent overhead, so the size of the parallel tasks must be large enough to overcome the overhead. Analysing costs at compile time is hard, so one approach is to use runtime profiling to find tasks that are costly enough and can also be run in parallel, and feed this information back into the compiler. Even this, however, has not been terribly successful in practice [Harris and Singh]. Fully automatic parallelisation is still a pipe dream. However, the parallel programming models provided by Haskell do succeed in eliminating some mundane or error-prone aspects traditionally associated with parallel programming.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2013/01/26/Making-a-Dent-in-the-Universe</id>
      <title>Making a Dent in the Universe</title>
      <updated>2013-01-26T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2013/01/26/Making-a-Dent-in-the-Universe" />
      
      <content type="html">&lt;blockquote&gt;
&lt;p&gt;Leadership is the art of getting someone else to do something you want done because he wants to do it.&lt;/p&gt;
&lt;p&gt;— Dwight Eisenhower&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We all strive to make our &lt;a href=&quot;http://www.macworld.com/article/1162827/steve_jobs_making_a_dent_in_the_universe.html&quot;&gt;dent in the universe&lt;/a&gt;. And while too much concentrated power is certainly a bad thing, nobody wants to be entirely powerless.&lt;/p&gt;
&lt;p&gt;If power is the ability or capacity to influence the state of the world, then being able to influence the physical world (stones, trees, rivers) may be the primary form of power. The archetypal lone cowboy is always certain to have enough power to provide food for himself and defend himself. But influence over the physical part of our world is a rather crude form of power, compared to the ability to influence the social part of our world – people.&lt;/p&gt;
&lt;p&gt;Technology is usually primariliy considered in its capacity to influence the physical world (e.g. building a dam) rather than the social world. But since the invention of mass media technologies – starting with the printing press, then radio, television and now the internet – this has changed a lot. While not requiring all the same skills as mastering other kinds of technology, mastering a certain communications medium (e.g. writing books, blogs or filming) has become a very effective skill in influencing the world. Even more so in the highly connected and collaborative world we live in today.&lt;/p&gt;
&lt;p&gt;A very simple form of the ability to influence people is “getting them to do what you want them to”. There seem to be mainly two strategies to this end. Either, you convince them that your idea is so great that they voluntarily invest their time in its support, or you simply pay them to do so. Or you do both.&lt;/p&gt;
&lt;p&gt;In an industrialized society, where every year a larger part of the simple mechanical work can be done by machines, your are dependent upon motivated people that don’t simply execute what you paid them for, but actually understand and believe in your idea and want to actively be part of making it a reality. But in our current society, people also need money to get by.&lt;/p&gt;
&lt;p&gt;So you’d think convincing them of your idea and paying them at the same time would be the smartest thing to do. But alas, whenever you introduce money as a motivator, things get more complicated. The warm and fuzzy feeling people get when doing some good for free might fade, you have to decide whether to give some people more money than others, etc.&lt;/p&gt;
&lt;p&gt;So what do you do? It might very well be that either the state will provide a &lt;a href=&quot;http://en.wikipedia.org/wiki/Basic_income_guarantee&quot;&gt;basic income&lt;/a&gt; to all its citizens, or that companies will do so for their employees – as long as they seem to be doing something broadly in the interest of the company. In the meantime, you can hope to find or found a company doing something close to that, or roll your own and look for some crowd funding.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2013/06/12/iOS-7s-Redesign</id>
      <title>iOS 7′s Redesign</title>
      <updated>2013-06-12T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2013/06/12/iOS-7s-Redesign" />
      
      <content type="html">&lt;p&gt;When the iPhone debuted, it set the standard for a lot of things, among them the GUI of a touch-based mobile operating systems. But that was in 2007, and the design of iOS has gotten a bit stale and heavy by today’s standards. &lt;a href=&quot;http://www.theverge.com/2012/7/24/3177332/ia-oliver-reichenstein-writer-interview-good-design-is-invisible&quot;&gt;Some even say&lt;/a&gt; that “iOS is the Windows XP for mobile devices” – its familiarity is loved by so many that it’s going to be hard for Apple to make radical changes. But yesterday, Apple did just that: it introduced &lt;a href=&quot;http://www.apple.com/ios/ios7/#video&quot;&gt;iOS 7&lt;/a&gt; which finally brings a clean redesign of the whole GUI, while keeping all the elements at their familiar places. So, is it any good?&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;%7B%7Bsite.url%7D%7D/assets/2013-06-12-iOS-7/ios_7.png&quot; alt=&quot;iOS 7&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I don’t care much for the new App icons, the rounded corner radius is too large and the Safari icon in particular is just gross. Also, the default home-screen image is reminiscent of some 70s bling, which turns especially awful when seen through a translucent panel; fortunately that image can be swapped out by the user.&lt;/p&gt;
&lt;p&gt;But other than that, I like the redesign. It really shines in the Apps as well as the Notification and Control Centers: no visual clutter or heavy chrome, a smaller and crisper color palette, and carefully chosen whitespace and typography. The translucent navigation areas place them clearly on a layer above the content (when scrolling in Safari or playing a movie, they even slide unobtrusively out of sight). The Apps in turn are above the background image, on which the parallax effect is used to form a sort of three dimensional box to peek into.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;%7B%7Bsite.url%7D%7D/assets/2013-06-12-iOS-7/index_mail_posterframe.jpg&quot;&gt;&lt;img src=&quot;http://mb2100.files.wordpress.com/2013/06/index_mail_posterframe_2x.jpg?w=210&quot; alt=&quot;&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;%7B%7Bsite.url%7D%7D/assets/2013-06-12-iOS-7/index_airdrop_posterframe.jpg&quot;&gt;&lt;img src=&quot;http://mb2100.files.wordpress.com/2013/06/index_airdrop_posterframe_2x.jpg?w=210&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The new design is not “flat” (whatever that means), but it’s streamlined. And while removing visual clutter always comes at the risk of harming discoverability, I think iOS 7 didn’t go too far. Buttons may be gone, but the interaction elements are at the familiar consistent places and if it’s blue text (or in some Apps red, but always looks like a link) or a wireframe icon, the user knows it’s save to tab.&lt;/p&gt;
&lt;p&gt;Everyone should choose a better home-screen image, Apple fix the icons, and then iOS 7 is a solid foundation to improve upon.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2013/06/30/How-to-compare-people-or-even-nations</id>
      <title>How to compare people, or even nations?</title>
      <updated>2013-06-30T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2013/06/30/How-to-compare-people-or-even-nations" />
      
      <content type="html">&lt;p&gt;How should two different entities relate to each other?&lt;/p&gt;
&lt;p&gt;What do I mean by “entities”? People, organizations or even nations. And what do I mean with “different”? Obviously, that they are not the same, which implies that they are “unequal” in some way. What we think are the important ways to measure, to compare two entities, that’s what determines everything.&lt;/p&gt;
&lt;p&gt;Is it wealth? Is it happiness? Is it age? Is it intelligence or technological progress? Without considering the problem of how exactly to define those terms, comparing people or nations with each of these measures gives vastly different results. But irrespective of what measure is chosen, one entity is always inferior when compared to the other. When choosing to measure in “wealth”, a rich CEO or an industrialized nation is “higher up”, or “more advanced”, when compared to a lowly construction worker or a so-called developing nation. But when choosing to measure in “happiness”, it might just be the other way around.&lt;/p&gt;
&lt;p&gt;So, back to the question of how two entities should relate to each other, i.e. what nature their relationship should be of. Depending on the measure chosen to compare the two, there will always be inequality. Now, very often inequality is considered to be a negative phenomenon. It is used to point out that something is unevenly or unfairly distributed. But we wouldn’t want all people to be exactly equal to all the others, either. We wouldn’t want all nations, irrespective of the measure chosen, to be &lt;em&gt;the same&lt;/em&gt;: the same climate, the same food, the same population density, the same level of energy consumption.&lt;/p&gt;
&lt;p&gt;The key appears to be to rigorously define in which measure we want which entities to be equal, or at least to be more equal. And then demand for more equality in that measure. In some cases this may indeed be possible and even desirable. Although it is important to be aware that by choosing someone else’s measure, you invariably agree to play their game. As an example, by demanding “a career” (in the traditional work-a-lot-and-then-get-promoted-sense of the word), women agree to play the game of fighting for promotions. Alternatively (or at least additionally), they could demand less full-time stressing-out jobs for everyone.&lt;/p&gt;
&lt;p&gt;Either way, there are a hoist of cases where it isn’t straightforward at all to settle on a measure for comparison. For example, when choosing a country to live in (or a person to marry), you might want to consider both the wealth of the country (or person), and how happy the people in that country are (or how happy the person you’re going to marry is). (Probably among other factors.) So you might be tempted to set up an equation to determine the “ultimate value” of each scenario &lt;code&gt;p&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;value(p) := λ1*wealth(p) + λ2*happiness(p)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;where &lt;code&gt;λ1&lt;/code&gt; and &lt;code&gt;λ2&lt;/code&gt; are weighting factors you need to determine for yourself. For example, if you set both to 0.5, it means wealth and happiness are equally important to you.&lt;/p&gt;
&lt;p&gt;It may be worth to point out that by combining the measure of wealth and happiness into one, what we have done in effect, is simply created yet another measure. I’m sure there are some economists or psychologists that have come up with a model like that already.&lt;/p&gt;
&lt;p&gt;But now there are many more combinations of how very different entities can end up having the same value. Like a person being very rich but totally unhappy having the same “value” in that measure as one being very poor but extremely happy.&lt;/p&gt;
&lt;p&gt;In order to form a balanced and constructive relationship where both entities can learn from each other, it seems important to choose the weights &lt;code&gt;λi&lt;/code&gt; such that the value of both entities ends up being equal. That way, neither one appears more advanced in any absolute sense, and neither one is being looked down upon by the other.&lt;/p&gt;
&lt;p&gt;It is easy to make the mistake to choose large weights for precisely those measures where you yourself already score high. That way, you’ll never be the loser. But it has the opposite effect as well: without noticing, you will end up behaving like a hegemonic empire. And both entities lose out.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2013/07/24/John-Searle-wrongs-Computer-Programs-by-denying-them-the-Possibility-for-Consciousness</id>
      <title>John Searle wrongs Computer Programs by denying them the Possibility for Consciousness</title>
      <updated>2013-07-24T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2013/07/24/John-Searle-wrongs-Computer-Programs-by-denying-them-the-Possibility-for-Consciousness" />
      
      <content type="html">&lt;p&gt;This is a &lt;a href=&quot;http://www.ted.com/talks/john_searle_our_shared_condition_consciousness.html&quot;&gt;great talk&lt;/a&gt;, go watch it first. I agree with everything John Searle says, except for his point that a computer program without special hardware can never claim to be conscious.&lt;/p&gt;
&lt;p&gt;At 5:10, he says: “All of our conscious states, without exception, are caused by lower-level [...] processes in the brain, and they are realized in the brain as higher-level or system features.” He continues: “[consciousness is] the condition that the system is in.” And I agree. But why does he think the same cannot be true for computer programs? Isn’t software “the condition (the state of the bits) that the system (the hardware) is in”?&lt;/p&gt;
&lt;p&gt;At 11:00 he goes on claiming that a computation (i.e. manipulating symbols) is only about syntax, while consciousness is also about semantics. It seems that he defines semantics as what arises when symbols are interpreted by consciousness, and I’m fine with that. This however, leads to a circular argumentation when claiming that a computer program cannot have consciousness since it doesn’t possess any intrinsic semantics. Let’s say that semantics arise when symbols are interpreted by a consciousness. Who is to say that a complex computer program cannot do that interpretation just as validly as a human mind can? In a way, he wrongs the computer program exactly in the same way as the materialists wrong him when they tell him: “we’ve done a study of you, and we’re convinced you are not conscious, you are a very cleverly constructed robot.” The computer program might reply, just as he does: “Descartes was right: you cannot doubt the existence of your own consciousness.”&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2013/11/11/Obduction</id>
      <title>New game by Myst-creators: Obduction</title>
      <updated>2013-11-11T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2013/11/11/Obduction" />
      
      <content type="html">&lt;p&gt;Yay! A new game by the creators of Myst and Riven. I loved those, so I’m quite excited. You too? Then please support their &lt;a href=&quot;http://www.kickstarter.com/projects/cyaninc/obduction/&quot;&gt;Kickstarter&lt;/a&gt; and share. Only 4 days to go! (And if you haven’t played Myst and Riven, do yourself a favour and do so!)&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2013/12/07/Working-for-Donations</id>
      <title>Working for Donations</title>
      <updated>2013-12-07T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2013/12/07/Working-for-Donations" />
      
      <content type="html">&lt;p&gt;Let me start by saying that I really like the premise of effective altruism. Namely:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I believe that logical and evidence-based reasoning is the worst form of thinking, except for all the others (to paraphrase Winston Churchill). So yes, being &lt;em&gt;effective&lt;/em&gt; is great.&lt;/li&gt;
&lt;li&gt;And about the &lt;em&gt;altruism&lt;/em&gt; part: I think there is just no way to be truly human and to have a fulfilling life without being altruistic.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But as always, the devil is in the detail. And as far as I know, a seizable part of the effective altruism movement is about making donations. So let me talk about that in this blog post.&lt;/p&gt;
&lt;p&gt;The movement is insofar critical of charities in that it demands the donations to be as effective as possible. Often, the metric of “number of human lives saved” is mentioned, or the more fuzzy metric of “reducing suffering”. Let me be clear, everything else being equal, I fully support donating to charities. But I cannot help but wonder if it wouldn’t be even more effective to forego donations altogether, and take a more radical approach: changing the system.&lt;/p&gt;
&lt;p&gt;Let me pick the example Peter Singer mentioned in &lt;a href=&quot;http://www.ted.com/talks/peter_singer_the_why_and_how_of_effective_altruism.html#584405&quot;&gt;his TED talk&lt;/a&gt; of a guy called Matt Weiger who’s gone to Wall Street and is now giving a six-figure sum to charities. I think it might be entirely possible that his investments for the bank (or hedge fund or whatever financial institution it is he’s working for) caused considerably more harm to a lot people in Africa than what he’s able to recoup with his ~$0.5M donations. Think about it, how much money did the bank earn through his actions? Maybe $10M? That doesn’t seem too unrealistic if you google “profit per employee”. And how much of that profit was achieved through speculation on food (raising food prices when people are most in need), investments in companies that make a profit by depleting the planet’s natural resources (destroying the livelihood of small farmers and future generations all over the world)? So is Matt “actually trying” or only “pretending to try” to improve the world?&lt;/p&gt;
&lt;p&gt;The truth is, we don’t know Matt’s case that well. But my point is that I’m far from convinced that working in the system and then donating some of that money to (effective) charities is the most effective way to be altruistic. I’m not into conspiracy theories and we can debate what exactly “the system” is and how much “the market” or “the state” is to blame for the current state of affairs.&lt;/p&gt;
&lt;p&gt;However, I think we can all agree on that the current global capitalist system – which is basically supported by every nation state on earth – favours rising inequalities and is responsible for us being on the best course to wrack the planet. I’m not denying that capitalism has brought major improvements as well. I’m not against modernity or think the industrialisation was a mistake. The western world, however, has been fooling around with its newfound powers for the last two centuries. But now it’s time for humanity to use those powers to create a fair and sustainable world without unnecessary suffering – after all, it’s no longer a primarily a technological problem, but a socio-economical one. It may be the first time in human history we’re technologically capable of doing so – but if we don’t hurry, it might have been the last time.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2013/12/22/The-Top-Seven-Movies-I-watched-in-2013</id>
      <title>The Top Seven Movies I watched in 2013</title>
      <updated>2013-12-22T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2013/12/22/The-Top-Seven-Movies-I-watched-in-2013" />
      
      <content type="html">&lt;p&gt;The top seven movies I watched this year, in no particular order.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;http://content9.flixster.com/movie/11/17/32/11173207_det.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.rottentomatoes.com/m/the_great_beauty/&quot;&gt;La grande bellezza&lt;/a&gt; (The Great Beauty, 2013) is an homage to Fellini’s “La Dolce Vita”, an homage to Rome and its celeb- and nightlife circus. Beautifully shot and set to intoxicating dance tunes as well as timeless classical music, the movie follows a disillusioned 65 year old author (who wrote one bestseller and stopped after that) in his search for the true beauty in his life.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;http://content7.flixster.com/movie/11/16/70/11167005_det.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;There are few movies that are as surreal yet at the same time ring as true as &lt;a href=&quot;http://www.rottentomatoes.com/m/holy_motors/&quot;&gt;Holy Motors&lt;/a&gt; (2012). (Maybe Terry Gilliam’s &lt;a href=&quot;http://www.rottentomatoes.com/m/1003033-brazil/&quot;&gt;Brazil&lt;/a&gt; comes close.) I guess at the core of Holy Motors lies the question after why we get up every morning and go to work and how much we should give for “the beauty of the act”.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;http://content6.flixster.com/movie/11/15/72/11157220_det.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.rottentomatoes.com/m/the_tree_of_life_2011/&quot;&gt;The Tree of Life&lt;/a&gt; (2011) consists of scenes in Jack’s (Sean Penn) adult live, memories of his childhood in the 1950’s Midwest with his stern father (Brad Pitt) and kind mother (Jessica Chastain), as well as lots of footage of nature and the beginning of the universe – all set to mesmerizing music and filmed with an ever-searching camera, posing implicit questions of spiritual nature. If you liked Kubrick’s 2001, you’ll most probably like The Tree of Life.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;http://content9.flixster.com/movie/11/16/38/11163891_det.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Set in London after World War II, &lt;a href=&quot;http://www.rottentomatoes.com/m/the_deep_blue_sea/&quot;&gt;The Deep Blue Sea&lt;/a&gt; (2011) is an intimate portrait of Hester (Rachel Weisz), a woman who breaks out of a passionless marriage to pursue an erotic relationship with Freddie, an energetic but troubled former Royal Air Force pilot. We experience first-hand how Hester loses her heart, and also her head, so fully that when she realizes that she and Freddie aren’t compatible, it is almost too late.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;http://content7.flixster.com/movie/11/17/41/11174169_det.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.rottentomatoes.com/m/before_midnight_2013/&quot;&gt;Before Midnight&lt;/a&gt; (2013) is the third part in the trilogy started with Before Sunrise (1995) and Before Sunset (2004). Each shows us one night (or day) in the relationship of Jesse (Ethan Hawke) and Céline (Julie Delpy) with nine years passing in between, just as the actors have also aged nine years between the making of each movie. The chemistry and the long dialogues are as great as ever. And even though the couple is married now, often Jesse still seems beautifully amazed of Céline and that she is in fact his. It’s simple: if you liked the first two, you’ll like the third part in the trilogy as well.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;http://content7.flixster.com/movie/11/17/12/11171245_det.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.rottentomatoes.com/m/le_passe/&quot;&gt;The Past&lt;/a&gt; (Le Passé, 2013) is the story of an Iranian man who reunites with his estranged wife in Paris to finalize their divorce. It’s a powerful movie, but the number one reason to see it is definitely the dignified performance of Ali Mosaffa. (Disclaimer: I haven’t yet watched &lt;a href=&quot;http://www.rottentomatoes.com/m/a_separation_2011/&quot;&gt;A Separation&lt;/a&gt;, the previous film by Asghar Farhadi, which some say is even better.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;http://content6.flixster.com/movie/11/17/11/11171168_det.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;http://www.rottentomatoes.com/m/violet_and_daisy/&quot;&gt;Violet &amp;amp; Daisy&lt;/a&gt; (2011), two teenage assassins accept what they think will be a quick-and-easy job, until they end up in a heartfelt conversation with their target. While the film is neat, it’s the jaunty performances and the chemistry between Saoirse Ronan and Alexis Bledel that make it a pleasure to watch.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2014/03/23/Snowpiercer-as-an-Allegory</id>
      <title>“Snowpiercer” as an Allegory</title>
      <updated>2014-03-23T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2014/03/23/Snowpiercer-as-an-Allegory" />
      
      <content type="html">&lt;p&gt;&lt;img src=&quot;http://twitchfilm.com/assets_c/2013/08/rsz_2013_-_snowpiercer_still_1-thumb-630xauto-40884.jpg&quot; alt=&quot;Snowpiercer still&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Warning: Heavy Spoilers! You should really go and watch the excellent movie first!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bong Joon-ho’s 2013 film &lt;em&gt;Snowpiercer&lt;/em&gt; must be read as an allegory. While it might be plausible for Earth to enter a new Ice Age because of geo-engineering gone awry (which was actually meant to combat global warming), there is just no logical explanation for why the remaining few humans would go around the planet on a train at breakneck speed instead of just parking it at a nice station—except for the fact that it makes a nice allegory: “The train is the world”, as voiced by our reluctant hero. The world is complete with the underclass at the tail, specialized production sections in the middle (a prison wagon, a garden wagon, an aquarium wagon, a school/propaganda wagon, a sushi-bar wagon, a sauna, etc.), and a self-absorbed elite towards the head.&lt;/p&gt;
&lt;p&gt;Yet at the very front of the train is the (economic?) engine pulling the whole thing—the ultimate objective of our revolting party’s bloody struggle for freedom and/or control. After wagon for wagon has been taken, the remaining three revolutionaries finally arrive at the engine where the infamous dictator and designer of the train invites our protagonist to dinner and explains in a &lt;a href=&quot;https://en.wikipedia.org/wiki/Malthusianism&quot;&gt;malthusian&lt;/a&gt; argument that this and all preceding revolutions were planned all along to periodically kill off the over-boarding population of the train. Furthermore, he offers that his job as the lonely head of the train is no easier than the workers struggle for survival at the tail and that ultimately all parts of society need to work together to form the functioning whole. Finally, as he’s an aging dictator, he wants our protagonist to take his place.&lt;/p&gt;
&lt;p&gt;Understandably confused at first, our protagonist finally declines the offer of taking control at the front, and instead chooses freedom for everybody by helping the two other remaining revolutionaries (a girl and her father) to blow up a door at the side of the train. The explosion causes an avalanche, derailing and crushing the entire train and—literally—train-wrecking everything. It appears the only survivors crawling out under the wreck and stumbling innocently out into the endless snow are a young boy and the teenage revolutionary girl.&lt;/p&gt;
&lt;p&gt;As eloquently expressed by &lt;a href=&quot;http://acidcinema.wordpress.com/2013/12/19/review-snowpiercer-2013/&quot;&gt;Acid Cinema&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;While movies like &lt;em&gt;In Time&lt;/em&gt; or &lt;em&gt;Elysium&lt;/em&gt; admit that the system is broken, they also offer reassurances that it can be fixed (in &lt;em&gt;Elysium&lt;/em&gt;’s case with the laughably literal push of a button). &lt;em&gt;Snowpiercer&lt;/em&gt;, on the other hand, argues that perhaps the system is broken beyond repair, that the only way to fix it would be to scrap everything and just start over.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While starting anew with a clean slate is appealing on an emotional level, personally I still prefer to believe that the system can be fixed without destroying everything.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2014/04/28/Good-Design</id>
      <title>Good Design</title>
      <updated>2014-04-28T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2014/04/28/Good-Design" />
      
      <content type="html">&lt;p&gt;Good design is when you see and feel that the work was done properly. “Properly” may be an old-fashioned word, yet it describes best what I consider good design: the result of, and the process of applying the old-fashioned work-ethic of careful craftsmanship to the creation of industrially produced (or post-industrially, like virtual or 3D-printed) artefacts.&lt;/p&gt;
&lt;p&gt;Bad design is almost always the result of a thoughtlessness that unfortunately has become all too common. That’s why small details give away bad design so quickly. Meanwhile, the longer you consider the tiny details of a well-designed artefact, the stronger your appreciation becomes for the thinking, problem anticipation and problem solving that went into (and ultimately is) the design.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2014/05/11/Why-we-need-an-unconditional-basic-income-stagnating-economic-growth,-automation-and-commons-based-peer-production</id>
      <title>Why we need an unconditional basic income – stagnating economic growth, automation and commons-based peer production</title>
      <updated>2014-05-11T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2014/05/11/Why-we-need-an-unconditional-basic-income-stagnating-economic-growth,-automation-and-commons-based-peer-production" />
      
      <content type="html">&lt;p&gt;With this post I’m going to try to piece a few things together that I’ve been thinking about in recent years. If you’re not familiar with one argument or line of thought: please follow the links!&lt;/p&gt;
&lt;p&gt;The underlying argument is that today’s industrialized societies are finally entering a &lt;a href=&quot;http://en.wikipedia.org/wiki/Post-industrial_society&quot;&gt;post-industrial&lt;/a&gt; era (and maybe have been in the process of entering it since the 1980s or 90s). This means that the industrial era in the Western world was a 200-year period, roughly ranging from 1800 to 2000. So while current developing and newly industrialized countries may be in the same situation in the near future, a different cultural and historical background, as well as a changing environment, may very well result in a drastically different situation for each of them. That’s why I will limit this discussion to today’s industrialized societies. (For a convincing look at our geo-political future, see Martin Jacques’s &lt;a href=&quot;http://en.wikipedia.org/wiki/When_China_Rules_the_World&quot;&gt;When China Rules the World: The End of the Western World and the Birth of a New Global Order&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;There are three major trends in today’s industrialized societies that are relevant here:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Economic growth is relatively easy to achieve when industrialization has successfully kicked off, yet the country is still in need of building major infrastructure and accommodation, and its population is in the process of lifting itself out of poverty (e.g. today’s China or 1900’s Europe). Once this has been achieved—even as the &lt;a href=&quot;http://en.wikipedia.org/wiki/Three-sector_hypothesis&quot;&gt;tertiary service sector&lt;/a&gt; increases to account for the lion’s share of the economy—it doesn’t really become easier to decouple economic growth from the growth in the consumption of physical resources and energy.&lt;/p&gt;
&lt;p&gt;As both John Maynard &lt;a href=&quot;http://www.newyorker.com/arts/critics/books/2014/05/26/140526crbo_books_kolbert&quot;&gt;Keynes&lt;/a&gt; and Adam &lt;a href=&quot;http://www.global-briefing.org/2012/07/the-steady-state-economy-life-after-growth/&quot;&gt;Smith&lt;/a&gt; believed, economic growth will taper off at some point. In fact, &lt;a href=&quot;http://mb2100.wordpress.com/2012/06/16/infinite-economic-growth-space-and-population-growth/&quot;&gt;infinite economic growth is an impossibility&lt;/a&gt;. (Karl Marx also hoped to escape capital’s growth imperative to end up in a system beyond class, money and even the state. This hypothetic system was what he called &lt;a href=&quot;https://en.wikipedia.org/wiki/Communism&quot;&gt;Communism&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;The current system, which is built on &lt;a href=&quot;http://www.theguardian.com/commentisfree/2014/mar/18/truth-money-iou-bank-of-england-austerity&quot;&gt;interest&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Debt:_The_First_5000_Years&quot;&gt;debt&lt;/a&gt;, cannot function without growth. Currently, commercial banks loan money into existence by loaning it from the central bank at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Prime_rate&quot;&gt;prime lending rate&lt;/a&gt;. Then they pass the money on by lending it at a slightly higher interest rate to private and public borrowers (the difference is their profit). Now, a simple thought: if all borrowers payed back their loans plus interest, they would pay back more money than was ever loaned to them. Where does all that new money come from? An impossibility! There are only two solutions: either some of the debtors don’t pay back their loan and go into bankruptcy, or they have to take up even more loans to pay back the old ones. While the pressure of bankruptcy always looms over everyone, to keep this system going relatively smoothly, it is preferable to simply loan ever more money into existence at an exponential rate. So while we continue to cling to the current system, we have no choice but to continue growing. If we suddenly stop growth, the whole Ponzi scheme comes tumbling down, we have an economic crash and unemployment skyrockets. And nobody want to be unemployed, right? It’s a catch-22 that an unconditional basic income can help to break.&lt;/p&gt;
&lt;p&gt;Meanwhile, politicians and economists see no alternative but work to prolong economic growth on a finite planet by introducing consumerism, throw-away society, &lt;a href=&quot;http://en.wikipedia.org/wiki/Financialization&quot;&gt;financialization&lt;/a&gt;, &lt;a href=&quot;http://arstechnica.com/tech-policy/2009/07/it-sounds-like-something/&quot;&gt;high-frequency trading&lt;/a&gt; and the economization of public and everyday-life in general. Examples of economization include transforming ever more services that used to be non-monetary or public into paid products: e.g. professionalization of the care for the elderly and children, privatization of public services, individualization and reduction of reliance on neighborhood, friends and family. All of which helps continue the &lt;a href=&quot;http://www.huffingtonpost.com/dave-pruett/the-myth-of-exponential-growth_b_4037025.html&quot;&gt;exponential growth of GDP&lt;/a&gt;. But soon, there will be no things left that are still free or voluntarily organized that we can turn into products and sell back and forth to each other. At some point, industrialized societies will have to accept the inevitable and say goodbye to economic growth.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Automation in factories has been key to rising efficiencies ever since the industrial revolution and a steadily growing amount of tasks have in fact been automated. And while &lt;a href=&quot;http://www.newyorker.com/online/blogs/elements/2014/01/the-new-york-times-artificial-intelligence-hype-machine.html&quot;&gt;hyped&lt;/a&gt; for the first time in the 80s, artificial intelligence (or at least machine learning) has &lt;a href=&quot;http://www.newyorker.com/online/blogs/elements/2013/10/why-we-should-think-about-the-threat-of-artificial-intelligence.html&quot;&gt;actually been making steady progress&lt;/a&gt; and is now taking over tasks that were previously thought impossible to do by machines. While &lt;a href=&quot;http://www.newyorker.com/reporting/2013/11/25/131125fa_fact_bilger&quot;&gt;Google’s self-driving car&lt;/a&gt; is still in the works, mining trucks already &lt;a href=&quot;https://medium.com/war-is-boring/bed4b2b5a70a&quot;&gt;drive themselves in the Australian desert&lt;/a&gt;. Meanwhile, &lt;a href=&quot;http://www.technologyreview.com/view/519241/report-suggests-nearly-half-of-us-jobs-are-vulnerable-to-computerization/&quot;&gt;Oxford researchers say that 45 percent of America’s occupations will be automated within the next 20 years.&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;And finally, there is the rise of the Internet, and with it the rise of &lt;a href=&quot;http://www.technologyreview.com/view/527171/working-together-in-a-networked-economy/&quot;&gt;commons-based peer productions&lt;/a&gt; like Wikipedia and free and open source software, where lots of volunteers work together, in an open process without traditional hierarchical organization, and the product of their labour is shared and licensed to be freely accessible to everyone. Here’s the story in a nutshell:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;A computer in every home.&lt;/li&gt;
&lt;li&gt;Every computer connected through the internet to every other computer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What sounds so simple is actually the setup for a revolution—one that has great implications on the economy as well as on society as a whole.&lt;/p&gt;
&lt;p&gt;Computers greatly influence our daily lives. While they can run proprietary software that big companies develop behind closed doors, there exists also a wide range of software which is open for everyone to examine and which everybody is free to copy, modify and redistribute. This kind of software is called free and open source software. The free and open source software developing community is spread around the world and collaborates over the internet. Its poster child is certainly GNU/Linux—a whole operating system that can replace the proprietary Microsoft Windows.&lt;/p&gt;
&lt;p&gt;Copyright law grants an author the exclusive right to copy his work, but only for a limited period of time. During that time nobody else is permitted to copy an author&#39;s book, image, film, etc. and nobody is allowed to use it to create new stuff. However thereafter, the original work passes into the public domain and everyone is free to use it for any purpose. The 20th century was the century of the mass media which tend to produce capital-intensive industrial productions for an audience as large as possible. They started lobbying politicians and copyright got extended over and over again and our culture becomes increasingly property of a few companies.&lt;/p&gt;
&lt;p&gt;With ordinary home computers connected to the Internet, today everybody can easily manipulate, mix and rearrange his own or the data of others and share the creative product with all the world. New distribution mechanisms like peer-to-peer file sharing networks render the record industry with its current business model obsolete. The major record labels therefore react with lawsuits against individuals and use a new technology called DRM to control its customers even more tightly which at the same time prevents others from reusing past culture.&lt;/p&gt;
&lt;p&gt;Copyright, patents and trademarks are often lumped together under the term of intellectual property. This term already implies that intellectual works are analogous to physical property which isn&#39;t the case:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Information is a nonrival good: It can&#39;t be used up, information shared is information doubled.&lt;/li&gt;
&lt;li&gt;Information is a core-prerequisite to creating new information.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Such exclusive monopoly rights lock information in and prohibit innovation. In a time where the basic tools for information production in form of computers are available to millions of people, the law still favours capital-intensive industries over individuals and small businesses.&lt;/p&gt;
&lt;p&gt;The internet facilitates the collaboration of individuals all over the world. Volunteers as well as professionals come together to participate in a new form of information production: commons-based peer productions - like the development of free and open source software or the writing of Wikipedia. Information is shared, rather than hoarded, and licensed as &lt;em&gt;free content&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;In this digital and networked environment individuals can do more alone or in loose collaboration with others. On blogs millions of people post about anything from music to politics and provide an alternative to the traditional mass media like TV and newspapers. A new informational environment emerges that is more diverse and independent of advertising revenues or the government. If information is shared freely instead of being held back, this is more just, and access to existing information is crucial for impoverished people and whole nations all over the world to catch up in development.&lt;/p&gt;
&lt;p&gt;This networked environment has many advantages over the old information environment. However, there is also strong opposition to those new concepts, originating either from poor understanding or from fear of death of last-century business models. A battle has broken out over the laws and tools governing information production. The claim represented in this text is not that technology will magically lead to a better world, but rather that it provides for diverse possibilities that a given society can choose to use or not.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For more info, see an &lt;a href=&quot;http://p2pfoundation.net/Table_of_Contents_(Overview)&quot;&gt;introductory text of mine&lt;/a&gt; (from where the above is copied), or Yochai Benkler’s excellent &lt;a href=&quot;http://en.wikipedia.org/wiki/The_Wealth_of_Networks&quot;&gt;The Wealth of Networks: How Social Production Transforms Markets and Freedom&lt;/a&gt;. For a more critical look, see George Packer’s The New Yorker piece &lt;a href=&quot;http://www.newyorker.com/reporting/2013/05/27/130527fa_fact_packer&quot;&gt;Change the World&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With these three major trends outlined, let’s take a look into our crystal ball. With more and more low-skilled jobs replaced by machines (or in the meantime cheap foreign offshore labour), the workers that the capitalist economy in industrialized nations really needs are highly-skilled, creative, self-motivated and autonomous. Because the only way to get that kind of work done which machines cannot do, is to find highly skilled and passionate people, provide them the means to live and work and then just let them do what they need and want to do. So the organization needs to be very similar to how commons-based peer productions work—except the ‘commons’ is limited to the company. This is exactly what most startups and companies with a startup-like culture (like Google at least used to have) do.&lt;/p&gt;
&lt;p&gt;But where does that leave the many relatively unskilled workers? One aspect is that we should &lt;a href=&quot;http://www.huffingtonpost.com/john-baker/industrial-age-education-_b_2974297.html&quot;&gt;change&lt;/a&gt; our &lt;a href=&quot;http://www.theatlantic.com/education/archive/2014/03/5-year-olds-can-learn-calculus/284124/&quot;&gt;educational system&lt;/a&gt; that was designed to churn out industrial workers that can do a specified task efficiently without creativity or thinking for themselves. But more fundamentally, low-skilled and boring work will be needed less and less by the capitalist economy. And my argument is that this is not a bad thing. In our society, we are so used to defining our self-worth with what job we have and our value by how much we earn. But in a broader historical context, I think this will have been a 200-year anomaly that lasted only during the industrial era. People will continue to do things, but now because they are meaningful to them, because they feel that they are providing value to their community (or to one of their many virtual or local communities). With an &lt;a href=&quot;http://en.wikipedia.org/wiki/Basic_income&quot;&gt;unconditional basic income&lt;/a&gt;, they won’t have to do useless &lt;a href=&quot;http://www.strikemag.org/bullshit-jobs/&quot;&gt;bullshit jobs&lt;/a&gt; to justify their existence. We have to stop equating the value of a human being with how much paid work he or she does. While I’m all for good working conditions, it’s sad to see unions resisting an unconditional basic income because they hang on to the industrial idea that everyone should have a job and get (well) payed for that.&lt;/p&gt;
&lt;p&gt;One way or another, most well-off people will have a basic income. Because that’s effectively already what companies with a startup-culture provide their employees or what you get when you have interest-bearing assets. The question is whether we as a society get our shit together and make this work for every citizen, not only the privileged few. It would be the logical next step for the welfare state.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2014/05/29/Marcel-Wanders-between-Art-and-Design</id>
      <title>Marcel Wanders between Art and Design</title>
      <updated>2014-05-29T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2014/05/29/Marcel-Wanders-between-Art-and-Design" />
      
      <content type="html">&lt;p&gt;After walking through yet another museum’s collection of the internationally established canon of modern art, I was amazed to discover a temporary exhibition that felt so immediate and contemporary: “Marcel Wanders: Pinned Up At The Stedelijk, 25 Years of Design”&lt;/p&gt;
&lt;p&gt;I wouldn’t say Marcel Wanders’s creations are characterized by beauty. Sometimes they are beautiful, sometimes I find them quite hideous. Sometimes both at the same time. The most consistent quality I find in his work is that it makes me laugh or smile. An unexpected change of scale, a surprising combination of patterns, shapes and materials, and no fear of having to conform to any classical notion of beauty. Although often, his creations are reflections of historical or organic shapes.&lt;/p&gt;
&lt;p&gt;As a piece of art, interpreted as a critique of society’s lack of vision around the millennium, I love his work. But to actually spend any significant amount of time in one of his interiors? No. Hell no.&lt;/p&gt;
&lt;p&gt;But maybe Marcel Wanders is in fact sincere with his products and tries to give non-designers a version of design that they again can relate to.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A product must feel familiar. This is why he chooses elements that everyone recognizes because, for instance, they are based on historical sources of inspiration.&lt;/p&gt;
&lt;p&gt;— 2014 Stedelijk exhibition&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That may be his personal vision. To sidestep the problem of the late 1990s and the first decade of the 20th century’s lack of a shared vision.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Does the concept of future still exist in a culture in which a coherent vision has disappeared?&lt;/p&gt;
&lt;p&gt;— Marcel Wanders&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sometimes, the result feels like a “Best of IKEA”. It’s good design, no doubt about that. But for my taste, it’s often too much “bling bling”—too cheap and too extravagant at the same time. As a child of modernity, I’m still waiting for the good old future.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/assets/2014-05-29-wanders/vase.jpg&quot; alt=&quot;Wanders Wonders&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/assets/2014-05-29-wanders/zeppelin.jpg&quot; alt=&quot;Zeppelin&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/assets/2014-05-29-wanders/babel.jpg&quot; alt=&quot;babel&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/assets/2014-05-29-wanders/knotted_chair.jpg&quot; alt=&quot;Knotted Chair&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/assets/2014-05-29-wanders/interior.jpg&quot; alt=&quot;interior&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/assets/2014-05-29-wanders/skygarder.jpg&quot; alt=&quot;skygarder&quot; /&gt;&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2014/07/03/JSON-LD-intro</id>
      <title>JSON-LD</title>
      <updated>2014-07-03T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2014/07/03/JSON-LD-intro" />
      
      <content type="html">&lt;p&gt;Personally, I find RDF/XML the most horrible serialization of a graph and a lot can be said against specific RDF tools. However, I think the basic model of RDF is pretty sound: everything is expressed as a bunch of triples, each of the format &amp;quot;subject predicate object&amp;quot; (e.g. &amp;quot;Peter knows Manu&amp;quot;), where all three words can actually be expanded to fully qualified IRIs, or the object can also be a literal. An IRI is a &lt;a href=&quot;http://en.wikipedia.org/wiki/Internationalized_resource_identifier&quot;&gt;Internationalized resource identifier&lt;/a&gt; and a literal a string, number, date or similar which can also be typed.&lt;/p&gt;
&lt;p&gt;That&#39;s why I&#39;m quite excited by a new RDF serialization format called &lt;a href=&quot;http://json-ld.org/&quot;&gt;JSON-LD&lt;/a&gt; which is also valid JSON. To get a few things straight for myself, I&#39;ve written up this introduction which is heavily inspired by the examples in the &lt;a href=&quot;http://www.w3.org/TR/json-ld/&quot;&gt;specification&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Let&#39;s say we have some existing JSON:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &amp;quot;name&amp;quot;: &amp;quot;Manu Sporny&amp;quot;,
  &amp;quot;homepage&amp;quot;: &amp;quot;http://manu.sporny.org/&amp;quot;,
  &amp;quot;image&amp;quot;: &amp;quot;http://manu.sporny.org/images/manu.png&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Leveraging the popular &lt;a href=&quot;http://schema.org/&quot;&gt;schema.org vocabulary&lt;/a&gt;, this can be expressed unambiguously as RDF as follows:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &amp;quot;@id&amp;quot;: &amp;quot;http://manu.sporny.org/me&amp;quot;, ← Specify the IRI of this resource.
                                        Should also serve as a self-link
                                        to retrieve this JSON.
  &amp;quot;http://schema.org/name&amp;quot;: &amp;quot;Manu Sporny&amp;quot;,
  &amp;quot;http://schema.org/url&amp;quot;: {
    &amp;quot;@id&amp;quot;: &amp;quot;http://manu.sporny.org/&amp;quot; ← Here the &#39;@id&#39; keyword means
  },                                   &amp;quot;http://manu.sporny.org/&amp;quot; is an
                                       IRI and not just a string.
  &amp;quot;http://schema.org/image&amp;quot;: {
    &amp;quot;@id&amp;quot;: &amp;quot;http://manu.sporny.org/images/manu.png&amp;quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above JSON-LD translates to the following three RDF triples in &lt;a href=&quot;http://www.w3.org/2000/10/swap/Primer&quot;&gt;N3&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@prefix schema: &amp;lt;http://schema.org/&amp;gt; .
&amp;lt;http://manu.sporny.org/me&amp;gt; schema:name &amp;quot;Manu Sporny&amp;quot; .
&amp;lt;http://manu.sporny.org/me&amp;gt; schema:url &amp;lt;http://manu.sporny.org/&amp;gt; .
&amp;lt;http://manu.sporny.org/me&amp;gt; schema:image &amp;lt;http://manu.sporny.org/images/manu.png&amp;gt; .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To make the JSON backwards-compatible, we can use any plain strings, called &lt;strong&gt;terms&lt;/strong&gt;, such as &lt;code&gt;&amp;quot;name&amp;quot;&lt;/code&gt;, &lt;code&gt;&amp;quot;homepage&amp;quot;&lt;/code&gt; and &lt;code&gt;&amp;quot;image&amp;quot;&lt;/code&gt; from our original JSON and define what IRIs they stand for in a separate context.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &amp;quot;@context&amp;quot;: {
    &amp;quot;name&amp;quot;: &amp;quot;http://schema.org/name&amp;quot;, ← This means that &#39;name&#39; is
                                        shorthand for &#39;http://schema.org/name&#39;
    &amp;quot;homepage&amp;quot;: {
      &amp;quot;@id&amp;quot;: &amp;quot;http://schema.org/url&amp;quot;, ← This means that &#39;homepage&#39; is
                                        shorthand for &#39;http://schema.org/url&#39;
                                        The usage of &#39;@id&#39; in the context,
                                        such as here, is very different
                                        from the usage of most keywords,
                                        as it gives information about the
                                        key &#39;homepage&#39; and not the object
                                        &#39;{}&#39; in which it is contained.
      &amp;quot;@type&amp;quot;: &amp;quot;@id&amp;quot; ← This means that a string value associated with
    },                 &#39;homepage&#39; should be interpreted as an
                       identifier that is an IRI
    &amp;quot;image&amp;quot;: {
      &amp;quot;@id&amp;quot;: &amp;quot;http://schema.org/image&amp;quot;,
      &amp;quot;@type&amp;quot;: &amp;quot;@id&amp;quot;
    }
  },
  &amp;quot;name&amp;quot;: &amp;quot;Manu Sporny&amp;quot;,
  &amp;quot;homepage&amp;quot;: &amp;quot;http://manu.sporny.org/&amp;quot;,
  &amp;quot;image&amp;quot;: &amp;quot;http://manu.sporny.org/images/manu.png&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the value of &lt;code&gt;@context&lt;/code&gt; is a string instead of an object, it means that the context is being served seperately from that URL which can be beneficial when caching is used:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &amp;quot;@context&amp;quot;: &amp;quot;http://json-ld.org/contexts/person.jsonld&amp;quot;,
  &amp;quot;name&amp;quot;: &amp;quot;Manu Sporny&amp;quot;,
  &amp;quot;homepage&amp;quot;: &amp;quot;http://manu.sporny.org/&amp;quot;,
  &amp;quot;image&amp;quot;: &amp;quot;http://manu.sporny.org/images/manu.png&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Say this document is located at &lt;code&gt;http://manu.sporny.org/me&lt;/code&gt;, then that will be used as the &lt;strong&gt;base IRI&lt;/strong&gt; to resolve relative links. This example shows also that shorthands work for prefixes as well.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &amp;quot;@context&amp;quot;: {
    &amp;quot;name&amp;quot;: &amp;quot;http://schema.org/name&amp;quot;,
    &amp;quot;schema&amp;quot;: &amp;quot;http://schema.org/&amp;quot;,  ← This means that &#39;schema&#39; is
                                       shorthand for &#39;http://schema.org/&#39;
    &amp;quot;homepage&amp;quot;: {
      &amp;quot;@id&amp;quot;: &amp;quot;http://schema.org/url&amp;quot;,
      &amp;quot;@type&amp;quot;: &amp;quot;@id&amp;quot;
    }
  },
  &amp;quot;name&amp;quot;: &amp;quot;Manu Sporny&amp;quot;,
  &amp;quot;schema:image&amp;quot;: { ← Shorthands works also for prefixes
      &amp;quot;@id&amp;quot;: &amp;quot;http://manu.sporny.org/images/manu.png&amp;quot;
  },
  &amp;quot;homepage&amp;quot;: &amp;quot;/home&amp;quot;, ← all IRIs can also be relative to the base IRI,
                         so this would expand to &#39;http://manu.sporny.org/home&#39;
  &amp;quot;status&amp;quot;: &amp;quot;trolling&amp;quot; ← terms that are not defined in the context are ignored
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In addition to the usage of &lt;code&gt;&amp;quot;@type&amp;quot;: &amp;quot;@id&amp;quot;&lt;/code&gt; in the context to declare that a value is an IRI, the &lt;code&gt;@type&lt;/code&gt; keyword can also be used to specify the &lt;strong&gt;node type&lt;/strong&gt; of the object. Specifying node types cannot be done in the context.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &amp;quot;@context&amp;quot;: &amp;quot;http://json-ld.org/contexts/person.jsonld&amp;quot;,
  &amp;quot;@id&amp;quot;: &amp;quot;http://manu.sporny.org/me&amp;quot;,
  &amp;quot;@type&amp;quot;: &amp;quot;schema:Person&amp;quot;, ← Means that &amp;lt;http://manu.sporny.org/me&amp;gt;
                            has rdf:type schema:Person
  &amp;quot;name&amp;quot;: &amp;quot;Manu Sporny&amp;quot;,
  &amp;quot;homepage&amp;quot;: &amp;quot;http://manu.sporny.org/&amp;quot;,
  &amp;quot;image&amp;quot;: &amp;quot;http://manu.sporny.org/images/manu.png&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;@type&lt;/code&gt; can even be used in a third way: to specify the &lt;strong&gt;value type&lt;/strong&gt; of literals, like the values of &amp;quot;name&amp;quot; and &amp;quot;modified&amp;quot;. Specifying value types can be done either in the context or inline:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &amp;quot;@context&amp;quot;: {
    &amp;quot;xsd&amp;quot;: &amp;quot;http://www.w3.org/2001/XMLSchema#&amp;quot;,
    &amp;quot;name&amp;quot;: {
      &amp;quot;@id&amp;quot;: &amp;quot;http://schema.org/name&amp;quot;,
      &amp;quot;@type&amp;quot;: &amp;quot;xsd:string&amp;quot; ← define value type in context.
    },
    &amp;quot;modified&amp;quot;: {
      &amp;quot;@id&amp;quot;: &amp;quot;http://purl.org/dc/terms/modified&amp;quot;
    }
  },
  &amp;quot;@id&amp;quot;: &amp;quot;http://manu.sporny.org/me&amp;quot;,
  &amp;quot;name&amp;quot;: &amp;quot;Manu Sporny&amp;quot;,
  &amp;quot;modified&amp;quot;: {
    &amp;quot;@type&amp;quot;: &amp;quot;xsd:dateTime&amp;quot;, ← can also define value type inline
    &amp;quot;@value&amp;quot;: &amp;quot;2010-05-29T14:17:39+02:00&amp;quot; ← and then the value itself
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note again that &lt;code&gt;@id&lt;/code&gt; when used in the context behaves a bit odd: in the example above, &lt;code&gt;&amp;quot;@id&amp;quot;: &amp;quot;http://schema.org/name&amp;quot;&lt;/code&gt; provides information about &lt;code&gt;&amp;quot;name&amp;quot;&lt;/code&gt; (namely that it&#39;s a shorthand for &lt;code&gt;&amp;quot;http://schema.org/name&amp;quot;&lt;/code&gt;), whereas &lt;code&gt;@id&lt;/code&gt; when used inline (i.e. not in the context) and &lt;code&gt;@type&lt;/code&gt; always refer to the JSON object they are a part of. For example &lt;code&gt;&amp;quot;@type&amp;quot;: &amp;quot;xsd:string&amp;quot;&lt;/code&gt; specifies that the target of &lt;code&gt;&amp;quot;name&amp;quot;&lt;/code&gt;, not &lt;code&gt;&amp;quot;name&amp;quot;&lt;/code&gt; itself, is of type &lt;code&gt;xsd:string&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A final thing to mention, which is intuitive again, is that not only literals but also entire resources can be embedded as property values:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &amp;quot;@context&amp;quot;: {
    &amp;quot;schema&amp;quot;: &amp;quot;http://schema.org/&amp;quot;,
    &amp;quot;knows&amp;quot; : {
      &amp;quot;@id&amp;quot;: &amp;quot;schema:knows&amp;quot;
    },
    &amp;quot;name&amp;quot;: {
      &amp;quot;@id&amp;quot;: &amp;quot;schema:name&amp;quot;
    }
  },
  &amp;quot;@id&amp;quot;: &amp;quot;http://manu.sporny.org/me&amp;quot;,
  &amp;quot;@type&amp;quot;: &amp;quot;schema:Person&amp;quot;,
  &amp;quot;name&amp;quot;: &amp;quot;Manu Sporny&amp;quot;,
  &amp;quot;knows&amp;quot;: {
    &amp;quot;@id&amp;quot;: &amp;quot;http://peter.org/me&amp;quot;,
    &amp;quot;@type&amp;quot;: &amp;quot;schema:Person&amp;quot;,
    &amp;quot;name&amp;quot;: &amp;quot;Peter&amp;quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There are a few more things that might be good to know, so feel free to have a look at the also quite readable &lt;a href=&quot;http://www.w3.org/TR/json-ld/&quot;&gt;specification&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2014/07/06/money-in-the-star-trek-universe</id>
      <title>Money in the Star Trek universe</title>
      <updated>2014-07-06T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2014/07/06/money-in-the-star-trek-universe" />
      
      <content type="html">&lt;p&gt;I’ve &lt;a href=&quot;/blog/society/2014/05/11/Why-we-need-an-unconditional-basic-income-stagnating-economic-growth,-automation-and-commons-based-peer-production.html&quot;&gt;written before&lt;/a&gt; about how our scarcity-based and exponentially growing economy will come to an end — one way or another. This time, let’s peek a bit further into the future.&lt;/p&gt;
&lt;p&gt;The article &lt;a href=&quot;https://medium.com/@RickWebb/the-economics-of-star-trek-29bab88d50&quot;&gt;The Economics of Star Trek: The Proto-Post Scarcity Economy&lt;/a&gt; discusses an interesting question. While I agree with some parts of it, others are also illogical or inaccurate.   One example is the lack of distinction between the &lt;em&gt;United Federation of Planets&lt;/em&gt; and &lt;em&gt;Starfleet&lt;/em&gt;. While the Federation is a state-like interstellar and multi-species federal republic with a democratically elected government, Starfleet is basically the navy of the Federation. It is organized with a military rank structure adhering to the chain of command and its mandate includes deep-space exploration and defense. Another example — this one more central to the argument — is the notion that all usage of resources by Federation citizens is still accounted for, “presumably by the amount of energy required to produce them (say Joules). And they are indeed credited to and debited from each citizen’s ‘account.’”. This would essentially be money, and anyway: why would the price of everything be determined by the amount of energy needed to produce it while raw materials and human labour are not taken into account?&lt;/p&gt;
&lt;p&gt;So here’s my take on the subject.&lt;/p&gt;
&lt;p&gt;In &lt;em&gt;Star Trek: First Contact&lt;/em&gt; &lt;a href=&quot;http://www.youtube.com/watch?v=ilY4hRgfC2Q&quot;&gt;Picard tells Lily&lt;/a&gt;: “The economics of the future are somewhat different. You see, money doesn’t exist in the 24th century... The acquisition of wealth is no longer the driving force in our lives. We work to better ourselves and the rest of humanity.” And Star Trek creator Gene Roddenberry has said: “In the 24th century there will be no hunger, there will be no greed, and all the children will know how to read.” (The quote is from &lt;a href=&quot;http://www.ex-astris-scientia.org/inconsistencies/economy.htm&quot;&gt;this article&lt;/a&gt; that also lists some canon evidence on how money is used in the Star Trek universe.)&lt;/p&gt;
&lt;p&gt;On the other hand, there is also repeated mention of something called &lt;a href=&quot;http://en.memory-alpha.org/wiki/Federation_credit&quot;&gt;Federation credit&lt;/a&gt;, Beverly Crusher bought a roll of cloth on Farpoint Station and had her account on the USS Enterprise-D billed, and there are still many traders and &lt;a href=&quot;http://en.memory-alpha.org/wiki/Merchant&quot;&gt;merchants&lt;/a&gt; operating. Federation citizens can also hold property, for example the &lt;a href=&quot;http://en.memory-alpha.org/wiki/Vineyard&quot;&gt;Picard family vineyards&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now, my interpretation is that while Federation citizens can hold money (presumably mostly in Federation credit), they
rarely have to use it. Most products we still think of as scarce — like food, housing and transportation — are not scarce in the Federation anymore. From “The Economics of Star Trek” article:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you eat a meal at Sisko’s Creole Kitchen, do you pay? It seems almost definite that you don’t pay. If you paid, with anything, including Federation Credits, that would be money. You could barter, but it seems if the entire economy was a barter economy, we’d hear it. No, it seems almost certain that you go to eat at Sisko’s, you don’t pay, and Joseph Sisko doesn’t pay for his supplies, and his suppliers probably don’t pay for theirs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Energy is plentiful and almost everything can quickly be &lt;a href=&quot;http://en.memory-alpha.org/wiki/Replicator&quot;&gt;replicated&lt;/a&gt;. Tedious work is almost completely automated and people do whatever they do because they genuinely want to, not because they are forced to earn an income. I’m sure Joseph Sisko takes great pleasure in running his restaurant. Likewise, many Starfleet officers and Federation scientists seem to live for their jobs.&lt;/p&gt;
&lt;p&gt;So while you can walk into a restaurant and get free food, I’m sure that if you were to walk up to the &lt;a href=&quot;http://en.memory-alpha.org/wiki/Utopia_Planitia_Fleet_Yards&quot;&gt;Utopia Planitia Fleet Yards&lt;/a&gt; — a shipyard owned by Starfleet — and asked them to give you a hundred ships, they would most certainly refuse. Unless you convince them that you need the ships for some scientific endeavour or to save the galaxy or something; then they’ll happily give you as many ships as they deem necessary and as they can spare. So certain things in certain quantities are still scarce, just not anything any individual human being would need or reasonably want.&lt;/p&gt;
&lt;p&gt;You could argue that some humans will always be greedy. But I say they only want the big house and the ten Ferraris because those are proxies for social standing. As soon as social standing isn’t determined by the amount and kind of stuff you have — which is clearly not the case in Star Trek anymore — basically no one will want it anymore.&lt;/p&gt;
&lt;p&gt;Now, there are still a few things left that will remain scarce. They generally fall into three categories:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Things that no amount of money can buy like love, respect, etc.&lt;/li&gt;
&lt;li&gt;One of a kind things like the original Mona Lisa, prime real estate with a view of the &lt;a href=&quot;http://en.memory-alpha.org/wiki/Golden_Gate_Bridge&quot;&gt;Golden Gate Bridge&lt;/a&gt;, etc. People might also attach a sentimental value to “original” (i.e. not replicated) goods like clothes or other souvenirs.&lt;/li&gt;
&lt;li&gt;Goods which are impossible (like &lt;a href=&quot;http://en.memory-alpha.org/wiki/Latinum&quot;&gt;latinum&lt;/a&gt;) or expensive to replicate (like presumably &lt;a href=&quot;http://en.memory-alpha.org/wiki/Keva&quot;&gt;Keva&lt;/a&gt;, &lt;a href=&quot;http://en.memory-alpha.org/wiki/Trillium&quot;&gt;Trillium&lt;/a&gt; and formerly &lt;a href=&quot;http://en.memory-alpha.org/wiki/Gemstone&quot;&gt;Gemstones&lt;/a&gt;). Also, goods for which the replicator programming is not available like &lt;a href=&quot;http://en.memory-alpha.org/wiki/Romulan_ale&quot;&gt;Romulan ale&lt;/a&gt; and other goods from outside the Federation. That’s why traders are still very much in need.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So while most Federation citizens will rarely use money in their daily lives, for items in category two and three above, a presumably relatively hard currency like Federation credits come in very handy. A currency is also required when dealing with cultures that still use money. So when Star Trek characters say “we don’t use money anymore”, it’s like us saying “we don’t ride on horses anymore” — it doesn’t mean that it could never ever happen, but usually it doesn’t.&lt;/p&gt;
&lt;p&gt;It is hard to say in what exact circumstances Federation credit (or other currencies like gold-pressed latinum) are used. For example, would the planetary government of Earth really allow the monopolization of prime real estate? But it is safe to say that money is used more frequently when dealing with people from outside the Federation, similar to how native tribes &lt;a href=&quot;http://en.wikipedia.org/wiki/Debt:_The_First_5000_Years&quot;&gt;seem to have used no money or bartering system&lt;/a&gt; within their own society, but would trade with other tribes they would meet sporadically.&lt;/p&gt;
&lt;p&gt;Let’s hope that such a bright future eventually pans out.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2014/08/08/virtual-and-augmented-reality</id>
      <title>Virtual and Augmented Reality</title>
      <updated>2014-08-08T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2014/08/08/virtual-and-augmented-reality" />
      
      <content type="html">&lt;p&gt;I can see &lt;a href=&quot;http://arstechnica.com/gaming/2014/08/why-oculus-sees-virtual-reality-as-the-final-compute-platform/&quot;&gt;Oculus-style VR&lt;/a&gt; (virtual reality) for two things: gaming, and calling your loved ones when they are in another country. Beyond that, I just don’t think it will catch on. But AR (augmented reality) — placing virtual objects or information in your view of the real world — should be awesome.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://phandroid.s3.amazonaws.com/wp-content/uploads/2013/05/glass-chris-hangout-640x357.png&quot; alt=&quot;Google Glass...&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://phandroid.s3.amazonaws.com/wp-content/uploads/2013/05/Screen-Shot-2013-05-08-at-11.38.45-AM-640x361.png&quot; alt=&quot;...little more than picture-in-picture for life.&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Google Glass currently basically offers little more than a &lt;a href=&quot;http://phandroid.com/2013/05/08/what-can-you-see-and-do-with-google-glass-video/&quot;&gt;picture-in-picture for life&lt;/a&gt; and I suppose that’s what it will remain for the foreseeable future. It’s the best current technology can do.&lt;/p&gt;
&lt;p&gt;But imagine glasses that contain displays on each lens (for virtual stereoscopic 3D-vision) which are completely transparent for the most part. Then you can &lt;a href=&quot;http://arstechnica.com/gadgets/2012/05/augmented-reality-tank-can-blast-holes-in-real-surfaces/&quot;&gt;superimpose select virtual objects&lt;/a&gt; or information (labels, directions, virtual whiteboards, telepresent people) to seamlessly integrate the virtual into the physical world and have the advantages of both.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/7/7b/MediatedReality_on_iPhone2009_07_13_21_33_39.jpg/360px-MediatedReality_on_iPhone2009_07_13_21_33_39.jpg&quot; alt=&quot;AR on an iPhone&quot; /&gt;
&lt;img src=&quot;http://www.smh.com.au/content/dam/images/3/4/9/3/u/image.related.articleLeadNarrow.300x0.3480j.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;http://www.telepresenceoptions.com/images/_DSC2572_kl.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2014/10/04/Mars-vs-Space-Habitat</id>
      <title>Colony on Mars vs. Space Habitat</title>
      <updated>2014-10-04T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2014/10/04/Mars-vs-Space-Habitat" />
      
      <content type="html">&lt;p&gt;Elon Musk usually seems to do the math instead of just trusting his gut. That’s why I find it quite interesting that he thinks that a colony on Mars makes more economic sense than a space habitat.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There are a couple of things that I think are pretty bogus. One is space mining, another is space solar power. I mean if you calculate how much it costs to bring either the photons from space solar power back to earth or the raw material back to earth, the economics don&#39;t make sense.&lt;/p&gt;
&lt;p&gt;— Musk at a &lt;a href=&quot;http://ecorner.stanford.edu/authorMaterialInfo.html?mid=394&quot;&gt;Stanford Entrepreneurial Thought Leaders Lecture&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’m wondering what kind of assumptions he made. If you think of building the solar panels and mining equipment on a planetary surface, I absolutely agree, it’s not viable since it’s just not realistic to bring down launch costs that far. However, if you’d manage to establish a whole industry in space (i.e. orbit around Earth or Sun), the economics might change. If it became much cheaper to mine resources and build stuff in space, cheaper than doing that on a planetary surface, you wouldn’t have to bring back much &lt;em&gt;raw material&lt;/em&gt;, only finished products. If it became cheaper to build ten solar panels in orbit than to build one on the surface, the terrible efficiency of transmitting the energy down from orbit wouldn’t matter anymore.&lt;/p&gt;
&lt;p&gt;Meanwhile, Elon Musk is focussed on Mars:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If we can establish a Mars colony, we can almost certainly colonise the whole Solar System, because we&#39;ll have created a strong economic forcing function for the improvement of space travel. We&#39;ll go to the moons of Jupiter, at least some of the outer ones for sure, and probably Titan on Saturn, and the asteroids. Once we have that forcing function, and an Earth-to-Mars economy, we&#39;ll cover the whole Solar System.&lt;/p&gt;
&lt;p&gt;— Musk in an &lt;a href=&quot;http://aeon.co/magazine/technology/the-elon-musk-interview-on-mars/&quot;&gt;Aeon interview&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’m kind of curious why he thinks that an Earth-to-Mars economy will be more economical than an Earth-to-Space economy. Since you’d want the off-earth economy to not only import, but also export goods, Musk seems to assume that building a productive colony on Mars plus the launching costs from Mars are actually cheaper than building a productive colony in space. (Exports from Earth shouldn’t be that different since you can aerobrake a lot in the Martian atmosphere.)&lt;/p&gt;
&lt;p&gt;In addition to &lt;a href=&quot;http://space.stackexchange.com/questions/4748/feasibility-self-sustaining-colony-on-mars-vs-space-station&quot;&gt;some basic considerations&lt;/a&gt;, is it really that much harder to reinvent everything for a zero-g environment than for a Martian environment? Maybe it is. And maybe it isn’t.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2014/10/05/In-Search-of-Truth-for-Knowledge-based-Systems</id>
      <title>In Search of Truth for Knowledge-based Systems</title>
      <updated>2014-10-05T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2014/10/05/In-Search-of-Truth-for-Knowledge-based-Systems" />
      
      <content type="html">&lt;p&gt;I find myself coming back to Stefano Mazzocchi’s &lt;a href=&quot;https://web.archive.org/web/20150626063921/http://www.betaversion.org/~stefano/linotype/news/431/&quot;&gt;blog post about epistemology in knowledge-based systems&lt;/a&gt;. The upshot for me is that since an absolute truth doesn’t appear to exist, a truly useful search engine for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Semantic_Web&quot;&gt;semantic web&lt;/a&gt; should calculate probabilities of truthfulness for each statement published, akin to &lt;a href=&quot;https://en.wikipedia.org/wiki/Bayesian_probability&quot;&gt;Bayesian probabilities&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was thinking of an approach using a PageRank-style algorithm to compute a trustworthiness-score for each domain (or rather subdomain). The score would lie between zero and one, where a trustworthiness of 1 can never be reached (except for domains only publishing tautologies) but would mean that when we pick a random statement from that domain, the probability of the statement being true is 100%—i.e. all statements provided by that domain are 100% true. The algorithm can be thought of as an iterative method that updates the trustworthiness of each domain on each iteration, depending on how many of the statements on that domain agree or disagree with all comparable statements on all other domains. For example, if most statements on domain A agree with statements on other domains that already have positive trustworthiness, the trustworthiness of domain A will increase.&lt;/p&gt;
&lt;p&gt;Computing to what degree two statements agree is also a non-trivial task. It should be a similarity measure which measures zero when two statements are incomparable (i.e. completely independent like “The capitol of the USA is Washington” and “It was raining in France on 1st October 2014”), while returning one for the similarity of any statement to itself and minus one for two contradictory statements. However, this requires a certain knowledge about the predicates in the statements. For example, the two statements “Bob is-married-to Alice” and “Bob is-married-to Eve” are contradictory in most cultures—usually, only one of them can be true. But “Bob has-friend Alice” and “Bob has-friend Charlie” may both be true statements. Also, the statement “Earth has-population 7 billion” should be more similar to “Earth has-population 7.1 billion” than to “Earth has-population 1 billion”, but how much more similar?&lt;/p&gt;
&lt;p&gt;Should statements concerning numeric literals, in addition to a unit, also carry an optional 95% confidence interval? Probably yes. Also, domains should be able to express their own probability for each statement they publish, from which, in combination with the domain’s trustworthiness, the search engine’s overall probability for that statement would be calculated. Interestingly, &lt;a href=&quot;https://www.mpi-inf.mpg.de/departments/databases-and-information-systems/research/yago-naga/yago/faq/&quot;&gt;YAGO&lt;/a&gt; seems to go into that direction.&lt;/p&gt;
&lt;p&gt;Depending on the details of the algorithm, it would probably also be sensitive to initialization. This seems like a good thing, since it would avoid favouring the view that is voiced by the most domains (e.g. someone publishing the same wrong statements on hundreds of domains) and allow us instead to assign higher initial trustworthiness to domains like &lt;code&gt;wikipedia.org&lt;/code&gt; that already represent a consensus among its many contributors. However, the people setting these initialization scores would have a disproportionate influence on what will be considered trustworthy information and what not, in effect determining what the system will eventually output as &lt;em&gt;probably true&lt;/em&gt;. So should &lt;code&gt;.gov&lt;/code&gt; domains have a higher initial trustworthiness? This seems reasonable in the area of statistics, but less so when considering stuff published during an election campaign.&lt;/p&gt;
&lt;p&gt;While the details are immensely more complicated for statements than for pages, all in all, the fundamental problem seems to be similar to the one that Google and other search engines are already facing today: how much to trust each domain on the web.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2015/02/08/About-me</id>
      <title>About me</title>
      <updated>2015-02-08T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2015/02/08/About-me" />
      
      <content type="html">&lt;p&gt;I became fascinated by computers and programming when I realized that it’s like playing with Legos—except that you’ve got an infinite number of bricks. (Until you run out of memory, that is.)&lt;/p&gt;
&lt;p&gt;I grew up on the web—probably the most important knowledge management system of our time. I watched it morph from a medium of simple &lt;a href=&quot;http://info.cern.ch&quot;&gt;hypertext documents&lt;/a&gt; to a fully fledged &lt;a href=&quot;http://www.google.com/googlebooks/chrome/&quot;&gt;application runtime&lt;/a&gt; for &lt;a href=&quot;http://alistapart.com/article/responsive-web-design&quot;&gt;screens of all sizes&lt;/a&gt;. Understanding the separation of content (e.g. HTML) from presentation (e.g. CSS), made me realize the power of design principles for the first time. Incidentally, the separation of content from presentation is a philosophy that most (but &lt;a href=&quot;http://programminghistorian.org/lessons/sustainable-authorship-in-plain-text-using-pandoc-and-markdown&quot;&gt;not all&lt;/a&gt;) &lt;a href=&quot;http://www.antipope.org/charlie/blog-static/2013/10/why-microsoft-word-must-die.html&quot;&gt;word&lt;/a&gt; processing systems still have to come around to.&lt;/p&gt;
&lt;p&gt;Concerning programming languages, I belive for all but a few applications, we should continue to climb to higher levels of abstraction. First we wrote assembly. Then we got Fortran and C. The next level were languages like Java that introduced memory safety to the masses. And sooner or later, the time will come for &lt;a href=&quot;https://wiki.haskell.org/Functional_programming&quot;&gt;purely functional programming&lt;/a&gt; to go mainstream.&lt;/p&gt;
&lt;p&gt;Fundamentally, I see myself as a designer, in the broadest sense of the word. I am not only fascinated by graphic and interaction design, but also the design of complex systems and beautiful code. Whether you’re crafting a tool, product or process—for me, the essence of &lt;a href=&quot;https://www.apple.com/designed-by-apple/&quot;&gt;good design&lt;/a&gt; is that you’re doing it &lt;em&gt;properly&lt;/em&gt;. This may be a somewhat old-fashioned word, but it describes best the antithesis to the &lt;a href=&quot;https://www.youtube.com/watch?v=_Gunmq41N3U&quot;&gt;arbitrariness and thoughtlessness&lt;/a&gt; that is too often the root cause of subpar products and &lt;a href=&quot;http://www.nytimes.com/2010/02/04/opinion/04brass.html&quot;&gt;unnerving processes&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2015/02/08/Suspension-of-disbelief-will-still-be-required-in-VR-narratives</id>
      <title>Suspension of disbelief will still be required in VR narratives</title>
      <updated>2015-02-08T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2015/02/08/Suspension-of-disbelief-will-still-be-required-in-VR-narratives" />
      
      <content type="html">&lt;p&gt;The author of &lt;a href=&quot;http://cdixon.org/2015/01/24/virtual-reality-a-new-creative-medium-where-the-default-state-is-belief&quot;&gt;Virtual reality: a new creative medium where the default state is belief
&lt;/a&gt; argues that the concept of &lt;em&gt;suspension of disbelief&lt;/em&gt; won’t apply to virtual reality, since the default state in VR will be belief.&lt;/p&gt;
&lt;p&gt;I disagree. &lt;em&gt;Suspension of disbelief&lt;/em&gt; is not inherent to any medium like TV or VR, but rather it is inherent to any kind of narration. We tend to be suspicious of the content of stories strangers tell us—no matter the medium. Indeed, &lt;a href=&quot;http://en.wikipedia.org/wiki/Suspension_of_disbelief&quot;&gt;Wikipedia says&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Suspension of disbelief&lt;/em&gt; or &lt;em&gt;willing suspension of disbelief&lt;/em&gt; is a term coined in 1817 by the poet and aesthetic philosopher Samuel Taylor Coleridge, who suggested that if a writer could infuse a “human interest and a semblance of truth” into a fantastic tale, the reader would suspend judgement concerning the implausibility of the narrative.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Also, 1817 was before television, and even radio, were invented.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2015/02/14/Apple-building-a-car-makes-perfect-sense</id>
      <title>Apple building a car makes perfect sense</title>
      <updated>2015-02-14T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2015/02/14/Apple-building-a-car-makes-perfect-sense" />
      
      <content type="html">&lt;p&gt;&lt;a href=&quot;http://arstechnica.com/cars/2015/02/report-apple-has-several-hundred-staffers-building-an-electric-car/&quot;&gt;Apple building a car&lt;/a&gt; makes perfect sense. After positioning itself as a lifestyle company in the early 2000s, Apple is in a perfect position to redefine all those consumer products that inevitably will be transformed by becoming essentially networked computers—but that people don’t think of as computers. It has already done this for music players, phones, tablets and watches, while TVs, cars, kitchens, clothes, desks, etc. are just waiting to become “smart”—but in a way people will find fun and effortless, not confusing and frustrating like e.g. Samsung’s “smart” TVs.&lt;/p&gt;
&lt;p&gt;Google understands this as well and is arguably in a better position regarding AI (think self-driving cars or home automaton), also utilizing the large amounts of data it’s gathering, but Google still has no clue about fashion, style and ease-of-use. However, it’s purchase of Nest certaily wasn’t a bad move.&lt;/p&gt;
&lt;p&gt;It’s going to be interesting to see where Tesla ends up in all this. While they are currently ahead on the car and &lt;a href=&quot;http://www.theverge.com/2015/2/13/8033691/why-teslas-battery-for-your-home-should-terrify-utilities&quot;&gt;battery construction&lt;/a&gt; (think smart grid), it’s questionable whether they will be able to scale up, and scale out, to enter many other fields quickly enough on their own.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/assets/2015-02-14-Apple-building-a-car-makes-perfect-sense/marc-newson-car-2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/assets/2015-02-14-Apple-building-a-car-makes-perfect-sense/marc-newson-car-1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Above: Ford concept car by Marc Newson, who is now working at Apple.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2015/05/17/Jobs-below-the-API</id>
      <title>Jobs below the API</title>
      <updated>2015-05-17T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2015/05/17/Jobs-below-the-API" />
      
      <content type="html">&lt;p&gt;Back in February, Peter Reinhardt published his fairly widely circulated blog post &lt;em&gt;&lt;a href=&quot;http://rein.pk/replacing-middle-management-with-apis/&quot;&gt;Replacing Middle Management with APIs&lt;/a&gt;&lt;/em&gt;. (If you haven’t read it already, do so now.)&lt;/p&gt;
&lt;p&gt;While we were talking about the trend of building APIs to command humans (and no longer only machines) at university already a couple of years ago, Reinhardt’s post has spelled out the socio-political consequences of this trend much more clearly to me. I find myself coming back to the topic with the below visualization by &lt;a href=&quot;http://www.forbes.com/sites/anthonykosner/2015/02/04/google-cabs-and-uber-bots-will-challenge-jobs-below-the-api/&quot;&gt;Forbes&lt;/a&gt; in mind.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/blog/assets/2015-05-17-Jobs-below-the-API/above-and-below-the-api-jobs.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Essentially what’s happening is that in a first phase middle management is replaced by a software system of APIs (i.e. machine-machine interfaces) and GUIs (i.e. machine-human interfaces), opening the doors for the second phase: a swift replacement of &lt;em&gt;below the API jobs&lt;/em&gt; by machines. Increasingly, the only &lt;em&gt;paying&lt;/em&gt; work left for humans will be the one of building the software.&lt;/p&gt;
&lt;p&gt;As I’ve said before, I think there should be nothing wrong with increased automation and rising efficiencies. Less work should be a good thing! However, this is going to play out well only if we stop demanding that everyone sacrifices their lives to do work that can be monetized—we need something like an unconditional basic income.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2016/04/03/Microsoft-needs-to-come-up-with-a-UI-vocabulary-for-the-HoloLens</id>
      <title>Microsoft needs to come up with a UI vocabulary for the HoloLens</title>
      <updated>2016-04-03T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2016/04/03/Microsoft-needs-to-come-up-with-a-UI-vocabulary-for-the-HoloLens" />
      
      <content type="html">&lt;p&gt;I sure like the “new Microsoft” a hell of a lot more than the old one. They’re open sourcing, integrating with other platforms (iOS, Android, GNU/Linux), etc. And the HoloLens is the first viable AR (augmented reality) platform to market, which is huge, because as I have &lt;a href=&quot;/blog/2014/08/08/virtual-and-augmented-reality.html&quot;&gt;said before: AR &amp;gt; VR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, Microsoft apparently still doesn’t understand that when launching a new hardware platform, you need to launch first-party software for that platform along with it. You might not necessarily need a &lt;a href=&quot;https://en.wikipedia.org/wiki/Killer_application&quot;&gt;killer app&lt;/a&gt;, but at least something to show a working UI and introduce basic UI vocabulary. This is something Apple has done very successfully &lt;a href=&quot;https://en.wikipedia.org/wiki/File:Apple_Macintosh_Desktop.png&quot;&gt;with the Mac&lt;/a&gt; and later the iPhone. Safari and Google Maps on your phone alone were reasons to buy an iPhone and they established gestures like swiping and pinch-to-zoom that users expect to work with in all apps on the platform now. They showed how an iPhone app has to work.&lt;/p&gt;
&lt;p&gt;But if you watch the latest &lt;a href=&quot;http://arstechnica.co.uk/gadgets/2016/04/microsoft-hololens-hands-on-hardware-details/&quot;&gt;Ars Technica HoloLens video&lt;/a&gt;, all you see is a tech demo. It’s a very good tech demo with very promising tech (the 3D models blends in very well with the environment), but there is no single app bundled that I’d want to use on a daily bases right now and no guiding principles for developers on how to build such an app. The web browser demo was just cringe-worthy: surely they must have figured out a better way to scroll—as basic of a UI pattern as there is—after all the experience with the Kinect. Speaking of which, Microsoft made the same mistake with the Kinect already: great hardware, but that’s no use if there’s no software to fulfill its potential.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2016/05/21/Actually-the-brain-is-a-computer</id>
      <title>Actually, the brain is a computer</title>
      <updated>2016-05-21T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2016/05/21/Actually-the-brain-is-a-computer" />
      
      <content type="html">&lt;p&gt;This week, a &lt;a href=&quot;https://aeon.co/essays/your-brain-does-not-process-information-and-it-is-not-a-computer&quot;&gt;piece by psychologist Robert Epstein on Aeon&lt;/a&gt; made the rounds on social media, in which he argues that understanding the brain as a computer is a fundamentally misguided approach.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My favourite example of the dramatic difference between the IP  [information processing] perspective and what some now call the ‘anti-representational’ view of human functioning involves two different ways of explaining how a baseball player manages to catch a fly ball – beautifully explicated by Michael McBeath, now at Arizona State University, and his colleagues in a 1995 paper in Science. The IP perspective requires the player to formulate an estimate of various initial conditions of the ball’s flight – the force of the impact, the angle of the trajectory, that kind of thing – then to create and analyse an internal model of the path along which the ball will likely move, then to use that model to guide and adjust motor movements continuously in time in order to intercept the ball.&lt;/p&gt;
&lt;p&gt;That is all well and good if we functioned as computers do, but McBeath and his colleagues gave a simpler account: to catch the ball, the player simply needs to keep moving in a way that keeps the ball in a constant visual relationship with respect to home plate and the surrounding scenery (technically, in a ‘linear optical trajectory’). This might sound complicated, but it is actually incredibly simple, and completely free of computations, representations and algorithms.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It’s a well-written article and I agree with him on a number of points, including that the second description of how the baseball player hits the ball is much closer to how the human brain works. And I guess it’s true that there are still too many neuro-scientists that subscribe to the first notion. However, all this does not mean that the brain cannot be understood as a computer.&lt;/p&gt;
&lt;p&gt;Let’s have a look at the &lt;a href=&quot;http://www.oxforddictionaries.com/definition/english/computer&quot;&gt;Oxford Dictionary definition of the word &lt;em&gt;computer&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;An electronic device which is capable of receiving information (data) in a particular form and of performing a sequence of operations in accordance with a predetermined but variable set of procedural instructions (program) to produce a result in the form of information or signals.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Considering that before the advent of electronics, a &lt;em&gt;computer&lt;/em&gt; was simply a person carrying out computations, and the fact that there are computers operating in parallel nowadays, I would simplify and generalize the definition to the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A computer is an object or person which is capable of receiving information, and of performing operations according to a set of instructions on that input (i.e. a program, which may consist of a predetermined and a variable portion), to produce a result in the form of information.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Using that definition of a computer; how is the brain not a computer? I takes input in the form of electronic signals transmitted through nerves, and gives output in the form of electronic signals through nerves. And those signals contain information.&lt;/p&gt;
&lt;p&gt;As such, I would argue that there’s nothing wrong in principle with trying to understand the brain as an information processor, i.e. a computer. What &lt;em&gt;is&lt;/em&gt; wrong is thinking of it as a computer with a &lt;a href=&quot;https://en.wikipedia.org/wiki/Von_Neumann_architecture&quot;&gt;von Neumann architecture&lt;/a&gt; or any similar stored-program architecture. The brain doesn’t contain adressable memory. As the drawing-a-dollar-bill-from-memory example in Epstein’s article illustrates well, the brain doesn’t save and store the full informational contents of the inputs it receives (you’re unable to reproduce much, if any, of the detail of the printings and markings found on a dollar bill). The brain merely saves a kind of &lt;a href=&quot;https://en.wikipedia.org/wiki/Hash_function&quot;&gt;hash&lt;/a&gt; of the input (similar to an &lt;a href=&quot;https://en.wikipedia.org/wiki/Acoustic_fingerprint&quot;&gt;acoustic fingerprint&lt;/a&gt;), which can be used to detect a similar input again (i.e. when you see another dollar bill, you recognize it as similar to the bill you’ve seen before).&lt;/p&gt;
&lt;p&gt;Since the brain’s hardware is so radically different from that of current (and historic) electronic computers, the brain’s software needs to use radically different algorithms as well. This shouldn’t come as a surprise. Every major shift in computer hardware platforms has resulted in a shift in the algorithms that make sense to run on top of it. Think of the shift from magnetic tape to harddisks, the shift from spinning disks to random-access solid-state drives, the shift to multi-core CPUs, the utilization of GPUs for certain workloads, etc. And all these are tiny changes compared to what quantum computers will do to the usefulnes of algorithms written for classical computers.&lt;/p&gt;
&lt;p&gt;Nonetheless, I see tremendous value in thinking in terms of software and sometimes ignoring the messy details of the hardware below. Yes, it’s an abstraction and like all abstractions, it is &lt;a href=&quot;http://www.joelonsoftware.com/articles/LeakyAbstractions.html&quot;&gt;leaky&lt;/a&gt;. But also like all abstractions, it helps us reason and think clearly when used under the right circumstances.&lt;/p&gt;
&lt;p&gt;Using a metaphor is basically calling on the audience to use abstraction to see the shared properties of two different things. To quote Epstein’s article one last time:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;But the IP [information processing] metaphor is, after all, just another metaphor – a story we tell to make sense of something we don’t actually understand. And like all the metaphors that preceded it, it will certainly be cast aside at some point – either replaced by another metaphor or, in the end, replaced by actual knowledge.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As if there were something like &lt;em&gt;actual knowledge&lt;/em&gt; or &lt;em&gt;objective truth&lt;/em&gt;.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2016/08/13/The-sad-state-of-automated-layouting-solutions</id>
      <title>The sad state of automated layouting solutions</title>
      <updated>2016-08-13T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2016/08/13/The-sad-state-of-automated-layouting-solutions" />
      
      <content type="html">&lt;p&gt;Back in 2007, I watched this &lt;a href=&quot;https://www.youtube.com/watch?v=vcXUrNSvjhU&quot;&gt;talk by Håkon Wium Lie, co-inventor of CSS, about his proprietary Prince XML&lt;/a&gt;. Basically, he asks, why should you have to go around clicking on pages and menus in layout programs, if instead you could write down the rules for the layout once, then automate PDF generation by feeding it only new content whenever you need something printed. He’s talking about using CSS to layout structured text like HTML, of course.&lt;/p&gt;
&lt;p&gt;Since then, I’ve been waiting for the future to arrive in the open source lands, where those of us live that don’t have a ton of cash and are crinching at the mere thought of vendor lock-in.&lt;/p&gt;
&lt;h2&gt;InDesign&lt;/h2&gt;
&lt;p&gt;You would be forgiven to think for a moment about using Adobe InDesign in a headless mode (running on a server without a GUI) to layout documents in an automated fashion. But then you are quickly reminded that InDesign in general, and &lt;a href=&quot;http://stackoverflow.com/questions/22939280/indesign-server-pdf-creation&quot;&gt;InDesign scripting&lt;/a&gt; in particular, is basically a mess.&lt;/p&gt;
&lt;h2&gt;CSS-based solutions&lt;/h2&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.princexml.com&quot;&gt;Prince&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;awesome&lt;/li&gt;
&lt;li&gt;proprietary and rather expensive license&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a href=&quot;https://docraptor.com&quot;&gt;DocRaptor&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Prince as a cloud service, with pricing per document conversion (see their &lt;a href=&quot;https://docraptor.com/blog/docraptor-vs-princexml/&quot;&gt;blog post&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See also &lt;a href=&quot;https://www.print-css.rocks/&quot;&gt;print-css.rocks&lt;/a&gt; for a discussion of further commercial HTML/CSS-to-PDF engines and some tutorials.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://wkhtmltopdf.org/&quot;&gt;wkhtmltopdf&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;based on the Qt WebKit rendering engine&lt;/li&gt;
&lt;li&gt;WebKit devs don’t see printing as a priority: CSS3 paged media is &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=15548&quot;&gt;not implemented since 2007&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;currently wkhtmltopdf &lt;a href=&quot;https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1730&quot;&gt;doesn’t even support hyphenation&lt;/a&gt;, could &lt;a href=&quot;https://github.com/mnater/Hyphenator&quot;&gt;use JavaScript&lt;/a&gt; instead…?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a href=&quot;http://weasyprint.org&quot;&gt;WeasyPrint&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CSS layout engine written in Python&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://weasyprint.readthedocs.io/en/latest/features.html&quot;&gt;supports CSS paged media&lt;/a&gt; (&lt;code&gt;@page&lt;/code&gt; etc.)&lt;/li&gt;
&lt;li&gt;currently doesn’t support some of the more esoteric CSS properties that are supported in WebKit.&lt;/li&gt;
&lt;li&gt;doesn’t support JavaScript&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a href=&quot;https://developers.google.com/web/updates/2017/04/headless-chrome#create_a_pdf_dom&quot;&gt;Chrome headless&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;advanced rendering engine&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.chromium.org/p/chromium/issues/detail?id=368053&quot;&gt;no support for CSS paged media&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.chromium.org/p/chromium/issues/detail?id=652964&quot;&gt;hyphenation only on Android, Mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chrome --headless --print-to-pdf&lt;/code&gt; has limited options, so needs to be called via a scripting language&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a href=&quot;https://github.com/itext/itextpdf&quot;&gt;iText&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Java library for PDF generation without HTML parser, either use:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://itextpdf.com/itext7/pdfHTML&quot;&gt;pdfHTML&lt;/a&gt; proprietary&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/flyingsaucerproject/flyingsaucer&quot;&gt;Flying Saucer&lt;/a&gt; uses outdated iText version&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;apparently not quite as high-quality as Prince&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;TeX&lt;/h2&gt;
&lt;p&gt;From &lt;a href=&quot;https://news.ycombinator.com/item?id=2326545&quot;&gt;Why is TeX still used?&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The reason TeX is still used is because it is open source and beautiful, because it is the best at handling mathematical notation, and because of its inertial dominance in math and the hard sciences in Academia. The reason TeX has so, so many fixable problems after 30 years is because there is no financial incentive for anyone to fix it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The core algorithms are pretty creaky as well. Knuth did a brilliant job coming up with efficient algorithms that could do a fairly good job at breaking lines/paragraphs/pages and could handle book-length documents even on 70s-era hardware, but they&#39;ve had minimal improvement since then.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;All true. Also, the way indexes, table of contents, bibliographies and cross references work in LaTeX are unholy, fragile hacks. Foot- and endnotes could use some TLC. And on 2011-era hardware we really should have some approximation of globally optimal page breaking.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Never mind all the &lt;a href=&quot;https://www.sharelatex.com/blog/2012/12/01/the-tex-family-tree-latex-pdftex-xelatex-luatex-context.html&quot;&gt;other TeX variants&lt;/a&gt;. &lt;a href=&quot;http://wiki.contextgarden.net&quot;&gt;ConTeXt&lt;/a&gt; is the least bad, but it’s still not CSS-based, which is for better or worse what everyone is familiar with.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;P.S. This post received some updates on September 10th, 2017 and March 6th 2018.&lt;/em&gt;&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2017/11/11/software-complexity</id>
      <title>Is software complexity growing over our heads?</title>
      <updated>2017-11-11T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2017/11/11/software-complexity" />
      
      <content type="html">&lt;p&gt;I just went through &lt;a href=&quot;http://worrydream.com/why-2017-05-08/&quot;&gt;this post of Bret Victor&lt;/a&gt;. Couldn&#39;t get myself to agree with the linked essay &lt;a href=&quot;http://countercomplex.blogspot.com/2014/08/the-resource-leak-bug-of-our.html&quot;&gt;The resource leak bug of our civilization&lt;/a&gt;. While I agree that our civilization&#39;s resource usage cannot continue like this on earth, I&#39;m less sure whether that is still applicable in space.&lt;/p&gt;
&lt;p&gt;Applying the same reasoning to software engineering seems even less valid – abstractions &lt;em&gt;are&lt;/em&gt; useful, even if I love simplicity as much as the next guy.&lt;/p&gt;
&lt;p&gt;(I&#39;ve certainly set up my computer to be as simple and lean as possible while still reaping the benefits of modern computing: in daily usage is only macOS, Chrome with JavaScript disabled for most domains, iA Writer for writing prose, MacVim for writing code, Terminal, Apple Mail, iMessage and Apple Calendar.)&lt;/p&gt;
&lt;p&gt;However, I found the following two quotes very valuable.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Costanza asked Sussman why MIT had switched away from Scheme for their introductory programming course, 6.001. This was a gem. He said that the reason that happened was because engineering in 1980 was not what it was in the mid-90s or in 2000. In 1980, good programmers spent a lot of time thinking, and then produced spare code that they thought should work. Code ran close to the metal, even Scheme — it was understandable all the way down. Like a resistor, where you could read the bands and know the power rating and the tolerance and the resistance and V=IR and that’s all there was to know. 6.001 had been conceived to teach engineers how to take small parts that they understood entirely and use simple techniques to compose them into larger things that do what you want.&lt;/p&gt;
&lt;p&gt;But programming now isn’t so much like that, said Sussman. Nowadays you muck around with incomprehensible or nonexistent man pages for software you don’t know who wrote. You have to do basic science on your libraries to see how they work, trying out different inputs and seeing how the code reacts. This is a fundamentally different job, and it needed a different course.&lt;/p&gt;
&lt;p&gt;So the good thing about the new 6.001 was that it was robot-centered — you had to program a little robot to move around. And robots are not like resistors, behaving according to ideal functions. Wheels slip, the environment changes, etc — you have to build in robustness to the system, in a different way than the one SICP discusses.&lt;/p&gt;
&lt;p&gt;And why Python, then? Well, said Sussman, it probably just had a library already implemented for the robotics interface, that was all.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There’s a &lt;a href=&quot;https://vimeo.com/151465912#t=3577&quot;&gt;video of the above&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Also this excerpt from &lt;a href=&quot;http://lamport.azurewebsites.net/pubs/future-of-computing.pdf&quot;&gt;Leslie Lamport: The Future of Computing: Logic or Biology (2003)&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The fundamental problem with approaching computer systems as biological systems is that it means giving up on the idea of actually understanding the systems we build. We can’t make our software dependable if we don’t understand it. And as our society becomes ever more dependent on computer software, that software must be dependable. ...&lt;/p&gt;
&lt;p&gt;When people who can’t think logically design large systems, those systems become incomprehensible. And we start thinking of them as biological systems. Since biological systems are too complex to understand, it seems perfectly natural that computer programs should be too complex to understand.&lt;/p&gt;
&lt;p&gt;We should not accept this... If we don’t, then the future of computing will belong to biology, not logic. We will continue having to use computer programs that we don’t understand, and trying to coax them to do what we want. Instead of a sensible world of computing, we will live in a world of homeopathy and faith healing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As AI and technologies like deep learning continue to yield better results, they are leaving us understanding them less and less. I wonder whether this is not unavoidable when we’re devising algorithms that deal with a lot of the complexities of the real world (e.g. self-driving cars etc).&lt;/p&gt;
&lt;p&gt;However, there will always be problems that can (and should) be abstracted from real-world complexities. And those problems should indeed be solved using approaches that are more formal than current mainstream programming. See e.g. &lt;a href=&quot;https://www.theatlantic.com/technology/archive/2017/09/saving-the-world-from-code/540393/&quot;&gt;The Coming Software Apocalypse article&lt;/a&gt; or Haskell.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2017/11/25/text-processing-combining-templates-with-WYSIWYG-styling</id>
      <title>Text processing: combining templates with WYSIWYG-styling</title>
      <updated>2017-11-25T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2017/11/25/text-processing-combining-templates-with-WYSIWYG-styling" />
      
      <content type="html">&lt;p&gt;I keep chewing on the Atlantic’s article &lt;a href=&quot;https://www.theatlantic.com/technology/archive/2017/09/saving-the-world-from-code/540393/&quot;&gt;The Coming Software Apocalypse&lt;/a&gt;. While I agree with it on the most part, it has that curious passage where the author proclaims WYSIWYG text editors like Word superior, as they provide immediate feedback to the user how the layout on the printed page is going to look like.&lt;/p&gt;
&lt;p&gt;Yet it’s well known that Word sucks, and in part that’s because it doesn’t separate writing from layouting. At the same time as writing content, you style individual pieces of text (individual paragraphs, or even individual characters if you want to), which is very cumbersome and error-prone.&lt;/p&gt;
&lt;p&gt;There is a much saner way of doing things: you first write the content (in Markdown, HTML or LaTeX), and only in a second step apply the layout (CSS or LaTeX template). That’s also the reason why the team behind &lt;a href=&quot;https://ia.net/topics/in-search-of-the-perfect-writing-font/&quot;&gt;iA Writer went with a monospace font for their editor&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In contrast to proportional fonts that communicate “this is almost done” monospace fonts suggest “this text is work in progress.” It is the more honest typographic choice for a text that is not ready to publish. [...]&lt;/p&gt;
&lt;p&gt;The typographic rawness of a monospace font tells the writer: “This is not about how it looks, but what it says. Say what you mean and worry about the style later.” Proportional fonts suggest “This is as good as done” and stand in an intimidating contrast to a raw draft.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And for quite some time, I thought this was the end of the discussion. However, the WYSIWYG-editors got one thing right: if and when the time for layouting has come, it is better to get immediate feedback on the design, instead of having to start a batch process which applies the layout and you see the result only after a couple of seconds (or often worse with LaTeX).&lt;/p&gt;
&lt;p&gt;So why can’t we have the best of both worlds? Styling by template &lt;em&gt;and&lt;/em&gt; immediate feedback when tweaking the style.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;batch processing&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;immediate feedback&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;style individual pieces of text&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;💩&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Word-like WYSIWYG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;style by template&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;CSS, LaTeX&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;🏆&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That’s how I got back to an old idea of mine: creating a markdown editor, that also has a preview pan in which you can change the CSS styles live with a simple GUI.&lt;/p&gt;
&lt;p&gt;Not unlike changing CSS live in a modern browser’s web developer tools. There are some programs that have gone into this direction:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://webflow.com/&quot;&gt;Webflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://macaw.co/&quot;&gt;Macaw&lt;/a&gt; (no longer under development)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://subformapp.com/&quot;&gt;Subform&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But they are targeted at web designers and not paired with a text or markdown editor.&lt;/p&gt;
&lt;p&gt;I’m considering building this editor on top of GitHub’s Atom editor. Then we would get &lt;a href=&quot;https://blog.atom.io/2017/11/15/code-together-in-real-time-with-teletype-for-atom.html&quot;&gt;collaborative editing&lt;/a&gt;, split screen, Vim-mode and other customizations for free. So I started a proof of concept to make &lt;a href=&quot;https://github.com/mb21/atom-markdown-editor-simple-style&quot;&gt;Atom look more like iA Writer&lt;/a&gt;. But it appears that Atom is not quite ready for that kind of customization (line-height cannot be customized by a package and there are glitches with my CSS if you resize the window).&lt;/p&gt;
&lt;p&gt;Coupled with &lt;a href=&quot;http://pandoc.org/&quot;&gt;pandoc&lt;/a&gt; as the markdown engine, we’d be already quite far. However, the layouting part needs some more thinking. For example: should the preview display complete pages with page breaks etc?&lt;/p&gt;
&lt;p&gt;Also, let’s say that to start with, you (as the user) edit the styles of the current document only. You can then later export and import these to use them as a template across documents (or let’s say they are stored in a system-wide template-library). But this means that you can change a global CSS template, but immediately you can only see the layout changes to the current document (and even then, only the part of the document which is in your viewport).&lt;/p&gt;
&lt;p&gt;Let’s see… hopefully I manage to work more on this.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I created a basic &lt;a href=&quot;https://mb21.github.io/GUI-CSS-Editor&quot;&gt;proof of concept layouting app&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; These thoughts evolved into &lt;a href=&quot;https://panwriter.com/&quot;&gt;PanWriter&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2018/05/05/symmathesy-systems-and-processes</id>
      <title>Symmathesy, Systems and Processes</title>
      <updated>2018-05-05T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2018/05/05/symmathesy-systems-and-processes" />
      
      <content type="html">&lt;p&gt;&lt;a href=&quot;https://norabateson.wordpress.com/2015/11/03/symmathesy-a-word-in-progress/&quot;&gt;Symmathesy&lt;/a&gt; adds to &lt;a href=&quot;https://en.wikipedia.org/wiki/Systems_thinking&quot;&gt;Systems Thinking&lt;/a&gt; by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;changing the vocabulary away from a mechanistic worldview&lt;/li&gt;
&lt;li&gt;focussing on the connections or interfaces between the parts (now known as vitae)&lt;/li&gt;
&lt;li&gt;not neglecting time, change and learning.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Still, to me as an engineer this sounds a lot like boxes that each might do &lt;a href=&quot;https://en.wikipedia.org/wiki/Bayesian_inference&quot;&gt;Bayesian inference&lt;/a&gt; and communicate via changing interfaces.&lt;/p&gt;
&lt;p&gt;Everything is a process. There is no such thing as a “finished product” (see this &lt;a href=&quot;https://the-composition.com/the-origins-of-opera-and-the-future-of-programming-bcdaf8fbe960&quot;&gt;take on software engineering&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;And the real world is just incredibly complex (e.g. read this great &lt;em&gt;The New Yorker&lt;/em&gt; article about &lt;a href=&quot;https://www.newyorker.com/magazine/2018/02/12/why-paper-jams-persist&quot;&gt;Why Paper Jams Persist&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Maybe my frustration with “everything being imperfect” (and “nothing is simple if you just look close enough”) is rooted in looking at the world in terms of static parts, seeing that every part is flawed, instead of recognizing that the whole (the symmathesy) is an ever changing process and accepting that.  But still, &lt;em&gt;perfection&lt;/em&gt;, &lt;em&gt;simplicity&lt;/em&gt; and &lt;em&gt;truth&lt;/em&gt; are such alluring concepts…&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2018/05/18/lets-talk-about-javascript</id>
      <title>Let’s talk about JavaScript</title>
      <updated>2018-05-18T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2018/05/18/lets-talk-about-javascript" />
      
      <content type="html">&lt;p&gt;Reading and loyally following &lt;em&gt;A List Apart&lt;/em&gt; over the years, I feel we need to talk about the elephant in the room: JavaScript.&lt;/p&gt;
&lt;p&gt;You may relish the simplicity of &lt;a href=&quot;http://motherfuckingwebsite.com/&quot;&gt;pure HTML&lt;/a&gt; or &lt;a href=&quot;http://bettermotherfuckingwebsite.com/&quot;&gt;pure HTML with a few lines of CSS&lt;/a&gt; (as I do), but for better or worse, there is arguably no single other technology that has had a greater impact on the Web ecosystem in the last decade than JavaScript. Whether you like it or not, that’s where currently most of the innovation and experimentation in front-end development techniques is happening.&lt;/p&gt;
&lt;p&gt;This has sometimes led to pushback from practitioners of established front-end web design techniques (“Whatever happened to progressive enhancement?”). And as JavaScript encroached on the server and onto mobile apps, pushback came equally from traditional software engineers (“JavaScript is just a terrible programming language, why would anyone use it if they don’t have to?”).&lt;/p&gt;
&lt;p&gt;So what’s the deal with JavaScript? Is it breaking the web, or are we witnessing the beginning of a brave new era? I’m not claiming to have all the answers, but let me offer my perspective, as one of those people that have one foot each in web design and software engineering.&lt;/p&gt;
&lt;h2&gt;What is the nature of the web?&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://alistapart.com/article/dao&quot;&gt;Dao of Web Design&lt;/a&gt; warns the web developer from wanting to take control over the user and their browser:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you use style sheets properly, to suggest the appearance of a page, not to control the appearance of a page, and you don’t rely on your style sheet to convey information, then your pages will “work” fine in any browser, past or future.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This, to me, is still the core of what it means to play to the strengths of HTML and CSS and which is what makes the medium &lt;em&gt;web&lt;/em&gt; work so well for so many different users on so many different devices. But the genius of the web was, and still is, (at least) two-fold.&lt;/p&gt;
&lt;p&gt;In addition to HTML, the web also consists of URLs and HTTP. The way these technologies are used to design the interaction between the client and the server, is what Roy Fielding termed &lt;a href=&quot;http://mb21.github.io/api-explorer/a-web-based-tool-to-semi-automatically-import-data-from-generic-rest-apis.html#rest&quot;&gt;REST&lt;/a&gt;. Even if the &lt;em&gt;ideal website&lt;/em&gt; in the minds of front-end developers may seem to be a bunch of HTML and CSS files, the reality has always been much more complex. A website is an interface through which a client interacts with a (potentially very complex) remote service – think of what happens in Google’s data centers when you hit that search button, or when you ask a travel-search engine for the currently cheapest flight.
URLs (as globally unique identifiers for resources), HTTP (with its verbs &lt;code&gt;GET&lt;/code&gt;, &lt;code&gt;POST&lt;/code&gt;, &lt;code&gt;PUT&lt;/code&gt;, &lt;code&gt;DELETE&lt;/code&gt;, etc.), and hyperlinks (for discoverability of related resources), provide a vocabulary for a relatively simple, sufficiently general, and decentrally scalable global communications infrastructure.&lt;/p&gt;
&lt;p&gt;They made the web such a great abstraction for accessing all sorts of content and interactions: from computer-to-computer APIs, to the distribution of text (HTML), documents to be printed (PDF), documents with responsive layouts (HTML/CSS), images, videos, interactive forms, all the way to the distribution of interactive applications and even games.&lt;/p&gt;
&lt;p&gt;With all the railing against single-page applications, who are we, the “traditional” web designers, to claim a monopoly on the use of the web infrastructure for the delivery of “good old” HTML and CSS documents? Who are we to say, that the web may not also be used for the delivery of richer, more interactive, client-side applications? (After all, if you would have asked print designers two decades ago for their preferred format for the web, they would probably have said “PDF”.)&lt;/p&gt;
&lt;p&gt;Now, don’t get me wrong. I &lt;em&gt;do&lt;/em&gt; think it is important to pick the right tool for the right job. As such, if you need to deliver information in the form of text and images to users on interactive, electronic devices (all the way from computers and phones to text-to-speech-centered devices for the blind or Siri and Alexa), then I still think progressively enhanced HTML and CSS is &lt;em&gt;the&lt;/em&gt; way to go. But if you’re developing a video game or a collaborative productivity application (think Google Docs), who are we to tell you that you should do that using native code and stay away from &lt;em&gt;our&lt;/em&gt; web technologies?&lt;/p&gt;
&lt;p&gt;So yes, I believe the distinction between website and webapp &lt;em&gt;is&lt;/em&gt; meaningful. But it is also a continuum. A page of a cinema that lists this week’s movies is a website, right? But what if you add an interactive map for directions? What if you can filter the movies by category, by screening date and time, make reservations and rate and discuss the movies you’ve seen? Is it a webapp now? And if so, at what point exactly did it become a webapp? There is no clear answer. Yet, it is still valuable to be conscious of the continuum between the two extremes, and the trade-offs involved when choosing the right technologies. (The concept of a &lt;a href=&quot;http://alistapart.com/article/yes-that-web-project-should-be-a-pwa&quot;&gt;Progressive Web App&lt;/a&gt; makes it even possible for a website to be a simple website for some devices, while at the same time being a webapp for others.)&lt;/p&gt;
&lt;p&gt;Using a bloated JavaScript framework to render a simple blog post, that doesn’t load the body text without JavaScript, is clearly a very bad idea. I’m as wary of the &lt;a href=&quot;https://arstechnica.com/information-technology/2017/10/a-surge-of-sites-and-apps-are-exhausting-your-cpu-to-mine-cryptocurrency/&quot;&gt;security&lt;/a&gt;, &lt;a href=&quot;https://arstechnica.com/tech-policy/2017/11/an-alarming-number-of-sites-employ-privacy-invading-session-replay-scripts/&quot;&gt;privacy&lt;/a&gt; and &lt;a href=&quot;https://medium.com/dev-channel/the-cost-of-javascript-84009f51e99e&quot;&gt;performance&lt;/a&gt; implications of running untrusted and unvetted Turing-complete code on my device as the next guy. I am actually defaulting to disabled JavaScript in my browser, and use a plugin to enable it on select sites. But an outright dismissal of all things JavaScript falls too short as well.&lt;/p&gt;
&lt;p&gt;For example, in the days before we had advanced CSS like Flexbox and Grid, JavaScript was used to prototype and test new layout approaches. Once we figured out what works and is desirable, it could be standardized as declarative CSS. Or while we wait for older browsers to be phased-out, we can deploy polyfills. As Fielding &lt;a href=&quot;http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm&quot;&gt;recognized&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;REST allows client [i.e. browser] functionality to be extended by downloading and executing code in the form of applets or scripts. This simplifies clients by reducing the number of features required to be pre-implemented. Allowing features to be downloaded after deployment [of clients] improves system extensibility.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Where did JavaScript come from?&lt;/h2&gt;
&lt;p&gt;Today’s JavaScript didn’t come out of nowhere – it developed through several stages, always evolving in answer to a genuine need at the time. To appreciate where we are today, we have to understand JavaScript’s history.&lt;/p&gt;
&lt;p&gt;Famously put together by Brendan Eich within 10 days, JavaScript was first introduced in Netscape Navigator in 1995 to make the web a more dynamic place and as a point of differentiation to Internet Explorer. The scripting language was long used for little more than making menus hoverable. In 2004, Gmail (and a year later Google Maps) made quite a splash with the first wide deployment of a set of web development techniques that would soon become known as AJAX: using JavaScript to download new content from the server to the browser in the background, without interrupting the user with a full page reload. For the first time, an App-like experience in a browser was achieved using only native web technologies (no Java applets, Flash or ActiveX). As this approach was adopted by the broader web development community, jQuery emerged as the dominant JavaScript library to abstract over differing browser implementations and provide access to the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model&quot;&gt;DOM&lt;/a&gt; using CSS-like selectors (what is standardized today as &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll&quot;&gt;&lt;code&gt;document.querySelectorAll&lt;/code&gt;&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;As people started building ever more complex applications, it became apparent that attaching event handlers to &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model&quot;&gt;DOM&lt;/a&gt; elements, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Imperative_programming&quot;&gt;imperatively&lt;/a&gt; rewriting that HTML, quickly leads to &lt;a href=&quot;https://en.wikipedia.org/wiki/Spaghetti_code&quot;&gt;spaghetti code&lt;/a&gt;. Thus, along came JavaScript frameworks (like AngularJS introduced in 2010, or React), where the developer writes mostly declarative templates. The framework then takes care of rendering the templates to HTML, attaching event handlers and rerendering when necessary. This approach resembles more closely how desktop GUI applications already had been developed. However, it would mean that if there was an error in the JavaScript execution, or if a browser had no JavaScript support (such as a search engine), the user would get to see little more than a blank page.&lt;/p&gt;
&lt;p&gt;Google released the Chrome browser in 2008, which included V8, a  heavily performance-optimized JavaScript engine. This was a response to the increasing amount of JavaScript on many web pages, that slowed down the user experience. JavaScript code not only needs to be downloaded, but also executed by the browser.&lt;/p&gt;
&lt;p&gt;Only one year later, something curious happened. Up to that point, JavaScript had been used almost exclusively to run client-side, i.e. in the browser. But in 2009, a server-side run-time environment called Node.js was put together by Ryan Dahl, and it had Google’s V8 JavaScript engine at its core. At the time, there was a lot of talk about asynchronous IO and the number of open connections a web server could handle. (&lt;em&gt;Web-scale&lt;/em&gt;, anyone?) But I believe, the real reason for Node.js’s meteoric rise in popularity, was the low barrier to entry. The hurdle for front-end developers to make the jump to the back-end was suddenly dramatically lower, since they could use the programming language they were already familiar with. Node.js’s package manager &lt;code&gt;npm&lt;/code&gt; made it very easy to build on the JavaScript modules created by others, and in turn to publish your own modules, creating an exponentially growing ecosystem. (Even if many of those packages are of dubious quality.) Finally, the promise of continuing performance improvements coming from Google, and the potential for code-reuse between client and server certainly didn’t harm either.&lt;/p&gt;
&lt;p&gt;What can we learn from all this?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The evolution of the web has almost always been driven by increasing needs. Things that were pioneered by proprietary or native technologies, were later done with web technologies and standardized. First there was Flash, Quicktime videos and iTunes. Now there is JavaScript, HTML5 video and streaming. So while the web often was not first, its superior delivery mechanism and cross-platform compatibility often won out over the incumbent technologies.&lt;/li&gt;
&lt;li&gt;History is littered with coincidences. The success of JavaScript is largely based on the success of the web. Had Brendan Eich come up with a different language back in 1995, we would probably have to struggle with that one today. As such, I’m glad that JavaScript also has good parts like &lt;a href=&quot;https://en.wikipedia.org/wiki/First-class_function&quot;&gt;first-class functions&lt;/a&gt;, in addition to its &lt;a href=&quot;http://bonsaiden.github.io/JavaScript-Garden/&quot;&gt;many&lt;/a&gt; &lt;a href=&quot;https://www.codeproject.com/Articles/182416/A-Collection-of-JavaScript-Gotchas&quot;&gt;deficiencies&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Components&lt;/h2&gt;
&lt;p&gt;Designing the right abstractions and interfaces, for example by dividing your code into components of the right size, is one of the central pillars of software engineering. As your application  grows, the right abstractions are the only thing that enable you to keep the rising complexity at bay – and thereby to keep your sanity.&lt;/p&gt;
&lt;p&gt;Once your first website grew beyond one or two HTML files, pretty much the first thing you would do is move some components, like the page header and footers, out to separate files. The next step is realizing that you have multiple pages (e.g. blog posts), that all share the same layout, so you create a template and put in placeholders where the title will go, and where the body text will go. We have been dividing our HTML into sub-components for a very long time – regardless of whether you are generating HTML on the fly on the server (using PHP, Ruby, or another programming language), or using a static site generator like Jekyll.&lt;/p&gt;
&lt;p&gt;The same happened a bit later for CSS. As the number of lines of CSS increased, we had to come up with a way to make sure one CSS-selector that we had written long ago for one HTML element, wouldn’t inadvertently match some other element, and mess up our layout without us even noticing. Probably the most well-known such naming convention is &lt;a href=&quot;http://getbem.com&quot;&gt;BEM&lt;/a&gt;. Unfortunately, its just that: a convention, that we have to force ourselves to follow and that no compiler or tool helps us to enforce. (Classes are essentially the analog of global variables – which every programmer know are &lt;em&gt;bad&lt;/em&gt;.) Also, our BEM components would rarely match up one-to-one with our HTML components mentioned above.&lt;/p&gt;
&lt;p&gt;The last of the trifecta to grow in number of lines of code was, of course, JavaScript. Early libraries and Node.js’s &lt;code&gt;npm&lt;/code&gt; package manager came up first with a way to package JavaScript code into neat tiny modules, and now we finally have &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import&quot;&gt;native JavaScript modules&lt;/a&gt;, which behave more or less like modules in most programming languages.&lt;/p&gt;
&lt;p&gt;However, what’s arguably more interesting than native JavaScript modules, is the kind of components that JavaScript frameworks and libraries have come up with to build GUIs. In &lt;a href=&quot;https://reactjs.org&quot;&gt;React&lt;/a&gt;, for example, a component is simply a JavaScript function that takes some properties and returns an element. React elements are usually written in an HTML-like syntax called &lt;a href=&quot;https://reactjs.org/docs/introducing-jsx.html&quot;&gt;JSX&lt;/a&gt;, but they are actually JavaScript objects that later will be rendered and inserted into the DOM. For example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-jsx&quot;&gt;const helloComponent = function(name){
  return &amp;lt;h1&amp;gt;Hello, {name}&amp;lt;/h1&amp;gt;;
}

ReactDOM.render(
  helloComponent(&#39;Josh&#39;),
  document.getElementById(&#39;root&#39;)
);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The input properties of components don’t need to be strings either, they can be arbitrary JavaScript objects, functions or React elements (leading to higher-order components – components that take other components as inputs – essentially &lt;a href=&quot;https://eloquentjavascript.net/05_higher_order.html&quot;&gt;higher-order functions&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;With all our HTML now being contained in JavaScript modules, where does that leave CSS? Wouldn’t it be natural to merge our BEM-components in there as well? That’s exactly the idea of &lt;a href=&quot;http://cssinjs.org&quot;&gt;CSSinJS&lt;/a&gt;: we can write JavaScript that then gets converted to CSS. For example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-jsx&quot;&gt;import React from &#39;react&#39;
import injectSheet from &#39;react-jss&#39;
import base from &#39;my-project-base-css&#39;

const styles = {
  title: {
    fontSize: base.fontSize * 2,
    &#39;&amp;amp;:hover&#39;: {
      background: color(&#39;blue&#39;).darken(0.3).hex()
    }
  },
  &#39;@media (min-width: 1024px)&#39;: {
    title: {
      width: 200
    }
  }
}

const HelloComponent = ({classes, name}) =&amp;gt; (
  &amp;lt;h1 className={classes.title}&amp;gt;
    Hello, {name}
  &amp;lt;/h1&amp;gt;
)

export default injectSheet(styles)(HelloComponent)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Which will render to something like:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;style&amp;gt;
.title-123456 {
  font-size: 24px;
}
.title-123456:hover {
  background: #000080;
}
@media (min-width: 1024px) {
  .title-123456 {
    width: 200px;
  }
}
&amp;lt;/style&amp;gt;
&amp;lt;h1 class=&amp;quot;title-123456&amp;quot;&amp;gt;
  Hello, Josh
&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Where you previously would have used BEM rules to prevent class name clashes, the library now generates unique class names for you. Instead of Sass mixins, you can now use the full power of normal JavaScript functions to generate things. Since your build tools now know which CSS is used where, this opens up the possibility for automatic optimizations, like only loading critical CSS on first page load, or generating the optimal set of atomic classes needed (so you actually end up with less CSS sent to the client than if you had written it by hand). Read Mark Dalgleish’s excellent article &lt;a href=&quot;https://medium.com/seek-blog/a-unified-styling-language-d0c208de2660&quot;&gt;A Unified Styling Language&lt;/a&gt;, if you need more convincing.&lt;/p&gt;
&lt;p&gt;Traditionally, the part of the code concerned with rendering views was often organized by file type: you had one folder with all the HTML templates, one folder with all the CSS, one with all the JavaScript, and yet another with all the images. In a component-based architecture, that’s not the case anymore: every component has its own folder containing all its assets. And yet, since a component is simply a JavaScript module exporting a function, its interface to the outside world is very simple.&lt;/p&gt;
&lt;p&gt;Components give us two things that are indispensable for creating a large, yet maintainable, codebase:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;scoping (of class names, variable names and application state) – whatever happens inside a component stays inside the component and doesn’t break other parts of your project.&lt;/li&gt;
&lt;li&gt;composition (of sub-components into bigger components)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And components do this by bundling the HTML, CSS and JavaScript together that belongs together.&lt;/p&gt;
&lt;h2&gt;What about progressive enhancement?&lt;/h2&gt;
&lt;p&gt;“But”, I hear you asking: “what about progressive enhancement?”&lt;/p&gt;
&lt;p&gt;It is important to note, that although the advances in component-based architectures for the web were motivated in the rising complexity of client-side JavaScript in webapps, there is nothing stopping you from applying the same approaches on the server-side as well.&lt;/p&gt;
&lt;p&gt;In fact, it is highly recommended, to set up your site for server-side rendering: executing the JavaScript using Node.js and sending the rendered HTML to the browser. This helps support clients without JavaScript, and also ensures a fast initial page load. (When the JavaScript is pulled in after the initial page load, ideally it can take over the existing DOM without rerendering, a technique called &lt;em&gt;hydrating&lt;/em&gt;.)&lt;/p&gt;
&lt;p&gt;You might say, it’s very rare to still have browsers access your website that don’t support JavaScript. With the proliferation of smartphones, modern browsers are quite prevalent even in developing countries. And a progressive web app (making use of &lt;a href=&quot;https://alistapart.com/article/going-offline&quot;&gt;service workers and caching&lt;/a&gt;) probably helps those users with a shaky internet connection &lt;a href=&quot;https://nolanlawson.com/2016/10/13/progressive-enhancement-isnt-dead-but-it-smells-funny/&quot;&gt;much more&lt;/a&gt; than a traditional website, which cannot do anything without a page load from the server.&lt;/p&gt;
&lt;p&gt;However, let’s think about future browsers as well. I sometimes picture this JavaScript-less-client as the &lt;a href=&quot;http://archive.org/web/&quot;&gt;Internet Archive&lt;/a&gt; (or a similar service). Imagine someone finds a scraped copy of your website in, say, a hundred years. I’m very confident that they will be able to open the HTML file in a plain text editor and immediately read the text. (I can open any &lt;code&gt;.txt&lt;/code&gt; file today, and ASCII was invented in 1963 – more than half a century ago!) Probably, they’ll even have some sort of browser that can render the HTML and CSS into something quite closely resembling what you’re seeing today. It’s all declarative, so even if the computing infrastructure of that time will be very different, they might have simply re-implemented the spec again and again – just like the source code of the rendering engines of today’s browsers looks very different from the source of Mosaic.&lt;/p&gt;
&lt;p&gt;However, JavaScript will probably be different. It’s a Turing-complete language that is much more closely coupled to current hardware. If execution fails at one point, it usually cannot be recovered from. Just think of all the websites that were built specifically for Internet Explorer 6 – can you still make them work today? &lt;a href=&quot;https://developer.mozilla.org/bm/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features&quot;&gt;MDN has a growing list&lt;/a&gt; of the parts of JavaScript that are deprecated or even obsolete – i.e. actually no longer work in today’s browsers. By its very nature, JavaScript execution is just a lot more fragile than the interpretation of a declarative, domain-specific language like HTML or CSS. If you’re building an app, that’s unfortunately kind of to be expected. (Can you still run your Windows 95 or Mac OS 9 apps?) But if you’re publishing public documents, that’s not acceptable. Again, it’s all about picking the right tools for the right job and knowing the trade-offs.&lt;/p&gt;
&lt;h2&gt;What now?&lt;/h2&gt;
&lt;p&gt;I’m not saying you should throw out your battle-tested web stack right now and replace it with the newest hip JavaScript framework, that few of your developers have experience with, and that will break your code on an update every few months, because its still under early development and regularly introducing breaking changes. But there &lt;em&gt;are&lt;/em&gt; interesting things being prototyped, built and tested in the JavaScript ecosystem. And the component-based architecture described above is, at least to me, currently one of the most exciting ones.&lt;/p&gt;
&lt;p&gt;As learnings are made and things settle down, components might be standardized, so they can be used across frameworks and other tooling. (A first, probably in retrospect failed, start at standardization was made with &lt;a href=&quot;https://dmitriid.com/blog/2017/03/the-broken-promise-of-web-components/&quot;&gt;Web Components&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;You might not even have to write JavaScript, but could use another programming language – be it &lt;a href=&quot;https://www.typescriptlang.org&quot;&gt;TypeScript&lt;/a&gt;, &lt;a href=&quot;http://www.purescript.org&quot;&gt;PureScript&lt;/a&gt; or &lt;a href=&quot;https://www.rust-lang.org&quot;&gt;Rust&lt;/a&gt; – and compile to JavaScript or &lt;a href=&quot;https://hacks.mozilla.org/2018/04/hello-wasm-pack/&quot;&gt;WebAssembly&lt;/a&gt;. Or wait for other front-end build tools to adopt a component-based architecture.&lt;/p&gt;
&lt;p&gt;Again, it’s all about choosing the right tool for the right job. Especially if you are building a simple site with a small number of widgets and lines of code, there is relatively little to be gained by the abstraction of components. The additional tooling will only increase the complexity of the project.&lt;/p&gt;
&lt;p&gt;Even if it may have been an accident of history, JavaScript is a part of the web now, and here to stay. It’s important to understand its strengths and weaknesses and make choices accordingly. Let’s learn from the successes and failures being made in the JavaScript community, and keep building a better web, together.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2020/06/01/what-business-is-haskell-a-a-good-fit-for</id>
      <title>What business is Haskell a good fit for?</title>
      <updated>2020-06-01T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2020/06/01/what-business-is-haskell-a-a-good-fit-for" />
      
      <content type="html">&lt;h3&gt;De-risking software projects&lt;/h3&gt;
&lt;p&gt;From &lt;a href=&quot;https://www.stephendiehl.com/posts/marketing.html&quot;&gt;On Marketing Haskell&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It’s true that if you’re managing a software project the choice of tools does matter, but this choice pales in comparison to the following simpler ways to mitigate risk:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Offset the risk using as many legal and insurance instruments possible.&lt;/li&gt;
&lt;li&gt;Having a highly liquid talent pool.&lt;/li&gt;
&lt;li&gt;Factoring software failures into the expectations and economics of projects.&lt;/li&gt;
&lt;li&gt;Ability to restart the project with different assumptions and team if it all goes awry.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;This makes sense, within the constraints of most business environments.&lt;/p&gt;
&lt;p&gt;But maybe it’s just a question of having the right environment to build software &lt;a href=&quot;/blog/2014/04/28/Good-Design.html&quot;&gt;properly&lt;/a&gt;? Is there a right business model to do so?&lt;/p&gt;
&lt;p&gt;Most software projects still have a high risk of failure, even if you de-risk the technical implementation part significantly, say, by having a proficient team, that’s known to work well together, using a proper programming language and tech stack.&lt;/p&gt;
&lt;p&gt;The remaining risk is usually dominated by working with wrong requirements. The problem to be solved might not be well-understood by either the customer or the engineers. Or maybe either the customer or the engineers understand, but fail to communicate to the other party. Or in the process of working on it, the problem is being better understood by one party, but this understanding doesn’t translate to the other, so requirements are not adjusted, etc. This problem might be exacerbated by contracting software development out.&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;For startups, risk is obviously usually dominated by non-tech issues (product-market-fit, timing, etc). But it is a business model where I see having the ability to quickly refactor and change the software as having a potentially huge upside. Correctness is even less important in startups though (I mean, Facebook was written in PHP).&lt;/p&gt;
&lt;h3&gt;Marketing Haskell to devs&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/mb2100/status/1267124635516182529&quot;&gt;My responses on Twitter&lt;/a&gt; to “On Marketing Haskell”:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Very insightful, thx! Spot on about marketing to software managers and higher ups. But isn’t choice of programming language more often delegated down, say to team lead? There the only point in your list remaining is hiring/onboarding..? That’s where I see Simple Haskell shine.&lt;/p&gt;
&lt;p&gt;Your point is basically: to higher ups, the programming language doesn’t matter. Which is true and (as you say) under-appreciated by us programmers. But that doesn’t answer the question why some languages end up having critical mass in industry while others don’t. Sure, marketing – but marketing to developers.&lt;/p&gt;
&lt;p&gt;Similarly, node.js’s marketing was async+v8=speed, and devs love to think they’re writing high-speed/performance code. Why node succeeded, was of course for an entirely different reason: ubiquitous frontend devs entered the backend and a shared ecosystem was created around that.&lt;/p&gt;
&lt;p&gt;Thus not actually an entirely different reason. The marketing (to devs), enabled an influx of talent to create a decent ecosystem (even if most of the npm packages are crap, there is one okayish one for every use-case).&lt;/p&gt;
&lt;p&gt;I would also agree that Haskell’s greatest strength is correctness. Unfortunately, few devs find that an appealing argument. It implies that they’re not writing correct software in whatever language they’re currently using.&lt;/p&gt;
&lt;p&gt;How would I rephrase “correctness” to market Haskell to other devs? Don’t know, something like “enables you to build unbreakable systems”? 🤷🏾‍♂️😁&lt;/p&gt;
&lt;p&gt;Or maybe just “enables you to refactor quickly and fearlessly”. That emphasizes the improvements in development speed and ability to adjust to changing requirements that a strong type-system enables. That’s what industry is interested in, not “correctness”.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;If Haskell is so great...&lt;/h3&gt;
&lt;p&gt;The blog post &lt;a href=&quot;https://pchiusano.github.io/2017-01-20/why-not-haskell.html&quot;&gt;If Haskell is so great, why hasn&#39;t it taken over the world?&lt;/a&gt;, starts with a great description why Haskell is so great, which I would paraphrase as:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Programming is all about managing &lt;a href=&quot;http://curtclifton.net/papers/MoseleyMarks06a.pdf&quot;&gt;&lt;strong&gt;complexity&lt;/strong&gt;&lt;/a&gt;. Without good tools to manage it, the complexity of programs becomes mentally intractable for our limited brains and we lose control and understanding of our programs (imagine writing a big software system entirely in assembly language). The only way for the complexity not to swallow us, is to break down the program into composable and reusable units; therefore &lt;strong&gt;functions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Composability is limited by side effects (like manipulating shared mutable state: each variable multiplies the &lt;a href=&quot;https://twitter.com/paniczgodek/status/1269363651057799173&quot;&gt;number of states the program can be in&lt;/a&gt;); therefore &lt;a href=&quot;https://en.wikipedia.org/wiki/Pure_function&quot;&gt;&lt;strong&gt;pure functions&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Composability enables big programs. But without the help of a compiler, it becomes difficult for humans to track things (e.g. you change the code in one place, but forget to in another place), therefore &lt;a href=&quot;https://i.stack.imgur.com/9DkWM.png&quot;&gt;&lt;strong&gt;strong, static types&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;...why hasn&#39;t it taken over the world?&lt;/h3&gt;
&lt;p&gt;Then the post makes a good observation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Haskell is not that much better than, say, Java, for many of the software systems people write today.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For those “business applications”, the advantages of Haskell are outweighed by the huge disadvantage of not having a big developer pool readily available for growing a team and quickly filling in replacements.&lt;/p&gt;
&lt;p&gt;Also, what dominates the code of those apps is simply transforming data from one representation to another: i.e. I/O across system-, team- and/or human/machine-boundaries and interfaces.&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; But when all you need to do is read in some JSON, change one field, and spit it out again, Haskell doesn’t help you much. Its strengths only come into play once you’ve parsed the data into your &lt;a href=&quot;https://en.wikipedia.org/wiki/Algebraic_data_type&quot;&gt;ADT&lt;/a&gt;. And figuring out what the right ADT is, boils down to defining the &lt;a href=&quot;/blog/2014/10/05/In-Search-of-Truth-for-Knowledge-based-Systems.html&quot;&gt;semantics of the data, which is harder to agree on the more people you are&lt;/a&gt;. And that&#39;s where we’re sort of back to the point about requirements – if you&#39;ve gotten all the involved people to use a shared vocabulary and langauge, and agree on the requirements, you&#39;ve already solved the hardest problem in most business applications.&lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot; id=&quot;user-content-fnref-3&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3&gt;Chickens and eggs&lt;/h3&gt;
&lt;p&gt;To summarize: sure, better marketing to developers would help. And initiatives like &lt;a href=&quot;https://www.simplehaskell.org/&quot;&gt;Simple Haskell&lt;/a&gt;, as well as more batteries-included libraries with more beginner-friendly docs and examples would help. And Rust seems to have made inroads using those strategies, with the help of being backed by a big, credible, player: Mozilla.&lt;/p&gt;
&lt;p&gt;But while we’re stuck in the chicken-and-egg situation of not enough devs using Haskell, and Haskell not being a good choice in industry because of not enough devs for hire – the question remains: what business model and problem is Haskell already now a good fit for?&lt;/p&gt;
&lt;p&gt;Or phrased differently: is there a way of working, where all other risks are reduced enough, so that the de-risking of the project by using a robust language actually removes a significant fraction of the total risk?&lt;sup&gt;&lt;a href=&quot;#user-content-fn-4&quot; id=&quot;user-content-fnref-4&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;If I had a good answer to this question, that might enable me to start a business using Haskell. What complicates matter further is that I’d also like my work to be meaningful (which for me precludes most of fintech), and not to be in vain (which is always a high risk with startups). Similarly, running a tech consultancy and doing a project, then “handing it over”, is often half-way to having it terminated already. So far, only small to medium enterprises with low turnover of programmers seem to be a good fit.&lt;/p&gt;
&lt;p&gt;P.S. In his talk &lt;a href=&quot;https://www.youtube.com/watch?v=fNpsgTIpODA&quot;&gt;How to market Haskell to a mainstream programmer&lt;/a&gt;, Gabriel Gonzalez makes also a convincing argument that to break the chicken-and-egg problem, key is breaking into one or two verticals or niche segments first.&lt;/p&gt;
&lt;hr /&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 id=&quot;footnote-label&quot; class=&quot;sr-only&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;But do you need to be a &lt;a href=&quot;https://stratechery.com/2019/what-is-a-tech-company/&quot;&gt;tech company&lt;/a&gt;? Not necessarily. But if you’re doing software as a project (as opposed to a product), you’re doomed – and sometimes, the continued investment in software isn’t worth it, if you’re not creating an ecosystem or will benefit from zero marginal costs. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;That’s why I think it’s amazing that something like &lt;a href=&quot;https://airtable.com&quot;&gt;Airtable&lt;/a&gt; hasn’t “taken over the world” for CRUD GUIs yet. But &lt;a href=&quot;https://www.notion.so/&quot;&gt;Notion&lt;/a&gt; and &lt;a href=&quot;https://coda.io/&quot;&gt;Coda&lt;/a&gt; seem to prove this niche is at least expanding. &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-3&quot;&gt;
&lt;p&gt;That&#39;s my intuition for why Unison won&#39;t work. &lt;a href=&quot;#user-content-fnref-3&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-4&quot;&gt;
&lt;p&gt;This question can also be asked not only about “using a robust language”, but about “using robust/proper engineering principles” in general. That’s a question that’s been bothering me personally for quite some time, as I tend to become quite dissatisfied when I’m forced to program in the mud. &lt;a href=&quot;#user-content-fnref-4&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 4&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2021/01/23/functional-programming</id>
      <title>What is functional programming?</title>
      <updated>2021-01-23T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2021/01/23/functional-programming" />
      
      <content type="html">&lt;p&gt;This is the first part of a four-part series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Part 1: What is functional programming?&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/blog/2021/01/23/pure-functional-programming-and-shared-mutable-state.html&quot;&gt;Part 2: Pure functional programming and shared mutable state&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/blog/2021/01/23/pure-functional-programming-in-javascript.html&quot;&gt;Part 3: Pure functional programming in JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/blog/2021/09/11/composable-abstractions.html&quot;&gt;Part 4: Composable abstractions in practice&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Broadly speaking, one can contrast two different programming paradigms:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Imperative programming: tell the computer exactly what to do (instruction followed by instruction)&lt;/li&gt;
&lt;li&gt;Declarative programming: tell the computer on an abstract/high level what to do. Includes:
&lt;ul&gt;
&lt;li&gt;CSS: browser’s layout engine figures out how to draw it, given the constraints specified by the programmer&lt;/li&gt;
&lt;li&gt;SQL: query planner/optimizer of DB figures out the details&lt;/li&gt;
&lt;li&gt;Functional programming (using reusable and composable functions and expressions results in less code, and at a higher level of abstraction. The compiler usually also does more work for the programmer.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Functional programming is a sub-paradigm of declarative programming for general purpose (i.e. Turing-complete) programming.&lt;/p&gt;
&lt;p&gt;There’s a continuum between imperative and functional programming, and in many languages, the programmer can choose which style to use (even if the syntax or standard library sometimes makes one style or the other easier or harder to apply). In this post I’ll use JavaScript, as such a multi-paradigm language, to give examples.&lt;/p&gt;
&lt;p&gt;An example of imperative style:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;let array = [1, 2, 3];
for (i=0; i&amp;lt;array.length; i++) {
  array[i] = 2 * array[i];
}
let sum = 0;
for (i=0; i&amp;lt;array.length; i++) {
  sum = array[i] + sum;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And the same in a more functional style:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;const array = [1, 2, 3]
const newArray = array.map(n =&amp;gt; 2*n)
const sum = newArray.reduce((acc, n) =&amp;gt; acc + n, 0)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The next four sections paraphrase the post &lt;a href=&quot;https://fsharpforfunandprofit.com/posts/key-concepts/&quot;&gt;Four Key Concepts&lt;/a&gt; of functional programming and gives examples in JavaScript or TypeScript.&lt;/p&gt;
&lt;h3&gt;1. Functions over objects&lt;/h3&gt;
&lt;p&gt;Different object-oriented programming languages have different notions of objects, but most bundle data (fields) and functions (methods) together. Functional programming is about cleanly separating the two. Then, functions can be applied to the data, and several small functions can be composed to build larger functions.&lt;/p&gt;
&lt;p&gt;To do functional programming, your language at least need to have functions as first-class citizens: i.e. functions can be assigned to variables&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; and passed to other functions like any other value.&lt;/p&gt;
&lt;p&gt;A function that takes another function as an argument is called a &lt;em&gt;higher order function&lt;/em&gt;. &lt;a href=&quot;https://eloquentjavascript.net/05_higher_order.html&quot;&gt;Chapter 5 of Eloquent JavaScript&lt;/a&gt; gives some great examples.&lt;/p&gt;
&lt;h3&gt;2. Expressions over statements&lt;/h3&gt;
&lt;p&gt;The if statement is an example that has an analogue expression in JavaScript, the ternary operator:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;const abs = (x) =&amp;gt; {
  if (x &amp;gt;= 0) {
    return x
  } else {
    return -x
  }
}

const abs = x =&amp;gt;
  x &amp;gt;= 0
    ? x
    : -x
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Expressions are much more composable than statements, since they can be arbitrarily nested. Composability is a key concept in functional programming.&lt;/p&gt;
&lt;p&gt;In the above example, using the &lt;code&gt;if&lt;/code&gt; statement forces us to use a &lt;code&gt;return&lt;/code&gt; statement, which in turn forces us to add braces around the function body.&lt;/p&gt;
&lt;h3&gt;3. Algebraic data types&lt;/h3&gt;
&lt;p&gt;That’s a fancy word for a simple but powerful concept.&lt;/p&gt;
&lt;p&gt;An algebraic data type is defined by composing existing types in one of two ways. The resulting type is either:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;a product type (something like a tuple)&lt;/li&gt;
&lt;li&gt;a sum type (a.k.a. &lt;em&gt;tagged union&lt;/em&gt;, or for simple cases an enum)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;An example in TypeScript:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;type Color = &#39;red&#39; | &#39;blue&#39; | &#39;green&#39;
type DarkColor = &#39;darkred&#39; | &#39;darkblue&#39;

type Widget = { color: Color; hidden: boolean; }
// The type boolean can represent 2 different values (true and false).
// Widget is a product type (the product of the types Color and boolean).
// It can represent 3 * 2 = 6 different values.

type MyColor = Color | DarkColor
// MyColor is a sum type.
// It can represent 3 + 2 = 5 different values

type WidgetOrUndefined = Widget | undefined
// can represent 6 + 1 = 7 different values
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4. Pattern matching&lt;/h3&gt;
&lt;p&gt;Algebraic data types really shine when your language supports pattern matching.&lt;/p&gt;
&lt;p&gt;In TypeScript, pattern matching can be simulated with the &lt;code&gt;switch&lt;/code&gt; statement:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;type Square = {
  kind: &amp;quot;square&amp;quot;;
  size: number;
}
type Rectangle = {
  kind: &amp;quot;rectangle&amp;quot;;
  width: number;
  height: number;
}
type Circle = {
  kind: &amp;quot;circle&amp;quot;;
  radius: number;
}

type Shape = Square | Rectangle | Circle;

const area = (s: Shape): number =&amp;gt; {
  switch (s.kind) {
    case &amp;quot;square&amp;quot;:    return s.size * s.size
    case &amp;quot;rectangle&amp;quot;: return s.height * s.width
    case &amp;quot;circle&amp;quot;:    return Math.PI * s.radius**2
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://www.typescriptlang.org/play?#code/C4TwDgpgBAygjgVwIYCdoF4oG8BQUoDWAlgHYAmAXFAEQDOiqE1A3HlLUQF4RUkIC2AIwgpWAXxyhIUAEoQAxsCQkA5gBsM2NsXJVqaRcvVNW+AO5EywABa8Bw0W2sQiK68DtCR4yeGgBhIhR5DShMXHwdShp5IJCTNhQkMiIEWk8HH19pGGskaUx4ZDQoAB9ZBSVVUPLA4I1WHHkAexJaYChGJDCoAAp02DzIAEoMkTCAPi18IgAzPtoAOiiw9ExqWPqmYen8KBa25o1FtWaVfsWklLThtgl8WgtgeWsF5dIyHYi9+SRaaDoDDQ1CoezQwAQKBI7EWHG4UAAVDC4RA2Phfv8aAYqsYQVBwZDoUtnK53IiYRYrNY0fs-gDNvE8WCIBCoVAALJIGyLAAKAElyUsrqlaAiEQAmO44CRAA&quot;&gt;Playground of above code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There is a &lt;a href=&quot;https://github.com/tc39/proposal-pattern-matching&quot;&gt;proposal for pattern matching syntax in JavaScript&lt;/a&gt;. (&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment&quot;&gt;Destructuring assignment&lt;/a&gt; isn’t pattern matching, since it doesn’t affect the control flow of the program.)&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Continue reading &lt;a href=&quot;/blog/2021/01/23/pure-functional-programming-and-shared-mutable-state.html&quot;&gt;the next part in this blog series&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 id=&quot;footnote-label&quot; class=&quot;sr-only&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;or bound to identifiers &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2021/01/23/pure-functional-programming-and-shared-mutable-state</id>
      <title>Pure functional programming and shared mutable state</title>
      <updated>2021-01-23T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2021/01/23/pure-functional-programming-and-shared-mutable-state" />
      
      <content type="html">&lt;p&gt;This is the second part of a four-part series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/blog/2021/01/23/functional-programming.html&quot;&gt;Part 1: What is functional programming?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 2: Pure functional programming and shared mutable state&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/blog/2021/01/23/pure-functional-programming-in-javascript.html&quot;&gt;Part 3: Pure functional programming in JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/blog/2021/09/11/composable-abstractions.html&quot;&gt;Part 4: Composable abstractions in practice&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;In the previous post, I talked about four key concepts of functional programming.
Pure (or purely) functional programming adds a fifth one:&lt;/p&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;Use pure functions wherever possible. And where interaction with shared mutable state is necessary, make it explicit.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;(In fact, in a purely functional programming language, there are only pure functions.)&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;pure function&lt;/strong&gt; has both of the following properties:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Its return value is the same for the same arguments&lt;br /&gt;
(no reading of shared mutable state)&lt;/li&gt;
&lt;li&gt;Its evaluation has no side effects&lt;br /&gt;
(no writing to shared mutable state)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Thus a pure function behaves like a mathematical function. This means you can replace the function call with its result without changing the behaviour of your program (this property is called &lt;a href=&quot;https://en.wikipedia.org/wiki/Referential_transparency&quot;&gt;referential transparency&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;A function has a &lt;strong&gt;side effect&lt;/strong&gt; if it modifies some state outside its local environment – i.e. calling the function has an observable effect (to the caller) besides returning a value.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Shared mutable state&lt;/strong&gt; is a bit of a mouthful, so let’s break it down:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;state&lt;/em&gt; is some data that is persisted over time. (A stateful system remembers previous events or user interactions.)&lt;/li&gt;
&lt;li&gt;state is &lt;em&gt;mutable&lt;/em&gt; if it can be modified.&lt;/li&gt;
&lt;li&gt;state is &lt;em&gt;shared&lt;/em&gt; if multiple parties can access it concurrently. (e.g. multiple programs accessing the same file, or multiple parts of a program accessing the same memory location)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It should be clear now that the notions of “pure/impure functions”, “side effects” and “shared mutable state” are three aspects of the same concept.&lt;/p&gt;
&lt;h3&gt;The root of all evil&lt;/h3&gt;
&lt;p&gt;Shared mutable state is believed by many to be the “root of all evil”, or at least the cause of most of the accidental complexity in our code. And “Complexity is &lt;em&gt;the&lt;/em&gt; root cause of the vast majority of problems with software today.” (from &lt;a href=&quot;http://curtclifton.net/papers/MoseleyMarks06a.pdf&quot;&gt;Out of the Tar Pit&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Shared mutable state makes code unpredictable, hard to reason about and hard to test. It’s bad for the same reason global variables are bad. Data should be kept as local as possible and side effects should be avoided.&lt;/p&gt;
&lt;p&gt;Finally, if you add &lt;a href=&quot;https://en.wikipedia.org/wiki/Concurrent_computing&quot;&gt;concurrency&lt;/a&gt; to a program making use of shared mutable state, you easily get &lt;a href=&quot;https://en.wikipedia.org/wiki/Race_condition&quot;&gt;race conditions&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Two kinds of shared mutable state&lt;/h3&gt;
&lt;p&gt;Shared mutable state can be divided into two categories, depending on where it is persisted:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;the world outside the program&lt;/li&gt;
&lt;li&gt;the program’s own memory&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Interacting with the outside world is generally called I/O (input/output) and includes writing to (or reading from) a file, a database, a network, etc. Most programmers are on some level aware that these things represent a form of external state (which is obviously shared and mutable), and the danger this entails. (For example cache invalidation is arguably just a special case of mutating shared state.)&lt;/p&gt;
&lt;p&gt;Relatively few programmers on the other hand appreciate the danger of different parts of your own program being able to modify the same memory location. Hearing it phrased like this, many will say that in most programming languages at least we don’t have pointers any more, and cannot access arbitrary memory locations by address like you can in C. But having references to shared memory locations (and being able to write to them), is only a slight improvement.&lt;/p&gt;
&lt;p&gt;Since any real program eventually needs to interact with the outside world, I/O cannot be avoided completely. But we can try to write as much as possible of our program in pure functions (especially the tricky parts like business logic that need to be tested and reasoned about), and clearly separate those from the parts of the program that does the necessary I/O.&lt;/p&gt;
&lt;p&gt;The following mitigation techniques exist to the two problems:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;code that does any kind of I/O is explicitly marked as such. (Using an IO monad or other effect system. This is somewhat similar to how the &lt;code&gt;async&lt;/code&gt; keyword works in JavaScript.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;concurrent mutation of shared memory is prevented by either:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;using immutable data structures&lt;/li&gt;
&lt;li&gt;having mutable data structures that are not shared&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In purely functional programming, immutable data structures are used almost exclusively. The Rust programming language’s “borrow checker” is a notable implementation of option 2.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;p&gt;Continue reading &lt;a href=&quot;/blog/2021/01/23/pure-functional-programming-in-javascript.html&quot;&gt;the last part in this blog series&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2021/01/23/pure-functional-programming-in-javascript</id>
      <title>Pure functional programming in JavaScript</title>
      <updated>2021-01-23T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2021/01/23/pure-functional-programming-in-javascript" />
      
      <content type="html">&lt;p&gt;This is the third part of a four-part series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/blog/2021/01/23/functional-programming.html&quot;&gt;Part 1: What is functional programming?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/blog/2021/01/23/pure-functional-programming-and-shared-mutable-state.html&quot;&gt;Part 2: Pure functional programming and shared mutable state&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 3: Pure functional programming in JavaScript&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/blog/2021/09/11/composable-abstractions.html&quot;&gt;Part 4: Composable abstractions in practice&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;In the first part of this blog series, we looked at the functional programmimg style with some examples given in JavaScript. In the second part, we looked at pure functional programming and why shared mutable state is the root of all evil. In this third part we look at what pure functional programming can mean in JavaScript.&lt;/p&gt;
&lt;h3&gt;React.js&lt;/h3&gt;
&lt;p&gt;By using React.js’s state handling functionality (&lt;code&gt;useState&lt;/code&gt;, &lt;code&gt;useReducer&lt;/code&gt;), you also mostly avoid shared mutable state. Every mutation of state is only applied on the next re-render, so for the duration of the current rendering cycle, there is no mutation of shared state. If you need side effects (to modify state outside React), you use &lt;code&gt;useEffect&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Do pure functions exist in JavaScript?&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://hackernoon.com/do-pure-functions-exist-in-javascript-b128ed5f0ed2&quot;&gt;Arguably&lt;/a&gt;, in JavaScript there are no pure functions, since basic building blocks of the language can be tampered with between function calls. For example the &lt;code&gt;Array.map&lt;/code&gt; prototype can be polluted, making any function that uses &lt;code&gt;.map&lt;/code&gt; return something else than it did before the tampering.&lt;/p&gt;
&lt;p&gt;But as long as you have an agreement among all programmers working on the code to not do such crazy things, the notion of a pure function is still useful in JavaScript.&lt;/p&gt;
&lt;h3&gt;Mutable reference arguments&lt;/h3&gt;
&lt;p&gt;Previously, we said that “a pure function’s return value is the same for the same arguments”. But we didn’t specify a definition of “same”.&lt;/p&gt;
&lt;p&gt;Object reference equality seems a bad definition (since e.g. &lt;code&gt;[] === []&lt;/code&gt; is &lt;code&gt;false&lt;/code&gt;), but using something like &lt;a href=&quot;https://lodash.com/docs/4.17.15#isEqual&quot;&gt;lodash’s &lt;code&gt;_.isEqual&lt;/code&gt;&lt;/a&gt; seems to be useful in practice (even if &lt;a href=&quot;https://stackoverflow.com/questions/65872468/is-this-javascript-function-taking-a-mutable-reference-argument-a-pure-functio&quot;&gt;not perfect&lt;/a&gt;). Now, in most programming languages it makes perfect sense that if a function takes a mutable references as an argument, it cannot be pure, since another thread might modify the data structure while our function is running. In JavaScript’s single-threaded environment however, as long as your function doesn’t use any asynchronous code, this actually cannot happen.&lt;/p&gt;
&lt;h3&gt;Immutability in practice&lt;/h3&gt;
&lt;p&gt;JavaScript doesn’t ship with immutable data structures, but you might think of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;libraries like Immutable.js that &lt;a href=&quot;https://github.com/immutable-js/immutable-js/issues/1689&quot;&gt;used to&lt;/a&gt; enjoy some popularity, but it&#39;s not the same thing as having support built right into the language, since it adds some overhead (both syntactical and in terms of dependencies).&lt;/li&gt;
&lt;li&gt;you can use &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze&quot;&gt;Object.freeze&lt;/a&gt;, but you have to remember to write that everywhere you create a new object and it’s shallow (the freeze doesn’t affect nested objects).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However, you can write pure functions relatively easily by using the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax&quot;&gt;spread syntax&lt;/a&gt; to create a shallow copy of an object or array, instead of modifying the argument your function received. Modifying a deeply nested object may still be tempting, but would of course make your function impure.&lt;/p&gt;
&lt;h3&gt;Performance&lt;/h3&gt;
&lt;p&gt;Because making lots of new objects can be expensive in JavaScript, in rare cases, you may also want to forgo purity simply due to performance reasons. (But beware of premature optimization!)&lt;/p&gt;
&lt;p&gt;These functions still don&#39;t do any I/O and they don&#39;t access non-local variables. But they may modify the objects given to them as arguments. It is then the caller&#39;s responsibility to take those modifications into account, or to not use the references to those objects anymore – which in the absence of Rust’s borrow checker, is of course a lot easier said than done and can be the cause of bugs.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2021/09/11/composable-abstractions</id>
      <title>Composable Abstractions in Practice</title>
      <updated>2021-09-11T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2021/09/11/composable-abstractions" />
      
      <content type="html">&lt;p&gt;This is the final part of a four-part series:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/blog/2021/01/23/functional-programming.html&quot;&gt;Part 1: What is functional programming?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/blog/2021/01/23/pure-functional-programming-and-shared-mutable-state.html&quot;&gt;Part 2: Pure functional programming and shared mutable state&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/blog/2021/01/23/pure-functional-programming-in-javascript.html&quot;&gt;Part 3: Pure functional programming in JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 4: Composable abstractions in practice&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;All programming can be seen as coming up with &lt;a href=&quot;https://medium.com/javascript-scene/abstraction-composition-cb2849d5bdd6&quot;&gt;abstractions&lt;/a&gt; and using them to build even higher abstractions.&lt;/p&gt;
&lt;p&gt;This pyramid of abstractions can be seen on the system level (hardware &amp;gt; operating system &amp;gt; application), but also in the evolution of programming languages themselves. I&#39;ve picked four representative languages, each one at a higher level of abstraction than the previous one:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x86 assembly: consistent interface to different CPUs with different microarchitectures&lt;/li&gt;
&lt;li&gt;C: eliminating manual register management and introducing loops in favour of jump/goto&lt;/li&gt;
&lt;li&gt;Java: garbage collector instead of manual memory management and eliminating goto completely&lt;/li&gt;
&lt;li&gt;Haskell: immutable data structures instead of stateful memory and map/recursion instead of loops&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Functional programming offers the insight that simple functions are great abstractions.&lt;/p&gt;
&lt;h2&gt;What is abstraction&lt;/h2&gt;
&lt;p&gt;The process of abstraction is removing things (e.g. concrete implementations), so only the essential idea remains (exposed). The result of this process is also called an abstraction.&lt;/p&gt;
&lt;p&gt;A good abstraction hides complexity behind a simple interface.&lt;/p&gt;
&lt;p&gt;Sure, at some point every programming abstraction breaks down and the underlying implementation&#39;s characteristics &lt;a href=&quot;https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/&quot;&gt;leak through&lt;/a&gt;. But if it&#39;s a good abstraction for what you&#39;re trying to do, this happens relatively rarely. And while it doesn&#39;t, the programmer&#39;s mind only must keep the simple interface in his or her head – e.g. when calling a pure function, you usually only need to care about its interface, not its implementation.&lt;/p&gt;
&lt;p&gt;If done right, the underlying abstractions don&#39;t (need to) change as often, so they can be carefully built and tested once. Higher-level code, which implements more specific things (e.g. business requirements), can then be easily changed more frequently.&lt;/p&gt;
&lt;h2&gt;Good abstractions compose well&lt;/h2&gt;
&lt;p&gt;Programming consists of decomposing your problem recursively into smaller and smaller sub-problems. As your experience as a programmer (or your projects&#39;s scope) grows, you&#39;ll see similar solutions pop up again and again to only slightly different problems. You can then tease out what these solutions have in common, extract that, and hide it behind a more general abstarction. By giving the abstraction a name, it can be reused again and again.&lt;/p&gt;
&lt;p&gt;It’s true that the more general an abstraction is, the more widely it can be reused. But the most general abstraction is no good if it isn&#39;t simple to use for a specific use-case. (It&#39;s easy to create a very general function by just having it take lots of arguments, but that&#39;s hardly hiding complexity behind a simple interface.) If a function hides a lot of complexity behind a simple interface, it does it’s job – even if it’s only used in one other place in the codebase. Yet too often, programmers try to come up with abstractions that are too general, and end up with something that’s not composable and not simple to use.&lt;/p&gt;
&lt;p&gt;Good abstractions compose well – like Lego bricks. Or like adding two integers alwyas yields an integer again (unlike pesky division).&lt;/p&gt;
&lt;p&gt;In order to facilitate building your solution up from sub-solutions, good abstractions expose consistent and composable interfaces – meaning that the abstractions that live at the same level in your sytem, should be easily composable to build the next higher level. Think of how neatly Lego bricks always fit together to build bigger structures. The crazy thing in programming is that you can build shipping containers using Legos – and then you can continue to do the same thing at the next level and stack whole shipping containers to build a house.&lt;/p&gt;
&lt;h2&gt;Functional thinking in practice&lt;/h2&gt;
&lt;p&gt;As explained very well in &lt;a href=&quot;https://www.manning.com/books/grokking-simplicity&quot;&gt;Eric Normand’s Grokking Simplicity&lt;/a&gt;, functional programmers divide all code in:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;data&lt;/li&gt;
&lt;li&gt;calculations (pure functions)&lt;/li&gt;
&lt;li&gt;actions (impure functions)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Data can be composed very easily (e.g. numbers can be added, strings and arrays can be concatenated, and maps can be merged). Pure functions are harder to compose than simple data, but not as hard as impure functions. Impure functions are more general than pure functions, but because you always have to worry about side-effects and order of execution, they are less composable.&lt;/p&gt;
&lt;p&gt;That’s why functional programmers prefer data over pure functions, and they prefer pure functions over impure functions.&lt;/p&gt;
&lt;h2&gt;Composable abstractions in practice&lt;/h2&gt;
&lt;p&gt;If I had to come up with a list of the most important abstractions that functional programmers use in practice, it would be this list of simple yet extremely powerful abstractions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Data is modelled with &lt;a href=&quot;https://funprogramming.substack.com/p/algebraic-data-types&quot;&gt;algebraic data types&lt;/a&gt; (Ideally, the programming language supports pattern matching on those data types, meaning that the code branches (think &lt;code&gt;if/else&lt;/code&gt; or &lt;code&gt;switch&lt;/code&gt;) depending on the shape of the data that’s matched on.)&lt;/li&gt;
&lt;li&gt;Calculations are modelled using pure functions and actions are modelled using impure functions. If the behaviour of a function needs to be more configurable, often the best way to do so is to have it take another function as an argument. It’s then a &lt;a href=&quot;https://eloquentjavascript.net/05_higher_order.html&quot;&gt;higher-order function&lt;/a&gt;. (For this to work, functions need to be first-class citizens in your programming language.)&lt;/li&gt;
&lt;li&gt;A programming language’s syntax is an abstraction over assembly. Unfortunately, a lot of current programming languages have both expressions &lt;em&gt;and&lt;/em&gt; statements. While expressions can be endlessly nested, combined and composed to form bigger expressions, statements can only be combined sequentially using the semicolon. That’s why functional programmers favour expressions over statements.&lt;/li&gt;
&lt;li&gt;Generics are used to make both data (&lt;code&gt;Array&amp;lt;T&amp;gt;&lt;/code&gt;) and functions  (&lt;code&gt;identity: (a: T) =&amp;gt; T&lt;/code&gt;) polymorphic, providing an easy way to generalize a given abstraction if it works the same for different types anyway.&lt;/li&gt;
&lt;li&gt;Mathematical algebraic structures are a powerful way of thinking about, and generalizing over, a diverse set of structures we encounter routinely in programming. One of the most ubiquitous ones are &lt;a href=&quot;https://marmelab.com/blog/2018/04/18/functional-programming-2-monoid.html&quot;&gt;monoids&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2021/09/18/categorization-of-programming-languages</id>
      <title>A Categorization of Programming Languages</title>
      <updated>2021-09-18T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2021/09/18/categorization-of-programming-languages" />
      
      <content type="html">&lt;p&gt;There are many ways to categorize a given set of things. I find it useful to place today’s major general-purpose programming languages (and then some I added because I find them interesting) in three dimensions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x-axis: type system – from weak dynamic typings, progressing to strong dynamic typing (which doesn’t make that much of a difference) on the left, to compile-time checked static typings like C and Java and finally much more expressive static &lt;a href=&quot;https://en.wikipedia.org/wiki/Type_system&quot;&gt;typings&lt;/a&gt; like &lt;a href=&quot;https://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_system&quot;&gt;Hindley–Milner type systems&lt;/a&gt; on the right.&lt;/li&gt;
&lt;li&gt;y-axis: degree to which a language is conductive to writing code in a functional style – from not at all (imperative paradigm) at the bottom, to multi-paradigm languages in the middle and finally  &lt;a href=&quot;https://en.wikipedia.org/wiki/Purely_functional_programming&quot;&gt;purely functional&lt;/a&gt; languages at the top.&lt;/li&gt;
&lt;li&gt;color-code: of all the languages shown, only three have no runtime-overhead due to &lt;a href=&quot;https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)&quot;&gt;garbage collection&lt;/a&gt;: C, C++ and Rust. (Swift is using &lt;a href=&quot;https://en.wikipedia.org/wiki/Automatic_Reference_Counting&quot;&gt;ARC&lt;/a&gt;, which is not strictly speaking garbage collection, but still comes with some runtime overhead.) The others either target a common runtime system (JVM, .NET, Erlang runtime), have their language-specific runtime (JavaScript or compile-to-JavaScript, Python, Ruby, PHP), or bundle the runtime with each binary (Go, Haskell).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/blog/assets/2021-09-18-categorization-of-programming-languages/categorization-of-programming-languages.svg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Of course, these are only what I find are the three major technical considerations. When picking a language for a specific project, there are also a lot of soft factors to consider, like community and ecosystem, experience of the team, etc.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2022/04/10/example-of-algebraic-data-types-in-swift-kotlin-rust-typescript</id>
      <title>An example of Algebraic Data Types in Swift, Kotlin, Rust and TypeScript</title>
      <updated>2022-04-10T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2022/04/10/example-of-algebraic-data-types-in-swift-kotlin-rust-typescript" />
      
      <content type="html">&lt;p&gt;This post contains a simple example of using algebraic data types in Swift, Kotlin, Rust and TypeScript. The example is the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Define a product type &lt;code&gt;User&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Define a sum type &lt;code&gt;State&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Implement a pure function &lt;code&gt;render&lt;/code&gt; that pattern-matches on the sum type.&lt;/li&gt;
&lt;li&gt;Call &lt;code&gt;render&lt;/code&gt; with a state containing a user and print the resulting string.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Swift&lt;/h2&gt;
&lt;p&gt;See also the nice blog post &lt;a href=&quot;https://medium.com/nerd-for-tech/algebraic-data-types-in-swift-2a777b24253d&quot;&gt;Algebraic Data Types in Swift&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;struct User {
    let email: String
    let name: String
}

enum State {
    case loading
    case loggedOut
    case loaded(User)
}

func render(state: State) -&amp;gt; String {
    switch state {
    case .loading: return &amp;quot;...&amp;quot;
    case .loggedOut: return &amp;quot;Please log in...&amp;quot;
    case .loaded(let user): return &amp;quot;Logged in as \(user.name)&amp;quot;
    }
}

let user = User(email: &amp;quot;me@gmail.com&amp;quot;, name: &amp;quot;me&amp;quot;)
let state = State.loaded(user)
print(render(state: state))
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Kotlin&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;data class User (
    var email: String,
    var name: String
)

// by sealing the class, the compiler will know all subclasses
// and can thus warn us about non-exhaustive pattern matches
sealed class State {
    object Loading: State()
    object LoggedOut: State()
    data class Loaded(
        val user: User
    ): State()
}

fun render(state: State): String {
    // still, exhaustiveness checking only works if the
    // `when` is used as an expression, like here
    return when (state) {
        is State.Loading -&amp;gt; &amp;quot;...&amp;quot;
        is State.LoggedOut -&amp;gt; &amp;quot;Please log in...&amp;quot;
        is State.Loaded -&amp;gt; &amp;quot;Logged in as ${state.user.name}&amp;quot;
    }
}

fun main() {
    var user = User(&amp;quot;me@gmail.com&amp;quot;, &amp;quot;me&amp;quot;)
    var state = State.Loaded(user)
    println(render(state))
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Rust&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;#[allow(dead_code)]
struct User {
    email: String,
    name: String
}

#[allow(dead_code)]
enum State {
    Loading,
    LoggedOut,
    Loaded(User)
}

fn render(state: State) -&amp;gt; String {
  match state {
      State::Loading =&amp;gt; &amp;quot;...&amp;quot;.to_string(),
      State::LoggedOut =&amp;gt; &amp;quot;Please log in...&amp;quot;.to_string(),
      State::Loaded(user) =&amp;gt; format!(&amp;quot;Logged in as {}&amp;quot;, user.name)
  }
}

fn main() {
    let email = &amp;quot;me@gmail.com&amp;quot;.to_string();
    let name = &amp;quot;me&amp;quot;.to_string();

    let user = User { email, name };
    let state = State::Loaded(user);

    println!(&amp;quot;{}&amp;quot;, render(state));
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;TypeScript&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;type User = {
  email: string;
  name: string;
}

type State = &#39;loading&#39; | &#39;loggedOut&#39; | User

// it&#39;s important to put a return type here,
// otherwise exhaustiveness checking will not work
const render = (state: State): string =&amp;gt; {
  switch (state) {
    // js switch can only match on primitive types like strings
    // in this example, we can abuse default case to reach the User object
    case &#39;loading&#39;: return &#39;...&#39;
    case &#39;loggedOut&#39;: return &#39;Please log in...&#39;
    default: return `Logged in as ${state.name}`
  }
}

const state = { email: &#39;me@gmail.com&#39;, name: &#39;me&#39; }
console.log(render(state))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or more explicitly (but slightly more verbose):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;type User = {
  email: string;
  name: string;
}

type State =
  { type: &#39;loading&#39; } |
  { type: &#39;loggedOut&#39; } |
  { type: &#39;user&#39;; user: User }

const render = (state: State): string =&amp;gt; {
  switch (state.type) {
    case &#39;loading&#39;: return &#39;...&#39;
    case &#39;loggedOut&#39;: return &#39;Please log in...&#39;
    case &#39;user&#39;: return `Logged in as ${state.user.name}`
  }
}

const user = { email: &#39;me@gmail.com&#39;, name: &#39;me&#39; }
const state: State = { type: &#39;user&#39;, user }
console.log(render(state))
&lt;/code&gt;&lt;/pre&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2023/09/18/building-a-modern-website-ssg-vs-ssr-spa-vs-mpa-svelte-vs-solid</id>
      <title>Building a Modern Website? SSG vs. SSR, SPA vs. MPA, Svelte vs. Solid</title>
      <updated>2023-09-18T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2023/09/18/building-a-modern-website-ssg-vs-ssr-spa-vs-mpa-svelte-vs-solid" />
      
      <content type="html">&lt;p&gt;You wanna build a modern website? Okay. Assuming you have no baggage (like existing know-how with PHP, Ruby on Rails or similar), you most likely go with the one programming language that not only runs on servers, but also in the browser: JavaScript. Or more accurately, assuming you believe in statically-typed languages (discovering bugs already at compile-time, types as documentation, easier refactoring), you go with TypeScript.&lt;/p&gt;
&lt;p&gt;(If you won&#39;t ever need rich interactivity in the browser, or you&#39;re fine with learning two programming languages and stacks, you can of course also choose something else then JavaScript to run on your server, and use a bit of vanilla JavaScript or &lt;a href=&quot;https://htmx.org/&quot;&gt;HTMX&lt;/a&gt; to add some limited interactivity.)&lt;/p&gt;
&lt;h2&gt;Static-Site-Generation (SSG) vs Server-Side-Rendering (SSR)&lt;/h2&gt;
&lt;p&gt;If you have an ordinary website with less than a couple thousand pages, go with Static-Site-Generation (SSG). It&#39;s simple. You don&#39;t have to run a server: that means no server to harden against load spikes or attacks, it&#39;s basically free, and out-of-date dependencies aren&#39;t really a security issue. Put up a repository on GitHub and connect it with &lt;a href=&quot;https://www.netlify.com/&quot;&gt;Netlify&lt;/a&gt; or &lt;a href=&quot;https://vercel.com/&quot;&gt;Vercel&lt;/a&gt;. Whenever somebody edits or adds a new page (either by editing a markdown file on GitHub, through &lt;a href=&quot;https://decapcms.org/&quot;&gt;Decap CMS&lt;/a&gt;, or through a headless CMS), a new build is triggered, the whole website is regenerated and its static HTML, CSS (and perhaps JS) files are uploaded to some &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Glossary/CDN&quot;&gt;CDN&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unless regeneration of the website is taking too long for you, there is rarely a reason to not stick with SSG.&lt;/strong&gt; (Except if you have other fancy requirements, like serving different HTML to different users and you cannot just customise that with some JavaScript on the client after page-load.)&lt;/p&gt;
&lt;p&gt;If you need your users to submit a form, or you need to add a few other dynamic features, you can always add a &amp;quot;serverless function&amp;quot; (fancy-speak for an AWS Lambda function) or an &amp;quot;edge function&amp;quot; (fancy-speak for a Cloudflare Worker or similar) and usually you&#39;ll be fine.&lt;/p&gt;
&lt;p&gt;But perhaps you have millions of pages, so the regeneration takes longer than a few minutes. Or perhaps even three minutes is too long for you, since you want to publish breaking news. Or perhaps your many authors update the content so often, or your developers update the code so often, that the couple of minutes of generation time are just too annoying to put up with every time.&lt;/p&gt;
&lt;p&gt;Then perhaps, it&#39;s time to consider Server-Side-Rendering (SSR). Each page is generated on-demand, only when the user requests it from the server. You can do that with &amp;quot;serverless functions&amp;quot; (although currently AWS Lambdas don&#39;t support HTTP streaming), or &amp;quot;edge functions&amp;quot; (although you&#39;ll have a long round-trip-time from the edge to the central database – if you have one – so you benefit little from running on the edge close to your users). Or you can go fully old-school and do what everyone did in the PHP and Ruby days: just run a server. Nowadays it&#39;s running somewhere in the cloud (on &lt;a href=&quot;https://render.com/&quot;&gt;render.com&lt;/a&gt;, &lt;a href=&quot;https://fly.io/&quot;&gt;fly.io&lt;/a&gt;, or just AWS or Azure) – and you can scale horizontally and add more servers once that&#39;s needed – but the principle is fundamentally the same. And it&#39;s still a great option.&lt;/p&gt;
&lt;h2&gt;Interlude: the pendulum of technology&lt;/h2&gt;
&lt;p&gt;If you&#39;ve been around building websites for a couple of decades, you may know that static-site generation is a terribly old hat. In the first days of the web, that was in fact the only way to build a website: you would just upload your static files via FTP to some server. And some folks, that were fed up with having to change the header and footer in &lt;em&gt;all&lt;/em&gt; their HTML files whenever it needed updating, they even cobbled together bash scripts to do static-site generation – even though it wasn&#39;t known under that name at that time. Of course, once servers gained the ability to run PHP, almost everyone switched to doing that (and thanks to WordPress and its ilk, a lot of websites are still server-side rendered with PHP). Until static generation came back again with static-site generators like &lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt;, which is still the default for &lt;a href=&quot;https://pages.github.com/&quot;&gt;GitHub Pages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And that&#39;s the way it is with a lot of technologies: the pendulum swings back and forth between two extremes as time goes by. Some of it is just fashion. Some of it is also driven by technological constraints at that moment. And these things influence each other: the more people think of a certain approach or technology as &amp;quot;hip&amp;quot; or &amp;quot;state of the art&amp;quot;, the more resources will go into improving that. Until other people start to think of it as a dead-end and will start working on a different approach, sometimes taking into accounts the lessons from the past, sometimes less so. And thus the pendulum starts to slow and eventually swing back.&lt;/p&gt;
&lt;p&gt;Another example is the pendulum swinging between where the majority of the work happens: on the client or on the server. For a time, you had mainframe servers that did the heavy lifting, with thin clients/terminals attached. Then came the personal computer, which shifted work back to the client (the desktop PC). Then came the World Wide Web, and later the cloud, and shifted work back to servers. Meanwhile, with the advent of lots of JavaScript/AJAX in websites and native apps in iPhones, the GUI shifted back to the client for a while, with the server relegated to just providing a JSON API to sync up the data.&lt;/p&gt;
&lt;h2&gt;Single-Page App (SPA) vs. Multi-Page App (MPA)&lt;/h2&gt;
&lt;p&gt;For some time, in the early 2010s, people would go even so far as to not have the server render any HTML, but just serve a blank page with a bunch of JavaScript that would then render the GUI, and even take over the task of page navigation from the browser: the quintessential SPA. By 2020, people realized that serving a blank page gave users a slow initial page load, so the first page was server-side rendered in Next.js and similar frameworks. But on page navigation (when a user clicks a link), the whole code for the next page needed to be downloaded and run in the browser after all.&lt;/p&gt;
&lt;p&gt;This is not the case with React-Server-Components (RSC) and Next.js App Router anymore. There, server-components are rendered on the server and then the JSX is serialized and sent over the wire.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But the definitional feature of a SPA remains: the browser loads only a single page, later page navigations are simulated with JavaScript.&lt;/strong&gt; That’s called a client-side router, and it has to reimplement browser features like loading indicators, scroll restoration on back navigation, which adds to the JavaScript bundle size, and never works quite the same. And it definitely doesn&#39;t work while the browser has already rendered the initial HTML, but the JavaScript hasn&#39;t executed yet.&lt;/p&gt;
&lt;p&gt;The idea of a SPA is that you’re trading upfront page load time with a better user experience later on. You don’t need to reinitialize everything after a page navigation. And arguably, SPAs have better page transitions than browsers used to have.&lt;/p&gt;
&lt;p&gt;But guess what; browsers have improved since and the &lt;a href=&quot;https://nolanlawson.com/2022/05/21/the-balance-has-shifted-away-from-spas/&quot;&gt;balance has started to shift away from SPAs again&lt;/a&gt;. Modern browsers have no flash of white between pages anymore, they have &lt;a href=&quot;https://web.dev/articles/bfcache&quot;&gt;back-forward caching&lt;/a&gt; and service workers for offline functionality, etc.&lt;/p&gt;
&lt;p&gt;There are still some use-cases that can only be realized in a SPA, like playing audio or video during page navigation, or otherwise keep state in the DOM (like cursor position) that cannot be easily persisted in localStorage. And if you need any of this, because you&#39;re building the next Figma, then absolutely, go with a SPA.&lt;/p&gt;
&lt;p&gt;But for most cases, I would just do a MPA, profit from the reduction in JavaScript bundle size, let the browser handle what is was built to do: page navigation, scroll restoration, page caching, streaming in HTML – and an HTTP GET that returns HTML is way easier to debug than RSC&#39;s stream of JSX. Finally, RSCs are currently only available in Next.js&#39;s App Router – which is production-ready in name only as of 2024. Meanwhile, &lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt; is a MPA-framework in version 3.0 today, that brings everything you’d expect from a modern framework: components, CSS modules, TypeScript, etc.&lt;/p&gt;
&lt;p&gt;(If you don&#39;t do a classical SPA, you don&#39;t have to build a dedicated REST or GraphQL backend which would need to be secured and maintained – just query the database directly in your server code. Especially when you&#39;re still small, and don&#39;t have separate backend and frontend teams, this is a huge time-saver.)&lt;/p&gt;
&lt;h2&gt;Svelte vs. Solid&lt;/h2&gt;
&lt;p&gt;At some point, there comes the time for your project to add some client-side interactivity that goes beyond what can be reasoned about in vanilla JavaScript; when you need to maintain some state and keep the GUI synced with it. In Astro, you can place &lt;a href=&quot;https://docs.astro.build/en/concepts/islands/&quot;&gt;islands&lt;/a&gt; of client-side interactivity in the server-side rendered page. Islands can be implemented in any of the popular client-side GUI frameworks like React, Preact, etc. And obviously only the islands&#39; JavaScript needs to be downloaded to the browser. To &lt;a href=&quot;https://docs.astro.build/en/core-concepts/sharing-state/&quot;&gt;share client-side state between the islands&lt;/a&gt;, you can use a library like Nano Stores or just use Solid signals.&lt;/p&gt;
&lt;p&gt;Now you need to choose a GUI framework. Let’s say you bring no baggage, like existing know-how in React (which still has the biggest market-share) or similar. Or you&#39;re looking to learn something new. You want it to be fast and small. I would argue then you only have to choose between &lt;a href=&quot;https://svelte.dev/&quot;&gt;Svelte&lt;/a&gt; and &lt;a href=&quot;https://www.solidjs.com/&quot;&gt;Solid&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;(And perhaps &lt;a href=&quot;https://qwik.builder.io/&quot;&gt;Qwik&lt;/a&gt;, which I haven&#39;t evaluated deeply. Definitely cool that they claim to be viable solution for both SPAs and MPAs. But if you&#39;ve decided to go for an MPA already, then I&#39;d trust Astro Island&#39;s explicit separation between client and server code a bit more than Qwik&#39;s approach where one developer&#39;s mishap might inadvertently pull in lots of code and even secrets into the client-bundle.)&lt;/p&gt;
&lt;p&gt;Both Svelte and Solid are truly reactive frameworks (unlike React), meaning when something changes, not the whole component is recomputed, but a dependency-graph is followed, to figure out what exactly needs to be updated.&lt;/p&gt;
&lt;p&gt;Solid&#39;s syntax is almost the same as React. You&#39;re just writing &lt;code&gt;const [count, setCount] = createSignal()&lt;/code&gt; instead of &lt;code&gt;const [count, setCount] = useState()&lt;/code&gt; (having separate getter and setters is called Read/Write Segregation and enforces unidirectional flow).&lt;/p&gt;
&lt;p&gt;Svelte uses a compiler for reactivity, adding some JavaScript to each component, whereas Solid ships a small runtime and reuses that in each component. Therefore, for small apps Svelte has smaller bundle size but for a bit larger apps, Solid quickly takes the lead.&lt;/p&gt;
&lt;p&gt;Svelte uses the bit weird &lt;code&gt;$&lt;/code&gt; label to mark up reactive regions, which the compiler then transforms, whereas in Solid the reactive system is just a library. It&#39;s just JavaScript all the way down – except for JSX, which is the only thing compiled in Solid (although there are a few transformations happening in the JSX that you have to get used to). Solid&#39;s approach also means that the reactivity graph is debuggable at runtime.&lt;/p&gt;
&lt;p&gt;An area where Svelte shines is great out-of-the-box support for animations, and it can support those better with component lifecycle hooks.&lt;/p&gt;
&lt;p&gt;Considering all the above, for most use-cases, I would personally choose Solid.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;So there you have it. Here&#39;s my advice: for the most common cases, build a statically-generated Astro MPA with some Solid islands. Feel free to disagree.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2023/12/13/right-mental-model-for-git</id>
      <title>The right mental model for Git</title>
      <updated>2023-12-13T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2023/12/13/right-mental-model-for-git" />
      
      <content type="html">&lt;p&gt;This post was prompted by &lt;a href=&quot;https://jvns.ca&quot;&gt;Julia Evans&lt;/a&gt; ruminations on Mastodon while she was working on a tutorial zine about the version control system &lt;a href=&quot;https://git-scm.com&quot;&gt;Git&lt;/a&gt;. In particular, I posted a rough version of this post in &lt;a href=&quot;https://hachyderm.io/@mb21/111569162158572506&quot;&gt;this thread&lt;/a&gt; but wanted to flesh it out here.&lt;/p&gt;
&lt;p&gt;While (almost) everyone agrees that the user-experience of Git&#39;s command-line interface is terrible (there are a lot of confusing names to memorize, and any one command does a lot of different things), people disagree on whether the underlying concepts of Git are intuitive or not. I happen to be one of those people that are perfectly happy thinking of a Git repository as a DAG (&lt;a href=&quot;https://en.wikipedia.org/wiki/Directed_acyclic_graph&quot;&gt;Directed Acyclic Graph&lt;/a&gt;) of commits.&lt;/p&gt;
&lt;p&gt;While I&#39;m not claiming this is 100% right, the following mental model of Git has served me very well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A &lt;strong&gt;commit&lt;/strong&gt; is identified by a &lt;a href=&quot;https://www.codecademy.com/resources/blog/what-is-hashing/&quot;&gt;hash&lt;/a&gt; (e.g. &lt;code&gt;84ecff443c07dd3c7e8a3b6cee5a0fd51dc7f891&lt;/code&gt;), which is computed from:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;a &lt;a href=&quot;https://en.wikipedia.org/wiki/Diff&quot;&gt;diff&lt;/a&gt; of all the changes,&lt;/li&gt;
&lt;li&gt;the commit message,&lt;/li&gt;
&lt;li&gt;a parent pointer (which is just the parent commit’s hash).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;By following a commit&#39;s parent pointers recursively and adding all the diffs from the beginning, a snapshot of your files at any point in the history can be reconstructed. (Implementation-wise these snapshots surely are cached, because otherwise things would be very slow, but that’s best seen as an implementation detail.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A &lt;strong&gt;branch&lt;/strong&gt; (e.g. &lt;code&gt;main&lt;/code&gt;) is a named pointer to a commit. The pointer is often automatically moved along (e.g. when adding new commits to a branch).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A &lt;strong&gt;merge commit&lt;/strong&gt; has two parent pointers, which makes them a bit hard to work with.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There are various git commands that are known under the term &lt;strong&gt;rewriting history&lt;/strong&gt; (e.g. &lt;code&gt;git rebase&lt;/code&gt;, &lt;code&gt;--amend&lt;/code&gt;, etc). However, these commands don&#39;t modify a commit (which is impossible, since that would change its hash). These commands actually create new commits from old ones, and then point the branch to the last new commit.&lt;/p&gt;
&lt;p&gt;The old commits are usually orphaned by that operation – meaning they’re not reachable by following the parent pointers of any branch. But you can still find orphaned commits via &lt;code&gt;git reflog&lt;/code&gt; – until they’re garbage collected.&lt;/p&gt;
&lt;p&gt;Rewriting history and then pushing the change to a remote branch (e.g. on GitHub) requires a force-push. You should only do that if you know what you’re doing, and should never do that if others already have started work based on that branch, as that would leave their local branch in an incompatible state with the remote branch (their parent pointers would point to commits that no longer exist).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A &lt;strong&gt;remote&lt;/strong&gt; (e.g &lt;code&gt;origin&lt;/code&gt;) is a shortname for a url (e.g &lt;code&gt;https://github.com/my-user/my-repo&lt;/code&gt;), with the url locating a remote repository (often on GitHub). &lt;code&gt;git fetch&lt;/code&gt; downloads commits from that url into a local branch (e.g. &lt;code&gt;origin/main&lt;/code&gt;), which can then be merged into a normal local branch (e.g. &lt;code&gt;main&lt;/code&gt;). &lt;code&gt;git pull&lt;/code&gt; does &lt;code&gt;git fetch&lt;/code&gt; followed by &lt;code&gt;git merge&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The bad news is that there are more Git concepts than just these (such as ssh keys, tags, stashing, merge strategies, etc). But keeping this mental model in mind should keep you mostly sane.&lt;/p&gt;
&lt;p&gt;While I had the (mis-)fortune to just bite the bullet and learn git on the commandline, I&#39;ve heard good things of &lt;a href=&quot;https://gitup.co&quot;&gt;GitUp&lt;/a&gt; (if you&#39;re a mac user) and &lt;a href=&quot;https://magit.vc&quot;&gt;Magit&lt;/a&gt; (if you&#39;re an emacs user). Finally, if you just want something simple and stupid, &lt;a href=&quot;https://desktop.github.com&quot;&gt;GitHub Desktop&lt;/a&gt; works fairly well (you might want to start with &lt;a href=&quot;https://www.youtube.com/watch?v=8Dd7KRpKeaE&quot;&gt;this 20min video&lt;/a&gt;).&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2024/02/01/declaratively-rendering-components-html-vs-js-functions</id>
      <title>Declaratively rendering components: HTML vs JS functions</title>
      <updated>2024-02-01T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2024/02/01/declaratively-rendering-components-html-vs-js-functions" />
      
      <content type="html">&lt;p&gt;I’m a big fan of the idea of &lt;a href=&quot;https://en.wikipedia.org/wiki/Declarative_programming&quot;&gt;declarative programming&lt;/a&gt;. Examples are HTML and functional programming.&lt;/p&gt;
&lt;p&gt;But which of the following two approaches is more declarative when you’re rendering a bunch of components on your server, and your server happens to be running JavaScript?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Relying primarily on HTML, or&lt;/li&gt;
&lt;li&gt;relying primarily on JavaScript functions.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Consider the syntax of declaring a component: an &lt;a href=&quot;https://docs.astro.build/en/basics/astro-components/&quot;&gt;Astro component&lt;/a&gt; is primarily an HTML snippet:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-astro&quot;&gt;---
const { title } = Astro.props;
---
&amp;lt;details&amp;gt;
  &amp;lt;summary&amp;gt;{title}&amp;lt;/summary&amp;gt;
  &amp;lt;slot /&amp;gt;
&amp;lt;/details&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Whereas a &lt;a href=&quot;https://www.solidjs.com/tutorial/introduction_components&quot;&gt;React/Solid/JSX component&lt;/a&gt; is a JavaScript function:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-jsx&quot;&gt;export const Popover = (props) =&amp;gt;
  &amp;lt;details&amp;gt;
    &amp;lt;summary&amp;gt;{props.title}&amp;lt;/summary&amp;gt;
    {props.children}
  &amp;lt;/details&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice how child elements are passed to the component: in Astro you have to use a slot, similar to &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot&quot;&gt;HTML’s slot element&lt;/a&gt;, somehow mimicking how a poly-fill for native web functionality would work. But we’re running on a server here and rendering HTML to a string that will be sent over the network. There is no DOM, and Web Components will never be implemented in Node/Deno/whatever. In React/Solid, child elements are simply passed as &lt;code&gt;props.children&lt;/code&gt; – just like any other component prop.&lt;/p&gt;
&lt;p&gt;I’m sympathetic to Astro’s argument of starting out with the least powerful tool in the toolkit, which is HTML, and later you might add some frontmatter containing JavaScript. It’s nice that non-developers can contribute and only need to write HTML.&lt;/p&gt;
&lt;p&gt;But even in Astro, you won’t get very far without having to learn some JavaScript. Just passing some props to a component requires you to do that already (for the line &lt;code&gt;const { title } = Astro.props&lt;/code&gt;). In templating languages like handlebars, partials all live in a global namespace, whereas in Astro you need to use JavaScript import statements to be able to include your component in another page. It feels like Astro components live in this weird middle-ground: they try to be usable without JavaScript knowledge, but fail to be so for the most basic cases.&lt;/p&gt;
&lt;p&gt;In both Astro templates and JSX, we’re using a template system that’s embedded in its host language; meaning you can use arbitrary JavaScript syntax within the template, like &lt;code&gt;.map&lt;/code&gt; and &lt;code&gt;condition ? exp1 : exp2&lt;/code&gt; instead of &lt;code&gt;{{for}}&lt;/code&gt; and &lt;code&gt;{{if condition}} exp1 {{else}} exp2 {{end}}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Considering that, the answer may very well be be that leaning on JavaScript as much as possible (i.e. approach 2), requiring the developer to learn fewer different concepts, is the better approach. After all, functions are just such great &lt;a href=&quot;/blog/2021/09/11/composable-abstractions.html&quot;&gt;abstractions&lt;/a&gt;, when used well. Meaning the React/Solid folks got it right. An argument I tried to make over &lt;a href=&quot;https://github.com/withastro/roadmap/discussions/716&quot;&gt;on the Astro discussion board&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Wanting to explore this thought here a bit more, I pushed some code to GitHub: &lt;a href=&quot;https://github.com/mb21/mastro/&quot;&gt;mastro – a &lt;em&gt;m&lt;/em&gt;inimal, no-dependencies take on an experimental &lt;em&gt;Astro&lt;/em&gt;-like web framework&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2024/04/13/mpa-no-bundler-javascript-meta-framework-separating-client-server-code</id>
      <title>A MPA, no-bundler JavaScript meta-framework separating client- and server-code</title>
      <updated>2024-04-13T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2024/04/13/mpa-no-bundler-javascript-meta-framework-separating-client-server-code" />
      
      <content type="html">&lt;p&gt;Modern JavaScript meta-frameworks like Next.js, Nuxt, Astro, SolidStart, SvelteKit and Qwik all use a bundler/transpiler (like Vite or Webpack), and with the exception of Astro and Qwik, all of them are SPAs.&lt;/p&gt;
&lt;p&gt;I would love to have a modern JS meta-framework that does away with these two conventions, but instead chooses to optimize for simplicity and leveraging browser-built-ins over client-side JavaScript:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;MPA over SPA. See the &lt;a href=&quot;https://mb21.github.io/blog/2023/09/18/building-a-modern-website-ssg-vs-ssr-spa-vs-mpa-svelte-vs-solid.html#single-page-app-spa-vs-multi-page-app-mpa&quot;&gt;&lt;em&gt;Single-Page App (SPA) vs. Multi-Page App (MPA)&lt;/em&gt; section of my previous blog post&lt;/a&gt;, but the gist is that for most use-cases, modern browsers can do client-side routing better than JS. This would also allow a simpler solution to what the Solid folks call the &lt;a href=&quot;https://dev.to/this-is-learning/why-efficient-hydration-in-javascript-frameworks-is-so-challenging-1ca3&quot;&gt;double data problem&lt;/a&gt;: that the complete template and associated data often ends up being sent to the client twice, as initial HTML and as JavaScript (because you may need it in JavaScript format for hydration or on client-side page navigation).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No bundler. Instead using browser-native &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script/type/importmap&quot;&gt;Import maps&lt;/a&gt; and &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/modulepreload&quot;&gt;modulepreload links&lt;/a&gt; (i.e. the same approach that &lt;a href=&quot;https://github.com/rails/importmap-rails&quot;&gt;importmap-rails&lt;/a&gt; took). A very simple asset pipeline would still do two things: add a hash to the filename to enable long caching in a CDN, and converting TypeScript and JSX to plain JavaScript (TS and JSX now being so engrained in the ecosystem that it’s built into both Deno and Bun).&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Why? I think that for most use-cases (i.e. if you’re not building the next Figma or Google Docs), this will provide both superiour UX and superior developer-experience.&lt;/p&gt;
&lt;p&gt;A bundler (and related tooling) is just such a massive addition in complexity that the developer needs to understand in order to debug certain issues. It seems to be a historical accident (because bundlers have their roots in tooling for client-side-only SPAs) that lots of functionality is implemented in bundlers instead of in plain JavaScript functions, which you would call either during static site generation or during server-side rendering: like how &lt;code&gt;import.meta.env&lt;/code&gt; is replaced in the build step and not accessing the env variable when you run the server, or how CSS or SVG files are included into a component. This makes it unnecessarily difficult to call the vite-based code, that you wrote to render some HTML on your webiste, &lt;a href=&quot;https://stackoverflow.com/questions/77523087/how-to-run-a-command-line-typescript-file-in-the-vite-js-environment&quot;&gt;in a script&lt;/a&gt; (e.g. in a cron job to send an email). Also, the newcomers to modern JS-tooling that Astro targets routinely struggle with what exactly the behaviour of &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; and &lt;a href=&quot;https://docs.astro.build/en/guides/client-side-scripts/#opting-out-of-processing&quot;&gt;&lt;code&gt;&amp;lt;script is:inline&amp;gt;&lt;/code&gt;&lt;/a&gt; is (in addition to forgetting to add &lt;a href=&quot;https://docs.astro.build/en/concepts/islands/#creating-an-island&quot;&gt;&lt;code&gt;client:load&lt;/code&gt; to hydrate islands&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Finally, with the exception of Astro, all the modern meta-frameworks ship with some kind of &lt;a href=&quot;https://en.wikipedia.org/wiki/Remote_procedure_call&quot;&gt;RPC&lt;/a&gt; functionality that doesn’t make the network request explicit, and without forcing the developer to handle network errors: &lt;code&gt;use server&lt;/code&gt; in &lt;a href=&quot;https://react.dev/reference/react/use-server&quot;&gt;React/Next.js&lt;/a&gt; and &lt;a href=&quot;https://start.solidjs.com/api/server&quot;&gt;SolidStart&lt;/a&gt;, as well as &lt;code&gt;server$&lt;/code&gt; &lt;a href=&quot;https://qwik.dev/docs/server$/&quot;&gt;in Qwik&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And even in Astro, it’s very easy to accidentally bundle some big npm package, that you meant to use only on the server, into the client-side bundle. For example, this can happen if you just import a self-contained pure helper function into the client, and that function happens to be in the &lt;a href=&quot;https://github.com/withastro/astro/issues/9902&quot;&gt;same file that imports some server code&lt;/a&gt;. That’s why I’ve started even in Astro projects, to name my files &lt;code&gt;*.client.ts&lt;/code&gt; and &lt;code&gt;*.server.ts&lt;/code&gt;. I’d like the framework to enforce such a rule:&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Strict separation of client-side and server-side code. To make sure that server-code never accidentally ends up on the client.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The reverse, client-code running on the server, is sometimes needed (to server-side-render components), and is less problematic, since you will immediately notice if you try to access &lt;code&gt;window&lt;/code&gt; on the server, because it will just crash.&lt;/p&gt;
&lt;p&gt;With these three constraints set, I’m not sure what the best architecture would look like.&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Do you know of any such framework and/or would be willing to collaborate on creating one? Feel free to open a &lt;a href=&quot;https://github.com/mb21/mastro/issues&quot;&gt;&lt;em&gt;mastro&lt;/em&gt; issue&lt;/a&gt;.&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 id=&quot;footnote-label&quot; class=&quot;sr-only&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;Explicit &lt;a href=&quot;https://www.patterns.dev/vanilla/islands-architecture/&quot;&gt;islands&lt;/a&gt;? But then you’re still sending the whole code of client-side components to the browser. We could do even better by just sending the interactive parts. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
    </entry>
  
    <entry>
      <id>https://mb21.github.io/blog/2025/04/13/on-change-and-craft-in-software-design</id>
      <title>On Change and Craft in Software Design</title>
      <updated>2025-04-13T12:00:00.000Z</updated>
      
    <author>
      <name>Mauro Bieg</name>
      
      
    </author>
  
      <link rel="alternate" href="https://mb21.github.io/blog/2025/04/13/on-change-and-craft-in-software-design" />
      
      <content type="html">&lt;p&gt;Software seems to be that mathematical thing that can be perfected and finished. But somehow this never works in practice. Why not?&lt;/p&gt;
&lt;p&gt;We software developers keep struggling with that question. A lot of us instinctively want to write “beautiful” code and craft the “perfect” solution. Out in the real world, engineers may struggle with printers that jam, robot wheels that slip, machinery that gets worn down by use, or by harsh weather. Physical materials rot and decay, even when they’re just sitting there doing nothing – chemistry and time doing their thing. But in the virtual world, us software developers should be spared from these earthly troubles, right?&lt;/p&gt;
&lt;p&gt;To a certain extent, yes. Software in the abstract sense really does not change. It’s just information after all – like text or mathematic formula. Pythagoras’ theorem is still the same after two millennia after all. (Yes, the hardware carrying the bits and bytes may wane. But through the miracle of digital technology and error correcting codes, we can copy those bytes over to the next generation of carriers without any loss of information.)&lt;/p&gt;
&lt;h2&gt;Software does not exist in isolation&lt;/h2&gt;
&lt;p&gt;But here’s the mistake I see a lot of us software developers make. We forget that no piece of software exists in isolation. While the software itself may be preserved unchanged, the world it’s interacting with &lt;em&gt;does&lt;/em&gt; change.&lt;/p&gt;
&lt;p&gt;Unless your software is a &lt;a href=&quot;/blog/2021/01/23/pure-functional-programming-and-shared-mutable-state.html&quot;&gt;pure function&lt;/a&gt;, it is doing IO, system calls, network calls, etc. If you want to run your program a decade later, the underlying OS still needs to behave the same, and any networked computers your program relies on need to still be there.&lt;/p&gt;
&lt;p&gt;And even if the technical environment remains compatible: your users change as well! An MS-DOS program might still be runnable in a VM, but users won’t like the UI anymore, especially on their smartphone.&lt;/p&gt;
&lt;h2&gt;Evolving tech ecosystems&lt;/h2&gt;
&lt;p&gt;Different tech ecosystems have different rates of change. Microsoft is famous for their backwards-compatibility, going even so far as to &lt;a href=&quot;https://learn.microsoft.com/en-us/previous-versions/technet-magazine/ff625273(v=msdn.10)&quot;&gt;emulate old bugs&lt;/a&gt; in subsequent versions of Windows, so that old programs that relied on the previous behaviour would not break. Apple, in contrast, removes older APIs more aggressively, infuriating developers that need to change their apps if they want them to continue to run on the newest version of macOS or iOS, which is what most users will be running.&lt;/p&gt;
&lt;p&gt;Changes on one level of the tech stack sometimes enable more frequent changes on the levels above. Back when software was printed on physical media like CDs, major versions of OSes with new features were released once every couple of years. Today, Apple may still announce the new features at its yearly WWDC conference, but they’re actually rolled out in point updates over the course of the whole year. And for websites like Facebook or Google, it’s not uncommon for new versions to be deployed multiple times each day.&lt;/p&gt;
&lt;p&gt;Yet on the web, unless you were using Flash, your website from a decade ago still renders the same in modern browsers. However, “frontend” web developers have created an &lt;a href=&quot;https://news.ycombinator.com/item?id=43422162&quot;&gt;update-treadmill&lt;/a&gt; of their own: often relying on a baroque number of third-party dependencies, and building on top of frameworks that keep changing under their feet. While adopting newer and better technologies may make sense, the drive to work with the newest hip web framework often seems to be more similar to a fashion trend, or due to fear of being “left behind” in the job market (either as an employer or employee).&lt;/p&gt;
&lt;p&gt;When choosing the tech ecosystem on which you build your application, one crucial factor is its rate of change, and whether you like the direction of that change. Do you prefer a stable platform that doesn’t require you to invest a lot of time to keep up with it, or do you believe valuable new functionality continues to be added to the platform, and that you have the capacity to make use of that? Are the users I want to reach on the platform or moving away from it? Will there be developers familiar with the platform available for hire, and will they have the other skills I require?&lt;/p&gt;
&lt;h2&gt;Change is uncomfortable&lt;/h2&gt;
&lt;p&gt;Make no mistake, change is uncomfortable. All else being equal, we humans prefer to stick what we know over taking a risk and investing time and energy in learning something new. Granted, us techies are generally more interested in new technologies. But it is a testament to how much beneficial technological progress we’ve been going through as a society, that so many of us are so often willing to take a bet on the next thing, assuming that it will bring us as much benefit as past innovations have done.&lt;/p&gt;
&lt;h2&gt;Innovation waves&lt;/h2&gt;
&lt;p&gt;New technologies are &lt;a href=&quot;https://reactionwheel.net/2024/10/the-illusion-of-acceleration.html&quot;&gt;adopted in waves&lt;/a&gt;. If a new technology has a higher perceived advantage relative to its alternatives, it will be adopted more quickly. When a technology is new, it still changes quickly, as learnings come in and low-hanging fruits are picked. Later on, as the technology has matured and also more people and businesses rely on it, breaking changes become more expensive, and big improvements harder to achieve. The technology becomes entrenched. The cycle repeats and the next wave builds up when a new technology comes along that seems so much better, that it manages to overcome the &lt;a href=&quot;https://newsletter.squishy.computer/p/dont-fork-the-ecosystem&quot;&gt;ecosystem advantages&lt;/a&gt; of the existing technology.&lt;/p&gt;
&lt;h2&gt;Instigating change&lt;/h2&gt;
&lt;p&gt;As application developers, we are on the receiving end of change when it comes to the tech platform we build on. However, when it comes to the business we are building our product for, often we are the instigators of change. We want our customers to adopt our product, or the new version of our product. Suddenly, it’s us that need to walk the tight-rope between innovation and familiarity. It’s us that need to shepherd the ecosystem slowly forward, because “Being Too Early is The Same As Being Wrong”. And the path of innovation is always through the &lt;a href=&quot;https://newsletter.squishy.computer/p/evolution-adjacent-possible&quot;&gt;adjacent possible&lt;/a&gt;: each intermediate step needs to be advantageous, otherwise it’s not adopted.&lt;/p&gt;
&lt;h2&gt;Worthwhile change&lt;/h2&gt;
&lt;p&gt;You may long to build a product that lasts. This is easier in an established domain, since the broad strokes are clear and you can obsess over the details – you know the terrain that you want to find the maximum spot on. But if the domain is still moving and changing quickly, when you don’t know whether you hit a local maximum, because you don’t know the whole terrain yet, then you need to iterate on imperfect artifacts that evolve in symbiosis with the involved people and processes, so that the whole terrain can be discovered.&lt;/p&gt;
&lt;p&gt;In that case, even if your technology or product was used only for a small time and was quickly obsoleted by the next wave – it was still a necessary step. Even though your particular piece was superseded, your lasting contribution was to move the field forward as a whole.&lt;/p&gt;
&lt;p&gt;One example is in the field of aircraft design: the development of the Zero fighter, as portrayed in Miyazaki’s film &lt;em&gt;The Wind Rises&lt;/em&gt;, where its creator says he did “the best he could with the time that was given to him”.&lt;/p&gt;
&lt;h2&gt;On craft and deliberate design&lt;/h2&gt;
&lt;p&gt;But just because a product’s shelf-live may be limited, that does not mean it shouldn’t be designed properly, and crafted deliberately and with care. It seems to me, that’s a largely orthogonal quality.&lt;/p&gt;
&lt;p&gt;It’s true that some companies or teams move fast and carelessly (Facebook comes to mind). And established big corporations are famous for moving slow and carelessly: often they look at software development as a &lt;a href=&quot;/blog/2020/06/01/what-business-is-haskell-a-a-good-fit-for&quot;&gt;commodity to be de-risked&lt;/a&gt;, with managers not caring about the quality, as long as the widget is on schedule.&lt;/p&gt;
&lt;p&gt;On the other hand, companies like Apple or Nintendo demonstrate that even big companies can have a culture that deeply cares about design. In an established domain like laptops, Apple is iterating slow yet deliberately: the &lt;a href=&quot;https://arstechnica.com/apple/2025/03/apple-m4-macbook-air-review-i-have-no-notes/&quot;&gt;newest MacBook&lt;/a&gt; looks the same like the ones that have come before it, but each iteration is slightly tweaked with updated hardware.&lt;/p&gt;
&lt;p&gt;Finally, when entering a new domain, iterating quickly, the temptation may be strongest to cut corners. But you can still be deliberate in your design process, and decide carefully which corners to cut – which features you need now, and which can wait for a later iteration. That’s the definition of a minimum viable product, after all. The original iPhone may be one of the best known examples. When it launched, &lt;a href=&quot;https://arstechnica.com/gadgets/2007/07/iphone-review/&quot;&gt;reviewers complained&lt;/a&gt; about the basic camera and an Email client that missed enterprise features. It was also later revealed that on the first version, all programs were running in &lt;code&gt;sudo&lt;/code&gt; mode with elevated privileges – clearly a bad practice, but something Apple decided was okay to fix in a later software update, in order to focus on the features that made the iPhone unique, and get it out of the door in consumer’s hands now.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;carelessly&lt;/th&gt;
&lt;th&gt;deliberately&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;moving fast, iterating quickly&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Facebook&lt;/td&gt;
&lt;td&gt;iPhone at launch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;iterating slow in a mature domain&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;most big corporations&lt;/td&gt;
&lt;td&gt;MacBook nowadays&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
    </entry>
  
    </feed>
  