Introducing the python LXC API

“One of our top goals for LXC upstream work during the Ubuntu 12.10 development cycle was reworking the LXC library and turn it from a private library mostly used by the other lxc-* commands into something that’s easy for developers to work with and is accessible from other languages with some bindings.

Although the current implementation isn’t complete enough to consider the API stable and some changes will still happen to it over the months to come, we have pushed the initial implementation to the LXC staging branch on github and put it into the lxc package of Ubuntu 12.10…”

Lua API OCaml library

“Lua is a powerful, light-weight programming language designed for extending applications. It provides a good general purpose programming language to replace DSL that don’t really need to be specific.

This library provides bindings to Lua API which allows the application to exchange data with Lua programs and also to extend Lua with OCaml functions.

This is the OCaml complete binding of the Lua Application Program Interface as described in the official documentation.

In this moment only the version 5.1.x is supported, while 5.2.x is on my TODO list. In general my plan is to support newest versions, but not the oldest ones…”

Thoughts on ocaml

“I don’t write enough to have genuine blog, I’ve decided to write about the experience of using ocaml here. Firstly, I’d like to acknowledge that I’m still in the honeymoon period with OCaml; so keep in mind this isn’t a particularly objective critique. That being said, I will try to talk about concrete issues and items, instead of discussing the usual “functional programming will expand your mind”, “it’ll make you a better programmer even if you don’t use it”, or other arbitrary issues such as code elegance. This also isn’t intended to be an exhaustive list; I’m just trying get you interested enough to start googling around. If I can get at least one child to use OCaml, then it was worth it. 😉

For some reason, I had never gotten around to anything in the ML family even though I’ve programmed in a variety of languages. Conventional wisdom says that you can either have an expressive programming language (like python or ruby) or a fast programming language (like C, C++, or assembly). But these guys and gals in the ML world have been saying that you can have the best of both worlds. You can have an high-level language that performs like a systems-level language. It sounded too good to be true. So I decided I was going to learn Objective Caml, hoping that it would have 75% the expressiveness of of python, and 75% the performance of C. In the end, I’d say it has about 50-60% the expressiveness of python, and 90% the performance of C. Keep in mind that you can do some really honestly truely wacky stuff in python, so 60% is still really good…”

The Top 3 New Swift Features in OpenStack Folsom

“There has been a ton of activity in and around Swift throughout the Folsom release cycle. Swift has moved from version 1.4.8 in the Essex release to version 1.7.4 in the Folsom release. Some of the new features added in the Folsom release include the integration of Keystone middleware, the separation of the Swift CLI and client library so Glance can more easily integrate with Swift to store Nova images.

Swift has also added many new features to its core storage engine. Below I’ve described what I think are the three most significant new features in Swift in the Folsom release…”

A Globally Distributed OpenStack Swift Cluster

“As a core contributor to Swift, SwiftStack is keenly interested in pushing forward the development of Swift, specifically to enable Swift to support geographically distributed clusters. We got started on this development in the 1.5 release of Swift and are now continuing this work, which will be made available in upcoming releases of Swift. This overview details a design for this feature. We are also looking forward to discussing this in the upcoming OpenStack Summit in October…”


Linux TCP/IP tuning for scalability

“We’re a performance company, and performance and scalability go hand in hand. Better scalability results in more consistent performance and at LogNormal, we like pushing our hardware as far as it will go.

Today’s post is about some of the infrastructure we use and how we tune it to handle a large number of requests.

We have separate components of our software stack to handle different tasks. In this post I’ll only cover the parts that make up our beacon collection component and how we tune it. Only a few of the tuning points are specific to this component…”

Why Bloom filters work the way they do

“Imagine you’re a programmer who is developing a new web browser. There are many malicious sites on the web, and you want your browser to warn users when they attempt to access dangerous sites. For example, suppose the user attempts to access http://domain/etc. You’d like a way of checking whether domain is known to be a malicious site. What’s a good way of doing this?

An obvious naive way is for your browser to maintain a list or set data structure containing all known malicious domains. A problem with this approach is that it may consume a considerable amount of memory. If you know of a million malicious domains, and domains need (say) an average of 20 bytes to store, then you need 20 megabytes of storage. That’s quite an overhead for a single feature in your web browser. Is there a better way?

In this post I’ll describe a data structure which provides an excellent way of solving this kind of problem. The data structure is known as a Bloom filter. Bloom filter are much more memory efficient than the naive “store-everything” approach, while remaining extremely fast. I’ll describe both how Bloom filters work, and also some extensions of Bloom filters to solve more general problems…”