Cockadoodle Doo, Yo

Well. I’ma crow a little bit today.

Yesterday, I was ridin’ high coming into the day. I’ve been blowing away the tasks assigned to me. Sure, it takes me months to solve the riddles sometimes. Sure, I do some mumbles and humbles and get beet-red when I have to say “I don’t know  how” in staff meetings with my boss and associates. But every macro I’ve had to tackle I’ve knocked out of the park.

Even when I thought I didn’t.

So late last week, the ATR coordinator asked me to look at a problem she’s had with one of the screens she uses. I told you about this – it printed the serial numbers over and over, remember that? Well, I hit that one out of the park too.

Then I came back today and decided I’d have another run at getting the email attachment problem solved. You might not remember this one. Back in the summer we decided it might be a nice feature to be able to attach files to our outgoing email messages to divisions and customers. Sounds easy, right?

Yeah, not so much, it turns out.

Well, for the last – what? six, seven months? more? – I’ve been banging my head against that particular wall. This even came into play before Appmageddon. But I couldn’t do anything with it. I just…couldn’t get it to work.

Yesterday, I opened up that page again and took another look. I saw something I didn’t notice before. Well…that’s not exactly right. I guess I just didn’t see it this way before.

I tweaked. I tested. I tweaked again. Tested again. And you know what?

Shut the front door – I got the email. AND the attachment!

VICTORY! VICTORY FOR ZIIIIIIIMMM! Praise the Lord Most High, for clearly this came from His inspiration. Know how I know that?

Because I have no idea what’s different now that it works when it didn’t before. NONE.

There were a couple of routines I saw, and I recognized a bit of what they might be doing. I changed the references a touch, thinking, “Well, maybe it should be this instead of that.” And voila! Success. Sweet, gratifying success.

OH, I danced! I danced like Snoopy dances, and at my weight, that’s quite the spectacle.

I ran to my boss and bragged, “Hey, I beat your man GW again! I got the email attachment thing to work! I did it!”

I chatted and beamed a moment, and then went back to my desk. I deployed the solution to the production web server. Then, I had a meeting to go to with my boss and his staff members. During that meeting, the ATR Coordinator had to leave for the “Kaizen Event” I mentioned to you before. The meeting broke maybe an hour later, and when I got back to my desk, guess what?

I had an email from the ATR Coordinator.

She said, “We have issues with the intranet. I can’t send any notifications to the divisions. It’s giving an ‘Empty Path’ error now.”

My sphincter tightened so fast and so severely I gained an inch in height. You couldn’t have driven a toothpick in it with a ten-pound sledge.

Okay, I thought, stay calm. The error indicates the message can’t be sent without an attachment now. So…so…what’s that mean?!

OHGODWHATDOESTHATMEANFORTHELOVEOFCHRISTHELPME!!!

Or, you know, something like that.

So, this was like, two o’clock. I putzed around with other solutions but they weren’t going well. Finally, it hit me like a ton of bricks.

Before, we could send messages but not attachments. Now we can send attachments but not messages without them. Solution – put both scripts on the page and have them execute at different times.

Okay, how do I do that?

The way I did it was simple, and a little stupid, but then, so is this entire way of working with this crap, in my view. I simply put two buttons on the page. The first one calls the original script, and sends the message without attachments. The second one uses a modified script, takes the object in the file box (which I added), and embeds it as an object. (No, I didn’t come up with that code; neither did my predecessor though. He borrowed it from the Internet, so we BOTH stand on the shoulders of geniuses to do what we do. So there.)

Then the script sends the message through the local email client running on the machine being used.

Done!

And tested. And tested. And tested. It sends through the Internet, sends through the intranet, and sends the attachments faithfully.

Score!

Appmageddon just got a little less scary.

Now, back to the NAFTA database macro. I have to automate it. And I did; problem is, the automation through the database itself is ssssslllllllllooooooowwwwww. So I did it through an Excel spreadsheet instead, but now have to figure out how to get the two together. Two-step process, maybe? I’ll see.

But the process took something like half an hour through the database. The exact same code, copied and pasted to the workbook’s code editor directly from the database’s editor, runs in eight seconds from the workbook.

Uh…this is a no-brainer.

So, I’ll see what happens there later. For today, I have month-end reporting to do, weekly reporting to do, and I’m still way behind on some of these things.

See ya next time.

-jdt-

Advertisements

Good Friday

I have to confess, I’ve no idea why today is called “Good Friday.” I’ve wondered that for years. But that’s another post for another blog, for another day, I suppose.

For now, I want to celebrate the joyous Easter coming.

And I have some reason to celebrate. Yesterday at work, I had some cool things happen, and only one bummer thing.

See, on Wednesday I had someone come to me and ask me if I could adjust one of the legacy intranet pages because it showed serial numbers for our return requests from customers. Some of our manufacturing divisions require a serial number before they’ll authorize a return. When we put that data into our system, it’s called up when we do prints of the requests. Long story longer, no matter how many serial numbers you enter, it shows up ten times. And, if you put in more than one, only the first one shows up…ten times.

An interesting conundrum. I found it more interesting when I learned my predecessor had been informed of the matter but never resolved it.

When I looked at the print page, I saw the matter. A loop was the problem.

(Aside: In programming-ese, a “loop” is a block of code which is executed multiple times, so instead of writing the code over and over again, you write it once and instruct the program to do it over and over until a condition is either satisfied or stops being satisfied.)

See, the loop was told to execute ten times. A counter was set to 1, and the loop was set to run until the counter became 11 (incrementing ten times). That same counter was used to extract the index number of the serial number data. So let’s say there are five serial numbers for five units being requested for return. The counter (called “x” in this case) was set to 1, like so: x=1 (complex programming code, eh?) Then the loop was told to run until x=11, like so: Do Until x=11 (wow! Can you handle that technical jargon there?!).

Okay, then the serial numbers were selected by saying “Put the serial numbers in this HTML table cell where the serial number = SN(x).” Then the counter gets incremented by one (“x=x+1”, more super-intense computer code), and the loop repeats. Got it?

So, for some reason (and I’m still not precisely sure why), the code never worked correctly. Instead of getting serial number index “x” like it was supposed to, it got the first one it came to and then repeated that cycle over and over again.

I knew what to do, though. And damned proud of myself I was for knowing! I changed the loop to say, “Do this stuff UNTIL THERE ARE NO MORE SERIAL NUMBERS, regardless of how many there might be.”

This is called a “Do Until” loop. Instead of saying “Do this until the counter is incremented ten times” (and ten wasn’t random; the page in which serial numbers are entered only has slots for ten of them), my code says “Do this until you don’t have any more records in the serial number spot” and then finishes. Got one serial number? It goes through the code once. Got ten? It goes through ten times.  And, should I ever improve the page, if you input 40, you’ll get 40 out.

So I made the alterations and tested the code. It failed. Programming error. I left on Wednesday night feeling pretty dejected and stupid. I woke up a couple of times on Wednesday night – as is my habit, due to bladder requests or thirst or whatever – and every time I did awake, this problem was running through my head. I have no idea how that happens, but it happens occasionally. So when I woke up Thursday, I went to work thinking about the problem and still didn’t have any clue why my loop didn’t work and his did.

Feeling sort of inferior and humbled, I looked at the problem again. And I noticed something… a missing piece of the code. When I altered the loop, I forgot to tell the computer code to advance to the next record, if there is one, and do it again. When I added the simple line “recordset.movenext” to the code just before I told it to loop through again, BAM! Success! The page loaded perfectly and ran flawlessly, and ONLY shows the existing serial numbers once!

And now, it shows ALL the serial numbers, not just the first one over and over.

VICTORY!

Okay, great, on I go. I spent the better part of last week working on two things: a NAFTA database macro which would automatically perform some tasks rather than having to perform those tasks manually, and a page which shows the number of times one particular customer is changing their orders. (The sales team for that customer, and the quality representatives for that customer, will be in our location for what’s called a “Kaizen Event” to improve quality communications. We’re using it as a chance to provide ammunition to our sales team to get the customer under control. Long story, but it’s something we have to do; their people can’t keep up with the changes being made, how are we supposed to do so?)

Well, I got the new web page built using the new, “better” technology, and tested it repeatedly. Then I set it aside. I finished it about 4:30PM last Friday, and figured I’d deploy it this week. Well, I sorta forgot, so when it came up again, I scrambled to get it uploaded to the web server.

And it bombed.

For the next two hours, I cursed, banged my desk, pulled my rapidly-graying hair, and stormed to the bathroom to fume. The test server simply won’t provide me with the error messages and I can’t remember what I did in production to get it to happen. So, flustered, I deployed the new application to production to see if I could find the problem.

I almost screamed it was so simple. So, I quick-fixed the issue and BAM! Success!

VICTORY! …and I copied the fixed version to the test server as a back-up and they’re working fine. The requestor is very excited to arm our sales team with this data next week, and I’m pleased it worked as intended. Phew! Close one!

Finally, time to turn my attention to the NAFTA database macro.

*Sigh*

I still don’t know what’s wrong with it. So, two wins and a loss. In the grand scheme of things, I suppose that’s not too bad.

There’s always next week.

I hope you have a happy and joyous Easter if you’re celebrating, and I’ll see you Monday or thereabout.

God bless you.

-jdt-

Dichotomy

No matter what I do over the weekend, I never really feel productive unless I do something work-related.

For instance, I could write 10,000 words in a new book or story and get LOADS of Photoshop images made for book covers. I could read vast volumes of fiction and spend quality Facebook time updating my author page, getting feedback, and promoting my latest and greatest endeavor. I could do almost anything every single weekend and still come away feeling like I didn’t accomplish a doggone thing.

I can spend quality time with my computer programming training videos, though, and even if I only get to a couple of ‘em, I feel like I’ve done huge amounts of work. I feel satisfied, proud of my achievement(s), and the sensation I deserve to relax.

I don’t know why that is, or what it is inside me which drives the disproportionate slant that way. I’m watching a series right now about MVC, which stands for “Model/View/Controller” and is a web site structure which separates the business and data access logic from the presentation and uses something called a “Controller” to route the user’s requests between the two. There’s a great deal of background into how the controller knows how to handle the requests from the user, and where to go with it when it receives them, but in the end, this series doesn’t seem to benefit me as much as I hoped. I have a couple of looming projects and need to get them done, and despite how much I think this has potential for future projects (like Appmageddon, if I can ever get back to that), it’s not having much impact on me and my ability to code now.

So I sit and don’t feel much like returning to those videos on the weekends. I want to watch movies, and write, and make book covers for books I haven’t even written yet, and play with the kids. I want to do all sorts of things and can’t do any of them because I can’t seem to get past the nagging sensation I have to watch those videos. If not the MVC ones (I’m 37.5% of the way through), then something. And nothing strikes my interest right now.

Sometimes I wonder if just making up projects to practice coding is better.

But I find it strange how accomplishing things in other areas of my life feels so insignificant and how little can make me feel accomplished in this area.

How ‘bout you? Did you accomplish anything this weekend?

-jdt-

Monday Mulling

Happy Monday, y’all. Before I get into today’s rant, guess what? I’ve just finished a cover for my latest short story, which will shortly be published on Amazon’s Kindle store. Before I do, however, I want some opinions about the cover. Check them out at my author site and let me know what you think by voting in the poll. You can find it here.

So. Now let’s talk, shall we?

We got a guy at work. Let’s call him J.

J. is one of those guys who’s always trying to be the nice guy. Well, usually trying to be the nice guy. He doesn’t always succeed. J. moved to a cube just outside my office a few weeks before they took my office away from me, and the day he moved, he accused us (some unknown person in our business group) of “stealing” one of his monitors.

But most of the time, he wants to be a nice guy. And he does all right at it. He’s a little weird, but weird in a good way. He chooses the smallest bathroom in the building, for instance, in which to brush his teeth and wash his lunch vessels. There’s a far larger one not far from him, but no; this is the one-staller and the one he’s going to use irrespective of inconveniencing those who need to, you know…use the restroom as a restroom.

Which brings me to what bothers me most about J. He’s a bathroom talker.

He calls out from the stall, with the door closed, to whomever might be the person unlucky enough to require the facilities at the moment. He has no problem chatting away while he, or the other person, are urinating. And he waits for the other person to finish, steps aside so they can wash their hands, and then follows them out of this very small, very public restroom, so he can finish his “thought”.

J. is someone I need to pray for, because I can’t stand him. He bothers me. I do not, repeat, do not, want to have a conversation with him, nor anyone else, in the restroom. I’m there for one, and only one, reason. Okay, maybe two. But neither of those are conversation and socializing.

Seriously, what is broken in someone like J. that the boundary system simply isn’t there? The idea of courtesy? How about the ability to look at someone’s clear and distinct “Leave Me Alone” body language and not see it?

I need to pray for J., not because he needs it, but because I do.

Anyone get to you like that? Anyone out there in the world just set off your hackles, without even trying? or knowing they do? How do you handle it?

Hope y’all had a good weekend.

-jdt-

Friday, Finally

I’m still not watching my training videos. I tried earlier in the week, but you know what? Sometimes, I simply can’t face ’em. I work with programming all day long, working on two variant languages (Visual Basic for Applications and Visual Basic .NET 2010), and sometimes, I just need a break from it.

I’ve tried playing video games, but that’s actually stressful, being I stink at them. My kids don’t like the same games I do, so there’s no help there. Besides, they want to play their own games and do their own thing, and I get it.

When I reflect on it, I never was very good at games. Back when the controller was composed of a joystick and action button, I could handle them better, but all my peers seemed to be better players. Now gameplay is a lot harder — and in my estimation less fun — and with the button requirements to make things happen, I’m getting worse and worse at these things. I considered, for a few milliseconds, buying a gaming console for use with my PC games, and then realized what a mistake and waste of money that would be. I stink at video games, and that’s that.

So, what do I do instead?

Well, I guess I could write, eh? I guess I could do that. I have a lot of outlines, a lot books in process, but when I start fiddling with those, I get lost. I also get sleepy for some reason. I’ve never figured that out. My friend Spark offered me the best explanation for it a few years back, but I can’t prove definitively one way or another. (I think it was Spark, anyway. Hm.)

I get a heavy dose of fear and guilt when I do that too. If I blow off watching my videos for writing, I get so nervous I get a stomach ache. I don’t know when I’ll EVER be able to write again, and I feel like I’m losing the ability to do so by the minute.

So, maybe this weekend, I’ll MAKE myself write something. Even if it’s just a short story. I’m going to force something out of my brain onto the keyboard and damned be the consequences.

There’s always next week, right?

It’s family game night tonight, and the kids picked CLUE, so we’ll be doing that later. Can’t wait! What’s up for you?

Have a good weekend, y’all!