skip to main | skip to sidebar

Google Analytics

Saturday, November 7, 2009

A laughable arguments against net neutrality

I don't generally stray into political topics, but some issues are too important and relevant to my future and the future of the internet. For example, I believe net neutrality is critical to protecting creative uses of the internet from the internet service providers' meddling. That's why I wrote a general summary of the net neutrality issue a couple weeks ago, and that's why I'm addressing some of net neutrality's critics today.

In the October 30 opinions section of the Wall Street Journal, I read an opinion against net neutrality that is too misguided for me to ignore. Republican senators Orrin Hatch and Jim DeMint wrote the piece, arguing that net neutrality policy will obstruct broadband investment and innovation by letting the government meddle in the affairs of the ISPs. That's simply not true.

I agree with the senators that over-regulation will prevent companies from innovating. The logic is obvious; if a company can't increase its profit by improving its services, it won't improve. However, the current regulation doesn't prevent ISPs from profiting from broadband investment. They are free to changes prices, set usage caps, and even offer higher internet speeds for higher prices. The only way in which the regulations limits ISPs network management options is by preventing them from discriminating against certain types of traffic.

I'm afraid that alarmist arguments like this one about net neutrality are obstructing important discussions on the effects of the regulations and the FCC's proper role in net neutrality enforcement.

Friday, October 30, 2009

Programming is more than pointers and recursion

I apologize for last week's dry and boring post. This isn't a news blog, and it won't become one. I chose that topic because I was desperate to write about something relevant to programmers and the tech community, not because I wanted to write about it. Now I will only write about topics that interest me, topics that I can offer a unique perspective on. I won't become a me-too blogger.

...and now, for the reason you're reading this.

Today, I read a 2005 post from the venerable software-development blog Joel on Software about the problems with colleges teaching Computer Science through Java. I recommend you read the article before this post, but, to summarize, Spolsky says that because Java doesn't emphasize pointers and recursion, it isn't a suitable language through which to teach Computer Science. Here's why he's wrong.

Programming is more than just solving puzzles

First and foremost, I disagree with his view on the purpose of a CS program. He thinks that the goal of a college's CS program should be to weed out the students who aren't smart enough to succeed as programmers. Furthermore, he recommends that pointers and recursion should be taught as soon as possible to scare off the posers. That's poppycock.

The goal of a CS program should be to teach students how to develop high-quality software. Far too many programmers have no idea how to write readable code, much less create a large, functional system with lots of moving parts. Programming is intrinsically difficult, but teaching students only the most arcane and complex parts of the programming discipline scares away many potentially great programmers.

According to Steve McConnell, author of Code Complete, the best programmers are not necessarily the most intelligent, but the most humble. Someone who understands his mental limitations will use every technique available to simplify his code, reducing its complexity and thereby increasing its quality. Complexity is probably the number-one enemy of software quality.

Pointers and recursion aren't intrinsic to programming

All the CS theory and most of the content on pointers and recursion will never be used by the average CS graduate. Spolsky even says so:

Now, I freely admit that programming with pointers is not needed in 90% of the code written today, and in fact, it's downright dangerous in production code. OK. That's fine. And functional programming is just not used much in practice. Agreed.

He then says that these concepts teach students the mental flexibility to view a problem at several levels of abstraction simultaneously. I think this type of "mental flexibility" might account for some of the bad code recent CS graduates write. A graduate's "mental flexibility" could tempt him to demonstrate his new CS skills by writing overly complex code that functions on multiple levels of abstraction. As I said above, intelligence doesn't correlate strongly with a programming success, but ego certainly correlates with failure.

Please don't misunderstand my point. I believe that some of the most difficult areas of programming are the most important (and interesting.) I look forward to learning about recursion and its power. I plan on taking plenty of CS theory classes, learning about even the most esoteric aspects of computer programming. However, I don't think every student would benefit from this type of information. Because these topics aren't necessary to write great applications, I don't think they should be necessary to graduate from a CS program.

This post may, in fact, be completely off-base and unsupported by the facts. However, I've decided to make this blog more personal by sharing more of my opinions and writing about things I care about. I have been worried about writing content that's relevant to my intended audience, but right now, I simply don't spend enough time writing code and playing with my computer to generate a suitable flow of relevant posts. I'm reclaiming this blog as a tool against my personal battle with obscurity.

Sunday, October 18, 2009

Net neutrality: Innovation protection or unnecessary regulation

I consider myself a Libertarian on most issues. I'm generally in favor of the government getting out of the way of private innovation. For that reason, I became opposed to net neutrality as soon as I learned that it involved government intervention into the affairs of (arguably) private businesses: the internet service providers.

However, after learning more about the net neutrality issue and reading about the FCC's new net neutrality rules, I have decided to write a brief summary of the issue in favor of net neutrality.

What is net neutrality?

The issue of net neutrality is about the internet service providers' handling of information flowing through the internet. Information is transmitted over the internet in packets of information. ISPs can examine these packets to determine what type of information they are carrying. For example, an ISP can tell whether a user is watching a YouTube video, downloading email, or browsing Amazon.

For the most part, ISPs don't care about what type of information is being transmitted, but that is beginning to change. ISPs have realized that they can reduce the load on their networks by slowing down certain types of packets. This practice makes sense as a way to combat piracy by slowing down illegal traffic, but several ISPs have begun to use it to arbitrarily discriminate against certain types of traffic.

For example, Cox recently decided to make all FTP and P2P traffic slower, ostensibly to increase the speed of its other services. Although this may improve the service to most of its customers, it could be used for more nefarious purposes. For example, data being delivered from its partner's websites could be prioritized, slowing down all other traffic. Cox could even slow down a particular type of data in order to offer the full speed for a higher price.

Net neutrality legislation and policy attempts to stop this practice by forbidding ISPs from discriminating for or against any type of traffic.

Why should the government get involved?

Until recently, I didn't have an adequate answer to this question, so I couldn't justify the expense to the government and ISPs that net neutrality policy would create. I thought that competition between ISPs would prevent any overbearing packet filtering. However, according to Congress' most recent net neutrality bill, "the overwhelming majority of residential consumers subscribe to Internet access service from 1 of only 2 wireline providers: the cable operator or the telephone company." If both of these all-important ISPs decide to moderate your traffic, you won't have any other options.

Who opposes net neutrality?

Two major groups of companies oppose net neutrality for two separate but similar reasons. Most major ISPs providing high-speed internet are opposed to net neutrality because it limits their ability to profit from their high-speed internet services. Not only would net neutrality prevent them from reducing network load by slowing down some types of traffic, but also it would keep them from differentiating themselves from other ISPs by offering extra speed on certain applications. For example, net neutrality would prevent an ISP from making videos stream faster by prioritizing them over other traffic.

In addition, the high-speed wireless ISPs Verizon and AT&T have teamed up to oppose net neutrality on different grounds. Because both operate massive wireless data networks, they want to reserve the right to manage their traffic. They argue that because there is a fundamental limit to how much data can be transmitted through the wireless spectrum, they should be able to reduce the strain on their networks by slowing down high-volume traffic.

The problem with their argument is that packet filtering isn't the only way to limit network traffic. Net neutrality would allow them to limit data usage by setting customer data limits or reducing the speed of all traffic. The only thing the plan prevents is slowing down packets based on the information they contain.

What can I do?

Contact your congressman in support of H.R.3458, the Internet Freedom Preservation Act of 2009 and the FCC's recent action on net neutrality. The second point is important because some congressmen believe the FCC has overstepped its boundaries by declaring net neutrality rules while the House of Representatives was debating the issue. The FCC's rules will accelerate the enforcement of net neutrality, and that can't happen soon enough.

Monday, September 28, 2009

Harnessing spam bots for cyber warfare

Disclaimer

I have not researched internet criminal law and I won't speculate on the legality of this idea. I'm not advocating any type of internet warfare or vandalism. Don't implement this idea unless you determine that it is completely legal.

Summary

With that disclaimer out of the way, I'd like to explain one of my most ambitious and long-planned idea: redirect spam bots to launch a DDoS attack on a website. Even small websites have to guard their forms against bot spam. Why shouldn't this enormous source of resource-wasting power be put to good use?

Background

Spam bots work on the economics of scale. Unscrupulous companies and criminal organizations pay spammers to use their servers to crawl the internet, looking for comment forms and public email addresses. When a spam server (or bot) finds a web form, it fills it out with a mix of garbage and spam links and moves on. If the data is posted on the website in some way (blog comment, forum posting, wiki entry), the bot has succeeded in exposing the link to more people. If even a minute percentage of the people who see the link click on it, the hiring organization can make money by infecting the unwary user's computer with malware and selling his personal information.

However, if the spam is detected by any part of the system, it is blocked and the bot has failed. Unfortunately, it has still consumed the bandwidth and computing power of the victim web server. In addition, the victim server's organization has to use its resources to harden its website against spam bots. On a low-traffic website, the spam bot traffic is negligible, but on larger sites, the cost of spam bots is significant. One only needs to examine the measures taken against bot spam to realize its power: reCaptcha, image rotation tests, and a few more esoteric schemes. Despite all these barriers, spammers can make money with spam bots.

Plan of action

Why should all those spam bot processing cycles be used for nefarious purposes? Right now, when a website detects a spam bot, it has several options: it can block the IP address of the bot, preventing the bot from coming back; it can simply reroute the bot to a dead-end page; or it can attempt to waste the spam bot's processing cycles by rerouting the bot to a bot trap. Typically, bot traps work by enticing the bot to fill out a never-ending line of forms or follow a web of garbage links.

What if this stream of spam bots was instead pointed at link farms or phishing sites? Web forms could reroute the spam bots they detect to a spam bot portal site that would reroute the spam bots to known nefarious sites. If a significant number of websites used the portal as a bot trap, the effect on the nefarious sites could be devastating. The spurious sites would be crushed by the traffic from their own advertising bots.

Eventually, the portal site could be automated to find and destroy targets on its own. It could pick its targets from the list of sites ejected from Google's index for phishing or link farming. Once it had chosen a site, it would redirect its traffic to that site, checking each minute to see if the site was still functioning. Perhaps it could crush multiple sites simultaneously by evaluating their stability and pointing just enough traffic at each to overwhelm it.

Obviously, this idea would be far more difficult to implement than to describe. How would the portal handle the massive amounts of traffic? Who would want to shoulder the cost of this plan? How would the predator portal get the list of sites rejected from Google's index?

Do you think this plan is viable?

Sunday, September 20, 2009

Scribblenauts: Accomplishment and potential

Although Scribblenauts is a terrifically fun and shockingly innovative game, its concept is even more compelling than its gameplay. Scribblenauts is a new game for the Nintendo DS in which you solve puzzles by summoning and using items. If your goal is encased in a block of ice, you could break the ice with a hammer, melt it with a flamethrower, or detonate it with a grenade. The game's hook is that you can summon almost any item imaginable.

Hidden machinery

Of course, the game is phenomenal, but the technology behind it is even more impressive. 5th Cell, the developers of Scribblenauts, managed to cram tens of thousands of interactive, animated characters and items on a tiny DS cartridge. On top of the actual pictures, they programmed in complex interactions between the items. For example, a toaster will turn bread into toast; monsters scare and attack people; cops shoot criminals and chase donuts; and beavers gnaw down trees. This game's backend is completely unprecedented.

Unlimited Possibilities

Imagine if the contents of the Scribblenauts asset database were accessible to all game developers. Designing a traditional game would be a breeze: lay out a level, populate it with items and characters, and show the player an objective. However, giving developers (and players) instantaneous access to a massive library of items would create entirely new gaming possibilities. An RPG could allow players to equip their teams with typical household items with different strengths and weaknesses. A point-and-click adventure could use the sprites and interactions to let the player pick up literally any item in a room and use it in the game. A platformer could use the vast selection of items and characters to make each level a unique experience. A universal resource database could fundamentally change process of creating and playing games.

Making the concept a reality

Thinking about the possibilities if the Scribblenauts database was open is entertaining but unproductive. In order to give developers and users the power of instant item creation, steps must be taken.

  1. A lightweight format for interactively animated sprites must be established. Whether it's a particular arrangement of sprites on a sheet or an XML dialect for defining how a character's parts fit together and interact, there must be a standard for people to follow.
  2. A central database must be created to systematically store and retrieve the standardized sprites. It must be easy for people to contribute, but impossible for someone to damage or corrupt. The sprites and their interactions must be version-controlled.
  3. Developers must have access to the database from their games. Web-based technologies could access the database directly, but pc-based games should be able to use a copy of the database. It could be optimized and compressed, or developers could simply "check out" the portion of the database they intend to use. Perhaps, when a game using the entire database is started, it could check to see if any new items have been added to the database.

Conclusion

The game Scribblenauts is an enormous accomplishment, but it could be so much more. The technology behind Scribblenauts could revolutionize the resource management of game development, tearing down barriers for both designers and developers to create experiences. Nevertheless, in order for that to happen, 5th Cell must release the Scribblenauts' resource database for non-commercial use, or the independent developer community must unite to create their own asset database.

If you'd like to support the developers of Scribblenauts (and me), you can buy Scribblenauts for yourself.

Thursday, August 27, 2009

Adobe, Flash is unsustainable

Flash doesn't work well on Linux. It's a well-known fact in both the Flash-development and Linux communities. When I try to load a Flash-based video in Firefox 3.1 on Ubuntu, the video has about a fifty-percent chance of working and a twenty-five-percent chance of freezing my browser. Any games I attempt to play are likely to never load, and the ones that load are likely to run slowly, look ugly, or freeze.

Not just Linux users are experiencing these problems. As Flash increases its compatibility and pervasiveness, backlash against its instability and slowness grows. Here's an excerpt from Engadget's review of HTC's new Flash-compatible smartphone:

Unfortunately, in our testing, we found the inclusion actually hurts operation of the phone more than it helps. When browsing to a site heavy on Flash (there are many), the browser loading times were abysmal. Furthermore, trying to view videos in-window produced choppy, nearly unwatchable results. You may have a better experience with lighter kinds of content, but in our opinion the main reason to introduce Flash into a mobile environment is to allow for broader media viewing options, and in the current state of this Flash player, you're not really going to get much mileage out of it.

The push against Flash can also be seen in PC market. Savvy users, tired of Flash slowing their browser and displaying obnoxious ads, are saying no to the Flash plug-in. Cutting-edge web developers, taking advantage of the major advancements in browser technology, are abandoning Flash in favor of embedded fonts and slick Javascript animations that are now compatible with modern browsers.

Adobe could repair these problems with more time or more money, but it has neither. If Adobe slows development on new Flash versions to focus on increasing its compatibility and stability, Microsoft's Silverlight will gain ground with new features. Adobe simply doesn't have enough money and resources to ensure good performance across the numerous platforms to which Flash is spreading.

I only see one way for Adobe to ensure acceptable performance on all platforms while expanding Flash's reach: release the Flash Player and compiler source code under an open-source license. Open-sourcing Flash would benefit Adobe in three ways:

  1. The cost to maintain Flash would go down. The developer community would help to identify and patch bugs, freeing up Adobe's Flash developers to work on the next version.
  2. Flash's performance and stability would improve. Many people would report bugs and contribute patches, and a few developers would spend hundreds of hours fixing Flash problems and making improvements. Additionally, users on non-major platforms such as Linux distros and smartphone OSs would help to test Flash more thoroughly.
  3. More people would use Flash and more people would develop Flash apps. Developers know that open-source projects are more long-lasting than proprietary platforms. Even if Adobe goes away, Flash will remain a viable platforms for interactive web apps. More users would trust the stability and security of Flash if they knew that thousands of people were working to make Flash stable and secure.

Adobe, Flash is too expensive to be maintained and developed by a single company. If you truly want Flash to be the universal platforms for highly-interactive web apps, you'll give it to its rightful owners: the users.

I'm not the first one to suggest that Adobe should release the Flash source code. See this open letter to Adobe for another take on the matter.

Friday, August 21, 2009

Help people regain speech

Every year, thousands of people around the world lose their ability to speak. Some are struck dumb by strokes, while others' voices are stolen by degenerative diseases such as ALS or muscular dystrophy. These people can regain their ability to communicate by using speech augmentation software or devices to speak for them. Unfortunately, the obscene prices of both the software and hardware prevent many people from communicating.

I want to solve this problem by developing an open-source speech-augmentation program. My goal is to create a cross-platform speaking program with both a symbol-based and text-based interface. I plan to write the program in Python with an emphasis on flexibility and extensibility. I plan to abstract both the input and output interfaces, allowing the program to be independent of both its text-to-speech engine and its GUI framework.

Consider this post a project announcement and a call to action. If you'd like to help people regain the ability to speak and you have experience with Python, interface design, text-to-speech, or accessibility, send me an email. I need all the help I can get.