The Latest Blog
send me a comment

Ender In Exile (Monday, Dec 1)
[ permalink ] [ e-mail me ] [ ]

Hey, Orson Scott Card wrote a new book in the Ender's Game series: Ender In Exile. How did I miss that?

Red Speckles On My Plasma TV (Saturday, Nov 22)
[ permalink ] [ e-mail me ] [ ]

I know, I've been quiet for a few weeks. Busy busy, including presenting 9 sessions at the View Developer conference in Amsterdam (where we got 100% approval in the overall evaluations!). But before I start back up with the usual technical jibberish, there's something more important to talk about: my television set.

I have a 2 year old plasma TV, and I just started noticing some red speckles flashing almost like static all over the screen, mostly near the top and bottom. Here are some pictures one guy posted to let you see what I'm talking about.

I did some searching ("red dots", "red sparkles", "red snow", etc.) and saw that this is a fairly common complaint. The best -- or at least longest -- discussion I saw was on the AVS Forums. A summary of probable causes:

I'm not sure if my particular problem is one I need to spend money to fix yet. I haven't decided. I have a feeling (or at least a strong hope) that my issue is a cold weather one, especially since my TV sits near an outside wall and a window. I might also just get used to it, which is almost as good as getting it fixed.

Finished Anathem (Monday, Nov 3)
[ permalink ] [ e-mail me ] [ ]

Last night I finished the latest Neal Stephenson book, Anathem. Very good read. My mind is still processing it.

If you want to read it, or you just started, keep in mind this comment by Neal Stepenson himself in a recent interview on BarnesAndNoble.com:

James Mustich, B&N Interviewer: I found the first 100 pages or so of Anathem a little difficult -- not unpleasant, but I was conscious of struggling to keep all the elements of your invented world straight in my mind as I was reading. Then everything seemed to snap into place and I was happily lost in the book.

Neal Stephenson: That's a remarkably universal remark -- almost everyone says, "The first hundred pages were heavy sledding, and then it started happening for me." It's interesting how consistent that response has been.

Indeed. I actually had to stop at about page 75 and read something less intense (Terry Pratchett), and when I came back and got a little past page 100 it really started moving. Once you get over that hump, it's certainly worth it.

A big part of the initial slowness is probably because, as Andrew Pollack recently pointed out: "I think what he's doing in Anathem is building a 'feel' for the slow, deliberate, and ordered world of the maths (essentially monasteries) in his world." That's right on. Remember that and just give it some time and you'll get it.

Also, as I got towards the end I kept thinking about the short story The Golden Man by Philip K. Dick. That's not a spoiler really, just something that kept popping into my head. Looking for a link to that, I found out that The Golden Man is going to be yet another movie based on a Philip K. Dick short story too. I wonder where they're going to go with it.

Pumpkin Destruction Day (Friday, Oct 31)
[ permalink ] [ e-mail me ] [ ]

I got an e-mail today about Pumpkin Destruction Day, going on this weekend at the Rock Ranch in Barnesville, GA. From the e-mail:

This Saturday (November 1) is Pumpkin Destruction Day at The Rock Ranch. This event takes place from 10am to 10pm and offers fun and exciting methods of recycling the family pumpkin and creating a fun family memory. In addition to the everyday attractions at The Rock Ranch, guests will enjoy pumpkin destruction by using:

  • the pumpkin cannon (that will shoot pumpkins through an unsuspecting automobile)
  • the hammer smash
  • pumpkin bowling
  • pumpkin pie eating contests
  • pumpkin crushing (a monster truck style exhibition where large trucks and other equipment will run over pumpkins)
  • the pumpkin drop (from a 40 foot lift crane)
  • pumpkin bombing airplanes
  • pumpkin rolling races
  • pumpkin mashing (with a tractor)

Guest may choose to bring their own family pumpkin or they may use some of the pumpkins remaining from The Rock Ranch pumpkin patch.

That's just good clean fun right there. I've watched the pumpkin cannon in action before, and it rocks. When we were there last year a pumpkin shot several hundred yards across a huge pond and bounced off a cow. Yeehaw brother, yeehaw.

The pumpkin cannon at Rock Ranch in Barnesville, GA

I also found a video of the pumpkin cannon, and surely there are more such things on YouTube. Happy Halloween y'all!

XmlNodeReader: An Easy Way To Parse XML In LotusScript (Monday, Oct 27)
[ permalink ] [ e-mail me ] [ ]

I've been toying around recently with ATOM feeds from Quickr, and lamenting the fact that there isn't an easier way to parse and read XML in LotusScript. So, over the past few weeks I've spent some time developing a wrapper around the NotesDomNode class to simplify the whole process. Here's what I came up with:

  • XmlNodeReader: an easy way to parse XML in LotusScript
  • It's kind of a poor man's XPath -- not all the functionality and power, but very easy to use and understand. For example:

    Set exporter = session.CreateDXLExporter(db, stream)
    Dim reader As New XmlNodeReader
    Call reader.ReadStream( stream )
    Print reader.get( "database.@title" )
    

    I used LotusScript.doc to generate the documentation and put together a few sample agents for you to play with. Hopefully it all makes sense to someone besides me. Personally, it's made it a lot easier to deal with XML in my code.

    Stuffed Mushroom Recipe (Sunday, Oct 26)
    [ permalink ] [ e-mail me ] [ ]

    A little off-topic, but I've posted recipes here before (like crab dip) so I have precedent. Anyhoo, we've made this stuffed mushroom recipe a couple times in the last few days, and it's really easy to make and a really good appetizer for guests.

    One note about this: make sure you use UNSALTED butter -- people who have commented on the recipe have mentioned that using salted butter makes it very... salty. Also, what I listed below has been modified slightly based on us not having any sliced almonds and using small/medium white mushrooms instead of large mushrooms. If you're truly using large mushrooms, see the original recipe for adjusted proportions.

    INGREDIENTS

    DIRECTIONS
    Remove stems from mushrooms and finely chop; set caps aside. In a skillet, saute chopped mushroom stems in butter until tender, about 6-8 minutes. Remove from heat; stir in bread crumbs and onion soup mix. Stuff firmly into mushroom caps. Place on a baking pan or cookie sheet; sprinkle with cheese. Bake, uncovered, at 425 degrees F for 12-15 minutes or until tender.

    Endless Streetcar Ride (Tuesday, Oct 14)
    [ permalink ] [ e-mail me ] [ ]

    There are certain stories and books that stick in your mind your whole life. For whatever reason, a bit of story or poetry will resound very deeply when you read it, and it will keep coming back and replaying itself over and over.

    A short story I read in seventh grade [I think... close enough anyway] did this to me. It was called The Endless Streetcar Ride into the Night, and the Tinfoil Noose, and I finally found it on the Internet so I formatted it and saved it so I'll always have it. Click the link, you can read it for yourself.

    A few things were interesting for me in the search for that story. It was really hard for me to find because I remembered ideas but not too many searchable details, and the details I remembered were ever so slightly wrong. I remembered something about a tie with an electric blue snail on it, and a deodorant advertisement that said "Do you offend?", both of which were almost right but not quite. "Almost right" is hard to search on sometimes. In fact, I've probably been trying to find that story on the 'net for a few years now, and it took this long to get the correct combination of search terms and available sources.

    Another interesting thing is that the story is even better than I remember it, which isn't always how these things work out (your mind can make grand memories out of plain things). I think I re-read it 4 or 5 times in the last day or so and it keeps making me smile.

    I also had no idea that it was one of the short stories from Jean Shepherd's book In God We Trust, All Others Pay Cash, which is what parts of the modern classic movie A Christmas Story is based on. I'm finally going to buy that book and read the whole thing.

    Anyway, you might like it too, you might not. And maybe in some sort of way it'll explain all sorts of weird things about me, I dunno. I'm just glad to have found it again.

    SnTT: Run JavaScript Via LotusScript (Thursday, Oct 9)
    [ permalink ] [ e-mail me ] [ ]

    UPDATE: I added some information below about my JIT debugger getting launched in certain instances, and how to disable the debugger.

    I almost had a need to call a JavaScript function from within a LotusScript agent the other day. It turns out that I didn't have to go that route in the end, but if I had it's actually quite easy to do -- at least if you're on Windows. Here's how:

        Dim js As Variant
        Set js = CreateObject ("MSScriptControl.ScriptControl")
        js.Language = "javascript"
        Call js.AddCode( "function add2(num) { return num+2; }" )
        
        '** NOTE: Eval() will not always trigger runtime errors, so you should 
        '** make sure to trap JavaScript errors with try/catch blocks
        Msgbox js.Eval("add2(5)")
    

    Pretty easy, huh? You just create an MSScriptControl object, load your JavaScript functions using AddCode(), and call Eval() with whatever parameters you want. It's even easy to modify any of the code or parameters at runtime too, so you have a lot of flexibility.

    You'll also see that I left you a note in the comments that a JavaScript runtime error that results from using the Eval() method will not always trigger a runtime error in LotusScript. For example, if your JavaScript function was "{return num/0;}" it would compile just fine, but when you ran the code and got a divide-by-zero error it wouldn't be obvious that an error occurred. You still get a result, but it's a really funky string ("1.#INF" for me).

    Be careful though. One of my machines has some JavaScript JIT debuggers installed and registered, and with certain runtime errors the code would halt and I would get prompted with this dialog:

    JavaScript JIT Debugger Dialog

    You wouldn't want this happening on your client machines, and certainly not on your servers. If you set the following Windows registry entry to 0 (zero), the JIT debugger will be disabled:

    HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings\JITDebug
    # a value of 1 will enable JIT debugging, 0 will disable

    In any case, make sure you have good try/catch blocks in any JavaScript code you run, and check your input parameters BEFORE you call Eval().

    Compile errors (i.e. -- bad JavaScript syntax) WILL always trigger a LotusScript error in the AddCode() method, though. You can catch compile-time errors (and some runtime errors) with an error-handler like this:

    processError:
        If (js Is Nothing) Then
            Print "LotusScript error: " & Error
        Elseif (js.Error.Description = "") Then
            Print "LotusScript error: " & Error
        Else
            '** for the various error object properties, see
            '** http://msdn.microsoft.com/en-us/library/aa227430(VS.60).aspx
            Print "JavaScript error: " & js.Error.Description
        End If
    

    I don't have any "real world" production experience with this technique, so I'm not sure what kind of performance hits you might get, especially if you run the same code a bunch of times or load up a really large amount of JavaScript to use for processing. However, if you have a few relatively small chunks of JavaScript code with functionality that might be difficult to reproduce in LotusScript, this might give you a quick win.

    Show NLCache Reset (Thursday, Oct 2)
    [ permalink ] [ e-mail me ] [ ]

    Note to self: when testing web applications on a Domino server, especially when you're changing group memberships and user access and ACLs to see what effects they have, issue a "show nlcache reset" command on the server after each change. You'll save yourself from pulling a lot of hairs out and wondering why security doesn't work the way you think it does.

    Thanks to Thomas Gumz and others for telling us non-admin-types these things.

    Oh, and I should be extra responsible by saying that you should consult your admin before issuing this command on a busy server with a big directory. But you ARE doing all your changes and testing on a development server, right?

    End Of September, Did You Donate? (Tuesday, Sep 30)
    [ permalink ] [ e-mail me ] [ ]

    It's the end of September, did you remember to donate to charity via Paul Mooney's website?

    While many of us are complaining about high gas prices, there are still plenty of people in the world who don't have a reliable water supply. Take a look at the video link from Paul's blog entry and see what you can do.

    CollabU, UKLUG, and Home for a While (Monday, Sep 22)
    [ permalink ] [ e-mail me ] [ ]

    Two weeks on the road, and I'm back at home settling in. I'm actually supposed to be home for the entire month of October (minus a quick family weekend trip), which will be plenty of time for everyone here to get sick of me again and start asking when my next trip is.

    Collaboration University was a huge success. Lots of smart people, the developer workshops were overflowing, and I got a few questions that I didn't quite know the answer to but could easily point the questioners to the right person to get an answer from (it's nice to be surrounded by experts like that). I'm not sure that either location was "better" than the other -- the Hyatt Center in Chicago has a beautiful office space designed by a firm who has also done some of the Apple Store interiors, and the IBM South Bank building is right off the Thames and has a great patio area where you can walk outside and watch the people and the river (during breaks, of course). I liked both places.

    The London event was immediately followed by UKLUG, where Warren and company put on what appeared to be an effortless conference. I know that's not true, since a tremendous amount of effort and planning goes on, but the event itself just seemed to go very smoothly. Warren himself did an amazing job of holding together, considering the fact that he was in bed with a horrible head cold just a day before UKLUG, yet looked chipper and happy on the morning of (apparently DayNurse and NightNurse contain a pinch of magic).

    A few random remembrances from the past couple weeks:

    And now, back to work.

    Fighter Pilots and Collaboration (Tuesday, Sep 9)
    [ permalink ] [ e-mail me ] [ ]

    I'm at Collaboration University Chicago this week (got a nice CU logo shirt and everything), and we just finished up Day 1 yesterday. The keynote speaker was retired US Marines Colonel Ed Hackett, a former fighter pilot as well as a person who has been very involved with both the Pentagon and the Joint Chiefs. It was an interesting keynote speech, because his take on collaboration is quite different than the traditional IT take on things.

    Among other things, he headed up a group of fighter pilots on an aircraft carrier. Not only is there a tremendous amount of communication going on to make everything go right, but if the communication breaks down, someone could actually die. Now THAT'S an environment where the quality of networking and communication channels are super important -- none of this mamsy pamsy "oh no, Twitter is down again" social stuff.

    Fighter Jets taking off from an aircraft carrier, via Wikimedia Commons

    It's amazing how many people are involved with the process of launching and landing a jet on an aircraft carrier. It makes sense if you think about it, I just never thought about it before. I always just saw the pilot, the guy on the runway making all the hand signals, and other people running around trying to get out of the way. In reality it's a huge coordinated effort between everyone out there. Everyone's communicating and keeping in sync.

    And that's just the takeoff and landing. The flying itself isn't just one guy out there solo either. All the pilots are talking to each other, and there's all sorts of information going back and forth between the plane and the ground crew. Plus, with all the chatter going on, there are ways to increase the priority of extremely important messages, so those get heard over the noise of the other communication.

    Again, very interesting, and a cool take on what we normally think of as collaboration.

    Agent to List Databases+Info on a Server (Friday, Aug 22)
    [ permalink ] [ e-mail me ] [ ]

    I meant to write this up last night, but I got tired and went to bed instead. So here's an early morning blog post for you.

    This is code for an agent that will connect to a server, get all the databases (and templates) on the server, and write a ton of information about each database to a comma-delimited file for your spreadsheeting pleasure:

    Just import the LSS file into a new agent, save it, and run it. You will be prompted for a server and an output file name, and in return you will get a CSV file with lots and lots of information.

    Note that I have only tested this on Domino 8 and you MUST have rights to run remote console commands on the server you run this against -- if you don't, you can get a subset of this information using NotesDbDirectory, but it's a LOT slower (I leave this as an exercise for the reader). Also, the code to get a list of servers is Windows-only, so you Mac guys may need to comment a few things out (not sure).

    Oh, and speaking of CSV files, the reverend Steve McDonagh posted a fix to my CsvReader class for those of you who need to use CsvReader on an iSeries box. Apparently you have to open text files in a very special way on an iSeries.

    Passport Renewal (Saturday, Aug 16)
    [ permalink ] [ e-mail me ] [ ]

    A couple months ago I realized my passport was going to expire early next year. I know I'll be out of the country a few more times this year (Collaboration University and UKLUG in London, and the View Developer conference in Amsterdam), so I figured I'd look into getting my passport renewed in January after all that travel was over.

    Well, then someone told me that some countries won't accept your passport if it's going to expire within 6 months of your anticipated return date. I thought that was strange, but I did a quick search (since Google knows everything) and sure enough it's true. In fact, you can even look up the country you're going to on the US International Travel site and check the passport expiration rules.

    Just to be safe I went ahead and renewed my passport. I even paid the extra $60 for the "Expedited" service since CollabU and UKLUG are next month, and I remember that a few people had serious delays with their passports before ILUG last year. Happily, I got my new passport less than 2 weeks after I sent the application off (along with my current passport, which was a little scary to be without) for processing. It's nice when things work the way they're supposed to.

    Ninjalympics (Wednesday, Aug 13)
    [ permalink ] [ e-mail me ] [ ]

    Tired of the Olympics? Too bad they're not televising the Ninjalympics:

    AskANinja Ninjalympics

    AskANinja also has the best explanation of the problem with Net Neutrality I've ever heard.