[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"sanity-oEAqAwx1uHjkVmuGtcprOBhx0Po3QW64Eoq8Nudarh0":3,"sanity-FLRG8hkucd7-YWd5AOtmM8o6wMp1uQRfZDR3iZaUyVw":359},{"data":4,"sourceMap":-1},{"latestPodcast":5,"latestReleases":14,"post":39,"recent":334},[6],{"_id":7,"publishedAt":8,"slug":9,"sponsored":12,"title":13},"f83eb5f0-1237-487f-84d8-f7abf2318c39","2026-06-25T07:40:00.000Z",{"_type":10,"current":11},"slug","code-isnt-causing-your-production-failures",null,"Code isn’t the only thing causing your production failures",[15,21,27,33],{"_id":16,"publishedAt":17,"slug":18,"title":20},"eb5b66eb-9410-4329-83bb-22bbff39402a","2026-04-28T13:00:00.000Z",{"_type":10,"current":19},"turn-scattered-knowledge-into-trusted-intelligence","Turning scattered knowledge into trusted intelligence: Stack Internal 2026.3",{"_id":22,"publishedAt":23,"slug":24,"title":26},"369c2401-b62e-4a37-8ff8-bf603023ecad","2026-03-02T15:03:00.988Z",{"_type":10,"current":25},"what-s-new-at-stack-overflow-march-2026","What’s new at Stack Overflow: March 2026",{"_id":28,"publishedAt":29,"slug":30,"title":32},"5e9053a4-07ea-447c-91ea-29e0b6228537","2026-02-02T15:00:00.000Z",{"_type":10,"current":31},"what-s-new-at-stack-overflow-february-2026","What’s new at Stack Overflow: February 2026",{"_id":34,"publishedAt":35,"slug":36,"title":38},"a1b538eb-a8a6-46d0-80a1-ac70ec9bb935","2026-01-05T10:00:00.000-05:00",{"_type":10,"current":37},"what-s-new-at-stack-overflow-january-2026","What’s new at Stack Overflow: January 2026",{"_createdAt":40,"_id":41,"_rev":42,"_type":43,"_updatedAt":44,"author":45,"body":59,"comments":311,"dateUrl":312,"excerpt":138,"legacyBody":313,"product":12,"publishedAt":316,"slug":317,"sponsored":12,"tags":319,"title":333,"visible":311},"2023-05-25T09:36:57Z","wp-post-3343","07ZbrKPSUrjrV4wQ6fI9rD","blogPost","2023-07-13T14:54:20Z",[46],{"_createdAt":47,"_id":48,"_rev":49,"_type":50,"_updatedAt":51,"avatar":52,"employee":54,"name":55,"role":56,"slug":57},"2023-05-23T16:27:18Z","wp-author-114","07ZbrKPSUrjrV4wQ6fam8u","blogAuthor","2023-08-29T11:49:01Z",{"_type":53},"image","former","Jeff Atwood","Co-founder",{"current":58},"jeffatwood",[60,83,102,132,139,152,157,182,201,209,219,227,235,254,295],{"_key":61,"_type":62,"children":63,"markDefs":78,"style":82},"1f7590d9642b","block",[64,69,74],{"_key":65,"_type":66,"marks":67,"text":68},"1f7590d9642b0","span",[],"Thanks to the ",{"_key":70,"_type":66,"marks":71,"text":73},"1f7590d9642b1",[72],"cab4fb1236cc","herculean efforts of several Stack Overflow users",{"_key":75,"_type":66,"marks":76,"text":77},"1f7590d9642b2",[],", we were finally able to deliver some long-overdue bugfixes to our beloved WMD editor in early January, once it was fully reverse engineered.",[79],{"_key":72,"_type":80,"href":81,"reference":12},"link","http://blog.stackoverflow.com/2009/01/wmd-editor-reverse-engineered/","normal",{"_key":84,"_type":62,"children":85,"markDefs":99,"style":82},"a2c7cdeda719",[86,90,95],{"_key":87,"_type":66,"marks":88,"text":89},"a2c7cdeda7190",[],"(Sadly I still have yet to hear from the original WMD author, ",{"_key":91,"_type":66,"marks":92,"text":94},"a2c7cdeda7191",[93],"a2a34701e5ec","John Fraser",{"_key":96,"_type":66,"marks":97,"text":98},"a2c7cdeda7192",[],", after months of attempting to contact him in every possible way I know how, short of hiring a private detective. I seriously hope he's OK; it's mightily unusual in my experience for a programmer to drop off the internet so completely, and for so long.)",[100],{"_key":93,"_type":80,"href":101,"reference":12},"http://attacklab.net/",{"_key":103,"_type":62,"children":104,"markDefs":127,"style":82},"a727bfef0f30",[105,109,114,118,123],{"_key":106,"_type":66,"marks":107,"text":108},"a727bfef0f300",[],"Since then, ",{"_key":110,"_type":66,"marks":111,"text":113},"a727bfef0f301",[112],"32a4f5f24bd3","Dana Robinson",{"_key":115,"_type":66,"marks":116,"text":117},"a727bfef0f302",[]," has been toiling away, removing cruft from the WMD editor and implementing my #1 feature request: ",{"_key":119,"_type":66,"marks":120,"text":122},"a727bfef0f303",[121],"57905a426f83","CSS sprite toolbar buttons",{"_key":124,"_type":66,"marks":125,"text":126},"a727bfef0f304",[],". This is a big deal because it reduces the number of HTTP requests necessary to render the WMD editor from about 14..",[128,130],{"_key":112,"_type":80,"href":129,"reference":12},"http://stackoverflow.com/users/3161/dana",{"_key":121,"_type":80,"href":131,"reference":12},"http://www.alistapart.com/articles/sprites/",{"_key":133,"_type":53,"alt":134,"asset":135,"caption":138,"markDefs":12},"83570a3866b3","wmd-toolbar-http-request-count-before",{"_ref":136,"_type":137},"image-3f9a03d2bb160f57950076241ea89ea148689042-600x320-png","reference","",{"_key":140,"_type":62,"children":141,"markDefs":151,"style":82},"5666571f985c",[142,146],{"_key":143,"_type":66,"marks":144,"text":145},"5666571f985c0",[],"To ",{"_key":147,"_type":66,"marks":148,"text":150},"5666571f985c1",[149],"strong","one!",[],{"_key":153,"_type":53,"alt":154,"asset":155,"caption":138,"markDefs":12},"63dcb0255613","wmd-buttons-sprites-large",{"_ref":156,"_type":137},"image-b375df03504d0e9cca64eedff4d2bb4e526ae2e6-520x120-png",{"_key":158,"_type":62,"children":159,"markDefs":181,"style":82},"036c9d002fd3",[160,164,168,172,177],{"_key":161,"_type":66,"marks":162,"text":163},"036c9d002fd30",[],"This one change ",{"_key":165,"_type":66,"marks":166,"text":167},"036c9d002fd31",[149],"speeds up almost every single page we serve up!",{"_key":169,"_type":66,"marks":170,"text":171},"036c9d002fd32",[]," We allow and encourage low-friction anonymous participation on Stack Overflow, so the WMD editor is always right there, inviting awesome (and not-so-awesome) new answers, at the bottom of every question page. All 80,000+ of them! I've already noticed the site is much, ",{"_key":173,"_type":66,"marks":174,"text":176},"036c9d002fd33",[175],"em","much",{"_key":178,"_type":66,"marks":179,"text":180},"036c9d002fd34",[]," snappier with this new revision of the WMD editor deployed.",[],{"_key":183,"_type":62,"children":184,"markDefs":198,"style":82},"2ee519d8822d",[185,189,194],{"_key":186,"_type":66,"marks":187,"text":188},"2ee519d8822d0",[],"If you're interested in spriting some of your web UI, there's an ",{"_key":190,"_type":66,"marks":191,"text":193},"2ee519d8822d1",[192],"c7b187e8e8ac","updated, more modern article on CSS sprites that demonstrates how to do it using JQuery",{"_key":195,"_type":66,"marks":196,"text":197},"2ee519d8822d2",[],". Spriting your whole UI would probably be overkill, but it's a big win in the right scenario, like this one.",[199],{"_key":192,"_type":80,"href":200,"reference":12},"http://www.alistapart.com/articles/sprites2",{"_key":202,"_type":62,"children":203,"markDefs":208,"style":82},"a6784207b71b",[204],{"_key":205,"_type":66,"marks":206,"text":207},"a6784207b71b0",[],"But CSS spriting isn't the only improvement Dana delivered:",[],{"_key":210,"_type":62,"children":211,"level":216,"listItem":217,"markDefs":218,"style":82},"0e085a39a9a1",[212],{"_key":213,"_type":66,"marks":214,"text":215},"0e085a39a9a10",[],"Slimmed down some polling loops for better performance",1,"bullet",[],{"_key":220,"_type":62,"children":221,"level":216,"listItem":217,"markDefs":226,"style":82},"3f76ad266bc8",[222],{"_key":223,"_type":66,"marks":224,"text":225},"3f76ad266bc80",[],"Added additional CSS DOM caching to reduce unnecessary DOM traversals",[],{"_key":228,"_type":62,"children":229,"level":216,"listItem":217,"markDefs":234,"style":82},"e9ed1cf42ae9",[230],{"_key":231,"_type":66,"marks":232,"text":233},"e9ed1cf42ae90",[],"Removed extraneous code to reduce download size",[],{"_key":236,"_type":62,"children":237,"markDefs":251,"style":82},"98a39e43f51c",[238,242,247],{"_key":239,"_type":66,"marks":240,"text":241},"98a39e43f51c0",[],"You can ",{"_key":243,"_type":66,"marks":244,"text":246},"98a39e43f51c1",[245],"4a61566146f6","pull the changes from the repository",{"_key":248,"_type":66,"marks":249,"text":250},"98a39e43f51c2",[]," if you'd like to take a look.",[252],{"_key":245,"_type":80,"href":253,"reference":12},"http://code.google.com/p/wmd-new/",{"_key":255,"_type":62,"children":256,"markDefs":288,"style":82},"444c8d1137ce",[257,261,266,270,275,279,284],{"_key":258,"_type":66,"marks":259,"text":260},"444c8d1137ce0",[],"As I've mentioned before, Dana is a big fan of the ",{"_key":262,"_type":66,"marks":263,"text":265},"444c8d1137ce1",[264],"61a8afa1689b","Fake Plastic Rock",{"_key":267,"_type":66,"marks":268,"text":269},"444c8d1137ce2",[]," much like myself. As a reward for the tremendous amount of work Dana put into this, I was more than happy to hook him up with a set of ",{"_key":271,"_type":66,"marks":272,"text":274},"444c8d1137ce3",[273],"2da9f935edc6","Rock Band 2 wireless drums",{"_key":276,"_type":66,"marks":277,"text":278},"444c8d1137ce4",[]," and ",{"_key":280,"_type":66,"marks":281,"text":283},"444c8d1137ce5",[282],"911bcbe8835e","Triple Cymbal kit",{"_key":285,"_type":66,"marks":286,"text":287},"444c8d1137ce6",[],". Pretty soon, he'll be rocking out like this:",[289,291,293],{"_key":264,"_type":80,"href":290,"reference":12},"http://www.fakeplasticrock.com/",{"_key":273,"_type":80,"href":292,"reference":12},"http://www.amazon.com/gp/search?ie=UTF8&keywords=rock%20band%202%20drums&tag=codinghorror-20&index=videogames&linkCode=ur2&camp=1789&creative=9325",{"_key":282,"_type":80,"href":294,"reference":12},"http://www.amazon.com/dp/B001G57Y02/?tag=codinghorror-20",{"_key":296,"_type":62,"children":297,"markDefs":310,"style":82},"69d6c8ad1bc5",[298,302,306],{"_key":299,"_type":66,"marks":300,"text":301},"69d6c8ad1bc50",[],"The code is fairly maintainable at this point, so hopefully we can be much more responsive to any editor issues from now on. The next phase is to create a ",{"_key":303,"_type":66,"marks":304,"text":305},"69d6c8ad1bc51",[149],"JQuery-ized version of WMD",{"_key":307,"_type":66,"marks":308,"text":309},"69d6c8ad1bc52",[],", to reduce its size and enhance its browser compatibility even further.",[],true,"2009/01/30",{"code":314,"language":315},"\u003Cp>Thanks to the \u003Ca href=\"http://blog.stackoverflow.com/2009/01/wmd-editor-reverse-engineered/\">herculean efforts of several Stack Overflow users\u003C/a>, we were finally able to deliver some long-overdue bugfixes to our beloved WMD editor in early January, once it was fully reverse engineered.\u003C/p>\n\u003Cp>(Sadly I still have yet to hear from the original WMD author, \u003Ca href=\"http://attacklab.net/\">John Fraser\u003C/a>, after months of attempting to contact him in every possible way I know how, short of hiring a private detective. I seriously hope he's OK; it's mightily unusual in my experience for a programmer to drop off the internet so completely, and for so long.)\u003C/p>\n\u003Cp>Since then, \u003Ca href=\"http://stackoverflow.com/users/3161/dana\">Dana Robinson\u003C/a> has been toiling away, removing cruft from the WMD editor and implementing my #1 feature request: \u003Ca href=\"http://www.alistapart.com/articles/sprites/\">CSS sprite toolbar buttons\u003C/a>. This is a big deal because it reduces the number of HTTP requests necessary to render the WMD editor from about 14..\u003C/p>\n\u003Cp>\u003Cimg src=\"http://stackoverflow.blog/wp-content/uploads/2017/02/wmd-toolbar-http-request-count-before.png\" alt=\"wmd-toolbar-http-request-count-before\">\u003C/p>\n\u003Cp>To \u003Cstrong>one!\u003C/strong>\u003C/p>\n\u003Cp>\u003Cimg src=\"http://stackoverflow.blog/wp-content/uploads/2017/02/wmd-buttons-sprites-large.png\" alt=\"wmd-buttons-sprites-large\">\u003C/p>\n\u003Cp>This one change \u003Cstrong>speeds up almost every single page we serve up!\u003C/strong> We allow and encourage low-friction anonymous participation on Stack Overflow, so the WMD editor is always right there, inviting awesome (and not-so-awesome) new answers, at the bottom of every question page. All 80,000+ of them! I've already noticed the site is much, \u003Cem>much\u003C/em> snappier with this new revision of the WMD editor deployed.\u003C/p>\n\u003Cp>If you're interested in spriting some of your web UI, there's an \u003Ca href=\"http://www.alistapart.com/articles/sprites2\">updated, more modern article on CSS sprites that demonstrates how to do it using JQuery\u003C/a>. Spriting your whole UI would probably be overkill, but it's a big win in the right scenario, like this one.\u003C/p>\n\u003Cp>But CSS spriting isn't the only improvement Dana delivered:\u003C/p>\n\u003Cul>\u003Cli>\n\u003Cp>Slimmed down some polling loops for better performance\u003C/p>\n\u003C/li>\n\u003Cli>\n\u003Cp>Added additional CSS DOM caching to reduce unnecessary DOM traversals\u003C/p>\n\u003C/li>\n\u003Cli>Removed extraneous code to reduce download size\u003C/li>\n\u003C/ul>\u003Cp>You can \u003Ca href=\"http://code.google.com/p/wmd-new/\">pull the changes from the repository\u003C/a> if you'd like to take a look.\u003C/p>\n\u003Cp>As I've mentioned before, Dana is a big fan of the \u003Ca href=\"http://www.fakeplasticrock.com/\">Fake Plastic Rock\u003C/a> much like myself. As a reward for the tremendous amount of work Dana put into this, I was more than happy to hook him up with a set of \u003Ca href=\"http://www.amazon.com/gp/search?ie=UTF8&amp;keywords=rock%20band%202%20drums&amp;tag=codinghorror-20&amp;index=videogames&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325\">Rock Band 2 wireless drums\u003C/a> and \u003Ca href=\"http://www.amazon.com/dp/B001G57Y02/?tag=codinghorror-20\">Triple Cymbal kit\u003C/a>. Pretty soon, he'll be rocking out like this:\u003C/p>\n\u003Cp>The code is fairly maintainable at this point, so hopefully we can be much more responsive to any editor issues from now on. The next phase is to create a \u003Cstrong>JQuery-ized version of WMD\u003C/strong>, to reduce its size and enhance its browser compatibility even further.\u003C/p>","html","2009-01-30T12:00:00.000Z",{"current":318},"updated-wmd-editor",[320,328],{"_createdAt":321,"_id":322,"_rev":323,"_type":324,"_updatedAt":321,"slug":325,"title":327},"2023-05-23T16:43:21Z","wp-tagcat-company","9HpbCsT2tq0xwozQfkc4ih","blogTag",{"current":326},"company","Company",{"_createdAt":321,"_id":329,"_rev":323,"_type":324,"_updatedAt":321,"slug":330,"title":332},"wp-tagcat-design",{"current":331},"design","Design","Updated WMD Editor",[335,341,347,353],{"_id":336,"publishedAt":337,"slug":338,"sponsored":12,"title":340},"28e560af-f0aa-4d46-bd90-f435ad604aa7","2026-06-26T14:00:27.102Z",{"_type":10,"current":339},"paging-charity-how-can-engineering-leaders-avoid-becoming-bond-villains","Paging Charity! How can engineering leaders avoid becoming Bond villains?",{"_id":342,"publishedAt":343,"slug":344,"sponsored":12,"title":346},"4b22c2a3-3779-4966-93eb-5230391dbdce","2026-06-23T14:08:58.595Z",{"_type":10,"current":345},"your-ai-shipped-a-backend-that-boots-that-is-the-whole-problem","Your AI shipped a backend that boots. That is the whole problem.",{"_id":348,"publishedAt":349,"slug":350,"sponsored":12,"title":352},"5cf362e1-fe7b-45af-b69c-914731c6a052","2026-06-23T14:00:00.000Z",{"_type":10,"current":351},"the-2026-developer-survey-is-now-open-for-human-developers-only","The 2026 Developer Survey is now open (for human developers only)!",{"_id":354,"publishedAt":355,"slug":356,"sponsored":12,"title":358},"30b995f7-7cb9-4dd8-bf71-d0685940a32b","2026-06-19T14:00:00.000Z",{"_type":10,"current":357},"dispatches-from-o-reilly-from-capabilities-to-responsibilities","Dispatches from O'Reilly: From capabilities to responsibilities",{"data":360,"sourceMap":-1},{"count":361,"lastTimestamp":12},0]