Source blog: blog dds
How to Create Your Own Git Server
Although I'm a happy (also paying) user of GitHub's offerings, there are times when I prefer to host a private repository on a server I control. Setting up your own Git server can be useful if you're isolated from the public internet, if you're subject to inflexible regulations, or if you simply want features different from those offered by GitHub (and other similar providers). Setting up a Git server on a Unix (Linux, Mac OS X, *BSD, Solaris, AIX) machine isn't difficult, but there are many details to observe. Here is a complete guide.
How to make a MacBook Kensington Lock Adapter
Apple, in its infinite wisdom, has not included a Kensington lock slot in the current model of the MacBook Pro computer. Given the computer's price, desirability, and the fact that three people I know have had theirs stolen, I decided to build an improvised adapter that would allow me attach a Kensington lock to the computer. I realize, that the security offered by such a contraption is what my colleague Vassilis Prevelakis calls an "advisory lock", for Kensington locks can be easily picked or pried away.
Systems Software
Systems software is the low-level infrastructure that applications run on: the operating systems, language runtimes, libraries, databases, application servers, and many other components that churn our bits 24/7. Its the mother of all code. In contrast to application software, which is constructed to meet specific use cases and business objectives, systems software should be able to serve correctly any reasonable workload. Consequently, it must be extremely reliable and efficient. When it works like that, its a mighty tool that lets applications concentrate on meeting their users needs. When it doesnt, the failures are often spectacular.
How to Fix the Sony MDR-W08L Headphones
I love the Sony MDR-W08L headphones , because they are featherlight and the only ones that don't fall from my ears when I run. Sadly, there's no effective strain relief at the point where the cable leaves their body. As a result the cable can become internally severed, and the sound becomes intermittent. Here's how to fix this problem.
Software Tools Research: SPLASH Panel Discussion
Written by Dennis Mancl and Steven Fraser At the recent SPLASH (Systems, Programming, Languages and Applications: Software for Humanity) conference, one of us (Steven Fraser) organized an international group of experts to discuss challenges in software tools research. 1 The panelists included Kendra Cooper (University of Texas, Dallas), Jim Cope Coplien (Gertrud & Cope), Junilu Lacar (Cisco Systems), Ruth Lennon (Letterkenny Institute of Technology), Diomidis Spinellis (Athens University of Economics and Business), and Giancarlo Succi (Free University of Bolzano-Bozen). The discussion interwove three threadstool use, development, and educationand the panelists took a critical look at how well tools serve the needs of software professionals, managers, and academics.
Systems Code
If I program in many high and low-level languages, but don–t write systems code, I am a quiche programmer or a code monkey. And if my code runs without errors, and I know the complexity of all algorithms; and if my servers have hundreds of cores and gigabytes of RAM, but don–t write systems code, I am nothing. And if I run the hippest kernel, and install the neatest apps, but don–t write systems code, it profiteth me nothing.
The Importance of Being Declarative
A declarative programming style focuses on what you want your program to do rather than how to perform the task. Through diverse programming techniques, libraries, and specialized languages, you end up with code that sidesteps nitty-gritty implementation details, dealing instead with a tasks big picture.
APIs, Libraries, and Code
Lets say you want to display a JPEG-compressed image, calculate Pearsons correlation coefficient, parse an XML file, or create a key-value store. You can often choose between using the functionality of the applications platform (Java EE or .NET), calling one of several available external libraries, or writing the code on your own. It isnt an easy choice because you have many factors to consider. Specifically, you must take into account the tasks complexity, as well as the licensing, quality, and support of competing alternatives.
Changes in the Way we View Computing
The Association for Computing Machinery recently released the 2012 version of the ACM Computing Classification System (CCS). This is the work of 120 volunteers and marks significant changes over the previous version, which was released in 1998. To create it the volunteers mined ACM Digital Library search terms and used the services of a specialist company that creates ontologies. To see what has changed in the past 14 years in the way we view computing, I used Wordle to create word clouds from the 1998 and the 2012 versions.
Programming Languages vs. Fat Fingers
A substitution of a comma with a period in project Mercury's working Fortran code compromised the accuracy of the results, rendering them unsuitable for longer orbital missions. How probable are such events and how does a programming language's design affect their likelihood and severity? In a paper I recently presented at the 4th Annual International Workshop on Evaluation and Usability of Programming Languages and Tools I showed results obtained by randomly perturbing similar programs written in diverse languages to see whether the compiler or run-time system would detect those changes as errors, or whether these would end-up generating incorrect output.
Chemical Element Trump Cards
I can still remember the weight of the Lancia Stratus car that featured in the Top Trumps cards were playing as children in the 1970s: 870kg. It was the lightest of all the flashy cars in the set, and therefore a much sought-after card. Other card sets that kept us busy included airplanes, motorcycles, and tanks. Through them we learned tens of useless trivia, but also got a feeling of the compromises inherent in engineering.
Virtualize Me
The virtual machine (VM) is the most dazzling comeback in information technology. IBM implemented a VM platform architecture in the late 1960s in its CP/CMS operating system. The companys goal was to provide the time-sharing capabilities that its batch-oriented System/360 lacked. Thus a simple control program (CP) created a VM environment where multiple instances of the single-user CMS operating system could run in parallel. Thirty years later, virtualization was rediscovered when companies like VMware found ways to virtualize the less accommodating Intel x86 processor architecture.
How to Calculate an Operation's Memory Consumption
How can you determine how much memory is consumed by a specific operation of a Unix program? Valgrind 's Massif subsystem could help you in this regard, but it can be difficult to isolate a specific operation from Massif's output. Here is another, simpler way.
Research Proposal Becomes Reality
Eight years ago I submitted a research proposal for developing a tablet-based game platform for toddlers. Although the proposal was not accepted for funding, it's nice to see the idea becoming a reality through the unveiling of the Toys 'R' Us $150 Tabeo tablet for kids .
Don't Install Software by Hand
An IT systems setup and configuration is a serious affair. It increasingly affects us developers mainly due to the proliferation and complexity of internet-facing systems. Fortunately, we can control and conquer this complexity by adopting IT-system configuration management tools.
Importing an RCS Project into Git
RCS stands for Revision Control System. You may have never heard it, because it's more than a quarter-century old; a paper describing it was published in 1985. Although its commands are still available in most Unix distributions and it's one of the easiest systems to use in a single-user scenario, it is clearly showing its age when compared to more modern systems. Here is how to move an existing project managed with RCS to the 21st century and Git , while preserving all its history.
Impact Factor of Computer Science Journals 2011
The Thomson Reuters Web of Knowledge has published the 2011 Journal Citation Reports . Following similar studies I performed in 2007 , '08 , '09 , '10 , and '11 , here is my analysis of the current status and trends for the impact factor of computer science journals.
Why are AWS Command-Line Tools so Slow?
Amazon's Elastic Compute Cloud command-line tools are useful building blocks for creating more complex shell scripts. They allow you to start and stop instances, get their status, add tags, manage storage, IP addresses, and so on. They have one big disadvantage: they take a long time to run. For instance, running ec2-describe-instances for six instances takes 19 seconds on an m1.small AWS Linux instance. One answer given , is that this is caused by JVM startup overhead. I found that hard to believe, because on the same machine a Java "hello world" program executes in 120ms, and running ec2-describe-instances --help takes just 321ms.
Git
Even by our fields dizzying rate of progress I wouldnt expect to revisit the subject of version control just six years after I first wrote about it in this column ( Version Control Systems . Software , 22(5):108109, September/October 2005). Yet here we are. The new kid on the block is git, a distributed revision control system available on all mainstream development platforms through a Free Software license. Git, a brainchild of Linus Torvalds, began its life in 2005 as the revision management system used for coordinating the development of the Linux kernel. Over the years its functionality, portability, efficiency, and third-party adoption have evolved by leaps and bounds to make it its categorys leader.
How do Big US Firms Use Open Source Software?
We hear a lot about the adoption of open source software, but when I was asked to provide hard evidence there was little I could find. In an article I recently published in the Journal of Systems and Software together with my colleague Vaggelis Giannikas we tried to fill this gap by examining the type of software the US Fortune 1000 companies use in their web-facing operations. The results were not what I was expecting.
Package Management Systems
DLL hell was a condition that often afflicted unfortunate users of old Microsoft Windows versions. Under it, the installation of one program would render others unusable due to incompatibilities between dynamically linked libraries. Suffering users would have to carefully juggle their conflicting DLLs to find a stable configuration. Similar problems distress any administrator manually installing software that depends on incompatible versions of other helper modules.
How to Decrupt "Secrets for Android" Files
Secrets for Android is a nifty Android application that allows you to securely store passwords and other sensitive data on your Android phone. Your data are encoded with your supplied password using strong cryptography and are therefore protected if your phone gets stolen. Although the application offers a backup and an export facility, I found both wanting in terms of the availability and confidentiality associated with their use.
Refactoring on the Cheap
The refactorings that a good integrated development environment can perform are impressive. Yet, there are many reasons to master some cheap-and-cheerful alternative approaches. First, there will always be refactorings that your IDE wont support. Also, although your IDE might offer excellent refactoring support for some programming languages, it could fall short on others. Modern projects increasingly mix and match implementation languages, and switching to a specialized IDE for each language is burdensome and inefficient. Finally, IDE-provided refactorings resemble an intellectual straightjacket. If you only know how to use the ready-made refactorings, youll miss out on opportunities for other code improvements.
Mind Mapping
In a recent NPR interview the journalist described how I used a mind map to organize my work while I served as Secretary General for Information Systems at the Greek Ministry of Finance. A number of people asked me for more details; if you're interested read on.
Pretend Invitations
Choosing between people you want to invite to a function and people you have to invite is sometimes difficult. Say Alice wants to invite Tom, Dick, and Harry to a party, but she'd actually prefer if Dick didn't show up. Here's how Alice can send invitations by email from an email-capable Unix system to achieve the desired result, while covering her scheming with plausible deniability.
Advice from Successful Greek IT Startups
Members of the Hellenic Association of Mobile Application Companies and the Hellenic Semiconductor Industry Association , assorted biotechnology companies, and representatives from Greek and US-based venture capital funds gathered on Friday December 17, 2011 in a meeting to exchange advice, tips, and war stories on venturing abroad. It was one of the most inspiring meetings I've attended for some time. These are my notes from the meeting.
Apps are the New Users
Some facilities provided by mature multi-user operating systems appear arcane today. Administrators of computers running Mac OS X or Linux can see users logged-in from remote terminals, they can specify limits on the disk space one can use, and they can run accounting statistics to see how much CPU time or disk I/O a user has consumed over a month. These operating systems also offer facilities to group users together, to specify various protection levels for each user's files, and to prescribe which commands a user can run.
Using the HP 4470c Scanner Under Windows 7
Neither Hewlett Packard nor Microsoft Windows 7 offer native support for my HP 4470c scanner. Throwing a working scanner away to buy a new one only because some software was missing seemed like a waste, so I looked for an alternative solution. This is how I made it work using SANE , an open source framework for scanners.
Lessons from Space
By Diomidis Spinellis and Henry Spencer We can lick gravity, but sometimes the paperwork is overwhelming. Wernher von Braun Twilight saw the landing of Atlantis at the Kennedy Space Center on 21 July 2011, marking the end of the 30-year Space Shuttle program and leaving the Soyuz series of spacecraft as the only remaining major option for sending humans into space. With a history of 1,700 flights over an almost half-century lifetime, the Soyuz rocket and spacecraft are arguably a tremendously successful spaceflight design.
Faking it
This column is about a tool we no longer have: the continuous rise of the CPU clock frequency. We were enjoying this trend for decades, but in the past few years, progress stalled. CPUs are no longer getting faster because their makers cant handle the heat of faster-switching transistors. Furthermore, increasing the CPUs sophistication to execute our instructions more cleverly has hit the law of diminishing returns. Consequently, CPU manufacturers now package the constantly increasing number of transistors they can fit onto a chip into multiple coresprocessing elementsand then ask us developers to put the cores to good use.
Impact Factor of Computer Science Journals 2010
The Thomson Reuters Web of Knowledge has published the 2010 Journal Citation Reports . Following similar studies I performed in 2007 , 2008 , 2009 , and 2010 , here is my analysis of the current status and trends for the impact factor of computer science journals.
How I Dealt with Student Plagiarism
Panos Ipeirotis , a colleague at the NYU Stern School of Business , received considerable media attention when, in a blog post he subsequently removed , he discussed how his aggressive use of plagiarism detection software on student assignments poisoned the classroom atmosphere and tanked his teaching evaluations. As detailed in a story posted on the Chronicle of Higher Education blog , Mr. Ipeirotis proposes instead that professors should design assignments that cannot be plagiarized. Along these lines here are two methods I've used in the past.
Agility Drivers
A management practice is mature when even government bureaucracies decide to adopt it. The March 2011 publication of UK's ICT strategy marks this moment by advocating that “the application of agile ICT delivery methods [...] will improve government's capability to deliver projects successfully and realise benefits faster.”. This begs the question: were we misguided during the decades we were advocating stringent control of requirements and a tightly milestone-driven development process? Interestingly, this was not the case. We were right then, and we're right now. Things have changed, and this is why we can nowadays smugly apply agile practices reaping impressive dividends.
Ten Lessons I Learned from Fixing my Laptop's Motherboard
A month ago I managed to break my laptop, by reversing the polarity of a universal power supply. The repair shop diagnosed the problem as a failed motherboard, and asked for ¿659 to replace it. I found the price preposterous and the notion of throwing away a motherboard for a single failed component ecologically unsound. Here is how I fixed the laptop on my own, and what I learned in the process.
Code Verification Scripts
Which of my classes contain instance variables? Which classes call the method userGet , but don't call the method userRegister ? These and similar questions often come up when you want to verify that your code is free from some errors. For example, instance variable can be a problem in servlet classes. Or you may have found a bug related to the userGet and userRegister methods, and you want to look for other places where this occurs.
Choosing and Using Open Source Components
The developers of the SQLite open source database engine estimate that it's deployed in roughly half a billion systems around the world (users include Airbus, Google, and Skype). Think of the hundreds of thousands of open source components, just one click away from you. If you know how to choose and use them effectively , your project can benefit mightily.
elytS edoC
Sure, you can write English right to left. You can also write software code to look like a disc or even a train (see www.ioccc.org/1988/westley.c and 1986/marshall.c ). However, you can't then complain when you have to fight with your magazine's editor or production staff about accepting your column's title for publication, or if your colleagues refuse to touch your code with a 10-foot pole. Writing code in a readable and consistent style is difficult, uninteresting, tedious, underappreciated, and, extremely important.
Sophisticated Targeted Link Spam
What appeared to be an intelligent comment in one of my blog postings turned out to be targeted link spam. This is a worrying trend, because, although we can defend ourselves against mass attacks, we're very vulnerable to targeted strikes.
Manifesto for Agile Government
I'm sure that many readers of this blog have read the Manifesto for Agile Software Development . Having worked in government over the past year, I wondered how a similar manifesto for government, created by a group of people who would radically want to improve existing structures, would look like. Here is my take.
Farewell to Disks
A classic web-comic illustrates how idle Wikipedia browsing can lead us from the Tacoma Narrows Bridge to Fatal hilarity ( and worse ). The comic doesn't show the path leading from A to B, and finding it is an interesting challenge–think how you would engineer a system that could answer such questions. I believe that this problem and a solution I'll present demonstrate some programming tools and techniques that will become increasingly important in the years to come.
Synchronizing Thunderbird's Replied Flag
My main email client is Thunderbird, but I also use BlackBerry's and Apple's clients, all through the same IMAP account. Disconcertingly, email messages to which I have replied through the other clients don't show up in Thunderbird with the "replied" ( ) icon. This means that when I browse my email using Thunderbird, I waste time trying to remember whether I have responded to a particular message. Here is how I solved the problem.
UML, Everywhere
flowchart, n.: The innumerate misleading the illiterate. – Stan Kelly-Bootle, “The Devil's DP Dictionary” A mechanical engineer who sees the symbol ¿ in a diagram will immediately realize that a feature is specified to be perpendicular to another. In contrast, a software engineer looking at a diagram's line ending with the symbol ¿ will, at best, wonder whether it denotes aggregation (as in UML), or a “zero or one” cardinality (as in IDEF1X), or something else invented by a creative academic. Worse, many developers will simply scratch their head in bewilderment.
Sane vim Editing of Unicode Files
Being able to use plain alphabeitc keys as editing commands is for many of us a great strength of the vi editor. It allows us to edit without hunting for the placement of the various movement keys on each particular keyboard, and, most of the time, without having to juggle in order to combine particular keys with ctrl or alt . However, this advantage can turn into a curse when editing files using a non-ASCII keyboard layout. When the keyboard input method is switched to another script (Greek in my case, or, say, Cyrillic for others) vi will stop responding to its normal commands, because it will encounter unknown characters.
Batch Files as Shell Scripts Revisited
Four years ago I wrote about a method that could be used to have the Unix Bourne shell interpret Windows batch files. I'm using this trick a lot, because programming using the Windows/DOS batch files facilities is decidedly painful, whereas the Bourne shell remains a classy programming environment. There are still many cases where the style of Unix shell programming outshines and outperforms even modern scripting languages.
Code Documentation
Technical prose is almost immortal. – Frederick P. Brooks, Jr. Although programming is a form of literary expression, the relationship between code and its documentation is uneasy at best. As Figure 1 shows, among the thousands of projects that FreeBSD maintainers have considered important enough to port to the platform, the number of comments per 100 lines varies substantially. Clearly, as developers our views on how we should document our code are anything but consistent. Yet, there are universal principles, nifty tools, and useful practices that can benefit us all.
Impact Factor of Computer Science Journals 2009
The ISI Web of Knowledge recently published the 2009 Journal Citation Reports . Following similar studies I performed in 2007 , 2008 , and 2009 , here is my analysis of the current status and trends for the impact factor in computer science journals.
Email Analytics
During the past six months I've been drowning in email. I spend a large part of my day responding to email messages and filing incoming messages I consider important. Yet I'm falling behind and this affects the quality of my work: I sometimes delay responding to important messages. Followng Peter Drucker's dictum "If you can't measure it, you can't manage it", I decided to write a tool to analyze my incoming and outgoing email messages.
Ron Heifetz on Crisis Leadership
Earlier today I had the privilege to attend a lecture on crisis management by the Harvard Senior Lecturer Ron Heifetz . Here is a list of points that struck me (in the form of slightly edited tweets), and my view of their relevance to software development.
Email's Ten by Ten Law
I drown in email and my aspirations for handling it are becoming increasingly lame. In the 1980s my goal used to be an empty mailbox at the end of each session. During the 1990s the goal became to empty the mailbox by the end of the day. But tasks I couldn¿t complete within the day accumulated, so in the 2000s I just tried to have only so many messages as could fit in a window without a scrollbar, so that I could immediately scan what I had to do.
Software Tracks
A generous car reviewer might praise a vehicle's handling by writing that it turns as if it's running on railroad tracks. Indeed, tracks offer guidance and support. When you run on tracks you can carry more weight, you can run faster, and you can't get lost. That's why engineers, from early childhood to old age, get hooked on trains. Can we get our software to run on tracks?
Useful Polyglot Code
Four years ago I blogged about an incantation that would allow the Windows command interpreter (cmd) to execute Unix shell scripts written inside plain batch files. Time for an update.
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.
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.
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.
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.
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.
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.
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 two often, and I think it is a mistake.
Real Heroes
I always admired the pilots of the two PZL M18B "Dromader" fire-fighting airplanes that were stationed in Cephallonia's airport.
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.
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.
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.
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 .
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.
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.
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.
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.
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 .
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 .
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.
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 .
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.
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?
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.
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 by a vector multiplication.
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.
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.
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.
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.
Tim Berners-Lee Addresses the First Web Science Conference
Sir 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.
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.
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.
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.
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 .
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.
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.
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.
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.
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.
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.
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.
