Terms & conditions screen in RBA

Disclaimer: As always, I’m not supposed to talk about this SDK, but the accompanying docs do not cover the material very well, and bing/goog returns zero info.  I had to spend several hours figuring this out (and almost gave-up, twice).  Hopefully, this might save someone a few hours, or prevent someone from giving-up.   So, if this seems a little vague to you, it is intentional. Please just ignore it and carry-on.

We needed a means to display a bunch of information to a user/customer.  The default screens, and confirmation screen only allow 7 lines.  That would not be enough for my current needs.  Digging through the SDK docs, I found something called the TC.K3Z screen.  It sounded great.  I could send a “M25” message and show reams of text.  One little problem: I can’t send the text as a parameter to the M25 command.  It had to be part of a TC#.XML file.

I dug around until I found an example: the existing TC1.XML file.  The content was really simple. I already know how to upload a file, using the P62 params, and the ProcessMessage() call.  The only problem is that, all of my examples have a M97 command afterwards. Without M97, it doesn’t seem to pick up the new file/settings. I don’t really want to wait for a M97 to complete (40 sec).  I was fortunate to discover that you DO NOT need to do a M97 after uploading a TC#.XML file.  It grabs a fresh copy every time.  That is good news.

Last hurdle: message formatting.  Since the TC file was XML, clearly it would choke on greater-than and less-than symbols.  Those can be escaped using HTML escape sequences (&lt; for <, and &gt; for >).  However, line breaks didn’t work. at. all.  I tried <br> and I even tried &lt;br&gt;, like I found in the SECURPROMPT.XML file.  Nope.  It didn’t work and it hid any content like that.  Since the display was line-breaking at 70 chars per line, I was afraid that I might have to resort to line splitting and padding (add spaces until every line was 70 chars long). When I tried that, the display was adding an extra space at the beginning of every line except the first.  Weird!  When I removed all CRLFs, the extra space went away. Fortunately I found a better way for all of it.

For some reason I tried the literal of “\n” and discovered that would actually cause a line-break to be displayed on the display. So I did a find/replace of CRLF with the string \n.

Example:

This line will display\nmulti-line messages which are &lt; 70 chars long.

Displays as:

This line will display
multi-line messages which are < 70 chars long

I’m not sure why they would design it like that.  It is like the folks who designed it, sort-of mashed some HTML and C escape sequences, and just figured everyone would find that to be intuitive.  *sigh*

Anyway, that solved it for me.  I hope you found this useful and it saved you some time.

Advertisements
Posted in Lessons Learned, Programming | Tagged | Leave a comment

If someone asks you to use [StupidTechnologyDujour]

I had a fun conversation with a peer today. He asked me what I would say if a boss or peer wanted to use [Stupid-Technology-Dujour] (replace with technology of your choice). I know he was asking a rhetorical question, but I felt compelled to answer it honestly, “it depends”. He quickly corrected me, “the only right answer, is NO” (rather firmly). I didn’t get a chance to explain my answer and he didn’t ask, but I think the discussion revealed a little about each of us.

Throughout my career, I’ve sought-out career and technology advice. There are always an abundance of new technologies popping-up all over the IT community. Many of them are not practical for my current projects, but sound exciting.  I know that I can’t possibly try all of them, in my free time.  So I am grateful that I can ask some of my friends and peers about their experiences with those technologies.

I get to hear, from people whom I trust, which technologies are working better/worse, what kind of problems (and solutions) are associated to each, and the overall value that can be harvested from these technologies. It is so much easier to learn this information from trustworthy people, and not just fanboys or hype-men. The trick is: discerning which of my friends & colleagues have advice which is accurate and valuable. Much of this comes-down-to the personality and character of the person who is offering the advice.

Advice from Paper Tigers

I once worked with a guy who had a PHD, and taught (for several years) at a major university overseas. He had some very impressive credentials and he was glad to wave them around, and demand respect from others. I still remember the time he offered me this advice, “SharePoint is terrible. If anyone recommends using it, you must resist them in every way possible”. I had to laugh inside, because I know SharePoint really well. It is a great product, if you use it for the correct purpose. It can even work well for the wrong purpose, as long as you have some ninja-skills for SharePoint. So, his advice revealed a little something about him: He was the kind of guy who jumped to conclusions and made definitive statements about technologies, which he barely understood (or wrongly thought he understood). Basically, he was wrong. It wasn’t the last time either. He offered plenty of bad advice to me (and everyone in my department).

 

Making a good decision

Let me return to my first thought. If somebody asks me to use [Stupid-technology-dujour], I don’t just automatically blurt-out an emphatic “yes sir!” I take a moment to think about a few things before I decide if a technology is even worth a hoot.

There are 3 factors which are pretty influential to me, in choosing a technology:

  1. Maturity: How easy is it to find support for this technology (how big is the dev community and what is the overall opinion of it)? I’ve lived the nightmare of using a rare bleeding-edge technology, in-hopes that it will catch-on and I could claim the honor of being an early adopter. It was scary and exhausting. Those gambles have never paid-off for me. I’m more conservative now, but not overly-so (imo).
  2. Popularity: Do I personally know somebody who is already using this technology, and has experience? What kind of stories does this person have to say about it? Are there any people working with me (here) who are using it? How hard is it to find a rent-a-ninja for this technology?
  3. Adoption/learning-curve: Are the people here receptive to learning this new technology? Can they do it?

Maybe also: “Does this technology have a good reputation, or is it still bleeding-edge stuff? How much risk does it bring?”

Clearly, you will not do well with any technology if you already have some reservations/fear about it. Certainly, if you just have a closed mind, you will not be able to overcome an obstacle. It reminds me of a Henry Ford quote, “Whether you say you can, or you cannot, you are correct”.  So be realistic about that factor.

For a resourceful and intelligent person, nearly anything can be accomplished with enough determination and time. Therein lies my answer, “it depends”. You just need to determine whether you have enough intelligence, resources, determination and time. The rest, is a decision to invest those here, or elsewhere.

Posted in Lessons Learned, Programming | Tagged , , , , , | Leave a comment

Metal detector, for needles-in-a-haystack

A few weeks back, I had some good advice for someone on stack overflow https://stackoverflow.com/questions/49817985/htmlagilitypack-exception-has-been-thrown-when-used-in-deployed-ssis-package?noredirect=1#comment86732223_49817985

The guy was stuck with a bug and couldn’t figure it out. Sometimes, you can’t get any help on Stack Overflow because people are like “can we see your code” or “can you describe the root cause better”. However, if you can’t seem to get to the root cause, or “the problem is in there somewhere, but I don’t know where”, then you probably won’t get much help on S/O.  You’ve got to feel a little bad for someone in that condition, but it is hard to help without enough info.

My advice to this guy was: “add lots of debugging and tracing, to try and capture an error message or get some idea of where it was failing and why”. He didn’t seem satisfied at first, but eventually he gave it a try. Two days later, his error handling caught the exact problem and told him where to look, etc. At that point, the solution was obvious/easy. I got a nice little “thank you” out of it, but no S/O points (and no additional street-cred). That actually happens a lot on S/O, because I often find folks like this guy on S/O and give them advice about how to solve it themselves.

Moral of this story

I have to tell you this: (Write it down if you have trouble remembering) … error handling, logging and tracing are the most important things that you can add into any program to make it more supportable. In contrast, if you do not have error handling, logging and tracing, you better pray that you never have to support that app and never have a big outage in production. I don’t want to sound overly dramatic, but I’m telling you, [error handling, logging and tracing] is nearly a religion for me. I’m not kidding. If you even try to remove error handlers or trace lines from my program, I might rough-you-up. Okay, I won’t clean your clock, but I will lose my friendly-demeanor for a moment and you will probably get an earful.

If you are new to programming or don’t yet have an appreciation for what I’m saying, please learn more on-your-own, or if you are on one of my projects, please get with me, so I can put the fear of “production outages” into you.

Ninja school

I honestly wish that universities had a mandatory course for CSE majors called “Maintainability”.  It would be an entire semester, where you take your old programs (from previous courses), and put error handlers around everything, and add trace points, and your trace (etc.) could be toggled on/off by a config.  You would know what to put in a config and you would know when to store telemetry in a DB or a file, or somewhere else.  You would make little utility apps to help you diagnose problems and read/aggregate your logs & traces.

For the final project, your projects would be subjected to the worst IT s#!+storm outage-fest that an app could face, and you would be graded on your ability to determine if the problem was 1) missing/revoked permissions (yours, or a service account), 2) bad network slowness, 3) TCP failure or router hiccup, 4) unexpected server/client upgrade which killed a dependent library (DLL), 5) full HDD on a server, or a few other spicy plot twisters.  Woo, I’m getting goose-bumps just thinking about it.

Error handling, logging and tracing are pre-requisite skills, if you ever intend to call yourself a ninja, or alpha geek, or the-go-to-guy.  If you don’t already eat, sleep and breathe it, then you should get out from under that rock and start learning it.  Start ‘leeting up, now.

Posted in Errors, Lessons Learned, Programming | Tagged , , , | Leave a comment

LLT_Load and Windows 10

Disclaimer: As always, if it seems like I’m being a little vague, it is because I’m trying to help folks who are stuck like I was, but I’m not supposed to talk about this stuff. However, when I was stuck on this, I was getting really frustrated.  I really wish there was a private forum where people could discuss this technology openly, with others in this field of work, but there isn’t.  This will contain enough info to get you going again, without violating any confidentiality stuff.  Anyway, if this doesn’t make sense to you, please ignore it. You don’t need it.  Carry on.  🙂

A few months ago, I got a Windows 10 pc at work, FINALLY!!!  I like Windows 10.  However, I also need to support all of this stuff (at work), and sometimes when it is messed-up bad enough, I need LLT to fix it.  You know what I’m talking about.  Infinite loops and stuff like that.  Anyway I’m used to the version of LLT that runs on Windows 7.  When I try to run LLT (on Win 10), it just doesn’t work, because PPP and the windows phonebook (old modem and dial-up remnants) no-longer exist in Win 10.  When you run LLT_Load, it starts out nicely and makes you think you are lucky.  It asks for the COM port number, you enter it, and one of those RAS pop-ups appears and says “Cannot find the connection”.

Bad RAS

Golly, thanks for all of that info.  Where would I be without you and all of your help.  😦

Then I get a bunch of red text like:

-------------------------------------------------------------------------

!!!!ErrorCode: -7!DOWNLOAD FAILED - LLT CONNECTION NAME NOT FOUND IN WINDOWS RAS!!!!!


-------------------------------------------------------------------------


DOWNLOAD FAILED!


-------------------------------------------------------------------------

It is all red and mean and angry like that. Which doesn’t help my attitude much.

Well, I found that I could get the newest version of LLT, which is 5.4.0 (as of 2017) from the provider’s dev site.  It looks COMPLETELY different from the original LLT and has some awkward behavior.  For instance, your stuff (that you want to fix) is shown in the lower right panel (hopefully).  To connect to your stuff, you need to double-click it.  Then your files will list in the upper-right corner (or blank, if you already wiped/deleted your stuff).

You need to drag-drop files from the left list to the right, and then it will upload files. During upload, you will see some progress bars in the right-middle panel.  Once you are done, you need to double-click your stuff again (lower right) to disconnect, and your stuff automatically restarts.

Not bad (once you figure it out.  I guess).

That helped a little, but my original problem was still that I wanted to handle a bunch of these, rather quickly.  I really wanted the command-line util back.  You used to do that via command-line arguments to LLT, but those are gone with the new LLT.  No hints either.

I finally figured it out when I dug around the LLT folder and tried something fairly dangerous: I tried running each of those files from a command-line.  I finally found the file called “cmdLine.bat”.  That file is exactly what you are looking-for as a replacement for LLT_LOAD.bat.  It isn’t a very nice 1-to-1 replacement. However, it contains some syntax for command line flags and some nice instructions to get you pointed in the right direction.  You still have to do a bunch of re-work to get your batches back to their original glory. However, you won’t be at a dead-end any more.  You at least have hope now.   …and a bunch of work to do.

Good luck with your automated loading!

Posted in Lessons Learned | Tagged , , , | Leave a comment

What to look for in a boss

Most people don’t often get the chance to interview or pick their next boss. It has actually happened to me a few times in my career. The first time, I had no idea what to look-for, or what to ask. I learned a lot from that mistake. *sigh*.

Last week, my supervisor told me that our department will hire a new person over me, and was courteous enough to ask me for two interview questions. (deep-breath, no pressure, right?) Here is what raced through my mind, and in retrospect, if I was more prepared, what else should have gone through my mind.

First-thing that pops into your head

First, it helps to know what you want and why. After all, if you ask for something really stupid from a new supervisor, it is going to reveal something embarrassing about you. Maybe you only think about yourself, or maybe you are lazy or subversive or a whiner at heart. If so, you don’t really deserve input into your next boss. Because you will probably ask for someone to enable you, instead of helping you grow in a positive manner. So, you should probably know that about yourself before you open your mouth.

Next, it is important to understand where your team & department are at (maturity-wise) and where you are headed. For example, imagine if you are a bunch of free-wheeling cowboys, and that seems to be working great, for now. Imagine the chaos that would ensue if you hired a rigid/uptight PMBoK disciple. Or if you were a died-in-the-wool waterfall shop and you hired an agile fanboy. Or if you are using agile, but shouldn’t, and you hire an agile fanboy. As you can see, there are many ways to create some very awkward conditions.

So, once you know what is working and what is not, you should do some thinking about the kind of person who is going to move-your-team-to (or keep-your-team-at) the place where you need to be.

In-Retrospect

My answer should have been based on the strengths and weaknesses of our team and the ways that our dev process works and doesn’t work. I really need a manager who fills-in our gaps and who can recognize the parts of our process that are working-well (so he can tune, rather-than replace those). To find that, I need some understanding of “what kind of person fits the bill”, or more importantly, how do I recognize such a person and distinguish him/her from the opposite?

*sigh*, I guess I need to spend a little less time reading about app and server optimization and scalability, and maybe a little more time understanding what an effective manager does. Ultimately, this is the job of my superiors and HR, but that doesn’t mean I cannot help or contribute. Certainly I’m a smart guy, and good at analyzing stuff. I just need to apply myself. I should be able to do that here too. I just need to apply myself to that endeavor, and work on it.

Final thought

After reading this, you might think: “what kind of madman would ask a person to pick his own boss?!” If you really thought that, then perhaps you could “work on you” a little more. Think about that, please. On the other-hand, if you have earned your superiors’ trust and respect, some day they might ask for your input in such an important matter. Don’t make them regret this decision. Be prepared to contribute some real value here. Take the time to be prepared for this day.

And if that day never comes, don’t sweat it. Just keep jamming-out some l33t programs and keep being awesome. Everyone needs that too.

Posted in Career, IT Psychology, Lessons Learned, Professionalism, Team | Tagged , | Leave a comment

Windows 10 update broke my Logitech mouse

Monday morning, I tried to wake my PC. Instead of the normal wake-up, it did a boot-up. Which means Windows must have installed updates for me, overnight.  No biggie, whatever.

The problem came when I reached for my Logitech Trackman.  Nothing, nada.  There wasn’t even an arrow on the screen.  Okay, so how does a person fix a PC if you don’t even have a goshdarn mouse?!  *sigh*.

Okay, I dug through my box of old PC parts and found another mouse. Mmm, another Logitech device.  …    argh, that one doesn’t seem to work either.  [expletives omitted]

Eventually, I found a MS cordless Bluetooth mouse.  It was super-flaky.  Then it occurred to me that the batteries might be dead after sitting in a box for two years.  *sigh* Eventually I found some batteries.  I got my arrow back.  At least I can do something now.

I goog/bing-ed it and found nothing.  I find that hard to believe.  Keep reading, you’ll see.

So, here are some things that didn’t work: downloading the latest drivers.  Logitech no-longer supports the red trackman.  The latest drivers sort-of found it, but gave back some error “-120” can’t initialize or something.

So I’m pretty ticked-off right now.  MS and Logitech seem to have released some updates to kill perfectly working pieces of hardware.  I start thinking of words like “dishonest”, “disreputable” and maybe even “despicable”.

I’m fully hooked on the thumb mouse.  So I can’t just abandon it and go for a competing product.  It would be stupid to say “those chiselers will never see my money again!”, because after all, I’m still using the same trackman after 15 years.  I’d use it another 15, if I could.  So, that is probably not a jaw-dropping threat.  Dang it!

Anyway, if your Logitech Trackman or corded mouse just stopped working suddenly, after a reboot, you are probably in the same boat as me.  You got robbed.  Sorry.  I don’t know. Maybe say “me too” below or something.  We can all grieve together.

Posted in Computer and Internet | Tagged , , | Leave a comment

Raising over-performers

Years ago, I was in a company that wrote software for other companies. We had a great reputation and our sales reps were doing a great job at bringing us more work to do. It didn’t take long for my boss to see that we had more work than we could handle.

At this point, my boss had two options to consider: 1) turn away the excess work or 2) hire enough people to do the work.  The answer was not easy, but it was fairly obvious. Rejecting the money just didn’t seem like a good business decision. So, we started looking for more people.

After interviewing a few people, we realized a few things:

  1. Good people usually wanted an arm & a leg. They knew they were worth it.
  2. Lower-cost people were usually lower quality
  3. Our business was doing well, because of our great reputation. So we couldn’t accept the risk of hiring low-quality people.

Our search was made more difficult by the fact that the demand for good programmers was very high at the time. The demand was much higher than the supply. Hence, the high price. Our customers also knew this and were favorable to us because we had good programmers who were actually available.

It seemed like we had two frustrating options: pay (arguably) inflated rates or lower our standards. After putting-our-heads-together, we came up with a third option: improve the value of lower-cost people.

Growth Potential

The key to making it work, was to find people with high potential who had not yet realized their full potential. Diamonds-in-the-rough, was what we had to mine.

This meant a couple of things:

  1. We had to be able to distinguish which people actually had potential
  2. We had to cultivate that potential

Thus began our journey.

Along the way there were many mis-steps, but eventually we became pretty good at this process.

The key areas, that lead to success

  • Potential isn’t found on paper, it is in a person’s head and heart. It also is not a permanent fixture. It can be developed, and it can be lost rather quickly.
  • People need to see the carrot. “What’s in it for me?” If they see it, they can be it.
  • People need to have the will and determination to grow. Growth is always a painful process and some people have very little tolerance for it.
  • Some people are easily satisfied and some fear the results of success. Especially when your reward for success, is harder work. Money may not be enough of a reward.
  • Money isn’t the only carrot that can be offered.  We had to get resourceful and determine several kinds of carrots to offer.

Bottom line: with our concerted efforts, we were able to find people who were passionate about technology and ready to embrace a nice challenge.  They had to be “in-it” for the satisfaction of accomplishments, rather-than only “in-it for the money”.  Once we found them, we invested in those people with plenty of time and mentoring.  The investment paid-off, and the beneficiaries were not just the company, but also our customers and the employees themselves.

Raising overachievers was a big commitment, but we embraced it completely and enjoyed the results.  By doing so, we were able to meet the demands of our business and clients. Of course, that led to more success, more growth, more demands. Each of those needed to be managed too. That is a discussion for another time.

 

Posted in Career, Education, Lessons Learned, Professionalism, Team | Tagged , , , | Leave a comment