Monday, March 18, 2019

Inspect Code

Batman and Sherlock Holmes

Inspection of software design and code was first proposed by Michael Fagan in "Design and Code Inspections to Reduce Errors in Program Development," IBM Systems Journal, July 1976. Inspection can account for as much as 82 percent of all errors found in software. Inspection is much better than testing for finding errors. Define criteria for completing an inspection. Keep track of the types of errors found through inspection. Fagan's inspections consume approximately 15 percent of development resources with a net reduction in total development cost of 25 to 30 percent.

A project schedule should account for the time to inspect, and correct, every component. It might seem that a project cannot tolerate such "luxuries." However, inspection should not be considered a luxury. Data has shown that you can even reduce the time to test by 50 to 90 percent. If that's not incentive, I don't know what could be. By the way, there is a wealth of support data and tips on how to do inspections well in "Key Lessons in Achieving Widespread Inspection Use," IEEE Software, July 1994 by R. Grady and T. VanSlack.

Wednesday, March 13, 2019

Smoke Gets In Your Eyes

Smoke Gets in Your Eyes: And Other Lessons from the CrematorySmoke Gets in Your Eyes: And Other Lessons from the Crematory by Caitlin Doughty
My rating: 5 of 5 stars

A fascinating book with a lot to teach. I wouldn't recommend it for someone who is young. There are a lot of the lessons are hard ones. However, I wonder if it should be required reading for an adult or a kid in high school.

View all my reviews

Hand-Test Every Component

Handcrafted logo - premium quality

It might take 30 minutes to test a software component by hand with a few simple test cases. Do it! I am suggesting this in addition to, not in lieu of, the more thorough computer-based unit testing that is already being performed. What is the cost? Just 30 minutes. What is the alternative? Save 30 minutes now, proceed with unit, integration, and system testing. The system fails. Three to four person days are spent trying to isolate the cause of the failure. A half-dozen components are isolated as possible candidates. Each is given to its developers for further examination. Each candidate spends 30 minutes testing the component by hand with a few simple test cases. In short, 30 minutes are less than three to four person days plus 6 x 30 minutes.

Another reason to perform routine manual testing is that it identifies components that need to be updated. All your builds and automated tests will pass and not complain with outdated tech. But when developers have to manually test a component with an outdated build or libraries, they will complain and get it updated. Which will keep the software relevant.


Reference:
Ledgard, H., Programming Proverbs, Rochelle Park, NJ: Hayden Book Company, 1975.

Tuesday, March 12, 2019

Document Before You Start Coding

Wizard writing

This advice will seem strange to some readers, but it becomes natural after being practiced for a while. Comment Before You Finalize Your Code explained why a programmer should document his or her code before finishing it. Document Before You Start Coding goes one step further: Programmers should document their code before starting to code!

After performing detailed design on a component [that is, documenting its external interface and its algorithm(s)], write your inline comments. Most of these inline comments will be nothing other than the previously documented interface and algorithm. Put these comments through the compiler to make sure you haven't done anything silly (like omitting a comment delimiter). Then convert each line of comment into a corresponding program segment. (Note: If you end up with one line of code per comment, you probably specified your algorithm with too much detail.) You'll find debugging goes a lot smoother.


Reference:
McConnell, S., Code Complete, Redmond, WA: Microsoft Press, 1993.

Friday, March 08, 2019

Kiss My Asterisk

Kiss My Asterisk: A Feisty Guide to Punctuation and GrammarKiss My Asterisk: A Feisty Guide to Punctuation and Grammar by Jenny Baranick
My rating: 4 of 5 stars

A fun way to brush up on grammar rules. Kiss My Asterisk is written such that each chapter is standalone. You can read it out of order or spread reading it over several months and you won't miss anything. This makes it great for focusing on specific areas, as a doctor's office book, coffee table book, etc.

View all my reviews

Tuesday, February 26, 2019

Barking Up The Wrong Tree

Barking Up the Wrong Tree: The Surprising Science Behind Why Everything You Know About Success Is (Mostly) WrongBarking Up the Wrong Tree: The Surprising Science Behind Why Everything You Know About Success Is (Mostly) Wrong by Eric Barker
My rating: 5 of 5 stars

An interesting collection of facts, research, and stories about success. For example,

"Distractions literally make you Stupid.

Students whose classroom was situated near a noisy railway line ended up academically a full year behind students with a quiet classroom. When the noise was dampened, the performance difference vanished. Offices aren't much different. Research shows that the most productive computer programmers have one thing in common. It's not experience, salary, or hours spent on a project. They had employers who gave them an environment free from distraction."

View all my reviews

Thursday, February 21, 2019

Ethical vs Policy Crisis

Penny Arcade comic showing a father explaining why he wouldn't let his daughter play a specific game.

This past Christmas I read a lot of posts from my friends about their kid's love of Harry Potter and their Harry Potter themed Christmas gifts. It is pretty awesome that they were able to have this shared interest. So when I read this past Penny Arcade comic, https://www.penny-arcade.com/comic/2018/04/30/hogwash, I was shocked and angered. This hits close to home: My friends might be experiencing this extortion. If the comic doesn't provide enough information (it didn't for me) then read (or skim) https://www.eurogamer.net/articles/2018-04-27-harry-potter-hogwarts-mystery-is-ruined-by-its-in-game-payments.
Summary: There is a scene in the game where the player (your child) is getting choked by a vine. They can either pay real money in order to stop it or wait for their energy to recharge (many minutes of watching their avatar get choked). And there are many other things like that.
This comic strip is so spot on; panel 2, especially so. I've read several articles in the last few months calling for Computer Science to include ethics in more classes instead of the traditional capstone course on ethics. In the Jan 2019 issue of CACM, Moshe Vardi pointed out that more ethics in classes will be nice but that it won't change anything. The only thing that will force these companies to change is public policy -- regulation that bans these practices that target children. (Sorry, I have to say it for the sake of completeness.) If this stuff* matters to you then you need to write to your state representatives.

* stuff being any unethical practice being carried out via a computing device.

Tuesday, February 19, 2019

Android Incoming Call Fence


I had lunch with a friend a few weeks ago. During the course of chatting he complained that his cell service provider has a add-on service that is a bit extreme where they block incoming calls from anyone not in his contacts list for $5/month. He pays it because he gets a lot of spam calls but he's not happy about it. There are several apps available that will do the same thing but I guess he doesn't trust them. The best ones I looked at appeared to be Russian. *shrug* Anyway, for the enterprising developer here are the three components that you need to create your own app to create a incoming call fence.
  1. Recognize when a call is coming in.
    https://developer.android.com/reference/android/telephony/PhoneStateListener#onCallStateChanged(int,%20java.lang.String)
  2. Access the contacts list.
    https://developer.android.com/training/contacts-provider/retrieve-names
  3. End the call.
    https://stackoverflow.com/questions/18065144/end-call-in-android-programmatically
There you go. Yes, there is a bunch of other stuff to do to make an app but that is mostly handled in template code that is provided by many instructional sites. Please, go forth and create.

Thursday, February 14, 2019

Wonder Woman: Mythos

Wonder Woman:  MythosWonder Woman: Mythos by Carol Lay
My rating: 4 of 5 stars

Good story. As usual the Batman is awesome! It was a little stereotypical with the woman vs men subplot. It seems that most of the Wonder Woman stories are Greek myth themed as is this one. I'd like to read one where Wonder Woman is the star without any Gods or magic.

View all my reviews

Wednesday, February 06, 2019

Saving Artifacts During Building Boom

Totes full of ancient artifacts.

I start most days by listening to NPR. Today an excellent story about Japan's development of hotels to handle their increased tourism was on. It talked about how the city of Kyoto is having to work quickly to do archaeological research in conjunction with building projects because of all the artifacts that are uncovered during development. And it also talked about the loss of some historic buildings to new developments. The story concludes with details of how one temple owner is developing a hotel with the ground floor divided between the lobby and a new temple. When I heard the story I thought they were building the hotel around the existing temple which reminded me of the Cafe in the Crypt at St Martin in the Fields Church in London. The cafe profits support the church as a way to keep up with times and space constraints of a heavily populated city. Hopefully many of the projects are able to incorporate existing buildings into their new developments. It would be very sad if they destroy the very things that are drawing tourists in order to make room for the tourists. Historic preservation is more more than just keeping old things around and untouched but also relevant to the current population. It is a balancing act that has long lasting to permanent consequences on both sides.