R (15) Admin (12) programming (11) Rant (6) personal (6) parallelism (4) HPC (3) git (3) linux (3) rstudio (3) spectrum (3) C++ (2) Modeling (2) Rcpp (2) SQL (2) amazon (2) cloud (2) frequency (2) math (2) performance (2) plotting (2) postgresql (2) DNS (1) Egypt (1) Future (1) Knoxville (1) LVM (1) Music (1) Politics (1) Python (1) RAID (1) Reproducible Research (1) animation (1) audio (1) aws (1) data (1) economics (1) graphing (1) hardware (1)

06 June 2010

User Interface Zen

Before Apple made pretty screens on cellphonesand album art that you could flip through, there was Synaptics. Have you ever seen someone drawing on a pad bound to a laptop in a coffeeshop? Synaptics. Have them you ever done a 2-fingered scroll? Synaptics. I was a perennial hater of laptop touchpads. Imprecise, too much work. A mouse gives wide sweeps, high precision. Then i slowly worked myself up to almost-full-time keyboard usage, a long barrage of shortcuts that i could fire off without ever lifting my fingers, frame after frame of text editor, browser, google scholar, google maps, and back.

I've always really *liked* keyboards, and now i absolutely depend upon them. Re-enter the 2.2 pound netbook. That's right - the 1kg laptop. Alright, it has an annoyingly small battery compared to a very slightly larger 2.8 pound laptop, and the weight gain is more or less obviated by the more frequent need to carry a 0.3 pound charger. Whatever. It still lasts for twice as long as my "real" laptop (a thinkpad t61 that i would *never* put in my lap, whose screen and keyboard i nonetheless adore ).

Point is... The touchpad has come a long way. So far, in fact, that touchpads are now officially cool, as far as i can tell. With 2 fingers, i can now give a *lot* of information, while moving my fingers less than a mouse. The secret, from my point of view, is synaptics, and more specifically, synclient. Under ubuntu, the following sets thresholds of two finger motions, adds rules for "two finger tap as middle click" (Xwindows paste), and disables end scrolling (otherwise known as the devil). I'm using an Asus 1005HAB (N270, $250 @ Best Buy with WinXP, after some deliberation, and some pretty aweful "the customer is a retard" corporate customer service.

As an extended sidenote, do yourself a favor and remove the "rescue partition" before it wipes your computer clean with a random, unconfirmed hard drive repartition when you accidentally boot into it with grub). It's the model with the little bumps on a touchpad that is flush with the case. I'm surprised at how not-annoying the bumps are. After turning up the sensitivity, it's, um, magic? I think "scroll down" and it suddenly happens. The wonders of multitouch. The happiness of the not-a-huge-tome laptop!

Here's my multitouch script: #!/bin/bash ## synclient EmulateTwoFingerMinZ=5 synclient EmulateTwoFingerMinW=10 synclient VertTwoFingerScroll=1 synclient HorizTwoFingerScroll=1 synclient VertScrollDelta=75 synclient HorizScrollDelta=100 synclient JumpyCursorThreshold=100 synclient VertEdgeScroll=0 synclient HorizEdgeScroll=0 synclient TapButton2=2 synclient TapButton3=3

20 April 2010

Little R == r

There's big R, the R that I use to do most my work, the environment that makes pretty graphics, et. al. It's like matlab, only cooler. Or more cool. Or less uncool. You can see my prejudices here.

Today i discovered little R. It's like big R, only little. Holy shit.

Dirk gives a thorough rundown here Suffice to say, for someone who's been using pipes and #!/usr/bin constructs for years (though not quite yet decades), this is cooler than cool. One might say, super-cool.

It's also a nice intro to R for some of the systems geeks out there. Need a million random numbers uniformly distributed between 0 and 1, specified to 7 decimal points? Need it in a file? Need it fast? r can help:
time r -q -e 'for (i in rnorm(1e6)) cat(sprintf("%1.7f\n", i))' >> randomnums  
Or perhaps you have a million numbers in some file that you would like to plot as a histogram, fast, every day, in an automated fashion, from the command line...
cat randomnums | r  -e 'myrandoms <- as.numeric(readLines()); png(filename="myplot.png"); 
plot(histogram(myrandoms));' >/dev/null   
No, it won't mungle strings with the ease of python, but it can chew a spreadsheet and spit it out *fast*. And since it's a stream, you can always pipe it to/from python. If you ask me, pretty fucking cool.

07 April 2010

The new face of CouchSurfing

Really? I've gotten a few borderline disrespectful CS requests lately (my profile is here). Sure, young and inexperienced, have mercy on them, etc. etc. Nonetheless, I think it's time for a bit of gentle schooling... The Request >USERNAME: *** >GENDER: Male >AGE: 23 >LOCATION: United States - New York - *** > >ARRIVAL DATE: 4/9/10 >DEPARTURE DATE: 4/13/10 >NUMBER OF PEOPLE: 1 >ARRIVING VIA: Plane > >Hi, > >My name is *** ***. I'm going to Albuquerque this weekend to attend a seminar at the **** Institute. I know it's short notice, but I was wondering if you would be able to host. It's a lot of last minute planning, I just created this account because my girlfriend suggested I use couchsurfing to try to find a place to stay, so sorry that my profile isn't very extensive. > >Thanks! > >*** My Reply First rule of a successful couchsearch - read the profile of the person that you're addressing. Second rule of a successful couchsearch - tell the person what specifically about them you think would make you a good match. what do you bring to the table? What about them interests you? Third rule of a successful couchsearch - add relevant information and a picture or 2 to your profile. A couchsearch is asking someone to take time out of a busy life to provide you with a place to stay. It makes sense to reciprocate the effort by spending some time to write out a real, decent profile that tells your prospective host something about who you are. Good luck! christian

13 January 2010

Postgres + PL/R = magic information swiss army knife

I just wrote up an extensive example using PL/R to build a logistic map for a range of values of r. The end result is a pretty picture generated within the database and handed back to the webserver. Very cool. For complete details, see