I consume a lot of music, and there’s no way that I could ever afford to purchase every album I listen to for $14.99. That’s where music subscription services come in. As a recent convert to MOG (from Rhapsody), I get excited every time I get even just a weekly update in my inbox letting me know what music has been added recently. But the announcement of an entirely revamped web app launched into Google’s brand new Chrome Web Store is something that anyone who loves music should pay attention to.
To get you acquainted with what it is exactly that MOG offers, here’s a quick summary of the $4.99 /month service (for $9.99, you get the mobile app too):
Unlimited Music: Access to over 10 million songs and close to one million albums, on-demand. High Quality Audio: Music is streamed at 320 kbps; better than any other music service. Best-in-Class, Personal Radio: The most powerful music discovery engine on the planet (powered by MOG Mobius). One-click Access: With one click, get instant access to New Releases, Top Artists, Top Albums and Editor’s Picks. Anytime, Anywhere: Unlimited access to the MOG app from any computer using Chrome or Safari browsers or on your TV (Roku and GoogleTV).
The Good (a.k.a. why it’s better than what it was)
So why is this new web app a good thing? Because the way that we interface with MOG’s library has been vastly improved. For starters, the browsing of MOG’s huge catalog and the managing of the ‘Play Queue’ all happens in the same browser window now. Where you used to click a button in one window to add a song to the queue in another pop-up, now an addition to the queue affects the window you’re looking at. This really unifies the user experience and brings MOG up to speed with the user experience that competitors like Rdio already offer.
Another improvement is the way in which you now browse and discover music on the site. When you click on an artist’s name after you either search for them or just happen upon them while browsing the site, a dropdown summarizing the content pertaining to that artist is shown. From here, you can view that artist’s discography, see their top tracks, play a radio station built around their sound, or dive deeper and see the individual songs that make up an album. Because the site is built as a web app meeting to the (relatively) new HTML5 standards, the absence of pageloads makes browsing the site super smooth. Jumping in and out of artist pages is quick and painless.
The Bad (or hopefully ‘The Temporarily Left Out’)
The site isn’t perfect though. As a beta release, this is understandable, but there are a few things that I hope are in the pipeline to be implemented soon. The first thing that stuck out to me was that playlists are nowhere to be found. When someone gives you unlimited access to a 10 million song catalog of music, you want playlists. In a larger context than just music discovery, the curators of today’s information landscape provide a great service to the communities that they belong to: they help content of value bubble to the top for everyone to enjoy. Leaving out playlists leaves out the ability for quality music to surface. Only a small fraction of the catalog is ever seen.
Another addition that I’d love to see is the ability to see more than just the music content offered by MOG when viewing an artist’s page. When I’m in a discovery mood, I want to know everything I can about an artist: their bio, maybe some photos, a few similar artists, etc. Last.fm does an incredible job of bringing this information forward on their artist pages.
Finally, I can’t scrobble any of the music I listen to with the new web app! I have no idea what percentage of MOG users are also Last.fm users, but this issue is bordering on being a deal-breaker for me. I’ve been OK with the inability to scrobble songs on my iPhone, but if I can’t scrobble on my desktop either, then I’m left in a pretty bad situation. This seems to be such a small feature to implement, I hope MOG throws this in very soon.
So where does this leave the music subscription space? Rdio has a great interface and iPhone app but no catalog. Rhapsody has a gigantic catalog but the worst interface out there. MOG offers it all: the ideal UI, a large (and quickly growing) catalog, and mobile apps that are winning awards as fast as they can be awarded.
This is from a few months back, but I figured that the N != NP problem is always relevant so I might as well post it.
Here’s a quick summary of the problem:
“P versus NP” is more than just an abstract mathematical puzzle. It seeks to determine–once and for all–which kinds of problems can be solved by computers, and which kinds cannot. “P”-class problems are “easy” for computers to solve; that is, solutions to these problems can be computed in a reasonable amount of time compared to the complexity of the problem. Meanwhile, for “NP” problems, a solution might be very hard to find–perhaps requiring billions of years’ worth of computation–but once found, it is easily checked.
The “P versus NP problem” asks whether these two classes are actually identical; that is, whether every NP problem is also a P problem. If P equals NP, every NP problem would contain a hidden shortcut, allowing computers to quickly find perfect solutions to them. But if P does not equal NP, then no such shortcuts exist, and computers’ problem-solving powers will remain fundamentally and permanently limited. Practical experience overwhelmingly suggests that P does not equal NP. But until someone provides a sound mathematical proof, the validity of the assumption remains open to question.
This past summer I worked for a social gaming company in Mountain View. I remember getting into a good discussion with some coworkers about this problem. That’s another reason why working in nerd-land was nice; conversations about unsolved computer science questions are par for the course. That being said, my algorithms class last semester was nearly the end of me.
Simply put, you start with a grid of boxes. The boxes are in either of two states: alive or dead. To play the game, you start by turning some boxes alive, and running these rules over and over:
A living cell with 0 or 1 neighbours dies, by underpopulation
A living cell with 4 or more neighbours dies, by overpopulation
A living cell with 2 or 3 neighbours survives
A dead cell with 3 or more neighbours becomes alive, by reproduction
I’m not sure why, but we learned about the Game of Life in one of my computer science classes a few semesters ago. I thought it was interesting at the time, but it (sort of) came in handy when I interned at Microsoft. Every year the company puts on “Puzzle Day” which is a program-wide competition between teams that are solving puzzles all day. One of the puzzles was just a wide grid with seemingly random boxes colored black. It came with some clue about “life”, and I figured that it was simply Conway’s Game. Little did I know that there were custom rules that we had to figure out to solve what the boxes revealed… Sadly, this wasn’t one of the puzzles we solved, but we came close, right?
Apple has been catching a lot of flack for it’s HTML5 Showcase page it recently put up on its website. And for good reason! The problem with the site is that it purports to be a page intended to
So what’s the problem? You can only view the demos with Safari. If you’re using Firefox, Chrome, or Opera – all modern browsers that support HTML5 – you get the error message shown in the image above. The fact that Apple is browser sniffing and excluding products that are all capable of displaying the content on those demo pages is troublesome.
Christopher Blizzard of Mozilla summarizes the issue and what’s really important in this way,
The most important aspect of HTML5 isn’t the new stuff like video and canvas (which Safari and Firefox have both been shipping for years) it’s actually the honest-to-god promise of interoperability. Even stodgy old Microsoft, who has been doing their best to hold back the web for nearly a decade, understands this and you’ll see it throughout their marketing for IE9. (Their marketing phrase is “same markup” – watch for it and you’ll see it everywhere in their messaging.) The idea that the same markup, even with mistakes, will be rendered exactly the same. HTML5 represents the chance for browsers to work together and find common ground.
It really sucks that Apple thinks it can push the market around like this, but it’s great to see that people aren’t going to take it.
Note: This is an essay I wrote for a class. It’s on a topic that I feel at least some passion for, and I hope you enjoy it. As for the citations, just look for the author’s names down at the bottom in the Works Cited section. I’m changing this from a Word document to a blog post, so there might be some hiccups along the way.
Although personal computers have become everyday items in children’s lives very few children have learned anything about programming. And while programming has been reserved for the most technically-minded engineers in the past, its core concepts have the potential for helping students learn concepts in math, science, and other areas requiring analytical thinking. Recently, programming environments and languages have been developed with the goal of having a “low floor,” a “high ceiling,” and “wide-walls.” Two projects that have had considerable success in their endeavors are Scratch and Processing. While they are targeted at different audiences – Scratch for elementary school students and Processing for high school students and older – both have successfully introduced people to programming who otherwise couldn’t have overcome the barriers to programming.
“The ability to ‘read’ a medium means you can access the materials and tools created by others. The ability to ‘write’ in a medium means you can generate materials and tools for others. You must have both to be literate.” (Kay)
It has been quite a few years since personal computers were introduced into the marketplace, and since the late 1970s, they have become a commonplace item across the country. While this generation of children and students have come to be known as “digital natives,” very few know much, if anything, about programming and the critical thinking concepts that make it up (Resnick, Maloney and Monroy-Hernandez).
Being able to quickly learn software and the ideas of how to write code have tremendous potential for helping students learn concepts in math, science, and other analytical thinking fields. But what characteristics must the tools we use to teach software literacy have in order to be most affective? It has been argued for years that programming languages should have a “low floor,” a “high ceiling,” and “wide-walls.” This triplet of characteristics means that the language should have a shallow learning curve, create increasingly complex projects, and accommodate a user’s various interests (Papert).
Meeting these three requirements has not been an easy task for tool and language developers. But two projects from MIT exemplify success in these three areas best: Scratch and Processing. Scratch teaches children age 8 – 16 programming concepts through a building block metaphor. Processing brings together a programming language, development environment, and teaching methodology to appeal to the visual design and electronic arts communities. Each of the tools has its strengths and weaknesses, but both appropriately serve their intended audiences.
A History of Computer Programmers
It’s not difficult to find a highly detailed timeline of the invention of programming languages, but what is to be said for the programmers developing in those languages? Looking at who programmers have been in the past and how they’ve changed over the past fifty years can give us insight into who the programmers of the future might be. The continuing evolution of who computer programmers are and how they are viewed by the public is best explained through the lens of the level of the languages the programmers used.
The earliest programmers, or “real” programmers, are best characterized as the select few people in the 1940’s who understood how to operate the immense computers that filled the space of an entire room. They knew machine language, and poured their blood, sweat, and tears into writing it. Machine language is considered the lowest level language class, and it is the only language that a computer truly understands. These earliest programmers labored hard-wiring the switches and cables inside the machines with only the 0s and 1s that the machines could interpret (Lohr). Luckily, very few computer programmers still write any machine code.
1960’s Hacker Culture
The next phase of programmers moved from the cumbersome machine languages to a slightly higher level set called assembly languages. Assembly languages are one level of abstraction away from machine code and take advantage of human words like ‘add,’ ‘sub,’ and ‘mov.’ This abstraction allowed for many more people to learn how to program and bred a new group of people writing code not as their day job, but as a hobby. Some of these programmers, affectionately called “hackers,” were more enthusiasts than professional software engineers, but the results of their efforts are no less important. The World Wide Web and the Internet are both products of 1960s hacker culture. But while assembly languages were slightly less primitive than machine code, they were by no means simple to learn and understand.
Now and the Future
More recently, languages referred to as high level languages have spread as the most prevalent to code in. High level languages are strongly abstracted from machine code and, like assembly languages, must be translated back into machine code in order to be executed. This strong abstraction has allowed for people to teach themselves how to program. As a result, there are far more programmers today than existed even twenty years ago. And while most professional programmers still have a formal education in software development, the next logical step in the evolution of who programmers takes us to the general public.
Today, the software community is working towards the goal of universal software literacy. The hope is for programming knowledge to be commonplace and for ordinary people to understand how to conceive of a simple solution to a complex problem with the help of computers.
This shift of who a programmer is involves a similar advancement in the languages or software environments that these new programmers will write code in. We need languages further abstracted from machine code and syntax that more closely resembles human language to decrease the learning curve of programming and improve the readability of code. Even though software literacy for the general public seems like a lofty ambition, developments have already been made in this direction.
Scratch – the children’s programming language
Of all the programs that have attempted to introduce programming concepts to beginners, MIT’s Scratch has had the most success. Scratch is an interactive program rather than a syntax-based coding language; it employs building blocks to construct programs rather than relying on potentially confusing grammars. Developed by the Lifelong Kindergarten Group at the MIT Media Laboratory and released in 2007, Scratch was build with its specific core audience of children age 8 to 16 in mind (Maloney, Peppler and Kafai). The creators of Scratch knew that since computers had been introduced in the late 1970s, they had become everyday items in children’s lives, but that very few children have learned how to program. Knowing this, the Scratch team set out to build a program that satisfied the triplet of having low-floor/high-ceiling/wide-walls and appealed to children (Resnick, Maloney and Monroy-Hernandez).
Give It Meaning
Scratch’s users learn important mathematical and computational concepts, as well as how to think creatively, reason systematically, and work collaboratively. But how do they accomplish all of this without losing interest? By making sure that every aspect of the program gives meaning to the user’s work. Scratch does this in two ways: diversity and personalization.
Scratch is unlike many of its competitors because it has wide-walls and supports the creation of a diverse range of project types such as stories, games, and simulations. Scratch allows its users to make different kinds of programs as it is much more meaningful to work on a project that reflects one’s own interests. These programs reflect who each young creator is, as exemplified by Scratch’s built-in personalization features.
Scratch makes it easy for people to customize their programs by incorporating different media and allowing users to do things like import photos and record their own voices. Scratch succeeds in having both a low-floor and high-ceiling because kids can not only “develop abstract programs to do mindless things with a cat or a box, etc… but they could add their own pictures and their own voices to the Scratch environment. (Resnick, Maloney and Monroy-Hernandez)” When Scratchers build programs that are personally meaningful to them, they are more eager to learn mathematical and computational concepts that pertain to their projects (Resnick, Sowing the Seeds for a More Creative Society). How better to introduce the eighth-grade algebra concept of variables than to show a boy that a programming variable will let him keep track of how many points he has scored in the basketball game he programmed?
Make It Social
Once a child creates a Scratch program, she can share it on the Scratch web site in the same way that one would share a video on YouTube. The Scratch programming environment is tightly coupled with this sharing web site, and the 700,000+ projects that have been shared there are a testament to the vibrant community currently developing in Scratch. This website functions both as a location for viewing or collaborating on one another’s work and as a repository of material to learn new techniques and programming concepts from. Once a project has been uploaded to the sharing site, it can be run from in the browser, commented on or voted for, or downloaded for reverse-engineering by another Scratcher. Scratches share the same benefits as an open-source program like Scratch, namely that its users can keep learning from their peer’s discoveries.
The depth offered by Scratch is quite extraordinary considering the fact that it is merely an educational tool for very young children. It teaches concepts like conditional statements (“if” sometime is true, “then” do an action), iteration (going through each element in a list), parallel execution (multiple processes running simultaneously), and user input (keyboards, mice, etc.) in a manner that a 10-year-old can fully comprehend. Its replacement of a syntax and grammar-based language by a graphical user interface is wholly appropriate for the context of its use. But this veil of simplification must eventually be removed to reveal a more advanced, but hopefully not more confusing, development environment.
Processing – the electronic sketchbook
Processing was born from the idea of making a language that both gives visual expression to sophisticated forms of computation and acts as a teaching tool for those unfamiliar with computer programming (Maeda). Under the direction of renowned graphic designer John Maeda, Processing has been developed by MIT graduate students Casey Reas and Ben Fry since 2001. Processing’s syntax is a stripped down version of Java, which allows for a declined learning curve while preserving the power and flexibility of Java. Whereas Scratch is aimed at young children, Processing looks to serve an older, more educated audience of people in high school and older.
The intelligent development environment used by Processing is called the “sketchbook,” and all of the programs a user writes are referred to as “sketches.” While Processing is fully capable of generating full-featured software, its intention is much simpler than that. Reas and Fry want their users to sketch different renditions of what the finished product might be, much in the way that architects work with cardboard before building a skyscraper or musicians sit down with a piano before composing a concerto. Because Processing was created by people with primarily creative backgrounds, it breaks from the cycle of programmers making tools for programmers and “engages people with visual and spatial minds. (Reas and Fry)”
Programmers Teaching Artists Teaching Programmers
The two main audiences that come to Processing are artists and programmers, each with an interest in the other’s field of expertise. For both groups, Processing serves as an excellent jumping-off point from which one can explore other programming languages or creative theory. The variety of classes and workshops being offered at universities such as UCLA, MIT, and Hongik University in Seoul give evidence to Processing’s flexibility, with some classes approaching the language from a programmers point of view and others from an artist’s perspective.
As computers become more pervasive in the creative arts, programming skills increase in demand. One reason why so many people come to Processing and succeed in learning the concepts of programming through the language is because it embraces and is centered around artistic theory. In fact, the equivalent of a “Hello World” program given on the Processing learning web site is one line of code that draws a line. From there it moves on to giving the line a background and color (Fry and Reas).
A one-week workshop at Hongik University in 2003 brought together design and computer science students, and the interaction between the two groups illustrates Processing’s strengths in crossing over the two fields. When students without previous programming experience produced work that was visually complex but technically elementary, the computer science majors helped them understand more advanced programming techniques. And the inverse occurred with the students without any comprehension of basic design principles (Reas and Fry).
The concept of software literacy is not new. Ted Nelson wrote in 1974 that “the more you know about computers… the better your imagination can flow between the technicalities, can slide the parts together, can discern the spaces of what you would have these things do. (Nelson)” This is exactly the idea that Scratch and Processing are striving to further. Pushing programming onto unwilling students is not how software literacy will be accomplished. Rather, tightly coupling people’s interests with the manner in which programming is introduced to them makes them much more receptive to the ideas being presented. Also, we must not forget the reason for teaching programming concepts. The fact that educators are using coding as a gateway to many other critical thinking concepts is important; it betters education and expands how our minds conceive of solving problems.
OK, I completely understand the insane generalization I just made with the title of this post, but when it comes to online video adoption, I think it holds true. Apple has made it very clear from the launch of the iPhone that it really isn’t interested in working with Flash anymore. And as of the past couple weeks, Google has made it very obvious that it really isn’t interested in always doing what Apple wants.
Everyone knows that the iPhone doesn’t support Flash, and most people know that iPad arriving on Saturday won’t support it either. For a while, it looked like Adobe and Apple were making headway in cleaning up Flash so that it could run on Apple’s mobile devices without eating through battery life on the already life-strained devices. All that changed with the iPad. It’s become apparent that Apple has no interest in Flash and would much rather everyone move on to HTML5’s video tag.
As usual, when Apple says, “Jump,” there’s plenty of parties lining up asking, “How high?” In the past week, we’ve seen plenty companies announce that they’ve readied their “iPad compatable” sites that are devoid of Flash and HTML5 rich. The biggest of these announcement comes from Brightcove which lists customers like the New York Times, NPR, and the Wall Street Journal.
In opposition to this, and further feeding rumors of bad blood between the two, Google has fully integrated Flash into its Chrome browser and operating system. While the vast majority of users have already installed the Flash Player plug-in, it’s interesting that Flash is comes prewrapped in Chrome because 1) it flies directly in the face of Google’s public support of the HTML5 standard and 2) it shows Google’s dedication to Adobe’s Open Screen Project. Essentially, Google’s sending mixed signals to the tech world. Are we supposed to completely support the new open web standards including HTML5, or can exceptions be made when a company (like Adobe) throws their proprietary technology in the mix saying it’s needed to build a ubiquitous platform for developers?
My vote? I say go with HTML5. I think HTML5 has great potential, and new projects like SublimeVideo and RGraph are perfect examples of this. Flash has had its 15 minutes, and it’s due time for us to dump it in favor of open standards.
Here’s the process that Lala presents for consuming music. First, you can listen to any song in it’s massive online database for free. The catch? You can once listen to each song once. Now you can either download a DRM-free MP3 for about a buck, or you can purchase the web-version of a song for 10 cents. This web version of the song is now free of the one-play restriction and is added to your library.
Now to the second aspect of Lala. Using a small standalone app, Lala will scan your music folder and unlock the web versions of every song you have. If Lala doesn’t find a match in its database, it will upload your song to the cloud. Every song you have on your computer is now available for you to stream for free unlimited times.
Your music in the cloud
If you aren’t familiar with “the cloud”, just think of websites like Gmail or Google Docs where all of your information is stored on some remote servers (the cloud) instead of your local machine. With Lala, its of your music that is in the cloud.
This currently means that you can access all of your music for free on any computer with an internet connection. While this is the main feature Lala boasts right now, the potential of this reaches much further. Lala could integrate the subscription model of services like Real Network’s Rhapsody and Microsoft’s Zune Marketplace and quickly overtake them. Lala’s current monetisation scheme seems to be working pretty well for them ($.10 or $1), but there are so many other directions they can take in the future.
Engadget just posted an article showing a very early build of the iPhone app Lala has in the works. Right now, mobile devices like the iPhone are limited by their data storage capacities. Because of mobile phones’ small sizes, storage is limited to around 16GBs right now. If Lala can get past the legal hurdles that the record companies present and get the web versions of songs to play on mobile apps, this storage restriction will be lifted.
Lala has the potential to do everything that I want a media player to do. iTunes works well right now, but the reason I love it is because it syncs so well with my iPhone, not because of its ability to play music (and I’ve never bought music from the iTunes Store).
I believe agility will be one of Lala’s key strengths. If the company can continue to innovate the online music marketplace as it has, I see no reason why media desktop apps won’t be a thing of the past.
update: I’ve fallen in love with Lala’s “Mix it up” feature. It’s basically a playlist generator (ie. iTunes Genius), and it works great!