Friday, November 12, 2010

iPhone, AT&T, and Ending Calls

I have an issue that no one will take responsibility for. I have an iPhone 3GS, current iOS (4.2), and it seems to work fine, except for the minor detail of the phone bit.

Sometimes (maybe 30-50% of the time) when calls end, and the other party disconnects, my phone doesn't. Not automatically, and sometimes not even clearly when I disconnect. Then, the phone app doesn't return to its main screen; it just stays at the call-ended screen. I can exit and return to the phone app, so there's a workaround.

Is it AT&T's fault? Apple's fault? My fault? I don't know, but it's an annoyance that is also eating up minutes, and for a variety of reasons I'm wahahaaaaaaay past my minutes this month (hooray for rollover minutes!).

Tuesday, November 9, 2010

Verizon and iPad

A short note. You can now buy a Verizon version of the iPad; it works with Verizon's MiFi mobile data service. However, if you look at the Apple Store, they are only advertising the AT&T version. Not an accident...

Monday, November 8, 2010

Teaching Algorithms and Data Structures

I'll be teaching algorithms and data structures (A&DS) at CSUMB in Spring 2011. I have (essentially) complete freedom in teaching the class and choosing a book. So far, so good.

I always like to consider first principles, so I wanted to address three issues:

  1. What A&DS will I teach, and why these?

  2. How will I convey the importance of the material? What is its relevance?

  3. What language will I use for teaching the course?



Address the third question, and something of the first two, I had an idea. You can script The GIMP to do just about anything, and it uses a scheme (and therefore lisp) variant as a scripting language. Brilliant. Not practical to teach, but wow, what a class that would be.

However, there's a simple problem; there is no scheme A&DS book in print. Nor a lisp book. In fact, if you want to teach A&DS, there are three language choices for books in print:

("Algorithms and Data Structures in Books" from Amazon for a more complete list)

Oh, nominally there are pascal options, and MIT Press has published a pseudocode-based A&DS text. But the basic problem is that neither C nor lisp are options.

I will probably go with Java, although Python is tempting, tempting, tempting.

Friday, November 5, 2010

MacBook Air

It's been forever since I last updated. As Jim Anchower says, "Hola, amigos, it's been a long time since I rapped at ya."

I've been thinking about the new MacBook Air. It's a fantastic piece of machinery, although perhaps the word "machinery" is wrong here, as the product is entirely solid state. Wow. A modern laptop with no moving parts. Of course, this isn't the first one: the old portables from Tandy were solid state, and that was almost 30 years ago, but for a machine that suffers as much use as a portable computer, sold state is the way to go.

Hmm, I don't know if it has a fan... if so, scratch the word entirely, but the rest of the statements still apply. A fan can be replaced.

Of course, you don't get a full-fledged computer. You get a recent, but slow, Core 2 Duo. It's clocked down (obviously) to lower heat production and increase battery life. Still, it's an old processor family.

The problem is that there isn't a processor that sits between the Core i3 and the Atom. WHat that would look like might be a multicore Atom.

There's an open question here, and the answer doesn't lie in hardware: is software really ready for multicore? Regardless of what some might say, concurrency is hard to do well.

It looks like I will be teaching algorithms and data structures in the Spring, and I've decided that I MUST teach multithreading. We may not spend much time on it, and it may be toward the end, but if you can only think of algorithms in single-thread mode, then you will lose out as a developer. Sure, we can use up CPU cores with multiple applications, but when you are doing something like decompression, optimal performance will come from using as many cores as you can to preemptively decompress data. Not all that different from double-buffering, really. Does anyone remember that? Before the days of GPUs? Hmm...

Wednesday, May 26, 2010

NOT Upgrading my MacBook

As you know by now, Apple has released a new line of MacBook Pros (or is it MacBooks Pro?).

I'm not upgrading. Here's why:

  • I want the smallest form factor (13.3")
  • The 13" MBP still has a Core 2 Duo process
  • That is all


Why do I care so much? Well, the thing is that I do intensive data processing, and the Nehalem-based Core i5 (and i3 and i7) is just that much faster. It really does make a difference.

The reason Apple is giving is, well, reasonable. The Core i5 basically doesn't fit, physically or power-wise or heat-wise. Intel is in some kind of dispute with NVidia (and others) about making a proprietary northbridge or some such dispute. Apple has publicly said that, for most users, the much faster video will show a more significant speed improvement.

My current first-gen MB has a Core Duo, which is a) not x86-64, and b) getting slow. I think I'll wait, though, another few months, before I upgrade. If you are reading this, you know I now have a sometimes-zippy little Asus Eee netbook. I think that's sufficient computing options for on-the-go. If I didn't have money constraints...

Thursday, April 22, 2010

MacBook Docking Station

These rock (at least on paper).

Even More About the Netbook

So after a couple of weeks with the netbook, I'm quite satisfied.

Some thoughts:
1. The keyboard is awkward, but not terribly so. It's usable, just take some adjustment. I have a chiclet keyboard on all of the other computers I use, so it's really just a size issue. If you hate chiclet keyboards (think: keys are separate, and there are space between the keys), then consider a different option.
2. Performance is mediocre if you do lots of media. HTML/JPEG rendering is fine, but video taxes the machine, and HD video is unplayable (literally, it won't play).
3. I'm using Linux as a principal OS for the first time in a while. I really am impressed with the quality of Ubuntu (in this case). I really am not sure why anyone would use Windows. I haven't booted into Windows in a few days, although I don't anticipate blowing away that partition. I need Windows to run iTunes, I suppose. I need tuneranger, or some other tool to sync my iTunes library.
4. Battery life is unbelievable. I charge this thing less often than my phone. Now, it's NOT my principal machine, except on the road. However, I carry it around as much as is useful. Incidentally, I'm NOT writing this on my netbook. Hmm...
5. Perfect for the cafe lifestyle. I will probably work at a cafe tomorrow, and am actually looking forward. I'll probably bring my mouse.
6. The touchpad is useful, but not great. Actually, the touchpad is very good (although of course small). I prefer edge scrolling to two-finger scrolling, and it supports both (under Linux!). The touchpad itself isn't exactly a separate surface; it's a nubbly region of the same material as the wrist-rest. Oh, and touch-to-click works well. The problem is the button; they've used one long surface for the button, rather than two separate buttons, and it takes a little too much effort to both position my thumb and to press.

I had planned on purchasing a new MacBook Pro, but I like the 13" form-factor, and that size didn't exactly get a real processor upgrade. There are some good articles (macrumors|tuaw|artechnica) on why, but the nutshell is that Apple went for the typical user, who watches a lot of video and doesn't compile much. So for now, no

Thursday, April 8, 2010

iPad First Impressions

I'm a little late (almost five days) in the first impressions category, but I thought I'd post these. A colleague and friend got one from, of all people, Woz, because he's a senior docent at the Silicon Valley computer museum.

1. It's heavier than I expected, and felt heavier than the less-than 1Kg advertised weight.

2. Typing is awkward, but, as on the iPhone, Dragon speech recognition works well. I thought that the much-bigger keyboard would make it possible to actually type, but that's not the ideal interaction. I haven't tried a bluetooth keyboard.

3. No problems with wireless, or anything else, for that matter.

I think it's neat, but for me, it would be a toy, and wouldn't replace a computer. That's why I got the netbook. It's not a workhorse, but it will replace a computer on my upcoming trip. We'll see how that goes. If it goes well, I'll keep it.

So what would the iPad be good for? It would be an ideal infocenter in a car. It could serve as a head unit for music, and as a great GPS (screen is large), but what it would need is much, much more voice interaction. In fact, that's my single favorite feature on the iPhone 3Gs (voice dialing).

Oh, you can watch movies on it, but this whole streaming/cloud thing is not appealing to me for long movies. Also, I need closed captioning/subtitles.

More on My Netbook

It took forever to get Linux installed. The first problem was getting my Asus to rad from a USB boot device. The whole idiotic partitioning scheme took probably an hour to solve. Essentially, you can only have 4 primary partitions, but what must be a primary partition is not clear. So I made my second and third linux partitions (/home and swap) as part of an extended partition.

Now begins the fun of:
a. running Windows
b. updating everything
c. installing software

Overall, I love the package. However, it's sloooooooooow.

The Asus has an Intel Atom N450 processor, which exchanges performance for low power use. As that's the big purpose of a netbook, it's not surprising, but installing and configuring seems to take longer than I'd like. For example, I want to install a licensed copy of Office 2007. I downloaded it from the work repository, and then I have to uninstall the free trial (which left behind several language packs that have to be uninstalled separately, and now in a foreign language, so screw it). I've never liked the installation process on Windows.

I'm still happy; it's just that my happiness is increasing slowly.

Tuesday, April 6, 2010

Asus eee PC Netbook!

My netbook has arrived. It's tiny, and the claimed battery life is immense. We'll see. There are a few nice things:
* It's tiny and light
* Screen seems excellent
* Faster than I thought it might be
* No crashing so far
* Excellent trackpad
* HD is partitioned, making it exceptionally easy to install Fedora (tomorrow)

Problems:
* Keyboard will take some getting used to
* The trackpad button is an engineering failure; it's just plain hard to push
* The neat thing about the trackpad, that it's just a textured surface, takes getting used to
* Windows 7, um, sucks, UI-wise, at least for a novice
* On top of that, Windows 7, and MS applications in general, make exceedingly poor use of screen real estate; this is not so good on 1024x600
* I want old-style "Windows Classic" start bar. I didn't like the XP start bar, but I could switch it back (and always did). I am glad that they kept the Windows Classic theme
* Why does Windows 7 (and MacOS, for that matter) let you set up NTP, but won't allow you to sync? It happens "on a schedule"...
* Even with the Atom N450, it's not exactly a powerhouse of a machine, but you make sacrifices for battery life and portability
* I cannot, for the life of me, determine if the Atom N450 is x64 (e.g., compliant with x86-64). In other words, can I install a 64-bit OS? The pre-configured install is a 32-bit Windows 7 starter
* Bizarrely, the model number is nowhere to be found on the actual machine

More thoughts will come as I get used to the thing. No excellent resources so far on the Windows side, but there's excellent info on getting Linux running. I would run Ubuntu, but we use Fedora at work.

Tuesday, March 30, 2010

Drobo Pro, Mac OS X, and Firewire

Aargh.

I spent parts of several days diagnosing a problem connect a Mac XServe and a Drobo Pro. The Mac is running OS X Server, Snow Leopard, and the Drobo is up to date on firmware.

The problem is that there's an error with Fast Start firewire packets. The problem occurs when we're using FW 800, but not USB. I swapped cable, ports, etc; problem remained unsolved. I tried with a MacBook Pro (no error).

Now, after several days, Apple admits this is a known issue. It's happened with at least two different types of Mac hardware, and may be related to high amounts of RAM (we have 32GB in the XServe).

What's frustrating is that there is no public information about this. This is not an issue I could have known about, and Apple is not informing people inside enterprise tech support properly. This has also not been put in Apple's bugtracker (and AFAIK, Drobo doesn't have a public bugtracker).

Maybe, just maybe, someone will find this post and save some time. I can only hope.

Obviously, I will post more info if it becomes available. For now, as great as the Drobo is (and it was pretty much effortless to set up), it's not working with Firewire 800.

Wednesday, March 24, 2010

Counterfeit Intel Processors

This is just funny. This has a decent writeup of the story about Newegg selling counterfeit Intel Core i7 processors, but this story has the pics. It's actually not that surprising; these chips are heavily in demand. The retail market simply won't get them as quickly as the OEMs will. Apple is apparently not happy with the number they have received, and this is delaying the introduction of new the MacBook Pro. At least, that's the rumor.

Just to add to the trend, let's be clear that D & H was not NOT the source of the counterfeit chips.

Tuesday, March 23, 2010

Giving Up on Email Sorting

So I've gone from filer to piler, officially. I've just given up entirely on sorting emails. I can't keep up. OK, email, you win.

Drive Recovery

If you are reading this, which would surprise me, you probably know that I work in digital forensics. Now, that doesn't mean that I know how to recover a drive if it has physically failed. Give me the bits, and I can probably do something with it.

So I recently received a drive that, in transit (probably), had a head crash. Now, this shouldn't, in theory, happen, as the heads are physically parked (moved to a non-data area of the disk) when powered down. Who knows what happened? The disk might have not been powered down properly, or a normal fault could have happened at another time, or maybe I screwed up something.

Anyway, for the low, low price of about $2500, I'm having data recovered. I'm not going to say the name of the service until I have more info about how they work. If they are successful, I'm happy to promote them, but I don't want to say anything yet.

Ultimately, if they can recover the data, it's a surprisingly positive (or ominous, depending on who you are) sign, actually. A head crash is pretty severe when it comes to media failure.

I had a discussion with my boss the other day, leading to my statement about the HDD equivalent of Yucca Mountain. The comparison is not really fair, but here goes:

Somewhere, actually manywheres, there are thousands, tens of thousands, and more, hard drives. These hard drives have been pulled from computers in governments, corporations, and even computer manufacturers. These drives may or may not have sensitive data on them, but no one knows, or will really ever know. Because of the risk involved, they can't be disposed of properly. They contain both valuable elements (gold) and toxic elements (some of them). And no one really knows what to do with them.

There are, of course, several options:
* You could melt (slag) or grind the drive down. This is definitely the safest route, data-wise, but dangerous to be around, and expensive.
* You can physically erase each bit one or more times - this is pretty safe, as it's never been proven that you can recover much data (no given bit with much more than 50%). For old drives, this had to be done multiple times because each bit was actually quite a large space, and a more modern, precise head could potentially pull data, but newer drives (say, less than 10 years old), a single pass is sufficient. This is less safe, very time-consuming, but overall sufficient to erase a drive. If I were in a corporation, I would do this to all drives. Wiebetech makes a hard drive eraser; I'm waiting on mine, but they are one of the better manufacturers of forensic equipment, so if they say it works, I would generally trust them. I do wish they had digital displays, though, especially for problems. Old drives tend to fail.
* You can degauss the drive. This is environmentally safe, and despite dire predictions, probably safe. However, you need a moving magnetic field to do this, and it's not cheap. I've never seen this in action, nor seen a test of reliability.
* You could getting this really cool hard drive hole punch, which is what my boss recommends.

Ultimately, though, the interesting question is, can you destroy the data on hard drives cheaply, effectively, and without danger? Now, for an individual drive, this isn't an issue, but when an organization literally casts aside thousands of drives a year, it's an important issue.

NOTE: DO NOT TRY THIS AT HOME (except for DBAN)

Tuesday, March 2, 2010

Waiting on Apple Blues

So a short post, not really a post so much as a rant. Unheard of in blog-world. I really need a new computer, and for a variety of reasons that are not really of interest here, I decided to go with a Mac. Yay. Well, it serves my needs, except for one thing. I want a better processor than the ones they put in any of the current line of Macs (well, sorta-kinda-except for the Xeon in the Pro). The new Intel i5 has, in the common laptop mode, two Nehalem cores. Current technology? In a Mac? So, as of this date, I'm twiddling my thumbs, not so much because I like thumb-twiddling, but because I'm waiting for my personal Mac to finish, say, opening up a browser.

Monday, February 1, 2010

iPad? uPad?

The question is, will I get an iPad?

Do I want one? Yes. Will I get one? Maybe. I absolutely refuse to get into the stupid details, like the aspect ratio; I'll give you a much abbreviate, and (I believe) different perspectives on the pros and cons of the iPad.

Pros:
- Verified apps

Cons:
- Separate data plan, even if you have an iPhone

In some ways, this is the perfect tool for the academic computer scientist traveler (i.e., me). I go to conferences and meetings with sponsors, collaborators, etc. I don't want to travel with enough power to do my work, as that requires a lot of disk space, memory, and processor. I need connectivity and ssh and a long battery life. The ability to edit documents locally is useful, too; I don't know that I want or need Word, but we do a lot of our writing in LaTeX, so just the ability to read, edit, and comment on PDFs is probably sufficient.

However, the one problem is that I like to work while I'm on an airplane. I actually think it's conducive to decent programming. My friend at Apple said, "it's a good thing that most planes have wireless." Huh? I travel a fair bit, and have never been on a plane with wireless. (NB: I use the wrong airlines.) I can pay for access, but it would need to be decent. I don't just want to browse the web. Actually, what I want to do is very, very low-bandwidth (programming, etc., on remote servers). I would need my organization's VPN to work, too.

So if I'm on a plane, I can't really get any work done with the iPad, except maybe reading and editing papers. Right now, that's not sufficient.

Once I get to the conference, it would be ideal for taking notes, keeping up with email, etc., so perhaps, perhaps, perhaps.

More Python Woes

So I had a bug: I had a method on a class that had lost its indent (I love that academic/APA style allows one to avoid assigning credit or blame).

The error I got was that the interpreter couldn't find the attribute. Attribute? It's not an attribute, it's a method. I knew it wasn't a method signature problem, as I had checked the name, and if you have a mismatch in arguments, then you get a different error.

However, the method was clearly a member of a class, but the "compiler" didn't notice that it referred to self, even though it was a top-level function (not physically in the class). Why doesn't the compilation routine notice these kinds of errors? I really do like compilers, because I make mistakes. I'll take this chance to tell a favorite anecdote.

I spent a great deal of time, as an undergraduate, in the UPL (Undergraduate Projects Lab) in the CS department at the University of Wisconsin, run by Professor Barton Miller. One day, there was a heated debate about preferred debuggers between some acolyte programmers. The acolytes asked the guru-in-residence (one of three great programmers I know), whom we'll call "Mitch" (because that's his name), "Mitch, what's the best debugger?" Mitch replied, "I don't write bugs. I got over that."

Now, you're ready to call this either braggadocio or just plain bull, but there's a codicil anecdote. A few years later, I was talking to Mitch, and he was in a bad mood. I asked him what was wrong, and he replied, "I wrote a bug."

Anyway, I write bugs. I'm a decent programmer, perhaps even good, certainly not in the stratosphere. There are three programmers I put on a pedestal, but many, many better and more diligent than I am. So I like things that catch my bugs. Python does not do that.

You might argue, at this point, that it's a minor detail, and that if I were a better programmer, or more versed with/experienced in python, I wouldn't have had this problem (which admittedly, once I figured it out, was easy to solve). You are right on the latter count, but I would argue that it's a major detail. Yes, a detail, but an important one.

In the OO world, we deal with classes, objects, methods, and attributes. These are the quanta of our product. For a language to not notice that a method does not belong to a class, well, that's a static analysis issue, and it should be done. One of the lovely things about java is that it does an excellent job with static analysis (for the most part) at compile-time. You cannot have a method that doesn't belong to a class (love the valid use of double negatives). If you want a method to operate on the class, rather than an object, you have to specify that explicitly, with the static keyword. Arguments and variables are checked; you can't access an object variable in a class (static) method.

Monday, January 25, 2010

Minor Frustrations of a Hotel Traveler

  1. Wired internet - I can't work in bed?
  2. You order a feather-free room (because they offer), and then they are surprised, and have to find a new room for you.
  3. Wired internet - really?
  4. Oh, and the 30 minute shuttle from the airport took an hour.
Still, I've arrived safely and should have an interesting week. Also, my boss fixed a bug, and now my stuff works. Thanks again, DIA for free wireless! I will fly through DIA when I can. Really.

The Hassles of Multi-Language Programming

  • c
  • c++
  • python
  • java
  • ruby
  • perl
  • sh/ksh
A short list of the languages I have used since I started my current position four months ago. The point is NOT that it's impressive. The point is that, while there's something to be said for "the right tool for the right job", it's getting silly.

So, my edict (for myself only):
  • I don't do web development, so there's no reason for ruby - it's not superior to python
  • I don't write shell scripts anymore unless absolutely necessary - write it in python - it's really not much harder, and you can scale it
  • I will avoid c/c++ when possible, for the simple expedient of not compiling - mwahahahahah! - so no writing of c/c++, but debugging is acceptable. If a student refuses to use gdb, well that's her/his problem.
  • python unless I need libraries or speed that I can't get when by going multicore/node, or if I absolutely need libraries, then perl (this is hard for me, as perl was the first language I loved)
  • Java only when it makes sense to have strong typing. I don't write enterprise code anymore
  • go can go away - I don't need it - I really, really don't
How did I become a python programmer? I have a first edition of Programming Python (w/ CD!), and I remember dismissing it as immature - a neat idea, but not there yet. This was 10+ years ago (man, I feel OOOOOOLD). Python has matured nicely.

However, all of this is practical; I miss lisp and smalltalk. And don't get me started on C#; a lovely little language that can not travel.

Free Airport Wireless

I should note that I hate the word "wifi." It's too cute/clever for my taste. In my circle, if you say "wireless", you mean 802.11b/g/n wireless internet access, so I just use the term wireless.

Denver has free wireless. Of course, you get banner ads; someone is paying, there's no such thing as a free lunch, etc.

Still, it's great. I don't have to log onto a service, see if my plan is compatible, wonder if it's worth paying, gawk at the ridiculous price and bizarre options (who wants 24-hours at an airport? sure, it happens, but it's usually not planned).

Like many of my peers, I use the internet to get work done. I need to communicate, and I need access to, ahem, resources. My sister, btw, who took my photo, thinks that it's really neat that I have (in theory, at least) access to the eighth (?) fastest computer in the world. I have other resources, too, and since my work (data mining, clustering, etc. - continuing the major themes of my dissertation) is data heavy, I can't really bring all of my data aroudn with me. It's easier to leave it in a place where I can computer to my heart's content.

I would really, really love to:
  • Kick off a job on a server while still at home
  • Catch a cab to the airport and sail effortlessly through security
  • Get some programming/analysis done on the flight
  • Land
  • Connect back to my server and find the status of the job and/or result
Someday, perhaps, I will achieve this dream. I just don't like to waste time.

Friday, January 15, 2010

Getting to Love Python

So I ran into a bit of struggle last night/this morning. I found some code that took a stream of data and wrote it out to a file. Unfortunately, so I believed, this wouldn't work:

f = open("/tmp/foo")
s = getsomestreamofbinarydata()
f.write(s)
This shouldn't work for the simple reason that strings are not binary. Strings are essentially char *, right? References to arbitrary-length arrays of characters. Oh, sure, they could be unicode, but they can't be binary, right?

Wrong. The code above works, because python doesn't really give a damn about your data until you try to do something with it, and then it does its honest best to do typing/transformation as necessary.

Now, the problem is that this isn't well-documented. Why not? Perhaps it is because the "feature" is just python; it is just assumed by python programmers to work. And for more naive programmers, a smart typing system is a very, very good thing. Also, there are downsides to "smart" typing; when it works, it is just smart typing, but when it doesn't work, it is "smart" typing. There are good uses for scare quotes.

I do like typed languages, even strongly typed languages; they have their value. I miss overloading methods (yes, you sort-of can do it, but not really). The best method overloading, btw, is in dylan. Too bad, Apple could have had the best core development language, and now they have perhaps the second best.

Thursday, January 14, 2010

Why the Name?

If you read this, you may wonder why I'm an "unseen academic". There are a few reasons. Notably, I work in a basement laboratory, in the corner. I have an office with a beautiful view and a window that opens. Why don't I work there, you ask? It's a long story. So physically, I'm not seen very often. Actually, I really, really like this for when I need quiet time.

However, the real reason is an homage (oddly timed) to Terry Pratchett's Unseen University, the premier institute of higher learning on Discworld. OK, fair enough, it's comic fantasy, so we're not talking Shakespeare or Joyce or (thankfully) Proust. Madeleines, indeed. No, we're talking about an eccentric, eclectic world at the center of which (well, not center, not really) is a university of magic.

If you know Pratchett, then you might care to know that I often see myself as Rincewind, but really, others see me as Ponder Stibbons.

I have yet to read Unseen Academicals, but I have it in my possession, and will read it shortly.

Welcome to My Attempt

I've been thinking about how to present my academic self. I had what was essentially a wiki, but it wasn't really very useful, and certainly not attractive. My boss/advisor, Simson Garfinkel, has what is essentially a wiki. My long-term mentor, Frank Ritter, uses raw HTML. My friend Bill Stevenson uses a blog.

Now, I could, I could get a domain name, but all of the good ones near my name are taken. I don't really see the advantage. Admittedly, if Google/Blogger decided to change their TOS, I would have a serious headache, but so would thousands of others, so it seems unlikely.

All I really need is a place to put up my contact information and publications. We'll see if I ever get around to blogging.