Go from C to Go

“It’s time for the Go compilers to be written in Go, not in C. I’ll talk about the unusual process the Go team has adopted to make that happen: mechanical conversion of the existing C compilers into idiomatic Go code.”

Transactional Memory: History and Development

“Parallel programming is difficult. When using systems with common memory, you can’t go without synchronization of parallel processes/threads access to the common resource (memory). The following are used for it:

– locks (mutex);
– lock-free algorithms (lockless);
– transactional memory.

Transactional memory is a technology of concurrent threads synchronization. It simplifies the parallel programming by extracting instruction groups to atomic transactions. Concurrent threads operate paralleled till they start to modify the same memory chunk. For example, operations of nodes adding to the red/black tree (animation in the heading) can operate in parallel in several threads…”


A Practical Introduction to Docker Containers

Docker has quite an amount of buzz around it today because it makes so many things easy that were difficult with virtual machines.

Docker containers makes it easy for Developers, Systems Administrators, Architects, Consultants and others to quickly test a piece of software in a container; much quicker than a virtual machine, and using less resources. The average command in Docker takes under a second to complete…”


Using Supervisor with Docker

“Traditionally a Docker container runs a single process when it is launched, for example an Apache daemon or a SSH server daemon. Often though you want to run more than one process in a container. There are a number of ways you can achieve this ranging from using a simple Bash script as the value of your container’s CMD instruction to installing a process management tool.

In this example we’re going to make use of the process management tool, Supervisor, to manage multiple processes in our container. Using Supervisor allows us to better control, manage, and restart the processes we want to run. To demonstrate this we’re going to install and manage both an SSH daemon and an Apache daemon…”


Everything you did not want to know about Unicode in Python 3

“Readers of this blog on my twitter feed know me as a person that likes to rant about Unicode in Python 3 a lot. This time will be no different. I’m going to tell you more about how painful “doing Unicode right” is and why. “Can you not just shut up Armin?”. I spent two weeks fighting with Python 3 again and I need to vent my frustration somewhere. On top of that there is still useful information in those rants because it teaches you how to deal with Python 3. Just don’t read it if you get annoyed by me easily.

There is one thing different about this rant this time. It won’t be related to WSGI or HTTP or any of that other stuff at all. Usually I’m told that I should stop complaining about the Python 3 Unicode system because I wrote code nobody else writes (HTTP libraries and things of that sort) I decided to write something else this time: a command line application. And not just the app, I wrote a handy little library called click to make this easier.

Note that I’m doing what about every newby Python programmer does: writing a command line application. The “Hello World” of Python programs. But unlike the newcomer to Python I wanted to make sure the application is as stable and Unicode supporting as possible for both Python 2 and Python 3 and make it possible to unittest it. So this is my report on how that went…”


Go Open Source

“Recently we wrote about how we transliterated a large Python codebase to Go. In doing so we ended up porting or writing some useful things we had already written in Python or Python already had. We’ve also written some useful tools for understanding and debugging Go. We’ve decided to open source these Go libraries and give them back to the community as a way of saying thanks…”


MySQL dumps

“As part of the HTTP Archive project, I create MySQL dumps for each crawl (on the 1st and 15th of each month). You can access the list of dumps from the downloads page. Several people use these dumps, most notably Ilya Grigorik who imports the data into Google BigQuery.

For the last year I’ve hesitated on many feature requests because they require schema changes. I wasn’t sure how changing the schema would affect the use of the dump files that preceded the change. This blog post summarizes my findings…”


KVM and Docker LXC Benchmarking with OpenStack

“Linux containers (LXCs) are rapidly becoming the new “unit of deployment” changing how we develop, package, deploy and manage applications at all scales (from test / dev to production service ready environments). This application life cycle transformation also enables fluidity to once frictional use cases in a traditional hypervisor Virtual Machine (VM) environment. For example, developing applications in virtual environments and seamlessly “migrating” to bare metal for production. Not only do containers simplify the workflow and life cycle of application development / deployment, but they also provide performance and density benefits which cannot be overlooked.

At the forefront of Linux Container tooling we have docker — a LXC framework / runtime which abstracts out various aspects of the underlying realization by providing a pluggable architecture supporting various storage types, LXC engines / providers, etc.. In addition to making LXC dead easy and fun, docker also brings a set of capabilities to the table which make containers more productive including; automated builds (make files for LXC images), versioning support, fully featured REST API + CLI, the notion of image repositories and more…”


Introducing Zabbix Monitoring Cartridges for OpenShift

“We often get questions from OpenShift Online users about how to monitor applications. Our Operations team already uses Zabbix to monitor the components of OpenShift Online, so we thought Zabbix would be a natural choice for gear-level monitoring as well. I have written two cartridges for this: a server and an “agent”. Both of these cartridges are built using the Cartridge Development Kit to avoid having compiled zabbix binaries in my source repo or a compilation step at deployment time…”