the Andrew Bailey

Blog Improvement, July 2013

I've been updating my site over the past few weeks.

The first thing was to change the way I post articles. Specifically, I want to write markdown, instead of HTML. That was hard just by itself. Good thing that there's a few text to markdown libraries in Java.

But that doesn't solve the problem where I have a hundred previous posts to convert from HTML to markdown. So I searched around and found an XSL transform that did it. The problem was that it took FOREVER: somewhere around a minute per post! I eventually found some JavaScript to do it. Good thing that I remembered that Java has a built in JavaScript interpreter. Especially since I use a platform built on it at work all day.

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
engine.eval(A_JS_FILE_THATS_A_REALLY_LONG_STRING);
engine.put("example", "make a js var like this");
engine.eval("var output = call_js_function_like_this(example)");
String useThis = engine.get("output").toString();

So good! Something like that to get markdown from HTML! Awesome!

While I was back there, I added a preview function, so I don't have to post an article before I realize that I totally messed it up. And while doing that, I realized that the whole posting article system I had was essentially hanging by a thread and a prayer (i.e. easily broken, and it broke so fast), so I rewrote quite a bit of that.

Lest I neglected the front end, I redesigned the DOM of my pages (fewer classes), and removed the deprecated hgroup tags. I updated my CSS to handle it, and I made the fonts bigger. While doing that, I wanted to make sure that my site was actually using responsive design. After some back and forth with my good podcasting friend and avid theAndrewBailey reader, Ryan Rampersad, I realized the problem: mobile devices count pixels differently than straight CSS does. So he gave a solution:

<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=yes">

While I had upgraded the web server I was using in my Linux virtual machine to develop on, I neglected to do so on my server box. So I made everything Glassfish 4. Big mistake. I had to install it twice in order for it to start. I did the same things both times, but worked the second time. Maybe it was because the old version was still running, even though I had told it to quit. Firstly, I realized that there was a null pointer in the code they use to compress server output. OK, that's fine I'll disable that. Then I my page loads were really slow. Occasionally, something would break the output streams, letting the browser just hang there. I reverted back to Glassfish 3, and everything is fine.

But while I was on Glassfish 4, I tried out some new Java EE 7 features, like managed threads. I wanted to start my Jython interpreter on another thread, so startup times would be much faster. (I use Jython for Spruce, that random sentence generator I have on here.) Except those managed threads didn't work for me either. I'm not sure what the problem was, maybe I wasn't using them right, or the default configuration just sucks. So I simply made my own thread from an EJB (gasp), and works great. I don't have much interest in other features introduced, so no loss.

I have some ideas on how to improve Spruce, like how to do related words. Let's say you have a noun (extent), and you want to make it a verb (to extend), an adjective (extensive), or an adverb (extensively). I want Spruce to do the same.

When I found the ScriptEngineManager thing, I also decided to make Jython/Spruce use that, too, since it is a JSR standard. I obviously told the ScriptEngineManager to get the Python engine, not the JavaScript one.

Oh look, posted at the most not found time of the afternoon.

Posted under Programming. 0 comments.

You can't complain about this anymore. It's perfect!