(Diese Seite ist nur in Englisch verfügbar.)
...shows a selection of programs I've written for various purposes and computer platforms.
It falls far from being complete, but shows my various interests and - hopefully - the occasional remarkable or beautiful product.
If you are interested in any of these programs, or if you want to contribute to their improvement, or to provide feedback, please contact me.
All material shown here, including screenshots and photos, was produced by myself; thus I'm holding the respective copyright. Trademarks may be mentioned on this page without notice, they are the property of their respective owners.
For simplicity, I start by putting all examples onto a single page. This list provides orientation:
Yet to come:
GraTaSim based solutions | |||
Name | Description | ||
---|---|---|---|
Setups for Frey Quincy PCnet / General Practice | Set of printed digitizer menus with overlays, documentation, and configuration files tuned to the requirements of a general medicine / family medicine practice, available in several revisions. | ||
Setup for Frey Quincy PCnet / Orthopedics | Set of printed digitizer menus with overlays, documentation, and configuration files tuned to the requirements of an orthopedic practice. | ||
Setup for Frey Quincy PCnet / Madaus study | Add on of a small printed digitizer template to support the convenient and fast collection of specific data for a medical study in general practices. | ||
Various setups for the original Quality-of-Life-Recorder, implementing the QLQ-C30 and other questionnaires | The initial implementation of the QL-Recorder provided a printed questionnaire template on a large dititizing tablet. GraTaSim sent simulated keyboard entry macros to dedicated software that performed data collection, and calculation, storage, and printout of results. It answered the question of Prof. Franz Porzsolt, University of Ulm, whether I could build a platform for electronic patient questionnaires :-) |
The Quality-of-Life-Recorder | ||||||
In addition to the information presented in the GraTaSim sections above, and on www.ql-recorder.com, I mention some key components for the QL-Recorder backend here, and the more recent versions and additions. Let me note here that by using appropriate tablet templates, the original QL-Recorder with its digitizer input could also be used for very fast scoring of questionnaires collected on paper; including automatic measurement and scoring of linear-analog-scales/visual-analog-scales. Multiple individuals, institutions and companies have supported this project - more information is available on its own WWW site, in AnyQuest for Windows' on-line help, and in related scientific publications. | ||||||
Name | Category | Platform | Language | Description | Preview | |
---|---|---|---|---|---|---|
QLQ-C30, QLQ-C33 1993-1994 | Platform for electronic patient questionnaires; Medical outcomes; Quality-of-Life; Clinical trials; Statistics; Advanced user interface | PC/AT, DOS, GraTaSim, Digitizer, Printer, Network | Turbo Pascal, GraTaSim | The original software for the QL-Recorder backend, accepting input from the digitizer, checked for correctness [not required with the digitizer but with alternative manual keyboard input] and completeness, computing results, and printed output, was made for a single questionnaire, the EORTC QLQ-C30. A second version was made for the QLQ-C33. | ||
AnyQuest for DOS and GraTaSim 1995-2001 | PC/AT, DOS, GraTaSim, Digitizer, Printer, Network | Turbo Pascal, GraTaSim; AnyQuest | AnyQuest was the name of an improved backend software that could be configured for a variety of questionnaires, with regard to: number of questions, screen display for each question, possible answers, computation formulas, storage and output format, and enhanced group, name and date-of-birth information. This software also supported the usage of multiple questionnaires in one session, and questionnaires that required multiple pages on the screen. Early configurations were prepared for the QLQ-C33 and the QLQ-C30 version 2 in German, English, and Polish. | The examples were wrapped in HTML files to tell your browser to use charset IBM-850. Actually, IBM-437 would be better, and the single printout bargraphs suffer from that, you can chose it manually if your browser knows it. | ||
QLQG2EXC, QLQG2SPI 1993-1994 | PC/AT, DOS | Turbo Pascal | Conversion program which exported data from individually stored questionnaire administration results in tabular format for MS Excel and SPIDA | |||
extract, extract2 1994-1995 | PC/AT, DOS | Turbo Pascal | Configurable conversion program which exported selectable data from individually stored questionnaire administration results in tabular format for e.g. MS Excel and SPIDA, or towards other target software. | |||
AnyQuest for Windows 1996-2009 | PC/AT, MS Windows or compatible environment (Linux+WINE, SoftWindows etc.), Mouse, TouchScreen, Pen-Computer, Printer, CardReader, Barcode-Scanner, Network etc. | Borland Pascal, WIN32 API, AnyQuest | AnyQuest for Windows became the successor of AnyQuest for DOS, when pen-computers and touch-screens with colour displays integrated the previously separate digitizer with the display. An editor, and advanced printing and analysis tools are integrated, talking, interactive, and morphing questionnaires, and interfacing with external applications or databases are possible. This was first supported by Prof. Alan Coates, Sydney, who acquired a Fujitsu Stylistic to try the system with patients. Various people, institutions and companies have used and supported it. Details are available on its own WWW site, in AnyQuest for Windows' on-line help, and in related scientific publications. | The Quality-of-Life-Recorder WWW-Site will appear in a new browser window. | ||
ANQ2GDT, GDT2ANQ 1999-2005 | PC/AT, DOS | Borland Pascal | Configurable conversion programs that implement a bidirectional interface between AnyQuest and xDT, GDT, LDT environments This enables the following workflow:
Effectively, this means that the Patient-ID is taken from a master system before test administration, and the results are transferred back to that master system automatically. The use of a standard interface means that a variety of host systems are supported. (Related solutions were made for similar tasks.) | |||
AnyQuest for Java 2000 | Early prototype; Simple technology demonstrator | Java virtual machine (in- or outside of WWW-browser) | Sun Java | AnyQuest for Java is meant to provide the large library of questionnaire definition files available for AnyQuest for Windows through a more platform-independent, more easily distributable (possibly WWW-browser-based) frontend. Only a technology demo was made so far, because I've devoted most of my energy to AnyQuest for Windows. Given an interested party and sponsor, however, this could quickly be brought to a usable state. | ||
AnyQuest Server 2008 | Working prototype | Linux, Perl, Apache, MySQL, GNUplot | Perl, SQL, bash, HTML, GNUplot | AnyQuest Server is designed as backend for a study center. It accepts questionnaire administration results from AnyQuest for Windows (or in the future: AnyQuest for Java, and additional web forms), and provides multicenter study monitoring and support, statistical analyses immediately available via WWW clients, a database-repository directly accessible for statistical software like SPSS or SAS. WWW access and data transmission use SSL. Graded access levels for patients, physicians, study contributors, study monitors, administrators are supported. SQL queries can be defined and stored in a query repository; query results can be displayed in the WWW interface or downloaded as tables. Graphical analyses are provided via GNUplot; they appear in the WWW interface as well, and can be downloaded in a large variety of formats, multiple images are automatically provided in zipped packages. Pre-defined queries and graphs can be displayed through dedicated web pages. The layout of the WWW interface can be changed to a single or multiple concurrent studies requirements. | Access to a running server and a demonstration can be arranged upon individual request. |
(Other) GraTaSim spin-offs | ||||
Over the years, multiple derivates deployed the stable and versatile TSR basis originally produced for GraTaSim. Some of these included interactive portions coming temporarily to the foreground, some supported reading from the screen. The most recent one included keystroke and screen monitoring, reminders, and a minimal HTML/WWW browser to provide interactive medical guidelines - in closely corresponding versions for the DOS and Windows worlds! A common feature of this series of programs is that they helped streamline a workflow, by letting machines, computers and users interact in a way that reduced all required keystrokes down to the logical minimum (often: zero), and that they were designed to be programmable, adoptable, and thus able to control a variety of applications in a similar way. Large portions of GraTaSim and its successors were programmed in 80286 Assembler, so the resulting TSR programs had only a few KB in size and could coexist with about anything in use in the DOS environment. Their rare functionality and know-how even remained useful (and in production use) till far beyond the MS-DOS age, at least until 2005. | ||||
Name | Description | |||
---|---|---|---|---|
OMR-Sim 1991 |
Here, a special Optical-Mark-Recognition (OMR) card reader is used to control the macro programmable keyboard simulator. This solution was made for a physician who wanted to keep his workflow, but replace the underlying outdated system that was partly controlled by special OMR cards (similar to contemporary questionnaires for OMR systems), which contained pre-printed marks that specified several procedures, and fields to be marked with a pencil, to add data. Once again, the programmable behaviour of OMR-Sim, and the mechanism of simulating keystrokes to the foreground application, do not require any change in the foreground application while allowing complete control of it without necessity for any manual keyboard input. | |||
DataSim 1992 |
Here, an interactive portion of the TSR can be put into the foreground on demand. It can be used to select content from a disk file (using the mouse); the selected content can then be entered (pasted) into whatever program was active before and interrupted, as if it were typed in using the keyboard. This solution was originally made, to enter text acquired via a scanner- and optical-character-recognition (OCR) source, into a business application that offered no interface for reading external files - mind you, this was in the DOS-era, when there was no such thing as a ubiquitous clipboard! As a matter of fact, it came in handy later for some disaster recovery, where a lot of textual data that had only survived on paper or in plain files, had to be re-filled into an empty system replacing the crashed one. | |||
ComSim 1993 |
This solution connects a serial port COM1 or COM2 directly to a simulated keyboard entry generator. Effectively, this allows to control a PC via the serial port as if it were controlled from a directly connected keyboard. Simple. - But as you can easily feed bulk stuff into that serial connection from out of files or directly from out of other programs, and faster than anyone can type, this opens a few more possibilities... | |||
CKSim 1993 |
This solution connects a health-insurance card reader at a serial port COM1 or COM2 to the simulated macro programmable keyboard. When an insurance card is put into the card reader, it is automatically read, and the desired input form of the target program is called (either for a known patient, or for a new patient), and the values from the card or the updated date of the current visit are entered. Effectively, this allows for zero-keystrokes-needed operation of the health-insurance card reader. | |||
AugenSim 1993-1994 |
This solution for ophthalmologists connects a Phoromat and a Phoropter, both connected to serial ports COM1 and COM2 of a PC, to the simulated keyboard entry generator. Programmable macros, dynamically merged with data coming from and going to the two special machines, provide the following functionality:
So the documentation of old and new parameters as well as the filling in of a prescription work completely automatically, and no human typing is needed to move parameters along between the two specialized measuring devices and the practice management computer system. As AugenSim runs as TSR and acts through programmable keyboard macros, it can theoretically control any application that uses the keyboard as standard input device, without requiring any change in the controlled application itself. Screen reading ensures that a patient is selected in the controlled application before AugenSim becomes active. | |||
InfoSim 2003-2005 |
This solution implements a platform for interactive, event-triggered medical guidelines - it is available in parallel versions for DOS and Windows environments - with the following functionality:
This solution was developed at the Department of General Medicine at the University of Göttingen upon invitation by Prof. Michael Kochen and colleagues, for a project (MedViP) funded by the German Ministry of Education and Science (BMBF). |
Programmable menu environment | ||||||
Name | Category | Platform | Language | Description | Preview | |
---|---|---|---|---|---|---|
Menu 1991-1993 | Top menu environment; comfortable user interface; Workflow support | PC/AT, DOS | Turbo Pascal | A freely programmable, multilevel top menu system that showed up on clients (workstations) in a practice network system and allowed the user to start up the main practice management system, or backup jobs, or a variety of tools and support programs from a comfortable user interface. It works through a mechanism of dynamically generating and modifying batch files, so that no portion of itself needs to reside in memory while any called program runs - and that was required in times of DOS and Netware, because memory was often a scarce resource! The system supports networks, comfortable interactive editing of menus, windowing, and password protection of menu entries. Menu items can be selected with the mouse, cursor keys or shortcut keys. Development of this software was supported by Dr. Wolfgang and Annerose Streibl, AR$T EDV, since 1991. |
Emulator Ultra filesystem reader and directory lister | |||||
Name | Category | Platform | Language | Description | Preview |
---|---|---|---|---|---|
emufsreader 2007 | E-mu Emulator Ultra; Sampling synthesizer; Filesystem; Directory lister | Emulator Ultra series; prior Emulators; Linux/Unix | C++; XML/HTML | The Emulator Ultra is a fine hardware sampling synthesizer. To the right, you see its display showing a little bit of its harddisk content. The (very rare) programs to read it's HDU and CD contents, and display a directory or listing of all the folders, directories, banks, samples etc. were either very limited, or rather slow, or somewhat inconvenient with regard to the available output formats. I wanted something that was fast to operate, would process CDs directly in a general purpose computer (PC or so), and produce output with configurable depth for a dot matrix printer on fanfold paper, or plain text files, or XML/HTML files later to be imported into a suitable database. I am unaware of any documentation of E-MUs filesystem; however I had a thorough look at it and produced a program that fulfills my requirements :-) It supports HDUs, FDDs and CD-ROMs, is fast, and has configurable output. |
-» Help output of emufsreader -» Plain text directory listing for the -» XML directory listing for the In a modern browser, you can open or close individual branches (=folders or banks) of the XML directory listing tree. The example was shortened, because displaying it may keep older computers busy for a while. |
E-mail archive to SQL processor and digestor | |||||
Name | Category | Platform | Language | Description | Preview |
---|---|---|---|---|---|
mozmail-digest 2008 | E-mail digestor; SQL; Productivity tool; Mobile life support | Linux/Unix, SQL-database | C++; MySQL | My primary e-mail archive may reside either on a server or on a laptop. I use rsync to synchronize both systems before switching over to the other one. Recently, however, I "didn't have the time to synchronize" - with the usual result that one needs a huge lot of time to fix everything at some point in the future, or a huge lot of space to store two discordant archives forever, or to forget about an unknown number of messages of unknown importance. To fix things, I wrote a utility that scans a complete e-mail archive, and puts message-ID, etc. and a CRC-32 digest for each message into a database. So I could use SQL queries to single out all messages that resided on either machine alone, or had changed status markers, no matter in which subfolder they were. I moved them in separate transfer folders, used rsync again and voila, had tidied up the mess relatively fast, reliably and comfortably. As an added benefit, the database can serve as searchable index which performs much faster, and supports a lot more complex search operations, than Mozilla/Iceape/Messenger can do. If desired, full message content could be added. Similar functionality may be available somewhere, and it might have been easier to do it in Perl - but I wanted to get a bit of practice in C or C++. Please review the exemplary help output to the right for usage notes and infos about its (very favourable) performance. |
-» Help output of mozmail-digest showing some options as well as usage and performance notes |
Fourier synthesizer and Fourier analyzer study toy | |||||
Name | Category | Platform | Language | Description | Preview |
---|---|---|---|---|---|
DFT8GOOD 2007 | Discrete Fourier transformation; Fourier synthesis; Fourier analysis; Frequency spectrum analysis; Study toy; Self-educational illustration | PC, DOS or emulation environment | QuickBASIC | Fourier analysis is a useful ingredient for many technical solutions - from computer tomography (CT) or nuclear magnetic resonance (NMR) imaging to digital audio filters and MP3 music encoding. To get a more practical grip on it, I wrote a small example program that contained both a Fourier synthesizer and analyser - and a bit of graphical output. The programming environment was chosen because I did that in a hurry, and QB came in handy for easily available graphics output. The screenshots to the right show entering of parameters for a couple of sine waves; and the waveform synthesized by addition of these, with results of DFT spectral analysis below. The synthesizer part can also add a higher number of sine waves, and it will tell when aliasing artifacts are expected. |
A molecular model of a LavaLamp using OpenGL | ||||||
Name | Category | Platform | Language | Description | Preview | |
---|---|---|---|---|---|---|
lavalampen- simulation* 2007 | OpenGL; 3D-Graphics; Molecular simulation; Particle simulation; Physics; Dynamics; xgas | Linux; OpenGL | C++ | This program shows a model of a LavaLamp at molecular level in OpenGL 3D graphics. It begins with molecules of water and wax (blue and red, different sizes). Brownian movement makes them "fly" around in the (simplified cylindrical, not lozenge shaped yet) LavaLamp container. If they hit the walls or another molecule, some energy and impulse may be exchanged - or they may show a tendency to stick together. Molecules are heated at the bottom of the container, and change colour, size, speed, and lift (which may be a result of other parameters, and which adds simplification with regard to required number of molecules to "fill" the container and lowers required observation time, but also adds "incorrectness" with regard to physics). All parameters are adjustable and one can see how the model reacts to such adjustments. The sequence of images to the right shows a working model of a non-working Lava-Lamp: It starts with a random distribution of "water" and "wax" of equal temperature. Then, the water molecules are too few, or too cold, to fill the container equally at this gravity level - they sink down. After some time, the wax molecules get warmer (from red to orange) and go upwards. They also start globbing a bit. The water molecules also get warmer at the bottom (light blue, more movement), but after a while, water and wax are clearly separate, so something went wrong for the LavaLamp with the settings chosen here. Nevertheless, it's already relaxing to watch the little molecules move around :-) | ||
Vector graphics library and rotating 3D cube | ||||||
Name | Category | Platform | Language | Description | Preview | |
---|---|---|---|---|---|---|
33dcubus 1987 | 3D-Graphics; Vector graphics; Vector mathematics | IBM PC/AT; CGA (EGA) | GWBasic; BASICA -> various compiled BASICs; Pascal | This program shows a 3-dimensional wireframe of a cube, that can be rotated in all directions using the cursor keys, with size, distance and focus also controllable. Actually, it is only one example of the results of my interest in 3D vector graphics since that time: I had my own working library with everything I needed for 3D -> 2D projections well before anything about that was taught in school. However, PC graphics were slow even in compiled BASIC or Pascal, and when some years later I saw an early SGI workstation rotating a few X-15s, Porsches and Beethovens simultaneously, shaded, and with 30 fps, I was sufficiently impressed to keep me fascinated till today. |
Simulation of spreading excitation in a nerve fiber membrane in Maya / MEL | ||||||
Name | Category | Platform | Language | Description | Preview | |
---|---|---|---|---|---|---|
synapse 2006 | 3D-Animation; Physiology; Excitatory nervous membrane | Maya | MEL | For a 3D animation to illustrate some processes in synaptic signal transmission, I wrote a simulation of an excitable membrane in MEL. I designed a 3D model of a nerve fiber, and gave its individual surface segments attributes describing their state of excitation. Simulation code determines the spacial relationship of individual segments and computes the new condition of each segment based upon its previous condition and the conditions of its neighbours. If any segment of the nerve fiber is stimulated beyond a certain threshold while the segment is not in the refractory state, the excitation travels across the whole fibre. Trans-membraneous potential (voltage) and excitation status were finally represented by color and illumination attributes in Maya. Additional work involved the transmission of a signal through the synaptic gap; but this was finally merely animated rather than simulated. The movie to the right shows an early result of the simulation. The two frames from the intro of the final animation show synaptic transmission from outside. The complete animation starts with a human head that becomes transparent, revealing the brain, then the nerves, synapses, and later, the synaptic gap in detail. This project was sponsored by Dr. Timm Volmer of Wyeth, Germany. |
This Web page was prepared by myself,
and so were all included graphic elements.
© 2009 Dr. med. Jörg M. Sigle, Kunstvolle EDV & Elektronik