Linux Journal/2008.10

From Omnia
Revision as of 00:28, 7 May 2021 by Kenneth (talk | contribs) (Created page with "==[http://www.linuxjournal.com/issue/174 Linux Journal Contents #174, October 2008]== Features * Interview with Guido van Rossum by James Gray :The new Python 3000 is boundi...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Linux Journal Contents #174, October 2008

Features

  • Interview with Guido van Rossum by James Gray
The new Python 3000 is bounding beyond Python 2. Python creator Guido van Rossum explains why you've got to try it.
  • A Tale of Two Languages by Daniel Bartholomew
Not all programming languages are created for automating spreadsheets and device drivers—some, like Inform 6 and 7, were created specifically for making games.
  • Shell Scripting with a Distributed Twist: Using the Sleep Scripting Language by Raphael Mudge
A language for practical extraction and reporting with mobile agents?
  • The Falcon Programming Language in a Nutshell by Giancarlo Niccolai
Messages can carry anything, including methods or whole Sigma sequences for remote execution in foreign objects.

Binary Coded Text

Binary to Text (ASCII) Conversion:

01010011011001010110010100100000011110010110111101110101001000000110111001100101011110000111010000100000011011010110111101101110011101000110100000100001
See you next month!

Simplified Bash

"I rewrote his code snippets as a—IMHO—more readable bash script using more concise code snippets":

#!/bin/bash

# imdb-top-250-movies.sh
#
#   Felix C. Stegerman <flx@obfusk.net>
#   2008-07-12 [14:15]
#
# --
#
# Output "title | year" for each of the top 250 movies at IMDb.
#
# --
#
# Usage: imdb-top-250-movies.sh > IMDB-TOP-250-MOVIES
#
# --

PREFIX='http://www.imdb.com'
  CHART="/chart/top"
  TITLE='/title/tt[0-9]+/'

 function get_top_250_chart ()
 {
   wget -O - "$PREFIX/$CHART" \
     | grep -E -o "$TITLE" \
     | sed 's!^!'"$PREFIX"'!'
 }

 function get_movie_and_year ()
 {
   wget -O - "$1" \
     | grep '<title>' \
     | sed -r 's!^.*>(.*)<.*!\1!' \
     | sed -r 's!\(([0-9]{4})(/(I{1,3}|I?V|VI{1,3}|I?X))?\)$!| \1!'
 }

 for URL in $(get_top_250_chart); do
   get_movie_and_year "$URL"
 done

 # vim: set ft=sh tw=70 sw=2 sts=2 et:


Also, this version correctly parses—for example, “Crash (2004/I)” is changed to "Crash | 2004". 

Hyperic HQ - Zenoss Alternative

Regarding Zenoss... there is another one that provides the same, if not more, capability with less setup time: Hyperic HQ.

"Hyperic uses XML over HTTPS, using agents installed on hosts to provide metrics back to the HQ Server. It can monitor 10s of 100s of different metrics across different platforms, and it is open source. " [1]

I'm using it at work, and it makes monitoring systems a breeze.

Linux used in research

Although I always enjoy reading about scientific applications for Linux, “One Tale of Two Scientific Distros” by Doc Searls in your August 2008 Upfront section, hit particularly close to home. My cousin, David Auty, is an astrophysicist, currently researching neutrino oscillations at Fermilab. Here's a link to a brief description of his work: www.sussex.ac.uk/physics/profile104724.html.

Firmware in Linux Kernel

Keeping firmware in the kernel is a somewhat controversial issue, because it means keeping binary blobs of data in an open-source project. But removing it, as David Woodhouse is trying to do, turns out to be controversial also. Folks like David S. Miller are violently opposed to the idea on the grounds that it would break certain drivers (like tg 3) or make them much worse. Also, it takes a part of the kernel that essentially had been approved by Linus Torvalds—even in binary form—and puts it in the hands of someone else. Unlike GCC, libc and other projects on which the kernel depends, this external firmware project would not be anything like a universal tool; it just would be a key part of the kernel that was stored and maintained outside the official source tree.

But, now that the effort actually is underway, it may be unstoppable. A lot of folks find the problem interesting on a technical level, which generally means they'll eventually find solutions that satisfy everyone. For now, it seems as though firmware definitely will be relegated to its own little spot in the kernel sources. From there, it could end up getting a separate git tree altogether.

Chordstats

(User Friendly by J.D. "Illiad" Frazer comic)

Is that ... some kind of alternate music?
It's "chordstats" a perl script that monitors a system and returns machine generated music.

Monitor your Linux computer with machine-generated music

FluidSynth

perl chordStats.pl |fluidsynth Hammered_Instruments.sf2 -c10000 -z10000 >/dev/null

Mac Linux

Our passion is about Linux for human beings, it's not Linux for Linux specialists, or Linux for anything other than the people who we care about.

...our goal, very simply, is to make sure the free software ecosystem can deliver a Mac OS-like experience, or an experience that will compete with the Mac OS. We see Apple as the gold standard of the user experience. We believe that, while it can be a challenge, the innovation inherent in the free software process can deliver an experience that is comparable and in many ways superior.

Proprietary drivers are a horrible kludge; they're a little bit like introducing a cast iron pot into a titanium machine. You have something that is inherently brittle and therefore reduces the value of the whole.

—Mark Shuttleworth, http://itmanagement.earthweb.com/osrc/article.php/12068_3757246_2

netcraft

Whenever I run across something new, cool and Web-based, I check Netcraft's “What's that site using?” to see whether the site's servers are running on Linux. You can't always tell, and the results can be misleading, but it's a good first sniff test.

joe editor

I use an editor called joe to do editing when I don't have the X Window System set up (on some of the older servers), and it's just sudo apt-get install joe, and I'm up and running.

Unobtrusive JavaScript

Remove JavaScript event handlers from HTML files using Prototype and Lowpro.

Googles Prototype library:

<script text="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js"></script>

Resources

David Flanagan's JavaScript: The Definitive Guide is an excellent resource for JavaScript programmers, including both a tutorial and a reference section. Douglas Crockford's recent book, JavaScript: The Good Parts, is much shorter, but it's also excellent and provides useful advice on which parts of JavaScript we should avoid. Both books are published by O'Reilly. My opinion (and use) of JavaScript has improved dramatically since reading Crockford's writing, letting me concentrate more on writing code and less on problems associated with the specification or implementation of JavaScript.

You can read more about Prototype at its home page, www.prototypejs.org. I also enjoyed the book Prototype and Scriptaculous, written by Christophe Porteneuve and published by the Pragmatic Programmers.

Finally, the Lowpro library is written and distributed by Dan Webb, and it's best described on his blog, www.danwebb.net/2006/9/3/low-pro-unobtrusive-scripting-for-prototype. And, a Google group for discussing Lowpro is at groups.google.co.uk/group/low-pro.

Tech Tip - Site downloading with wget

Downloading an Entire Web Site with wget

for offline viewing

$ wget \
  --recursive \
  --no-clobber \
  --page-requisites \
  --html-extension \
  --convert-links \
  --restrict-file-names=windows \
  --domains website.org \
  --no-parent \
      www.website.org/tutorials/html/

--recursive: download the entire web site

--no-clobber: don't overwrite any existing files (used in case the download is interrupted and resumed)

--page-requisites: get all the elements that compose the page (images, CSS and so on)

--html-extension: save files with the .html extension

--convert-links: convert links so that they work locally, off-line

--restrict-file-names=windows: modify filenames so that they will work in Windows as well

--domains website.org: don't follow links outside website.org

--no-parent: don't follow links outside the directory tutorials/html/

Imaginary Languages

pig latin

It's called pig, and it comes with the classic bsdgames package (or bsd-games, in some distributions). To translate large phrases into Pig Latin, simply type pig at the command line, then type the phrase you want translated:

$ pig
Linux is the world's greatest operating system.
Inuxlay isway ethay orldway'say eatestgray
 operatingway ystemsay.

rot13

rot13 is actually a cypher, albeit a very simple one

$ rot13
Linux is cool redefined.
Yvahk vf pbby erqrsvarq.

It takes the letters of a word, such as linux, and changes it by moving 13 letters forward (or backward) in the alphabet. In that way, linux becomes yvahk. To translate from rot13, simply re-enter the encrypted phrase using the same command. If you break the alphabet up into two rows of 13 letters, it's extremely easy to see how rot13 works:

abcdefghijklm
nopqrstuvwxyz

wtf

Also in that bsd-games package is a translator for the computer world's most powerful language, acronyms. The program, wtf (which no doubt stands for “What's that frase?”) can help you decipher those strange words you find scattered on IRC and inside instant-message conversations. For example:

$ wtf rotfl
ROTFL: rolling on the floor laughing

leet

no mention of leet

Resources

BSD Games (check your distribution's repositories)

Klingon Clock: tlhaq.twobrotherssoftware.com

Klingon Language Institute: www.kli.org

var'aq, a programming language for warriors: www.geocities.com/connorbd/varaq

Marcel's Web Site: www.marcelgagne.com

Cooking with Linux: www.cookingwithlinux.com

Movie Trivia - Finally

Use the shell to generate movie trivia from a movie database.

delta="$(( $RANDOM % $factor + 1))"
add="$(( $RANDOM % 2 ))"
closeyear="$(( $releasedate + $delta ))"

Note: given that we can't gracefully return a value short of using a global variable.

Alternative return method: How to give them back to the calling routine sorted? Easy:

echo "$match1 $match2 $releasedate" | sort -n

Fix white space:

match="$(sed -n "${randline}p" < $filmdb)"

As I've written about before, wc is one of your best friends in script writing, because it's easy. But, it's also frustrating that there's no way to turn off the superfluous white space it generates. That's why the first line includes a call to sed to axe any spaces that are added. Somewhere, in a parallel universe to our own, there's an -n flag to wc that says “no padding” and makes this forevermore unnecessary. Sadly, we aren't in that universe, so just about every time you use wc, you have to strip out the white space at the same time.

twitter integration?

Look at how to inject the trivia into the Twitterstream. Want to see it in action? By the time you read this column, it'll be live at twitter.com/FilmBuzz (along with movie commentary and much more).

Dave Taylor is a 26-year veteran of UNIX, creator of The Elm Mail System, and most recently author of both the best-selling Wicked Cool Shell Scripts and Teach Yourself Unix in 24 Hours, among his 16 technical books. His main Web site is at www.intuitive.com, and he also offers up tech support at AskDaveTaylor.com. Follow him on Twitter if you'd like: twitter.com/DaveTaylor.

Novell Security Team

Novell's SUSE Security Team: www.novell.com/linux/security/team.html

Hack and / - Wii Will Rock Linux

Why should your Wii have all the fun? Find out how to connect all those Rock Band instruments to your Linux machine and use them with a number of different audio programs.

Frets on Fire gameplay

Resources

Audacity: audacity.sourceforge.net

Frets on Fire: fretsonfire.sourceforge.net

Hydrogen: www.hydrogen-music.org

New Products

[CherryPal C100 Computer www.cherrypal.com] $250

New Projects

Droopy (stackp.online.fr/droopy)

Droopy, a miniature Web server. Now, if you're like me, and the combination of seeing the words Linux and Web server usually results in a sleep-induced coma, fear not. This actually is more useful for average Internet users. Its sole purpose is to allow other people to upload files to your PC by presenting them with a Web page interface, and its requirements are about as minimalist as I've come across.

If you made the uploads directory, open a terminal there before running the script. This isn't a requirement, but wherever you run the script, this is where any uploaded files you receive will go.

safe-rm (code.google.com/p/safe-rm)

With the advent of sudo and an increasing number of new Linux users, the possibility of users deleting mission-critical files by accident is becoming all the more real. To deal with this issue there is now safe-rm:

safe-rm is intended to prevent the accidental deletion of important files by replacing /bin/rm with a wrapper that checks the given arguments against a configurable blacklist of files and directories that should never be removed. Users who attempt to delete one of these protected files or directories will not be able to do so and will be shown a warning message instead. Protected paths can be set both at the site and user levels.

Freenukum (launchpad.net/freenukum)

The now tame but classic Duke Nukum restored with Freenukum.

Ah, now for a bit of nostalgia. If your idea of vintage gaming is a Nintendo 64, you probably won't have a clue what I'm talking about. But, for those who are from the era of at least the 286, you no doubt will remember such classics as Commander Keen, Jetpack and, of course, Duke Nukum. If you're thinking Duke Nukum 3D, then think again. That was a remake of this! This was back in the days of the 2-D platformer, and when Commander Keen was king, this came along as a sort of Team America version—rude, crude and supposedly violent (but very tame by today's standards).

With the compilation out of the way, you still have one more step before you can run the game. Freenukum currently requires the original level files to run, so you need to get a copy of the original from somewhere. Either the shareware version or the full version will work, so Google around and find a host that suits you. Of course, there are abandonware sites, but we aren't encouraging that sort of thing.

Once you have downloaded the original, copy the game's files into the directory ~/.freenukum/data (if you're a bit stuck here and using a graphical file manager, turn on Show Hidden Files).

A shareware download is available at www.3drealms.com/duke1/index.html.

Load Me Up, Load Me Down

The second-generation HP Media Vault.

if you're a better hacker than I am, you can configure the iTunes server manually over SSH using the instructions on the Firefly home page (www.fireflymediaserver.org).

Python 3000 - Interview with Guido van Rossum

Despite some revolutionary new features, “Python 3.0 will be the same language you've loved and used before, it's just been cleaned up a bit”, says Python creator, Guido van Rossum.

Python is the wildly popular, high-level programming language that was recently voted Favorite Scripting Language in the 2008 Linux Journal Readers' Choice Awards. In this interview, Python's creator Guido van Rossum shares his insights about the revolutionary new Python 3000, why the pain from backward incompatibility is worth it, what he foresees for the Python 2.6 fork, and what he's been up to lately at Google.

Many of the cleanups are pretty benign. For example, we're finally getting rid of string exceptions (all exceptions have to be defined as classes). There is a large class of cleanups like this, and I refer your readers to the python.org Web site for the (mostly) boring details.

There is one group of changes that is (relatively speaking) revolutionary, and at the same time, it is probably responsible for the most conversion pain, and for the largest sigh of relief. We're adopting a fundamentally different attitude toward Unicode. A bit of history: Python 1 supported only eight-bit strings, which were used for text and binary data alike. Python 2 kept this dual use of eight-bit strings, but added Unicode strings. This was done so as to maintain backward compatibility with Python 1, but it created a new major ambiguity. There were two ways of representing text strings, either as eight-bit strings or as Unicode strings. Moreover, the meaning of eight-bit strings remained ambiguous, as these were used for text as well as binary data.

In Python 3, we're breaking with compatibility and drawing the line differently. There will be a bytes type to be used for binary data (and encoded text, like UTF-8 or UTF-16), and there will be an str type to be used for text only and capable of representing all Unicode characters. The implementation of the bytes type closely resembles that of the old eight-bit string type, and the implementation of the str type is copied from the old Unicode type. The big improvement over Python 2 is that both ambiguities I mentioned above are removed. There is now a 1:1 mapping between usage (data or text) and types (bytes or str). Reports from early adopters have shown that developers really appreciate this change and are happy to pay for it. Some third-party projects, such as Django, already have adopted a convention in Python 2 that essentially is the same. All text is stored in Unicode strings, and eight-bit strings store only binary data, but Python 2 doesn't help enforce this.

I think we've struck a phenomenal balance between changing too much and changing too little. It has really helped that toward the end of the Py3k development, we switched to a time-based release schedule, so we had a clear way to stop the never-ending stream of proposals for yet more language improvements.

Python 3000 is currently slower than 2.5. Will it be as fast or faster once it is seriously tuned?

I expect that by the time 3.0 is released, we'll be close to the 2.5 speed. We'll probably keep tuning it well beyond that, and if past history is any measure of future performance, we'll see continued speed improvements as new releases come out.

First of all, Python 2 will be fully supported for a long time in parallel with Python 3. My personal expectation is that there will be a period of at least three to five years where developers have complete freedom to choose between Python 2 or Python 3, getting the same level of support. There will be new releases of Python 2, starting with 2.6, in parallel with the Python 3 releases.

The second prong of the transition strategy is a source code conversion tool that we call 2to3. This tool handles most of the small syntactic changes you encounter when converting Python 2 code to Py3k. For example, it automatically translates print statements into print() function calls, turns Unicode literals (such as u"...") into regular string literals, strips the trailing L from long integer literals, and so on. It also does a decent (though not perfect) job of converting calls to popular dictionary methods like .keys() and .iterkeys() into their Py3k equivalent.

JG: Is there a chance that there might be a rogue fork of the 2.x line, and would this bother you?

GVR: I don't expect any “rogue” forks to happen. The Python community tends to prefer consensus over conflict, at least in the long term.

Another, quite unrelated, but also hugely exciting, trend is the activity in the PyPy Project. As you may remember, PyPy started out as an attempt to write a portable Python interpreter in Python, made fast by the use of a Python-specific JIT. Most PyPy developers are in Europe, and with two years of EU (European Union) funding, the project has made tremendous progress. As agreed ahead of time, the EU funding ended after two years, but recently Google has started funding some specific PyPy activities, and I am excited that these will eventually make PyPy a viable alternative to CPython.

A Tale of Two Languages - Inform

Interactive text game language

Inform version 6 and version 7 are about as different as two languages can be, so your choice of which one to use for your next great game boils down to personal preference

XYZZY

Tech Tip - Check Your Computer's Temperature

You can check your computer's temperature using only standard tools, with the command:

$ cat /proc/acpi/thermal_zone/*/temperature

Depending on your hardware, you may have more than one sensor.

This method of checking your computer's temperature works only if ACPI thermal zones are supported on your computer. Most laptops and some desktop systems support them.

--Matthew Martin

Shell Scripting with a Distributed Twist: Using the Sleep Scripting Language

Learn a Perl-like language whose scripts move around your network.

No one who isn't lazy writes scripts. Scripts save valuable system administrator time. In this article, I introduce the Sleep scripting language, which is a Perl-inspired language built on the Java platform. Although Java is sometimes a bad word in our community, Sleep can help you, because a Java-based language has several benefits. Scripts work on different platforms, data has the same form everywhere, and tools to solve any problem are available through the Java class library or open-source extensions.

Getting Started

You can use Sleep right away if you already have Java installed. Make sure the Java you use is the Sun Java. Any version 1.4.2 or later will do. Sleep does not run with the GNU Java that some Linux distributions use by default:

$ java -version
java version "1.5.0_13"
Java(TM) 2 Runtime Environment, Standard Edition

Installation is easy. Visit the home page (see Resources), and download the sleep.jar file. This file has everything you need to execute Sleep scripts:

$ wget http://sleep.dashnine.org/download/sleep.jar

Sleep Basics

Sleep and Perl have a lot in common. Variables are scalars, and scalars store strings, numbers, functions or Java objects.

Resources

Resources

Examples from This Article: sleep.dashnine.org/ljexamples.tgz

The Sleep Home Page: sleep.dashnine.org

The Sleep 2.1 Manual: www.amazon.com/dp/143822723X or sleep.dashnine.org/documentation.html

Trilead SSH for Java: www.trilead.com/Products/Trilead_SSH_for_Java

Raphael Mudge is an entrepreneur and computer scientist based out of Syracuse, New York. He also wrote Sleep. You can find links to his other work at www.hick.org/~raffi.

The Falcon Programming Language in a Nutshell

Falcon is based on an open coding approach that seamlessly merges procedural, object-oriented, functional and message-oriented programming.

Tech Tip - Reset a Messed-Up Terminal

Reset command:

$ reset

If the carriage return may stop working:

$ <LF>reset<LF>

<LF> is the line-feed character, normally Ctrl-J

--Fred Richards

The Well-Tempered PHP Developer

for PHP Developers

Eclipse, with some plugins added to the mix, provides a full environment for PHP developers.

What Is Eclipse?

Eclipse is an integrated, extensible, development platform or environment. Originally, it was called VisualAge and was created for Java development (mostly written in Java itself), but it was renamed and then extended with additional plugins, so it can be used with many more programming languages and development tools—UML diagram creation and DB management are just two examples.

Although originally an IBM project, since 2003, Eclipse has been governed by the Eclipse Foundation, which adds several well-known technology companies as strategic members. The future of Eclipse doesn't depend on a single company. Eclipse is available under an open-source software license (not the GPL, but similar), and it eventually might use GPL version 3. The current version of Eclipse (3.4, also known as Ganymede) reportedly includes more than 18 million lines of code.

Thanks to its Java origins, Eclipse runs not only on Linux, but also on other operating systems, which is good for developers who target more than a single machine. Internationalization aspects are taken care of, and there are translations for several languages. Finally, the integration aspect of Eclipse is very important. You can do all your development (including not only code writing, but also testing, debugging, documentation writing, version control management and more) from within a single program, with a common interface and style.

Starting in 2006, there has been a Simultaneous Release each year, covering not only the base Eclipse package, but also many other Eclipse-related projects. This is provided as a convenience, and it certainly helps avoid compatibility problems. The packages are named after the moons of Jupiter. In 2006, it was called Callisto. The 2007 version was Europa. And, in June 2008, as I'm writing this article, Ganymede has just been released. In this article, we use both Europa (Figure 1) and Ganymede (Figure 2) with an emphasis on the former.

PHPEclipse

The first plugin you will need for serious PHP work is named, appropriately enough, PHPEclipse. PHPEclipse has been around since 2002, and although the current stable version (1.1.8) is from 2006, there is work currently on version 1.2, and there has been a steady flow of updates, so the project still is quite alive. Getting PHPEclipse is easy; simply use the Eclipse update method, and add a new remote site (see Resources).

PHPEclipse provides not only basic editing facilities, but it also adds syntax coloring and bracket matching for easier reading; code folding, so you can hide a block or function; parameter hints and tooltips—for example, if you don't remember the parameters for the stristr() function, a little pop-up will remind you; and syntax checks (if you make a syntax error, you will get a wavy red underline at the place of the error and pop-up help, Figure 3). PHPEclipse also offers debugging (with either XDebug or DBG) and version control (CSV or SVN)—more on this below.

When you edit a PHP source file, several shortcuts and functions can speed you along. Need to find the declaration for a certain function or variable? Right-click on any reference to it (or press F3), and you will be taken there. If you are unsure about a certain PHP function, pressing Shift-F2 produces a manual—although you usually can get by with hovering the mouse over the function name.

For more prolix coding, there are several formatting functions. You can re-indent any portion of code simply by selecting it, then right-clicking and choosing Format, or by pressing Ctrl-Shift-F. You can turn lines into comments (and vice versa) by right-clicking and choosing Source→Toggle Comment, and all selected lines will get // added in front. (From now on, I skip the shortcuts; unless you are a die-hard Ctrl and Shift fanatic, you probably will use the mouse menus all the time.) Adding or removing larger comments (for example, ones like /* ... */) also is simple with a right-click, then selecting Source→Add Block Comment or Remove Block Comment. A Refactor function can help you change a variable or function name globally; there's no excuse for shoddy names anymore.

Testing

There are several tools for testing, generically named xUnit—for example, JUnit is used for Java development, cppunit for C++, PHPUnit for PHP and so on. Although the specific details logically differ between tools, they actually are quite similar. For our purposes, we work with SimpleTest, which is a plugin that provides PHPUnit tests within Eclipse.

Debugging

There are basically two options: XDebug and DBG. XDebug is up to version 2.0.3 (from April 2008), and it's fully open source. On the other hand, DBG has two versions: a free one (at version 2.15.5) and a commercial one (at version 3.1.11). XDebug supports PHP 5.3, and DBG works only up to 5.2. For both programs though, the main sticking point is configuration, which is far too long to include here (see Resources). After you get the debugger to run, you will be able to debug your code easily; it's a pity that the installation procedure is such a chore.

Version Control (VC)

Version control (also known as revision control or source code control) is a must for large-scale, multi-developer projects, but it also offers significant advantages even for standalone work. The first time you thrash your code and manage to restore it or find what you changed thanks to your VC system, you will fully appreciate version control.

PHPEclipse can connect to SVN repositories by using either Subversive or Subclipse. Note that at the time of this writing, both plugins are assured to work only with Eclipse 3.3 (Europa) and not with 3.4 (Ganymede). After installing one of those plugins, you will be able to download a working copy or synchronize your work with the repository, simply by right-clicking on the project and selecting the Team option. The results of a synchronization operation will show in a separate console and usually will consist of files that you should download (others have modified them and you are not up to date), files you should upload (only you have modified them) and conflict files. Clicking on a conflicting file will bring up a file comparison window (Figure 6), highlighting the differences between your code and the already uploaded code. How to merge that code is up to you.

Resources

PHP Home Page: www.php.net

Eclipse Home Page: www.eclipse.org

Eclipse Download Page: www.eclipse.org/downloads

IBM's Description of Ganymede's New Features: www-128.ibm.com/developerworks/library/os-eclipse-ganymede

The IcedTea Project—a Free Implementation of Java: icedtea.classpath.org

Sun Developer Network Page: java.sun.com

PHPEclipse: www.phpeclipse.de

PHPEclipse Latest Version Update: update.phpeclipse.net/update/nightly

PHPEclipse Full Documentation: docs.schuetzengau-freising.de/modules/xdocman/index.php?doc=xo-002

The Last Craft (PHP Testing): www.lastcraft.com

SimpleTest: simpletest.sourceforge.net

SimpleTest for the Eclipse Update: simpletest.org/eclipse

PHP Debugging: www.ibm.com/developerworks/library/os-debug

XDebug: xdebug.org

Configuring XDebug for PHPEclipse: dev.phpeclipse.com/wiki/XDebug_and_PHPEclipse

DBG: dd.cron.ru/dbg

DBG Installation Guide: dd.cron.ru/dbg/installation.php

PHPEclipse DGB Configuration: docs.schuetzengau-freising.de/modules/xdocman/manual.php?doc=xo-002&id=sec.install_dbg&file=ch01s05.html

The Subversive Plugin for Using Subversion: www.eclipse.org/subversive

Subclipse, an Alternative for Accessing SVN Repositories: subclipse.tigris.org

Federico Kereki is an Uruguayan Systems Engineer, with more than 20 years' experience teaching at universities, doing development and consulting work, and writing articles and course material. He has been using Linux for many years now, having installed it at several different companies. He is particularly interested in the better security and performance of Linux boxes.

Enlightenment—the Next Generation of Linux Desktops

The soon-to-be-released version of Enlightenment, E17, offers a lightweight, yet stunning, alternative to KDE and GNOME.

Do you remember the first time you saw the phenomenally successful “Get a Mac” ad campaign? The American ads feature actor Justin Long as the friendly, calm and casual Mac, paired with funny-man John Hodgman as the uptight, insecure and nerdy PC. And, the ads always begin the same way: “Hi...I'm a Mac, and I'm a PC.” The obvious intent of each personification is to show that the Mac resembles a more youthful Steve Jobs, and the PC closely resembles Bill Gates. It's brilliant marketing. The gist of the ads is this: PCs are prone to malware of all types and are difficult to use, and the Mac is not only easy to use, but it's also safe and secure. For those who switch to a Mac, all their problems will disappear. The target audience for this campaign is not the avid PC user but rather those who use a PC because they are unaware of other options. And, this message has been extremely effective, with Mac sales increasing a whopping 12% at the end of fiscal year 2006—that's a total of 1.3 million new Mac users.

So, why is the “Get a Mac” campaign so successful? Because the ads utilize a technique known as framing, where the viewer's perception is manipulated through selective information. In this case, the ads support a framed dualism where the viewer's presented choices are only PC or Mac. No other choices (although obviously they exist) are mentioned. This leads the viewer to think the Mac is better than the PC for a multitude of reasons, each highlighted by the various ads. And, who wouldn't want to be more like the hip Justin Long?

Lost in the smokescreen of the desktop wars are the lesser-known desktops and window managers of which the lightweight Xfce desktop and the Enlightenment window manager are a part. This article focuses on Enlightenment, primarily the new and improved E17 (formerly known as DR17, because it's a developer release still in beta). Created in 1997, Enlightenment, hereafter referred to as E, originally was based on the FVWM window manager. Since then, it has forked out on its own and no longer shares borrowed code from FVWM or any other window manager or desktop. This lays precedent to the claim of E's developers that E17 is at the forefront of the next generation of desktops. However, the word desktop conjures up thoughts of KDE and GNOME, but that is not what is meant by “next generation”. Rather, E is a desktop shell.

E is possible because of the exclusive EFL (Enlightenment Foundation Libraries) written on behalf of E17. Parts of EFL are stable—like the newly updated Eet, a data encoding, decoding and storage library, which has been granted a 1.0 status. However, most of the coding is not yet complete, which places E17 in beta, rendering the system not completely stable as a desktop. Still, many users are choosing E17, thanks to its amazing ability to resurrect older PCs and bring systems with as little as 100MHz CPUs and 64MB of RAM to life again. Plus, E17 provides much-needed eye candy, with dazzling 2-D effects, to these older PCs—effects that would use a large amount of system resources through Compiz Fusion. No special 3-D graphics cards are needed for these effects on E. It's all in the EFL code.

EOF - Why We Need Hackers to Fix Health Care

Google health? HealthVault?

Among the many doctors I met in the hospital, one stood out, because he alone addressed the problems of bad data and bad communications. He said that the whole medical system is corrupted by collusion between equipment makers, software suppliers and institutional customers. The result is many closed systems, all lousy at communicating with each other. He said we need open systems, with data built around patients rather than locked inside closed silos. He liked Google Health, because at least it was trying to solve the problem from the patient's side, by making the patient the point of integration for health-care data from many different sources. (Microsoft also seems to be doing something similar with HealthVault.)