Архив от 2011

In our projects, when returning videos from servers, the question of disk subsystem efficiency comes up. Obviously, gigabit network interfaces are more efficient than, say, a 2 disk RAID 0. If video clips shared the same popularity, then hard disks would be a bottleneck when returning content.

We, however, have been lucky and there has always been a small set of clips which make up 80% of the traffic and a long line of less-frequently-accessed clips. This small set subsides in the file system’s cache and is returned practically without any disk activity.

For example, if we have 100 gigabytes of clips on a server, and the server has 24 gigs of memory, then we can draw this graph. Along the horizontal line, we have files sorted by popularity; along the vertical line, we have traffic caused by these files. The total traffic is the surface area under the line.

Last week, the “Russian Internet technologies” conference took place, where we presented our experience working with streaming video and protecting video content.

A fairly large portion of our projects have to do with storing and publishing video content on the Internet. One of the many questions our clients often ask is the question of protecting content from illegal reproduction and distribution. There’s a wide-spread belief that there exist programs and technologies which are capable of guaranteeing that the copying and redistribution of licensed content is impossible. In reality, these software only gives off the impression that is possible.

In our presentation, we sought to discuss existing technologies, their vulnerabilities, and free, open-source equivalents which grant the same level of protection as proprietary and very expensive products.
In particular, we showed that popular “protected” video streaming protocols, like RTMPE, don’t guarantee the protection of content from illegal copying. No existing DRM system can simply provide 100% protection.
As an alternative to expensive and often limited content-protection systems, a series of simple techniques were suggested which would offer the same level of security.

Our presentations can be viewed here.

Writing a convenient and decent-looking wrapper for working with transactions is a favorite pastime for many developers. Transactions must be able to start, finish and rollback properly, and they can also be nested. Python is a multifaceted language (or, as speechwriters say, “Multi-paradigm”), giving us innumerable ways of doing it.

As a foundation, I usually use Python DB API (namely, psycopg2 module). The API itself is rather low-level and is crying for improvement. What can be done?

Initially, let’s just make an ordinary decorator for opening and closing a transaction:

We have customers and partners in different countries, and not all of them can comfortably communicate in English. We use trac for bug tracking and documentation. So we wrote and maintain a plugin for trac, that uses Google Translate to translate ticket descriptions and user comments to the language specified in the user preferences.


The plugin home page.

Please try it out!

In continuing our tradition of “in simple words about complex”, and considering we do a lot of work on projects related to video content on the Internet, I want to address some questions about codecs and containers we get from our clients.

We’ll start with the fact that media information (video and audio) must be saved in a digital format, and it would be good if it were saved in a compressed format. Codecs do this (codec, coder-decoder). They convert media information into digital streams and back.


It shall be said that formally, codecs are the implementation of a coding/decoding standard, or in other words, a program or algorithm. Still, codecs are sometimes referred to as the coding standard.

A couple of months ago we started experimenting with Balsamiq Mockups. It’s a compact and very simple program with which to build wire-frame models of user interfaces. By way of example, below is one of the screens that we have drawn using it in Russian.

Sample Balsamiq mock-up

When we started to experiment with Balsamiq I could not have imagined how much this program would affect our development process and how many radical changes it would bring.