Tim’s Weblog Tim's Weblog
Tim Strehle’s links and thoughts on Web apps, managing software development and Digital Asset Management, since 2002.


"XStandard is the leading standards-compliant plug-in WYSIWYG editor for desktop applications and browser-based content management systems (IE/Mozilla/Firefox/Opera/Safari/Netscape).

The editor generates clean XHTML Strict or 1.1, uses CSS for formatting, and ensures the clean separation of content from presentation. Markup generated by XStandard meets the most demanding accessibility requirements. The editor's cool features include drag & drop file upload, spell checking and an image library that integrates tightly with your CMS.

XStandard Lite is free for commercial use."

Or maybe one can add XStandard-like custom tags and attributes to TinyMCE?

Thu, 31 Aug 2006 22:08:14 +0000

Linux will get buried

Tom Yager at InfoWorld - Linux will get buried:

"Imagine that your server room has a bank of USB ports, and that every enterprise application you want to run exists, pre-installed on a stripped, standardized Linux, and in a freeze-dried state, on a flash drive. Plug in a drive, and within a few milliseconds you have a self-contained instance of an enterprise application. If you need more database instances, put in a blank flash drive and tell the existing database instance to replicate itself."

Wed, 30 Aug 2006 10:59:14 +0000

NOT Getting Started with PHP 5 SOAP

Not having played with PHP 5's native SOAP extension yet, I did expect it to work smoothly with the most simple application I could think of - querying Google via its SOAP Search API. Well...

I first compiled the latest PHP 5.1.6 with --enable-soap and downloaded the Google SOAP Search API developer's kit which contains their WSDL file, GoogleSearch.wsdl.

Running this example PHP code...

<?php $client = new SoapClient('GoogleSearch.wsdl'); try { $result = $client->doGoogleSearch( '[Secret Google key]', 'Tim Strehle', 0, 3 ); foreach ($result->resultElements as $resultElement) { print $resultElement->URL; } } catch (SOAPFault $f) { echo $f->faultstring . "\n"; } ?>

... produced a lovely error message:

tim@vm:/tmp>php test.php No Deserializer found to deserialize a ':filter' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'.

Here's the actual SOAP request PHP was sending:

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:GoogleSearch" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:doGoogleSearch> <key xsi:type="xsd:string">[Secret Google key]</key> <q xsi:type="xsd:string">Tim Strehle</q> <start xsi:type="xsd:int">0</start> <maxResults xsi:type="xsd:int">3</maxResults> <filter xsi:nil="true"/> <restrict xsi:nil="true"/> <safeSearch xsi:nil="true"/> <lr xsi:nil="true"/> <ie xsi:nil="true"/> <oe xsi:nil="true"/> </ns1:doGoogleSearch> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

The error message did come from Google:

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Client</faultcode> <faultstring>No Deserializer found to deserialize a ':filter' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'.</faultstring> <faultactor>/search/beta2</faultactor> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

Obviously Google doesn't like the xsi:nil stuff created by PHP. Modifying those empty tags manually in an XML file...

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:GoogleSearch" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:doGoogleSearch> <key xsi:type="xsd:string">[Secret Google key]</key> <q xsi:type="xsd:string">Tim Strehle</q> <start xsi:type="xsd:int">0</start> <maxResults xsi:type="xsd:int">3</maxResults> <filter xsi:type="xsd:boolean">false</filter> <restrict xsi:type="xsd:string"></restrict> <safeSearch xsi:type="xsd:boolean">false</safeSearch> <lr xsi:type="xsd:string"></lr> <ie xsi:type="xsd:string"></ie> <oe xsi:type="xsd:string"></oe> </ns1:doGoogleSearch> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

... and sending the SOAP request using curl finally produced correct results:

tim@vm:/tmp>cat test.curl header = "SOAPAction: urn:GoogleSearchAction" header = "Content-Type: text/xml" data = "@/tmp/test.xml" url = "http://api.google.com/search/beta2" tim@vm:/tmp>curl -K test.curl | xmllint --format - <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:doGoogleSearchResponse xmlns:ns1="urn:GoogleSearch" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="ns1:GoogleSearchResult"> <directoryCategories xmlns:ns2="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:Array" ns2:arrayType="ns1:DirectoryCategory[0]"> </directoryCategories> <documentFiltering xsi:type="xsd:boolean">false</documentFiltering> <endIndex xsi:type="xsd:int">3</endIndex> <estimateIsExact xsi:type="xsd:boolean">false</estimateIsExact> <estimatedTotalResultsCount xsi:type="xsd:int">184000</estimatedTotalResultsCount> <resultElements xmlns:ns3="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:Array" ns3:arrayType="ns1:ResultElement[3]"> <item xsi:type="ns1:ResultElement"> <URL xsi:type="xsd:string">http://tim.digicol.de/</URL> <cachedSize xsi:type="xsd:string">4k</cachedSize> <directoryCategory xsi:type="ns1:DirectoryCategory"> <fullViewableName xsi:type="xsd:string"/> <specialEncoding xsi:type="xsd:string"/> </directoryCategory> <directoryTitle xsi:type="xsd:string"/> <hostName xsi:type="xsd:string"/> <relatedInformationPresent xsi:type="xsd:boolean">true</relatedInformationPresent> <snippet xsi:type="xsd:string">&lt;b&gt;Tim&lt;/b&gt; at his desk &lt;b&gt;Tim Strehle&lt;/b&gt; @ Digital Collections &lt;b&gt;...&lt;/b&gt; &lt;b&gt;Tim&amp;#39;s&lt;/b&gt; Weblog &amp;middot; Ceterum censeo...&lt;br&gt; www.liederdatenbank.de, my personal project for building a database &lt;b&gt;...&lt;/b&gt;</snippet> <summary xsi:type="xsd:string"/> <title xsi:type="xsd:string">&lt;b&gt;Tim Strehle&lt;/b&gt; @ Digital Collections</title> </item> <item xsi:type="ns1:ResultElement"> <URL xsi:type="xsd:string">http://tim.digicol.de/weblog/</URL> <cachedSize xsi:type="xsd:string">33k</cachedSize> <directoryCategory xsi:type="ns1:DirectoryCategory"> <fullViewableName xsi:type="xsd:string"/> <specialEncoding xsi:type="xsd:string"/> </directoryCategory> <directoryTitle xsi:type="xsd:string"/> <hostName xsi:type="xsd:string"/> <relatedInformationPresent xsi:type="xsd:boolean">true</relatedInformationPresent> <snippet xsi:type="xsd:string">My linkblog: What I (&lt;b&gt;Tim Strehle&lt;/b&gt;) read on the web, on PHP. XML. Information Science&lt;br&gt; and Information Architecture... 2006-08-23 &lt;b&gt;...&lt;/b&gt;</snippet> <summary xsi:type="xsd:string"/> <title xsi:type="xsd:string">&lt;b&gt;Tim&amp;#39;s&lt;/b&gt; Weblog » Latest posts</title> </item> <item xsi:type="ns1:ResultElement"> <URL xsi:type="xsd:string">http://freshmeat.net/~tistre/</URL> <cachedSize xsi:type="xsd:string">12k</cachedSize> <directoryCategory xsi:type="ns1:DirectoryCategory"> <fullViewableName xsi:type="xsd:string"/> <specialEncoding xsi:type="xsd:string"/> </directoryCategory> <directoryTitle xsi:type="xsd:string"/> <hostName xsi:type="xsd:string"/> <relatedInformationPresent xsi:type="xsd:boolean">true</relatedInformationPresent> <snippet xsi:type="xsd:string">User info page for &lt;b&gt;Tim Strehle&lt;/b&gt;. Name: &lt;b&gt;Tim Strehle&lt;/b&gt;. User ID: #96744. Email: &lt;b&gt;tim&lt;/b&gt;&lt;br&gt; __at__ &lt;b&gt;strehle&lt;/b&gt; __dot__ &lt;b&gt;...&lt;/b&gt; &lt;b&gt;Tim Strehle&lt;/b&gt; didn&amp;#39;t post any article comments yet. &lt;b&gt;...&lt;/b&gt;</snippet> <summary xsi:type="xsd:string"/> <title xsi:type="xsd:string">freshmeat.net: User information</title> </item> </resultElements> <searchComments xsi:type="xsd:string"/> <searchQuery xsi:type="xsd:string">Tim Strehle</searchQuery> <searchTime xsi:type="xsd:double">0.020699</searchTime> <searchTips xsi:type="xsd:string"/> <startIndex xsi:type="xsd:int">1</startIndex> </return> </ns1:doGoogleSearchResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

I don't know enough SOAP so I cannot say whether this is Google's or PHP's fault, but it's definitely not the "just works" experience I'd expect from both of them. If SOAP's complexity itself is to blame, I may have been right to lean towards REST (or POX over HTTP) without ever having used much SOAP...

Update: "Optional fields cause problems", says Dare Obasanjo - ETech 2005 Trip Report: Building a New Web Service at Google... It turns out that filling in all optional parameters in the SOAP call makes the PHP script work:

<?php $client = new SoapClient('GoogleSearch.wsdl'); try { $result = $client->doGoogleSearch( '[Secret Google key]', 'Tim Strehle', 0, 3, false, '', false, '', '', '' ); ... ?>
Mon, 28 Aug 2006 22:24:28 +0000

Personality Traits of the Best Software Developers

Rob Walling - Personality Traits of the Best Software Developers:

"No one anticipates a catastrophic system failure by looking on the bright side. The best developers I know are experts at finding points of failure. You'll often hear them quipping "What could possibly go wrong?" after someone makes a suggestion to handle a critical data transfer via nightly FTP over a dial-up connection. The best developers anticipate headaches that other developers never think of, and do everything within their power to avoid them."

Mon, 28 Aug 2006 08:34:42 +0000

Amazon EC2

"Just as Amazon Simple Storage Service (Amazon S3) enables storage in the cloud, Amazon EC2 enables "compute" in the cloud. Amazon EC2's simple web service interface allows you to obtain and configure capacity with minimal friction.

[...] Amazon EC2 presents a true virtual computing environment, allowing you to use web service interfaces to requisition machines for use, load them with your custom application environment, manage your network's access permissions, and run your image using as many or few systems as you desire.

To use Amazon EC2, you simply:

* Create an Amazon Machine Image (AMI) containing your applications, libraries, data and associated configuration settings. Or use our pre-configured, templated images to get up and running immediately."

Sun, 27 Aug 2006 22:46:11 +0000

Make the download of large files with PHP (and lighty) very easy

Björn Schotte - Make the download of large files with PHP (and lighty) very easy:

"Some days ago I stumbled upon an old entry of Jan in lighty's life, called "X-Sendfile". There he explains how to speed up the delivery of (large) files with lighttpd instead of PHP (YES, lighttpd is very fast - for one customer we created an ImageServer with pure lighty that replaced a 4-server-cluster with Apache and now has 1 server with lighttpd (which is boring around at low load). The box makes 180 Mio. requests per month)."

Wed, 23 Aug 2006 21:23:31 +0000

Del.icio.us is a database

Jon Udell - Del.icio.us is a database:

"Although it's intuitively obvious to me, I suspect that most people don't yet appreciate how easily, and powerfully, tagging systems can work as databases for personal (yet shareable) information management.

Del.icio.us isn't simply backed by a database, it can function as a database to which you add (a lot of) queryable columns.

[...] It strikes me that there's a sweet spot somewhere between this shoestring approach and the likes of Dabble DB, an application that offers powerful web-based data management. Consider how dBase and later Access were overkill for most people's recipe lists and address books, and how 1-2-3 and Excel wound up meeting the need instead. Tag systems might turn out to be the spreadsheets of modern information management."

Tue, 22 Aug 2006 22:14:57 +0000

Round 2: Dial Tone

Tim O'Reilly - Round 2: Dial Tone:

"[I]n the 1940's there was concern that the telephone system was growing so fast that there wouldn't be enough operators unless AT&T hired every person in America. AT&T solved the problem by creating automated switching systems that, in effect, did turn every person in the world into an operator--without hiring them. The principle of dial tone is to create a situation where users can do something for themselves that once required the intervention of an operator.

[...] Once you frame the problem in this way, you understand that one of the challenges for IT departments and companies used to the IT mindset is to get the operators out of the way, and to build new processes that let users do the work for themselves. You also can ask yourself, where is dial tone going next?"

Tue, 22 Aug 2006 22:08:31 +0000

WP-APP: Atom Publisher Protocol for WordPress

Elias Torres - WP-APP: Atom Publisher Protocol for WordPress:

"Simply drop app.php into your root wordpress install directory and have some Atom/APP fun.

If you don’t have wordpress installed, I’ve setup a demo server for you to try it out. First, register to get your own account, since you won’t be able to post/put/delete entries without a valid username and password. The rest is all curl geekiness for those who care."

Tue, 22 Aug 2006 21:35:46 +0000

Library Apps for Macintosh

Joel Spolsky - Library Apps for Macintosh:

"I really want to be able to shelve our books according to their Library of Congress card catalog number. When you do this, books on similar topics tend to wind up near each other on the shelves. This is a very useful feature if you don't know the exact title you're looking for, or if you just want to, for example, browse a bunch of books about Ruby to find one you like.

Somebody has gone to a lot of trouble choosing a card catalog number that put similar books next to each other, and I've always found that open-shelved libraries with books in order according to some reasonable card catalog system are far superior to libraries with books in order according to acquisition date, size, color, IQ, or IDENTITY column."

Tue, 22 Aug 2006 21:14:40 +0000

SiteScape Forum ZX

"SiteScape Forum ZX lets you choose from a comprehensive range of built-in features like shared calendars, instant messaging, chat, threaded discussions, and team workspaces. Plus ready-to-use workflow automation for everyday tasks, extensive portal support, and much more."

Thu, 17 Aug 2006 21:42:23 +0000

Semantic MediaWiki

"Semantic MediaWiki introduces some additional markup into the wiki-text which allows users to add "semantic annotations" to the wiki. While this first appears to make things more complex, it can also greatly simplify the structure of the wiki, help users to find more information in less time, and improve the overall quality and consistency of the wiki. To illustrate this, we provide some examples from the daily business of Wikipedia:

[...] Inflationary use of categories. The need for better structuring becomes apparent by the enormous use of categories in Wikipedia. While this is generally helpful, it has also lead to a number of categories that would be mere query results in SMW. For some examples consider the categories Rivers in Buckinghamshire, Asteroids named for people, and 1620s deaths, all of which could easily be replaced by simple queries that use just a handful of annotations. Indeed, in this example Category:Rivers, Relation:located in, Category:Asteroids, Category:People, Relation:named after, and Attribute:date of death would suffice to create thousands of similar listings on the fly, and to remove hundreds of Wikipedia categories."

Thu, 17 Aug 2006 14:47:53 +0000

Novell AppArmor

"Looking to beef up your application security? Take a look at Novell AppArmor, a Linux application security framework included with SUSE Linux Enterprise 10. AppArmor gives you network application security via mandatory access control for programs, protecting against the exploitation of software flaws and compromised systems. AppArmor includes everything you need to provide effective containment for programs (including those that run as root) to thwart attempted exploits and even zero-day attacks."

See also Chris Brown at Linux.com - Protect your applications with AppArmor.

Wed, 16 Aug 2006 20:30:24 +0000

Creating a virtual card catalog

John Blyberg - Creating a virtual card catalog:

"Ever get nostalgic for the old card catalog?

I was lurking on #code4lib and someone dropped a link to some fabulous old catalog cards. That reminded me of an idea Eli Neiburger had to make a flash-based card catalog that you could flip through. Never one to let a good idea sit, I decided to work on a variation that would allow visitors to AADL’s catalog a chance to get their hands on a “virtual card catalog”.

[...] Using PHP’s great GD front-end, I threw together an interface to view the cards and a little database that will allow users to add some marginalia. Of course, you can view the cards with or without the comments."

See also Edward Vielmetti: Sample card catalog output using XSLT and CSS from the AADL catalog, and my old CSS browsable cardfile...

Wed, 16 Aug 2006 13:19:14 +0000

Traction TeamPage

Traction® TeamPage™ and Communicator™ Features ("Enterprise Blog Software"):

"You can create any number of category labels in each project. The labels from one project may be applied to content in any other project. Labels may be applied at the article level, or on individual paragraphs to call out key information buried in text.

Traction keeps a record of all label changes so, for example, you can track when a paragraph labeled "To Do" label was relabeled Done. This facility also lets you evolve a taxonomy over time, changing labels as needed; Traction lets you rewind the labels to reflect any point or period in time.

[...] Traction is a true journaling technology, with best of class audit trail capability. The audit trail includes a full trail of all posts, edits, comments, label changes, emails sent out, and other activities. It's possible to look at Traction from any time period or perspective. Attachments are maintained in the WebDAV document store and may be versioned selectively or you can set mandatory versioning."

Wed, 16 Aug 2006 10:57:59 +0000

Canonical Intranet Homepage

Jakob Nielsen - Canonical Intranet Homepage:

"Intranet designers have glorious career prospects, even as surface design becomes more standardized and more features are supplied by middleware rather than hand-coded.

Currently, most intranets have poor usability because the project is too big for the available personnel. Companies should empower intranet teams to focus on important usability contributors, while relegating the rest to standard software. If you're slaving away on trivial features, it's a bad use of time. Making a more strategic contribution using more powerful tools offers a much better career."

Tue, 15 Aug 2006 08:35:17 +0000

How Amazon/AMT can change the internet economy

BPAndrew - How Amazon/AMT can change the internet economy:

"This post is an “out there” idea based on top of Amazon Mechanical Turk (don’t bother reading this is until you know how AMT works) which in some regards is already an “out there” idea. I have no doubt that following system can change the internet economy from its existing state as an ad/referral model to a collective pool of people supporting each other.

[...] You’ve heard of SHAREWARE, what about the concept of WORKWARE (people perform a few micro tasks in your name to pay for the right to use it). I see this concept changing the business model of anything from file download sites to the independent game industry / open source community."

Mon, 14 Aug 2006 20:14:27 +0000

Apple Leopard Server Sneak Peek: Wiki Server

"Leopard Server includes a Wiki Server to make it easy for teams to create and distribute information through their own shared Intranet website. For the first time, all members of a workgroup can easily create or edit content right from their browser. With a few clicks, or by dragging and dropping, they can upload files and images, track changes, assign keywords, hyper-link pages, view and contribute to shared calendars and blogs, and search for content on the group Intranet."

Sun, 13 Aug 2006 21:32:16 +0000

Enhydra JaWE

"Enhydra JaWE (Java Workflow Editor) is the first open source graphical Java workflow process editor fully according to WfMC specifications supporting XPDL as its native file format."

Fri, 11 Aug 2006 14:44:55 +0000

Solr: Indexing XML with Lucene and REST

Bertrand Delacretaz at XML.com - Solr: Indexing XML with Lucene and REST:

"Solr (pronounced "solar") builds on the well-known Lucene search engine library to create an enterprise search server with a simple HTTP/XML interface. Using Solr, large collections of documents can be indexed based on strongly typed field definitions, thereby taking advantage of Lucene's powerful full-text search features. This article describes Solr's indexing interface and its main features, and shows how field-type definitions are used for precise content analysis."

Thu, 10 Aug 2006 09:22:14 +0000

Practical Testing PHP Applications with Selenium

Sebastian Schürmann - Practical Testing PHP Applications with Selenium:

"All in all Selenium provides a simple way to execute Acceptance Tests on Web Applications and as soon as you have a remarkable test suite, covering the basic steps of your Application you will find out that it eases developer life and daily usage lowers the number of sideffects (bugs) that pop up because of changes to the codebase. Its a real timesaver, if you know how to use it, so get some practice."

Wed, 09 Aug 2006 10:10:26 +0000

Scripters UTF-8 Survival Guide (slides)

Harry Fuecks has nice slides at SitePoint: Scripters UTF-8 Survival Guide (PDF).

Wed, 09 Aug 2006 08:06:37 +0000


Sam Ruby - WOA vs ROA:

"There is a term that you won’t see in the body of Dion’s post. Or in the body of Alex’s. Or in the Wikipedia article on SOA.

That term is “hypertext link”. Or even the term “link”.

[...] The link is the glue that holds the web together. It is what differentiates the web from protocols like ftp that merely serve as access methods for documents.

The very notion of a link has become practically inexpressible and virtually unthinkable in the vernacular of SOA."

Tue, 08 Aug 2006 15:43:06 +0000

Apple Mac OS X Leopard Sneak Peek: Time Machine

"With Time Machine, you can restore your whole system from any past backups and peruse the past with ease. Can’t find a file you want? Enter Time Machine’s time-based browser to see a snapshot of how your entire system looked on any given day — file by file. When you find the file you want, just select it and restore it. Time Machine brings it into the present. You can do the same with a group of files, whole folders, even your entire system. With a single click."

Tue, 08 Aug 2006 10:39:49 +0000

How to Present to Investors

Paul Graham - How to Present to Investors:

"The biggest fear of investors looking at early stage startups is that you've built something based on your own a priori theories of what the world needs, but that no one will actually want. So it's good if you can talk about problems specific users have and how you solve them.

Greg Mcadoo said one thing Sequoia looks for is the "proxy for demand." What are people doing now, using inadequate tools, that shows they need what you're making?"

Mon, 07 Aug 2006 20:24:49 +0000

Google Internals Talk

Lyz Krumbach - Google Internals Talk:

"This Google Internals talk takes you through the basics of how Google uses their approximately 450,000 servers to run everything from Google search to GMail worldwide. The slides are based on information gathered from reliable Google sources, including talks given by Google staff, and gives you a very basic framework for understanding what is “under the hood” over at Google."

Sun, 06 Aug 2006 21:33:18 +0000

Feed Access Control Standard for RSS and ATOM

Bloglines - Feed Access Control Standard for RSS and ATOM:

"We are proposing (and have implemented) an RSS and ATOM extension that allows publishers to indicate the distribution restrictions of a feed. Setting the access restriction to 'deny' will indicate the feed should not be re-distributed. In Bloglines, we'll use this to prevent the display of the feed information or posts in search results or any other public venue. If other readers and aggregators use the information in the same way, and publishers of feeds, including services that let users create feeds, implement this standard, we could make significant progress toward making feeds truly safe for non-public information. We think that's a pretty cool idea.

For technical details on the RSS and ATOM extension, refer to this document:


Wed, 02 Aug 2006 12:38:02 +0000

Project Management by Dummies

Curtis Poe - Project Management by Dummies:

"In economics, search costs are the costs of acquiring information. Whether you pay for it, research it in books or on the Web or just discover it for yourself, the more time you spend searching for information the less time you have to develop your product. How many times have you had a project blocked while you’re waiting for information?

[...] One fun trick you can use to verify the importance of lowering search costs is to have a developer sit down with someone who is actually going to use the product being developed. [...] I can’t tell you how many times I’ve heard of developers who’ve sat down with a customer and walked away being able to make a much better product. They went to the source of information and lowered their search costs."

Wed, 02 Aug 2006 11:15:12 +0000

Stiff asks, great programmers answer

Jarosław Rzeszótko - Stiff asks, great programmers answer:

"Steve Yegge: [...] You’ll never make it very far as a programmer in any field unless you can get your ideas across to people effectively. Programmers should read voraciously, practice writing, take writing courses, and even practice at public speaking."

Tue, 01 Aug 2006 20:23:16 +0000