Continuing Education

I read a post a lot of replies to a Reddit group on computer science graduates. Met a dude there who is an old timer, looking to switch careers into computer science. He said that he is taking an online program at OSU. That is, the Oregon State University. They have a program especially for people who already have a degree in another major.

I checked out the degree. Looks interesting. They have different paces for you to complete the courses. Total cost is $29k. That might seem high at first. But if you think about it being spread over 5 years, that is under $6k per year, or $3k per semester. Still costly but doable. Who knows? I might even be interested.

Back in college, I choose engineering. I really should have done Computer Science. By the time I figured that out, I was pretty far along in the engineering route. Would have seriously extended my graduation date if I switched over to Comp Sci during my junior year. Hindsight is 20/20. However this might be an opportunity to do it all over.

The Non Scrum

I recently joined a newly formed team at work. The whole project was changing how they tracked work. We were going to have a daily scrum. Great. Sounds like agile to me. Been there done that. I got to the first meeting. Was surprised that the team lead was running the meeting and writing down status. Umm. That's not agile.

So what exactly is the daily scrum supposed to be like? Things like this:
  • Developers run the meeting
  • Only developers talking
  • Check to see if on track to meet sprint goal
  • Team members making commitments to each other
  • Developers addressing each other when talking
  • Sharing the big picture of what is happening
Here is what the scrum is not supposed to be about:
  • Not a status update
  • Not the scrum master running the meeting
  • Not interruptions from non-developers
  • Not for the boss to get reports from team members
  • Not developers talking to the scrum master
  • Not a recording meeting
Yikes. What have I got myself into? I have a few ideas. This might be partially some people who have no clue what agile is about. Might also be somebody selling a bill of agile, but not really committing to the real thing. Or it could be somebody with a different methodology, borrowing a lot of the agile terms but meaning something else. Who knows?

LeetCode Getting Downright Ugly

I continue doing LeetCode exercises. Worked on another "Medium" difficulty problem today. Seemed straightforward enough. Find the longest length of any substring in a specified string that does not have any duplicated characters.

This is my practice for C++. Therefore I am using the STL to get more experience with it. Store all substrings in a vector. Write a function to determine if a string has any dup chars using a map. This works for most of the one thousand test cases. But there are a few where LeetCode says my solution took too long.

LOL wut? Some test cases pass in a massive amount of text. I am enumerating all combinations of substrings in there. After I tighten up my code, I guess that my dup detector is just taking too long. Therefore I get rid of the STL map from it. Code is up with straight C arrays. Works fine.

LeetCode Getting Tricky

I decided I would try to LeetCode exercises for practice. Nailed the first one I tried yesterday. It was an easy problem. The one I tried today was assessed as Medium difficulty. At first I thought the problem was easy. It passed the sample test case pretty quickly. Then I saw what the challenge was. They were testing you for huge numbers.

At first I tried to just change my variables from int to long. Nope. Not good enough. Then I tried long long int. Figured they might be testing up to that. Nope. They were dealing with huge numbers. I did not want to implement a big number library. Should not have been a need to copy and paste the code for such a library too.

Then it dawned on me. They were providing the input numbers in a weird linked list format that encouraged the use of big number addition. I did not need to implement the whole big number library. Just needed to be able to add two digits, and determine if there was any carry over to the next place.

These LeetCode problems are tricky. And I have not gotten to a Hard problem yet.

Practicing on LeetCode

I have been reading the Computer Science Careers subreddit recently. There is a lot of talk about how to prepare for job interviews. Many people mention doing problems on LeetCode. I have never heard of that site. I want to interview for another job. Maybe I should be doing practice problems on there too.

So I created an account. Seems like I could proceed without paying for a developer subscription. I went to problem number one. The site was preconfigured to use C++ as the programming language. Does the site just use that because it is a popular language? Or did it figure out I know C++ from my profile?

Had some trouble getting my first entry to compile. The error messages were a bit cryptic. No trouble. I know how to debug, isolating the faults. Got my code to return the correct result for the sample inputs. Then I submitted my solution.

Was a bit disappointed that, although my solution was accepted, 95% of the other solutions executed faster than mine. Nobody told me we would be graded on speed. Next time I will have to optimize my solution.

Password Change Causes Troubles

A tester tried to run a data load operation. It failed with some password error. My team mate asked me to help resolve the issue. Apparently somebody changed the password of an account that is used during the load process. Initially I got a hint that the password might be stored in a file somewhere on the server.


There was just a lot of pain helping out here. I got the hostname of the server from the tester. But I could not seem to resolve that hostname. I connected to another server, and it somehow could translate that hostname to an IP address. I logged into the server and found the directory where the job was running from.


I knew what the username of the database account was. So I searched all the files and found one property file that had the username and password. Then I took a while to track down somebody who knew the new password. The weird thing is that we store some sort of encrypted version of the password. How am I supposed to generate that?


Turns out there is a Java program on the server that will encrypt your password. I don't know what algorithm or parameters are used for the encryption. But I don't need to know if I have this program. The password had some weird symbol in it that initially prohibited me from providing the password to the encryption program.


I thought I was home free. Tried to update the property file with the new encrypted password. Nope. The property file was read only for everyone except the owner. And I don't have the password for the owner account. Man. Makes you want to just give up. I told the tester to go get us some help from some system administrators that would have access.

Timing is Everything

I was assigned a tricky problem to work on. Some of the data was missing in our production environment. Everything seemed to work fine in development and test. Trouble is, I did not have access to the production environment. I got someone to run some queries on my behalf.
 
The source data was correct. The target tables had records inserted. But they were missing key fields. This was quite the mystery. I had to back up and look at the big picture. Normally this is not needed. But in this case, it was crucial.
 
We have some main data loaded into some staging tables. Then some processes run after the initial load that collect all the data and stuff it into a couple main tables. Then those main table are copied to the reporting machine. It is here that my jobs run to mine the main tables to update the reporting tables.
 
Turns out the copy to the reporting machine is delayed every so often. Wouldn’t you know it? My jobs are not actually scheduled to wait until the copying of source data is completed. Usually it happens way before my jobs run. But not always.
 
The fix is to add in the dependency, and fix all those records that got loaded with blanks. The hard part of this problem was figuring out the source of the problem. Wasn’t really a coding issue. More a timing issue.

You're Doing It Wrong

I got on a conference call for our latest software release. The new project manager asked the test team to verify a bunch of tickets. A bunch came out failed and ended in my queue. The manager asked me if I had any insight on these tickets.

Luckily, any time I do work on a ticket, I enter a note in our ticketing system. I had seen all these tickets before. I researched them and determined a level of effort for them. However none of them got scheduled for a release yet. So the work to resolve the tickets has not even started. Of course they are going to fail if someone tests them now.

I reported what I knew about these tickets. Nobody should have been testing them. The manager said he wanted testing to check the actual state of the problems in the system. Fair enough. But these are not failures. They are in a state where the work has not even started.

At least I am not on the testing team. It is no fund to spend your time testing fixes that have not even be done yet. The good news is that the testers should be ready to verify these as soon as there is a fix. Who knows when that will be?

Softare Upgrade Rumble

We use some software from the same vendor for issue tracking and source code control. The customer has declared that we will be upgrading to a new version of both of these clients. From past experience, I expected this to take about a week to happen.


After given the green light, I tried to download the update. Too many people were doing that. So I got put into a queue. I was number 14, and then 13, then 12. This lasted all afternoon and evening. My position in line got updated once a minute.


Then midnight struck. The updates every minute stopped. Apparently the queue could not handle the transition at midnight to the next day. It got confused and thought instead of an update in 1 minute, it would give me an update 21 hours later. Nope.


I killed my download and started again. This time it work. By the next morning, the software packages had downloaded. They asked me if I agreed to uninstall the old versions. I concurred. Then a reboot was required.


I checked my software. Old versions were gone. Next versions nowhere to be seen. I dialed into a huge conference for help. They were of no help. Some other guy on my project noticed my problems and told me to start again from the beginning.


Well I knew to wait until after midnight to start up the download. This time it went by faster. The software got installed. But when I tried to run it and access some code, it complained that it could not connect to the license manager. I will stop here. There was a lot more pain. Basically a fail. And I hear they want to switch to some other software later this year.

Good-fast-cheap. Pick two.

I got invited to a meeting with the customer today. There was a problem in production. And the customer wanted answers. When it came time, I explained what was going on. Our new system used the same data source as the old one. But we were not doing the exact same transform of data. Therefore they saw different values in the reporting system.

I said we could fix this by updating the function that loads the data. We could apply this transform there. We could also write a script to correct all the wrong data loaded so far. Should close the case. The customer understood that. But then they asked if we could be proactive and prevent this type of problems.

Immediately I saw through the request. I said we could take the action to find out other times when the old system does a transform, and make sure we have those transforms present. However no, I could not do anything to make sure everything was being done 100% correctly. This is a huge system with non-trivial software involved. There are bugs in there.

Essentially I responded that no I could not do anything to make the reporting results 100% correct. It is just not feasible. This is an application of the good/fast/cheap management trifecta. They only get to pick 2 of those. The third one will suffer. In our scenario, the schedule is fixed, and the cost is fixed. Therefore you get the quality that you get. No way to increase that without more money or longer schedules.

Trouble with Technical Books

I self-register as a PL/SQL Oracle database developer with my company. So it came as no surprise when I got a targeted email from my company. It highlighted the book Mastering Oracle PL/SQL: Practical Solutions.

This book is ancient. It was published back in 2004. The funny thing is that most of the information is still relevant today. I checked on Amazon. There seems to be an update to the book from 2013. But it is selling used for $800. WTF?

I went through the introduction section of the book. It had me set up auto trace in my Oracle database instance. Also read up on sql trace and using tkprof. Not bad seeing how I have not even made it to Chapter 1 yet.

The only downside is that the book is made available to me through the Books 24x7 web site. My company has some sort of bulk license with them. The web user interface is painful. I had to go through each page. But the pages do not fit on my screen. So there is a lot of scrolling with their custom controls.

I tried to print out a copy of the book. I have the ability to print to a file. Unfortunately the Books 24x7 site intercepts print requests. All I got in the output was a page with copyright information on it. How useless.

So I went through the whole book, copy and pasting the pages into Word documents, one per chapter. Now I can read in my leisure. I could buy myself a copy from Amazon. New ones go for $19. I can also pick up a used copy there for under $8. Could be a good investment.

Simple Solution Wins

The customer found some problems in our reporting system. Whole parts of data were missing. Counts were not matching up. I was put on the task of resolving this. Had to dig a bit to found the root cause. There were a view that depended on another view that depended on some data being loaded. Many levels of indirection going on here.


To truly fix all the problems, it would require a lot of analysis. It might also slow down the system. Then I decided to look at this from another viewpoint. What was the true minimal cause of the problem? Once I found that, I attacked it with some solutions that were outside of the box.


I had to change just 2 lines of code. I love it when I get a solution like this, even if it is sort of a hack.

Finding a Way

I got word from my manager that a new problem would be resolved imminently. I had not even looked at the problem. So I dug in. I told my manager that it would not be done on time. The customer got angry. All of a sudden, I am approved to work all kinds of overtime.

I was tired. So at first I tried to run the 10 jobs that generate the data responsible for the problem. The first job took almost 3 hours before it died due to an out of memory error. I got the second job to run. The third job never finished and the database shut down for maintenance at night.

Ouch. A new deadline was created. Again I told my boss we would not be making the new deadline. Then I got offers for help from another team. I declined. They would only come, ask question, and literally waste time. Finally time to start working smart.

Instead of running these massive jobs, I decided to inspect the code. I figured I should just study each function until I was 90% sure it wasn't a problem. Then I would skip onto the next one. I got to the 9th of 10 function. This one had some trouble. This was it.

This was the sort of the problem where the research is the majority of the work. I coded up a solution, tested it, and passed it on. It is still going to be a tight schedule with the configuration management and test people. But I got it done.