Peterbe.com
Peterbe.com is the personal website and blog of Peter Bengtsson.
PythonJavaScript / TypeScriptWeb developmentDev tools / editors / IDEs
- Posts
- 1,445 from 17 Sep 2009 to 22 Oct 2026
- Posting
- weekly (35 in the last year)
- Kind
- personal blog
- Feed
- https://www.peterbe.com/rss.xml
2026 27
- describetime - A command line tool to say a date-time in different ways
- Google search with Gemini is amazing
- bun check vs. tsc
- Rocket launch morning show
- Level 600 on Magic Sort
- Licorice Pizza - highly recommended movie
- Our Mill year in review
- Beer koozie from exactly 15 years ago today
- Where Herman Melville used to sit when he went to Bethal in New Bedford
- Hippos in Boston
- Bun 1.4.0 made some binaries of gg2 smaller
- useSlowTruth - React hook to throttle booleans
- Claude Opus is 10x faster than OpenAI GPT 5 at non-streaming completions
- Best Django Redis configuration for speed and size
- How to use a list/tuple/array in Django with a raw SQL cursor
- Bun WebView is eating up my tmp storage
- html-getter - A powerfully simple HTML scraper in Bun
- Bestest security tip for updating packages with Bun
- pytest "import file mismatch"
- Copy the current line in VS Code
- logger.error or logger.exception in Python
- How to find which git SHA it was when you merged in the default branch
- gg2 branches got 50% faster by a Promise.all
- xbar-my-prs Info about your GitHub PRs in the macOS menu bar
- Optimizing Bun compiled binary for gg2
- gg2 has a web page now
- You don't need a context or state manager for TanStack Query in scattered React components
2025 38
- Autocomplete using PostgreSQL instead of Elasticsearch
- Comparison of speed between gpt-5, gpt-5-mini, and gpt-5-nano
- Benchmarking oxlint vs biome
- Elasticsearch memory usage
- gg2 is now installable with Homebrew
- Testing out vite 8 on SPA: Vite 8 is 5x faster
- Using AI to rewrite blog post comments
- Hosting your static web site with Firebase Hosting
- Bun vs. Go for a basic web server benchmark
- hylite as an executable
- In Python, you have to specify the type and not rely on inference
- Find the source of an alias in bash
- From @monaco-editor/react to prism-react-editor
- How I end-to-end test my Bun CLI app
- How to count the number of non-blank lines with Bash
- gg commit with suggested --no-verify
- Faster way to sum an integer series in Python
- Find GitHub Pull Request by commit SHA
- Always run biome migrate after upgrading biome
- gg shell completion
- Combining Django signals with in-memory LRU cache
- gg2 - a new CLI for helping me manage git branches
- Bot traffic hitting my blog
- Native connection pooling in Django 5 with PostgreSQL
- Video to Screenshots app
- A Python dict that can report which keys you did not use
- Set up iTerm to delete whole words on Option-Backspace
- How to SSG a Vite SPA
- Inspecting the index size in PostgreSQL
- Adding client-to-server sync to PissueTracker
- Useful GitHub.com trick I learned today: l
- Starting a side project: PissueTracker
- Announcing: Spot the Difference
- get in JavaScript is the same as property in Python
- Use 'key' in React components to reset them
- How to send custom headers in a loader in react-router v7
- TypeScript enums without enums
- How I run standalone Python in 2025
2024 37
- My 2024 golf goals
- How I built an index of my blog posts on my GitHub profile page
- Run TypeScript in Node without extensions
- An ideal pattern to combine React Router with TanStack Query
- brotli_static in Nginx
- Object.keys to return the known strings of an object in TypeScript
- How I make my Vite dev server experience faster
- How to extend a function in TypeScript without repeating the signature types
- Trying out the new Bun "Compile to bytecode"
- The performance benefits of code-split an SPA
- Rate my golf swing (October 2024)
- The 3 queries I use with pg_stat_statements to analyze slow PostgreSQL queries
- How to handle success and failure in @tanstack/react-query useQuery hook
- swr compared to @tanstack/react-query
- Add a lazy getter, that is a function call, on a object in JavaScript
- Wouter + Vite is the new create-react-app, and I love it
- Default environment variables in Bash
- Comparing Deno vs Node vs Bun
- Trying out (and liking!) MeetingBar for macOS
- Converting Celsius to Fahrenheit round-up
- Node watch mode and TypeScript
- Converting Celsius to Fahrenheit with Rust
- Converting Celsius to Fahrenheit with Crystal
- Converting Celsius to Fahrenheit with Ruby
- Converting Celsius to Fahrenheit with Go
- Converting Celsius to Fahrenheit with TypeScript
- Converting Celsius to Fahrenheit with Python
- In TypeScript, how to combine known and unknown keys to an object
- Rate my golf swing (June 2024)
- Simple object lookup in TypeScript
- Search GitHub issues by title, only
- How do you thousands-comma AND whitespace format a f-string in Python
- Leibniz formula for π in Python, JavaScript, and Ruby
- Notes on porting a Next.js v14 app from Pages to App Router
- How to avoid a count query in Django if you can
- How to restore all unstaged files in with git
- How slow is Node to Brotli decompress a file compared to not having to decompress?
2023 21
- Search hidden directories with ripgrep, by default
- fnm is much faster than nvm.
- Comparing different efforts with WebP in Sharp
- Zipping files is appending by default - Watch out!
- Introducing hylite - a Node code-syntax-to-HTML highlighter written in Bun
- Shallow clone vs. deep clone, in Node, with benchmark
- Pip-Outdated.py with interactive upgrade
- Parse a CSV file with Bun
- Hello-world server in Bun vs Fastify
- ts-node vs. esrun vs. esno vs. bun
- Switching from Next.js to Vite + wouter
- Benchmark comparison of Elasticsearch highlighters
- How I used Parcel to "manually" bundle CSS files in a Remix app
- Be careful with Date.toLocaleDateString() in JavaScript
- How to run a GitHub Action workflow step if a file exists
- Automatically 'npm install'
- Benchmarking npm install with or without audit
- How to intercept and react to non-zero exits in bash
- The technology behind You Should Watch
- Announcing: You Should Watch
- First impressions of Meilisearch and how it compares to Elasticsearch
2022 21
- Pip-Outdated.py - a script to compare requirements.in with the output of pip list --outdated
- How to change the current query string URL in NextJS v13 with next/navigation
- How much faster is Cheerio at parsing depending on xmlMode?
- Programmatically control the matrix in a GitHub Action workflow
- First impressions trying out Rome to format/lint my TypeScript and JavaScript
- How to count the most common lines in a file
- Find the largest node_modules directories with bash
- Spot the JavaScript bug with recursion and incrementing
- Create a large empty file for testing
- Programmatically render a NextJS page without a server in Node
- Join a list with a bitwise or operator in Python
- Comparing compression commands with hyperfine
- How to know if a PR has auto-merge enabled in a GitHub Action workflow
- Auto-merge GitHub pull requests based on "partial required checks"
- How to sort case insensitively with empty strings last in Django
- How to close a HTTP GET request in Python before the end
- Introducing docsQL
- Preemptive grocery shopping list item suggestions
- Tips and tricks to make you a GitHub Actions power-user
- Make your NextJS site 10-100x faster with Express caching
- Command-Enter to submit a form when focus is inside textarea with React (TypeScript)
2021 30
- My site's now NextJS - And I (almost) regret it already
- Sort a JavaScript array by some boolean operation
- Brotli compression quality comparison in the real world
- How to string pad a string in Python with a variable
- How to bulk-insert Firestore documents in a Firebase Cloud function
- I'm a GitHubber now
- TypeScript generic async function wrapper function
- From photo of ingredients, to your shopping list
- TypeScript function keyword arguments like Python
- How to use letsencrypt-acme-challenge.conf in Nginx
- How I upload Firebase images optimized
- 10 years a Mozillian, always a Mozillian
- How to fadeIn and fadeOut like jQuery but with Cash
- Shut the door! How to automate getting the kids to close the door
- How to submit a form with Playwright
- How to install Python Poetry in GitHub Actions in MUCH faster way
- An effective and immutable way to turn two Python lists into one
- How to get all of MDN Web Docs running locally
- The correct way to index data into Elasticsearch with (Python) elasticsearch-dsl
- What English stop words overlap with JavaScript reserved keywords?
- My contribution to 2021 Earth Day: optimizing some bad favicons on MDN Web Docs
- How to simulate slow lazy chunk-loading in React
- Umlauts (non-ascii characters) with git on macOS
- In JavaScript (Node) which is fastest, generator function or a big array function?
- How MDN's site-search works
- What's lighter than ExpressJS?
- The best and simplest way to parse an RSS feed in Node
- Sneaky block-scoping variables in JavaScript that eslint can't even detect
- useSearchParams as a React global state manager
- Fastest way to turn HTML into text in Python
2020 15
- Gcm - git checkout master or main
- sharp vs. jimp - Node libraries to make thumbnail images
- downloadAndResize - Firebase Cloud Function to serve thumbnails
- Default food shopping items isn't for everyone
- Popularity contest for your grocery list
- Generating random avatar images in Django/Python
- That's Groce!
- Progressive CSS rendering with or without data URLs
- Quick comparison between sass and node-sass
- Lazy-load Firebase Firestore and Firebase Authentication in Preact
- <datalist> looks great on mobile devices
- Test if two URLs are "equal" in JavaScript
- findMatchesInText - Find line and column of matches in a text, in JavaScript
- hashin 0.15.0 now copes nicely with under_scores
- ./bin/huey-isnt-running.sh - A bash script to prevent lurking ghosts
2009 1
Undated 1255
- Check your email addresses in Python, as a whole
- Benchmark compare Highlight.js vs. Prism
- Throw JavaScript errors with extra information
- How to use minimalcss without a server
- How post JSON with curl to an Express app
- How I added brotli_static to nginx 1.17 in Ubuntu (Eoan Ermine) 19.10
- How to install Node 12 on Ubuntu (Eoan Ermine) 19.10
- Build pyenv Python versions on macOS Catalina 10.15
- redirect-chain - Getting a comfortable insight input URL redirects history
- How to resolve a git conflict in poetry.lock
- "ld: library not found for -lssl" trying to install mysqlclient in Python on macOS
- Performance of truth checking a JavaScript object
- How to pad/fill a string by a variable in Python using f-strings
- JavaScript destructuring like Python kwargs with defaults
- How depend on a local Node package without npmjs.com
- How to have default/initial values in a Django form that is bound and rendered
- How to split a block of HTML with Cheerio in NodeJS
- A Python and Preact app deployed on Heroku
- MDN Documents Size Tree Map
- Avoid async when all you have is (SSD) disk I/O in NodeJS
- Update to speed comparison for Redis vs PostgreSQL storing blobs of JSON
- How much faster is Redis at storing a blob of JSON compared to PostgreSQL?
- uwsgi weirdness with --http
- Fastest Python function to slugify a string
- NodeJS fs walk() or glob or fast-glob
- Train your own spell corrector with TextBlob
- function expandFiles(directoriesPatternsOrFiles)
- A React vs. Preact case study for a widget
- Find out all localStorage keys and their value sizes
- SongSearch autocomplete rate now 2+ per second
- From jQuery to Cash
- Build an XML sitemap of XML sitemaps
- Generate a random IP address in Python
- How I simulate a CDN with Nginx
- WebSockets vs. XHR 2019
- KeyCDN vs AWS CloudFront
- I think I might put my whole site behind a CDN
- Whatsdeployed rewritten in React
- KeyCDN vs. DigitalOcean Nginx
- Optimize inlined SVG on developer.mozilla.org
- Best way to count distinct indexed things in PostgreSQL
- Format numbers with numberWithCommas() or Number.toLocaleString()
- Django ORM optimization story on selecting the least possible
- Experimenting with Nginx worker_processes
- create-react-app, SCSS, and Bulmaswatch
- Optimize DOM selector lookups by pre-warming by selectors' parents
- Hooks tip! Avoid infinite recursion in React.useEffect()
- Displaying fetch() errors and unwanted responses in React
- Format thousands in Python
- hashin 0.14.5 and canonical pip hashes
- How to encrypt a file with Emacs on macOS (ccrypt)
- variable_cache_control - Django view decorator to set max_age in runtime
- An example of using Immer to handle nested objects in React state
- Use vars() to send an argparse Namespace into a function in Python
- Number.prototype.toString() is incredibly useful to display numbers
- Concurrent download with hashin without --update-all
- elapsed function in bash to print how long things take
- How I performance test PostgreSQL locally on macOS
- hashin 0.14.0 with --update-all and a bunch of other features
- How to JSON schema validate 10x (or 100x) faster in Python
- React.memo instead of React.PureComponent
- React 16.6 with Suspense and lazy loading components with react-router-dom
- How much HTML is too much for optimal web performance
- Switching from AWS S3 (boto3) to Google Cloud Storage (google-cloud-storage) in Python
- Fancy linkifying of text with Bleach and domain checks (with Python)
- The ideal number of workers in Jest
- Inline scripts in create-react-app 2.0 and CSP hashes
- An awesome snippet to web performance test a page programmatically
- Comparing KeyCDN and DigitalOcean's new Spaces CDN
- Merge two arrays without duplicates in JavaScript
- A darn good search filter function in JavaScript
- Replace an item in an array, by number, without mutation in JavaScript (ES6)
- django-pipeline and Zopfli
- Django lock decorator with django-redis
- django-html-validator now supports Django 2.x
- Quick dog-piling (aka stampeding herd) URL stresstest
- HTMLMinifier in use on this blog now
- To defer or to async JavaScript tags. That's the question.
- A good Django view function cache decorator for http.JsonResponse
- The best grep tool in the world; ripgrep
- How to unset aliases set by Oh My Zsh
- How to NOT start two servers on the same port
- GeneratorExit - How to clean up after the last yield in Python
- Writing a custom Datadog reporter using the Python API
- To CDN assets or just HTTP/2
- Rust > Go > Python ...to parse millions of dates in CSV files
- Webpack Bundle Analyzer for create-react-app
- Always return namespaces in Django REST Framework
- How I found out where a bash alias was set up
- Real minimal example of going from setState to MobX
- gtop is best
- Fastest Python datetime parser
- The impressive first-meaningful-paint improvement of using minimalcss
- Best EXPLAIN ANALYZE benchmark script
- Efficient many-to-many field lookup in Django REST Framework
- hashin 0.12.0 is much much faster
- Worlds simplest web scraper bot in Python
- filterToQueryString - JavaScript function to turn current filter into a query string
- Now using minimalcss
- Docker gotcha with building a Dockerfile in sub directory
- How to throttle AND debounce an autocomplete input in React
- csso and django-pipeline
- Items function in JavaScript for looping over dictionaries like Python
- Run something forever in bash until you want to stop it
- Be very careful with your add_header in Nginx! You might make your site insecure
- Show size of every PostgreSQL database you have
- Component, component function or plain function in React
- Convert web page to PDF, nicely
- Fastest way to unzip a zip file in Python
- Make .local domains NOT slow in macOS
- Even more aggressively trying to preload your next page load
- minimalcss 0.6.2 now strips all unused font faces
- Conditional aggregation in Django 2.0
- When Docker is too slow, use your host
- Understanding Redis hash-max-ziplist-entries
- Display current React version
- Whatsdeployed facelift
- How to rotate a video on OSX with ffmpeg
- Fastest way to uniquify a list in Python >=3.6
- CSS selector simplifier regular expression in JavaScript
- Msgpack vs JSON (with gzip)
- Another win for Tracking Protection in Firefox
- How's My WiFi?
- Really simple Django view function timer decorator
- Synonyms with elasticsearch-dsl
- Unzip benchmark on AWS EC2 c3.large vs c4.large
- How to create-react-app with Docker
- Yet another Docker 'A ha!' moment
- How to use django-cache-memoize
- To enable Tracking Protection for performance
- django-cache-memoize
- Concurrent Gzip in Python
- Simple or fancy UPSERT in PostgreSQL with Django
- "No space left on device" on OSX Docker
- cache_memoize - a pretty decent cache decorator for Django
- Mozilla Symbol Server (aka. Tecken) load testing
- A neat trick to zip a git repo with a version number
- Ultrafast loading of CSS
- Fastest way to match a filename's extension in Python
- React lifecycle hooks must-have
- Fastest *local* cache backend possible for Django
- Find static files defined in django-pipeline but not found
- Why I'm ditching AdBuff on Songsear.ch
- Best YouTube Chefs of 2017
- How to do performance micro benchmarks in Python
- Fastest way to find out if a file exists in S3 (with boto3)
- Why didn't I know about machma?!
- Experimenting with Guetzli
- Fastest Redis configuration for Django
- Web Console trick to get all URLs into your clipboard
- Best practice with retries with requests
- Public Class Fields saves sooo many keystrokes in React code
- A decent Elasticsearch search engine implementation
- Fastest cache backend possible for Django
- Fastest way to download a file from S3
- More CSS load performance experiments (of a React app)
- Web Performance Optimization of a Single-Page-App and web fonts
- Don't forget your sets in Python!
- crontabber now supports locking, both high- and low-level
- Podcasttime.io - How Much Time Do Your Podcasts Take To Listen To?
- Autocompeter is Dead. Long live Autocompeter!
- ElasticSearch 5 in Travis-CI
- 10 Reasons I Love create-react-app
- Using Fanout.io in Django
- Cope with JSONDecodeError in requests.get().json() in Python 2 and 3
- How to deploy a create-react-app
- Optimization of QuerySet.get() with or without select_related
- Django test optimization with no-op PIL engine
- hashin 0.7.0 and multiple packages
- django-html-validator - now locally, fast!
- How to identify/classify what language a piece of text is
- json-schema-reducer
- Premailer 3.0.0 - classes kept by default
- CSS Bloat Comparison
- hashin 0.5.0 bug fix
- Time to do concurrent CPU bound work
- Decorated Concurrency - Python multiprocessing made really really easy
- gg - A prototype to rule Git, GitHub and Bugzilla
- How to track Google Analytics pageviews on non-web requests (with Python)
- .git/info/exclude, .gitignore and ~/.gitignore_global
- Don't that this or bind
- 4 different kinds of React component styles
- Web performance optimization's dark side
- Ctags in Atom on OSX
- Whatsdeployed on only one site
- How to no-mincss links with django-pipeline
- Bestest and securest way to handle Python dependencies
- A quicksearch for Bugzilla using Autocompeter
- hashin - a replacement for peepin
- How I installed letsencrypt for Nginx
- Best Atom packages of 2015
- Advanced Closure Compiler vs UglifyJS2
- Select all relations in PostgreSQL
- Headsupper.io
- Django forms and making datetime inputs localized
- Screenshot-sharing performance comparison
- Whatsdeployed
- Chainable catches in a JavaScript promise
- Weight of your PostgreSQL tables "lumped together"
- How to "onchange" in ReactJS
- And bash basics
- mozjpeg installation and sample
- localStorage is not async, but it's FAST!
- django-pipeline + django-jinja
- Using Lovefield as an AJAX proxy maybe
- Panasonic Lumix from 2008 or a iPhone 5S from 2014
- ElasticSearch, snowball analyzer and stop words
- django-semanticui-form
- peepin - a great companion to peep
- Be careful with using dict() to create a copy
- Examples of mozjpeg savings
- Crash-stats just became a whole lot faster
- How to test if gzip is working on your site or app
- Introducing optisorl
- News sites suck in terms of performance
- Worst performing website of the year
- Some tips on learning React
- How to log ALL PostgreSQL SQL happening
- Visual speed comparison of AngularJS and ReactJS
- Premailer.io
- Find what indentation your files use
- How I git
- Python slow-down of exception handling or condition checking
- premailer 2.9.0 and new rules for `base_url`
- Use closure for your Django context processors
- Using lazy loading images on Air Mozilla
- AngularJS $q notify and resolve as a local GET proxy
- Benchmarking Autocompeter
- Match the whole word in auto complete maybe
- gulp-header is the best!
- Autocompeter 1.1.8 and smooth typing
- Autocompeter.com
- Bye bye httpretty. Welcome back good old mock!
- How to slice a rune in Go
- Air Mozilla on Roku
- Newsletters I enjoy for work
- Median size of Javascript libs on jsDelivr
- Best non-cryptographic hashing function in Python (size and speed)
- My favorite Go multiplexer
- Almost premature optimization
- AJAX or not
- Fastest way to take screencaps out of videos
- One-way data bindings in AngularJS 1.3
- vipsthumbnail
- To then() or to success() in AngularJS
- A "perma search" in AngularJS
- Why is it important to escape & in href attributes in tags?
- God, No! by Penn Jillette
- Bye bye AWS EC2, Hello Digital Ocean
- uwsgi and uid
- Shout-out to eventlog
- Go vs. Python
- localForage vs. XHR
- django-html-validator
- Premailer on Python 3
- Do you curl a lot to check headers?
- An AngularJS directive with itself as the attribute
- set -ex - The most useful bash trick of the year
- Highlighted code syntax in Keynote
- How I back up all my photos on S3 via Dropbox
- premailer now with 100% test coverage
- Aggressively prefetching everything you might click
- Gzip rules the world of optimization, often
- Common names amongst my Facebook friends
- Crontabber
- Optimizing MozTrap
- HTML Tree on Hacker News
- Migration of Postgres 9.2 to 9.3 with Homebrew and json_enhancements
- Do you like angular-classy?
- GitHub PR triage across multiple projects
- Wattvision - real-time energy monitoring
- Grymt - because I didn't invent Grunt here
- COPYFILE_DISABLE and python distutils in python 2.6
- Buggy - A sexy Bugzilla offline webapp
- My favorite YouTube channels
- Github Pull Request Triage tool
- Moby Dick (by Herman Melville)
- What's the average number of domains a website depends on?
- Advanced live-search with AngularJS
- Sorting mixed type lists in Python 3
- How I do deployments
- Wish List Granted on Hacker News report
- Welcome to the world, Wish List Granted
- Credit Card formatter in Javascript
- A Django base class for all your Forms
- From Postgres to JSON strings
- All my apps are now running on one EC2 server
- Lazy loading below the fold
- Fastest database for Tornado
- 10 years of blogging
- In Python you sort with a tuple
- premailer now excludes pseudo selectors by default
- What stumped me about AngularJS
- Registration and sign-in by email verification
- The Poincaré Conjecture
- Local jed settings
- Careful with your assertRaises() and inheritance of exceptions
- Recruiters: if you're going to lie, do it properly
- "Did you mean this domain?" Auto-correction for the browser's address bar
- Never put external Javascript in the <head>
- premailer now honours specificity
- HTML whitespace "compression" - don't bother!
- django-fancy-cache with or without stats
- This site is now 100% inline CSS and no bytes are wasted
- Welcome to the world django-fancy-cache!
- mincss version 0.8 is much much faster
- mincss now support PhantomJS
- mincss in action - sample report from the wild
- mincss "Clears the junk out of your CSS"
- Free business idea: An app for figuring out the best car for you
- All your images are belong to data uris
- Gamification for me as a software developer
- My new web marketing strategy: Begging
- Introducing: HUGEpic - a web app for showing massive pictures
- Fastest way to thousands-commafy large numbers in Python/PyPy
- hastebinit - quickly paste snippets into hastebin.com
- How I stopped worrying about IO blocking Tornado
- Introducing: League of Friends on Around The World
- Real-timify Django with SockJS
- django-mongokit now compatible with Django 1.4
- US License Plate Spotter (part 2)
- Beach volleyball bums
- Is Nginx obsolete now that we have Amazon CloudFront?
- How to use premailer as a command line script
- US License Plate Spotter (part 1)
- Newfound love of @staticmethod in Python
- Difference between $.data('foo') and $.attr('data-foo') in jQuery
- How I deal with deferred image loading in Javascript
- Postgres collation errors on CITEXT fields when upgrading to 9.1
- Secs sell! How I cache my entire pages (server-side)
- On the command line no one can hear you screen. Or can they?
- Are WebSockets faster than AJAX? ...with latency in mind?
- I'm running pgFouine right now on my server
- Secs sell! How frickin' fast this site is! (server side)
- Secs sell! How frickin' fast this site is! (client side)
- IssueTrackerProduct now officially abandoned
- How much faster is Nginx+gunicorn than Apache+mod_wsgi?
- String length truncation optimization difference in Python
- When to __deepcopy__ classes in Python
- Persistent caching with fire-and-forget updates
- Cryptic errors when using django-nose
- Python file with closing automatically
- Integrate BrowserID in a Tornado web app
- Trivial but powerful tips for nosetests
- Going real simple on HTML5 audio
- New feature on Too Cool For Me: Everyone I follow
- Cateechee golf pictures
- Too Cool For Me?
- Goodies from tornado-utils - part 3: send_mail
- Goodies from tornado-utils - part 2: tornado_static
- Goodies from tornado-utils - part 1: TestClient
- Reciprocal lesson about gender perspectives
- Title - a javascript snippet to control the document title
- EmailInput HTML5 friendly for Django
- A blog comment spam solution: Retalition!
- A taste of the Django on inside Mozilla, Sheriffs Duty
- Comparing Google Closure with UglifyJS
- Slides about Kwissle from yesterdays London Python Dojo
- Chinese tea sampler pack now on sale
- Optimization story involving something silly I call "dict+"
- Launching Kwissle.com
- Google teething problems still with duplicated content
- Test static resources in Django tests
- A script tag's type in HTML5
- maxlength_countdown() - a useful jQuery plugin for showing characters left
- Mocking DBRefs in Mongoose and nodeunit
- TornadoGists.org - launched and ready!
- Strange socket related error with supervisord
- Google's new Page Speed Online hard to beat
- Bash tip of the day: ff
- My AWS CloudFront bill
- MongoUK 2011 - London conference all about MongoDB
- QUnit testing my jQuery Mobile site in full swing
- More productive than Lisp? Really??!
- To all Zope developers: Does this sound familiar?
- I just ordered tea from the Min River Tea Farm
- Eloquent Javascript by Marijn Haverbeke
- Connecting with psycopg2 without a username and password
- Optimization of getting random rows out of a PostgreSQL in Django
- Nice testimonial about django-static
- How I profile my Nginx + proxy pass server
- DoneCal homepage now able to do 10,000 requests/second
- EditDistanceMatcher - NodeJS script for doing edit distance 1 matching
- DoneCal on MumbaiMirror
- DoneCal.com international visitors
- Fastest "boolean SQL queries" possible with Django
- django-static version 1.5 automatically taking care of imported CSS
- RequireJS versus HeadJS
- ToDo apps I gave up on in 2010
- ssl_session_cache in Nginx and the ab benchmark
- Speed of DoneCal API (over 1,400 request/sec) and HTTPS (less than 100 request/sec)
- To code or to pdb in Python
- Page here about DoneCal
- DoneCal gets a grade A (92)
- Gmail tip: Searching only for attachments
- Welcome to the world: DoneCal.com
- jsonpprint - a Python script to format JSON data nicely
- How to book a ticket on the Royal Academy of Music's website
- Worst Flash site of the year 2010
- Javascript tip: nifty use of the console.log function in Firebug
- In Django, how much faster is it to aggregate?
- How I made my MongoDB based web app 10 times faster
- Why I gave up on JQuery UI's autocomplete
- Nasty JavaScript wart (or rather, don't take shortcuts)
- My tricks for using AsyncHTTPClient in Tornado
- Local Django development with Nginx
- In jQuery, using the :visible selector can be dangerous
- wkhtmltopdf and font size shrinkage
- I just discovered wikiHow
- Local NodeJS development environment with Nginx
- Musings about django.contrib.auth.models.User
- Where I live
- Hosting Django static images with Amazon Cloudfront (CDN) using django-static
- People's reactions to Gates and Buffet's $600 billion challenge
- TfL Traffic cameras on a Google map
- Correction: running Django tests with MongoDB is NOT slow
- Muted conversations in Gmail
- "Using MongoDB in your Django app - implications and benefits"
- mongoengine vs. django-mongokit
- More on What is "pythonic"
- Review: Django 1.1 Testing and Debugging
- Making output stay on stdout
- Upgrading to Ubuntu Lucid Lynx and downgrading to Python2.4 and Python2.5
- Fish - most important Python package since distutils
- My site on the iPad
- GlobalExpense doesn't work in Firefox
- Spelling differences between British and American English
- OpenID, Attribute Exchange, SReg, python-openid and Google
- Word Whomp solvers love Crosstips
- UPPER vs. ILIKE
- Who was logged in during a Django exception
- fcgi vs. gunicorn vs. uWSGI
- Cycling across England on Orange Snapshot
- The awesomest way possible to serve your static stuff in Django with Nginx
- Beautiful photos from the Katrina hurricane
- Speed test between django_mongokit and postgresql_psycopg2
- How and why to use django-mongokit (aka. Django to MongoDB)
- Ubuntu Cola or Ubuntu Linux
- Importance of public URLs and how enterprisecarsales.com gets it wrong
- How girls/guys rate guys/girls
- Looking for icons?
- Last.fm Tube Tags
- Haiti Earthquake: Who's given what?
- Healing Food Reference
- Guake, not Yakuake or Yeahconsole
- oplop - How Oplop works, explained in plain English and in technical detail
- Tip: creating a Xapian database in Python
- Bookmarklet to replace the current domain with localhost:8000
- LastGraph - visualizing your Last.fm usage
- China wrecked the Copenhagen deal
- Migrating with South on a field that uses auto_now_add=True
- Homer Simpson playing Cry of the Black Birds by Amon Amarth
- Orphaned Land - Jewish Muslim Metal
- Comparing YUI Compressor and slimmer
- Those Crazy Chinese
- Mocking os.stat in Python
- "Frank Zappa: The Biography" by Barry Miles
- iPhone push notifications for Twitter with Prowl
- What makes my website slow? DNS
- What I hate about PIL and Image in Python
- Messed up columns in Django Admin
- Automatically strip whitespace in Django forms
- A user-friendly TinyMCE config
- Funnier than Fail Blog: Fail Dogs
- London Frock Exchange launched
- My first Twitter app - KungFuPeople.com
- Comparing jsmin and slimmer
- Python Code Dojo London - 17 Sep 2009
- "Hello John. It's Gordon Brown."
- 7 of the World's Most Irresponsible Companies
- Cgunit - Online Gallery
- To sub-select or not sub-select in PostgreSQL
- Custom CacheMiddleware that tells Javascript a page is cached in Django
- What a super user-friendly menu!
- Table Of Countries Showing Drive Direction
- The Secret to SEO Search Engine Optimization
- Calling all kung fu people - kungfupeople.com
- Google Reverse Geocoding vs. GeoNames
- gg - wrapping git-grep
- Public calendars on Google Calendar
- More optimization of Peterbe.com - CSS sprites
- The 4-hour Work Week by Timothy Ferris
- Battery life usage on an iPhone 3G(S)
- gorun.py - Using (py)inotify to run commands when files change
- Getting uploadify to work
- setuptools usability - not good, what can be done?
- premailer.py - Transform CSS into line style attributes with lxml.html
- My first iPhone web app - Crosstips iPhone interface
- My dislike for booleans and that impact on the Django Admin
- Introducing django-spellcorrector
- Crossing the world - new feature on Crosstips
- Sequences in PostgreSQL and rolling back transactions
- Most unusual letters in English language
- To JSON, Pickle or Marshal in Python
- Never seen before Google Server Error
- Lizard walk charity for the Claremont project
- Crosstips now has sparklines
- mailto: considered stupid, especially with ?subject
- Git + Twitter = Friedcode
- Lesson learned: Unicodifying request variables in Zope
- Fujitsu FLEPia
- TypeRacer Best online game in years
- Google Calendar, iCalendar Validator but not bloody Apple iCal
- Simple interface for Crosstips
- Shit trailer, awesome way to show it
- Head-to-head movie voting
- British or American English or just English
- Nginx vs. Squid
- Too much Python makes Peter a shit Javascript developer
- Sandisk SSD v/s HDD
- To $('#foo p') or to $('p', $('#foo'))
- Propeller Island City Lodge Orange Room
- Founder of Islamic TV station accused of beheading wife
- To assert or assertEqual in Python unit testing
- Female body builder picture galore
- Tough Guy Challenge 2009 - Boston.com
- The Albion, Shoreditch
- How I Made a 1,474-Megapixel Photo
- Acupuncture works for headaches
- Rock stars and their parents
- Nasty surprise of Django and gettext
- Formatting numeric amounts in Javascript
- Earth, observed - The Big Picture - Boston.com
- Hellsongs
- Does Semen Have Antidepressant Properties?
- Secrets of success from Google co-founder Larry Page
- The Big Storm Picture: November 2008
- The Jesus story - A serious case of plagiarism
- Ultimate Banksy Art & Graffiti Gallery | WebUrbanist
- "Confused and scared"
- Round trip with Endeavour - The Big Picture - Boston.com
- WUBeee!
- Obesity Not Just an American Problem Anymore | Newsweek Health | Newsweek.com
- YouTube - Nigella's XXXmas
- Towel dog
- My first YSlow Grade A (100)!
- All My Internet Friends
- Wing IDE versus Jed
- Nasty surprise of Django cache
- bool is instance of int in Python
- Finally got rid of the system beep
- domstripper - A lxml.html test project
- How to unit test the innards of a Django view function
- Why do you vote for the democrats?
- Comic-Con 2008 photos
- Django vs. Java
- Flash advert hell
- World Plone Day here in London, England
- ARTWORDSBOOKSHOPQRSTUVWXYZ
- Why bother with MySQL...
- When '_properties' gets stuck as a persistent attribute
- V8 < TraceMonkey < SquirrelFish
- The importance of env (and how it works with virtualenv)
- The stupidity of 'id' as a variable name (or stupidity of me)
- Why we like Obama, short answer: his speeches
- Accessible UK Train Timetable
- Kalle Kappner - Opeth and Pain of Salvation piano tribute
- Weird Asia News
- Anti-McCain propaganda videos
- That should last a couple of weeks
- Python new-style classes and the super() function
- Use Javascript to prevent spambots
- The importance of checking in Firefox
- A great thing about Squid: Calamaris
- Interview with Varg Vikernes
- WestIsEast.co.uk launched
- Another brownie point for Django
- Difference between Sweden and UK: renewable energy
- Damn lies and benchmark comparing Apache and Nginx
- zope-memory-readings - Tracking Zope2's memory usage by URL
- split_search() - A Python functional for advanced search applications
- The importance of the TITLE attribute
- What I like and dislike about Grok
- Mixing in new-style classes in Zope 2.7
- pwdf - a mix of ls and pwd
- Lesson learnt with creating DOM element with jQuery
- One thing I hate about Linux: cron
- How to uninstall nginx with apt
- Tip: Printer friendly pages with Page Templates in Zope
- apple.com/store doesn't work in Firefox (on Linux)
- Mocking a Python standard library
- See you at PyCon 2008
- File check before delete
- "Confessions of a College Callgirl" is the new "My Secret Life As A Prostitute"
- hostip.info - Look up the location from an IP
- CommandLineApp by Doug Hellmann
- If Americans knew - An interesting insight into the Israeli Palestine conflict
- Chinese New Year and the Persecution of Falun Gong in China
- logrotating all my Zope event logs
- Ocado gets customer service right
- Why Django and Grok matters
- The Official Dilbert Widget
- "lost my phone :("
- Ugliest e-commerce site of the month - Comfy-Feet
- input/textarea switcher with jQuery
- jQuery and Highslide JS
- The Love Mattress
- EditArea vs. CodePress
- String comparison function in Python (alpha)
- isArithmeticExpression() in Javascript
- Calculator in Python for dummies
- T-Mobile MMS collection
- WSSE Authentication and Apache
- geopy distance calculation pitfall
- Kill Ugly Radio - A Frank Zappa blog
- Photos from Fuzhou 2007
- Futurama is back!
- Note to self about Jeditable
- Back from Fuzhou, China
- Now I'm on Last.fm
- DateIndex in Zope doesn't have indexed attributes
- Piteå, as experienced by Sam Dunstan
- Islington Kungfu charity fund raiser 2007
- Bicycle racing in NYC
- Silk icons
- Future of Web Apps (quick summary and thoughts)
- Linux tip: du --max-depth=1
- Spellcorrector 0.2
- Ugliest site of the month - The Backyard Comedy Club
- Vertically expanding textarea input boxes
- Nasty human error in Zope ZEO setup
- Fun Python error message
- What art is ...according to Don Van Vliet
- Not just the bikini event
- Proud to be a Swedish atheist
- Printer usability problem
- rfc822() vs. rfc1123_date()
- html2plaintext Python script to convert HTML emails to plain text
- YSlow grade A (96) but not with doubts
- Interesting lesson learnt on shortcut taking in usability
- XML header and childNodes
- How did Google do that?
- Worst gigolo sales pitch ever
- I'm not a hacker
- Mac OS X's python binary icons
- iPhones review on WSJ
- Internet Radio - Day of Silence
- Optional input labels
- FacebookStatusUpdater
- <button> not supported on Pocket IE
- Playing with filestream_iterator
- American foreign policy
- Time in the Stone - Emily Young exhibition
- Cutest server error message ever
- No, I'm not going to freeze your account
- Miami Vice party photos
- What does $456 billion buy?
- I'm Prolog
- Guess my age with MOBi
- Spellcorrector
- Albert Einstein figurine head
- What's the fattest Subway sandwich?
- ZYB - crap name, brilliant app
- Is peanut butter the proof that evolution doesn't happen?
- Learning about ATFolder's security
- Associative arrays
- Zope Image to filesystem image
- Earl Grey or cheap tea, does it really matter?
- Kung fu in Twickenham
- Aussies in London - What are you doing here?
- JetBlue a good and bad website
- Sedo.com - any good?
- favicon2dots
- Vista voice recognition and Perl
- Comparing REAL values in PostgreSQL
- A Flash interface that doesn't suck
- Gzip and Slimmer optimization anecdote
- Canon and Sony Ericsson rule Flickr
- New Google Groups design
- Ugliest site of the month - CSDC
- RememberYourFriends.com running jQuery
- Best youtube.com clip of the year?
- Mesmerizing pencil art
- Flash 9 on Ubuntu Edgy Eft
- setAttribute('style', ...) workaround for IE
- Thuas Trägubbar
- Find largest directories with du -k
- Happy Birthday to me!
- ImageMagick conversion comparison
- CSS selector bug in IE?
- is is not the same as equal in Python
- Solar power in the north African desert
- MUnderscorePatch - tired of typing manage_main?
- Entering multilanguage data in Zope
- Bloggers not responsible for comment?
- Food File Online
- Crazy road in China
- Memory dump blog recovery
- Oxfordtube's website sucks
- Sending HTML emails in Zope
- Catching a carriage return in bash
- New domain name
- Ricardo Semler in London
- Lion + Tiger = Liger
- NES Quiz
- Zope 3 training blog
- Crazy Egg of IssueTrackerProduct.com
- Comparing Ruby and PHP
- I knew it! You don't have to drink that much water
- Bill O'Reilly nailed
- Why did RememberYourFriends fail?
- Google London Automation Test conference (part II)
- Google London Automation Test conference
- Steve Irwin (crocodile hunter) dead
- Redirect stderr into becoming dots in Bash
- Web 2.0 logo generator
- Madonna's birthday party at the Lounge Lover
- Fastest way to uniqify a list in Python
- Unicode strings to ASCII ...nicely
- More crappy album covers
- Sorting transform function in PostgreSQL
- Exploding Dell laptops
- slim in ruby
- slim, a new free web service for white space optimisation
- Spaceinvaders with real people
- Trout Mask Replica - Captain Beefheart
- Nice stats added to RememberYourFriends.com
- GMapEZ - Google Maps API too complicated for you?
- Oil, gas and stupidity
- Desired Firefox extension
- DifferenceFinder (aka. humanreadablediff.py)
- RememberYourFriends.com beta version
- Brick Lane market
- Tekken with Actual Humans
- Wanna be my flatmate?
- Pleonasm
- Animator vs. Animation
- TinyMCE + Zope = ZTinyMCE
- Weird spam? Or just a weird girl?
- Geeking with tags file for Jed
- isInt() JavaScript function
- SVN + ./todo + crontab
- Pixoh.com and Instant Domain Search
- Watford kung fu club
- Mobile-review.com
- Private functions in Javascript?
- type - Writing shell scripts
- Helpdeskshow - a quick review
- Interesting float/int casting in Python
- Best bicycle locks
- Date formatting in Python or in PostgreSQL (part II)
- Careful when dealing with options in IE
- Case insensitive list remove call (part II)
- Case insensitive list remove call
- Shark kayak
- Merrill Lynch's f**ked up website
- Teach me about OCR
- To br / or not to br/
- Annoying Safari just ate my blog
- Kung fu in East London with Shkar
- Carbon XEmacs installed
- Quick PostgreSQL optimization story
- Squeezebox + Pandora
- parentElementsByTagName(doc, tagname, classname)
- tightVNC and Chicken of the VNC
- Why Linux is better
- Martial Arts by Pen Rance
- Apple Store or Micro Anvika
- Dynamic image replacement technique
- Google and Python code
- CSSViewer - new promising Firefox Extension
- waiting for your guidance
- How to fold t-shirts, with a "machine"
- Jed Tags with ntags (for dummies)
- Geeking with Eterm and Tkinter
- tempfile in Python standard library
- Sexy furniture
- Size comparison of Zope3, Django and TurboGears
- Setting security declarations to Zope classes
- ReCSS a tool to reload the CSS without reloading the whole page
- Northern light photos
- Photos from FWC China 2005
- IssueTrackerProduct featured on Ajaxian.com
- Bad spelling a good thing?
- Are you a web developer? Then VisiBone is for you
- Who do you ping?
- Hasselblad's 39 megapixel digital camera
- Strange language bug in Windows XP
- An idea for a better timesheet tracker
- My new years resolution 2006
- Don't put title in a <link> tag
- Ask Yahoo "What state do the Simpsons live in?"
- Back from China
- Off to holiday in China
- Emacs on the Palm OS
- Geek entrepreneurs' reading list
- ALTER TABLE patch
- iWipe - toilet paper and a Mac
- have or has?
- DOM Scripting
- "Groups" search on Google
- CSS code of del.icio.us
- Yahoo! Inbound Links API
- The Search Engine Experiment
- Islington Knuckle Walk
- Mvbackupfiles - a script to "delete" back autosaved backup files
- createElement('a') with a javascript href
- Major performance fix on file searches
- Old School Kung Fu
- Filename splitter
- Pandora Update
- MyMcDiet.com Kevin O'Connor's fast food diet
- "Clever" date formatting accessibility
- Active Reactor watches
- Screencasting the unix way with Python
- Screencasting test
- Whitelist blacklist logic
- www aliases set up
- Using MD5 to check equality between files
- Shane's Bit Mountain
- Pandora (followup) Neat error messaging
- Pandora - a great Internet radio
- "Increment numbers in a string"
- Playing with Reverend Bayesian
- Furious and deprived by 'rm *'
- table-layout: fixed
- Dream: python bindings for squidclient
- Best Image Replacement Technique guide
- Gmail catching up with the IssueTrackerProduct
- Wanted: good Javascript for handling key events
- Toggle Zope's debug mode
- Jed looking like Emacs
- R.I.P Palm Treo
- Pimp my COREBlog
- Ruby and Python benchmarked
- Smurl from Python
- Python regular expression tester
- 'Cache-Control' or Expires
- Misstake or hidden Nazi message?
- firstChild.nodeValue vs. innerHTML
- Announcing Smurl - a free URL compressor
- Amazon bug in shopping basket
- Random ID generator for Zope
- British English for Americans
- More street 3D drawings
- Insect photography
- An ideal company blog tool
- Back from Djerba, Tunisia
- Ricardo Semler's Semco English website
- Dream Theater - Octavarium
- Button tag in bloody Internet Explorer
- Worst album covers (updated)
- Jealous of Google stemming
- AJAX seach on 404 error pages
- Just Oracle and IBM?
- Release package file size
- \B in Python regular expressions
- London bus 26 from Hackney
- Interesting NHS error message
- Kung Fu in Clapham with Richard
- SmartDict - a smart 'dict' wrapper
- Rent a chest
- Drop down selects that learn
- Unaffected by the London blasts
- Lisp compared to Python
- Falling mannequin animation
- Module dependencies of IssueTracker.py
- ztar - my wrapper on tar -z
- Zope in DevelopmentMode
- AJAX accelerated web widgets
- Zope compared to PHP
- Software Patents in the EU (Stallman's explaination)
- Authentic Locations
- Regular Expressions in Javascript cheat sheet
- Scandinavian Airlines phone booking
- \b in Python regular expressions
- My trade salary has gone down, apparently
- chmod files differently to directories
- Good design examples for a non-blog
- window.onload from before
- I'm back! Peterbe.com has been renewed
- Sound of different languages
- Kittenwar a clever way of voting
- Cheeky Explore (Dictionary of Everything)
- The Brick Testament
- MOBi phonebook into Excel
- Plone.org calls it Issue Tracker
- Susan Senator's book
- List of casts in PostgreSQL
- Kingdom of Crap
- London Review of Personals
- Jacobian highlighter
- Better select boxes for issue tracker
- The Geeks Revenge
- TAL here hack in Plone
- Gmail shortcuts
- Grep results expanded
- Serious flaw in Bose headphones
- pg_class to check if table exists
- Google blogs about their Maps
- "Can you help me about ZOPE?"
- Noise reduction headphones
- Interior Octopus
- Find print statements in Python code
- Your webpage in Lynx
- Control comment spam
- Python Cookbook arrived
- callable Python objects
- Ugly one-liner to debug an object in Zope
- Searching for the obvious
- More amazing sidewalk art
- Read in passwords with bash
- Add links to a text (take III)
- U.S. memory championship
- Fork Art, up yours Uri Geller
- Adminspotting t-shirts
- Best Hubbles Space Telescope Images
- Swedish holidays explained
- All the Seinfeld quotes you can eat
- Good usage of drop-downs
- Suspend and resume output in terminal
- Encrypted files in Emacs
- File attachment widget with Javascript
- BaconWhores ha!
- Audioscrobbler indexes your MP3 usage
- Debian popular in Sweden
- Optimize Plone.org with slimmer.py
- Python optimization anecdote
- Gmail account giveaway
- Combining MOBi and EconoAccount
- How to deal with tele-marketing calls
- Good posture website
- "Snowy Tribute to Calvin & Hobbes"
- Top movie deaths
- Google Video (beta)
- Google is blind
- niceboolean() - converts what you say to what you mean
- parametrize_url() adding parameters to URLs
- Gmail spam filter
- My favorite CSS Zen Garden design
- Running simple SQL commands on the command line
- Valuble site: Commonly Confused Characters
- Infinitely deep illustration
- Merry Christmas
- The problem with CSS
- __call__ folderish Zope objects
- Ugliest site of the month, plus44.com
- Python package path when executed elsewhere
- Happy Birthday to me!
- Do you know what safe txt is?
- Kung fu competition photos from Sutton
- Graduation photos
- CorpCalendar review on ZopeMag.com
- HTML entity fixer
- Hacking and martial arts
- Ugliest site of the month, hernia.org
- Make your settings in .Xdefaults come true
- Bad Santa
- Indent text like email clients do
- Add links to a text (take II)
- XHTML Transitional versus Strict
- Add links to a text with URLs
- Do you know about Firefox?
- City & Islington kung fu charity event
- Urwid - curses-based UI/widget library for Python
- Massrenaming with shell and python
- Bush country
- Reindexing AVI films with mplayer
- Time Machine Ballistics
- Disable Caps Lock in Linux
- I'm back and awake!
- Findory Blogory, like Google News Alerts but for blogs
- Tell me your birthday
- (Idea) A new anti-spam law
- Email-your-friends reminder web application
- Ugly footballers
- PixelField a game for pixel-lovers
- People who really can't think in numbers
- Changing the size of a textarea box
- Python inspect module
- Film Music by Alfred Schnittke
- Classic Movie Scripts
- Obsolete Computer Museum
- Psychiatric med student Michelle's story
- Pretty print SQL script
- Integer division in programming languages
- Overcomplicated password requirements on Oystercard.com
- Make your own 3-D pictures
- Most common English words
- Date plus years or months or weeks
- World Oil Depletion and the Inevitable Crisis
- WYSIWYG inline HTML editors
- Intel.com incompatible to Mozilla
- University results
- Date formatting in python or in PostgreSQL
- Honesty and advertising on Gizmodo
- Paper Wars
- On the amount of spam
- Göta Kanal 2004 holiday photos
- Company loyalty
- Life of Pi
- The World's Top 100 Wonders
- Now I have a Gmail account
- Evil HTML frames
- Holiday for a week
- TBODY tag in a XHTML table
- Dan's just been to Sweden
- Underwater MP3 player
- Afghan national sport photos
- Ugliest site of the month, stradbally
- Kung fu photos from Varberg, Sweden
- Impressive baby photos website
- SquareOneTV
- Corp Calendar 0.0.5
- Different phone, same number
- Test your computer secretary skills
- Accessible Pop-Up script
- Washing sense of humour
- Nicking images from our website
- Lost my mobile phone
- 10 reasons for web standards
- "My Secret Life As A Prostitute"
- Find song by lyrics
- Experimenting with binoculars
- Can you add them all up?
- McDonalds Calories
- "I Am American"
- Jaguar cars website
- No more university for me
- PlogRank - my own PageRank application
- Google PageRank matrix calculator (graphically)
- Bush votes: inverse proportional to education and IQ
- Why should I use XHTML?
- Google hardware history
- Two done three to go
- Krispy Kreme doughnuts store opening
- Zurich tram service problem
- Distributed compiling with distcc
- Heil Jed and Dave Kuhlman
- Obfuscating C contest running now
- Outbreak - fight the viruses
- Molvania: A land untouched by modern dentistry
- Windows Noise Becomes Music
- Blogitem 040429 1
- Don't bogart that camera my friend
- A whole website about Shallots
- Food from Sweden
- Throw the penguin
- Anna and Johan photo modelling
- About Ricardo Semler and Semco
- Proper wireless computing
- Kill Bill flash game
- Funny Plone quote
- Emacs html-mode for .zpt and .dtml
- The importance of being findable
- LaTeX Word Counter
- My dissertation report
- The 5 most spectacular photos of 2003
- How to fold clothes
- XHTML, HTML and CSS compressor
- PostgreSQL, MySQL or SQLite
- Challenge Osama with scimitar or sword
- Anti-email-harvesting with JavaScript
- Metamorphosis, Franz Kafka
- FWC November competition video
- Pylets, more than just mod_python
- EuroPython in Sweden, I should go
- Google PageRank algorithm in Python
- What's so bad about HTML guys?
- He must really hate C
- Virtual feminization
- The Dead Zone
- Finished the bulk of my dissertation
- The meaning of "hacking"
- To readline() or readlines()
- Python UnZipped
- Deep sea fish, lots of pictures
- PSP - Python Server Pages
- Funniest Volvo advert ever
- How to uninstall LeakFinder in Zope
- Apostrophes in predictive text
- Moving Image Contest for Creative Commons
- Optimized stylesheets
- World Press Photo, the winners
- the knife: Pass This On
- Unusual job offer
- CPU info
- Lemon - Commodore 64 Heaven!
- StreetArt in London on Ploggle
- Lots of shit about shit
- Share Your OPML
- What will you not wear today?
- Anti-spamming email harvesting
- Bugknits
- Practical CSS
- Best water in the world
- Neon-Brite, a 360 degree theatre play
- Future plan for IssueTrackerProduct
- Ploggle
- WEBoggle mind bogglingly addictive
- This site 7 months ago
- Why Sun should Open up on Java
- C++ templates or not
- Ugliest site of the month, yoyoguy.com
- MozillaZine Knowledge Base
- Afghan expressionism in a modern era
- RSS 1.0 feed now
- Getting fired in 3 hours
- Memory Test on BBC Science
- Breaking usability principles for usability
- DOCTYPE in PageTemplates with METAL
- Dan Heller's Photos of Italy
- Man mailed himself home
- Do you know about Wikipedia?
- Techie things I want to buy from ebuyer.com
- Adding a year in PostgreSQL
- PayPalSucks.com, can't be good for PayPal
- Photo.net, Photograph of the Week Gallery
- S21: The Khmer Rouge Killing Machine
- Photofusion in London
- The Chinese Martial Arts Film at BFI
- I'm a computer nerd, but...
- ClearWind.ca a good looking Plone site
- Julien Donkey-Boy
- 30 days solid McDonalds diet experiment
- What Yin-Yang is
- George W. Bush and the $85.2 million ad campaign
- Grep in Jed
- Keybinding ALT-F in Jed
- Passed my grading!
- Dabbrev in Jed
- Labels in HTML forms
- Robots.txt Validator
- MathML and displaying Math on the web
- Hit the penguin
- SimCity 4 and SimCity Classic
- Same but new keyboard, lovely change
- Photojournalism on the former Soviet block
- Effects of LSD on drawing
- Quick URLs for some pages
- Ugliest site of the month
- China, being trained in prosecution by Sweden
- Lost In Translation
- Pholph's Scrabble Generator
- So vivid dreams I couldn't get out!
- Recon - Regular Expression Test Console
- Printer friendly and PDF version of every page
- Crontab wizard
- About page finally written
- "It's just a website" by Tom Smith
- eBay and freedom to sell whatever you like
- How old is Bettys dad?
- PythonPoint
- Creating a user for postgresql
- Vivisimo - clustered searching
- Photos from Mars
- US Zip codes
- Blogitem 20040106 1800
- Back in town and not so ready for exams
- Two exams on the same day
- A jerk with a good website
- Off to Sweden!
- A nice and simple article about Zope
- LOTR - Return of the King
- Adaptation
- ESI and Squid and Zope
- International Snow Sculpture Championships
- Happy Birthday to me!
- "Historisk Guide till England"
- Man arrested for spamming
- Nintendo emulator online in Java
- Back online
- The Linux Cookbook
- Amazon.co.uk Top Reviewers
- Bad news for Stockholm
- Mr. Picassohead
- Case study where Python was the final choice
- Moscow Metro
- The Pentagon is big, very big
- Blogitem 20031129 1500
- More terrible album covers
- London underground map in 3D
- Back from the competition
- Kung Fu competition
- New phone, same number
- 3D Sidewalk Paintings
- Google search terms
- Old motel postcards in the US
- SpamBayes and SSL thanks to Stunnel
- Happy Birthday Malin!
- Matrix ASCII animated!
- Zolera SOAP Infrastructure 1.4
- Recipe of creating the best paper plane
- The worst jobs in science
- Amazon Marketplace - an odd update
- Amazon Marketplace - great web app
- Naughty but very happy
- This Is Broken
- Worst Album Covers Ever
- Hubbell and Hubbell
- The Matrix Revolutions, naive but spectacular
- Python for .NET
- Parrot; CLR for the poor man
- The end of the world, a scenario
- Ever wondered how much $87 Billion is?
- CSS Zen Garden
- Blogitem 20031031 1021
- Kung Foo
- Tangram
- One hot ear
- Sand java applet
- Search Inside the Book
- Programmers Block
- Man jailed for smuggling eight snakes in trousers
- Kill Bill vol. 1
- Sony Ericsson P900
- Systembolaget under pressure
- Nice date input
- My breakfast
- New feature: RSS feed
- Data Structures and Algorithms in Python
- Who's who in the 'axis of evil'
- Web design practices
- Loadtesting this site and compare with static Apache
- 2 Years later
- Once upon a time in Mexico
- Geography: The lost world
- "Sweden and Denmark top in quality of life"
- Trippy photo
- Cartoons on Aljazeera.net
- Why You Should Switch to the Mozilla Firebird browser
- Really really shitty webdesign
- First day back at university
- Google News Alerts (BETA)
- Crazy about Linux
- Wow! Latest Plone sprint
- MOHO at Restaurant show photo
- Cheer for Swedish coders
- Funny Dilbert for mathematicians
- Best in Show, really funny
- Good summary about Ricardo Semler
- New search feature on this site
- City of God
- Perfect parking formula
- Great article about writing games with Python
- Google as calculator
- Photos from Cornwall camp 2003
- On training camp for a week
- Some new Kung Fu photos
- The Seven-day Weekend
- Whale Rider
- Terminator 3 Rise of the machines
- How to not get any spam
- Squid now working in front of my Zope
- Back from my holidays
- Fishing photos from last year
- On holiday for a week
- Some new Kung Fu photos
- Last grading result
- Ang Lee slow motion but not
- Exam results arrived today
- Lots of little Agent Smiths
- The "omit-tag" tag
- Fry-IT people picture
- First news item of the new webpage