Imagine that you run an online service company and you do some service for people and your business becomes so big that your departments no longer fit in entire floors of a big building and your budget is so big, that you don’t give a damn of caring about people and raising their salaries, because you can hire someone else of the same level the next day. Well, in fact you don’t give a damn of people’s level at all, because they write throw-away code anyways and they do jobs that can be trained for in no time anyways.
And you don’t care about code quality, because it sort of “does not sell” and not measurable. And one day Continue reading
Today I resigned from AVG.
The reasons for this are not trivial, but I feel I don’t have a chance of moving to the next level in my career in this company despite enormous efforts and clear achievements.
Still, I think AVG is a wonderful company that is yet to find its path and I wish them all the best in pursuing their vision.
My plan for the moment is to start scalability consultancy business and help people build high-performance web sites and mobile application backends. I have a decade of experience in building, launching and maintaining high-performance systems and I consider myself an expert in high-performance web servers and scalable system architecture. I have successfully implemented numerous projects in this area.
If you have a challenge like that, don’t hesitate, make an enquiry. Write me an email to firstname.lastname@example.org
I’m excited by an opportunity to do something independently and I’ll make sure I’ll do my best to excel in it.
I guest-posted on Bitcoin Magazine:
The main idea of the article is that Bitcoin is not simply a new kind of currency, but an innovation that can lead to emergence of a new information space.
Queueing systems manage and process queues of jobs. The presence of a queue implies that something cannot be done immediately and one has to wait until some resource is available. When you respond to an HTTP request you usually want to do it interactively, that is, you want to respond within some reasonable amount of time. What can prevent you from doing this? Various things: external data sources, long-running tasks. Your request might consume too much memory and the system might decide to swap out something, which is time-consuming.
From web app’s point of view external data sources are out of influence: there is no way you can make external data sources respond faster other than by making external data sources respond faster. For example, if you are unsatisfied with how long a MySQL database responds to certain query, fixing this requires changing something in the database. Fixing the query would produce a new query, which is a different story.
When there is a long running task, however, and it cannot be redesigned to run interactively, Continue reading
Few months ago I shut down the pages of nginx socketlog module and nginx redislog module. This is due to excessive volume of support they required. Some people, however, found that these are interesting pieces of technology and I got several requests to release them.
Today I release these modules under free licence. Meet the released nginx socketlog module and nginx redislog module!
So how do you store a lot of data if there is already over your head? The simplest answer is: partition horizontally, in other words divide and conquer. In horizontal partitioning each data instance is stored on a single storage node, so you can increase your total capacity by adding more nodes.
For horizontal partitioning to work data instances have to have no dependency between each other. If this condition is satisfied, there is no need to visit multiple storage nodes in order to reconcile a single data instance.
Sounds easy, ah? But not as it seems… Continue reading
Long time ago I disabled comments because I was getting a lot of spam. Apparently this was man-made spam, because they did go through CAPTCHA. Today I installed Social and also added Twitter and Facebook accounts.
Please comment and follow!
Recently I was looking into making my NLP knowledge more solid and I found this book by reference: Foundations of Statistical Natural Language Processing. It’s a classic book and certainly it was a good read.
Now, the topics it discusses might sound quite theoretical, so let me translate them to few examples how each of them could be applied in your work.
I wanted to write an article about secrets of scalability, but it appears that this subject is too complex for one article. Instead let’s just dissect some scalability problems as we go.
When you think about scalability, it is important to distinguish two different types of problems: those that require reading much more often than updating and those that require reading as often or even less often than updating. First type of problems is called WORM (write once read many), second is called RW (read-write). It turns out that they are fundamentally different and here is why. Continue reading
Correct me if I’m wrong, but it seems that this paper proves optimality of “multi-armed bandit” approach to A/B testing. The latter one was described in this post earlier this year.
For those who do not understand what it is about: A/B testing requires investment in the form of sample size (usually it is equal to number of unique users), which is time and money. “Multi-armed bandit” approach is about optimising this investment.
I wouldn’t say you’re ancient if you aren’t doing it already, but it’s interesting to see how abstract science creates new opportunities for business.