Programming With Configuration Contexts
November 28, 2015
Recently I started to write my code in a slightly different way. Nothing that I’m going to write here is news, however it makes the code more flexible and testable. Let’s start with a simple server example.
Docker is not a Package Management Tool
September 23, 2015
I came across this assumption many people have that Docker is a package management tool. Let me break the news and tell you that it is not.
Distributed Locks With DynamoDB
August 27, 2015
Locks are very important in distributed systems. Sometimes we want to make sure that only one job runs at a time, but we want to have the system highly available (e.g highly available cron server). Of course there are many other uses cases for distributed locks, which I’m not going to talk about. In this post I am going to show you an example of how to implement distributed locks on DynamoDB.
On Leaving Software Engineering Jobs
August 4, 2015
In my previous post I talked about software engineering interviews. Today I’m going to let you know why I left my job. Hopefully this is going to be an interesting read since I don’t really come across many posts that talk about changing jobs.
On Software Engineering Interviews
July 29, 2015
Interviews are always fun but also time consuming. The entire process can get stressful, because you don’t know what you’re gonna run into or where you’re gonna end up going. After going through a bunch of interviews I’m starting to notice real issues with interview processes at many companies and I believe that the normal interview process is broken.
Market and Customer Research With Mechanical Turk
February 3, 2015
When building products it’s important to reach out to people. You must ask them what problems they are having in their day-to-day actives, so that you can implement the right solutions. That’s at least what everybody is saying. It was my first time I tried to perform user research with Amazon’s Mechanical Turk and SurveyMonkey.
Large Scale Streaming Infrastructure With Apache Kafka
November 10, 2014
I had an opportunity to work on an interesting infrastructure challenge. It goes something like this: we need to be able to persist incoming data stream which consists of approximately 200 thousand messages/second, we also need to guarantee data availability and redundancy. This is a typical scale of data I used to deal with at Chartbeat on a daily basis. When working with such high traffic you’re most likely going to run into the questions to which you might not know the answers right away.
December 28, 2013
At Chartbeat we are thinking about adding probabilistic counters to our infrastructure, HyperLogLog (HLL) in particular. One of the challenges with something like this is to make it redundant and have somewhat good performance. Since HyperLogLog is a relatively new approach to cardinality approximation there are not many off the shelf solutions, so why not try and implement HLL in Cassandra?
Asynchronous CSV Parser in C
October 26, 2013
I literally just finished writing the initial version of async CSV parser. This parser is intended to be used in high performance applications, possibly within then event loop to process streaming CSV data. It uses callbacks to notify when the field information is available. The library itself is very bare bones and it’s up to the user to choose the data right data structure to store the data. The library can be found on github.
Machine Learning Notes—Locally Weighted Regression
September 8, 2013
In the previous post I covered linear regression which can be used to predict continuous values. This post is a sequel to simple linear regression and will talk about weighted linear regression.
Machine Learning Notes—Linear Regression
August 14, 2013
This is my first post on machine learning, and hopefully not the last one. The main goal of these posts is to serve as a quick reference for simple machine learning problems and their solutions, meanwhile allowing me to get a better understanding of the field itself. That said, don’t take anything for granted.
Jot, scratch, repeat
July 8, 2013
Row Level Locking in Django
January 16, 2012
In one of my fixes that I was working at work I had to implement row level locking in Django. Current stable, 1.3, version of Django does not have built-in capability for row level locking on InnoDB tables. The good news are that the development version already has an update in QuerySet API that will let you use
select_for_updatemethod to acquire a write lock on rows matching your query. If you can use development version for your project you may stop reading and go upgrade Django, otherwise I will see you at the bottom of the page.
How to Establish a P2P Connection
December 8, 2010
I am working on this cool project which I don’t want to disclose yet and the essential part for this project is to create a peer-to-peer connection between two computers. Creating a connection is not that difficult; however, it gets complicated when both computers are sitting behind a NAT device. The NAT device will create a private IP address space and be responsible for routing packets into and out from the private network. This means that an IP address and a port number associated with a particular service are not directly accessible from other computer networks and all inbound data packets must be routed by the NAT device. So how do you create a P2P connection when the NAT device is “blocking” access to a peer?
I am not Dead, but Only Trying Something new!
August 24, 2010
It’s been a while since my last post. A few things (small) has changed in my life since then, including the type of information I consume which shifted drastically. I am a very technology oriented person and this makes me kinda geeky by definition. All my friends know that I am good with computers and programming. For those who don’t know me, do you think it’s because I study hard at college? No, it’s because in my childhood I was so attracted to computers that video games were not cutting it anymore, so I found programming and I got hooked. I read so many books and articles on programming and that’s what made me so good at it. However, now I try to read technical material as little as possible, and it’s not because I don’t want to grow, it’s because I changed my priorities and I have to grow in a different area of interest. My current area of interest is business. Why did I made such a change? Let’s go back to one of my dreams first. About four years ago when I entered the university to study computer science, I thought that college is the last step I have to take, and after I graduate great job awaits me at a big company. Does this sound familiar to you? The main reason why I switched from one topic to another is that I don’t like following rules, and a big company will have a huge rule book. So, I changed my dream of becoming a good programmer at a big company to becoming a business owner. For this to work I have to totally change my environment. I can’t remember what I read but I memorized the following quote: spend one hour every day on a topic of your interest and after five years you will be a master of that specific topic. So, I started with exposing myself to business related information: books, twitter streams, magazines etc. During the summer I read three books whose titles I would like to share with you.
Creating a Personal Virtual Machine for Code Obfuscation
January 4, 2010
When talking about the protection of intellectual property, virtual machines and custom instruction set can play a very important role in the field. One of the ways to protect your algorithm from curious eyes is to use code obfuscation techniques. These can range from a simple instruction reordering to a more sophisticated control flow modifications and added layer of custom instruction set, or a combination of both. Recently I’ve watched a video about virtual machines for code obfuscation from RECON video archives. The speaker said that his implementation is available for download at his website for those who want to experiment; however, I could not find it so I’ve decided to implement my own compiler and virtual machine (vm).