November was a busy month for my career. Not only did I change jobs (again) but I had three separate speaking engagements.

CocoaHeads, DC

On November 2, I gave a whirlwind tour of Xcode 4 (highlights from my Xcode book) to the nice folks at the DC CocoaHeads meetup. Side note: LivingSocial has a great office space.

iDeveloper Live Podcast

I was also a guest on episodes 34 (November 21), and 35 (November 28) of the iDeveloper Live podcast. The hosts, Steve “Scotty” Scott and John Fox – graciously allowed me to blather on about (you guessed it) Xcode 4. Episode 34 was about its good side; episode 35 was a gripe-fest. I felt rather bad about spending nearly an hour complaining about a tool that is rather good, in spite of its faults. All month long, Scotty had been giving away e-book copies of Mastering Xcode 4.

Thanks to my hosts for the opportunity to speak and thanks to all those who listened patiently to my dimwitted jokes. :-)

 

Given the cyclical nature of technological advancements, I feel a new phrase will need coining. We’ve seen the movement between terminal/mainframe to standalone, then back again (this time, called “thin clients”), then back again, then back again (this time, called “the Cloud”).

I predict a new technology that actually lets you store your own data on your own local network. Imagine! You keep your stuff in your own home or business! Fully Cloud-compatible (via backup and sync services), your stuff is still accessible without the Internet! What do I call this down-to-Earth Cloud-based technology? I shall call it … the Fog.

The Fog is an at-home or in-business successor to Cloud-based technology. It’s like a local area network … but with a better name.

 

Popular file-syncing service Dropbox has been in hot water lately. It was bad enough to find out awhile back their misleading phrasing wasn’t true and that files were indeed accessible to its employees. This has resulted in a formal complaint to the Federal Trade Commission. Now apparently that same design choice – the one about which they claim they didn’t mislead customers – made a new security snafu possible.

Apparently, for a four-hour window this past Sunday, any user account could be accessed using any password. Because a user’s files are encrypted on Dropbox’s servers (not on your computers or mobile devices), this means a security screw-up like this can give unimpeded access to any user’s files.

Conversely, had they chosen to encrypt files client-side, this authentication bug would not have granted access to the files because the password / decryption key would not match and the files would come back scrambled if they came back at all.

Twice, Dropbox has demonstrated poor security practice. Some would argue they also demonstrated dishonesty by claiming their employees couldn’t access the files (their wording suggested “unable” rather than “not allowed”). Now a new problem has been demonstrated: they have poor or nonexistent testing practices when rolling out updates to their servers. Had they at least automated testing of their authentication system, they would’ve discovered the problem before ever having deployed the changes to their public-facing servers. As a user, I have yet to learn of a single one of these incidents from Dropbox themselves.

This latest sin and all it reveals has caused me to abandon Dropbox entirely. I can no longer trust them. Wired suggested two alternative services: Wuala and SpiderOak. Both offer client-side encryption and Mac and iOS clients (important to me). I’m currently leaning toward Wuala (see update below) but have learned to do my homework first. I won’t be signing up for another Dropbox-like provider, free or not.

It’s that last sentence that could be used as a retort: “Relax, it’s a free service.” Granted if you need 2 GB or less, the service is completely free. Nice of them but not nice enough to allow them to – in my opinion – mislead me about their security and for me to put up with repeated ham-headed security offenses. Those who’ve known me awhile (or at least followed me on Twitter) likely remember I was hesitant to use something like Dropbox for awhile at all. I begrudgingly tried it and changed my opinion. I found a few good uses for it. Not good enough to make me want to integrate my own applications with it (a popular request a year or two ago), but good enough to use on its own.

I’m of the opinion that Apple’s upcoming iCloud service will offer a seamless file syncing experience (hopefully more “seamless” than iDisk). I also believe they’ll worry over security as well – they do have a reasonable track record. As I use all Apple devices, I should have no trouble getting to the stuff I need … with style. For this reason, I’ll be using Wuala (or SpiderOak) as a stopgap until iCloud is available.

So long, Dropbox, and thanks for all the fish.

Update – Err, never mind about Wuala. It’s Java-based (I’m a “native app purist”) and decidedly not user friendly. I can’t figure out whether it offers automatic syncing at all and it appears to be still in beta. Further, its completely unexplained “file system integration” setting in preferences is enabled but its “check” says it can’t “Access Root  Directory” to offer this feature. No fucking thanks.

 

Web developers (developers, developers): I need you to listen to me. Are you listening? Good. Stop trying to be smart about detecting browser capabilities. You almost always get this wrong. Usually it’s because you’re used to a single platform and only test on others and so you’re not always up to speed on how the various browsers of the world work.

There are two main scenarios in which you frequently fail hard, resulting in my assumption that you are a semi-professional entry-level developer at best. This makes me hate you. Often, it makes me fire off an angry rant to your contact address, chiding your lack of experience and your complete destruction of my faith in your site’s ability to be useful to me, even if I could find my way around your stupidity. Let’s explore these scenarios together that you might learn from them.

Mobile Versions – Whether You Want Them or Not

First, you assume based on my using “Mobile Safari” that I need to be railroaded to your “mobile version.” Many of you don’t even ask – you just shunt me to mobile and maybe, if I’m lucky, you give me the opportunity to view the “full site.” How generous. Some of you douche bags then fail to persist this choice so I have to go through the whole thing again the next time I visit (hint: there likely won’t be a next time). Then there are the rest of you. The assholes. The ones who classify visitors as “normal” or “mobile” and shove the “mobiles” bodily toward the “mobile version” without a choice.

I hate you. I hate you so much.

That might be alright for other mobile browsers (because they truly do suck), but not for my iOS device. I paid good money for great standards-compliant mobile browsing capabilities. Why the hell would you take that away from me for the simple crime of visiting your web site? Unless your site requires Flash (and it better fucking not), or mouse-overs (which is not compatible with our modern, growing, touch-based world), you have no reason whatsoever to force an iOS device to a “mobile version.” If I wanted some shitty, Y2K telephone web browsing experience, I’d shell out $500/month for 1.5 MB of download capacity for a Motorola RazR and download a low-fidelity Who Let the Dogs Out ring tone for $5.00.

I digress. If you must provide a mobile version in 2011, ask me up front if I want it and remember what I told you. A great mobile browsing experience on an iOS device has been available to users since 2007. You’ve had plenty of time to learn this so knock it the hell off.

Get a Real Browser

The other scenario involves “clever” JavaScript that decides either my whole web browser is “unsupported” (and refuses to let me in) or that I don’t have some plugin (that I often do) and doesn’t even try to do the right thing. This is just as idiotic as the “mobile version” scenario. These so-called web developers decide Safari (as a common example), which is standards-compliant and scores extremely high in this regard, just doesn’t work right and they won’t let you in if you’re using it. So many online banks did this until very recently (now only a few do it) for reasons completely unknown. Some of you assholes even go so far as to display a cheeky “get a real browser, LOLZ” message to users.

If you do this, what you’re really telling me is you’re completely incompetent as a web developer and I should be very wary of your site anyway because you clearly don’t know what you’re doing. If your site “doesn’t support” a modern, standards-compliant browser it’s your fault, not mine. It’s a bug and a goddamn big one. What you’re saying is “I’m a fuck-up, a miserable failure, and my site probably sucks even on my own browser of choice.”  You’re showing the world that you (and the company that hired you) are unprofessional, condescending jackasses who don’t deserve my business or readership because you’re either too lazy or too uninformed to build a proper web site. You tell me to get a real browser and I imagine you’re a high school aged relative of some clueless business owner who “wanted a web.” This isn’t the 1990s, folks. Hasn’t been for over a decade. Just having a web site – even a shitty one – won’t make you rich. These days it’ll just make you look like a moron.

So the real message isn’t “get a real browser” but rather “build a real goddamn web site.” It doesn’t have to be fancy. It just has to look nice and work no matter who visits it.

The other side of this is specific capability detection. You decide to employ your own “do they have Flash” routine. Ignoring the folly of reinventing the wheel many, many times (and doing it poorly almost every single time), it’s bad enough many of you decide to restrict capabilities rather than trying anyway and letting the user know “this may not work.”

These types of warnings should be informational. You should never ever restrict things on purpose based on your “clever” little JavaScript hack. Your goal should be to inform the user something seems like it may not work but try it anyway. To simply avoid trying to load a plugin because your detection mechanism failed to detect it will almost always end up mistakenly restricting a user. Real web developers’ sites degrade gracefully. They don’t fall flat on their faces, pissing and shitting themselves because their capability detection code (which often is never updated as browsers grow) was mistaken. It’s the same mindset as “Oh god, a big black man! He’s going to rob us!” It’s prejudice born of ignorance. Plain and simple.

If you do this you’re an inexperienced developer (and possibly racist). You may be an excellent graphic designer but you’re a shitty developer. Your goal should be standards compliance and graceful degradation (which is part of standards compliance but bad developers don’t seem to understand this), not trying to second-guess every possible scenario for every version of every browser. If you’re doing the latter, you’re doing it wrong and you’re pissing me off.

Rant Over

Okay, now that I’ve gotten that off my chest, here’s a message of hope: companies are beginning to realize how foolish it is to cut off entire browsers and platforms, and that there’s just no excuse for it these days. They see other companies’ sites – full, rich web applications – working just fine on all modern browsers. Hopefully this is sufficient pressure to force old-school (and newbie) developers to learn the modern state of the craft properly – to bring them out of the protective shell of their browser of choice and realize they must support all browsers. Cutting off a whole browser because [ pretty but useless effect ] isn’t supported is idiotic and detrimental to the goal of a web site: to draw in and retain repeat visitors.

Don’t be a douche bag web developer. You’ve got no excuse for it.

 

For years my primary development machine for my personal endeavors has been some form of PowerBook or MacBook. I liked being able to take the entirety of my digital environment with me wherever I went. During the last year or so, I decided to see how much of that environment I actually needed to be mobile. I even outlined a basic plan for this in early 2010. Here I am in early 2011 ready to take the next step – trading the laptop in for a powerful desktop computer and leaving mobile power behind.

How Did I Survive?

In Real Work, I said the first step would be to shed the tens of gigabytes I carried with me all the time. With my iPhone and iPad, I’ve been able to do just that. Though I’ve had the occasional missteps and frustrations, the truth is when I’m working hard on something I’m usually home or have good Internet access anyway, which lets me access my home file server. The biggest data burden I have is still my music collection, so it’s with me wherever I go, but most of my data has been successfully offloaded to my server and it hasn’t really hurt.

In practice, I find I typically am only surfing or reading e-mail (or entertaining myself) while on the couch. The iPad has very much filled that need. Even for light production work or administrative management tasks, the iPad is sufficient (better than the iPhone). When I need to do any coding or heavier work tasks, I use my laptop. Lately, my laptop has stayed on my desk downstairs – the designated work area I alluded to in Real Work.

Ready to Take The Plunge

The “next step” is to take the plunge and rid myself of a laptop, trading all the mobility for a significant power boost. Of course I went straight to the MacPro section of the Apple Store. A nicely-appointed MacPro plus a nice 27″ display was disappointingly expensive. Then it dawned on me – if my laptop with an SSD can out-perform my 8-core (16 virtual cores with hyperthreading) doing the stuff I do most, why not go for an iMac with an SSD and max out its RAM?

I wanted as many cores as possible and a nice big display, so I figured I’d start with the 27″ iMac with an i7 processor. I figured a non-Apple-supplied SSD and RAM would save me significant cash (and I’m right). Unfortunately, upgrading anything but the RAM with the latest iMacs require removing the glass panel on the display, which easily attracts dust and is hard to keep clean. A single dust speck caught between the display and glass is maddeningly visible and difficult to remove. Upgrading anything inside the iMac comes with a hell of a lot of caveats and other issues.

So I decided Apple’s SSD premium was worth my time, frustration, and possible mistake-making. I made up for the savings, however, in RAM. 4 4GB RAM modules will cost just under $200 from Crucial. Compare that with $1000 for the same upgrade factory-direct from Apple. Yeah … no.

So the specs I’ve decided on are a 27″ iMac i7 with a 256GB SSD and 16 GB of RAM. Total cost? ~$3100. I might even spring for the AppleCare plan. :-)

So if more cores and a faster drive (and as ever, more RAM) are what developers need for smooth, fast coding and building, I think this machine has the best balance for its cost. I’ll let you know how it goes.

 

It’s been eight months since I griped about a lack of a swipe-to-navigate gesture in Mobile Safari. There’s still been no progress, despite iOS 4 having come out since then. I think I have the reason why and a compromise.

The basic problem is that web pages can be horizontally scrolled. The deeper problem, I suspect, may be “not invented here syndrome” on Apple’s part.

The simplest solution is the brilliant drag-to-update metaphor introduced in Tweetie (now Twitter for iPhone). If I drag left and I’m already as left as I can possibly be, show me a visual indicator that I’m about to navigate backward. Same story for the right side of the page.

It makes perfect sense, so where is it, Apple? Do you hate it because it wasn’t your invention? Come, now. Good ideas can be pilfered!

 

This past weekend I traveled to Atlanta, GA to attend Cocoa Camp, an “un-conference” for Mac and iOS development, held at the Atlanta Contemporary Art Center. Intended to be an overnight trip, I flew from BWI to ATL on Friday morning and returned Saturday evening.

Content

I felt the content was a heterogenous mix of design-versus-coding, and beginner-to-intermediate. There were even a few general development-career-focused sessions.

Design

I’ll start with the positive. The design-related sessions were top-notch. I always enjoy hearing about others’ processes for designing their applications, especially when they talk about designing the UI first, then the architecture to match. Stephen Martin’s (@stephenmartin) presentation was particularly good. If I could pick one thing he said to pass on to any other Cocoa developer (Mac OS or iOS), it’s this: Interface Builder is not a design tool. Second would be (paraphrasing) “iteration, iteration, iteration.”

I gave a presentation at a NIAID developer meeting along these lines (design ahead of a single line of code) and even mentioned how much better my own design/development process was when I decided “Interface Builder is not a design tool,” and learned to sketch first, iterate out the trouble spots, move on to at least basic architecture, and only then move on to coding.

Technical

Regarding the technical sessions, I’ll be honest: I felt I got a lot more out of the design sessions. The technical sessions were a mixed bag, which is fine (some of what I had no interest in were quite popular to others), but the ones I was interested in were almost entirely beginner-level.

I had high hopes for the “Scalable Data Access using Operation Queues” session. I missed the first few minutes of the session but what I did catch was more like a basic introduction to NSOperation/NSOperationQueue. The session did not last long, but it was well-delivered (so I hope Greg Martin does not take this the wrong way).

The problem was the title. It led me to believe I’d see some awesome, modern data access (as in files-on-disk or database access) wizardry. The Q&A session afterward was insightful, and had I not been on the verge of heat stroke standing in the hottest room there, I might have contributed to the “how much is too much in an NSOperationQueue” discussion.

Perhaps the Cocoa Camp organizers can prevent this in the future by requesting a summary and making sure the titles are a little more precise before posting the session information. Even better, they could post the summaries themselves (which were not included on the schedule).

Career

Because there were no other design or technical sessions that were relevant to me late in the day, I attended Ryan Taylor’s session titled “Refactoring Yourself As A Developer.” I thought much of Ryan’s presentation was full of great suggestions, but again, it seemed to be aimed at younger developers just starting out in their career.

The first half was a gratifying laundry list of good practices I had already been employing myself (yay – I’m a “good” developer!), whereas the second half sounded to my experienced ears more like a career day speech to high school interns. That’s not meant as snark – again, I had no problem with the mixed-bag approach, even within the same session, as there were plenty of young (or older beginner) folks there.

Twitterfall

The Twitterfall Wall

I thought the use of Twitterfall to track Twitter mentions of @cocoacamp and the #cocoacamp tag was a nice touch, though I wouldn’t be brave enough to leave my laptop perched atop a stack of stuff with that many people walking around. It was nice, however, to see others’ comments. I made a thoughtful contribution myself. Josh Johnson (@jnjosh), a Twitter friend, was there as well. It was great to meet him in person. I seem to be collecting friends from the Raleigh/Durham area, but I probably shouldn’t have taken Josh and Sal Conigliaro (@salconigliaro) out of their boxes so as to retain their value.

Criticism

I’ll say it: the conference had two glaring problems – traveling sound and insufferably hot air.

Sound Travels

The art center is one of those a nicely-remodeled factories done in the exposed-ductwork-brick-and-beam industrial style. It’s meant to be a contemporary art gallery. The pictures on the Cocoa Camp web site show how well the space works for that purpose. What they don’t show is how poorly it works for the amplified voices of multiple presenters echoing throughout the building. This made it very difficult to concentrate on the presenter of the session you were actually attending. I had the impression this was the first time the event organizers had used that particular venue – I can’t imagine them willingly choosing it a second time, especially if you also consider the air conditioning issue.

A Bunch of Hot Air

There was a whole lot of hot air being blown around the center. That’s not my commentary on the presenters, but a literal statement. From the moment I walked into the center, I noticed it was a tad uncomfortable. I hesitate to use the word “stuffy” because it didn’t get bad until the majority of the conference-goers showed up. Atlanta is a warm place by my standards, but every building I was in prior to the art center was nicely air conditioned.

Perhaps more frustrating than anything is that the AC would come on, blow a tantalizingly cool breeze for what seemed like exactly three nanoseconds, then shut down. It got so bad in the presentation areas I was forced to move back into the main part and strain even harder to single out the presenter I wanted to pay attention to. I’m not sure if I was exactly the first, but I was certainly one of the first to post a complaint. Shortly thereafter, I want to the people out front – one of whom was an employee of the art center – and gently suggested mine wasn’t the only dripping brow.

I must say (quite proudly) that my knack for innovation does not stop at software development. I foggily brainstormed for some sort of solution that would allow me some relief so I could better concentrate in the sessions. I remembered I had several Ziploc baggies with me, one of which contained my travel toiletries that was mostly empty. I dumped its contents into another and grabbed a fist-full of ice from the drink coolers. MacGyver would’ve been proud of my anti-goddamned-heat-stroke ice bag, which I kept on my thigh, held with my wrist in my lap. Now that’s an urban survival tactic!

In their favor I’ll say this: the art center employees finally recognized the problem and cranked the AC (steady-on) for the last two hours or so of the conference. The needle in my head gradually backed away from the red area and down around mid-yellow. Read on to find out why it never quite got to green.

Suggestions

So, if any of the Cocoa Camp organizers are reading this, I humbly request future events be held in a place that provides better sound isolation and that pays better attention to climate control. Those two problems plagued the event. Less pressing but still important is reviewing (and posting) a presenter’s summary – a title can be misleading and such a thing is far easier to catch if a summary is available.

Food, Family & Fun

Max Lager's

Max Lager's

Visiting Atlanta gave me a nice opportunity to visit with my dad for a bit. He lives an hour South of Atlanta with his second wife and drove up to have drinks and a bit to eat. I’m normally a wine person (as my profile prioritizes) but I never pass up a local brew pub.

Max Lager’s was, as luck would have it, right next door to Hyatt Place Atlanta, where I stayed. Possibly the coolest manly name ever (or the saddest alcoholic’s name ever – “My name is Max Lager and I’m an alcoholic.”), I quite enjoyed the 8% ABV Max Abbey brew. A lot.

Later Friday evening, at the JCT Kitchen & Bar, I met up with Sal Conigliaro. I first met Sal at WWDC 2009 and he did not forget I owed him a few drinks. At JCT, “A Small Orange” sponsored a pre-conference meetup and we were told to mention “A Small Orange” to get free drinks. After a few of the deliciously-free drinks, I discovered it was great fun to confuse people by handing them the small container of orange wedges kept at the bar for drinks. In all, it was a fun night.

No Sick Leave; Leave Sick

On a less fortunate note, I found I was becoming ill Saturday (the day of the conference). I suspect it had to do with the crazed sick woman at BWI. I woke up feeling fine (no hangover – I’m a professional, damn it), just with raw-feeling sinuses I initially contributed to dry hotel air. My condition quickly deteriorated. During my trip over to the center, I noticed things were getting steadily worse. During the first session, I felt like the other shoe dropped and I’d pass out of heat exhaustion.

Sleepy & Sick at ATL

Sleepy & Sick at ATL

The air conditioning issue I mentioned didn’t help matters (but I’m not suggesting it was that hot in actuality). I was feeling miserably hot and generally unwell. By the end of the day, I was queasy, my sinuses and throat were fairly raw, and my late nights and early awakenings had me feeling exhausted.

My flight back was miserable (save for a nice conversation with a delightful woman named Liz) and by the time I got home, my chest was feeling tight. I spent Sunday recovering and conquering the galaxy in Spore’s space age level (it’s fun to return to now and again). Miracle of miracles – I feel relatively good today. A bit of rawness and tightness of the chest remains, but I’m feeling pretty good.

Conclusion

So that was my Cocoa Camp experience. I have no idea if it will be received as enticement or warning, but there you have it. My judgement? It’s worth the trip and it’s remarkably affordable, but there is definitely room for improvement. I’d go again (but with emergency DayQuil and a liquid cooling system just in case).

 

Okay, enough is enough. Everywhere I read people discussing the iPhone 4 signal loss issue (by cradling the phone in the palm of the left hand), people imply it’s not objectively measurable, or it’s entirely nonexistent. It reminds me of the original MacBook Pro processor whine issue: “the only whine I hear is the people who think this is a real problem.” Right. We’re all morons.

Whiny

As I mentioned with the MacBook Pro issue, the whining issue turned out to be very real. There were various conditions under which it occurred for different users, but I was “lucky” enough to get one of the affected laptops. I found older people couldn’t hear the extremely high-pitched whine, yet it gave me a damned “sick-headache” from its persistence. I finally narrowed it down to a fairly specific cause. I’m not a radio / antenna / electronics expert, but something didn’t seem to be correctly grounded. If I laid my finger (not an inanimate object, not conductive metal, not a ferrite rod – nothing) on the right-hand side of the rubber inlay between the hinges on the “lid,” the whine immediately stopped. As soon as I removed my finger, the whine slowly returned. If I “gently tapped” that same spot out of frustration, it might stop for quite awhile before returning. The whining didn’t come from the speakers. It was strongest near the very spot I could touch to make it stop. This told me it was some kind of feedback, interference, or some damned problem with one or more specific electronic components.

Apple refused to acknowledge the problem. Reading the various forums revealed a plethora of fan boys and fan girls repeating the same uninspired joke again and again: “The only whine I hear is from you.” Well …

It’s not as if I work with technology every day, so you’re absolutely right. The sickening headache I developed every day from this one Apple product among many I owned or worked with is all in my head after all! Thank God for your unilateral diagnostic skills! A sample size of exactly one surely accounts for all!

Yeah, I had that laptop less than a year.

Ugly Bags of Mostly Water

Humans are salty and wet. We tend to interfere with electrons and even radio signals. Which is the problem here? Are we blocking the radio waves or shorting the thing electrically? I say the iPhone 4 problem definitely seems to be caused by bridging the very part of the phone likely to be wrapped in a nice, salty, meaty hand – I think it’s electrical.

I don’t accept Jobs’ bullshit “you’re holding it wrong” answer. Anyone who holds the phone on the left side of their head is going to cradle the phone with its lower-left corner tucked into the palm, just under the fleshy root of the thumb. How can you possibly defend a phone that can’t be gripped on one whole corner without dropping its signal?

To be clear: my phone doesn’t just lose signal strength when I grip it “the wrong way;” it completely drops the signal in about one second flat. In three, a call is dropped entirely. No data gets through while I’m holding it that way.

… and it’s not in my fucking head.

And Steve: I’m not made of money and I rely on my communication device to communicate, so it really is a pretty big godamned deal when it’s so easy to cause it to fail. Considering how vastly easier it is compared to any other phone I’ve owned since my first one in nineteen-ninety-fucking-seven, I’d say it’s quite a bit more than a non-issue.

There is definitely a problem. I’ll accept it doesn’t affect everybody, but if your position is, “it works for me, so you’re an idiot,” then I can’t respect you let alone your opinion. Sorry.

One explanation that makes a lot of sense is the possibility of the sim card contacting the metal sim tray (which contacts the metal frame). I can confirm my own sim card was cut so that all the gold contacts along one edge come into direct contact with the metal sim tray. It was definitely shaved too close (much like a fingernail cut too far back, its nerves screaming at contact with anything, even air). My own 5-minute experiment with electrical tape failed because the thickness of the tape prevented the card from seating correctly. I may have to try again.

The one thing that makes me doubt this proposed solution is that the sim tray slides into the opposite side of the phone – the one that isn’t bridged by holding it “the wrong way.” This observation would seem to shoot holes in the running theory of interference by sim shortage.

What makes me so sure it’s some sort of short circuit is that today my phone failed me (signal-wise) for more than an hour. I was very sweaty, so even though I was avoiding holding it “the wrong way,” it still refused to transfer data or keep a stable call. Guess what happened when I wiped it down with a damp, then a dry cloth? Like magic, it was stable again. Perfectly. Instantly. Magic!

I’m Not a God Damned Idiot

So I’ll wrap this up by making this emphatic statement: the iPhone 4 most definitely has antenna issues for some users. My own completely drops the otherwise full signal on contact in multiple areas that all had strong signals for my 3GS and are far apart from one-another. I love the iPhone 4, but, being my only phone, this is quickly becoming a major issue for me.

© 2011 Joshua NozziJoshua Nozzi is a Cocoa developer for hire.Suffusion theme by Sayontan Sinha