May 26th, 2010
We try to be very efficient at Hear a Blog. We try to not develop a tool until we need it (although sometimes it’s just too much fun and we code it anyway). Something that have been clearly needed for some time already was a better narration panel so we created.
This tool is only for the narrators, of course, but we still wanted to share it, so here’s a screenshot of it.

Posted in Other
April 25th, 2010
We had our expectations going into Seedcamp, who wouldn’t?
It was nothing like we expected, however, but the truth is, it was something much more valuable that we would’ve thought.
Through the mentoring sessions, we realized we hadn’t done some of the things we should have before going to Seedcamp. But most importantly we found out we were doing things we didn’t need for our business, or we were doing them in the wrong order.
Thanks to Seedcamp, our roadmap changed completely, we got weeks ahead in launching our new product, Glycast, which is now going to be at the same time simpler, more focused, and more valuable.
We haven’t yet talked publicly about what Glycast is at all, and I’m glad because now it’ll be something different. We still can’t talk but there were some tweets about it that you can try to dig up if you are really interested.
Our little piece of humble advice to other teams going to Seedcamp: Go with your mind really open. It will probably not be what you expect it to be, it will be something completely different, something you don’t know you need, but much more valuable than what you hoped to get out of it.
Oh! and the trip got even more interesting thanks to the volcano.
Tags: 2010, Mini Seedcamp, Paris, Seedcamp
Posted in Other
April 12th, 2010
We’ve been selected as one of the 20 finalist for the Mini Seedcamp Paris. We are very excited about it. We are going to present our next product that for now it’s secret (hint: Glycast).
We are having very busy days while preparing for it. It’s amazing the amount of work needed for an event. It’s our first event, so maybe the second one will be only a fraction of the effort.
One side effect of preparing a 5 minute presentation was distilling our ideas to its essentials. Find what’s core and what’s a side feature. What’s worthy of mention and what isn’t. I wouldn’t lie if I tell you that this is helping shape or roadmap. One of the founders even said “I now believe more in the idea”.
Tags: Glycast, Mini Seedcamp, Paris, Seedcamp, startup
Posted in Other
March 10th, 2010
Content that is written and spoken with exactly the same words is very valuable to learn a new language and it’s actually not that common. It so happens that at Hear a Blog we have exactly that. We are friends with the people at Virtual Language School, another startup based in Zürich, so we decided to do something about it.
We created a section for learning English. This section has a very compact directory:

When you click on one of those, you are taken to a special page designed to help you listen as you read. This page shows the player on the top while on the main section you have the blog post which you can scroll independently:

If you know about someone who is learning English, pass on the information, this is a very good resource.
Tags: English, feature, learning
Posted in Announcement
March 3rd, 2010
To help bloggers understand the traffic they get in their blogcast, we created a blogger control panel.
The blogger panel shows the downloads per month, per country, most popular posts and the bandwidth. This panel is also a way for us to communicate with the bloggers and show new features we implement so they can take advantage of them.
If you are a blogger we are narrating, you should have received an email with the address of your control panel. If you didn’t, please contact us and we’ll send it.

Tags: blogger, control, feature, panel
Posted in Announcement
February 3rd, 2010
Content is global. In every corner of the world there’s people wanting to read, listen to and watch content produced in every other corner of the world. The only thing that slows it down is language; cultural differences not so much.
Advertisement is not global. A restaurant wants to advertise only to people that could actually go to it, not to people that lives across the continent. Even global companies run very different advertisements in different countries and regions. In some places, competitive advertisement (where you mention your competition) is illegal, in others it’s the norm, maybe in some it’s allowed, but considered low. Nudity is OK in some places, illegal in others. Advertisement is local.
During the old-media days, that wasn’t a problem because content distribution was local. TV, radio, newspapers, magazines could reach only people in some well defined region. Content was mixed with ads in each region and shipped or broadcasted. No issues there.
But content distribution today is global and it’s called the internet. And this seems to confuse and startle a lot of people. What do we do with ads? Do we show USA-based ads in all the world? That means that most people won’t care about the ad, and even if they do, they won’t be able to buy the products. A huge waste. The solution: let’s break the internet into regions and limit the distribution of our content. Wrong!
We are not mixing ads and content manually at a central location an then shipping it anymore. Today we have these amazing machines called computers that can mix ads and content every single time a viewer or listeners asks for the content; and every single time the result can be different. A New Yorker using a Mac listens to one ad, a New Yorker using a PC listens to another ad, a Berliner listens to another ad, and an Australian to a different ad. That is how we deliver ads at Hear a Blog. Our content is for the world, and our ad market is also the world.
Tags: advertisement, content, global, world
Posted in Other
January 7th, 2010
Processing audio is one of our core tasks. When you create a startup there are a thousand things that you could do manually or automate. Which ones do you automate? We decided to automate as little as possible. Yes, you’ve read it correctly; as little as possible.
Automating is great because you solve a problem once and you don’t have to do it ever again. If you know that you’ll have to do it again. In a startup, you don’t know what you’ll be doing tomorrow. They are higly experimetal endevours. We decided to do all the audio processing by hand; and we did it until Audacity, an excellent audio processing tool, became a recurring character in our nightmares.
We decided to automate. We picked the library NAudio because it’s free and apparently capable of doing what we need. We struggle with it at first, but it turned out there was a bug, which was solved quite quickly by the developers. Surely they deserve all the donations they can get, as soon as we are profitable, we’ll make one.
Our process is simple:
- The intro starts
- 6 seconds after that the main audio starts
- 30 seconds after the main audio finishes, the outro finishes.
That ensures the proper synchronization of our amazing intro and outro. And the code is quite simple.
First, we load the intro, the outro and the main audio:
var intro = new WaveFileReader("Intro.wav"));
var outro = new WaveFileReader("Outro.wav"));
var audio = new WaveFileReader(OriginalAudioFileName);
Then we create the mixer stream:
var mixer = new WaveMixerStream32();
mixer.AutoStop;
Out of the loaded audios we create new ones with the proper time offsets (note: the intro doesn’t need an offset):
var audioOffsetted = new WaveOffsetStream(
audio, TimeSpan.FromSeconds(6), TimeSpan.Zero, audio.TotalTime);
var outroOffset = TimeSpan.FromSeconds(6) + audio.TotalTime +
TimeSpan.FromSeconds(30) - outro.TotalTime;
var outroOffsetted = new WaveOffsetStream(
outro, outroOffset, TimeSpan.Zero, outro.TotalTime);
All our wavs are stored as 16bit, but the mixer expects 32bit wavs, so we convert them before adding them to the mixer:
var intro32 = new WaveChannel32(intro);
intro32.PadWithZeroes = false;
mixer.AddInputStream(intro32);
var outro32 = new WaveChannel32(outroOffsetted);
outro32.PadWithZeroes = false;
mixer.AddInputStream(outro32);
var audio32 = new WaveChannel32(audioOffsetted);
audio32.PadWithZeroes = false;
mixer.AddInputStream(audio32);
Pad with zeros is set to false because otherwise you end up with pretty big files. When we forgot that we ended up with a 10GB wav, not sure if we stopped it or it crashed.
Once our mixer is set up we save that wav to a temporary location
WaveFileWriter.CreateWaveFile(tempwav, new Wave32To16Stream(mixer));
tempwav is the full file name of the temporary wav. Note that we go back to 16bit wavs. After that comes the ugly part of converting to MP3 which is left as an exercise for the reader.
We hope you find this information useful.
Tags: .Net, audio, audio-processing, C#, mp3, NAudio, wav, wave
Posted in Other
December 22nd, 2009
You may have notice that we now provide links to the usual RSS, iTunes, Google (Reader), Zune and pcast (for pcast:// compatible podcatchers):

All the links were trivial to make, except Zune. iTunes took long to have proper links, because you have to submit them to Apple and, obviously, they have to approve them.
Linking to Zune has many pitfalls. Hopefully you’ll read about them here and spend only a fraction of the time I’ve spent on creating them. The format is initially quite simple:
zune://subscribe/?title=url

My first try was to URL-encode both the title and the url which resulted in two undesirable behaviors:
- The title of the podcast on the Zune dialog appeared URL-encoded. That dialog that says “Do you want to subscribe the A%20Smart%20Bear podcast?”
- It didn’t work, it claimed the URL was broken.
I’ve tried not urlencoding and instead of saying “A%20Smart%20Bear” it was saying “A+Smart+Bear”, and still not working.
I was doing all my testing and debugging with Firefox. Not sure where to go next, I’ve tried Google Chrome which shows you the command line it is about to run. That command line included hyphens to specify the arguments.

Bingo! We had hyphens in our URL and that was breaking. Zune cannot deal with hyphens in the URL.
Our solution was to replace spaces for underscores in the title to reach what we think was the most readable solution:
- A%20Smart%20Bear
- A+Smart+Bear
- ASmartBear
- A_Smart_Bear
and to replace the hyphens in underscores in our URLs and everything just worked. Thankfully our use of hyphens is no critical and changing them to underscores didn’t require a single line of code, but it could have been much worst. This is something to have in mind when you are defining your routes.
Tags: link, linking, Microsoft, podcast, podcasting, Software, subscribe, Zune
Posted in Software
July 30th, 2009
We knew this was coming since Palm announced iTunes compatibility. Both Palm and Apple are companies that are loved by many, both bringing innovation to everyone. Palm released the Pre, Apple changed the protocol, only a few hours later, to something incompatible with the Pre. Palm was able to keep up and re-enable syncing a week later. Not bad, Palm.
Now it seems the fight is going to move from the technological to the legal arena. It’s getting nasty very fast. Who is the bully? that’s easy to answer. Who is right? that’s harder. The case for Palm is: software and devices should be interoperable and there should be competition between companies. But to make the Pre interoperable, Palm is using Apple’s iPhone USB id and make the Pre look like an iPhone.
What happens when someone subverts the USB id process for a malicious intent? What if Palm makes the Pre 2 look like an iPhone and sync the removal of every song on your iTunes because Palm wants you to use the PreTunes? We are not sure if that’s technically possible, but there’s a good reason why USB devices have id numbers.
It’s not clear who’s going to win this fight, but surely more and more people are mentioning Apple and anti-trust in the same sentence.
Tags: anti-trust, Apple, iPhone, itunes, palm, pre
Posted in Device