Initiatives

Contact

Blog

A friend just asked about services that could capture all relevant events in an iOS app, whether crashes, user activity, or ad hoc metrics. I told him about how I use Crashlytics but mentioned there are a lot of very similar services. I decided to do some searching, and this is what I found in […] Read more – ‘The State of iOS Crash Reporting and Analytics in 2016’.

This is a category which adds methods on UIViewController to provide a handler at the spot that you programmatically perform a segue. This avoids a mess of if, else if, else statements in prepareForSegue:sender:. In fact, you don’t even need to implement the method at all if you don’t need do anything before the segues […] Read more – ‘UIViewController+SegueBlocks’.

When using the Web Audio API on iOS, you have run into the problem that you don’t hear anything despite it all to be be wired up correctly and no errors being thrown. There is a small notice in the Safari documentation that sounds must be triggered by explicit user action, but what does that […] Read more – ‘Playing Web Audio on iOS’.

As you may have noticed, I have stopped updating my Dutch tech meetups calendar. I’m afraid it’s just too hard to do from New York while busy with Lua. Since I know that a lot of people and sites rely upon the calendar, it’d be great if someone would be willing to step in and keep […] Read more – ‘Calendar is not being updated’.

When selecting items from a list in an iOS app, e.g. a table view of address book entries, we’ll often keep track of the selected items using a mutable container, whether an array or a set. It, follows, then that we might want to only enable the Submit button once at least one item has […] Read more – ‘Subscribing to collection changes using ReactiveCocoa’.

Here at Lua we’re using both RestKit and ReactiveCocoa in our iOS app. Today we ran into a problem: we wanted to update a UI element in a view controller based upon changes to an object retrieved via RestKit. We had something like: RAC(self.nameLabel, text) = RACObserve(user, name); However, the UI never updated! Why? Knowing […] Read more – ‘Subscribing to RestKit changes using ReactiveCocoa’.

As I mentioned at the beginning of year, I’ve been looking around for what’s next. This last few months has been a really interesting, fun time talking to a lot of interesting people about projects all over the world. I’m very excited to say that from the end of this month I’ll be working with […] Read more – ‘Next steps’.

For Fronting Motion I am exploring the use of CSS3 animations with keyframes. However, there are some gotchas associated with the persistence of the transformed properties that I only realized. To explain, consider the following keyframes: @keyframes fadein { from { opacity: 0; } to { opacity: 1; } } @keyframes moveRight { from { […] Read more – ‘(Non)Persistence of CSS Animated Properties’.

My sister asked me how to find the first Instagram post by louboutinworld. Instagram’s website has one of those annoying paginated infinite scrolling interface, but luckily, they also have an API. Here’s what I did: Opened the API Console on Instagram’s developer site and got an OAuth access token for it. Searched for louboutinworld using […] Read more – ‘Finding a user’s first Instagram photo’.

As I write this on the second day of 2014, I don’t know what I’ll be working on next week, let alone this year. While generally not an unusual feeling for me, I have gotten out of the habit after 12 months working full-time as an employee. I spent 2013 doing iPhone app development (among […] Read more – ‘Forward’.

How do you display one hundred fifty two dollars and thirteen cents with numbers? If you’re an American you might write it like $152.14, while a Dutch person might write $ 152,13. You’ll notice this if you change the international settings of your computer or phone from one country to another. But what are the rules […] Read more – ‘Formatting Dutch Currency Amounts’.

Something I just learned (yeah, yeah): SSH (and SCP and SFTP) can compress the data is sends and received, but it’s NOT enabled by default. You can enable it per call with the -C flag, or you can just enable it across the board by putting the following in ~/.ssh/config: Compression yes CompressionLevel 9 The CompressionLevel […] Read more – ‘SSH Compression’.

My earlier post on iOS code coverage reports was, if not wrong, at least sub-optimal. You still need to set Generate Test Coverage Files and Instrument Program Flow to Yes for the Debug build configuration. Instead of manually flushing the coverage data upon finishing each test, it’s better to flush it have the entire testing. Likewise […] Read more – ‘iOS Code Coverage Revisited’.

2013-11-13: I have found a better way to generate the coverage reports for all source files. As part of the testing an iOS app, I want to make sure that I am actually covering important areas of my application with tests. Xcode 5 (and previous versions) has code coverage support, but it’s not obvious. Here’s […] Read more – ‘Generating iOS Code Coverage Reports’.

This is totally last minute, but I’ll be MCing the backend development track at Kings of Code. There are a bunch of great speakers from around the world talking about all sorts fo fun stuff like real-time apps, Git, Go, and more. Hope to see you there! Read more – ‘MCing at Kings of Code’.

Come join me and Frank, an iOS developer, at our office on the second floor of the Volkskrantgebouw and just down the hall from startups like Bottlenose, Ideedock, and Spaaza. The rent is €110.35 a month per desk, including BTW. Read more – ‘3 Desks Available in My Office’.

Recently I’ve been working with Arjan on a Cordova (PhoneGap) app for AT5, the local TV station in Amsterdam. While HTML5 video tags work just fine in the app, playing a video kicks you out of the app and into Mobile Safari. Since that’s not the nicest user experience, we wanted to add a native […] Read more – ‘Cordova Native Video Plugin’.

Last Wednesday I gave a guest lecture in the course “ICT Design: Valorization and mobile applications,” part of the ICT Management and Design Masters program at TU Delft. I talked for almost two hours on my perspective on the business of app development as a freelancer and independent developer. The students asked insightful questions, and I […] Read more – ‘Talk at TU Delft’.

I’ve really loving running apps on Heroku, but unfortunately their routing mesh means that they only support custom domains on a subdomain (http://www.mydomain.com), not on the raw domain (http://mydomain.com). Luckily today I discovered an option buried in the Google Apps settings to do this: Just specify the subdomain for which you have a CNAME pointing […] Read more – ‘Heroku and Naked Domains’.

Because I couldn’t for the life of me find the information in the simple_record documentation, here’s how: SimpleRecord.establish_connection(sdb_access_key, sdb_secret_key, :server => sdb_region_domain_name) You can find the SimpleDB region URLs on Amazon’s Regions and Endpoints page. Read more – ‘Setting the AWS region when using simple_record’.

Continuing my thoughts on the continued strengths of email, I throw at the following on Twitter and got a a decent amount of interest: Here’s a (not so) crazy idea: just use email (SMTP + IMAP) as your internal message queue. Need push? IMAP-IDLE. Need fanout? Add more To’s. — Peter Robinett (@pr1001) July 24, […] Read more – ‘Email as a message queue’.

I will be giving a reprise session of my Gidsy command line workshop at Campus Party in Berlin on August 22. If you’re interested in learning how to use your computer’s command line and are in the area, please come by! Read more – ‘Command Line Workshop at Campus Party’.

Recently making the rounds is a nice article on how email hasn’t evolved along with how people use it. He makes some good points and all in a very nice looking package, but he confuses one key thing: email and email programs are two different things. The issues van Schneider outlines are all with email programs (and […] Read more – ‘Spot On And Yet…’.

Quick note for fellow Lift developers: I was happily using a Menu.param when I decided to use a Menu.params instead (see the ScalaDocs) in the hopes of both more descriptive URLs and less to calculate on the actual page. While implementing it wasn’t too hard, my new URL pattern for the menu entry was a […] Read more – ‘Using Lift’s Menu.params’.

I spent this morning cleaning up infected PHP files (yet another reason why I think WordPress needs to die), but in doing so I got to see lots of infected code. By that I mean that things like the following were inserted at the top of existing PHP files on this server anything else: 1 […] Read more – ‘Deconstructing a WordPress PHP Infection’.

Both I and my sister encountered this problem and I figured it’s worth sharing here: the applications seem to silently fail when it decides that the SSL certifications are wrong or don’t match the previous one seen. Simply go to Preferences, uncheck SSL, and reconnect. You should then be given an SSL warning and given […] Read more – ‘If iChat or Messages.app won’t connect to Google Talk’.

VSFTP is supposed to be the bee’s knees of Linux FTP servers. Unfortunately it’s kind of confusingly documented, particularly if you want to setup a virtual (ie FTP-only, not shell or system) user. Basically, follow this tutorial, but if you want to let your virtual users have full permissions and for files to be set […] Read more – ‘Setting up VSFTP with a virtual user’.

I gave a lecture on open data and cities to my friend Laura’s City Discourse class at the CMD program of the Hogeschool van Amsterdam. Rather than going too much into technical issues I discussed the politics of open data, both how it’s a contested and even controversial issue, and why students should care about […] Read more – ‘Open Data Talk at the HvA’.

Today Gawker announced that they’re letting people create anonymous ‘burner’ accounts. What is interesting is that all you have to do is pick a pseudonym and you’re good to go: no name, email, and age to input, no account verification. I think this low friction way of creating website accounts is how (almost?) every service […] Read more – ‘The end of signups’.

Chris asked how I maintain the Dutch Tech Meetups Calendar since he’s working on his own calendar for Berlin. Here’s the answer: I manually add events to the calendar, though it’s pretty easy since most are on Meetup. You could import a feed, for example the feed of Meetup events you’re attending, but I don’t attend most […] Read more – ‘How I maintain my events calendar’.

Of course, I’m not a lawyer, but I’ve used this approach and I believe that it should cover most things adequately. The situation So, let’s say you are starting a new project with some friends and you think that after investing some time and money it will eventually make some money. You’re all friends but […] Read more – ‘How to organize your project without lawyers’.

Startup incubators are all the rage right now (in fact, they might have jumped the shark ;-), and Rockstart is the talk of the town here in Amsterdam. But I was just thinking the other day, my office actually has a pretty nice record of interesting startups. Some organizations that have spent time here: Bits of […] Read more – ‘My Office Might Be the Best Amsterdam Incubator’.

The title says it all. The rent is approximately €90 ex BTW per desk and you’d be sharing the 43 m2 space with me and Tupil, aka Ben and Eelco. The desks are available because Spaaza is moving down the hall to the office I mentioned earlier, which means that the tech scene on our […] Read more – ‘Two Desks Available in My Office’.

There’s an office available down the hall from mine, right next to @ouroffice. The space is 35m² and a steal at €375/month (including super fast internet, and all taxes). It’d be great to have another startup or otherwise group of techies in the house! Read more – ‘Office Available in the Volkskrantgebouw’.

I’ll be giving my Mobile APIs: Client and server should be friends presentation (sans Daniel this time) at GeekNight. It’s part of the Microsoft’s annual TechDays conference, and my presentation will be at 19:15 on Thursday in the Hague. The presentation should be a good intermediate-level overview of API development in service of awesome mobile apps, and it […] Read more – ‘Presentation this Thursday at the Microsoft TechDays GeekNight’.

Recently I developed with Alexander Zeh an interface for an Android tablet app for the agents in an African mobile payment network. It was a pitch for the company, and while we weren’t selected we’re quite happy with our work and decided to share it with you. You can find our designs and analysis at http://bubblefoundry.com/tabletinterface/. Read more – ‘A Mobile Tablet Interface’.

Feargal had a good suggestion in response to my complaint that private repos on GitHub were too expensive, which was download old repos to Dropbox and then delete them from GitHub to make room for active ones. To do this I wrote gitback today. Enjoy. Read more – ‘gitback’.

Recently I finished a project that I’ve been working on and wanted to delivery it to the client. Unfortunately, I’ve been using Git, while they wanted me to commit the code into their monolithic Subversion repository. Of course the easiest thing would be to simply commit an export of the project into a new directory, […] Read more – ‘Tips for merging a Git repository into an SVN one’.

Oh. my. god. What a giant disaster. I’ve been raving about how awesome Tropo is at handling SMSes to everyone I talk to, but no more. Tropo expects EVERY interaction to be the in the form of a response to a request that they’ve POSTed to your API endpoint. Everything is part of a session […] Read more – ‘Tropo is broken’.

A story in pictures… The whole thing took maybe 45 minutes thanks to Foursquare and the php-foursquare library. Probably one of the best examples of the joy and power being able to program gives you. Read more – ‘Because I needed it’.

Last week I had a rather good bon mot, if I may say so: Not surprisingly, I’m not alone in thinking that it’s impossible to read text online. While I’m not a designer, let alone one with his chops, let me try to pull a Dustin Curtis. Consider an article on the BBC site: I […] Read more – ‘Is it possible to read on a news site?’.

By now if you follow me on Twitter (@pr1001, natch) or Facebook you’ve probably seen me talking about this: So the natural question is, what is Miogiro? Put simply it’s my latest personal project, a company to help you find the best way to send money from one country to another. Think of it as […] Read more – ‘Miogiro’.

Something I quickly whipped up the other day, which you can find on GitHub as a Gist. Wish you had some immutability in Javascript? Now you can! var t = {a: 1, b: 2}.immutable(); console.log(t.a, t.b); try { t.a = 3; // -> Uncaught Error: a is immutable and cannot be modified. } catch (e) […] Read more – ‘Immutable Javascript’.

Next week I will be speaking/participating in two conferences. First, on Friday November 25 I will be in Eindehoven at How Do You Do, part of the cool STRP festival. I’ll be talking app making, fundraising, and all the various other things that I ‘do’. On Sunday the 27th I will lead a breakout session […] Read more – ‘Speaking Events Next Week’.

Ruby code often has code with trailing conditionals, which can look pretty neat. person = Person.get(name) unless name.nil? (Note: I really don’t know Ruby, I just saw syntax like this and thought was cool.) So, of course I had to implement it in Scala: You get optional values: Pretty cool, no? I tried and failed […] Read more – ‘Ruby-style trailing conditionals in Scala’.

Because I’ve wasted too much time on Casbah tonight, I have to pass it on. Simply, not much is done for you automatically. Connect like this: val uri = MongoURI("mongodb://username:password@server:port/database") val mongo = MongoConnection(uri) val db = mongo(uri.database) db.authenticate(uri.username, uri.password.foldLeft("")(_ + _.toString)) val collection = db("something") If you call db.authenticate() a second time it will […] Read more – ‘Connecting to a Mongo database with Casbah’.

I just created a picture for the Miogiro Facebook page, and it took me a lot of trial and error to figure out what works. The profile is that Facebook makes you upload an image that is at least 180 x 180 px, but it then uses ugly JPEG compression on it and creates a […] Read more – ‘Making a profile picture for your Facebook page’.

I will be, in order of travel, in Portland, San Francisco, Black Rock Desert (Burning Man), Silicon Valley, St Louis (Strange Loop), Charleston, Washington DC, and New York. If you or someone you know is in one of these cities and is doing something in finance (specifically international money transfers), mobile payments, SMS, or migration […] Read more – ‘In the US from August 19 to September 29’.

I have taken over the reigns of CocoaHeads NL from Cathy Shive and the first event of the relaunched group will be this coming Tuesday, 16 August 2011, at 19:00 at de Waag. Daniel Salber and I will presenting an accelerated version of the mobile APIs talk we gave a few weeks go at the […] Read more – ‘CocoaHeads NL on August 16’.

Someone just emailed me saying he was looking to leave his job as a Ruby on Rails developer and team lead and become a freelancer and asked for advice. This is what I wrote: I would say just register an eenmanszaak (sole proprietorship) at the KvK and get a business bank account so you can […] Read more – ‘Advice on becoming a freelancer’.

CSV, or comma-separated values, is a non-standard which due to its apparent simplicity people think is a good data interchange format. It’s not. In this blog post I will attempt to tell you more than you ever wanted to know about CSV. tl;dr: CSV is a a HORRIBLE ‘format’ and should NEVER be used. You will regret […] Read more – ‘On CSV’.

Daniel Salber and I will be giving the next Appsterdam Weekly Wednesday Lecture on mobile APIs. The talk is on Wednesday July 27 at 12:30 at Vijzelstraat 20, Amsterdam. Here is our talk description: Many mobile apps get data or send data to a server. What are the issues in implementing this kind of apps? […] Read more – ‘Mobile APIs Talk Next Wednesday’.

First, Bottlenose and moving down the hall to their own office next to @ouroffice. That means that there will be two desks available in my office from August 1. The price is approximately €95 per desk per month. Second, EHGZ is moving out of the office next to mine. Their space would be great for […] Read more – ‘Office Space in the Volkskrantgebouw’.

One of the hot new Javascript libraries is Backbone.js, a sort of client-side MVC framework, so I decided to take it for a spin for Where’s My Bike. First, it also introduced me to Zepto, which I love. Second, its system of Models, Collections, and Views are quite powerful but it’s a real hassle to have […] Read more – ‘Backbone’.

Reposting from the Lift mailing list. For some time know I’ve been thinking about how cool it’d be to be able to essentially write Javascript but with all the Scala goodiness behind the scenes. Lift already has abstractions for more common Javascript language elements, so I have suspected that it could be used as the […] Read more – ‘Towards a Scala DSL for Javascript’.

I’ve been going to a lot of hackathons recently and one thing that often jumped out at me is how bad many developers are at demoing their hacks at the end of the events. For those that aren’t hackathon regulars, they are events where developers get together for a day or two to make quick […] Read more – ‘How to demo’.

Two weeks ago I attended CPH Scala and gave a little presentation on ‘hacking in Scala’. As I see it, that means just using Scala for all sorts of projects, from bigger ones to little utilities thrown together in an hour or two. In general I’m quite happy with things, though I am always looking […] Read more – ‘Hacking in Scala’.

For some reason it seems like when you access the internet wirelessly you’re asking for trouble: invariably you’ll run into flakey WiFi connections and weird cellular data problems. There are are two problems that I frequently encounter, WiFi networks hijacking your requests so you log into their site first and cellular data ‘accelerators’ messing up […] Read more – ‘Working Around Bad Mobile Proxies’.

It happens all the time: someone thinks they have a great idea and all they need is a developer to implement it and internet riches will roll in. Recently someone sent me a (nice and very reasonable) email about how they had been developing their idea and now were looking for developers. Their efforts to […] Read more – ‘Idea Guy Looking for Developer’.

I’m really unsatisfied with the current blogging/simple CMS options out there right now. I use WordPress myself but and its API is the perfect proof of why people hate PHP. Here’s what I want: Simple output (static pages?), simple input (admin section more like Tumblr’s than WordPress) Easy to organze stand-alone pages vs in a […] Read more – ‘No BS Blogging System’.

At the Next Web Hackathon I whipped a fun little tool called Chaos Monkey. Inspired by Netflix, I made a Scala program that randomly takes up and down your AWS EC2 instances. Why would anyone do that? Simple, to design for and work around failure. And it’s kinda funny! It’s early days but perhaps you […] Read more – ‘Introducing Chaos Monkey’.

“Where’s my bike?” Unfortunately that’s a question you hear all too often here in Amsterdam. For the Apps for Amsterdam competiton Alexander Zeh and I whipped up a cute little mobile web app called Where’s My Bike? to help you out. You can find it at http://labs.bubblefoundry.com/wheresmybike/. Don’t forget to add it to your iOS […] Read more – ‘Where’s My Bike?’.

I attended a workshop bringing together architects and coders to discuss the Internet of Things put on by Archis/Volume. It was an interesting event and it was fun to have a chance to share and reflect upon my experiences at EQUAL. However, the biggest thing I took away from the workshop is that architecture is […] Read more – ‘Ripe for Disruption’.

In doing Python development I’ve found that pyflakes is a great tool to catch stupid errors before I’m halfway through a long run and it fails. However, it only runs once. Inspired by sbt’s ~ option, I whipped up a generic Python program to call another program whenever one or more of the given files […] Read more – ‘Watcher’.

Recently I’m been working on a single sign-on system (SSO, in the biz) and this week I added support for logging into the SSO via the Facebook Login Button. It’s cool that you can have a user log into you website using Facebook but as it stands there are a few… unfortunate… aspects to the system, all […] Read more – ‘The Facebook Login Button and logging into your webapp’.

You can use locale to localize things like Python’s datetime module. However, its defaults aren’t always the nicest. For instance, for Dutch is defaults to ISO while I prefer UTF-8: >>> locale.setlocale(locale.LC_ALL, 'nl_NL') 'nl_NL' >>> locale.getlocale() ('nl_NL', 'ISO8859-1') >>> locale.setlocale(locale.LC_ALL, ('nl_NL', 'utf8@euro')) 'nl_NL.UTF-8' >>> locale.getlocale() ('nl_NL', 'UTF8') As you can see, for some reason ‘utf8@euro’ […] Read more – ‘Setting Locales in Python’.

For a while now I’ve been thinking about teaching people how to program and believing that the basics aren’t that hard. Of course, I’ve been programming for a while now, so it’s not surprising I’d think so. I put my money where my mouth was, so to speak, and taught an introductory lesson at the […] Read more – ‘Introduction to Programming’.

If you’re not on the Lift mailing list you might not know that I am organizing a little meetup this Wednesday January 26 at 19:00 at Café Kobalt here in Amsterdam. If you’re interested in Lift, Scala, or just web frameworks in general, come on by! Read more – ‘Amsterdam Lift Meetup’.

Maybe I’m alone in this, but there are several things that bother me about password fields in login forms. First, do we really need to have those silly dots obscuring the characters you type? It just makes it harder to check that you typed a difficult password correctly. Invariably what I end up doing is […] Read more – ‘Password Fields’.

I guess I don’t talk often enough about my client work but I do have a recent project to show: Film1, a Dutch premium movie and sports broadcaster, hired me to update the television show listings on their home page. Mostly I’m just using some CSS-styled divs and jQuery to show the different daily schedules, […] Read more – ‘Film1’.

The problem is that ICT4D [Information & Communications Technology for Development] assumes the very results it seeks to achieve. The human intent and competence ICT4D aims to generate must already be in place for the technology to work. But if developing economies had the capacity, there would be no need for an external technology push: […] Read more – ‘“Can Technology End Poverty?”’.

My friend Marston asked last night if PhoneGap was a better solution for cross-platform mobile app development than Rhodes. We ended up discussing PhoneGap a bit and I thought it would be useful to share it here: Marston: I’m looking at both solutions, but am leaning toward PhoneGap as it seems to be more complete […] Read more – ‘On PhoneGap’.

I just learned about jrunscript, which is a Javascript console and interpreter distributed with Java 6, so chances are you already have it. In fact, it is a general purpose interpreter and you can select another language with the -l flag if it is in the classpath. The -q flag lists the currently installed languages. […] Read more – ‘jrunscript’.

From what I understand: Native JSON methods don’t exist. Web SQL Database and Web Storage (things like localStorage, etc) aren’t supported. More as I find them. What do this all mean? In short, good luck making an advanced HTML5 web app for Android versions below 2.0, which unfortunately is still many devices. Read more – ‘WebViews in Android Versions <= 1.6’.

I’m very happy with avd and plan to continue improving it, but I though it would be worth pointing out the many of the device manufacturers actually have SDK add-ons that provide skins and device profiles like avd does. Of course, theirs tend to be locked behind screenfulls of legalese, but hey, what can you do? In no […] Read more – ‘Android SDK Add-Ons’.

I had some trouble installing an Android app I was testing today over the internet so I used the SDK. I’m working with a tester with a Windows machine who didn’t have the SDK, so I wrote up the steps so they could do the same. It’s essentially the same on OS X or Linux. […] Read more – ‘Installing Android Apps via USB using the Android SDK’.

The Android Emulator supports different virtual devices, including with interface skins, so you can test your apps on different ‘devices’ before actually transferring it to an Android device. These definitions are created with the command android create avd but unfortunately there’s no shared repository of device information and only a few walkthroughs. I stayed up […] Read more – ‘Generating Android Virtual Devices’.

Ok, maybe ‘agency’ isn’t the best word but bear with me. I see a lot of job openings, whether for freelancers or full-time position, and at the same time I know a lot of freelancers, who by the nature of their profession are (almost) always looking for work. I love helping my friends and have […] Read more – ‘An Agency for Web Freelancers?’.

Some of you may not know this but my background is actually not in computer science: I have a masters degree in European politics and edited a pan-European magazine on art, current affairs, and travel. As I’ve poured myself into the tech scene in Amsterdam I haven’t had much opportunity to look beyond web startups, […] Read more – ‘Introducing the Seattle Project’.

Because I love making stupid little libraries I’m proud to present CAP, “CAP is an experiment is stateful PHP form handling.” As you can see, closures are bound to form elements. Pretty cool, no? PHP 5.3+ only. Read more – ‘CAP’.

PHP 5.3 has added support for true anonymous functions and closures. Unfortunately, there are a few gotchas. The main one is that no variables are automatically enclosed: you must specify the variables you want to enclose. So, this will cause an exception: $a = 2; $f = function($i) { return $i + $a; } $f(1); […] Read more – ‘PHP Closures’.

Over the last few iTunes revisions there have been several changes that, in my opinion, have made the iTunes user interface slightly less usable. Luckily, almost all the changes can be reversed by changing the right property values. Here’s the Bash function I wrote today so I can toggle the settings without remembering the special […] Read more – ‘Tweaking iTunes Settings’.

A friend just emailed me saying he’s helping a successful American daily coupon company recruit people in Amsterdam and Munich: i have friends in common with their HR and they’re contracting me to look for suitable candidates as part of their massive european expansion, starting with germany and the netherlands. they will be filling various […] Read more – ‘On daily coupon companies’.

Peter Robinett – Quantifiying productivity from Quantified Self Amsterdam on Vimeo. Above is the talk on how I track my productivity I gave this Monday at the first every Quantified Self Amsterdam meetup. It was a lot of fun and I think my presentation went quite well considering that I literally spent five minutes preparing. Read more – ‘My Talk at Quantified Self Amsterdam’.

There are many great things going for Python but I find its type system to be rather wonky. Most people will direct you to use the type() function to determine types: >>> type([]) <type 'list'> >>> type([]) == type(list) False >>> type([]) == type(list()) True >>> type([]).__name__ == 'list' True However, in everyday use isinstance() […] Read more – ‘Types in Python’.

Recently I’ve been working on a project for Mediamatic (hopefully more later) and a key part of my work involves using the REST API for their AnyMeta community management system. Unfortunately there isn’t a lot of documentation out there either for AnyMeta in general or for its API in specific. There’s the user guide if […] Read more – ‘Introduction to the AnyMeta API’.

I guess now would be a good time to mention that I was one of the local jury members for the Vodafone Mobile Clicks contest. The winner will be announced on stage at Picnic next week: see you there? PS If you were a Dutch entrant and would like some feedback, drop me a line. Read more – ‘Vodafone Mobile Clicks’.

Javascript arrays have an inArray() method that tests for the existence of a search object and returns its key. However, sometimes you don’t want to test for an exact match. I wrote a little function that will test a regex instead. Like inArray() it returns -1 if none of the elements satisfy the condition. function […] Read more – ‘regexInArray’.

I’ve been slowly assembling a set of common mathematical functions in a Javascript library called MathPlus. Tonight I added support for vectors. Check it out and let me know what you think. Read more – ‘MathPlus’.

This is a big one, so hold tight! One of the most common tasks in any application, on the web or otherwise, is logging. The list of uses for a good log of events occurring within your application ‘space’ is practically infinite, but at the simplest we can say that a log lets the developer […] Read more – ‘Grammar-Based Event Logging’.

I’ve been doing a bunch of PHP programming the last few weeks for a client and it’s been such a pain to use PHP’s archaic array_* methods. And don’t get me started on having to return arrays like array('result' => 'not_ok', 'message' => 'User not found') to indicate success or failure. I had some time […] Read more – ‘BFCollections’.

I made this a month or two ago but I forgot to mention it here: Jacob Biljnai of Tumblr was complaining on Twitter that there wasn’t a Javascript-based image resizing API so I made him one using App English, Imajs. Enjoy. Read more – ‘Imajs’.

I’m using Twisted for a project and the default sudo easy_install twisted was giving me errors. It turns out that my default Python install, via Fink, was built for the i386 architecture while Twisted was trying to link to its libraries using the x86_64 architecture, for which it does not have libraries built. sudo ARCHFLAGS='-arch […] Read more – ‘Installing Twisted on OS X’.

There are now two seats available in the office in the old Volkskrantgebouw on Wibautstraat. You’d be sharing a 45 m2 room with me, Eelco, and Sjoerd. We’re nice, friendly coders and don’t cause a lot of fuss. It’d be nice if you were there same, though being a coder isn’t a requirement by any […] Read more – ‘Seats Available in My Office’.

I gave an introductory presentation on Lift last night at DuSE VI. You can download the pretty PDF or view in on Slideshare. And guess what, it’s already out of date: 2.0 is now out! Read more – ‘Lift Presentation at DuSE VI’.

Last night I discovered that Scala’s RichString has a format method quite similar to Python’s. However, in Python I’m used to using the % operator and I wondered if I could use the same syntax in Scala. With a little library pimping and help from my friends on Stack Overflow, I can: class BFString(s: String) […] Read more – ‘Fun with Scala Implicits’.

On my Slicehost virtual server (signup with my referral link) I originally set up Apache as my web server, with a bunch of virtual hosts to manage serve different domains. This has worked well but I am now working on projects (namely Lift apps running in Jetty) where Nginx is a much better solution. So, I […] Read more – ‘Nginx Sitting in Front of Apache’.

At the Dutch GTUG HTML5 Hackathon I decided to make an HTML5 TV. My HTML5 TV uses a whole grab bag of hot web features: CSS 3, SVG, the canvas element, the video element, and HTTP live streaming video. In theory the TV works in all of the most recent versions of the Safari browser variants. […] Read more – ‘HTML5 TV’.

This week I’ve been messing around with the HTML5 video element and have discovered you can do some pretty cool stuff. For instance, Mozilla shows how to do greenscreen image replacement while a video is played. This is very cool but there’s an annoying intermediate step required: since you cannot directly fetch raw frame image […] Read more – ‘HTML5 Video Transformation’.

Startups like to talk about failing quickly, which is basically the idea that you get your business out there as soon as possible so when you inevitably have to change directions you haven’t wasted a lot of time and work. It makes a lot of sense. However, you can even apply the practice to your […] Read more – ‘Failing Quickly’.

You may have noticed that I have been in Silicon Valley a fair bit this past year, but I am now back in Amsterdam 100%. I’m looking for cool projects to work on, so if you’ve got a cool web development or mobile project and need some help, drop me a line at peter@bubblefoundry.com. Read more – ‘Hire Me!’.

JGit is the Java library that the EGit Eclipse Git plugin uses. Too bad there seems to be absolutely no documentation and the source code is next to impossible to find. Here’s the URL to browse the repository: http://egit.eclipse.org/w/?p=jgit.git;a=tree;h=refs/heads/master;hb=refs/heads/master Read more – ‘JGit Documentation’.

Software version numbers tend to be in the format ‘Major.minor.point’, which makes sorting versions require a little bit of work. If we only had a single dot we could just convert them to numbers and use < and >. However, we often don’t and sometimes people put letters in their versions also, like ‘1.2.A’. Here’s […] Read more – ‘Comparing Software Version Numbers’.

Why yes, yes I did! Introducing pointy.js. Pointers, trees, circular linked lists, they’re all there. It’s been a decade since I used pointers in C++, so please bear with me if there are problems. Gentle corrections welcome! Read more – ‘You got pointers in my Javascript!’.

How do you find the minimum, maximum, and average of values of a set of samples over time? What if some of your data sources are unreliable and prone to drop in and out? Should you group them into regular buckets, even if that may mean multiple samples from source A and none from source […] Read more – ‘Aggregation Strategies’.

From the Mozilla Javascript Glossary: primitive, primitive value A data that is not an object and does not have any methods. JavaScript has 5 primitive datatypes: string, number, boolean, null, undefined. With the exception of null and undefined, all primitives values have object equivalents which wrap around the primitive values, e.g. a String object wraps […] Read more – ‘Javascript Primitives’.

At the end of last year I found myself with a bunch of advertising credit for the Amsterdam newspaper Het Parool and no pressing need to advertise my business (you’re already here on the Bubble Foundry blog, right?). So, my friends and I decided to have some fun and make it into an art project, […] Read more – ‘Artvertentie’.

What is a function? While many use the words ‘method’ and ‘function’ interchangeably, more mathematically-inclined programmers make a distinction between functions and methods based on between you are guaranteed a return value. Scala is one programming language that makes a distinction between functions and methods (though it’s actually pretty easy to jump between the two). […] Read more – ‘My latest Scala-inspired Javascript library: pf.js’.

I was just pounding my head against what turned out to be a simple Javascript misconception that I hope I can save people from: in tests for the existance of a key, not a value, in an object or array. So the following work: var myObj = {1: "one", 2: "two"} 1 in myObj // […] Read more – ‘A Subtle Javascript Mistake’.

I’ve been recently chatting with the creator of match-js about how his library and caseclass.js might work together and I ended up writting quite a bit about case classes. Enjoy. Scala is a newish object-oriented/functional hybrid language that runs on the JVM. It actually takes a lot of concepts from Erlang, such as its actor […] Read more – ‘Introduction to Case Classes’.

I’m often surprised how little web developers know about the HTTP protocol. I’m by no means an expert (feel free to correct what I write in the comments!) but I think I know a fair bit and I’ll outline the basics here. Why does it matter? What if you’re a frontend developer doing AJAX calls? […] Read more – ‘HTTP for Web Developers’.

Recently I was trying to execute the following Javascript with jQuery: $("#someid").append("<div>...&deg;C</div>"); I was going crazy because it worked (a degrees symbol – ° – was shown) on one page but not another, where nothing was displayed or returned by the append method. After much frustration I stumbled on a solution and I’m sharing it […] Read more – ‘HTML and XML Character Encoding Gotchas in Javascript’.

Check out the blog post Google LatLong: Evolving the look of Google Maps and I’m sure you’ll agree that Google Maps is by far the most usable and aesthetically pleasing online mapping service out there. Read more – ‘This is why Google Maps is so good’.

I just was asked to review a book proposal for the first time, and it is on Scala. This got me thinking about what Scala books are there. First, there’s the Bible, Programming in Scala: A Comprehensive Step-by-step Guide by Odersky, Spoon, and Venners. I haven’t read this but I understand it’s a beast and […] Read more – ‘Scala Books’.

Do you have a app in the iTunes App Store with spaces in its name and can’t seem to make a correct deep link? The format is itunes.com/app/word1word2…wordn. For example, itunes.com/app/smakelijkamsterdam. Read more – ‘iTunes App Store Links’.

I do lots of searching through source code with grep, so I wrote a little helper: #!/bin/bash if [ -z "$1" ]; then echo usage: $0 query exit fi grep -r $1 . | less I added the following line to my .profile and now I can call it easily from anywhere: alias pgrep="bash /Users/peter/pgrep" Read more – ‘pgrep’.

With all my recent Javascript experiments, I wanted a browser-independent Javascript console more and more. I found Rhino and have been using it for the last month or so. It’s proven pretty useful, and it was quite easy to install: I simply copied js.jar to /usr/local/rhino/ and then added the following to my .profile for […] Read more – ‘Javascript Console’.

I just pushed actor.js to GitHub. It’s an easy-to-use wrapper of Firefox 3.5’s Web Workers, giving you a nice way to pass messages between threads via Actor objects which can listen to other Actor objects. It’s inspired by Scala’s Actor library, though beyond the name there’s probably nothing much in common – mine is surely […] Read more – ‘actor.js’.

Recently I have posted notices about Equal Networks looking for visualization and Lift and Scala help. Perhaps I was too oblique in my wording, but in my mind “very young startup” means “practically no money.” Several who responded to my postings were looking for well-paid positions, whether contract or as an employee. While I appreciate […] Read more – ‘Thoughts on Job Posting Responses’.

As you can see on the side of the page, I need your votes! I submitted a SXSW panel on the European startup scene and I’d love your support so we can go to Austin next Spring and tell everyone what’s up! Read more – ‘Vote for Me!’.

Do you know the YDN Map? Do you know about the Yahoo! Developer Network at all? I hope you do, because the maps are fantastic visual introductions to all the services Yahoo offers developers and how they relate. You can also draw interesting conclusions by comparing it to past versions. Read more – ‘The YDN Map’.

I’m really excited about how option.js and caseclass.js are coming along. I just committed a bunch of additions, with case classes now supporting simple extractors and options now iterable. Read more – ‘Javascript Coolness’.

I’m really liking Scala and its premiere web framework, Lift, so if you’re interested in building web apps in a language that mixes functional and object-oriented paradigms well and does cool concurrency stuff, check them out. As I’ve been really getting into Javascript this year, I’ve been seeing a lot of parallels between Scala’s functional […] Read more – ‘Scala and Javascript’.

I am working in Silicon Valley this summer. If you need to reach me, please email me at peter@bubblefoundry.com. Also, since I am out of Amsterdam, I’m not using my office and am looking for renters. Read more – ‘Silicon Valley’.

This morning I whipped up a quick script to crossfade between two divs using Prototype and Scriptaculous. I’m using in a project to replace a div with another loaded via AJAX. Check out crossfade.js on GitHub. Read more – ‘crossfade.js’.

In my previous post I described how to use Google’s federated login to get an oAuth access token. Now that we’ve stored our access token, we’re going to want to use it in future requests to access the user’s data. Here’s how: # set up service gdata_service = gdata.service.GDataService() gdata.alt.appengine.run_on_appengine(gdata_service) gdata_service.SetOAuthInputParameters(gdata.auth.OAuthSignatureMethod.HMAC_SHA1, settings.GOOGLE_CONSUMER_KEY, settings.GOOGLE_CONSUMER_SECRET) # build […] Read more – ‘oAuth on App Engine, Part 2’.

Travis is leaving us for an awesome job at Frog Design next month, so we are now looking for a new officemate starting from June 1. Do you want to share an office with 3 techy guys in the old Volkskrantgebouw for just a little over €100 a month? If so, please get in touch: […] Read more – ‘Officemates Wanted!’.

Building on my previous post, here are some things I learned today while working to get OpenID and oAuth playing nicely with Django on App Engine. While App Engine has a very nice login system that hooks seamlessly into Google Accounts, gaining access to the user’s data via one of the Gdata feeds requires an […] Read more – ‘OpenID and oAuth on App Engine’.

This was quite tricky for me, so I’m writing this down to share it with others. Install the SDK Simply download the SDK and install it. On Mac OS X that meant that I mounted the disk image, dragged the SDK app to my applications directory, and launched it. Make sure to give the app […] Read more – ‘Installing the Google App Engine SDK and Django 1.0.2’.

I gave my first ‘professional’ presentation today at the Mashup Day of the Dutch public broadcasters in Hilversum. I was the first speaker and hopefully got people in the mood, inspired to build mashups and equiped with a better sense of how to go about conceptualizing them. You can view my presentation on Prezi or […] Read more – ‘Mashup Day Presentation’.

I’m one of the organizers of the Mobile Widget Camp on May 2. The free event is taking place at Pakhuis de Zwijger, Amsterdam. Daniel Appelquist (Vodafone Betavine), Peter-Paul Koch (Quirksmode), and Elliot Kember (Carsonified) are among the speakers in the morning, so you’re guaranteed to get a great introduction to Vodafone/Opera widgets. Beside these […] Read more – ‘Vodafone Mobile Widget Camp’.

Did you know that I’m organizing a Mobile Dev Camp next Wednesday on April 15 as part of the Next Web Conference? It’s a free BarCamp-style unconference and we’ve got a Hackathon with great prizes from Forum Nokia, so there’s no excuse for not coming! And don’t forget to signup! Read more – ‘Mobile Dev Camp at the Next Web Conference’.

Or, should I spend a month in Silicon Valley soon? May 19-21 is Where 2.0 May 27-28 is Google I/O June 8-12 is WWDC All nice events and ones that are relevant to the work I’m doing but not cheap… Will you be at any of these conferences? Read more – ‘Conference Season’.

Google says it very succinctly: “HTML5 and WebKit pave the way for mobile web applications.” HTML5 is coming and it has a lot of interesting features, from audio and video support to local storage. Combine this with the fact that web apps are a particularly attractive way to reach many mobile platforms and the WebKit […] Read more – ‘HTML5’.

In the hope of encouraging some web-driven serendipity, I’m posting this to note that I will be at SXSW Interactive in Austin, Texas from tomorrow, March 12, to March 18. Please email me at peter@bubblefoundry.com if you’d like to meet up. Hope to see you there! Read more – ‘SXSW’.

Little known fun fact: I often make blueberry pancakes for Mobile Dev Camp attendees. Someone sent me an email telling me that they’ve been dreaming of my pancakes for the last six months since they had them at the iPhone Dev Camp and could they please have the recipe. How could I refuse! 1 1/2 […] Read more – ‘My Blueberry Pancake Recipe’.

Over the past few months I’ve become both more comfortable with Javascript and more impressed with what is possible with the language (more on that, with an example, in a few weeks). Doing lots of work with web application frameworks, I’ve become convinced that writing a framework entirely in Javascript would be both possible and […] Read more – ‘Introducing jsFrame’.

Have you heard the news? Mobile Dev Camp is going international with MDC Helsinki on February 21. The team has an exciting day planned, so if you’re in Finland or the Baltics (or up for the trip), please come on by! Read more – ‘MDC Helsinki Is Coming!’.

I just discovered that the email address thefoundry@bubblefoundry.com has not been working for some time. If you tried to contact me at this address, my apologies. It is now working again. Read more – ‘Email Problems’.

The guys from bright.tv made a nice video. I’m afraid they don’t make it easy to embed their videos, so you’ll have to watch it on their site. I make a brief appearance about 30 seconds in. Read more – ‘bright.tv at Android Dev Camp’.

Android Dev Camp Amsterdam was a big success. Thank you to the 250 attendees for coming, Kumpany for planning everything and T-Mobile for initiating and supporting the event. Also, if you were the person who emailed me in Dutch about building an app (that’s all I remember), I’m sorry but I seem to have completely […] Read more – ‘ADCA a Huge Success’.

Photos of me with the giant Android statue at Google HQ have been getting a lot of love lately. It just goes to show the benefits of a fun picture and Creative Commons licenses. This one is my favorite: Read more – ‘Going Viral’.

I’m very excited to announce that we are putting on an Android Dev Camp on January 8, 2009 in Amsterdam. It should be a lot of fun, so you should definitely come. Hopefully this will make up for not posting at all about Mobile Dev Camp, an awesome event I organized in Amsterdam at the […] Read more – ‘I ♥ Android’.

It’s pretty obvious who’s winning the battle for user attention. I really love Yahoo services such as Upcoming and Flickr but you can’t lose site of the fact that most of them are niche services. Read more – ‘Google versus Yahoo’.

I was just at Slush Helsinki, a fantastic startup conference, and I learned about some regional startup blogs: ArabCrunch – Arab world Deutsche Startups – Germany. I made a translated RSS feed for those of us who aren’t native speakers. Plus, I hope you already know: ArcticStartup – Nordic and Baltic countries. My good friend […] Read more – ‘Regional Startup Blogs’.

For some reason I have run across a lot of Google Maps mashups in the last 24 hours ago dealing with the less happy side of life. In fact, they (almost) all show recent or event real time events. Some examples: Public911.com plots 911 calls in Seattle as they happen. Alarmeringen.nl shows emergency calls throughout […] Read more – ‘Maps of Human Tragedies’.

I am looking for an intern to help me organize various events for the Dutch startup world such as more Lunch 2.0s, another iPhone Dev Camp, and a trip to the Slush Conference in Helsinki in late November. I believe that it would be a great opportunity for a student interested in event planning and […] Read more – ‘Looking for an Intern’.

First HEMA’s Rube Goldberg-esque site won rave reviews and now Nintendo is getting lots of press for a YouTube page advertising Wario Land that gets progressively destroyed, with UI elements flying off every which way and getting smashed. Read more – ‘Destroying the UI’.

I am so excited about Jailbreaking Picnic. It’s today (Thursday September 25) at the Westergasfabriek. A bunch of Amsterdam startups setting up a huge party on the public park right in front of PICNIC and showing that you don’t need money to kick ass. I hope it doesn’t sound silly to say that I’m really […] Read more – ‘We Need This’.

I am part of the Hot 100 ‘up-and-coming creative media talent of the Netherlands’ and will be at the Picnic Conference in Amsterdam on September 25. Since there’s 100 of us, I think it’s mostly just a networking event. Either way, I’m excited to be part of the day. On October 2 I will be […] Read more – ‘Public Appearances’.

We had the iPhone Dev Camp yesterday at Mediamatic and I think that overall it was a big success. We had 80+ people packed in and coding throughout the day. While most of us were beginners, I think we laid the groundwork for an exciting mobile development scene. Today was spent recovering from the event […] Read more – ‘Time For A Pause?’.

I currently share the office with three friends but at least one (maybe two) of them can no longer use it and would like to find someone to take his place. Our 45 m2 office is on the second floor of the Volkskrantgebouw, in the northeast corner facing Wibautstraat. The rent per person is approximately […] Read more – ‘Work With Me’.

A friend doing a research project at LSE sent me some questions about the relationship to culture and entrepreneurship. I think my answers might be interesting, so I’m reposting them here. Please describe your past or current internet projects. Currently I make websites for startups under the moniker Bubble Foundry. I’m very passionate about improving […] Read more – ‘Culture and Entrepreneurshop’.

PHP does some funny things when typecasting strings as integers and may not work the way you would expect (to be fair, it is documented). Here are some examples running under PHP 5.2.5 from the Mac OS X command line: php -r 'var_dump((int) "agbae");' int(0) php -r 'var_dump((int) "zzzzzzzzzzzzzzzzzzzzzzz");' int(0) php -r 'var_dump((int) "2agbae");' int(2) […] Read more – ‘Typecasting Strings to Integers in PHP’.

The Two Thirds Rule is very simple: for all the people that sign up for a free event, only 2/3 of them will attend. This has been true at all the Lunch 2.0s and BarCamps I organize (BarCamp Amsterdam IV being the exception) and I know it was also true at the TechCrunch/eBuddy Meetup. I […] Read more – ‘The Two Thirds Rule’.

This Friday sees Lunch 2.0 visiting Utrecht for the first time, where will be hosted by iDiDiD. On August 22 we have a Lunch 2.0 at Sogeti in Diemen. Finally at the end of the month, I am hosting an iPhone Dev Camp on August 30 at my office. We’ve had a huge response to […] Read more – ‘Upcoming Events I’m Organizing’.

Multilink is a very simple Javascript library that creates tooltips with multiple links per ‘normal’ link, its simplicity due to Prototip2 and Prototype. Why have one link when you can have ten! Check out the Multilink page for an example. Read more – ‘Multilink’.

Unfortunately an all too common problem with Subversion is accidentally deleting the .svn directory used to track changes on a working copy. The accepted solution seems to be to check out to somewhere else the directory to which .svn belongs and then copy the new .svn directory into where the working copy’s should have been. […] Read more – ‘Repairing SVN Working Copies’.

Closed standards are an oxymoron and any standard that is closed is moronic. This is going to be a rant, so bear with me…. How can you call anything a standard when you don’t make the standard readily available? What is the point of a standard that no one can implement? Unfortunately, many ‘standardized’ audio […] Read more – ‘From the Laboratory: Closed Standards’.

I apologize for writing this after the fact, but last Saturday I was proud to host BarCamp Amsterdam IV at my office. The event was a fabulous success, with people from six countries (Netherlands, Belgium, UK, Sweden, Finland, and Romania) attending, including several startup founders who had presented at The Next Web Conference. Building on […] Read more – ‘BarCamps’.

Yes, there are startups in the Netherlands, as proven by the many in attendance at The Next Web last week. I’ve been gathering a list over the last month, and I now how a list of almost 40 companies. I’ll admit that CrunchBase coming to Europe has also forced my hand. So please, check it […] Read more – ‘Startups In The Netherlands?’.

This is the first in a series of posts on technical issues related to web site development and making user-friendly websites. These will focus on the technical details of developing web sites and applications so will probably be interesting to only a subset of readers. Within the next few months, time permitting, we will be […] Read more – ‘From the Laboratory: Image Resizing and Thumbnail Creation’.

I rent my office in the Volkskrantgebouw as part of the Honderdhandigen group. We are having an opening party on February 1 and I invite anyone interested in the building to come by and check it out. With Lunch 2.0 at eBuddy at noon, I’ve got most of your day planned out for you! Read more – ‘Honderdhandigen Party’.

Thank you to everyone who came to the first Lunch 2.0.nl last Friday at Hyves. We had a great turnout and I think we are at the start of something good. To see more, I am uploading some photos to Flickr, as have many others. Merieke Hensel videotaped the Hyves presentations. PS My apologies to […] Read more – ‘First Lunch 2.0.nl A Success’.

I am pleased to announce Lunch 2.0.nl, the Amsterdam branch of the Lunch 2.0 series of lunches at technology companies. Please check out our website for more information and to sign up for our first events, which are at Hyves and eBuddy. Thanks to Robert and Mathijs for their help! Read more – ‘Lunch 2.0.nl’.

Every week I attend a get-together here in Amsterdam called OpenCoffee. The regular crowd includes people from Fleck, Wakoopa, IRL, and more. It’s a nice scene and everyone there has caught the entrepreneurial bug and is looking to develop web companies. However, one significant challenge that many face is getting their ideas built. This is […] Read more – ‘OpenCoffee’.

My first posts to this blog focused somewhat narrowly on some principles of web design but recently I find myself advising people just as much on the ‘why’ of websites as the ‘how’. Therefore this blog’s focus will broaden a bit, and I will also be posting about where I see the web is going. […] Read more – ‘Going Dark, or The Fading Appeal of Living Online’.

In the latest issue of Sprout, a Dutch magazine for entrepreneurs, there is a big piece about 25 entrepreneurs under 25. First, congratulations for Robert and Wouter for making number 1 with Wakoopa. However, beyond Wakoopa I find few of the companies that interesting (Symbaloo did catch my eye). While all the businesses look decent […] Read more – ‘25 Dutch Entrepreneurs Under 25’.

I was talking to a graphic designer the other day and his first response to hearing my prices was, “I could get the same thing ten times cheaper in China!” But could he? I won’t go into the pros and cons of outsourcing – they are different for every company and every situation – but […] Read more – ‘But it’s ten times cheaper in China?’.

For those interested in better understand web design, I highly recommend the article “Understanding Web Design” in A List Apart. In the piece Jeffrey Zeldman make a convincing case for the uniqueness of web design and draws an interesting analogy to typography. Read more – ‘What is Web Design?’.

One mistake that many people make with their first websites is that they try to treat their websites as they would print media. This means that every effort is made to control the visual experience and little use is made of hypertext and the interactivity the web offers. For example, Dutch building company Verwelius has […] Read more – ‘A Website Is Not A Brochure’.

This is the inaugural post in the Bubble Foundry Blog. In this blog I will regularly comment on web design practices and effective ways to develop businesses online. Therefore it is fitting that this first post ranges widely across Bubble Foundry’s areas of concentration, going aesthetics to usability to advertising. Many websites have flashy animations […] Read more – ‘Don’t Annoy Your Users’.