rolisz's site en Sun, 07 May 2017 00:54:00 GMT acrylamid 0.7.10 Happy Mother's Day! <iframe width="560" height="315" src="" frameborder="0" allowfullscreen class="youtube"></iframe> <p>Happy Mother's Day to my dear mom! I love you! Kisses from New York!</p> Sun, 07 May 2017 00:54:00 GMT,2017-05-07:/2017/05/07/happy-mother-s-day Look what I found on Uetliberg <p><img alt="Hands with rings" src="" width="100%" style="max-width:600px"/></p> <p>Scarcely had I hiked up Uetliberg when I found the one my heart loves. I held her tightly and I put a ring on her finger! (to paraphrase Song of Solomon 3:4)</p> Sun, 23 Apr 2017 22:56:00 GMT,2017-04-23:/2017/04/23/look-what-i-found-on-uetliberg Indexing IM logs with Elasticsearch <p>Remember <a href="">my old project</a> for processing instant messaging logs? Probably, because I wrote about it <a href="">five years ago</a>. Well, the project is only mostly dead, every once in a while I still occasionally work on it. </p> <p>I mostly use it as an excuse to learn technologies that are used outside of the Google bubble. One thing that really impressed me with how well it works and how easy it is to set up was <a href="">Elasticsearch</a>. Elasticsearch is a search engine. You give it your documents and it indexes them and enables you to query them fast. There are other projects that do this for you, but ES can do scaling to multiple machines out of the box, has sane defaults for how to process text and it has many addons. One of the amazing addons, built by the same company, is Kibana, a dashboard and reporting tool, perfectly integrated with Elasticsearch.</p> <p>Let's see how we can get our data into Elasticsearch and how we can learn something from it. We're going to use the Python bindings and I assume that you have all the official packages installed. I'm going to assume that getting the data is a solved problem and we basically have an iterator that produces dictionaries of the following form:</p> <pre class="highlight"><code>{'datetime': '2017-03-30T23:12', 'message': 'Hello there', 'contact': 'Friend', 'sender': 'Me'}</code></pre> <p>To add the data into Elasticsearch, we use the following super short snippet:</p> <pre class="highlight"><code class="language-python">from elasticsearch import Elasticsearch from elasticsearch.helpers import bulk es = Elasticsearch() # Create the connection to the Elasticsearch cluster es = Elasticsearch(['http://elastic:changeme@localhost:9200/']) # Set a certain property for the message field. es.indices.create('chat', {&quot;mappings&quot; : { &quot;message&quot; : { &quot;properties&quot; : { &quot;message&quot; : { &quot;type&quot; : &quot;text&quot;, &quot;fielddata&quot;: True } } } } }) # Generator that creates dictionaries of our messages and tells ES were to index # them def lines(): for row in rows: d = {k: row[k] for k in row.keys()} d['_op_type'] = 'index' d['_index']= 'chat' d['_type']= 'message' yield d # Imports into Elasticsearch in bulk (once every 5000 messages) bulk(es,lines())</code></pre> <p>And that's about it. Normally, Elasticsearch can create indexes automatically when you first import something, but in our case, it has a wrong default for the message field, so we have to manually specify that it should have the <a href="">fielddata</a> setting true.</p> <p>Now let's see what this gives us. We are going to start Kibana, which is the dashboard creating tool for Elasticsearch. There we can explore our dataset and filter by everything:</p> <p><a href=""><img alt="Kibana UI" src="" width="100%" style="max-width:600px"/></a></p> <p>This shows you some of my discussions with Cătălin. At the top you can see the number of messages we've had over the years. It's a partial lie: in the second half of 2015 we talked over Wire and I didn't save my discussions from there and since the second half of 2016 we've been talking on Telegram and I haven't written the import tool for that. </p> <p>Below that you can see some of the actual messages, with all the metadata. It's quite nice to explore your data and to reminisce over old conversations.</p> <p>Then we can switch to the Visualize tab and create some pretty graphs:</p> <p><a href=""><img alt="Top contacts" src="" width="100%" style="max-width:600px"/></a></p> <p>This is a graph of the top 20 people I have talked with. Cătălin leads the pack, because I have been talking to him for about 9 years and then there are various friends. One thing that was surprising to me was how some people with whom I haven't talked in 3-4 years are still there, meaning that I must've talked to them a loooot before that. </p> <p><a href=""><img alt="Amount of chats over the year" src="" width="100%" style="max-width:600px"/></a></p> <p>Another easy graph to make is to plot how much I've talked to my top 20 contacts over the years. As you can see, there is a lot of variation. It's hard to tell much just by eyeballing the data, but it seems that most of the time there are burst of activity with a friend and then we talk much less for a while. Maybe I should use it to decide who to talk to again. :D</p> <p>The last thing I want to show is from an addon to Elasticsearch, called X-Pack. It's a paid addon, but it has a free 30 day trial. It has a module called Graph, where you enter certain keywords and it shows you related terms.</p> <p><a href=""><img alt="Graph of connected terms" src="" width="100%" style="max-width:600px"/></a></p> <p>To get this image, I entered Python, Ruby, cooking and Bible. As you can see, it "knows" that Python and Ruby are connected. Even more, it knows that Django is a Python framework, while Rails is a Ruby framework. PHP and Javascript are also programming languages, so they are part of that cluster. </p> <p>But cooking forms a different cluster, together with cleaning, which I should be doing :D </p> <p>Bible is another separate cluster, with study and reading. It figured out that I use the ESV Bible translation. The relationship between study and collegehumor is funny: I sent a certain link to many people, which was about "studying" and this confuses it into thinking the two are related. Alas, humour still beats modern AI techniques. </p> <p>Considering how much effort we invested into this, it gives really good results. Of course, it's helpful that I have a lot of data from which it can learn.</p> <p>I find Elasticsearch a great tool for quickly searching when I talked to someone about a certain topic and for doing some simple visualizations. It's super simple to use, but still powerful.</p> Sat, 01 Apr 2017 21:46:00 GMT,2017-04-01:/2017/04/01/indexing-im-logs-with-elasticsearch Silence <p><img alt="Silence poster" src="" width="100%" style="max-width:600px"/></p> <p>Silence is a movie by Martin Scorsese about two Catholic priests, Rodriguez and Garupe, who go to Japan in the 17th century to find their mentor, Father Ferreira, who is rumoured to have lost the faith.</p> <p>It's a really good movie, even though it's extremely brutal. It makes you think about some really hard questions, such as where is God among suffering and when He is (or seems) silent, despite all your prayers. </p> <p>It's based on a book by Endo Shusaku. I read the book when I was 12 or 13. I found it too long and boring, but I forced myself to finish it. I think it was quite inappropriate for me at that time: I couldn't process the central conflict of the book, the dilemma the main character is faced with when he either has to apostatize or watch as other Christians are tortured because of him. I'm not sure, but I think after reading this book I somehow lost interest in reading for a long time.</p> <p>The movie stays close to the book, so it was interesting to look at the same subject more than 10 years later. What made it even more interesting was that I asked the same question last year, when the sky seemed to be falling over me, during my depression.</p> <p>While I don't agree with some of the tenets of Catholicism, I do believe that some Catholics were true believers, who loved God. In the movie you get the first impression of this when the priests arrive in Japan. Their guide takes them to some "Kirishitans" (misspelled/japanized version of the word Christian) who have to profess their faith in secret, because of persecutions. The believers are incredibly happy that God sent them some priests and shelter them. Even though they don't have enough food, they prefer to starve, so that they can feed the priests, knowing that the priests will then feed them spiritually. They have waited anxiously for years for priests to come to absolve them, to administer sacraments and to baptize their children. When the authorities realize that there are Christians around, they manage to catch four. When given the opportunity to recant, three of them refuse, so they are tied to pillars in the sea and left there to be beaten to death by the sea. The last one dies praising God and looking forward to heaven. </p> <p><img alt="Rodriguez with a local believer" src="" width="100%" style="max-width:600px"/></p> <p>I believe in the universal priesthood of believers (which means that you don't need a designated priest, you can go with your prayers directly to God), so I don't believe that you need priests from Portugal to have your sins forgiven. But this image of people being hungry for the Word of God is one that is very familiar: my parents did that too. Before communism fell in Romania, Christian literature was rare. My mom was an English teacher, so she speaks good English. After the revolution, several people from the church invited other saints from abroad, from the US, the Netherlands, UK, Switzerland, to help them grow and learn more about God. My mother ended up going with the foreigners to translate for them, several weeks every year.</p> <p>I also have met personally one person who has been in communist prisons for his faith, my parents know several more and I've read books about other people in my country who have been tortured for their faith. The movie just gives it a more visual face to what I already knew and makes me wonder "What kept these people going?" and I can't believe that just a lie would give them the inner strength to resist. </p> <p>After a while, the two priests part ways. They are both separately captured by the Japanese, but they take very different paths. Garupe dies trying to save other Christians from death. Rodriguez was never allowed as much freedom by his captors, but at the same time he didn't resist too much either. In the end, he recants. He steps on the fumie (a metal plaque with an "image" of Jesus) and then he helps catch other Christians, by examining objects for Christian iconography. He claims that Christ spoke to him, giving him permission to step on the image. He lives the rest of his life as a Buddhist, but when he is cremated, he is shown to hold a small cross hidden in his palms.</p> <p><img alt="Father Ferreira" src="" width="100%" style="max-width:600px"/></p> <p>I think Rodriguez made the wrong choice when he apostatized, especially that he knew from a discussion with some of the local believers that they were convinced that they will be going to "paraiso", where there is no hard work, no starving and no taxes. While their suffering was difficult, he should have known that in the end they would be rewarded for it, no matter how much it hurt him to watch and hear the torture.</p> <p>At the same time, it's easy to judge from my comfy chair, knowing that I've never been anywhere near any kind of persecution for my faith. I just hope and pray that when I will be in a similar situation, I will find the grace from God to act faithfully. </p> <p>While the ending is sad, I still found the movie to be enjoyable, although in the philosophical sense, not the emotional one, because it almost brought me to tears in the cinema. It's definitely not a movie to watch lightheartedly and be prepared to be confronted with some tough questions, but in a good way, I believe.</p> Fri, 10 Mar 2017 00:45:00 GMT,2017-03-10:/2017/03/10/silence Backing up 2: The NAS <figure> <p><img alt="Photo of Synology DS916+" src="" width="100%" style="max-width:600px"/> <figcaption>My DS916+ NAS hidden behind next to a drawer in my living room</figcaption></p> </figure> <p>As I mentioned in my <a href="">previous post</a>, it's good to have various kinds of backups. Today I'm going to talk about on-site backups, in a Network Attached Storage.</p> <p>Network Attached Storages (NAS) are small form computers which usually have at least two hard drives. The hard drives are often hot swappable and can be taken out without disassembling the computer. They are meant to be always on, so they don't consume a lot of power. </p> <p>You can build your own NAS. It's not harder than building your own computer, but if you want it to look really nice and to consume few watts, you'll have to search around quite a lot for parts. The biggest hassle however is setting it up. Whether you go the Linux or Windows route, it still means configuring a server. Some people find it fun, some people don't. </p> <p><a href=""><img alt="Synology OS start screen" src="" width="100%" style="max-width:600px"/></a></p> <p>I ended up buying a pre-made Synology DS916+ unit. It's a 4 drive bay, with a quad core CPU, that consumes around 30W. It's possibly an overkill even for me, but meh, I wanted to go fancy and future-proof. I put in 3 3TB WD Red drives (so I have an empty slot).</p> <p>What convinced me to go the pre-made route? The surrounding ecosystem. Yes, I can configure my home network (with a significant amount of effort) and set-up all the backups, but there's no way I'm going to develop about 10 iOS/Android apps that Synology has. These apps enable me to browse my files from my phone, remotely, to stream my music, to have a remote photo library (including automatic backups of my photos taken with the phone), note taking app that sync back and so on. It basically offers you your very own little cloud. This I found super convenient.</p> <p>Setting it up is super easy. You just put in the hard drives, start it up, configure a few things and you've got a working NAS.</p> <p><a href=""><img alt="Storage Manager" src="" width="100%" style="max-width:600px"/></a></p> <p>One of the more important choices you have to make is how to set up your hard drives. The trade-off is between how many hard drives can fail before any data is lost and how much overhead is needed (how much space is lost). Synology supports a lot of RAID formats (0, 1, 5, 6, 10) and it's own Hybrid Raid thing. RAID 1 and 5 offer a one disk redundancy (if one disk fails, you can still recover all the data from the array), while RAID 6 gives you two disk redundancy. I went with the RAID 5 for my own NAS.</p> <p>Another choice you have to make is what file system to use. Here is where Synology has an advantage over other NAS vendors: it offers Btrfs support. This is a shiny new file system which does file level checksumming and scrubbing, where it looks for files that might have been corrupted and tries to recover them from redundant copies. It has many other features, but these were the most important to me, because they prevent silent bitrot. Bitrot is a process in which a random bit on the hard drive is flipped, corrupting data. This is because small parts of the hard disk platter lose their magnetic orientation. This happens on average about 10^(-14) times, so if you have a 10 terabyte array, it's almost guaranteed that it will happen during it's lifetime. This is usually detected only when you try to read the data, when you suddenly realize that it doesn't make sense anymore. Because btrfs has checksumming, it can figure out when files are corrupted and because it offers scrubbing, it can find out before you go looking for it, while there is still a redundant copy of the file, so it can recover it.</p> <p><a href=""><img alt="Package Center" src="" width="100%" style="max-width:600px"/></a></p> <p>There's a "Cloud Sync" app that enables you to easily backup your various online services, so I set it up with Google Drive and soon it downloaded everything. I also plugged in my external hard drive and downloaded everything from there. The files that live on my computer were copied using rsync or scp, even though the NAS has a fairly good web UI for uploading.</p> <p>After I uploaded all my photos, it spent more than a week indexing them in the Photo library app. It has a super primitive form of facial recognition, which is completely useless, but it recognizes the tags that Picasa or Windows Live Gallery inserted (and they had much better facial recognition), so I could now browse by people.</p> <p>It has a Download Station, which you can use to automatically download stuff, from random pages, torrents or even YouTube videos. </p> <p>It has an Audio Station, which I use because I listen to many sermons, not all of which come in a nice podcast, so it's just easier for me to put them on my NAS and listen to them from there. </p> <p>The Video Station is pretty impressive. It can do transcoding on the fly and you can play in your browser or on your phone. It searches for metadata for the files that you have on the internet, to show nice images and information about it. But I use Netflix for almost all my home entertainment needs, so I don't put this to good use.</p> <p>All these work both from the browser and from your mobile. This attracted me the most: the convenience of mobile. And because it has support for HTTPS, it's fairly safe (as safe as something you expose to the Internet from your living room can be).</p> <p><a href=""><img alt="Control Panel" src="" width="100%" style="max-width:600px"/></a></p> <p>From the Control Panel you can change most of the settings, including security ones. There are several basic ones that you have to make if you expose it to the internet, such as auto banning after several unsuccessful attempts to login.</p> <p>It also offers the option to browse over HTTPS. To avoid the complaints from the browser about a self signed certificate, I actually went and bought a domain for "my house". Synology has support for Dynamic DNS, so updating the domain to point to my IP is automatic. Also, it supports Let's Encrypt so getting the HTTPS certificate was trivial, from the Control Panel. </p> <p>It also has a web server, a mail server, a chat server and a lot of other stuff which I didn't set up. It has built-in support for Docker, so it can run whatever container you have. </p> <p>I find the DS916+ to be more than enough for my needs. Since I have it, I find it much easier to work on my various projects when I am away, because I know I can always access them even remotely, on my NAS. It's very quiet, it doesn't bother me, even though I am quite sensitive to noise. Sometimes when it starts a background process I can hear it, but most of the time it's hibernating.</p> Thu, 02 Mar 2017 22:51:00 GMT,2017-03-02:/2017/03/02/backing-up-2-the-nas Backing up <figure> <p><a href=""><img alt="Burned down computer" src="" width="100%" style="max-width:600px"/></a> <figcaption>What can happen to your computer</figcaption></p> </figure> <p>In today's world, our data and our information is one of our most valuable assets. I have photos going back to 2008. My sporadic journal has digital entries from 2010. I have IM logs from 2009. I have a list of my monthly expenses since 2012. My blog goes back to 2010. I have loads of projects in various stages. Most of this information is irreplaceable (I'm never going to be 16 again, to take those photos once more :( ) and most of it is quite valuable, some having sentimental value (photos), some from a financial point of view, some professionally (my coding projects).</p> <p>Just keeping all this on my own computer was not enough. Hard drives can fail at any time, so I wanted a better back-up solution. At first, I just bought an external hard drive. I did an initial backup of everything to it... and the next one was half a year later. And then one year later. And at that time, I detected some file system level corruption and I had to spend some time recovering data. So I decided that it's not enough.</p> <p>I use various online backup services, but that means my data is in somebody else's hands. Some promise encryption, some have been known to collaborate with various governments, some have shutdown access to the entire account for an entirely different issue. It's enough to look at today's political landscape to see that this can easily become (or already is) a problem. I will still keep using it for most things, because of convenience (Google Photos is awesome and I haven't found anything remotely similar and I don't say this because I work for Google, but because it's really awesome) but I also want to have a copy of my data that is more under my hands.</p> <p>In general it's good to have several layers of backups. At least one should be on-site, for ease of access. Your computer hard drive kicks the bucket, you reach over to your external hard drive or the other computer that has the copy, and you recover the lost files. Problem solved. It's also trivial to copy things locally, because bandwidth is not an issue. </p> <p>While on-site solves the problem of individual hardware failures (unless you are really unlucky and both fail at the same time), it has another failure mode: entire home/office failures. Examples of this include a burglary, fire or floods. If any of these hit, it's likely that most electronic devices you have will stop working. To help with this, you need off-site backups. These are backups that you store in a geographically far location. The further they are, the unlikelier it is that whatever would take out either your home or your off-site backups would affect the other one too. In my case, my off-site backups will be in Romania. That's 1200 km away, so if something like a meteor hit Europe and destroyed half of it, that would cause me to lose data, but at that point I have much bigger problems than that.</p> <p>You also need to make sure that your backups will still work. It's no use if you create a backup and a year later, when you try to recover it, you discover that actually there was some bit rot and your files are unreadable. There are various ways to protect against this, from checksumming files at the file system level to using hardware redundancy (RAID arrays most commonly).</p> <p>There is a large variation on what you can do to protect your data. There is always a trade-off between safety and how much it costs. In the following posts I will go into some more details about what I use for securing my own data, starting with the on-site backup to a Network Attached Storage.</p> Mon, 20 Feb 2017 23:23:00 GMT,2017-02-20:/2017/02/20/backing-up Winter sports <p><img alt="From up close, it looks just like the wallpaper from one of the Mac OS versions" src="" width="100%" style="max-width:600px"/></p> <p>I've been in Switzerland for almost two and half years now, but I haven't done the typical Swiss things (except eating Fondue). Last winter I was either not here or busy at work, so I avoided all winter sports. </p> <p>But this year two opportunities came up when I could go with colleagues to do skiing or snowboarding. So I finally tried both. I had a little skiing experience from two years ago, but that was it. </p> <p><img alt="I'm on a snowboard" src="" width="100%" style="max-width:600px"/></p> <p>One Friday at 8 PM a colleague asked me if I wanted to go to Laax for skiing the next day. I didn't really have any plans, so I said why not. He was going to teach his girlfriend how to snowboard, so I decided I would tag along with them. The others were skiers with more experience, so I didn't want to be the clunky wheel. </p> <p>I fell on my butt more times than I can imagine and it was sore for two days. But it was fuuun!. Towards the end of the day I could go about 100 m without falling!</p> <iframe width="560" height="315" src="" frameborder="0" allowfullscreen class="youtube"></iframe> <p>The week after that, my team had some visitors and during dinner, we decided we should all go skiing in Lenzerheide two days later. There was another beginner in this group, so we decided to take ski lessons together.</p> <p>Skiing went better. I remembered more than I expected since last year. I fell only about two or three times. One of which was standing in place. Whoops. Another one being the alternative to running into a fence. </p> <p><img alt="Some mountain peak around Lenzerheide" src="" width="100%" style="max-width:600px"/></p> <p>However, I found that I had much less control over my skis, especially with regards to speed. When you are on the snowboard, you are in an unstable equilibrium and you constantly have to balance. Because of this, as a beginner, you don't really get to a high speed, because as you go faster, it's harder to balance, so you fall before reaching a dangerous speed. It will hurt a bit, but it's unlikely to break any bones. But on the skis, you are in a stable equilibrium, so if you just do nothing as you are sliding down, you will pick up speed, with little risk of just toppling over. But then, when a turn comes, you won't be able to make it, so you'll either fall (at a much higher speed), hit the fence/tree or run off-piste. </p> <p><img alt="And off we go" src="" width="100%" style="max-width:600px"/></p> <p>Of course, this is all true only for beginners like me. When you get to more advanced stuff, it might change, but for now, I feel more comfortable on the snowboard. And hopefully I can go again in two weeks time!</p> Sun, 05 Feb 2017 22:17:00 GMT,2017-02-05:/2017/02/05/winter-sports Sous vide with Anova Precision Cooker <p><img alt="Frontal view of Anova Cooker" src="" width="100%" style="max-width:600px"/></p> <p>Last year I bought an Anova Sous Vide Cooker. The name is slightly misleading, because it's not generally used to cook in a vacuum, but for cooking at very precisely controlled temperatures.</p> <p><img alt="Side view of Anova Cooker" src="" width="100%" style="max-width:600px"/></p> <p>The advantage of using Anova is that you can cook various foods at temperatures below 100 degrees, for several hours. This way, you can avoid the degradation of certain proteins. For example, egg white starts to become solid at around 65 degrees, while the yolk at 70. If you cook the egg at just 65 for half an hour, you can get a perfect soft boiled egg, with really runny yolk, while the white is solid. </p> <p>Another advantage is that it's just easier to prepare the meat. You season it, bag it, put it in the water and you wait for a couple of hours. Because of this, it's easier to get consistent results every time. If you make a steak on the grill, the exact time you let it there matters, down to tens of seconds. When you are cooking it in the Anova for 3 hours, 5 minutes here or there are not that important.</p> <div class="gallery clearfix" style="max-width:600px"> <script type="application/json">[]</script> </div> <p>One of the first things I cooked was chicken breast. You just season it well with salt, pepper, maybe some herbs or lemon, put it in a bag and then put it in water. Depending on the water temperature, you can choose to get a really soft meat, or more tender, or more stringy. The chicken basically cooks in it's own juices, so it has a lot more flavor at the end.</p> <div class="gallery clearfix" style="max-width:600px"> <script type="application/json">[]</script> </div> <p>My best dish to date was salmon. From the first try, it came out really great. Again, no effort, no checking whether it's done. You just look at the timer and then you eat. </p> <p>Now if only I ate at home more often...</p> Sat, 28 Jan 2017 23:36:00 GMT,2017-01-28:/2017/01/28/sous-vide-with-anova-precision-cooker New year, old goals <p><img alt="Same same, but different, but still same" src="" width="100%" style="max-width:600px"/></p> <p>My attempt a year ago to set public goals was quite successful. I achieved most of them and the average completion score was 0.7. I took a break in the second half of the year, but now I'm well rested and I want to start again.</p> <p>I learned some things that work and some that don't. For example, tracking number of books read is not too useful, at least not in Beeminder, but tracking number of minutes spent reading is much better. This way, if you are reading through a really thick book, you are not derailed as easily. Also, tracking productivity can be done really well with Pomodoros. They are small enough to be able to do them always, but big enough to have a meaningful impact on your work.</p> <p>I also have to decide what my priorities are better. Last year I had a very large range of goals, which had me spread out into many areas, and inevitably some fell through the cracks. </p> <p>For example, I realized that in the last trip I took to Romania, I took my camera out of my bag only once. When I was in Israel, half the photos I took there where with my phone. It doesn't really make sense for me to have a goal related to my camera. I didn't even touch my photography goal last year.</p> <p>I had the piano goal last year, but I realize that now I will have to drop it. I will keep taking piano lessons, but I will play it at home on a best effort basis. I have too many other things on my plate and unfortunately, playing the piano is towards the bottom of the list, because I think it's the least beneficial for me.</p> <p>The new goals for this year are:</p> <h4>Physical</h4> <dl> <dt>Get to 82 kg by June</dt> <dd>I got to 82 kg last January and I hovered around that area until June, but then I lost the will power to stop snacking, so I put back all of that weight. Since then, I have been reading up a bit about how the body interacts with proteins, carbohydrates and fats and learned a bit about how some diets work (other than caloric restrictions). When I was 82 kg, everybody was remarking how thin I was, so for now I don't want to go lower than that, but I would like to stay there. </dd> <dt>Exercise three times a week</dt> <dd>I don't want to set specific target speeds or weights, because I have a small shoulder injury and I don't know how much it will hinder me. But I still plan to do some sort of vigorous exercise three times a week. This includes running, swimming, weightlifting, play squash, etc.</dd> </dl> <h4>Mental</h4> <dl> <dt>Read 24 books in 2017/read 30 minutes every day</dt> <dd>I read 21.5 books last year. Again, in the second half of the year, I took it easier, so I'm hoping now I can overcome that and if I keep a constant pace of 30 minutes per day, I will make it.</dd> <dt>Write 3 blog posts per month</dt> <dd>I did 2.75 blog posts last year, so maybe I can do a bit better now.</dd> <dt>Write into my journal twice a week</dt> <dd>I managed to keep this habit for half a year and it's incredible. I look back at what I wrote when I was depressed and it's shocking to me how I was seeing the world back then. And at other times, it's a good reminder of all the blessings that I've had.</dd> <dt>Spend 1 hour per week studying German on my own</dt> <dd>I have been taking German classes for two years now and it's decent, but in order to progress I have to up my individual game. For this goal, the following count: Duolingo, Babbel, Anki, reading about German grammar, doing exercises from textbooks. Exception: when travelling.</dd> <dt>Do 4 20 minute Pomodoros every day</dt> <dd>In my new team, I have longer "compilation" times, so sometimes I cannot iterate faster than this. Exception is when I am travelling or on vacation.</dd> </dl> <h4>Spiritual</h4> <dl> <dt>Read 3 chapters from the Bible every day</dt> <dd>I believe this is achievable even when I travel. At home, I will try to read more when I have time.</dd> <dt>Memorize 1 Bible verse every week:</dt> <dd>This goal didn't get touched at all last year, so I'm starting it again, in a much smaller version. I have the apps set up to help me and I'm trying to do this together with my girlfriend, so I have an accountability partner for this.</dd> </dl> <p>My goals can be seen on <a href="">my Beeminder</a>.</p> Sat, 07 Jan 2017 13:06:00 GMT,2017-01-07:/2017/01/07/new-year-old-goals 2016 in review <p><em>Wow, this post is finally done on time! Yaaaay!</em></p> <p>This year was the first time I had a goal for writing on my blog, at least for the first half of the year. In January I set up <a href="">a goal</a> to write 3.5 blog posts per month, for the first half year and I stuck to it. In the second half of the year I took it easier, so I posted on average only twice a month. In total I posted 33 times, which is more than the year before, when I posted 30 times. </p> <p>The number of pageviews went down by 21%, from 46 thousand to 36 thousand :( The number of users is slightly up, by 5%, from 13 thousand to 13.6 thousand, but number of sessions keeps going down, from 21.5 thousand to 20 thousand. But, the average time spent on my site is up almost 10%, from 1:15 minutes to 1:23 minutes!</p> <p>My blog was viewed the most on September 19, after I posted the post saying <a href="">goodbye to Alida</a>, when my blog was viewed 1185 times :(. On average, I had 101 pageviews per day, with the summer months being the most quiet ones. </p> <p>My site got 50% faster, fully loading on average in 3 seconds, while in 2015 in loaded in 6 seconds. It seems that my time spent on optimizing my Nginx configuration was worth it. </p> <p>My most popular blog post is the same, the <a href="">neural networks one</a>. The second most popular one is about Alida. Then on the 8th place is my retrospective after <a href="">two years at Google</a>. Four more posts from this year made it to top 20: the one about setting goals, the <a href="">selfie timelapse one</a>, the one <a href="">about Yahoo Messenger</a> and the one <a href="">about evaluating my goals</a>.</p> <p>My top referrals are still from Facebook, with 2700 visits from there, while the second one is Twitter, with less than a tenth of that. There is also another web page with a neural network tutorial, which links to mine, and which brought in 1500 visitors. </p> <p>New features on the blog include running it from a container and adding a search page. I also try to keep an eye on performance and occasionally perform speed optimizations.</p> <p>I am happy with how my year in blogging has been and I hope you will still read me next year!</p> Sun, 01 Jan 2017 23:46:00 GMT,2017-01-01:/2017/01/01/2016-in-review Shalom from Israel <p><img alt="Pray for the Peace of Jerusalem" src="" width="100%" style="max-width:600px"/></p> <p>Three jeeps, filled with mostly young and idealistic Westerners and driven by former Special Forces members, are going along the mine fields between Syria and Israel. They arrive to an abandoned Syrian hospital, with some soldiers in front of it. They go up to the rooftop, through the crumbling hospital, carefully going up staircases that have been bombed. Once they get up, their tour guide says "See that building 300 meters away? There's an Al-Qaeda sniper looking at you from there! Don't worry, if he wanted you dead, he'd have shot you a long time ago.".</p> <p><img alt="Abandoned Syrian hospital" src="" width="100%" style="max-width:600px"/></p> <p>That was just a short part of my trip to Israel. I had wanted to go for quite some time, to see "The Holy Land" and all the places where much of the Bible happened. In July, I found out that some friends from New York were going, so I pretended to be a New Yorker and I joined them. It was a really fun trip, both because of everything I saw and did, but also because of the opportunity to have lots of fellowship with my dear brothers and sisters from New York, Portland, Seattle and Jerusalem. </p> <figure> <p><img alt="View from the Tel Aviv office of Google" src="" width="100%" style="max-width:600px"/> <figcaption>View from the Tel Aviv office of Google</figcaption></p> </figure> <p>The adventures started at the airport. I made the mistake of flying El Al, the safest airline in the world. They achieve this by having their own custom security checks. When you go to the baggage drop off, somebody starts asking you questions about your luggage (both standard ones like "Who packed your bags?" and ones like "Are you taking anything to the Google office in Tel Aviv?"). Then you get a mark on your boarding pass. I got a red sign, which I'm guessing made me one of "The Marked" ones. I passed through normal security, with plenty of time to spare. I started reading a book. After about one hour, I decided to go to their special security check. It involved talking to another guy, who decided to rummage through my backpack and check all the pockets for traces of explosives. He asked me in Romanian "Ce faci?". And then he proceeded to lock my backpack in a "safe place". I was allowed to keep my book and my headphones and that's it. Yay. And then another hour of waiting. I could pick up my bag right before boarding, when they checked me again. There were only two bags that were treated like this :( But at least I had hummus on the plane!</p> <div class="gallery clearfix" style="max-width:600px"> <img title="Herod" s amphitheather ' src="" style="display:block" width="100%" style="max-width:600px"/> <img title="Star Trek is out, Time Trek is in :D " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/12/israel/cesarea/P1140835.JPG", "title": "Herod's Amphitheather\n", "msrc": "/static/images/2016/12/israel/cesarea/thumbs/P1140835.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/cesarea/P1140853.JPG", "title": "Star Trek is out, Time Trek is in :D\n", "msrc": "/static/images/2016/12/israel/cesarea/thumbs/P1140853.JPG", "w": 1000, "h": 800}]</script> </div> <p>But I arrived well to Tel Aviv. My bags were delayed by quite a bit, but it was fine, because in the meantime some of my friends arrived and we went together to Jerusalem in a sherut, a sort of taxi/van service. </p> <p>When our bus arrived on Saturday, we met Amitai, our guide, and George, our driver, and then we went up North. We quickly visited Caesarea, built by Herod in 20 BCE. It has the only archeological evidence for Pontius Pilatus, in the form of a stone with his name enscribed on it.</p> <p>Then we had lunch at Uriburi, a world famous sea food restaurant. I normally don't like fish very much, but I have to say, this was really good. </p> <p><img alt="View from Mount Carmel" src="" width="100%" style="max-width:600px"/></p> <p>In the afternoon we went up Mount Carmel, where Elijah obtained a great victory over the prophets of Baal (<a href=";version=NCV">1 Kings 18</a>). From there you can see very far in the distance and you can see part of Via Maris, the main road between Damascus and Egypt. Because of this, lots of armies had gone through the Valley of Jezreel, looking to conquer other kingdoms and in the future even more will gather there, at Megido, for Armaghedon.</p> <div class="gallery clearfix" style="max-width:600px"> <img title="Buggy riding in the desert " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="Safety first " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="The quiet desert " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/12/israel/buggy/IMG_2826.JPG", "title": "Buggy riding in the desert\n", "msrc": "/static/images/2016/12/israel/buggy/thumbs/IMG_2826.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/buggy/IMG_2823.jpg", "title": "Safety first\n", "msrc": "/static/images/2016/12/israel/buggy/thumbs/IMG_2823.jpg", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/buggy/IMG_2839.jpg", "title": "The quiet desert\n", "msrc": "/static/images/2016/12/israel/buggy/thumbs/IMG_2839.jpg", "w": 1000, "h": 800}]</script> </div> <p>We spent three nights on the shore of the Sea of Galilee. It was a nice hostel (except for the really loud kids who went to sleep way too late), 100 meters away from the beach, so I usually went swimming every night. Lokka tried to walk on water, with various amounts of success.</p> <div class="gallery clearfix" style="max-width:600px"> <img title="Swimming out in the deep " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="The Galilee at dusk " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="Lokka walking on water " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/12/israel/galilee/IMG_2313.JPG", "title": "Swimming out in the deep\n", "msrc": "/static/images/2016/12/israel/galilee/thumbs/IMG_2313.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/galilee/P1140926.JPG", "title": "The Galilee at dusk\n", "msrc": "/static/images/2016/12/israel/galilee/thumbs/P1140926.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/galilee/P1140949.JPG", "title": "Lokka walking on water\n", "msrc": "/static/images/2016/12/israel/galilee/thumbs/P1140949.JPG", "w": 1000, "h": 800}]</script> </div> <p>After going down the Mount of Beatitudes, we did one of the chillest things on our trip: going with an electric boat on the Sea of Galilee. As we were going out, the captain started some Hillsong songs in the background. The sun was shining, it was nice warm, the water was perfectly calm. I couldn't help but think that 2000 years ago, my Master, Jesus, sailed here, walked on water here, and the disciples were with Him, listening to Him speaking, not just to songs about Him. And then we jumped into water and swam around. And then the captain put on the theme fork Jaws. Epic trolling. xD</p> <div class="gallery clearfix" style="max-width:600px"> <img title="Peter" s mother-in-laws house in capernaum ' src="" style="display:block" width="100%" style="max-width:600px"/> <img title="Our group in the Capernaum synagogue " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/12/israel/capernaum/P1150002.JPG", "title": "Peter's mother-in-laws house in Capernaum\n", "msrc": "/static/images/2016/12/israel/capernaum/thumbs/P1150002.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/capernaum/P1150024.JPG", "title": "Our group in the Capernaum synagogue\n", "msrc": "/static/images/2016/12/israel/capernaum/thumbs/P1150024.JPG", "w": 1000, "h": 800}]</script> </div> <p>We did a quick run down to Capernaum, to visit the old Synagogue and then we crossed the street to get to the supposed house of Peter's mother in law. </p> <p><img alt="Jordan river" src="" width="100%" style="max-width:600px"/></p> <p>We went to see the Jordan river. That was a big... disappointment. In some places it was soooo narrow you could jump over it. And we walked through it, in a place of pain, because of sharp rocks, that looked like the Amazonian jungle. But at least we picked some oranges straight from a tree, so we had that going for us. </p> <div class="gallery clearfix" style="max-width:600px"> <img title="Our guide Amitai the Dreamer " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="Crossroads " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="UN soldiers looking towards Syria " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/12/israel/bental/P1150142.JPG", "title": "Our guide Amitai the Dreamer\n", "msrc": "/static/images/2016/12/israel/bental/thumbs/P1150142.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/bental/IMG_2419.jpg", "title": "Crossroads\n", "msrc": "/static/images/2016/12/israel/bental/thumbs/IMG_2419.jpg", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/bental/bental.JPG", "title": "UN soldiers looking towards Syria\n", "msrc": "/static/images/2016/12/israel/bental/thumbs/bental.JPG", "w": 1000, "h": 800}]</script> </div> <p>The next day, after the jeep ride, we had coffee at Coffee Anan (a pun on both the UN leader and the Hebrew for "Coffee of the Clouds"), the highest restaurant in Israel, on top of Mount Bental. There is a small bunker there, which was last used in the Yom Kippur war. Now it has a small UN sentinel there. </p> <p><img alt="Temple of Pan in Banias" src="" width="100%" style="max-width:600px"/></p> <p>Then we went to Cesarea Philippi, aka Banias. This was where Jesus said "And upon this rock I shall build my Church". He said this standing in front of a pagan temple dedicated to Pan, indicating that He will overcome even that. It was the first place where I learn something completely new and eye opening. </p> <p><img alt="Odem Mountain Winery" src="" width="100%" style="max-width:600px"/></p> <p>In the afternoon we went to Odem Mountain Winery, a Kosher winery that has won several awards for the wines that they make. We went for a wine tasting session. The cherry wine was reaaaally good, the Chardonay was ok, but I really hated the Cabernet Sauvignon. And I learned that Rose wine is made out of red grapes, without the peels. </p> <p><img alt="Dead Sea Mud" src="" width="100%" style="max-width:600px"/></p> <p>On Tuesday we went to the Dead Sea. That was sooo much fun, even if in the beginning it was counterintuitive. But after you got the hang of it, it was relaxing. You could sleep better than in a hammock. The waves are gently rocking you. Just don't get water in your eyes. Then the wailing and gnashing of teeth begins, because it's the only thing you can do. If you try to put your fingers to your eyes, you just make it worse, so you have to wait until you cry out all the salt. Also, the mud there is said to be good for... something, so we all covered ourselves in mud. </p> <p><img alt="Beduin camp" src="" width="100%" style="max-width:600px"/></p> <p>We spent that night glemping in a beduin camp. What is glemping you ask? Glamour camping. Aka: you go camping, but you have full amenities, like at home, except you kinda sleep in some sort of a fancy tent. In our case, we were even upgraded to two person rooms, with AC units and TVs. But hey, there were peacocks walking in front of our windows. We've got that going on for us. The beduin tea was really good, but the coffee was crazy strong and horrible, even for the coffee lovers of the group, but everyone drank it, because we were afraid not to offend our hosts. </p> <p><img alt="Camel ride" src="" width="100%" style="max-width:600px"/></p> <p>Of course, no beduin trip would be complete without a camel ride. Because we were an odd number, I got to ride alone on a camel. It was fun. It had a nice, slow sway. If you could relax, you could enjoy the rythm, and imagine some nice hip hop music as a backdrop. Getting on and off the camel was a bit more interesting. First the camel straigthens up comletely the front legs and only then does it lift the hind legs, so for a short while, you are sitting on a very tilted surface.</p> <div class="gallery clearfix" style="max-width:600px"> <img title="Roman war machine " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="New Yorkers assaulting Massada " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="The surroundings of Massada " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/12/israel/masada/P1150297.JPG", "title": "Roman war machine\n", "msrc": "/static/images/2016/12/israel/masada/thumbs/P1150297.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/masada/P1150318.JPG", "title": "New Yorkers assaulting Massada\n", "msrc": "/static/images/2016/12/israel/masada/thumbs/P1150318.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/masada/P1150332.JPG", "title": "The surroundings of Massada\n", "msrc": "/static/images/2016/12/israel/masada/thumbs/P1150332.JPG", "w": 1000, "h": 800}]</script> </div> <p>Next up: Masada, the old Roman fortress built by Herod. Man, this homie built cribs for himself everywhere. This was a 45 minute climb, while it was 30 degrees outside. And it's basically a barren desert mountain, with some ruins. If you yell on one side of the mountain, you hear a nice echo back. </p> <div class="gallery clearfix" style="max-width:600px"> <img title="David" s waterfall ' src="" style="display:block" width="100%" style="max-width:600px"/> <img title="The discreete entrance to Ein Ghedi " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/12/israel/ein_ghedi/P1150397.JPG", "title": "David's Waterfall\n", "msrc": "/static/images/2016/12/israel/ein_ghedi/thumbs/P1150397.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/ein_ghedi/P1150441.JPG", "title": "The discreete entrance to Ein Ghedi\n", "msrc": "/static/images/2016/12/israel/ein_ghedi/thumbs/P1150441.JPG", "w": 1000, "h": 800}]</script> </div> <p>Then we refreshed at water springs of Ein-Ghedi, where David wrote some of his Psalms and where he hid from Saul. It's an incredibly relaxing place. It's an oasis in the desert. In a big mountain, you suddenly see a valley with some bushes around it. As you go closer, you find a lot of vegetation, animals and many springs. We stayed there until closing time, reading, relaxing, talking and just enjoying the atmosphere. </p> <div class="gallery clearfix" style="max-width:600px"> <img title="Old city at night " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="Rooftops of the old city " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="View from where we stayed on the first night " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/12/israel/jerusalem/IMG_2948.JPG", "title": "Old city at night\n", "msrc": "/static/images/2016/12/israel/jerusalem/thumbs/IMG_2948.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/jerusalem/IMG_2949.jpg", "title": "Rooftops of the old city\n", "msrc": "/static/images/2016/12/israel/jerusalem/thumbs/IMG_2949.jpg", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/jerusalem/P1140744.JPG", "title": "View from where we stayed on the first night\n", "msrc": "/static/images/2016/12/israel/jerusalem/thumbs/P1140744.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/jerusalem/P1150526.JPG", "title": "That's a biiig flag\n", "msrc": "/static/images/2016/12/israel/jerusalem/thumbs/P1150526.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/jerusalem/P1150549.JPG", "title": "View from Caiafas's house. Ghetsimane is on the other side of the valley.\n", "msrc": "/static/images/2016/12/israel/jerusalem/thumbs/P1150549.JPG", "w": 1000, "h": 800}]</script> </div> <p>And then we went to the Holy City, Jerusalem. First impression: it's noisy and full of people, especially in the souk and in the old city. Second impression: it's hilly. Like really hilly. I can't imagine how people got around before they had cars. You go up and down, up and down all the time. We visited a lot of stuff there, but I just want to point out a couple of highlights.</p> <div class="gallery clearfix" style="max-width:600px"> <img title="Umbrellas in the air. " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="Spices in the souk " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="Sweets. Oh the sweets. " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/12/israel/souk/P1140765.JPG", "title": "Umbrellas in the air.\n", "msrc": "/static/images/2016/12/israel/souk/thumbs/P1140765.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/souk/IMG_2232.jpg", "title": "Spices in the souk\n", "msrc": "/static/images/2016/12/israel/souk/thumbs/IMG_2232.jpg", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/souk/P1140760.JPG", "title": "Sweets. Oh the sweets.\n", "msrc": "/static/images/2016/12/israel/souk/thumbs/P1140760.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/souk/P1140790.JPG", "title": "Hustling and bustling in the souk.\n", "msrc": "/static/images/2016/12/israel/souk/thumbs/P1140790.JPG", "w": 1000, "h": 800}]</script> </div> <p>In the souk we bought all kinds of sweets and exotic fruits. Really, really sweet ones. Yummy. It's really cool that you can try stuff before you buy. It's also a really good way for them to get you to buy their stuff. </p> <div class="gallery clearfix" style="max-width:600px"> <img title="The Jewish quarter in the Old City " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="The Muslim quarter in the Old City " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="Heh. " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/12/israel/shops/IMG_2943.JPG", "title": "The Jewish quarter in the Old City\n", "msrc": "/static/images/2016/12/israel/shops/thumbs/IMG_2943.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/shops/IMG_2985.JPG", "title": "The Muslim quarter in the Old City\n", "msrc": "/static/images/2016/12/israel/shops/thumbs/IMG_2985.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/shops/IMG_2988.JPG", "title": "Heh. \n", "msrc": "/static/images/2016/12/israel/shops/thumbs/IMG_2988.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/shops/IMG_2996.jpg", "title": "I wonder if the food comes on a flying rug\n", "msrc": "/static/images/2016/12/israel/shops/thumbs/IMG_2996.jpg", "w": 1000, "h": 800}]</script> </div> <p>The place which got me to understand the topology of the city was when we went to the place where Peter betrayed the Lord Jesus and then we saw the supposed Upper Room, nearby, then Gethsemane, across the valley from there, and then Pontius Pilatus' hall on the other side of the city. So during that night, Jesus walked a loooooot. Also while being beaten and so on. </p> <div class="gallery clearfix" style="max-width:600px"> <img title="Future excavations under the Western Wall " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="Supposed place of Golgotha (if you squint hard, you might see a skull) " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="Western Wall " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/12/israel/jerusalem_relics/IMG_2673.JPG", "title": "Future excavations under the Western Wall\n", "msrc": "/static/images/2016/12/israel/jerusalem_relics/thumbs/IMG_2673.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/jerusalem_relics/IMG_2897.JPG", "title": "Supposed place of Golgotha (if you squint hard, you might see a skull)\n", "msrc": "/static/images/2016/12/israel/jerusalem_relics/thumbs/IMG_2897.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/jerusalem_relics/P1150475.JPG", "title": "Western Wall\n", "msrc": "/static/images/2016/12/israel/jerusalem_relics/thumbs/P1150475.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/jerusalem_relics/P1150544.JPG", "title": "David's Statue\n", "msrc": "/static/images/2016/12/israel/jerusalem_relics/thumbs/P1150544.JPG", "w": 1000, "h": 800}]</script> </div> <p>The other place was at the Western (Wailing) Wall. It's the only place that still remains from Herod's temple. Two kinds of people stood out in that area: those for whom this was just a fun thing, like kids having their bar-mitzvahs and dancing their butts off, for whom this is nothing more than a tradition, something you do to integrate with your family and friends. The other people were people who actually respect the Torah and they do their best to follow what it says, but they completely miss the person to whom it points: Jesus. So sad. :(</p> <div class="gallery clearfix" style="max-width:600px"> <img title="Cute metal sculpture. " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="I too like to live dangerously " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="Another kind of watch face " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/12/israel/misc/P1150075.JPG", "title": "Cute metal sculpture.\n", "msrc": "/static/images/2016/12/israel/misc/thumbs/P1150075.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/misc/mines.JPG", "title": "I too like to live dangerously\n", "msrc": "/static/images/2016/12/israel/misc/thumbs/mines.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/misc/P1140788.JPG", "title": "Another kind of watch face\n", "msrc": "/static/images/2016/12/israel/misc/thumbs/P1140788.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/misc/P1150565.JPG", "title": "Funny statues in Joppa\n", "msrc": "/static/images/2016/12/israel/misc/thumbs/P1150565.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/misc/rolladin.jpg", "title": "Rolladins :X:X\n", "msrc": "/static/images/2016/12/israel/misc/thumbs/rolladin.jpg", "w": 1000, "h": 800}]</script> </div> <p>Underneath the Western Wall there are several layers of history. The first layer is what the Ottomans built there. They actually raised the whole city, so that access to the Temple Mount would be easier. Under that is what Herod did, who expanded the top of mountain, so that he could build a bigger temple. Under that are remnants from David's city. And you just look at all those 500 tonne stones and the 533 m long tunnel, built by Hezekiah, carved out of stone, and wonder how on Earth did they ever do that, without all the modern equipment that we have today. </p> <div class="gallery clearfix" style="max-width:600px"> <img title="Warning sign when entering Betlehem " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="Modern Statue in Betlehem, with an Internet address " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/12/israel/betlehem/betlehem.JPG", "title": "Warning sign when entering Betlehem\n", "msrc": "/static/images/2016/12/israel/betlehem/thumbs/betlehem.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/12/israel/betlehem/P1150552.JPG", "title": "Modern Statue in Betlehem, with an Internet address\n", "msrc": "/static/images/2016/12/israel/betlehem/thumbs/P1150552.JPG", "w": 1000, "h": 800}]</script> </div> <p>We also went to Betlehem, which is in the West Bank, under Arab control. It has several "scary" warnings on entry, but it doesn't have too much to see unfortunately.</p> <p><img alt="Tel Aviv beach" src="" width="100%" style="max-width:600px"/></p> <p>On our last day we went to Joppa and Tel Aviv, where we spent the day on the beach and then we said sad goodbyes to each other :(</p> <p><img alt="Simon the Tanner's house" src="" width="100%" style="max-width:600px"/></p> <p>I really miss the NYC crew (and the people from Portland and Seattle)! It was a really blessed, fun time together and I hope I can see them again soon!</p> Thu, 22 Dec 2016 21:00:00 GMT,2016-12-22:/2016/12/22/shalom-from-israel Noh hai la vot! <p><img alt="Me in a t-shirt with Che Olos" src="" width="100%" style="max-width:600px"/> <em>On Sunday there are parliamentary elections in Romania, so I'm doing my civic duty of encouraging people to go and vote.</em></p> <p>După cum probabil ați auzit, mâine, 11 decembrie, sunt alegeri pentru deputați și senatori. Eu o să merg mâine la vot în Berna, cum am fost și acum doi ani, la alegerile prezidențiale. Și vă rog și pe voi să mergeți să votați. </p> <p>Ieșiți la vot, pentru că încet, încet, parcă lucrurile în România se schimbă. Și până acuma toată lumea știa că se fac mișmașuri peste tot, dar în ultimii doi ani și DNA a aflat și a și arestat oameni pentru aceasta. Deci, se poate schimbare. </p> <p>Votează, ca să poată să continue Cioloș ce a început. Dacă într-un an a reușit următoarele:</p> <ul> <li>să reducă o parte din birocrația existentă</li> <li>să înființeze concursul pentru directorii de școli</li> <li>a crescut absorbția de fonduri europene de la 56% la 78% (ceea ce înseamnă vreo 3 miliarde de euro)</li> <li>a creat programul <a href="">Gov ITHUB</a>, care a pus online o mulțime de date și a crescut transparența statului</li> <li><a href="">etc.</a></li> </ul> <p>Atunci oare în 4 ani ce ar mai putea face? Mai ales dacă ar avea și suportul unei majorități parlamentare. </p> <p>Votează, ca să nu mori tu sau copilul tău într-un spital din România. Ca să nu scape Președintele Comisiei de Malpraxis pe ortopedie pediatrică, care a nenorocit zeci de copii cu operațiile lui experimentale și neaprobate. Citește articolul scris de <a href="">Casa Jurnalistului</a>, până la capăt! Chiar vrei să scape tipul ăsta? Sau vrei să te opereze într-o zi un profesor care nu dă niciodată pe la cursuri și nu știe să se spele pe mâini cum trebuie <a href="">înainte de operație</a>? DNA are acuma putere și e pe val, de la toate arestările pe care le-a făcut deja. Dacă iese PSD la putere, pot să distrugă tot, și majoritatea politicienilor corupți sigur vor scăpa, dar poate și alți doctori ca aceștia.</p> <p>Votează, pentru că PSD-ul are un număr relativ constant de oameni care îi votează. Dacă merg mai mulți la vot, procentajul obținut de PSD va fi mai mic. Așa că votează, pentru că votul tău chiar contează!</p> <p>Și, pentru cititorii mei creștini, mai am un argument. În 1 Timotei 2 scrie: „Înainte de toate, te îndemn să faci cereri, rugăciuni, mijlociri şi mulţumiri pentru toţi oamenii, pentru împăraţi şi pentru toţi cei ce sunt în poziţii înalte, ca să putem duce o viaţă paşnică şi liniştită, cu toată evlavia şi demnitatea.”. Deci să te rogi pentru Cioloș, Johannis, Dragnea, cine or fi conducătorii. Iar în Iacov 2 zice: „ Dacă un frate sau o soră sunt goi şi lipsiţi de hrana zilnică, iar unul dintre voi le spune: „Duceţi-vă în pace, încălziţi-vă şi săturaţi-vă!“, însă nu le dă cele necesare trupului, ce folos?”. Deci nu doar să te rogi, ci și să faci ce poți. Cum România e o democrație, poți să mergi să votezi. Așa că du-te și votează!</p> Fri, 09 Dec 2016 22:50:00 GMT,2016-12-09:/2016/12/09/noh-hai-la-vot Going places... <p><img alt="Old view" src="" width="100%" style="max-width:600px"/> ...but not too far. </p> <p>Last month I exchanged the view that can be seen in the above image, for this one:</p> <p><img alt="New view" src="" width="100%" style="max-width:600px"/></p> <p>I moved from Langnau am Albis, where I have lived for two years, to Wiedikon, a district in Zürich. The old place has been officially the place where I've lived the second most in my life :| I'll miss it, I had lots of good memories there.</p> <p>But I got bored of the long commute (half an hour by train), so I moved to a place 8 minutes walking from the office. And the week after I signed the contract, I found out that my team is moving to an office 20 minutes away on foot :)) But it's still fine, I'm in the city, there's a lot more stuff around me, while I still live on a really quiet street. </p> <p>The new apartment is smaller, so I will have to adopt a bit of a more minimalist approach and get rid of some things. I'm looking forward to living here (once I get rid of all the boxes and put everything in it's place) and to entertaining more guests here (hopefully I'll have more than in the other place).</p> Sun, 13 Nov 2016 16:57:00 GMT,2016-11-13:/2016/11/13/going-places Maltalavista <figure> <p><img alt="Malta" src="" width="100%" style="max-width:600px"/> <figcaption>View from the hotel</figcaption></p> </figure> <p>Last week I was in Malta, on an offsite with the new (extended) team. It was possibly even better than in <a href="">Nice</a>. </p> <p>Because I switched to this team "late", I couldn't find flights together with the rest of the team, so I went a day early, but I stayed at the same hotel. Several other people also came early, including the admins who organized it, so I wasn't bored there. Also, turns out that befriending the admins is quite useful! And they are super nice as well!</p> <figure> <p><img alt="Boat rides" src="" width="100%" style="max-width:600px"/> <figcaption>Why ride a boat when you can ride a banana?</figcaption></p> </figure> <p>It was hot in Malta. During the day it went up to 28 degrees. It's nice to be able to complain about hot weather in October. It warms up my bones really well. </p> <p><img alt="Google ad" src="" width="100%" style="max-width:600px"/></p> <p>There was a very interesting ad close to the hotel were everyone was saying. There were lots of debates whether it was targeted at us or if it was just a generic ad. But it was a really clever one for sure and next time I'll go to Malta I will call eCabs!</p> <p>Malta is an island, so it's surrounded by sea. And because it was really warm, you could go swimming. There was a beach close to our hotel. It wasn't that great, the sand was quite coarse, but it was a beach. So I swam for the first time in my life in the sea! Those swimming lessons I've been taking for the last one year have finally been paying off! \:D/</p> <p><img alt="Beach" src="" width="100%" style="max-width:600px"/></p> <p>The next day I did something even more crazy. Angela and Simo, two colleagues of mine, wanted to go <a href="">stand-up paddling</a> and I allowed myself to be fooled into joining them. It will be fun they said, go standup paddling they said. Bad, but completely predictable news: I fell into the water more times than I can count. Good news: I didn't panic and I always managed to recover on my own. The swimming lessons are really paying off! And it was fun in the end. So thanks Angela for showing me how to do SUP! But I was completely exhausted and I had several bruises on me from falling on the board. </p> <p>During the free time on the first day we went to play laser tag. Again, for the first time in my life. This was really fun as well! In one round I came out the 4th or 5th, out of 18-19 people! \:D/ I should really do this more often! Also, I should go to do paintball as well. </p> <iframe width="560" height="315" src="" frameborder="0" allowfullscreen class="youtube"></iframe> <p>For dinner, we went to an old mill to have traditional Maltese food. They also showed us some folk Maltese dances and I was surprised to see that some of them have moves similar to Hungarian folk dances! The best part was when they invited some of my colleagues to join in the dances and spin around. Some of them knew what they were doing, others were... clueless :)))</p> <p><img alt="Old mill" src="" width="100%" style="max-width:600px"/></p> <p>On the second day, we went by speedboat to the island of Gozo. The experience was like on a lowrider, except with water splashing on you. Even though I was sitting in the middle, I still managed to get a large part of a wave on me, from all the bouncing around. </p> <figure> <p><img alt="Speed boat racing" src="" width="100%" style="max-width:600px"/> <figcaption>Speedboat racing</figcaption></p> </figure> <p>On Gozo, we had to do a treasure hunt in a jeep. We were in teams of 5, given a list of instructions and we had to look for clues, take pictures and in general have fun. It was a quite old jeep, the roads were quite bad, the streets were narrow and I had the impression that I was Indiana Jones looking for lost treasures and I was missing only the whip and the wide brimmed hat. Extra fun because GPS and Malta are not good friends, so we took the wrong turn several times. It didn't happen to my team, but another team went on a very narrow one way street, from where it was quite difficult to get out! </p> <div class="gallery clearfix" style="max-width:600px"> <img title="St. Joseph Parish Church in Qala. " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="Caves in Gozo. " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="The beautiful city of Mgarr. " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/10/malta/gozo/IMG_2010.jpg", "title": "St. Joseph Parish Church in Qala.\n", "msrc": "/static/images/2016/10/malta/gozo/thumbs/IMG_2010.jpg", "w": 1000, "h": 800}, {"src": "/static/images/2016/10/malta/gozo/IMG_2001.jpg", "title": "Caves in Gozo.\n", "msrc": "/static/images/2016/10/malta/gozo/thumbs/IMG_2001.jpg", "w": 1000, "h": 800}, {"src": "/static/images/2016/10/malta/gozo/IMG_2004.jpg", "title": "The beautiful city of Mgarr.\n", "msrc": "/static/images/2016/10/malta/gozo/thumbs/IMG_2004.jpg", "w": 1000, "h": 800}, {"src": "/static/images/2016/10/malta/gozo/IMG_2015.jpg", "title": "", "msrc": "/static/images/2016/10/malta/gozo/thumbs/IMG_2015.jpg", "w": 1000, "h": 800}, {"src": "/static/images/2016/10/malta/gozo/IMG_2029.jpg", "title": "Really nice water.\n", "msrc": "/static/images/2016/10/malta/gozo/thumbs/IMG_2029.jpg", "w": 1000, "h": 800}, {"src": "/static/images/2016/10/malta/gozo/IMG_2033.jpg", "title": "Salt quarry.\n", "msrc": "/static/images/2016/10/malta/gozo/thumbs/IMG_2033.jpg", "w": 1000, "h": 800}]</script> </div> <p>We did our best to find all the clues, until the point where we got to a beach. Pretty much all the teams decided to take a shorter or longer break there and just go for a nice swim and enjoy the red sands of Ramla beach. </p> <p>The next pit stop was getting lunch. Our team favored our bellies more than winning (the winning team didn't). Everyone was astonished by how cheap food is in Malta! You could get two huuuge ice cream globes for 3 euros!! And a slice (of admittedly meh) pizza for 2.5 euros! Yes, I know I come from Zurich, but still!</p> <p>On the long bus rides and at night we played a lot more of the game I learned in Nice: We didn't playtest this at all. This time I brought the game with me and it turned out to be quite popular. We also played a bit of Werewolves, with the Eros extension. And I found out as I was burning on the stake that the two Nicks were lovers and one of them betrayed me!</p> <p>As we were going to dinner on the second night, right in front of our hotel, two cars had an accident and they refused to move until the police came. Because the street was one way and narrow, the bus couldn't go any other way, so we had to wait there for about one hour. The sales of nearby shops skyrocketed, as a lot of hungry Googlers went there to get something to survive until we get to dinner. </p> <div class="gallery clearfix" style="max-width:600px"> <img title="Hilly streets, that remind me of San Francisco. " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="View from the Saluting Battery. " src="" style="display:block" width="100%" style="max-width:600px"/> <img title="I guess this Aladin is a more honest man. " src="" style="display:block" width="100%" style="max-width:600px"/> <script type="application/json">[{"src": "/static/images/2016/10/malta/valletta/P1140651.JPG", "title": "Hilly streets, that remind me of San Francisco.\n", "msrc": "/static/images/2016/10/malta/valletta/thumbs/P1140651.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/10/malta/valletta/P1140647.JPG", "title": "View from the Saluting Battery.\n", "msrc": "/static/images/2016/10/malta/valletta/thumbs/P1140647.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/10/malta/valletta/P1140667.JPG", "title": "I guess this Aladin is a more honest man. \n", "msrc": "/static/images/2016/10/malta/valletta/thumbs/P1140667.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/10/malta/valletta/P1140665.JPG", "title": "Royal guard.\n", "msrc": "/static/images/2016/10/malta/valletta/thumbs/P1140665.JPG", "w": 1000, "h": 800}, {"src": "/static/images/2016/10/malta/valletta/P1140671.JPG", "title": "Saint Elmo Breakwater (I'm Elmo and I know it \\:D/)\n", "msrc": "/static/images/2016/10/malta/valletta/thumbs/P1140671.JPG", "w": 1000, "h": 800}]</script> </div> <p>On the last day, we went on a treasure hunt on foot in Valletta (the capital of Malta). This one included several challenges such as taking pictures with a stranger, giving a stranger a hug, spelling out letters with our bodies, asking someone for a piece of their food and proposing to someone. Because it was much hotter (and it was after some of my colleagues were out partying all night), our enthusiasm was much lower, so we did even fewer of the required items. </p> <p>We ended the day on chilling in the harbor, too drained to be able to do anything. Close to it was a building which we discovered was just a facade. It had a nice, old looking exterior, but in the inside there was just empty space (not even walls, just the sky above our head). </p> <figure> <p><img alt="Facade building" src="" width="100%" style="max-width:600px"/> <figcaption>The inside of the facade building</figcaption></p> </figure> <p>At the airport, I had several epiphanies. First, KFC in Malta is just awful!!!!! Horrible! Ugh. I couldn't even finish a 5 crispy strips menu! And they didn't have the amazing Glenn sauce! As the Swiss say, schrecklich! The other one was the question "How does checkin work?". Half my colleagues managed to do online checkin, but some only after repeatedly mashing the checkin button, the other half, including me, had to checking at the airport. Complete mystery how airline companies systems work. </p> <figure> <p><img alt="Cat feeding station" src="" width="100%" style="max-width:600px"/> <figcaption>Cats too should have a place to enjoy a coffee, right?</figcaption></p> </figure> <p>Two and a half hours later, the plane half full with Googlers landed in Zurich and our awesome offsite in Malta ended! It was a really good time and a nice relaxation!</p> Mon, 24 Oct 2016 22:27:00 GMT,2016-10-24:/2016/10/24/maltalavista Data and Goliath <p><img alt="Data and Goliath" src="" width="100%" style="max-width:600px"/></p> <p>Bruce Schneier is a well known American security researcher, who has written several books about this topic. Data and Goliath is his latest book about it. I bought it last year, but I only got around to reading it last month (one more win for the reading goal for the year \:D/). First observation: while the book is thick, with 383 pages, a third of it are notes, so it's not that long actually. </p> <p>While I've heard about various privacy issues and about the mass surveillance revealed by Edward Snowden, I never really did anything about it. I had an adblocker installed, but that was just because I was annoyed by ads and they slowed down browsing the Internet, but nothing else. This book was a coherent presentation of what both corporations and governments do, what effects it has on us, and why it's really, really, really, really bad. </p> <p>I don't want to go talk too much about what the book says about existing surveillance and what is going, except to call out the fact that the existing large scale governmental tracking is not effective against terrorists. The haystack is too big and the needles look more like twigs, so it doesn't help at all. Good old investigation work is what catches the bad guys. Mass surveillance is useful for tracking people who protest (legitimately) against the government. Also, corporate surveillance comes in many subtle forms and is used to build up big profiles about people, which are then often sold by data brokers, or hacked. Again, not really worth the benefits in most cases. </p> <p>So what can the average Joe like me do? There are several things, ranging from political to technical. First off, lobby, propose, discuss, raise awareness, vote about this. If enough people know about this and are worried about it, democracy can do it's thing. Hopefully it's not 1984 already. </p> <p>On the more technical side, there are some simple solutions. Use <a href="">HTTPS Everywhere</a>, which forces your browser to use encrypted connections whenever possible. It's a first, simple step towards avoiding dragnet surveillance. If it's encrypted, it can't be read in a straightforward way. Use either <a href="">Ghostery</a>, <a href="">Privacy Badger</a>(I use this one) or <a href="">Disconnect</a>. These extensions do as much as possible to disable tracking. Most importantly, they disable the automatic loading of social network share buttons, which would automatically report back what pages you browse, even if you don't click on them. </p> <p>Now, on to more complicated ones. You can do obfuscation, which means doing random stuff do create bogus data on your profile. Things like searching for TV models, even though you don't want to buy one, clicking on random search results, adding as friends people you don't know, creating fake profiles, interchanging store loyalty cards with friends, not giving out your real information when asked for (be careful about who's asking and if you can give out fake information) and so on. And, if you wanna go one step further, use the Tor browser. It's a pain to use, because many things are blocked there, it's quite slow, but it's definitely a good option. I won't be using it all the time, but sometimes I will. If you wanna go extreme, you can even run your own <a href="">Tor nodes</a>. </p> <p>That's it folks! Be safe and keep an eye out for surveillance!</p> Sun, 25 Sep 2016 21:37:00 GMT,2016-09-25:/2016/09/25/data-and-goliath Good bye, Alida <p><img alt="Alida" src="" width="100%" style="max-width:600px"/></p> <p>I’ll miss your funny quips. I’ll miss the long discussions we used to have about about the craziest topics (like the differences in mentality between people who are interested in the humanities versus the sciences). I’ll miss going to eat greasy, yummy food with you (Chez Papa was reeaaallly good. And just as unhealthy). I’ll miss your encouragements. Even though you had leukemia and had been through an awful lot of suffering, you still had the energy to lift others up and give them advice. </p> <p>You were a brilliant girl, who turned many heads and then put them in their proper place. In just 22 years of life, you’ve achieved many things. Your lot in the last three years hasn’t been an easy one, but you made it, and now you’ve earned your rest. You are with your Lord and you won’t suffer any more. No more neuropathies, no more headaches, no more bone marrow extractions, just the blissful presence of Jesus!</p> <p>The rest of us who are still here, we’ll miss you and we’ll remember you.</p> <p>Good bye, Alida dear!</p> Sun, 18 Sep 2016 23:07:00 GMT,2016-09-18:/2016/09/18/good-bye-alida Searching for something? <p><em>This post is "cu dedicatie pentru Ciprian de la Bistrita", who has asked for a search feature for some time now</em></p> <p>I didn't have a search on my blog for quite some time, because it's a static website, without any dynamic backend (except for comments, but those are well isolated, on a subdomain). But Javascript and the browsers are getting more and more features every day, so it's now possible to do all of this clientside. You just have to go to the <a href="">search page</a> (also linked in the menu).</p> <p>I had three options: </p> <ul> <li><a href="">Acrylamid</a> has a builtin feature that builds up at compilation some compressed suffix tries from your posts and allows you to search there. However, it's pretty raw, in the sense that it doesn't do query expansion, it doesn't support multiple terms, it doesn't do stemming and so on. Also, I just found out the Acrylamid is no longer maintained, so in a time frame of one year I will be moving away from it, so I didn't want to tie myself to it with this too.</li> <li><a href="">lunr.js</a> This is a purely in browser solution. It's like Solr, but smaller and less bright (Solr is one of the better known search engines). It does tokenization, stemming and stop word filtering. Then it builds up an inverted index, which allows for efficient querying, and bam, you've got a client side search.</li> <li><a href="">elasticlunr.js</a> This is an extension/copy/improvement over lunr.js, which claims to be faster, but is also less popular, so I decided to skip it for now. </li> </ul> <p>The total size of my posts is about 1.5Mb. If I build the inverted index offline, it's about 9Mb. Because I didn't want to send that over the network on loading the search page, I decided to send only a JSON document containing all the posts and then create the index on the client side. This was quite simple:</p> <pre class="highlight"><code class="language-python">class LunrSearch(View): def generate(self, conf, env, request): if not raise StopIteration() docs = [] for i, entry in enumerate(request['entrylist']): docs.append({&quot;url&quot;: entry.permalink, &quot;date&quot;:' '), &quot;tags&quot;: entry.tags, &quot;title&quot;: entry.title, &quot;content&quot;: entry.content}) yield (io.StringIO(json.dumps(docs, ensure_ascii=False)), joinurl(conf['output_dir'], self.path))</code></pre> <p>This view is called for a route in my configuration and dumps there all the posts, in JSON format. </p> <p>The client side is more interesting.</p> <pre class="highlight"><code class="language-html">&lt;input id=&quot;search&quot;/&gt; &lt;ul id='results'&gt;&lt;/ul&gt; &lt;script src=&quot;/static/js/lunr.min.js&quot;&gt;&lt;/script&gt; &lt;script&gt; 'use strict'; var index, docs, tasks; var input = document.getElementById('search'); var resultdiv = document.getElementById('results');</code></pre> <p>We start by defining an input where we can type and a list where the results will be shown. </p> <pre class="highlight"><code class="language-javascript">document.addEventListener(&quot;DOMContentLoaded&quot;, function(event) { // Set up search var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status === 200) { parseResults(JSON.parse(xhr.responseText)); } else { resultdiv.innerHTML = &quot;&lt;li&gt;Error loading search index! \ Please tell me about this! :(&lt;/li&gt;&quot;; } } };;GET&quot;, '/static/js/search.json', true); xhr.send(); });</code></pre> <p>Because I don't use jQuery, I had to load the JSON file with good ol' XMLHttpRequest (I can't wait for the <a href="">fetch API</a> to become more mainstream!), and then I call a function to parse the results (or show an error if that's the case). This function doesn't do much, except it initializes the index, schedules the indexing and adds a listener for the input tag to process user input. The index is initialized with the fields that we will want to search on and what should be the reference of a document. We boost the importance of the title and tags fields. </p> <pre class="highlight"><code class="language-javascript">function parseResults(response) { docs = response; tasks = response.slice(); // Make copy of document list // Create index index = lunr(function(){ // Boost increases the importance of words found in this field this.field('content'); this.field('url'); this.field('title', 5); this.field('tags', 10); this.field('date'); // the id this.ref('id'); }); // Schedule background indexing scheduleIndexing(); // Add search handler document.getElementById('search').addEventListener(&quot;input&quot;, search) };</code></pre> <p>Indexing takes about 2-4 seconds, so if we were to do it here, it would block the UI thread, resulting in a janky UI. So, we use the shiny new API of requestIdleCallback, which allows us to do it in the background, during idle moments. Because this is also not well supported yet (<em>cough</em>Safari<em>cough</em>), I give an alternative of just doing the indexing in the main thread, by mocking the API. To add a document to the index, you just have to call the add function with a JSON object representing the document. </p> <pre class="highlight"><code class="language-javascript">function scheduleIndexing() { if ('requestIdleCallback' in window) { requestIdleCallback(indexInBackground); } else { // Mock the API and do the indexing in the main thread indexInBackground({timeRemaining: function() { return 1}}); } function indexInBackground(deadline) { // Run next task if possible while (deadline.timeRemaining() &gt; 0 &amp;&amp; tasks.length &gt; 0) { var entry = tasks.pop(); index.add({ url: entry.url, date:, title: entry.title, content: entry.content, tags: entry.tags, id: tasks.length }); } // Schedule further tasks if necessary if (tasks.length &gt; 0) { requestIdleCallback(indexInBackground); } else { if (document.getElementById('search').value != '') { search(); } } } }</code></pre> <p>This requestIdleCallback API works by taking a function which receives a deadline object, which tells you how much more time you have left. You are supposed to return before the time expires. Because of this, it's good only for tasks that can be split into small chunks. Indexing is a perfect example: indexing one document takes very little, on the order of 5 ms, and when we detect we ran out of time, we stop and request another time slot. When the browser "takes a break", it will schedule us again. For more details on the API, read <a href="">this post</a>. We do this as long as there are tasks left. When we finished the indexing, we check to see if the user has written anything in the checkbox and trigger a search if that's the case.</p> <pre class="highlight"><code class="language-javascript">function search() { var query = input.value; if (query.trim().length &gt;= 3) { var result =; // Search for it // Output it if (result.length === 0) { resultdiv.innerHTML = &quot;&lt;li&gt;No result found! :(&lt;/li&gt;&quot;; } else { resultdiv.innerHTML = ''; for (var i=0; i &lt; result.length; i++) { var ref = result[i].ref; var doc = docs[ref]; var li = document.createElement(&quot;li&quot;); li.innerHTML = '&lt;a href=&quot;' + doc.url + '&quot;&gt;' + doc.title + '&lt;/a&gt;'; resultdiv.appendChild(li); if (i &gt; 30) { break; } } } } else { resultdiv.innerHTML = &quot;&lt;li&gt;Query is too short.&lt;/li&gt;&quot;; } };</code></pre> <p>Searching is not too complicated. Too eliminate the case where there are too many results to be useful, we search only when there are at least three letters in the input form. We then loop over the results and add to the emptied list a link to their URL, with a title. We also limit the list to 30 items. Pagination could be added, but I don't think it's that useful to look at the long tail. lunr.js returns results sorted by score, so it's fine to cut off like this. </p> <p>Some posts that have inspired me:</p> <ul> <li></li> <li></li> </ul> Mon, 05 Sep 2016 23:19:00 GMT,2016-09-05:/2016/09/05/searching-for-something Two years at Google <p><img alt="Collage of last two years" src="" width="100%" style="max-width:600px"/></p> <p>A bit more than two years ago I was anxiously heading towards the reception of the Google Zurich office. I didn’t know what to expect, but I was very excited. One year ago, I was oncall, dying of heat in my home. Today, I am on my last oncall shift as an SRE, rejoicing that it’s not too hot and that I finally have some quiet time to clean out my bookmarks and my inbox. </p> <p>The last one year was very different from the previous one. The list of new experiences continued, but not all of them were positive. There was the weird realization that I might actually enjoy driving. There was the talk I gave at my university. There was the first relationship. There was the first time I set some quite ambitious goals and I managed to follow up on them. There was the first break up. There was the first orchestral concert I went to. There was the first depressive episode I had, along with a panic attack at work. There were limits discovered and pushed further than ever. There was me doing squats with 90 kg weights and running a 10k. There was me changing teams, so I could do machine learning and now I enjoy a lot more my work. There was me inviting some Swiss friends over for lunch and talking to them mostly in German for two hours. There was me reading a lot more Christian books and learning a lot more about God than before.</p> <p>Looking back, I would say that it was a year in which I grew up a lot. I went through what was the first really difficult time in my life and by God’s grace, I came out on the other side, still alive. I put under a question mark a lot of my faith and my belief. The conclusion was that most things are still true, that I still trust in God, I still want to walk in all His ways, I still love Him, I still want to follow Him with all my heart and with all my soul, to keep His commandments and statutes, for they are for my own good. There were things I no longer see the point of, things which I did just because that’s what I saw around me as I was growing up, but they are not as numerous. </p> <p>I step into the coming year with the same intention as last year, but a bit more wary of the fact that it will be hard and it will require constant abiding by the Lord to stay close to Him.</p> Sat, 03 Sep 2016 23:31:00 GMT,2016-09-03:/2016/09/03/two-years-at-google My desktop setup <p>It's been 5 years since I posted anything related to the kinds of tools and apps <a href="">I'm using</a>. It's also been a year and a half since I bashed Linux <a href="">last time</a>. While the more I use computers, the more I hate them (and not just in the way most people "don't like computer", but because I learn more and more why things are bad and just how truly awful they are), I've come to a fairly stable setup for my home desktops, with which I am fairly happy.</p> <p>As mentioned in my last Linux post, I've started using ArchLinux. It's fairly stable, except for when I try to upgrade the whole system once every 2-3 months. Invariably some packages are completely changed and don't clean up nicely after them. Luckily, Googling for the problem has so far always turned up a result fairly quickly. But on the other hand, I've always had the option to get the most recent version of all my programs, so that's nice. </p> <p><img alt="i3 Window Manager" src="" width="100%" style="max-width:600px"/></p> <p>I'm not using a desktop environment, instead I am using a tiling window manager, called <a href="">i3</a>. It took me a while to get used to it, it has some quirks, but it makes life much easier. </p> <p>I have it set up so that on the first workspace I have my terminal and on the second workspace I have Chrome. These two are fixed, and on the others I have whatever I need (which doesn't happen to often). At work I actually have a similar setup, except I have a separate workspace with Chrome for each project I'm working on.</p> <p>Having this fixed setup helps me know: I want to do stuff, I need to press "Win" (Meta) + 1. I want to browse stuff or search for something, I press "Win" + 2. Because of this I never get lost among a bazilion windows and I know where things are. </p> <p>You can also get a status bar that displays useful things like RAM usage, IP address, CPU temperature, CPU load, date and time and audio volume, by using i3status.</p> <p>I use the standard i3 configuration, with only a couple of changes: </p> <pre class="highlight"><code># To set a random background picture on each login. exec feh --recursive --randomize --bg-max ~/Pictures # To be able to lock my computer. Needs i3lock. bindsym Mod1+l exec i3lock # Forces Chrome and Terminal to be in the correct workspace, to not have # a border and to start on login. for_window [class=&quot;^google-chrome$&quot;] border none for_window [class=&quot;^gnome-terminal-server$&quot;] border none assign [class=&quot;^gnome-terminal-server$&quot;] 1 assign [class=&quot;^google-chrome$&quot;] 2 exec google-chrome-stable exec gnome-terminal # I had to Google this myself: power management. Go to standby after 300 # seconds, suspend after 600 and turn after 900. exec xset dpms 300 600 900 &amp; # Volume control. bind mod1+Up exec amixer sset 'Master' 5%+ bind mod1+Down exec amixer sset 'Master' 5%-</code></pre> <p><img alt="Tmux" src="" width="100%" style="max-width:600px"/></p> <p>For my terminal I use a terminal multiplexer called <a href="">tmux</a>. Tmux creates multiple terminal sessions inside a single terminal window and enables you to switch between them easily. You can have multiple tabs or split the terminal screen however you want.</p> <p>The "special sauce" of my tmux setup is that it's integrated with vim. I use the <a href="">vim-tmux-navigator</a> plugin so that I can use the same commands to navigate between vim splits and tmux panes. This means that I press CTRL-L and I go to the right, even if that is another vim split or another tmux pane. Again, this means uniformity in how I handle navigation, which means less thinking on how to do stuff, so I'm more free to think what I must do. At work I have some hacks that enable me to do the same for i3, so that I can use the same set of keys to move one to the left, but because I almost never have two different applications open on the same workspace, I don't really use it that much. </p> <p><img alt="fish" src="" width="100%" style="max-width:600px"/></p> <p>The last thing: <a href="">fish</a>. I use the fish shell because it's a modern thing. It's not encumbered by decades of legacy shell scripts. This does mean that occasionally stuff that I copy-paste from the Internet doesn't work out of the box, but that's probably a good thing, because it forces me to at least try to understand what I'm doing. One of the things that I love most about it is how it automatically recalls the last command you ran based on the prefix of what you typed. You don't even have to go press up to go into history, it continuously does that for you, showing a preview of what command fits. And it's dependent on which folder you are in, so when I start typing "a" in my blog's root folder, it shows me "acr_serve" (that's how I develop locally), while in my home folder it shows "apachectl" (to start an Apache server). </p> <p>Then of course, you can configure fish from a web browser, so you can see the colors you are setting. It has full 24 bit support. It has super smart completion system, which is integrated with git for example. When I type "git add <tab>" it completes only with files that are considered modified by git. It can also parse man pages to enable command line flag autocompletions. And of course, syntax is just much nicer than with bash or zsh. Much, much, much nicer. </p> <p>So there you go, my first post in which I'm not complaining horribly about Linux. I'm glad that I finally found an environment where I'm content and where I can be quite productive. If anyone has any more cool tools, please share them in the comments.</p> Mon, 29 Aug 2016 23:10:00 GMT,2016-08-29:/2016/08/29/my-desktop-setup How to make a selfie time-lapse video <p>Mostly for future self reference, but also in case somebody else wants to do something similar, I'll write down the steps I took to do my selfie time lapse <a href="">video</a>.</p> <p>First step: take daily pictures. I recommend about 0.3-0.5 seconds per picture in the slideshow and you want to have at least 30 seconds of video, so that means at least 60-90 photos. Pro-tip: do them in as similar way as possible every day. Especially the distance to the camera is important. You'll thank me soon enough.</p> <p>After you gathered all your pictures together, you want to align them. I did this in GIMP. You open the program and go to File &gt; "Open as Layers". You select your pictures and it will import them and create a separate layer for each one of them. </p> <p>You should disable the visibility off all layers except one, which is to be in the "correct" position (I chose one of the first ones for this). Then you go over each of the other layers, making them visible, but setting their opacity to about 50%. You select this second layer and you start moving it around with the arrow keys until it's well aligned. Then go to Layers &gt; "Layer to Image size", to make sure to crop what went outside of the borders of the image. You're done with this layer, so make it invisible and repeat the process with the other layers, until you have done all of them.</p> <p>I found that it's best to align based on the eyes. The iris is nice and round and there is a high contrast between the iris and the sclera so it's easy to tell when they are aligned.</p> <p>Remember when I told you to take all the pictures in as similar a way as possible? I made the mistake of not taking all the photos from the same distance from the camera, so in some cases I had to resize one of the layers first. This is the most annoying part, because you don't have real time preview. GIMP updates the on screen image only 1-2 seconds after you resize, so you can't smoothly drag until it's the correct size. Also, because the eyes move around when you resize, making it necessary to realign before you can retry to resize. </p> <p>Once all the images are aligned, take Lie Ryan's script from <a href="">here</a>, install it and run it. It will save all the layers as images. If you haven't done the step of cropping the layer to image size, now you will see that this plugin saves the whole layer, even if it's bigger than the image, so the alignment you did will be off. </p> <p>Time for an optional part. If you want to add some music in the background and if you have OCD about synchronization and you want the beat of the music and the changing of the images to be in sync, then you should somehow measure the BPM of the song (it helps if you have any musical talent at all). Divide the BPM by 60 to get the frame rate per second in the video. If the BPM is really fast (say over 100), than halve it and use that as the frame rate. This way, images will change only on every second beat. In my case, the BPM was 160, which was way too high, so I went with 80/60 = 1.33 as the frame rate. </p> <p>Time to move on to the next tool: ffmpeg, the Swiss army knife of movie making. It's super easy, you just run the following command in the folder where all the images are (hover over the arguments to see explanations for them):</p> <p>ffmpeg <span title="Overwrite output files. Useful when tinkering with other parameters so that you don't have to keep confirming that" class="tooltip"> -y </span> <span title="Input framerate, obtained as explained above" class="tooltip">-framerate 1.33</span> <span title="Use bash globbing for the input pattern" class="tooltip">-pattern_type glob</span> <span title="First input should be all the png files in this folder" class="tooltip">-i '*.png'</span> <span title="The offset for the sound should be this much" class="tooltip">-ss 12.9</span> <span title="The second input file, which in this case is the music" class="tooltip">-i cbqp.mp3</span> <span title="The audio codec" class="tooltip">-c:a aac</span> <span title="The video codec" class="tooltip">-vcodec libx264</span> <span title="Slow (so strong) compression" class="tooltip">-preset slow</span> <span title="Another compression parameter" class="tooltip">-crf 18</span> <span title="Output framerate. If this is not high enough, the changing of the images will slowly get out of phase" class="tooltip"> -r 30 </span> <span title="The video should be as long as the shortest input (otherwise the music will keep playing in a long, black scene" class="tooltip">-shortest</span> <span title="Name of the output file" class="tooltip">time-lapse.mp4</span> </p> <p>And voilà, you have a selfie time-lapse video. Upload to your favorite video sharing website and manically refresh the page to see the view counter go up (or not).</p> Mon, 01 Aug 2016 21:48:00 GMT,2016-08-01:/2016/08/01/how-to-make-a-selfie-time-lapse-video 50 Days of Roland <iframe width="420" height="315" src="" frameborder="0" allowfullscreen class="youtube"></iframe> <p>For a long time I wanted to do the kind of video where you take one photo every day and then you show make a slideshow of them, like <a href="">this one</a>. Today is the day where it finally happened, even if it contains only 50 days worth of data!</p> <p>The images are from the 1st of May until the 17th of July. I usually took two pictures every day, one in the morning and one in the evening. But I also travelled a lot, so I don't have photos from every single day.</p> <p>What gave me the incentive to finally do this project was that I wanted an easy way to track my mood, to see if it was finally getting better (yes, it got better) and I was too lazy to track it in an app, so I decided to use my face as a proxy for it.</p> <p>I did the alignment of the photos manually. It took only about 2 hours for 82 pictures. I had to do it manually because I wanted to make sure that the left eye is always in the same position, with the right eye being as close as possible. While I did use a tripod, sometimes I moved it, so I had to zoom in/out in the photos and other I had to rotate a bit.</p> <p>Two things stand out for me when looking at the time lapse:</p> <ul> <li>I have too many dark colored T-shirts, I should get more light ones. </li> <li>I need to do something with my hair, because there's a high unintended variance in the resulting styles (read: how I woke up that day). Any suggestions? The biggest problem is that I usually don't notice it until it's too late, for example until I have to run to catch the train.</li> </ul> Sun, 24 Jul 2016 00:48:00 GMT,2016-07-24:/2016/07/24/50-days-of-roland Evaluating goals <p>The first half of the year has passed, so it's time to see how I did on my goals that I had <a href="">set out</a> for it. Sorry the post is late, I was travelling for the last two weeks. </p> <p>I described using two techniques for helping achieve goals. One of them was precommitment, which I did in the form of announcing here on the blog. This seemed to not work too well for me, because some of my goals ended up being completely untouched. I'm not sure why, but I think that it's because I made it through the blog, it increases the psychological distance between me and the commitments, so I don't feel as much of a connection to them. Maybe I'll start to print some t-shirts announcing my goals :)))</p> <p>The other technique was tracking incremental progress and breaking goals down into manageable parts. This worked remarkably well, except in one case, and in two cases I tracked the wrong thing. In all other cases, it helped a lot with staying on track. But, I did pay Beeminder several times for failing on occasionally.</p> <p>For each goal, I will say what I achieved and I will give myself a score. A score of 1.0 is not necessary on all of them, because it would mean I wasn't aiming high enough. I will also give some notes on how achieving (or not) felt.</p> <dl> <dt>Losing weight</dt> <dd>My lowest weight was 81.1kg, at the beginning of May. Then I went to Paris, then to Romania and I was in the US for the last two weeks, so unfortunately I have reverted most of my progress. Still, that's the slimmest I've been in the last two years (at least) and several people have noted that I have lost weight. I didn't get to 77 kg, but I made it 60% of the way, so the score is 0.6. As a side note, after reducing food portions for several months, my sensation of satiety changed completely and it's easier to resist food now. But for me, using Beeminder was not a good choice. Because I travel so often, I often come home with an extra kilogram or two, which makes me go into the red zone, even though I lose it quickly afterwards, which made me skip some measurements because I "knew" they were "invalid".</dd> <dt>Doubling my bench press</dt> <dd>I managed to get to 57.5 kg. It's close to the 60kg goal that I revised in April, so the score is 0.9. This was really fun. I am the strongest I have ever been and now I can do pull ups without a problem. I haven't tested yet how many can I do, but compared to 0 a year ago, it feels awesome. </dd> <dt>Run a 10k Race in April</dt> <dd>So, about this one... I was signed up to run at Zurich City Run on the 24th of April. But on that day it was 3 degrees outside and snowing. And not just some light snowing, but pretty serious. So, because I value my health more than running, I skipped it. But, I did run several times 10k, both in preparation for the race and after it. My best time was 1:02:29. Because I did manage to run, even if not part of the official race, I will still score myself with a 1.0. Running was interesting too, and it required pushing myself in a completely different way than doing the bench presses. </dd> <dt>Reading</dt> <dd>I have read 13 books, while I should be at 14 to meet my goal by the end of the year. This goal is one where I used Beeminder in the wrong way: I set it to track number of books read, but it doesn't work well because some books are thick, while others are thin, so the amount you have to do every day is very uneven. The recommendation is to instead set a goal of how much to read every day, but I found that just having a goal to read X by the end of the year was enough to always keep me reading. Score: 0.9</dd> <dt>Playing the piano</dt> <dd>I have been doing this without problems. Beeminder really shines at this goal and is the perfect thing for tracking it. I have the goal set per week, but I can do daily measurements. Score: 1.0.</dd> <dt>Blogging</dt> <dd>21 blog posts written until the end of June. This one also went well. I had only 3 blog posts where I really had to scratch my head what I should write, but I feel that they still came out ok, without a feeling that they are forced. Score: 1.0.</dd> <dt>Photography</dt> <dd>So... this is the one that didn't happen at all. Like, nothing. Nada. Zilch. I did take more pictures, I did read some more about photography, I did play a lot more with manual mode, but I didn't upload any of them anywhere, and that's the most important step. So unfortunately, the score is 0.0. :(</dd> <dt>Focusing</dt> <dd>This one is interesting. At the midpoint I had done nothing for it, but then I set up a Pomodoro app on my phone and Beeminder to track it and I managed to turn it around. I have been tracking having 6 intervals of 20 minutes a day, which are uninterrupted. Sometimes at work it's hard to accomplish it, because colleagues would ask me stuff, but it mostly worked out. I have recorded 218 such sessions, which comes out at 72 hours, in 76 days. The goal said I should do it on 80% of the days, so this has a score of 1.0. Yay for Beeminder and Pomodoro.</dd> <dt>Machine Learning</dt> <dd>I did half of the homeworks. The next one is due next week. I'll finish on time (for the course), but not for my goal. Score: 0.5.</dd> <dt>Bible reading</dt> <dd>Beeminder tells me that I've read 282 chapters from the Bible in 94 days (since the midway checkup). This comes out to an average of 3 chapters a day, which is lower than it should be, but to be honest, I have travelled at least 4 weeks during this time. Still, the score is only 0.8.</dd> <dt>Sharing the gospel</dt> <dd>So... this one kinda died off. I shared two more times, but that's it. Score: 0.3 :(</dd> <dt>Memorizing Bible verses</dt> <dd>I don't know what I was thinking when I set this goal. 1.68 verses memorized every day??? Anyway, this failed too. I did manage to learn 2 verses though, but it fails veeeeery short of where I should be. Score: 0.006</dd> <dt>Practicing German</dt> <dd>For some reason, I forgot to write down this goal in January, even though I have been keeping it ever since. The idea was to do at least one lesson with Duolingo every day. I found that too easy, so in April I increased it to two lessons. I have done 284 such lessons in 190 days, which means an average of 1.49 lessons per day. Sounds about right. Score: 1.0</dd> </dl> <p>My average score is 0.69. That sounds... pretty good. Certainly much better than what I have managed to achieve in the past. I could have done better, but there's always another time. </p> <p>However, I think for now I will take a break from most of my goals, to be able to relax and rest a bit. The last half a year has been quite difficult and exhausting for me and sometimes I felt like I didn't have the energy or the motivation to do anything. So, I will try to take it easier for the next 2-3 months and start again afterwards.</p> Wed, 13 Jul 2016 09:14:00 GMT,2016-07-13:/2016/07/13/evaluating-goals The Rise and Fall of the Yahoo Messenger Empire <p><img alt="Yahoo Messenger logo" src="/static/images/2016/06/ym_logo.png" style="box-shadow:none"></p> <p>Back in my days, in Romania, Yahoo Messenger was "the thing" to be on. Everyone had it. It was the most popular Instant Messaging platform by far, for almost ten years, while MSN, AOL or ICQ were pretty much unheard of.</p> <p>Sometimes, people would send messages saying something among the lines: "Yahoo Messenger is closing, unless enough people send this message to all their friends, to prove that it's still popular". Well, now this is almost true, but only the first part. Yahoo Messenger as I have grown up to know it, will cease to work starting August. It will still live in a weird web application, but it's not the same thing. </p> <p><img alt="Yahoo Messenger emoticons" src="" width="100%" style="max-width:600px"/></p> <p>It won't be the place with the best emoticons ever. I don't understand todays emojis. Maybe I'm too old for them, but for me this will always be the hug symbol &gt;:D&lt;, not 🤗. Luckily, some apps still understand them and convert them (for example Hangouts). Then you had Audibles, the original stickers. You had video calls, before it was cool. You had the option to "Show my webcam", the original Periscope. Oh, the kind of hilarious statuses some people would have. All this before Facebook and their wall. Buzzing people, to draw their attention (or to annoy them). Photo sharing, right there in the application. Built in games, like pool. I don't think there is any modern IM app that allows you to do that anymore. </p> <p>But now it's over. Now we have to resort to things like Facebook Messenger, which data mines your conversations like there is no tomorrow. Whatsapp, which is kinda my favorite, but which has the annoying limitation of being tied to a phone number. Telegram, would be nice, except nobody uses it. Hangouts, again, nobody uses it, and it's also unreliable as heck (I miss a lot of notifications on my various platforms). There's Allo, which is not available yet. There's Skype, which likes to spam you when you log into another device. </p> <p>It's sad to see this regression in IM programs. Yahoo Messenger had one "flaw", that it didn't support being logged in from multiple accounts, but I believe that could have been easily fixed. But for some reason, most people moved to Facebook, because that's where all the action was, so it was easier to just chat there. </p> <p>And now it's gone. Below is a graph of a part of my chats over Yahoo Messenger. I have data only from the last 9 years, not before that, so I'm missing about 4-5 years. It peaked in June 2012, when I was finishing the first year of university, and then it declined quickly, so that by spring 2013 I was barely using it anymore. The last time I used was in January 2014.</p> <iframe width="800" height="450" frameborder="0" scrolling="no" src=""></iframe> <p>Good bye, dear Yahoo Messenger. It was nice using you!</p> Sun, 19 Jun 2016 20:36:00 GMT,2016-06-19:/2016/06/19/the-rise-and-fall-of-the-yahoo-messenger-empire Nice time in Nice <p><img alt="View from the Club" src="" width="100%" style="max-width:600px"/></p> <p>Because I had such a good time in Paris <a href="">last month</a>, I just had to go again to France, this time to the French Riviera, to hear the beautiful French language again :X:X. Or maybe it was just an SRE offsite. Who knows?</p> <p>It was really exciting to go there. It reminded me of the various <a href="">physics</a> and <a href="">programming</a> competitions that I went to in high school. Going on a plane where more then half the people were like minded nerds and spending some days talking to most exotic geeky stuff? Sounds like great fun!</p> <p><img alt="View from our room" src="" width="100%" style="max-width:600px"/></p> <p>We stayed at Club Med Opio en Provence, which is half an hour's drive away from the airport. After going to our rooms, we went straight for a huge lunch, which was buffet style. We had to burn all those calories, so we went for a quick swim. The water was right at the limit of being cold, so when people went in, they inevitably cringed, but after swimming around for a while, they were fine. We tried playing with a ball and we soon realized that playing water polo must be really hard.</p> <iframe width="560" height="315" src="" frameborder="0" allowfullscreen class="youtube"></iframe> <p>Next up: archery lessons. I shot with a bow before, somewhere in Hungary, and probably I activated some genetic memories too, from my Hun ancestors, because I did pretty well at this. </p> <p><img alt="Guillaume force controlling a Petanque ball" src="" width="100%" style="max-width:600px"/></p> <p>So that nobody can complain that they miss the Microkitchens from work, we had an appero between lunch and dinner. But we didn't just stuff ourselves, we also played <a href="">Pétanque</a>. Together with Zhivka, we won a game against Silvio and Guillaume, even though they had played it before! \:D/</p> <p><img alt="The Petanque team" src="" width="100%" style="max-width:600px"/></p> <p>For dinner, I decided to go all in on sea food: two types of shrimps, shells and snails (fine, those are not sea food). I was very surprised by the snails! After overcoming the natural disgust towards them and actually tasting them, I found them to be very good. I should have some again and I should try more weird stuff too!</p> <p><img alt="The Gnome of Zurich controlling Hollywood and others" src="" width="100%" style="max-width:600px"/></p> <p>After dinner, we played a board game called Illuminati. It's probably every conspiracy theorists favorite game ever. I played with the Gnomes of Zürich and through my scheming I managed to win! We had fun, but it's a quite complicated game and up until the end we kept looking up the manual for various rules. </p> <p>I ended the night by having a lovely chat about programming languages and type theory with some colleagues from Ireland. Just like at the competitions in high school. </p> <p>The next day, I somehow managed to wake up before breakfast was over. We had a work related poster session and a discussion about the <a href="">SRE book</a>. It was quite funny to see how many people were on their phones during the discussion. At least that's what I noticed when I was looking up from mine :D </p> <p><img alt="Perfume tank art" src="" width="100%" style="max-width:600px"/> </p> <p>After lunch, I chose to do a perfume making class in Grasse, the world's capital of perfume. It was fun, but difficult. After half an hour of smelling different scents, my mere mortal nose can't really tell anything apart. Apparently, professional "noses", after going to school for 7 years, can distinguish up to 4000 scents. Anyway, I somehow managed to make an Eau de toilette. People haven't complained about it when I wore it. Seeing the perfume shop was even more confusion inducing, even though we only saw some of the best selling articles. Sure, this one is musky, that one is floral and that one is fruity. But three seconds later I already was mixing them up. It didn't help that the lady who was selling them made a lot of offers and deals. </p> <p><img alt="Bee in a flower" src="" width="100%" style="max-width:600px"/></p> <p>After dinner, we played another board game: We didn't playtest this at all. Well, good job on this one lads. You had a good intuition, even if you didn't playtest it. It's one of the most random, crazy and funny games possible. The rules are super simple, fit on a piece of paper the size of your palm and you just have to select cards, play them and do what it says on them. And it says the most random things, like calling everyone to a game of rock, paper, scissors, but every time the rules saying who loses are different. Sometimes it's anyone who plays something different from the person who played the card, sometimes it's anyone who plays a specific symbol. And funnily enough, even though the playing person has read the card, it happened a lot of times that they themselves played that symbol. Other cards summon a dragon to kill another player. Other cards say that you have to say "Comic Sans is awesome" before every move. And so on. It was a lot of fun. I can't wait to play the game again!</p> <p>Being in France and having a guy at the table who seemed to know his wines, I tried one of the famous French wines. Nope, I still don't understand why people drink wine. That glass of red wine tasted awful, even though when ordering it, the guy used fancy words.</p> <p><img alt="Geocaching clues" src="" width="100%" style="max-width:600px"/></p> <p>On the last day at the Club Med, we had a geocaching treasure hunt. 30 little capsules, each containing a piece of paper with the name of a star written on it, were spread on the grounds of the club. We were teamed up in groups of 2-6 people and we had to find as many as possible. My group, called The Police, managed to find about 18. All the groups were named after famous music bands, and that way I found out about The Police. </p> <p>After another swimming session, some of my colleagues went earlier to Nice and got to actually see it. I missed that, so I just took a nap and watched the craziest cat ever play with itself and get scared of itself. </p> <p><img alt="The sea from the airport" src="" width="100%" style="max-width:600px"/></p> <p>While I didn't get to see Nice, at least I got to see the sea from the airport, so I've got that going for me. </p> <p>I enjoyed my time in Opio en Provence very much, but I'll have to go again, this time actually to Nice :))</p> Sun, 12 Jun 2016 19:00:00 GMT,2016-06-12:/2016/06/12/nice-time-in-nice Glücklicher 6. Geburtstag, mein blog! <p>Du bist sechs Jahre alt, mein lieber blog. Ich habe viele schöne Erinnerung in deine Blog-Posts.... Ah, who am I kidding, my German is not good enough to write a whole post in it. </p> <p>You've travelled a lot in the last one year. You've been <a href="">twice</a> to <a href="">America</a>. You've visited <a href="">several</a> <a href="">European</a> <a href="">countries</a>. You've been to <a href="">various</a> <a href="">shows</a>. You've become more modern, by embracing <a href="">cloud technologies</a> and <a href="">encryption</a>. Quite a lot of stuff that we've done together, adding up to about 130000 characters written in one year, in 28 blog posts. </p> <p>You've been making new friends. The number of users visiting has gone up by 5.91%. The number of page views has dropped quite a lot, by almost 41%, but you're still at a quite good 40000. You have become very popular in Russia for some reason, with more than 2000 views from there :))) People still find you through search, about 50.5%, then 19.1% come from links from various places on the Internet, 16.8% of the people access you directly (thank you, my biggest fans) and 12.8% come to you from social networks. I'm surprised by how useless social media is. I guess you should make better friends :))) Maybe even get a Facebook page :-" Unfortunately, all these visitors don't really like to leave comments. There were 61 new comments in the last year, 27 from me, 11 from Mada (thaaaank youuu), and then two persons left 3 comments, my mom left 2 and the rest is form a long tail of people, each leaving only 1 comment. :( I don't know how to change this and to get a discussion going on more often. Any tips? :D</p> <p>I still have big plans for you, including adding some new content that is not just blog posts. We'll see how that goes and when it actually arrives :)) And I'm looking forward to the other adventures that we'll have together!</p> Wed, 08 Jun 2016 23:30:00 GMT,2016-06-08:/2016/06/08/gluecklicher-6-geburtstag-mein-blog