From July 2003 to August 2006 I worked for HS Partner Pro-Test S.A. at the Research and Development Division. I was responsible for the development of an experimental programming platform. The main aim of this project was to enable people with little or none programming knowledge to build quickly complete applications, working both under MS Windows and GNU/Linux. The system consists of:
At the time of my leaving, the first application using this technology had already been created. It was called ProFIRR, and it was an incident management tool, with the elements of a CRM tool. Is is presently used internally at HSPPT.
The programs are written mostly in Perl and PHP (a small part in C). The system elements created by me from scratch are:
The system has been deployed at http://etap.pl
I designed and implemented the application, which can be used as a web shop in any field without any changes in the code and with arbitrarily configurable graphics. Some of the product's features are:
I have held the position of leading programmer in a team that implemented the http://www.ebid.pl auctions system. It is a database application written in C (the choice of technology wasn't mine), which - counting with the unavailable from the outside world administration module - is approximately 20000 lines long. The task of parsing the GET and POST parameters, and of generating the HTML pages from the templates, is performed by a proprietary library written in C. I was also one of the developers that worked on that library.
I have implemented several web applications that were never deployed or ceased to be available for various economic reasons:
I have never taken part in the process of development of a commercial game. However, I have experience in the design and implementation of games.
I implemented in Common Lisp a Polish-language remake of
a classical ZX Spectrum interactive fiction, The Hobbit
.
The program makes full allowance for language constructs such as
conjugation, declension and inverse sentences, i.e., one can write for
example "do drewnianej srebrny włóż klucz
skrzyni" or "oprócz ohydnego wszystkie trolle zabij".
You can find the details here (Attention! It's all in Polish!).
Gun is a networking first person shooter, written in C and using the svgalib library. The game consists of two programs - the server and the client. The server is responsible for game logic and is common for all players. Every player runs his/her own client program which displays the graphics and reads the keyboard input. The clients communicate with the server via the UDP protocol. The graphics is created with the ray casting algorithm. The game works in the 320x200 resolution and uses 256 colors.
Two dimensional arcade game. The player controls the movement of a green pear with the keyboard. The aim is to catch the non-orange monsters and avoid the orange monsters which can kill you. After catching 40 non-orange monsters the player is provided with a gun, and can shoot the orange monsters as well as the remaining non-orange monsters. The background is smoothly scrolling and some of the monsters have more than ten frames of animation. In principle Grucha can work in any resolution, but it looks best in 640x480 or in 800x600 pixels. The game is written in C++ and uses the svgalib library.
Two dimensional arcade game. The player uses the mouse to control a small rocket equipped with three guns (each of the guns fired by different mouse button). The aim is to shoot the UFO ships and not get caught. The game has many levels. The higher the level is, the more UFO ships appear simultaneously on the screen and they move quicker. At the end of each level one has to shoot a big orange mother ship. After completing the seventh level the player is rewarded with the machine gun, which means that he/she can fire more than one missile at a time. The game is written in C++ and uses the svgalib library.
Let us consider a reaction in which a hydrocarbon with two equivalent
double bonds is attacked by the dichlorocarbene (CCl2).
It leads to mixture of diene, monoadduct and diadduct, e.g.:
From our understanding of reaction mechanisms, one can
propose conjectures as to whether the carbene reacts quicker with the diene
or with the monoadduct, and how it depends on the catalyst used.
To test such conjectures, the amount of diene and the
products of its reaction with dichlorocarbene are experimentally measured
as a function of the amount of CCl2 used, and the results
are inserted into a mathematical model describing the reaction course.
From this fitting we obtain the coefficient k, which indicates
how many times the carbene reacts quicker with the monoadduct than with
the diene.
I wrote the program which can be used to perform such operation, i.e. to numerically solve (using the forward Euler scheme) the set of differential equations describing the reaction course for different k values, and to ascertain which k best fits the experimental data (the least squares method), and plot a graph illustrating such fit.
It has been established using the program, that, for example, in the reaction between cis-cis-cyclooctadiene and dichlorocarbene over the TEBA as catalyst, the addition of one CCl2 particle to the diene's double bond doesn't change the reactivity of the other double bond:
|
By replacing TEBA with TMACl as catalyst, the second double bond was found to react approximately 7 times slower than the first.
|
For more details see:
Michał Fedoryński,
Reactions of haloforms in a catalytic two phase system - effects of
solvent and catalyst on the reaction course,
Publishing House of the Warsaw University of Technology, Warsaw 1999.
I also implemented an interpreter of a simplified version of Logo programming language. It is simplified because there are no string or list types - however, numerical variables, loops, conditional instruction and user-defined subroutines with recursion are supported.
The program is written in C++. There is a svgalib version, as well as the X-Window System version and version which runs as an xscreensaver-hack.
Here is an example of a Logo code and its effect (you may note that all commands are in Polish):
OTO PASEK :D :N JEŚLI N=0 NAPRZÓD D JEŚLI N<>0 [ PASEK D/3 N-1 LW 60 PASEK D/3 N-1 PW 120 PASEK D/3 N-1 LW 60 PASEK D/3 N-1 ] JUŻ OTO PŁATEK :D :M POWTÓRZ 3 [ PASEK D M PW 120 ] JUŻ LW 90 PŁATEK 250 5 KONIEC;
|