seXml: a very dirty little dialect

I was viewing the source code of a website (as you do) and happened upon some of this guff:

A little more scanning showed me:

And I soon learned that the ".dwt" file extension indicates use of a "Dream Weaver Template". Probably a common practice, given the popularity of Dream Weaver.

Interesting, because the format used is identical to a dirty little sub-language I invented one dirty weekend, called 'seXml'.

(Read on, for the truth about seXml)

Ahh seXml!

I'd invented it, fallen in love with it and forgotten it, all in the space of a few hours, in about 2003.

The idea of seXml, (the 'special embeddable, eXtensible markup language') was that it would differ from XML in three chief ways.

Firstly, by default, elements would begin with '<!-- ' instead of '<' and end with ' --!>' instead of '>'.

Secondly, a document doesn't need to have a root element. If no root element is detected, then the body of the document would be embedded inside <!-- seXml --><!-- /seXml --> tags before further parsing.

Third, some very liberal rules allow you to embed a message anywhere in the document that defines different strings to use instead of '<!-- ' and ' --!>'. For example you might way elements to start with '/*** ' and end with ' ***/' so that you can turn a valid C++ document into a valid seXml document.

You can even en-Mesh a valid seXml document in and around a valid XML document. Hence, seXml can be a nice way of documenting XML.

The original idea for seXml was for content editing purposes (as seen in the dream weaver templates). But I soon saw that it could be used to en-mesh meaninful data inside practically any languages.

Because of its strong XML lineage, a seXml parser is really just a pre-parser for XML. You could write your own seXml parser in an afternoon, if only there was a complete spec written for it.

Okay this concludes a week of xml esoterica. An older idea on similar lines, was XPL, but the W3C failed to recognise that one too. Oh well.

 

What does XML look like on other planets?

spot the difference

Beats me. But I have seen what XML looks like in the alternative reality cubicle of my strange friend Gaksloope, fourteen minutes into the future.

Compare Gaksloope's XML side by side with some regular Earth XML.

How many differences can you detect? And what are they all about?

<?xml version=1.0 ?>
<rss/
   <channel/
      <title/Gaksloope/>
      <link/ht:\\org\gaksloope\www\blog\/>
      <description/Gaksloope's Thought Capture Device/>
      <copyright/Gaksloope Zeta-0/>
      <item/
         <title/Nancy Says 'Yes'/>
         <guid/ht:\\org\gaksloope\www\blog\nancy.aspx/>
         <pubDate zone=0 annum=W1/2006-02-05-02-27-36/>
         <description/
            <p/Nancy Reagan admits
            dealing crack to whitehouse staff./>
         /description>
         <category/News/>
      /item>     
   /channel>
/rss>
XML as used by Gaksloope
<?xml version="1.0" ?>
<rss>
   <channel>
      <title>Gaksloope</title>
      <link>http://www.gaksloope.org/blog/</link>
      <description>Gaksloope's Thought Capture Device</description>
      <copyright>Gaksloope Zeta-0</copyright>
      <item>
         <title>Nancy Says 'No'</title>
         <guid>http://www.gaksloope.org/blog/nancy.aspx</guid>
         <pubDate>2006-05-02T02:27:36+0:00</pubDate>
         <description>
            &lt;p&gt;Nancy Reagan denies
            dealing crack to whitehouse staff.&lt;/p&gt;
         </description>
         <category>News</category>
      </item>     
   </channel>
</rss>
How the same doc might look in XML 1.0





















 

Miscommunication Grows Faster than Communication

network of gossip

Something occurred to me on my bus ride home recently. As an organisation grows, the potential for miscommunication grows far more quickly than the potential for good communication.

There's a fairly well known (and debated) principle, referred to as 'the network effect' (or 'the communication explosion') which demonstrates how adding more people to a group causes the potential for communication to quickly become complex.

The 'network effect' is based on Metcalfe's law (which was originally concerned with ethernets, not social networks), and it's one of the priciples that underpins a much loved saying among programmers:

("Brooks' Law", Frederick P Brooks, 'Mythical Man Month')

The 'network effect' for social groups says that as a group grows, the potential for direct communication is in proportion to the member count, squared.

(Usually described as n*(n-1)/2. We divide by two, since each link is two way; we subtract one, since a node can't communicate with itself.)

Meanwhile, the potential for gossip, backstabbing, slander, scandal and rumourmongering grow in proportion to a factorial of the member count.

(Continues, with diagrams...)

He said, she said

Let's watch the growth in comminication and the explosion in miscommunication as a small group expands.

We'll start with a company that has two employees, Alfred and Betty. There is one avenue of communication and no avenues of miscommunication.

Now imagine a new guy, Charlie, joins. We now have three employees: Alfred, Betty and Charlie (A, B and C).

There are three lines of direct communication: Alfred to Betty, Betty to Charlie, and Charlie to Alfred.

But, suddenly, we have six potential lines of miscommunication: Alfred passes on what Betty told Charlie about him. Betty passes on what Charlie told Alfred about her.... and so on.

When Dave joins the company, we take on three more potential lines of communication (Dave can talk to any of the existing people). But the potential avenues for miscommunication has, in short time, reached a staggering figure of twenty-four! (i think..)

After I left uni, I hit the reset button on the part of my brain that learnt about permutations, combinations and so on. But i'm pretty sure there's a factorial at work here. I'd like to see the actual equation, maybe have it printed on a t-shirt.

Surviving the Organisation

A number of organisational effects exist in any organisation, some explicitly, some implicitly. These structures include things like sub-groups, dominance and subservience, ranking (chain of command), class-systems (or even Castes), cliques, competitive teams and so on. I think the reason why these effects develop is not that it protects the group from "communication explosion."

A far stronger effect is "The Gossip Explosion" which, if left unchecked, would destroy any significantly large group.

Anyway, here's a cute summary of the miscommunication effect:


Related/Referenced Stuff

 

The Face of Ruby on Rails

"Ruby On Rails" may be the single greatest advance in popular, usable, programming for the next one thousand years.

Pity you have to look like a pouting artsy wanker to contribute.

marceldavid
floriannicholas

Images snaffled from here. Sorry about the profanity. That one just slipped out.

 

Quick Prototyping Technique

office 12 ribbon

Finally a good use for PowerPoint!

From: The Feature Bob Invented at Jensen Harris's Office User Interface blog.

(The site beyond bullets has a few more tips on good use of powerpoint)

 

Launch the Code Editor on startup

put the ide in your startup folder

Productivity tip (for Programmers) -- Put the IDE in your startup menu.

Otherwise you can mess around half the day, checking and responding to email or surfing the net before you even 'fire up the damn editor'.

I used to eschew use of the startup folder, aiming for a quicker startup. My new philosophy is that it's worth slowing down the computer if it speeds up the human. I put the shortcut there about six months ago and still consider it a good thing that helps keep the code flowing.

 

Printing 'Console' Screenshots? Save your Toner/Ink

a black console image

Need to print a console image, but don't want to waste a lot of toner/ink?

Use the 'Invert Colors' option, under the 'Image' menu in MSPaint.exe

colour inversion option in MSPaint

... and turn your mostly black image to mostly white:

Toner-Angry!Toner-Friendly!

This is particularly useful when the images are numerous and embedded in a document.

[Sometimes you can change the actual console's colours... but by the time the images are in a document, it's often too late.]

 

Marked up: Finalists for the 16th Annual Jolt Product Excellence & Productivity Awards

The finalists for this year's Jolt awards have been announced here, but there was no markup, just plain text -- so i used the (as yet, unreleased) World's Simplest Code Generator (version 3) to link each one of them to a google search... Now you can dig a little deeper

[Read on for the list itself...]

Books: General

  1. Ambient Findability: What We Find Changes Who We Become by Peter Morville (O'Reilly)
  2. Best Software Writing by Joel Spolsky (Apress)
  3. Innovation Happens Elsewhere: Open Source as Business Strategy by Ron Goldman and Richard P. Gabriel (Morgan Kaufmann)
  4. Prefactoring by Ken Pugh (O'Reilly)
  5. Producing Open Source Software: How to Run a Successful Free Software Project by Karl Fogel (O'Reilly)
  6. The Art of Project Management by Scott Berkun (O'Reilly)
  7. The World Is Flat: A Brief History of the Twenty-First Century by Thomas L. Friedman (Farrar, Straus & Giroux)

Books: Technical

  1. Agile Web Development with Rails by Dave Thomas et al. (Pragmatic Bookshelf)
  2. Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries by Krzysztof Cwalina and Brad Abrams (Addison-Wesley)
  3. Practical Common Lisp by Peter Seibel (Apress)
  4. Service-Oriented Architecture: Concepts Technology and Design by Thomas Erl (Prentice Hall)
  5. Why Programs Fail, First Edition: A Guide to Systematic Debugging by Andreas Zeller (Morgan Kaufmann)
  6. Wicked Cool Java: Code Bits, Open-Source Libraries, and Project Ideas by Brian D. Eubanks (No Starch Press)

Enterprise Project Management

  1. Corticon Business Rules Management 4.0 (Corticon)
  2. JBoss 2 Portal (JBoss)
  3. ProVision Enterprise 5.0 (Proforma)
  4. Rally 5.6 (Rally Software Development)
  5. Visual Studio Team System 2005 (Microsoft)
  6. WelcomRisk 2.6 (Welcom)

Database Engines and Data Tools

  1. Attensity Discover 2.7 (Attensity)
  2. Berkeley DB 4.4 (Sleepycat Software)
  3. EnterpriseDB 2005 (EnterpriseDB)
  4. Google Maps API 2005 (Google)
  5. Microsoft SQL Server 2005 (Microsoft)
  6. MySQL 5.0 (MySQL)

Defect Tracking, Change, and Configuration Management

  1. Automated Build Studio 1.7 (AutomatedQA)
  2. CollabNet Enterprise Edition 2005 (CollabNet)
  3. ElectricAccelerator 3.0 (Electric Cloud)
  4. FogBugz 4.0 (Fog Creek)
  5. Guiffy SureMerge 7.0 (Guiffy Software)
  6. JIRA 3.4 (Atlassian Software)
  7. Perforce SCM 2005 (Perforce)

Design Tools and Modeling

  1. Altova UModel 2005 (Altova)
  2. Borland Together 2006 for Eclipse (Borland)
  3. Compuware OptimalJ 4.0 (Compuware)
  4. Enterprise Architect 6.0 (Sparx Systems)
  5. Lattix LDM 2.0 (Lattix)
  6. MagicDraw UML 10.0 (No Magic)
  7. MindManager Pro 6.0 (Mindjet)

Development Environments

  1. Borland Developer Studio 2006 (Borland)
  2. CodeRush w/ Refactor! Pro 1.1 (Developer Express)
  3. Eclipse SDK 3.1 (Eclipse.org)
  4. IntelliJ IDEA 5.0 (JetBrains)
  5. Komodo 3.5 (ActiveState)
  6. Visual Studio Team System 2005 (Microsoft)

Libraries, Frameworks, and Components

  1. .NET Framework 2.0 (Microsoft)
  2. Dundas Chart for .NET 5.0 (Dundas Software)
  3. Qt 4.0 (Trolltech)
  4. (go Brisbane!)
  5. Spring Framework 1.2.6 (SpringFramework.org)
  6. TopCoder Software Component Libraries 5.0 (TopCoder)
  7. U3 SDK 2005 (U3)

Mobile Development Tools

  1. Carbide.c++ Express (Nokia)
  2. Crossfire 5.6 (AppForge)
  3. Flash Lite 2.0 (Adobe)
  4. mWorks platform (mFoundry)
  5. NetBeans IDE 4.1 (Sun Microsystems)
  6. Qtopia (Trolltech)

Quality Project Management

  1. CollabNet Enterprise Edition with Project Dashboard/Task Management 2005 (CollabNet)
  2. protexIP/development 3.0 (Black Duck)
  3. QACenter Enterprise Edition 5.1 (Compuware)
  4. Rally 5.6 (Rally Software Development)
  5. SilkCentral Test Manager 8.1 (Segue)
  6. TargetProcess Suite 1.4 (TargetProcess)

Security Tools

  1. CodeAssure 2.0 (Secure Software)
  2. DevInspec & SecureObjects 1.5 (SPI Dynamics)
  3. DevPartner SecurityChecker 1.0 (Compuware)
  4. Elemental Compliance System 1.4 (Elemental)
  5. Fortify Security Tester 1.0 (Fortify)
  6. SQL Backup Pro Edition 2005 (Red Gate Software)

Testing Tools

  1. Agitator 3.0 (Agitar Software)
  2. AQtime 4.7 (AutomatedQA)
  3. Clover 1.3 (Cenqua)
  4. Parasoft Jtest 7.0 (Parasoft)
  5. TestComplete 4.0 (AutomatedQA)
  6. VMTN Subscription 2005 (VMware)

Utilities

  1. Camtasia Studio 3.0 (TechSmith)
  2. DevPartner Studio 8 (Compuware)
  3. dotTrace 1.1 (JetBrains)
  4. Fog Creek Copilot 1.2 (Fog Creek Software)
  5. Openmake 6.4 (Catalyst Systems)
  6. ReSharper 1.5 (JetBrains)
  7. SnagIt 7.2 (TechSmith)

Web Development Tools

  1. Backbase Standard Edition 3.1 (Backbase)
  2. ColdFusion MX7 (Adobe)
  3. DevPartner Studio 8 (Compuware)
  4. JBoss Application Server 4x (JBoss)
  5. Macromedia Studio 8 2005 (Adobe)
  6. Rails 1.0 (rubyonrails.org)
  7. Zend Studio - Enterprise Edition 5.0 (Zend)
 

Tip: MS Paint Power User -- Setting Line Thickness

Setting Line Thickness for Shapes in MSPaint.exe

[A serious stab at getting the not-so-serious 'MVP for MSPaint' award.]

When annotating a picture with MS-Paint it's handy to use a thick line-style.

But there is no 'line-thickeness' panel available when drawing ellipses, rectangles, polygons, and rounded rectangles.

[Continues...]

line thickness panel not displayed when using ellipse, for example line thickness panel displayed when using straight line or curve tool

The 'line thickness' panel is only displayed when using the 'straight-line' tool or the curve tool.

Here's the unexpected twist... If you pick a line-thickness while using the 'straight-line' (or curve) tool, then it will be carried over use with the other tools you use, such as rectangles, ellipses, polygons and rounded rectangles.

line thickness panel not displayed when using ellipse, for example

If you're not expecting it, this can be an annoyance. But if you know about this behaviour, then it's a big advantage.

So to draw a thick rectangle, ellipse or other shape:

  1. Select the Straight Line Tool
  2. Adjust to the width you prefer
  3. Then select the shape tool you want (e.g Ellipse)
  4. Go nuts