Filed under computers

Re-Introducing ProjectNom

ProjectNom Screencap
The original idea for ProjectNom was born about four years ago. At that time, my method of storing recipes involved a pile of printed recipes. As I picked up this pile — a pile with no organization, rhyme or reason — I wondered if there was a better way.

A better way to organize recipes, especially those found online.

A better way to cook those recipes, without having to resort to paper.

A better way to surface those recipes later when it came time to plan a meal.

The options at the time were rather limited. They were all locked to a certain platform, blissfully ignorant of the web. Importing recipes was a pain, and cooking directly from the software wasn’t a primary feature.

I built the first version of ProjectNom quickly, mostly because I wanted to get my own recipe mess under control as soon as possible. What I ended up with was a solid proof of concept, but the accelerated development time forced cracks in the infrastructure. The result was difficult to maintain and difficult to extend — classic hallmarks of such a rushed effort.

This year, I decided to finally give ProjectNom the professional treatment it deserved — or at least, the best treatment a one-person development team could deliver. Specifically, there were a few aspects I wanted to improve over the original “proof of concept”:

  • True responsive design. I used Bootstrap for the original ProjectNom, but a combination of my inexperience with modern front-end development combined with early-version Bootstrap limitations resulted in a lack of finesse, especially on smaller devices.
  • Easier importing. The first version of ProjectNom made importing recipes as easy as selecting text. While that was better than typing it in from scratch, it was still a hassle.
  • Sharing. Part of the fun of cooking is sharing the recipes you find. Having a way to do this in the same place that you store your recipes only makes sense.
  • Technical foundation. The original ProjectNom was difficult to maintain and improve upon.

This work started in January. Eight months later, I’m proud to finally reveal the complete rewrite of ProjectNom.

  • True responsive design. While I’m still not an expert in front-end development, the new ProjectNom is truly responsive across a variety of devices. If it has a relatively modern browser, it’ll look good. Some pages — namely editing a recipe — are more usable on devices with larger screens, but they’ll still render intelligently.
  • Easier importing. The new ProjectNom can quickly import recipes from known sites in one click. At launch, the following sites are supported: Food Network, Epicurious, Serious Eats, Bon Appetit & AllRecipes. The best part is that adding new sites is relatively easy, so please send along suggestions for any site not on this list! In the meantime, the traditional import functionality can be used — just select the text you want and click “import”.
  • Sharing. Invite your friends to join ProjectNom, add them to your list of friends, and then share your recipes! It’s that easy. You can even import the recipe directly into your collection for easy access.
  • Technical foundation. This could be an entire post in itself (and probably will be at some point) so I won’t go into too much detail here. But suffice it to say: the new ProjectNom is better organized for maintenance and expansion. One example: an API layer to keep the back-end concerns separate from the front-end.

There are bound to be bugs in this first version, but I’m committed to getting them ironed out. If you find anything amiss, please let me know either here in a comment, or at support@projectnom.com. I also welcome any feature ideas — I want to keep improving ProjectNom until it’s the ultimate recipe management solution across all platforms and all devices.

And on that note, I wanted to end with some musings on the state of recipe tech in general. Recipe web sites have improved greatly since I first started working on ProjectNom, but they’re still distinct silos of information. So even if a website lets you save recipes into a personal “recipe box”, you still have to remember which site has the recipe you’re looking for.

It’s also interesting to me that a lot of recipe management tools available today are locked to a particular platform. To be clear, they’re great apps — but if you’re not tied exclusively to Apple or Microsoft devices, then you suddenly lose access to your recipe collection. I certainly see the allure of staying on one platform — recipes are complex beasts, and it helps to harness the power of a specific platform to get the best experience. I certainly haven’t ruled out the possibility of creating platform-specific interfaces to ProjectNom. But the ability to access a recipe from any device at any time is a critical feature, and should never be compromised.

With ProjectNom, you can rest assured that it never will.

Now get out there and start cooking!

Tagged , , , , ,

Apple Watch First Impressions: Beyond the Obvious

Apple Watch
Much has been said about the Apple Watch already. Much of it has been obvious, especially if you’ve been following along with the technology media’s obsession with the device. In light of this, I wanted to write up a quick blog post detailing my experience with the Watch over the past week, while trying to avoid some of the common threads that you’ve likely already read.

Continue reading

Tagged , , , ,

Trowl 0.8, Or How I Learned to Stop Worrying and Love API 1.1

Overdone jokes aside, I realized that I use Trowl too much, and I invested too much time in the app, to just toss it aside when Twitter decided to finally turn off version 1 of its API. That said, it’s not a trivial process.

Technical Details

If you’re interested, Trowl was originally built on requesting XML responses from Twitter. This was primarily because, at the time, .NET was best suited for parsing XML documents more than anything else. With the switch to API 1.1, Twitter completely dropped the ability to request XML responses, in favor of JSON. Luckily, .NET has become more fluent with JSON recently – but it still meant going back through all my calls to Twitter and replacing the XML-based response/parse logic with JSON-based response/parse logic.

The Status of 0.8

Okay, so, I’m making this version 0.8 because I’m essentially changing the entire foundation that Trowl is based on. There aren’t any new features here, but it’s a big enough infrastructure change that I felt justified in bumping up the version to 0.8.

I’ve converted almost everything over to API 1.1 except the following:

  • Controlling Trowl through DMs (which I don’t think anyone uses anyway)
  • Spam reporting
  • Additional caching in light of API 1.1’s stricter rate limiting

Everything else should work, but I’m releasing a development version first so people can try it out and let me know what bugs they find.

Trowl 0.8 Download

UPDATE 6/17/2013+ Another quick update that fixes some issues with retrieving friends (darn those stricter rate limits!). Authorizing a new account should be fixed now too.

UPDATE 6/17/2013 All functions should be switched over to API 1.1 now, but please send me any bugs or issues you find. Thanks!

Thank you for sticking by Trowl during the API shutdown!

Tagged , ,

Microsoft Surface

I just watched Microsoft’s first commercial for their Surface tablet. It sucks. I get it: you’re so very proud of that “perfect click” sound you engineered – but that’s not what you center a commercial around.

This is the Microsoft Surface commercial that I would make.

Opening shot shows an iPad on its home screen. “This is an iPad,” starts the voiceover. “All your apps are laid out, ready to launch.” The camera zooms in on one of the icons, “You tap here to see your appointments for today.” Switch to another icon. “Tap here to get updates from your friends.” Switch to another icon. “And you can tap here to see the weather – because it’s not actually 73 degrees and sunny.”

Camera switches to another tablet. This time it’s Surface. “This is the new Microsoft Surface,” says the voiceover. “All your apps are laid out, ready to launch.” The camera zooms in, showing all the information right on screen that would have required tapping and hunting on the iPad.

“But you don’t need to. Looks like I’ll need an umbrella for the football game today.”

End.

Sure, Apple’s new iPod commercial is just as useless as the Surface commercial. But they can get away with that because everyone knows how an iPod works. The Surface is still an unknown to most people. I hope Microsoft gets more serious about their marketing as time goes on.

Tagged , ,

Trowl 0.7.3 (Tweet Marker Support)

I’m making a development version of 0.7.3 available for anyone who would like to help me test it before it’s released to everyone. This version has better stream error recovery handling, and makes a couple of other minor under-the-hood changes. The most noticeable change, though, is Tweet Marker support.

What is Tweet Marker?
For those who aren’t yet familiar with the service, Tweet Marker syncs your Twitter timeline across applications by recording the last tweet you read. Applications that support Tweet Marker can quickly jump straight to the spot in your timeline where you left off.

How does that work for Trowl?
Since Trowl doesn’t show you a traditional Twitter timeline (at the moment…), it uses this information a little differently.

Saving your last read tweet: in Trowl, a tweet is considered “read” when its notification is dismissed. Every 15 seconds, it will send the tweet that was last dismissed to Tweet Marker.

Retrieving your last read tweet: every 5 minutes, Trowl will pull the latest Tweet Marker from the server. It can’t remove any tweet notifications already on screen, but it won’t send new notifications for tweets you’ve already seen. Instead, it will pick up with the first new tweet. Depending on your settings, this will also happen when you uncheck the Silence option.

How do you enable Tweet Marker?
Tweet Marker has been added as one of the “missed tweets” options:

Tweet Marker

This option covers both tweets and mentions.

I’ve also updated Metro Display slightly. In addition to the coalescing support that I added a little while back, I also changed it so that the Twitter timestamp dynamically updates – this should have been added a long time ago, so I apologize for the wait. I also fixed a nasty memory leak bug.

You can try both of the new toys here:

Trowl 0.7.3 Development
Metro Display 1.5 Development

Please send any bug reports my way – you can comment here, send me a tweet, or post to the Google Group. Have fun. :)

Tagged , , ,

Windows 8: First Impressions

Windows 8

I’m still playing with the Windows 8 beta – er, sorry, “Consumer Preview” — and exploring its details. However, first impressions are important, and I think I have a few key observations to make.

Last year, I downloaded the developer preview when it became available. I didn’t spend too much time with it, because it was obvious how early of a build it was. Still, the Metro interface was promising, and the few apps that were available showed great promise.

One big complaint about the developer preview, though, was how much it relied on touch. You could use a mouse and a keyboard, sure, but they were second-class citizens. On the one hand, this was good: Microsoft desperately needed a good touch interface, and there was nothing better than Metro. But on the other hand, it was awkward to use on a traditional computer. Considering that this was the next version of Windows, that was a major problem.

Since then, Microsoft has attempted to soothe everyone’s fears with a consistent message – a message that was reiterated by Steven Sinofsky at the Consumer Preview launch event:

Sinofsky’s concern, however, is ensuring developers are on the same page, designing Metro apps that work just as well on touchscreens as they do with a mouse.

"The goal should be that the operating system scales with you," added Sinofsky.

"That’s what we mean by a no-compromise experience."

For the Consumer Preview, they took many steps to help make the Metro interface more intuitive for the keyboard and mouse, so that there were no compromises. But were they successful?

Continue reading

Tagged , ,

Restoring a Time Machine Backup That’s Stored on a Windows Home Server

I think that may be the longest title I’ve ever had on my blog. Anyway…

Last week, my Macbook Pro hard drive suddenly died after about two years of dedicated service. While it’s a bit surprising, I did push the little guy pretty hard – I regularly run OS X alongside Windows 7 on VMWare, and I keep both platforms busy. Considering the VM is actually running off the Boot Camp partition, it’s a lot of work for the drive. But I digress.

I’ve been running Time Machine for a while, so I was hoping that I could restore its most recent backup onto my replacement hard drive. There was just one snag, and I knew this would be an issue: my Time Machine backups are stored on my Windows Home Server. As you can imagine, doing this is a bit of a hack (here are some instructions if you don’t know how to do this yet). And as I’m sure you can also imagine, doing a hack like this makes a “normal” Time Machine restore impossible.

What I mean by “normal” is that if you boot off the OS X installation disk, you can choose to restore a Time Machine backup instead of installing a brand new copy of the operating system. When you choose this option, it scans for a Time Machine backup – but only the locations it supports, like external hard drives or Time Capsules.

Now, sure, you could probably copy the Time Machine backup on your WHS to an external drive, since the backup on the WHS is essentially just a disk image. But I didn’t have an external drive large enough to spare – and besides, there must be a better way.

Perhaps my Googling was sub-par at the time (I was in the middle of restoring my laptop, after all), but it took a while to find the answer. You can’t do a normal Time Machine restore, but you can use the Migration Assistant:

  1. Install a brand spanking new copy of OS X. Make a throw-away account when you’re prompted to create your first account. I named mine “Admin”.
  2. Mount your Time Machine backup. In Finder, use the menu option Go –> Connect to Server…, and type the address to your Windows Home Server. This is usually “smb://” plus the server’s name. (For me, it was “smb://beat”.) OS X should find the server, connect to it, and list the available shares. Connect to the share that contains your Time Machine backup, and double-click the .sparsebundle file to mount the disk. (Enter your Home Server username and password, if prompted.)
  3. Run Migration Assistant. This tool is located under Applications –> Utilities on your Mac hard drive. Start it up, and read the intro if you’d like. Click Continue when you’re ready. Choose the “From a Time Machine backup or other disk” option, and click Continue. If you were able to mount the disk image in step #2, then it should be an option to choose from. Select it and Continue.
  4. Restore the backup. The last screen shows you the available items to restore, and how much space they’ll take up. If you created the throw-away account in step #1, then there should be no conflicts with restoring your real account from the Time Machine backup. Select what you do or do not want to restore, and then click Continue. The restore can take a while depending on how much data you have.

That’s it! When it finishes, your account should be back to the way it was, exactly as you left it (as of the last Time Machine backup). You can now throw away your throw-away account, or leave it as a battle scar.

Since it took me a while to find this on Google, I’m writing it up to hopefully give it more exposure. And if this is already well know and I just missed it, well – at least now I have a record in my blog of when my hard drive failed and I was sad. :P

Tagged , , , , , ,

My Little Twitter Bot

It all started when @ndoto replied to one of my “eeyup” tweets saying that he wished there was a Big Macintosh Twitter bot that would reply with an “eeyup” if you sent a tweet containing “eeyup”.

For those who aren’t in the know, Big Macintosh is a character on the cartoon My Little Pony: Friendship is Magic. It’s a slight re-imagining of the original show, headed by the same creative mind behind Foster’s Home for Imaginary Friends – an awesome show with clever writing. Needless to say, that same maturity (but kid-appeal) carries over to the new My Little Pony. I suppose I should clarify that I’m not enough of a fan to call myself a brony, but I do think the show is about 20% cooler than most other things on television – and Big Macintosh is by far my favorite character. :)

I’ve always wanted to make a Twitter bot, so I jumped at the opportunity. In this post, I’d like to share some of the technical details, and decision making, that brought @BigMacinbot to life.

Continue reading

Tagged , , , , , , ,

The Trouble With Hubs

A few days ago, I posted my own thoughts and experiences with iOS 5. At the end of the article, I conclude that Windows Phone 7 would probably appeal to me, because it gets rid of the endless sea of icons and apps, and replaces them with dedicated “hubs”.

Well, way before that post – last year, in fact – I wrote an article about hubs, and the problems such a system has.

Well, here’s the part that worries me. While this concept is incredibly cool, it puts the responsibility on Microsoft to keep things up to date and fresh.  What the App concept buys you is that when new social networking services crop up (for example), people can write Apps on top of its APIs right away, and before you know it you’re linked in to the service.

With Microsoft’s hubs, how long will you have to wait for Microsoft to integrate a new social networking service?

Now, today, I see that Paul Thurrott has posted an article on what Windows Phone 7 still lacks, even with this year’s Mango update.

The first is a topic I’ve been meaning to address for some time now, which is a serious issue with a facet of Windows Phone that Microsoft has trumpeted, correctly, as its primary advantage over iOS and Android: The integrated experiences that, in many ways, obviate the user’s need to find, download, and then use a myriad of different apps to accomplish common tasks. When the Windows Phone–integrated experiences work, they work well. You can very easily share a photo to Facebook or Twitter, without having first installed and configured a dedicated app for either service, for example.

But in many cases, these integrated experiences don’t offer as much functionality as do the dedicated apps. So depending on your needs, the existence of an integrated experience might simply be obviated by the fact that it doesn’t do what you want.

Paul goes on from here to describe a scenario, using Facebook, that can’t be accomplished properly because Windows Phone’s implementation of the Facebook API is limited. And it isn’t the only example.

There are holes like this in all of Windows Phone’s integrated experiences, from the Twitter integration that doesn’t understand hash tags to the photo integration that doesn’t understand Flickr and is unable to upload full-sized versions of your photos, automatically, to the service of your choice.

Go read the article – it’s essential if you’re considering a switch to a different mobile platform, like I am.

But this point is of particular note, because it is the core of what makes Windows Phone different, and worth considering. I noted in my original article last year that if Microsoft opens up hubs to third party developers, that it will help keep things current and fresh. So far that hasn’t happened, and my guess is that when Microsoft does finally do this, it’s going to be limiting.

There’s no final answer here. But if Microsoft wants to stay in this game – and wants to tout the benefits of hubs – it needs to keep this stuff updated. Ignore this, and you can watch your platform die in a sea of obsolescence.

Tagged , ,

iOS 5: The Devil’s Details

iOS 5Question: What is a review?
Answer: A thorough, unbiased evaluation with the intention of determining a final critique.

It may not be a proper dictionary definition, but this is what I expect when I read technology reviews. Most of the time, I am satisfied. But with the release of iOS 5, I was consistently disappointed. Gone was the thoroughness. Gone was the proper critique. They read more like summaries of the features listed in an Apple press release. There were some details, of course, but there was also a lot missing.

This is my attempt to fill in some of the gaps. I’m not going to attempt to do a full review. But I want to look at iOS 5 with fresh eyes, explore some of the details overlooked in other reviews, and briefly sum up how it compares to other mobile operating systems available today.

So, lets begin.

Continue reading

Tagged , , , , ,