Keyboarding and the Command Line

My first experience with computers was with the TRS-80 Model I, when I was in junior high, in 1984. Back in those days, familiarity with the keyboard was a must, when GUIs were an unknown beast, and knowing the commands to make your computer do what you want it to do was considered elitist. I took typing class to increase my typing proficiency; alas, I am nowhere near 100+ wpm. However, at the level I’m at (~45 wpm), I’m able to do most of the things I want to do without too much trouble, like blogging, and typing at the command line.

When I took a business class in high school, I first came across the One True Keyboard, the Model M. For those not familiar with computer history, IBM introduced this keyboard in 1985, and it came standard with PS/2 computers. While the PS/2 line became extinct shortly thereafter, its keyboard became the progenitor of modern keyboards, and rightly so. The layout was meant to help typists familiar with the IBM Selectric line of typewriters transition to computers and not have such a learning curve.

While I am a proud owner of an original Model M, I realize that modern keyboards have their place, too. One such genre of keyboards is the mechanical keyboard. After the 90s spate of rubber dome keyboards, which are mushy pieces of junk, the mechanical keyboard has a satisfying feel. Being a big fan of the clicky sound of the buckling spring switches of the Model M, I feel strongly about having the tactile feedback of pressing a key. For me at least, my typing is greatly improved by both hearing and feeling when a key has made contact, and seeing the character I typed appear on the screen at the same time.

To that end, I recently purchased a Corsair K70 LUX Gaming Keyboard, and it rocks the Cherry MX Blue switches which has the tactile bump and click, making typing on these keyboards a pleasure.

I’ve been a long-time fan of Coding Horror. I was inspired by the owner of the website, Jeff Atwood’s post We are typists first, programmers second, where he had this to say about the necessity of learning how to type efficiently:

We are typists first, and programmers second. It’s very difficult for me to take another programmer seriously when I see them using the hunt and peck typing techniques.

…there is nothing more fundamental in programming than the ability to efficiently express yourself through typing. Note that I said “efficiently” not “perfectly”. This is about reasonable competency at a core programming discipline.

I couldn’t have said it better myself. I am aspiring to become a sysadmin, and while one is not required to program applications to do one’s job, one will, at a minimum, be required to write scripts to do certain tasks. Typing proficiency is required to make writing the script less time-consuming.

If you run Linux on your computer(s), and are somewhat a geek, then you know that familiarity with the command line is a must. There is relatively little that can be accomplished with merely a mouse click; specifying exactly what you want your computer to do requires typing on the command line.

I felt compelled to make this post because I’m seeing a complacency and jadedness become prevalent with respect to the ancient art of keyboarding. Using a keyboard will remain relevant for years to come. Using a mouse alone for computing is not enough. People who know how to leverage the command line for their needs know what I mean when I say that Linux makes getting “down and dirty” with the computer possible, and you are able to make your computer do things which are difficult, if not impossible, with Windows.

Long live the keyboard!

If it ain’t broke…

What happened to me today as I was messing around on my system is a perfect example of the wisdom of the old saying. For example…

I had a nostalgic feel for my Unicomp Model M keyboard, so I thought I’d re-purpose my Corsair Vengeance K65 Gaming Keyboard to my laptop. Keep in mind, however, that I had a perfectly working bluetooth setup, and that, along with my keyboard and mouse, worked through USB. My Unicomp, however, has a legacy PS/2 connector. Which, in theory, shouldn’t have been a problem. Just substitute the Unicomp for the Corsair. Right? WRONG!! Using a legacy connector turned out to introduce all sorts of lag to my system, which has communication layers like this: Audio–>PulseAudio–>Bluetooth.

In order for this system to work flawlessly, the same bus (USB) has to be used; legacy connections are a NO-NO. This has to do with the way Linux routes communications from the system peripherals. From what I’ve been able to gather, the PS/2 connector introduces major amounts of lag; I’ve not measured, but if I start a song via VLC, and then press stop, it will take 1-3 seconds for the sound to actually stop. Not an acceptable solution.

I only discovered this by logical reasoning, after messing around with certain system files, files which previously had worked without issue. When I met with failure time and time again, I sat back and thought about it. Then it made perfect sense.

Only after re-swapping the Corsair for the Unicomp, did my system return to its previously perfect working order. This was a humiliating lesson for me, one which I, in retrospect, should have known was going to happen, but frequently as happens with us humans, doesn’t become painfully clear until after the lesson has been taught.

Moral of the story: Don’t mess with your system, even if you think you have good reason to do so, unless first you assess why your system works the way it does, and then make the adjustment only if you’re sure the adjustment will not bork your system’s performance.

It works for me!

Originally, this post was going to be about the non-viability of Windows as an OS geared towards the people, instead having been created to serve the interests of a mega-corporation, but I think instead that a constructive post is called for instead. One that shows why people run the OS they do.

I’ve begun to realize recently that people get into religious-type wars over the silliest things, like vehicles, and sizes of bodily appendages, and what-have-you. The area I’d like to concentrate on is the operating system that people run, and why they choose to do so.

Operating systems are, by their very nature, facilitators. As non-intuitive as it sounds, OSs were not intended to help users; they were designed to help programmers cut down on the amount of work they would have to do to write an application.

As Neil Stephenson puts it:

Operating systems are not strictly necessary. There is no reason why a sufficiently dedicated coder could not start from nothing with every project and write fresh code to handle such basic, low-level operations as controlling the read/write heads on the disk drives and lighting up pixels on the screen. The very first computers had to be programmed in this way. But since nearly every program needs to carry out those same basic operations, this approach would lead to vast duplication of effort.

Nothing is more disagreeable to the hacker than duplication of effort. The first and most important mental habit that people develop when they learn how to write computer programs is to generalize, generalize, generalize. To make their code as modular and flexible as possible, breaking large problems down into small subroutines that can be used over and over again in different contexts. Consequently, the development of operating systems, despite being technically unnecessary, was inevitable. Because at its heart, an operating system is nothing more than a library containing the most commonly used code, written once (and hopefully written well) and then made available to every coder who needs it.

So when people argue for their favorite OS, whether that be MacOS, Windows, any distro of Linux, *BSD, or whatever else less-known OS that runs on the x86 platform, they’re actually arguing over their favorite flavor of facilitator. Much like the discussion of different flavors of ice cream, such discussions are ultimately pointless in the grand scheme of things. Who cares if your favorite OS is this or that? To some, however, it is vitally important that others agree with their choice; it is miserable to realize that you are the only one (or so you think) that has made the choice of OS you have. And so you spew vociferously vituperous vitriol towards anybody who dares to disagree with your choice.

Let this be a word to the wise: if your OS runs what applications you want, be happy, and let everyone else be happy with their choice. Instead of criticizing, help others with their issues, if it happens to fall into your area of expertise. If it differs from yours, let it be (As Paul McCartney would have it).

Then everybody will be just a wee step closer to being at peace with each other. Instead of being divisive over our differences, let us unite with our similarities, because we have much more of the latter than the former.

Auto-connecting Bluetooth via PulseAudio

NOTE: I think I’ve found a way to make sure this blog has regular postings; to document solutions I’ve discovered, so as not to forget it next time around.

Without further ado, here goes nothing:

I recently bought a Bluetooth stereo receiver, a Denon AVR-S510BT. As it’s intended to be an entry-level receiver, there’s not much in the way of included feature(s), like support for popular streaming services such as Pandora or Spotify, or even hardware connections like Ethernet; it only has Bluetooth connectivity, which for my purposes is perfect. I spend most of my time in my apartment, using a part of it for my home office. The distances involved are well within Bluetooth range (~30 ft). Testing has borne this out; connections are strong, with nary a dropout. For someone who really enjoys his music, once I get into a song, there’s nothing more frustrating than a dropout, or worse, a series of them.

My receiver is programmed to auto-connect to a bluetooth device upon startup, as the mode specified is Bluetooth. I have it automatically paired (trusted & authorized) to my Slackware computer. For playing my music, I use VLC, a handy, versatile player that has never failed me yet.

The problem was that for my receiver to successfully connect, I had to manually right-click the bluetooth icon in the system tray to pull up the app, then I would hit the ‘Connect’ button, then the receiver would proceed to connect. Which is all well and good, but this is something I would much rather see the computer automatically accomplish instead of myself. There’s a good reason that there’s a saying that goes, ‘Google is your best friend’.

Because it is.

One search, and I was able to connect to a forum site which gave me the solution. One that was rather simple; add a single line to a file.

I added the line:

load-module module-switch-on-connect

to the file /etc/pulse/default.pa.

Now for the acid test.

I saved the changes to the file, and shut off my receiver. Next, I rebooted my computer. Once my computer came back up, I turned my receiver back on. Like clockwork, it automatically connected without the slightest intervention from yours truly.

Sometimes, it pays to be persistent; one never knows what solutions lurk out there in the dark byways of the Information Superhighway unless one looks and doesn’t give up easily.

My Journey To Slackware

I thought I’d republish here a post I made on Slackware’s forum, so as to preserve this personal valuable content, and not have it lost to the forum’s constant rearranging of topics.

Without further ado:

I started using computers in the fall of ’84, when, as a fresh-faced student in junior high, I had my first taste of computers. The very first computer I tried was a TRS-80 Model I. By today’s standards, it was, and is, hopelessly underpowered, but for me, it was a chance to control something in my life. I knew from the moment I saw it that computers would become my life’s passion. That has not changed.

When I entered high school, I took a programming class, and they used Apple IIe computers (a computer, by the way, I have major respect for, having been imbued with the genius of one Steve Wozniak, and the last computer Apple made which I used with regularity). That whetted my appetite for programming at the time, and I wanted more.

After getting out of the military, I started building my own computers. Anyone who started in that era will remember vividly when add-on cards came with jumpers, and a manual that detailed what settings controlled what IRQ line it would take, what memory range it would occupy, etc. To have a working system then would have been a work of art, and maybe a bit of genius.

It was around ’96 when I first heard of this open-source OS called Linux. At the time, I was running FreeBSD, and liked its init system, and hoped for something similarly simple to administrate. Nevertheless, I experimented with some of the other major offerings to see if something else would be better suited to my tastes.

Alas, none of the major offerings (Red Hat, SuSE, Caldera, among others) came close to satisfying my need for tweaking my system to my heart’s content. In frustration, I googled for a distro which was similar to BSD. Among the results was a mention of something called Slackware. Curious, I checked it out. The description sounded like what I was looking for, so I downloaded it. This was in, I believe, about 2006, soon after the release of 10.2; I bought 11.0 on CD-ROM when it was released, as a measure of good faith.

I had to use Windows for some applications back then, because application support wasn’t where it is now, and so I dual-booted. But gradually, as Linux app support became better, I gradually used Windows less and less, and in about 2012, I stopped using it entirely. And I have had no reason to regret leaving it behind.

The reason I use Slackware is because it gives me the experience that those older home computers gave me: it forced me to know what my computer was doing behind the scenes. When something was broken or didn’t work right, I was forced to find my own solution. Solving problems can be simultaneously frustrating and exhilarating. For me, it is something that I can never explain to another who is not already intimately familiar with that experience. You just have to experience it for yourself.

I can’t ever imagine another distro that will give me that experience and for that reason alone, I will continue using Slackware for as long as it is maintained. Hopefully that will be for awhile!!