JavaScript Reference, JavaScript Guide, JavaScript API, JS API, JS Guide, JS Reference, Learn JS, JS Documentation
Powered by Squarespace
Thursday
Feb112010

In Support of Net Neutrality

Here's what I posted on the FCC's Net Neutrality debate site. Please feel free to comment!

Net neutrality is a nuanced subject. I completely support the concept of leaving the Internet open and fair. Perhaps one of the best aspects of the Internet is that the barrier to someone creating a new website or company is very small. Anyone with a connection should have the ability to create something that anyone else can view. We should strive to preserve this aspect of the Internet, as it is fundamental and largely what has made the Internet what it is today.

However, my faith in the US legislative bodies to produce laws that would maintain this without negatively affecting the situation is pretty small. That we have Congressmen and Senators that are not capable of reasoning about the Internet and its operation in terms beyond big trucks and tubes is most worrying.

Still, opposing a law against net neutrality simply because it might limit "innovation", as the ISPs would have you believe, is not good enough. I can't think of many large innovations brought on by the ISPs in the last 5 years, unless you consider bandwidth caps and protocol blocking innovations. My Comcast cable connection is only marginally faster than when it was first activated, many years ago.

Another large factor is that ISPs are, by and large, local monopolies. I believe that Internet access is becoming increasingly fundamental, approaching the level of utilities such as electric and water. To say that the "market" will be able to decide what is right in terms of Internet access is ignorant. Many people have only one choice for broadband Internet access. For this reason, it is important for there to be some form of oversight to determine when there have been abuses and what can be done to correct the situation.

To summarize, here is my list of concepts that I consider to be fundamental to the Internet.

1) Fair. Traffic traveling over the Internet should be treated in a uniform matter regardless of source, destination, or protocol. Users must be able to freely access the content and applications of their choice, without interference or manipulation from the ISP.

2) Open. The cost and process needed to acquire and Internet connection should be as low and and easy as possible for both individuals and organizations.

3) Prevalent. Internet access should be available to every citizen from multiple sources. This means that local monopolies should not exist. Multiple ISPs should provide access in the same locations, so consumers have true choice, forcing providers to actually innovate instead of simply raising their fees from year to year.

If legislation is necessary to maintain these ideals, so be it. If legislation is not necessary, then all the better. However, we must not stand by idle to watch our freedoms taken away by a handful of greedy corporations. To support Net Neutrality is to support open and fair access for everyone.
Thursday
Nov192009

MinWin: Software Engineering 101

Ars Technica has a pretty interesting article about the MinWin project at Microsoft. MinWin is a software engineering project to refactor the Windows kernel into something more manageable.




But there’s always been a dirty little secret hiding underneath that iconic field of green grass. From an engineering and security standpoint, the foundation of Windows 2000 and Windows XP is absolutely horrible.



The fact that Microsoft was put into such a situation is, at the same time, surprising and understandable.  I understand how such a large software project can get out of hand quickly. When you develop software and focus on features and release dates over design and maintainability, you end up with the situation that Windows is in. Such things have been studied by software engineers for almost as long as people have been writing software.


What surprised me is that these problems did not bite them earlier and also that no one stopped to do this sort of organization work earlier. In today's market full of cell phones and other low powered portable devices, it would be huge win for Microsoft if they could reuse an existing, stable operating system kernel instead of maintaining several kernel families for different markets / use cases. I'm surprised that no one saw the benefit of such flexibility in the Windows product until now.


While reading this, I contrasted the situation of Windows to that of Linux. I find Linux (the kernel, not necessarily all the crap that runs on top of it) to be a very well engineered system. A testament to this is the extremely varied systems that Linux is able to run on (iPods, phones, PDAs, laptops, desktops, supercomputers, you name it). I'm sure this capability has been a big factor for the many companies that have built products on top of Linux. Windows probably wasn't even a consideration, since it is such an unadaptable, closed system.


The lesson-learned here: design and engineering are important and if you don't figure these things out at the start or early on, you'll spend a lot of time playing catch-up. It's really hard to change the design of a system while you add new features and capabilities. I wonder if Microsoft could have saved time and money by simply starting over, with a fresh design and system. Will Microsoft ever give up the Win32 API?

Tuesday
Aug252009

Sony Reader - Library Link

Today Sony released details regarding their upcoming digital reader products.

sony-reader



One of the big features hardware-wise is a wireless 3G connection, much like Amazon's Kindle. On the software side, Sony announced that the reader will be able to be synchronized with a user's local library (if they support such a thing). The combination of these two features has me pretty excited.

From ArsTechnica,
According to Sony's Haber, the new version of its online book store will allow users to enter their ZIP code, and determine whether the local library offers electronic versions of its books. These books can be downloaded, at which point they'll have a 21-day expiration date—no late fees, as Haber was happy to point out. The New York Public Library's representative announced that his organization would be taking part in the service. That's a rather significant announcement, given that he said that the NYPL's website was the second-most visited online library, behind only the Library of Congress.

I think this might have a big impact for students or anyone else who wants/needs access to many books. Imagine going to college and pairing your reader with your school's library. Suddenly, buying textbooks becomes a thing of the past. Need to look something up, but don't have the book? No problem: search the library's catalog and pull in the book over the 3G connection.

This scenario might be wishful thinking for a little longer, but I think Sony's announcement today goes a long way toward making it reality.
Sunday
Jun072009

Wolfram|Alpha

I've spent a fair amount of time using Wolfram|Alpha recently. Here are my impressions.

The weeks leading up to the launch of Wolfram|Alpha have created incredible amounts of hype surrounding the project. The creator, Stephen Wolfram, has not helped to lessen this hype. Even the project's description sets a rather lofty goal

Wolfram|Alpha's long-term goal is to make all systematic knowledge immediately computable and accessible to everyone.


The comparions to Google were immediate and plentiful. After all, Google describes their goal as making all the world's information searchable and catalogued. However, Alpha is not Google. Here the term computable can nearly be thought of as making all of the data formatted in such a way that the computer can read, evaluate, and manipulate the data. A great example of this is to do something like produce a graph for a data set over time (such as population). Google, on the other hand, is best used as a catalogue that ultimately points you to data. It does very little of it's own analysis other than what is required to build their index.

Alpha is a calculator, only a calculator that can understand natural language, access the relevant data and present it in a form that is easily understood by humans. As such, it's an interesting tool. Alpha's ability to display data on a webpage is particularly impressive. Take a look at what you get when you query Alpha about the International Space Station.

Alpha displaying the current location of the ISS. Alpha displaying the current location of the ISS.

The results are impressive when Alpha knows how to handle your input. In the cases where it doesn't (and there are many) leave much to be desired. For instance, searching for general terms does not yield much beyond basic information, and sometimes that information is only related to the core concept. Consider the next image where I searched for Computer Science. The result is no information other than some queries that Alpha can display results for.

cs Alpha's results for the term "Computer Science."

If you are interested in results that are analytic or mathematical in nature, Alpha might be a really good resource. For encyclopedia like results, Wikipedia still rules the day. Of course, Alpha is not positioning itself to compete with Google or Wikipedia, but I think the comparisons are fair along the lines that all the mentioned services intend to provide information to people seeking information.

 

This brings me to the question, "exactly how useful is Wolfram|Alpha?" I though this might be the type of question that Alpha itself could help me answer. I started by searching for information about the United States' current population.




US Population Results. US Population Results.

These results are good and quite useful. Now, I wanted to get some information about education in the US.

education_usa

Not as much as I'd like to see, and the numbers are a bit out of date. Here I'm a little dissappointed. I'd assume that certainly raw numeric data such as this could be computed upon to reach more conclusions. In my next search, I try something a little more advanced: let's try to calculate the current portion of the population that has obtained a college degree. This should be a simple calculation, given the data. The term for this value is "education attainment," something that I learned through a Google search that lead to the US Census Bureau's page.


edu_attainment

Nothing. Ok, maybe I need to be more verbose and use terms that I know already lead to data. So, I searched for "education usa, population usa."

edu_comparison

What? The calculation isn't even complete. Education enrollment has no result, even though I've already found those numbers before. Even if all the numbers had appeared, no useful calculation or comparison has been done.

The number that I'm actually searching for is 28%. This represents the portion of the population over the age of 25 that has obtained at least Bachelor's degree. This information comes from a Census Bureau page that turned up in a Google search. It would have saved me a lot of time if Alpha had produced this number. Given the data that it has access too (US Census Bureau is listed as one of Alpha's resources), the calculation is fairly straight forward as well.

The reason I'm searching for this number, 28%, is that I believe that the majority of people interested in the types of results Alpha can provide likely have a background in mathematics or science. Most of the impressive results are related to these fields. This is not hard to understand when you realize that "computable" human knowledge is much more likely to come from these fields than say, literature. Compare the results when searching for Poisson distribution to Gulliver's Travels.

Search: "poisson distribution" Search: "poisson distribution"

Search: "Gulliver's Travels" Search: "Gulliver's Travels"

I think you can see the vast difference in the quality of the result returned. Now, back to that 28% number. I'd assume that people with a background in math or science are likely to have a college degree. Of the people with a college degree, only a portion will have studied math and/or science, but let's just keep using the 28% number. What is 28% of the US population? Alpha can answer that.

college_pop

The number: 85.63 million people. I'd conclude that this is a high estimate of the number of people who might ever be interested in the Alpha project. I think the majority of the population might type a query, get a graph, determine this is not what they want and move on.

People who are interested in these types of results will likely want to dig in deeper, as I tried to do above. I think at that point they will become disappointed in Alpha's inability to understand what information they are trying to elicit. Further more, if they are able to obtain just the data they need, I wonder of what use it is other than as a cure for their own curiosity? It is difficult to impossible to determine where, exactly, Alpha got the source information it needed to reach its conclusions. Even if this source information was available, the user still has no idea exactly what equations, algorithms, or process was used on the data. Without this information, I find it difficult to believe that anyone would be able to use Alpha's results in any sort of document or report.

I think a fundamental improvement to Alpha would be to return precise source information that ultimate points to the raw data along with a bit of Mathematica (or other) code that performs the calculation. Then, the user could take this information, verify its validity, modify it as necessary, and incorporate it into their own work. Until this is possible, I'm afraid Alpha will only be used for curiosity's sake.

Despite these criticisms, I find Alpha to be a fascinating project, if only for it's data presentation and cataloguing engine. The project is in an early stage, so perhaps the flaws I see are simply due to this. Perhaps the desired features are already in the pipeline. I hope that they are, because I'm a fan of what Wolfram is trying to do here. If they can improve the project to the point where these points are no longer an issue, I can see Alpha becoming the world changing product what Wolfram would have you believe it is. Until then however, you might be better off searching somewhere else.

Sunday
May102009

This Stack goes to Infinity

In the official CPython implementation, the Python interpreter mixes the state of Python's stack with the state of the underlying C code's stack. Under normal operation, this design choice has little impact, but if one looks more closely there are some major drawbacks.

One such drawback is that Python's stack depth is now limited by the maximum stack depth supported by the underlying CPython process. This might not seem so bad until you consider that one function call in Python may cause many C functions to be pushed onto the stack.

A solution to this problem is to separate Python's stack from C's stack. This is exactly what Stackless Python does. Now, Python's stack size is only limited by the amount of memory in the machine.

I've implemented the Sieve of Eratosthenes example from last time using the tasklets and channels that Stackless provides. I haven't really written any Stackless code until now, but I feel this is a decent translation.



Running this results in decent performance:



I tried running the same example to find the millionth prime, but after hours of execution time I killed the process. While the memory consumption was reasonable, the execution time suffered from, what I believe to be, much overhead from object creation and switching between tasklets. Still, it's encouraging that this version didn't fail due to stack depth problems.

Stackless Python is an interesting experiment, and I wish the features implemented here were part of the official Python release. If you haven't heard of Stackless before, I encourage you to read about what it offers to Python and why this can be useful beyond the toy example I have here.