introduction

I am Tibor Palinkas, software developer with an interest in hardware and engineering in general. I have a lab at home where I build electronics (including etching PCBs), enclosures/mounting and precision mechanics. I also contribute to Free Software and open data (OpenStreetMap).

My semi-anonimized CV is available here. Please contact me for the "uncensored" one (and/or the html version or the source).

This page lists a few examples of my work I've been spending my free time on. The list focuses on larger projects, a lot of smallish tools and hardware modules are omitted from the list.
category project
software My favorite programming language is AWK. I maintain a fork of mawk, called libmawk. It can be embedded in applications to provide scripting facilities, similar to how python, tcl and other languages are embedded.
project page
software The 3rd version of Plumb is a special shell that can run multiple processes in parallel and connect them with pipes. It's the generalized version of the usual shell pipeline, allowing the user to build a pipe network that may contain loops. Plumb also features very low overhead filters that can be inserted anywhere in the pipe network without running more processes. The pipe network can be reconfigured on the fly, even by processes started from within plumb. The project is built on top of libporty and is portable.
project page
software A group of smallish projects attempts to solve portability issues: scconfig, libporty, libwharf. Scconfig is a ANSI C implementation of ./configure that does not depend on M4 or other large-footprint external tools. Libporty is a minimalistic portability lib (configured with scconfig) that provides a common API to the file system, networking, date/time and some other system-specific services. Libporty works the same way on Linux, win32, and many BSD and proprietary UNIX variants. Libwharf is a higher level API on top of libporty that deals with portability in an indirect manner: it provides calls that are more convenient to use than lower level and/or less portable standard ones. Scconfig can be used without libporty and libporty can be used without libwharf.
scconfig
libporty
svn://repo.hu/libwharf/trunk
software Minetd is a minimalistic inetd implementation. It is very easy to set it up, does not require root privileges and handles EOF and half-closed sockets properly.
project page
software The repo.hu framework is an svn based automated build and release system. It removes administration from the work-flow: developers can work and commit without any extra actions for updating the web. If a commit updates the web directory, the web page is updated transparently on the server; if the commit changes the Debian changelog, the preconfigured build server(s) will build and publish new binaries; if a new svn tag appears, a source release is packed up automatically.
project summary
programming contest My favorite international programming contest is Challenge24. After a few years of participating as a contestant (as a member of team "puddingforce") we have been invited to joined the organizers. For 5 years between 2010 and 2014 we've spent most of our times between September and May with designing, implementing, testing and documenting tasks for the problem set. I was also participating in building the network, the server farm and random other aspects of the event. My favorite fields were designing and building the hardware tasks and the sound/image/signal processing problems.
about the contest
archives
software, hardware related full Linux support for mcp2200 (built on top of hidapi) - CLI tool for configuring the device, controlling the GPIO and loading/dumping the EEPROM. This project depends on avrfuse and works from a config file. Mcp2200 is an rs232-usb gateway chip.
svn://repo.hu/projects/util/trunk/mcp2200hid
firmware It's tricky to find a good compromise between easy-to-reuse C code and squeezing-out-the-last-bits-of-the-architecture hardcore assembly. libctio attempts to achieve this by exploiting the optimizer in gcc-avr, and a bit of macro wizardy. At the end, generic code is relocated to specific GPIO pins and reconfigured for specific features in compile time, without code generation. The result is usually as code-space-efficient as a specific code designed for a given application, still reusable in other setups. The lib currently features generic drivers for stepper motors, seven segment displays, bitbanged rs232, AT/PS2 keyboard, CAS/RAS memory addressing.
svn://repo.hu/projects/lib/trunk/libctio
software, hardware related Programming the fuse bits of AVR devices is not fun with hex numbers; avrfuse is a small script that takes device specific fuse settings from a text config file, calculates and programs the bits. It can also read the fuse bits of a device and generate or update the config file.
svn://repo.hu/projects/util/trunk/avrfuse
hardware, ch24 Homemade laser cut CNC machine that operates on a ~350*350 mm area, positioning the 4 Watt IR semiconductor laser module at a ~0.05mm resolution. The key elements of the mechanism are extracted from old Epson dot matrix printers. The device features custom, modular electronics, multiple levels of safety features (since the beam is literally blinding). The dedicated firmware calibrates the device, gets commands over an RS232 line and calculates the timings to drive all the stepper motors and the output power of the beam. I most often cut paper with it, but it's possible to cut thin and dark plastic as well. I have a toolchain for Linux for designing the cutouts.
hardware cArVeR is an advanced version of the classic "bsd" programmer for AVR microcontrollers. It operates from the parallel port of a PC and allows switchless in-circuit programming even when the circuit uses the SPI pins.
hardware I debug my microcontroller projects with my stddbg device, which is a two-wire "serial port" for any microcontroller. A special self-clocked protocol that exploits a corner case of the usual bidirectional GPIO implementation allows the device to use a single probe (gnd and line). The device automatically detects the supply voltage level of the board being debugged and converts the stream to RS232. The firmware of the debugged board can use this facility to write logs/traces at low cost: losing only one GPIO pin, a few 10 uS per character and about 50..100 bytes of code memory.
svn://repo.hu/openhw/projects/lab/stddbg
open data OpenStreetMap (or osm in short) is a collaborative effort to build a world map that is free - map data reusable without the usual commercial restrictions. Around crowded areas, osm is also more detailed and more up to date than most commercial maps (including the "free" online ones ran by large search engine companies). My contribution in the past few years include:
  • address interpolation net (low resolution house numbers) for the 4th and 13th district of Budapest - built with a commercial GPS device, field survey on my bike and a script to convert and semi-automate importing of the data collected on field
  • digitizing/tracing buildings of Budapest from aerial images; as of late 2014, I've done about 37k buildings already - which is about 60% of all buildings osm has in Budapest.
  • digitized/traced half of the buildings in Vac and in Labatlan for mapping parties.

statistics about my overall contribution