Wednesday, May 11, 2016

Embedded programming

Excellent talk by John Light: Embedded Programming for IoT.  Light is involved in Iotivity development.

He talks a little bit about coroutines but the talk focuses mostly on memory management in very constrained environments.  He has also written about this topic: blog:

Heap Allocation on the Internet of Things

IoT Memory Management: A Case Study

On the Iotivity wiki:

Memory Management Design

Memory Management Design ii

Memory Management Design iii

Wednesday, April 20, 2016

TikZ (PGF) Packages

I haven't found an up-to-date list of packages that use/support the wonderful PGF/TikZ library, so I went through the latex packages in the latest TexLive and found these.  It's not exhaustive but it's better than nothing.  I excluded some libraries that use pgf/tikz under the covers (e.g. chemmacros).


  • aobs-tikz  -  overlayed pictures in beamer
  • bloques -  control blocks
  • blox - block diagrams
  • bondgraphs - 
  • braids - braid diagrams
  • celtic - celtic-style knots
  • circuitikz - electrical and electronic networks.  NB: tikz 3.0.1a has builtin support for some circuit libraries that was inspired by this library.
  • csvsimple - uses key-value syntax from pgfkeys
  • diadia - diabetes diary
  • endiagram - potential energy curve diagrams
  • forest - linguistic trees
  • hf-tikz  -  highlight formulas
  • hobby - a tikzlibrary implementing John Hobby's algorithm for cubic bezierz curves
  • makeshape - method of creating custom shapes in PGF
  • mframed  - Framed environments that can split at page boundaries
  • ocgx - Optional Content Group support (layers)
  • pgf-blur - blurred shadows
  • pgf-soroban
  • pgf-umlcd
  • pgf-umlsd
  • pgfgantt
  • pgfkeyx
  • pgfopts
  • pgfornament
  • pgfplots
  • prooftrees  -  based on forest
  • sa-tikz "a library to draw switching architectures"
  • spath3
  • tikz-3dplot
  • tikz-cd  -  commutative diagrams
  • tikz-dependency - dependency diagrams for linguistics
  • tikz-dimline  -  technical dimension lines (e.g. showing a widget is 4cm wide, etc)
  • tikz-feynman
  • tikz-inet  -  interaction nets
  • tikz-opm  -  Object Process Methodology diagrams
  • tikz-plattice  -  particle accelerator lattices
  • tizk-qtree -  2012.  NB: tikz 3.0.1a (and maybe earlier) has extensive built-in support for trees
  • tikz-timing - timing diagrams
  • tikzinclude - importing images
  • tikzmark  -  mark a point in a page for further use
  • tikzorbital - molecular diagrams
  • tizkpagenodes - extending current page nodes
  • tikzpfeile  -  arrows
  • tikzposter - generate scientific posters
  • tikzscale - absolute resizing
  • tikzsymbols - great collection of symbols that started with cookbook symbols and then grew
  • tkz-orm - Object-Role Model drawing.  NB: *not* part of the TKZ collection.
  • visualtikz - excellent visual documentation for tikz: extensive collection of simple examples showing syntax and result

The Altermundus TKZ Collection

This collection of PGF/TikZ libraries by the prolific Alain Matthes is so awesome it deserves its own section.  Some of the documentation is in French only.  (Note the spellings, tkz v. tikz)
  • alterqcm  -  two-column multiple choice questions  (Fr)
  • tizkrput - macro for placing stuff
  • tkz-base
  • tkz-berge - graphs (En)
  • tkz-euclide - an amazing library for doing good old fashioned geometry.   The doc is in French but if you know TikZ you can probably figure it out; if not, its a very good reason to learn French.
  • tkz-fct - 2d function plotting
  • tkz-graph  - more graphs (Fr)
  • tkz-linknodes - links between lines of an environment (En)
  • tkz-kiviat
  • tkz-tab  -  very fancy table support (Fr)
  • tkz-tukey

Monday, April 11, 2016

Developer-friendly IoT devices and tools

IoT Overview:
  • Arduino/Genuino 101 - the new Arduino uses the Intel Curie!  See also the Intel Arduino101 site.
  • ESP8266  This is a very impressive and cheap little IoT device - MCU, WIFI, etc. for a couple of bucks!  Breakout modules for anywhere from $6 to $10.  Do a web search and you'll find lots of ESP8266 info and products; a good place to start is  Support for Lua and Javascript.  CAVEAT: the ESP8266 has already been through numerous versions so make sure you get the one you want.
  • Intel Edison - a little more expensive but a lot more powerful - a CPU running Linux, a separate MCU, a DSP, Wifi, Bluetooth, lots of memory, etc.
  • Texas Instruments has tons of IoT stuff.  Look for the Launchpad for the device you're interested in - these are inexpensive Arduino-like dev boards that make it easy to tinker.  The website also has lots of background info, whitepapers, training vids, etc.  See in particular
  • OpenMote
  • Other HW vendors: the semiconductor market is very competitive, with many major players and heaven knows how many smaller ones. Many of them are beginning to offer Arduino-like development boards for products that previously would only have been of interest to professional EEs.  See for example:
    • NXP - Formerly Philips Semiconductor.  NXP recently acquired Freescale, which was formerly the semiconductor division of Motorola
    • Atmel - recently acquired by Microchip.  Up until the release of the Arduino101, which uses the Intel Curie MCU, Arduinos used Atmel MCUs
    • STMicroelectronics
  • Online IoT-friendly retailers: lots.  I've had good luck with these, but there are lots of others; do shop around.
  • Make - maker zine

  • Espruino
  • NodeMCU "open-source firmware and development kit that helps you to prototype your IOT product within a few Lua script lines"  (ESP8266)
  • AT&T Flow - web-based dev environment.  based on:
  • Node-RED - "A visual tool for wiring the Internet of Things" (developed and open-sourced by IBM)
  • Alljoyn
  • Iotivity
Operating Systems:
Standards bodies:

Cloud services - testing, data storage, etc.

  • IoT-LAB  "IoT-LAB provides a very large scale infrastructure facility suitable for testing small wireless sensor devices and heterogeneous communicating objects."

  • awesome-iot - a list of IoT resources somebody put on github
  • IPSO Alliance page listing devices for building smart objects

Saturday, March 19, 2016

Coinduction Resources

Here are some materials I've found useful in trying to understand coinduction and related notions. Most of them involve some pretty heavy mathematics, but their introductions usually provide an overview and some examples that will help you develop your intuitions even if the math is over your head.

Some major figures, all of whom have made many publications available on their homepages:

A good place to start is An introduction to (co)algebra and (co)induction (PDF) by Rutten and Jacobs. (in Advanced Topics in Bisimulation and Coinduction).  The first part gives several concrete examples that will help you understand coinduction.

Coinductive Models of Finite Computing Agents by Wegner and Goldin.  Free version available on their homepages.

Communicating and Mobile Systems: the Pi Calculus, Milner.  Not easy to read, but well worth the effort.

An interesting paper showing how the concepts of bisimulation and bisimilarity emerged independently in computer science, philosophical logic, and set theory:  On the Origins of Bisimulation and Coinduction, Sangiorgi.  Free version available on author's homepage.

Universal coalgebra: a theory of systems, Rutten.  A landmark paper, I gather.  You can find a free version on Rutten's homepage.

Coalgebraically Thinking, David Corfield (blog post, n-Category Cafe, 2008)

This seems to be a growth industry; a number of introductory texts have been published in the past few years: