Evert's Dugout
My name is Evert Pot, and this is my blog!
I'm currently looking for new opportunities. Check out my Resume.
On the web
- Mastodon : @evertp@indieweb.social
- Github : evert
- Subscribe to my blog
About this blog
This blog is built with Jekyll, and hosted by Github Pages. All the content and code is open source.
Want to take a look, or suggest changes? Check out or fork the Github project.
Blog archive
I've been writing blog-posts on and off since 2006. Below you'll find the full archive. Don't scroll too far though, quality degrades as you go backwards in time.
2023
- Does OAuth2 have a usability problem? (yes!)
- Switching to Fedora from Ubuntu
- Supporting CommonJS and ESM with Typescript and Node
- Winding down Bad Gateway
- Building a simple CLI tool with modern Node.js
- Knex (with MySQL) had a very scary SQL injection
- I wish JSON5 was more popular
2022
- Neko - A brief history and porting to Javascript
- Taking a look at Mastodon
- Porting Curveball to Bun
- Ubuntu bungled the Firefox Snap package transition
- On syntactic sugar
- A new OAuth2 client for Javascript
- Reasons why abolishing DST in the US will be worse for users and developers
- Log4j, Faker and Black Swan Events
- Request bodies in GET requests
- Hello 2022!
2021
- 15 years of blogging
- JWT should not be your default for sessions
- Ketting 7 released
- Ketting support for deprecation warnings
2020
- HTTP/2 Push is dead
- Ketting v6: Using Hypermedia APIs with React
- Video: Building a Promise from scratch!
- ECMAScript 4: The missing version
- A generic middleware pattern in Typescript
- Common no-cors misconceptions
- Curveball - March updates
- Curveball - A typescript microframework
- Typescript is changing how I write code
- Implementing an opaque type in typescript
- Use a:visited in your CSS stylesheet
- Performance testing HTTP/1.1 vs HTTP/2 vs HTTP/2 + Server Push for REST APIs
2019
- Reinventing the wheel when encoding links in JSON
- Ketting v5 released
- Building awaitable and fluent interfaces in Javascript
- Better typing with Ketting
- Structured headers NPM package: new version
- Authentication relation types
- Typescript definitions for HAL and Link Hints
- The end of the HTTP series
- 511 Network Authentication Required
- 510 Not Extended
- 508 Loop Detected
- 507 Insufficient Storage
- 506 Variant Also Negotiates
- 505 HTTP Version Not Supported
- 504 Gateway Timeout
- 503 Service Unavailable
- 502 Bad Gateway
- 501 Not Implemented
- 500 Internal Server Error
- 451 Unavailable For Legal Reasons
- 431 Request Header Fields Too Large
- Blog archive in space
- Browser tabs are probably the wrong metaphor
- 430 Would Block
- 429 Too Many Requests
- 428 Precondition Required
- Firefox gets BigInt, and bigint-money gets 1.0 release
- 426 Upgrade Required
- 425 Too Early
- 424 Failed Dependency
- 423 Locked
- 422 Unprocessable Entity
- 421 Misdirected Request
- 420 Enhance your calm
- 418 I'm a teapot
- Using loops instead of higher order functions
- 417 Expectation Failed
- 416 Range Not Satisfiable
- An OAuth2 middleware for fetch()
- 415 Unsupported Media Type
- 414 URI Too Long
- 413 Payload Too Large
- 412 Precondition Failed
- 411 Length Required
- 410 Gone
- Ketting 2.5 release.
- 409 Conflict
- bigint-money: an NPM package for doing currency math
- 408 Request Timeout
- 407 Proxy Authentication Required
- MySQL examples in Node.js
- 406 Not Acceptable
- One year in San Francisco as a Software Engineer
2018
- 405 Method Not Allowed
- 404 Not Found
- Floats and money
- 403 Forbidden
- I made a thing: csv-1-2-3
- 402 Payment Required
- 401 Unauthorized
- 400 Bad Request
- Google Trends for REST, GraphQL and RPC
- Which redirect do I choose?
- 308 Permanent Redirect
- 307 Temporary Redirect
- 306 Switch Proxy
- 305 Use Proxy
- Ketting 2.3 release
- 304 Not Modified
- Http errors package for Typescript
- 303 See Other
- 302 Found
- 301 Moved Permanently
- 300 Multiple Choices
- Curveball - a TypeScript micro-framework
- 226 IM Used
- HTTP/2 Push for APIs
- Use 'let' and 'const' instead of 'var'
- 208 Already Reported
- Building protocols with HTTP
- 207 Multi-Status
- 206 Partial Content
- 205 Reset Content
- Firefox removes RSS support
- 204 No Content
- 203 Non-Authoritative Information
- 202 Accepted
- Bye Disqus, hello Webmention!
- 201 Created
- 200 OK
- 103 Early Hints
- 102 Processing
- 101 Switching Protocols
- 100 Continue
- Series of posts on HTTP status codes
- Ketting 2.0 release
- Scheduling posts on Github pages with AWS lambda functions
- WebDAV features that might be useful for HTTP services.
- A HTTP structured-header parser for Javascript
- Ketting 1.0 release.
2017
- I work at Yelp now!
- A small update about sabre/dav and baikal maintenance.
- The problems with embedding in REST today and how it might be solved with HTTP/2
- After 10 years, I'm stopping my work on sabre/dav
2016
- Working with HAL in PUT requests
- Slides for my Sass talk at True North PHP. #tnphp16
- Switching to Google AMP and back
- Syntax highlighting in presentations
- sabre/event 4 released for PHP 7
- Go for PHP programmers
- Just married!
- REST is in the eye of the beholder
- PHP Sucks
- Blogging for 10 years!
- sabre/xml and repeating elements
- Why PHP-FIG matters
- Writing SQL that works on PostgreSQL, MySQL and SQLite
- WebDAV resource sharing: an overview
- Drop 'public' not 'var'!
- Npm package author revokes his packages, breaking tons of builds
- 10 years on LinkedIn
- phpunit-bin - run phpunit from anywhere
- Strict typing in PHP 7 - poll results
- Poll: Will you be using strict typing with PHP
- Looking back at 2015 using Markov chains
2015
- Parsing Atom with sabre/xml
- Finding a DNS registrar
- PHP code in 2006 and 2016
- Now available via TLS and HTTP/2
- Switching to Linux
- Promises & Generators: my slides from True North PHP 2015
- Going freelance
- Save memory by switching to generators
- sabre/dav 3.0 released!
- PSR-7 released today
- PHP's callable typehint too loose?
- An XML library for PHP you may not hate.
- PSR-7 is imminent, and here's my issues with it.
- Dropbox starts using POST, and why this is poor API design.
- The problem with password_hash()
- HTTP/2 finalized - a quick overview
- What's a link?
- A new URI handling library for PHP.
2014
- Testing your composer dependencies with prefer-lowest
- Making the clipboard work between iTerm2, tmux, vim and OS X.
- sabre/dav 2.1 released.
- Why Google's CardDAV server isn't.
- Accessing protected properties from objects that share the same ancestry.
- Promises in PHP
- HTTP/1.1 just got a major update.
- sabre/dav 2.0 released.
- Hawk Autentication considered harmful.
- New sabre/dav website launched!
- PHP 5.5.10 timezone handling changes
- Composer's bug now fixed
- Composer is wide open with a massive security vulnerability
- fpassthru broken on OS X
- Google Code is dead.
- jCard is now a thing
- sabre/http 2.0 released
2013
- Replacing MyOpenID
- MySQL 5.6 BOOL behavior when using PDO and prepared statements
- Free Internet Explorer VM's on modern.ie
- If you care about privacy, don't use OS X mail
- On idempotence in HTTP
- Joining CalConnect
- Sabre VObject 3.1 released
- Following redirects with Curl in PHP.
- sabre-event, a simple event management library for PHP 5.4
- OS X 10.9 will ship with PHP 5.3
- Sabre VObject 3 released
- PHP 5.5.0 released!
- Escaping in iCalendar and vCard
- SabreDAV acquired by fruux
- A new blog!
2012
- Switching to PHP 5.4 on OS X
- SabreDAV 1.8 released (with namespaces!)
- Markdown output for PHPDocumentor2
- SabreDAV 1.7 released
- New open source project: Sabre VObject
- OAuth 2.0 and the Road to Hell
- IE10 and DNT-header update
- IE10 will enable the DNT header by default, and why I think this is a bad thing.
- New HTTP status codes
- New full-time gig at fruux
- Content Security Policy update
- Silex routing issues
- RFC search provider
2011
- My PHP Advent article
- PHP Includes file generator
- Moved SabreDAV to Github
- Timezone database closed down
- iconv_substr vs mbstring_substr
- Fake *.google.com SSL certificate in the wild
- SabreDAV 1.5 released with CardDAV support
- Blogging for 5 years
- Numeric string comparison in PHP
- Escaping MySQL strings with no connection available
- Throwing in the towel with SabreAMF and Dropbox PHP lib
- Speaking at the PHPBenelux march meetup
- Mozilla Documentation Center
- Speaking at DPC 2011
- SabreDAV 1.4.0-beta released
- Taking advantage of PHP namespaces with older code
- Going to PHPBenelux
- My gripe with Prototype
2010
- iCalendar / vCard parser for PHP
- slowdeath - a simple denial of service attack for most PHP-based servers
- Internationalized domain names, are you ready?
- SabreDAV 1.3.0 released
- Ubuntu has a new font
- Killing a dead ssh connection
- Evercookie: the cookie that just won't die
- Content Security Policy introduction
- New job at IBuildings
- Storing encrypted session information in a cookie
- What happened to HTTP authentication?
- Guidelines for generating XML
- Blogging for 4 years
- SabreDAV 1.2 released (with CalDAV support)
- When to escape your data
- Goodbye old Firefox profile
- Dropbox client library for PHP
- Mbstring Function Overloading Dont Use It
- Filesystem encoding and PHP
- HTML5 video: On2 VP8, H.264 and Ogg Theora
- New habari-based blog
- basename() is locale-aware
- SabreDAV 1.0.9 released & CalDAV news
- <input type="email"> and Firefox Contacts Add-on
- Jumping ship! From Subversion To Mercurial
- CalDAV server for PHP
- Published in PHP|Architect
- Unicode nearing 50% of the web
- A case for table-based design
- SabreDAV 1.0.4 released
- New open PEAR channels
- javascript's escape and encodeURI vs. PHP $_POST
2009
- OS/X WebDAV and Chunked Transfer Encoding
- South Korea's 'real-name verification law'
- Switching from Google to Bing
- Game of life with checkboxes
- SabreDAV reaches 1.0
- Comments are back!
- Deleted all comments by accident
- Upgrading to Snow Leopard adventures
- OS/X internet sharing defaults to 192.168.2.* range.
- CalDAV - it's hard!
- SabreDAV 0.12
- Converting ICalendar to XML
- Is OpenID becoming over-engineered?
- SabreDAV 0.9
- Flash ExternalInterface - Debug checklist
- SabreAMF 1.3 release
- Goto in PHP 5.3
- Changing jobs
- PHP feature request: 'Throwable' interface
- Macbook LCD screen repair project
- SabreDAV 0.8
- Blogging for 3 years
- Baseball Chronicles
- Oracle to buy Sun
- Frame busting and clickjacking prevention
- rev="canonical" and url shortening
- I bring you: floep
- SabreDAV 0.7
- Indexing geo-data 3: In practice
- Indexing geo-data 2 : simple benchmark
- Indexing geo-data
- Dangers of mutual dependencies
- WebDAV-related RFC's
- Rogers takes over my browser
- SabreDAV 0.6
- Search engines to support 'canonical urls', or: how to reinvent the wheel
- HTTP Basic and Digest authentication with PHP
- Creating streams from strings in PHP
- Apache speed and reverse proxies
- A case against pagers
- PHPUnit: A second look
- SabreDAV 0.5
- BBC drops microformats from programmes section.
- Devshed article about SQL Injection (or why security related articles should only be written by experienced people)
2008
- Geo standards on the web
- Gps trackers - any advice?
- Forking and MySQL connections
- MP4 fast-start woes
- Google Tech Talk about patents
- Zend Framework 1.7 features AMF support
- I'm programmer of the year!
- SabreDAV 0.4
- Sony Headphone Drama
- New on this blog: degraded experience for IE6
- Flash Upload changes in Flash Player 10
- Solar Framework's master-slave db adapter
- SabreAMF 1.2
- Quick MySQL tip: add comments
- Lighttpd + PHP fastcgi woes
- Integrating with Zend's OpenID
- Upcoming features in PHP 5.3
- Subversion 1.5 for debian Etch
- Preventing XSS in Javascript strings
- Converting line-endings with ViM
- Google and Yahoo start indexing SWF's
- IE8 comprehensive protection
- SabreDAV 0.3
- Macbook LCD screen broken =(
- CNMA 08 Finalist
- Site Security Policy
- Getting around "su : must be run from a terminal"
- SabreDAV 0.2
- Blogging for 2 years
- Flash opens up
- SabreDAV 0.1
- CDATA in xml.. bad idea?
- Usability, design 101
- WebDAV updates
- Silverlight 2 beta1 & IIS new video features
- First glance on IE8
- Ray Ozzie's keynote
- Off to Vegas - Mix 08
- Traversing directories
- SabreAMF 1.1 release
- Strange call from Red Hat
- SabreAMF now on gentoo portage
- MySQL Stored Procedure in PHP gotcha
- MySQL crashes on triggers + insert delayed
- Mime types.. when will people learn?
- Introduction to using SabreAMF with Flex
2007
- Adobe publishes AMF3 spec
- PHP WebDAV integration library
- Implementing WebDAV with PHP
- SabreAMF 1.0 release
- Open Source and copyright infringement
- PHP Quicksearch in firefox
- SabreAMF 1.0-beta4
- SabreAMF 1.0-beta3
- Flash Uploader on Mac not triggering onComplete event
- PHP shutdown sequence
- MemCached and MySQL UDFs
- OS/X terminal settings for linux programmers
- Leopard first impressions and problems
- HTML Purifier rocks!
- SabreAMF documentation
- SabreAMF 1.0-beta2
- SabreAMF 1.0-beta
- PHP's DateTime object and unix times..
- My Firefox extensions
- FFMpeg to support Nellymoser within the month?
- Flash to support H.264
- PHP: Arrays vs. Objects
- PHP and circular dependencies
- Future of SabreAMF
- PHPRPC and PHP frameworks
- PHP-RPC update 4
- FLVTool2 broken
- Firefox gets httpOnly cookies
- PHP-RPC update 3
- FiTC 2007 presentation video
- PHP namespaces
- PHP serializer 0.2
- The curse of major versions
- PHP serializer in userland code
- ext3: too many links!
- CSS "projection" media type
- PHP-RPC
- Blogging for 1 year
- Running cli editor from php
- Site back up!
- PHPUnit3 : first impressions
- MySQL recap and future storage engines
- PHP try..catch syntax weirdness
- FiTC 2007 rocked!
- Welcome CP/M user!
- Flash8's ExternalInterface and Internet Explorer
- SabreAMF 0.7
- I got a chumby!
- Presentation links
- Speaking at FlashinTO v59.0
- Multi-file upload using SWFUpload
- Sharing sessions between html and flash
- I'll be speaking at Flash in the Can 2007
- Rotating an image, retaining the original size
- Keeping your home directory in subversion
- Grepping in your subversion working copies
- I fixed home and end on OS/X terminal!
- SabreAMF 0.6 -> upgrade recommended
- What bug-reporting tool do you use?
2006
- SabreAMF 0.5
- SabreAMF featured on Adobe DevNet and 0.4 out
- Caching in PHP using the filesystem, APC and Memcached
- cron.daily scripts won't run
- Exploring OpenSearch
- SabreAMF 0.3 released + more info on class mappings
- Funky new look
- IE 7 RC1 acid2 test
- Creating a Gopher server with PHP and InetD
- Creating an OpenID client for PHP
- On HttpOnly, Firefox-specific XSS and this years major Livejournal XSS attack
- SabreAMF 0.2 is here
- Enabling firefox 2.0 microsummaries
- FFMpeg supports FLV 1.1
- Decoding AMF3
- Whats up for SabreAMF 0.2
- wmode="transparent" in firefox
- Updated the meta-detector library (v0.2)
- Sourcecode for Meta detector
- Building Subversion from source on debian
- PHP Application Structure
- Added MetaWeblogAPI
- Coming soon.. Code section
- Auto detecting Blog Services
- Installing SabreAMF
- Added a tagcloud
- Added comment system
- A new blog