Cookie Notice

As far as I know, and as far as I remember, nothing in this page does anything with Cookies.


Google Plus To The Rescue!

I mentioned yesterday my new need for a button that's a keyboard that only does Scroll Lock. I put it to the Arduino-loving corners of Google Plus yesteday, and I got a response.

This is the response. And the wonderful thing is that there are only four parts, they're inexpensive, and I'm sure I have at least one of 'em hanging around. Five, if you require LRF compliance.

Don't know that I'll go with yellow, and I might have artistic fun with the enclosure, but looks like this would be a quick and easy project.


Failed New Gear Day: Logitech K270 Wireless Keyboard

This is my new keyboard, a Logitech K270. I chose it because I always have good luck with Logitech gear, and because of the Logitech Wireless Touchpad in front of it. 

Ignore the Dell keyboard in front of it. This process is intended to replace that keyboard, and to reduce the number of cables crossing my desk.

Yes, the words "failed" and "intended" were used. But I'm getting ahead of myself.

There's a little USB dongle that comes with wireless keyboards, and there's a Windows-or-Mac tool that lets you add new peripherals to your dongle, so you only need the one. That's a win.

Now, here's the lose: I'm using this through an IOGear KVM, which listens for two taps on the Scroll Lock key to tell to switch to the other desktop, and there is a specific USB port you are supposed to plug your keyboard into. That's OK, right? Thing is, a Unifying dongle plugged into the keyboard USB port cannot communicate through the KVM.

I'm typing this through that keyboard, through that KVM. I'm plugged into the mouse port, and I have that Dell keyboard plugged into the keyboard port, placed behind some stuff but where I can easily double-tap the Scroll Lock key when necessary. I have changed the other details my setup, setting my Windows box as the server of my Synergy setup, so for most circumstances, I'll rarely have to switch, but I will be able to switch when necessary.

Now, if I can only hack something up to take care of the Scroll Lock issue and free up that keyboard...

It's Yak Shaving Day

What is Yak Shaving Day?

I can repost the Jargon File entry, but I'd rather explain via my life.

I'm creating a complex data entry application using Perl's Dancer MVC framework as the core, but as the requirements are complex, I'm doing a lot of the front-end in Javascript and jQuery. As I'm using Dancer, I have an outer template that's holding the head and thus the libraries. So, I could have several libraries that do all sorts of stuff on several sub-pages, or I can start out right and create these things with testing and a mechanism, qua Steve Souders, to unify all the Javascript libraries I write into one file, minify it and gzip it. Having each library separate for testing is another goal of this process.

Right now, I'm hung up on making the minifier work. I'm trying to use YUI Compressor, which should come via apt-get on my Ubuntu box, but it's failing to work, kicking out Java errors. There was a point in my history where I was excited about Java, but that was before I tried to use it. The reality of writing Java (in this case, the applets that were once in vogue but now have been replaced by Flash, which is increasingly being replaced by the raft of interconnected technologies we call HTML5*) and the official preference for GUI interfaces over the command-line or compatible code that was and is my bread and butter. So, I have repressed any knowledge of debugging Java I may have gathered, and that knowledge occurred over a decade ago. So, I'm out of my depth.

So, I will be shaving yaks today. Hopefully not waking up in a ditch.

* Allow me to apologize for my tendency to place paragraphs in parentheses. I'd claim that it won't happen again, but parenthetical digressions have always been my favorite pastime, which leads to the topic of this post.  


Thoughts on my Setup

My coworker has recently moved from an years-old HP hooptie of a PC to a modern hotrod. He doesn't need it — his work occurs on the servers and clusters, not on his workstation, so this is just a nice place to store his xterms and browser — but now I have a mid-to-late XP-era machine that's demonstrably faster than the one-core Dell clamshell that holds my xterms.

My Desktop
This is my setup right now:
  • Dell Optiplex 755 with hard RAID and 8GB RAM running Windows 7 64bit, with a DVI output (right screen)
  • Dell Optiplex 260 with 2 GB RAM running Ubuntu 10.04 LTS (left screen)
  • Synergy set up for keyboard and mouse sharing across the two machines, with the Linux as the server and the Windows as the client
  • An IOGear USB KVM switch which allows me to go to the Windows when I need to do something I can't do with keyboard sharing (mostly for admin work and login) 
  • An audio pass-through setup in the Linux machine which receives the audio out from the Windows machine. I also have an audio cable free that I can use with my laptop or Android phone (not pictured here, as it's taking the picture.)
  • I have a Dell USB keyboard which is reasonably good and a previously-blogged Logitech Wireless Touchpad. One of the inspirations for me going back and doing this is Vivek Haldar's post on his setup, focusing more on the ergonomic health of the setup rather than the compu-bling part of it, and I think I can credit a great part of my continued wrist health to my preference for trackballs over the last decade, and I think and hope the Trackpad will continue. (I'll be getting a wireless keyboard soon, too, so the wires across my desk will be fewer in the coming weeks.
This is a reasonably good setup, but I do have issues with it.
  • The audio situation is OK but not perfect. Plugging in the audio source brings attenuation of the bass frequencies, and seeing as I try to use techno and related music as my programming music, the bass frequencies are a big part of what I want.
  • I have two one-head PCs right now, and that means a hard distinction between what goes on in one and what goes on in the other.
  • As mentioned, I cannot do admin and login over Synergy, so I have to switch over via the KVM a fair amount, and sometimes stop and restart Synergy so can get my keyboard back.
The easiest move would be to swap the old Dell for the HP, but I'm thinking the smart move would be to get a two-head video card for the newer PC. The issue there would be that I then can't SSH into my Linux desktop (where I have all the tools and configuration that I like) to make changes from home. I'd have to set up VPN and use RDP, which is nowhere near as lightweight, and put more of my config on our servers. I could set up a Linux development environment in VirtualBox, but then I'd have problems SSHing into my desktop. And I could wipe and reinstall, but that would be destructive of what I have, so I'm largely unwilling.

So, I'm thinking the move is 
  • Set up Linux on the HP, move what I can of my development setup there.
  • Change the older Dell into the local Git server I've been wanting. Keeping your changes is all well and good until your hard drive dies, right?
  • Get a better video card for the newer Dell, which would allow me to have two heads on the Windows machine.
  • Use RDP or SSH (depending on need) to get into the Linux machine as needed. 


Please Code Responsibly.

Jeff Atwood of Coding Horror and Stack Exchange has offended some people by saying "Please Don't Learn To Code". My vector on this is that he's wrong, or at least pointing at the wrong metaphor.
Look, I love programming. I also believe programming is important … in the right context, for some people. But so are a lot of skills. I would no more urge everyone to learn programming than I would urge everyone to learn plumbing. That'd be ridiculous, right?
Yeah, it would be ridiculous. It would be downright silly. There certainly isn't any market for people gearing up and taking care of their plumbing themselves.

Clearly, if you are not a plumber, there are jobs too big for you, or too complex. But if rain, a failed sump pump and the previous owner not installing a check valve on the sump-to-septic-tank pipe have caused a flood of water and some sewage to flood your basement, the cost of replacing and repairing stuff is high enough, and with a little knowledge (which my friend Mike had), sump pumps and check valves are easy enough to install, leaving your money free to purchase bleach and a new mop and to hire a dumpster to hold all the ruined things.

So, it would not be ridiculous to learn something about plumbing. If you wanted to do something more advanced, you'd want to go to a professional, but certainly it is fine for me to learn enough to switch out shower heads and faucets and to fix the disaster in my basement, right?

I think the same thing about computing, although it's more positive than the basement-disaster story. Someone may want to collect and graph their monthly bills to determine if it's time to cut the cord and watch only Hulu and Netflix or something, or one of many other things, or connect things so one email texts all their children and tells them to come to dinner. Or something else. There are wonderful tools to make these things easier for people, like Yahoo! Pipes and iftt, but even then, it helps to have some sense of data structures and algorithms. Not much, but something. Just as there's room between real hackers who write low-level things and people like Jeff and me who write things that sit above them that people use, there's room between us and the people at home who want to connect a new sprayer to the Internet pipe.

Are they going to be professional programmers? Probably not. And are there dangers here? Yes, there are, like there was a danger of a previous owner to not install a check valve, which allowed the septic tank to drain into my basement. But there are worse dangers.


Wondering how to proceed with my web application

I don't want to go too deep into the detail because what it actually does is very specific to the lab. There is a lot of data I'm wanting to collect, select, connect and commit to a database. Which is very bog-standard for my web work.

Thing is, it is a lot of state that I want to put together, and I hate putting together lots of state iteratively via repeated web inputs, because each time you go back to the server, you increase time and annoyance and the potential for catastrophe. So, I really want this to be an AJAX-lead mostly-javascript thing.

You want to know the absolute coolest thing about coding Javascript? You can put it all together via Javascript.  You can have a page that looks like <body></body> and have absolute control over everything on that page. It is true that, when you do that, this means that people who run without Javascript get absolutely nothing, and this is a problem, but there are times when you can create something in HTML with some small Javascript additions that are not necessary, and there are times when putting it together in Javascript is the whole of the point and re-implementing in HTML and CGI are just in the way.


We are experimenting with MVC frameworks, very specifically Dancer. We've seen and done enough with Dancer to decide that this is the way we want to go with new web development. In a way, I'm pushed, but in another way, I see this as accepting the change of technology. I don't want my skills to be rooted in the early 90s more than they already are. So, I for one welcome the new MVC overlords. But I'm seeing a Template Toolkit page that says <body> <!-- Insert Cool Stuff Here --> </body> which kinda obviates the purpose of making it dynamic like that in the first place.

Right now, I'm thinking through the data, deciding on the right way to make and modify the database tables to get at it, and mocking up what I want it to look like in straight HTML, but I am getting close to the point where I have to make that decision, and the way isn't clear to me.