This is the serialization of my first mystery novel, Null_Pointer. It will be released on this blog every work day until it is complete. You may purchase the novel at Amazon, Kindle Store, Barnes and Noble, Smashwords or order it from any brick and mortar bookstore near you. Thank you for reading it and I hope you enjoy this free look at the book.
You can find all the chapters of this book by searching for the Null_Pointer Novel tag.
Nix was lying up against him snoring. The old gray and black cat had belonged to his father. Born in the same decade as the UNIX operating system, his father named the cat Unix, but for as long as Joshua could recall, he was just called Nix. Joshua sat up and listened. From the orchestrated music and lack of voices he became convinced that it was classic Tom and Jerry.
He pulled the afghan over his shoulders and strode out into the main living area. Nix stayed on the warm spot of the bed, his head turned in towards his body. The cat rarely moved around much anymore, old age and blindness in one eye saw to that.
In the living room, Tripp was stuffing himself with a bowl of Captain Crunch cereal and laughing at the cat and mouse humor on the TV. It was just like back in college except the digs were more up-scale and the hairstyle was different. Tripp was a lean, brown haired man with a bottomless stomach and the annoying habit of eating with his mouth open.
He noticed Joshua moving into the kitchen and spoke with his mouth full, “Sup!”
Joshua waved, found a clean coffee mug and poured himself a cup of coffee. At least Tripp had sense enough to make a full pot. After fixing his coffee how he liked it, Joshua padded into the living room and plopped down in his easy chair. The Korean take out was still sitting there, though it had been finished off and moved to the coffee table. There were a few more empty beer bottles nearby. Dancia must have helped herself.
“I love Tom and Jerry,” Tripp offered, as he watched the animation.
“I know. I still like Looney Tunes better,” Joshua reminded him.
“Do you think its crazy watching cartoons in High Definition?” Tripp asked as he crunched another spoonful of cereal.
“Yes,” was all Joshua could muster until after the caffeine kicked in.
“I don’t. These old MGM classics were shot on thirty-five millimeter film and shown in theaters. They had more definition than the stuff we watched as kids in the eighties.”
Whatever. He was not that into film, unlike Tripp, who was a communications major and had movie posters all over the walls of their shared apartment in college. Tripp and his film buddies would get together some weekends and watch old black and white films Joshua had never heard of and then endlessly debate with each other, which was the best movie of all time, Blade Runner or Citizen Kane. Joshua called them all nerds and retreated to his room to hack on code.
Tripp was a Director for a local TV affiliate and his buddies were either washing dishes at some dive or had moved on to California to wait tables and debate about which version of Blade Runner was better; the original with a voice over or the director’s cut with the new ending. Either way, they were not making a decent living and not making movies like they had hoped. Tripp still liked to watch movies and most of the time he watched them at Joshua’s place. Tripp was the one who told Joshua which high definition TV to buy so they could have the best home theater that Joshua could afford.
“Hey, did you know that dude that died at RegTech yesterday?” Tripp asked.
“I was the one who found him.”
“No shit? Man, I bet that was messed up.”
Joshua was still not ready to rehash the day’s events.
“They think he had a heart attack and died in his chair. He was not a picture of health like you and me,” Joshua said poking fun at his friend’s flab. In college they were on the tennis team and ran five miles a day. But lately they had become lazy and more prone to drinking beer and just skipping the whole exercising ordeal.
“Oh, I saw Delta Charlie this morning. She told me to tell you to check your IM for something.” He was referring to Dancia. In high school Tripp and Joshua used to place labels on people who fit certain stereotypes so they could point them out in public and not be accused of “labeling” anyone, because that was not politically correct. The girls who wore black all the time were called Death Chicks and Tripp’s unimaginative code word for them was Delta Charlie.
“Thanks,” Joshua said, shaking off the afghan and taking his coffee with him as he went into the computer room.
“And take a shower. You stink man,” Tripp called out after him.
Joshua sniffed himself as he sat down at the computer. Yep, he smelled like yesterday’s laundry. Touching the mouse produced a login and he slowly pecked his password into the keyboard twice before being let into the system. The coffee had still not kicked in. He sat back and took a long drought of the miracle java with a soft, satisfying sigh. Tripp could still make a mean pot of coffee.
When his desktop came up he launched Pidgin, his instant messenger client and was soon staring at a message from Dancia. He rubbed the sand out of the corners of his eyes and tried to focus on the tiny font.
(05:15:35) Dancia Rivers: Check your XChat logs for last night on #coders. Looks like the Stuttgart police are calling Zemo’s death a murder based on what his friends found on his computer the night he died. It was something about a message in his code. I looked in our CVS and it still had his code checked out. Guess we’ll loose that change. Maybe I’m just morbid but I wonder what the code Glenn was working on looks like? I’ll be by later. Thanks for letting me use your system last night. I finished the data layer and checked it into CVS. Laters.
They were working on an Open Source project that Joshua had started in college and had decided to resurrect. It was a movie rating and discussion web site, called MyMovies that he had built for Tripp and his film friends. They were updating the basic framework and redesigning it to make it “Web 2.0” and trendy so as to attract hardcore film geeks and maybe some investors. It was kind of like a cross between MySpace and the Internet Movie Database IMDB.
Joshua’s leg started bouncing, the coffee was kicking in. His curiosity was piqued by what the German Police had found in Zemo’s code. He logged into XChat, his Internet Relay Chat or IRC program, and then called up a terminal and started parsing through the logs in Vi, his code editor of choice, using regular expressions. Regular expressions were a kind of code shorthand for finding things in text documents. In just a few short minutes he had found the interesting part of last night’s conversation between several of Zemo’s friends.
In the middle of Zemo’s code they found a calling card, a simple line that turned a freak death into murder. Buried in the code was a single sentence in English, “One down, three to go”. There were no other messages in the code. No other files on his computer were touched. Someone had killed Zemo and wanted the crime to be noticed.
Joshua sat back in his chair, held his black coffee cup in his hands and took a slow drink. The similarity to Glenn’s death disturbed him. Zemo’s apparent cause of death was heart failure. No visible signs of struggle or self inflicted wounds. No family history of heart trouble, no history of illness or disease, just a perfectly healthy teenager dropping dead at his computer in the basement of his parents’ house. Another tragic and sad death.
Joshua knew what Zemo’s parents were going through, at least in some small way. He felt sorry for them and he felt sorry for Zemo. He was a bright kid and a gifted coder, the kind of talent that one rarely found these days in kids his age. He was well respected in the Open Source community too. Already there were Internet effigies being posted all around the globe. Forums and message boards were alive with talk about the murder and about who could possibly have done it, not to mention how they pulled it off.
Joshua scanned the web and quickly took in all the chatter about Zemo. He read forums, news sites and Digg stories all connected in some way to Zemo’s death. The most interesting comment he read was from a well-respected member of the Free Software movement who wondered if the killer was in some twisted way, pulling off the ultimate hack.
Interesting. The notion that a hacker would seek attention and notoriety for the taking of another’s life repulsed him, yet somehow fascinated him at the same time. It was not a very hacker-ish thing to do. The common press had bastardized the word hacker long ago as someone who played pranks on or otherwise caused harm to come to other people’s computer systems. The true meaning of the word hacker was closer to a grand master of a trade. Someone who was so skilled in computers that there was little they could not make them do. Joshua had never met a true hacker. He knew some pretty gifted coders but they were either too immature or their egos were too large to truly be considered a hacker. If this murder was the work of a hacker he must surely be psychotic.
Joshua tilted his empty coffee mug and decided he needed a second cup. He padded back into the kitchen and noticed that Tripp had moved on to the news. More death and suffering from the Middle East flashed across the screen in bloody detail.
“I thought you were in the shower?” Tripp asked.
“I was reading some posts about Zemo, a coder in Germany who was murdered,” Joshua said, pouring the last cup of coffee.
“What’s with all the dead geeks? It must be a former jock getting his revenge,” Tripp laughed at his comment.
“They’re not related at least as far as I know.” Joshua paused a moment wondering what might be embedded in Glenn’s code. He did not notice anything yesterday when he checked in the code to source control. Program code was routinely stored in repositories known as source control, so that changes made to the code could easily be redacted. But then he never actually looked at Glenn’s code. Was there a secret message in his code too? Was Glenn a murder victim?
Joshua headed back to the computer room taking a large sip from his mug. Why would there be anything suspicious in Glenn’s code? Glenn was far from the talented coder that Zemo was. Maybe Joshua was letting his imagination get the best of him. Still, there was no way to be sure until he checked the code. Perhaps Dancia’s hunch was right.
It only took him a few secure shell commands to get inside the RegTech firewall and start accessing the source control software. First he looked at the check-in times for all of the code that Glenn had checked out. When a programmer made changes to his code, he then checked the code into the repository. There were no more checkouts since Friday afternoon, when Joshua checked in Glenn’s code. Next he checked out of the code repository all of Glenn’s C Sharp code files. C Sharp was a programming language that they used at work. Using regular expressions again he was able to search for the words “One down” and in seconds, he had an answer – nothing. There were no matches for “One down, three to go” or even any word followed by “down”.
Joshua breathed a sigh of relief. Then he started noticing the names of the code files in Glenn’s repository. Everything seemed right except for the two files with a different extension. All C Sharp files ended in a .cs extension, but there were two files in the repository with a .rb extension. Those were written in the Ruby language. In all his conversations with Glenn about coding, Joshua had never heard the man mention anything positive about Ruby. Programmers love to compare coding languages like theologians compare religions. But in the end, most programmers specialize in only one language. Their support for that language often takes on a religious zeal.
Glenn was always a C Sharp proponent. He never gave any other language the time of day with the possible exception of Visual Basic the “other” Microsoft language. For him to have two Ruby language files in his project was like finding a crucifix in a Jewish Rabbi’s house. Joshua remembered the last conversation they had about Ruby. Glenn had argued that it was just a passing fad and would never have the corporate support that a VB or a C Sharp would have. Come to think of it, Glenn never actually dissed the language, only the acceptance of it.
Joshua checked out one of the Ruby files and started scanning it looking more at the comments than the actual code. It was some kind of a C Sharp to Ruby conversion program, which meant that Glenn must have been working on ways to use C Sharp code in Ruby applications.
“Wow,” Joshua said aloud.
He never realized that Glenn was a closet Ruby coder. It was hard to get his head around that idea. The program was a scratch script, something Glenn was using to try out some new ideas. It was not formal code used in an actual application. There were very little comments and what was commented usually had things like “hope this works” or “change this later”. The temporary notes were for him and did nothing to explain what was actually going on, which was the point of properly commented code.
Joshua opened the second file. It was a real source code file with a proper heading and was properly commented. Joshua recognized it immediately because he himself had written it. It was one of the models used in the MyMovies web application. He had co-written the model with the third member of their team named Themis. So how the hell did Glenn get a copy of my code? Especially code that you had to pull from a closed repository for the MyMovies application? Could Themis have given it to him? I certainly didn’t give it to him.
It made no sense, unless Glenn was Themis. The thought lingered in his mind until it crystallized. Was Glenn the third member of their MyMovies team? How could that be? Then Joshua realized that he really knew very little about Themis. They had conversed on IRC quite a bit over the past few months but they had talked mostly about Ruby and how to construct Ruby web applications. Neither one had mentioned what they did for a living, only that they loved Ruby and wanted to work on a project together. Themis was brought onto the MyMovies team because Joshua invited him. Dancia didn’t know who he was either, but at the time, she agreed they needed his expertise. They all knew who Zemo was and Zemo knew who they were, but nobody knew the real identity of Themis. Since everyone on the project referred to each other by their hacker alias, it was doubtful that Themis even knew who they were. Such was the way things were on the net.
As he looked at the code he and Themis had written he noticed the message plain as day — “Two down, two to go”. The killer had left his calling card in the code of two members of Joshua’s web application team. Someone is targeting us! How long before Dancia and I am attacked?
Did either of them notice the line before they died? Then he realized just how insane the idea of killing someone sitting at their computer was. How could you kill with code? Was the sentence a trigger for another program to run or was it just a signature card and nothing else? I have to find out.
He logged into Glenn’s computer to see if it had been the victim of a root kit. Root kits were back door programs that Black Hat Crackers left on computers that had been compromised. A good root kit would let the bad guy into the computer at any time and have his full way with all the vital system files, essentially running as the machine’s administrator.
Joshua knew about root kits but he was not an expert in finding them. For that he would need some help from a security expert, someone trained in the black art of cracking into computers for the sole purpose of catching those who did such things without consent. I need Psycho. Psycho was the handle of a talented security admin that Joshua knew from college. His real name was Nik Sikes, but everyone called him Psycho because when it came to doing what he did, Sikes was just plain crazy. Psycho was a freelance security expert, hired by companies to break into their systems and find their weaknesses. He would sneak into every computer on a network and drive the company’s security expert’s nuts trying to catch him.
It was a valuable skill to have in these times of complete reliance on computers and networks. Sikes made obscene money doing what he did and traveled the world doing it. Every time he was back in Boise to catch up on his snail mail, Joshua would hook up with him and they’d go out drinking together. Sikes always had some entertaining stories to tell about how he was able to break into some big client’s system and they never knew he was there. One time he was able to catch a Black Hatter at his own game by laying a trap for him. When the client flew him out to their offices in Singapore, Sikes had already been through their networks and caught the offending cracker in his tracks. All he had to do was show them what he had done and accept his fat paycheck.
Joshua knew he had to chat with Sikes but he didn’t know where in the world his friend was working. That was what IRC was so good for. He logged onto his favorite channel and checked who was online. Sure enough, there was Psycho. A quick ping to see if he was actually at the computer came up empty. Even people who spent the majority of their lives on a computer were away from the keyboard sometimes.