AAU Summerschool: Mobile Phone Programming

This summer (July 22 – August 9) we ran our mobile phone programming summer-school for students from around the world. This year we had 32 participants for the mobile phone programming track. During the three weeks the students get intensive crash course on mobile application development (this year the focus was on Android). Besides becoming familiar with various aspects of mobile programming the students also develop their own mobile applications. Typically this is great fun – and if you are interested in learning more about the upcoming AAU summer-schools or the mobile phone programming track, you can visit the AAU summer-school webpage here.

AAU-BME Joint PhD Course on Network Coding

aau_bmeThis summer (June 14th to 21st 2013) I participated in the PhD course “Network Coding: Theory and Applications” as an lecturer. The course was structured into three parts:

  • The first part provides the participants with the theoretical tools necessary to understand the field of network coding and focuses on the underlying algebraic principles. It will also introduce distributed randomized network codes and discuss their properties, including throughput, robustness, delay, and security. We will not assume any prior knowledge of advanced algebra or optimization.
  • The second part of the PhD course gives an overview of the different application areas and discusses, which types of networking problems are amenable to network coding (and which aren’t). In particular, it covers practical algorithms for data gathering in sensor networks, routing in wireless mesh networks, peer-to-peer networking and content distribution, streaming applications, etc.
  • The third part will discuss implementation aspects in real-world systems, ranging from core network routers all the way down to mobile phones and tiny sensor nodes. The constraints imposed by these devices in terms of available memory and computing power may differ by several orders of magnitude. As a consequence, the encoding and decoding algorithms need to be carefully adapted to the specific problem at hand.

You can find more information about the course on the course webpage.

Paper: Network Coding Over The 2^32-5 Prime Field

icc-roundedEarlier this year at ICC 2013 in Budapest I presented a paper presenting our work on Network Coding over the 2^32 – 5 prime field.

Abstract:
Creating efficient finite field implementations has been an active research topic for several decades. Many applications in areas such as cryptography, signal processing, erasure coding and now also network coding depend on this research to deliver satisfactory performance. In this paper we investigate the use of prime fields with a field size of 2^32 − 5, as this allows implementations which combines high field sizes and low complexity. First we introduce the algorithms needed to apply prime field arithmetics to arbitrary binary data. After this we present the initial throughput measurements from a benchmark application written in C++. These results are finally compared to different binary and binary extension field implementations.
The results show that the prime field implementation offers a large field size while maintaining a very good performance. We believe that using prime fields will be useful in many network
coding applications where large field sizes are required.

Find the paper here.

Kodo version 10.0.0 relased

We just released the Kodo network coding library version 10.0.0 containing the following changes:

  • Bug: Fixed incorrectly failing assert in the linear_block_encoder. The assert was triggered during recoding when a storage for a specific symbol was not explicitly set by the layer::set_symbol() or layer::set_symbols() functions. The bug was introduced in version 9.0.1, the unit test has been updated to correctly detect this issue in the future.
  • Major: All codec stacks using the linear_block_encoder, should now add the storage_aware_encoder layer below the linear_block_encoder. This is to ensure that the encoder is reusable for RLNC recoding.
  • Major: Re-factor symbol storage API to avoid confusion about which symbols has been explicitly specified by the user and which have not. This information is now available through the symbols_available(), symbols_initialized() family of functions.

As always the code is available on the github repository: https://github.com/steinwurf/kodo/

New Kodo versions and ns-3 example

There is now two new versions of the Kodo network coding library available.

9.0.1

  • Bug: Fix behavior or deep_symbol_storage::set_symbols() to set all symbols.
  • Bug: When reusing decoders contaning the linear_block_decoder layer systematic symbols where not correctly initialized. A fix was added to the linear_block_decoder and the unit test test_reuse_incomplete now checks for this issue.

9.0.0

  • Minor: Adding the shallow storage decoder which allows decoding objects larger than a single block or generation.
  • Minor: Adding new example of an on-the-fly encoder. This example shows how to use an encoder before all symbols for that encoder has become available. This can be very useful in cases where data is produced on-the-fly, e.g. some form of streaming. The example can be found in the “examples/encode_on_the_fly” folder.
  • Minor: Adding a deep storage decoder which provides the memory needed to decode a large object spanning several blocks
  • Minor: Adding simple decoding example. This example shows how to input symbols and coefficients directly into the decoder and how some of the debug layers can be applied to debug the decoding process.
  • Bug: Made all factories non-copyable by making copy constructor and copy assignment constructor private.
  • Bug: Fix issue in recoding_symbol_id, where sak::copy_storage triggered an assert when using an decoder with symbols less than max_symbols.
  • Major: Changed construct() and initialize() functions of a coding layer to accept the factory as the only parameters. This breaks backwards compatibility with Kodo version 8.0.0.
  • Major: Changed the factory build() function to accept no parameters. Factories are now configured e.g. using set_symbols(uint32_t) before calling build() to create a new encoder / decoder.
  • Minor: Moved finite_field_counter layer from the benchmarks to the library source folder. This makes it possible to add it to any codec stack where the number of finite field operations should be monitored.
  • Minor: Updated to waf-tools version 2.x.y
  • Major: Updating dependency to gauge version 5.x.y

Kodo and the ns-3 simulator

In addition to the two new releases of Kodo you can also find an example showing how to use Kodo together with the ns-3 simulator. By using the ns-3 simulator you can simulate the use of network coding in many different network environments. You can find the example and more descriptions here. Have fun :)

 

Tutorial Chair IEEE CAMAD 2013

camadLater this year I will serve as the tutorial chair at the IEEE CAMAD 2013 workshop in Berlin the 25-27th September. More information about the workshop topics and scope can be found on the webpage.

The important dates are:

  • Paper submission: May 1, 2013
  • Notification of acceptance: July 15, 2013
  • Submission of camera-ready papers: August 10, 2013
  • Workshop dates: September 25-27, 2013
  • Tutorial proposal: June 1, 2013

Find the call for tutorials here. If you have an idea for a tutorial which you think fits the call, please do not hesitate to send in a proposal.

New version of the Kodo Network Coding library

A new version of the Kodo Network Coding library has been released.

One of the nice features of the new release is the new structure in the library making it easier to figure out where specific functionality resides. The structure is defined within “API layers”, this is further explained in the Kodo manual.

In addition to this the new version 8.0.0 include the following changes:

  • Updated layers to follow new API specifications. This change will break most existing layers. The API specification is available in the doxygen folder.
  • New API for object/file encoders, makes it easier to support custom data sources e.g. such as memory mapped files.
  • Added file encoder example.
  • Replaced the old generator API with new Coefficient Generator API.
  • Updated the factory APIs to pass the factory to each layer. This simplifies construction in several layers, where previously it was not possible to access the factory.
  • Updated waf to 1.7.9 and enabled use of the wurf_install_path tool.

The Kodo source code is available on  github.

Proposed IRTF Network Coding Research Group (nwcrg)

At the latest IEFT (Internet Engineering Task Force) meeting 86 in Orlando Florida I participated in what will hopefully become an established IRTF (Internet Research Task Force) Research Group on Network Coding (nwcrg).

The IETF is the organization responsible for many of the standards used on the Internet today (commonly known as RFCs). Where the IETF develops the protocols used on the Internet today, the IRTF on the other hand focuses on more long term research into technology related to the future development of Internet protocols.

At the IRTF meeting I presented the Kodo Network Coding library as a tool which could be used by the nwcrg for research on network coding algorithms and development of network coding based systems. You can find my slides  here.

If you are interested in the development of network coding based protocols and systems, join the mailing list and participate in the discussions. Find more information at the  nwcrg homepage.

Teaching Assistant at Computer Science (Computer Architecture)

rgThis spring I had the pleasure of being teaching assistant at the “Computer Architecture” course at AAU’s Computer Science Department. The course objectives are to make the students familiar with low-level aspects of computer architecture such as:

  • Microcode
  • Processor instruction sets
  • Processor architecture
  • Runtime environment
  • Memory hierarchy
  • Operating systems and processes

The topics are covered in 12 lectures from the 7th of February to 5th of May.

The course is based on the excellent book “Computer Systems: A Programmer’s Perspective which I would recommend everyone with an interest in low-level programming to read.