That's Comcastic! · 61 days ago
I recently ordered a TiVo HD from Woot, in order to replace the absolutely horrifically bad Motorola HD DVR that was provided to me by Comcast, the world’s leader in being terrible at everything. I have been extremely excited about getting the new TiVo HD set up, and after placing the order, my first task was to call Comcast to order my CableCards.
On my first attempt calling Comcast, I politely explained that I would like to get a single Multi-Stream CableCard to install in my new TiVo HD. The representative on the other end of the line said “we don’t support TiVo.” Understanding that the person on the other end of the line was not actually a human being, but a tech support monkey, I politely asked for her supervisor. The supervisor was nice enough, and told me that I could pick up a CableCard at my local office and that I didn’t need to do anything until the TiVo HD arrived. Comcastic!
The next day, on a sneaking suspicion that the supervisor had their head up their posterior, I initiated a chat with Comcast’s technical support team through their website. This time, the technical support engineer not only knew what a CableCard was, they explained that I would need to place an order for one, which they walked me through. “You’ll be able to pick it up at your local Comcast office when your TiVo arrives.” I felt reassured, and later that day, I received shipping confirmation for my TiVo HD from FedEx. I was on my way! Comcastic!
The next morning, I received a call from my local Comcast office. They explained to me that I could not, in fact, pick up the CableCard. They would have to send out an engineer. Okay, fine, I said. Anything to get rid of this terrible Motorola DVR. The appointment was made, and I was told to be home on Friday from 2:00 PM until 5:00 PM, when a technician would arrive and install a single Multi-Stream CableCard. Thankfully, I work from home, so this would not be a problem for me.
Thursday night, I hooked my TiVo HD up to my TV, disconnecting the old Motorola DVR, and went through the guided setup, which was straightforward and pleasant. In the process, I spent 3 minutes on the phone with TiVo, who activated my service quickly and efficiently. All I needed now were the CableCards from Comcast.
Friday morning came. Then Friday afternoon came. Around 3:00 PM, square in the middle of my “window” for service, the phone rings. Its Comcast. They wanted to confirm with me that I’d be getting two new cable outlets installed in my home today. Huh? What?! That can’t be right…. I explain to the representative that is not what I have asked for, and she assures me that she’s put a note on the account, and that I should expect the technician to arrive within the scheduled time.
Its 4:59 PM. Comcast still isn’t here. I pick up my phone and call Comcast. The representative says that she’ll send a note “to dispatch” and see what’s up. “It will probably take about an hour or two for them to respond.” But, we had a window. A three hour window! Knowing that there was nothing else that could be done, I waited.
5:34 PM. A Comcast truck pulls up in front of my house, and a technician gets out of the car with two Single-Stream CableCards in his hand. Okay, so its not exactly what I asked for, but it’ll have to do.
6:28 PM. The CableCards are in my TiVo HD, and after no less than 14 phone calls to Comcast, most of which were spent on hold, or being transferred to someone who knew what a CableCard was, my TiVo HD seems to be receiving its channels through the CableCard.
6:29 PM. We realize that in the process of installing the CableCards, the technician has managed to remove my cable modem from my account, and I am now without internet. The technician explains that this is not his problem, and that he wants to leave. I firmly ensure that he stays with a glare that would put fear in the heart of the devil himself.
6:54 PM. Internet has been restored. The TiVo HD seems to work. I tell the technician to leave.
Comcastic!
As a short aside, anyone who thinks that Apple is going to get into the DVR game is insane. If they were uncomfortable with the cell phone industry, what do you think they’ll think of the mess that is cable television?
Comment [1]
Proud and Inspired · 62 days ago
Last year, I made the difficult decision to change my career path and start working with some very talented family members on a new endeavor – ShootQ, a studio management application for photographers. Its been a pleasure to work on a product for people who are always searching for ways that they can help change the world through their art form.
Today, I am immensely proud to be a part of ShootQ, as we announce the ShootQ Grant, which will help a project that raises public awareness about an important social, environmental or economic issue through a $10,000 award. From the website:
ShootQ’s goal is to provide tools for photographers which free them from the tedious work of running a business. With ShootQ Grant, our mission is to empower photographers to invest time working on projects that raise awareness about important issues. More than a monetary award, the ShootQ Grant will provide photographers the opportunity to work on a meaningful project, unencumbered by daily work, with the creative freedom and financial support necessary to produce photographs that raise public awareness about important social, environmental or economic issues.
In my previous work experience, the measure of success has been sales, stock price, and accomplishments. I am proud to be a part of a business that isn’t solely about helping ourselves succeed, but is also about helping others to succeed. Not only that, we’re all committed to helping spread important messages, and have a positive impact not only on our industry, but on our world.
And for those of you waiting to see what I’ve been working on for the past few months, I promise you that your patience will be rewarded. I am extremely happy with the progress that we’re making, and can’t wait to share more. Stay tuned!
Magic 8 Ball Spam Filter: Outlook Not So Good · 84 days ago
For years, I have been able to keep my personal email address virtually spam-free by never putting it in any public place, entering it into any forms, or sharing it with anyone I didn't actually want to talk to. For me, this has been blissful. Generally, when I receive email, its actual communication with a person I genuinely want to talk to, and I enjoy reading email.
A few years ago, my email bliss ended abruptly.
Spam? You May Rely on It
At my previous employer, I was forced to use Microsoft Outlook for my work-related email. From day one, I received hundreds of spam messages a day at my work email account. The Exchange server died routinely, leaving me without access to important communication. When I sent email, sometimes it just wouldn't be delivered, silently failing.
One day, in a moment of weakness, wanting to send a link home to myself so I could remember to read it later, I opened Outlook, pasted the link into a new message, and emailed it to my personal email address. The moment I pressed "Send", I knew I had made a mistake. But there was no going back. It was too late. My email address now lived in the Exchange Server.
The next day, spam started trickling in. A few days later, the trickling turned into gushing. As of last week, I was receiving 50 or 60 emails in my inbox a day that Spamassassin wasn't catching. My bliss had ended, and the era of spam had begun.
That is, until yesterday.
Outlook Not So Good
In a bout of frustration, I started looking at the headers of all the spam that was getting through my server-side filter to see what the spam scores were. Many of them were "close" to being marked as spam, but even more of them passed completely through. One thing I immediately noticed, though, was that all of the emails he had a specific header, with the same value, every time. Last night, I added the following rule to my procmail configuration, out of curiousity:
:0: * ^X-Mailer:.*Microsoft.* $DEFAULT/.Spam.Outlook/
This morning, my inbox had three new emails from friends, family, or acquaintances. My "Outlook Spam" folder had 87 new messages, all of which were spam. For the first time in over a year and a half, I had no spam slip through the cracks.
I am sure some of you will point out, now any email that I receive from people who use Outlook will end up being flagged as spam. Fair enough, but do I actually want to talk to those people? My magic 8 ball says: "Very doubtful."
Saved by Outlook. Sweet, sweet irony. Good riddance, spam.
Comment [7]
I'm Putting Hillary on Notice · 91 days ago

Special thanks to The Bureau of Communication for the requisite form.
Comment [1]
An Election of Extraordinary Importance · 96 days ago
Over the years, I have struggled to condense my thoughts, beliefs, and feelings into a strong political point of view. This is an odd feeling for me, as most people who know me will attest – developing strong opinions isn't typically a problem for me. As a result of my inability to find my political self, I have voted for candidates from the Republican, Democratic, and Libertarian parties in previous elections, and have never felt particularly moved by any of the men or women that I have helped to place in elected office.
In the years since September 11th, the political climate has changed drastically, bringing many ideas and feelings to the surface for me. I was in Hiroshima, Japan the day that the war in Iraq began, visiting the peace park and museum. I was able to see the consequences of our aggression, and take in the global reaction to our decision to go to war. I have never been the same. America used to be thought of as a great nation – a beacon of hope in the world. Now, we are a symbol of aggression, ignorance, and hubris.
I still believe that we live in a great nation. A nation of opportunity, hope, acceptance, and ideals. I want to be able to be proud of this country again. Today, I spent twenty minutes watching a video made by Lawrence Lessig, detailing his reasoning for choosing Barack Obama as his candidate of choice in the upcoming presidential elections. Lessig's thoughts on Barack Obama mirror my own, and provide a compelling argument as to why Barack Obama could be the most important figure in American politics in decades.
With all my heart, I encourage those of you who are on the fence about who is right for our country to take twenty minutes to watch Lessig's video:
Its time for a change – a new kind of politics – and the only candidate who understands that is Barack Obama.
Comment [1]
Using Elixir with Pylons · 128 days ago
Ben Bangert mentioned to me today that there wasn't any quick guide out there on how to use Elixir with Pylons. What follows should fit that bill nicely, but please note that it applies to the current development version of Pylons, not the 0.9.7 release.Getting Started
The best starting point is to use the standardpaster create -t pylons command to get a project going. You'll be asked a short series of questions, including whether or not you want SQLAlchemy support to be generated. Say, "Yes" to this question, as it offers a decent starting point to work with. We'll tweak a few things in the template to get you rolling as quickly as possible.
Updating the Project
Your project should have amodel/ directory, which will include an __init__.py and a meta.py. Go ahead and delete the meta.py file, as we won't be needing it. Now, in the __init__.py, place the following code:
from sqlalchemy.orm import scoped_session, sessionmaker import elixir # replace the elixir session with our own Session = scoped_session(sessionmaker(autoflush=True, transactional=True)) elixir.session = Session elixir.options_defaults.update({ 'shortnames': True }) # use the elixir metadata metadata = elixir.metadata # this will be called in config/environment.py def init_model(engine): metadata.bind = engine # import your entities, and set them up from entities import * elixir.setup_all()
Excellent, now you can begin adding some entities. Create yourself an
entities.py underneath model/, and define your entities in there. Note that these will be imported into your project's model namespace by the last part of the __init__.py we set up above.
Wrapping it Up
Finally, in your project'slib/base.py you'll want to make sure that you clean up the Session following each request. You can do this easily, like so:
from pylons.controllers import WSGIController from myproject.model import Session class BaseController(WSGIController): def __call__(self, environ, start_response): """Invoke the Controller""" # WSGIController.__call__ dispatches to the Controller method # the request is routed to. This routing information is # available in environ['pylons.routes_dict'] try: return WSGIController.__call__(self, environ, start_response) finally: Session.remove()
Thats it! You can now use your Elixir model objects in your Pylons project.
Comment [3]
I Choo-Choo-Choose TurboGears · 149 days ago
First of all, I’d like to apologize in advance for the terrible Simpsons reference in the title of this post, but boy, I just couldn’t resist. On to the post…
For the second time in one day, I have been inspired by Adam Gomaa to blog, but this time, its about Python web frameworks. Adam makes an interesting argument for Django in a fairly far-reaching article. One of his main points is that other web frameworks force the user to make too many decisions, where Django makes all of those decisions for you in a very opinionated way.
I understand Adam’s point, and I think its a solid argument. At this stage in the game, Django certainly provides the best “hit-the-ground-running” (HTGR) experience of any web framework out there, for any language. Of course, thats just the situation today, and hitting the ground running isn’t the only factor to consider when choosing a web framework.
Right now, I see three major frameworks out there for web development in the Python world: Django, TurboGears, and Pylons. Django and TurboGears both make an attempt to reduce the number of decisions you need to make by providing sane defaults, whereas Pylons tries to be as flexible as possible, leaving many choices to the user.
Don’t Make Me Think
Django’s approach results in something that is easy to use, with very few decisions for the programmer to have to make. But its major problem is that everything is home grown, and if you end up running into limitations with the framework, there’s no “eject button” to allow you to switch out components easily. Don’t get me wrong, I think Django is a fantastic web framework, and I have used it several times with great success. You certainly could do worse than choosing Django for your next project. But, the thing that truly irks me with Django is its lack of WSGI at the core. Sure, it has support for WSGI, but it feels bolted on, and isn’t a major aspect of its design or implementation as far as I can tell. Over the next few years, I think we’re going to be seeing a huge push for WSGI in the Python world, with a ton of reusable parts that use WSGI as the glue.
Choices, Choices, Everywhere
Now, Pylons, on the other hand, forces you to make a ton of decisions, right off the bat. This makes the barrier of entry very high, but prevents you from running into a situation where you can’t escape the decisions of the framework authors. Pylons also has WSGI at its very core, and will be able to take maximum advantage of reusable WSGI parts. Of course, its HTGR experience is pretty terrible in comparison to Django. Once you install Pylons and quickstart a project, its almost immediately time to start making decisions. Of course, you won’t find a more flexible framework out there than Pylons, which provides you with extreme power. As a result, Pylons tends to be used by people who are fed up with allowing other people to make decisions for them, and like the benefits of its WSGI-everywhere approach. Beginners however, tend to be scared off by the bevy of decisions and the poor HTGR experience.
A Balanced Approach
TurboGears has the most balanced attack, taking the approach of providing sane defaults, but offering you the option to escape those defaults if you need to. TurboGears 1.0 has somewhat stagnated, however, and you’re stuck with some pretty stale defaults with CherryPy, SQLObject, and Kid all having better alternatives available. TurboGears 1.1 will be out soon, and will address the situation by providing better defaults for templating and ORM, but still leaving CherryPy at the center. But, TurboGears 2.0 will be building on top of Pylons, and switching out all of the defaults to Paste, SQLAlchemy, and Genshi, with the option of running your application with any ORM, templating engine, and behind any WSGI server. To me, this is the best of both worlds. By providing you with the best-of-breed defaults, the HTGR experience should be excellent, but by using Pylons and its flexibility as the foundation, the eject button is always available, and you can always decide to sidestep the decisions of the framework authors if you need to.
I actually view TurboGears and Pylons as being very similar to SQLAlchemy and Elixir. SQLAlchemy, like Pylons, tries to handle every possible situation with as much flexibility as possible. Elixir and TurboGears both make some decisions for you, but build on top of extremely flexible foundations, so that you can always drop down to a lower level if needed.
One thing is certain though: we’re in the middle of a great stage in the lifecycle of Python on the web. Pylons, Django, and TurboGears are all fantastic frameworks, and you can’t go wrong with any of them.
Comment [25]
Adam Gomaa on Elixir · 149 days ago
Today, I stumbled across a thought provoking post on Elixir by Adam Gomaa in which he checks out the latest release. Adam seems to like the progress we’ve made lately, and does me a great favor of addressing the whole “layers are evil” argument that has been plaguing Elixir ever since Ben Bangert posted his diatribe on Elixir. In his post, Adam states:
Debugging generated assembly code is harder than debugging handwritten ASM. The solution there is not to give up and declare C as having too much indirection: it’s to correct the compiler. Likewise, the solution to finding debugging your Elixir model too difficult isn’t to revert to SQLAlchemy – or to revert to raw SQL, for that matter – it’s to correct the library.This isn’t hard, people. Abstraction is the fundamental principle of computer science, and calling it “indirection” instead of “abstraction” doesn’t magically make it bad instead of good.
Adam makes a great point here in stating that Elixir’s current major weakness is that debugging can be more difficult than with plain SQLAlchemy, but thats not because of layers of abstraction, its because we have some work to do on the code base! Its not an intractable problem by any means, and is the area in which I am currently seeking the most help. Thanks for making the point Adam, its truly appreciated. I am growing fairly weary of hearing people who have never even used Elixir repeat other people’s weak arguments against it. It discourages people from even giving Elixir a try, so that they can formulate their own opinions, and makes it more difficult for us to grow as a community.
That being said, in order to truly refute the argument, we need to make one more big push to get over the hump in regards to debugging. Our documentation has improved immensely, even resulting in the spinoff of our own great API generation tool. I think the best way to address the remaining debugging issues would be a script that would read in your Elixir model, and dump out a plain SQLAlchemy definition. If you’re looking for a way to get involved with Elixir, this would be a great project for you, and I’d be happy to help anyone that wants to take on this project.
Leopard's Menu Smear · 198 days ago
Today, Ars Technica’s John Siracusa released his review of Mac OS X Leopard. Siracusa always provides the best, most honest, and even-handed review of every new release of Mac OS X, and this time around is no different. One particular gem in his review, is John’s opinion of the transparent menu bar in Leopard:
It’s more of a “menu smear” than a menu bar, as if someone painted it onto the screen with Vaseline.
He continues:
It used to be worse, believe it or not. In prerelease versions of Leopard, the menu bar was even less opaque—comically so. But Apple gets zero points from me for lessening the degree of transparency [in the final version of the OS]. That’d be like congratulating someone for extinguishing the left half of his body after intentionally lighting himself on fire.
Spot on, and more importantly, hilarious. I couldn’t agree more John. If a hack isn’t released in the next week or so that lets me make the menu bar and menus opaque again, I’m cracking open XCode and getting to work.
That being said, apart from some visual tweaks that I am not a fan of, Leopard is a wonderful refinement on what was already the finest operating system in the land.
UPDATE: If you hate the translucent menu bar as much as me, and even wish for rounded corners again, there are now hacks for restoring opacity and rounded corners back to your beloved menu bar. Share and enjoy!
What say you? [4]