Medallia Blog

Automated Functional Testing at Medallia

By Fernando Martin on August 05, 2010

Motivation

Functional Testing is a key component in any development process. Its main objective is to identify potential issues before they reach production and negatively impact eventual users. These tests tend to be time consuming, and are often described as the ‘bottleneck’ in the development cycle.

At this point, Automated Functional Tests kick in. Several tools are available to generate these UI tests (here at Medallia we use Selenium and HtmlUnit), but in general the test suites based on these frameworks rely entirely on the UI, making them unnecessarily time consuming and flaky. A particular suite that is aimed at testing a specific functionality requires a number of preconditions that are usually fulfilled by creating the various necessary components through the UI. As a result, a test that has the goal of verifying some small case ends up having a lot of boiling code that takes quite some time to execute, and also might fail due to inherent flakiness of the UI test.

Continuous integration at Medallia

By Kristian Eide on June 15, 2010

Continuous integration is an important tool for finding issues early and is especially useful in team environments. Here at Medallia, we have built our own continuous integration system which automatically builds all our code, runs the test suite and presents the results in a nice UI.

About 3 years ago we switched from Subversion to Mercurial which allows us to improve our workflow by keeping all features on separate branches until they are ready to be merged. Each release gets its own integration branch, and these are numbered sequentially; our current release branch is called e55 and the next will be e56. Once a feature has been developed and tested, it is merged to the next release branch.

Choosing a key-value storage system (Cassandra vs. Voldemort)

By Diego Erdody on May 07, 2010

Motivation

At Medallia, a key component of our system currently works with an open source relational db. Since this component mainly queries the db entries by key, we want to try to switch to a key-value storage system and take advantage of several benefits provided by such a system, including distributed replication, load balancing, and failover. One of our objectives is to re-architect this component in a way that will allow us to achieve horizontal scalability, that among other things will help us alleviate the high disk storage requirements we currently have.

Recently we took the time to look into this (and other technological improvements too, exciting times at Medallia right now!), and we reviewed several options. To make a long story short, we ended up with two finalists, Apache Cassandra and Project Voldemort.

These two projects seem to be the most mature open source options in their class, and both provide a native decentralized clustering support including partitioning, fault tolerance, and high availability. Both are based on Amazon's Dynamo paper, but the main difference is that Voldemort follows a simple key/value model, while Cassandra uses a persistency model based on BigTable‘s column oriented model. Both provide support for read-consistency where read operations always return latest data, which was a requirement for us.

Medallia is recruiting top talent!

By Medallia on April 22, 2010

If you got to our blog, you probably already know about us, but just in case you need more information, here you go:

Medallia is a fast-growing, profitable, privately held technology company located in the heart of Silicon Valley, in Menlo Park, CA. We build great Software-as-a-Service (SaaS) based solutions for Global 2000 companies, and we have a 100% client recommendation rate. More than 50,000 businesses and business units use our products to gather, analyze, and act on feedback from customers, partners, and employees, including Fidelity, Four Seasons, Sephora, Hyatt, Gap, and Lego. Our customers delivered more than 400 million survey pages using Medallia in 2009 alone. By adopting Medallia’s products, companies can better understand and adapt to customer needs. More satisfied and loyal customers, in turn, help generate better business results. In fact, measured in terms of market capitalization, publicly-traded Medallia customers have outperformed the S&P 500 10X since 2003 and 4X since 2008.

Medallia is also a great place to work, with an unconventional, creative, collaborative, intellectual, and positive environment. We have an unusually low turnover rate, with less than 10% of employees voluntarily leaving the company, and most of those for reasons unrelated to Medallia — like to join a spouse relocating to Europe. Of the few employees who have left, 30% have actually returned! We are also finalists for the SF Times best workplace award, which will be awarded in the coming weeks. We hire inspiring people you will like working with. To find out more about our company culture, please visit http://medallia.com/careers/opportunity

We actively seek talented people for the following positions:

1) Software Engineers
We are hiring java experts at all levels - entry-level, senior, and lead positions. If you are a passionate programmer who lives and breathes to develop innovative algorithms, please check out our full job descriptions below:
http://www.medallia.com/careers/position/software-engineer/
http://www.medallia.com/careers/position/senior-software-engineer/

2) Summer Software Engineering Interns
We invite student java experts to spend the summer working on innovative projects with us, including data mining, visualization, and more. We welcome students who are looking for an opportunity to apply their research work to practical problem solving that we can incorporate into our application. Preference is given to students within one year of graduation, but exceptional java developers will be considered at any point in their education. Apply soon, as these positions are filling up quickly!
http://www.medallia.com/careers/position/2010-summer-engineering-internships/

3) Operations Engineers
We are looking for both Operations Engineers and IT/Systems Administrators who will enjoy working with our talented software engineers and client services team to keep our application running smoothly.
http://www.medallia.com/careers/position/operations-engineer1/
http://www.medallia.com/careers/position/it-systems-administrator/

4) Web/Graphic Designers
We seek someone with an impressive online portfolio to play a key role in designing our web and print presence through new web site initiatives, as well as the development of marketing materials (both
print and online).
http://www.medallia.com/careers/position/web-graphic-designer/

5) Office Assistant/Admin (30 - 40 hours per week)
We seek a smart, friendly office assistant who multi-tasks well and is able to work with minimal guidance. The ideal candidate will have a car available for running errands, and will be available to work 30 or more hours per week, including weekday afternoons until 6:30 pm.
http://www.medallia.com/careers/position/office-assistant/

6) Client Service Managers and Senior Managers
We are seeking Client Service Managers and Senior Managers who can take ownership of specific Fortune 500 accounts from the first day. Medallia’s Client Services Managers build deep relationships with top management at client companies, leverage those relationships to understand underlying client needs, then channel Medallia’s engineering and management resources to address those needs – often through innovative software solutions.
http://www.medallia.com/careers/position/client-services-manager-senior-manager/

7) Analyst and senior analysts
We seek quick-learning, articulate, and analytical members of our client services team, where responsibilities include a blend of account management, project management, data analysis, product
development, and business consulting.
http://www.medallia.com/careers/position/analyst-and-senior-analyst/

8) Product Marketing Manager
Medallia is looking for an enthusiastic and talented product marketer to partner with our product and marketing teams and develop compelling collateral and provide key strategic contributions. The ideal candidate for this position will have demonstrated cross-functional leadership.
http://www.medallia.com/careers/position/product-marketing-manager/

9) Staff Accountant
We are seeking a Staff Accountant with working knowledge of the general ledger function and US GAAP for internal corporate accounting. This position will support much of the general ledger
activity in our US parent company as well as for two foreign subsidiaries.
http://www.medallia.com/careers/position/staff-accountant/

To apply, please review our hiring process at http://www.medallia.com/careers/hiring-process, and then send your resume and cover letter to jobs@medallia.com, with the job title in the subject of your email.

Medallia Expands Its Recruiting Efforts to Argentina

By Erin Storm on December 12, 2008

Juan Pablo Dellarroquelle, VP of Engineering, and Diego Erody, Engineer, conversing with recruiting candidateOn October 16th and 17th, 2008, Juan Pablo Dellarroquelle, Medallia’s VP of Engineering, flew to Argentina to attend a career fair at ITBA - Instituto Tecnológico de Buenos Aires (Buenos Aires Institute of Technology). Formally a student at the university, he was now there to recruit students for full-time and internship opportunities in Medallia’s Engineering Department.

Being the new kids on the block, Medallia representatives spoke to about 30 students in all over the two days that the fair was held. “The first day was a bit slow,” said Juan Pablo. “Only a few students knew about us attending the fair." As word spread, more and more students became interested in the opportunity of being part of an elite team of developers that is building an actual product - right in the heart of Silicon Valley.

The door has been opened…

Recruiting students at local universities as well as those abroad is something that Medallia strives to do. With the help of Juan Pablo and a few fellow Argentines, Medallia looks forward to returning to ITBA next year to recruit more world class students, and is also hoping to build a lasting relationship with the institution. Juan Pablo concluded, ”I believe this is a great opportunity for us to attract great talent, and for students to gain unique work and cultural experience in the U.S.”

iPod + iPhone + Web Mashup

By on November 25, 2008

It's what the mobile music experience could be

This project started as I explored ways to view lyrics while listening to my music library on the iPod Touch. Ideas kept coming and I added some concepts (and code) from iMovieMash.com plus great content from the multitude of public video, music and search APIs.

The result was iMusicMash.com, an iPhone and Android G1 social web application that takes your music experience to a whole new level of enjoyment and discovery. You can start with the friends' playlists we already have or load your own iTunes music library. The interface is familiar as it mimics the iPhone's iPod. For each artist, we bring photos from Yahoo Boss Image Search, concert dates from Eventful, and live Twitter discussions. Then, for each song, we bring great YouTube videos, lyrics from LyricWiki, similar songs from Last.fm, and friends' songs for the same artist.

I recently added lyrics search and artist/title search.

iMusicMash was a winner in the Yahoo Developer Mashup contest at the recent Mashup Camp in Mt. View, California.

Spider Web Framework (for Java)

By Kristian Eide on November 03, 2008
The Spider Web Framework is a framework for building web applications in Java. It was developed with a set of specific goals:
  • Make it trivially easy to write good test cases
  • Reduce boilerplate code to a minimum
  • Avoid static state through dependency injection
  • Strict M-V-C separation
  • Prefer convention over configuration
Before diving into the details of how each of these goals were achieved I would like to mention that the source code for the framework is available as well as a sample application with a tutorial. The sample application includes Jetty and can thus be started with a single command (Java and Ant required).

iPhone and Movies Mashup

By on May 10, 2008

Mashup Camp winner helps you make wise movie rental decisions

Never rent a bad movie again. I created iMoveMash.com after renting one bad movie too many at the local supermarket's DVD rental kiosk. The free-wifi sign near that kiosk and my long time interest in mobile applications sparked an idea to help movie lovers make better rental decisions.

The resulting mobile web application integrates 7 data sources, including DVDPlay's kiosk content, Blockbuster's latest movies, IMDB movie ratings, Kids-In-Mind movie ratings, YouTube, Yahoo Movies, and Google Maps.

iMovieMash lists the kiosk's or Blockbuster's new movies in descending IMDB movie rating order (best movie first). Each movie I list is also a link to Yahoo Movies and search results from YouTube's API. The YouTube search query is biased in a way that is likely to return trailers or videos related to the movie itself. When clicked, the YouTube results launch the native YouTube application in the iPhone or iTouch.

iMovieMash took 2nd place at Mashup Camp 6, where I demo-ed the application dozens of times in 5 minute "speed geeking" sessions. That was a good bit of fun, and re-enforced the concept that successful products have a simple message, solve a real problem, and look good.

The application was developed with Perl for the backend and the IUI iPhone framework for the front end. It looks best on the iPhone or iTouch, but runs fine on a Blackberry or any web browser. Just goto http://imoviemash.com.

mmlist.png     mmyt2.png

The Run of a Lifetime

By Snorre Helvik on December 15, 2007

Sometimes I just don't quite understand my fellow colleague Max.. One day at work, during lunch he suddenly goes; "I've decided to run a marathon.. in 6 weeks... in Athens". First we thought he was kidding, only to find out he was serious. Secondly he though he was crazy, which turned out to be fairly correct. He said he accidentally came across the event on the web and figured, "ah, this seems like something for me"!? Hmm, the guy hasn't really been running the past few years, and except for our weekly soccer practice I'd guess he hasn't done any exercise at all lately, so how could he possibly think that marathon is something for him? Well, there's only one way to find out, so two weeks later I decided to join the madness! So, that's how the story begins; One marathon, two participants, four weeks! 42 km can't be that bad, can it?

Motion sensor abuse now rampant

By Erling Ellingsen on November 28, 2007

Cell phones are now being advertised with "shake control" (previously).

Also, researchers at Glasgow University have a proof-of-concept video of a creative new use of the motion sensor: Shake the phone and hear "your messages" rattling around inside it.


iPhone accelerometer source code

By Erling Ellingsen on August 28, 2007

Here's some code to initialize the accelerometer to run at full speed. Pass the desired sample rate (in Hz) to the initialize function. Go wild!

[updated 9/3: fixed typo]

Fun with the iPhone accelerometer

By Erling Ellingsen on August 27, 2007
Note (9/12): there is an application in the iBrickr PXL repository called 'Balls' which links to this page. I have nothing to do with that app; it was created by Grudgnor over at the MacRumors forum.

Those who have followed this blog will know that I like to like to play with unusual input methods (see my earlier posts on , ambient light sensors, and the SmackBook).

As it turns out, the iPhone has a built-in LIS302DL, a tiny 3-axis accelerometer. While some have attempted to use it from within the Safari browser (the Tilt game detects changes to the width of the browser page; it is basically used as a 1-bit input device), its potential is still somewhat untapped.

After a rather lengthy bout of reverse-engineering (I had barely touched ARM assembly before this), I finally figured out how to access the raw data from the accelerometer itself, as can be seen in the video above. Source code will be posted as soon as possible is posted here. (update: yes, it is possible to access the accelerometer directly through UIKit without this hack -- however, you'll be locked to the default sample rate, which is too slow for some of the fun stuff)

Straw poll: What would you like to see on the iPhone?

dyeSight $2 Multi-Touch Pad

By Erling Ellingsen on June 12, 2007

I guess most of the people reading this will have seen some of the multi-touch demos by Jeff Han, Apple and Tactiva. I wanted to play around with some ideas that required a multi-touch pad, but there aren't any devices available (Tactiva aren't shipping...)

Long story short, I made a simple one from a plastic bag, some dye and a camera:

jQuery Reference Widget

By Ryan Dunphey on May 20, 2007

dash.jpgWhen Wolfgang Bartelme and the Prototype crew first launched their OSX widget, we jQuery folk tried not to covet. Try as we might though (truth be told) we wanted one too!

Fast forward a few weeks later: I'm on a plane heading to our headquarters in Menlo Park. Eclipse (and a bunch of other technologies) are serving me our app via localhost--nice! ...that is, until I needed to reference those pesky $.ajax parameters!

With that in mind, and the remainder of the flight, I threw together a jQuery reference widget. It's been of value to us front-end developers at Medallia, and now we're returning some love to the jQuery community with this public release.

The widget provides simple, searchable, offline access to the API. More, we've provided the ability to search older APIs, as well as a few quick-links to online resources.

Per Resig's suggestion (and thanks John for all your help), we're releasing this with an MIT license and have made it available under version control.

We hope you find it of value!

Download the widget, v1.0 (View screenshots)

I've updated the widget to the latest documentation 1.1.3.1.

Download version 1.1

TopCoder Open Marathon: Robot Routing

By Øyvind Grotmol on May 02, 2007

Many developers here at Medallia have participated extensively in algorithmic coding competitions like the ACM World Championship of Programming and TopCoder Open. These are fast-paced and get the blood flowing, as you spend around an hour to solve a problem, and either your solution gives the correct answer for every single test case, or you score zero. This year, however, the TopCoder Open added a new competition format, the marathon. Here you have typically one full week to work on a problem which is too hard to find the optimal solutions, but instead your solution is scored based on how well it fares compared to your competitors. With the possibility of all-paid travel to the finals in Las Vegas for the 8 best competitors and $15,000 to the winner, I decided to give this interesting new competition a shot.

There were 1249 registrants, which got narrowed down to 500, 200, 50, and finally 8 through four online rounds. In one problem you had to make an AI for a simplified version of poker, and in another you had to write a strategy for a lumberjack running around in a forest. It is however the fourth problem that is my topic, as here the competition gets really tough for those 8 finalist spots.

The problem is about directing an army of up to several thousands robots as they go around in a warehouse delivering products, with the objective of completing all the assigned tasks as quickly as possible. Researchers have studied the general concept of multi-robot collaborative routing before, but it's much more fun to see what 50 good programmers can come up with in two weeks for this particular problem formulation.

Read the full entry to see a full explanation of my algorithms, the source code, and the results.

Medallia is hiring

By Rune Sandberg on May 02, 2007

Medallia is growing rapidly and we need more people both at our Menlo Park, CA (Silicon Valley) and Oslo, Norway locations.

For our User Experience team, we need a skilled front-end developer looking to push the boundaries of the browser in order to create unparalleled user experiences. To create elegant aesthetics we are looking for a visual designer that can make art scalable and appropriate in the context of web applications.

To join our world class engineering team, we are looking for a senior software developer with architect design skills and an ability to craft elegant code. And to give our engineers a run for their money, we do need someone that enjoys breaking things and finding vulnerabilities as an accomplished QA engineer.

To read more, head over to the jobs section

Google Print & Library Lookup Mashup

By on April 08, 2007

Instantly know if that book you're glancing at on Google Print is available at the local library.

Greasemonkey has been a great tool for creating efficiencies at work, and for hacking fun on the weekend. I like to support the local libraries so I created this mashup of Google Print's book view and the San Francisco Peninsula Library system's book search. It immediately let's you know if the book you're paging through on Google Print is available in the library. Click on the screenshot for a preview. Get the script

The Greasemonkey Javascript puts a small yellow box in the corner of your Google Print book search. The box includes a book title and a link to the library system's search results. When clicked, a new browser tab is created containing the library's lookup page with the book's location and status.

The script also linkifies the library names on the latter page, to point to the library's street map, hours and phone page.

Building Bridges

By Kristian Eide on March 21, 2007

I recently read Dreaming in Code, a book by Scott Rosenberg which follows the development of Chandler, a software project started to design a revolutionary tool for personal information management. The recurring theme in the book is how hard software development has turned out to be, and why this is so surprising to most people.

Many have written their thoughts on this subject, and the comparison to building bridges is frequently made: if only we could build software the way we build bridges it would always be on time, on budget and of high quality.

I would argue, instead, that software development is incredible easy. It is so easy, in fact, that any 14-year-old with some spare time on his* hands can do it. No other profession is so readily available: anyone with a computer and some spare time can do it right from home.

Let me take you along on a small thought experiment: what if building bridges was as easy as developing software or in fact any kind of structure? What if, after writing down some specification on dimensions, material used and other necessary parameters you could press a button and said structure would magically appear out of thin air?

A Guided Tour of Mercurial

By Kristian Eide on February 24, 2007

Here at Medallia we have recently switched from Subversion to Mercurial for some of our projects. While both are very good tools for managing a source code tree there is a significant difference in the philosophy between the two tools and the problems they are trying to solve. While I will not claim that Mercurial is perfect it has turned out to be a very significant improvement for us, mainly because of its support for tracking branches, which Subversion instead leaves in the (perhaps not so) capable hands of its users.

The following is a guide I wrote which we are using internally to get people up to speed on using Mercurial. While there are several other guides out there I have not found one which, in my opinion, explains well how to effectively work with named branches (probably because they were only relatively recently added to Mercurial). I also wanted a single document which explains everything necessary to start working in a clear and concise way. My hope is that this guide provides that.

Gafter's talk on closures for Java

By Erling Ellingsen on December 19, 2006

I thought it would be worth noting that Neal Gafter's talk on the closures proposal for Java is now online. Enjoy.

Aspirin for headache

By Kristian Eide on November 08, 2006

A while ago a big pharmaceutical company wanted to expand their business to the Middle East since their marked research showed that there was a large untapped marked there for headache medication. The only problem was that since many people there did not know how to read their normal advertising would not be effective, but then someone came up with the idea of using this visual ad:

Aspirin reversed

They thought this was a brilliant idea and went ahead, putting it up on numerous big billboards. After a few weeks the sales were still very slow, however, and they could not figure out why, until after asking a few people why they were not interested it dawned on them.

Lies, Damn Lies, and Statistics

By Kristian Eide on November 02, 2006

Medallia has, as part of its product portfolio, an advanced data analysis tool which is the main interface we provide our customers for looking at the data we collect for them. This tool is a web-based application and can answer questions such as “show me, for each question asked, the percentage of females who gave me a top 10% score grouped by income level for the past quarter, and show the percent change since the same quarter of last year” in less than a second even when the number of surveys are in the millions. “Yeah, yeah, am I sure it makes coffee as well” you are probably thinking, but this is actually important for what I am about to explain.

Since we provide a web application to our customers that we host ourselves we are naturally interested in how it is being used. A while ago one of our account managers asked me to compile a report for her on how many times people from a specific client had logged in over the last week, and I quickly realized that this would not be the last such request. As much as I enjoy grepping through logfiles (or even writing a small perl script to do it for me) I would much rather spend my time developing new features, so then I got an idea. Since we already have an advanced reporting application that churns through millions of records in less than a second while making coffee, why not try to use it to do our usage statistics as well? How much work would it take? Not much as it turns out!

Building Cathedrals

By Kristian Eide on October 27, 2006

Three people are working on laying down bricks. You ask the first what he is doing, and he answers 'I am laying down bricks'. You ask the second, which says 'I am building a wall'. Finally you ask the third who tells you 'I am building a cathedral'.

Great programs are created the same way as any other program, one brick at a time, but each brick has to be laid down in the knowledge that it will be part of something greater than the small piece currently being worked on. If it is not known what the final structure will look like it is even more important to make sure the individual pieces can be built upon and reused later, because most code will find itself used in situations where requirements change. Knowing how much to abstract a given piece of code is what separates a good from a great programmer.

More puzzles

By Erling Ellingsen on October 17, 2006

We recently sent out some recruiting brochures. It is customary to include a couple of puzzles, so we used a couple of our favorites. Two are old, two are (as far as we know) new. Feel free to leave a comment with your answers.

Fix this program

Find a way to make the following C program fragment print 42 dashes, by changing only one character. Then find two more!

int i, n = 42;
for (i = 0; i < n; i--)
  printf("-");

Bonus puzzle: 43.
Bonus puzzle 2: find ways to make it print exactly one dash.

Magic function

What does this function do, and why does it work?

int magic(int i) {
  int j = 1337, k = 0;
  do k -= i += (i<0) + i;
  while (j *= 42);
  return k;
}

Find the dupe

Given a read-only array of length n of positive integers less than n, find a duplicate element in linear time and constant memory usage.

CD-R recycling

A CD-R can only be written once. Well, actually that's not true; you can still burn more 1's, you just cannot turn the 1's back into 0's. You have a pile of discs where no more than half the bits have been set. Devise a coding scheme which will let you use as few discs as possible to carry as much information as a new disc (the scheme has to work no matter how the bits are distributed). How many disks do you need?

Escape attempts, date sauce and half-truths

By Erling Ellingsen on September 09, 2006

Here are some solutions for the Java puzzles I posted a few weeks ago.

Some subtle and not-so-subtle Java bugs

By Erling Ellingsen on August 18, 2006
For you Java programmers out there, there are some buggy code snippets below the fold -- can you spot them all?

Summer intern in Silicon Valley

By on August 14, 2006

Even though Medallia recently opened an office in Oslo, just where I live, I opted to do my summer internship in Silicon Valley. There aren't many places as exciting as California. When you get a chance to go there, how can you say no?

    During this summer, I have:
  • Biked the Golden Gate Bridge and beyond
  • Toured Stanford Campus
  • Eaten delicious crab at Pier 39, Fisherman's Wharf as well as enjoyed Indian, Japanese, Korean, Mexican, Pakistani, Greek, Iranian, Italian and Thai food.
  • Rock climbed outdoor on Fresno Dome (7,500 feet)
  • Jumped out of an aircraft at 14,000 feet
  • Gone hiking in Yosemite National Park
  • Cruised around in Kristian Eide's awesome Corvette
  • Designed and implemented a system for catching people who cheat on Medallia's surveys, while interacting with the world-class team of engineers at Medallia

The work was as challenging as the spare time was fun. Among the algorithms that eventually made it into the system are: Shortest Path, Matrix Inversion and Great Circle Distance (!). While these algorithms were fun to implement, the real challenge was the everyday software engineering needed to make the system robust, general and easy to use.

Norwegian Students in International Mathematical Olympiad

By on July 24, 2006

Not all students take the summer off! Some of them are not content with just having the summer exams, and are willing to spend a week having more tests and challenges.

The summer internship at Medallia includes quite varied work, and apart from writing interactive css graphs, I was this July as a deputy leader following the Norwegian IMO (International Mathematical Olympiad) Team, which this year was arranged in Ljubljana, Slovenia.

The IMO is the oldest one of the International Science Olympiads, where bright pupils from secondary schools all over the world meet to test their skills and to have fun. In the beginning (early sixties), the competition was held in Eastern Europe and featured mainly European countries, but in the last years, the competition has been held in Mexico, Greece, Japan, UK and South Korea. This years 47th IMO was arranged in Slovenia, and featured 90 countries and an astonishing number of 498 contestants.

NorwegianTeam.jpgThe Norwegian Team. From left: Børge Nordli (deputy leader), Jørgen Vold Rennemo, Atle Rygg Årdal, Aslanbek Sjamsutdinov, Nils (mascot), Espen Arild Jenssen, Knut Dagestad Rand, and Vidar Klungre.

Click on "READ FULL ENTRY" below for more details and pictures.

From Web Page to Podcast

By on July 17, 2006

Autodiscover MP3 links as you browse and auto generate a Podcast RSS file you can import into a media player.
webtopodcast.jpg
Did you ever come across a web page with many MP3 links and wondered how to play those through iTunes, or with your MP3 player or iPod? If it's just one MP3 link, you can save the MP3 file to the desktop and then drag the file into your iTunes jukebox view. But what if there are 10 or 30 MP3 links? What a drag, literally, it would be to save each and import each into iTunes. Even if you did that, your files would then be scattered all over your player's library, rather than grouped into a simple, findable, titled structure, like the one your player's Podcast area provides.

A much cooler approach for playing a web page's audio files through your media player would be to have your browser detect the sound files on any web page and automatically generate a single Podcast file, which contains links to all those MP3s your browser found. Then you'd only need to import the one file into your Podcast player and you're good to go.

This hack does just that by integrating various technologies including the Firefox browser, Greasemonkey, tabs, Javascript, MP3, XML, XPath, RSS, DOM, regular expressions, CSS, a local web server and your favorite Podcast media player (e.g. iTunes).

Already know how to use Greasemonkey? Want to hack the hack?


  1. Turn on Greasemonkey (you must be using the Firefox browser of course)
  2. Load & activate the Greasemonkey script webpagetopodcast.user.js
  3. Visit any web page with sound file links.
  4. If MP3s are found, the script will display a small yellow box in the upper right corner, which indicates how many MP3 files were found and a link.
  5. Click on the link to open a new browser tab which contains your Podcast RSS XML file.
  6. Save that file to your local web server (e.g. the ~/Sites directory on Mac OS X)
  7. Import the RSS file into your Podcast reader, then drag items to your MP3 player, and you're ready to go.

I tested this script on various web pages which had MP3s scattered in various DOM arrangements and various sound file link labeling approaches. Much of the effort went into extracting what seemed like a good label for the sound file, ignoring hyperlink text such as "listen" or "play", which wouldn't make any sense in a Podcast reader. Perhaps you can find a better approach than my hack uses.

It tested well on the following examples:

Note: This script is intended for use with publically hosted and web accessible MP3's
and the resulting podcast file is intended for personal use only. To use this
script, you must visit the original publisher's web page. The functionality
contained here merely creates a link to the original content, arranged in an
XML format, and allows playback through your computer. There is no
physical difference created or implied as compared to merely playing the hosted
MP3 file with your computer's media player. The script only helps you to
categorize the audio in the convenient podcast format for local personal use.
The audio content itself is copyright by the producer of the web page through
which the original audio files are hosted.

Click on "READ FULL ENTRY" below for more details and explanation on Greasemonkey and Podcasts.

A gentler kind of smack

By Erling Ellingsen on June 15, 2006
Update 6/25: People seem to be getting the chronology wrong, so to set things straight: I posted the application here June 15th. Being busy at work, I didn't get around to posting the source code and API information. Amit posted those on June 16th.
Update 6/19: thanks to some kind help from Joe Holmes at Apple, the application should now work on older PowerBooks as well. Download version 1.1 below. Left/right are still reversed, but at least it should work.
Update 6/17: As you can see in the comments, there are some PowerBook models where this doesn't work; I'll post a fixed version in a few days.

After the (useless hack) SmackBook was released, some commenters were worried that giving the laptop a smack to the head might be bad for the hard drive, not to mention the soul.

Here's a gentler alternative:


WindowWarp

By Erling Ellingsen on May 26, 2006
Update 7/26: Someone used the screenshot below to make some fake screenshots of OSX Leopard.

I thought I might post this while there are still a number of OSX developers running around the blog. There is a nice undocumented window manager call, CGSSetWindowWarp, which lets you twist and bend windows. I played around with a few years ago, but never got around to using it for anything.
WindowWarp
WindowWarp

The warped windows are fully functional, with the exception that mouse input is not remapped. Still some work to do there.

Some suggestions for things to do with it:


  • 3D Exposé replacement: "rotate" the screen, so can you can see windows from the side and pick one out

  • Fish-eye window manager: keep full-sized windows in the center of the screen; shrink and warp when they reach the edge

  • Rotational virtual desktops: something similar to the FrontRow menu, where the windows would be on the outside of a cylinder. You could zoom out slightly, then spin the cylinder to get to the windws you want.

  • Wobbly windows: pretend that the windows are only pinned to the desktop at the top, and use the motion sensor and some simple physics to wobble the windows.

If you do something cool, please post a link here!

Full-size screenshots after the fold.

SmackBook Pro

By Erling Ellingsen on May 22, 2006
Updates below the fold

Ideal coding environment I usually keep two 20" screens side by side on my desk, so I can code on one and test on the other. I find I can work much faster if I can just make a change in Eclipse, and by the time I turn my head to the other screen, the tests have already run. My new laptop, however, has a 15" screen, which feels a bit cramped when I'm working away from the office. I've been using the fancy Desktop Manager by Richard Wareham, which is a very nice utility to let you keep several virtual desktops, and change between them easily.

Of course, if you're using something like Emacs or Butler, all your keys will be taken already, so you'll need to use some sort of Command-Ctrl-Shift-4 keystroke for the actual desktop switching.

Turns out, the laptop has a built-in motion sensor. Nominally, it's there to protect the internal hard drive. The basic idea is this: If the accelerometer suddenly notices that the gravitational pull of earth is no longer present, the most likely explanation is that the laptop, sensor and all, is currently accelerating at 9.81 m/s² towards said earth. In that case, it will (wisely) try to turn the hard drive off in preparation for impact.

It can, however, also be used in situations not involving lobbing the laptop across the room, fun though that may be.