Month: March 2014
Software Engineering Radio podcast with Martin Thompson discussing high-concurrency, low-latency, low-jitter software performance
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.
Apache Abdera: Open Source Atom Implementation written in Java
From the Apache Abdera website:
The goal of the Apache Abdera project is to build a functionally-complete, high-performance implementation of the IETF Atom Syndication Format
(RFC 4287) and Atom Publishing Protocol (RFC 5023) specifications.
Software Engineering Radio podcast with database expert Michael Stonebraker
I enjoyed this episode of the Software Engineering Radio podcast. I think Michael Stonebraker gives a pretty-good overview of the different types of databases on the market today and the different uses of each type.
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.
Great Book: Effective Java (2nd Edition) by Joshua Bloch
Effective Java is the currently the Java book that I reference the most. Each chapter is a short essay on a single topic complete with code samples.
gitflow: Git extensions for Vincent Driessen’s branching model
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:
MkDocs: Markdown-based static site generator written in Python meant for building documentation
Sphinx: A powerful documentation creation tool written in Python that uses the reStructuredText markup language
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
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>