Skip to content

The Real Reason I Love AdBlock

First, let’s get this out of the way: Yes, there are ads on my web site. I have no problem with anyone blocking them. In fact, I have no problem with anyone doing what I’m going to discuss in the remainder of this article. I’d love to hear from you if you do, so that I can improve the design of my web site.

The ability to block ads is one of the best inventions in browser technology, since so many ads are incredibly obnoxious and intrusive these days. Lately, though, I find that most web sites seem to be designed to be obnoxious and intrusive, even without any ads. Compare the two screen shots below, for example. The first shows an article on Business Insider in Google Chrome.

Without AdBlock

As far as actual content goes, I see a headline… and that’s about it. There’s all this stuff going on everywhere. You’ll notice that there is only one ad visible, and it’s not really that annoying. In fact, I’d say it’s the least irritating intrusion into my reading experience. Go to the site yourself, and you’ll see what I mean. Imagine trying to read a newspaper like that.

Now, here’s the exact same article in the exact same browser window with AdBlock turned on, along with my own special set of tweaks to clean up the page.

With AdBlock

Such bliss! Now I can read the entire article with no annoyances. The text of the article fits into the same space that before, without AdBlock, showed only the headline. There’s also no popup that flies in from the side when I scroll down.

The Magic

If you use AdBlock and you’d like to make your reading experience on Business Insider as clean as this, try the following set of customized filters:[id="right-rail"][class="masthead"][class="image"][class="masthead condensed"][class*="popular-video"][class="post-top"][class="category-wrapper"][id="comments-open"][id="comments"][class="footer"][class*="subnav-container"][id="twttrHubFrameSecure"][id="tray"][class*="image-container"][class*="image-container"]
##[class="no-referral show"]

The way to set this up for yourself on other sites is to right-click on an obnoxious bit of the screen, select “AdBlock” from the pop-up menu, and select “Block this ad” from the sub-menu. From there you can tweak the filter until the annoyance is removed, and then reload the page. I’ve done this enough now that I can usually clean up a site in a couple of minutes, and if it’s a site that I read frequently I can make up for that lost time after a few visits.

Maybe this kind of design makes a lot of money for Business Insider and sites like it, but what it says to me is that the articles, and their contents, are the least important features of the site from the publisher’s point of view.

From my point of view, the only reason I’m even on the site is to read the content. If any site makes the content hard to read, and if it’s too difficult for me to clean up the site with AdBlock, then I’m just not going to visit that site anymore.


Master Foo and the Technical Recruiter

I found Eric Raymond’s Unix Koans of Master Foo several years ago and simply loved them. Like the Zen koans they are taken from, they are a succinct way to communicate concepts of software development, specifically as they relate to the Unix development subculture.

In the same spirit as Eric’s koans, I wrote a similar story involving the illustrious Master Foo and his interaction with a technical recruiter:

An ancient painting believed to be a likeness of Master Foo.

A technical recruiter, considering that the ways of software developers were strange and unusual, sought an audience with Master Foo to learn more about the Way of software. Master Foo met the recruiter in the HR offices of a large firm.

The recruiter said, “Many software craftsmen scowl or become annoyed when I ask them how many years of experience they have in a new programming language. Why is this so?”

Master Foo stood, and began to pace across the recruiter’s office floor. The recruiter was puzzled. “What are you doing?”

“I am learning to walk,” replied Master Foo.

“But you’ve been walking most of your life!” the recruiter exclaimed.

“Yes, but this floor is new to me.”

Upon hearing this, the recruiter was enlightened.


Becoming a Developer Overnight, In Only Five Years

“Do you think hard work can make you talented?”

“Yes. I do.”

This post was inspired by an article on Cal Newport’s site entitled, “The Pre-Med and Ira Glass: Complicated Career Advice from Compelling People”. That article caused me to reflect on my path to my current career. By most people’s standards, I accidentally backed into my career as something of a prodigy, since by age 19 I was working as a full-time software developer in the Florida Governor’s office, but it took years of hard work to get there.

The Early Years

Through age 14 I had no idea what I wanted to be when I grew up (which was perfectly normal, of course). However, the Christmas after I turned 14 I got a TI-99/4A computer, and right away I dove into learning how to program it. I spent the next few years sitting in front of a computer with a guitar in my lap, programming for a while and playing guitar for a while, pausing only for annoying intrusions such as schoolwork or meals.

Back then there was no Internet, and BBSes hadn’t gotten very popular yet, so if you had a computer and wanted it to do anything interesting you usually had to program it yourself. I bought whatever books I could find and soaked up everything I could learn from them and from magazines such as COMPUTE!.

I guess I did have a little bit of natural talent with the computer. I could imagine what I wanted the computer to do and then turn that vision into a working program within weeks of getting my first computer. My first simple programs drew pictures of spaceships on the TV screen, and within a year or so I had written a text editor that could encrypt messages to my friends, a simple database application, and a typing game to improve my keyboarding skills.

The summer after I graduated from high school, at age 17, I was given an opportunity to work as an administrative assistant in a programming shop in the Florida Governor’s Office. Even though the job entailed answering phones, taking messages, and delivering memos, I got to be around real programmers writing real code and listen to them talk about their jobs. Even better, there was an entire room at the office full of binders containing all of the printed source code for the entire budgeting system (this was way before Subversion or git). I would spend my breaks thumbing through reams of COBOL and Natural 2 code trying to sort out how it worked. I felt like Mickey Mouse in “The Sorcerer’s Apprentice,” reading the wizard’s secret books of spells.

When I started as an admin, the office’s word processing system was still in transition from a mainframe text editor to WordPerfect, and I used this transition as an opportunity to help automate the office. I wrote a WordPerfect macro that could download an existing document from the mainframe system, translate the mainframe formatting codes to WordPerfect formatting codes, and save the file locally so that the document could be edited in WordPerfect from then on. It was a very simple macro, but it was a huge time-saver and it got a little bit of attention. Next, I wrote a program that would let me edit and print the address labels for a memorandum distribution list. That caught the eye of a programming manager at the office and eventually led to my first real programming job, at age 19, in the office where I had started as a lowly admin.

When I got my first computer and decided that programming was what I wanted to do for the rest of my life, I didn’t really have any idea how to translate that desire into reality. The officially sanctioned method of entering the profession was getting a bachelor’s degree in computer science and then applying for jobs afterward, but I ended up short-circuiting that process by soaking up all the knowledge I could find, creating programs for any and all ideas that I had, and by taking the first opportunity to just be near computers and software developers. Even though I wasn’t initially hired as a developer, the admin position still allowed me to polish my programming skills by writing applications that contributed to the efficient operation of the office. That eventually led to an entry-level development position where I continued to learn my craft and refine my skills.

The article I referenced earlier made me think of this path to my current profession, because the first thing I started doing was developing my skills. At first I didn’t have much guidance or direction, but it turned out that the most important skills for a software developer are visualizing the end result and then creating a plan to bring that vision to reality, and that’s what I worked on in the five years between getting my first computer and finally becoming a professional software developer.

If you have an idea what you want to be when you “grow up,” but you don’t know how to get started, my advice is to worry about building skills and gaining experience first. Once that’s underway, try to put yourself as close as possible to the people who are doing what you want to do and learn all you can from them. Eventually you’ll build your skills to the point where you can make a meaningful contribution to an organization by doing not just what you love, but what you’re demonstrably good at.


Fix it. Bolt it down. Forget it.

Setting up your environment to be the same all the time, everywhere, can make it easier to focus on the task at hand.

From the age of about 14 I’ve been sitting in front of a computer with a guitar in my lap. It’s been a cheap steel-string guitar, a cheap classical guitar, a cheap electric guitar, an expensive electric guitar, an expensive classical guitar, and several other variations in between, but it’s always there. My home office is full of guitars and amps and wires and microphones, but I keep my classical guitar right by my computer table where I can pick it up and noodle on it while I think.

The tag line of this site is “Pedagogy for the autodidactic programmer.” A goofy play on words, yes, but I firmly believe that if you’re self-taught you must be a much more demanding teacher and a much more dedicated student if you’re to be successful. I’m constantly looking for lessons to apply to the craft of software development, and I find many of them in the field of music, where I am also self-taught.

Continue reading ‘Fix it. Bolt it down. Forget it.’ »


The pbrain Programming Language

Note: This is a rather old post that didn’t quite survive the transition from my old ASP.NET server to my new Linux-based server. I imported it as-is into WordPress so that it would be readable again.

This is an extension to the Brainf**k programming language that adds the ability to define and call procedures. If you’re wondering about the asterisks in the name of the programming language, it’s because the name is rather rude. That’s why I decided to use a name for my extension that a good bit tamer. After all, my Mom and my kids still read my site from time to time.

After making a rather simplistic interpreter in C++, I decided to go ahead and make a .NET compiler as well. The first one was in C++/CLI, the new extension to standard C++ available with Visual Studio 2005 and .NET 2.0. I wanted to make this available for .NET 1.1 as well, so I ported the compiler to C# (since I’m not a huge fan of Managed C++, the precursor to C++/CLI).

Thanks to rdragon on the Undernet #c++ channel and to Daniel Cristofani for their comments and input.

Continue reading ‘The pbrain Programming Language’ »


Dragsens version 1.4

UPDATE: Download the latest version from the main project page. There is also a version of this utility with a graphical interface that’s easier to use.

It’s time for a new version of the command-line version of the dragsens utility, which allows one to change the mouse sensitivity for detecting mouse drag actions in Windows.

A comment posted by Mark suggested the addition of a parameter that would show the current sensitivity settings. I added a /D parameter which, when provided by itself in the parameter list, will output the current drag sensitivity settings for the X and Y axes:

Current settings:
X=4, Y=4

This new parameter may also be combined with the existing parameters. For example, to display the current sensitivity settings, set the X and Y sensitivity to 20, and then display the new settings, enter dragsens 20 /d on the command line:

Current settings:
X=4, Y=4

New settings:
X=20, Y=20

I took this opportunity to clean up the help text a little bit, too. Entering dragsens or dragsens /? on the command line will display the following:

Changes the default drag sensitivity.

DRAGSENS [pixels] [/X pixels] [/Y pixels] [/D]

  pixels  The number of pixels the mouse must travel to initiate
          a drag operation. Providing just a number will change both
          the X axis and the Y axis to the same value.

  /X      Change the setting for the X axis (horizontal).

  /Y      Change the setting for the Y axis (vertical).

  /D      Display the current drag sensitivity settings.

Version 1.4
Paul M. Parks

You may download the version 1.4 executable here:
(MD5 hash: 651A73A9D1696E41AACABDCE2C8B4633)

If you’d like to examine or modify the source code or build your own executable rather than relying on the executable above, you may download the Visual Studio 2013 project and source here:
(MD5 hash: E6174040203F220D7F0041481206BBA8)

Please let me know if you encounter any problems or have any questions.


Cabin Fever

Atlanta shut down for a few days as the result of a moderate snowfall. Perhaps you saw something about it on the news. Now, another winter storm is on the way, and this one is supposed to be worse than the last one.

Last time, I made a little “diary” on my Facebook page using pictures I snapped with my phone and apocalyptic-sounding descriptions of my preparations for the oncoming storm. I got so bored sitting in my home office that I put them into a little Youtube video. With apologies to Ken Burns:

Even Bitstrips was co-opted:

There’s no telling what the next storm will produce. Stay tuned.


Windows Version of Dragsens

UPDATE: Download the latest version from the main project page. There is also a console-based version of this utility that’s more suitable for system administrators.

In response to a comment on the previous version of the drag sensitivity utility, I’ve created a new version of the utility that includes a graphical interface and a means of testing the drag settings in the interface.

WinDragSens Interface

This version also maintains all of the command-line parameters of the previous version so that it may still be used from scripts or batch files.

You may download the executable here:
(MD5 hash: CC1680ED81730AA73F70BCD21F0A6CB1)

If you’d like to examine or modify the source code or build your own executable rather than relying on the executable above, you may download the Visual Studio 2013 project and source here:
(MD5 hash: 3D1AF2688F9560D90CAE8FD266F48915)

Please let me know if you encounter any problems or have any questions.


Updated Version of Dragsens

UPDATE: Download the latest version from the main project page. There is also a version of this utility with a graphical interface that’s easier to use.

I have built a new version of the dragsens utility, which allows one to change the mouse sensitivity for detecting mouse drag actions in Windows.

This new version fulfills a request by Zach to add the capability to set the horizontal and vertical sensitivity independently. This is accomplished through two new command-line parameters, /X and /Y. Specifying just one of these parameters will change the sensitivity in only that axis:

dragsens /x 8
dragsens /y 6

It is also possible to provide both parameters at once:

dragsens /x 8 /y 6

Providing only a number on the command line will change both the horizontal and vertical axes to the same number of pixels.

dragsens 8

You may download the version 1.3 executable here:
(MD5 hash: C86AC30E3A07D6D063C3F710CE65C772)

If you’d like to examine or modify the source code or build your own executable rather than relying on the executable above, you may download the Visual Studio 2012 project and source here:
(MD5 hash: B510F29CFDF1F8AFCA8857ACEB7870D8)

Please let me know if you encounter any problems or have any questions.


My Life With Programming Languages

A language that doesn’t affect the way you think about programming, is not worth knowing. — Alan Perlis

My first programming language was Basic on a TI-99/4A. Contra Dijkstra, I don’t think it did me too much harm. Of course, I did eventually “outgrow” that language.

Just now I was pondering my progression through various programming languages and paradigms over the 28 years that I’ve been playing around with computers (almost 23 professionally as of this writing). My attitudes toward several of the languages I’ve used over that time looked something like the following:

Continue reading ‘My Life With Programming Languages’ »