The Perl Standard Library

When I look at that what I would call the Perl library at the moment,
the CPAN, I see a whole bunch of modules (more than 14.000 when I
remember my last count), some of them are OO, some are not and we got
several different efforts running at the moment to make the situation,
which is not bad but strange, better.

Thinking about CPAN related projects that is what comes to my mind:
– The Phalanx Project
– CPANPLUS
– CPANTS
– The Core Modules

The problem of all this is that we miss a real structure, something I
will call the Perl Standard Library (PSL) from now on.

See, we got all this beautiful modules which all more or less work
with some version of Perl, some OS and some architecture. That is
nice, as most of them work for me, on a Linux i386 box. Other
platforms are hard to tell, e.g. Windows and compiling something can
be really hard.

The Phalanx project choose 100 modules, as I understand it to make it
more or less the testing platform for Ponie, and try to improve them
to be better modules(TM). CPANPLUS is an effort to make the management
of the installed modules easier. CPANTS and testers.cpan.org make it
more easy for the module developers to see their modules tested on
hardware and version they don't have. The Core Modules (and the bad
dual life modules) make Perl pumpkining harder (I guess so) and
improve the basic functionality that Perl has. The Problem is that
some useful modules are not Core (and maybe some useless modules
are in core :-)). The next thing that is important in connection with
module management is my OS vendor, or my Distribution as it is called
in the Linux world. They bring a couple of modules, some CPAN original
and just build for my version of the OS, or some changed ones, because
a Dead Camel did not move and they needed the lib (as Curses.pm was a
long time, at least SuSE, RedHat and Debian had their own patches
because it didn't compile with 5.8.0). This all ends up in a big
BLOB. I can't really tell by heart which modules are installed on my
system, I'm not sure about every version number and can't promise that
something I wrote works on every system. I don't have nothing to
depend on when writing software, I don't have no Library. In my
opinion a language is only as strong as it's library, but the problem
with the library of my favorite language (guess what) is that it's
library is maintained by over 1000 people and it has nothing you can
rely on.

What I want to say is that we should take a bunch of modules (as the
Phalanx Project does), put the together, make it stable at mark it the
PSL for 5.8.1. I don't have a list of modules I want to see in there,
but I think it would be an advantage for Perl if we would take the
material we got, take the material others contribute (like the modules
which the distro vendors choose) and make something up we could depend
on in eternity (or at least for the time Perl exists). When we have
bundled it we could make another effort do restructure it, as I don't
believe that the CPAN structure would fit all the time. Then we can
improve documentation and make everything more homogeneous. One of the
other problems with the CPAN is that there is no document I can think
of that says how to do what with which module. There are many books
out there that recommend many modules, but there is no single “Using
CPAN” book out there that covers all of CPAN.

To make myself clear again, what I would like would be a PSL project,
that provides a big, stable and maybe pure OO library for Perl,
version dependent, with easy to access documentation and that has
obvious responsibilies.

This is just an idea, maybe I have to restructure some parts and think
over others.

Another thing that came to my life lately was that another thing I'm
missing at the moment is easier to install modules. I installed
ID3Lib.pm today just to recognize that it didn't compile because I had
no ID3Lib installed. This is rather obvious but often it's hard to
tell which libraries a Perl module depends on. Maybe this is something
for the META files. The thing that I really didn't like was that the
lib was just a line away (on my Debian) it's just 'apt-get install
libid3'. I'd like to have something like CPANPLUS::Distro::Backend
that would manage such thing for me. It's not very realistic to get
something like that for every system, but if you can say the developer
install lib foo it's more than just a missing include file. Would be
some kind of community effort, but maybe it is possible.

Enough revolutionary ideas for today ๐Ÿ™‚

Advertisements

Cure for headache: Release

I did to much module maintaining in the last days and so I thought to stick to the old XP rule, release often.

Somebody got to keep the PAUSE indexer busy. After having released GraphViz::ISA::Multi on tuesday (which after all is a fine module) twice cause a day of thinking about the code showed me some different algorithyms, I released both Curses::UI 0.8 and C::S::C 0.5 today. FREEDOM!! I didn't finish all the tests I planned for Curses::UI, but IMHO tests are something that grow and so I'll wait till the bugreports and test failures come in. After all it is a big step in my 2-steps-till-1.0 plan.

CPANPLUS::Shell::Curses doesn't have that many changes, it is kind of colorful now (maybe I'll release a halloween-acme version in orange) and can show readmes again which is nice. And of course, I test for pod…. Maybe I should drop the Author of modulemaker a mail to include it…

I'm still trying to find out how to release MPlayer.pm to CPAN, suggestions for a nice non TLNS are welcome.

As I mentioned in the subject, I got an awfull headache today, but I think that is in connection to me having to write Java at univeristy.

My next topic will be how to seem cleverer as you are, cause I voluntered for a talk at my local LUG and it will be about – guess what – Perl and I actually never gave a talk about a programming language, will be fun though.

Good night, release often and regularly

Testing Curses::UI 2 & MPlayer.pm

OK, had a rather short day in university and thus a rather productive day at home, geeee. The short day in university was because we got a new practicing class in which we do — Shellscripting. Will give me 2 hours of free time each week in this term ๐Ÿ™‚

The problem with testing Curses::UI vanished after having some good idea: as I didn't want to test Curses.pm but Curses::UI I thought — tada — just replace it.

Take Curses.pm, strip out all the code you don't need, use AUTOLOAD to define everything that is actually in @EXPORT and there you go. I just had to implement five functions myself, because Curses::UI expected different behaviour (shame on me, I forgot that @_ is just a list of references to the original values) and I had a running Curses::UI without actual Curses calls. That made me happy.

Current count is about 98 tests, without doing really edge case testing or fault testing or testing complex things like the event system, but I think it is quite good. Will invest some more time and then release 0.8 (my precious).

(What I forgot in my we summary was that I spend some time on forcing MPlayer to playback the audio in the LOTR:ROTK trailer, therefore I'm a little ringish at the moment)

Did some work on CPANPLUS::Shell::Curses too, now it has colors (ugly red and green, but I like it). Is in CVS, the problem is that I had a bug in the Color support for status widgets and thus have to wait for me releasing Curses::UI 0.8 until I can release C::S::C 0.5 (I decided to go with the minor number of CPANPLUS to keep a better track of with witch version it works). And I added a test for the Pod. I think it is an easy way to get a test more ๐Ÿ™‚ (Maybe I should start using Acme::Test)

Ehm… yes. Ah, MPlayer.pm. It's rather a quickhack than a Module, but I wanted to play webradios (Kohina) in a comfortable way (it is a Curses::UI Perl interface). I found the -slave option in MPlayer and thought it would be fun to implement the Perl Bindings, but the slave mode is (sorry) crap. Not really supported (as MPlayer is (I've never seen such an unfriendly mailinglist, they add automatically a “RTFM” message to every email)) and it does not really give featback. I don't know whether to put it on CPAN (have a look into it from my homepage and tell me). BTW I'm not sure whether to keep the name, too. Claiming a first level namespace is always…. ehm … sticky. (But it is quite idiomatic use MPlayer;). We'll see.

Take a couple of hours of sleep now and think about new creative tests. And about when to release which module where (maybe CPAN :-).

Good night

Weekend summary & GUI Thoughts

The weekend is ending and my new term starts tomorrow. Actually this a good thing because I got interesting classes like Local and Distributed OSes and two classes about Software Engineering, which sound all kind of interresting.

This weekend started with me going mad about my emails. You know, as a kind of interrested person you get lots of mail, mostly from mailing lists. Last week I started getting some mails from my friend (worm) Sven and he didn't stop. I let all my email go through a german freemail provider, because they got spam filtering and virus protection and all the stuff and why should I do stuff myself when I can outsource it :-). I used to have my virus protection turned off (with a Linux system your always “secure”) and had no problems till those Sven mails started (those mail all got stuck in the spam filter, but with about 100 a day my spamfolder got messed up and I needed far too much time to scan for false positives). The result till now that from 700 mails I got since frieday 5 p.m. about 220 were svenish. That's too much. The problem is that my mailprovider sends me a warning for each mail if it has a virus in it, so I got 220 virus warnings :-(. But I'm still better off, because on the one hand I see on first sight the false positives in my spam filter and recieving a 2KB warning is better than recieving a 300KB Virus mail over a 64K line.

The next thing is again Curses::UI. I didn't really start writing the tests for all modules, but I finished the POD test. Starting tomorrow I'll write a test for a widget a day, I can't stand more boring things at one day. So I'll be finished end of this month. Actually there is a bug in Test::Pod docu, because it does not export plan which is mentioned in the SYNOPSIS. The other thing I did was trying GraphViz::ISA, which is a nice module for visualising ISA relations (Actually the whole GraphViz thing is a very nice module for visualising any kind of relation). The problem is that it does not support showing relations for multiple modules but shows only the tree for one module. I wanted it to show the whole Curses::UI Widget set and ended up doing a real nasty hack to make it do so. This actually looks quite nice, but I'd like to do it more cleanly and have it in GraphViz::ISA for later use. So I can add this to my TODO list. Will be fun.

The last thing I did this weekend was thinking about usability. I had the nice experience that a friend of mine bought a new computer (with the “usual” WinXP on it) and asked me to help her getting started. Actually I wasn't needed that much because Windows was doing a good job on helping her. She always went like “I want to do bla bla bla” and the nice interface in Explorer always had the right shortcut (like “copy folder”). This and an article I read on slashdot about “Y” (Yet another X replacement) made me wonder about the way computer interfaces are designed today. The first thing I actually never realised was that most of the X apps (if they are not from the same desktop package) look always different. For a person like me, that on the one hand just uses software and on the other hand has the Matrix-like view on apps (just seeing widgets and imagining the underlieing code) this does not matter. For people new to computer it does. They need to do things on the same way in every app. The other thing is that interfaces should be more task-based. Everyone knows that Mozilla is a webbrowser, Evolution is an email suite and OpenOffice is an office suite. But you want to “browse the web” and not “mozill” or “read your email” and not “evolute”. That's kind of stupid. Maybe all thos small Icons should vanish for some (ordered) task list. That would help people a lot more than a taskbar which actually never mentions a single task, but program names. I know that it is part of the creative process to give the program a name, but this does not help people and usability. Maybe we should redefine desktops and stop stealing what M$ already has.

The last thing for this rather long summary is an idea a friend told me. He's starting to get used to the Linux world and has some interesting ideas. The best one he had till now was that one thing that is needed for Linux is something like the MS Office assistant for all of X (or KDE, or GNOME) to help people getting started. You can actually combine that with the “task based user interface” I talked about erlier, because if you can ask you Computer about how to do something it usually get's a lot easier. If you can tell your Computer “I want to move a folder” he can give you good (desktop dependend) hints. That's always kind of hard for people which don't have a clue about things like file systems, permissions and all the rest. They just want to do it, so let us help them do it.