General Development Archive

Why Software Is Bad and What We Can Do to Fix It

"There is something fundamentally wrong with the way we create software. Contrary to conventional wisdom, unreliability is not an essential characteristic of complex software programs. In this article, I will propose a silver bullet solution to the software reliability and productivity crisis. The solution will require a radical change in the way we program our computers. I will argue that the main reason that software is so unreliable and so hard to develop has to do with a custom that is as old as the computer: the practice of using the algorithm as the basis of software construction. I will argue further that moving to a signal-based, synchronous software model will not only result in an improvement of several orders of magnitude in productivity, but also in programs that are guaranteed free of defects, regardless of their complexity."

Go Beyond what the Desktop Normally Does with Tcl/Tk

Most computer users interact with their workstations primarily through some form of graphical user interface (GUI). In the world of Microsoft Windows, this interface is tightly controlled. The UNIX world, by contrast, offers a veritable smorgasbord of different GUIs with varying degrees of functionality. They range from minimalist window managers, such as twm, to large, capable tools, such as GNOME and KDE (K Desktop Environment). This article shows you how the Tcl/Tk scripting language offers a simple and elegant way to code GUI widgets with minimal effort.

SourceForge Enterprise Edition Released for Free Download

SourceForge has announced the SourceForge Enterprise Edition Download. This is a free, 15 user download version of SFEE. It's packaged together with Subversion and CVS in a VMware image. SFEE is a corporate version of SourceForge.net that lets development teams work together on internal software projects. It's an integrated toolset that lets you monitor project status, find out what your offsite developers are doing, access project information and documentation in a central repository, manage software changes efficiently, and search across your software projects. Check it out and download it from SourceForge.net . There's also a community support site with documentation, discussion forums, add-ons, and sample projects.

Protothreads Library 1.3 Released

Protothreads are an extremely lightweight, stackless, thread-like programming abstraction designed for severely memory constrained embedded systems that may have as little as a few hundred bytes of RAM. Protothreads are designed to replace event-driven C code with sequential programming but without the memory overhead of full multithreading - a protothread requires only two bytes of RAM. Protothreads are implemented in ANSI C, does not require any machine code, and is therefore highly portable. Version 1.3 adds the possibility to determine if a protothread is blocked, has yielded or has ended, and can be downloaded here. Also be sure to read how protothreads work, under the hood.

Learn Object-Oriented Analysis with Generative Analysis

How do you elicit high-quality information from information sources that are subject to deletion, distortion and generalization? According to Jim Arlow, the answer is generative analysis, which is a new approach to learning object oriented analysis that teaches you how to deal with these and other real-world human issues of software engineering. Also, Mike Kelly examines a recent testing experience that should have worked: plenty of scripted test cases, plenty of time developing and testing the scripts. So what went wrong? Plenty.

A C++ Flyweight Pattern for IT Management

Mother Nature likes object-oriented development! C++ programmers often can't afford the luxury of creating a universe of objects; our platforms are intrinsically limited. However, the flyweight design pattern provides an elegant means of sharing objects, with a small price in terms of storage and retrieval. Stephen Morris describes C++ code that uses the flyweight design pattern to solve a knotty problem in networking. Also on the same web site, "Mastering the Requirements Process".

Remote Python Call

Remote Python Call (RPyC) is a python library providing transparent and symmetric IPC/RPC and distributed computing. It supports both synchronous and asynchronous operations. It works by giving you transparent control over a remote python interpreter: you can import remote modules, access remote classes, functions, and instances, just as you would do locally. Typical use cases are remote administration, distributed testing, resource sharing, and tunneling. Version 2.60 was released last week, adding supports for secure (TLS) connections.

C++ Mediator Pattern for Object Interaction

Monolithic software products (those with a multitude of highly coupled components) are often blamed on the use of procedural languages, but it's just as easy to produce overly interdependent classes in object-oriented languages. Stephen B. Morris shows how using the mediator design pattern can help reduce class interdependencies, aid componentization & ultimately help make classes service-oriented.

Speed up Ruby-on-Rails with memcached

"Today I learned about memcached, which I'd heard of before, but never really investigated. From the project's site, 'memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.' So, even though I don't have a huge amount of traffic, I still have dynamic sites, and I'm always looking at ways to speed up my Typo blog. So, using memcached, you can get a big performance boost in databases calls, which sold me on giving it a go."

UndoDB Released

"Undo Software today unveiled UndoDB - the first bidirectional debugger for compiled programs. A bidirectional debugger allows programmers to run a program backwards in time as well as forwards. The program can be stepped back line-by-line, or rewound to any point in its history. Furthermore, programmers can play the program forwards and backwards in a totally repeatable fashion, allowing them to 'home in' on the cause of a bug."

The C++ Interpreter Pattern for Grammar Management

The world is rapidly moving away from technology-based solutions toward end-user facilitation. Simple grammars provide a surprising solution to the problem of "driving" IT infrastructure to achieve business ends. In this article, Stephen Morris shows you how to use the interpreter design pattern to create a simple C++ grammar, which can be extended to produce surprisingly powerful capabilities.

Fun with strace and the GDB Debugger

"Programming a UNIX system can be fun as well as educational. With the UNIX strace tool and GDB, the GNU Project Debugger, you can really dig deep into the functionality of your system and learn a lot about the various programs that comprise it. Using both tools in concert can be a rewarding experience as you look under the hood of your UNIX machine." Note: Hey don't look at me, I just copied the title...

Shed Skin Python-to-C++ Compiler 0.0.8 Released

"Shed Skin is an experimental Python-to-C++ compiler. It accepts pure Python programs, and generates optimized C++ code. This means that, in combination with a C++ compiler, it allows for translation of Python programs into highly efficient machine language. For a set of 16 non-trivial test programs, measurements show a typical speedup of 2-40 over Psyco, about 12 on average, and 2-220 over CPython, about 45 on average. Shed Skin also outputs annotated source code."