Older blog entries for shlomif (starting at number 38)

Money Oriented Programming

I just had a three-way chat with two of my fellow students. I am a Perl proponent, one of the others think C++ is the best language in the world (and cannot understand why Perl can be a good thing), and the other works at Sun hacking on Java, and thinks it's much better than either C++ or Perl.

The Java guy asked me how much new code is written in Perl. I told him a lot. "OK" he said, "but not one in scripts, scripts are just workarounds. They are not real code.". I told him scripts were perfectly good code. Then I told him of some applications I wrote that were written in Perl, like the initial version of the IP-Noise simulator, or lm-solve. He said, "OK, but I want code that companies write".

I told him that he gets on my nerves and said "First you rule out scripts' code, now you rule out open-source code. Next thing you'll rule out every other Perl code on the planet!". Moreover, it's hard to compare the volume of codes in different languages. In some languages, many tasks would result in much shorter codebases than in others (and vice versa).

I now fully realize the reason why Stephanov (the STL guy) called Java money-oriented programming. I don't have anything against making money or against selling products or APIs commercially. However, Sun seems to see Java as a hypeware whose prime purpose is to bring it money. I actually see Java as a clean and fun language, which could prove useful to many people. But it's not a language that gives me too many new insights. It short of falls between the chairs of C++ and Perl.

Perl (and Python, Ruby, yeah, yeah) is not about getting money. It's about getting your job done. People utilize Perl and it either saves or even brings them money. However, it was designed as a good language which people would like to use, and not as a commercial hype to make money off those who fall for it and do not know other languages to know better.

Software can be duplicated and distributed for virtually no cost. Charging money for software, or not releasing its source, is therefore a not a robust way of doing things. By robust I mean that you constantly have to make sure your product is a good one, and to make it better. By making it open-source, however, you necessarily give up hope, and so you give a statement of intent, that it is good in any case.

There are some things that are good in Java. But I'm not sure people would have been that enthusiastic about it, had it been released in a quite, hype-less fashion.

I should probably tell about the C++ vs. Perl argument later, but it seems that it will take me some time to convince him that learning Perl is worth his time.

LaTeX Printing Blues

My partner for "Designs and Analysis of Algorithms" wrote our third homework in LaTeX, and included EPSes of several graphs generated by GraphViz in it. The .ps seemed fine, and looked well in GhostScript, but ps2pdf generated absolute garbage. The Com-Net lab engineer has only configured printing for the Windows NT workstations, because the network card used by the HP printer is temporary. So I must convert them to PDF to print them here.

I tried converting the EPSes to PDF, but they also looked bad in gv. Maybe my version of GraphViz does not generate very well-formed ones, which causes some problems. So I had to print the PostScript file. I scp'ed the file to my account on the NT farm or Linux farms.

I went to the Linux farm but could not login from my faculty-wide account. Luckily, I could login from the account dedicated to my computer graphics course. I scp'ed the file from the other account and tried printing. What gives? There wasn't an lpd server on the system.

Next resort: I logged in the SGI machines and run lp on the file. Now this printed perfectly on both sides of the paper. Thank you, Technion, from making such a simple task so complicated.

I tested it now, and I could convert the PostScript to PDF by using "ps2ps" on it first. But it seems to have a degraded quality. At least when viewing it. At home the Linux cannot print anything as the printer does not respond to characters being sent to it from some reason. And Epson 740 is supposed to work perfectly with Linux.

Some Extra thoughts about Human Engineering

You may remember my post here in which I preached about the importance of Human Engineering in software. But naturally, good human engineering extends towards other fields. Actually, getting people to know about your OSS project is relatively easy, assuming the project is actively maintained and technically sound. You just post regular updates on Freshmeat, and let Google and the Freshmeat Effect take care of the rest. (just please choose an original name, so you won't clog the whole search like Freecell Solver did).

But the problem is that I'm a writer as well as a programmer, and I'm distressed that my stories did not receive too much attention. But then I remembered how I got the few people who read them to do so: by being a good human engineer. I told them about them, got them interested in them, and got their attention. Until now, I thought the best way to get publicity was to get people to link to me from my site. I did not try too hard doing that, but maybe I should also complement it with a slightly different approach.

What I'd like to do is to get people to read them by making them interested in the story: telling them about it, answering their questions about it, and creating a culture of small and dedicated people around it. Chen Shapira told me she had already read "The Enemy and How I Helped to Fight it" (which I wrote) four times or so, while "trying to look for hidden meanings". So she probably likes it. She's also very fond of "The Pope died on Sunday" which is unfinished. If I can create a web culture of people like that, I will eventually get more people to know about the stories.

Like I said in the article, good human engineering is more about being polite and friendly, and there are some facts about my Internet presence, which I realized are not good HE. For instance, my homepage does not have a News section. Finding something new there is like "Cherche la Femme" - you have to use a web-diff tool. I think I should put one right between the title and the first <h2> heading. (and naturally archive previous news items)

And another thing: I should create a mailing list for discussing my stories, probably on Yahoo-Groups, this always helps creating a Net culture around something. For the time being, there had been some discussion of my stories on Hackers-IL, the Israeli Objectivism web-forum (which I "terrorized"[1] for a while), and perhaps other places. But nothing too serious.

Another problem, which is harder to resolve, is that I write most of my stories in Hebrew, and only when I'm happy with them, I translate them to English. Translating them on the fly is a pain, because I happen to re-write parts of them constantly. Naturally, I'll get a much larger audience had I wrote them in English, but I'm comfortable writing in Hebrew.

Recent Developments

Eran is not feeling very well and he could not sit today to finish the VHDL experiment. Nevertheless, we have till the end of May, and we don't have too much left to do. I stayed at Haifa today, because I thought I was going to meet Liat (my Algo Design partner), but I now got a call from her telling me she would not be able to make it, because there isn't a ride to the Technion from her workplace, today.

So I'm returning home, after I eat lunch today. I did not sleep very well today, so I'm a little unfocused and cannot concentrate. I should remember to send everything that I worked on the Technion back home. Let me se: the LM-Solve CVS repository (which I'm sending back and forth), the extra-new FCS lecture summary, homework in SICP 2, the previous homework in CG...

Hmmm. Better keep the computer on, just in case I forget something. I wish the Com-Net Lab had a publicly accessible source control server, on which I could put all my stuff.

Working in a Defence-Oriented Workplace

I keep getting contradictry opinions on what will it take to work in a company that oriented around military projects. According to Orna Agmon, I can forget about it because I did not serve in the IDF. According to my mother, I need to volunteer for one year in the IDF. Now, Roy said that all I need to do is pass a security clearance test.

Many of the Israeli Info-Tech jobs have something to do with the Army. Someone I met who works in El-bit said that some things are developed in five different places in the world at the same time, while three of them are in Israel. :-) That sounds a bit too illogical for me.

In any case, I'm not sure I'd like to work in such a place due to the high secrecy factor involved. I like to tell people about what I do or what I did. So far, I can tell everything I ever did in the past without me proving to be illoyal in some ways to my previous workplaces. I don't think secrets scale, but the army seems to think they are a necessity. It is also possible I'll become nervous because of something that happened in my workplace, which I'll have trouble telling about to my friends and family.

The Ironic thing is that some "Atuda'im" (People who do their university degrees before the army service, and later serve as officers for a longer time) are allocated as administrators in something that requires little if any of the scholastic knowledge and proficiency. And then the army complains that it still lacks engineers, even though, there is a surplus of them (at least in some areas) in the Israeli market.

Check the following link for something I wrote regarding why I think there should be a voluntary recuirement into the Israeli army. And ironically, the latest situation has only made it clearer for me on why it is necessary.

8 May 2002 (updated 8 May 2002 at 09:59 UTC) »

Hmmm. It's been a long time since my last diary entry. I kept wanting to write one, but always had better things to do with my time. Oh well.

lm-solve

lm-solve has finally seen its 0.2.0 release. For more information check its homepage or the Freshmeat page. So far I got 38 record hits, 49 URL hits, 1 subscriber and 33 ignores (!). Oh well, I guess most people did not even hear of Logic Mazes, much less are interested in a solver for them.

Right now I'm working on the 0.3.x branch. So far I added support for three types of Andrea Gilbert's Tilt Mazes. (single goal, multiple goal and red/blue goals) I guess I'll delay adding the Plank Puzzles support for a later version because it seems like a relatively complicated thing to do, and actually is quite scarry. (;-))

These Logic Mazes are highly addicting, BTW. But luckily, I am preparing a solver to solve them for me. :-)

Studies

Quite a lot of homework. And now that I managed to get rid of everything, I got homework in both SICP and Computer Graphics. SICP is for singular submission, but I have to synchornize time with my CG partner to sit on the exercise.

Other than that I had a test in "Internet - Architecture and Protocols". I did not know too well how to solve the TCP question which was %55 percent of the score. In any case, TCP was not covered in the homework, so I don't think it is fair that they put it in the exam. Plus, we were supposed to simulate an entire TCP connection on paper, which, IMO, is not a very realistic (or enlightening) thing to expect from a student.

This test covers 35% of the score, which means that unless I do better in the second date exam, I can kiss 35%*55% = 19% of the grade good bye. Did I already mentioned that I hate the Technion? I'll mention it again: I do.

On a slightly more positive chord, I should mention that Roy and I got 100% on our university project (the IP-Noise one). That should be a good addition to my grades listing which stands on a 80% average as it is.

Eran and I are making progress in our Lab 3 experiments. We prepared the final report of the Analog VLSI experiment in Hebrew LaTeX, and Eran keyed most of the document. (he said he wanted to learn LaTeX a little, because he may need it). Right now we are sitting on the VHDL Experiment, which is the last one we need to prepare. Since we are working in the NT Farms (which are LaTeX-less) we have to use Word for it. But the real challenge is writing the VHDL code and especially the VHDL test-benches.

--------------------

I have to go now because I have a lecture in a few minutes. But I'll probably add some more material here later on today. I really would like that this diary won't be neglected so much.

GNU Savannah and Human Engineering Cont.

Some of the Savannah people were not entirely happy with what I wrote in the diary. You can find their comments and my comments to their comments in the following threads of the savannah-hackers mailing list:

Thread 1, Thread 2, Thread 3

An interesting side effect of this argument was my article about Human Engineering and how it transcends to actual project development. I still prefer to stay clear of the GNU Savannah service because it seems a bit too picky to me.

BitKeeper

Trying to get a decent source control repository (I'd like something a bit more sensible than CVS), I registered lm-solve at BitKeeper. After some troubles setting up the SSH key, and bothering a support guy about it, I managed to get the project active. I also installed the BK binary, but did not get to populate the project yet.

I have a CVS repository of the project on my local computer, but I could not find any automated way to convert it to BitKeeper on the site, even though it says it is possible. The BitKeeper site could use a little re-organization.

But hopefully, I would be able to work on the project from several locations, without too much trouble.

8 Apr 2002 (updated 8 Apr 2002 at 12:39 UTC) »

Lost in the (GNU) Savannah

What does a developer who is otherwise productive and has good intentions to do to get a web-site and a CVS for his project? According to SourceForge and BerliOS, nothing else besides registering his project at their service. According to GNU Savannah, however, he should go through the nine levels of proving his FSF-wise purism.

I have successfully used the services of both SF and BerliOS to host projects in the past. However, I'm not too fond of the fact that SourceForge concentrates too many important projects, and I've had some logistic and technical problems with what BerliOS gives me. So I decided to give Savannah a try.

I have tried to host two projects on GNU Savannah: Rindolf and lm-solve. In both of them I had to fill the registration forms at least two times only to see my submission rejected from some reason. And they are still not registered there.

In Rindolf, I chose "Other" as the license of the project and specified it would be the "Open Publication License". At the moment, I'm only designing the SPECs of the language, and do not actually produce a line of code. They rejected it. Then I decided to choose MIT X11, and referred them to the ad-hoc SPEC of the language. Then, they said that it was not clear what is the license of the SPEC, and asked me to re-submit the project.

I told them the license of the SPEC was the OPL, and that anyhow, it would not imply anything about the licesne the codebase would be distributed in. (for instance, gcc is an implementation of C the text of whose standard is proprietary). Then they said, that Savannah is ment to host free software and free documentation. Does this mean I'll have to maintain pure free content on the site?

I eventually stopped working on Rindolf for a while, and independently coded a program to solve some types of logic mazes which I now dubb lm-solve. So far, so good, but I decided that I want it to have a public source control repository. So I turned to Savannah again. I chose other and specified that the license is Public Domain.

This time they complained that there the terms were not specified in the package (they were not documented there, true), and that I should have a COPYING file. I wrote something which said it was public domain but also said that the disclaimer of the X11 license applies to the package (until it gains a different license). And I re- submitted the project again. This time they:

  1. Complained that it was not clear what license it is.

  2. Specified that every source file should have a legalese header specifiying the license and the disclaimer.

  3. Criticized me for mocking the GPL in the COPYING file. (it did start with "Relax! This is not the GPL but rather is a Public Domain software...".)

This started a relatively good natured argument between me and the Savannah Hackers. I said that I was allowed to parody the GPL in my COPYING file, without them being concerned by it. They thought it was in the project submission for some reason. (I'm not responsible for them actually opening the package). I also said, that one does not have to specify the copyright (or in my case lack of) in every file and that I usually like to put something a bit less intimidating in the header. They did not like this idea so much because they said it may complicate things legally.

If I have to take all this crap just to register a project, I'd hate to think what I'll have to put up with as the projects' progress. I talked to an E-correspondant of mine, and he said that he encountered similar paranoia from other FSF activists. Meanwhile, I'll probably turn to ibiblio, or some other service out there. Maybe I can get perl.org to host me. I also seem to found CVS quite limiting, and would probably register the project in BitKeeper which AFAIK is pretty much straightforward. I'm not really a free software bigot, and BitKeeper is open-source "enough" for most needs.

Strangely enough, I read in LWN, that they plan that the service would be a starting point for a distributed SourceForge-like service hosting many projects world-wide. If they actually want it to happen they should first lose a small amount of their paranoia, and actually trust the hackers that would like to use the service. Registering a project in SF or BerliOS is straightforward even if you don't have any intention to actively pursue it. I realize they don't want to be bother by "dead on arrival" projects and actually make sure the project is usable to them. But if a hacker sais the project is PD/MIT X11/GPL/LGPL/GPL and Modified Artistic, etc. they should give him a break, tell him to include a COPYING file that says so, accept his project and let him start doing actually useful with Savannah.

Most hackers out there are not lawyers and wish to write code or documentation rather than make sure their project is a perfectly sound legally. (which from my understanding of the legal system and the intellectual property law is pretty much impossible). Maybe the Savannah admins have good intentions, but if a project wishes to be successful it needs a large amount of good human engineering, too.

I believe the reason Freecell Solver has had its niche, and gained some popularity is not only because I invested a lot of time in coding it, but was also a good human engineer: I answered E-mails, even very trivial, politely and informatively; I formed a mailing list, and actively helped people who reviewed the code, or wished to integrate it into their projects; and I actively thought of what the end user would like to find there. I think Savannah should follow suit, and actually trust their hackers for a change.

Hebrew Latex

My partner for "Design and Analysis of Algorithms" and I prepared the first assignment for this course in Hebrew LaTeX. She is not a UNIX expert, so I sat at the computer and handled the he2 editor, CVS and LaTeX itself. This is the third major work I prepared using Hebrew LaTeX after the appeal to my test in "Image Processing and Analysis" and the first assignment in "Digital Communications".

Two things hampered us: the fact that I had to look up all the relevant macros on the web, and some obscure mistakes that caused the interpreter to yell at us without me knowing what they are exactly. But it is still better than Word.

I rememember that when I prepared the Digi-Com homework, it took me an awfully long time because there were many Mathematical formulae. In Word, the situation would have probably been much worse, but it was still a much longer time that writing everything by hand.

In any case Liat (that's the name of my partner) was very impressed by the results, and said it looked very professional. I also prepared some diagrams of graphs to accompany it using Sketch and then converted them to EPS for inclusion into LaTeX.

Eran and I, OTOH, prepared the Lab Experiments reports in Word (except for the Wavelets one last semester). Since they are not too long and because we use few formatting styles, Word is actually quite bearable. In Word, one has to remember a lot of keyboard shortcuts in order to write equations quickly enough. So, whether macros or keyboard shortcuts, one has to remember something when you are a technical person and would like to create equations.

I still find LaTeX more flexible because there are obviously more Mathematical styles than available keyboard shortcuts, and in Word one tends to abundantly copy and paste things, while in LaTeX it is possible to write a macro to encapsulate them. Also, writing "$ ... $" is quicker than invoking the Equation editor for an inline equation.

4 Apr 2002 (updated 4 Apr 2002 at 05:46 UTC) »

Studies

It's Passover vacation now, and I prepared all my homework before the vacation, so I was free to follow my own whims the last few days. (and I still have until Sunday to return to studying).

However, Eran and I met on Tuesday and Wednesday to prepare the Computer Networks Experiment of EE-Lab 3. We managed to finish it, but when we wanted to start working on the "Analog VLSI" experiment, we realized we should have bought its booklet in advance. Since the counter is closed during the vacation, we could not buy it then, so we agreed that I'll simply return to Tel-Aviv.

As you see below, with the Logic Mazes Solver, I found out that I made a good use of my time during the vacation.

Freecell Solver

I released Freecell Solver 2.4.0, which a new stable release, that enables several scans to operate on the same states' collection. It required quite a large overhaul to the program's internals which was made easier by using Vim's powerful features. The last time I tried doing it, I believe I used MS DevStudio, and it was a much harder process that bit me in unexpected places. The code was also made more prepared for the overhaul that the last time.

Shortly afterwards, I released Freecell Solver 2.4.1, which fixed a bug there. I wonder if there'll ever be a time when I release Freecell Solver x.y.0 (where y is even) and never have to release Freecell Solver x.y.1, x.y.2, etc. So far, it has been the case only for 0.10.x and 1.2.x, and I'm not sure they are truly bug-free.

Logic Mazes Solver

I did say in the Rules of Open Source Programming that the numbers of items on a project's to-do list always grows or remains constant. Similarily, it seems that the number of projects a developer becomes involved in, always grown or remain constant.

My latest venture started when I remembered the Theseus and the Minotaur Puzzle (check No. 14) which somebody referenced me to. After several good tens of minutes, I was finally able to solve it. But then, I wondered whether a computer program can solve it equally as well, so I decided to write one.

I decided to write it in Perl, and convert it to C only if I see that it is too slow. Eventually, it turned out that it was actually feasible to solve those kind of puzzles using standard Game AI techniques, and that it was very fast even as a Perl program. I accidently searched for Theseus and the Minotaur and google and stumbled upon the Logic Mazes site and found there many puzzles of a similar vein. So I decided to write a generic API that can solve as many of them as possible.

What I did eventually, was adapt the Minotaur script to solve a different kind of Logic Maze called Alice mazes, then I made the alice script more modular and clean, and eventually created a Minotaur sub-class. Now everything is generic enough for solving many kinds of puzzles.

I eventually implemented support for Number Mazes, and also wrote a Breadth-First Search scan. It turns out that even BrFS can solve such puzzles in a good time, and I get the minimal solutions.

The ad-hoc site for the Logic Mazes Solver is here:

http://vipe.technion.ac.il/~shlomif/logic-mazes/

Getting a Central Source Control Repository

Source Control is highly addictive and for a good reason, because it is a life saver. While I don't use CVS for Freecell Solver or for FCFS RWLock (the latter being a little inactive lately), I do use it for my homework, and for the Technion projects, and I'd like to use it for Logic Mazes Solver. At the moment, I use two local CVS repositories, one at home and one at my Technion workstation. However, I would natuarlly prefer to have a central Internet-wide repository.

To make things a bit more complicated, I encountered several of CVS limitations so far, so I'm looking for something more versatile that will at least allow me file renames and copies, as well as better branch management. BitKeeper seems nice, but I noticed something about having to supply it with an SSH public key, which makes me wonder if I can login there from several accounts where I have diffferent public keys. I'll have to find out about it, beforehand.

Subversion also seems nice, but I'm not sure if it has a repository that is available for the public to use. (and registering a project on BitKeeper seems quite straightforward). For the while, I tried to register a project on GNU Savannah, but as usual with this site, they have given me some trouble. Registering a project on BerliOS (and I'm almost sure that on SourceForge too) was much more straightforward than what I encountered with Rindolf or LMS. The Savannah guys' Free Software purism seems to make it much harder for the poor developers who just want to use their service. But who is John Galt?

28 Mar 2002 (updated 28 Mar 2002 at 11:13 UTC) »

Studies

I stayed in Haifa last weekend, so Eran and I can work on preparing the Lab 3 assignments in advance. It took us a very long time to solve anything, but we managed to finish the "Image Processing" and part of the "Computer Networks" experiments. Right now, Passover started, so I have till the Sunday after the next.

Studies were quite interesting the past two weeks. In "Computer Graphics" the lecturer gave us an overview of the book "The Psychology of Everyday Things" so we can design better UIs. My partner for "Design and Analysis of Algorithms" and I sat on the first assignment and managed to finish it. (I consulted the T.A. regarding one exercise there).

Solving the "SICP 2" exercises on streams proved to be quite enlightening. There are many tricks that can be done efficiently using such delayed lists.

The New Project

Roy and I's new project has to do with writing a web-based front-end for viewing and managing Technion Seminars. Roy and I spent some time writing a SPEC and site workflows of it. Our supervisor (who also happens to be the lab engineer and a T.A. in some courses), many times did not have too much time to meet with us. (sometimes despite the fact that we scheduled with him in advance) Hopefully, we won't rely on him too much as we start working on the project.

29 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!