How to Get a Glowing Recommendation Letter
Students who do well in my courses often come to me asking for a
recommendation letter for graduate or postgraduate study.
I only write letters for students I know well
and I can honestly recommend, so some end up with a glowing
recommendation while others leave empty handed.
While I was drafting a few letters today,
it occurred to me that obtaining a good recommendation letter
is a lot easier if you've planned for it well in advance.
Continue reading "How to Get a Glowing Recommendation Letter"
The Risk of Air Gaps
As some readers of this blog know,
from this month onward I'm on a leave of absence from my
to head the
Greek Ministry of Finance
General Secretariat of Information Systems.
The job's extreme demands explain the paucity of blog postings here.
I'll describe the many organizational and management
challenges of my new position in a future blog post.
For now let me concentrate on a small but interesting technical aspect:
the air gap we use to isolate the systems involved in processing
tax and customs data from the systems used for development and production
Continue reading "The Risk of Air Gaps"
Basic Etiquette of Technical Communication
Parents spend years trying to teach their children to be polite, and some of us had to learn at school how to properly address an archbishop. Yet, it seems that advice on courteousness and politeness in technical communication is in short supply; most of us learn these skills through what is euphemistically called “on the job training.” With enough bruises on my back to demonstrate the amount and variety of my experience in this area (though not my skill), here are some of the things I’ve learned.
Continue reading "Basic Etiquette of Technical Communication"
Tags for Bibliography References
I love writing my papers in LaTeX.
Its declarative style allows me to concentrate on the content,
rather than the form.
I even format the text according to the content,
keeping each phrase or logical unit on a separate line.
Many publishers supply style files that format the article according
to the journal's specifications.
Even better, over the years I've created
an extensive collection
I can therefore use BibTeX to cite works with a simple command,
without having to re-enter their details.
This also allows me to use style files
to format references according to the publisher's specification.
Yet, there is still the problem of navigating from a citation to
the work's details.
Here is how I solve it.
Continue reading "Tags for Bibliography References"
Applied Code Reading: Debugging FreeBSD Regex
When the code we're trying to
read is inscrutable,
inserting print statements and running various test cases can be
two invaluable tools.
Earlier today I fixed
a tricky problem in the FreeBSD regular expression library.
originally written by Henry Spencer in the early 1990s,
is by far the most complex I've ever encountered.
It implements sophisticated algorithms with minimal commenting.
Also, to avoid code repetition and increase efficiency,
the 1200 line long main part of the regular expression execution engine is
included in the compiled C code
three times after modifying various macros to adjust the code's behavior:
the first time the code targets small expressions and operates
with bit masks on long integers,
the second time the code handles larger expressions
by storing its data in arrays,
and the third time the code is also adjusted to handle multibyte characters.
Here is how I used test data and print statements to locate and fix the problem.
Continue reading "Applied Code Reading: Debugging FreeBSD Regex"
My colleague, who works for a major equipment vendor, was discussing how his employer was planning to lay off hundreds of developers over the coming months. “But I’m safe,” he said, “as I’m one of the two people in our group who really understand the code.” It seems that writing code that nobody else can comprehend can be a significant job security booster. Here’s some advice.
Continue reading "Job Security"
The Price of Cheap Labor
The strange entries I've found over the past two weeks I've been
researching a large database are innumerable.
Some addresses, like Wastington, DC are simply annoying,
while others, like Vancouver BC V6T 1Z4 United States, are
It's clear to me that the database has been populated by the massive
application of a cheap labor force.
This is happening all too often, and I think it is a mistake.
Continue reading "The Price of Cheap Labor"
I always admired the pilots of the two
PZL M18B "Dromader"
fire-fighting airplanes that were stationed in Cephallonia's airport.
Continue reading "Real Heroes"
HP-200LX Remote Control Hacks
All my friends know that for the past 15 years I've been semi-attached
(recently updated to a 200LX)
for my personal information management and many other tasks.
The device is extremely versatile, sturdy, and flexible.
Amazingly, after so many years of hard daily use, I still find new
applications for it.
Continue reading "HP-200LX Remote Control Hacks"
Applied Code Reading: GNU Plotutils
Robert, a UMLGraph user sent me an email
describing a problem with the
SVG output on Firefox.
I firmly believe that
code reading is a lot
easier than many think:
one can easily fix most software problems without detailed knowledge
of the underlying system.
I therefore decided to practice what I preach.
Continue reading "Applied Code Reading: GNU Plotutils"
How to Create a Self-Referential Tweet
Yesterday Mark Reid
create a self-referential tweet (one that links to itself).
clarified that the
tweet should contain in its text its own identifier
(the number after "/status/" bit should be its own URL).
I decided to take up the challenge
("in order to learn a bit about the Twitter API" was my excuse),
and a few hours later I won the game by posting the first
Here is how I did it.
Continue reading "How to Create a Self-Referential Tweet"
A Tiny Review of Scala
Earlier today I finished reading the
Programming in Scala book.
My review of the book should appear soon in the
reviews.com site and the
ACM Computing Reviews.
Here I outline briefly my view of the
Continue reading "A Tiny Review of Scala"
Madplay on an Intel Mac
Numerous MP3 players around my house pull music from a central file server.
The hardware I'm using is extremely diverse and many devices
can nowadays be politely described as junk:
they include 100MHz Pentiums with 16MB RAM, and an ARM-based prototype
lacking support for floating point operations.
For the sake of simplicity I've standardized the setups around
a web server running on each machine to list static HTML pages
containing the available music files,
and simple shell-based CGI clients that invoke
play the music.
When I added an Intel-based Mac to the mix I found that madplay
refused to work, producing only a white noise hiss.
Continue reading "Madplay on an Intel Mac"
Real-Time Google Earth GPS Tracking
In a recent trip I incorrectly assumed that real-time tracking of
Google Earth's pre-cached maps with a GPS receiver would be sufficient
help for navigating around the highways in Los Angeles.
I therefore experimented with the way Google Earth's
sparsely-documented real time tracking works,
and wrote a small program to interface Google Earth with a GPS receiver.
Fortunately, after seeing a colleague drive with a car-GPS device
on the dashboard I came to my senses, and got a real
Continue reading "Real-Time Google Earth GPS Tracking"
Greek Numerals in OpenOffice.org
doesn't support Greek numerals,
and this is a problem for its Greek localization,
because such numerals are often used for section and list numbering.
As an exercise in large scale
code reading and in the
writing of code I'm supposed to teach to undergraduate students,
I decided to contribute an implementation to OpenOffice.org.
Continue reading "Greek Numerals in OpenOffice.org"
Impact Factor of Computer Science Journals 2008
The ISI Web of Knowledge
recently published the 2008
Journal Citation Reports.
similar studies I performed in
here is my analysis of the current status and trends for the
in computer science journals.
Continue reading "Impact Factor of Computer Science Journals 2008"
Software Architecture Challenges in the 21st Century
A wonderful workshop, titled
Software Architecture Challenges in the 21st Century, took place
at the University of Southern California on June 8th.
The workshop was co-sponsored by IEEE Software,
USC's Center for Systems and Software Engineering,
and UC Irvine's Institute for Software Research (ISR).
Here is my personal summary of the talks; the presentation slides
Continue reading "Software Architecture Challenges in the 21st Century"
Revisiting the Antikythera Mechanism Emulator
Over the past few weeks I updated the
Antikythera mechanism emulator
I built in 2007.
I was preparing for an invited talk on the subject, which I'll give at the
2009 USENIX Annual Technical Conference,
and for this I wanted to include in the emulator the new findings
recently published in Nature.
Continue reading "Revisiting the Antikythera Mechanism Emulator"
A Bug Creates Art
Sometimes beautiful images are generated serendipitously;
think of snowflakes or Lissajous curves.
Today I got one when I encoded an animation of the back dials of my
Antikythera mechanism emulator
with the CamStudio lossless codec (v1.4).
When I played back the movie with the VLC media player (v0.9.9)
a bug in the player (or the codec or the video driver) gave me a black
background and a series of overlaid images with the stark colors of the gears.
I think the bug is related to the alpha channel, which I use for
partially obscuring the gears behind the translucent dial face.
I found the result eerily beautiful.
Continue reading "A Bug Creates Art"
Democracy in Europe: The Telecom Package
Last week I sent an email to the
24 Members of the European Parliament (MEPs)
that are supposed to represent me,
Telecoms Reform Packet.
Continue reading "Democracy in Europe: The Telecom Package"
Fixing the Orientation of JPEG Photographs
I used to fix the orientation of my photographs through an application
that would transpose the compressed JPEG blocks.
This had the advantage of avoiding the image degradation of a
decompression and a subsequent compression.
Continue reading "Fixing the Orientation of JPEG Photographs"
Best Day to Blog
Most of us don't have enough time to blog every day.
Given that blogging ideas can often be pending for days,
which is the best day to publish them?
Continue reading "Best Day to Blog"
Lego sells lovely toys with a great educational potential.
No peace-loving father would have a problem giving them as a gift
(especially, if he can also occasionally take part in the action).
Unfortunately, children seem to have their own (genetically preprogrammed?)
ideas of what is interesting to build.
I still love Lego, but I'm a bit worried about human nature.
Continue reading "Dual-Use Technology"
A Tiling Demo
Over the past (too many) days I've been preparing my presentation for the
At one point I wanted to show how loop tiling increases locality of reference
and therefore cache hits.
Surprisingly, I could not find a demo on the web, so I built one from scratch.
Here are two applets demonstrating memory accesses during a matrix raise to the
power of two operation.
Continue reading "A Tiling Demo"
1 Word = 1 Millipicture
It’s no accident that in all engineering branches, our colleagues often communicate using drawings and diagrams. Given many artifacts’ scale and complexity, a drawing is often the best way to describe them. Uniquely, in software development we can easily derive pictures from code, and sometimes even code from pictures.
Continue reading "Drawing Tools"
Precision in Comments
As I was writing some code for the
refactoring browser today,
I reflected on the importance of writing precise and clear comments.
Continue reading "Precision in Comments"
Open Source Opens up for Business
Today, as I was reading the
I was impressed by the number of business-related software in the top-25
I was sure this wasn't always the case,
so I dug up the corresponding
the top-25 projects at the beginning of 2006
to refresh my memory.
The differences are profound.
Continue reading "Open Source Opens up for Business"
Earth Hour: A Geek's View
What happens to the power grid when millions of people turn of their
I had a chance to study this during tonight's
event organised by the
which asks households and businesses to turn off
their non-essential lights and electrical appliances for one hour to raise
awareness towards the need to take action on climate change.
Continue reading "Earth Hour: A Geek's View"
Tim Berners-Lee Addresses the First Web Science Conference
with a thought-provoking keynote address
the First Web Science Conference
at the Foundation of the Hellenic World
in Athens earlier today.
Here are the notes I took during his speech.
Continue reading "Tim Berners-Lee Addresses the First Web Science Conference"
YouTube vs. TOSEM
Over the past couple of weeks colleagues and friends I encounter
in the hallways or at various meetings have been commenting about a small
video I posted on YouTube.
This video, titled
describes a demonstration experiment I performed at an event whose aim
was to familiarize children with science.
Often this video is the first discussion I've ever had with a colleague
regarding my work.
This struck me as odd, because I consider other parts of my research
a lot more significant that this experiment.
However, a look at the number of downloads of an
we recently published in the (highly regarded)
ACM Transactions on Software Engineering and Methodology (TOSEM)
and the views of the YouTube video proved instructive.
Continue reading "YouTube vs. TOSEM"
Parallelizing Jobs with xargs
With multi-core processors sitting idle most of the time
and workloads always increasing,
it's important to have easy ways to make the CPUs earn their money's worth.
told me today how the Unix xargs command can help in this regard.
Continue reading "Parallelizing Jobs with xargs"
Start With the Most Difficult Part
There’s not a lot you can change in the process of constructing a building. You must lay the foundation before you erect the upper floors, and you can’t paint without having the walls in place. In software, we’re blessed with more freedom.
Continue reading "Start With the Most Difficult Part"
The Information Train
The Information Train is a scientific
experiment that I presented at the
Wizards of Science 2009 contest over the past weekend.
The entry demonstrates how computers communicate with each other by
setting up a network in which a model train transfers a picture's pixels
from one computer to the other.
You can find
a video of the experiment
on YouTube, and, if you're interested, you can also download
the corresponding software and schematics from
this web page.
Continue reading "The Information Train"
Visualizing Revision Logs with a UML Sequence Diagram
How can you visualize the developers' contributions in a collaborative
One way involves drawing timelines adorned with marks indicating
each developer's contribution.
This is a simple UML sequence diagram,
a diagram that allows you to see the interactions of objects,
but in this case the objects are the actual developers and the
interactions are their contributions.
Continue reading "Visualizing Revision Logs with a UML Sequence Diagram"
What are the ingredients of robust, elegant, flexible, and maintainable software architecture?
Over the past couple of years, my colleague
and I worked
on answering this question through a collection of intriguing essays
from more than a dozen of today's leading software designers and architects.
Continue reading "Beautiful Architecture"
The World's Smallest Domain-Specific Language
Domain-specific languages, also known as little languages, allow us
to express knowledge in a form close to the problem at hand.
In contrast to general-purpose languages, like Java or C++,
they are specialized for a narrow domain.
Earlier today I wanted to initialize a rectangular array of Boolean
values to represent the stick figure of a human.
For that I devised a tiny domain-specific language (DSL) consisting of
two symbols (representing an on and an off pixel) and wrote its
commensurably simple interpreter.
Continue reading "The World's Smallest Domain-Specific Language"
A Well-Tempered Pipeline
I am studying the use of open source software in industry.
One way to obtain empirical data is to look at the operating systems and
browsers used by the Fortune 1000 companies by examining browser logs.
I obtained a list of the Fortune 1000 domains and wrote a pipeline
to summarize results by going through this site's access logs.
Continue reading "A Well-Tempered Pipeline"
Paper-Based Publishing Meets the Web
A few hours ago somebody posted
to Brian Kernighan's
Sometimes the Old Ways Are Best
At the time of writing,
has already attracted 143 comments and 172 votes.
It contains is an (often interesting) discussion between Young Turks praising
IDEs/SlickEdit/BeyondCompare and defenders of Unix tools.
One bemused respondent commented (in a somewhat irreverent style)
on the strange fact that a column that hit the
headlines in January was mentioning summer projects.
Here is the story behind the column's timeline and some thoughts
on paper-based publishing.
Continue reading "Paper-Based Publishing Meets the Web"
Brian Kernighan on 30 Years of Software Tools
As part of the IEEE Software 25th anniversary, Brian Kernighan
graciously agreed to write a Tools of the Trade column.
His article, titled Sometimes the Old Ways are Best, is now freely
through the Computing Now web site.
Continue reading "Brian Kernighan on 30 Years of Software Tools"
The Changing Value of Knowledge and Skills
I feel we're witnessing a watershed in the value of knowledge and many,
once crucial, skills.
Thanks to powerful ubiquitous computers and the internet,
hard-earned knowledge and skills that used to be important are no more.
Here are some examples.
Continue reading "The Changing Value of Knowledge and Skills"