<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss1full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:cc="http://web.resource.org/cc/" xmlns="http://purl.org/rss/1.0/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

<channel rdf:about="http://kontrawize.blogs.com/kontrawize/">
<title>kontrawize</title>
<link>http://kontrawize.blogs.com/kontrawize/</link>
<description>Challenging accepted wisdom.</description>
<dc:language>en-AU</dc:language>
<dc:creator />
<dc:date>2009-10-10T12:39:10+01:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.typepad.com/" />


<items>
<rdf:Seq><rdf:li rdf:resource="http://kontrawize.blogs.com/kontrawize/2009/10/converting-a-magic-uml-model-into-enterprise-architect-format.html" />
<rdf:li rdf:resource="http://kontrawize.blogs.com/kontrawize/2009/09/generating-xml-with-scala.html" />
<rdf:li rdf:resource="http://kontrawize.blogs.com/kontrawize/2009/08/how-xml-could-have-averted-the-recession.html" />
<rdf:li rdf:resource="http://kontrawize.blogs.com/kontrawize/2009/08/generating-xml-schemas-from-iso-20022-uml-models.html" />
<rdf:li rdf:resource="http://kontrawize.blogs.com/kontrawize/2009/02/netbeans-65-javafx-10-groovy-and-arithmetic-training.html" />
<rdf:li rdf:resource="http://kontrawize.blogs.com/kontrawize/2009/01/null-propagation-part-3.html" />
<rdf:li rdf:resource="http://kontrawize.blogs.com/kontrawize/2009/01/the-virtual-laptop-from-linux-to-windows-xp-part-2.html" />
<rdf:li rdf:resource="http://kontrawize.blogs.com/kontrawize/2009/01/one-side-of-the-work-i-do-for-my-clients-is-xml-and-related-technologies-the-other-side-is-general-data-modelling-one-thing.html" />
<rdf:li rdf:resource="http://kontrawize.blogs.com/kontrawize/2009/01/the-virtual-laptop-from-linux-to-windows-xp.html" />
<rdf:li rdf:resource="http://kontrawize.blogs.com/kontrawize/2009/01/twittering-away.html" />
</rdf:Seq>
</items>

<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/kontrawize-rss-1-0" type="application/rss+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /></channel>

<item rdf:about="http://kontrawize.blogs.com/kontrawize/2009/10/converting-a-magic-uml-model-into-enterprise-architect-format.html">
<title>Converting a MagicDraw UML Model into Enterprise Architect format</title>
<link>http://feedproxy.google.com/~r/kontrawize-rss-1-0/~3/J9ty3fxJRFc/converting-a-magic-uml-model-into-enterprise-architect-format.html</link>
<description>I like UML for modelling, in spite of it being too focussed on object-oriented design. However, interoperability between UML file formats is woeful, even though there is a common XML format for UML, called XMI. Unfortunately, each UML tool vendor...</description>
<content:encoded>&lt;p&gt;I like &lt;a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language"&gt;UML&lt;/a&gt; for modelling, in spite of it being too focussed on object-oriented design. &amp;#0160;However, interoperability between UML file formats is woeful, even though there is a common XML format for UML, called &lt;a href="http://en.wikipedia.org/wiki/XMI"&gt;XMI&lt;/a&gt;. &amp;#0160;Unfortunately, each UML tool vendor has found a different, incompatible way of using XMI, it seems. &amp;#0160;It really holds back UML tools; we live in a world where people now expect interoperability. &amp;#0160;The interoperability between UML tools is vastly less than, for example, the interoperability between OpenOffice and MS Office.&lt;/p&gt;















&lt;p&gt;However, the &amp;quot;300lb Gorilla&amp;quot; for many vendors is Eclipse, which has its own built-in UML editor. &amp;#0160;While the Eclipse implementation doesn&amp;#39;t have the same degree of development and features as the commercial tools (although making great strides), the commercial vendors can&amp;#39;t ignore it because so many organisations use Eclipse now as their primary Java IDE. &amp;#0160;This means that many UML tools can import and export Eclipse &amp;quot;.uml&amp;quot; and/or &amp;quot;.uml2&amp;quot; files, so the Eclipse format was recently recommended to me as a better way (than XMI hacking) for moving model between different UML tools.&lt;/p&gt;







&lt;p&gt;This morning, I tried this, using the &lt;a href="http://en.wikipedia.org/wiki/ISO_20022"&gt;ISO 20022&lt;/a&gt;:2009 draft profile as the example. &amp;#0160;This contains both the ISO 20022 profile (stereotypes) and the ISO 20022 type library. &amp;#0160;From MagicDraw, I opened &amp;quot;unifi-profile.mdxml&amp;quot; and then selected &amp;quot;File | Export To | EMF UML2 (v2.x) XMI File&amp;quot;.&lt;/p&gt;&lt;p&gt;&amp;#0160;&lt;a href="http://kontrawize.blogs.com/.a/6a00d8341c8ac953ef0120a5d5a952970b-pi" style="display: inline;"&gt;&lt;img alt="Magicdraw-export-uml2" border="0" class="asset asset-image at-xid-6a00d8341c8ac953ef0120a5d5a952970b image-full " src="http://kontrawize.blogs.com/.a/6a00d8341c8ac953ef0120a5d5a952970b-800wi" title="Magicdraw-export-uml2" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;I saved to an empty directory, where it created 13 &amp;quot;.uml&amp;quot; files, including &amp;quot;unifi-profile.uml&amp;quot;. &amp;#0160;That&amp;#39;s one thing about the Eclipse format, you end up with lots of files, not a single &amp;quot;project&amp;quot; or &amp;quot;model&amp;quot; file like other UML tools.&lt;/p&gt;&lt;p&gt;I then started Enterprise Architect (EA) and created a new, empty model. &amp;#0160;In the project browser, I right-clicked on the top level &amp;quot;Model&amp;quot; node and selected &amp;quot;Import Model from XMI...&amp;quot;. &amp;#0160;This opens the &amp;quot;Import Package from XMI&amp;quot; dialog, which contains a button &amp;quot;Import EMX / UML2 Files&amp;quot;. &amp;#0160;Pressing that button gets you to an alternative dialog which allows you to import your Eclipse model.&lt;/p&gt;&lt;p&gt;However, when I went to import&amp;#0160;&amp;quot;unifi-profile.uml&amp;quot;, I couldn&amp;#39;t because EA expected UML2 files to have a &amp;quot;.uml2&amp;quot; extension, while MagicDraw saves them with a &amp;quot;.uml&amp;quot; extension. &amp;#0160;Luckily, the solution was as easy as renaming&amp;#0160;&amp;quot;unifi-profile.uml&amp;quot; to be&amp;#0160;&amp;quot;unifi-profile.uml2&amp;quot; (note: without renaming any of the other &amp;quot;.uml&amp;quot; files).&lt;/p&gt;&lt;p&gt;Did it work? &amp;#0160;Well, partially. &amp;#0160;It &lt;strong&gt;did&lt;/strong&gt; import the type library, which is good. &amp;#0160;A couple of bogus double-entries were created, but these were easy to find as they didn&amp;#39;t have stereotypes like the actual type library members. &amp;#0160;EA &lt;strong&gt;didn&amp;#39;t&lt;/strong&gt; import the actual profile (stereotypes), which wasn&amp;#39;t a big a surprise to me. &amp;#0160;EA doesn&amp;#39;t yet support the full range of UML 2.x metaclasses (these represent UML constructs - classes, attributes, associations, etc.), while MagicDraw does. &amp;#0160;That&amp;#39;s a pity, it means I will have to construct the profile by hand, as step towards providing EA support in the &lt;a href="http://kontrawize.blogs.com/kontrawize/2009/08/generating-xml-schemas-from-iso-20022-uml-models.html"&gt;Londata UML Message Generator&lt;/a&gt;.&lt;/p&gt;</content:encoded>


<dc:subject>Data Modelling</dc:subject>
<dc:subject>Standards</dc:subject>
<dc:subject>UML</dc:subject>
<dc:subject>XML</dc:subject>

<dc:creator>abcoates</dc:creator>
<dc:date>2009-10-10T12:39:10+01:00</dc:date>
<feedburner:origLink>http://kontrawize.blogs.com/kontrawize/2009/10/converting-a-magic-uml-model-into-enterprise-architect-format.html</feedburner:origLink></item>
<item rdf:about="http://kontrawize.blogs.com/kontrawize/2009/09/generating-xml-with-scala.html">
<title>Generating XML With Scala</title>
<link>http://feedproxy.google.com/~r/kontrawize-rss-1-0/~3/cFdCrpLpNLg/generating-xml-with-scala.html</link>
<description>As I mentioned in "Generating XML Schemas from ISO 20022 UML models", I am using Scala to write an implementation of the ISO 20022 method for generating XML Schemas from a UML model. The code is in two parts; the...</description>
<content:encoded>&lt;p&gt;As I mentioned in &amp;quot;&lt;a href="/kontrawize/2009/08/generating-xml-schemas-from-iso-20022-uml-models.html"&gt;Generating XML Schemas from ISO 20022 UML models&lt;/a&gt;&amp;quot;, I am using &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt; to write an implementation of the &lt;a href="http://www.iso20022.org/"&gt;ISO 20022&lt;/a&gt; method for generating XML Schemas from a UML model. &amp;#0160;The code is in two parts; the first part processes a MagicDraw UML model via the MagicDraw Open API (a Java API) and produces a simple XML representation of the ISO 20022 message information that is contained in the UML model. &amp;#0160;That simple XML representation can then be processed to produce resources such as the XML Schemas; in a later iteration, I also plan to support generation of &lt;a href="http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One"&gt;ASN.1&lt;/a&gt; specifications for the same messages. &amp;#0160;ASN.1 is the way that ISO 20022 messages will be able to be binary encoded rather than XML encoded, for situations where volumes require something more compact than textual XML. At the moment, I have just finished writing the code for generating the XML Schemas from the simple XML representation (having previously written the code to generate the simple XML representation from a MagicDraw UML model).&lt;/p&gt;



&lt;p&gt;Back to Scala and XML, a major reason for using Scala rather than Java for this code is that Scala has better built-in support for XML. In spite of some really top XML people having worked at Sun in the last decade, the XML facilities in Java have never been more than an awkward tacked-on piece that continues to make Java developers resistant to using XML. &amp;#0160;Scala goes a long way to addressing that problem, and making XML straightforward to work with.&lt;/p&gt;



&lt;p&gt;For example, in Scala I can write&lt;/p&gt;



&lt;pre&gt;val x = &amp;lt;document&amp;gt;&amp;lt;h1&amp;gt;Example of inline XML in Scala code&amp;lt;/h1&amp;gt;&amp;lt;/document&amp;gt;&lt;/pre&gt;


&lt;p&gt;which creates a value &amp;quot;x&amp;quot; of type &amp;quot;scala.xml.Node&amp;quot;. Note that I didn&amp;#39;t have to put the XML in quotes to convert it into a string. &amp;#0160;Scala knows what XML is, so you can use XML directly.&lt;/p&gt;



&lt;p&gt;If you need to insert values into the XML, you can do it like this:&lt;/p&gt;



&lt;pre&gt;val famousText = &amp;quot;To be or not to be&amp;quot;&lt;br /&gt;val speaker = &amp;quot;Hamlet&amp;quot;&lt;br /&gt;val famousPhrase = &amp;lt;phrase speaker={speaker}&amp;gt;{famousText}&amp;lt;/phrase&amp;gt;&lt;/pre&gt;


&lt;p&gt;and the value of &amp;quot;famousPhrase&amp;quot; is&lt;/p&gt;



&lt;pre&gt;&amp;lt;phrase speaker=&amp;quot;Hamlet&amp;quot;&amp;gt;To be or not to be&amp;lt;/phrase&amp;gt;&lt;/pre&gt;


&lt;p&gt;Braces are used to indicate where something in the XML should be intepreted as code. &amp;#0160;For attributes, if the attribute value is contained in braces, the enclosing quotes are omitted. &amp;#0160;Some of you may think that this looks not unlike ASP or JSP, and in some ways it does, but it is neatly integrated into Scala. &amp;#0160;These expressions can appear in any Scala code, they aren&amp;#39;t forced into separate files as you typically have with ASP and JSP. &amp;#0160;Also, the resultant expressions are understood by the code to be XML, not just text with angle brackets. &amp;#0160;I can extract values from the XML using a path notation:&lt;/p&gt;



&lt;pre&gt;val extractedSpeakerAttr = famousPhrase \ &amp;quot;@speaker&amp;quot;&lt;br /&gt;val extractedSpeaker = extractedSpeakerAttr.text&lt;br /&gt;&lt;/pre&gt;


&lt;p&gt;The result of this is that &amp;quot;extractedSpeakerAttr&amp;quot; is an XML node sequence with one node, an attribute; &amp;quot;extractedSpeaker&amp;quot; is a string with the value &amp;quot;Hamlet&amp;quot;.&lt;/p&gt;



&lt;p&gt;This is why I like Scala for working with XML. It&amp;#39;s a full general purpose programming language, like Java/C#/etc., but the code you write for working with XML is short and to the point, comparable to XQuery. For my XML Schema generator, it seems like the best solution. Brevity is still one of the best ways to keep your code maintainable, and to keep the cost of that maintenance down to a minimum.&lt;/p&gt;&lt;p&gt;By the way, if you want to try out these Scala example, just &lt;a href="http://www.scala-lang.org/downloads"&gt;download and install Scala&lt;/a&gt;, and type &amp;quot;scala&amp;quot; at the command line. That starts the Scala interpreter; you can type the above code, and it will print out the results. It&amp;#39;s an easy way to get a feel for Scala and what it can do.&lt;/p&gt;</content:encoded>


<dc:subject>Data Modelling</dc:subject>
<dc:subject>Java</dc:subject>
<dc:subject>Scala</dc:subject>
<dc:subject>Standards</dc:subject>
<dc:subject>Web/Tech</dc:subject>
<dc:subject>XML</dc:subject>

<dc:creator>abcoates</dc:creator>
<dc:date>2009-09-13T11:02:49+01:00</dc:date>
<feedburner:origLink>http://kontrawize.blogs.com/kontrawize/2009/09/generating-xml-with-scala.html</feedburner:origLink></item>
<item rdf:about="http://kontrawize.blogs.com/kontrawize/2009/08/how-xml-could-have-averted-the-recession.html">
<title>How XML Could Have Averted The Recession</title>
<link>http://feedproxy.google.com/~r/kontrawize-rss-1-0/~3/lBjvaffH9G0/how-xml-could-have-averted-the-recession.html</link>
<description>"How XML Could Have Averted The Recession" is the name of the presentation I am giving at this year's XML Summer School in Oxford (UK), 20-25 September 2009. The title is a bit whimsical; I'm not claiming to know how...</description>
<content:encoded>&lt;p&gt;"&lt;a href="http://xmlsummerschool.com/curriculum2009/trends-and-transients#recession"&gt;How XML Could Have Averted The Recession&lt;/a&gt;" is the name of the presentation I am giving at this year's &lt;a href="http://xmlsummerschool.com/"&gt;XML Summer School&lt;/a&gt; in Oxford (UK), 20-25 September 2009.  The title is a bit whimsical; I'm not claiming to know how we actually could have avoided the recent financial crash, but I will be discussing how open standards, open data and timely disclosure might have helped us avert the recent failure, and how it might help us avert future failures.&lt;/p&gt;

&lt;p&gt;This will be the 5th XML Summer School I've presented at.  &lt;a href="http://xmlsummerschool.com/faculty2009/"&gt;You won't find a better set of presenters anywhere in the world&lt;/a&gt;, if XML and related technologies are your interest.  The Summer School is small enough that you can get to meet all of the presenters socially during the week, and the presenters keep coming back year after year because we all enjoy the fun we have together socially.&lt;/p&gt;

&lt;p&gt;So, if you can come, you will be very welcome, and I hope to see some of you there.  If you can make it, you won't regret it.&lt;/p&gt;</content:encoded>


<dc:subject>Conferences</dc:subject>
<dc:subject>Web/Tech</dc:subject>
<dc:subject>XML</dc:subject>

<dc:creator>abcoates</dc:creator>
<dc:date>2009-08-15T12:41:38+01:00</dc:date>
<feedburner:origLink>http://kontrawize.blogs.com/kontrawize/2009/08/how-xml-could-have-averted-the-recession.html</feedburner:origLink></item>
<item rdf:about="http://kontrawize.blogs.com/kontrawize/2009/08/generating-xml-schemas-from-iso-20022-uml-models.html">
<title>Generating XML Schemas from ISO 20022 UML models</title>
<link>http://feedproxy.google.com/~r/kontrawize-rss-1-0/~3/2n8vbi9MbEA/generating-xml-schemas-from-iso-20022-uml-models.html</link>
<description>As I've mentioned in the past, I'm the principal UK expert (yes, the "PUKE") for ISO TC68/WG4, the ISO working group that has produced an updated version of the ISO 20022 standard. ISO 20022 is standard for defining messages based...</description>
<content:encoded>&lt;p&gt;As I've mentioned in the past, I'm the principal UK expert (yes, the "PUKE") for ISO TC68/WG4, the ISO working group that has produced an updated version of the ISO 20022 standard.  ISO 20022 is standard for defining messages based on definitions in a central repository, with a focus on banking and finance.  Those of you whose are involved with financial messaging via the SWIFT network will have used ISO 20022 messages whenever you use one of the XML "MX" series messages.  WG4 has produced a 2009 version of ISO 20022; it is currently a committee draft which has gone to TC68 for an international vote, so it is not yet an approved version; the current approved version is the original 2004 version.&lt;/p&gt;

&lt;p&gt;My particular interest in ISO 20022 is in the part that describes how to generate XML Schemas from UML models.  I like the repository based approach where you can share components between related messages, but don't have to implement that sharing at the Schema level, with includes and imports.  ISO 20022 has one Schema file per message, and that makes life easier than if you have to get people to set up a hierarchical directory of cross-linked Schemas correctly.&lt;/p&gt;

&lt;p&gt;I wrote an XML Schema generator for the current 2004 version of ISO 20022.  That generator works with XMI (UML in XML) files produced by Enterprise Architect (from Sparx Systems), and is implemented as a series of XSLT scripts.&lt;/p&gt;

&lt;p&gt;For the new 2009 version of ISO 20022, the good people at MagicDraw donated licences for WG4 to use their UML editor, and so MagicDraw is the UML editor that was used to develop the new metamodel and UML profile.  For this reason, for my new implementation I decided to target MagicDraw (I might support other UML editors too, later, depends on how many requests I get).&lt;/p&gt;

&lt;p&gt;I decided to continue with my previous approach, working from the XMI, this time using a mix of XQuery and XSLT.  XMI is a rather generic XML format that can be hard to read and understand, so I consider it error-prone to try and generate XML Schemas from the XMI directly.  Instead, I &lt;strong&gt;distill&lt;/strong&gt; the XMI into a much simpler XML format which reflects the structure of the ISO 20022 metamodel, an "XML &lt;acronym title="Domain Specific Language"&gt;DSL&lt;/acronym&gt;".  I then process that simpler XML file to generate Schemas or anything else.  So, the plan was to use an XQuery to generate the simple XML, and then XSLT to generate the Schemas (there are some things that are easier in XSLT than XQuery).&lt;/p&gt;

&lt;p&gt;However, it turns out that the latest XMI 2.1 standard is loose around how UML stereotypes (user annotations) are represented.  So, after some failed attempts at "reverse engineering" how MagicDraw represents stereotypes in XMI, I decided I needed a different approach.  Instead, I am using the MagicDraw Open API to read the contents of an ISO 20022 UML model.  This means I need to be using a Java program, or something that runs on a JVM.&lt;/p&gt;

&lt;p&gt;Java itself isn't great for XML, in as much as the code tends to end up rather more verbose and unreadable than it need be.  I tried Groovy, which has some reasonable support for XML, but moved away from that because the XML support is incomplete.  It seems that in a number of languages, the people who implemented the XML library didn't really like XML, so they decided to only implement support for the parts of XML that they thought were worthwhile.  For users, that causes nothing but problems.&lt;/p&gt;

&lt;p&gt;What I am currently using is Scala, which is convenient because you can just start typing XML as the value of a variable in the middle of a program, and Scala knows what to do.  I've now written the code to generate the simple XML format.  It hasn't been as easy as it should have been, because Scala support in IDEs is still weak (I use Intellij), and because Scala's integration with Java is good but not as good as it could or should be.  For example, Scala avoids the use of &lt;strong&gt;null&lt;/strong&gt; values.  It does have some support for them because it needs that to work with Java libraries.  However, at times when Java code would give me a null pointer exception, I find my Scala code just hangs, leaving me with a lot of searching to do to find what went wrong and where.  Still, the code is more readable than Java, and things can only get better, so I'm planning to stick with Scala for this.&lt;/p&gt;

&lt;p&gt;Once I have XML Schema generation done, the next thing to look at is ASN.1.  ASN.1 ("abstract syntax notation") is an ISO standard for designing messages that predates XML, and has been most widely used in the telecommunications industry.  Note that &lt;a href="/kontrawize/2005/09/from_asn1_to_xm.html"&gt;I wrote in a previous post that ASN.1 was the format used for ISO 15022 messages&lt;/a&gt; (more-or-less the predecessor to ISO 20022).  That was wrong, I want to point out; somewhere along the line I got the wrong idea, and in spite of my saying it in a number of WG4 meetings, only recently did someone from SWIFT point out that I was mistaken.&lt;/p&gt;

&lt;p&gt;Anyway, WG4 has added support in the 2009 version of ISO 20022 for ASN.1 as an alternate message syntax to XML Schema.  Now, ASN.1 itself is actually multi-syntax.  There are a couple of binary encodings it supports, plus there is a more recent XML encoding.  The ISO 20022 profile of ASN.1 has been constructed so that, as closely as possible, an XML message that is valid according to the XML Schemas will also be valid as an XML encoded ASN.1 message, and vice-versa.  Since ASN.1 messages also have a binary encoding, this new ASN.1 support means that ISO 20022 will have an official binary encoding as well as the existing XML encoding.  It will be interesting to see how the usage of XML versus binary ISO 20022 messages goes over the next few years; banking and finance applications have size and latency challenges for which plain-text XML often isn't suitable.&lt;/p&gt;

&lt;p&gt;I should be able to generate the ASN.1 grammars for the messages from the same simple XML that I use to generate the Schemas.  Doing so will show that the simple XML genuinely decouples that back-end code generators from the format of the input UML model; that's something I need to have the possibility to support UML editors other than MagicDraw in the future.&lt;/p&gt;

&lt;p&gt;If any of this interests you, either ISO 20022 or my work on Schema and other generators for ISO 20022, feel free to get in touch.&lt;/p&gt;</content:encoded>


<dc:subject>Data Modelling</dc:subject>
<dc:subject>Java</dc:subject>
<dc:subject>Scala</dc:subject>
<dc:subject>Standards</dc:subject>
<dc:subject>Web/Tech</dc:subject>
<dc:subject>XML</dc:subject>

<dc:creator>abcoates</dc:creator>
<dc:date>2009-08-09T14:18:06+01:00</dc:date>
<feedburner:origLink>http://kontrawize.blogs.com/kontrawize/2009/08/generating-xml-schemas-from-iso-20022-uml-models.html</feedburner:origLink></item>
<item rdf:about="http://kontrawize.blogs.com/kontrawize/2009/02/netbeans-65-javafx-10-groovy-and-arithmetic-training.html">
<title>NetBeans 6.5, JavaFX 1.0, Groovy and arithmetic training</title>
<link>http://feedproxy.google.com/~r/kontrawize-rss-1-0/~3/hAHDzn8HwGY/netbeans-65-javafx-10-groovy-and-arithmetic-training.html</link>
<description>I'm reasonably good at mental arithmetic, and I want my son to learn to do it as well. I think it's a disadvantage in life if you have to search for a calculator every time you need to add, subtract,...</description>
<content:encoded>&lt;p&gt;I'm reasonably good at mental arithmetic, and I want my son to
    learn to do it as well. I think it's a disadvantage in life if you have to
    search for a calculator every time you need to add, subtract, multiply, or
    divide a couple of numbers. For that reason, I've written a number of
    arithmetic training programs for him. The first one I wrote was written in
    C# using the GUI building abilities of a cross-platform Java/C# IDE that I
    used to use, &lt;a
    href="http://www.omnicore.com/en/xdevelop.htm"&gt;Xdevelop&lt;/a&gt;. Actually, I
    would still be using that IDE if they hadn't stopped supporting it a
    couple of years ago; I thought it was great.&lt;/p&gt;&lt;p&gt;Eventually, I wanted to
    write a second version of the arithmetic program, one that adjusts to the
    user's abilities. This is a fairly simple technique that I learned back in
    my educational multimedia days. You make the problems harder each time the
    user gets one correct, you make them easier each time the user gets one
    wrong. In this way, the program can quickly auto-adjust to the user's
    current level of skill. For this second version, I decided to use Java and
    Swing, but I wanted to use something like a GUI builder. You can write a
    user interface directly in Java, but it's a slow tedious process, and I
    don't have the time to waste on that. At that time, there was an early
    version of &lt;a href="www.javafx.com"&gt;JavaFX&lt;/a&gt; available. JavaFX allowed
    you to declare the structure of your user interface by defining a simple
    structure of components within components; a bit like an XML file, but not
    XML, a hierarchical syntax more akin to Java syntax. It wasn't as good as
    a full-on visual GUI builder, but still seemed easier and more manageable
    than writing Swing code directly in Java. If you are writing JavaFX, I
    strongly suggest you download &lt;a
    href="http://www.netbeans.org/"&gt;NetBeans&lt;/a&gt;, as its built-in JavaFX
    support is not bad. There is also a &lt;a
    href="http://kenai.com/projects/eplugin"&gt;plug-in for Eclipse&lt;/a&gt;, but no
    plug-in (that I know of) for Intellij. There is a slim version of NetBeans
    now that has just the bits you need for Java and JavaFX development; it's
    &lt;strong&gt;much&lt;/strong&gt; smaller than the "complete" version of
    NetBeans.&lt;/p&gt;&lt;p&gt;Anyway, this new arithmetic program has worked very well,
    but I need to make a few minor improvements, so I thought I should check
    the latest version of JavaFX. Recently, JavaFX 1.0 was released, and this
    has changed significantly. The old version was a simpler way to write
    Swing programs, the actual 1.0 release now has a "Stage" and "Scene"
    metaphor that is reminiscent of the Macromedia tools I used to use in my
    multimedia development days, particularly Macromedia Director (Adobe
    subsequently bought Macromedia). That's a good thing; those Macromedia
    tools really impressed me because both programmers and artists could use
    the same tool and usefully contribute to the final product. The same can't
    be said of most programming IDEs. The Macromedia tools were genuinely
    inclusive, in a way that so many software development tools are not. There
    is something wrong when so much software still only targets only the
    cleverest 5% of users. The other 95% deserve to have a chance to
    contribute as well, and they tend to be excluded
    unnecessarily.&lt;/p&gt;&lt;p&gt;Anyway, NetBeans 6.5 has support for JavaFX 1.0,
    including a new "palette" of visual items that you can drag-and-drop onto
    your "Stage". What I found, though, is that JavaFX has lost its ability to
    do Swing GUIs. Instead, a bit like the Macromedia tools I used to use, you
    have to lay things out yourself based on absolute pixel locations. This
    kind of user interface development works well when you have a very
    graphical interface created by an artist, and when you have an IDE that
    makes it easy to work with images, etc., and lay them out visually in the
    correct pixel positions. However, I'm not an artist, and NetBeans 6.5's
    JavaFX facilities are poor when compared to Macromedia's tools from 1996
    (yes, over 12 years ago). I would hate to have to use NetBeans to do any
    serious JavaFX development. If JavaFX is going to compete with Flash, it
    can't just do the run-time, back-end things properly, it also has to be
    easy to author. At the moment, it is generations behind, and I really
    wonder which group, Sun or other, is going to be able to step up and
    provide the necessary interface, if it is to be a success.&lt;/p&gt;&lt;p&gt;Having
    discovered how different JavaFX 1.0 is from old JavaFX, it occurred to me
    that I was better off porting my program to &lt;a
    href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt;. Groovy is a Java-based
    scripting language that compiles to Java byte codes and can use any Java
    library, so it's easy to learn if you have a background in Java
    development. Like JavaFX, Groovy provides a syntax for declaring the
    structure of a user interface (and uses a similar structure for XML, very
    useful, but a topic for another post sometime). Unlike JavaFX, Groovy uses
    the normal Swing components, so the conversion was fairly straightforward.
    It took me about a day, mainly because I was learning Groovy at the same
    time as doing the conversion.&lt;/p&gt;&lt;p&gt;The only significant difference
    between Groovy and the old JavaFX is that JavaFX has a neat "bind" keyword
    that can be used to make the value of a field in the user interface stay
    synchronised with a particular variable. It's a simple idea, but very
    powerful. It removes a lot of event handling code that you would normally
    have to add to a Java program. So, the Groovy version of my application
    required some new event handling code. Luckily, Groovy provides
    "closures", essentially "pure" methods that aren't attached to a
    particular class, and these simplify the writing of event handling code.
    As compared to converting to JavaFX 1.0, converting to Groovy and adding
    some event handling code was definitely easier. My son has his new
    arithmetic program running now, with some new features. Groovy is stable
    enough that I shouldn't face the same migration problem the next time I
    want to add some new features.&lt;/p&gt;&lt;p&gt;The more I use Groovy, the more I
    like it. It's worth the time to learn it, if you write enough code in
    plain old Java and would like to save some time.&lt;/p&gt;</content:encoded>


<dc:subject>Java</dc:subject>
<dc:subject>Web/Tech</dc:subject>

<dc:creator>abcoates</dc:creator>
<dc:date>2009-02-15T16:49:25+00:00</dc:date>
<feedburner:origLink>http://kontrawize.blogs.com/kontrawize/2009/02/netbeans-65-javafx-10-groovy-and-arithmetic-training.html</feedburner:origLink></item>
<item rdf:about="http://kontrawize.blogs.com/kontrawize/2009/01/null-propagation-part-3.html">
<title>Null propagation, part 3</title>
<link>http://feedproxy.google.com/~r/kontrawize-rss-1-0/~3/jjBaKqsT3wk/null-propagation-part-3.html</link>
<description>Almost two years ago now (#1, #2), I wrote about the idea of being able to modify the way Java handles the situation where a method is called on a null value. Normally this causes an exception; I was wanting...</description>
<content:encoded>&lt;p
&gt;Almost two years ago now (&lt;a
href="http://kontrawize.blogs.com/kontrawize/2007/03/null_propagatio.html"
&gt;#1&lt;/a
&gt;, &lt;a
href="http://kontrawize.blogs.com/kontrawize/2007/03/null_propagatio_1.html"
&gt;#2&lt;/a
&gt;), I wrote about the idea of being able to modify the way Java handles the situation where a method is called on a null value.  Normally this causes an exception; I was wanting such a call to return a null instead, so that the result is more like what happens with XPaths when a node in a path doesn't exist.  For example, the XPath&lt;/p
&gt;&lt;pre
&gt;/document/person/address&lt;/pre
&gt;&lt;p
&gt;doesn't cause a program exception if there is no &lt;tt
&gt;&amp;lt;person&amp;gt;&lt;/tt
&gt; element, whereas&lt;/p
&gt;&lt;pre
&gt;getDocument().getPerson().getAddress()&lt;/pre
&gt;&lt;p
&gt;will throw an exception if "&lt;tt
&gt;getDocument().getPerson()&lt;/tt
&gt;" returns null.  These exceptions make it painful to use Java (etc.) for working with XML, because you end up with so many &lt;tt
&gt;try/catch&lt;/tt
&gt; blocks to deal with of the places that an exception could possibly be thrown.&lt;/p
&gt;&lt;p
&gt;So, it was interesting when I stumbled across the fact that &lt;a
href="http://stateyourbizness.blogspot.com/2008/07/groovy-operators.html"
&gt;Groovy (a Java-based scripting language) solves this issue&lt;/a
&gt;!  Groovy has a "&lt;tt
&gt;?.&lt;/tt
&gt;" operator, which returns null if called on a null, and executes the method normally if called on an object, i.e. "&lt;tt
&gt;a?.b&lt;/tt
&gt;" is equivalent to "&lt;tt
&gt;a == null ? null : a.b&lt;/tt
&gt;".  So&lt;/p
&gt;&lt;pre
&gt;getDocument()?.getPerson()?.getAddress()&lt;/pre
&gt;&lt;p
&gt;will return null if "&lt;tt
&gt;getDocument()?.getPerson()&lt;/tt
&gt;" returns null.  That makes Groovy (for this and other reasons) a better way to write your XML processing code in Java, if you are trying to keep your code as simple and maintainable as possible.&lt;/p
&gt;</content:encoded>


<dc:subject>Java</dc:subject>
<dc:subject>Web/Tech</dc:subject>
<dc:subject>XML</dc:subject>

<dc:creator>abcoates</dc:creator>
<dc:date>2009-01-25T20:40:31+00:00</dc:date>
<feedburner:origLink>http://kontrawize.blogs.com/kontrawize/2009/01/null-propagation-part-3.html</feedburner:origLink></item>
<item rdf:about="http://kontrawize.blogs.com/kontrawize/2009/01/the-virtual-laptop-from-linux-to-windows-xp-part-2.html">
<title>The Virtual Laptop ― From Linux to Windows XP, part 2</title>
<link>http://feedproxy.google.com/~r/kontrawize-rss-1-0/~3/SM9JCdm3c1k/the-virtual-laptop-from-linux-to-windows-xp-part-2.html</link>
<description>John Cowan submitted a comment to my post about switching my laptop from Linux to Windows XP. He asks, quite reasonably, why I need to install OpenOffice directly on my laptop if I do my work in VMware virtual machines....</description>
<content:encoded>&lt;p
&gt;&lt;a
href="http://kontrawize.blogs.com/kontrawize/2009/01/the-virtual-laptop-from-linux-to-windows-xp.html#comment-143898208"
&gt;John Cowan submitted a comment&lt;/a
&gt; to &lt;a
href="http://kontrawize.blogs.com/kontrawize/2009/01/the-virtual-laptop-from-linux-to-windows-xp.html"
&gt;my post about switching my laptop from Linux to Windows XP&lt;/a
&gt;.  He asks, quite reasonably, why I need to install OpenOffice directly on my laptop if I do my work in VMware virtual machines.  Don't I only need OpenOffice in the virtual machines?  Shouldn't I keep the laptop itself &lt;strong
&gt;free of almost everything&lt;/strong
&gt; except VMware Server?&lt;/p
&gt;&lt;p
&gt;The answer is something of an &lt;strong
&gt;80/20 rule&lt;/strong
&gt;.  There are compromises that you have to make in running VMware on a laptop (and even on a lot of desktops).  The two most obvious ones are&lt;/p
&gt;&lt;ul
&gt;&lt;li
&gt;available memory;&lt;/li
&gt;&lt;li
&gt;available disk space.&lt;/li
&gt;&lt;/ul
&gt;&lt;p
&gt;My laptop has 2G RAM, and that is the maximum it supports (it's 2 years old, what can I say?  This Christmas, at a large UK chain called PC World, they had £499 laptops with 4G RAM and 250G disk, both figures about double what I have now.  But I don't have one of those).  When I'm running both Linux and Windows in VMware virtual machines on my laptop, I'm running &lt;strong
&gt;3 operating systems at the same time&lt;/strong
&gt;, 2 x Windows + 1 x Linux.  That's quite a squeeze.  I can only assign 768M to each virtual machine, which is less that most people are used to having these days when using Windows or Linux.  It's just barely enough, really, although it is enough for the most part.&lt;/p
&gt;&lt;p
&gt;Now, there are certain common services I sometimes want to run that are used by both my virtual machines.  The most important is my Subversion repository, but I also sometimes run XML or relational databases.  As I'm already so squeezed for memory, there is no way I can run extra virtual machines for these.  I also don't want to run them within one of my existing virtual machines, because them I'm &lt;strong
&gt;forced&lt;/strong
&gt; to run both at once.  It's better to be able to run them independently, not the least because I sometimes need to bump the memory up to double (1.5G) in order to run something big, and that means one virtual machine only.  The upshot is that I have to run certain common services on the host directly, there isn't really a practical alternative.&lt;/p
&gt;&lt;p
&gt;There are also some applications that run sufficiently better on the host, enough to make it worth using the host directly.  Skype is a key one for me, but also &lt;a
href="http://bibblelabs.com/"
&gt;Bibble Pro&lt;/a
&gt; which I use for processing RAW photographs from my digital SLR.  And why OpenOffice?  The main reason is because, when I'm giving a presentation at a conference or meeting, there is always that natural tendency for technical things to fail at the worst possible moment.  Adding a virtual machine into the equation is just an extra distraction that I don't need.  Additionally, sometimes I might want to quickly look at an office file that someone has put on a USB memory stick.  I don't want to have to fire up both a host operating system and a virtual machine operating system just to view a word processing document or a spreadsheet quickly.&lt;/p
&gt;&lt;p
&gt;I am nonetheless fairly strict about what things I do on the host operating system, and what data or files I keep on it.  Any data or files on the host have to be backed up separately to my virtual machines, which is important.  I don't do e-mail on my host operating system (maybe the occasional bit of webmail, nothing more than that), nor anything much else that is part of my daily work tasks.  So, it's 80 for the virtual machines and 20 for the host operating system.  I think that's a reasonable compromise.&lt;/p
&gt;</content:encoded>


<dc:subject>openSUSE</dc:subject>
<dc:subject>VMware</dc:subject>
<dc:subject>Web/Tech</dc:subject>

<dc:creator>abcoates</dc:creator>
<dc:date>2009-01-02T18:45:57+00:00</dc:date>
<feedburner:origLink>http://kontrawize.blogs.com/kontrawize/2009/01/the-virtual-laptop-from-linux-to-windows-xp-part-2.html</feedburner:origLink></item>
<item rdf:about="http://kontrawize.blogs.com/kontrawize/2009/01/one-side-of-the-work-i-do-for-my-clients-is-xml-and-related-technologies-the-other-side-is-general-data-modelling-one-thing.html">
<title>Data modelling, metamodelling and MPS</title>
<link>http://feedproxy.google.com/~r/kontrawize-rss-1-0/~3/voymLecqi0Q/one-side-of-the-work-i-do-for-my-clients-is-xml-and-related-technologies-the-other-side-is-general-data-modelling-one-thing.html</link>
<description>One side of the work I do for my clients is XML and related technologies, the other side is general data modelling. One thing that interests me in data modelling is the use of metamodels. Now, what is a metamodel?...</description>
<content:encoded>&lt;p&gt;One side of the work I do for my clients is XML and related technologies, the other side is general data modelling. One thing that interests me in data modelling is the use of metamodels. Now, &lt;strong&gt;what is a metamodel?&lt;/strong&gt; Normally, people switch off or break into a cold sweat when they hear &amp;quot;&lt;em&gt;meta-anything&lt;/em&gt;&amp;quot; in a sentence. However, there is nothing scary about metamodels. A metamodel simply defines what things are &lt;strong&gt;allowed to be in your data models&lt;/strong&gt;; it&amp;#39;s a &lt;strong&gt;model&lt;/strong&gt; of what you are allowed to have in your data models.&lt;/p&gt;&lt;p&gt;Why do we need metamodels? It&amp;#39;s because data modelling is usually done using &lt;strong&gt;general purpose&lt;/strong&gt; modelling technologies. Examples are &lt;acronym title="Entity-Relationship"&gt;E-R&lt;/acronym&gt; diagrams, UML, and XML Schemas. Any of these general purpose modelling technologies give you &lt;strong&gt;more features than you need or want&lt;/strong&gt; in any single project. It can be a major problem to constrain people to use &lt;strong&gt;as few features as possible&lt;/strong&gt;, which is what you want to make your data models as &lt;strong&gt;simple&lt;/strong&gt; to understand and as &lt;strong&gt;cheap&lt;/strong&gt; to maintain as possible. The role of a metamodel is to define a limited set of features which are the only ones that can be used out of all of the features that the general purpose modelling methodology provides.&lt;/p&gt;&lt;p&gt;For example, it&amp;#39;s common to find people using XML Schemas that (a) use elements only for data, not attributes, and (b) use local element definitions only in the XML Schemas, not global element definitions (root elements accepted). This constraining of XML Schema to a simple subset of its features is equivalent to defining a metamodel that is a subset of the full metamodel for XML Schema. In practice, you can implement just such a &amp;quot;metamodel validation&amp;quot; on an XML Schema by applying some kind of schema language to the XML Schema itself. As it happens, XML Schema editors often won&amp;#39;t let you apply an XML Schema to another XML Schema, but you can apply both Schematron and/or RELAX NG to XML Schemas in order to implement checks that the XML Schemas conform to your metamodel (i.e. your design rules).&lt;/p&gt;&lt;p&gt;UML is widely used for data models, and metamodels for UML are written in using a thing called MOF. With the latest versions, UML 2 and MOF 2, MOF is now a subset of UML that can be used for writing metamodels which constrain UML models. Sadly, support for &lt;strong&gt;validating UML models&lt;/strong&gt; using MOF metamodels is still poor (at least in any tools I have used), but I live in hope that within a couple of years it will be possible to validate a UML model with a MOF metamodel as easily as you can validate an XML document with an XML schema.&lt;/p&gt;&lt;p&gt;Today I was catching up on some reading, and I stumbled across a mention of &lt;a href="http://www.jetbrains.com/mps/"&gt;JetBrains Meta Programming System&lt;/a&gt; (MPS). I tried an early version of this a couple of years ago; it lets you design custom/bespoke mini programming languages (or mini data formats) that are specific to a particular purpose. The &lt;a href="http://www.jetbrains.com/mps/docs/tutorial.html"&gt;MPS tutorial&lt;/a&gt; is a good way to get a feel for MPS, what it does, and how it works. There is an obvious analogy between defining a mini-language for a task rather than letting people loose with a general purpose language, and using a metamodel to constrain people&amp;#39;s usage of the features of a general purpose modelling methodology. MPS allowed you to define structured data models that have something of the feel of (simple) textual computer program, or a textual data file like a simple properties file. Although they have the look of text files, they are actually structured, and in some ways it&amp;#39;s not unlike generating form-based user interfaces or Web pages. MPS is a neat looking tool, and it&amp;#39;s free. I like JetBrains (commercial) Intellij IDE for Java, because it&amp;#39;s so clever in the degree of analysis it does of your code as your write it. I was amazed how many issues it was able to point out to me as I was writing my code, before I even compiled it. If the JetBrains folks can apply the same cleverness to MPS, it could be a useful tool. That said, it&amp;#39;s not the only tool that can generate user interfaces from models. Eclipse has EMF (like a cut-down version of UML) and Visual Studio has support for Domain Specific Languages (DSL). All of these tools are working to the same end, to provide you with a way to allow people to work with only the minimum set of features that are needed for any particular problem, so that they produce the simplest, most consistent, most maintainable solution that they can.&lt;/p&gt;&lt;p&gt;Metamodels and their equivalents let you take a complex software tool or methodology, and constrain it to effectively turn it into a simpler software tool or methodology. It&amp;#39;s a bit more effort, but for a project of any size, it can pay real benefits in the end.&lt;/p&gt;</content:encoded>


<dc:subject>Data Modelling</dc:subject>
<dc:subject>Web/Tech</dc:subject>
<dc:subject>XML</dc:subject>

<dc:creator>abcoates</dc:creator>
<dc:date>2009-01-02T08:38:27+00:00</dc:date>
<feedburner:origLink>http://kontrawize.blogs.com/kontrawize/2009/01/one-side-of-the-work-i-do-for-my-clients-is-xml-and-related-technologies-the-other-side-is-general-data-modelling-one-thing.html</feedburner:origLink></item>
<item rdf:about="http://kontrawize.blogs.com/kontrawize/2009/01/the-virtual-laptop-from-linux-to-windows-xp.html">
<title>The Virtual Laptop ― From Linux to Windows XP</title>
<link>http://feedproxy.google.com/~r/kontrawize-rss-1-0/~3/D6VKXcotynk/the-virtual-laptop-from-linux-to-windows-xp.html</link>
<description>For over 2 years now, since I bought it, I have been running openSUSE Linux on my laptop. Although I spent a lot of time making it work, more or less, I have also lost a lot of time in...</description>
<content:encoded>&lt;p
&gt;For over 2 years now, since I bought it, &lt;a
href="http://kontrawize.blogs.com/kontrawize/2006/10/a_new_virtual_l.html"
&gt;I have been running openSUSE Linux on my laptop&lt;/a
&gt;.  Although I spent a lot of time making it work, more or less, I have also lost a lot of time in trying to get simple things to work well.  For example, with a laptop, it's useful if you can hibernate it, and do so quickly and safely.  Also, when travelling, you want things like Skype to work well.  I never managed to get these kinds of "mobile" aspects working well enough.  So, when I recently had a couple of hard disk crashes on my laptop in the space of a couple of months, I decided to bite the bullet and switch my laptop back to Windows XP.  That's what I've done, my laptop is running Windows XP now.&lt;/p
&gt;&lt;p
&gt;The reason I could switch so quickly, in less than half a week of spare time, is because most things that I do are done in VMware Server virtual machines.  So, as long as I can run VMware Server on a PC of any sort, I can quickly be up and running with my working environments.&lt;/p
&gt;&lt;p
&gt;Is Windows better than Linux?  No, not really.  I'm trading one set of issues for another.  However, my new principle is that &lt;strong
&gt;you should stick the the operating system that comes with your laptop&lt;/strong
&gt;.  Not because that operating system is better than any other, but because it should work with the hardware in your laptop; manufacturer testing of the operating system with the hardware is worth a lot in practice.  So, while hibernating is now much better (I can hibernate even with VMware virtual machines running, something that was out of the question with Linux), I've already had problems with software not running properly when installed, or new installations seeming to stop previously installed software from running.  Linux has a sophisticated system for managing dependencies between versions of software, and Windows doesn't seem to have anything to match, so Windows is a generation or more behind in terms of making different software applications co-exist.  I'm losing that, compromising instead to get better hardware support.&lt;/p
&gt;&lt;p
&gt;By the way, where does all of the disk space go in Windows?  &lt;a
href="http://kontrawize.blogs.com/kontrawize/2008/11/laptop-crash.html"
&gt;I don't like the idea of having just a single huge disk partition&lt;/a
&gt; as is the default for Windows, so I split my partition (using "&lt;a
href="http://partedmagic.com/"
&gt;Parted Magic&lt;/a
&gt;" - free and recommended by me) so that I have a C drive for Windows and application files, and a D drive for data.  I thought 25G should be plenty, even for something as profligate as Windows XP (which itself is still leaner than Vista).  However, with XP and selection of applications (including VMware Server and the Novell edition of OpenOffice 3, which are big installs), I now find I only have 4G free out of 25G!  Where did my disk space go?  I've examined the C drive once, but the numbers don't add up, something is missing.  I may have some large "system restore point" file backups, perhaps.  I'll be checking into that as I go along.&lt;/p
&gt;&lt;p
&gt;Windows XP needs more protection than openSUSE Linux, which comes with built-in support for disk encryption and also comes with Novell's AppArmor, which is a better way for Linux to protect against viruses/etc., than the virus-signature-based approach that is most common for Windows.  That meant software to buy.  I like to use &lt;a
href="http://www.norman.com/"
&gt;Norman&lt;/a
&gt; software (&lt;strong
&gt;not&lt;/strong
&gt; Norton) for virus checking and firewall, because the firewall allows very fine-grained control over incoming and outgoing network connections.  To encrypt my hard disk, I decided to &lt;a
href="http://www.schneier.com/essay-199.html"
&gt;follow Bruce Schneier&lt;/a
&gt; and use &lt;a
href="http://www.pgp.coam/products/wholediskencryption/"
&gt;PGP Whole Disk Encryption&lt;/a
&gt;, which is straightforward to use and also provides support for signing and encrypting your files using &lt;acronym
title="Pretty Good Privacy"
&gt;PGP&lt;/acronym
&gt;.&lt;/p
&gt;&lt;p
&gt;By the way, my laptop may be running Windows XP, but remember, I do most of my work in VMware virtual machines, so I'll still be doing most of my work in Linux.  I'm just trying to get the best of both worlds.&lt;/p
&gt;</content:encoded>


<dc:subject>openSUSE</dc:subject>
<dc:subject>VMware</dc:subject>
<dc:subject>Web/Tech</dc:subject>

<dc:creator>abcoates</dc:creator>
<dc:date>2009-01-01T19:33:29+00:00</dc:date>
<feedburner:origLink>http://kontrawize.blogs.com/kontrawize/2009/01/the-virtual-laptop-from-linux-to-windows-xp.html</feedburner:origLink></item>
<item rdf:about="http://kontrawize.blogs.com/kontrawize/2009/01/twittering-away.html">
<title>Twittering Away</title>
<link>http://feedproxy.google.com/~r/kontrawize-rss-1-0/~3/ywdV3t8IPhU/twittering-away.html</link>
<description>I signed up for Twitter quite a while ago, but never used it. I couldn't quite see the point; if I'm at my PC, I would rather use my weblog if I have something to say. So while I had...</description>
<content:encoded>&lt;p
&gt;I signed up for &lt;a
href="http://twitter.com/"
&gt;Twitter&lt;/a
&gt; quite a while ago, but never used it. I couldn't quite see the point; if I'm at my PC, I would rather use my weblog if I have something to say. So while I had some followers on Twitter, I never posted any "tweets".&lt;/p
&gt;&lt;p
&gt;However, I recently came across "&lt;a
href="http://www.twibble.de/twibble-mobile/"
&gt;twibble&lt;/a
&gt;", a Twitter client for mobile phones. On my phone, Twitter makes sense to me. The maximum length of a single "tweet" is about the same as an SMS text message, so it's the kind of short thing that phones are good for. So, I've started posting snippets of thoughts to Twitter. If you are interested, feel free to &lt;a
href="http://twitter.com/abcoates"
&gt;follow my ramblings via Twitter&lt;/a
&gt;.&lt;/p
&gt;</content:encoded>


<dc:subject>Weblogs</dc:subject>

<dc:creator>abcoates</dc:creator>
<dc:date>2009-01-01T19:29:50+00:00</dc:date>
<feedburner:origLink>http://kontrawize.blogs.com/kontrawize/2009/01/twittering-away.html</feedburner:origLink></item>


</rdf:RDF><!-- ph=1 --><!-- nhm:dynamic-ssi -->
