posts by date

09/2006
Beautiful Google Reader upgrades

Wasn’t it just today/yesterday when I was complaining about the things I didn’t like with Google Reader? Well, lo and behold, they’ve met my needs graciously. Last night, Google upgraded their reader and I’m thrilled with the new changes. Let’s review what I didn’t like, versus what’s new—shall we? Here’s the basic list:

  • Problem 1: inability to load list with desired feeds by default (such as a specific label, or excluding feeds in a black list)
  • Problem 2: going to a new page to add a new feed (way too inconvenient)
  • Problem 3: previewing a feed before subscribing
  • Problem 4: scrolling to the bottom of the page to read (long) feeds (basically, losing sight of the feed column)
  • Problem 5: inability to know if there are new feeds per subscription

Now that I’ve mentioned the basic list of issues I had, how does the new reader correct these things? Let’s take a look:

Solution to Problem 1: Get rid of the feed column entirely, and replace it with a subscription list. Not only a subscription list, but a sophisticated subscription list with collapsible folders and the ability to toggle between all feeds and updated feeds—much, much easier. Oh, and the list is constantly working for you by performing a consistent checkup on your feeds via Ajax. A nice touch.

Solution to Problem 2: A fancy little drop-down to add new feeds. When you subscribe to a new feed, you don’t leave your current location throughout the entire process.

Solution to Problem 3: Eliminate the feed preview before subscription. Really, this was unnecessary. Admitedly, I can see the value, but usually a person knows if they want to subscribe. I viewed the preview as an unnecessary intermediate step and I’m glad it’s gone.

Solution to Problem 4: Keep the feeds in an expanding container. I always hated reading long feeds beacause I had to scroll to the bottom of the page, sometimes losing complete site of the feed listing. The use of spacebar helped the issue, but it was still inconvenient. I usually just skipped what I couldn’t see, unless it was really interesting. Now feeds scroll inside of a container, allowing the subscription list to always remain visible.

Solution to Problem 5: Display a count of the new items per feed subscription. I probably get the most satisfaction from this upgrade. Not only are the feeds marked with a count, but they’re distinguished as bold (in case you want to view all feeds). Wait, I’m not done—there are counts per folder (or per tag), too!

Not only are my quirks corrected, but we have a few bonus features as well. Things like updated shortcuts, an addition of a “home” section to show what’s new (including the latest post from the blog), previous/next buttons for easier navigation, a “mark all as read” link, and an option to mark items as read simply by scrolling down the list. Not to mention the ability to toggle betwen “expandable” and “list” views, which might be familiar to all of those gmail users out there. If you think about it, a feed reader is like an inbox. Now you have the option to treat it like one. Plus, the UI has been carefully crafted in my opinion. Have you noticed the subtle difference between (in expandable view) a new item and a read item? I’m a sucker for the subtle things. Overall, I have to say, I’m impressed with this reader and it gives me more motivation to keep up with my feeds. I’ve come across several new things while writing this post, so I’m anxiously awaiting to find more of the new features that have slipped by.

Speed won the battle of feed readers

Despite what I love about Newshutch, Google pulled me back in. Ultimately, I’ve come to realize that speed has so much precedence over any other feature (to me); I had to give Google another try. Interface is up in the rankings, too, but Google isn’t too bad at that. The major reason I left Google Reader for Newshutch was because the organization of the feeds. Some like the “give me what’s new no matter what subscription it’s in” view. Populating the list with the most recent feeds across a subscription list is not good with me. What if I wanted to read Digg through my reader? I can’t with this model. I’m then forced to rely on the subscriptions menu (Google Reader). In Newshutch, I like the way I’m aware of something new, but had the choice to view it based on the subscription. I think the count is important, too. Often I read feeds depending on how much time I have. If there’s only (1) post, I can read it now. If there are (8) posts, I better wait until I have a few minutes.

The problem with Google’s implementation of my desired “view by subscription” option, is not showing any indication of new feeds. It’s kind of irritating, but at the same time, the speed is unbelievable. I thought of labeling certain feeds with a key label so I could pull my top feeds based on that label (similar to the “categories” I used in Newshutch), but I don’t like that as much. Although, Google’s “Related Subscriptions” menu is pretty handy—maybe that will satisfy me for a while. Either way I don’t think I’ll be able to get over the quickness of Google’s feed display. Plus, their shortcuts are sweet. Particularly, g+l for labels, j/k for next/prev, and v for viewing in a new window (tab).

IE :hover support for non-links

It simply doesn’t exist. A highly desirable pseudo-class, and IE doesn’t support it. But it doesn’t deny it either. You see, when IE finds something it doesn’t support, it returns UNKNOWN. For instance, p:first-child in IE would return p:unknown, since IE doesn’t support :first-child. Naturally, you would expect it to do the same for :hover since it doesn’t support that, either. But it doesn’t. It recognizes the :hover, but doesn’t do anything with it unless it’s a link. Since IE does support behaviors, though, I believe you can use .htc or .hta files to attatch to specific elements through CSS, and change the behavior to whatever your little heart desires. But I’ve never done this and probably never will. I’ve yet to be in a situation where there was an extreme need for the :hover class.

Anyway, this spawns from my attempt (or lack thereof) to apply hovering effects to the Flickr images on my site. It took literally 1 minute to do in Firefox (img:hover). After all, it’s a fair and simple thing to want and based on what we know about CSS, a fair and simple thing to achieve. The intuition I’ve gained from writing CSS is acknowledged by the intuition of Firefox when reading CSS. IE is awkward, ugly, and annoying. Once it works in IE, FF tells me I’m wrong. So, there I am… hacking away in the stylesheet (refusing to use onmouseover for this) until I come back to Earth. Who cares if it doesn’t work in IE? I don’t use IE and those that do probably don’t pick up on how things like that add to a design, anyway. I’ve done it before, I just don’t have the perfect combination right now. I’m tired of having to hack for IE when the solution is so simple everywhere else. For now (and unless mandatory), I think I’ll surrender to IE by simply ignoring its crudeness.

Deploying with Capistrano (trying to)

I want a better deployment method. Right now I’m uploading the files using an FTP client, which is a pain and unnecessary. I can’t stand dealing with the .online versions of those certain files. The past week or so I’ve been trying to setup Capistrano to help me out with deployment. Well, the core of Capistrano is within the deploy.rb file. That’s where you tell it your subversion repository, application name, roles, username, password, etc. Also, I have some code in there to go and grab the .online versions (environments.rb, routes.rb, database.yml, .htaccess) and replace the existing files on the server with those, just in case there are changes. I’m forgetful and it’s a much better solution (for me) to have all of this execute consistently.

The first thing to do is to install Capistrano. Once it’s installed, you modify your deploy.rb file as I mentioned above. Now it’s time to build the folder structure on the server. Running rake remote:exec ACTION=setup will created a releases folder (to hold the versions), a shared folder (files shared between multiple releases), and a current folder (a symlink to the most recent release). Within the deployment recipe, you define tasks to be performed upon deploying. Things like disable_web (puts up a maintenance page), upload_code (obvious), symlink (point to the current release), migrate (update any database changes), restart (restart fcgi processes), enable_web (remove the maintenance page), and so on. Once all that is done, run rake deploy or cap deploy (what’s the difference?) which will do the following:

  1. Checkout the latest revision of your application into the releases directory
  2. Update (or create) the current symlink so it points to the newest revision
  3. Invoke the restart task

All of that works find and dandy. Everything get’s posted properly, all .online files are updated (and the .online part is removed), the symlink points to the correct revision each time, and the shared log is updated to reflect a new revision. However, the entire reason I’m posting is in hopes that someone knows why the application is hanging after all of this. I know it’s hard to make guesses without actually seeing/writing the code yourself, but I’m running out of ideas and there may be standard things to look for. The application will just hang until Apache times out in the effort to start FastCGI (180 seconds I think?). It’s extremely frustrating because the Capistrano deployment is working fine in terms of connecting and putting everything where it needs to go. But apparently I’m missing something. It seems like it’s something in the environment (like when I had the wrong GEM_VERSION it did the same thing), but I’ve checked all I know to check. Does anyone have any guesses why this isn’t working??? Is there a better way to deploy than using Capistrano???

An impatient point-of-view

The on-line experience changes on a daily basis. The vast improvements of today’s web application’s (especially considering Ajax-based application’s) have brought great benefit to the user experience. However, I seem to have lost something in the transition: patience. Technology in general has put a spin on my level of patience on-line. My first internet experience came from a 66Mhz processor with minimal RAM and a 14.4 kbps dial-up modem (can you beat that one?). I remember thinking the ability to listen to music on the internet was awesome. I would wait over 20 minutes to download a 30 second clip of a song. That’s 20 minutes for 30 seconds. Now, if I can’t download a 40Mb file in a little over a minute, I’m not happy.

These days, even running Windows eats away at my patience. I can’t stand waiting on it to boot up (or shut down). It seems to take longer and longer every day. I hate being able to get to the GUI before it’s fully loaded. While it’s really a deceptive attempt by Microsoft to make you think Windows loads fast, some users still view it as an advantage, but it shouldn’t be. It’s not like you can do anything. You wait just as long, if not longer, to open a program or browser, only you get to look at your desktop background while it thinks. When I actually see the Windows interface, I should be done waiting. But that’s just me. I’m sure the Mac OS runs a lot smoother than Windows, which leaves me with more temptation to switch.

Making some needed improvements

As I stated in my previous post, I’ve been looking into some optimization options for my site. Things like page caching especially drew my attention, but then I realized something. If I step back to a design standpoint and think logically, I noticed a lot of unecessary things going on. Before I continue, I should mention I didn’t make any vast improvements on the slow API request issue, but I since converted my del.icio.us integration into a much easier solution: the rubilicious gem. It’s slightly faster and much cleaner. I tried going back to the flickr gem (since I’m running a frozen version of Rails now), but kept getting “Invalid API Key (Key has expired),” or something along those lines. Both of my developmental API keys for Flickr are, in fact, active. But it looks like I’m not the only one with this problem. Needless to say none of those solutions worked for me.

Back to what I was saying. Since the APIs bog down the site, are they really needed? Well, no, but that wasn’t an option. However, it isn’t needed on every page. I’d say some people read my posts in a feed reader. In that case, if they feel compelled to comment, they probably do a CTRL + click (or a mouse-wheel click) to open a new tab (assuming those who comment DO NOT use IE, which may or may not be accurate) and go directly to the entry. This is much faster for those people. I can see putting popular tags and categories in a common layout for convenience, but it boiled down to a design decision, and I simply didn’t want to. There’s a link to search available in the footer throughout, so that’s close enough.

Finally, I didn’t like the two column layout. So while I was motivated enough to make some adjustments to the code, as usual, I made some adjustments to the CSS. I like the open feel of an entry consuming a page. After all, aside from people like me, most visit sites to read/view content. That’s much easier to do when it’s the only thing drawing your attention. So, I’ve rolled out version 2 instead of starting over. It’s a little out of character, I know, but I’m proud of myself.

Optimizing rpheath.com

Lately I’ve been looking into optimizing my site a little bit. It’s annoying how slow it is. It’s all because of the two APIs. I’ve brushed up some of the database queries but you can barely tell, if at all. I’m aware that the APIs are causing the site to bog down a bit, so I’ve been looking into alternative ways to get the data. Currently, I’m creating the requests and parsing the data out manually, but other libraries and gems (such as flickr.rb) probably handle it better than I do. Also, I knew Typo comes pre-packaged with various API capabilities, so I downloaded the source to check it out. I noticed they have a delicious.rb file located under an “aggregations” folder in the models directory. What is the idea behind this? Is this something you install/setup? If so, what is the benefit of doing this? Also, I don’t know that Typo code is the most efficient interface to the del.icio.us API, but I’m sure it’s better than mine. I got this quote from the wiki: “Aggregations let you access attributes on an ActiveRecord object through sort of proxy objects.” I kind of get that, but it’s not clear-cut to me. I’ll be looking into it, but I thought I might get a response or two that may be a bit clearer. Any other thoughts on optimization (other than removing the APIs completely)? What about a form of caching? I’m unfamiliar with techniques to improve effeciency and speed.

Minimal progress so far today

Today is a terrible day to get things done. It wasn’t really the office, but a lot of distractions popped up today. Fortunately, I was still able to make decent progress, but I know I could have done more had I been in the mood. It all started when I woke up tired. Often I wake up tired (usually every morning), but after the shower I’m always good to go. I knew it wasn’t going to be a good day when I got out of the shower and still wanted to go back to bed. I haven’t had much sleep the last couple of days, but more importantly, I forgot to take my allergy pill last night. That always results in a rough morning. Plus, it’s now an hour or so after lunch and I’m going through the early afternoon lag. I don’t know about you, but after lunch I’m drained. I snap out of it quickly, but there’s always around a 30 minute period of unfocused blank stares aimed at the computer screen. Unless I go out to lunch, then getting some fresh air wakes me up a little. To top off my day, it’s Monday, and I have class from 6:00-8:30 pm on Monday evenings. That definitely doesn’t help. But I guess I could blame it on the allergy pill.

Guests for the Web 2.0 Show

Within the past year, I’ve become more open to podcasts. I used to think it was a step too far in the effort to spread information, but now I’m ok with it. It’s interesting to listen to people who are “web famous” talk about their experience and knowledge about a given topic. Things such as Flickr, del.icio.us, Newshutch (and other readers), Rails, CSS, Ajax, UI, web design, and so on, are all among some of the things discussed. Of course all podcasts aren’t technical, but that’s what I listen to. Specifically, I’m interested in the web technology genre of podcasts.

Of all my subscriptions, I think it’s fair to claim the Web 2.0 Show as the one I listen to the most. That’s not to say they are the best or anything, they just happen to be one of the first I’ve heard, so naturally, they get the most attention. In the case of podcasts, you really can’t judge the book by its cover. I’ve listened to shows have 50,000-70,000 listeners and wasn’t impressed at all. On the other hand, the Web 2.0 Show (two guys using skype) has just under 6,000 listeners, and seem to always get high quality, respectable guests. People from Microsoft and Google, who have built and/or managed remarkable products. And yes, they get the smaller players, too, which I think is good. I don’t know how they do it, but I’m glad they do. I don’t have a lot of time to listen to podcasts, really, but according to iTunes, I have 7.5 days worth to go through. I tried listening to a show a night before bed, but that quickly turned into me waking up with my iPod and headphones somewhere in the covers, with me having no recollection of the show. Anyway, of the 7.5 days of podcasts (41 subscriptions), the Web 2.0 Show is the only subscription where I’ve downloaded and listened to every show, and it’s all because of their guests.

Following the Ajax trail

At work, I’m helping to build a new application that utilizes ajax to the fullest. This is bar none the most ajax intensive application I’ve worked on. It’s awesome, though. I’m learning so much about Ruby and Rails. I knew I would if I were to do this stuff at work instead of trying to find the time between work, school, and hanging out with Amie. Anyway, this afternoon was the most severe case of ajax I’ve come across.

Sometimes it can be tricky to follow the variables and keep track of IDs and requests when you have multiple ajax calls without a page refresh. For instance, just today, I had to add the ability to post entries related to [a top secret something] and allow comments for those entries. Also, this is a multi-user application, so if the entry belongs to you, allow editing of the title and body, as well as your comments (if any) for that entry. Thankfully, Rails has tremendous support for ajax. This is all fairly straight forward, but the part I was having slight trouble with was if a user posted an entry, wanted to add a comment, edit the entry, add another comment, etc., all without refreshing the page (or upon return). Each time I came back from an ajax call, I had to keep track of the unique <div> IDs so the other ajax requests that were rendered in the previous response would still work and update the same locations as if it were a fresh visit. For instance, let’s say this happened without a page refresh: click to post a new entry (request 1), submit the entry (request 2), edit the entry body (request 3), view the comments (request 4), add a comment (request 5), edit the entry title (request 6), edit the comment (request 7), delete the comment (request 8), and finally, delete the entry (request 9). Essentially, that could happen. Even though it’s unlikely, it has to work just in case. It’s always those wacky situations that bite. So after tracing through the issues for a bit, it started coming together. I got it all worked out this afternoon (I still need some slight fixes on the comments) and it seems to be flawless so far. It always feels good to reach a good stopping point on a Friday, and it feels even better now that I have it commited in the repository :) Out of curiousity, what’s the craziest ajax trail you’ve had to follow?

Update: I fixed the comments tonight, and tested everything. It’s all working as planned. Sweet!

The form has no properties

Programming is a challenge. I understand that. Problems will arise no matter what environment you’re in or language you’re using. But I like it more when the challenge comes from something I don’t know how to do rather than something I’ve done hundreds of times, and today decides to not work. I know the application or program only knows what you tell it to do, but sometimes things get hard to troubleshoot.

What I’m trying to do is render a partial via ajax and submit the form via ajax. No big deal at all. I’ve done this so many times, but now I’m getting “the form has no properties.” I can’t seem to get the data out of the form, so it thinks there’s nothing to submit. I tried the ajax request within the form tag as well as an external link to submit the form and serialize the data based on the form ID. Neither one worked and I’ve done both methods in the past. This past week, actually. The odd thing is, the form will submit without the ajax. That doesn’t make sense to me. It’s the same code. The same code is executed whether it’s via ajax or not, but it only captures the parameters when the call is not asynchronous. It seems to me the point of failure should be when the form is rendered using ajax and was injected into the page, because in a sense, it’s not really there so it should fail on both attempts (post-back submit and ajax submit). I know it’s getting to the method because I rendered text to make sure. I’ll fix it eventually, and the problem will probably turn out to be ridiculous, but I think I need to leave it alone for now.

What is up with Dreamhost

Anymore, it takes a while to navigate through my site. And sometimes, it doesn’t even load. I don’t want to come off as one of those annoying customers who think the world revolves around them, because that isn’t the case at all. But I’ll admit, at times it does seem like Dreamhost will never get things cleaned up. I do constantly give them the benefit of the doubt, however. And I get annoyed when I read all the nasty comments on their blog and status site about how “they suck now” and “can’t keep site’s up for more than a day.” But at the same time, I don’t have a site that has a customer base or makes money in any way, shape, or form. I think I could see being irritated then, looking for someone to blame. After all, we are paying them for their services.

I’m sure they don’t want to have 500 negative comments on their site with people asking about other hosting companies and such. I don’t know, I get the impression like they work really hard to get things fixed. Maybe I’m wrong. It seems like ever since that major power outage and the network-wide router upgrade, they haven’t been the same. I’m not going to switch. I’m sure in due time they’ll get everything worked out. Don’t you think?

Becoming familiar with Subversion

I have finally taken the time to learn a little bit about Subversion – it is now a part of my development process. I’m getting into the habit of committing frequently—it’s the first thing I think of once I make decent progress. I don’t know what’s considered “frequent,” but I usually commit around 10 times a day. It’s easier to add meaningful comments when you commit often. It’s very comforting knowing I have a solid, working backup of what I’ve done so far. It’s like save points in a game, only for programming. At work we had to deal with a couple of conflicts, but Subversion handles them very well. The split display of the repository file and your local file works out nicely. Especially considering how it lets you copy the current change into your file and vice-versa. I don’t know if I’m doing this the most efficient way, but if a conflict does arise, here are the steps I take:

  1. Compare with repository
  2. Navigate through all changes, accepting the ones I want
  3. Save the changes and mark the conflict as resolved
  4. Update my files (because it still doesn’t let me commit right away)
  5. Commit my changes

It’s a fairly simple process. Before, I was forced to use SourceSafe (at work) which had mandatory file locking, so I was skeptical as to how it would be without it. But Chris was right, it does seem to be a rare occurrence that two people are working in the same methods at the same time. The only reason it does happen to us is because we have a guy working on the same project about 40 miles away, and we aren’t always on track with one another. But I think we have that straightened out now.

Another thing I find to be really, really impressive is migrations. It’s amazingly easy to keep up with database changes throughout the life of a project. The migration files are incredibly easy to write, but even better yet, getting the changes someone else has made is even easier. Two commands: svn update and rake migrate. That’s it. At this point, I can’t think of (nor do I know of) any other way that is more convenient than that. Rails generates the SQL code for you, so I’m assuming you can use your migration files on any type of database you want (MySQL, SQLServer, Oracle, etc.) to completely generate (and keep-up with) your schema. It just amazes me.

Can Photoshop do this?

I use Photoshop all the time. I love it more than any other image editing/design tool I’m aware of. But something that I’ve always wanted to do, is to specify the block size of a (squared) selection. Often I have a header image or something, and I want a portion of it, say “100px x 75px”, and I always zoom in closely and carefully select the block I want. Sometimes, when I design something, it goes down to the pixel. If my selection is slightly off, a person with a sharp eye would pick up on it. Plus, like any careful designer, I could never live with the fact that it was a pixel off. It would be much more convenient to just specify a squared selection size, then drag the square around the portion that I want, and copy merged. As many things as Photoshop can do, I would be shocked if you coudln’t specify the size of a squared selection. Do you have any thoughts/answers to this? Or is there an alternative solution in another program?

Too busy to post

Most of my posting is done while at work. Sometimes, if it’s a longer post, I’ll throw it in a Writeboard and finish it up later. Even so, I end up posting it at work. Lately, I’ve been so swamped with tasks, I feel as if I don’t have the time to post. It’s not a bad thing, though. This may strike you as strange, but I usually don’t even eat my lunch at noon anymore. Sometimes it’s not until 1:30 or 2:00 pm. I feel like there is just too much going on and I’m never at a solid stopping point. I don’t know if it’s me or what, but I cannot stop in the middle of something. If it takes me an extra two hours, so be it. Anyway, maybe if I had the no admin interface like some people we know I would be more inclined to post—it would be much less effort. I’ve spent more time on the admin side of this site than ever before, but it’s still a login protected area usually requiring a visit to at least two (or three) pages after the login. Oh well, we can’t all have those clever ideas ;) We just have to be inspired and move on.

Loving what you do

I haven’t read the feeds in my reader since last Wednesday; that’s unusual for me. It’s almost as if my work is now distracting me from my distractions, if that makes any sense. Don’t get me wrong, I think that’s a good thing. Infact, I think it’s a great thing. It’s nice to enjoy work again. The time goes by much faster, but that’s probably because I’m no longer staring at the clock.

It’s so important to love what you do. In life, that is probably most important, really. From the moment college is over you’re out in the work force where you’ll be for the next 40 years. That is a tremendous amount of time, so hopefully your time is spent wisely. The whole point of college is to learn about something you’re interested in so you can get a good job and have more opportunities to do what you love. My high school didn’t offer much programming, so I was never introduced to it until college. Needless to say, I liked it. Mixing that with the art of design, and I now know what I love to do. But (this is a huge but), I think creative control and small teams are a must if I’m going to continue to like web development. Right now, I’m young and I know I could afford to gain a little experience. That’s why I don’t really mind going to Lockheed Martin—who I’m sure is totally against creative control and small teams. They might not necessarily be against it, but they are far more formal in their process. And for that type of work, I’m sure they have to be. But, overall I’m a young programmer; I might benefit from learning the Java language. Plus, from a web development standpoint, I believe Jakarta Struts is an MVC framework? It might be good for me to work with another framework to experience something else.

Anyway, I never realized how important it is to love your work until I didn’t. My days quickly turned into “required tasks” rather than a place I go for 8-10 hours and do some cool stuff. I dreaded waking up more and more because I knew it was going to be many hours before I could come home. For the next 40 years I hope to get paid doing what I love. After seeing the other side, I don’t know that I could handle anything else.

The site is now RedCloth enabled

The other day, Chris inspired me to just go ahead and get Textile working. I wanted to do it from the beginning, but I guess I thought I would get it up and running first, then add a few extra things I wanted. But… no excuses. So, I finally did it. After I read his comments about subversion and textile, I opened everything up and started on it. It’s ridiculous I waited until now, because it only took me 20 minutes to get textile working on the admin side and the comments. I knew how nice it was from Writeboard, but I might get the most benefit from it on my site. It’s so much easier to post, and since I sometimes post while at work, I need to be quick about it. Plus, there’s something really annoying about typing actual html tags in a post. My next step is getting all of this code into a svn repository, and I think that’s fairly simple as well.

2008 by Ryan Heath | Get In Touch

flickr

DesolateInfinityLooking upDazedBlurred