Tag: programming

Exhibition “Das Netz” gets awarded

This exhibition at the German Museum of Technology, to which I contributed three exhibits, is the winner in a nationwide contest. It has won an award as an “Excellent Place in the Nation of Ideas 2015” in the category culture.

Polygon | new version 2.0.8 and 3.0.8

After more than one year I released new versions of my python packages for polygon handling. There are only two small changes:

  • fix to isInside() to be more reliable with nested contours
  • binaries ar now hosted at PiPY and can be installed with pip

This is my last release of Polygon2 for Python version 2.x, there will be no further updates.

Video of the new exhibits

TV.Berlin made a report on the new exhibition, showing two of my exhibits in action.

Watch the full video or start directly at 9m33s. You will see the Fiber Optic Communication and the Packet Routing exhibit.

MEMEX @ Das Netz

Interactive exhibit at “Das Netz” in the “Deutsches Technikmuseum Berlin” – cooperation with Felix Scharstein


The MEMEX is a historical vision of an american scientist, published in 1945, but never realized. It is a „device for individual use, which is a sort of mechanized private file and library“ based on microfilm technology. The most important idea is the creation of “trails”: links between pages – the first hyperlinks.

This interpretation of the MEMEX vision is based on digital components. The user can search the library, browse documents and create trails in a way that is very close to the original idea. The user interface is very simple but powerful.

My talk on the basic MEMEX idea and this exhibit at the Vintage Computing Festival Berlin 2015 can be watched here (in german language).

Hardware 4x Raspberry Pi, Arduino with 64-button-shield, TFT
PC as database server
Software distributed python-based sofware, communicating over XMLRPC


(All images by Bruno Torres Suñén – click image for a larger version)








Keyboard detail


Display detail


Keyboard – bottom side

Fiber Optic Communication @ Das Netz

Interactive exhibit at “Das Netz” in the “Deutsches Technikmuseum Berlin” – cooperation with Felix Scharstein

IMG_9186This device demonstrates data transmission over fiber optical cables. The sender unit emits light impulses when one of the buttons (0 or 1) is pressed. By sending eight bits a character is transmitted (ASCII code). A receiver unit shows the bits, the received characters and the data rate. The way of the light can be observed at the entrance and exit of the optical cable. The ASCII-code of all capital letters can be selected from a cylindrical table.

Sender PSoc 4 Microcontroller, capacitice Buttons,  high-power LED
Receiver PSoc 4 Microcontroller, phototransistor with trigger circuit, smart color display (eDIP TFT)

Sender, cable and receiver

(All images by Bruno Torres Suñén – click image for a larger version)


ASCII code table

Polygon | new version 2.0.7 and 3.0.7

Polygon logoAfter one and a half year I released new versions of my packages for polygon handling. There are no big changes, just some patches that have accumulated over the time. Most important are:

  • fixed some methods to work with instances of subclasses
  • fixed a bug in the SVG export (rgb), thanks to Diederik van Lierop
  • fixed a bug with exceptions in the initialisation, thanks to Diederik van Lierop
  • fixed a bug in gpc: replace on DBL_EPSILON with variable GPC_EPSILON, thanks to Peter Vavaroutsos
  • code changes to work with future versions of numpy (#define NPY_NO_DEPRECATED_API NPY_1_8_API_VERSION
  • added optional labels to SVG export and changed default colors, thanks to Diederik van Lierop (Polygon 3.0.7 only)

Packages can be found on bitbucket (Polygon2, Polygon3) and pypi (Polygon2, Polygon3).



Polygon | problems with nested and overlapping structures

Polygon is not able to handle nested and overlapping contours correctly. This is because the underlying structures and  functions of GPC have only a flat list of contours (solids and holes) without any hierarchy. A hole is not bound to a single solid but is valid for the whole Polygon. If your Polygon object contains more than one solid contour and at least one hole you may not get the results you expected.

One big problem is that it’s very easy to create such Polygon objects using standard operations! An example (thanks to Willie Maddox) illustrates this:

from Polygon import Polygon
poly3 = Polygon(((-3,-3),(-3,3),(3,3),(3,-3)))
poly2 = Polygon(((-2,-2),(-2,2),(2,2),(2,-2)))
poly1 = Polygon(((-1,-1),(-1,1),(1,1),(1,-1)))
p = poly3 - poly2 + poly1

p will be a square (poly3) with a hole (poly2) and a second solid contour (poly1) inside the hole:

 0:Contour: [0:1.0, -1.0] [1:-1.0, -1.0] [2:-1.0, 1.0] [3:1.0, 1.0]
 1:Hole : [0:2.0, 2.0] [1:-2.0, 2.0] [2:-2.0, -2.0] [3:2.0, -2.0]
 2:Contour: [0:3.0, -3.0] [1:-3.0, -3.0] [2:-3.0, 3.0] [3:3.0, 3.0]

But the hole is not bound to the outer contour, it is valid for the inner contour as well and covers it completely. If you do further operations with this Polygon the results may be wrong. p.isInside(0,0) will return False because the point is inside a hole, even if it is inside a second solid contour.

You may use the method p.simplify() to make the Polygon p valid for further operations, but you  may lose overlapping contours. The method first adds all solid contours and then substracts all holes. In the example above the inner solid contour is lost:

 0:Hole : [0:2.0, 2.0] [1:-2.0, 2.0] [2:-2.0, -2.0] [3:2.0, -2.0]
 1:Contour: [0:3.0, -3.0] [1:-3.0, -3.0] [2:-3.0, 3.0] [3:3.0, 3.0]

Unfortunately there is no easy way to change this behaviour. The main problem is located in the data structures of GPC, which is a core component of Polygon and can’t be replaced easily.

The Project Hosting Odyssey

I moved the hosting of my software projects again: from GitHub to bitbucket. My GitHub repositories will be available in the near future, but I will use bitbucket for development (until further notice 😉 ).

I must confess that I always used the free offers and never spent any money on project hosting. So I got a lot for free and should not complain. But all offers proved to be suboptimal or did not exist long enough to be a reliable platform.

After some self-hosted RCS,  CVS and SVN repositories (many years ago) I moved to Origo.ethz.ch. This pretty good service was closing after some years. One of my projects then moved to BerliOS. This service was announced to close as well, so I used this as a chance to switch to git and moved all my projects to GitHub.

After some time I needed a private repository for a closed-source project. Private repositories are not part of the free plan on GitHub, so I used bitbucket in parallel. Now that GitHub has decided to close the download area, I needed to find download hosting for packages. Instead of  using three different services I decided to move all my projects  to bitbucket today.

Some of my older projects (like Polygon) now outlived  a lot of different platforms and version control systems.