Migrating your contacts from Windows Mobile to the iPhone without touching a PC 

Filed under: Blogroll on Tuesday, December 23rd, 2008 by jeremy | Comments Off

Well, I just got an iPhone, and I gotta say it’s one cool gizmo. Time will tell if the sexy creature will hold up or if the network will be sufficient (nobody has good things to say about AT&T’s coverage, but so far so good). But it’s definitely the most usable phone I’ve ever beheld, and I think it’ll end up making my life easier.

So my old phone (which I detailed here) had to go – Windows Mobile was a complete bitch, and within the past week I couldn’t even get buttons to work. The touch screen is a disaster, Windows Mobile takes years to respond to your input, and the battery life was abysmal. While the iPhone didn’t have a high bar to clear, I did encounter some frustration: trying to get my contacts off my old phone and onto my new one.

If you’re using a Windows PC with iTunes and your iPhone, importing your contacts should be a cinch: just use ActiveSync to bring them into Microsoft Outlook, then import those contacts into iTunes directly. But if you don’t have a PC, it’s complicated. Early on I tried using Mail2Web’s free exchange server to pull stuff off the old phone. That worked well, and I simply installed a “Exchange ActiveSync Profile” on the iPhone to bring in the contacts. Trouble was, these contacts were permanently connected to the exchange account. I didn’t want an exchange account on my phone indefinitely, so when I removed the profile, my contacts went with it!

Since I do have a Macbook, I was able to figure out a way to get contacts from the exchange server into Apple’s Address Book application. The iPhone works seamlessly with Address Book, so this is definitely the way to go. After much sweat and cursing, here’s finally the tried and true way to retrieve those contacts off your Windows Mobile device – without unnecessarily dirtying your fingers with Windows:

  1. Sign up for a Mail2Web Live account
  2. Install the Exchange ActiveSync program on your Windows Mobile device – you can download it from the Mail2Web Control Panel under “ActiveSync Settings”. Be sure to log into that and not the “Outlook Web Access” site. Check the sidebar for the link.
  3. Sync the device with your exchange account – this should happen automatically when the package installs, but if not initiate an ActiveSync synchronization manually.
  4. Open Address Book on your Mac. Select “Preferences”, check the box next to “Synchronize with Exchange” and enter the following credentials:
    • Username: your Mail2Web user name@mail2web.com
    • Password: your Mail2Web password
    • Outlook Web Access Server: https://exchange.mail2web.com/exchange/what you put in the username field above
  5. Open the iSync application on your Mac, enter “Preferences”, and select the “Show status in menu bar” checkbox. You’ll then see an icon in the menu bar at the top of the screen. Right click it and select “Sync Now”.
  6. Wait for the sync to finish up – you may need to iterate through conflicting contacts to clean them up, but it’ll walk you through it.
  7. Connect your iPhone to your Mac, go into iTunes, select your iPhone on the left-hand sidebar, select the “Info” tab, and check the box that says “Sync Address Book contacts”, and click the sync button at the bottom.
  8. When the sync is finished, check your iPhone to ensure the contacts came through.

Enjoy your iPhone and your freedom from MicroSerfdom!

New Frontiers of Connectedness: The Case for “Twitter Conversations” 

Filed under: Blogroll on Monday, December 8th, 2008 by jeremy | Comments Off

This morning, a bunch of us on Twitter got into a spontaneous conversation over that instant micro-blogging communication network about its application for conversations. I started it with two tweets (what a post to Twitter is called, or at least what I call it):

People who knock conversations on twitter forget that there’s not a good alternative for public micro-conversations.

and

The post/comment model is too brittle. It reflects the way CERTAIN conversations start. Twitter is clueing us into another mode.

In reality, I knew this would provoke Matt, to whom the tweets were directed because he had complained about this before. He feels Twitter conversations are cluttered, ego-fluffing abuses of the system and that blog-based comment threads are the right tool for the conversational job. He reiterates his charges in a blog post, where he has reproduced the relevant Twitter conversation amongst all the people involved. While I think he demonstrates that Twitter is not the appropriate platform for all conversations – clearly, somebody needed to take this to the blogosphere and expand the ideas beyond 140 character chunks – my concern is that (1) he misunderstands my original point, and (2) he underplays the significance of what’s going on.

First of all, I can’t help but observe that my tweet, while “directed” at Matt, started a conversation amongst several people. Obviously, others are interested in the point I was making: Twitter conversations reflect an authentic need, regardless of whether I expressed this need in the appropriate venue. Now, developers like Matt and I often complain that users make our lives difficult by not using the services we use and provide the way they are intended to be used (and believe me, I’ve bitched about how people use Twitter before). That’s a relevant point, but it’s not the one I was making, which is: people are using Twitter for conversations. However clumsy the tool is, it is fulfilling a need – that fact is demonstrable and difficult to refute, even if you have some sort of normative opinion about the tool’s utility.

With that said, I agree that Twitter does not handle conversations terribly well. There’s no tracking of “threads” of conversation, and it forces you to fit complex ideas in such a small space, hampering the expression of sublime or complicated ideas. In fact, the real point of my tweet – and maybe it was too complex a point for 140 characters – is that we need something better than Twitter – and better than blogs – to fulfill this need. It does no good for Matt to scoff at this use of the tool; our time is more profitably spent figuring out the most effective way to meet this need than to insist people use tools in ways they don’t already find acceptable.

So when Matt says, “I believe that blogging is an acceptable platform for having public conversations (micro or not),” he is utterly missing the point: people do see value in micro-conversations, displaying them publicly and even pushing them to people’s cell phones. Look, we don’t participate on the internet to deal with a clean, impeccably organized network – nobody would call the internet that. What appeals to a lot of us, in spite of the noise and pettiness, is how the network allows people to find new avenues of communication, enriching our lives and providing previously non-existent avenues for expression and fulfillment. Twitter is opening our eyes to a new need people have. It’s one thing to say they are using a bad tool to meet the need; it’s another thing entirely to say that people somehow shouldn’t have this need, or that they should meet the need via available tools when they’re clearly not using them.

Now, let’s be clear: nobody’s making the argument that these conversations should not be occurring on blogs. In fact, I think we’d all agree that the majority of them actually do take place on forums and blogs. So what is it that micro-blogging is bringing to the table?

When I tweeted the original idea, here’s the thing: I didn’t expect for it to start a conversation. Honestly. It was, rather, a reflection of “what I was doing then”, or rather, what I was thinking about then. In fact, it was more of a combination of “note to self” and a remark to my followers that this was something I was interested in thinking more about, possibly in a post. But note that I didn’t write a post, and I’m not sure I ever would have had the conversation that sprouted up around it. I’m not even sure the points I’m now making would have occurred to me, so I can’t be certain a blog post would ever have emerged out of this topic.

The point is, Twitter is not displacing the blogosphere – it is expanding it. We are not participating in a zero sum game. There is nothing to say I can’t tweet about a topic and write a post about it. But I would argue that we’re all better off if I do one of those than neither. In fact, Twitter conversations could serve as a “dry run” of what I will expand on in a post, helping me see different sides of the topic as well as preemptively gauge interest before I invest in a full-fledged article.

But the main point is that Twitter is promoting more communication, not less. We are having conversations with more people now that we never would have had before online, and that’s a good thing. In the same way that writing a blog post is less intensive and more immediate than, say, writing a whole formal article or letter to the editor, tweeting has a similar advantage of increased immediacy and spontaneity. This is opening up new conversations as well as allowing a different quality of conversation than an article or blog post can handle.

So what’s the take-away? We agree Twitter is not a panacea, but that something is happening in the online conversation that is important. Here’s my thoughts:

  • Twitter provides a neutral space in which anybody for any reason can respond to somebody else’s words. If Matt writes a post, I either respond on his blog – in which case, the comment in “his” space, or I write a post on mine in response, in which case it exists in “my” space. But Twitter is neutral – neither of us own the space, and I think it leads people to think differently and affects the conversational style. It’s as if we were all posting to the same blog; and yet, it’s not like that at all.

  • Twitter features a lack of hierarchy – there is no artificial distinction between posts and comments like a blog. Often the comments can be more interesting than the post itself, so why does the latter get center stage?

    Also, the lack of a hiearchical threading system does clutter the conversation, but it also allows people to crowd around the posts they think are important, rather than merely the one that started the conversation or the thread. I think people overestimate how linear real life conversations are.

  • Spontaneity – some thoughts only need 140 characters. These thoughts don’t need the investment of time that people often feel compelled to put into their blog or into a comment. On the other hand, In fact, because they are bite sized passages, they’re not quite as disruptive when they’re pushed to your phone or desktop. That doesn’t mean a thought you tweet shouldn’t be expanded into a longer format on a blog or blog comment; but the threshold for entering the conversation is somewhat diminished (no filling in your name / email / site and having to trace a conversational thread, just jump in!).

  • Immediacy – it’s like public IM; a happy medium between fleeting group chats and blog/comment posts. Matt seems to despise this aspect; he says, “I’d also argue that not just many, but most of these conversations don’t need to be public other then for the authors ego.” My response: if you’re looking for people to sublimate their own egos on the internet, good fucking luck. Not gonna happen.

    Plus, I’ve often wished that some comment threads were more immediate like IM, because a lot of misunderstandings and acrimony could be more easily dealt with if people could discuss the topic closer to the manner in which they talk in person. Now, Twitter is by no means a replacement for IM, but it does stake out a position in between blog comments and IM in a most curious (if a sometimes noisy) manner.

  • And approach it from the other side: it’s a lot easier to dismiss a tweet than a blog post. Marginal ideas can be floated with less risk of wasted time than constructing a whole blog post with a title, etc. They’re also more easily ignored than yet another entry in your feed reader. Think about the comment threads Twitter prevents because people can air petty thoughts without demanding the reader’s attention for a full blog post. In that sense, it helps blogs by bleeding away throwaway comments and posts, making the posts that do show up on blogs more relevant, useful, and worth reading.

Remember: my point is that Twitter conversations are an indicator of a new communicational need, not that Twitter fulfills this need perfectly – I admit it doesn’t. It’s up to developers like Matt and me to invent the right tools for this new need. Maybe that will be a modification to blog software, or a mashup of Twitter with another service, or a new service altogether. But it’s most important that we acknowledge what is actually happening on the internet, and not reflexively dismiss it as “noise”.

Bells shall ring! 

Filed under: Blogroll on Monday, December 8th, 2008 by jeremy | Comments Off

Congratulations to my sis-in-law Kristal and John on their engagement! They’re great for each other and a hell of a lot of fun to have as relatives.

Tasha and I found out about it on Friday Saturday, which was also the date of a birthday celebration for John at Southside Plaza Bowl (I reviewed the establishment a few months ago here). So it was good to celebrate two happy occasions, eat Kristal’s awesome carrot cake she made for John, and rock some duckpin bowling.

While the upcoming year is going to be hectic (and a bit scary) for all, I can’t help but feel encouraged when people make such a commitment to each other. Marriage is not easy, but if the unexamined life is not worth living, then marriage is a crash course in that examination and a concrete investment in a worthwhile life. As I see it, anytime people resolve to share their lives with another they make this crazy planet a little more human.

I wish them much happiness as they lay the foundation for this next stage of their lives.

A blast from my past 

Filed under: Blogroll on Wednesday, September 24th, 2008 by jeremy | Comments Off

One of my favorite live sets of music ever: Disco Biscuits on New Years Eve 1999. Trancefusion to the max (right before they broke up for a few months).

Enjoy courtesy of the wonderful Internet Live Music Archive.

The RSpec post (including an important tip on shared example groups) 

Filed under: Blogroll on Thursday, March 27th, 2008 by jeremy | Comments Off

So in my Rails apps lately I’ve been using the hell out of some RSpec. I have to say that it’s making me a better, more methodical coder. It’s not just allowing me to define my app in terms of expected behaviors and providing the well understood regression testing capabilities of any testing framework. It’s a whole new way of organizing my approach to programming.

Read the rest of this entry »

Using attachment_fu with :storage => :db_file 

Filed under: Blogroll on Sunday, March 23rd, 2008 by jeremy | Comments Off

So I recently got to use Rick Olson's attachment_fu in a Rails application I'm working on, and it is pretty awesome. It takes a lot of the hassle out of managing files that you might need to upload such as images, and even has the capability of doing thumbnails on the fly. Attachment_fu has three methods for storing uploads: the file system, Amazon S3 storage, and the database. You can find ample articles on the 'net for using the first two methods, but the last one is poorly documented - both in the attachment_fu docs and on the web (that's not to say it isn't documented at all - I owe everything to Ron Evans' crucially helpful post). But I'd like to provide a streamlined - or at least personalized - tutorial for getting this to work.

Read the rest of this entry »

GitHub: Anarchy for Programmers 

Filed under: Blogroll on Tuesday, March 11th, 2008 by jeremy | Comments Off

I’m at the CVREG meeting watching Jon give his presentation on GitHub, the new awesomeness that everybody (nerdy) is talking about. I’m still learning about it and figuring out how / why it’s different than Subversion, but look for a personal project on there soon.

git is a source code management system designed to make branching easy. It doesn’t enforce a “HEAD” like CVS and Subversion, so you can organize your project (or not) any way you want and fork to your heart’s content. It was written by Linus Torvalds and company to help them develop the linux kernel, so it’s all about lots of people hacking on code and figuring out a way to diff between versions without making full copies of the source. GitHub tracks, hosts, and manages all the distributed goodness: think MySpace for programmers. It also has profiles, update feeds, requests, and more. It’s perfect for starting your own, decentralized, self-organizing coding community.

Let me know if you want a beta invite. I’m jeremy6d if you want to find me.

It’s 11:00 pm; do you know where your model methods are? 

Filed under: Blogroll on Saturday, February 23rd, 2008 by jeremy | Comments Off

So the other day I was implementing what I considered a simple Rails association helper to make my life easier:

has_many :unapproved_posts,
:class_name => "Post",
:finder_sql => 'SELECT posts.* from posts INNER JOIN users ON posts.user_id = users.id INNER JOIN groups ON users.group_id = groups.id WHERE (groups.id = #{id}) and (posts.approved is NULL)'

Yeah, it’s a little clunky, but I needed a quick fix.

Perhaps I should have spent the time on a refactor, because this code put me in Rails hell. When displaying unapproved posts in my controller, my code iterated over a collection of Post objects. When I’d first start the server, the action would grab the association with no problems. However, every subsequent time the action runs, the Post objects I got back were missing the methods I defined in the Post model. All the attributes were there and accessible, but any methods had disappeared. Note that this only happened when accessing the posts via the association helper through the controller; doing the exact same stuff in script/console gave me no problem.

After a few hours of troubleshooting and abject frustration, I came across this ticket which seems to describe the behavior I was seeing. Note that this is a 1.2.6 application I’m working on, so the lack of resolution makes some sense. However, I needed a fix, and my friend Jon suggested I just write a method that returns the collection rather than using the helper. So running the same query with Post.find_by_sql worked fine, and since I merely needed a read-only collection, this serves my purposes.

Just wanted to drop a line in case anybody in the future runs into this. Watch out using finder_sql; it does not appear reliable. Also, if you experience this behavior in a Rails 2.0 app, let me know (less important) and reopen the ticket (very important).

New Frontiers in Ruby Web Applications 

Filed under: Blogroll on Wednesday, February 6th, 2008 by jeremy | Comments Off

So as somebody who has experienced their share of headaches deploying Rails apps (and ended up learning how to provision a VPS from scratch as a result) I’m interested in the questions Peter Cooper of Ruby Inside asks:

  1. Is there / why isn’t there a version of mod_ruby that doesn’t have the “class sharing” issue? What is the technical impediment?
  2. Is there any immutable reason that Ruby apps couldn’t, in the future, be deployed in a PHP-esque fashion?

The ensuing discussion in the comments is very instructive, and I’ve even been giving Cooper’s Switchpipe project a bit of attention lately. But Ezra Zygmuntowicz chimed in with quite welcome news:

I’m just going to say that Rubinius has support (as of today!) for running multiple instances of it’s VM within one process, each VM on it’s own *native* thread, each VM running many ruby green threads. Each VM has it’s own heap and so each VM could load different apps that wouldn’t interfere with each other. We have plans for a mod_rubinius for apache that takes full advantage of this feature. Stay tuned ;)

I certainly will!

Two tired girls 

Filed under: Blogroll on Sunday, January 20th, 2008 by jeremy | Comments Off

Just had to post this because it was too perfect a shot not to.

t-girls.jpg

The busyness won’t last; stay tuned for real blogging.