Posts in 2009

 

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 academic post 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 work.

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 of bibliographies. 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. The code, 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"

Job Security

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 mildly amusing. 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"

Real Heroes

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 to an HP 100LX palmtop PC (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 GNU plotutils 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 posted on Twitter a challenge: create a self-referential tweet (one that links to itself). He later 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 self-referential tweet. 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 Scala language.

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 madplay to 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 Garmin Nuvi car-GPS device.

Continue reading "Real-Time Google Earth GPS Tracking"

Greek Numerals in OpenOffice.org

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. Following similar studies I performed in 2007 and 2008, here is my analysis of the current status and trends for the impact factor 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 are available online.

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, regarding the second reading of the 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"

Dual-Use Technology

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 ACCU 2009 conference. 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"

Drawing Tools

1 Word = 1 Millipicture

— /usr/games/fortune

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 CScout 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 sourceforge.net monthly update, I was impressed by the number of business-related software in the top-25 project list. 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 lights? I had a chance to study this during tonight's Earth Hour: an international event organised by the WWF, 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

Tim Berners-Lee with a thought-provoking keynote address launched 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 Information Train, 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 article 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. My colleague Georgios Gousios 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

Experiment overview 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 project? 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"

Beautiful Architecture

What are the ingredients of robust, elegant, flexible, and maintainable software architecture? Over the past couple of years, my colleague Georgios Gousios 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 a link to Brian Kernighan's IEEE Software column titled Sometimes the Old Ways Are Best at reddit.com. At the time of writing, the entry 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 available online 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"

Become a Unix command line wizard
edX MOOC on Unix Tools: Data, Software, and Production Engineering
Debug like a master
Book cover of Effective Debugging
Compute with style
Book cover of The Elements of Computing Style
Syndication
This blog is also available as an RSS feed:

Category Tags
AWS (4)
Android (2)
Apple (9)
C (20)
C++ (16)
COVID-19 (1)
Cloud (1)
Computers (58)
Databases (4)
Debugging (8)
Design (1)
Discussion (6)
Electronics (15)
Environment (1)
FreeBSD (26)
Funny (14)
GSIS (5)
Google (6)
Government (2)
Hacks (26)
Hardware (25)
History (9)
Internet (12)
Java (26)
Linux (7)
Machine learning (1)
Management (26)
Microsoft (11)
One Laptop Per Child (3)
Open source (57)
Opinion (28)
Parenting (11)
Perl (13)
Photos (13)
Politics (4)
Programming (108)
Python (1)
R (1)
Raspberry Pi (5)
Risks (6)
Scala (1)
Science (33)
Security (26)
Sights (19)
Smartphones (3)
Software (22)
Software engineering (89)
Standards (6)
System administration (46)
Teaching (9)
Technology (28)
Testing (2)
Tips (42)
Tools of the Trade (52)
Travel (9)
UML (6)
Unix (46)
Web (31)
Windows (14)
Writing (45)
XML (10)
vim (5)
Archive
Complete contents (363)
2020 (9)
2019 (4)
2018 (5)
2017 (20)
2016 (7)
2015 (6)
2014 (5)
2013 (13)
2012 (17)
2011 (14)
2010 (13)
2009 (40)
2008 (40)
2007 (41)
2006 (48)
2005 (44)
2004 (30)
2003 (7)

Last update: Sunday, May 31, 2020 10:55 pm

Creative Commons Licence

Unless otherwise expressly stated, all original material on this page created by Diomidis Spinellis is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.