Wednesday, October 30, 2013

Halloween Fun: Jekyll and Hyde (Club)

My family (and by family I mean not only my wife and son, but my parents as well) came to the city for an early birthday celebration, and part of that visit was a "dinner wherever you want."

This of course leads to a series of minor hijinks in its own right, as is typical for the way life moves along. I thoroughly enjoy Halloween, horrors, and general spookiness, and my Mom is not a fan of many of the places my wife and I typically enjoy, so I thought I'd finally try the haunted scary house themed restaurant near the Port Authority (with the conveniently located A-C-E subway line only a short walk away...like, across the street from the restaurant) that I'd been eyeballing whenever I happened by that area.

I thought it was called the Jekyll and Hyde Club. I'd even seen a vehicle driving around Manhattan with skeletons and zombies, making it seem like it could be a cool experience. My parents, as part of my birthday, sent some money along with a note to get in their club membership so we could get seated more quickly.

I don't often go to Times Square. It seems most New Yorkers don't need to elaborate on this explanation, but for those who aren't living here, I'll just say that my idea of fun isn't having to shove through a mass of shambling tourists and leave it at that. I kept putting off getting the membership until my wife came to visit over Comic Con weekend, when I knew we'd probably, at some point, end up going through Times Square.

My wife looked up the restaurant for some information. This was when Google said the restaurant was permanently closed.

"That doesn't seem right," I said. "There were people soliciting guests outside not long ago."

She noted the address and said, "We could take a look and see, just to make sure."

We started heading to the address when I realized this was not the restaurant I thought it was. I was actually thinking of Times Scare, and the Jekyll and Hyde Club was something totally different. Whoopsie.

When we arrived, we discovered that no, it was not closed permanently. It was quite busy, as a matter of fact, with a very, very long line to get in. We weren't looking to have a meal; we just wanted a membership. We talked to the guy controlling the line at the entrance, and he pointed us to another door that led to their gift shop/exit.

It was at this point that we found a contrast to another restaurant that offered memberships; when we first went to Bubba Gump's in Times Square, we were offered their membership; one of the bonuses was to get early seating. We pay extra for the membership, we get to jump line.

Both the doorman and the girl at the front desk said we could get a membership, but it would not allow for us to jump line that night. "It wouldn't go over well with the people in the line," said the doorman.

We assured them that wasn't our goal, but rather we were preparing for a return trip in a week or two. It was a little off-putting to be reminded that we were paying for a privilege that was essentially worthless upon joining, however. I suspected they wouldn't have minded us using the membership card for discounted and members-only purchases in the gift shop, though.

Upon joining, we got a few items to designate our membership status. One, a cardboard membership card; I'll admit, I was a little disappointed that it was cardboard since that meant it would be less resistant to damage in the wallet. I was hoping for a plastic card. But as long as it serves its purpose, I suppose that's good enough for me.

In addition to the card we received a pin and a huge certificate of membership; like, posterboard sized. The pin was a nice touch; but I don't normally wear pins. The giant certificate was puzzling to me because it was rather impractical. Theatrical flourish, perhaps? If so, it fits with the theme of the restaurant.

Fast forward to the dinner. True to the promise of the membership club, we showed the doorman our membership card and he pointed us back to the same door leading to the gift area, instructing us to show the clerk the card. We were then pointed up a set of stairs to be seated by the hostess.

The skeletons seemed to be a nice touch.
The restaurant is filled with various statues and knicknacks that at a glance seem to be for gloomy ambiance.

The case has skulls and heads. The Pharaoh's mask reminded me of Stargate.  

Turns out many of these objects are animatronic.

And the ancient dead king spoke English pretty well, too
A giant elephant's head, a mermaid, an organ-playing skeleton, a gargoyle, even a werewolf took turns doling jokes and birthday wishes. There were also a few announcements over the loudspeaker from the security department warning people not to eat floor meat, as it was a trick from the people living under the stairs to lure club members to their death.

In addition to the speaking knicknacks and statues were costumed actors engaging the diners in character. We talked to an assistant to Dr. Hyde and a "social director" for the club. I can only imagine how awkward it must be for them to have uncooperative guests, and imagine they often do encounter them. I don't envy their jobs at all, but they do add to the ambiance.

After a few rounds of the talking statues a live show was performed on a stage below us.

Rise! Rise! And shine!
The restaurant was definitely geared for a spectacle, like a Gothic dinner theater. The food was decent; not outstanding, but definitely not bad. My son actually ate most of his fried chicken and mashed potatoes, as did my father with the same order. The tomato-based sauce with my cheese tortellini (pomodoro?) wasn't my favorite, but overall not bad at all. We also had nachos as an appetizer, which were also good but not great (MORE CHEESE PLEASE!) in my opinion.

Oh, and I got a signature glass with an order of a Zombie. I like getting signature glasses at themed restaurants.

The theatrical display, the ambiance, and the actors were pluses. The biggest drawbacks were the prices and our waitress.

Don't get me wrong; this was only slightly more than Manhattan expensive in terms of restaurants, and there were five of us at the table bringing a bill to around $200. This was quite a splurge, one I don't anticipate repeating for a very long time! But it was to be a special birthday dinner and apparently my parents had been saving up for the occasion. The menu had a note warning customers that the bill adds an extra $3 per person as an entertainment fee, on top of the Times Square food tax (read: tourists tend to pay extra to eat in Times Square.) For most people from my home area, this would be quite a sticker shock. On the other hand you have to think of this as not just dinner, but dinner and a show. Then the pricing makes a little more sense.

Plus I got to keep the signature glass.

I should also note that the desserts my mother and wife ordered were, from what I was told, "Awesome!"

The other drawback was our waitress. Service was beyond slow. The actors talked to us before the waitress. We at first thought another table was being a pain, as we thought we saw her taking several plates back to the kitchen. But even factoring that in, it really was taking too long for her to get to us, and another waitress (hostess?) came to take a drink order for our table to "help her out."

When she did come to our table, she didn't really pay much attention to our table. Rushing, perhaps? Distracted? Uninterested? Even when she asked about dessert, my mom said what she wanted, and the waitress replied with, "I'll get a dessert menu."

I can understand the menu may be for others at the table to look at and opt to order from, but the way she said it came off sounding like she ignored my mother's order. I found this annoying at best.

I prefer to think of incidents like this being isolated one-offs; the waitress could have been overloaded, perhaps it was a bad night, perhaps the kitchen was causing problems. I don't know. My opinion usually goes full-anger if there's a repeated pattern, and since this was a one-time visit I can't tell if there's a pattern against which to judge. So this one visit marks the service as "annoyingly slow."

The last thing to mention would be the gift shop. It, too, carries the Gothic horror theme, decorated with items such as traveling trunks stamped with the White Star line (Titanic history, anyone?) and Dr. Jekyll's name. The walls had bookshelves that doubled as hidden doors, probably to the haunted house attraction we didn't buy tickets to. There were a number of interesting Halloween-esque trinkets available, with discounts for members and some items marked for purchase by members-only.

Overall it was a good experience; I'd have to say that the entire meal was meant to be an experience, rather than just a meal. It was definitely a fitting prep to the days leading up to Halloween.

Friday, October 25, 2013

I Made a Podcast!

I've been experimenting with a few creative outlets.

The blog is one obvious endeavor. I get to express myself into the great nothing; sure, few people will see it, but it still exists. It is something that in a way affirms I was here. And I had opinions. I'm very full of those. And what are blogs for if not to tell the world what you think and why you think you're right?

Another side project is programming. I've always had a partial attraction to it; I want to create applications, websites, things that are useful. Yet I've been held back, ironically, by my lack of knowledge. I end up feeling inadequate, and quite frankly, too stupid to actually accomplish something. I've been making tiny steps with my current skunkworks application project but keep questioning myself the entire time, feeling that if a "professional" programmer saw it he or she would wonder what kind of neophyte baboon could have created such spaghettified crud, let alone something that looked like that and still compiled.

Which re-reading I suppose is somewhat ironic, since the project I plan to take up after this one is going to be based on Ruby, which doesn't compile. But that's besides the point.

A third project I've toyed with starting is podcasting. There was a time I thought of trying my hand at being on radio; after all, I'm opinionated, I'd like to think I'm reasonably articulate, and if you look at pinheads like Sean Hannity and Bill O'Reilly, they're proof that intelligence is not actually required to do well when broadcasting your opinion.

But like so many projects, this was kind of a daydream. The company I'm working for puts out a podcast on an irregular schedule, but I eagerly listen to it as it's being recorded. I had a vague idea of what was involved in creating a podcast and setting it up to distribute, but never fully dove into the steps.

My manager periodically checks in asking how the job is going and what is on my mind. One day I brought up the idea of podcasting, and he said he'd help out.

Rather than keep waiting until the "perfect moment" to do it, I borrowed a page from the "how to write a book" podcasts I've listened to in the past. I just did it.

I set a time to record with Pete, he set up some software to record a Google Hangout, we came up with a topic...a theme, really...presentations. Because part of the goal of doing the podcasts was to improve public speaking skills. And we talked for about half an hour about presentations.

A little cleaning, adding some intro and outro music, and after much fiddling with establishing accounts, I managed to get uploaded and configured as a podcast!

There's not much of an audience. You can count the downloads on two hands, actually. But that's kind of freeing at the moment because there's not much chance of anyone complaining about how offended they are. And at the moment we're trying to establish what kind of podcast it is. Geeking After Dark is basically "geeks discussing their lives," which could be about just about anything. Because we're geeks. And we're talking about our lives and stuff that interests us.

In addition I'll be working to get some of our coworkers recorded, to hone interview skills. There's room for improvement...but to be honest, as first shows go, I think the first one wasn't all that bad.

I'm a little nervous about advertising it with only one episode on the feed. This one episode doesn't really define the whole planned series; it's...well, just one episode. Things are going to change, things will hopefully improve.

In the end, I did it. That's the important thing. It's not perfect. But I did it.

Like my blog...I'm not a great writer, but I'd like to think I'm improving. And for a long time, I didn't do this because I was afraid. I was afraid it wasn't good enough. That I wasn't good enough. After many months of blogging, I still have hardly any audience, and maybe that's a sign of my lack of skill. Or it's a sign of my lack of marketing prowess. But the important thing is I did it.

And my programming project. I have an almost crippling sense of inadequacy when it comes to m programming skill. And I'm a green newbie when it comes to programming...all the time I could have been creating things as a hobby were squandered on other things. Until I finally decided I should do something about it. And I did it. Well, I started it. It's a work in progress. The important thing is there is a project file on my hard drive that compiles. I did it.

And now I have a podcast. I don't have much in the way of validation that I'm doing something right. Or wrong. I just decided I wanted to market myself and my opinions. I wanted to do it. And now...I did it.

Cross something else off the bucket list.

If someone reading this blog happens to be curious, the podcast is Geeking After Dark. You can read about it at the Geeking After Dark blog, and follow us on Twitter. Or search for Geeking After Dark on iTunes.

Listen to us and leave comments on the blog! Constructive feedback is welcome!

Sunday, October 20, 2013

Hi! I Recommend This Site, Twitter!

I recently had a few emails pop into my inbox from Twitter; notifications from my Mom direct messaging me. That in itself was strange since she rarely uses Twitter.

The message consisted solely of, "Hi! I recommend this site <link>"

Of course that had an actual link embedded.

My first thought was that malware was hijacking her system or my parents had given permission to a third-party website or application to post to Twitter on their behalf. She's using a Macintosh, so while it is less common, it is still possible her system had malware hiding on it.

I emailed instructions to check and revoke third-party application access to my parent's Twitter account;

  1. Log into Twitter.com
  2. Click the gear icon in the upper right corner
  3. Click "settings" from the menu
  4. Click "Apps" from the left-hand menu list
  5. Review the applications and revoke access from anything you don't recognize
She emailed back that she followed the directions and nothing was listed. That sounded plausible given that she rarely used Twitter in the first place.

I verified with her that she had antivirus running (she did) and told her to run a check on her system.

A few hours later another Twitter DM appeared. "I advise to visit the link <link>"

This was followed by another link a few hours after that, the text of which more closely resembled the first message. It was at this point that it occurred to me my reflex was to assume the system was compromised; I had grown up in a computing period where the home computer ran applications, not "the cloud."

It appears that we've given up control of many of our services and accounts; we trust companies to keep our information safe. This was an example of when this trust goes awry.

The messages must have been originating from someone logged into the account from an unauthorized location; I emailed my parents and told them they needed to change the password on their Twitter account. I got an email back a relatively short time later that they were going to change it, and I haven't had another DM from their Twitter account.

I started searching around the Internet. Surely, if this is a spammer attack of significant size there must be some mention on the Internet about it, right? Maybe Twitter is even doing some work to isolate and block the spammers?

The results were disappointing. I found little, if anything, to go on. I actually found only one article that directly addressed the wave of spammer DM's and advised changing your password as a post-discovery fix.

Another article made mention in passing of this particular spammer attack, but primarily made reference that Twitter had changed something preventing DM's from using links to non-authorized URLS. The article went on to say that the URL blocks were actually acknowledged by Twitter to be a bug. Even so, the spammers were working around it by linking to other tweets (apparently that was working for them.)

Indeed, monitoring a search for the phrase "I recommend to visit the link" on Twitter didn't take long to surpass 1,000 found instances. 

Seeing as the popularity of the Twitter platform isn't about to go away soon, it would be nice if they had more options in place to protect your account. I tried searching for 2-factor authentication, a feature I use on Google already and while it can be annoying, it definitely adds a layer of security that not only keeps others from breaking into the account but also notifies you when someone attempts to break into the account. When I try to access my GMail account (or other Google service) from a computer or application not already authorized for access, Google sends a verification code to my phone. I must enter that code within a certain period of time or the token expires.

Twitter kind of hides this feature. Once you log in and click on the gear, then settings, click on Security and Privacy. From there, select "Send login verification requests to <phone number>". They already had my phone number entered from another setting change I had entered so I would assume that if you never set it up before it will ask you to enter the phone number. In my case it simply sent a text message to my phone saying that it could send messages to that number and the website asked me to click yes or no as to whether the message arrived (why didn't it send a verification code? I don't know...) before asking me to re-enter my password to verify that I wanted to make this change.

I know 2-factor can seem like a pain; I myself was hesitant to use it until I was pushed by policy implemented at work. But once it was in place we began to get reports of people having attempted break-ins on their accounts; these attempts would not have been known if it weren't for 2-factor being implemented, or at least not known until the damage was already done. It was then that I started using it on my personal accounts.

In this age of outsourcing the storage of personal information to social media I've come to see that it is imperative we take measures to protect our online identities. That includes the use of the annoying but useful 2-factor authentication.


Tuesday, October 15, 2013

Project Breaks

Sometimes life gets the better of you. I knew time was passing without having put any blog posts in the queue, but I didn't realize how much time had passed. It was one of those, "It's been awhile since I wrote something into the blog...I should do that," type of deals. It was easy to put off since I didn't have an audience clamoring for fresh posts to read.

But still, I didn't like leaving it too long.

The truth is I've had a couple other things going on. This past weekend my wife came to the city and we spent three exhausting days running around New York Comic Con. Panels, cosplay, panels, shopping, and of course, some more panels. My wife went home with some gifts for my son, like a recent issue of Nightwing signed by Kyle Higgins and some t-shirts to show off at school.

She was ecstatic about having seen the cast of Walking Dead; it was probably the only TV-show panel that had the majority of the cast on stage, and they really seemed like awesome people.

This week the office is hosting our remote employees in the community, developer and systems administrator groups. That's a lot of people in our office space, pushing us to capacity and then some.

In yet another bit of news, just before my wife came to town, a coworker and I started recording a podcast. We had been discussing it and coming up with topics to use in the program, but kept putting it off. Finally I kind of made the decision to just up and do it; we recorded the day of our company town hall, held bi-weekly, so we could use that as a kind of reminder of when to record. It's not perfect by any means; we recorded on the cheap, using headset mics and recording over Google Hangouts (since we were remote and couldn't work in the same room.) We definitely could use better microphones, and we may have to experiment with audio processors to properly clean things up. But if we waited to get things just right we never would have ended up actually getting it done.

We recorded, he cleaned up the audio, and when I could sneak in some time here and there I worked on the album artwork and configuring a blog, the hosting account and the iTunes feed after doing some tiny post-editing on the MP3 file. I just got these things working; as I told my coworker, the programming side project I've been talking about was put on hiatus and I was hoping to get the podcast posted within a week of the recording, which I miraculously did, despite also telling him that I was going to try to get the podcast worked on over the weekend but realistically I wouldn't get much done over Comic Con weekend, as I knew it would be exhausting.

All of this comes down to the point of the post title...the need for breaks. Sometimes things come up and priorities shift. We all get the same 24 hours in a day, but there are times where the things we want to get done have to take a back burner.

The Month of the Busies isn't over yet. I have family coming next weekend in preparation for my birthday-when-it's-not-my-birthday. I'm not sure how much I can get done in that time. And of course this happens to be a birthday where I need to get my license renewed, meaning another trip back home in the near future. All of which tends to interfere with getting things done.

On the other hand, taking a break from my projects may mean returning to them with a renewed sense of purpose and energy. Plus, I'm experimenting with podcasting as an outlet for creativity. I'm not sure where it'll lead but it might feel rewarding. Breaks in routine can be both a source of anxiety ("I'm not getting anything done!") and source of perspective ("The world didn't end despite not having finished XYZ when I wanted to...and look what I made instead!")

I suppose I can chalk up several "me-time" projects now. The personal blog. The podcast. And the program. The biggest challenge will be scheduling them to fit into the same 24 hours that up until now I've been complaining about fitting only two projects into!

Tuesday, October 8, 2013

What Makes You a Better Programmer?

I wrote previously about my dip into the pond of programming after taking a bit of a hiatus.

Every time I look at the lines of code I've written I question whether there was another way I should have done it a different way. Should this be in a subroutine by itself? Is there an easier way to do this? Am I missing something that would be obvious to an experienced programmer?

I'm not sure if the second-guessing is a symptom of learning or a symptom of my own lack of confidence. Perhaps it's a little bit of both.

What I've generally been doing is pushing the application to do what I want it to do, to a minimal degree, while making some small notes about things I should do later. Little things like actually checking if a network connection was made rather than assuming it got the expected responses the applicatoin needed, and not overwriting a file of cached data with an error message from the servers. Better error checking. Wiping test assertion and debug message boxes sprinkled into the code.

I'm trying to make something functional to the point of demonstration.

I'm trying to make scaffolding, a facade; something good enough that I can go back to smooth the rough edges.

This also means that I'm cutting corners. I didn't write a spec. Only after making significant progress to a working application did I stop and create a pseudo-spec of how I wanted it to work. By not putting in the planning I'm creating things on the fly, and so the application logic probably isn't as clean as it could be.

It feels like it's close do the "demonstration" status. But doing it the way I have...feels amateurish. I think I pictured a "true programmer" as not going through stages like this, just whipping out functional code from the get-go. They get an idea in mind of what they want, sit down, and just keep ripping through function after function until a shiny, properly functional application pops out of the compiler.

So how do I become better?

I've heard some say that you just get better by doing. Want to become a better programmer? Program!

I never really believed that. Not fully; I think it has merit to keep in practice by doing something, but only if you do it correctly. If you are doing something incorrectly, you're simply reinforcing doing it incorrectly.

I told my manager that I was working on a project to enhance my programming awesomeness and he seemed glad I was working on it. I didn't get into much detail on the project...I wanted to wait until I had something to show. I brought up looking at my old projects and being appalled at the sloppy coding.

"I hadn't even sanitized the input! Sure, it was an internal project, internal network, and the chances of something bad happening were slim, and I put the whole thing together in four months, but still...even in the notes for the project I acknowledged these shortcomings."

"Well, at least you knew of the problems."

Maybe part of being a better programmer is realizing the shortcomings in your program.

What are the hallmarks of becoming a better programmer? Recognizing issues with your programs? Being able to sling lines of code without a second thought and have it compile the first try? Simply spending time programming, programming, and programming some more? Or are there other things that make you better (and how do you measure the baseline for improvement?)

Wednesday, October 2, 2013

So You Resell Your Software, But Don't Support It?

I ran into an interesting problem recently that left me with a rather poor impression of a company. I won't name them...simply because you have to be on my "burn that ridge with napalm" list...but perhaps there are others that have run into similar situations.

This particular software is one we use every few weeks for a rather important company function. Upon launch, it checks for an update; this tale begins with one such update. The most important machine in the chain ran the update. The application launched.

Then it crashed.

Relaunch. Crash.

Restart. Log in. Launched, crashed.

Uninstalled the application. Re-ran the install. Launched, crashed.

Well, dammit.

Dual-booting saved us at this particular point, but afterwards I tasked myself with getting it working again as it should. After running through logs and searching for leftover cruft from previous install attempts, I was stymied.

Next step; Google. I was mildly surprised when searching for the product by name I had barely any appropriate hits. I should have realized this was a sign.

Next I went to the vendor's site and searched for their knowledge base. Instead of a repository of repair information, it was documentation for how-to's and tutorials. In fact I don't think I ever found a "solve your problems" list.

Maybe it was a corrupt installer. I looked for their downloads page, which only had a couple miscellaneous plugins available and were of absolutely zero use to me. At this point I'm thinking, "What the hell?"

Okay, next step, contact support. I despise phone use; email gives me a reference to go back to, and I can easily share what's transpired if I need someone else to take over. I located an email address and sent details of my issue. For some reason this was met with a reply from what looked like an out of office auto-reply from a company trainer. Are their tech people also the trainers?

Fortunately someone else replied from their company fairly soon after. We traded some messages before he said that there was an issue they were now tracking with that version, and asked if we could install the previous version.

"Sure! Where can I download it?"

He sent a link. I clicked it. "You must log in." Dammit.

Ummm..."register"...click.

Name...email...why do they require my mail address and phone number? I just want to download this bloody installer and be done with it!

Submitted the request, but instead of the usual "Check your email, hosebag" reply I got a page telling me they had to review my request. Wha?!

I emailed the tech what I ran into, and he replied that he asked that team to expedite the request but they couldn't find that we were eligible for support.

...wha? Keep in mind the software was put in to control a system in our new office that had literally just celebrated...that day...it's six month anniversary. We were actively using this system. I doubt we'd be out of any reasonable support window.

"Are you a reseller or did you get our software through a reseller? If so you'll need to contact them."

I was surprised. YOUR company name is on this. You have a potential fix for a release of software that looks like YOU broke. What exactly is the harm in giving me this solution?

I sent messages to the person that did the original installation and found that yes, we had acquired the software through a reseller. I contacted their support, summarizing my previous exchange. I got a message back with the older client attached along with a note that they were changing something on their side to revert to an older version of the software when updates were polled.

I installed the older client...and it worked.

So the original company apparently resells their software without rebranding, and the reseller acts as a gatekeeper for their clients' updates. I wonder how many requests they get when someone is trying to troubleshoot a problem and wasn't aware the install came from a reseller?

More to the point, why is their support information and client software behind a registration wall? As far as I know the software is useless without extra server sauce. It's certainly not important enough to lock it away. I just need a problem solved, and your name is attached. If you're doing it for marketing purposes, congratulations, you ticked me off enough to not want to talk to your salespeople because I just wanted to solve a pressing problem. Did I mention I hate arbitrary roadblocks to getting an otherwise simple task accomplished?

Here's the thing. When I have a problem, I just want it solved with minimum hassle. At the time of the original failure, I was pushing a critical deadline. Asking for more information for your spam list was not winning points with me (good luck sending mail to that office that may or may not exist at that address, by the way. It's a jerk thing to do, but it kept me from getting more irritated.) What a reasonable company would have done is worked to make the customer...who already associates your name with what was becoming a growing irritation...happy. Because, presumably, it was your code in the first place. Otherwise you're outsourcing your reputation.

Which is fine, I suppose, if the resellers are stellar in the first place. And the reseller here was minimal hassle, fortunately. It was just that I, coming into the situation, didn't realize I had to contact a third party to handle the issue.

"But what if the reseller had custom settings in their deployments, so the original company couldn't give you their Clint without breaking things?"

That's a reasonable reply. If I were in charge of that project, though, I'd still look for ways to protect my brand and make it easier on the end client. For example, skin the program with a theme for the reseller while relegating your software to a plugin or codec. If possible, register the software in a way that you know XYZ uses the software but it was purchased through reseller ABC - use a version code somewhere that you'll know that is from a particular reseller. I'd still be irritated, but it could save some time instead of tricking me into trying to register for another absurd paywall.

Last thought: I really hope while you're outsourcing your reputation, you at least have a lot of active communication between your tech support and the support departments of your resellers. I'd hate to imagine how irritating it would have been to be forced to have a drawn out back and forth with a third party reseller only to eventually discover your code was broken at the originating vendor.

I'd probably have named you in this post if that happened.

Friday, September 27, 2013

First Week of Programming Re-Introduction

As I type this I'll be wrapping up about a week playing with a programming mini-project. I'm scheduling it to come out much later than that, of course, which is why I'm saying quite specifically, "As I type this..."

I'm sneaky like that.

I originally wanted to work on a project using Ruby on Rails. I've been reading Why's Poignant Guide to Ruby during off-time and occasionally during lunch at work, but the practical hands-on project I've been working on is written in Visual Basic .NET.

Yeah, I know, Visual Basic. I already explained why in a previous blog entry.

What have I learned this first week?

I'm still re-familiarizing myself with details of how things work in VB and Visual Studio. I'm no doubt making some tasks harder than they need to be; a side effect of practical inexperience. Re-learning...not as bad as learning, but frustrating when you know you've done something before but just can't remember it.

It doesn't help that I'm not focused for periods of time on the project. I tend to work on it for an hour or two a day, after coming home from the office. I get home a little late, I watch something while having some dinner, then work on the project, go to bed later than I should, wake up, yawn, and wish I had gone to bed sooner. Repeat.

The last thing I really learned was that Joel Spolsky was right; write a spec.  Or for a small one-person project, take the time to plan out what you're doing. I have been doing the seat-of-pants approach to this mini-project, primarily focusing on "here's what I want it to do, and to do that, I need it to do X,..." then I tried to create X. Then identify the next obstacle and work on that. I didn't know if I was really going in the right direction so much as I was creating a series of fixes that may or may not repeat functionality or at least overlap.

That's pretty much the project summary. A lot of re-familiarization and a hint of re-planning with a few drops of wishing I could dedicate more than an hour a night to it. Is this how most software projects work if it's not your day job? Because for me it gets just plain frustrating (in addition to the frustrations of running into logic problems and figuring out why something just doesn't work.)

Wednesday, September 25, 2013

Blogsy: Blogging on the Go

I enjoy blogging. I never claimed to to be great at it and I don't have a substantial number of readers, but I find the practice of writing to be cathartic. Sometimes it's even helpful, as I forget the keyboard shortcuts to applications like Screen and OH HOW HANDY I posted them on my blog.

I also find myself traveling around quite a bit. I probably find myself on a bus back to my home in PA once a month, and that bus trip is between three and four hours long.

Ugh.

Sometimes I fill the time with podcasts or reading. But other times I want to feel more productive. Writing a blog post entry scratches that itch nicely.

Of course there are a few problems.

I tried using the laptop. Being a bus, there really isn't a lot of room to get situated with a laptop, but I've managed to do it. The next obstacle I commonly encounter is internet access; I don't have a cellular hotspot device, my phone doesn't support tethering and even if it did, you're either unfamiliar with traveling through PA or wildly optimistic to think cell coverage would work without frequent drops. Some of the buses offer wifi, but they are still tethered to the cell network and prone to dropping out; that is, when they have wifi working at all.

My wife bought me an iPad Mini as an early birthday present. I thought, "It's small but not too small, I don't mind the keyboard, maybe there is an app to blog on the iPad..."

I thought there would be many. There weren't. The ones I did find weren't that great.

I stopped searching when I found Blogsy.

Blogsy worked with Blogger (required!), let me access photos on my iPad (handy!) and format my text (nice!).

Best feature for me: no Internet connection required (perfect!). Blog posts could be composed locally and uploaded later, meaning the crappy bus wifi wasn't an issue (unless I needed to research something or test links for a post...that got a little irritating, but was hardly Blogsy's fault.)

Another bonus: Blogsy can access many other sites to link content to your posts (when there's Internet access, of course.) The right side of my screenshot has an iconic display of services like YouTube, Facebook and Picasa in addition to the local photo storage.

Another feature some users will appreciate is access to the raw HTML with the swipe of some fingers. So far I've had to use it to tune the positioning of some tags for links, but if you like exact control over the appearance of your posts then this is a surprisingly handy feature to find in an iPad blog editor.

New users can be easily overwhelmed with the interface; Blogsy has PLENTY of documentation available as well as training videos and FAQ's, both on the website and linked within the app.

In my usage of Blogsy I've had two consistent issues. One, the publishing date setting doesn't seem to like to hold the date while I'm editing. It's FANTASTIC that I can still control when the post goes up, as I'm often queuing posts to appear over the next several days, but the Publish Date setting seems to like resetting to "Auto" instead of the specific date and time I set.

The second issue is the disappearance of my text behind the virtual keyboard as I'm typing. I'm not sure if that's a Blogsy thing or an iPad thing; can the app detect when the cursor is disappearing from view? I end up having to pause and scroll the page so I can review what I'm typing.

Feature requests? It would be nice to get some stats off the blog using Blogsy. For example, how many views has a particular post received? Perhaps the authors of the app want to focus on Blogsy as a posting editor more than a blog management platform, but when the app already has nice touches such as the word count I think statistics would be an equally nice touch.

Bottom line, if you enjoy blogging and occasionally want to write while at the park (as I am doing with his entry) or some other location where a laptop is a hindrance but your iPad is handy, give Blogsy a try. It's inexpensive and has more features than many bloggers would end up using while being compatible with every popular blog platform out there!

 

Friday, September 20, 2013

What's Wrong With Visual Basic?

A blog post entitled "To my daughter's high school programming teacher" has been making rounds online. I was curious about it after several retweets in my feed, so I read it.

There are a few things that the letter addresses. My background in the education system gives me a slightly different perspective, but I won't bother getting into the more popular issues it raised. It's already being repeated and rehashed online and all over. So much so she already issued a few updates and a followup post. It would be pointless to rehash the brogrammer culture, even though in this case it's more of a high-school moron culture.

The thing that kind of stood out to me was item number four on her list of suggestions for high school programming; I hope Ms. Endsley doesn't mind me borrowing from her blog here. Her suggestion read: 

"Don't be boring and out-of-date. Visual Basic? Seriously?? Yes, I know I said I'm not writing to complain about your choice of programming languages, even though I'm still scratching my head on this one. The reason I mention your choice is that it doesn't help you make a good first impression on new programmers. I have no idea what my teen learned in your class because she wasn't excited about it. Without touching your minuscule class budget, you can offer a range of instruction with real-world applications. With resources like Codecademy, for example, students could try a variety of programming languages, or focus on ones they find interesting. Have you considered showing kids how to develop a phone app? Program a Raspberry Pi? Create a computer game? Build a website? Good grief, man — how were you even able to make programming boring"

First, the choice of programming link goes to an article where the author downplays learning VB because a search on Dice.com shows few jobs with VB experience in the title. Cobol is gone with the dinosaurs. The first thing to make me pause in his article was the statement that new programmer job-seekers need to focus on web development skills, then followed up stating that Java was more important than Javascript. I'm not a professional programmer, but something didn't quite add up there. I'd love to hear what people in the industry think.

Second, if you're going to do searches for programmer jobs, let's look to the pros at the StackOverflow Careers site (note: I work for these guys.) A search for "Visual Basic" turned up 263 jobs out of 1689 job listings, or about 15.5%. Not great, but it's still out there and in use.

StackOverflow.com has over 53,000 questions tagged "vb.net" out of 5,700,000. That's slightly under one percent. Yikes! On the other hand, the "ruby" tag has 82,400 questions carrying that tag. Java has 478,000, and Javascript has 443,500. Erlang, 3,700. Clojure, 5,800. Not quite the results I expected after reading the article from the Dice.com author.

Then again, you could use something like the TIOBE index for measuring language popularity (don't know why the author didn't use that to begin with...) Java was at the top, followed by C, C++, Objective-C, then PHP, and C#. Visual Basic was 7th. Then Python, Javascript, Ruby at 10th, and down at 13th place was VB.NET. The fact that "(Visual) Basic" was 7th while "Visual Basic .NET" was 13th would lead me to believe there are a lot of VB5 and VB6 applications out there that will continue to need maintenance.

Third, Rikki goes on to point out that her child...and I left out the huge amount of exposure to technology she described earlier in the post...was not excited about the class, and it's because VB doesn't make a good impression. Let's try a variety of languages!

Really? I'm not even sure how this would practically play out in a school setting. You have a teacher who probably isn't programming savvy. If he were, he'd probably be a programmer, not a teacher, considering the education environment today. But this is mere speculation. The programming classes I knew in the districts I worked were typically business or math teachers, primarily, and programming courses came from a course book. The teacher simply doesn't have time to work in a multitude of languages and have it not devolve into a nightmare in terms of keeping up with the student's work.

These are high schoolers. Most of them don't know anything about programming. And they are suddenly open to the choice of all these languages, as proposed...how would they know what's "good?" And it's not like they have four years to choose what they want to dabble in. They probably had to fit it into a semester. And actually accomplish something.

Which brings me to the next point...the first steps of learning the language is boring. Or a pain in the ass, depending on how you're wired. You can't do much with any language without understanding the basics (no pun intended); loops. If-then. While. Functions. Methods. Maybe getting into objects. You want to write a novel, but first have to understand what nouns and verbs are, and how to construct a sentence, then how to construct a paragraph, and somewhere along the way learn how to construct a narrative.

And some of these kids...these are just kids, most of them taking the course to fill in some credits in all probability...won't be able to quite grasp how loops work. Or a function. It'll be tough for them, if they even keep trying; often they give up, or just screw around in class, not caring that they're making it harder for other students who may want to actually learn.

If learning the programming concepts is hard, and learning the syntax is hard, that is still a bit of a cakewalk compared to learning the IDE. Visual Studio is complex. It's got tons of features that beginners won't even touch while making something that is still moderately useable. You could spend a week just exploring all the things Visual Studio brings to the table. But when you are looking for a professional job in programming, Visual Studio is the key tool behind any company using the Microsoft stack. Because of this, you can get tons of examples and help when you have a question.

But it is yet another item that takes time to learn, and for a beginner can get in the way. Not only are you learning concepts and the language, you have to learn to model in your head how event-driven programming works, and how your code ties to specific GUI elements on the form.

I've read that languages like Python and Ruby may be good for beginners. I used Python before; it was nice in many respects. But on the other hand, when learning concepts, you end up with a lot of programs that run at the command prompt. You learn some of the logic behind how to do simple tasks, and the command line is fine for that. Languages like Ruby and Python are great because you install them and can edit them from any text editor. Does that really excite kids though? Learning the concepts but not having anything fancy or graphical to show for it? Maybe you need to install a framework to enable a quick website creation. Then you get to introduce them not just to the language, but to the framework.

"I'm learning Ruby!"
"No, you're learning Rails, and was exposed to Ruby."

 The fact is that in most schools, programming courses are little more than "install Visual Studio Express and follow the exercises." You can criticize the teacher if you want, but there are constraints in budgeting, time, and what the class can be expected to achieve in terms of getting projects done and graded. Nothing prevents the kids from learning more outside class time, and I'm really betting the class is just an introduction, not a training course for a career.

And what of a career with VB.NET? Is it really so horrible? Dot-NET applications are, as I recall, compiled down to a Common Intermediate Language, regardless of the syntax behind them. The Visual Studio family of languages ends up with CIL and are tied to those .NET installs you have to update on your home computer. Is there a performance difference if these kids used something like C# over VB?

I did a quick Google and discovered that I apparently had this question before. It even attracted an answer from Jon Skeet. Basically, no, it doesn't really matter once it is compiled down. You use the language whose syntax you're comfortable with and works for the job at hand.

A little more poking around the sites (for Programming and StackOverflow in the StackExchange network) seems to show that VB.NET has more bias against it not because it is necessarily inherently bad, but because of its heritage. Another irony to the "Why would you choose VB.NET to teach beginners?!," given that BASIC was meant for beginners. It's in the name. Beginners All-purpose Symbolic Instruction Code. While VB grew to something that little resembled the initial language, many professional programmers apparently came to hold disdain over those that would use VB and its ilk, because VB encouraged people who couldn't program to make programs. Similar to hatred towards AOL'ers in the early days of home Internet access because it brought the hopelessly non-technical into the realm of geeks.

That stigma apparently continues today.

I had used VB, among other languages. And as I previously alluded to in a blog post, I decided to make learning a new language a project. I started reading a guide on Ruby; mainly to immerse myself in a bit of the culture while starting to absorb some of the "Ruby way" of doing things. But Rikki's blog post kind of made me want to try something else to get into the beginner's programming mindset. I started working on a project in VB.NET. I'm still reading the guides for Ruby, but I want to see how far I can get on this other project.

I'm sure it wouldn't be a popular choice among real programmers. I'd be the target of disdain and derision, if any programmer read this and took the time to criticize my choices. The only ones I really fear showing anything to are my coworkers since they are working with C# and I'd actually value their opinions.

But I'm not a professional programmer. I don't have years of experience with full time programming. I'm coming to this with just enough experience to know terminology, the basics of a few languages, and eyes fresh enough to have a perspective professionals have probably lost. I suppose the end product will speak for itself, if there is one.

And if it sucks...which it probably will...maybe the next one will be better.

Also, if you are a programmer and have some insight as to why VB.NET is not something to subject new programmers to (using reasons that are rational), I'd love to hear them.

Wednesday, September 18, 2013

Program Design Pride

Everything associated with your company name says something about your company. I've always associated this with "branding" or "marketing," although I'm not sure if those are proper terms for it.

Small businesses often don't think they need to pay much attention to properly marketing themselves. I grew up in a small town where just opening a restaurant or new store was enough to get some attention.

SOMETHING IS DIFFERENT! WE MUST GO THERE TO FIND OUT WHAT THAT PLACE SELLS!

What many businesses fail to understand is how much little details can matter. I cringe when I see blatant typos on business signs. If they care that little about the sign board in front of their store, how much care must they take in their product or service? I know it's a fallacy to think that because a restaurant can't spell today's special properly it means they can't properly prepare it in the kitchen, but of all the things you have control over in running a business, a sign with programmable or movable lettering ranks rather high on the ease of quality control items.

Small businesses in my home town often have this problem. But more shocking are businesses with literally seven digits (at least) of profit flowing that make similar mistakes when creating an application to interact with their customers. I'm not talking about spelling errors but rather simple interface issues that leave me scratching my head wondering who thought this was a good idea. Some blatant earmarks of crappy design:

  • The application is obviously an interface to your website. As in, you made an "app" that scales a mobile version of the website. If I want that I will bookmark your site. A bank I do business with seems to do this. When I have a problem with them, the application is another on the list that bugs me as I get wound up to talk to customer service.
  • The application was designed for iPhone. Literally. As in, I launch the app on an iPad and the interface comes up as if the display is the size of an iPhone, rather than properly scaling to fit. That same bank app, as well as a healthcare company, both do this; fortunately they have a "2x" button to scale them to twice the iPhone size. It looks cheap and crappy. Don't do it. (Be sure to say the "fortunately" with a sarcastic tone in your head.)
  • Make notifications obvious. My Google Hangouts app pulls this crap on me all the time; the icon wears a big numbered notification alert badge, I open the app, and I find no obvious reason for the notification. I click around, reading random requests and old chats, exit, and the same damn number is still there. WHAT ARE YOU TRYING TO TELL ME?!

Not being an iOS developer, I don't know how hard it is to fix these kinds of issues. As a fairly technical end user, I can say that in my opinion it makes the product look cheap and shoddy. Do they simply think their customers aren't worth the effort? Why did you bother making an application if you're not going to make it usable and high quality? I wonder if you didn't just throw something together by outsourcing the job just so you can claim to have something your competitors have.

I also wonder: what do the developers think? Were they forced into compromise, or were they hired as outsourced guns that don't care a whit for the company brand?