Medallia Expands Its Recruiting Efforts to Argentina
By Erin Storm on December 12, 2008
On 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, 2008It'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- 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
iPhone and Movies Mashup
By on May 10, 2008Mashup 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.

The Run of a Lifetime
By Snorre Helvik on December 15, 2007Sometimes 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, 2007Cell 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, 2007Here'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, 2007Note (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, 2007I 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
When 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.1TopCoder Open Marathon: Robot Routing
By Øyvind Grotmol on May 02, 2007Many 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, 2007Medallia 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, 2007Instantly 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, 2007I 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, 2007Here 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, 2006I 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, 2006A 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:
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, 2006Medallia 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, 2006Three 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, 2006We 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, 2006Here 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, 2006Summer intern in Silicon Valley
By on August 14, 2006Even 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, 2006Not 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.
The 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, 2006Autodiscover MP3 links as you browse and auto generate a Podcast RSS file you can import into a media player.

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?
- Turn on Greasemonkey (you must be using the Firefox browser of course)
- Load & activate the Greasemonkey script webpagetopodcast.user.js
- Visit any web page with sound file links.
- 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.
- Click on the link to open a new browser tab which contains your Podcast RSS XML file.
- Save that file to your local web server (e.g. the ~/Sites directory on Mac OS X)
- 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:
- http://podbop.org/artists
- http://www.houstonjones.com/cds_and_samples_hojo_mojo.htm
- http://www.bloggercon.org/2006/06/23
- http://jobster.blogs.com/
- http://fuzzyblog.com/podcasts/
- http://www.nytimes.com/ref/sports/olympics/podcasts-olympics.html
- http://www.ajet-bone.com/angus/sound_movie/sound.html
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, 2006Update 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, 2006Update 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.
![]()
![]()
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, 2006Updates below the fold
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.








