Archive for the 'programming' Category

Binary Beat

Wednesday, September 24th, 2008

Listen to the beat of a binary counter!


Binary Beat from Niklas Roy on Vimeo.

This is an experiment, where I count one byte up - from 00000000 to 11111111. Decimal spoken, this is from 0 to 255. I have assigned a sound to each bit and when it switches from 0 to 1, the sound is played.

Inside Visual Studio 2008

Friday, January 11th, 2008

Dr. Dobb’s Journal has a nice summary of the new features introduced in Microsoft’s latest developer environment.

Since the release of the .NET Framework 1.0, Microsoft has committed to a made-to-measure programming environment with each new version of its managed framework. But for a number of reasons, this tradition was interrupted last year when .NET Framework 3.0 made its debut without a new version of Visual Studio. This year, however, .NET 3.5 comes out with a new programming environment—Visual Studio 2008.

Code’s Worst Enemy

Monday, December 31st, 2007

Steve Yegge has put up an insightful post on some of the issues with dealing with a large code base. Definitely worth a read.

I say my opinion is hard-won because people don’t really talk much about code base size; it’s not widely recognized as a problem. In fact it’s widely recognized as a non-problem. This means that anyone sharing my minority opinion is considered a borderline lunatic, since what rational person would rant against a non-problem?

People in the industry are very excited about various ideas that nominally help you deal with large code bases, such as IDEs that can manipulate code as “algebraic structures”, and search indexes, and so on. These people tend to view code bases much the way construction workers view dirt: they want great big machines that can move the dirt this way and that. There’s conservation of dirt at work: you can’t compress dirt, not much, so their solution set consists of various ways of shoveling the dirt around. There are even programming interview questions, surely metaphorical, about how you might go about moving an entire mountain of dirt, one truck at a time.

Industry programmers are excited about solutions to a big non-problem. It’s just a mountain of dirt, and you just need big tools to move it around. The tools are exciting but the dirt is not.

Book: Beautiful Code

Friday, December 7th, 2007


Beautiful Code: Leading Programmers Explain How They Think
edited by Andy Oram & Greg Wilson.
O’Reilly, 2007.

Beautiful Code is a collection of essays by master programmers, each discussing a piece of code or software architecture that they find particularly beautiful or elegant. The essays cover a wide range of topics and some will really challenge your understanding, but readers who put in the effort will be rewarded. This is an invaluable resource filled with practical wisdom from gurus, and pretty much all of the code is taken from software in actual use. This book is a must-read for any programmer, and could one day be regarded as a classic text on programming.

Rating: 9/10

Links:

Downloads: DejaVu fonts

Thursday, November 8th, 2007

The DejaVu fonts are based on the Bitstream Vera fonts, and are a set of nicely designed fonts that are released and being improved upon under an open source license. Of particular interest for programmers is the monospaced font, which makes code editor listings much more readable, especially when compared to the ancient Courier New. Among other advantages, it has the important characteristic that lowercase ‘L’, capital ‘I’, and numeral ‘1′ characters are visually distinct, as well as capital ‘O’ versus numeral ‘0′. Bitstream Vera was one of the first things I installed when setting up a new development environment, but from now on I will be using DejaVu.

The DejaVu fonts are a font family based on the Vera Fonts release 1.10. Its purpose is to provide a wider range of characters (see Current status page for more information) while maintaining the original look and feel through the process of collaborative development (see Authors). The family is available as TrueType fonts and also as third-party packages.

Visualizing Fitts’s Law

Thursday, October 11th, 2007

Particletree has an informative article on Fitt’s Law, an important guideline in user-interface design.

Published in 1954, Fitts’s Law is an effective method of modeling the relationship of a very specific, yet common situation in interface design. That situation involves a human-powered appendage at rest (whether it’s physical like your finger or virtual like a mouse cursor) and a target area that’s located somewhere else.

Explaining the Excel Bug

Wednesday, September 26th, 2007

Joel on Software examines the recent Excel 2007 bug.

By now you’ve probably seen a lot of the brouhaha over a bug in the newest version of Excel, 2007. Basically, multiplying 77.1*850, which should give you 65,535, was actually displaying 100,000.

Classic Computer Science Puzzles

Tuesday, September 18th, 2007

Coding Horror has a nice summary of classic puzzles in computer science, which you may have seen in your university courses.

I prefer to think of programming languages as utilitarian tools for real world problems. They let me accomplish pragmatic (and often prosaic) goals. PHP is about as unsexy a language as you’ll ever find, but does that matter when it’s the technology driving the current Boardwalk and Park Place of the web world? I’m not a fan of puzzle questions in interviews; I’d rather have potential developers give me a presentation or write a reasonably useful program in the real development environment they’ll be using on the job. Solve all the puzzles you want, but the only one we’re getting paid to solve is the customer’s problem.

That said, many fundamental computer science concepts can be summarized well in puzzle form, which aids tremendously in teaching and learning these key concepts. Here’s a quick list of the classic computer science puzzles that I remember from my university days

Code Like a Pythonista: Idiomatic Python

Monday, July 30th, 2007

A great tutorial on how to code the Python way.

In the tutorial I presented at PyCon 2006 (called Text & Data Processing), I was surprised at the reaction to some techniques I used that I had thought were common knowledge. But many of the attendees were unaware of these tools that experienced Python programmers use without thinking.

Laws of Software Development

Wednesday, July 18th, 2007

This site has collected a large list of laws related to software development.

Inspired by Phil Haack’s article 19 Eponymous Laws of Software Development, I decided to collect laws, axioms and rules pertaining to mainstream software development and put them in a nice, easy-to-read table.

Laws of Software Development

Swarm Theory

Tuesday, July 3rd, 2007

National Geographic has published an interesting article on how swarm behaviour models can help create smart, distributed problem-solving systems.

Where this intelligence comes from raises a fundamental question in nature: How do the simple actions of individuals add up to the complex behavior of a group? How do hundreds of honeybees make a critical decision about their hive if many of them disagree? What enables a school of herring to coordinate its movements so precisely it can change direction in a flash, like a single, silvery organism? The collective abilities of such animals—none of which grasps the big picture, but each of which contributes to the group’s success—seem miraculous even to the biologists who know them best. Yet during the past few decades, researchers have come up with intriguing insights.

Cylons. Why debugging matters.

Friday, June 15th, 2007

Amusing banner ad from Microsoft.

Cylongs. Debugging matters.

Punish Your Microsoft Developer

Thursday, June 7th, 2007

Rather than just sending back a memory dump, how would you like to be able to physically punish the developer that’s causing you so much anguish?

The Development of the C Language

Tuesday, April 17th, 2007

If you are curious how the C language came to be, read this paper by Dennis Ritchie himself.

The C programming language was devised in the early 1970s as a system implementation language for the nascent Unix operating system. Derived from the typeless language BCPL, it evolved a type structure; created on a tiny machine as a tool to improve a meager programming environment, it has become one of the dominant languages of today. This paper studies its evolution.

Ridiculous Programming Request

Friday, March 2nd, 2007

This is quite an outrageous project posting at GetACoder.com. The budget is $1000-$3000! Good luck.

Hi,

So I’m posting for a rather large project. I need someone to program me a new OS (Operasting System) that looks different than Ms Windows XP etc. but has the same style. It does not need to run on a mac but all the other PCs. It’s supposed to have a stylish look with clear edges etc. And ITS NOT SUPPOSED TO BE JUST A REDESIGNED WINDOWS as I’m going to sell that operating system later on. It’s going to be called BlueOrb.

These are some important points :

It should have ALL THE FEATURES that Windows Xp Professional has.
ALL the files that run on Windows XP ust also run on the BlueOrb OS.
It must have a very user-friendly interface (like MS WINDOWS XP)
When it gets Installed, the user needs to insert a serial number.
It HAS to be HACKER SAFE!
It must be quick and good looking.

Note that I only accept quality work and do not want any quickly done BS.

greetz,

M.Reinhardt

Some of the followup comments are rather funny as well. allencolmes writes:

Hi. I can do this for you next week, when I plan on taking a break from a nonotech based / atomic fission driven search engine thats going to make larry page wet his pants. 6 days to code, 1 to rest. It will be written from scratch and completely original in design, so don’t worry about copyright bs. I plan to write the entire OS in C, and blindfolded, if its all the same to you. 100% secure will not be a problem either…In fact the OS will be designed to leverage jedi mind tricks to kill anyone that even thinks about breaking in. (i was thinking maybe make them chop off their feet and jump up and down until their empty would be fair). Anyways, I’m gonna smoke some more crack, maybe you should do the same. Thanks!

Decoding Office Build Numbers

Saturday, February 17th, 2007

It turns out that the version numbers in Microsoft Office products are more than just simple build numbers.

The 4-digit build number is actually an encoded date which allows you tell when a build was born. The algorithm works like this:

  • Take the year in which a project started. For Office “12″, that was 2003.
  • Call January of that year “Month 1.”
  • The first two digits of the build number are the number of months since “Month 1.”
  • The last two digits are the day of that month.

So, if you have build 3417, you would do the following math: “Month 1″ was January 2003. “Month 13″ was January 2004. “Month 25″ was January 2005. Therefore, “Month 34″ would be October 2005.

3417 = October 17, 2005, which was the date on which Office 12 build 3417 started.

Charles Simonyi and Intentional Programming

Thursday, January 18th, 2007

An interesting article on how Charles Simonyi, who designed Microsoft Office and invented Hungarian notation <shudder>, hopes to make programming easier.

Bill Gates calls Simonyi “one of the great programmers of all time.” Indeed, Simonyi is arguably the most successful coder in the world, measured in terms of financial reward and the number of people who use his creations. (Other celebrated programmer-billionaires, such as Larry Ellison and Bill Gates himself, made their money and names founding and managing technology ventures.) Simonyi could easily choose to spend the rest of his life endowing philanthropic ventures, flying planes, or cruising in his yacht. Instead, he says, he is “programming probably harder than ever before.” He is obsessed with a project that he has pursued for a decade and a half, and that four years ago carried him right out of Microsoft’s doors. He is proud of his profession. But he is also haunted by the thought of what programmers must contend with each time they sit down to code. He asks, Why is it so hard to create good software?

Shelves in Subversion

Thursday, January 18th, 2007

Here is an informative post on how to create “shelves” using Subversion, similar to a feature available in Visual Studio Team System.

Shelve your pending changes when you are not ready to or cannot check in a set of pending changes. There are primarily five shelve scenarios:

  • Interrupt When you have pending changes that are not ready for check in but you need to work on a different task, you can shelve your pending changes to set them aside.
  • Integration When you have pending changes that are not ready for check in but you need to share them with another team member, you can shelve your pending changes and ask your team member to unshelve them.
  • Review When you have pending changes that are ready for check-in and have to be code-reviewed, you can shelve your changes and inform the code reviewer of the shelveset.
  • Backup When you have work in progress that you want to back up, but are not ready to check in, you can shelve your changes to have them preserved on the Team Foundation server.
  • Handoff When you have work in progress that is to be completed by another team member, you can shelve your changes to make a handoff easier.

The branching model in Subversion, with its use of “cheap copies” is well suited to provide similar capabilities and handle all five of these scenarios. In the rest of this article, I will detail two different ways to shelve changes using branches in Subversion.

Regular Expressions

Tuesday, January 16th, 2007

Regular Expressions

Bjarne Stroupstrup on The Problem with Programming

Friday, January 5th, 2007

This is a fairly interesting interview with the creator of the C++ programming language.

TR: How do you account for the fact that C++ is both widely criticized and resented by many programmers but at the same time very broadly used? Why is it so successful?

BS: The glib answer is, There are just two kinds of languages: the ones everybody complains about and the ones nobody uses.

There are more useful systems developed in languages deemed awful than in languages praised for being beautiful–many more. The purpose of a programming language is to help build good systems, where “good” can be defined in many ways. My brief definition is, correct, maintainable, and adequately fast. Aesthetics matter, but first and foremost a language must be useful; it must allow real-world programmers to express real-world ideas succinctly and affordably.