Software Engineering Radio podcast with Martin Thompson discussing high-concurrency, low-latency, low-jitter software performance

Software Engineering Radio logo

In this episode of the podcast (entitled Mechanical Sympathy), Martin Thompson goes into detail about various aspects of software performance when there is high concurrency. He points out several pitfalls and myths of software performance. I have to admit that I have never given much thought to how data is stored in memory and moved around in hardware when designing software systems.

zerorpc: Python RPC implementation based on zeromq and messagepack

https://github.com/dotcloud/zerorpc-python

zerorpc is a flexible RPC implementation based on zeromq and messagepack.
Service APIs exposed with zerorpc are called “zeroservices”.

zerorpc can be used programmatically or from the command-line. It comes with a
convenient script, “zerorpc”, allowing to:

  • expose Python modules without modifying a single line of code,
  • call those modules remotely through the command line.

It looks like it used gevent for concurrency.

gitflow: Git extensions for Vincent Driessen’s branching model

gitflow screenshot from Vincent Driessen's blog

https://github.com/nvie/gitflow

These are git extensions that make it easier to use the Git branching model the Vincent Driessen proposed in this blog post.

Unfortunately, we’re still using CVS on my team at work, but we’re looking to switch to a more modern source control system soon. I’m lobbying for Git, but Subversion is the more likely choice.

Here are a couple more resources that talk about the gitflow branching model:

Sphinx: A powerful documentation creation tool written in Python that uses the reStructuredText markup language

Sphinx Logo

http://sphinx-doc.org/ (via)

According to the website, Sphinx…

…has excellent facilities for the documentation of Python projects, but C/C++ is already supported as well, and it is planned to add special
support for other languages as well.”

Sphinx outputs in the following formats…

HTML (including Windows HTML Help), LaTeX (for printable PDF versions), ePub, Texinfo, manual pages, plain text

Thymeleaf: Extensible Java-based XML / XHTML / HTML5 template engine

Thymeleaf Logo

A Java templating language. I like how the syntax modifies attributes on existing tags like this:

<input type="text" th:field="*{name}" />

From the Thymeleaf website:

Thymeleaf is a Java library. It is an XML / XHTML / HTML5 template engine
(extensible to other formats) that can work both in web and non-web
environments. It is better suited for serving XHTML/HTML5 at the view layer of
web applications, but it can process any XML file even in offline environments.

It provides an optional module for integration with Spring MVC, so that you
can use it as a complete substitute of JSP in your applications made with this
technology, even with HTML5.

The main goal of Thymeleaf is to provide an elegant and well-formed way of
creating templates. Its Standard and SpringStandard dialects allow you to
create powerful natural templates, that can be correctly displayed by browsers
and therefore work also as static prototypes. You can also extend Thymeleaf by
developing your own dialects.

Sample markup

<table>
  <thead>
    <tr>
      <th th:text="#{msgs.headers.name}">Name</th>
      <th th:text="#{msgs.headers.price}">Price</th>
    </tr>
  </thead>
  <tbody>
    <tr th:each="prod : ${allProducts}">
      <td th:text="${prod.name}">Oranges</td>
      <td th:text="${#numbers.formatDecimal(prod.price,1,2)}">0.99</td>
    </tr>
  </tbody>
</table>