Axioms
I tend to come across these little Axioms that make me smile when reflecting upon work, and I generally forgett all about them, as such I’ll post some up…
Axiom I: If you have not tested it, assume it is broken.
Axiom II: If someone changes it, they probably broke it.
Axiom III: Sometimes when it is not changed, it breaks too.
Axiom IV: What is broken on the test machine often works fine on the dev machine.
Axiom V:There is always another bug that a user can find.
And there is of course the first theorem of test, which is largely based on applying on the developer’s doubt of Axioms 2, 3, and 5 created by the circumstances of Axiom 4:
THEOREM I: Developers will often not believe there is a bug until it is proven to them, sometimes with extreme prejudice.
And of course the corollary to Axiom V:
There are at least as many bugs left to be found as there are users who haven’t yet run your code.
Thanks to Sara for pointing them out ![]()
Axioms of Web architecture
Simplicity, "Keep it simple, stupid!"
Keep It Simple Stupid is the most often forgotten principle in system design. The best systems are those that can perform the tasks with the least hardware, software and/or personnel resources. The more complicated and “state of the art” the system becomes, the greater the potential for waste, training excesses, errors, omissions and support. You can change a light bulb with one person holding the bulb and another turning the lamp, but isn’t it easier to just use two hands?
Modular Design
When you design a system, or a language, then if the features can be broken into relatively loosely bound groups of relatively closely bound features, then that division is a good thing to be made a part of the design. This is just good engineering. It means that when you want to change the system, you can with luck in the future change only one part, which will only require you to understand (and test) that part. This will allow other people to independently change other parts at the same time. This is just classic good software design and books have been written about it. The corollary, the TOII is less frequently met.
Tolerance
"Be liberal in what you require but conservative in what you do"
This is the expression of a principle which applies pretty well in life, (it is a typical UU tenet), and is commonly employed in design across the Internet.
Decentralization
This is a principle of the design of distributed systems, including societies. It points out that any single common point which is involved in any operation trends to limit the way the system scales, and produce a single point of complete failure.
Principle of Least Power
In choosing computer languages, there are classes of program which range from the plainly descriptive (such as Dublin Core metadata, or the content of most databases, or HTML) though logical languages of limited power (such as access control lists, or conneg content negotiation) which include limited propositional logic, though declarative languages which verge on the Turing Complete (PDF) through those which are in fact Turing Complete though one is led not to use them that way (XSLT, SQL) to those which are unashamedly procedural (Java, C).
The choice of language is a common design choice. The low power end of the scale is typically simpler to design, implement and use, but the high power end of the scale has all the attraction of being an open-ended hook into which anything can be placed: a door to uses bounded only by the imagination of the programmer.
If it’s Not Broken Don’t Fix it.
When upgrading hardware, software, systems etc., the motivation should be the substantial improvement of productivity and/or quality of output. Upgrading or changing systems for the sake of change or because it’s bigger or better, presents substantial risks to production and often costs more than the benefit.
The 90/10 Theory
When designing manual and automated systems, you get 90% of the benefits out of 10% of the effort. To get the extra 10% benefit, it takes 90% more effort. In that last 10% benefit (often bells and whistles) rests all your profit, time, failure and complexity.
No TagsRTFM - Read The Fucking Manual
Established by technicians long ago and now used heavily on the net, this axiom is the least followed by most computer users . While we have grown accustomed to poorly written documentation, or no documentation, usually you will find the answer to most situations in the manual.
Popularity: 2% [?]
IIS5 Multiple Websites
I was playing around trying to bind Multiple Websites in IIS5.1 on Windows XP, however after trying to find information on why trying to start up both services resulted in the following error “The request is not supported”, despite being bound to different IP addresses. I finally came across Kristofer Gäfvert site, which states this is not possible
and the only solution appears to upgrade to windows 2003 server, after trawling through lots of documentation. Regardless, when developing you tend to really only work on one project at a time so you can start and stop the projects Website as and when needed.
MetaBase Explorer

Bind Multiple Websites in IIS5
Popularity: 2% [?]
Flash Stuff
i18n & Flash
system.useCodepage = true;
Unicode or the traditional code page of the operating system running the Player to interpret external text files. The default value of system.useCodepage is false .
Text that you include or load as an external file (using the #include command, the loadVariables or getURL actions, or the LoadVars or XML objects) must be encoded as Unicode when you save the text file, in order for the Flash Player 6 to recognize it as Unicode. To encode external files as Unicode, save the files in an application that supports Unicode, such as Notepad on Windows 2000.
You should save the external file in UTF-8, UTF-16BE, or UTF-16LE format, using an application that supports the format. If you are using UTF-16BE or UTF-16LE format, the file must begin with a byte order mark (BOM) to identify the encoding format to the Macromedia Flash Player 6.
Reverse Proxies
Pass the source of the file into flash…
flash.swf?DataSource=./xyz
if (_root.datasource == null || _root.datasource == "") {
_root.datasource = "IndexFlashData.php";
}
//
this.stop();
cgi = _root.datasource;
this.loadVariables(cgi);
this.onData = function() {
this.play();
};
Flash and Action Replays
You can monitor the http request of a flash swf that uses loadvars; retrieve and manipulate the GET/POST request. In an instances of a small games, which revolves around highscores, it is relatively easy to manipulate the http request and inject your own scores. As such encrypting and decrypting the data that is transmitted to the server prevents, a very simple hack.
Monitor Http Headers with (LiveHttpHeaders)

Live Http Replay

Popularity: 2% [?]
Leaving Planetnewmedia
Well i’m officially leaving planetnewmedia, it’s been a good experience, working with some of the top brands, such as MTV, Hasbro, Dorling Kindersley (DK) etc. It will be disappointing to leave however, I feel its time to move on, and have accepted a position at WAI.
No TagsPopularity: 2% [?]

