Bubble Foundry


The State of iOS Crash Reporting and Analytics in 2016 | Tagged: , ,
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’.
UIViewController+SegueBlocks | Tagged:
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’.
Future Shock | Tagged: , , , ,
I gave a talk yesterday at the Brooklyn Swift Meetup about futures, covering both why they’re interesting and what we specifically gain by using them in Swift.   Read more – ‘Future Shock’.
Continuous Improvement | Tagged: , , , ,
I gave this talk the other week at the Brooklyn iOS Meetup. Read more – ‘Continuous Improvement’.
Playing Web Audio on iOS | Tagged: ,
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’.
Calendar is not being updated | Tagged: , , ,
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’.
Subscribing to collection changes using ReactiveCocoa | Tagged: , ,
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’.
Subscribing to RestKit changes using ReactiveCocoa | Tagged: , , ,
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’.
Next steps | Tagged:
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’.
(Non)Persistence of CSS Animated Properties | Tagged: , ,
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’.
Finding a user’s first Instagram photo | Tagged: ,
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’.
Formatting Dutch Currency Amounts | Tagged: , ,
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’.
SSH Compression | Tagged:
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’.
iOS Code Coverage Revisited | Tagged: , ,
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’.
Functional Programming in Lift | Tagged: , ,
I gave a talk at Amsterdam.scala last month about how Lift makes use of functional paradigms for many of the common tasks. Read more – ‘Functional Programming in Lift’.
Generating iOS Code Coverage Reports | Tagged: , ,
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’.
How to make a bootable USB drive in OS X | Tagged: ,
This is for my own reference, since I keep referring to the Ubuntu guide. Optional: convert an ISO to an IMG hdiutil convert image.iso -format UDRW -o image.img Find the USB stick drive name diskutil list Unmount it: diskutil unmountDisk /dev/diskN Use dd to actually write the image: sudo dd if=image.img of=/dev/diskN bs=1m Eject the […] Read more – ‘How to make a bootable USB drive in OS X’.
MCing at Kings of Code | Tagged: , ,
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’.
3 Desks Available in My Office | Tagged: , ,
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’.
The whole web world… | Tagged: ,
… eleven years ago. Brilliant. Read more – ‘The whole web world…’.
Cordova Native Video Plugin | Tagged: , , , , , , , ,
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’.
Talk at TU Delft | Tagged: , , ,
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’.
Heroku and Naked Domains | Tagged: , , , , ,
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’.
option.rb | Tagged: , , ,
Because I’m nothing if not consistent, I’ve made Yet Another Option Library, this time in Ruby: option.rb Read more – ‘option.rb’.
Setting the AWS region when using simple_record | Tagged: , , , , ,
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’.
Email as a message queue | Tagged: , ,
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’.
Is it raining?
Now you can easily find out with my latest site: isitraining.nl Read more – ‘Is it raining?’.
Command Line Workshop at Campus Party | Tagged: , , ,
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’.
Spot On And Yet… | Tagged:
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…’.
option.py | Tagged: , , ,
Because my hobby seems to be writing Option libraries in various languages, I’ve written another, in Python: option.py. Enjoy. Read more – ‘option.py’.
Using Lift’s Menu.params | Tagged: , , ,
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’.
Deconstructing a WordPress PHP Infection | Tagged: , , ,
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’.
Let Me Map That For You | Tagged: ,
I like to make maps on Google Maps but adding a bunch of points can be a pain, so I made LMMTFY to speed up the process. Enjoy. Read more – ‘Let Me Map That For You’.
If iChat or Messages.app won’t connect to Google Talk | Tagged: , , , ,
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’.
Setting up VSFTP with a virtual user | Tagged: , ,
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’.
Open Data Talk at the HvA | Tagged: , , ,
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’.
The end of signups | Tagged: ,
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’.
Sending iOS Push Messages with Urban Airship and BFUrbanAirship | Tagged: , , , , ,
For iFebo I built a server last year to handle sending push messages to Urban Airship, which we use in front of the Apple Push Notification service due to its great scheduling features. To do this I needed a way to interact with the UA API and while it’s got lots of features it’s not […] Read more – ‘Sending iOS Push Messages with Urban Airship and BFUrbanAirship’.
How I maintain my events calendar | Tagged: ,
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’.
How to organize your project without lawyers | Tagged: , , , ,
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’.
My Office Might Be the Best Amsterdam Incubator | Tagged: , ,
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’.
Python-style in in Scala | Tagged: ,
Because hey, why not? In Python: >>> 1 in [1, 2, 3] True In Scala: class In(a: Any) { def in[T](s: Seq[T]) = s.contains(a) } implicit def any2In(a : Any) = new In(a)   scala> "a" in List(1, 2, "a") res0: Boolean = true   scala> "a" in List(1, 2, "b") res1: Boolean = false Read more – ‘Python-style in in Scala’.
Unreader: Or, How to Fight Back Against Stupid Facebook Reader Apps | Tagged: ,
I made a bookmarklet, and it will open the articles your friends share on Facebook without all the stupid prompts to install the site’s ‘social reading app’. It’s called Unreader. Enjoy. Read more – ‘Unreader: Or, How to Fight Back Against Stupid Facebook Reader Apps’.
Two Desks Available in My Office | Tagged:
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’.
Office Available in the Volkskrantgebouw | Tagged: ,
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’.
Presentation this Thursday at the Microsoft TechDays GeekNight | Tagged: , , , , , ,
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’.
A Mobile Tablet Interface | Tagged: , , , , , ,
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’.
How to get enumerations when using Scala’s parser combinators | Tagged: ,
This took me a while to figure out, so I figure it’s worth sharing here. In the end it’s quite simple thanks to Parser’s ^? method, but it took me a while to figure out: Read more – ‘How to get enumerations when using Scala’s parser combinators’.
gitback | Tagged: , ,
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’.
Tips for merging a Git repository into an SVN one | Tagged: , ,
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’.
Archiving Old Git Repositories, Or GitHub Is Too Expensive | Tagged: ,
I think I’m not alone in having many Git repositories, many of them I don’t currently use because they’re from old projects. However, I don’t want to delete them because I might want to refer back to one of them or make a change (which I’m doing right now for a three year old project). […] Read more – ‘Archiving Old Git Repositories, Or GitHub Is Too Expensive’.
AMEN! | Tagged:
On the subject of passwords: F*&K PASSWORDS. Great, great blog post. Read more – ‘AMEN!’.
Tropo is broken | Tagged: , , , ,
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’.
Because I needed it | Tagged: ,
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’.
Is it possible to read on a news site?
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?’.
A Handcrafted Curated Selection of Handcrafted Curated Selections of Products Sites | Tagged: ,
As I said the other day: If only recently people were bemoaning that “the best minds of my generation are thinking about how to make people click ads” (and they’re right), then now I’ve noticed another trend: an explosion new startups, many by friends of mine, selling various ‘heritage’, ‘handcrafted’, etc, etc products that people probably […] Read more – ‘A Handcrafted Curated Selection of Handcrafted Curated Selections of Products Sites’.
Miogiro | Tagged: ,
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’.
Immutable Javascript | Tagged: ,
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’.
Speaking Events Next Week | Tagged: , ,
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’.
Some experiments with natural numbers in Scala without type class wizardry | Tagged: ,
Scala doesn’t have dependent types but I wanted to see if I could wrassle up something that would approximate it for non-negative natural numbers. I’ve posted my results on GitHub. Read more – ‘Some experiments with natural numbers in Scala without type class wizardry’.
Ruby-style trailing conditionals in Scala | Tagged: , ,
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’.
Connecting to a Mongo database with Casbah | Tagged: , ,
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’.
Calculating the time I’ve spent outside the country | Tagged: , ,
I need to tell the Dutch government when renewing my permit if I’ve been outside of the country for more than three months. Here’s how I calculated it thanks to ScalaTime: Read more – ‘Calculating the time I’ve spent outside the country’.
Making a profile picture for your Facebook page | Tagged: , , , , , , , ,
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’.
In the US from August 19 to September 29 | Tagged: , ,
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’.
CocoaHeads NL on August 16 | Tagged: , , , , ,
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’.
Advice on becoming a freelancer | Tagged: ,
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’.
Mobile API Talk Slides
The Appsterdam talk I gave with Daniel on mobile APIs two weeks ago went well. Here are the slides in PDF format: Read more – ‘Mobile API Talk Slides’.
On CSV | Tagged: , , , ,
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’.
Mobile APIs Talk Next Wednesday | Tagged: , , , , , , , ,
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’.
Office Space in the Volkskrantgebouw | Tagged: ,
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’.
Backbone | Tagged: , , ,
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’.
Towards a Scala DSL for Javascript | Tagged: , ,
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’.
How to demo | Tagged: , , , , , ,
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’.
Hacking in Scala | Tagged: , , , ,
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’.
Working Around Bad Mobile Proxies | Tagged: , , , , , ,
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’.
Idea Guy Looking for Developer | Tagged: , , ,
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’.
No BS Blogging System
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’.
Introducing Chaos Monkey | Tagged: , , , , , , ,
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’.
Authenticating Requests in Lift Using HTTP Dispatch Guards | Tagged: , , , ,
The canonical – I’m making a leap to say that, but why not – way to add REST APIs to a Lift app is to append them to one of the app’s dispatch tables, either stateful or stateless. David and Tim have examples of using them to ensure a user is logged in, however both […] Read more – ‘Authenticating Requests in Lift Using HTTP Dispatch Guards’.
Where’s My Bike?
“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?’.
Ripe for Disruption | Tagged: , ,
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’.
I have a portfolio
It took three and a half years but I finally added a portfolio page to this site. Read more – ‘I have a portfolio’.
The Facebook Login Button and logging into your webapp | Tagged: , , , , ,
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’.
Setting the run mode and context of Jetty launched via sbt | Tagged: , ,
For my own future reference. In WEB-INF/jetty-web.xml place the following: <?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> <Configure class="org.mortbay.jetty.webapp.WebAppContext"> <Call class="java.lang.System" name="setProperty"> <Arg>run.mode</Arg> <Arg>production</Arg> </Call> <Set name="contextPath">/sso</Set> </Configure> Read more – ‘Setting the run mode and context of Jetty launched via sbt’.
Git Status From Outside of the Working Directory | Tagged:
This took me a while: git --git-dir=the/local/repo/.git --work-tree=the/local/repo status For example: git --git-dir=/Users/peter/Sites/cap/.git --work-tree=/Users/peter/Sites/cap status Annoying but least it’s possible. Read more – ‘Git Status From Outside of the Working Directory’.
Setting Locales in Python | Tagged: , ,
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’.
Introduction to Programming
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’.
Amsterdam Lift Meetup | Tagged: , , ,
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’.
Password Fields | Tagged: , , ,
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’.
“Can Technology End Poverty?” | Tagged: , ,
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?”’.
On PhoneGap
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’.
jrunscript | Tagged: , , ,
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’.
WebViews in Android Versions <= 1.6 | Tagged: , ,
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’.
Android SDK Add-Ons | Tagged: , , , , ,
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’.
Installing Android Apps via USB using the Android SDK | Tagged: , , , , ,
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’.
Generating Android Virtual Devices | Tagged: , , , ,
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’.
An Agency for Web Freelancers? | Tagged: , ,
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?’.
Introducing the Seattle Project | Tagged: , , ,
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’.
Displaying Unicode Characters in the Scala REPL on OS X | Tagged: , , , , ,
So simple but unforuntately I missed it until now: scala -Dfile.encoding="UTF-8" Now you can go to town with characters like ø and ∫! Oh, and you may want to alias this command in your ~/.profile: alias scala='scala -Dfile.encoding="UTF-8"' Read more – ‘Displaying Unicode Characters in the Scala REPL on OS X’.
CAP | Tagged: , , , , ,
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 Closures | Tagged: , , , ,
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’.
Tweaking iTunes Settings | Tagged: , ,
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’.
Magazines and iPad Apps | Tagged: , ,
Tony Colley nails it. Read more – ‘Magazines and iPad Apps’.
On daily coupon companies | Tagged: , , ,
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’.
My Talk at Quantified Self Amsterdam | Tagged: , , ,
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’.
Types in Python | Tagged: ,
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’.
Introduction to the AnyMeta API | Tagged: , , , ,
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’.
Beyond LAMP | Tagged: ,
LAMP – Linux, Apache, MySQL, and PHP – has been a popular web application stack (OS + web server + database + programming language) but new paradigms are rising, so what are the latest acronyms? SLIM: Scala + Lift + MongoDB. By Tim Perrett Brian Knapp. Nom Nom Nom: Node.js + MongoDB. By Alper Çuğun. […] Read more – ‘Beyond LAMP’.
Vodafone Mobile Clicks | Tagged: , ,
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’.
regexInArray | Tagged: , ,
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’.
MathPlus | Tagged: , , ,
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’.
Grammar-Based Event Logging | Tagged: , , ,
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’.
BFCollections | Tagged: , , , , ,
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’.
Everyone’s Using Scala | Tagged:
Twitter, LinkedIn, TomTom, Novell, Yammer, Meetup, Remember the Milk – the list goes on! Cool! Read more – ‘Everyone’s Using Scala’.
Imajs | Tagged: , , , ,
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’.
Installing Twisted on OS X | Tagged: , , , , , , ,
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’.
Seats Available in My Office | Tagged:
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’.
Lift Presentation at DuSE VI | Tagged: , , , , ,
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’.
Fun with Scala Implicits | Tagged: , , , , ,
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’.
Nginx Sitting in Front of Apache | Tagged: , , , ,
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’.
HTML5 TV | Tagged: , , , , , , ,
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’.
HTML5 Video Transformation | Tagged: , ,
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’.
Failing Quickly
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’.
Hire Me!
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!’.
Javascript Type Gotchas | Tagged: , ,
typeof null // -> object null instanceof null // -> TypeError: Can't use instanceof on a non-object. true instanceof Boolean // -> false true == new Boolean(true) // -> true true === new Boolean(true) // -> false Needless to say, this is very annoying if you’re trying to be be careful with your types and […] Read more – ‘Javascript Type Gotchas’.
JGit Documentation | Tagged: , , , ,
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’.
Comparing Software Version Numbers | Tagged: , , , ,
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’.
You got pointers in my Javascript! | Tagged: , , , , ,
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!’.
Aggregation Strategies | Tagged: , , , , ,
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’.
Javascript Constructors with an Array of Parameters | Tagged: , ,
Say we have: function myObj() { this.input = Array.prototype.slice.call(arguments); } We can pass a variable or an array but : var myObj1 = new myObj(1); myObj1.input // -> [1] var myArr = [1, 2, 3]; var myObj2 = new myObj(myArr); myObj2.input // -> [[1, 2, 3]] How then can we get, while still using myArr: […] Read more – ‘Javascript Constructors with an Array of Parameters’.
Javascript Primitives | Tagged: , ,
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’.
Artvertentie | Tagged: , ,
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’.
My latest Scala-inspired Javascript library: pf.js | Tagged: , , , , ,
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’.
A Subtle Javascript Mistake | Tagged: , ,
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’.
Introduction to Case Classes | Tagged: , , , , , ,
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’.
HTTP for Web Developers | Tagged: , , , , ,
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’.
HTML and XML Character Encoding Gotchas in Javascript | Tagged: , , , , ,
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’.
TLDapi | Tagged: , ,
I whipped TLDapi up in the last few days. If you’re a programmer and you want a way to check if an exotic top level domain a user sent you is real, use the API to check. Read more – ‘TLDapi’.
This is why Google Maps is so good | Tagged: , ,
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’.
Scala Books | Tagged: ,
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’.
Newlines in Crontabs | Tagged:
cron won’t run if your crontab doesn’t have a newline at the end of the file. That is all. Read more – ‘Newlines in Crontabs’.
Reminder: Speaking at Emerce eDay on Thursday | Tagged: , , ,
I’m presenting Google Wave at a session on social media tools at Emerce eDay this Thursday in Rotterdam. There are a bunch of great speakers scheduled, so if you can still get a pass, I highly encourage you to make it out there. Read more – ‘Reminder: Speaking at Emerce eDay on Thursday’.
iTunes App Store Links | Tagged: , , ,
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’.
Simple Fun with Python’s Datetime Libraries | Tagged: , , ,
My Apple iPhone Developer account expires in 56 days, so I wanted to know what expiration date I should mark in my calendar. Here’s how I calculated it from the Python console: >>> import datetime >>> datetime.date.today() + datetime.timedelta(days=56) datetime.date(2009, 11, 8) Read more – ‘Simple Fun with Python’s Datetime Libraries’.
pgrep | Tagged: ,
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’.
Understanding Lift’s SiteMap | Tagged: , ,
This post will probably only be useful for people developing using Scala and the Lift framework so, my other readers, consider yourself warned! Read more – ‘Understanding Lift’s SiteMap’.
Javascript Console | Tagged: , , , , , ,
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’.
actor.js | Tagged: , , ,
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’.
Thoughts on Job Posting Responses | Tagged: , , , , ,
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’.
Vote for Me! | Tagged: , , , ,
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!’.
Emerce eDay | Tagged: , , , , ,
Just a quick note that I’ll be talking about Google Wave at the social media tools session at Emerce eDay on September 17 in Rotterdam. Read more – ‘Emerce eDay’.
The YDN Map | Tagged: , , , ,
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’.
Javascript Coolness | Tagged: , , ,
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’.
Mobtest Wins! | Tagged: , ,
Mobtest won Best Developer Tool at iPhone Dev Camp 3 yesterday. I’m really excited about Mobtest and we have tons of ideas of how to make it an awesome service. Read more – ‘Mobtest Wins!’.
Scala and Javascript | Tagged: , ,
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’.
Silicon Valley | Tagged: , ,
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’.
crossfade.js | Tagged: , , , ,
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’.
oAuth on App Engine, Part 2 | Tagged: , , , , , , , ,
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’.
Officemates Wanted! | Tagged: , , , , , ,
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!’.
OpenID and oAuth on App Engine | Tagged: , , , , , , ,
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’.
Installing the Google App Engine SDK and Django 1.0.2 | Tagged: , , , , , , ,
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’.
Mashup Day Presentation | Tagged: , , , ,
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’.
Vodafone Mobile Widget Camp | Tagged: , , , , , , , , , , , ,
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’.
Mobile Dev Camp at the Next Web Conference | Tagged: , ,
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’.
Conference Season | Tagged: , , , , , ,
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’.
HTML5 | Tagged: , , , , , , , , , , , , , , ,
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’.
SXSW | Tagged: ,
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’.
My Blueberry Pancake Recipe | Tagged: , ,
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’.
Introducing jsFrame | Tagged: , , , ,
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’.
I’m an Appostle! | Tagged: , , , , ,
With my friends Katie, Paul and Travis I’ve started Appostles. We’re awesome iPhone, Android and Blackberry developers and we want to build your apps. Sound interesting? Then hire us! Read more – ‘I’m an Appostle!’.
MDC Helsinki Is Coming! | Tagged: , , ,
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!’.
Email Problems | Tagged:
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’.
Presentation is Important | Tagged: , , , , , ,
If you do it right, your customers will become your best salespeople. Android G1 Box from Alper Çugun on Vimeo. From Alper. Read more – ‘Presentation is Important’.
bright.tv at Android Dev Camp | Tagged: ,
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’.
ADCA a Huge Success | Tagged: , ,
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’.
Going Viral | Tagged: , , , , ,
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 ♥ Android | Tagged: , , , ,
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’.
Google versus Yahoo | Tagged: , ,
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’.
Regional Startup Blogs | Tagged: , ,
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’.
Maps of Human Tragedies | Tagged: , , , , , , ,
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’.
Looking for an Intern | Tagged: , , , , , , ,
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’.
Destroying the UI | Tagged: , , , , , ,
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’.
We Need This | Tagged: , , , , , , , , , , , , , , ,
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’.
Public Appearances | Tagged: , , , , , , , ,
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’.
Time For A Pause? | Tagged: , , ,
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?’.
Work With Me | Tagged: , ,
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’.
Culture and Entrepreneurshop | Tagged: , , , , ,
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’.
Typecasting Strings to Integers in PHP | Tagged: , , ,
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 | Tagged: , , , , , ,
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’.
Upcoming Events I’m Organizing | Tagged: , , , , , , , , ,
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’.
Loading Javascript Libraries When Needed | Tagged: , ,
Here is a nice little Javascript function to load some Javascript libraries: function includeLibs() { var libs = [{object: 'Prototype', src: 'http://www.mobypicture.com/slideshow/prototype.js'}, {object: 'Lightbox', src: 'http://www.mobypicture.com/slideshow/lightbox.js'}]; for (var k = 0; k < libs.length; k++) { try { var obj = eval(libs[k].object); } catch (err) { var obj = false; } if (obj == false) […] Read more – ‘Loading Javascript Libraries When Needed’.
Multilink | Tagged: , , ,
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’.
Repairing SVN Working Copies | Tagged: , , , ,
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’.
From the Laboratory: Closed Standards | Tagged: , , , , , ,
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’.
From the Laboratory: IP2FireEagle | Tagged: , , , ,
IP2FireEagle is small PHP script I wrote which will update your location in Yahoo Fire Eagle based upon your current IP address. You can find more information on the IP2FireEagle page. Read more – ‘From the Laboratory: IP2FireEagle’.
BarCamps | Tagged: , ,
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’.
Startups In The Netherlands? | Tagged: , ,
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?’.
From the Laboratory: Image Resizing and Thumbnail Creation | Tagged: , , , , , , , , ,
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’.
Honderdhandigen Party | Tagged: , ,
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’.
First Lunch 2.0.nl A Success | Tagged: , , , , ,
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’.
Lunch 2.0.nl | Tagged: , , , , , , ,
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’.
OpenCoffee | Tagged: , , , , , ,
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’.
Going Dark, or The Fading Appeal of Living Online | Tagged: , , , , , , , , ,
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’.
25 Dutch Entrepreneurs Under 25 | Tagged: , , , , , ,
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’.
But it’s ten times cheaper in China? | Tagged: , , ,
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?’.
What is Web Design? | Tagged: , , , ,
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?’.
A Website Is Not A Brochure | Tagged: , , , , , , ,
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’.
Don’t Annoy Your Users | Tagged: , , , , , ,
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’.