March 2010 Archives

Stepping up to the plate

Adam Kennedy has declared a contest between Dancer and Mojolicious. Seems to me like a great idea. We'll both get a chance to learn from each other, show our strengths and try to work on our exposed weaknesses.


One major issue about Mojolicious is that they decided to do everything in core (at least from perl 5.10.1), without any additional dependencies that aren't in Perl core (while, we at Dancer, try to keep th…

The "Irrefutable Wave" Myth

Yesterday, Gabor and I went to a PyWeb-IL meeting. It's a monthly gathering of mostly-web Python programmers. We went there to see what can be learned from our peers and to understand the image of Perl in other communities. It was interesting.


There were two lectures: Optimizing Python and RDF and Python. The RFD lecture was actually a lecture I heard at the last W3C gathering a while ago, by the exact same person. Only this time he added a few lines in Python to show how to get things rolling. At least this time someone (me) explained the difference between U…

Leaving ExtJS

After struggling with ExtJS for a while, I've decided to let go of it. Not in favor of jQueryUI or any other UI. Not even if favor of writing a UI myself (other than, perhaps, a few loose forms that make you want to vomit). I've decided to work on what I do - the backend.


This is actually something that took me a while to understand. I don't write UIs, I don't write websites, I don't write frontend. I'm not good at that, it doesn't even interest me. I love working on backend, I like writing the engine, I like fiddling with the Perl code. I don't enjoy Javascript, I don't enjoy …

Projects that should have their own websites

There are plenty of interesting and valuable projects on CPAN that do not have their own websites. I know, I know, CPAN gives us a default website ("with a reasonable design") and all we need to do is write the code and POD. Yes, that's great.

But wouldn't you rather advertise yourself, your product and Perl along the way? Then your project should have its own website. Yes, it should. No, I'm right!

A website represents you and your project. If it's beautiful, you're beautiful (even if you're ugly). If it's approachable, your project is approachable. If it gives a warm feeling…

Two Perl Mongers meetings, three talks, two reviews

Monday and Tuesday there were two Israeli Perl Mongers (israel.pm) meetings, of Haifa.pm and Rehovot.pm, respectively. I gave a talk at both of them.

Haifa is way up north compared to where I stay ("middle earth", A.K.A., Tel Aviv). I took an hour-long train ride there with Shlomi Fish. Then we walked over to Qualcomm, where Shmuel greeted us and offered snacks and drinks. I had foolishly forgot that not all places necessarily have a computer designated for the projector and didn't bring mine. Shmuel brought his and we hooked things up. (Tip: always carry a copy of Portable Open Offic…

Modules vs. Applications

While still drawing the differences between programmers, language practices and behaviors, I stumbled upon another major issue. Our tendency to write modules instead of applications.

This is a touchy subject, I'm sure, and I hope not to offend anyone.

Since the majority of Perl programmers are actually sysadmins by day [and superheroes by night], we're accustomed to writing pieces of software, "modules". We have CPAN to host all these modules. Occasionally we might write a program, an App, a small cute frontend to some module that we have. CPAN supports that.

Speeding Up Code

The latest heavy project at $work makes me miss C a bit. There's a lot of Moose objects, KiokuDB, MooseX::Getopt (which is evidently much lighter than I thought) and more. To display all the entries I have in a KiokuDB SQLite database, it takes roughly a second and a half!

Profiling with NYTProf 3.0 (FTW!) shows that Moose takes the most. I don't want to use Mouse for various reasons which I won't go into. Moose::Compile, MooseX::Antlers, nothing near production yet (but I'm keepings my fingers crossed). I tried to rewrite the MooseX::Getopt part and use Getopt::Long manually, but it …

Measuring the Progress of UI

Lately I've been learning ExtJS (which I might write about separately sometime) to try and create a UI for a small application I'm writing for a friend.

The application uses Dancer and KiokuDB. They're both easy to work with and I spent little time working on the backend. The problem lies in the frontend, where I need some UI. I've chosen ExtJS because it has built-in widgets.

I've played with tutorials, general documentation and (tried to) read the not-as-friendly-as-I-thought API. I was able to create a grid, a form and even a viewport. However, it kept feeling like it's stu…

Dancer 1.160

Major release of Dancer finally out. You can read about it on Alexis' blog.

Basically this version provides a lot of improvements to Dancer:


  • Alexis Sukrieh worked hard on refactoring and optimizing.

  • David Precious did a lot of awesome work on documentation: we now have a cookbook and a deployment manual for various situations you might encounter. He also added a session backend with clean …

Search::GIN 0.04 finally out!

I'm excited about this for a few reasons:

  • I just started using Search::GIN a while ago and it's a lot of fun. It's also an amazing example of how to write code correctly, using roles, abstraction and introspection. Reading the source is illuminating.

  • Search::GIN 0.04 has a few fixes that existed for a while in the Github repo but were not uploaded to CPAN.

  • There is now some docs on writing queries to help beginners. Hopefully I'll get around to documenting the extractors and write up some usage examples.

  • A major th…

    Gaming FAIL

    Many years ago, when I was... roughly 15 (I think), I met Theodor Ts'o (one of the first hardcore Linux Kernel hackers, since version 0.90, I believe) at a Linux event IBM organized in Israel. I should note that he is a very nice person.

    After the event, we got to talk a bit. We talked about our favorite games. Mine was "avoiding segfaults". This was back when I was programming in C.

    Today I wrote the following regex:
    qr/^([\w|\.]+)\s+(?(\d+)\s+)?(\w+)\s+(?:(\d+)\s+)?([\w|\d|\.]+)$/;

    Then got a Segmentation fault

    Can you spot the error?…

    About Sawyer X

    user-pic Gots to do the bloggingz