August 14, 2003
Of wifi, Hiptops, and blackouts

I was in Philadelphia today on a journalism assignment, and it was a typical digital moment: I was simultaneously talking to my girlfriend Emily, who was in New York, on the phone, and instant-messaging with a few friends on my Danger Hiptop. In the middle of a sentence, her phone went dead. Then, a minute later, all the New-York-based people on my instant-messaging buddy list went offline.
The moment was a creepy echo of 9/11 -- everyone in New York suddenly vanishing. Thankfully, my non-New-York friends were still online, so I quickly IMed with them and found out what was happening; they were getting the news off CNN.com. I began to realize I was probably stranded in Philly, because Amtrak was also shut down. But I wanted to know more, and surfing via the Hiptop isn't great when you're in a big rush. So I got my IM friend to do a quick hunt for hotels with wifi, figuring I'd check into one.
As it turns out, I walked by Rittenhouse Square -- a downtown Philly park -- and figured it might have some free wifi nearby. Bingo: No sooner than I turned my laptop on than I had about four different strong signals. None had WEP turned on, but all had customized access-point names, which suggests they were left open intentionally for others to share. Once online, I got filled in on all my travel options (bleak, of course) and booked a nearby hotel. When I got to the hotel, I found it had ethernet, but the drivers for my ethernet card were busted. No problem: I wandered down to the park and quickly downloaded the 2.5-meg driver database, thanks to the fine philanthropic wifi sharers of Philadelphia. Then I headed back to my hotel room, where I am right now.
A nice day to illustrate a few of my favorite memes-du-jour: The wonderful crisis-value of portable Hiptop-style phones, and of open community wifi.
Posted by Clive Thompson at August 14, 2003 09:39 PM
| TrackBack
Two notes -- first, cell service was pretty much down in NY -- tried to call a friend up there and couldn't. So I suspect that you could have browsed your contact list on the hiptop, but not actually called anyone :)
Second -- what is your impression of the Danger product? I have a Treo 180 that has been OK, but am willing to consider going to something else on the T-Mobile system.
Good point about being in NY. I meant more that the Hiptop was useful for me here in Philly, roaming around wondering what the heck was going on.
As for the device itself, it's a superb piece of engineering. Because the screen covers the keyboard, it allowed them to make the keyboard much larger than normal -- I estimate it's about 25% to 33% larger than the Treo keyboard. That makes it infintely more usable. I can type about 30 words a minute on the Hiptop when I get going, and have, in fact, rewritten entire stories in the email app when I'm on a tight deadline and on the road.
All the software applications are superb and well designed: the IM, the browser (quite fast), the email (up to three POP boxes). The OS is, I'd argue, even better than the Palm OS at making everything easy to flip between -- they're the first company I've seen to use a scroll-wheel super-intelligently.
The cons: You can't cut and paste text.
The bigger cons: The service agreements are pretty awful. Tmobile offers $40 a month for unlimited data, which is great. But, they may not support that deal much longer, and -- what's worses -- they have placed an absolute moratorium on downloading any new apps. And here's the big problem: The Hiptop cannot dock with a computer. If you want to put new apps on it, you have to download them *via Tmobile's service*, and Tmobile has decided not to let you do that. That means that even though Danger shipped a development kit months ago, almost no one has released any new apps, because *you can't get them onto your hiptop*. This is the main reason that Cory Doctorow over at Boing Boing, originally a huge proponent of the Hiptop, has utterly disavowed it.
It's a double bind. I love the Treo's ability to download any apps you want. But the Treo's ergonomic engineering, to me, is awful -- the keyboard is mini-chiclet-sized -- and I can't type worth crap on it. And I have a high, high tolerance for bad design in interesting gadgets; yet still, I backed away from the Treo merely because of how awful the keyboard was. When you pick up a Hiptop, you can't believe how much better the ergonomic engineering is.
In my ultimate world, Danger would die because their superb device is stuck on a bad carrier; then Palm or Handspring would buy the rights to the Danger design and OS; they'd merge the best parts of the Danger OS with the Palm OS; then they'd simply replace the physical design of the Treo with the physical design of the Hiptop, which is just beyond-belief excellent.
Online Casino Gambling Information
Online casino gambling is a relatively new and exciting form of gambling. As with all new innovations, it's sound to reflect on issues like security and fairness before jumping on the bandwagon.
We have reviewed hundreds of online casinos. Here, you will find the one that is right for you. That's a promise!
All of the casinos listed on this site offer you fair odds, above average payout percentages, excellent game selections, and quality customer support services. These online casinos are known to have prompt payouts and are very popular amongst the players on the net.Online casino gambling has recently become a popular form of entertainment online.
Online casinos can be joined instantaneously. However, there are some unlicensed and insecure casinos online. Our goal here is to bring you the safest, most trustworthy, and best casinos online.
Thanks from online casinos bonuses and online casinos gambling and online casino
Seth Roby graduated in May of 2003 with a double major in English and Computer Science, the Macintosh part of a three-person Macintosh, Linux, and Windows graduating triumvirate.
Our next line looks familiar, except it starts with an asterisk. Again, we're using the star operator, and noting that this variable we're working with is a pointer. If we didn't, the computer would try to put the results of the right hand side of this statement (which evaluates to 6) into the pointer, overriding the value we need in the pointer, which is an address. This way, the computer knows to put the data not in the pointer, but into the place the pointer points to, which is in the Heap. So after this line, our int is living happily in the Heap, storing a value of 6, and our pointer tells us where that data is living.
Note first that favoriteNumbers type changed. Instead of our familiar int, we're now using int*. The asterisk here is an operator, which is often called the "star operator". You will remember that we also use an asterisk as a sign for multiplication. The positioning of the asterisk changes its meaning. This operator effectively means "this is a pointer". Here it says that favoriteNumber will be not an int but a pointer to an int. And instead of simply going on to say what we're putting in that int, we have to take an extra step and create the space, which is what does. This function takes an argument that specifies how much space you need and then returns a pointer to that space. We've passed it the result of another function, , which we pass int, a type. In reality, is a macro, but for now we don't have to care: all we need to know is that it tells us the size of whatever we gave it, in this case an int. So when is done, it gives us an address in the heap where we can put an integer. It is important to remember that the data is stored in the heap, while the address of that data is stored in a pointer on the stack.
Note first that favoriteNumbers type changed. Instead of our familiar int, we're now using int*. The asterisk here is an operator, which is often called the "star operator". You will remember that we also use an asterisk as a sign for multiplication. The positioning of the asterisk changes its meaning. This operator effectively means "this is a pointer". Here it says that favoriteNumber will be not an int but a pointer to an int. And instead of simply going on to say what we're putting in that int, we have to take an extra step and create the space, which is what does. This function takes an argument that specifies how much space you need and then returns a pointer to that space. We've passed it the result of another function, , which we pass int, a type. In reality, is a macro, but for now we don't have to care: all we need to know is that it tells us the size of whatever we gave it, in this case an int. So when is done, it gives us an address in the heap where we can put an integer. It is important to remember that the data is stored in the heap, while the address of that data is stored in a pointer on the stack.
The Stack is just what it sounds like: a tower of things that starts at the bottom and builds upward as it goes. In our case, the things in the stack are called "Stack Frames" or just "frames". We start with one stack frame at the very bottom, and we build up from there.
When the machine compiles your code, however, it does a little bit of translation. At run time, the computer sees nothing but 1s and 0s, which is all the computer ever sees: a continuous string of binary numbers that it can interpret in various ways.
When compared to the Stack, the Heap is a simple thing to understand. All the memory that's left over is "in the Heap" (excepting some special cases and some reserve). There is little structure, but in return for this freedom of movement you must create and destroy any boundaries you need. And it is always possible that the heap might simply not have enough space for you.
Let's take a moment to reexamine that. What we've done here is create two variables. The first variable is in the Heap, and we're storing data in it. That's the obvious one. But the second variable is a pointer to the first one, and it exists on the Stack. This variable is the one that's really called favoriteNumber, and it's the one we're working with. It is important to remember that there are now two parts to our simple variable, one of which exists in each world. This kind of division is common is C, but omnipresent in Cocoa. When you start making objects, Cocoa makes them all in the Heap because the Stack isn't big enough to hold them. In Cocoa, you deal with objects through pointers everywhere and are actually forbidden from dealing with them directly.
This will allow us to use a few functions we didn't have access to before. These lines are still a mystery for now, but we'll explain them soon. Now we'll start working within the main function, where favoriteNumber is declared and used. The first thing we need to do is change how we declare the variable. Instead of
Note first that favoriteNumbers type changed. Instead of our familiar int, we're now using int*. The asterisk here is an operator, which is often called the "star operator". You will remember that we also use an asterisk as a sign for multiplication. The positioning of the asterisk changes its meaning. This operator effectively means "this is a pointer". Here it says that favoriteNumber will be not an int but a pointer to an int. And instead of simply going on to say what we're putting in that int, we have to take an extra step and create the space, which is what does. This function takes an argument that specifies how much space you need and then returns a pointer to that space. We've passed it the result of another function, , which we pass int, a type. In reality, is a macro, but for now we don't have to care: all we need to know is that it tells us the size of whatever we gave it, in this case an int. So when is done, it gives us an address in the heap where we can put an integer. It is important to remember that the data is stored in the heap, while the address of that data is stored in a pointer on the stack.