Shlomi Fish at Elpas
Table of Contents
- Table of Contents
- Document Information
- How I started Working in Elpas
- Let's start coding!
- Let's start coding with Access
- Back to Basics
- Why I quit?
- Conclusion
- Thanks
Document Information
How I started Working in Elpas
I started working in Elpas after I graduated from high school, back in 1996, and had some time left until I was supposed to join the Israeli Defense Force (which I didn't eventually, as you will see). So I started working there to kill the time, because I was very bored.
Elpas worked on several Infra-Red-related technologies. What I worked on was eventually called EIRIS - Elpas Infra-Red Identification System. This was a network of Infra-Red Readers that was installed in rooms in a room complex, that received signals from tags. That way, the network could determine in which room every tag is located in real time. This was suitable for hospitals, which want to know in real time where every Doctor, Nurse or piece of equipment is located, as well as organisations with similar needs.
At first I started writing some simulations for this that ran on Windows 3.11 or "Windows for Workgroups". Eventually I was also assigned to work on the software that concentrated the data from the EIRIS network and presented it to the user.
I was given some code written by our partner in the U.S. which was a phone company that implemented a similar product using their PBX, a server that ran on SCO UNIX, and Windows 3.11 client that communicated with it using serial lines. What we did at first was to eliminate the PBX and to convert everything to use the Echelon-based network that Elpas developed. Next, we wanted to eliminate the dependence on the SCO UNIX system.
Let's start coding!
I had a rough idea of what was required. So what I did was to gradually
eliminate the Raima database that was
managed on the UNIX, and to implement it internally in our program. I
started to do it using arrays of structs, which I binary searched to find a
record, and then sorted using qsort()
to add a new record. At that
time, I was told this was called vectors, which now I know is just a fancy
name for an array in which all elements are placed one after the other.
I started doing it and made some progress. However, then I was told that they'd rather I didn't use some kind of proprietary vector based lookup, but a "standard database" such as Informix, Oracle, etc. We didn't have one like that so they told me to start with Microsoft Access.
Let's start coding with Access
Access... we had Access 2.0, and I had to find a way to work against it from our C program. I eventually discovered Dynamic Data Exchange, and after learning SQL from the Access docs, started converting our application to store the data on Access, and access it using DDE. It was a lot of work as the application was written in C.
What can I tell you? It was slow, it kept crashing, and it didn't work too well. Eventually we got a consultant. He said he thinks Borland Delphi would be the perfect platform for what we needed to do, but also told us they were working with ODBC ("Open Data-Base Connectivity") to access the data from Windows.
So we bought a yearly MSDN subscription and started working with ODBC against the Microsoft Jet database (which is also used in Access). It took me some time to get it to work cleanly with Borland C++ 4.52 which we had, but I eventually did it. So I converted the code to use ODBC.
It was a bit faster than using DDE and NetDDE, but was still slow and still crashed a lot. We thought that we might need a better database but then we got a few other consultants who brought us to a realisation: since we needed to query the database in real time, we couldn't afford to construct SQL queries send them to an SQL server that will parse them, process them relatively inefficiently, and then return the results over a stream which will need to be processed and parsed (to say nothing of API overhead). We needed something much faster, and my original vector-based database was as good as any.
Back to Basics
So I started finishing the vector-based database, which was I had started to write in the first place. A few notes:
- I implemented everything using ANSI C arrays of C structs, a different one for each table. As a result there was a lot of duplicate code there.
- Retrospectively, I understand that I could have implemented it with faster insertions using a balanced binary tree.
- I ended up implementing my own binary search function using trial and error, which I eventually used for inserting a new record into the struct, instead of Quick-Sorting it. That way an insertion was O(N) instead of O(N*log(N)) to O(N**2).
I finished the work some time before the date most of the other people at my office went to the CeBIT conference to present our products. I didn't travel to Germany for it, and during the conference, I still came to work, to continue working on many of my priorities. My father and I still said to each other that "When the cats are away, the mice go out and play.".
When they returned from the conference, they said it was very successful. We were the most successful booth in the Israeli section, my demonstration computer ran flawlessly except for one time it crashed. Plus, they also brought many representatives from large corporations to inspect our products, and many of them were very impressed.
Why I quit?
For a long time I worked for minimal wage at Elpas. This was a bit before the Bubble and there was a lack of programmers in Israel. When I told it to my friend he said that one can get jobs giving away sheets of paper for over twice what I was earning as a programmer. My friend said beginning programmers earned even twice as that.
Eventually my pay was raised somewhat, but it was still very low. So I decided to look for a better job. My friend told me about Cortext, who were a web-site shop, and I went to a job interview of sorts in Tel Aviv University, where the future Cortextuals were about to graduate from TAU. There I was offered about 25 ILS/hour, which was still better, so I accepted, and quit my job in Elpas, after they hired a newer, more experienced programmer.
As it turned out Cortext paid a global monthly wage for people who worked there full time, which was what I intended to do and was also close to minimal wage. Nevertheless, I was out of Elpas for good.
Conclusion
I really liked working at Elpas because I learned many new concepts and technologies there, including SQL and relational databases, Windows (16-bit) programming, ODBC, some aspects of Microsoft Access, and a small amount of UNIX. Some of these served me well later on.
Retrospectively, I can say that we waited too long before getting the required tools. We started with one copy of Turbo C++ for Windows, which was very inadeqaute, and should have got an MSDN subscription. Plus, from my impression, our CEO was not a good manager, but that was somewhat augmented by the competency of the other workers. Elpas was just a startup at the time, but despite everything we had a good potential.
Retrospectively I can say that we had a relatively bad software management: we did not use version control; we did not have automated tests; we could not build a release in one command; we did not have the best tools money can buy, and we should have got some better consultants in the start.
Thanks
Thanks to the Freenode people Windrose and uberspaced for reviewing this memoir and giving some comments.