Komodo IDE Headaches

I’m slowly coming around to the idea that an IDE might be useful for PHP/Symfony projects (still not convinced about other languages and frameworks) and I’m currently trying out ActiveState’s Komodo IDE 10 on Linux.

It looks great but it’s… buggy.  One day in and I’m already getting frustrated with it.

  • The preference file doesn’t appear to be saved until the application is closed, if the application crashes it’s not clear that your changes will be saved.  This might be a safety feature, but probably not, because…
  • At least some preferences don’t take effect until the application is closed.  Not the ones that you’re warned about like checking remote files for changes, but other ones like ‘Allow file contents to override Tab and Indentation settings’ (which itself is unreliable since at least 2011).
  • When changing preferences, there is more than one place to change: Edit / Preferences, Edit / Current File Preferences, and Project / Project Preferences (the last is not under the Edit menu).
  • The cursor blinks by default (which is super annoying when you’re moving the cursor around the screen) and there isn’t an explicit option to disable it.  You have to create a custom JavaScript script that executes at every file open.
  • The toolbar icons are heavily styled, making their use opaque and the tooltips mandatory reading.
  • It has already crashed while closing — which, per the above, I’m doing a lot.

It’s not all bad, there are some really nice features:

  • Vi keybindings, so things like ‘A’ to start appending to the current line, or ‘/’ to search the current file, are really nice to someone who uses vim every day.
  • I do appreciate the ability to script things
  • The syntax highlighting and coloring seems more reliable (i.e. harder to confuse) than average.
  • The installation to a local directory was painless, and an icon properly shows up in the applications menu (I use Mate).  The default installation dir is to your home directory instead of /usr/local (which is the right thing to do for trial software, imho).

I want to like this editor, I really do, but it’s just going downhill as I work with it more.  At $250 per license it’s hard to justify the expense to my boss unless I really like it.

Raiser’s Edge, love, what were you thinking

TL;DR: In the SQL Configuration Manager, set the TCP port to a static one, if is trying to use Dynamic, and remove the Dynamic port. On the Server, go into the Advanced settings for the Firewall, and set Inbound rules for both the TCP and UDP ports, allowing them to connect. On the client, set Outbound rules in the Firewall manager for the same. Support Articles at bottom of post.

So, I do third party tech support for a couple of independent schools. Several of them use a program called Raiser’s Edge to keep track of charitable donations, and solicitations. This is all well and good, and the program certainly does the job, but sometimes it makes you want to down a liter of vodka and go home.

The set up: We had to replace a machine that was hosting a networked install of a Raiser’s Edge database. We didn’t realize it was networked until we got the call that they couldn’t access it from their laptop (crap).

The initial troubleshooting: First, we needed to uninstall RE from the laptop (the client computer). It would not go. Finally decided to reboot the machine to make sure RE was not running anywhere. Suddenly, the uninstall went like a breeze.

Now we needed to install RE from the network share on the server. We can’t connect. That took turning off all the firewalls on both machines to fix, but still, we could not get to the “Deploy” folder, that should have been the only available network share on the machine.

Turns out that the installer does not set that folder to be “Available” across the network. There was no documentation for that. Set it to “Available” and boom. I can see the network share.

Run the setup.

Install RE.

Try to run RE.

Start getting database errors. Native Error 17 – Can’t connect to the Database. Call Support and they say “Yeah, its probably the firewall.”

I was too irritated to tell them there was no firewall turned on, at first, but when I mentioned it, they said that it was possible an antivirus had blocked the ports needed. Go to this KB article and open the ports.

Yeah. Fine.

I go through the directions, figure out that SQL has a dynamic port, and follow the directions for that configuration. It doesn’t work. Fantastic.

Finally, Darling Husband o’Mine says, “Why don’t you specify the port it uses?”

So in the end, this is what worked:

  • In the SQL Configuration Manager, set the IPALL port to 1433
  • Stop and restart the SQL service/reboot the machine (I wound up rebooting, but YMMV).
  • On the Server, in Firewall Management, under Advanced Settings, set up Inbound Rules for the following:
    • TCP port 1433 open (or some open port)
    • UDP port 1434 open
  • On the Client, set up Outbound Rules for the following:
    • TCP port 1433 open (or whatever port you used on the server. THEY HAVE TO MATCH)
    • UDP port 1434 open
  • Install RE on the client machine from the Deploy share on the Server.
  • Test the connections.

If any of this makes no sense, here is the supporting documentation for all of it:

Good luck, and may the force be with you on this one.

Beautiful Code

The mark of a master programmer is someone who writes code that a novice can debug.
— attribution unknown

I read this quote, or something very similar to it, a long time time ago when I was just starting out.

I take the idea behind that quote to mean that master programmers have the experience to find the simplest solutions, which are easier to understand, but they also make their code easier to read so errors stand out.

It came back to me while reading a novice’s request for help in debugging something.  The example was a mess, with lots of extra activity, but it was also dense and poorly formatted.  The very simple bug was hard to see because of the sheer amount of code and the inconsistent formatting.

I strive to find simple solutions to the code I write, but I also strive to make my code neatly formatted and well-spaced.  I generally limit my lines to ~78 characters; I vertically align related operators; I leave space around operators.  This goes hand-in-hand with simple code: short functions that only do one thing; effective naming of things; do the least possible.  Together these generally make code that is both robust and easy to maintain.

I think of formatting to be like engineering a bridge.  Dense code is like big thick columns, steel plates, and stone architecture — it gets the job done, but it looks so heavy.  The best bridges are light and airy, full of empty space, yet they are stronger and more resilient.

PS: if you know this quote, and know who said it first, please drop me a line so that I can attribute it properly!

NiFi Build Error

I’m testing NiFi out on my local Gentoo installation to prepare for an implementation at work, and after a rather lengthy build/test process (“ten minutes” my fanny) ran into this error:

$ mvn clean install
[INFO] Scanning for projects...
...
'Script Engine' validated against 'ECMAScript' is invalid because Given value not found in allowed set 'Groovy, lua, python, ruby'

This error left me scratching my head.  Nothing related to JavaScript/ECMAScript dependencies were mentioned anywhere.  How would you get it, anyway?  Webkit, I suppose…

Sudden epiphany: this is a new Gentoo installation, and this program, including the build script, is running Java.  Gentoo doesn’t install Sun Oracle’s Java by default, but instead comes with IcedTea out of the box.  It’s acceptable for some simple uses, but is buggy for any complex. (Minecraft is a great example where it just doesn’t work.)  I haven’t used Java for anything yet, so I hadn’t installed the JDK yet.  The build instructions specify JDK 1.7 or higher, but I didn’t think anything of it because I’m used to just having it installed.

echo "dev-java/oracle-jdk-bin Oracle-BCLA-JavaSE" \
  >> /etc/portage/package.license/file
emerge -av dev-java/oracle-jdk-bin
...
$ mvn clean install
[INFO] Scanning for projects...
...
[INFO] BUILD SUCCESS

Finally!

NYC 2016

nyc vs boston

Finding your way in NYC really is easier

Meghan and I like to keep our kids exposed to the cultural world, giving them a cosmopolitan worldview.  I chose a job near Boston in part to allow frequent trips into the city.  But one city isn’t enough to give them a breadth of experience.

We took an overnight trip to New York City during February school vacation.  Discovery Times Square is currently exhibiting The Vikings, which is of particular interest to Meghan and Alpha.  (That isn’t to say there isn’t interest from me and Beta, they’re just that much more keen.)  Meghan found a great deal on motel rooms (the girls are old enough now that we need two) right by Times Square at Four Points by Sheraton.  The view wasn’t anything to write home about but the location can’t be beat: two blocks from Times Square.  The rooms were clean and neat, and the staff were bend-over-backwards friendly.  I would totally stay there again.

We drove down early Wednesday morning, dropping Butter off at Marty’s and picking up Meghan’s mom (aka Baba) on the way.  Baba loves going to NYC, she knows the lay of the land better than we do, and she’s a bit more adventurous than I am when the kids are around, so we invited her along.  She offered to share the kids’s room to keep costs down — and that provided peace of mind overnight, too.

Meghan yelled at me for this selfie. She insisted that it was inappropriate to do while making 75 mph on I-91.

Meghan yelled at me for this selfie. She insisted that it was inappropriate to do while making 75 mph on I-91.

We rolled into town around noon and got situated in the hotel with time to spare before our exhibit reservations.  We walked from the hotel and poked around Times Square for a few minutes.

woody and olaf

Click to expand

There were a pair of people in costume, one dressed as Woody from Toy Story and the other as Olaf from Frozen, soliciting tips.  They made their own costumes and don’t work for anyone but themselves, so Meghan got photos with each and tipped them a few bucks.

I continue to be amazed how many people are continually in New York City.  The crush of people feel like there’s an event going on somewhere, but it’s really just an every day occurrence.  Dozens of people at every crosswalk, hundreds of people on every sidewalk, all the time.  Boston has nothing on NYC.

alpha holding viking sword

Alpha holding a reproduction Viking sword

We made our way through the crowds to the exhibit and spent about an hour and a half learning about Vikings.  As an aside: the exhibit is self-paced and just about the right length.  They had a number of artifacts grouped into several themes about everyday life, instead of constructing a sequential historical narrative.

We waited to get lunch until after the exhibit so we were somewhat famished.  A few storefronts down from Discovery is a pizza and Italian restaurant called John’s of Times Square, located in a former church.  The adults had excellent pizza and the girls had excellent pasta.  It might have been a case of hunger making the best sauce, but probably not.

ulfbehrt sword

There’s a great NOVA episode about the “mystical” Ulfberht sword

After lunch we shopped around Times Square a bit.  Alpha bought a New York-emblazoned sweat shirt and Beta got a pin for her hat.  Baba noticed that Phantom of the Opera was playing right in front of us, so she bought three tickets for 8 o’clock that night.  Beta wasn’t interested and I was wiped from driving all day; we chose to stay in.

We wandered back to the hotel to rest up.  I had to step out in search of a pharmacy: we had a snafu when we left the house and forgot to pack our bathroom stuff.

meghan and alpha at phantom

Waiting for Phantom of the Opera to start

Our motel offers complimentary dinner stuffs on Wednesday nights.  We were just coming off of lunch, not particularly hungry, but the food was delicious. Free wine and beer, too!

We finished dinner and Beta and I headed up to our room to watch some TV and get ready for bed.  Meghan, Baba, and Alpha headed out to their show, and didn’t get back until after I was asleep — sometime after 10:30 pm.  They said they had a great time though!

We started the next day with an excellent breakfast buffet at the motel.  We seem to have a knack for choosing motels with great breakfasts; it really makes dollars stretch further if your breakfast is hearty when you’re traveling.

We decided that we could fit in one more museum visit before leaving town.  The American Museum of Natural History was on our way home and is always worth a visit.  We also considered the USS Intrepid but decided to save it for another visit so we can give it the amount of time it deserves.

wrong-way shadows

Notice the shadows. The sun is rising off to the right, but the cars are throwing shadows the wrong way. The strange beauty of a city made from glass.

We got in early and encountered almost no waiting to get into the parking garage and admissions line.  We had three destinations in mind: the dinosaurs, the blue whale, and the gift shop.  We got to see all three, in that order. The life-size blue whale model is stupendously large – and that’s after seeing the full-size apatosaurus for comparison.

baba and girls

Driving home (click to expand)

We made our way out of the city around 1 pm.  We didn’t want to get home too late, and the drive can take upwards of six hours with stops and detours to Willimantic and Hampton. The ride home was uneventful, traffic was mostly light and Waze didn’t let us down.  Butter the dog was very happy to see us when we picked her up, and I was extremely happy to sleep in my own bed.

Jones Family Outing

The Mystic Jones Clan met us at the Museum of Science today.  They’ve never been, we’re long-time members with a fistful of free passes, and the various cousins love seeing each other, so it was a date.

We planned to meet at the museum, but our first hurdle was knowing what time they would arrive — it’s a 90 minute drive for them, but only 20 minutes for us.  We made a rough guess on when to leave, and happened to get into the parking garage two cars before they did.  The museum garage was full, so we both wound up in overflow parking around the corner at the Galleria Mall.

lightning exhibitThe MOS is the MOS, which means we all had a good time.  Half of us got to see the electricity show, half chose to play in the animal displays.  We all got to play in the hands-on bits in the ‘models’ exhibit.

The youngest cousin is not quite six, so we finished with the museum after not too long.  He had fun monkeying around in the Discovery Center for a while, but even that’s not enough for a six year old to last all day.

Meghan and Mu

Meghan kept little Mu busy and entertained. When he snuggled up in a sleepy-little-kid pose we had a collective realization that he’s tired.

We wandered back to the mall to grab a little food and figure out dinner.  A mall-wide fire alarm kept us outside for a bit, but eventually the fire department showed up and disabled it — false alarm.  We considered our options while running around Newbury Comics and settled on an early dinner at P. F. Chang’s – right outside the mall.

The food was excellent, the service was terrible, the kids were acceptable.  Meghan got in some little boy time, giving Katie a break.

As the sun went down, some flurries kicked up as a fresh storm prepared to roll in overnight.  The Mystic Joneses had a long drive home so we all packed up and headed out.

lighting show

The Lighting Show in the Theater of Electricity, at the Boston Museum of Science. Meghan thinks the bolt looks like a dancer.