<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on A Foo walks into a Bar... - blog by Paul Shved - coldattic.info</title>
    <link>https://coldattic.info/post/</link>
    <description>Recent content in Posts on A Foo walks into a Bar... - blog by Paul Shved - coldattic.info</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Mon, 20 Mar 2023 22:26:00 -0700</lastBuildDate>
    
	<atom:link href="/post/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Turing Test Needs an Update, or: How ChatGPT Ran a Test on Me</title>
      <link>https://coldattic.info/post/129/</link>
      <pubDate>Mon, 20 Mar 2023 22:26:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/129/</guid>
      <description>Briefly: ChatGPT, a chat app based on a large language model, has opened the floodgates of experiments, media attention, robots-taking-our-jobs scares, generative AI startups, and inventive, lighthearted play.
Out of curiosity, I got ChatGPT to run a Turing Test&amp;hellip; on itself and on me (and on some other chatbots) and try to guess if it&amp;rsquo;s talking to a bot. ChatGPT easily figured out who the older bots were, but failed miseably on itself and Bing Chat, while also classifying me as a machine 50% of the time.</description>
    </item>
    
    <item>
      <title>Tidbyt: Someone&#39;s Making the Muni Sign!</title>
      <link>https://coldattic.info/post/128/</link>
      <pubDate>Mon, 06 Sep 2021 22:15:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/128/</guid>
      <description>I had my first &amp;ldquo;Silicon Valley&amp;rdquo; moment about 8 years ago. After I hacked together the Muni Sign, I mostly got some mentions on a variety of hacker websites. Then, some kind Muni employees invited me to do a tour of the headquarters and bought me a beer. And of course, I received a couple of orders to make a sign for someone&amp;rsquo;s living room and a bar in England (regretfully, I had to pass).</description>
    </item>
    
    <item>
      <title>How to Literally Ask Neural Network for Help and Watch It Deliver</title>
      <link>https://coldattic.info/post/126/</link>
      <pubDate>Mon, 29 Jun 2020 19:42:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/126/</guid>
      <description>This is one of the small fun things I&amp;rsquo;ve learned while working on writing a face detector from scratch for the v2 of the Smiling Bot.
Single-Shot Detector, like many other detectors, employs Non-Maximum Suppression at inference. Usually, it&amp;rsquo;s implemented using a greedy algorithm: sort all boxes by detection confidence, take the top, discard overlapping, repeat.
So I noticed in my model, the box with the highest detection confidence was not the box that had the best fitting offsets.</description>
    </item>
    
    <item>
      <title>Writing Neural Face Detector from Scratch (sneak peek)</title>
      <link>https://coldattic.info/post/125/</link>
      <pubDate>Mon, 29 Jun 2020 16:30:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/125/</guid>
      <description>After working on perception models at late-stage startup, I realized there are large parts of these models I didn&amp;rsquo;t even touch and didn&amp;rsquo;t know existed. These pieces were working well, so why touch them? Naturally, this means I&amp;rsquo;m missing out on education opportunities one could only get when implementing something from scratch. (That&amp;rsquo;s partly why I want to join a younger startup today).
What to work on? I remembered there&amp;rsquo;s something I could improve on my smiling bot:</description>
    </item>
    
    <item>
      <title>Why Fast Models are Destined to have a CPU Training Bottleneck</title>
      <link>https://coldattic.info/post/123/</link>
      <pubDate>Wed, 27 May 2020 21:29:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/123/</guid>
      <description>I was working on fixing the problem with a slow two-stage detector in my Smiling Robot by writing a faster deep detector from scratch. There&amp;rsquo;s ample research on fast detectors, but feature preprocessing for those is really complicated.
TensorFlow 2.0&amp;rsquo;s Dataset API has been pretty pleasant to use. It offers basic declarative API to transform and shuffle feature vectors, and its batch balancing functionality is a godsend (I implemented batch balancing without it, but now you can get that with 5 lines of code).</description>
    </item>
    
    <item>
      <title>I&#39;m now Stanford-Certified with a Non-Degree Certificate</title>
      <link>https://coldattic.info/post/122/</link>
      <pubDate>Sun, 09 Feb 2020 10:00:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/122/</guid>
      <description>Would you like to dig deep into Deep Learning, but don&amp;rsquo;t know where to start?
Do you want to work on Artificial Intelligence, but fear you don&amp;rsquo;t have enough intelligence?
Trying to remember what Stochastic Gradient Descent is, but can&amp;rsquo;t because you&amp;rsquo;ve graduated long time ago?
And finally, can you only find motivation for Learning when you&amp;rsquo;re being Supervised?
Rejoice! You can get this all and more from a certain service&amp;hellip; It&amp;rsquo;s called Grad School and it&amp;rsquo;s available for hire.</description>
    </item>
    
    <item>
      <title>The Blog Turns... 10 Years!</title>
      <link>https://coldattic.info/post/120/</link>
      <pubDate>Sat, 30 Nov 2019 23:40:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/120/</guid>
      <description>Today is 10 years since I wrote the first post for my blog. Ten. Freaking. Years. It&amp;rsquo;s almost hard to believe that I had something remotely meaningful happen in my life 10 years ago.
  So.. uhm, what else do I say? When I started this blog, I had still been living in Russia; writing about programming in English was a strange choice many questioned. I&amp;rsquo;m glad that I started it that way.</description>
    </item>
    
    <item>
      <title>Lessons from a Smiling Bot, III: Customers don&#39;t Care it&#39;s Hard</title>
      <link>https://coldattic.info/post/119/</link>
      <pubDate>Fri, 29 Nov 2019 16:07:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/119/</guid>
      <description>Other lessons from a Smiling Bot The lessons I&amp;rsquo;ve learned when building a Smiling Bot: an embedded CNN model for the deep learning for Visual Recognition course at Stanford.
 Lesson I: Training/Serving Skew, Second Opinion, CSV-based ML Infra Lesson II: Get Features from Production Lesson III: Customers don&amp;rsquo;t Care it&amp;rsquo;s Hard   There was this woman I really liked, and I needed to show off in some way.</description>
    </item>
    
    <item>
      <title>Lessons from a Smiling Bot, II: Get Features from Production</title>
      <link>https://coldattic.info/post/118/</link>
      <pubDate>Sun, 01 Sep 2019 13:13:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/118/</guid>
      <description>Other lessons from a Smiling Bot The lessons I&amp;rsquo;ve learned when building a Smiling Bot: an embedded CNN model for the deep learning for Visual Recognition course at Stanford.
 Lesson I: Training/Serving Skew, Second Opinion, CSV-based ML Infra Lesson II: Get Features from Production Lesson III: Customers don&amp;rsquo;t Care it&amp;rsquo;s Hard   The Smiling Bot I made for CS231n was performing okay, at least on paper. 40% recall at 70% precision for smile detection is not disasterous for an &amp;ldquo;embedded&amp;rdquo; model.</description>
    </item>
    
    <item>
      <title>Lessons from a Smiling Bot, I: Training/Serving Skew, Second Opinion, CSV-based ML Infra</title>
      <link>https://coldattic.info/post/117/</link>
      <pubDate>Sun, 21 Jul 2019 09:51:30 +0500</pubDate>
      
      <guid>https://coldattic.info/post/117/</guid>
      <description>Most Machine Learning courses at Stanford require coming up with a relevant project and delivering it before the course deadline. For the courses I&amp;rsquo;ve passed earlier, I&amp;rsquo;ve built a similarity-based wine search algorithm and an automatic Advertisement generator. For the most recent course, deep learning for Visual Recognition, I&amp;rsquo;ve made a Smiling Bot: a Raspberry Pi device that detects when you smile and&amp;hellip; smiles back.
Other lessons from a Smiling Bot The lessons I&amp;rsquo;ve learned when building a Smiling Bot: an embedded CNN model for the deep learning for Visual Recognition course at Stanford.</description>
    </item>
    
    <item>
      <title>What is the gradient of broadcasting?</title>
      <link>https://coldattic.info/post/116/</link>
      <pubDate>Sat, 29 Jun 2019 09:51:30 +0500</pubDate>
      
      <guid>https://coldattic.info/post/116/</guid>
      <description>&amp;ldquo;What is the gradient of numpy broadcasting?&amp;rdquo; I was wondering the other night. It&amp;rsquo;s almost midnight, my brain is tired, and I got a bit stuck.
In short&amp;hellip; In numpy, broadcasting is adding a one-dimentional vector b2 to a 2-D matrix X, which implicitly adds b2 to every row of X.
 To compute the derivative of the result over b2 (let&amp;rsquo;s call it g), we rewrite the expression as matrix multiplication.</description>
    </item>
    
    <item>
      <title>Traffic IV: How to Save 10 Minutes on your Commute, or the Mystery of the 101-92 Interchange</title>
      <link>https://coldattic.info/post/115/</link>
      <pubDate>Sun, 21 Apr 2019 20:35:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/115/</guid>
      <description>Driving on a highway is like picking stocks. There are multiple lanes, and as we established earlier, one of them is just faster than the others. Drivers take notice; they move into the lane just like the stock market players “move into” the stock of a promising company, buying its shares.
Then, the same thing happens as in the stock market: as more cars occupy the lane, it becomes more congested, and it slows down.</description>
    </item>
    
    <item>
      <title>I de-lid Core i7 9700k and I have no idea if it was worth it</title>
      <link>https://coldattic.info/post/114/</link>
      <pubDate>Mon, 15 Apr 2019 23:52:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/114/</guid>
      <description>My old CPU was up for an upgrade (I&amp;rsquo;ve had it for 5 years), so I&amp;rsquo;ve built a new one. And since I&amp;rsquo;ve been studying Machine Learning, I needed way more computing power than I had.
When overclocking my system, I &amp;ldquo;de-lid&amp;rdquo; (&amp;ldquo;de-lidded&amp;rdquo;?) my CPU, replaced the thermal paste, upgraded to liquid cooling&amp;hellip; What did I gain? Well, I have no freaking clue since I did not measure performance before statring.</description>
    </item>
    
    <item>
      <title>Spring Break!</title>
      <link>https://coldattic.info/post/113/</link>
      <pubDate>Sun, 07 Apr 2019 18:39:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/113/</guid>
      <description>This post is superseded by a more exhaustive &amp;ldquo;I&amp;rsquo;m now Stanford Official&amp;rdquo; which you should read instead. This post was just a short update halfway through the program.
 One might notice that the posts in my blog kind of follow the school schedule. Last time I posted around Christmas, and this post was written at the end of March. Well, that’s because I am on a spring break.
I’ve enrolled in a Stanford Graduate education program on Artificial Intelligence through SCPD, Stanford Center for Professional Development.</description>
    </item>
    
    <item>
      <title>Traffic III: Why doesn&#39;t Changing Lanes Always Work?</title>
      <link>https://coldattic.info/post/112/</link>
      <pubDate>Thu, 10 Jan 2019 21:55:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/112/</guid>
      <description>Recall in the previous post, the lanes with more traffic flow (with more cars per minute passing a certain point) back up more when there&amp;rsquo;s congestion. This can be summarized by the following picture:
  The pressing question from that post was, why not just change lanes to the faster one, as you&amp;rsquo;re approaching the congestion?
Series on Car Traffic modeling Inspired by my almost daily commute on California Highway 101, I explored the achievements of traffic theory and found answers to the most pressing mysteries of my commute.</description>
    </item>
    
    <item>
      <title>Traffic II: Why does the Fast Lane become Slowest in Traffic?</title>
      <link>https://coldattic.info/post/111/</link>
      <pubDate>Wed, 02 Jan 2019 12:30:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/111/</guid>
      <description>As I drive up to San Francisco from one of the freeways (either 101 or 280), I&amp;rsquo;m approaching the inevitable traffic stoppage. The freeway is clogged and it seems I&amp;rsquo;m up for a 15 minutes in bumper-to-bumper traffic, wishing I had a self-driving car.
But wait, what is it? Why am I stopped and everyone else keeps going? Could it be just another example of the Why is the Other Lane Always Faster?</description>
    </item>
    
    <item>
      <title>Traffic I: Why is the Other Lane Always Faster?</title>
      <link>https://coldattic.info/post/110/</link>
      <pubDate>Sun, 23 Dec 2018 22:15:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/110/</guid>
      <description>&amp;ldquo;This highway has four lanes. One of them is the fastest, and there&amp;rsquo;s a 75% chance we&amp;rsquo;re not in it.&amp;quot;
 Last year, I switched from the Google office in San Francisco, next to where I live, to the Mountain View office. In search of more interesting projects and better career prospects, I repeated the move towards the company headquarters many engineers make. But it comes with a price. The 101.</description>
    </item>
    
    <item>
      <title>I tricked the Amazon Go store</title>
      <link>https://coldattic.info/post/109/</link>
      <pubDate>Tue, 14 Aug 2018 22:00:00 -0700</pubDate>
      
      <guid>https://coldattic.info/post/109/</guid>
      <description>I tricked the Amazon Go store.
It&amp;rsquo;s not hard. You need an accomplice. The accomplice swaps two items on the shelf. You take one of the misplaced items. You get charged for the other. But that&amp;rsquo;s not the point
Mechanical Turk? Two days ago, I was on a trip to Seattle, and of course I visited the Amazon Go Store. If you are out of the loop, it&amp;rsquo;s a store without checkout.</description>
    </item>
    
    <item>
      <title>Take Apart that Giant Case: A Compact, 1.5kg Thunderbolt3 eGPU Setup</title>
      <link>https://coldattic.info/post/108/</link>
      <pubDate>Tue, 19 Jun 2018 20:23:30 -0700</pubDate>
      
      <guid>https://coldattic.info/post/108/</guid>
      <description>A Thunderbolt 3 external GPU setup that doesn&amp;rsquo;t weigh 7 pounds (3kg)? Is it even possible? Of course it is, but you&amp;rsquo;ll need to do some simple tinkering. This post describes how you can do it in a couple of hours if you&amp;rsquo;re so inclined. You too can loose 4lbs off your Thunderbolt 3 eGPU within a day!
  This is a Thunderbolt3-enabled DIY setup based on the Thunderbolt3-enabled components sourced from Akitio Node Pro (this and other Amazon links are affilliate).</description>
    </item>
    
    <item>
      <title>Containers on Amazon made easy: AWS Elastic Beanstalk Speed Run</title>
      <link>https://coldattic.info/post/107/</link>
      <pubDate>Thu, 15 Feb 2018 22:00:00 +0000</pubDate>
      
      <guid>https://coldattic.info/post/107/</guid>
      <description>In the previos post, I described why I chose Amazon AWS elastic Beanstalk for this blog. AWS Elastic Beanstalk (EBS) is the way to deploy Docker containers on the autoscaled Amazon Cloud with zero setup. It&amp;rsquo;s similar to App Engine Flexible Environment, but slower and harder to use. But how do you actually use it?
This post contains a speed run of setting up AWS Elastic Beanstalk. It&amp;rsquo;s easy to lose your way in AWS documentation, and I hope I can make it easy for you here.</description>
    </item>
    
    <item>
      <title>This blog is now a Hugo-powered static website on AWS Elastic Beanstalk</title>
      <link>https://coldattic.info/post/106/</link>
      <pubDate>Thu, 15 Feb 2018 21:00:00 +0000</pubDate>
      
      <guid>https://coldattic.info/post/106/</guid>
      <description>Ten years ago, I thought this website should be a content platform with video hosting, blog platform, and other cool things. It was an essential learning experience: I&amp;rsquo;ve chased performance bugs and reinvented highload wheels. Today, armed with several years of Industry Experience™, I am ready to present the highest-grade advice of a seasoned web engineer.
The right architecture for this blog is a set of static webpages served off of a file system by a simple web server such as Apache or nginx.</description>
    </item>
    
    <item>
      <title>A Farewell to Gentoo</title>
      <link>https://coldattic.info/post/105/</link>
      <pubDate>Thu, 25 Jan 2018 05:56:00 +0000</pubDate>
      
      <guid>https://coldattic.info/post/105/</guid>
      <description>As I mentioned in my previous post, the previous version of this blog ran on a VM powered by Gentoo Linux. Partly, that was the reason it was such a big mess and frankly, a security hazard.
You see, I&amp;rsquo;ve become literally scared to update Gentoo. Installing updates on Gentoo is like a challenging puzzle game. Installing Gentoo updates is an NP-hard problem. It is a drain on your time, it&amp;rsquo;s a family tragedy and it is plain and simple a security threat.</description>
    </item>
    
    <item>
      <title>A New Look</title>
      <link>https://coldattic.info/post/104/</link>
      <pubDate>Sat, 16 Dec 2017 21:26:11 +0000</pubDate>
      
      <guid>https://coldattic.info/post/104/</guid>
      <description>This website just got a new look (with mobile layout), a new web hosting, and a new technology that powers it. I&amp;rsquo;ll post the summary in the coming days. And otherwise, just enjoy fewer lags and 500 errors. (Except today when I accidentally routed the traffic to the wrong Load Balancer. &amp;gt;_&amp;lt;)
I&amp;rsquo;ll be writing separate posts about these migrations, but here&amp;rsquo;s what went where.
  Website hosting moved from Rackspace Cloud hellscape of a single manually managed Gentoo Linux instance to Amazon Elastic Beanstalk.</description>
    </item>
    
    <item>
      <title>Division by Zero?  How About Multiplication by Zero</title>
      <link>https://coldattic.info/post/103/</link>
      <pubDate>Thu, 17 Mar 2016 07:50:53 +0000</pubDate>
      
      <guid>https://coldattic.info/post/103/</guid>
      <description>Crash due to division by zero? How about multiplication by zero?
I recently transferred to the next level of floating point arithmetic caveats. Division by zero is something we all know about, but multiplication by zero can be as harmful.
An algorithm computed weight of entities, then converted them to integers, as in
(INT_MAX), weight); assert(w = 0); ]] This code may fail the assertion. Imagine y is large (say, 1000), so exp(y) no longer fits double.</description>
    </item>
    
    <item>
      <title>How Reader Mutexes Can Deadlock</title>
      <link>https://coldattic.info/post/102/</link>
      <pubDate>Mon, 10 Mar 2014 07:04:46 +0000</pubDate>
      
      <guid>https://coldattic.info/post/102/</guid>
      <description>Sample Deadlock

Translucent areas depict waiting for something; incomplete lock statements have dashed border. Note that it doesn&#39;t matter in which order the top two acquisitions are made.

 Can a cryptic entanglement of your mutex locks lead to a deadlock? It sure can. Deadlocking is the second thing your parents tell you about mutexes: if one thread acquires A, then acquires B before releasing A, and the other does the same in the reverse order, the threads may potentially deadlock.</description>
    </item>
    
    <item>
      <title>Nonlinear Effects when Web Server is at 100% CPU</title>
      <link>https://coldattic.info/post/101/</link>
      <pubDate>Thu, 02 Jan 2014 04:03:04 +0000</pubDate>
      
      <guid>https://coldattic.info/post/101/</guid>
      <description>I used to wonder what this Error 502 meant when I observed when I visited my favorite websites. When I retried the error usually seemed to disappear, and I found it&#39;s linked with the service being overwhelmed with requests at certain times. But why do I see it? Why doesn&#39;t the web server start many threads leveraging OS capabilities of CPU sharing? If it queues incoming requests, why doesn&#39;t it just delay their fulfillment, just making them wait in a line longer?</description>
    </item>
    
    <item>
      <title>Light Sensor with Arduino for the Muni Sign</title>
      <link>https://coldattic.info/post/100/</link>
      <pubDate>Wed, 02 Oct 2013 05:58:57 +0000</pubDate>
      
      <guid>https://coldattic.info/post/100/</guid>
      <description>&#34;SF Muni Sign at Home&#34; seriesSeveral post on how I was building a San Francisco Muni sign that shows train arrival times at home.SF Muni LED Sign at Home with Raspberry Pi — first post where I introduced the sign;Light Sensor with Arduino for the Muni Sign — how to add light sensor to shut the sign off when it&#39;s dark.Tidbyt: Someone&#39;s making the Muni Sign — someone&#39;s Kickstarter project to make a similar art piece!</description>
    </item>
    
    <item>
      <title>Misuse of Caching in Web Applications</title>
      <link>https://coldattic.info/post/99/</link>
      <pubDate>Wed, 11 Sep 2013 05:55:26 +0000</pubDate>
      
      <guid>https://coldattic.info/post/99/</guid>
      <description>I noticed a pattern in some of my web software architecture failures, and I also notice similar pattern in others&#39; designs. In many cases, people simply misuse memcache, hurting performance of their web applications.
If performance is your goal, you can’t pretend that your computations and rendering is fast, and add transparent caching where it later appears to be slow. Transparent caching is a fairy tale programmers have been telling one another, and we’ve also been writing tools and building hardware to remain in for decades.</description>
    </item>
    
    <item>
      <title>SF Muni LED Sign at Home with Raspberry Pi</title>
      <link>https://coldattic.info/post/98/</link>
      <pubDate>Thu, 08 Aug 2013 08:04:29 +0000</pubDate>
      
      <guid>https://coldattic.info/post/98/</guid>
      <description>Running like this My Android phone&#39;s stock alarm clock wakes me up into a cold summer San Francisco morning. I wallow around a bit, but eventually get up to enjoy yet another day. An hour later, I&#39;m running in my dress shoes, tie waving in the wind like that of an anime superhero schoolboy protagonist, towards a light rail train stop. Twenty seconds before I get there, the train departs, right before an unanticipated 20-minute break in the service.</description>
    </item>
    
    <item>
      <title>Multithreaded Consensus Versus Practice</title>
      <link>https://coldattic.info/post/97/</link>
      <pubDate>Mon, 20 May 2013 06:27:18 +0000</pubDate>
      
      <guid>https://coldattic.info/post/97/</guid>
      <description>Many programmers complain that most of what they&#39;ve learned in their universities is completely useless in their daily work. Anecdotal evidence, a survey among some MIPT alumni, suggests that the median fraction of courses actually useful to a former student is about 5%. That&#39;s like taking one class per week instead of whole week of studying, so could you simply follow those wise brats who indeed spent the whole week smoking weed and boozing?</description>
    </item>
    
    <item>
      <title>A Mutex Puzzle</title>
      <link>https://coldattic.info/post/96/</link>
      <pubDate>Sat, 27 Apr 2013 07:41:29 +0000</pubDate>
      
      <guid>https://coldattic.info/post/96/</guid>
      <description>I wrote earlier that I know very few decent programming puzzles. To be more precise, I know one, The Prisoners Riddle. So I was reading that The Art of Multiprocessor Programming book (I already made a post influenced by what I read there, and I&#39;ll soon make another one--stay tuned). Some very interesting things the book tells about can be formulated as puzzles. Here&#39;s one.
Two threads need a mutex object with Lock and Unlock methods, but they only have three usual shared boolean variables.</description>
    </item>
    
    <item>
      <title>How to Get Binary Search Right</title>
      <link>https://coldattic.info/post/95/</link>
      <pubDate>Sun, 07 Apr 2013 06:50:18 +0000</pubDate>
      
      <guid>https://coldattic.info/post/95/</guid>
      <description>As you already know, binary search is an O(log N) way to search if a particular value exists in a sorted array. There are some reports on how &#34;most of our implementation&#34; of binary searches are broken. The mistake discussed in that post is the overflow when calculating the index of the middle element. But regardless of whether you get this bit right, there&#39;s a different problem with all binary search implementations I&#39;ve seen.</description>
    </item>
    
    <item>
      <title>The Pipe-Pipe-Equals</title>
      <link>https://coldattic.info/post/94/</link>
      <pubDate>Wed, 13 Mar 2013 05:16:32 +0000</pubDate>
      
      <guid>https://coldattic.info/post/94/</guid>
      <description>It is hard to come up with a google-friendly name for the ||= construct you see in some programming languages quite often, &#34;pipe-pipe-equals&#34; being the is the closest (other names include &#34;double-pipe equals,&#34; &#34;or-equal,&#34; or &#34;double-or equals&#34;). Why should we name this monster in the first place? While cryptic at first sight, it is a very convenient shorthand that, I believe, allows us to write cleaner code. Let&#39;s see how it works on this example:</description>
    </item>
    
    <item>
      <title>Zeno&#39;s Flat Screen TV Paradox</title>
      <link>https://coldattic.info/post/93/</link>
      <pubDate>Sat, 02 Mar 2013 07:23:07 +0000</pubDate>
      
      <guid>https://coldattic.info/post/93/</guid>
      <description>If I was to explain Zeno&#39;s paradoxes to a layperson, I&#39;d start with the Zeno&#39;s Flat Screen TV Paradox. It is very practical: most have firsthand experience in real-life application of this deeply philosophical problem each time we shop for something.

That&#39;s just too much choice! (pic taken here). Thankfully, ancient Greek philosophers are to the rescue. Imagine you come to a store, and see two TVs: a cheaper 30 inch one for $500, and a more expensive 50 inch one for $1000; otherwise the TVs are identical.</description>
    </item>
    
    <item>
      <title>Why I No Longer Work On Weekends</title>
      <link>https://coldattic.info/post/92/</link>
      <pubDate>Fri, 08 Feb 2013 09:04:04 +0000</pubDate>
      
      <guid>https://coldattic.info/post/92/</guid>
      <description>I remember this picture of my typical day two years ago. As sunny Russian winter morning finally banishes the dull winter night, I finally say &#34;bye&#34; to my girlfriend and leave for historical part of Moscow. Where I&#39;m heading to, in a three-story, old cottage that predates even the communist government, lies my beloved office. I&#39;m alone there. It is deserted, but not because of lay-offs, a party I&#39;m not invited to, or because it&#39;s a one-man startup.</description>
    </item>
    
    <item>
      <title>How to Select a Place to Live via Google Maps</title>
      <link>https://coldattic.info/post/91/</link>
      <pubDate>Thu, 17 Jan 2013 11:31:34 +0000</pubDate>
      
      <guid>https://coldattic.info/post/91/</guid>
      <description>This post is not about programming at all, but just about solving old problems with new computing tools. The old problem is finding the neighbourhood to rent the apartment in, and the tool is a map. Not just a map, but the Google Map. While looking at map when renting is a good advice, Google Map has a killer feature that unlocks a very new option.
Google Map can quickly recalculate the best public transportation route between two points on-the-fly while you drag one of them.</description>
    </item>
    
    <item>
      <title>Not So Static</title>
      <link>https://coldattic.info/post/90/</link>
      <pubDate>Thu, 03 Jan 2013 08:45:40 +0000</pubDate>
      
      <guid>https://coldattic.info/post/90/</guid>
      <description>&#34;Forget these silly runtime errors you had in Ruby: C++ is statically-typed!&#34; Levap, a seasoned engineer, was enlightening the new hire. &#34;You no longer have to wait while the sample run or unit tests finish to learn that your variables have the wrong type, nor you have to worry about this happening in production&#34;.
So, Paul, the younger engineer, stopped worrying. He went back to implementing a subclass that, unlike its parent, would only perform a low-level blocking write of data stored in a buffer object instead of more complex writing semantics found in the parent:</description>
    </item>
    
    <item>
      <title>The Fallacy of Simple User Interfaces</title>
      <link>https://coldattic.info/post/89/</link>
      <pubDate>Tue, 11 Dec 2012 07:51:17 +0000</pubDate>
      
      <guid>https://coldattic.info/post/89/</guid>
      <description>A half a year ago, I&#39;ve been challenged with improving functionality of a piece of software without making its interface more bloated than it already is. That made me thinking about the complexity of user interfaces, how it affects the acceptance of the software, and what should programmers do about it.

Even Catholic Church pays attention to &#34;User-Friendly Features&#34;! I&#39;m not a UX specialist of any sort. But, I was a Gentoo user once.</description>
    </item>
    
    <item>
      <title>Consistency Models Explained Briefly</title>
      <link>https://coldattic.info/post/88/</link>
      <pubDate>Mon, 12 Nov 2012 09:02:03 +0000</pubDate>
      
      <guid>https://coldattic.info/post/88/</guid>
      <description>Wikipedia used to do a pretty bad job at explaining the theoretical foundations behing the different consistency models of multithreaded/distributed systems. Especially cryptic was the definition of &#34;quiescent consistency&#34;, which I try to explan further in this post. Just take a look at the articles, and see how inconsistent the consistency model descriptions are. I&#39;ll try to get them together.
What is a Consistency Model?
When one describes how a distributed system behaves, one typically mentions a &#34;</description>
    </item>
    
    <item>
      <title>How to Watch HDTV from Internet on your TV with Linux PC (Legally)</title>
      <link>https://coldattic.info/post/87/</link>
      <pubDate>Mon, 08 Oct 2012 05:05:37 +0000</pubDate>
      
      <guid>https://coldattic.info/post/87/</guid>
      <description>Hooray! The Airbus finally brought me to the land where law is taken slightly more seriously than in Russia. With great responsibility, however, usually comes great power, and a lot of absolutely legal video streaming services are available in the U.S. Moreover, my corporate-sponsored temporary apartment has a large, like, 30-inch TV, and it would be a sin to just let it collect dust in silence.
No, I couldn&#39;t just watch cable TV!</description>
    </item>
    
    <item>
      <title>A Dying Tux on an Airbus</title>
      <link>https://coldattic.info/post/86/</link>
      <pubDate>Mon, 24 Sep 2012 02:54:08 +0000</pubDate>
      
      <guid>https://coldattic.info/post/86/</guid>
      <description>So I am on a trans-Atlantic flight onboard an Airbus A330. It is a pretty large plane; each seat is accompanied with a computer referred to as &#34;the Entertainment System&#34; (big deal at the time). The system offered games, movies, inflight information (the plane location plotted onto the world map), and flight progress details, which is kind of reassuring as the flight lasts for 10+ hours.) A &#34;killer feature&#34; of this system was its USB port to charge your mobile phone (or to type this story, for instance.</description>
    </item>
    
    <item>
      <title>A Tie for a Python Programmer</title>
      <link>https://coldattic.info/post/85/</link>
      <pubDate>Mon, 10 Sep 2012 10:51:45 +0000</pubDate>
      
      <guid>https://coldattic.info/post/85/</guid>
      <description>A couple of weeks ago I started a new project in ROSA. The project is a dynamic system that tracks health of our Linux distribution repository in real-time by watching the builds and repository status, and running external analyzers. This is a relatively small system that should end up with less than 50k LoC, so I could choose any language I wanted. I would choose Ruby, of course, but this time I had to raise the significance of social issues, and chose Python.</description>
    </item>
    
    <item>
      <title>How Static Verification Tools Analyze Programs</title>
      <link>https://coldattic.info/post/82/</link>
      <pubDate>Tue, 28 Aug 2012 21:09:31 +0000</pubDate>
      
      <guid>https://coldattic.info/post/82/</guid>
      <description>One of my previous posts featured a plaque we got for scoring an achievement in the Competition on Software Verification&#39;12. I promised to tell how the tool we improved analyzed programs to find bugs in them... without actually running them.
Please, note that most of what&#39;s described here was not devised by me. It was a state of art when I first started to study the field, and my contribution was kind of tiny—as usual when newbies do their (post)graduate research.</description>
    </item>
    
    <item>
      <title>Time-Based Protests</title>
      <link>https://coldattic.info/post/81/</link>
      <pubDate>Mon, 02 Jul 2012 15:58:50 +0000</pubDate>
      
      <guid>https://coldattic.info/post/81/</guid>
      <description>Sample time-based Protest
(photo by Ivan Afanasiev). The largest &#34;Strategy 31&#34; time-based protest I attended (January 2011). A protester features a sign with a protest logo. A month ago I bumped into a protest manifestation in Moscow. It was one of a series of events &#34;Different Russia&#34; movement has been organizing since 2009. The interesting thing in this event is that it happens on 31st of any month consisting of enough days.</description>
    </item>
    
    <item>
      <title>A Different View on the Strategy Pattern</title>
      <link>https://coldattic.info/post/80/</link>
      <pubDate>Sat, 09 Jun 2012 19:46:54 +0000</pubDate>
      
      <guid>https://coldattic.info/post/80/</guid>
      <description>If you read a short description of a patern in a usual pattern book or in a Wikipedia article, you will most likely not realize its full power. A true realization comes when you derive the pattern from the programming tasks you are to accomplish on your own, bottom-up.
A month ago I was chatting with a peer who was about to finish his Object-Oriented Programming course. One of the patterns he mentioned was Strategy.</description>
    </item>
    
    <item>
      <title>BLAST at the Competition on Software Verification&#39;12</title>
      <link>https://coldattic.info/post/79/</link>
      <pubDate>Tue, 22 May 2012 21:04:18 +0000</pubDate>
      
      <guid>https://coldattic.info/post/79/</guid>
      <description>At my previous job in a research laboratory, I was improving a Static Analysis tool named BLAST. The name abbreviates its origin, and is decomposed as &#34;Berkeley Lazy Automation Software Verification Tool.&#34;
By the way, my former peers have prepared a nice comparison of Static versus Dynamic analysis for the Linux Kernel. The tool solves a problem commonly described as unsolvable, the Reachability Problem. BLAST is capable of telling—sometimes—if a certain line of code is reachable.</description>
    </item>
    
    <item>
      <title>Logging in Expressive Languages</title>
      <link>https://coldattic.info/post/78/</link>
      <pubDate>Sat, 12 May 2012 20:44:50 +0000</pubDate>
      
      <guid>https://coldattic.info/post/78/</guid>
      <description>I am not aware of any strict mathematical definition of expressiveness of a language. Informally, a language is more expressive if it allows you to achieve the same with less keystrokes. From this point of view, for instance, Perl or Python are more expressive than C. Of course, you can&#39;t always achieve with Python most things that C is capable of at low level, and therefore one may question whether Python is really more capable than C.</description>
    </item>
    
    <item>
      <title>Counting Visits Efficiently with &#34;Wide Caching&#34;</title>
      <link>https://coldattic.info/post/77/</link>
      <pubDate>Thu, 05 Apr 2012 21:42:46 +0000</pubDate>
      
      <guid>https://coldattic.info/post/77/</guid>
      <description>One of the features of the web forum engine, a clone of which I develop in Ruby on Rails, is that it displays some site usage statistics.
There are two kins of statistics it displays. First, it tracks and shows how many times a particular message was read (i.e. clicked), tracking if a user doesn&#39;t self-click his or her message. Second, it shows the generic site usage activity, unique visitors, and page views in the top-right corner.</description>
    </item>
    
    <item>
      <title>Ruby on Rails Errors and Solutions</title>
      <link>https://coldattic.info/post/76/</link>
      <pubDate>Sat, 10 Mar 2012 20:11:52 +0000</pubDate>
      
      <guid>https://coldattic.info/post/76/</guid>
      <description>When you develop something in Ruby on Rails, you will most likely encounter strange errors here and there. These errors may look like language or framework bugs, but they are not. Most likely, they are programming bugs you were not aware of before you encountered them.
The reasons for that are twofold. First, Ruby is a dynamically-typed language, and this alone introduces subtleties you should know about. Second, the web framework values convention over documentation.</description>
    </item>
    
    <item>
      <title>Optimizing Massive Data Views in Ruby on Rails</title>
      <link>https://coldattic.info/post/75/</link>
      <pubDate>Sun, 19 Feb 2012 18:38:20 +0000</pubDate>
      
      <guid>https://coldattic.info/post/75/</guid>
      <description>Ruby on Rails is a web application development framework most known for its flexibility and heavy use of metaprogramming. Rails programs, as one of my peers described, &#34;look like they explain what to do rather than how&#34;. That&#39;s true. This declarative nature of Rails, however, comes at a cost. At a cost of performance, of course.
A couple of days ago, I was developing a tree-shaped web board engine (some of you have probably forgot what these are; here&#39;s the engine I&#39;m creating a clone of).</description>
    </item>
    
    <item>
      <title>A Visit to the Computer History Museum</title>
      <link>https://coldattic.info/post/74/</link>
      <pubDate>Sat, 28 Jan 2012 19:28:48 +0000</pubDate>
      
      <guid>https://coldattic.info/post/74/</guid>
      <description>There are not many museums around the world that are specifically devoted to computers. The two I know about are Bletchley Park, located 70 km away from London, and Computer History Museum. The former is not about computers per se, though; rather, it&#39;s about the decrypting German messaging during the World War II that happened right there. And the latter is completely devoted to computers.
I visited this Computer History Museum two weeks ago, during my short trip to the Silicon Valley.</description>
    </item>
    
    <item>
      <title>The Most Stupid Mistake You Can Make with Ruby</title>
      <link>https://coldattic.info/post/73/</link>
      <pubDate>Tue, 10 Jan 2012 20:40:51 +0000</pubDate>
      
      <guid>https://coldattic.info/post/73/</guid>
      <description>Programming languages have strict and mostly very compressed syntax. The origins of that are twofold.
First, actively used programming languages have a considerable history, and were started decades ago. Back then, screen space was limited, and, before that, there was little storage available for source code. Second, programmers have technically-oriented minds and like to endow abstract symbols with complex abstractions instead of using words to describe them. That&#39;s why, I guess, many programming languages heavily depend on correct usage of individual characters.</description>
    </item>
    
    <item>
      <title>Relativity of Simultaneity in Distributed Computing</title>
      <link>https://coldattic.info/post/72/</link>
      <pubDate>Mon, 26 Dec 2011 21:00:44 +0000</pubDate>
      
      <guid>https://coldattic.info/post/72/</guid>
      <description>About a year ago, I described an allusion to physical phenomena in computing in &#34;Caching and Levers&#34;. This post is devoted to a more complex theory, namely the Special Theory of Relativity (STR), and mostly to one of its implications, the &#34;relativity of simultaneity&#34;.
Relativity of Simultaneity
Special Theory of Relativity may be approached as a set of equations for coordinate translation that take their effect as the speeds of objects approach the speed of light, c.</description>
    </item>
    
    <item>
      <title>Typical Janitor&#39;s Failures</title>
      <link>https://coldattic.info/post/71/</link>
      <pubDate>Mon, 21 Nov 2011 21:28:05 +0000</pubDate>
      
      <guid>https://coldattic.info/post/71/</guid>
      <description>How easy is it, to write a program that removes a file or a folder? Okay, assume you have all the power a modern operating system provides you, including rm shell convenience command, and unlink system call. Do you really think the answer is still &#34;very&#34;?.. Then take a look at these examples.
Permission trap
Today one of my peers, Denis, was writing a program that somehow analyzed packages in Mandriva Linux distribution.</description>
    </item>
    
    <item>
      <title>Do not use Btrfs!</title>
      <link>https://coldattic.info/post/70/</link>
      <pubDate>Sun, 13 Nov 2011 20:27:58 +0000</pubDate>
      
      <guid>https://coldattic.info/post/70/</guid>
      <description>&#34;Btrfs&#34; is a new, modern filesystem, which has always been a nice thing to try for any Linux aficionado. When you&#39;re bored, and if your Linux installation is too stable, you can always try one of new cool filesystems to make your machine faster, cooler, and less stable.
ReiserFS, named after its developer Hans Reiser, was the first Linux filesystem with journaling support. It also was known as the fastest file system to deal with large amounts of small files.</description>
    </item>
    
    <item>
      <title>Ruby-ran-off-the-Rails</title>
      <link>https://coldattic.info/post/69/</link>
      <pubDate>Fri, 21 Oct 2011 18:42:10 +0000</pubDate>
      
      <guid>https://coldattic.info/post/69/</guid>
      <description>Recently I ran a software update from Ruby on Rails version 2.3.5 to 2.3.14. You might have noticed the &#34;maintenance&#34; message all pages were redirected to last Sunday. Of course, after the update completed, I clicked on a bookmark entry &#34;My Blog&#34; in the browser window, and, having acknowledged the correct loading, prematurely considered the update completed well.
I was wrong this time. But first,...
How I perform updates on my webserver</description>
    </item>
    
    <item>
      <title>OCaml Hash Table Chronicles</title>
      <link>https://coldattic.info/post/68/</link>
      <pubDate>Sun, 09 Oct 2011 20:29:45 +0000</pubDate>
      
      <guid>https://coldattic.info/post/68/</guid>
      <description>While preparing the static verification tool I maintain, which is written in OCaml, to the Competition on Software Verification, I noticed a strange performance problem. Queries to a hash table structure seemed to take too much time. Of course, there were a lot of such queries, but a greater amount of queries to a much more complicated data structure, a Binary Decision Diagram, caused the CPU less trouble.
I&#39;ve been troubleshooting the issue for several hours, and the spot where it hit me was, as a Dr.</description>
    </item>
    
    <item>
      <title>Looking for a Match, a Geekier Way</title>
      <link>https://coldattic.info/post/67/</link>
      <pubDate>Wed, 28 Sep 2011 21:08:58 +0000</pubDate>
      
      <guid>https://coldattic.info/post/67/</guid>
      <description>As unlikely as it seems, the &#34;match&#34; the heading refers to is not a regular expression match. While I am in a long-term but open relationship with computers, I also do pay a certain bit of attention to opposite sex subjects of my species. This involves two immediate conclusions:
I have a shortage of such subjects available for dating in my nearest social circle;The more information technology-abundant the process of mating is the more I&#39;m likely to succeed.</description>
    </item>
    
    <item>
      <title>So I Patched That Filesystem</title>
      <link>https://coldattic.info/post/66/</link>
      <pubDate>Tue, 13 Sep 2011 20:42:09 +0000</pubDate>
      
      <guid>https://coldattic.info/post/66/</guid>
      <description>If you don&#39;t know what an &#34;abstraction leak&#34; is, please, refer to this Joel&#39;s blog post Finally, I patched it. It&#39;s been pending for several months, always being postponed as &#34;we do not have time to do this right now.&#34; However, we fixed several abstraction leaks, which created an increased workload to the network, and I couldn&#39;t postpone it anymore.
UnionFS
UnionFS is a file system that makes a union of several directory trees.</description>
    </item>
    
    <item>
      <title>Microsoft Office Needs Windows... a lot of them!</title>
      <link>https://coldattic.info/post/65/</link>
      <pubDate>Mon, 22 Aug 2011 20:53:34 +0000</pubDate>
      
      <guid>https://coldattic.info/post/65/</guid>
      <description>Microsoft Office

This is a photo of a Microsoft office (stolen from here), namely, the Roger Needham Building in the University of Cambridge, one of two buildings the Microsoft Research resides in. See how many Windows it features? It just couldn&#39;t be a coincidence...

 Lately, I visited Microsoft Research PhD Summer School 2011 in Cambridge, Great Britain. The event has been organized by Microsoft for more than ten years.</description>
    </item>
    
    <item>
      <title>Fail Early, Fail Fast</title>
      <link>https://coldattic.info/post/64/</link>
      <pubDate>Thu, 18 Aug 2011 21:00:47 +0000</pubDate>
      
      <guid>https://coldattic.info/post/64/</guid>
      <description>As you probably know (I&#39;m sure I mentioned it somewhere in this blog, not just in my CV), about a half a year ago, I developed a set of components to make our Linux Driver Verification toolset run in a cloud, i.e. on a set of dynamically added and removed virtual machines.
Being low on the amount of man-hours allocated to this task, I needed to make the development as fast as possible.</description>
    </item>
    
    <item>
      <title>How to Use Open3 and Avoid Dead Locks</title>
      <link>https://coldattic.info/post/63/</link>
      <pubDate>Wed, 03 Aug 2011 20:10:02 +0000</pubDate>
      
      <guid>https://coldattic.info/post/63/</guid>
      <description>Linux pipes and open3Three articles on how open3 is implemented in Linux, and how it is properly usedPipes in Linux and in The Real World — introduction to the concept of pipesHow to Implement Open3 — sample implementation of open3How to Use open3 and Avoid Dead Locks — notes on a safe open3 usage Open3 is a common name for a function that spawns a process andsubstitutes its standard input, output and error streams with the pipesconnected to the original process.</description>
    </item>
    
    <item>
      <title>How to Implement open3</title>
      <link>https://coldattic.info/post/62/</link>
      <pubDate>Sun, 17 Jul 2011 14:35:31 +0000</pubDate>
      
      <guid>https://coldattic.info/post/62/</guid>
      <description>Linux pipes and open3Three articles on how open3 is implemented in Linux, and how it is properly usedPipes in Linux and in The Real World — introduction to the concept of pipesHow to Implement Open3 — sample implementation of open3How to Use open3 and Avoid Dead Locks — notes on a safe open3 usage Open3 (or popen3) is a common name for a library function to spawn achild process with its standard streams (input, output and error) bothconnected to newly created filehandlers in the original process.</description>
    </item>
    
    <item>
      <title>Penn&amp;Paper&#39;s Solutions™: Table Scroll Sanitizer</title>
      <link>https://coldattic.info/post/61/</link>
      <pubDate>Tue, 21 Jun 2011 20:49:59 +0000</pubDate>
      
      <guid>https://coldattic.info/post/61/</guid>
      <description>A couple of days ago, doing a routine tasks of analyzing how well our tools were finding Linux kernel bugs, I was to check a large table.
I was to check if there are correlations in values each row between columns A, B, and C that weren&#39;t adjacent. The hypothesis was, like &#34;if there is a 1 in B, there should be 1 in either A, or C&#34;. However, the table had a lot of rows and columns; so many, that it didn&#39;t fit into the screen neither vertically, nor horizontally, so I was quickly getting lost in determining which column is what.</description>
    </item>
    
    <item>
      <title>Pipes in Linux and in The Real World</title>
      <link>https://coldattic.info/post/60/</link>
      <pubDate>Fri, 10 Jun 2011 20:08:47 +0000</pubDate>
      
      <guid>https://coldattic.info/post/60/</guid>
      <description>Linux pipes and open3Three articles on how open3 is implemented in Linux, and how it is properly usedPipes in Linux and in The Real World — introduction to the concept of pipesHow to Implement Open3 — sample implementation of open3How to Use open3 and Avoid Dead Locks — notes on a safe open3 usage The importance of inter-process communication
In Linux programming the concept of a diversity of small and highly specialized tools collaborating their efforts to achieve the goal a programmer instructed them to has always been dominating.</description>
    </item>
    
    <item>
      <title>Git Cheat Sheet</title>
      <link>https://coldattic.info/post/59/</link>
      <pubDate>Wed, 25 May 2011 10:56:36 +0000</pubDate>
      
      <guid>https://coldattic.info/post/59/</guid>
      <description>Git is a very flexible and powerful tool. I already praised Git a year ago, when I was just starting to love it. Since then, our relationship has matured; although the excitement still doesn&#39;t end, doing tricky things turned into routine. In this post I list a couple of advanced tricks we&#39;ve been doing with Git.
Commit modification magic
Restore commit after git reset
Assume the problem is that you&#39;ve written a very detailed, elaborate and eloquent commit message, and have just lost it by forgetting to add a file name to git reset COMMIT.</description>
    </item>
    
    <item>
      <title>My &#34;timeout&#34; project is now on GitHub</title>
      <link>https://coldattic.info/post/58/</link>
      <pubDate>Wed, 04 May 2011 21:50:43 +0000</pubDate>
      
      <guid>https://coldattic.info/post/58/</guid>
      <description>In course of development of our Driver Verification project we needed a reliable resource limiting script. At first it was supposed to simply limit one process in time and memory consumption, so I downloaded a simple script I found via Google, and used it in our project.
As the time went, the script grew with more features. We found out that it doesn&#39;t take child processes into account, and I made it to doing so, rewriting the script completely (in Perl instead of Shell).</description>
    </item>
    
    <item>
      <title>On OpenID (un)success</title>
      <link>https://coldattic.info/post/57/</link>
      <pubDate>Wed, 20 Apr 2011 21:06:01 +0000</pubDate>
      
      <guid>https://coldattic.info/post/57/</guid>
      <description>You must have heard about OpenID, haven&#39;t you? OpenID is an open authentication framework that allows an entity (a web site) to verify if you are the user you claim to be. The authentication happens at the site of your OpenID provider, and the process is common to all the entities that want to verify your authenticity. An entity just receives an answer to the request it issues: is the person that currently operates the web browser an owner of the identity it claims?</description>
    </item>
    
    <item>
      <title>Fast XML stream parsing in Ruby with LibXML</title>
      <link>https://coldattic.info/post/56/</link>
      <pubDate>Thu, 31 Mar 2011 21:02:56 +0000</pubDate>
      
      <guid>https://coldattic.info/post/56/</guid>
      <description>XML Stream ParsingTwo articles on XML stream parsing, the first explaining where its needed and what options one has, and the second giving practical advice, both language-agnostic and Ruby-specific.XML Stream Parsing: Overview — generic philosophyFast XML stream parsing in Ruby with LibXML — practical advice (including non Ruby-specific)
 XML is a very powerful word. When you pronounce it, the effect may vary. &#34;Yeah, so what?</description>
    </item>
    
    <item>
      <title>XML Stream Parsing: Overview</title>
      <link>https://coldattic.info/post/55/</link>
      <pubDate>Fri, 25 Feb 2011 21:33:29 +0000</pubDate>
      
      <guid>https://coldattic.info/post/55/</guid>
      <description>XML Stream ParsingTwo articles on XML stream parsing, the first explaining where its needed and what options one has, and the second giving practical advice, both language-agnostic and Ruby-specific.XML Stream Parsing: Overview — generic philosophyFast XML stream parsing in Ruby with LibXML — practical advice (including non Ruby-specific)
 XML and the ways to parse it
Stream and &#34;usual&#34; XML parsing are different very different, both in implementation and in the requirements to the XML producers.</description>
    </item>
    
    <item>
      <title>A poor man&#39;s benchmark and stopwatch</title>
      <link>https://coldattic.info/post/54/</link>
      <pubDate>Wed, 26 Jan 2011 21:56:32 +0000</pubDate>
      
      <guid>https://coldattic.info/post/54/</guid>
      <description>Recently I wanted to measure how long it would take my program to execute a certain action. I didn&#39;t want to search for time-related functions in that language, so I had just been going to just use my Casio watch. However, I suddenly realized that I forgot them at home...
&#34;Wait a minute&#34;, I thought, &#34;I have a PC with a modern operating system, openSuSE Linux! How come it doesn&#39;t have a stopwatch program?</description>
    </item>
    
    <item>
      <title>Why execve()-like system() call is a must-have</title>
      <link>https://coldattic.info/post/53/</link>
      <pubDate>Thu, 20 Jan 2011 21:32:54 +0000</pubDate>
      
      <guid>https://coldattic.info/post/53/</guid>
      <description>How do you usually call an external program in Linux? Whichever language you use, you may fork() your process, and call exec() afterwards; you runtime library surely supports these primitives. However, unless oyu&#39;re doing something crazy, you more likely use a system() function, that does the fork for you, and automatically waits for the process to finish.
In Linux runtime libraries for various languages usually support setting environment variables, so that all processes forked afterwards inherit the altered environment.</description>
    </item>
    
    <item>
      <title>Penn&amp;Paper&#39;s Solutions™: Progress Tracker</title>
      <link>https://coldattic.info/post/52/</link>
      <pubDate>Fri, 24 Dec 2010 00:05:54 +0000</pubDate>
      
      <guid>https://coldattic.info/post/52/</guid>
      <description>A couple of weeks ago I began to develop a new component of the system we ship. In order to not get lost in where I currently am, I decided to employ a tool to visualize structure of the component, and to track progress of its development.
However, I was too busy to write a program on my own. Therefore, I decided to purchase an enterprise solution. I analyzed the market, and asked a couple of questions.</description>
    </item>
    
    <item>
      <title>Porting Perl&#39;s features to Ruby</title>
      <link>https://coldattic.info/post/51/</link>
      <pubDate>Tue, 14 Dec 2010 22:39:17 +0000</pubDate>
      
      <guid>https://coldattic.info/post/51/</guid>
      <description>An official motto of Ruby language with its joke explained. As I told in my previous post, I now use Ruby as my primary scriptinglanguage. The most prominent reason is that Ruby is superior to Perl inboth syntax and in expressive power. Being object-oriented, Ruby allows alot of things to be expressed in a more concise manner, and exceptionhandling relinquishes the developer from the burden of checking return codeof every damned operation.</description>
    </item>
    
    <item>
      <title>A year of blogging</title>
      <link>https://coldattic.info/post/50/</link>
      <pubDate>Tue, 30 Nov 2010 22:01:58 +0000</pubDate>
      
      <guid>https://coldattic.info/post/50/</guid>
      <description>On 30th November, 2009, a couple of my articles (&#34;Zombies&#34; and &#34;C++ virtual functions&#34;) were the first to appear at coldattic.info. And today I celebrate its first anniversary.
How it started
I wanted to write regular articles about programming even before I started coding professionally. However, I never actually managed to start. I bought domain name and VPS hosting much earlier than the blog was opened.
About a year ago I had a nasty encounter with a couple of corrupt Russian policemen.</description>
    </item>
    
    <item>
      <title>Parallel merge sort</title>
      <link>https://coldattic.info/post/49/</link>
      <pubDate>Sat, 27 Nov 2010 00:35:00 +0000</pubDate>
      
      <guid>https://coldattic.info/post/49/</guid>
      <description>We live in a loosely connected world. There&#39;s an increasing demand on middlemen, which connect different entities together.
This seemingly unrelated introduction is important for this post in two different ways:
Parallelization of tasks to different processors also grows in demand, as it&#39;s like creating stuff that doesn&#39;t need middlemen;If there were not for social networks and forums, you probably would never know about interesting things created at the other end of the world.</description>
    </item>
    
    <item>
      <title>Prisoners and Fairness</title>
      <link>https://coldattic.info/post/48/</link>
      <pubDate>Sat, 20 Nov 2010 12:56:01 +0000</pubDate>
      
      <guid>https://coldattic.info/post/48/</guid>
      <description>Fairness is rarely pronounced, yet an important concept in computing. Its applications appear in different domains. Even when its unspoken about in documentation and descriptions of systems, I sometimes notice, &#34;hey, for this to work, fairness is required!&#34; So, what&#39;s it all about?
Prisoners
The first thing I all of a sudden encountered fairness in is the prisoners riddle. Here&#39;s how it&#39;s usually formulated:
100 prisoners are sentenced to death.</description>
    </item>
    
    <item>
      <title>Syntax elements? User-defined functions!</title>
      <link>https://coldattic.info/post/47/</link>
      <pubDate>Sun, 07 Nov 2010 16:39:20 +0000</pubDate>
      
      <guid>https://coldattic.info/post/47/</guid>
      <description>Many languages, especially those non-functional ones that originate from 20th century, have immutable syntax. Such symbols as +, (, or . have predefined meaning, which can&#39;t be changed by user.
Based on this, when you see a similar symbol, you think that its meaning is predefined by specification of the language. But it&#39;s not always true.
C++
The most beautiful example of operator overloading in C++ is &#34;lazy evaluation&#34;. Assume you defined a matrix class.</description>
    </item>
    
    <item>
      <title>An example of indentation</title>
      <link>https://coldattic.info/post/46/</link>
      <pubDate>Sat, 23 Oct 2010 20:07:42 +0000</pubDate>
      
      <guid>https://coldattic.info/post/46/</guid>
      <description>Some languages are whitespace-sensitive, some are not, but in all of them we indent our code.
Why do we do this? To make our programs look readable. To structure them. To separate logical blocks, and collocate items that belong together.
But recently I encountered an interesting indentation pattern. It was in the C sources of an implementation of the OCaml language virtual machine.
(I&#39;ll just add a couple of paragraphs, so that &#34;</description>
    </item>
    
    <item>
      <title>Caching and levers</title>
      <link>https://coldattic.info/post/45/</link>
      <pubDate>Sun, 17 Oct 2010 21:02:23 +0000</pubDate>
      
      <guid>https://coldattic.info/post/45/</guid>
      <description>Some of the people who question the way I design systems, notice that I&#39;m a big fan of caching. While caching is a widespread and a highly used technique of performance optimization, I tend to use it—and rely on it—more frequently than others. Buy why&#39;s that?
What is &#34;caching&#34;
It seems that the people actually mean different things when they say &#34;caching&#34;. In my understanding, caching means exchanging memory for computation by storing the exact results of computation in memory, and re-using them instead of performing actual calculations.</description>
    </item>
    
    <item>
      <title>Four years later, GNU Make 3.82 is released!</title>
      <link>https://coldattic.info/post/44/</link>
      <pubDate>Sat, 09 Oct 2010 21:09:53 +0000</pubDate>
      
      <guid>https://coldattic.info/post/44/</guid>
      <description>Gnu Make is not one of those products, website of which you frequently check for updates. One of the reasons is it&#39;s leisurely development pace: version 3.80 was released in 2002, 3.81—in 2006, and 3.82—in 2010. So each new release is breaking news.
Why so conservative?
Why&#39;s that? Well, I can&#39;t know for sure, but let me introduce some facts about the product.
First, Make is actually a profound tool.</description>
    </item>
    
    <item>
      <title>Searching for the declarative language</title>
      <link>https://coldattic.info/post/43/</link>
      <pubDate>Sun, 03 Oct 2010 21:58:25 +0000</pubDate>
      
      <guid>https://coldattic.info/post/43/</guid>
      <description>I&#39;m really tired of telling these dumb machines every instruction they should perform! I know that they only pretend to be dumb, and they can act clever if they&#39;re taught to.
After I implemented yet another graph traversing algorithm, after I wrote &#34;if it doesn&#39;t exists, create, and only then proceed&#34; for the million times, after I had troubles with parallelization of totally independent tasks just because I didn&#39;t write the program to be parallel, I felt that I&#39;m done.</description>
    </item>
    
    <item>
      <title>Cross-compiling ARM kernel on x86</title>
      <link>https://coldattic.info/post/42/</link>
      <pubDate>Thu, 09 Sep 2010 19:25:13 +0000</pubDate>
      
      <guid>https://coldattic.info/post/42/</guid>
      <description>ARM is one of the newest and most quickly emerging architectures. The pace of its development and expansion promises bigger funding, so no wonder that we&#39;re considering to adapt our tools to it.
And one of the sub-tasks was to compile ARM kernel on our x86 machines.
So I started compiling. Compile ARM binutils, compile glibc, compile gcc, recompile glibc, recompile gcc, yeah. It&#39;s all that easy, but at each comma you should insert several-hours patching and googling.</description>
    </item>
    
    <item>
      <title>Scrum: our three iterations</title>
      <link>https://coldattic.info/post/41/</link>
      <pubDate>Sun, 05 Sep 2010 19:29:52 +0000</pubDate>
      
      <guid>https://coldattic.info/post/41/</guid>
      <description>Yes, Scrum is now 100% buzzword. We learned about it in our universitystudies, we heard about it from corporate software engineers and consultantsat the conferences, we see it in enterprise (see v1), we read about it in jobpostings, and some GSoC projects even impose Scrum to one-man &#34;teams&#34;!
However, it was not until this summer when I learned that it&#39;s actually aneffective engineering technique. It revitalized the development ofone of our projects (I&#39;ll later refer to it as &#34;</description>
    </item>
    
    <item>
      <title>Limiting time and memory consumption of a program in Linux</title>
      <link>https://coldattic.info/post/40/</link>
      <pubDate>Mon, 23 Aug 2010 21:34:41 +0000</pubDate>
      
      <guid>https://coldattic.info/post/40/</guid>
      <description>Without further ado, the 14 kilobyte standalone Perl script that limits a program&#39;s CPU time and memory consumption on most Linux systems can be found at pshved/timeout GitHub project. The script is compatible with older versions of Perl, and it has extra features such as hangup detection and resource usage reporting. The sources are licensed under Apache-2.0. An older version can also be found here. So here&#39;s how this script came about.</description>
    </item>
    
    <item>
      <title>OpenID as a public authentication mechanism</title>
      <link>https://coldattic.info/post/39/</link>
      <pubDate>Wed, 30 Jun 2010 21:25:05 +0000</pubDate>
      
      <guid>https://coldattic.info/post/39/</guid>
      <description>A lot of people use OpenID as a universal login to multiple sites. In fact it&#39;s what it officially aims.
OpenID is a safe, faster, and easier way to log in to web sites. OpenID official site  Too boring to be the best use for such a cool system. However, many people see this as its primary usage. (For example, Bill The Lizard, Stack Overflow moderator, expressed it in his edited--with abuse of moderators&#39; powers, of course ;-)--comment here).</description>
    </item>
    
    <item>
      <title>Performance metrics and parallelization</title>
      <link>https://coldattic.info/post/38/</link>
      <pubDate>Thu, 17 Jun 2010 19:33:54 +0000</pubDate>
      
      <guid>https://coldattic.info/post/38/</guid>
      <description>Some day you suddenly realize that a powerful PC is not cool anymore. Everyone works in clusters today! Clusters make our programs more fast, and if you goal is to fasten quite a long computation, they&#39;re of help.
Clusters of independent &#34;computers&#34; (in a broad sense) can scale differently: from several thousand tiny units on your GPU to thousands of different machines. And after you discover that you have a cluster available--or just several free PCs noone uses--you also meet the problem.</description>
    </item>
    
    <item>
      <title>Today I wrote my first unit test...</title>
      <link>https://coldattic.info/post/37/</link>
      <pubDate>Tue, 08 Jun 2010 19:07:57 +0000</pubDate>
      
      <guid>https://coldattic.info/post/37/</guid>
      <description>As you probably know, I work in the software engineering department of a scientific institution of Russian Academy of Sciences, and my research and area of interest is software engineering. According to tag cloud, the &#34;software-engineering&#34; tag has reached the popularity of the &#34;fun&#34; tag; it does demonstrate my inclination.
But it was today when I wrote my first unit test.
And I loved it. Seven hours of ceaseless coding, brains not involved.</description>
    </item>
    
    <item>
      <title>Availability of software development keeps increasing (SYRCoSE 2010 notes)</title>
      <link>https://coldattic.info/post/36/</link>
      <pubDate>Sat, 05 Jun 2010 19:06:52 +0000</pubDate>
      
      <guid>https://coldattic.info/post/36/</guid>
      <description>Recently I visited a conference for beginner scientists and engineers entitled Summer Young Researchers Colloquium on Software Engineering, and presented my paper On Reasoning about Finite Sets in Software Model Checking. My talk wasn&#39;t great--mainly because the research didn&#39;t yield the results it was expected to. However, the post is not about this.
Most of talks weren&#39;t very inspiring. However, some of them revealed interesting ideas that concern availability of programming.</description>
    </item>
    
    <item>
      <title>Why Git is treated as so complex?</title>
      <link>https://coldattic.info/post/35/</link>
      <pubDate>Wed, 12 May 2010 20:52:54 +0000</pubDate>
      
      <guid>https://coldattic.info/post/35/</guid>
      <description>Perhaps, many of these ten readers, who check my blog, are aware that there exists such version control system as Git. There is said a lot about Git in comparison to other tools (here&#39;s some StackOverflow threads). Mostly it breaks down to these points:
Git is powerfulGit is complicated to useGit is badly documentedGit is incapable to checkout (lock) our Word documents!
It is fairly clear (especially from the last bullet) that no manager would use Git as revision-control tool.</description>
    </item>
    
    <item>
      <title>Deleted functions in C&#43;&#43;0x and binary compatibility</title>
      <link>https://coldattic.info/post/34/</link>
      <pubDate>Mon, 03 May 2010 19:39:04 +0000</pubDate>
      
      <guid>https://coldattic.info/post/34/</guid>
      <description>Having read a recent version of C++ ABI standard, I noticed that certain bits of it were revised (the version of the standard hasn&#39;t nevertheless been changed). Particularly, a vtable entry of a mysterious &#34;deleted virtual function&#34; was documented. I thought that it could influence binary compatibility, and here&#39;s what I found out.
What deleted functions are for?
C++0x introduces another form of a function definition -- deleted function:</description>
    </item>
    
    <item>
      <title>Are women worse programmers than men? </title>
      <link>https://coldattic.info/post/33/</link>
      <pubDate>Fri, 23 Apr 2010 18:34:18 +0000</pubDate>
      
      <guid>https://coldattic.info/post/33/</guid>
      <description>The idea behind this blog post has always been to make peace between two things. One of these is my honest belief that sexism is unwise and disgusting, and all human beings are equally smart regardless of their gender. The other thing is dismal amount of women in programming profession I observed at that time and place. In 2010, some discussion on the web finally gave me the idea that an easy mathematical construct can demonstrate how these two things can be true at the same time, so I wrote a provocative and--as one of the commenters puts it--&#34;</description>
    </item>
    
    <item>
      <title>StackExchange 2.0: evil grin of &#34;Software As A Service&#34;</title>
      <link>https://coldattic.info/post/32/</link>
      <pubDate>Mon, 19 Apr 2010 17:15:50 +0000</pubDate>
      
      <guid>https://coldattic.info/post/32/</guid>
      <description>As everyone knows, StackOverflow founders, Joel and Jeff have recently received mysterious VC funding that should help to support StackExchange platform and the Trilogy sites.
Meta had a number of threads where people tried to guess, jokingly and seriously, what kind of dirty trick the Trilogy crowd will encounter. As far as I remember, none of the guesses were unobvious. But the dirt wasn&#39;t novel either.
Defense of the Ancients and the &#34;</description>
    </item>
    
    <item>
      <title>Uploading and processing data with inotify-tools</title>
      <link>https://coldattic.info/post/31/</link>
      <pubDate>Sat, 17 Apr 2010 11:45:35 +0000</pubDate>
      
      <guid>https://coldattic.info/post/31/</guid>
      <description>I&#39;m not a muscleman. In fact, I&#39;m kind of a wimp. But given all this, my weight is 15 kilograms greater than I should have with my height. Time to lose some.
I&#39;ve been logging my weight for quite a time, but I realized that logging alone doesn&#39;t help. I need other people to nudge me, so I would be more ashamed of my condition. To achieve this aim, starting today, I will publish a graph of my weight.</description>
    </item>
    
    <item>
      <title>How I applied for a web server developer, or why the fastest servers are written in C instead of C&#43;&#43;</title>
      <link>https://coldattic.info/post/30/</link>
      <pubDate>Fri, 09 Apr 2010 20:54:21 +0000</pubDate>
      
      <guid>https://coldattic.info/post/30/</guid>
      <description>I realized why I was so aggressive in attempts to guide one of the latest StackOverflow questions so it would gain useful answers and wouldn&#39;t be closed as subjective. The question title is &#34;Why are most really fast servers written in C instead of C++&#34;, and I really wondered why they are. Because that&#39;s... a bit personal to me. So, let me tell you this story.
Some time ago, after I suffered a fiasco to get a job in the USA, I thought it was a good idea to change my career to a less ivory-tower-ish.</description>
    </item>
    
    <item>
      <title>SVG is useless</title>
      <link>https://coldattic.info/post/29/</link>
      <pubDate>Sat, 03 Apr 2010 16:45:30 +0000</pubDate>
      
      <guid>https://coldattic.info/post/29/</guid>
      <description>Recently I tried to add a feature to this site. The feature is to display a Russian flag near links that point to web-sites, language of which is Russian. Of course, I wanted its height to be equal to that of a letter.
So, basically, I want my image to scale up to the size of a letter by user&#39;s browser capabilities. &#34;What format does that mean?&#34; I thought. Of course Scalable vector graphics (wiki)!</description>
    </item>
    
    <item>
      <title>Programming as gold mining</title>
      <link>https://coldattic.info/post/28/</link>
      <pubDate>Wed, 24 Mar 2010 21:24:13 +0000</pubDate>
      
      <guid>https://coldattic.info/post/28/</guid>
      <description>This article was planned before the creation of this blog. I tried to understand what programming is as an approach to problem-solving, rather than just as a tool. And I found out that the approach of programming reminds what happens when you mine gold (but the analogy is not the most obvious one you probably thought about). The article describes the gist of this point of view to programming and depicts the connection to mining.</description>
    </item>
    
    <item>
      <title>The most awful limitation of Make</title>
      <link>https://coldattic.info/post/27/</link>
      <pubDate>Thu, 18 Mar 2010 22:29:47 +0000</pubDate>
      
      <guid>https://coldattic.info/post/27/</guid>
      <description>I was trying to invent the way for GNU Make to depend on contents of files, rather than on timestamps.
If what was implied is the content change between consequent make invocations (i.e. target should not be remade, if timestamp has changed, but the content did not), it&#39;s easy. Prototyped in my own Stackoverflow answer, the solution was simple:
content=.md5-$1-$(shell md5sum &amp;lt;$1 | sed &#39;s/[[:space:]].*//&#39;)define track$(call content,$1):rm .</description>
    </item>
    
    <item>
      <title>Binary compatibility of C&#43;&#43; Shared Libraries in Linux </title>
      <link>https://coldattic.info/post/26/</link>
      <pubDate>Fri, 12 Mar 2010 19:49:33 +0000</pubDate>
      
      <guid>https://coldattic.info/post/26/</guid>
      <description>A year ago I&#39;ve completed my first &#34;scientific&#34; paper. I presented it in a local conference for junior researches. It actually didn&#39;t have much effect: as far as I understood no one at the conference was into the subject (ah, no, I&#39;m wrong, there was one guy who developed boost::build). I wanted to fix it (since it contained minor bugs) for a very long time. But since I haven&#39;t done it, then, I suppose, I will never manage to fix it.</description>
    </item>
    
    <item>
      <title>Randomized debugging</title>
      <link>https://coldattic.info/post/24/</link>
      <pubDate>Sat, 27 Feb 2010 20:37:13 +0000</pubDate>
      
      <guid>https://coldattic.info/post/24/</guid>
      <description>Imagine that you have a project of a medium size, and you need to add a couple of functions to it. The whole system is a complex program, and is debugged by printing traces to a log file. So you&#39;ve implemented a half of the new functionality, and you&#39;d like to check if that half works more or less correct. Of course, you have a couple of your personal test cases and know how should the resultant execution trace look like.</description>
    </item>
    
    <item>
      <title>Haskell&#39;s &#34;that&#34; operator</title>
      <link>https://coldattic.info/post/23/</link>
      <pubDate>Tue, 23 Feb 2010 22:47:35 +0000</pubDate>
      
      <guid>https://coldattic.info/post/23/</guid>
      <description>«Практика функционального программирования»
Translated as &#34;Practice of functional programming&#34; is the title of an introductory magazine. The magazine is free (free as in &#34;free beer&#34;, not &#34;free speech&#34;); you can download it at fprog.ru (yes, it&#39;s in Russian). It contains a lot of interesting stuff and is a very fruitful source of references to [mostly English] articles and books about functional programming in general and particular languages.
The key is that it&#39;s focused on practical aspects of functional programming.</description>
    </item>
    
    <item>
      <title>Killer features of Git</title>
      <link>https://coldattic.info/post/22/</link>
      <pubDate>Fri, 19 Feb 2010 19:51:50 +0000</pubDate>
      
      <guid>https://coldattic.info/post/22/</guid>
      <description>Welcome to Yet Another Post About So-Called Killer Features of Git. Of course, I&#39;m not the first who writes about it. No wonder: Git already was in a good shape in 2005 (link). However, in my opinion, some people seem to misunderstand why Git&#39;s killer features are important in everyday work. I&#39;ll cover my thought on that it in this post.
If you still don&#39;t know, Git is a fairly recent source-control system that was originally written by Linus Torvalds.</description>
    </item>
    
    <item>
      <title>Do programmers hate their jobs?</title>
      <link>https://coldattic.info/post/21/</link>
      <pubDate>Mon, 15 Feb 2010 20:12:55 +0000</pubDate>
      
      <guid>https://coldattic.info/post/21/</guid>
      <description>Having been searching for a new job lately, I&#39;ve read a number of advices to job seekers and hiring managers. Perhaps, they&#39;re just parroting each other, but here are some quotes that sound surprisingly similar:
Passion. We look for evidence that the applicant is passionate about computers and really loves programming. Typical evidence of this: Extra-curricular activities. People who love programming often work on their own programming projects (or contribute to an open-source project) in their spare time.</description>
    </item>
    
    <item>
      <title>&#34;NP-complete!&#34; as a lame excuse</title>
      <link>https://coldattic.info/post/19/</link>
      <pubDate>Mon, 08 Feb 2010 22:01:25 +0000</pubDate>
      
      <guid>https://coldattic.info/post/19/</guid>
      <description>Some time ago I bumped into a usual Stackoverflow question. A guy asked for a C# algorithm that could pick elements from array so that their sum is equal to a specified number. A usual NP-complete knapsack problem. But the answer made me think about an interesting matter. Let me screenshot the answer completely:
At a first glance, the answer contains everything an ideal answer should contain: a correct information, a certain bit of succinctness, and, a key to success, an XKCD comic.</description>
    </item>
    
    <item>
      <title>Undefined behavior</title>
      <link>https://coldattic.info/post/17/</link>
      <pubDate>Thu, 04 Feb 2010 22:31:55 +0000</pubDate>
      
      <guid>https://coldattic.info/post/17/</guid>
      <description>Sometimes, when you read too many language standards and various specifications, you start using these weird words. Undefined Behavior is the ultimate evil, a raptor that storms in when you dereference NULL pointer, use freed memory, or violate any other preconditions, which are placed in every dark corner just to keep you awake. Futile attempts to make jokes aside, it&#39;s the wording that shows that compiler, library or system can guarantee nothing if you do that.</description>
    </item>
    
    <item>
      <title>Easy parallelization with Bash in Linux, part 2 </title>
      <link>https://coldattic.info/post/16/</link>
      <pubDate>Sun, 31 Jan 2010 23:18:14 +0000</pubDate>
      
      <guid>https://coldattic.info/post/16/</guid>
      <description>Easy parallelization with Bash in LinuxTwo articles that show how concurrency can be utilized for bash scripting.Part 1 - pipes and xargs thread poolPart 2 - process substitution and flocks
 In the previous article, I told a bit about xargs command and piping in bash. But it turns out that I missed a lot of important information... So, to complete the topic, I just have to post another article.</description>
    </item>
    
    <item>
      <title>Easy parallelization with Bash in Linux</title>
      <link>https://coldattic.info/post/7/</link>
      <pubDate>Thu, 07 Jan 2010 22:09:52 +0000</pubDate>
      
      <guid>https://coldattic.info/post/7/</guid>
      <description>Easy parallelization with Bash in LinuxTwo articles that show how concurrency can be utilized for bash scripting.Part 1 - pipes and xargs thread poolPart 2 - process substitution and flocks
 I love concurrency. The Idea of several mindless zombies collaborating to provide a useful result thrills me and I&#39;m always so self-satisfied when I see that these are my boys.
Writing a concurrent program is considered complex.</description>
    </item>
    
    <item>
      <title>Software engineering quine</title>
      <link>https://coldattic.info/post/6/</link>
      <pubDate>Mon, 04 Jan 2010 21:34:34 +0000</pubDate>
      
      <guid>https://coldattic.info/post/6/</guid>
      <description>In programming, there&#39;s a concept of quine -- a program that prints its source code (wiki). I&#39;m not obsessed with the concept, but it is fun sometimes.
***
Recently I saw this Dilbert comic, and It made me think about a funny thing.

&#34;Oh, okay. It will cost you 50$&#34;, might the lady engineer have said, and written the following program:
int main() { printf(&#34;The program must print its own requirements.</description>
    </item>
    
    <item>
      <title>Make: a Filesystem Transformation Prover</title>
      <link>https://coldattic.info/post/5/</link>
      <pubDate>Sun, 27 Dec 2009 23:03:45 +0000</pubDate>
      
      <guid>https://coldattic.info/post/5/</guid>
      <description>One of my favorite tools that belongs to Linux world is make. I&#39;m a huge fan of it and, being a Linux programmer, use it in my everyday projects. But no, not as a build system I mostly use it. make is much more than just a casual build system.
Then, what is make? Having thought on that question, I think, I eventually devised a sound definition of what it actually does--or, at least, what its main activity is.</description>
    </item>
    
    <item>
      <title>Treap: simple balanced search tree</title>
      <link>https://coldattic.info/post/4/</link>
      <pubDate>Tue, 15 Dec 2009 16:31:11 +0000</pubDate>
      
      <guid>https://coldattic.info/post/4/</guid>
      <description>Balanced trees and programming contests
This is an example of treap: letters form an alphabetically-sorted search tree, while numbers are arranged as a heap.Pic from Wikipedia .sidenote .casepic {width: 200px;}.sidenote .casetxt {max-width: 280px;}
Picture A. We&#39;re going to insert yellow note into tree with blue root.
 Picture B. We arranged some nodes but we have to split the subtree of the maroon node into two subtrees to fit dangling red pointers .</description>
    </item>
    
    <item>
      <title>Busting C&#43;&#43; myths: virtual function calls are slow </title>
      <link>https://coldattic.info/post/3/</link>
      <pubDate>Mon, 30 Nov 2009 23:38:13 +0000</pubDate>
      
      <guid>https://coldattic.info/post/3/</guid>
      <description>Here and there, over the Internet, you sometimes see unproved claims that &#34;C++ is slow&#34;, &#34;C++ ABI is unstable&#34; etc. The rationale behind these claims is usually not provided by the speakers. However, many people believe in these myths, having never seen a proof of any. so I&#39;d like to bust a couple of them.
What C++ is good at is the ratio between plausibility to describe abstract and high-level concepts and performance of the compiled program.</description>
    </item>
    
    <item>
      <title>Programming as Controlling Mindless Zombies</title>
      <link>https://coldattic.info/post/2/</link>
      <pubDate>Mon, 30 Nov 2009 23:37:16 +0000</pubDate>
      
      <guid>https://coldattic.info/post/2/</guid>
      <description>The question that bothers many developers and, maybe, even people in related topics is &#34;What is Programming?&#34;Indeed, many of us do it every day (more seasoned ones taking a break on weekends), but who really bothered himself with a philosophy of what he&#39;s doing? Since I&#39;m fond of making up my own philosophy, I&#39;ll try to pore upon the subject in several blog posts. In this one I&#39;d address one side of it, and you, having read the title, already know which.</description>
    </item>
    
    <item>
      <title>About this blog</title>
      <link>https://coldattic.info/post/1/</link>
      <pubDate>Mon, 30 Nov 2009 23:35:52 +0000</pubDate>
      
      <guid>https://coldattic.info/post/1/</guid>
      <description>Hello! My name Pavel Shved, 21, I am a russian programmer and I&#39;m a blogger now. More info about me is here. And this is is my blog, because of which I wrote this web-site.
On this blog, I express my own opinions only, and not those of my employer, or any of my former employers. Only my personal stuff belongs here. The employers&#39; both official and non-official opinions and announcements reside elsewhere.</description>
    </item>
    
  </channel>
</rss>