HTML5

To Google or not to Google, that is the question.
Whether ’tis nobler on the web to suffer the sling and arrows of outrageous layout
Or to take up HTML5 and by opposing end them.

Posted in Computing, Web. Comments Off

XSL Sucks!

XSL is like a nuclear weapon, it might serve a purpose but firing in anger is a bad idea and not terribly scalable.

Does XSL Leak File Handles?

Does XSL Leak File Handles?

No, but it may appear to in some use cases. If you use redirect:write a lot for example:

   <redirect:write file="{$outfile}">
   ...
   </redirect:write>

The solution here is to bracket the write with open and close so that the engine does not have to implicitly track the open file stream:

   <redirect:open file="{$outfile}"/>
   <redirect:write file="{$outfile}">
   ...
   </redirect:write>
   <redirect:close file="{$outfile}"/>

Posted in Computing, Software Development, Web. Comments Off

How Do I Create Standards Compliant HTML in Java?

This is a common question and the answers out there are pretty sketchy. So I’m going to provide my example code:

package demo;

import java.io.FileOutputStream;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;

public class HTMLDemo {

   public static void main(String[] args) {
      FileOutputStream outputStream = null;

      try {
         Document newDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
         Element html = newDocument.createElement("html");
         Element head = newDocument.createElement("head");
         Element body = newDocument.createElement("body");

         Element p = newDocument.createElement("p");
         Text textNode = newDocument.createTextNode("Hello World");

         p.appendChild(textNode);
         body.appendChild(p);

         html.appendChild(head);
         html.appendChild(body);

         newDocument.appendChild(html);

         outputStream = new FileOutputStream("/demo.html");
         TransformerFactory.newInstance().newTransformer().transform(
               new DOMSource(newDocument), new StreamResult(outputStream));         

      } catch (Exception e) {
         e.printStackTrace();
      } finally {
         if (outputStream != null) {
            try {
               outputStream.close();
            } catch (IOException e) {
               e.printStackTrace();
            }
         }
      }
   }
}

I leave things like doctype as an exercise to the reader.

Posted in Computing, Software Development, Web. Comments Off