The Curious Engineer

All blogs / Web development

Evert Pot's blog

evertpot.com

Web developmentJavaScript / TypeScript

Posts
464 from 25 May 2006 to 21 Jul 2026
Posting
now and then (4 in the last year)
Kind
personal blog
Feed
https://evertpot.com/atom.xml

2026 4

  1. Using a SSH bastion, but only when I'm touching grass
  2. Broadcasting GPS on the local network
  3. Burrow, a new Gopher client in the browser
  4. Now available on Gopher!

2025 1

  1. Building multi-step login forms that work well with password managers

2024 8

  1. Putting Curveball in maintenance mode
  2. In the future using top-level await might be cause a backwards compatibility break in Node
  3. Discovering features using HTTP OPTIONS
  4. New Structured Fields RFC out, and so is my Javascript package
  5. Hello World, meet Kian
  6. Creating a fake download counter with Web Components
  7. Moving on from Mocha, Chai and nyc.
  8. OAuth2 client updates

2023 9

  1. Using JSX on the server as a template engine
  2. Why aren't there more 80% jobs?
  3. Does OAuth2 have a usability problem? (yes!)
  4. Switching to Fedora from Ubuntu
  5. Supporting CommonJS and ESM with Typescript and Node
  6. Winding down Bad Gateway
  7. Building a simple CLI tool with modern Node.js
  8. Knex (with MySQL) had a very scary SQL injection
  9. I wish JSON5 was more popular

2022 10

  1. Neko - A brief history and porting to Javascript
  2. Taking a look at Mastodon
  3. Porting Curveball to Bun
  4. Ubuntu bungled the Firefox Snap package transition
  5. On syntactic sugar
  6. A new OAuth2 client for Javascript
  7. Reasons why abolishing DST in the US will be worse for users and developers
  8. Log4j, Faker and Black Swan Events
  9. Request bodies in GET requests
  10. Hello 2022!

2021 4

  1. 15 years of blogging
  2. JWT should not be your default for sessions
  3. Ketting 7 released
  4. Ketting support for deprecation warnings

2020 12

  1. HTTP/2 Push is dead
  2. Ketting v6: Using Hypermedia APIs with React
  3. Video: Building a Promise from scratch!
  4. ECMAScript 4: The missing version
  5. A generic middleware pattern in Typescript
  6. Common no-cors misconceptions
  7. Curveball - March updates
  8. Curveball - A typescript microframework
  9. Typescript is changing how I write code
  10. Implementing an opaque type in typescript
  11. Use a:visited in your CSS stylesheet
  12. Performance testing HTTP/1.1 vs HTTP/2 vs HTTP/2 + Server Push for REST APIs

2019 54

  1. Reinventing the wheel when encoding links in JSON
  2. Ketting v5 released
  3. Building awaitable and fluent interfaces in Javascript
  4. Better typing with Ketting
  5. Structured headers NPM package: new version
  6. Authentication relation types
  7. Typescript definitions for HAL and Link Hints
  8. The end of the HTTP series
  9. 511 Network Authentication Required
  10. 510 Not Extended
  11. 508 Loop Detected
  12. 507 Insufficient Storage
  13. 506 Variant Also Negotiates
  14. 505 HTTP Version Not Supported
  15. 504 Gateway Timeout
  16. 503 Service Unavailable
  17. 502 Bad Gateway
  18. 501 Not Implemented
  19. 500 Internal Server Error
  20. 451 Unavailable For Legal Reasons
  21. 431 Request Header Fields Too Large
  22. Blog archive in space
  23. Browser tabs are probably the wrong metaphor
  24. 430 Would Block
  25. Browse this interactive map
  26. 429 Too Many Requests
  27. 428 Precondition Required
  28. Firefox gets BigInt, and bigint-money gets 1.0 release
  29. 426 Upgrade Required
  30. 425 Too Early
  31. 424 Failed Dependency
  32. 423 Locked
  33. 422 Unprocessable Entity
  34. 421 Misdirected Request
  35. 420 Enhance your calm
  36. 418 I'm a teapot
  37. Using loops instead of higher order functions
  38. 417 Expectation Failed
  39. 416 Range Not Satisfiable
  40. An OAuth2 middleware for fetch()
  41. 415 Unsupported Media Type
  42. 414 URI Too Long
  43. 413 Payload Too Large
  44. 412 Precondition Failed
  45. 411 Length Required
  46. 410 Gone
  47. Ketting 2.5 release.
  48. 409 Conflict
  49. bigint-money: an NPM package for doing currency math
  50. 408 Request Timeout
  51. 407 Proxy Authentication Required
  52. MySQL examples in Node.js
  53. 406 Not Acceptable
  54. One year in San Francisco as a Software Engineer

2018 47

  1. 405 Method Not Allowed
  2. 404 Not Found
  3. Floats and money
  4. 403 Forbidden
  5. I made a thing: csv-1-2-3
  6. 402 Payment Required
  7. 401 Unauthorized
  8. 400 Bad Request
  9. Google Trends for REST, GraphQL and RPC
  10. Which redirect do I choose?
  11. 308 Permanent Redirect
  12. 307 Temporary Redirect
  13. 306 Switch Proxy
  14. 305 Use Proxy
  15. Ketting 2.3 release
  16. 304 Not Modified
  17. Http errors package for Typescript
  18. 303 See Other
  19. 302 Found
  20. 301 Moved Permanently
  21. 300 Multiple Choices
  22. Curveball - a TypeScript micro-framework
  23. 226 IM Used
  24. HTTP/2 Push for APIs
  25. Use 'let' and 'const' instead of 'var'
  26. 208 Already Reported
  27. Building protocols with HTTP
  28. 207 Multi-Status
  29. 206 Partial Content
  30. 205 Reset Content
  31. Firefox removes RSS support
  32. 204 No Content
  33. 203 Non-Authoritative Information
  34. 202 Accepted
  35. Bye Disqus, hello Webmention!
  36. 201 Created
  37. 200 OK
  38. 103 Early Hints
  39. 102 Processing
  40. 101 Switching Protocols
  41. 100 Continue
  42. Series of posts on HTTP status codes
  43. Ketting 2.0 release
  44. Scheduling posts on Github pages with AWS lambda functions
  45. WebDAV features that might be useful for HTTP services.
  46. A HTTP structured-header parser for Javascript
  47. Ketting 1.0 release.

2017 4

  1. I work at Yelp now!
  2. A small update about sabre/dav and baikal maintenance.
  3. The problems with embedding in REST today and how it might be solved with HTTP/2
  4. After 10 years, I'm stopping my work on sabre/dav

2016 21

  1. Working with HAL in PUT requests
  2. Slides for my Sass talk at True North PHP. #tnphp16
  3. Switching to Google AMP and back
  4. Syntax highlighting in presentations
  5. sabre/event 4 released for PHP 7
  6. Go for PHP programmers
  7. Just married!
  8. REST is in the eye of the beholder
  9. PHP Sucks
  10. Blogging for 10 years!
  11. sabre/xml and repeating elements
  12. Why PHP-FIG matters
  13. Writing SQL that works on PostgreSQL, MySQL and SQLite
  14. WebDAV resource sharing: an overview
  15. Drop 'public' not 'var'!
  16. Npm package author revokes his packages, breaking tons of builds
  17. 10 years on LinkedIn
  18. phpunit-bin - run phpunit from anywhere
  19. Strict typing in PHP 7 - poll results
  20. Poll: Will you be using strict typing with PHP
  21. Looking back at 2015 using Markov chains

2015 18

  1. Parsing Atom with sabre/xml
  2. Finding a DNS registrar
  3. PHP code in 2006 and 2016
  4. Now available via TLS and HTTP/2
  5. Switching to Linux
  6. Promises & Generators: my slides from True North PHP 2015
  7. Going freelance
  8. Save memory by switching to generators
  9. sabre/dav 3.0 released!
  10. PSR-7 released today
  11. PHP's callable typehint too loose?
  12. An XML library for PHP you may not hate.
  13. PSR-7 is imminent, and here's my issues with it.
  14. Dropbox starts using POST, and why this is poor API design.
  15. The problem with password_hash()
  16. HTTP/2 finalized - a quick overview
  17. What's a link?
  18. A new URI handling library for PHP.

2014 17

  1. Testing your composer dependencies with prefer-lowest
  2. Making the clipboard work between iTerm2, tmux, vim and OS X.
  3. sabre/dav 2.1 released.
  4. Why Google's CardDAV server isn't.
  5. Accessing protected properties from objects that share the same ancestry.
  6. Promises in PHP
  7. HTTP/1.1 just got a major update.
  8. sabre/dav 2.0 released.
  9. Hawk Autentication considered harmful.
  10. New sabre/dav website launched!
  11. PHP 5.5.10 timezone handling changes
  12. Composer's bug now fixed
  13. Composer is wide open with a massive security vulnerability
  14. fpassthru broken on OS X
  15. Google Code is dead.
  16. jCard is now a thing
  17. sabre/http 2.0 released

2013 15

  1. Replacing MyOpenID
  2. MySQL 5.6 BOOL behavior when using PDO and prepared statements
  3. Free Internet Explorer VM's on modern.ie
  4. If you care about privacy, don't use OS X mail
  5. On idempotence in HTTP
  6. Joining CalConnect
  7. Sabre VObject 3.1 released
  8. Following redirects with Curl in PHP.
  9. sabre-event, a simple event management library for PHP 5.4
  10. OS X 10.9 will ship with PHP 5.3
  11. Sabre VObject 3 released
  12. PHP 5.5.0 released!
  13. Escaping in iCalendar and vCard
  14. SabreDAV acquired by fruux
  15. A new blog!

2012 13

  1. Switching to PHP 5.4 on OS X
  2. SabreDAV 1.8 released (with namespaces!)
  3. Markdown output for PHPDocumentor2
  4. SabreDAV 1.7 released
  5. New open source project: Sabre VObject
  6. OAuth 2.0 and the Road to Hell
  7. IE10 and DNT-header update
  8. IE10 will enable the DNT header by default, and why I think this is a bad thing.
  9. New HTTP status codes
  10. New full-time gig at fruux
  11. Content Security Policy update
  12. Silex routing issues
  13. RFC search provider

2011 18

  1. My PHP Advent article
  2. PHP Includes file generator
  3. Moved SabreDAV to Github
  4. Timezone database closed down
  5. iconv_substr vs mbstring_substr
  6. Fake *.google.com SSL certificate in the wild
  7. SabreDAV 1.5 released with CardDAV support
  8. Blogging for 5 years
  9. Numeric string comparison in PHP
  10. Escaping MySQL strings with no connection available
  11. Throwing in the towel with SabreAMF and Dropbox PHP lib
  12. Speaking at the PHPBenelux march meetup
  13. Mozilla Documentation Center
  14. Speaking at DPC 2011
  15. SabreDAV 1.4.0-beta released
  16. Taking advantage of PHP namespaces with older code
  17. Going to PHPBenelux
  18. My gripe with Prototype

2010 32

  1. iCalendar / vCard parser for PHP
  2. slowdeath - a simple denial of service attack for most PHP-based servers
  3. Internationalized domain names, are you ready?
  4. SabreDAV 1.3.0 released
  5. Ubuntu has a new font
  6. Killing a dead ssh connection
  7. Evercookie: the cookie that just won't die
  8. Content Security Policy introduction
  9. New job at IBuildings
  10. Storing encrypted session information in a cookie
  11. What happened to HTTP authentication?
  12. Guidelines for generating XML
  13. Blogging for 4 years
  14. SabreDAV 1.2 released (with CalDAV support)
  15. When to escape your data
  16. Goodbye old Firefox profile
  17. Dropbox client library for PHP
  18. Mbstring Function Overloading Dont Use It
  19. Filesystem encoding and PHP
  20. HTML5 video: On2 VP8, H.264 and Ogg Theora
  21. New habari-based blog
  22. basename() is locale-aware
  23. SabreDAV 1.0.9 released & CalDAV news
  24. <input type="email"> and Firefox Contacts Add-on
  25. Jumping ship! From Subversion To Mercurial
  26. CalDAV server for PHP
  27. Published in PHP|Architect
  28. Unicode nearing 50% of the web
  29. A case for table-based design
  30. SabreDAV 1.0.4 released
  31. New open PEAR channels
  32. javascript's escape and encodeURI vs. PHP $_POST

2009 44

  1. OS/X WebDAV and Chunked Transfer Encoding
  2. South Korea's 'real-name verification law'
  3. Switching from Google to Bing
  4. Game of life with checkboxes
  5. SabreDAV reaches 1.0
  6. Comments are back!
  7. Deleted all comments by accident
  8. Upgrading to Snow Leopard adventures
  9. OS/X internet sharing defaults to 192.168.2.* range.
  10. CalDAV - it's hard!
  11. SabreDAV 0.12
  12. Converting ICalendar to XML
  13. Is OpenID becoming over-engineered?
  14. SabreDAV 0.9
  15. Flash ExternalInterface - Debug checklist
  16. SabreAMF 1.3 release
  17. Goto in PHP 5.3
  18. Changing jobs
  19. PHP feature request: 'Throwable' interface
  20. Macbook LCD screen repair project
  21. SabreDAV 0.8
  22. Blogging for 3 years
  23. Baseball Chronicles
  24. Oracle to buy Sun
  25. Frame busting and clickjacking prevention
  26. rev="canonical" and url shortening
  27. I bring you: floep
  28. SabreDAV 0.7
  29. Indexing geo-data 3: In practice
  30. Indexing geo-data 2 : simple benchmark
  31. Indexing geo-data
  32. Dangers of mutual dependencies
  33. WebDAV-related RFC's
  34. Rogers takes over my browser
  35. SabreDAV 0.6
  36. Search engines to support 'canonical urls', or: how to reinvent the wheel
  37. HTTP Basic and Digest authentication with PHP
  38. Creating streams from strings in PHP
  39. Apache speed and reverse proxies
  40. A case against pagers
  41. PHPUnit: A second look
  42. SabreDAV 0.5
  43. BBC drops microformats from programmes section.
  44. Devshed article about SQL Injection (or why security related articles should only be written by experienced people)

2008 46

  1. Geo standards on the web
  2. Gps trackers - any advice?
  3. Forking and MySQL connections
  4. MP4 fast-start woes
  5. Google Tech Talk about patents
  6. Zend Framework 1.7 features AMF support
  7. I'm programmer of the year!
  8. SabreDAV 0.4
  9. Sony Headphone Drama
  10. New on this blog: degraded experience for IE6
  11. Flash Upload changes in Flash Player 10
  12. Solar Framework's master-slave db adapter
  13. SabreAMF 1.2
  14. Quick MySQL tip: add comments
  15. Lighttpd + PHP fastcgi woes
  16. Integrating with Zend's OpenID
  17. Upcoming features in PHP 5.3
  18. Subversion 1.5 for debian Etch
  19. Preventing XSS in Javascript strings
  20. Converting line-endings with ViM
  21. Google and Yahoo start indexing SWF's
  22. IE8 comprehensive protection
  23. SabreDAV 0.3
  24. Macbook LCD screen broken =(
  25. CNMA 08 Finalist
  26. Site Security Policy
  27. Getting around "su : must be run from a terminal"
  28. SabreDAV 0.2
  29. Blogging for 2 years
  30. Flash opens up
  31. SabreDAV 0.1
  32. CDATA in xml.. bad idea?
  33. Usability, design 101
  34. WebDAV updates
  35. Silverlight 2 beta1 & IIS new video features
  36. First glance on IE8
  37. Ray Ozzie's keynote
  38. Off to Vegas - Mix 08
  39. Traversing directories
  40. SabreAMF 1.1 release
  41. Strange call from Red Hat
  42. SabreAMF now on gentoo portage
  43. MySQL Stored Procedure in PHP gotcha
  44. MySQL crashes on triggers + insert delayed
  45. Mime types.. when will people learn?
  46. Introduction to using SabreAMF with Flex

2007 59

  1. Adobe publishes AMF3 spec
  2. PHP WebDAV integration library
  3. Implementing WebDAV with PHP
  4. SabreAMF 1.0 release
  5. Open Source and copyright infringement
  6. PHP Quicksearch in firefox
  7. SabreAMF 1.0-beta4
  8. SabreAMF 1.0-beta3
  9. Flash Uploader on Mac not triggering onComplete event
  10. PHP shutdown sequence
  11. MemCached and MySQL UDFs
  12. OS/X terminal settings for linux programmers
  13. Leopard first impressions and problems
  14. HTML Purifier rocks!
  15. SabreAMF documentation
  16. SabreAMF 1.0-beta2
  17. SabreAMF 1.0-beta
  18. PHP's DateTime object and unix times..
  19. My Firefox extensions
  20. FFMpeg to support Nellymoser within the month?
  21. Flash to support H.264
  22. PHP: Arrays vs. Objects
  23. PHP and circular dependencies
  24. Future of SabreAMF
  25. PHPRPC and PHP frameworks
  26. PHP-RPC update 4
  27. FLVTool2 broken
  28. Firefox gets httpOnly cookies
  29. PHP-RPC update 3
  30. FiTC 2007 presentation video
  31. PHP namespaces
  32. PHP serializer 0.2
  33. The curse of major versions
  34. PHP serializer in userland code
  35. ext3: too many links!
  36. CSS "projection" media type
  37. PHP-RPC
  38. Blogging for 1 year
  39. Running cli editor from php
  40. Site back up!
  41. PHPUnit3 : first impressions
  42. MySQL recap and future storage engines
  43. PHP try..catch syntax weirdness
  44. FiTC 2007 rocked!
  45. Welcome CP/M user!
  46. Flash8's ExternalInterface and Internet Explorer
  47. SabreAMF 0.7
  48. I got a chumby!
  49. Presentation links
  50. Speaking at FlashinTO v59.0
  51. Multi-file upload using SWFUpload
  52. Sharing sessions between html and flash
  53. I'll be speaking at Flash in the Can 2007
  54. Rotating an image, retaining the original size
  55. Keeping your home directory in subversion
  56. Grepping in your subversion working copies
  57. I fixed home and end on OS/X terminal!
  58. SabreAMF 0.6 -> upgrade recommended
  59. What bug-reporting tool do you use?

2006 28

  1. SabreAMF 0.5
  2. SabreAMF featured on Adobe DevNet and 0.4 out
  3. Caching in PHP using the filesystem, APC and Memcached
  4. cron.daily scripts won't run
  5. Exploring OpenSearch
  6. SabreAMF 0.3 released + more info on class mappings
  7. Funky new look
  8. IE 7 RC1 acid2 test
  9. Creating a Gopher server with PHP and InetD
  10. Creating an OpenID client for PHP
  11. On HttpOnly, Firefox-specific XSS and this years major Livejournal XSS attack
  12. SabreAMF 0.2 is here
  13. Enabling firefox 2.0 microsummaries
  14. FFMpeg supports FLV 1.1
  15. Decoding AMF3
  16. Whats up for SabreAMF 0.2
  17. wmode="transparent" in firefox
  18. Updated the meta-detector library (v0.2)
  19. Sourcecode for Meta detector
  20. Building Subversion from source on debian
  21. PHP Application Structure
  22. Added MetaWeblogAPI
  23. Coming soon.. Code section
  24. Auto detecting Blog Services
  25. Installing SabreAMF
  26. Added a tagcloud
  27. Added comment system
  28. A new blog