Sound & Complete Recent content on Sound & Complete Hugo -- en-us Thu, 08 Sep 2016 00:00:00 +0000 iPhone 7 Plus and its Two Lenses Thu, 08 Sep 2016 00:00:00 +0000 <p>To some, Apple&rsquo;s yesterday keynote wasn&rsquo;t all that impressive. After all, the new <a href="">iPhone 7</a> doesn&rsquo;t look all that new, the new Apple Watch looks <em>exactly</em> like the old one, and minor improvements aside (water resistance, GPS for the watch, new processors), there wasn&rsquo;t really anything impressive shown in San Francisco last night. Except one small detail—the camera(s) on the upcoming iPhone 7 Plus.</p> <p>This is the photograph Apple showed during the keynote, initially leading everyone to believe it&rsquo;s been taken with a &ldquo;high-end camera&rdquo;:</p> <p><img class="wide" src="" /></p> <p>only to later explain it&rsquo;s been shot with the upcoming iPhone 7 Plus, which features two lenses—one wide-angle, and one tele—that are then used by iPhone&rsquo;s software to infer the depth of field, and to create the <em>bokeh</em> effect. While far from perfect (there&rsquo;s something wrong with how the face of the model is separated from the background), this, to me, is a <em>major</em> breakthrough in smartphone photography. As the technology matures, we will see the &ldquo;bokeh software&rdquo; improve, and the dual-lens technology perhaps applied to other areas (VR?), but most importantly it&rsquo;ll render <a href="">cameras obsolete</a>, to most people at least.</p> <p>I can&rsquo;t wait for this day to come.</p> Hi, America Sun, 28 Aug 2016 00:00:00 +0000 <p><small><em>(I&rsquo;m biased towards everything American, so despite a relatively US-critical tone, you may be offended by this post if you&rsquo;re too European.)</em></small></p> <p>I remember watching &ldquo;The Cosby Show&rdquo; with my parents in the nineties. It was a crazy time of massive political change in Poland, and my parents were always pointing at the fictional Huxtables as role models. Me and my father were even replicating Cliff Huxtable&rsquo;s way of making chili, and we&rsquo;d make tons of inside jokes that we&rsquo;d always gladly explain to any guests we&rsquo;d be having. We didn&rsquo;t realize at that point how controversial The Cosby Show was in the 80s in the US. What was lost on Polish viewers was that the show&rsquo;s depiction of black people was atypical to say the least. The Huxtable family wasn&rsquo;t poor, hell, it wasn&rsquo;t even middle class. A lawyer (a <em>black woman!</em>) and a senior obstetrician, raising a family of 5 in a fantastic brownstone in Brooklyn Heights&mdash;that&rsquo;s how all well-educated Americans lived, right? We didn&rsquo;t see the controversy, and missed out on some of the social commentary, but we still enjoyed Bill Cosby&rsquo;s jokes, his colorful sweaters, his fictional family&rsquo;s great parenting advice, etc. Of course not only the Huxtables were our role models, but the US was depicted as the promised land, which in the 90s it clearly was. They won the cold war, they became the sole superpower, Fukuyama announced &ldquo;the end of history&rdquo;—no one had any doubts.</p> <p>Then at the break of the century, a new world begun. 9.11 happened, W.&nbsp;&amp;&nbsp;co. took power,<sup class="footnote-ref" id="fnref:1"><a rel="footnote" href="#fn:1">1</a></sup> the 2008 banking crisis hit the world hard, the US middle class shrinked, Wall Street was occupied, and, as a proverbial nail to the coffin, they now tell me that Bill Cosby, my beloved Dr. Huxtable, is (allegedly) a sex offender. America of my childhood is gone for good, along with the post-cold-war Reagan-Thatcher world order formerly known as &ldquo;new.&rdquo;</p> <p>Yet besides all that, there has never been a country I felt so emotionally strong about as the United States.</p> <figure class="wide"> <img src=""> <figcaption>Brownstones in Park Slope, Brooklyn. The Huxtables lived in a similar one in Brooklyn Heights. Sadly, they wouldn't be able to afford one these days. </figcaption> </figure> <p>I think the thing that I always found most attractive in the US is its inclusiveness. Yes, there&rsquo;s Donald and the Tea Party, and yes, my view as a white male is definitely biased, but I can&rsquo;t think of any other country in the world where you&rsquo;d be able to blend in like you can in the US.<sup class="footnote-ref" id="fnref:2"><a rel="footnote" href="#fn:2">2</a></sup></p> <p>I landed on JFK and took a cab to Manhattan from there, and my driver was Tariq, a Pakistani American. &ldquo;Immediately after 9.11 it was really hard for us here,&rdquo; he said while we were stuck in traffic on Grand Central Parkway, &ldquo;but now things have changed and in New York I don&rsquo;t really feel anyone would ever doubt I&rsquo;m as American as gooseberry pie.&rdquo; Tariq spoke very fondly of Europe, too, where some of his relatives live, and was very curious about how we&rsquo;re handling the migrant crisis. He was very happy to hear it&rsquo;s my first time in America, and wished me a great vacation, and in the end offered me his phone so that I could call my friends in East Village from a US number (sadly, there&rsquo;s no T-Mobile store on JFK and all the sim-cards available at the airport aren&rsquo;t exactly good value).</p> <p>It&rsquo;s a cliché to write it, but the cultural and ethnic &ldquo;melting pot&rdquo; you witness in New York is, again, incomparable to anything I&rsquo;ve ever seen, and I did quite some traveling. From African American Bedford-Stuyvesant, Brooklyn to Asian (mostly Korean and Chinese, I presume) neighborhoods of Flushing, Queens, New York city has it all. All races, all languages, all cuisines. And yes, America definitely has a problem with racism and class society, but from my perspective it seems they are better at acknowledging the problem and trying to do something about it. Can&rsquo;t really say that about, e.g., France or Sweden, or many other European countries.</p> <figure class="wide"> <img src=""> <figcaption>Flushing, Queens. You can have great dumplings around here. </figcaption> </figure> <p>I&rsquo;ve been living in different European countries for about 7 years now, and I felt welcome everywhere. People generally speak good English, and there are little to no bureaucratic or administrative issues moving around thanks to the miracle of the European Union and the Schengen agreement. But somewhere in the back of my head I know I will never be able to become German. Or Norwegian, or Dutch, or French. Probably not even British. Europe&rsquo;s tormented history and still largely national-centric politics take its toll, and it&rsquo;s just much harder, if not impossible, to &ldquo;fully integrate&rdquo; (which can mean different things to different people). US is much simpler in this regard. If you speak at least some basic English, respect American values, wave the flag on 4th of July and eat turkey on Thanksgiving, you&rsquo;re one of them. So much easier in a country built on immigration I guess, where around 80% of population <a href="">identifies with foreign ancestry</a>, and where millions of immigrant visas are issued and hundreds of thousands of immigrants are naturalized <a href="">every year</a>. It&rsquo;s funny that, it would seem to me, Americans are one of the very few nations that is able to reconcile this inclusiveness and multi-culturalism with national pride. In Europe, you&rsquo;re either a nationalist or left-wing, there seem to be less and less room for middle ground.</p> <figure class="wide"> <img src=""> <figcaption>American flags are everywhere. Here decorating a façade of a beautiful townhouse in Charlestown, Boston. </figcaption> </figure> <p>But no matter how much in love with the US I am, I must admit that after the initial elation at seeing the NBC studios building and traveling every day on the N line across Queensboro Bridge faded, disillusion kicked in.</p> <p>Greyhound express bus from Boston to New York goes through rural Massachusetts and Connecticut, which are relatively boring, but then enters the state of New York in Bronx county, and the first sight of glorious New York City are housing project high-rises. Plenty of these in Europe, too (though nobody calls them &ldquo;housing projects&rdquo;), but not like this, not like in South Bronx. You can really see the poverty there, although it&rsquo;s difficult to put a finger on how you&rsquo;re able to see it. It doesn&rsquo;t feel safe there, either.</p> <p>Crime in New York city and most of the US has been <a href="">in decline</a> for many years now, and nothing seems to indicate this trend would change. But income differences get bigger every year, especially <a href="">in New York</a>. The issue of America&rsquo;s shrinking middle class is <a href="">nuanced</a>, but from a European visitor&rsquo;s perspective the income differences are vivid. And if you have friends in New York, you know the dinner conversation will be mostly about the insane living cost in the city. The NY Times article I linked to above said that &ldquo;about 45 percent of New York City households said they spent 35 percent or more of their income on housing.&rdquo; Seeing how the new <a href="">432 Park Avenue</a> (with <a href="">One57</a> not far behind) rises like a middle finger towards all the poor in the center of Manhattan, I can see why so many New York residents opposed to its construction.</p> <figure class="wide"> <img src=""> <figcaption>View on Upper Manhattan, with super tall 432 Park Avenue prominently on the right, and One57 on the left. They were built so that all the billionaires could have a good view on those poor souls who were only able to afford apartments on the Upper West or Upper East Side. Have a look at the <a href="">full-size picture</a>. </figcaption> </figure> <p>But it&rsquo;s not only that the US Economy has been going through hoops since 2008 that the US became less attractive to us Europeans. It&rsquo;s also because Europe became <em>so</em> good that we take it for granted. That we have clean, cheap and reliable public transportation, that there&rsquo;s universal free (or very affordable) health care, that 25 days of paid leave per year is nothing special and that decent education is for everyone—we expect all that. From an Eastern European perspective the fascination with the United States is of course easier to explain. For decades, we were very angry with Western Europe, and we felt it&rsquo;s been looking down upon us, whereas the US was the land of opportunity. It still very much seems that way, because reactions to people hearing &ldquo;I&rsquo;m Polish&rdquo; are <em>very</em> different on both sides of the Atlantic. But it&rsquo;s us, Eastern Europeans, that especially forget how great Europe has become, and how vastly Poland itself improved compared to the country <s>our parents</s> we grew up in.<sup class="footnote-ref" id="fnref:3"><a rel="footnote" href="#fn:3">3</a></sup> So the disillusionment stems from a comparison between how &ldquo;sooper-freaking-awesome&rdquo; we expected the US to be, and how &ldquo;awesome&rdquo; it actually is.</p> <p>Because it still, undoubtedly, is.</p> <hr /> <p>This was a very personal trip to me for sentimental reasons (where sentiment comes from watching television and movies, of course), and it couldn&rsquo;t have been as <em>great</em> as it was if it wasn&rsquo;t for the many friends that made it such. Huge thank you from me and Karolina to Yvonne, Martijn, David, Karen, Friederike, McCoy Tyner, an anonymous fireman from Cambridge, MA (whom we exchanged opinions about firetrucks with), and the whole Cloudreach NY team.</p> <div class="footnotes"> <hr /> <ol> <li id="fn:1">As Polish neo-conservatists, my whole family was initially a strong supporter of both wars. I am ashamed of it now. We <em>all</em> are, right? <a class="footnote-return" href="#fnref:1">↩</a></li> <li id="fn:2">Except, perhaps, <a href="">London</a>. <a class="footnote-return" href="#fnref:2">↩</a></li> <li id="fn:3">Let me give some extra context for the non-Polish readers. Poland, these days a strongly anti-socialist country, has always been very close to the US in terms of political cooperation and general admiration. Polish political class has always been looking up to the US, the US has also been historically our strongest ally (or at least it is very often depicted as such). Polish political scene itself is very bizarre by European standards, because it lacks any sort of left-wing party (except for post-communists that don&rsquo;t have any credibility after numerous corruption scandals and young, new parties that haven&rsquo;t gotten much traction yet). So while Poles generally acknowledge higher living standards and better economic conditions in Western Europe, when it comes to socio-political issues they are much closer to the program of the Democratic party in the US (and much more on its conservative than the socialist end of the spectrum; no one would vote for Bernie there). After 50 years of communism the general distrust towards welfare programs and state-owned enterprises is pretty easy to understand, and as a side effect I&rsquo;d say most Poles esteem the US much higher than Western Europe, considering it a more &ldquo;noble&rdquo; emigration destination. <a class="footnote-return" href="#fnref:3">↩</a></li> </ol> </div> Dehydration—a cautionary tale Sun, 10 Jul 2016 00:00:00 +0000 <p>I&rsquo;ve been riding bikes for a very long time, and although I&rsquo;ve had breaks, I can safely say I&rsquo;ve been riding bicycles throughout my whole life. I am lucky to have never had any serious accidents or injuries while cycling, other than the occasional my-shoes-are-still-clipped-into-the-pedals thing,<sup class="footnote-ref" id="fnref:1"><a rel="footnote" href="#fn:1">1</a></sup> I&rsquo;ve never been <a href="">doored</a>, I never smashed with my bike into things that generally don&rsquo;t like being smashed into (that&rsquo;s a lie; it&rsquo;s just that injuries were never serious), and I was rear-ended by other bikers only on a few occasions.</p> <p>Today I went for <a href="">a quick ride</a>. It was a short one, but since I only got a non-city bike a couple of weeks back,<sup class="footnote-ref" id="fnref:2"><a rel="footnote" href="#fn:2">2</a></sup> I&rsquo;m still building up my strength and endurance, and, sadly, 50km-long rides are my standard for now. It&rsquo;s a sunny Sunday in Munich, with a temperature of about 31°C (this is like 88°F, &lsquo;Mericans), clear skies, and I decided to explore some trails around the Isar river. It was all going well, until I reached a part of the trail which was really more akin to a single track than a road of any sort. Riding there on my 32c tires, and climbing even small hills, <em>and</em> being in the proximity of a river which makes the climate hot-and-humid was <em>very</em> exhausting. When I reached the asphalt road and headed towards Neufahrn, I realized I&rsquo;m running out of water. By the time I turned into Olympiastraße, I was getting a bit weak, and about 10kms from Munich I had to stop.</p> <p>What do you do when you have no food, no water, there&rsquo;s little-to-no shade around, the temperature goes up to 32°C, and there&rsquo;s no shop or creek or anything like that within a kilometer?<sup class="footnote-ref" id="fnref:3"><a rel="footnote" href="#fn:3">3</a></sup> You <em>call your wife</em> and cry for help, that&rsquo;s what you do. You call her, apologize for being an idiot who only took one 500ml bottle of water (17oz, &lsquo;Mericans) and no food, and ask her to bring you some. And then you fall on the ground and just lie there, trying not to pass out. And then luckily a group of cyclists stops by seeing you dying, and they give you water and sport-bars (which are just like regular chocolate bars only more expensive and in a more shiny packaging), and you jump on your bike and slowly ride home, and you meet your wife on the way and everything is fine again.</p> <p>It&rsquo;s an embarrassing story with a happy ending, but I&rsquo;m sharing it here as a warning for anyone trying to be as stupid as I was. Dehydration in cycling is a serious problem; it actually is a direct cause of many deaths during famous road races, and should never be taken lightly. I got lucky, because some very good people stopped and helped me (even though I wasn&rsquo;t able to speak; I was in a really bad shape), and because I have a wonderful wife that rode to my rescue like a knight in shiny armor on a white horse. But I was lucky, and it could&rsquo;ve ended in a hospital.</p> <p>Stay hydrated, kids!</p> <div class="footnotes"> <hr /> <ol> <li id="fn:1">The thought process is always the same: &ldquo;Will I manage to clip-out on time? I surely will. Definitely. There&rsquo;s still time. Just a bit more. Oh shit.&rdquo; <a class="footnote-return" href="#fnref:1">↩</a></li> <li id="fn:2">There&rsquo;s a post about the bike coming. <a class="footnote-return" href="#fnref:2">↩</a></li> <li id="fn:3">In my defense, years of cycling in Western Norway don&rsquo;t really prepare you for riding in the heat. <a class="footnote-return" href="#fnref:3">↩</a></li> </ol> </div> MFA tokens in your terminal Sun, 26 Jun 2016 00:00:00 +0000 <p><small><em>All the stuff described here I learned from my dear colleague <a href="">Giulio</a>. I&rsquo;m sharing it here because it&rsquo;s cool, and because I don&rsquo;t think he&rsquo;d share it anywhere other than our internal mailing list.</em></small></p> <p>Do you use MFA a lot? Are you tired of reaching for your phone to check those codes on Google Authenticator app? Perhaps you&rsquo;ve been logging to too many different AWS accounts because your work requires that? 😔 Here&rsquo;s a couple paragraphs of advice that will ease your pain.</p> <p>First, install <code>oath-toolkit</code>. On OS X you can get it with <a href="">homebrew</a>. Once it&rsquo;s installed, you&rsquo;d want to define a function for your shell, like this perhaps:</p> <div class="highlight"><pre><code class="language-sh" data-lang="sh"><span></span><span class="k">function</span> mfa <span class="o">()</span> <span class="o">{</span> oathtool --base32 --totp <span class="s2">&quot;</span><span class="k">$(</span>cat ~/.aws/<span class="nv">$1</span>.mfa<span class="k">)</span><span class="s2">&quot;</span> <span class="p">;</span> <span class="o">}</span> </code></pre></div> <p>This specifies an <code>mfa</code> alias which calls <code>oathtool</code> and expects one argument: name of a file (sans extension) inside your <code>~/.aws/</code> directory which contains a string that is the base for computing your <a href="">time-based one-time passwords</a>. To continue the AWS-based example, you can find the code in the AWS console while setting up a new virtual MFA device.</p> <p><img class="wide" src="" /></p> <p>Once you click on &ldquo;Show secret key for manual configuration,&rdquo; you&rsquo;ll be presented with a 64-character string, which you&rsquo;ll need to put in a <code>~/.aws/account-name.mfa</code> file. After that, whenever prompted for the MFA token, type <code>mfa account-name</code> in your terminal.</p> “Hunger makes me a modern girl” Thu, 23 Jun 2016 00:00:00 +0000 <p>I know Carrie Brownstein through &ldquo;<a href="">Portlandia</a>,&rdquo; a quirky sketch show she&rsquo;s been doing with Fred Armisen for the last couple of years. I&rsquo;m a huge fan of how accurately &ldquo;Portlandia&rdquo; pokes fun at alternative-culture so commonly associated with Pacific Northwest.<sup class="footnote-ref" id="fnref:1"><a rel="footnote" href="#fn:1">1</a></sup> What I learned later, only after doing some research on Fred and Carrie, is that they were both well-known before the show even started. Fred, to a perhaps lesser extent, through SNL, and Carrie, probably to a much greater extent, through <a href="">Sleater-Kinney</a>.</p> <p>SNL is obviously not very popular in Europe, but the fact that during my teenage years I have never heard about Sleater-Kinney was always a bit surprising to me. Sure, alternative-scene rock bands from Seattle like Nirvana, Soundgarden and Pearl Jam made its way to (even Eastern) European radio stations, but the much larger phenomenon of what&rsquo;s known as the &ldquo;Pacific Northwest scene&rdquo; remained rather unknown, or at least not commonly known. This way one could, as it turns out, live one&rsquo;s life all through the crazy 90s and only discover Sleater-Kinney in 2012. Oh, and what a fantastic discovery that was.</p> <iframe src="" width="100%" height="80" frameborder="0" allowtransparency="true"></iframe> <p><a href="">&ldquo;Hunger Makes Me a Modern Girl&rdquo;</a> is Brownstein&rsquo;s <em>memoir</em>, but really it&rsquo;s a book about Sleater-Kinney, and what it meant being an indie-rock band member in the 90s US. It&rsquo;s full of personal stories of struggle, yet written in a way that is neither pretentious nor self-loathing. Carrie Brownstein is a very natural and genuine writer, insightful and funny. &ldquo;Hunger Makes Me a Modern Girl&rdquo; is obviously a book aimed at Sleater-Kinney fans, and as such is most enjoyable for readers familiar with the band, but anyone curious about the independent rock scene of the 90s will find it interesting. I certainly did.</p> <div class="footnotes"> <hr /> <ol> <li id="fn:1">Ok, so this blog entry really isn&rsquo;t about &ldquo;Portlandia,&rdquo; but please go watch it. It&rsquo;s absolutely brilliant in every way possible. <a class="footnote-return" href="#fnref:1">↩</a></li> </ol> </div> How are zlib, gzip and Zip related? Tue, 21 Jun 2016 00:00:00 +0000 <p><a href="">Abhishek Jain asks</a> Stack Overflow about the differences between zlib, gzip and Zip, and gets a fascinating and very insightful response from none other than <a href="">Mark Adler</a>. I particularly like <a href="">the comment</a> Adler made when the OP asked about referenecs for his answer.</p> <blockquote> <p>I am the reference, having been part of all of that. This post could be cited in Wikipedia as an original source.</p> </blockquote> <p>This, to me, is a perfect example of the <em>enormous</em> impact of open source and free software libraries developed in the 80s and 90s have on modern-day computing. All these small components of Linux or *BSD systems that were developed over the years now play such crucial parts in <em>so many</em> complex systems we rely on every day.</p> <p>Free/open source software developers are the heroes of the internet era, and as such should have monuments built to their glory and schools named after them.</p> Married Mon, 30 May 2016 00:00:00 +0000 <p><img class="wide" src="" /></p> <p>After many, <em>many</em> years of careful consideration, my lovely <a href="">fiancee</a> and I decided to get married. I&rsquo;m posting this with a 1-month delay, because we were busy with <a href="">climbing</a>, working and traveling a lot.</p> <p>So far being married has been great, I recommend it to everyone.</p> <p><small><em>Photograph by <a href="">Konrad Ciok</a></em></small></p> AlphaGo wins with Lee Sedol Thu, 10 Mar 2016 00:00:00 +0000 <p>Google <a href="">Deep Mind</a>&rsquo;s AlphaGo won <a href="">two</a> <a href="">games</a> against the world go champion, <a href="">Lee Sedol</a>. This is a <em>ginormous</em> triumph of statistical methods in general and machine learning in particular over &ldquo;symbolic AI.&rdquo;</p> <p>I remember writing an essay for a class in philosophy some years ago about the progress of AI game engines and the somewhat unimpressive <a href="">achievements of Deep Blue</a>. It was of course exciting to see a computer beat a reigning chess world champion, but underneath all the heuristics IBM implemented for chess, it was all &ldquo;brute force.&rdquo; Chess has a <a href="">game tree complexity</a> of 10<sup>123</sup>, which is huge, but still &ldquo;traversable&rdquo; by modern computers using good heuristic functions. Go, on the other hand, was deemed unsolvable by any &ldquo;brute force&rdquo; methods, because its game tree complexity is 10<sup>360</sup>—far too big. I don&rsquo;t think anyone in 2006 expected that within ten years a computer program will beat the best Go player (I know I didn&rsquo;t), yet it just happened.</p> <p>And most importantly, it happened in a more, hm, &ldquo;intelligent&rdquo; way. AlphaGo doesn&rsquo;t just search the state space, it analyses patterns and <em>learns</em> how to play. Again, I cannot stress this enough what an incredible achievement this is for deep learning (aka neural networks). The fact that Google Photos can quickly learn what my photos contain so that I can search for &ldquo;mountains&rdquo; even though I didn&rsquo;t tag/categorize anything in my photo library is very impressive. But the fact that AlphaGo can learn patterns of the most complex board game is just mind-blowing.</p> <p>All this is not to say that logic-based AI is without merit. Yoav Shoham <a href="">is right</a> that what he calls &ldquo;applied philosophy&rdquo; is an underrated branch of AI these days, but I think the success of machine learning is astonishing in how much it can deliver vs. traditional, logic-based methods, and I don&rsquo;t agree with Shoham when he says that the &ldquo;the pendulum has swung too far,&rdquo; and that there&rsquo;s too much emphasis on ML in AI research. Given how much ML can deliver, I think the emphasis is well justified.</p> <p>I, for one, welcome our future AI overlords.</p> <p><strong>update, Mar 15, 2016:</strong> AlphaGo <a href="">won</a> the match 4:1.</p> Apple's letter about the San Bernardino case Wed, 17 Feb 2016 00:00:00 +0000 <p><a href="">lazaroclapp:</a></p> <blockquote> <p>There are basically two groups of large software companies around right now: those which make their business by collecting data, and those which make their business by licensing software. The first group has an overwhelming incentive to not support privacy too strongly. The second group has an overwhelming incentive to not allow too much openness. Until a better business model (or zero-knowledge machine learning) is found, no large for profit company can support both goals to their final conclusion. So we are left choosing one evil or the other.</p> </blockquote> <p>Apple published <a href="">a &ldquo;message to customers&rdquo;</a> today, and while there&rsquo;s a lot of questions this letter raises,<sup class="footnote-ref" id="fnref:1"><a rel="footnote" href="#fn:1">1</a></sup> the above HN comment (<a href="">full thread</a>, definitely worth reading) captures the essence of the issue at hand when it comes to computing these days. You either sell software/hardware/licenses and create incentive for the general public to pay you more money by <em>selling things</em>, or you give stuff away <em>for free</em>, and your users become the product. It appears that the situation didn&rsquo;t really change much for the last couple of years, and in the end we choose what we <a href="">are willing to tolerate</a>.</p> <p><strong>update, Feb 22:</strong> Apple published some <a href="">more details</a> about the case today.</p> <div class="footnotes"> <hr /> <ol> <li id="fn:1">What kind of backdoor does Tim Cook have in mind exactly? If it could be implemented, then how? Are other companies complying with such requests from the FBI or other agencies (wikileaks and Edward clearly point to some evidence that they do)? <a class="footnote-return" href="#fnref:1">↩</a></li> </ol> </div> Go vs. Scala Sat, 16 Jan 2016 00:00:00 +0000 <blockquote> <p>One of Go&rsquo;s features is that it doesn&rsquo;t have an excess of features, and frankly, I think that feature is undervalued.</p> </blockquote> <p>There&rsquo;s an interesting <a href="">discussion on Quora</a> about the differences between Golang and Scala.</p> <p>As a former academic with tendencies towards functional programming, I used to be very tempted by Scala.<sup class="footnote-ref" id="fnref:1"><a rel="footnote" href="#fn:1">1</a></sup> It offers all the functional goodness without the exoticism of Haskell, and came with reasonably good tools and frameworks. Like Clojure, it&rsquo;s a functional language you can actually do some work with.</p> <p>The problem with Scala is, the more advanced you get, the more complicated (unreadable?) your code becomes. I remember that back in grad school the dude who was able to doodle the craziest and mathematically most challenging solution to some problem in Haskell was someone everyone looked up to. But it turns out in the &ldquo;real world&rdquo; simplicity <em>always</em> trumps virtuosity and sophistication, which is one of the many reasons I love Golang so much. A language with no &ldquo;magic,&rdquo; good concurrency support, great documentation and community that compiles into machine code and runs faster than Python? Yes, please.</p> <p>Read the whole Quora thread, though, there&rsquo;s a lot of interesting stuff there.</p> <div class="footnotes"> <hr /> <ol> <li id="fn:1">This is not to say that I don&rsquo;t like Scala. I <em>really</em> do, it&rsquo;s just that my love for it is, hm, not as unconditional as it used to be. <a class="footnote-return" href="#fnref:1">↩</a></li> </ol> </div> No more LaTeX Sun, 10 Jan 2016 00:00:00 +0000 <p>I made <a href="">jokes</a> about this before, but it actually happened: since I no longer use LaTeX, I removed it from my laptop and got rid of the config from my <code>.vimrc</code>. It&rsquo;s nothing unusual, but I somewhat feel that the departure from LaTeX marks an important <em>(sic!)</em> moment in my life.</p> <p>LaTeX was my &ldquo;gateway drug&rdquo; to programming. I kid you not. Since I was interested in publishing as a teenager (even ran a small but successful magazine for a while), got very disappointed in MS Word&rsquo;s DTP capabilities, had no money or supported OS to run Adobe or Quark, LaTeX was for me, sadly, the only option to put my magazine together. A Polish magazine called Linux+ published an article about LaTeX, I went through the tutorial, then through <a href="">lshort2e.pdf</a>, and got hooked. I was of course impressed by the quality of the output, but most importantly I understood the powerful concept of source code and compilation. LaTeX is of course technically <em>markup</em> and not <em>code</em>,<sup class="footnote-ref" id="fnref:1"><a rel="footnote" href="#fn:1">1</a></sup> and it&rsquo;s not exactly <em>compiled</em> but <em>parsed</em>, but still the process and concepts are easily translatable to programming. So then came going through <a href="">AWK</a> tutorials, and later came C and Perl. And much later came a lot of other stuff, but it all started with LaTeX.</p> <p>I owe LaTeX a lot. It made my silly little magazine look <em>good</em>, impressing people at the printshop and everyone else who had the slightest idea about publishing. It made writing technical notes on formal logic for my classes in philosophy so much easier. I wrote my master&rsquo;s and my doctoral theses using it. And yeah, it also made my blog&rsquo;s most popular blog post.<sup class="footnote-ref" id="fnref:2"><a rel="footnote" href="#fn:2">2</a></sup> It is then with a heavy heart that I am writing that I really, really hate LaTeX and am very happy that I don&rsquo;t have to use it anymore.</p> <p>I&rsquo;m not saying <a href="">&ldquo;switch to MS Word&rdquo;</a> or something silly like that, no. But it saddens me that after so many years the open source/free software community did not produce anything more modern, easier to use<sup class="footnote-ref" id="fnref:3"><a rel="footnote" href="#fn:3">3</a></sup> and simply more elegant. LaTeX is a mess, and the underlying TeX typesetting systems dates back to the 70s. It comes in <em>huge</em> tarballs or installers. It has an annoying syntax. Its fonts are as beautiful as they are painful to install. Its error messages are cryptic. The list of problems goes on.</p> <p>I was actually hoping that the academic community would adopt <a href="">Pandoc</a> and restrict LaTeX usage to its math formulas syntax, but that didn&rsquo;t happen. And I suppose Matthias Ettrich hoped the academic community would adopt <a href="">LyX</a> (which is actually surprisingly good), but that didn&rsquo;t happen either.</p> <p>I guess the beauty of leaving the world of academia is that I no longer have to care.</p> <div class="footnotes"> <hr /> <ol> <li id="fn:1">Or rather: it&rsquo;s most commonly used as a markup language, but is in fact a <a href="">Turing complete</a> programming language. <a class="footnote-return" href="#fnref:1">↩</a></li> <li id="fn:2">It is actually <em>astonishing</em> how many people read and share this howto. I never expected to end up in lecture notes for CS and physics classes in places like Colorado State, not to mention reddits and HN of course. <a class="footnote-return" href="#fnref:2">↩</a></li> <li id="fn:3">By &ldquo;easier to use&rdquo; I don&rsquo;t necessarily mean a GUI. Having a markup language is good. <a class="footnote-return" href="#fnref:3">↩</a></li> </ol> </div> Best Jazz Albums of 2015 Sun, 03 Jan 2016 00:00:00 +0000 <p>In the spirit of <a href="">2015 summaries</a>, I felt like sharing my recommendations for the best, in my view, jazz albums of yesteryear. The list is, of course, highly subjective and biased towards contemporary and European jazz.<sup class="footnote-ref" id="fnref:1"><a rel="footnote" href="#fn:1">1</a></sup> I also admit that the great majority of what I listen to comes from ACT Music label, since many of my favorite artists record for them, and thus it&rsquo;s somewhat easier for me to explore their catalogue. Nevertheless, I tried to be broader in my picks, which was really easy this year thanks to some very surprising albums from relatively unknown artists. Below are my 6 favorites, with three in the &ldquo;must listen&rdquo; category additionally marked with a &ldquo;💣&rdquo; (how did internet function without emoji, eh?).</p> <h4 id="kamasi-washington-epic-https-open-spotify-com-album-2j2q2ysuvk43ehb8wi5xqj-brainfeeder">💣Kamasi Washington—<a href="">&ldquo;Epic&rdquo;</a> (Brainfeeder)</h4> <p><iframe src="" width="300" height="380" frameborder="0" allowtransparency="true" style="float:left;margin:10px 20px 10px 0px;" ></iframe> Ok, get this: a relatively unknown artist from Los Angeles <em>(wut?)</em> releases his 3-CDs-2hrs-52minutes-long debut which, in my opinion, is at the same time the best jazz album of 2015. Yeah, &ldquo;Epic&rdquo; really is, <em>nomen omen</em>, quite epic. Kamasi Washington achieved something unique here: he managed to create a very &ldquo;mainstream&rdquo; sounding, easy to listen, contemporary jazz record with a lot of free-jazzy, Ornette Coleman-inspired solos and hard bop rhythms. Oh, and he managed to do all this on a 3hr album and not make it boring in any way. Washington is known for recording with hip-hop artists (most notably for working with Kendrick Lamar), and arguably the biggest advantage of his debut is introducing free jazz to younger audiences, but regardless, the album is as exciting, refreshing and enjoyable to just about any audience I can think of.<br /> Play it at home, in the morning or evening, on the bus, on the plane and at work. Absorb it.</p> <h4 id="michael-wollny-christian-weber-eric-schaefer-nachtfahrten-https-open-spotify-com-album-7dfl5qajsme7dqo5qljov5-act">Michael Wollny, Christian Weber, Eric Schaefer—<a href="">&ldquo;Nachtfahrten&rdquo;</a> (ACT)</h4> <p><iframe src="" width="300" height="380" frameborder="0" allowtransparency="true" style="float:left;margin:10px 20px 10px 0px;" ></iframe> Michael Wollny is a well-regarded pianist, at least on the European scene, and his &ldquo;Nachtfahrten&rdquo; album solidifies his position as the band leader, improviser and composer. A much calmer, contemplative, and less experimental record than his previous <a href="">solo albums</a> or <a href="">[em] trio</a>, &ldquo;Nachtfarhten&rdquo; brings beautiful melodies with a touch of melancholy, but never boring or smooth-jazzy. Wollny&rsquo;s lyrical piano is actually closer to Jarrett&rsquo;s &ldquo;standards trio&rdquo; than anything else on the jazz scene today, which makes me love his music even more.<br /> Play this album in the evenings. Enjoy with a glass of good wine, but skip the book and just contemplate the music.</p> <h4 id="adam-bałdych-amp-helge-lien-trio-bridges-https-open-spotify-com-album-7g7xihltjjzqi1praqyait-act">💣Adam Bałdych &amp; Helge Lien Trio—<a href="">&ldquo;Bridges&rdquo;</a> (ACT)</h4> <p><iframe src="" width="300" height="380" frameborder="0" allowtransparency="true" style="float:left;margin:10px 20px 10px 0px;" ></iframe> Another ACT recording artist and my personal favorite-of-all-favorites, Adam Bałdych, this year with a Norwegian trio led by Helge Lien. I am obviously biased towards Bałdych, because I&rsquo;m Polish and a weekend-violinist, but I honestly think he&rsquo;s the most interesting jazz artist of the European if not worldwide jazz scene. His folk-sounding acoustic violin, his energetic, sometimes post-bopish Seifert-like improvisations, and the wonderfully melodic support of Helge Lien&rsquo;s piano-double-bass-drums trio make &ldquo;Bridges&rdquo; the most original and interesting jazz album I&rsquo;ve heard in a very long time.<br /> Play it all the time and watch yourself head-banging to the sound of acoustic violin and acoustic double bass. Yeah, that&rsquo;s gonna happen.</p> <h4 id="sons-of-kemet-lest-we-forget-what-we-came-here-to-do-https-open-spotify-com-album-6o23nb26aulo86kn7hug8y-naim-jazz">Sons of Kemet—<a href="">&ldquo;Lest We Forget What We Came Here to Do&rdquo;</a> (Naim Jazz)</h4> <p><iframe src="" width="300" height="380" frameborder="0" allowtransparency="true" style="float:left;margin:10px 20px 10px 0px;" ></iframe> Sons of Kemet took the European jazz scene by storm with their 2013 debut <a href="">&ldquo;Burn&rdquo;</a>,<sup class="footnote-ref" id="fnref:2"><a rel="footnote" href="#fn:2">2</a></sup> so the expectations were really high for their second record. &ldquo;Lest We Forget&hellip;&rdquo; doesn&rsquo;t dissapoint, but presents the band in a bit of a different style. Yes, they&rsquo;re still a crazy combo of saxophone, tuba (albeit with a new tuba player) and two drum kits, but while &ldquo;Burn&rdquo; was pure energy with a small hydrogen bomb on top of that, &ldquo;Lest We Forget&hellip;&rdquo; is slightly more difficult and much more free in the sense of improvisation and form. To me, it&rsquo;s also more rewarding.<br /> Play it <em>loudly</em>.</p> <h4 id="julian-argüelles-tetra-http-www-whirlwindrecordings-com-tetra-whirlwind">Julian Argüelles—<a href="">&ldquo;Tetra&rdquo;</a> (Whirlwind)</h4> <p><a href=""><img src="" style="float:left;margin:10px 20px 10px 0px;"></a> Julian Argüelles comes back with a new band called Tetra to introduce an album titled&hellip; &ldquo;Tetra.&rdquo; This is the most mainstream/conservative album of the 5 recommendations I compiled here, but it&rsquo;s still full of Julian&rsquo;s great improvisations and I&rsquo;m pretty sure many of his pieces will soon become standards.<br /> Play it at a party, play it to people who say they don&rsquo;t like contemporary jazz.</p> <h4 id="marius-neset-pinball-https-open-spotify-com-album-5ckje48cz5ivc83efvllan-act">💣Marius Neset—<a href="">&ldquo;Pinball&rdquo;</a> (ACT)</h4> <p><iframe src="" width="300" height="380" frameborder="0" allowtransparency="true" style="float:left;margin:10px 20px 10px 0px;" ></iframe> Marius Neset is a genius. He&rsquo;s 30 year old Norwegian saxophonist (from Os near Bergen, mind you), and he likes playing with big bands. &ldquo;Pinball&rdquo;, his latest album, is full of complicated yet melodic pieces, youthful energy with a touch of &ldquo;world music&rdquo; sound. He&rsquo;s got violins, cellos, vibraphones, marimbas, flutes and tambourines, so it is easily the most original sounding jazz album of 2015. And Neset&rsquo;s virtuosity is simply <em>astonishing</em>. &ldquo;Pinball&rdquo; is fresh and engaging, and next to Bałdych&rsquo;s &ldquo;Bridges&rdquo; the album I most frequently listened to last year.<br /> Play it carefully, it&rsquo;s a noisy album. Don&rsquo;t get districted, and don&rsquo;t get carried away; you don&rsquo;t want your neighbors hear you dancing to the sound of tenor saxophone and marimba solos.</p> <h4 id="honorable-mentions">Honorable mentions</h4> <p>There were of course other great albums I enjoyed. Get The Blessing&rsquo;s <a href="">&ldquo;Astronautilus&rdquo;</a> (Naim Jazz) was definitely decent, although much less spectacular than 2013 &ldquo;Lope and Antilope&rdquo; and their earlier &ldquo;OC DC&rdquo; (2011) or &ldquo;All is Yes&rdquo; (2008). Another interesting album was <a href="">&ldquo;Let Go&rdquo;</a> (Efpi) by a young, London-based punk-jazz quartet Let Spin. It&rsquo;s closer to punk than to jazz most of the time, and much more spectacular (and <em>loud</em>) live than in the studio, but still worth checking out. Finally, Brad Mehldau released a compilation of his solo records called <a href="">&ldquo;10 years solo&rdquo;</a> (Nonesuch), which is definitely interesting, but to me somewhat exhausting to go through. His interpretations of rock music favorites are still spot on, though.</p> <p>I provided Spotify links to all the albums mentioned above (unless they weren&rsquo;t available on Spotify) to make checking them out as easy as possible,<sup class="footnote-ref" id="fnref:3"><a rel="footnote" href="#fn:3">3</a></sup> but I would kindly ask you to consider buying the albums you enjoy. They are all available on iTunes and Amazon, and if you don&rsquo;t like either you can always use my <a href="">LossLessFinder</a> to get quality files from other sources. Support new jazz, people, and have a great 2016.</p> <div class="footnotes"> <hr /> <ol> <li id="fn:1">Actually the bias is stronger and deserves a longer explanation, even if it&rsquo;s just a footnote. I am slightly opinionated when it comes to jazz music, namely I feel jazz should remain exciting, energetic and involving, and expanding its reach rather than looking back. Thus I despise smooth jazz for its way too laid-back supermarket-friendly sound, and generally avoid swing and big bands. I also prefer jazz music being played in cramped clubs by young artists to concert halls full of older audiences in suits (with a notable exception of Keith Jarrett who can play wherever he likes for whatever ticket price and I will still be a happy camper if I get to go to his concert). <a class="footnote-return" href="#fnref:1">↩</a></li> <li id="fn:2">Easily the best jazz album of 2013. If you haven&rsquo;t heard it, buy it immediately or Spotify it. And watch out for when the band comes to town. Go to their concert because they&rsquo;re even better live, and remember to bring a bottle of water to stay hydrated. <a class="footnote-return" href="#fnref:2">↩</a></li> <li id="fn:3">I even created <a href="">a playlist</a> which consists of single tracks taken from all the albums recommended here and available on Spotify. <a class="footnote-return" href="#fnref:3">↩</a></li> </ol> </div> AWS Cloudformation template for OpenVPN server creation Wed, 23 Dec 2015 00:00:00 +0000 <p>Are you traveling for Christmas to a country where Netflix/Hulu isn&rsquo;t available? Are you worried you might resort to violence against your own family once you&rsquo;re fed up with them? Here&rsquo;s a VPN server template to help the situation (and keep you away from prison).</p> <p><strong>update Jan 6, 2016:</strong> <a href="">Oh, well.</a> VPN servers can still be useful for other purposes.</p> <p>Netflix is brilliant and there&rsquo;s no better time to catch up on your <a href="">Jessica Jones</a> episodes than Christmas break. But what if your family resides in a country where Netflix isn&rsquo;t available yet? 😱 Fear not, there&rsquo;s a way to circumvent geolocation-based legal barriers that protect, in my case, Eastern Europe from excellent comic book-based television. First, you&rsquo;re gonna need a <em>fast</em> internet connection.<sup class="footnote-ref" id="fnref:1"><a rel="footnote" href="#fn:1">1</a></sup> Second, a VPN server into the country where Netflix is available, e.g., Bundesrepublik Deutschland.</p> <p>To create one really quickly and cheaply (and destroy it as easily once it&rsquo;s not needed), it&rsquo;s best to use Cloudformation, an orchestration/templating tool that AWS provides. With Cloudformation, all the details<sup class="footnote-ref" id="fnref:2"><a rel="footnote" href="#fn:2">2</a></sup> of your stack are included in one JSON file which, once uploaded via AWS Console, deploys the stack defined by the template. The JSON file below defines an EC2 instance together with a security group suited for OpenVPN:</p> <div class="highlight"><pre><code class="language-json" data-lang="json"><span></span><span class="p">{</span> <span class="nt">&quot;AWSTemplateFormatVersion&quot;</span><span class="p">:</span> <span class="s2">&quot;2010-09-09&quot;</span><span class="p">,</span> <span class="nt">&quot;Description&quot;</span><span class="p">:</span> <span class="s2">&quot;OpenVPN server template&quot;</span><span class="p">,</span> <span class="nt">&quot;Mappings&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;AWSRegion2AMI&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;ap-northeast-1&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;AMI&quot;</span><span class="p">:</span> <span class="s2">&quot;ami-5ea72b5e&quot;</span> <span class="p">},</span> <span class="nt">&quot;ap-southeast-1&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;AMI&quot;</span><span class="p">:</span> <span class="s2">&quot;ami-365c5764&quot;</span> <span class="p">},</span> <span class="nt">&quot;ap-southeast-2&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;AMI&quot;</span><span class="p">:</span> <span class="s2">&quot;ami-831d51b9&quot;</span> <span class="p">},</span> <span class="nt">&quot;eu-central-1&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;AMI&quot;</span><span class="p">:</span> <span class="s2">&quot;ami-507f7e4d&quot;</span> <span class="p">},</span> <span class="nt">&quot;eu-west-1&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;AMI&quot;</span><span class="p">:</span> <span class="s2">&quot;ami-03644074&quot;</span> <span class="p">},</span> <span class="nt">&quot;sa-east-1&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;AMI&quot;</span><span class="p">:</span> <span class="s2">&quot;ami-4fd55f52&quot;</span> <span class="p">},</span> <span class="nt">&quot;us-east-1&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;AMI&quot;</span><span class="p">:</span> <span class="s2">&quot;ami-5fe36434&quot;</span> <span class="p">},</span> <span class="nt">&quot;us-west-1&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;AMI&quot;</span><span class="p">:</span> <span class="s2">&quot;ami-8bf40fcf&quot;</span> <span class="p">},</span> <span class="nt">&quot;us-west-2&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;AMI&quot;</span><span class="p">:</span> <span class="s2">&quot;ami-9fe2f2af&quot;</span> <span class="p">}</span> <span class="p">}</span> <span class="p">},</span> <span class="nt">&quot;Parameters&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;InstanceType&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;AllowedValues&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&quot;t2.micro&quot;</span><span class="p">,</span> <span class="s2">&quot;t2.medium&quot;</span><span class="p">,</span> <span class="s2">&quot;m3.medium&quot;</span><span class="p">,</span> <span class="s2">&quot;m3.large&quot;</span><span class="p">,</span> <span class="s2">&quot;m3.xlarge&quot;</span><span class="p">,</span> <span class="s2">&quot;m3.2xlarge&quot;</span> <span class="p">],</span> <span class="nt">&quot;ConstraintDescription&quot;</span><span class="p">:</span> <span class="s2">&quot;must be a valid EC2 instance type.&quot;</span><span class="p">,</span> <span class="nt">&quot;Default&quot;</span><span class="p">:</span> <span class="s2">&quot;t2.micro&quot;</span><span class="p">,</span> <span class="nt">&quot;Description&quot;</span><span class="p">:</span> <span class="s2">&quot;Instance type for EC2 instance.&quot;</span><span class="p">,</span> <span class="nt">&quot;Type&quot;</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span> <span class="p">},</span> <span class="nt">&quot;KeyName&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;ConstraintDescription&quot;</span><span class="p">:</span> <span class="s2">&quot;must be the name of an existing EC2 KeyPair.&quot;</span><span class="p">,</span> <span class="nt">&quot;Default&quot;</span><span class="p">:</span> <span class="s2">&quot;openvpn&quot;</span><span class="p">,</span> <span class="nt">&quot;Description&quot;</span><span class="p">:</span> <span class="s2">&quot;Name of an existing EC2 KeyPair to enable SSH access to the instances&quot;</span><span class="p">,</span> <span class="nt">&quot;Type&quot;</span><span class="p">:</span> <span class="s2">&quot;AWS::EC2::KeyPair::KeyName&quot;</span> <span class="p">},</span> <span class="nt">&quot;Project&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;AllowedPattern&quot;</span><span class="p">:</span> <span class="s2">&quot;[\\x20-\\x7E]*&quot;</span><span class="p">,</span> <span class="nt">&quot;ConstraintDescription&quot;</span><span class="p">:</span> <span class="s2">&quot;can contain only ASCII characters.&quot;</span><span class="p">,</span> <span class="nt">&quot;Default&quot;</span><span class="p">:</span> <span class="s2">&quot;OpenVPN-server&quot;</span><span class="p">,</span> <span class="nt">&quot;Description&quot;</span><span class="p">:</span> <span class="s2">&quot;OpenVPN-server&quot;</span><span class="p">,</span> <span class="nt">&quot;MaxLength&quot;</span><span class="p">:</span> <span class="s2">&quot;255&quot;</span><span class="p">,</span> <span class="nt">&quot;MinLength&quot;</span><span class="p">:</span> <span class="s2">&quot;1&quot;</span><span class="p">,</span> <span class="nt">&quot;Type&quot;</span><span class="p">:</span> <span class="s2">&quot;String&quot;</span> <span class="p">}</span> <span class="p">},</span> <span class="nt">&quot;Resources&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;OpenVPNInstance&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;Properties&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;ImageId&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;Fn::FindInMap&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&quot;AWSRegion2AMI&quot;</span><span class="p">,</span> <span class="p">{</span> <span class="nt">&quot;Ref&quot;</span><span class="p">:</span> <span class="s2">&quot;AWS::Region&quot;</span> <span class="p">},</span> <span class="s2">&quot;AMI&quot;</span> <span class="p">]</span> <span class="p">},</span> <span class="nt">&quot;InstanceType&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;Ref&quot;</span><span class="p">:</span> <span class="s2">&quot;InstanceType&quot;</span> <span class="p">},</span> <span class="nt">&quot;KeyName&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;Ref&quot;</span><span class="p">:</span> <span class="s2">&quot;KeyName&quot;</span> <span class="p">},</span> <span class="nt">&quot;SecurityGroups&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nt">&quot;Ref&quot;</span><span class="p">:</span> <span class="s2">&quot;VPNSecurityGroup&quot;</span> <span class="p">}</span> <span class="p">],</span> <span class="nt">&quot;Tags&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nt">&quot;Key&quot;</span><span class="p">:</span> <span class="s2">&quot;Name&quot;</span><span class="p">,</span> <span class="nt">&quot;Value&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;Fn::Join&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&quot;-&quot;</span><span class="p">,</span> <span class="p">[</span> <span class="s2">&quot;EC2-VPN&quot;</span><span class="p">,</span> <span class="p">{</span> <span class="nt">&quot;Ref&quot;</span><span class="p">:</span> <span class="s2">&quot;Project&quot;</span> <span class="p">}</span> <span class="p">]</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">],</span> <span class="nt">&quot;UserData&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;Fn::Base64&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;Fn::Join&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="p">[</span> <span class="s2">&quot;public_hostname=openvpn\n&quot;</span><span class="p">,</span> <span class="s2">&quot;admin_user=openvpn\n&quot;</span><span class="p">,</span> <span class="s2">&quot;admin_pw=openvpn\n&quot;</span><span class="p">,</span> <span class="s2">&quot;reroute_gw=1\n&quot;</span><span class="p">,</span> <span class="s2">&quot;reroute_dns=1\n&quot;</span> <span class="p">]</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">},</span> <span class="nt">&quot;Type&quot;</span><span class="p">:</span> <span class="s2">&quot;AWS::EC2::Instance&quot;</span> <span class="p">},</span> <span class="nt">&quot;VPNSecurityGroup&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;Properties&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;GroupDescription&quot;</span><span class="p">:</span> <span class="s2">&quot;Enable SSH access to the instance and VPN access via configured port. &quot;</span><span class="p">,</span> <span class="nt">&quot;SecurityGroupIngress&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nt">&quot;CidrIp&quot;</span><span class="p">:</span> <span class="s2">&quot;;</span><span class="p">,</span> <span class="nt">&quot;FromPort&quot;</span><span class="p">:</span> <span class="s2">&quot;443&quot;</span><span class="p">,</span> <span class="nt">&quot;IpProtocol&quot;</span><span class="p">:</span> <span class="s2">&quot;tcp&quot;</span><span class="p">,</span> <span class="nt">&quot;ToPort&quot;</span><span class="p">:</span> <span class="s2">&quot;443&quot;</span> <span class="p">},</span> <span class="p">{</span> <span class="nt">&quot;CidrIp&quot;</span><span class="p">:</span> <span class="s2">&quot;;</span><span class="p">,</span> <span class="nt">&quot;FromPort&quot;</span><span class="p">:</span> <span class="s2">&quot;1194&quot;</span><span class="p">,</span> <span class="nt">&quot;IpProtocol&quot;</span><span class="p">:</span> <span class="s2">&quot;udp&quot;</span><span class="p">,</span> <span class="nt">&quot;ToPort&quot;</span><span class="p">:</span> <span class="s2">&quot;1194&quot;</span> <span class="p">}</span> <span class="p">],</span> <span class="nt">&quot;Tags&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nt">&quot;Key&quot;</span><span class="p">:</span> <span class="s2">&quot;Name&quot;</span><span class="p">,</span> <span class="nt">&quot;Value&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&quot;Fn::Join&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&quot;-&quot;</span><span class="p">,</span> <span class="p">[</span> <span class="s2">&quot;SG-VPN&quot;</span><span class="p">,</span> <span class="p">{</span> <span class="nt">&quot;Ref&quot;</span><span class="p">:</span> <span class="s2">&quot;Project&quot;</span> <span class="p">}</span> <span class="p">]</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">]</span> <span class="p">},</span> <span class="nt">&quot;Type&quot;</span><span class="p">:</span> <span class="s2">&quot;AWS::EC2::SecurityGroup&quot;</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </code></pre></div> <p>You can <a href="">download it</a>, and use it whenever you need to quickly deploy an OpenVPN server. In order to use it, you need:</p> <ol> <li><p>an AWS account (this costs money, but not much, and only when it&rsquo;s being used);</p></li> <li><p>to accept the terms of use for the <a href="">OpenVPN Access Service AMI</a>; it&rsquo;s free for not more than 2 VPN connections at a time;</p></li> <li><p>to have at least one key pair for the EC2 instance that will be deployed;</p></li> <li><p>to configure the OpenVPN server and optionally create another user (the default username and password is <code>openvpn</code> as defined in the template);</p></li> <li><p>to configure a VPN client software capable of connecting to OpenVPN servers; on a Mac I recommend <a href="">Viscosity</a>, Linux users need the OpenVPN plugin for Network Manager, Windows users need to get a grip and change the OS (seriously though, I don&rsquo;t know any VPN clients for Windows, but for sure there are many good ones).</p></li> </ol> <p>That&rsquo;s it! To access the control panel of your VPN server, browse to <code>https://yourEC2_public_IP_address/admin</code> and accept the OpenVPN license. To get the <code>client.ovpn</code> configuration file for your client software, look up <code>https://yourEC2_public_IP_address/?src=connect</code> (you may need to tweak the settings depending on the client you&rsquo;re using).</p> <p>If you&rsquo;d like to change the Cloudformation template, I recommend using <a href="">Troposphere</a> package for Python rather than editing the raw JSON file. Here&rsquo;s the <a href="">source</a> I used to generate the template above.</p> <p>Merry Christmas everyone!</p> <div class="footnotes"> <hr /> <ol> <li id="fn:1">Now you&rsquo;d think it&rsquo;s difficult to get a fast enough internet connection in the poor Eastern Block, but my experience shows that on average the quality of internet providers is orders of magnitude better in, say, Poland than in, say, Germany/The Netherlands/Belgium/Norway/UK. <a class="footnote-return" href="#fnref:1">↩</a></li> <li id="fn:2">Ordinarily, yes, CF templates <em>should</em> include all the details of a given stack. The template presented here is as bare as possible, though, using a default VPC, default subnet etc., to keep it simple. <a class="footnote-return" href="#fnref:2">↩</a></li> </ol> </div> Blogging Again Tue, 22 Dec 2015 00:00:00 +0000 <p><a href="">Manton Reece:</a></p> <blockquote> <p>By creating a blog, you’re making a statement that you care about something</p> </blockquote> <p>I haven&rsquo;t been blogging on a regular basis for many months now, primarily because I was busy with my PhD, depressed with my PhD, depressed about looking for a job or busy with my new job, but also because <a href="">I wasn&rsquo;t really sure</a> there&rsquo;s a point in having a blog in the first place.</p> <p>I&rsquo;ve read Manton Reece&rsquo;s post about female bloggers&rsquo; in the tech community (linked to by <a href="">Brent Simmons&rsquo; post</a> on the subject) and the above quote made me think that I do feel like I have something to say on the subjects I care about, and that I do have the need to put it in writing. I also notice a trend of some of my favorite blogs dying out slowly: <a href="">Marco Arment&rsquo;s blog</a> has seen much less activitiy recently, because he <a href="">prefers podcasting</a> as a medium, and <a href="">Tikitu de Jager&rsquo;s blog</a> is also rather <a href="">inactive</a>.</p> <p>I&rsquo;d like to go against the trend and resume blogging, then. I no longer care whether my content is focused on a particular topic or not, as I noticed that blogs which contents reflects the personality of an author are more appealing to me as a reader. This is the true essence of blogging to me, the somewhat personal relationship you can build between the reader and the blogger. I&rsquo;ll do my best to achieve just that.</p> Positive experience as a woman in tech Fri, 18 Dec 2015 00:00:00 +0000 <blockquote> (...) when no positive stories get out, the overall picture painted is bleak, which could scare even more women away. </blockquote> <p>Lea Verou <a href="">writes</a> about her experience in the technical community. While our community definitely has a problem with sexism, it&rsquo;s important to bring out positive experiences like the one Verou has. In her own words, &ldquo;who wants to be fighting an uphill battle all her life?&rdquo;</p>