rolisz's site en Wed, 01 Jan 2020 14:03:00 GMT acrylamid 0.7.10 2019 in Review <figure> <p><img alt="Happy New Year" src="" width="100%" style="max-width:600px"/> <figcaption>Photo by Crazy nana on Unsplash</figcaption></p> </figure> <p>This year something happened that has not happened in a long time: no posts at all during for two months (June and July) :( Most months I also managed to post only once, so because of this I wrote only 19 posts in 2019, 3 fewer than in 2018. Life has been quite busy, the construction of the house eating up a lot of my time in the second half of the year. </p> <p>The number of sessions finally stopped dropping: it was 10775 and 10762 the previous year. The number of users went up by 10%, to 8725. Pageviews continued dropping, getting down to 16382. </p> <p>The day with the most views was November 30, when I had 226 pageviews. I posted about Tokaido then. It seems I should post more often about board games. Interestingly enough, the week with the most views, distributed out over several days was the week of July 21-27, when I didn’t even post anything. What happened then was that a certain YouTube video , which linked to my selfie time lapse photo post, got really popular. </p> <p>My most popular posts were the neural network one (as always, for the last 5 years) and the time lapse one. The most popular one from this year was the one where I finally posted after two months of silence. </p> <p>I’m planning to finally redesign my blog (and change how it’s generated). Hopefully I will also fill it with more and better content as well :)</p> Wed, 01 Jan 2020 14:03:00 GMT,2020-01-01:/2020/01/01/2019-in-review Cracking the human memory <figure> <p><img alt="Brain" src="" width="100%" style="max-width:600px"/> <figcaption>Photo by Robina Weermeijer on Unsplash</figcaption></p> </figure> <p>I’ve never had a particularly good memory, despite what others might claim. While many times others are astonished that I remember something, often I am just able to find a pattern or a logical reasoning behind something and then I can deduce it when needed. Myself, I am astonished by the memorizing capabilities of my smart wife, who finished pharmacy school a couple of months ago. Comparing her exams, where she had to memorize long chemical reactions, to my exams, where most of the time I had to memorize a couple basic things and then the rest could be derived, it’s clear she has a much better memory.</p> <p>While in highschool, when I was doing lots of physics, going to competitions and doing pretty well at a national level, I still had trouble memorizing some of the formulas I needed. I never actually invested time in memorizing them, instead remembering some “logical things”, such as the focal length formula is all inverses, or the gravitational force is symmetrical and is proportional to masses, so things must look so and so. Many of the formulas I eventually memorized, but simply by brute forcing it: I wrote them down while solving exercise so many times, that they ended up getting “burned” into my memory. Recently I helped my sister-in-law with her high school physics classes and in many cases as soon as I looked at a problem, I knew the answer, but figuring out the reasoning behind it and explaining it took much longer.</p> <p>It’s a similar story with programming. I have been programming for more than 10 years. In particular, I’ve been working in Python for around 8 years. And yet I still can’t remember some basic APIs that I’ve used a 1000 times. Recently I had to look up how to delete a file in Python. Whenever I need to use the path manipulation API in Python, I have to look up the docs. Even in highschool, when I wrote my own PHP framework, I didn’t remember a lot of the API. Because Python has a fairly simple syntax, I don’t really have problems with it, but in other languages, that have more syntactic elements, such as Rust, I constantly kept forgetting even simple things such as how to declare an Enum.</p> <figure> <p><img alt="Bible" src="" width="100%" style="max-width:600px"/> <figcaption>Photo by Aaron Burden on Unsplash</figcaption></p> </figure> <p>While these can all be rationalized away, because StackOverflow is one Google away and can tell us everything a programmer needs to know to solve “all” problems that appear on the job, there is another domain where I feel that my memory impaired me more. For a long time I have wanted to memorize more Bible verses. The Bible itself is full of exhortations along these lines (Psalm 119:105: “I have stored up your word in my heart, that I might not sin against you.”, Deuteronomy 11:18 “You shall therefore lay up these words of mine in your heart and in your soul”). I’ve set this as a goal for myself many times (in <a href="">2016</a>, in <a href="">2017</a> and in <a href="">2018</a>), but every time I failed miserably. I tried writing flash cards with the verses that I wanted to memorize, but sooner or later I would forget about them. Or the verses would be too long and I would find them really hard to memorize at once. All kinds of problems.</p> <p>But this year I ran into several articles about “fixing” our memory. One of them is from <a href="">Michael Nielsen</a>, a really smart guy, writing about all kinds of things, from sequestering carbon dioxide from the atmosphere, to quantum computing, to machine learning. In his article he describes a bit how memory works and how he is augmenting it to memorize all kinds of things. Among other things, he is using it to read scientific articles and understand them better, and to memorize programming APIs and he explains why it’s not a waste of time to do this.</p> <p>Also this year, a visitor to our church issued a challenge to the youth to memorize a book from the New Testament. This really motivated me to finally do this, so I decided to learn the letter to the Galatians. I knew my previous attempts had failed, so I needed some new methods, such as the ones described by Michael Nielsen.</p> <h3 id="srs">The Spaced Repetition method</h3> <p>I had previously heard about Spaced Repetition memorizing. I tried it for a little and I had some success for using it while learning German. But it requires effort to create your study decks, it’s not as simple as just reading something, so my past efforts quickly petered out. But this time I had the motivation (the challenge) and some additional information on how to best apply this, and I have successfully applied it for the last two months.</p> <p>The idea behind spaced repetition is that memory decays along an exponential curve and each time you recall something, you boost the strength of that memory and make the forgetting curve less steep. The best results are obtained if you recall something just as you were about to forget it.</p> <figure> <p><img alt="Forgetting curve" src="" width="100%" style="max-width:600px"/> <figcaption>Graph by <a href="">Michael Nielsen</a></figcaption></p> </figure> <p>To exploit this, you have to review the factoids of knowledge that you want memorized on an increasing schedule. After you memorize it once, you review it the next day, then after 2 days, then after 4, and so on. If you make a mistake, you start again, by reviewing it the following day. This formula can be tweaked, if you have a hard time remembering something, you might want to review it sooner, if it came to mind instantly, you can review it much later.</p> <p>Some people have done this with paper cards and boxes, but now we have a much better tool that does all the scheduling for us: Anki. There are other Space Repetition Software (SRS) out there, but Anki is the best known, has a rich community, has many plugins, and in general gets the job done well.</p> <h3 id="verses">Applying SRS to Bible verses</h3> <p>As I said, I had used Anki in the past, and I did learn German words with it. But I knew that that approach would not work well for memorizing Bible verses, simply because questions of the form “Galatians 2:2” -&gt; “I went up because of a revelation and set before them (though privately to those that seemed influential) the gospel that I proclaim among the Gentiles, in order to make sure that I was not running or had not run in vain.” are too complicated. One small mistake and the whole card is gone.</p> <p>The missing link was cloze questions. They enable you to take one longer text and break it up into smaller pieces that you will be tested on. Anki generates cards for each of the fragments you define and each card has one fragment missing. Our previous example would become:</p> <pre class="highlight"><code>Galatians 2:2 {{c1::I went up because of a revelation}} {{c2::and set before them}} ({{c3::though privately before those who seemed influential}}) {{c4::the gospel that I proclaim among the Gentiles}}, {{c5::in order to make sure}} {{c6::I was not running}} {{c7::or had not run in vain.}}</code></pre> <p>This would be turned by Anki automatically into the following cards:</p> <pre class="highlight"><code>Galatians 2:2 ... and set before them though privately before those who seemed influential) the gospel that I proclaim among the Gentiles, in order to make sure I was not running or had not run in vain.</code></pre> <pre class="highlight"><code>Galatians 2:2 I went up because of a revelation ... (though privately before those who seemed influential) the gospel that I proclaim among the Gentiles, in order to make sure I was not running or had not run in vain.</code></pre> <p>And so on for the other 5 fragments.</p> <p>These cloze fragments can’t be generated randomly and I found that choosing them well is critical for memorizing a verse. If you make the fragments too long or if you break up on “odd” boundaries, they become much harder to memorize. For example, if in the above example I had</p> <pre class="highlight"><code>{{c1::I went up because of a revelation and set}} {{c2::before them (though privately}} {{c3:: before those who seemed influential}})</code></pre> <p>In this case, the second fragment “before them (though privately” would be quite hard to memorize correctly, because it actually belongs to two different ideas. Ideally, you have one idea per fragment. Of course, in some cases, an idea is too long and has to be split into multiple fragments. And sometimes, the boundaries are not as clear, but some logical consistency must be seeked.</p> <h3 id="results">Results</h3> <p>I have had great success with this method. I have started learning the letter to the Galatians at the beginning of November. As of today I have successfully memorized the entire first chapter and the first eight verses of the second chapter, with around 5.2 minutes spent per day. In total I spent 4 hours memorizing this. I have tested myself outside of Anki, and I have an accuracy of about 90%. Most of my mistakes are things like mixing up “and”/”but” or sometimes the tenses of verbs.</p> <p>I am astonished how well Anki works. I didn’t expect to be able to learn a text just like it. I like this new found power of memorizing things so much, that I actually started to apply it to other things. For example, last year I learned to solve the Rubik’s cube, but because I didn’t practice for a while, I kinda forgot. So I created an Anki deck with the steps. I have a deck for miscellaneous life things, such as the zip code where I live, which I always forget and I need to add it for online orders.</p> <p>I also made some decks for programming languages. I am learning Rust, so I add there common things that I should know. I have a deck for Python, where I add things which I should already know, but I keep searching for.</p> <p>As Michael Nielsen said, using spaced repetition “means memory is no longer a haphazard event, to be left to chance. Rather, it guarantees I will remember something, with minimal effort. That is, Anki makes memory a choice." I love having this choice, to be able to memorize things, so I plan to continue Anki for quite a while.</p> <iframe width="560" height="315" src="" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen class="youtube"></iframe> Mon, 30 Dec 2019 13:10:00 GMT,2019-12-30:/2019/12/30/cracking-the-human-memory The Rise of Skywalker <p><img alt="Rise of Skywalker poster" src="" width="100%" style="max-width:600px"/></p> <p>The grand finale for the Star Wars trilogy of trilogies is here. Or not so grand, because I went to see it in Oradea on the second day after it was released, and the cinema had at least a third of the seats empty.</p> <p>I didn’t enjoy TLJ [LINK] and I didn’t enjoy this one either, but for different reasons. The first one is the iconic scroller and the next five minutes: in the scroller we are told Palpatine’s back (sorry, but this was known before the movie came out) and then Kylo Ren goes to meet him. Palpatine gives Kylo a mission in exchange for a fleet of ships and buh bye. That’s it. No explanation, no nothing. Except a remark that Palpatine created Snoke. By doing this, they cheapen the ending of the Return of the Jedi. Vader’s sacrifice means a lot less, because he failed at getting rid of Palpatine.</p> <p>The movie is very action packed. Almost all the time someone, usually Rey or Kylo (or both), are running around. In one sense, this is a good thing, because we see a lot of lightsaber fights between the two of them. On the other hand, Star Wars, with it’s grand ideas about light versus dark, about freedom versus tyranny and so on, would normally need to give some breathing space for viewers to process and understand what is going on.</p> <p><img alt="Kijimi" src="" width="100%" style="max-width:600px"/></p> <p>The visuals of the movie are absolutely gorgeous. They didn’t skimp at all on visual effects, neither for rendering exotic planets, nor for showing all kinds of alien species.</p> <p>The movie is also full of throwbacks to previous movies, such as Lando Calrissian showing up again. It’s amazing how they still managed to get Leia in the movie, even though Carrie Fisher passed away before filming started, so they had to use scrap footage they had from before. We get some explanations for things that left us puzzled in the TLJ, such as the fact that Leia had Jedi training, but she didn’t finish it.</p> <p>There are several new characters, including two really cute ones: a new robot “D-0”, who seems to be the dumbest one so far, but makes for a couple funny jokes, and Babu Frik, the really cute robot repairer who messes around with C3POs memory.</p> <p><em>Spoilers ahead</em></p> <p>Unfortunately, most of the film is not very memorable. I watched it 4 days ago, and I already can’t describe most of the middle of the movie. It involves a chase for some sort of a MacGuffin device, going from planet to planet following clues. Beautiful planets, some new characters, but the why and the what is forgettable.</p> <p><img alt="Rey and Kylo fight" src="" width="100%" style="max-width:600px"/></p> <p>The beginning is memorable, when Palpatine shows up. The end is memorable, but mostly in a facepalm way, when Palpatine is killed by Rey. Kylo/Ben Solo is also thrown off a cliff by Palpatine, but he survives, climbs back up, saves Rey from death, they kiss and then he poofs away into the Force.</p> <p>One of the other reasons I’m quite so upset is how easily characters change heart. Kylo Ren for two and a half movies has been the bad guy, but now suddenly his mom whispers to him across the galaxy and he becomes a good guy? Or similarly, Rey is intent on destroying her grandfather, Palpatine, but then he reveals that due to new, out of the blue, Force shenanigans, if she kills him with a lightsaber, he will “move” into her. She still plans to proceed, gets ready to strike him down, when she suddenly has a change of heart. Gimme a break.</p> <p>Also, in TLJ, nobody came when the Resistance asked for help. Now, the sky is filled with ships when they called for help. I get that Lando might have a lot of friends, but not that many friends.</p> <p>All in all, I was disappointed by this movie. I know it’s a sci-fi movie, but I still expect better from it. I expect more logic and consistency in what can happen in universe. I think it was a mistake letting Ryan Johnson direct TLJ, so now J.J. Abrams had to correct the many mistakes he made, so he didn’t have time to make the cool Star Wars stuff.</p> <p>Grade: 5/10</p> Wed, 25 Dec 2019 23:52:00 GMT,2019-12-25:/2019/12/25/the-rise-of-skywalker Boardgames Party: Tokaido <p><img alt="Tokaido box" src="" width="100%" style="max-width:600px"/></p> <p>I've bought Tokaido about two years ago. I've opened it about a year ago, but I was quickly overruled by the others, who probably wanted to play a game they knew (<em>cough</em>Dixit<em>cough</em>). But today, we did a spontaneous board game night in our house and I took out Tokaido and we finally played. </p> <p><img alt="Tokaido road" src="" width="100%" style="max-width:600px"/></p> <p>Tokaido is a beautiful game set in Japan, where each player is a traveler along the eastern sea route connecting Kyoto to Tokyo. Each player can stop at different places along the way, such as farms (where you receive money), temples (where you give money), inns (where you have delicious meals), scenic views (where you collect panoramas) or villages, where you meet people and you can buy art. Each of these gives you points according to different rules. </p> <p><img alt="Tokaido characters" src="" width="100%" style="max-width:600px"/></p> <p>An interesting twist about the game is that players don't take actions in a predefined order (either clockwise or counterclockwise), but the player who is last on the road is the one who does the next action. This means that in some cases, that person can take two consecutive actions, if the others are in a hurry and skip forward. Because of this, planning actions is a bit hard, because you don't know when will your turn come again. </p> <p><img alt="Tokaido items" src="" width="100%" style="max-width:600px"/></p> <p>The game has lovely graphics, the rules are easy to learn, so it's a good game to play when you are tired in the evening and want to unwind a bit. </p> <p>Score: 8</p> Sat, 30 Nov 2019 16:47:00 GMT,2019-11-30:/2019/11/30/boardgames-party-tokaido Git tutorial - part 3 <p>I wrote my last Git tutorial <a href="">6 years ago</a>, but I guess it took me quite some time to learn some new Git tricks.</p> <p>At work we have a microservices architecture, with each service in a different repo. I work with around 6 of them on a regular basis and sometimes I have to make changes that touch more than one repo, such as changing the interface of one service and then changing all the other services that make calls to it.</p> <p>We use the Azure Release flow for developing code, which means feature development happens on branches and we send pull requests (PR) to merge our code. Because sometimes I start another task before I get the necessary approvals for a PR, I sometimes have to juggle many branches in the same repo.</p> <p>Inevitably, I make commits to the wrong branches. Because I’ve searched for this too many times, I’ve decided to blog about how to fix this.</p> <p>If you commit to the wrong branch and you already have an existing branch that you should have commited to:</p> <pre class="highlight"><code class="language-bash">git checkout wrong_branch git log git checkout correct_branch git cherry-pick commit_hash</code></pre> <p>If you commited to master and you should have created a new branch:</p> <pre class="highlight"><code class="language-bash">git branch new_branch git reset --keep HEAD~1 # Move master back by 1 commit git checkout new_branch</code></pre> <p>So the first problem is solved. But then I am left with another one: the Azure Devops repository offers the option to delete branches when merging pull requests, but obviously it deletes them only remotely, and, sometimes, I uncheck that option because I know I still have work to do on that feature. But eventually I do want to clean up stuff and occasionally, I want to do that from the command line, because the Git UI from the IntelliJ line of products is not always very clear and helpful.</p> <pre class="highlight"><code class="language-bash">git push -d origin old_branch # Deletes remote branch git branch -d old_branch # Deletes local branch only if it has been fully merged git branch -D old_branch # Nuke the local branch, regardless of merged status</code></pre> <p>And now for the fun part. A weird bug emerged at work, related to Flask logs, and I didn’t see any commits that looked like they touched the logging system. Checking out an old commit showed that back then the logs were still working fine, so it was not an issue with a dependency or something else, but it was something from our code.</p> <p>Time to whip out git bisect. I’ve known for a long time that it existed, but I never used it in my almost 10 years of programming.</p> <pre class="highlight"><code class="language-bash">&gt; git bisect start # Start bisecting &gt; git bisect bad # Current head on master is bad &gt; git bisect checkout old_hash &gt; git bisect good # The version at old_hash is good</code></pre> <p>Then you should get something as follows:</p> <pre class="highlight"><code>Bisecting: 378 revisions left to test after this (roughly 9 steps)</code></pre> <p>Git automatically checked out the commit in the middle of the range history, so you can run your tests and see if the bug is still present. If yes <code>git bisect bad</code>, otherwise <code>git bisect good</code>. Do this approximately 9 times and you will get to the commit that introduced the bug. The last step is to clean up the bisection state and return to HEAD:</p> <pre class="highlight"><code class="language-bash">&gt; git bisect reset</code></pre> <p>In my case, the commit bisect found didn’t touch logging at all. Yet, miraculously, in the previous commit, logs showed up fine, but with this commit, they didn’t. Sometimes I seriously question my career choices… but then I realize I enjoy messing with this stuff :D</p> Mon, 25 Nov 2019 11:35:00 GMT,2019-11-25:/2019/11/25/git-tutorial-part-3 The iron path <p><img alt="On a bridge" src="" width="100%" style="max-width:600px"/></p> <p>After a half year break, the little band of hikers from our church decided to do some via ferrata routes, in the Vadu Crișului and Șuncuiuș area.</p> <p>I’ve wanted to go on Via Ferrata hikes for a long time. I first heard of them when I moved to Switzerland, but somehow I never got around to going on them until now. </p> <p><img alt="Steel cable" src="" width="100%" style="max-width:600px"/></p> <p>We rented the equipment from Ovi in Vad and we went on our way. We started with the medium difficulty route from Vad. It took us about 40 minutes. For me, being a beginner, the first part was a bit difficult, until I got the hang of how to move the carabiners around more efficiently. </p> <p><img alt="Carabiners" src="" width="100%" style="max-width:600px"/></p> <p>Half of our group decided to go on the more difficult route as well, while the other half (including me) waited for the others at the top. We enjoyed the view, talked about life and I went about 3 times on the other routes harness. The first time all of us went, the second time I was bored, then I wanted someone to film me. </p> <video autoplay loop src="/static/images/2019/11/via_ferrata/loop-nosound.mp4"> </video> <p>When we were all together again, we went to Suncuius, where everyone said it’s the easiest route. Liars. All of them. The route might be only 40m, but half of it is vertical climbing. </p> <p><img alt="Hammock at the top" src="" width="100%" style="max-width:600px"/></p> <p>But, close to the top, someone installed two hammocks in a small cave. Best idea ever! It was sooo nice to take a break swinging, while enjoying the view. </p> <p>I can’t wait to go again on the iron path!</p> <p><img alt="Looking down" src="" width="100%" style="max-width:600px"/></p> Sun, 17 Nov 2019 23:30:00 GMT,2019-11-17:/2019/11/17/the-iron-path John Lennox in Cluj <p><img alt="John Lennox speaking in Cluj" src="" width="100%" style="max-width:600px"/></p> <p>This week, Edictum Dei invited another one of my favorite Christian authors, John Lennox to give a presentation in Cluj. Unlike last year, for the N.T. Wright conference, I found out about it soon after it was announced and I immediately reserved a ticket.</p> <p>John Lennox is an Emeritus Professor of Mathematics at Oxford, a philosopher of science and a Christian apologist, having written many books about the existence of God, the relationship between faith and science, and also having debated many famous atheists such as Christopher Hitchens or Richard Dawkins.</p> <p>The presentation was related to Professor Lennox’s latest book “Can Science Explain Everything?”. He goes into the kinds of questions science can answer. For example, if you see a pot of water boiling, the scientific explanation for it can be found in water molecules and thermodynamics, but the personal explanation would be that you just want a cup of tea. The latter is outside of the realm of science. Similarly, just because we know the laws of gravity, it doesn’t mean we know how the Universe came to be (unlike what Stephen Hawking claimed).</p> <p>He mentioned how often there is a false dichotomy set up between science and religion, when actually the problem is between the world view of naturalism and that of theism. Both are actually faiths (atheists have to have faith that their rational or scientific methods will lead them to “salvation”) and they are the starting point for everything.</p> <p>Professor Lennox argues that the naturalistic viewpoint is actually against science, because it means there is no basis for science. Why would there be a set of laws governing the world around us? Why wouldn’t things just happen at random? As Christians, we know that there are physical laws because God is a God of order and He created them. Also, naturalistic evolutionary processes don’t have as an end goal intelligence, but survival. So there is reason to doubt the human brain and the soundness of it’s cognitive processes, if the brain is purely the results of evolution.</p> <p>One of the last things he touched upon was miracles, refuting Hume’s argument against them. He gave the example of putting money repeatedly into a drawer. If after you put there 1000 RON three times, you find there 500 RON, it’s not the laws of arithmetic that are broken, but the laws of Romania. Similarly, because there is a normally occurring order to the laws of nature, we can identify when they are broken by a supernatural event. In machine learning parlance, you want to regularize your model, so as not to overfit to all your data points :D</p> <p>The Q&amp;A section was a bit weak, there were no live questions, but you had to send a message to a phone number and then it might have been selected. The list that was presented was a very common list of questions, nothing interesting.</p> <p>One thing that I found surprising about the event was that it was not translated to Romanian. I enjoyed it very much, because it meant professor Lennox could speak twice as much :)</p> <p><img alt="John Lennox autograph" src="" width="100%" style="max-width:600px"/></p> Mon, 04 Nov 2019 20:57:00 GMT,2019-11-04:/2019/11/04/john-lennox-in-cluj Better than Us <p><img alt="Better than Us poster" src="" width="100%" style="max-width:600px"/></p> <p>Добрый день. Меня зовут Роланд!</p> <p>It just happens that in the last month I’ve discovered two masterpieces of Russian art: one is the <a href="">Red Army Choir</a>, the other one is Better than Us, a TV show about a family living in 2029, which somehow becomes the owner of a very advanced robot.</p> <p>Robots are common in this world, but they are quite dumb and can’t go beyond their programming. As someone who works with machine learning, I find it quite puzzling that the robots have excellent natural language understanding skills and are able to follow human commands (both of which are very difficult to do today, just try to talk for a couple of minutes to Siri), but are unable to understand human emotions (sentiment analysis works pretty well today, both on text data and on faces) or to improvise and develop new skills (there have been <a href="">successful experiments</a> about this).</p> <figure> <p><img alt="Arisa saving a child" src="" width="100%" style="max-width:600px"/> <figcaption>Arisa diagnosing a child of a rare disease</figcaption></p> </figure> <p>The show starts with Viktor Toropov, the head of Kronos, one of the largest robot manufacturers in Russia, buying Arisa, a new kind of robot, on the black market. She is said to have a quantum chip which enables her to have unpredictable behavior and to learn. She arrives with a low battery (as all the gadgets you buy), so she seeks a charging station as soon as she is turned on. The security guard who was assigned to watch her gets too close and has his neck broken. And then Arisa slips away unwittingly, looking for another place to charge her battery.</p> <p>By coincidence, she meets Sonya Safronov on the streets, the little daughter of Georgy Safronov, a former neurosurgeon whose life is in shambles. Arisa “adopts” this family and tries to integrate with them. Of course, Kronos wants her back and is looking for her. The Liquidators, a terrorist group who want to get rid of robots, also want to destroy her. The police are also interested in this story, because it would implicate Viktor Toropov knew about a murderous robot. And of course, the Safronovs are in the middle of all this, getting the short end of the stick, being kidnapped, shot at, bartered and generally bossed around.</p> <figure> <p><img alt="Igor at gunpoint" src="" width="100%" style="max-width:600px"/> <figcaption>Georgy's son, held at gunpoint</figcaption></p> </figure> <p>The story is quite interesting and there are some cool twists, such as Georgy and Viktor having a past connection, or Arisa learning to perform a surgery better than Safronov can. It ends with a happy ending for the main characters and a big plot twist in the last 5 seconds.</p> <p>Besides robots, the show also features lots of drones. Every time there is an open air scene, at least 2-3 drones are seen buzzing around, high enough not to interfere, close enough to perform surveillance. Drones are used to spy on loved ones and also to deliver bombs to eliminate rivals. This part of the show seems to me like the most likely to actually happen in real life in the next 10 years. Drones are already quite cheap, you can get one with 4K cameras for 300$. The battery life is not that good, but demand for better batteries will provide breakthroughs soon enough. And then people will get used to being under surveillance everywhere. Creepy thought.</p> <p>The actors are amazing, both the ones who play robots and the ones who play humans. The actress for Arisa does an amazing job of showing both her robotic personality, with very ordered and strict movements, but also of showing how she learns and how she starts to respond to emotions, initially only with a very small and subtle smile. Also, the actor who plays Safronov looks a bit like Tim Roth :D</p> <figure> <p><img alt="Lara hacking Arisa" src="" width="100%" style="max-width:600px"/> <figcaption>Lara trying to hack into Arisa's memory</figcaption></p> </figure> <p>When Arisa is on screen, even the background music is more chill, showing how even her perception of time is different (better?) than that of humans.</p> <p>Another thing that I love about the show is the language. I’ve had some attempts in the past to learn Russian (they failed), but watching Better than us brought back sparks. It just sounds great. Also, how Russian names are used is fascinating: in direct conversation, people sometimes address each other with full names. Georgy has a dozen versions, which are used by various people around him. Last names are often used directly to call people. For me, it was really great to delve a bit into the Russian language.</p> <p>The show is on Netflix, where they merged two 8 episode seasons into one 16 episode season. I really hope they will make a third season. Or I have to find another Russian show to watch :D</p> Sun, 27 Oct 2019 01:19:00 GMT,2019-10-27:/2019/10/27/better-than-us Ad Astra <p><img alt="Ad Astra poster" src="" width="100%" style="max-width:600px"/></p> <p>Another space movie came out, so of course I went to the cinema to see it, just like I did with <a href="">Gravity</a> and <a href="">Interstellar</a>. It was a very spontaneous decision, seeing an article about it at 7 PM, watching a trailer at 7:10 and at 8 PM being at the cinema with my friend Calin.</p> <p>The movie's main character is Major Roy McBride, who is part of the U.S. Space Command (SpaceCom). He is a very calm person, his pulse never going over 87. No matter what’s the situation, whether it’s being in freefall after an explosion in the upper atmosphere, or being shot at by pirates on the moon, he stays calm, observes his surroundings, orients himself, decides what to do and acts to solve the problem. While these are great qualities for a soldier and the army greatly admires them, they don’t make for a great social life. He was married, but his wife left him, because he was too distant and too preoccupied with work, and he doesn’t seem to have any friends.</p> <p>Roy is asked by SpaceCom to help with finding his father, who had disappeared 16 years before, beyond Neptune, on a mission to find alien life. They had lost contact with his ship, but now they have reason to believe he is somehow causing electrical surges on Earth. His father is part of the reason why Roy (and many others) became an astronaut, but he is still upset that his father left on a mission from which he knew there was no coming back.</p> <p><img alt="Moon mission" src="" width="100%" style="max-width:600px"/></p> <p>The first two thirds of the movie are really well done and they showcase how Roy’s emotional barriers start to break down. He’s still the razor sharp soldier, who’s always paying attention to his surroundings, always ready to solve problems, but slowly he's starting to waver, as he realizes his dad might actually be alive. Any time there is a physical danger, be it a loose orangutan in space or a pilot to scared to land a rocket safely, he still manages to act quickly and save the day. But his psychological evaluations, which he has to do regularly, get fuzzier and fuzzier answers and he starts disobeying his superiors, initially only by responding to an SOS call, then going off-script in his message for his father, then by going to Neptune instead of Earth.</p> <p>All the action sequences in this part of the movie are beautifully done. The contrast between all the things blowing up and the calmness of Roy is very stark. There is a rover chase scene on the moon, which is delightful, because it’s mostly black and white, with only the helmets being yellow. In another scene, our astronaut has to cross an underground lake to get to a rocket launching site. As he is narrating his thoughts, the lighting (and lack of) suggests so well that he is alone with his thoughts.</p> <figure> <p><img alt="Rocket launch" src="" width="100%" style="max-width:600px"/> <figcaption>Roy looking to hitch a ride on the rocket</figcaption></p> </figure> <p>The last third of the movie becomes more confusing and distressing. Roy ends up alone on a spaceship towards Neptune and his solitude starts to take a toll on him. He starts reliving his memories of his father and of his wife. Interestingly, his beard doesn’t grow during the 73 day trip.</p> <p>When he gets to his father’s ship, beyond Neptune, he loads up the nuclear payload and boards the ship. He finds his father, Clifford McBride, and it turns out that it was not his father who was causing the electrical surges on Earth, but his crew who had mutinied. His father is still obsessed with finding extraterrestrial life, but so far all the data they have gathered, the clearest signal from the furthest places they went to, didn’t reveal anything. He is unwilling to let go and pretty much commits suicide by jettisoning into space.</p> <p>But Roy has an epiphany here, that while his dad was busy looking for a signal from far away, Clifford missed what was right in front of him: Earth, humans, society, family, friends and that “We're all we've got.”. This causes Roy to snap back to reality and gives him back his desire to live. He pulls two McGyvers in a row and manages to get back to Earth.</p> <figure> <p><img alt="Rocket launch" src="" width="100%" style="max-width:600px"/> <figcaption>Riding a nuclear blast</figcaption></p> </figure> <p>The movie ends with a bit of ambiguity, interweaving shots of both Roy reciting his “perfect” psych eval, and also him going out for a coffee with his wife.</p> <p>The thing that bothered me about this movie was the Roy needed to travel several billion kilometers to Neptune to figure out that other people matter? That he shouldn’t be a purely work oriented human being? That’s… sad. Really sad. But at least he realized this, unlike his father, who could not bear to live without finding something out there.</p> <p>I loved the visuals of the movie. The soundtrack was meh, nothing memorable. The acting was good, Brad Pitt delivered on the character. Other actors didn't have too much screen time though. The moral of the story is good, but I hope most people don't have to travel so far to realize it!</p> Sun, 29 Sep 2019 13:02:00 GMT,2019-09-29:/2019/09/29/ad-astra Digging myself a hole <p>As I mentioned in my <a href="">previous post</a>, construction has started on my house two months ago. Things are going pretty well, despite being behind the first estimated schedule. But that is something that everyone told me to expect, that initial estimates are wrong. That is possibly the only thing programming and construction work has in common.</p> <p>But my construction team is only doing the actual construction part, meaning foundations, walls and roof. A modern day house has a lot more components, part of which is the water drainage system for the foundations.</p> <p>This system is supposed to be a weeping tile that goes around my basement, accumulating all the water that somehow makes it down, wherever it comes from, and goes into a catch basin, where a sump pump will pump it out.</p> <p>I had asked for a team to install this for me, but they kept postponing the time when they could come. After a while, I decided that this isn’t something that requires a lot of construction knowledge, so I can do this with a couple of friends.</p> <p>So on two Saturdays, I, together with Calin, Filip and Daniel (and even my dad once), started digging. That part went quite well. Well, I was exhausted and barely able to move in the evening, but still, it went no problemo. Despite the soil having a clay-like composition and being quite hard, we broke up the soil, we dug and we shoveled and got it done.</p> <p>But then came the fun part: installing the catch basin, which is made of three concrete rings, each 1 meter long and 70 centimeters in diameter. I had an inkling that they are heavy, but boy, they are <em>HEAVY</em>.</p> <p>First, we made sure that the hole for it is deep enough. Then we realized it’s not wide enough. So dig some more on the sides, then realize that the soil that’s falling into the hole is basically raising the level up, so you have to dig down even more. But after a couple of hours the hole is 1 meter and 5 centimeters deep (from the weeping tile level) and around 75 centimeters wide all around.</p> <p>Now, how do we get the concrete rings down? Moving them around on flat soil is difficult enough, let alone just letting them down slowly 3 meters from ground level. We estimated one to be around 200 kg. We got a rope rated for 2000 kilograms, just to be sure. Together with Victor, a neighbor, we built a pulley system out of three shoring props. We used as a counterweight another concrete ring and we slowly let down the first ring. It got stuck a couple of times on various protuberances of the soil. When jiggled around so that it would continue down, it would jerk around quite strongly, in one case breaking a stray PVC tube. In the end it landed at the bottom of the hole, except twisted 90 degrees, so we couldn’t take out the piece of rebar the rope was attached to. We tried lifting it, but it wouldn’t budge, not even with 4 of us hanging from the opposite side of the pulley. That's probably the only time I'll ever hear someone saying I'm not fat enough.</p> <p>That wasn’t a problem, because we could cut it, but the wrong orientation would be a problem for the next ring. Because this ring was the one where the draining pipes of the weeping tile would have to be connected. Because of this, we had drilled two holes into the concrete ring and then we had to lower it down in the correct orientation. Somehow it happened. I don’t know how, because I was holding on to the rope on the other end of the pulley, but Victor did it, while giving orders: “5 more centimeters” (easy enough, but I’m not sure if it was only 5 centimeters), “Hang on, back up a bit” (yeah, right) and “All right, draining tube is in, you can let go” (finally).</p> <p>The third ring had the smallest distance to go, but for some reason, it didn’t want to fit on top of the others, so there was actually a lot of futzing around to get it in correctly (again, mostly by Victor and my dad, while Calin, Filip and I were holding on to the rope for dear life).</p> <p>After all three rings were in place, there was much rejoicing all around for 5 minutes and then we went back to shoveling to <em>fill</em> what we had just taken out, on top of the weeping tile.</p> <p>This whole experience has left me with a greater appreciation for the builders of the pyramids and other ancient megastructures, and with an even greater question: how on earth did they move 10 ton blocks of stone for kilometers, when 5 of us could barely move a 200 kilogram concrete ring for 10 meters? </p> <p>Unfortunately, I don’t have any good pictures of this whole operation, because when I was trying to take some, the others would yell at me to hold the rope.</p> Sat, 07 Sep 2019 23:53:00 GMT,2019-09-07:/2019/09/07/digging-myself-a-hole Breaking Radio Silence <p>I don't think many people noticed, but I haven't written a new post in almost three months and my last post was not too meaty (a campaign poster and a call to action). </p> <p>Was ist los mit Roland?</p> <p style="float: left; margin-right:20px; margin-bottom: 10px; max-height: 500px" markdown="1"> <img title="Hole in the ground" src="/static/images/2019/08/update/hole.jpg" style="max-width:350px;"> </p> <p>The biggest thing that happened was that construction on my house finally started at the beginning of July. This is by far the most time consuming project that is going on for me right now. I’ve had to make countless calls to contractors, materials suppliers, engineers and supervisors. I’ve researched and studied various materials and methods for building, plumbing, insulation, wiring, ventilation, heating and vacuuming and how they might interact with each other. </p> <p>Everyone has warned me that things will not go perfectly, that the plans will have flaws, the builders will make mistakes in following the plan and, most importantly, that I will also make mistakes. And, as everyone predicted, all three have already happened. The structuctural engineer and the construction supervisor disagreed on whether to include iron bars in some places in the wall. The builder forgot to leave a hole for the plumbing in the basement wall. And I forgot to call the electrician in time to put the wires before pouring concrete. All three issues were eventually fixed, the house is still being built, but with some extra stress. And of course, there are delays. The initial plan was that the basement would be finished two weeks ago. Now I’m hoping it’s done next week. </p> <p>But despite (or maybe because of) all the stress it causes, the building of the house has been a great opportunity to see how God provides help and to learn to trust in Him. I saw that in how God kept the big hole in the ground pictured above from caving in, for about three weeks, until the foundation was poured. I also saw it in how He helped solve some issues with the contractors. </p> <p>Last month I also changed my job. It’s a very similar role to my previous one, I’m still the TL of an AI/ML team, I’m still working remotely, but I switched to the dark side: the new company is a Microsoft partner, so we work with the Azure cloud, not the Google Cloud Platform. I’m still trying to get my bearings in Azure, but I’ll try to write a post about the differences between the two once I get used to it. </p> <p><img alt="My beautiful wife graduating" src="" width="100%" style="max-width:600px"/> And last but not least, my beautiful wife graduated pharmacy school and is now studying for her final exam, which is in September.</p> Sun, 11 Aug 2019 01:07:00 GMT,2019-08-11:/2019/08/11/breaking-radio-silence Vot 26 Mai <p><em>This post is about the europarlamentary vote and a referendum in Romania</em></p> <p><img alt="Votez Peter Costea" src="" width="100%" style="max-width:600px"/></p> <p>Și votez Da la ambele întrebări de la referendum, din motive similare cu ce expune <a href="">Adrian Papahagi</a>.</p> Sun, 26 May 2019 01:11:00 GMT,2019-05-26:/2019/05/26/vot-26-mai HackTM Oradea <figure> <p><img alt="Me and Catalin presenting on stage" src="" width="100%" style="max-width:600px"/> <figcaption>Catalin and me presenting on stage</figcaption></p> </figure> <p>Last weekend was <a href="">HackTM Oradea</a>, a hackathon that started in Timisoara. Last year they went to Sibiu and this year they came to Oradea. In Timisoara it's quite big (over 700 participants last year). Here in Oradea it's smaller, around 100 people, most of them being from out of town. </p> <p>I haven't been at hackathons in quite a while, so I decided to try this one, mostly for meeting other people and also to code something new and learn something fun. When I got there, Catalin, who has attended <a href="">my presentations</a> I did at my university, recognized me and we started talking. </p> <p>Teams could have at most 5 programmers and most of them were full, so I ended up rewriting <a href="">my university project</a> from scratch. This time, I used the Google Cloud Vision API for doing the OCR, instead of me reinventing the wheel (I really didn't want to annotate 50 receipts myself again). I also discovered that someone tried to do this last year as well and Maria, who also tried to implement this in past years, joined my team, together with Catalin. </p> <p>The first night went quite well, with me going home to sleep at 4AM. But on Saturday night, at midnight I typed a <code>,</code> instead of a <code>.</code> to call a method and it took me several minutes to find this error. After that, I realized it's pointless to continue working, so I went home. Sunday morning was much more productive and I continued hacking all the way until the jury came, implementing features even between visits from different members of the jury.</p> <p>I was surprised to see a lot of highschool students participating in this hackathon. I think at least a third of the teams were from highschoolers. And the youngest participant was 10! What was I doing with my life at 10? Definitely not coding. :(</p> <p>We managed to get a prototype working, but unfortunately we didn't win any prizes. The grand winner was Digiflare, who used a drone to call for help for people stuck in mountains. </p> <figure> <p><img alt="The one handed typing competition" src="" width="100%" style="max-width:600px"/> <figcaption>The one handed typing competition</figcaption></p> </figure> <p>While we didn't win anything for our code, I did win a cake for winning the surprize typing competition at midnight on Saturday night! However, I didn't eat it all by myself, I shared it with the others!</p> <figure> <p><img alt="The prize for the typing competition" src="" width="100%" style="max-width:600px"/> <figcaption>The prize for the typing competition</figcaption></p> </figure> <p>Food on site was provided by two food trucks, one from <a href="">Krafty Bites</a> and one from <a href="">Raclette</a><sup id="fnref-1"><a class="footnote-ref" href="">1</a></sup>, where you could pay with the events own digital currency, Coco. Unfortunately, it's not blockchain based. :(</p> <p>My main goal at the hackathon was achieved, I did meet several interesting people, had some debates about various software architectures and how to protect your data, and I restarted my pet project. I hope I will be able to make some progress with it and maybe launch it one day.</p> <div class="footnote"> <hr /> <ol> <li id="fn-1"> <p>Which is a bistro in Oradea where you can have Swiss Raclette and Sicilian Cannoli. I highly recommend it!&#160;<a class="footnote-backref" href="" title="Jump back to footnote 1 in the text">&#8617;</a></p> </li> </ol> </div> Wed, 10 Apr 2019 01:10:00 GMT,2019-04-10:/2019/04/10/hacktm-oradea Old Man's Cave <p><img alt="Me" src="" width="100%" style="max-width:600px"/></p> <p>The next target for our hikes was Peștera Bătrânului (Old Man’s Cave)<sup id="fnref-1"><a class="footnote-ref" href="">1</a></sup>, which is close to where my parents-in-law live. We knew the cave was closed to tourists, but the views on the way there were supposed to be pretty.</p> <figure> <p><img alt="View from the top" src="" width="100%" style="max-width:600px"/> <figcaption>Goat's Cave. We did go in. Just 5 meters.</figcaption></p> </figure> <p>We left on foot on a Saturday morning at 11:00 from Vadu Crișului, on the blue line trail. We passed by the Peștera Caprei (Goat’s Cave), the three Devenț Caves and Poarta Sărutului (Gate of Kissing) The path quickly turned quite steep. Because it had rained until 10:55, the soil was muddy and slippery and I often had to turn on the 4x4 traction (aka use my hands to stop myself from sliding all the way down).</p> <figure> <p><img alt="View from the top" src="" width="100%" style="max-width:600px"/> <figcaption>Gate of Kissing</figcaption></p> </figure> <p>We stopped at one of the Devenț Caves. The cave is at least 150 metres deep. We went in as far as we could, stopping at a big puddle through which we would have had to crawl. Nobody wanted to continue the hike soaking wet, so we went back out. A couple of guys from our group, who had been to the cave before and didn’t want to go in again, made a fire at the entrance of the cave, where we all warmed up a bit.</p> <figure> <p><img alt="View from the top" src="" width="100%" style="max-width:600px"/> <figcaption>Another hiker's dog</figcaption></p> </figure> <p>After almost two hours, we got to the Belvedere Terrace, from where you could see the valley of the Criș River. Another hiker overtook us, together with his pretty, but stinky dog.</p> <figure> <p><img alt="View from the top" src="" width="100%" style="max-width:600px"/> <figcaption>View from Belvedere Terrace</figcaption></p> </figure> <p>Soon afterwards we got to the lapiez<sup id="fnref-2"><a class="footnote-ref" href="">2</a></sup> area, where, to our joy, we found snow in the second week of March! It’s a very hilly area, with lots of small valleys, lots of wind at the top, and in the shaded areas of the valleys there was a fair bit of snow left.</p> <figure> <p><img alt="View from the top" src="" width="100%" style="max-width:600px"/> <figcaption>Lapiez area</figcaption></p> </figure> <p>We got to our destination, learned that there are many species of bats in that cave, we had a late lunch there, took some pictures from outside and then we started going back.</p> <div class="gallery clearfix" style="max-width:600px"> <script type="application/json">[]</script> </div> <p>We didn’t take the exact same route back, but took a turn at a fork in the road, to avoid going down where we climbed in the beginning. We had a GPS with us, what could possibly go wrong?</p> <div class="gallery clearfix" style="max-width:600px"> <script type="application/json">[]</script> </div> <figure> <figcaption>Pretty spring flowers everywhere</figcaption> </figure> <p>After walking and walking, we realize that this alternate route is actually longer than we expected, so how about we start going down sideways on the mountain, where there is no trail? In the beginning, it looked okay. After 50 metres, less so. After another 100 metres, even worse. We all got down safely, but it was a very slow descent on slippery soil, rocks and fallen tree branches, through the remnants of a mountain creek, which showed signs of washing down trees during sudden downpours. Note to self: stick to the marked trails whenever possible.</p> <p>Where to next, guys?</p> <p><em>Credit for some of the pictures goes to Stefan Mihocas, Ghita Noane and Arva Csabi</em></p> <div class="footnote"> <hr /> <ol> <li id="fn-1"> <p>Also known as Pokol Barlang (Hell’s Cave) in Hungarian. I don’t know why they have such different names.&#160;<a class="footnote-backref" href="" title="Jump back to footnote 1 in the text">&#8617;</a></p> </li> <li id="fn-2"> <p>Limestone pavements&#160;<a class="footnote-backref" href="" title="Jump back to footnote 2 in the text">&#8617;</a></p> </li> </ol> </div> Sun, 24 Mar 2019 22:08:00 GMT,2019-03-24:/2019/03/24/old-man-s-cave Backing up 3: Syncthing <figure> <p><img alt="Main screen of Syncthing" src="" width="100%" style="max-width:600px"/> <figcaption>The main screen of the Syncthing GUI</figcaption></p> </figure> <p>A while ago, I mentioned how I back up my valuable data <a href="">to my NAS</a>. In the mean time, I added one more thing to it: a UPS<sup id="fnref-1"><a class="footnote-ref" href="">1</a></sup> so even if the power goes out, it still says up and more importantly, it can shut down safely. This is important because if the power cuts out while hard drives are spinning, the head can damage the disk and you lose the data. The UPC can tell the NAS when it's on low power, so the NAS enters standby safely.</p> <p>But I said that there is another component to backups, which is also very important: offsite backups, which are in a geographically separated location. It turns out it's harder to do then I expected, so it took quite some time for me to get this working and I'm still not 100% happy with it. </p> <p>My offsite backup is at my parents place. I bought a 4TB external hard drive that they keep plugged into their desktop. At first, I wanted to try a solution such as <a href="">borg</a>, <a href="">Duplicati</a> or <a href="">Duplicity</a>. Then I ran into two problems: first, my parents run Windows, so running an SSH or rsync server is not as easy as on Linux (it's doable, but it's not as easy). And the second problem is that the computer is behind a router, so I can't access it directly. In theory, port forwarding on the router should solve this issue. A whole afternoon spent trying to figure this out in a reliable way disagrees with the theory. So for a while this project was shelved.</p> <p>Then this year I stumbled upon another way: <a href="">Syncthing</a>. It's not exactly a backup tool, but rather a tool to synchronize files between multiple computers. However, it runs natively on Windows (and on my Synology NAS) and it performs NAT traversal by itself, so it just works ™️.</p> <figure> <p><img alt="VeraCrypt" src="" width="100%" style="max-width:600px"/> <figcaption>The main screen of the VeraCrypt</figcaption></p> </figure> <p>The downside is that it doesn't encrypt the data. While I trust my parents, I want the data to be encrypted at rest, to prevent issues in the case of a malware infection. So I chose to encrypt the hard drive with <a href="">VeraCrypt</a>. However, this means that I have to enter the decryption password every time I start the offline backups.</p> <figure> <p><img alt="Adding folders in Syncthing" src="" width="100%" style="max-width:600px"/> <figcaption>Adding folders in Syncthing</figcaption></p> </figure> <p>The UI for Syncthing is a website. On Windows, there is a wrapper application, but on my NAS I control it through the website. </p> <p>The basic unit of shares in Syncthing are folders, which are synchronized between computers. When you add a new folder to share, the other computer must accept it, before any bytes are sent over. </p> <figure> <p><img alt="Receiving folders in Syncthing" src="" width="100%" style="max-width:600px"/> <figcaption>Accepting folders on the remote machine</figcaption></p> </figure> <p>Once a folder is added, Syncthing will then start sending data. If it's able to do NAT traversal, it will establish a direct connection between the two computers. Otherwise, it will use a relay to send the data. In my limited experience, it always managed to connect directly. Any changes made will then be synchronized. It's also possible to enable some versioning (but I didn't).</p> <p>When you have lots of data to sync, it's possible to jump start the process by copying the files directly. In my case, I brought the hard drive home, copied the files over to it, and then once it was back at my parents, I set up synchronization. This was a bit wonky, initially it complained about some files, but then it seemed to solve these issues. </p> <p>This solution is better than nothing, but I will keep looking for a better one, one which doesn't require me to manually input a password when starting the backups. If you know anything that works better on Windows, leave a comment below.</p> <div class="footnote"> <hr /> <ol> <li id="fn-1"> <p>Uninterruptible Power Supply (a battery basically)&#160;<a class="footnote-backref" href="" title="Jump back to footnote 1 in the text">&#8617;</a></p> </li> </ol> </div> Sat, 16 Mar 2019 21:56:00 GMT,2019-03-16:/2019/03/16/backing-up-3-syncthing Boardgames Party: Splendor <p><img alt="Splendor game cover" src="" width="100%" style="max-width:600px"/></p> <p>One of the games that we recently played a lot is <a href=";aff_code=de74d8a57&amp;unique=9a6f02fef&amp;redirect_to=https%253A//">Splendor</a> (<a href=";tag=rolisz-20&amp;creative=9325&amp;linkCode=as2&amp;creativeASIN=B00IZEUFIA&amp;linkId=4236262e5afbaede37cca8c7abc0fe82">Amazon link</a>), a game with some really neat tokens, representing precious stones, and where the rich get richer (almost like in real life xD). </p> <figure> <p><img alt="Splendor tokens" src="" width="100%" style="max-width:600px"/> <figcaption>The tokens representing jewels. For some reason, they are really pleasant to handle</figcaption></p> </figure> <p>The objective of the game is to get 15 prestige points. You get prestige points from some cards and from visits from nobles. You buy cards with precious stones. But cards also represent mines, traders or jewelers, which give you more precious stones. So the more cards you have, the easier it is to buy other cards. </p> <figure> <p><img alt="Splendor nobles" src="" width="100%" style="max-width:600px"/> <figcaption>The nobles that come to visit you when you have enough cards</figcaption></p> </figure> <p>There are some constraints on how many precious stones you can have and how you can pick them up. In the beginning of the game, this can lead to a bit of a deadlock if everyone is hoarding resources, but towards the end of the game, most of the resources you need to buy cards will come from existing cards, so you will hardly pick up more tokens. </p> <figure> <p><img alt="Splendor cards" src="" width="100%" style="max-width:600px"/> <figcaption>There are three levels of cards, each worth more prestige points, but which are also more expensive to buy</figcaption></p> </figure> <p>While it's a competitive game, there is not much in the way of player interaction. You only interact indirectly by taking cards that another player might also have wanted, but generally this isn't a big problem, because soon another good card will come for them. You do have to keep an eye on their resources and cards though, to make sure they are not trying to nab the same noble as your are. </p> <figure> <p><img alt="Game setup for 3 players" src="" width="100%" style="max-width:600px"/> <figcaption>Game set up with 3 playesr</figcaption></p> </figure> <p>The game is over when someone reaches 15 prestige points. Sometimes I wish the game lasted longer, because I was one step away from getting that expensive card, which would have then gotten me a visit from a noble and rocketed me to over 20 points. Oh well. </p> <p><img alt="Game holder" src="" width="100%" style="max-width:600px"/></p> <p>One last thing: I really like the holder that comes with the box. Everything fits in there really neatly and is easy to unpack and then pack back up. </p> <p>Score: 9</p> Tue, 26 Feb 2019 21:02:00 GMT,2019-02-26:/2019/02/26/boardgames-party-splendor NAS Outage #1 <dl> <dt>Incident scope</dt> <dd>NAS user not able to access Web Interface for NAS</dd> <dt>Incident duration</dt> <dd>At least 30 hours, up to 72 hours</dd> <dt>Incident resolution</dt> <dd>Change router port </dd> </dl> <p>Last weekend I was not at home. Some time on Saturday afternoon, I wanted to access some of the self hosted services I host on my NAS. I entered the URL and waited. I knew that sometimes the first request takes some time (maybe the NAS powers down the hard disks), so after waiting some time, I just hit refresh. Still nothing. I tried another service. Nothing. I tried all of them. Nothing. I tried going to the IP address of the NAS directly. I get the default page from the web server, which comes up when I don't use the right hostname. </p> <p>Okay, we have a problem. My first suspicion is that the DNS of my domain is broken somehow. I do a DNS query with <code>dig</code>. I freak out a bit when I see two IP addresses there, but after some searching, I find that one of them belongs to my DNS provider and is needed because I have DynamicDNS. I log into my provider, <a href="">Namecheap</a> from whom I bought the domain and who is managing my DNS. Everything looks normal. </p> <p>Then I try to ssh into the NAS. This works pretty well, although it seems to be pretty slow. I try to look around in the logs, nothing suspicious. I restart the nginx server. I restart several other packages on the NAS that I think might have anything to do with this. Nothing. </p> <p>Then I think about trying to run <code>curl</code> to download the main page from my NAS. And lo and behold, I see the HTML of the login page to the Web Interface appear. Okay, let's try again in the browser. After several minutes, the loading stops, but nothing shows up. I checkout the DOM Inspector and indeed things do show up there as well. What? There are no errors in the console, but the network tab does show that everything is really slow. </p> <p>After several hours of investigations, I give up and enjoy my time with my in-laws. I put my SRE hat back on only after I get back home the next day. Unsurprisingly, I still can't connect even from the LAN. It's actually a bit better, because some things open, but it's very flaky. And even more surprisingly, I discovered that I had Monica open on my phone browser and I can navigate it there! What is going on? </p> <p>I had recently moved the NAS to another room and I had tested the speed of my home network with <a href="">iperf3</a>. I decided to test it again. On the NAS I ran the following command: </p> <pre><code>sudo docker run -it --rm -p 5201:5201 networkstatic/iperf3 -s </code></pre> <p>And on my desktop I ran:</p> <pre><code>iperf3 -c -p 5201 -t 30 </code></pre> <p>The first time I tested it, in the first room, it was around 900 Mbits/sec. After I moved it to the other room, it dropped to around 500 Mbits/sec, but I assumed that's because of the lower quality cable that had been placed in the wall. But now, when I ran it again, I got around 40-50 Mbits/sec, sometimes even 0 Mbit/sec for several seconds. I ran the test several times and then I noticed something that looked suspicious: a column called "Retr" with values like "165", "229", "66", "160" in it. "Retr" looks very much like "Retries". My hunch is confirmed when looking in the iperf manual: some TCP packets are being retransmitted, which means I have packets dropped somewhere or packet corruption. </p> <p>Running <code>netstat -i</code> confirms that yes, I have errors only among the received packets. Searching for this issue reveals that the most common issue is a bad cable. I had crimped the Ethernet cable in the other room when I moved the NAS there, so I thought that's the problem. I recrimped it, but no luck. Then I thought that maybe the other end is bad. Nope. Then I tried plugging it into the other empty LAN port in the router. Bam. No more packet retries. Speed between my desktop and NAS is back to 900 Mbits/sec. I can access all the services. Outage over. The problem was a faulty port on my ISP provided router. </p> <p>This was my biggest outage I ever had so far with my NAS. All previous ones were several hours long at best, if the internet went out. I have a UPS, so even short electrical outages don't affect it. I didn't like the router I had from my ISP, but now I'll have an even bigger reason to get it replaced as soon as possible. A lesson I learned from this is that intermittent network errors can cause very weird issues, which can be partially masked because TCP has a lot of redundancies and retries built in.</p> Wed, 30 Jan 2019 23:26:00 GMT,2019-01-30:/2019/01/30/nas-outage-1 Books of 2018 <p>Inspired by many of the posts I saw on the blogosphere about how people did in their reading challenge in 2018, I decided to do a short recap as well.</p> <p>I started 12 books in 2018 and I finished 10 of them. This is unusual for me, because I'm quite picky about what books I start reading and I like to finish what I start. But I couldn't stand the author's style in one the books, even though the topic sounded really interesting (The Sovereignty of God by A.W. Pinker), and I found the other one to be too slow (The Progress of Doctrine in the New Testament by Thomas Dehany Bernard).</p> <div style="float: left; margin-right:20px; margin-bottom: 10px; max-height: 400px"> <a target="_blank" href=";camp=1789&amp;creative=9325&amp;creativeASIN=1785651560&amp;linkCode=as2&amp;tag=rolisz-20&amp;linkId=ee1b96f27cdb5a1dae4f4719f1a9d058"> <img border="0" src="/static/images/2019/01/books/nexus.png"> </a> </div> <p>An interesting shift for me was that I read only one fiction book last year, while before that most of the books that I read were fiction, usually sci-fi. I'm not sure why my tastes have changed like this over the last two years. Maybe I want to get more value out of books, rather than just read for entertainment value? Anyway, I ended last year with a sci-fi book, <a href=";camp=1789&amp;creative=9325&amp;creativeASIN=1785651560&amp;linkCode=as2&amp;tag=rolisz-20&amp;linkId=43ffec31c18ca59e0d08a47aaf542be0">Mass Effect: Nexus Uprising</a>, which I chose because I like the game series (even <a href="">Mass Effect: Andromeda</a>), and I actually liked the book too! It's a prequel to the latest game in the series and provides some pretty nice background information on what happens right upon the Nexus' arrival in Andromeda and how everything went wrong there. Sloane Kelly is fleshed out as a character and you find out some information about Jarun Tann and the Krogan Nakmor clan. One comment I have about the book is that sometimes bad things happen too unexpectedly (a sort of reverse Deus Ex Machina), especially the deterioration of relationships between different people. But still, I can't wait to read the two sequels for the book.</p> <p>Another "unusual" fact was that I read three books in Romanian in 2018. Among my last 50 read books, these are the only 3 ones in Romanian, there is another one in Hungarian and all the others are in English, because I prefer reading in the original language, which is English most of the time. One of these books was <a href=";aff_code=de74d8a57&amp;unique=184f69294&amp;redirect_to=http%253A//">Disconfort Residence</a>, which is a book written by a Romanian architect (so Romanian was the original language), about what to look out for when buying an apartment. This comes in very handy as I'm looking to get my own place. The other two books were borrowed from my housemate: one was Seth Godin's <a href=";aff_code=de74d8a57&amp;unique=184f69294&amp;redirect_to=http%253A//">We're all weird</a>. I liked it, but I prefer Seth's style in English (which I know from reading his blog). And also, "We're all weird" rolls of the tongue better than "Toti suntem ciudati", doesn't it? :D The other one was <a href=";aff_code=de74d8a57&amp;unique=184f69294&amp;redirect_to=http%253A//">The Little Book That Saves Your Assets</a>, about investing. I didn't really like the book, because it recommends a too active approach for investing, while I believe more in a passive, long term one. </p> <div style="float:right; margin-left: 20px; max-height:400px"> <a href=";tag=rolisz-20&amp;camp=1789&amp;creative=9325&amp;linkCode=as2&amp;creativeASIN=9814021725&amp;linkId=f6265f518a607718a92b15885fbd4138" target="_blank"> <img src="/static/images/2019/01/books/unknowable.jpg" height="400px"> </a> </div> <p>I found two books to be very interesting and full of new and challenging ideas for me. The first one was <a href=";tag=rolisz-20&amp;camp=1789&amp;creative=9325&amp;linkCode=as2&amp;creativeASIN=9814021725&amp;linkId=f6265f518a607718a92b15885fbd4138">The Unknowable</a> by Gregory Chaitin, who started the field of algorithmic information theory and made contributions to metamathematics. The book describes how you cannot find the shortest program that writes out a given string, which is one of the significant provably improvable facts in mathematics and computer science, after Godel's Incompleteness Theorem and Turing's Halting Problem. While I kinda understood the proof Chaiting presents here in layman's terms, I still find it hard to believe sometimes. The description of the problem is very simple, yet Chaitin builds up a fairly short proof that you cannot calculate it for arbitrary string. This problem, in turn, is related to a number Chaitin discovered, which can be described mathematically and several of its properties are known, but it's still uncomputable. And not just because we don't know how to compute it, but we actually know that it's impossible to do so by anyone in this universe. The question is then can God do it?</p> <p>The other thought-provoking one is the <a href=";camp=1789&amp;creative=9325&amp;creativeASIN=019932218X&amp;linkCode=as2&amp;tag=rolisz-20&amp;linkId=72ffb09de99e92e8b884f9d01869e1cf">Economics of Good and Evil</a>. The book does a whirlwind tour of economics, starting with the Book of Gilgamesh, the Bible, ancient Greeks, medieval times to modern days, and shows how even in an epic story like the one about Gilgamesh, you can find economic reasoning, especially one related to what's good and what's evil. The author, who used to be the economic advisor to the Czech president, questions the current prevailing mindset that growth must happen at all costs, because anything else is bad. </p> <div style="float:left; margin-right: 20px; max-height:400px; margin-bottom: 10px"> <a href=";tag=rolisz-20&amp;camp=1789&amp;creative=9325&amp;linkCode=as2&amp;creativeASIN=0764216171&amp;linkId=f16f59728858f6226d52b8c69d1bebef" target="_blank"> <img src="/static/images/2019/01/books/faith.jpg" height="400px"> </a> </div> <p>The other books that I read were Christian books. Two of them stand out: <a href=";camp=1789&amp;creative=9325&amp;creativeASIN=0310517826&amp;linkCode=as2&amp;tag=rolisz-20&amp;linkId=41111829c2b6610e989156b12c8d8fa2">How to Read the Bible for All Its Worth</a> by Gordon Fee and Douglas Stuart. The book is exactly about what the title says: to help people read the Bible better, by providing some necessary "lenses" with which to understand the text. It explains how different books of the Bible have different styles, which means they need to be read differently. For example, you don't read poems, such as the Psalms, in the same way as you read a letter, like the Epistles of Paul, or like you read the narratives from the Old Testament. I loved this book and I try to put it into practice as often as I can, while doing my daily devotional reading. The other Christian book that I loved was <a href=";tag=rolisz-20&amp;camp=1789&amp;creative=9325&amp;linkCode=as2&amp;creativeASIN=0764216171&amp;linkId=f16f59728858f6226d52b8c69d1bebef">A Disruptive Faith</a> by A.W. Tozer. What he says in the first chapter stands out for me, how we are a fixture on God's mind and that He cannot not think about us. He loves us, despite our frailty and sin and he is grieved by our bad actions. He is crushed by this burden. And that's what drives his actions, not some cold calculated plan to fulfill his purpose. The rest of the book just expands on this :)</p> <p>This was a short review of some of the books that I read last year. I hope this year I will be able to read more!</p> Mon, 14 Jan 2019 09:36:00 GMT,2019-01-14:/2019/01/14/books-of-2018 Man (and car) versus nature 2 <p><img alt="View from the hike" src="" width="100%" style="max-width:600px"/></p> <p>Almost <a href="">a year later</a>, I went again on a winter hike, with the same group of friends, to the "Biserica Moțului" Peak, close to Padiș. This time I was one of the drivers, so I went with our little Skoda, with 3 other guys. </p> <figure> <p><img alt="The church at the peak" src="" width="100%" style="max-width:600px"/> <figcaption>The Moțului Church at the peak</figcaption></p> </figure> <p>Because this hike was shorter, we decided it's enough if we leave one hour later than last time. It was a very good decision, which would have been better if we had left one more hour later. </p> <p>The evening before we left, it started snowing. We decided that we will still go, no matter what. The road until Boga, 15 kilometers away from Padis, was ok. There we ran into the snow plower, which was going in front of us. At some point, it let us go ahead. The other car from our group was an all wheel drive Touareg, so they forged right ahead and I followed in their tracks.</p> <figure> <p><img alt="Following the snow plow" src="" width="100%" style="max-width:600px"/> <figcaption>Following the snow plow</figcaption></p> </figure> <p>But, the snow and the slope was too much for the little Skoda Fabia. After less than 500 meters, it just couldn't continue, so the guys pushed the car to the side and we waited for the snow plow. We finished the last 9.2 kilometers to Padis in one and a half hours. Behind us we would see other cars catching up to us and then turning back when they saw the glacial pace in which we were moving. </p> <figure> <p><img alt="Closed road sign" src="" width="100%" style="max-width:600px"/> <figcaption>The road is closed!</figcaption></p> </figure> <p>Once we got to Padis, we started the actual hike. The visibility was not too great, so in the first kilometer we did some zig zagging until we found the "path", which was under 1 meter of snow. Or so the GPS said. </p> <p>The hike was easier and shorter than last years, but the end was much harder for me. While I complained last year that the snow kept breaking under us and we would fall in knee deep, this year was worse. I gained 4 extra kilos, so the snow would give in until I was waist deep. And it's much, much, much harder to climb out when you are so deep and the snow keeps collapsing with you. I made a third of the last 100 metres mostly crawling. </p> <p><img alt="Closed road sign" src="" width="100%" style="max-width:600px"/></p> <p>But I survived and the hike back was much easier, unlike last year! And I still want to repeat this!</p> Sun, 06 Jan 2019 16:32:00 GMT,2019-01-06:/2019/01/06/man-and-car-versus-nature-2 2018 in Review <p>In 2018 I finally managed to buck the trend of writing fewer and fewer posts: I wrote 22 posts, just like in the previous year! That's a bit less than what I would have liked (at least two a month), but personal life keeps getting busier and busier. </p> <p>The number of sessions continued dropping, by almost 30%, down to 10000. Pageviews dropped a bit below 20000, but session length grew by 6%. </p> <p>The day with the most pageviews was the 1st of February, with 369 views, when I posted about <a href="">leaving Google</a>. The second most popular day was October 17, after I posted about our trip to <a href="">Hong Kong</a>, when I had 285 page views. </p> <p>My most popular page remains the same: the neural networks one. From this year, the most popular one was the one about leaving Google, with 442 views, followed by the <a href="">Synology and Docker</a> one, with 379 views. </p> <p>I hope I will manage to get an increase in numbers next year. I have quite a few ideas, so I hope I can write more blog posts, both more fun ones and more technical ones, and who knows, maybe I'll even have a guest writer :)</p> Tue, 01 Jan 2019 01:46:00 GMT,2019-01-01:/2019/01/01/2018-in-review Boardgames Party: Sushi Go <p><img alt="Sushi Go box" src="" width="100%" style="max-width:600px"/></p> <p>This year I caught the bug of boardgames. I bought a lot of them, I tried a lot of them and I played some a loooot of times. My lovely wife also enjoys this hobby very much, so we often have friends over to play various boardgames. Almost all of our friends enjoy playing boardgames, I even managed to convince my parents to play once, but my dad confessed that he just... doesn't see the point in playing any kinds of games. </p> <p>I want to start reviewing some of the boardgames in my collection. Today I will start with <a href=";aff_code=de74d8a57&amp;unique=184f69294&amp;redirect_to=http%253A//">Sushi Go</a> (<a href=";camp=1789&amp;creative=9325&amp;creativeASIN=B00J57VU44&amp;linkCode=as2&amp;tag=rolisz-20&amp;linkId=184d1eeb866051ca1ea355ddd4085cd9">Amazon</a> link), a very simple and quick card game which revolves around sushi, obviously. </p> <p><img alt="A hand of cards in Sushi Go" src="" width="100%" style="max-width:600px"/></p> <p>Every player gets six cards and they have to choose one, passing the others to the player on their left, and then repeat. In this way, you build a set of six cards which will give you points in the end. </p> <p>However, you have to be careful, because some cards only give points if they are in pairs (such as tempura), if you have the most of them, or if they are combined with something else. </p> <div class="gallery clearfix" style="max-width:600px"> <script type="application/json">[]</script> </div> <p>It's a very quick game, not taking more than 15 minutes. Explaining is also easy. With everyone learning the game, it took 5 minutes to read and explain the rules, the next time it will probably take only 2 minutes. </p> <p>Score: 9</p> <p>And as an added bonus, it's about Sushi, which I really love and somehow, after lots of persuasion, my wife also came to love! And I want to give a shoutout to <a href="">Sushi 101</a>, the best sushi place in Oradea! </p> <p><img alt="Sushi plate from Sushi 101" src="" width="100%" style="max-width:600px"/></p> Sun, 30 Dec 2018 00:38:00 GMT,2018-12-30:/2018/12/30/boardgames-party-sushi-go Synology Moments <p><img alt="First pictures" src="" width="100%" style="max-width:600px"/></p> <p>I have almost 60000 pictures (about 195 GB), going back to about 2007 and I like to keep things organized. Of course, I also don't want to manually tag 60000 pictures. Until last year, the only option to avoid that was Google Photos, which would automatically recognize objects, locations and faces in pictures and give you the option to search by them. But Google Photos has the downside that you have to upload all your pictures to a 3rd party and that you have to pay a monthly fee for that storage. </p> <p>Well, at the end of last year, Synology (the company that makes <a href="">my NAS</a>) launched a beta for Synology Moments, an app that does exactly what I want: it takes all my pictures, analyzes them with deep learning, and gives me a nice UI to search and browse them, by object, location or faces.</p> <p><img alt="Object browsing" src="" width="100%" style="max-width:600px"/></p> <p>While it was in beta, Moments had some issues, but they have since been resolved (or at least the documentation has been made clearer about those issues). In the last half a year it has worked well for me, which is why I'm finally writing this post.</p> <p>One of the quirks of Moments is that photos have to be in a certain folder and you can't specify multiple folders all over the disk to be indexed. Some people have had luck with symlinks, but I just copied everything to one folder and that's it. It means I have a little bit of duplication (for example, between my automatic backups from Google Drive and the ones from Moments), but I still have pleeenty of space in my RAID6 array, so it's fine. </p> <p>The server that does all the heavy lifting lives on my NAS, but Moments also has mobile apps, for both Android and iOS, which enable you to automatically backup every photo and video that you take to the server. The same apps also allow you to search and browse your gallery of pictures, in almost every way as the web app (except that you don't have a folder view). </p> <p><img alt="Face clustering" src="" width="100%" style="max-width:600px"/></p> <p>The clustering of faces (the process where it tries to group faces that it thinks belong to the same person) is not as good as the one that Google Photos has. I spent several hours merging clusters that were of the same person, but Moments thought were of different persons. </p> <p>The object recognition part is pretty good, but that's something I use much less frequently, so I don't notice as many errors. </p> <p>Moments also does reverse geocoding, so it tries to identify where every picture was taken, from GPS coordinates in EXIF metadata, and then it shows them around the pictures.</p> <p><img alt="Timeline" src="" width="100%" style="max-width:600px"/></p> <p>The backup works flawlessly so far from my phone. For pictures I take from my camera, I only save them here. Pictures made with my phone are backed up to both Google Photos and Moments. </p> <p>One of the biggest downsides for Moments is it's availability: it works only on Synology NAS devices, so if you don't have one of these devices, you can't get it :(</p> <p>I am really happy that I found this app to organize all my photos, on a device that is under my control, so I strongly recommend it!</p> Sun, 16 Dec 2018 21:03:00 GMT,2018-12-16:/2018/12/16/synology-moments Blogs I follow - part 2 <p>After a <a href="">year</a>, prompted by a question Catalin asked me, I finally made time to write about a couple more great writers I follow.</p> <dl> <dt><a href="">Seth Godin</a></dt> <dd>Seth does many things, but he is mainly a marketing person. However, he doesn't do marketing in the annoying, in your face spammy way, but in a thoughtful, creative way. Instead of trying to go for the masses, to appeal to everyone, to bring the product to the lowest common denominator, he tries to broaden the market, to find new people, to win people over by quality, not by the lowest price and by having an eye on the long term. I have too many posts from him saved in Wallabag (about which I'll write at another time), so here are two: <a href="">Avoiding the GIGO trap</a> and <a href="">What would happen</a>.</dd> <dt><a href="">DataGenetics</a></dt> <dd>DataGenetics is a blog written by Nick Berry, a data scientist. On his blog, he tackles a lot of interesting questions, with lots of math and physics. I enjoy trying to work out solutions before reading his post. Some of my favorites are about <a href="">Kolomogorov randomness</a> (which is necessary for the whole algorithmic randomness concept), <a href="">Wind Turbine Efficiency</a> and <a href="">Cake Cutting</a>.</dd> <dt><a href="">Itchy Feet</a></dt> <dd>It's not a blog per se, but it's a comic I follow via RSS, so meh. It speaks to my heart, given that my feet are also itching to travel, because I haven't flown since September :( I have actually met the author while at Google and I have one of his books with! He's really nice. Some of my favorite comics from him: <a href="">Slovakia vs Slovenia</a>, <a href="">Relatively inclined</a> and <a href="">Sedentary Workout</a> (the last two I've experienced myself).</dd> </dl> Fri, 30 Nov 2018 23:15:00 GMT,2018-11-30:/2018/11/30/blogs-i-follow-part-2 Monitoring GPU usage with StackDriver <p>At work we use Google Cloud Platform to run our machine learning jobs on multiple machines. GCP has a monitoring platform called Stackdriver which can be used to view all kinds of metrics about your VMs. Unfortunately, it doesn't collect any metrics about GPUs, neither usage or memory. The good news is that it is extensible and you can "easily" set up a new kind of metric and monitor it. </p> <p>To get GPU metrics, we can use the <code>nvidia-smi</code> program, which is installed when you get all the necessary drivers for your graphics card. If you call it simply, it will give you the following output:</p> <pre class="highlight"><code>&gt; nvidia-smi +-----------------------------------------------------------------------------+ | NVIDIA-SMI 410.66 Driver Version: 410.66 CUDA Version: 10.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 108... Off | 00000000:01:00.0 On | N/A | | 0% 43C P8 17W / 250W | 1309MiB / 11177MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 700 G /usr/lib/Xorg 40MiB | | 0 733 G /usr/bin/gnome-shell 110MiB | | 0 931 G /usr/lib/Xorg 371MiB | | 0 1119 G /usr/lib/firefox/firefox 2MiB | | 0 1279 G /usr/lib/firefox/firefox 3MiB | | 0 23585 G /usr/lib/firefox/firefox 24MiB | +-----------------------------------------------------------------------------+</code></pre> <p>This is a bit convoluted, hard to parse and has too many details. But, with the right flags, you can get just what you want in CSV format: </p> <pre class="highlight"><code>&gt; nvidia-smi --query-gpu=utilization.gpu,utilization.memory --format=csv,noheader,nounits 10,35</code></pre> <p>The first value is the GPU utilization, as a percentage, and the second value is the memory usage of the GPU, also as a percentage.</p> <p>We are going to write a Python process that open a subprocess to call nvidia-smi once a second and aggregates statistics, on a per minute basis. We have to do this, because we cannot write to Stackdriver metrics more than once a minute, per label (which are a sort of identifier for these time series). </p> <pre class="highlight"><code class="language-python">from subprocess import Popen, PIPE import os import time import sys def compute_stats(): all_gpu = [] all_mem = [] for i in range(10): p = Popen([&quot;nvidia-smi&quot;,&quot;--query-gpu=utilization.gpu,utilization.memory&quot;, &quot;--format=csv,noheader,nounits&quot;], stdout=PIPE) stdout, stderror = p.communicate() output = stdout.decode('UTF-8') # Split on line break lines = output.split(os.linesep) numDevices = len(lines)-1 gpu = [] mem = [] for g in range(numDevices): line = lines[g] vals = line.split(', ') gpu.append(float(vals[0])) mem.append(float(vals[1])) all_gpu.append(gpu) all_mem.append(mem) time.sleep(1) max_gpu = [max(x[i] for x in all_gpu) for i in range(numDevices)] avg_gpu = [sum(x[i] for x in all_gpu)/len(all_gpu) for i in range(numDevices)] max_mem = [max(x[i] for x in all_mem) for i in range(numDevices)] avg_mem = [sum(x[i] for x in all_mem)/len(all_mem) for i in range(numDevices)] return max_gpu, avg_gpu, max_mem, avg_mem</code></pre> <p>Here we computed both the average and the maximum over a 1 minute interval. This can be changed to other statistics if they are more relevant for your use case. </p> <p>To write the data to Stackdriver, we have to build up the appropriate protobufs. We will set two labels: one for the zone in which are machines are and one for the <code>instance_id</code>, which we will hack to contain both the name of the machine and the number of the GPU (this is useful in case you attach multiple GPUs to one machine). I hacked the <code>instance_id</code> because Stackdriver kept refusing any API calls with custom labels, even though the docs said it supported them. </p> <pre class="highlight"><code class="language-python">from import monitoring_v3 client = monitoring_v3.MetricServiceClient() project = 'myGCPprojectid' project_name = client.project_path(project) def write_time_series(name, gpu_nr, value): series = monitoring_v3.types.TimeSeries() series.metric.type = '' + name series.resource.type = 'gce_instance' series.resource.labels['instance_id'] = sys.argv[1] + &quot;_gpu_&quot; + str(gpu_nr) series.resource.labels['zone'] = 'us-central1-f' point = series.points.add() point.value.double_value = value now = time.time() point.interval.end_time.seconds = int(now) point.interval.end_time.nanos = int( (now - point.interval.end_time.seconds) * 10**9) client.create_time_series(project_name, [series])</code></pre> <p>And now, we put everything together. The program must be called with a the name of the instance as a first parameter. If you run it only on GCP, you can use the GCP APIs to get the name of the instance automatically.</p> <pre class="highlight"><code class="language-python">if len(sys.argv) &lt; 2: print(&quot;You need to pass the instance name as first argument&quot;) sys.exit(1) try: max_gpu, avg_gpu, max_mem, avg_mem = compute_stats() for i in range(len(max_gpu)): write_time_series('max_gpu_utilization', i, max_gpu[i]) write_time_series('max_gpu_memory', i, max_mem[i]) write_time_series('avg_gpu_utilization', i, avg_gpu[i]) write_time_series('avg_gpu_memory', i, avg_mem[i]) except Exception as e: print(e)</code></pre> <p>If you save all this code to a file called <code></code> and you run this locally, on a machine with an NVidia GPU, after a minute you should start seeing the new metrics in your Stackdriver console associated with your GCP project.</p> <p><img alt="Stackdriver GPU graphs" src="" width="100%" style="max-width:600px"/></p> <p>This code can then be called with cron once a minute or it can be changed so that it runs without stopping, posting results once a minute. </p> <pre class="highlight"><code>* * * * * python /path/to/ instance_name &gt;&gt; /var/log/gpu.log 2&gt;&amp;1</code></pre> <p>Setting up the GCP project and authentication to connect to Stackdriver is left as an exercise to the user. The whole code can be seen in this <a href="">gist</a>.</p> Wed, 21 Nov 2018 16:06:00 GMT,2018-11-21:/2018/11/21/monitoring-gpu-usage-with-stackdriver Epistaxis <p><q>hemorrhage from the nose, usually due to rupture of small vessels overlying the anterior part of the cartilaginous nasal septum. Minor bleeding may be caused by a blow on the nose, irritation from foreign bodies, or vigorous nose-blowing during a cold</q></p> <p style="text-align:right"> <a href="">The Free Dictionary</a> </p> <p>Since I was a little kid I would sometime have nose bleeds, especially when I had a cold and would blow my nose a lot. I recently actually started tracking this, and it seems to happen every 2-3 months, but until now, the bleeding stopped in half an hour or one hour at most.</p> <p>But on Saturday, it didn't. It started around 7 AM. It stopped 2-3 times, but it resumed at the smallest effort (like getting up). I tried pinching my nose, laying down, standing up and tilting my head forward and other things I found on the internet, but the bleeding continued. </p> <p>After about four hours, I decided to go to the ER. I was a bit scared, knowing that probably they would do a nasal cauterization to close off all the capillaries that keep breaking. I was also scared because it was my first visit to the ER and my first more "serious" thing that needed treatment at a hospital. And, because of my awesome bubble that I live in on Facebook, I was also a bit scared about nosocomial infections<sup id="fnref-nosocomial"><a class="footnote-ref" href="">1</a></sup>, which have made several headlines lately in Romania. Even the day before I heard from some friends about how long they had to wait at the ER and how rude the doctors were.</p> <p>But I have to say, I was mostly pleasantly surprised. The nurses and the doctors at the ER were very nice, calm and friendly. The wait times were quite short. After I got my blood pressure measured, I was sent upstairs to the ENT section. After a short wait here, the doctor passed by me on the hall, barely looking at me, and told the nurse to prep me for cauterization. Here things weren't quite as nice, the doctor seemed particularly bored of doing this, but the actual cauterization didn't take more than half a minute and it wasn't that painful! Well, I had my nose stuffed with anesthetics just a minute before, but still. Then the doc stuffed my nose with nasal packing, told me to come back in 5 days to take it out and sent me on my way. </p> <p>So, I got over my first "intervention" at a hospital and hopefully I fixed the nose bleeding problem for a while! Go Spitalul Județean Oradea!</p> <div class="footnote"> <hr /> <ol> <li id="fn-nosocomial"> <p>hospital acquired infections&#160;<a class="footnote-backref" href="" title="Jump back to footnote 1 in the text">&#8617;</a></p> </li> </ol> </div> Mon, 05 Nov 2018 22:05:00 GMT,2018-11-05:/2018/11/05/epistaxis