Life after a week of Cablevision/Optimum Online

After living with 384 Kbps SDSL for the past eight years, first with NorthPoint until they went out of business (1999–2001), then with Eclipse Internet Access (2001–2003) who was acquired by NetCarrier in early 2001, then to DSL.net who I’m still with today. Each time, I’ve been stuck with only 384 Kbps SDSL because every time we’ve moved, we’ve picked locations that are close to the end of the DSL physical limit–roughly 10,000-15,000 ft. from the telco.

The last time we moved back in 2001, I tried ordering Cablevision/Optimum Online. They gave me an install window of “sometime between 8 AM and 2 PM” which was pretty ridiculous, but whatever. By 1:30 PM, when no one showed up, we called to get a status update. We were told that they would contact the technician and get back to us within 30 minutes. At 2:00 PM, we hadn’t heard back so we called again to be told that they were on their way. By 3:00 PM, we had enough waiting and had other things to do that day, so we called back and cancelled the installation order. We left the house and did what we needed to do and came back around 4:00 PM. At 4:30 PM, the installer rolls up and I met him outside to ask, “Didn’t anyone tell you the install order was cancelled over an hour and a half ago? You realize our install was scheduled for before 2 PM.” He shook his head “no,” and I sent him away. The guy showed up in a pickup truck without a ladder or a bucket truck, which was necessary for our install anyway–how was he even going to complete the install even if he did arrive on time? We subsequently ordered DirecTV satellite for our TV service and I ordered the SDSL, and that was that.

So, we put up with our slow SDSL for so long because it has been really stable–I’d say close to 99.99% uptime or less than one hour of downtime per year! It was also business-level service with static IPs and I could host my own servers off the link as part of the agreement. Other than the speed, I was and still am very happy with the service. But, it would be nice to get more bandwidth, so I reconsidered doing cable broadband. Things couldn’t be as bad as they were 8 years ago, could they?

Fast-forward to last week, January 16th, to our Cablevision install date. I ordered Optimum Online for business with Boost and Static IP. The install window this time was “sometime between 11 AM and 2 PM.” Again, at 1:30 PM, there was no installer in sight, so I called to ask for status. I was called back and told that he was running late. He finally showed up close to 3:00 PM, but at least he had come with a ladder to get up the pole and do the outside wiring required. Around 5:30 PM, he’d completed the installation and everything was up and running. Not the greatest experience, but this time I at least had low enough expectations that unless they didn’t show up at all on the day of the install date, I wasn’t too bothered.

Over the next few days, I’d cut over DNS and mail and web over to the new static IP range I was assigned. After two days, the old DSL link went quiet indicating all changes had propagated. I’d set up bandwidth accounting to get an idea of how well the new cable link was doing. Here’s a snapshot of the graph from a recent time period:

rrd graph of 30Mbps/5Mbps Optimum Online link, from 2008-01-21
(click to enlarge)

The link is advertised as being close to 30 Mbps down and 5 Mbps up, and as you can see, the max the link saw over the past 12 hours in that graph was 24 Mbps down and 1.23 Mbps up–fantastic throughput, for sure. My laptop, connected to my network via wireless 802.11g at 54 Mbps, seems to get 5.0 Mbps down and 4.6 Mbps up using Cablevision’s SpeedCheck. Those numbers are a bit misleading as they only reflect speeds over your cable modem into their network–speed tests to sites on the open Internet come out noticably lower, probably due to Cablevision’s peering speeds or some other rate limiting or traffic shaping they have in place, would be my guess. Still, this is a far cry better than the 384 Kbps SDSL, right?

One thing I noticed about cable is the incredible amount of ARP chatter that comes down the pipe. My guess is there isn’t enough to materially affect the amount of available remaining bandwidth, but it’s interesting to see that kind of leakage. Another thing is the latency: on the SDSL link, latency was almost always ~20 ms, whereas on the cable link it fluctuates between ~20ms to as high as ~80 ms at times. While this probably isn’t noticed by your typical customer, I wonder how much jitter it causes on realtime applications such as VoIP or interactive SSH sessions. I guess I’ll just have to see.

All in all, I’m happy with the new cable link and will likely be shutting down the SDSL or keeping it as a backup if DSL.net will make me a great deal as it’s quite costly (around $130/month). Relying completely on the cable link makes me extremely uncomfortable, but the cost saving and additional bandwidth certainly makes it attractive. We’ll see how reliable this link over the next few months, as I’ve got the link monitored and bandwidth accounting set up, etc.

Tags: , ,

Today’s geek news: Sun acquires MySQL AB

Sun + MySQL = ???

After yesterday’s yawner of a Macworld Expo, I wasn’t really expecting today to yield much interesting news. Of course, I wake up to the news that Sun acquired MySQL! Both Jonathan Schwartz and Kaj Arnö share with us some of the best-laid plans of mice and men.

My first reaction was most definitely “WTF?!?” After the initial shock subsided, I wondered if it was April already. Checking my calendar, I realized it wasn’t. Ah, maybe I’m still sleeping and this is just a really lucid dream? Nope. Okay, so how do I get from “denial” to “acceptance” as quickly as possible?

Sure, the next phase set in quick: anger. How dare they do this? First, Sun gives up the legacy of their SUNW ticker symbol in exchange for JAVA. Now they’re going after my beloved MySQL database? Please don’t tell me the next press release to come out is the announcement of a renamed MySQL into some craptastic “Sun Enterprise Data Management Suite,” codenamed “Monkeybutter.”

Fine, I’m being completely irrational, I know it. Things can’t get that bad, that quickly, right? I mean, if we’re all supportive and positive, things will just keep getting better for both Sun and MySQL, right? I mean, Sun infusing more money into MySQL will inevitably make it a better product, right? Just let some good come out of this situation, please?

Oh, what’s the use? Companies are struggling so hard to find MySQL talent, and it’s allegedly “the world’s most popular open source database” according to MySQL itself. Sun bet the farm on Java and subsequently we’ve watched the company fall into the pit of irrelevancy. Who really cares what happens to either of these companies any more?

You know who? I do. I love Sun hardware and I love using MySQL databases. If there’s some benefit to be had here, I’m sure Jonathan Schwartz will find it and exploit it to the benefit of his customers. In any business, if I had to bet on someone, I’ll always pick the guy with the pony-tail and T-shirt to win. If you’ve ever seen me in person, you’ll know exactly why. :-)

Reproducible crash bug in FeedDemon 2.6

Well, that didn’t take long. I have a reproducible crash bug in FeedDemon 2.6, already–what was that, in my first 10 minutes of use?

Reproducible FeedDemon crash bug screenshot

I simply go to a folder that has more than 10 items in it, thus having more than one “page” in the newspaper view. I read some items, hit Ctrl-D to go to the next page, then Ctrl-M to mark the items as read, then I get the error popup you see in the screenshot above. I’ve restarted FeedDemon several times and each time I can reproduce the crash with the same exact steps.

Of course, the customary advice of “well, don’t do that, then” isn’t very useful here, as this is exactly the kind of reading workflow I prefer. It’s going to be hard to make it through the week-long trial …

I hope FeedDemon 2.6.1 isn’t too far away from being released. And, I hope it includes a fix for this crash bug.

Tags:

How much traffic did Twitter Karma get me?

Since announcing Twitter Karma on December 29th, it became popular pretty quickly in the Twitter community. I watched the traffic come in from various sources and being interested in this sort of thing, I wanted to know exactly what kind of impact it had on my overall traffic.

Using Google Analytics and Site Meter, I’m able to keep an eye on my traffic and get some useful metrics about it. Lets start with a graph of the past 7 days worth of visits (yellow) and page views (orange) from Site Meter:

SiteMeter visits and page views, 2008-01-09

What’s immediately interesting to me about this graph is that, previously, my weekend traffic was usually lower than my weekday traffic. However, the Twitter Karma traffic peaked on the weekend, which surprised me.

To get an idea of the number of users it brought me, I looked to Google Analytics. Here’s the Absolute Unique Visitors data for 2007-12-28 through 2008-01-08:

5,540 Absolute Unique Visitors

Friday, December 28, 2007 2.73% (164)
Saturday, December 29, 2007 3.36% (202)
Sunday, December 30, 2007 2.36% (142)
Monday, December 31, 2007 5.72% (344)
Tuesday, January 1, 2008 4.66% (280)
Wednesday, January 2, 2008 6.92% (416)
Thursday, January 3, 2008 11.84% (712)
Friday, January 4, 2008 9.68% (582)
Saturday, January 5, 2008 21.75% (1,308)
Sunday, January 6, 2008 16.58% (997)
Monday, January 7, 2008 9.06% (545)
Tuesday, January 8, 2008 5.35% (322)

To separate out my regular blog traffic, I pulled the Top Content report for the same timeframe:

291 URLs were viewed a total of 10,159 times

Page Title Pageviews Unique Pageviews Time on Page
Your Twitter Karma 5,653 4,494 00:03:13

So, of those 5,540 visitors, 4,494 of them went to the Twitter Karma page, or close to 81%.

To be honest, ~4,500 visitors isn’t a big number at all. What makes me really curious is finding out how many “active” users the Twitter service has. What percentage of that total does 4,500 users represent over that time period? Less than 1%? 5%? 10%? 50%?

I’m sure the Twitter guys aren’t going to open their kimonos that wide and share that kind of information with us, but I wonder if there’s any way to collect that information anyway. I guess I could sample the public timeline every few seconds for a few weeks, then compute the uniques and update frequency to come up with an estimate. This won’t take into account those who have their updates protected, but I’m willing to bet fewer than 20% of Twitter’s active users have done that.

Still, this was a fun application to hack together and it seems to be well-received amongst the Twitter community, so I’m really happy with it. I hope someone can come up with another great tiny app. idea for Twitter that I can hack on, next.

Tags: , ,

Hackfest: Facebook List of the Day profile box implementation

The weekly Hackfest took a bit of a break due to the winter holiday and resumed this past Monday. The goal for this session was to turn the visual design created last time into actual FBML that would render inside a profile box.

The first step was to create the database schema, which was mostly outlined in the design document. I went ahead and created actual DDL scripts for MySQL based on what was described in the design doc. I’m expecting these to change as development progresses, but this represents the minimum required to implement our current visual design.

The general approach for the profile box implementation is to use profile.setFBML to set the FBML of the profile box to simply “<fb:ref handle="profile_box"/>“. We want to do this because every day when the profile box needs to be updated for every single Facebook user who has added our application, we don’t want to have to invoke profile.setFBML with the newest information–that just won’t scale well. Having the profile box simply contain an <fb:ref> means we can effectively update everyone’s profile box with a single call to fbml.setRefHandle, once per day.

I’ve also created a SQL script that can be used to populate the MySQL database with sample data for testing. The only MySQL-specific part of it is the use of “CREATE TABLE ... LIKE ...” which allows us to use the submission_template and votes_template tables to create our individual instances of those tables for each list_id, rather than embedding the DDL for each of those in our code itself.

After all this, here’s a screenshot of the profile box off my own Facebook profile page, pulling the sample data out of the database and rendering it via FBML:

Facebook List of the Day app. screenshot, 2008-01-08

The rating widgets–the “thumbs up” and “x” icons–don’t actually work yet, but that’s going to be next week’s challenge, getting the Facebook “mock AJAX” working.

Tags: , , ,

How to “switch accounts” in Twitter Karma

@Debra_Hamel asks,

“Is there some way to ask TwitterKarma to look at a second account once you’ve input the details for one account?”

The simplest answer is to close your browser completely, and the next time Twitter Karma tries to access Twitter, it will prompt you to re-authenticate. Of course, that’s no fun–I’d hate to close my browser and lose all my tabs, so I looked for another way.

In the Twitter API, there’s a “verify_credentials” method that, coincidentally, seems to change the effective user of the browser session if authentication is successful. You would invoke it by navigating to an URL like this:

http://USERNAME:PASSWORD@twitter.com/account/verify_credentials

Replace the USERNAME and PASSWORD with your Twitter.com account information. You should get a plain page back that just says “Authorized.” After that, reload the Twitter Karma page and click the “Whack!” button again. It should now load your friends and followers for the other account.

Tags: ,

Need help managing your Twitter Karma?

So, I finally let the cat out of the bag a few minutes ago and announced Twitter Karma publically.

Twitter Karma screenshot from 2007-12-19

So, what is it? The other day, @StephAgresta said, “Twitter desperately needs page navigation on followers / following list. Also sort functionality by type (reciprocated or not) is a must.” I suggested a simple mashup that implements this and started hacking on it. Three days later, it has enough functionality that Stephanie said she thinks I should release it publically.

Basically, it’s a Flash application that fetches your friends and followers from Twitter when you click the “Whack!” button, then displays them for you, letting you quickly paginate through them. By default, the list contains all your friends and followers and is sorted by last update, showing those who most recently updated first. You can sort the list alphabetically either ascending or descending by Twitter ID. You can filter the list in several ways: only friends or only followers, all friends or all followers, and mutual friends.

It’s not meant to be a full Twitter client–there’s plenty of those already and that’s not a particularly interesting or challenging problem to solve, anyway. I’ll be adding a few more features to Twitter Karma soon, though. If you think you have a must-have feature idea, go ahead and let me know about it in the comments.

Tags: ,

Hackfest: Facebook List of the Day visual design

Last week, I announced that our weekly Hackfest would be working on a Facebook application. We decided to make it an open source application hosted on Google Code, which you can access here: http://code.google.com/p/fblotd. It is licensed under the new BSD License.

In week two of our weekly Hackfest, Glenn and I worked on the visual design for the profile box of our application. We agreed that it would be the area where we anticipate most of our users to interact with the application, so it needed to be focused on first.

The design intends to remain consistent with the look and feel of Facebook’s own applications, to reduce any confusion as to how our app. functions, as well as not disrupting the design of a user’s profile page. Here’s a screenshot of the first draft of the visual design:

Facebook List of the Day visual design

I know I promised a write-up of the overall concept of the application in my previous blog entry, which I never got around to. However, I’m hoping that the visual design communicates the intent of the concept enough that people who see it will just “get it”–otherwise, it won’t be as effective of an application if it needs explanation before users can understand it.

In a nutshell, users are encouraged to complete the sentence that makes up the “List of the Day” as well as vote for submissions by others. The next day, we’ll display yesterday’s list and the top five submissions as voted by the users, followed by the current day’s new list.

We know that there are plenty of directions we could take this concept but for the initial release, we’re keeping the scope small so we can get it done quickly–especially since the Hackfest only meets once a week for two or three hours at a time.

Next week, I hope we can actually implement the code that implements the profile box. Then, we may open up the application so everyone can start adding it to their profile and help us test it!

If you’d like to participate in the development of this app., join the Hackfest and come hack with us! We meet every Monday at the Panera Bread in Paramus, NJ. Once you’ve joined, you can RSVP for the next meetup so we’ll know you’re coming.

If you have any questions about the app., feel free to ask them in the comments below.

Tags: , , ,

I’m officially a Taproot Foundation volunteer

Taproot Foundation logo

After hearing about the Taproot Foundation from Jennifer, who came to the November MySQL Meetup and told me about it, I decided to complete a profile as a volunteer. Shortly after, someone contacted me and we had a brief chat and scheduled me for their December 11th orientation at the Time-Life Building in NYC, which was this past Tuesday.

In a nutshell, the Taproot Foundation is nonprofit organization that awards service grants for other nonprofits’ projects, to be performed by volunteers, for free.

Attending the orientation and completing the volunteer agreement form was the last step before I could be selected by an account director to work on a service grant (project). Now, I’m just waiting to hear from someone who wants me on their team.

Why am I signing up to volunteer my time for free? Especially after my recent financial stumble just a few weeks ago? How can I possibly have time to volunteer when I should be trying to squeeze every billable hour out of my non-sleeping time?

I like to say, “The best gifts are the ones you cannot wrap.” I’ve always enjoyed giving of my time and talents where they are wanted. As a teenager, I worked as a volunteer at a local hospital, as well as at a homeless shelter. As an adult, I’ve been playing guitar for the Sunday school children at church, as well as singing in the church choir, and I plan to participate in the Sierra Bravo’s F1 Overnight Website Challenge in March 2008. Volunteering through the Taproot Foundation is the kind of thing that really suits me.

I’ll write more about my experiences volunteering for Taproot once I’m on a service grant. Until then, if you want to ask me questions, feel free to leave a comment below. Or, perhaps you want to sign up as a volunteer yourself!

Tags: ,

Hackfest: Getting started on a Facebook app

Last week, Mike G. reminded us that we don’t do a lot of hacking at our weekly Hackfest, which is something I also wasn’t happy about. We did some brainstorming and decided to try writing a Facebook app.

So, last night, Glenn Martin and I sat down and started working on it. We started out trying to use Glenn’s hosting provider, but it choked on Facebook’s POST requests with a HTTP 405 error, not liking the HTTP verb. After a few minutes of fiddling around in the web-based control panel and having no luck, we decided to punt and use my Dreamhost setup.

After changing the Facebook app. settings, we were able to get our “hello world” FBML to render in Facebook. The Facebook API PHP5 code worked as expected and I was able to set the FBML in my Profile Box, as you can see in the screenshot below:

Facebook List of the Day app screenshot, 2007-12-11

It’s nothing special yet, but it’s a start and is finally something we can actually start hacking on at the Hackfest.

Next week, I hope we can all get the basics of our app. functionality working. Between now and then, I’ll try to elaborate more on the concept behind the application so people will understand what it’s supposed to do.

Tags: , , ,