The Curious Engineer

All blogs / Frontend / CSS / browsers

phpied.com

phpied.com

Stoyan's blog

Frontend / CSS / browsersPerformance / optimizationJavaScript / TypeScriptPHP

Posts
559 from 7 Mar 2005 to 4 Oct 2026
Posting
monthly (11 in the last year)
Kind
personal blog
Feed
https://www.phpied.com/feed/

2026 11

  1. Debugging download initiator
  2. llms.txt: agent-optimization wishful thinking
  3. I am now an Instagram Micro-Influencer
  4. Starting in the Analog domain
  5. Quick and dirty linting
  6. Measuring SVG rendering time
  7. Minimum viable image optimization
  8. Oops, I build.js’d it again
  9. Type checking without the muck
  10. Do It Yourself: code coverage and testing
  11. Maximally minimal build process

2025 3

  1. Import JavaScript like it’s 2026
  2. Introducing Lizzy.js
  3. First timid steps in Rust

2024 19

  1. A quick WordPress Super Cache fix
  2. Turn an animated GIF into a <video>
  3. AI’s “streaming text” UIs: a how-to
  4. Inverse font subsetting
  5. Web font sizes: a more complete data set
  6. @supports and @font-face troubles
  7. Letter frequency in the Bulgarian language
  8. Web font file size study: a variable font addition
  9. The zebra jumps quickly over a fence, vexed by a lazy ox
  10. Lessons learned from 222,557 font file subsets?
  11. Font-face toggler bookmarklet v2
  12. “Your app crashes my browser” talk
  13. Chrome extension: Open in this tab
  14. Minimal SVG Favicon
  15. Capturing web page video with a couple of bookmarklets
  16. The Truth(tm) about encoding SVG in data URIs
  17. How many bytes is “normal” for a web font: a study using Google fonts
  18. Font-face toggler bookmarklet
  19. Image requests in hidden content

2023 9

  1. Minimum viable no-image image src
  2. Perfplanet calendar ’23 call for articles
  3. A quick study of PDF optimization
  4. Running JPEG-XL tools on shared Dreamhost
  5. Fixing INP with a VIEWPORT tag
  6. A circle of web performance innovation
  7. Lighthouse diff + WebPageTest
  8. Jehl’s Law of Web Performance
  9. Quick BPP (image entropy) check

2022 3

  1. Progressive
  2. Faster WordPress rendering with 3 lines of configuration
  3. Write to an Airtable with PHP

2021 3

  1. Perfplanet calendar ’21 call for articles
  2. Perfplanet calendar’s oldies but goodies
  3. ffmpeg: make a video with a static image and an audio file

2020 5

  1. Video grids with ffmpeg
  2. Randomizing music with MuseScore and Node.js
  3. Natively lazy-loading Facebook social plugins
  4. Life after Facebook?
  5. A programmer’s job dimensions

2019 13

  1. WebAudio Deep Note, part 5: gain node
  2. WebAudio Deep Note, part 5: nodes
  3. WebAudio Deep Note, part 4: multiple sounds
  4. WebAudio Deep Note, part 3: loop and change pitch
  5. WebAudio Deep Note, part 2.1: Boots and Cats
  6. A bookmarklet: dataURI, please!
  7. WebAudio Deep Note, part 2: play a sound
  8. WebAudio Deep Note, part 1: intro
  9. Exploring prefers-reduced-motion
  10. Integrating React Profiler
  11. Prettier in TextMate
  12. Asynchronous inline scripts via data: URIs
  13. Defining user styles

2018 8

  1. Using ESLint in a script
  2. Organizing a React component these days (H1/2018)
  3. This page loaded in X seconds
  4. Do Search Engines speak JavaScript?
  5. OnlineMusicTools.com
  6. How it’s made: flashcards with Italian slang for musicians
  7. Say Yuri, or How to kill an hour on a rainy afternoon
  8. ffmpeg to mix audio files

2017 20

  1. Minimum Viable Sharing Meta Tags
  2. Taking Mozilla’s DeepSpeech for a spin
  3. Performance calendar ’17 call to all
  4. Browser remembers your password, but you don’t? Take it back!
  5. hg revert a single file from the repo
  6. Stylelint + TextMate integration
  7. Hello Stylelint
  8. PSA: always add a generic font-family backup
  9. Font Fiddling
  10. Quick stats on html/js/css sizes
  11. Intercepting new Image().src requests
  12. WebMIDI test page
  13. Batch convert image formats with imagemagick
  14. Intervals
  15. Photocreep
  16. The last line-height you’ll ever need
  17. HTTPS migration: a WordPress blog hosted on Dreamhost
  18. When did blog comments die?
  19. #protip: Terminal to Finder and back again
  20. create-react-app + sw-precache = PWA

2016 10

  1. File API Input Layer
  2. How to tell a progressive JPEG
  3. List of all the countries: HTML select and JSON too
  4. Nightmare scenarios with WebMIDI
  5. Performance Calendar call for participation
  6. Hello WebMIDI
  7. Oversharing with the browser’s autofill
  8. React: Up and Running
  9. Custom animated cursor via canvas
  10. PM outta control

2015 6

  1. How to write unmaintainable PHP code [2009]
  2. From JSXTransformer to Babel
  3. smush.it is dead, long live smushing
  4. f8 2015
  5. Making an album sampler video on the command line
  6. ffmpeg: batch convert

2014 8

  1. Downloading top X sites’ data with ZombieJS
  2. Jest + jQuery for testing a vanilla “app”
  3. CSS diffs #2
  4. css diff
  5. DIY source maps
  6. Writing ES6 today with jstransform
  7. Beacon performance
  8. Hello subpixel world

2013 14

  1. ReActiveTable bookmarklet
  2. NYC.bind(me)
  3. Server-side React with PHP – part 2
  4. Borrowing typography tricks from the masters
  5. Server-side React with PHP
  6. Installing v8js for PHP on a Mac
  7. Reactive table
  8. Remarkable React
  9. Here’s to a faster Recommendations plugin
  10. CSS animations off the UI thread
  11. C3PO: Common 3rd-party objects
  12. Speed geek’s guide to Facebook buttons
  13. Run jsperf tests in a bunch of WebPagetest browsers
  14. webkit css-on-demand issues

2012 27

  1. Digging into the HTTP archive #2
  2. Digging into the HTTP archive
  3. Deck the Halls 2012
  4. WebAudio: live input
  5. WebAudio: oscillator in JS
  6. In Public
  7. Non-onload-blocking async JS
  8. 3po
  9. <style> tag to inline style=”” attrrib
  10. YSlow development: custom rulesets
  11. YSlow development: setup
  12. YSlow development: getting started
  13. Anaconda Limousine: the guitar parts
  14. 3PO#fail
  15. getUserMedia in Opera 12
  16. CSS variables
  17. Canvas pixels #3: getUserMedia
  18. Canvas pixels #2: convolution matrix
  19. Pixel manipulation in canvas
  20. Web Performance Daybook vol. 2
  21. CSS and the critical path
  22. Async JavaScript callbacks
  23. Ajax with images
  24. Update a far-future expiring component
  25. 5 years later: print CSS still sucks
  26. Simple music player
  27. The Truth about semicolons in JavaScript

2011 29

  1. Wish You a Merry Christmas 2011
  2. Imagine
  3. Velocity Europe discount
  4. Imagemagick crop and center
  5. Social button BFFs
  6. x-webkit-speech input and textareas
  7. Overlooked Optimizations: Images
  8. Sultans of Speed
  9. Book of Speed
  10. YSlow 2.0: the first sketches
  11. Perfplanet.com is open
  12. Preload in visual search suggestions
  13. Lazy HTML evaluation
  14. Velocity countdown
  15. There was a dude who liked to write code
  16. Simple Sharding Logic
  17. Silicon Valley (roughest place I’ve ever been)
  18. Audio sprites
  19. A rounded corner
  20. HTTPWatch automation with JavaScript
  21. YSlow/Chrome hacking
  22. JavaScript-style object literals in PHP
  23. When is a stylesheet really loaded?
  24. Velocity online conference March 2011
  25. Automating HTTPWatch with PHP #3
  26. Automating HTTPWatch with PHP #2
  27. Automating HTTPWatch with PHP
  28. Command-line CSS spriting
  29. Another LOC

2010 24

  1. CSS railroad diagrams
  2. CSS Lexer
  3. CSS minifiers comparison
  4. cssmin.js in windows shell
  5. Preload, then execute
  6. Inline MHTML+Data URIs
  7. The proper MHTML syntax
  8. The European Tour 2010
  9. JavaScript JS Array Documentation (#jsonf, #promotejs)
  10. Web Testing Framework
  11. Conditional comments block downloads
  12. YUI CSS min – part 3 – hacks
  13. YUI CSS Min – part 2
  14. Top 5 reasons to send your resume to Yahoo! Search today
  15. 15 minutes could save you…
  16. 10 more search results
  17. Browser sniffing with conditional comments
  18. Preload CSS/JavaScript without execution
  19. IE9 and JPEG-XR: first impressions
  20. Publishing 5 books this year
  21. YUICompressor’s CSSMin
  22. Uncompressed data in base64? Probably not
  23. One-click Minifier Gadget (OMG) – initial checkin
  24. Performance job offers

2009 70

  1. Feliz Navidad Merry Christmas 2009
  2. The performance business pitch
  3. CSS performance: UI with fewer images
  4. iPhone caching
  5. Progressive rendering via multiple flushes
  6. Extreme JavaScript optimization
  7. The new game show: “Will it reflow?”
  8. DOM access optimization
  9. Rendering: repaint, reflow/relayout, restyle
  10. How To Measure Web Site Performance
  11. JavaScript loading strategies
  12. Free-falling waterfalls
  13. Give PNG a chance
  14. Big list of image optimization tools
  15. Reducing the payload: compression, minification, 204s
  16. Caching vs. inlining
  17. Duplicates and near-duplicates
  18. Collecting web data with a faster, free server
  19. Data URIs, MHTML and IE7/Win7/Vista blues
  20. The pain points of having fewer components
  21. Reducing the number of page components
  22. Psychology of performance
  23. Required reading
  24. Performance tools
  25. The performance roadmap
  26. Performance Advent Calendar 2009
  27. Statsy – more data points for markup quality
  28. Flipity flop – mmm.phpied.com
  29. Open source CMS award 2009
  30. @font-face gzipping – take II
  31. Browser’s implied globals
  32. Gzip your @font-face files
  33. CSS munging – a FAILed experiment
  34. cssmin.js
  35. Help write the lyrics to “Give PNG a chance”
  36. JavaScript shell scripting
  37. Ignite Velocity: Image Weight Loss Clinic
  38. Giving an Ignite talk
  39. Sorting CSS to reduce gzip file sizes?
  40. The art and craft of postload preloads
  41. “Don’t make me wait” – slides from my eBay tech talk
  42. Prayer to the God of Programming
  43. Test post from YQL
  44. The star hack in IE8 and dynamic stylesheets
  45. Installing a bunch of PNG tools on the Mac
  46. Book things
  47. Slides from JSConf
  48. MHTML – when you need data: URIs in IE7 and under
  49. data:urls – what are they and how to use them
  50. Welcome SitePoint.com readers
  51. Relative to absolute links with JavaScript
  52. FireEagle and geo-location fun
  53. 204 No Content
  54. Installing PHP and Apache on Mac OSX – that was (pretty) easy
  55. Picassa’s progressive photo rendering
  56. Content-to-markup ratio bookmarklet
  57. The 5 Laws of the Website Anything
  58. Replace the Home button with a script
  59. Search site bookmarklet with YUI and BOSS
  60. JSLint on Mac + TextMate integration
  61. Installing Rhino on Mac
  62. Blog-to-podcast with ffmpeg
  63. Hide broken images
  64. FTP on the command line
  65. OpenSearch-enabling your blog
  66. >>> $$(selector)
  67. Random MySQL date
  68. Installing JPEGTRAN on a Mac or Unix/Linux
  69. Image optimization – in Chinese
  70. Countries visited in 2008

2008 81

  1. Merry Christmas 2008!
  2. Paint.NET is cool…
  3. Installing ExifTool on Dreamhost
  4. PNG optimization tools
  5. Start wearing purple
  6. image diff
  7. php|works Atlanta
  8. Social network marketing – lessons from the elected president
  9. Best open-source PHP CMS 2008
  10. smush.it update
  11. Short Amazon affiliate links – a bookmarklet
  12. Javascript console in IE
  13. JavaScript’s class-less objects
  14. Smush.it presentations
  15. smush.it is a smash hit
  16. OOJS book free chapter 8 on YUIblog
  17. php|works and pyWorks
  18. Installing pngcrush at dreamhost
  19. At the (Java)Ranch this week
  20. Vote for my SXSW 2009 panel
  21. Advertising and privacy
  22. ppt to pdf to slideshare via imagemagick
  23. Today’s mail: a box full of … my book!
  24. Seeing stars
  25. Yahoo Music API
  26. first book review and a new instrumental piece
  27. Now available: “Object-Oriented JavaScript” by Stoyan Stefanov on Amazon.com
  28. location=location
  29. When PNG8 is not the right choice
  30. a DOCTYPE is all it takes
  31. fun: front-end performance vs back-end performance
  32. Making money with templates
  33. The book, the book
  34. HttpFox
  35. My online footprint lately
  36. The JavaScript book is almost there
  37. Steppn
  38. Image optimization – 7 mistakes
  39. Happy Download Day
  40. no mo’ adsense
  41. Half-a**ed Adsense
  42. Kiss alive
  43. www vs no-www and cookies
  44. Bookmarklet maker tool
  45. Back to Bulgaria
  46. Load a photo in a canvas, then flip
  47. Firefox/Firebug extension creator wizard
  48. Editing made easy: 6 words to cut out
  49. Sancta Simplicitas: minimalistic WordPress theme using YUI CSS
  50. strftime() in JavaScript
  51. A collection of writing tips
  52. Rules for fast web pages
  53. When client-only validation is good for business
  54. Santa Monica apartment hunting
  55. Background repeat and CSS sprites
  56. you’ve been blogging too much when you…
  57. Crowes and Crows
  58. The PHP QC presentation featured on slideshare’s homepage
  59. JSPatterns.com up again
  60. JoJo: Javascript Junk generator
  61. sleep() in JavaScript
  62. 20 new performance best practices
  63. PHP-style $GLOBALS in Javascript?
  64. Canvas pie with tooltips
  65. replace selected text (Firefox)
  66. Simultaneuos HTTP requests in PHP with cURL
  67. There will be junk
  68. Sharpenning those flamenco skillz
  69. Canvas pie
  70. Audacity + Starcaster
  71. Google docs bookmaklet to format code
  72. Zlatina = 4
  73. MP3 player from Yahoo! – bookmarklet
  74. YUI pie chart example
  75. Just another church in LA
  76. Table to chart via JavaScript
  77. Starcaster
  78. 7 habits for a highly effective performance optimization effort
  79. Project management for the rest of us
  80. PEAR site minor redesign
  81. Text_Highlighter 0.7.1 and hiliteme.com updates

2007 59

  1. Netflix – how many movies you’ve rented
  2. Fancy formatting
  3. Browser Wars 2.0?
  4. How to write computer books
  5. YSlow-er?
  6. Story of stuff
  7. 3 additional Web 1.0 tips and tricks
  8. Patch’d
  9. Blogroll updated
  10. Image fun with PHP – part 2
  11. My recent Maui trip
  12. Maui, PHP Quebec, etc
  13. On Raymond Chandler’s writing
  14. The Front-end Cerberus
  15. My performance article up on SitePoint
  16. JS/PHP string concatenation mistype
  17. “Save AnyThing” offline with a Google Gears bookmarklet
  18. She has it all figured out
  19. IE has a problem with getElementsByName
  20. 5 domain names – 5 CMS’s
  21. The “best programmer ever”
  22. Quick CSSSprites.com stats
  23. file_put_contents() for PHP4
  24. 12 questions to ask your host-to-be
  25. Make your javascript a Windows .exe
  26. JavaScript: Calling the unnamed
  27. Order of execution of event listeners
  28. YSlow performance extension for Firebug
  29. LA Web devs meetup at Yahoo
  30. JavaScript patterns (dot com)
  31. No! to pagerank
  32. csssprites.com update
  33. A JavaScript implementation of the Decorator pattern
  34. CMS award nominations open
  35. PHP/Javascript dev tools for TextPad
  36. phpBB front-end optimization – 1 hour workshop
  37. On a publishing diet
  38. CSS Sprites generation tool
  39. Weird attempt for flicker-free rendering solution
  40. Smart browsers don’t download unneeded images
  41. Good PHP CMS?
  42. Delay loading your print CSS
  43. YUI anywhere (bookmarklet)
  44. Really simple Really Simple Syndication syndication
  45. My 5 strenghts
  46. Image_Text 0.6 beta is out
  47. YUI good for your performance
  48. Two bookmarklets for debugging in IE
  49. Center an image with CSS
  50. JSON data island
  51. Check/toggle ’em all
  52. AJAX-MCV in Russian
  53. Dynamic SCRIPT and STYLE elements in IE
  54. User stylesheet in IE
  55. Performance tunning with PEAR::DB
  56. DB-2-MDB2 in Portuguese
  57. Canadian
  58. Using PEAR and AWS to keep an eye on Amazon
  59. Reusing an existing database connection with MDB2

2006 65

  1. MySQL Events scenario (and a funky subquery)
  2. MySQL events
  3. Laziest image resize in PHP
  4. MySQL Views
  5. Quick MySQL 5 penetration survey
  6. Performance tuning with MDB2
  7. MySQL triggers
  8. Firebug console for IE
  9. Y! homepage – CSS sprites in action
  10. Charlotte and Beck
  11. Microsoft’s IIS and PHP
  12. (almost) Canadian
  13. Personal news update Nov/06
  14. JSON renderer for Text_Highlight
  15. JS includes – the saga continues…
  16. Deferring scripts for faster rendering
  17. When is a JavaScript include ready?
  18. The PEAR book
  19. Yahoo API search with JavaScript alone
  20. OPML to HTML via JavaScript
  21. RSS feeds
  22. Rendering styles
  23. 3 ways to define a JavaScript class
  24. Uncategorized
  25. JSON JavaScript cookies
  26. Exploring Web1.0 kitsch – YUI snowflakes
  27. quirks or no quirks bookmarklet
  28. ABAP code syntax highlighting
  29. AJAX MVC (so to speak)
  30. HTML2DOM
  31. The PEAR book is on it’s way
  32. HiLiteMe.com updated
  33. Greasemonkey – execute custom javascripts on any page
  34. HiLiteMe.com
  35. Parent’s styles in an iframe
  36. SAP container for PEAR::Auth
  37. Hello POV-Ray
  38. What’s $this?
  39. phpbb and security
  40. phpDoc clip library for TextPad
  41. News update
  42. Bulgaria, IPM, quick update
  43. Amazon Connect blog
  44. Form auto-fill bookmarklet
  45. Enumerating with MySQL
  46. PHP fun
  47. Opacity for the thumbs
  48. JavaScript to find your Yahoo! ranking
  49. Suddenly structured articles
  50. Curly underline
  51. The Focus and The Pocus
  52. Fly Yahoo UI
  53. Happy birthday and a new book
  54. Form auto-fill toolbars and the colors of the inputs
  55. Getting an RSS feed with the Zend framework 0.1.1.
  56. toAjax() in about 6 hours 49 mins
  57. Bitwise operations in JavaScript
  58. RGB color parser in JavaScript
  59. coComment
  60. Light color fonts in inputs
  61. AJAX banner rotation
  62. Better time input
  63. DB-2-MDB2
  64. Chicken Soup for the Programmer’s Soul
  65. Running JSDoc on Windows

2005 72

  1. phpBB old topics locker
  2. Car accident
  3. Hosted blog at wordpress.com
  4. Found in translation
  5. phpBB book review
  6. XAJAX intro and more from Marco
  7. The Invisible Ad
  8. Marquee search-engine spam
  9. Hacking the hacker’s (Paul Graham’s) page
  10. Nielsen’s list of blog usability issues and me
  11. Everybody is gay, er… spammer
  12. IE script tag problem
  13. WebConsole – Take command (line) with AJAX
  14. Audioslave live in Montreal
  15. CSS coding conventions
  16. Pearl Jam live
  17. Texas hold’em
  18. Image fun
  19. Resources are passed by reference
  20. Proposal for PEAR::Structures_DataGrid column formatter
  21. Discount on the Zend PHP certification exam
  22. Coldplay live
  23. My certification story
  24. Working for a small company
  25. 30 seconds AJAX
  26. Wikimania
  27. Javascript includes – yet another way of RPC-ing
  28. PacktPub donates royalties to open-source projects
  29. Open source – BBC and Google
  30. What a Wonderful World!
  31. Another PHP cert blog
  32. Certification press release from Zend
  33. HTML entities converter
  34. toLowerCase() bookmarklet
  35. getElementById(‘description’) in IE
  36. The phpBB book is out
  37. ZCE certificate
  38. Nathalie
  39. Building Online Communities with phpBB – coming soon
  40. PHP certification books – sample chapters
  41. Alexa 500 server stats (the code)
  42. Alexa 500 server stats
  43. Zend Certified Engineer
  44. Source highlighting article at SP
  45. Strcmp
  46. serializing
  47. A character from a string
  48. Array sorting options
  49. Walking the array
  50. Array keys and case sensitivity
  51. The old superglobals
  52. Redefine $this?
  53. Static methods and performance
  54. Static methods and $this
  55. Modulus
  56. Superglobals
  57. Variable scope
  58. Function parameters passed by reference
  59. Evaluating expressions in for-loops
  60. Breaking out of the loops
  61. lat2cyr on phpbbhacks.com
  62. booleans casted to strings
  63. highlighting php source code in WordPress
  64. alternative if-then-else syntax
  65. if-then-else
  66. prefix/postfix increment/decrement
  67. Assignment by reference
  68. Smart quotes in WP
  69. About the PHP constants
  70. Smart quotes
  71. First off – some links
  72. Let’s get, let’s get, let’s get started