Archive for the ‘Technology’ Category

Scheme packaging systems rush

June 7, 2007

In his post Dominique Boucher informs that author of Bigloo Scheme created new packaging system. Another one, because there are already several packaging systems: Snow, Chicken Eggs, PLaneT.

What is a packaging system and how is it different from library support ? Packaging systems are engines to distribute libraries automatically over network, to help resolve dependencies and library versions.

For me, development of packaging systems is not a nesessity for Scheme. Currently even basics of working with libraries is different in Scheme implementations, all those (require), (import), (load), (module) and so on. Probably, automatic packaging is good, but it’s too early. I will not use them myself, I will download sources manually, store them manually, and reference them manually

WebCMS: web publishing done right

June 6, 2007

Some time ago I was a “Web programmer”. This means that I was making a programs which operated with users through web browser. Even before that I’ve made several sites using raw HTML. HTML is good. You can edit it with simplest text editor and with powerfull editors like FrontPage, DreamWeaver or HomeSite. And, very important, it’s very easy to generate from code. Yes, HTML has it’s limitations, and it’s not a universal UI, but for presending information it is good, and now it is becoming a very widespread UI, because of zero-installation and platform independence.

For a long time I didn’t use HTML, because I’m developing system software, with no UI at all. But now I want to establish small Web site, mostly with static rarely edited content. In single word, if somebody asks me what I will do with this site, I’ll answer “publishing”. From my previous experience first approach whould be writing whole site in static HTML. But now I’m arrogant and lazy, and don’t want to write HTML by hands. WYSIWUG editors also is not an option: for me it’s easier to edit HTML then to learn how to change page’s look using those bloated and non-intuitive tools. So I’ve started to look for solution which will allow me to consentrate on content. First idea about tools which allow editing static web content was blogging software, so I’ve opened Wikipedia and typed “blog”. Following links led me to more general-purpose software genre called “Web content management systems”.

Reading all available info I undestood that finally Web done it right. People who make content should not take a burden to learn HTML, software should do everything for them. And tools for editing content should also be web-based. WebCMS allow versioning, workflow, and also provide extensibility so they could be enchanced and integrated with custom dynamic parts of Web site. It seems that at time I’ve stopped doing web programming those systems were uncapable, but now they become powerfull enought to be useful.

So, I’ve decided to pick a WebCMS and try. Now the question: where to start ? Looking at sities like CMS matrix made me panic, because there are so many of them. Obviously I want free CMS. Digging different sities, forums, message boards and “review” pages give me several candidates: Joomla, Drupal, Lenya, Plone and WordPress. So now I’m having fun evaluating them personally. Expect some impressions very soon.

For somebody interested in topic, here is a very good presentation describing WebCMS.

X-Lite softphone

June 6, 2007

I’ve tried many SIP softphones, and most of them just crap. The only softphones I like are EyeBeam and X-Lite from Counterpath. EyeBeam requires payment, and X-Lite is free, so I’m using X-Lite. Current version is 3.0, and I’ve started using it from version 2.0. I think that version 3.0 is overall better than version 2.0, but in some aspects it is worse.

Here is a list of things which were working in version 2.0 and broken in version 3.0:

  • It doesn’t allow you to specify port on which phone will listen for incoming calls. That’s because it was designed with proxy-registar in mind: phone chooses some random port, sends REGISTER with “Contact” header containing IP and port, and proxy should route all incoming calls to that port. You can specify “recommended” range of ports, but that’s not guarantee. This behaviour limits usfulness of phone for small communities which don’t use proxy but always call directly
  • When you want to call to another SIP device on same physical machine, it always uses interface 127.0.0.1. Very annoying
  • If phone receives INVITE with “Hold SDP”, it answers with some strange SDP which is not recognised by some devices
  • If phone receives empty INVITE, and ACK contains “Hold SDP”, then call is failed (BYE is sent from phone). This makes 3rd party call establishment really tricky
  • If there are no OK on BYE, then phone simply hangs up.

Now, here is a list of broken things in X-Lite 2.0:

  • If you put in address book an URI with port (like “sip:user@host:port”), then port value misteriously absent in outgoing INVITE
  • Sometimes responses are sent back to the same port they were received from even if rport is absent in “Via”

And, what I miss in both phones are:

  • Support for “100rel” and PRACK

So, those phones could be improved. I run both of them simultaneously, so I could use the one which is not broken for particular work. But, despite of abovementioned problems, those softphones are far ahead of all others

How software looks like on your disk

June 5, 2007

Let’s discuss following question: how program is stored on your disk ?

Most people who use software don’t bother to learn such thing. They just click on shortcut located somewhere under “Start” button, and program starts. And they should not. This question is only important for very advanced users and software developers.

Most commercial programs are distributed in “binary” form. This has two advantages. For users, this means that OS will create executable image in memory very fast. For program author it means that their work is “protected”, because most users can’t edit binary code. The opposite way to distribute programs is by providing source code. Depending on proramming language, program could be converted into “binary” form or run by interpreter. Both approaches require some configuration from user, so they are not considered “user-friendly”.

Binary programs usually “monolitic”: all binary code is stored in single file. That’s also some sort of protection, because it forbids users to take away or re-use some part of program. However, sometimes programs allow to integrate themselves into other programs. In this case, programs are distributed as library + executable “driver”. Library is re-usable from other programs, and “driver” is intended to be run by direct users. For example, see Microsoft Office.

Writing Windows GUI apps in languages other than C/C++

June 1, 2007

Currently I’m looking for a new programming language to learn, with hope it will become my next language of choice. Since I’m mostly developing two kinds of software: Windows GUI apps and Unix network apps, so I’m looking for language which is capable to do both. Currently I see no alternative to C/C++ in this area.

Java is quite suitable for server-side, but not very suitable for client-side apps. It’s not convenient to ask users to install JRE, look-and-feel is different, application starts slowly. Yes, I know about SWT, but SWT is not a pleasure to work with for me (I can’t bear manual resource disposal in Java), and it fixes only look-and-feel. So, on client side Java is suitable only for small tools which will be run by Java people only (they already have JVM installed). If you are Java programmer, then making Swing front-end to your library is a good thing, but I doubt that it will be sold well. I know only two commercial Swing applications: Intellij IDEA and MagicDraw UML, both intended for Java developers, not for general public.

Scheme is one candidate for my new language of choice. I simply like Lisp syntax. But sockets and threading is implementation-specific, no good binding to Win32 API.

OCaml is another candidate. They strongly advertise performance, and it appeals to me. OCaml has sockets and threading, but problems with Win32API.

With Scheme and OCaml my main consern is that they are very Unix-biased. They can work with standard input and standard output out-of-box, so you can make console applications with those languages. However, for client-side applications Windows dominates the landscape. OCaml provides bindings for GTK+, but such apps don’t look “native”.

It seems that for client-side I need to stick with C/C++. These are languages used in writing Windows itself, so Win32API bindings for them are natural. And now, at last, there are powerfull UI libraries, such as SmartWin++. If I will find a good way to combine Scheme or OCaml with C/C++, then probably my client-side programs will be written in two languages: internal logic in Scheme or OCaml, and UI in C/C++. I don’t see any trouble in writing applications in several languages.

I don’t like GTK+. I don’t like WxWidgets. I don’t like Tk. I don’t like cross-platform widget toolkits.

SDL is a good library, but not a widget toolkit. I don’t see any use for it outside computer games

I don’t like CygWin/MSYS.

Update: I was wrong about OCaml. It’s fully usefull for development of GUI programs for Win32. That’s explained in this article