[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"sanity-VoH2gDN5IPnwqXazM7OzDNT74RKUfpkpPlQd_CXHemA":3,"sanity-YiyRbz1Tiqu3r-fc44HSppM6YPRpdEF_Q-9EOrOupsw":424},{"data":4,"sourceMap":-1},{"latestPodcast":5,"latestReleases":14,"post":39,"recent":399},[6],{"_id":7,"publishedAt":8,"slug":9,"sponsored":12,"title":13},"4d0175f4-40a8-47eb-9bb3-a453b326aa7d","2026-07-03T07:40:00.000Z",{"_type":10,"current":11},"slug","the-good-the-bad-and-the-ai-apps",null,"The good, the bad, and the AI apps",[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":370,"dateUrl":371,"excerpt":372,"legacyBody":373,"product":12,"publishedAt":376,"slug":377,"sponsored":12,"tags":379,"title":398,"visible":370},"2023-05-25T09:36:57Z","wp-post-3304","dgl3SCUzppW3U2LvCoRyxY","blogPost","2023-07-13T14:54:18Z",[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,94,100,117,134,160,175,238,243,251,262,277,303,318,337],{"_key":61,"_type":62,"children":63,"markDefs":87,"style":93},"218e3b18f9b0","block",[64,69,74,78,83],{"_key":65,"_type":66,"marks":67,"text":68},"218e3b18f9b00","span",[],"Remember that WMD reverse engineering project we ",{"_key":70,"_type":66,"marks":71,"text":73},"218e3b18f9b01",[72],"8250ed1d96c7","reluctantly undertook?",{"_key":75,"_type":66,"marks":76,"text":77},"218e3b18f9b02",[]," Check out the ",{"_key":79,"_type":66,"marks":80,"text":82},"218e3b18f9b03",[81],"07cc5e922d1b","current state of the Git repository",{"_key":84,"_type":66,"marks":85,"text":86},"218e3b18f9b04",[],":",[88,91],{"_key":72,"_type":89,"href":90,"reference":12},"link","http:\u002F\u002Fblog.stackoverflow.com\u002F2008\u002F12\u002Freverse-engineering-the-wmd-editor\u002F",{"_key":81,"_type":89,"href":92,"reference":12},"http:\u002F\u002Fgithub.com\u002Fcky\u002Fwmd\u002Fnetwork","normal",{"_key":95,"_type":53,"alt":96,"asset":97,"markDefs":12},"9bd83553dbe4","git-wmd-reverse-engineering-timeline",{"_ref":98,"_type":99},"image-63010df9c40dfaa9f74a5bfb06e0e52c613ab348-229x614-png","reference",{"_key":101,"_type":62,"children":102,"markDefs":116,"style":93},"4b124cc3bc04",[103,107,112],{"_key":104,"_type":66,"marks":105,"text":106},"4b124cc3bc040",[],"This is a major milestone -- we've ",{"_key":108,"_type":66,"marks":109,"text":111},"4b124cc3bc041",[110],"strong","essentially de-obfuscated the WMD code",{"_key":113,"_type":66,"marks":114,"text":115},"4b124cc3bc042",[],", which was my #1 goal! A few thanks are in order:",[],{"_key":118,"_type":62,"children":119,"level":129,"listItem":130,"markDefs":131,"style":93},"507d21210032",[120,125],{"_key":121,"_type":66,"marks":122,"text":124},"507d212100320",[123],"3abc241bbb56","Chris Jester-Young",{"_key":126,"_type":66,"marks":127,"text":128},"507d212100321",[]," for getting the ball rolling, doing quite a bit of de-obfuscation, and setting up the initial repository.",1,"number",[132],{"_key":123,"_type":89,"href":133,"reference":12},"http:\u002F\u002Fstackoverflow.com\u002Fusers\u002F13\u002Fchris-jester-young",{"_key":135,"_type":62,"children":136,"level":129,"listItem":130,"markDefs":155,"style":93},"461dcb525a82",[137,142,146,151],{"_key":138,"_type":66,"marks":139,"text":141},"461dcb525a820",[140],"9d5785c2c84d","Shawn",{"_key":143,"_type":66,"marks":144,"text":145},"461dcb525a821",[]," for contributing versions and setting up ",{"_key":147,"_type":66,"marks":148,"text":150},"461dcb525a822",[149],"cdbf0eeaedd4","a stack overflow \"question\" on this topic",{"_key":152,"_type":66,"marks":153,"text":154},"461dcb525a823",[],".",[156,158],{"_key":140,"_type":89,"href":157,"reference":12},"http:\u002F\u002Fstackoverflow.com\u002Fusers\u002F26\u002Fshawn",{"_key":149,"_type":89,"href":159,"reference":12},"http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F406132\u002Freverse-engineering-the-wmd-editor",{"_key":161,"_type":62,"children":162,"level":129,"listItem":130,"markDefs":172,"style":93},"4880c64a072e",[163,168],{"_key":164,"_type":66,"marks":165,"text":167},"4880c64a072e0",[166],"bb7adf2e8b7d","Dana",{"_key":169,"_type":66,"marks":170,"text":171},"4880c64a072e1",[]," for doing the lion's share of the de-obfuscation work and getting us to that magical 1.0, completely de-obfuscated milestone.",[173],{"_key":166,"_type":89,"href":174,"reference":12},"http:\u002F\u002Fstackoverflow.com\u002Fusers\u002F3161\u002Fdana",{"_key":176,"_type":62,"children":177,"markDefs":227,"style":93},"1b7efc90a2ac",[178,182,187,191,196,200,205,209,214,218,223],{"_key":179,"_type":66,"marks":180,"text":181},"1b7efc90a2ac0",[],"Also, ",{"_key":183,"_type":66,"marks":184,"text":186},"1b7efc90a2ac1",[185],"a957aea51181","cbguder",{"_key":188,"_type":66,"marks":189,"text":190},"1b7efc90a2ac2",[],", ",{"_key":192,"_type":66,"marks":193,"text":195},"1b7efc90a2ac3",[194],"fc1c790195e3","dbr",{"_key":197,"_type":66,"marks":198,"text":199},"1b7efc90a2ac4",[],", and ",{"_key":201,"_type":66,"marks":202,"text":204},"1b7efc90a2ac5",[203],"8087c7cbb13d","zacherates",{"_key":206,"_type":66,"marks":207,"text":208},"1b7efc90a2ac6",[]," -- we appreciate you jumping in early as well. Hopefully you'll keep going and help us on the 1.0 stuff! It turns out Dana is a huge fan of ",{"_key":210,"_type":66,"marks":211,"text":213},"1b7efc90a2ac7",[212],"2087a9ee0356","fake plastic rock",{"_key":215,"_type":66,"marks":216,"text":217},"1b7efc90a2ac8",[],", just like me, so I was happy to reward him for his work with one of my ",{"_key":219,"_type":66,"marks":220,"text":222},"1b7efc90a2ac9",[221],"31a2b2c90f7f","customized",{"_key":224,"_type":66,"marks":225,"text":226},"1b7efc90a2ac10",[]," Les Paul guitars:",[228,230,232,234,236],{"_key":185,"_type":89,"href":229,"reference":12},"http:\u002F\u002Fstackoverflow.com\u002Fusers\u002F2119\u002Fcan-berk-g252der",{"_key":194,"_type":89,"href":231,"reference":12},"http:\u002F\u002Fstackoverflow.com\u002Fusers\u002F745\u002Fdbr",{"_key":203,"_type":89,"href":233,"reference":12},"http:\u002F\u002Fstackoverflow.com\u002Fusers\u002F2603\u002Fzacherates",{"_key":212,"_type":89,"href":235,"reference":12},"http:\u002F\u002Fwww.fakeplasticrock.com\u002F",{"_key":221,"_type":89,"href":237,"reference":12},"http:\u002F\u002Fwww.fakeplasticrock.com\u002F2008\u002F11\u002F09\u002Fguitar-hero-world-tour-guitar-the-best-fake-plastic-axe-ever\u002F",{"_key":239,"_type":53,"alt":240,"asset":241,"markDefs":12},"cc86f2bd1239","blood-voodoo-red-metallic-guitar",{"_ref":242,"_type":99},"image-b6b5c79193d2b03fb060199c7bb618762d3261fa-600x450-jpg",{"_key":244,"_type":62,"children":245,"markDefs":250,"style":93},"db6789b59f34",[246],{"_key":247,"_type":66,"marks":248,"text":249},"db6789b59f340",[],"(ok, it's not exactly this one, but it's very similar -- silver metallic instead of red metallic faceplate!) Now that we've gotten the painful de-obfuscation \u002F un-minification out of the way, it's time to begin improving our WMD editor:",[],{"_key":252,"_type":62,"children":253,"level":129,"listItem":130,"markDefs":259,"style":93},"71a7aafac3c5",[254],{"_key":255,"_type":66,"marks":256,"text":258},"71a7aafac3c50",[257],"f9fb7fdbdfe8","Arrow keys don't work in Firefox 3 on questions\u002Fanswer pages",[260],{"_key":257,"_type":89,"href":261,"reference":12},"http:\u002F\u002Fstackoverflow.uservoice.com\u002Fpages\u002Fgeneral\u002Fsuggestions\u002F14681-arrow-keys-don-t-work-on-question-answers-pages",{"_key":263,"_type":62,"children":264,"level":129,"listItem":130,"markDefs":274,"style":93},"91877fe531de",[265,270],{"_key":266,"_type":66,"marks":267,"text":269},"91877fe531de0",[268],"32b7c91504cf","Make ctrl-delete work like a normal text editor",{"_key":271,"_type":66,"marks":272,"text":273},"91877fe531de1",[]," (WMD keyboard shortcuts should be configurable and\u002For disable-able)",[275],{"_key":268,"_type":89,"href":276,"reference":12},"http:\u002F\u002Fstackoverflow.uservoice.com\u002Fpages\u002Fgeneral\u002Fsuggestions\u002F16598-make-ctrl-delete-work-like-a-normal-text-editor",{"_key":278,"_type":62,"children":279,"level":129,"listItem":130,"markDefs":298,"style":93},"d134fbd239e9",[280,285,289,294],{"_key":281,"_type":66,"marks":282,"text":284},"d134fbd239e90",[283],"9ed49ec8f80d","Several",{"_key":286,"_type":66,"marks":287,"text":288},"d134fbd239e91",[]," ",{"_key":290,"_type":66,"marks":291,"text":293},"d134fbd239e92",[292],"1c8a64399d8d","Problems",{"_key":295,"_type":66,"marks":296,"text":297},"d134fbd239e93",[]," with international keyboards -- all related to keyboard shortcuts",[299,301],{"_key":283,"_type":89,"href":300,"reference":12},"http:\u002F\u002Fstackoverflow.uservoice.com\u002Fpages\u002Fgeneral\u002Fsuggestions\u002F19254-disabled-characters-in-editor",{"_key":292,"_type":89,"href":302,"reference":12},"http:\u002F\u002Fstackoverflow.uservoice.com\u002Fpages\u002Fgeneral\u002Fsuggestions\u002F38866-fix-the-backslash-in-the-markdown-editor",{"_key":304,"_type":62,"children":305,"level":129,"listItem":130,"markDefs":315,"style":93},"1fafb0b5785e",[306,311],{"_key":307,"_type":66,"marks":308,"text":310},"1fafb0b5785e0",[309],"b31c782532f8","General WMD performance concerns",{"_key":312,"_type":66,"marks":313,"text":314},"1fafb0b5785e1",[],". We believe WMD could do with some optimization, particularly for the \"idle\" case.",[316],{"_key":309,"_type":89,"href":317,"reference":12},"http:\u002F\u002Fstackoverflow.uservoice.com\u002Fpages\u002Fgeneral\u002Fsuggestions\u002F86059-improve-performance-of-so-on-firefox3-on-windows",{"_key":319,"_type":62,"children":320,"level":129,"listItem":130,"markDefs":334,"style":93},"07ca40f214f3",[321,325,330],{"_key":322,"_type":66,"marks":323,"text":324},"07ca40f214f30",[],"I'd like to see us use ",{"_key":326,"_type":66,"marks":327,"text":329},"07ca40f214f31",[328],"478e9f996cbf","CSS image sprites",{"_key":331,"_type":66,"marks":332,"text":333},"07ca40f214f32",[]," for the toolbar buttons rather than downloading 6-8 individual button graphics in 6-8 HTTP requests.",[335],{"_key":328,"_type":89,"href":336,"reference":12},"http:\u002F\u002Fwww.alistapart.com\u002Farticles\u002Fsprites",{"_key":338,"_type":62,"children":339,"markDefs":365,"style":93},"56961ca50788",[340,344,348,353,357,362],{"_key":341,"_type":66,"marks":342,"text":343},"56961ca507880",[],"Anyway, if you have JavaScript chops and want to dive in, I ",{"_key":345,"_type":66,"marks":346,"text":347},"56961ca507881",[110],"encourage you to ",{"_key":349,"_type":66,"marks":350,"text":352},"56961ca507882",[110,351],"5f8586e91276","grab the repository",{"_key":354,"_type":66,"marks":355,"text":356},"56961ca507883",[]," and go for it! Your hard work could be rewarded in your job search. Check out these ",{"_key":358,"_type":66,"marks":359,"text":361},"56961ca507884",[360],"7d85bb4500fa","Javascript job listings",{"_key":363,"_type":66,"marks":364,"text":154},"56961ca507885",[],[366,368],{"_key":351,"_type":89,"href":367,"reference":12},"http:\u002F\u002Fcode.google.com\u002Fp\u002Fwmd-new\u002F",{"_key":360,"_type":89,"href":369,"reference":12},"https:\u002F\u002Fstackoverflow.com\u002Fjobs\u002Fdeveloper-jobs-using-javascript?utm_source=so-owned&utm_medium=blog&utm_campaign=dev-c4al&utm_content=c4al-link",true,"2009\u002F01\u002F10","",{"code":374,"language":375},"Remember that WMD reverse engineering project we \u003Ca href=\"http:\u002F\u002Fblog.stackoverflow.com\u002F2008\u002F12\u002Freverse-engineering-the-wmd-editor\u002F\">reluctantly undertook?\u003C\u002Fa> Check out the \u003Ca href=\"http:\u002F\u002Fgithub.com\u002Fcky\u002Fwmd\u002Fnetwork\">current state of the Git repository\u003C\u002Fa>:\n\n\u003Ca href=\"http:\u002F\u002Fgithub.com\u002Fcky\u002Fwmd\u002Fnetwork\">\u003Cimg src=\"http:\u002F\u002Fstackoverflow.blog\u002Fwp-content\u002Fuploads\u002F2017\u002F02\u002FuKxVQ.png\" alt=\"git-wmd-reverse-engineering-timeline\" \u002F>\u003C\u002Fa>\n\nThis is a major milestone -- we've \u003Cstrong>essentially de-obfuscated the WMD code\u003C\u002Fstrong>, which was my #1 goal!\n\nA few thanks are in order:\n\n\u003Col>\n    \u003Cli>\u003Ca href=\"http:\u002F\u002Fstackoverflow.com\u002Fusers\u002F13\u002Fchris-jester-young\">Chris Jester-Young\u003C\u002Fa> for getting the ball rolling, doing quite a bit of de-obfuscation, and setting up the initial repository.\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"http:\u002F\u002Fstackoverflow.com\u002Fusers\u002F26\u002Fshawn\">Shawn\u003C\u002Fa> for contributing versions and setting up \u003Ca href=\"http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F406132\u002Freverse-engineering-the-wmd-editor\">a stack overflow \"question\" on this topic\u003C\u002Fa>.\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"http:\u002F\u002Fstackoverflow.com\u002Fusers\u002F3161\u002Fdana\">Dana\u003C\u002Fa> for doing the lion's share of the de-obfuscation work and getting us to that magical 1.0, completely de-obfuscated milestone.\u003C\u002Fli>\n\u003C\u002Fol>\n\nAlso, \u003Ca href=\"http:\u002F\u002Fstackoverflow.com\u002Fusers\u002F2119\u002Fcan-berk-g252der\">cbguder\u003C\u002Fa>, \u003Ca href=\"http:\u002F\u002Fstackoverflow.com\u002Fusers\u002F745\u002Fdbr\">dbr\u003C\u002Fa>, and \u003Ca href=\"http:\u002F\u002Fstackoverflow.com\u002Fusers\u002F2603\u002Fzacherates\">zacherates\u003C\u002Fa> -- we appreciate you jumping in early as well. Hopefully you'll keep going and help us on the 1.0 stuff!\n\nIt turns out Dana is a huge fan of \u003Ca href=\"http:\u002F\u002Fwww.fakeplasticrock.com\u002F\">fake plastic rock\u003C\u002Fa>, just like me, so I was happy to reward him for his work with one of my \u003Ca href=\"http:\u002F\u002Fwww.fakeplasticrock.com\u002F2008\u002F11\u002F09\u002Fguitar-hero-world-tour-guitar-the-best-fake-plastic-axe-ever\u002F\">customized\u003C\u002Fa> Les Paul guitars:\n\n\u003Cimg src=\"http:\u002F\u002Fstackoverflow.blog\u002Fwp-content\u002Fuploads\u002F2017\u002F02\u002Fbloodvoodooguitarjx81.jpg\" alt=\"blood-voodoo-red-metallic-guitar\" \u002F>\n\n(ok, it's not exactly this one, but it's very similar -- silver metallic instead of red metallic faceplate!)\n\nNow that we've gotten the painful de-obfuscation \u002F un-minification out of the way, it's time to begin improving our WMD editor:\n\n\u003Col>\n    \u003Cli>\u003Ca href=\"http:\u002F\u002Fstackoverflow.uservoice.com\u002Fpages\u002Fgeneral\u002Fsuggestions\u002F14681-arrow-keys-don-t-work-on-question-answers-pages\">Arrow keys don't work in Firefox 3 on questions\u002Fanswer pages\u003C\u002Fa>\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"http:\u002F\u002Fstackoverflow.uservoice.com\u002Fpages\u002Fgeneral\u002Fsuggestions\u002F16598-make-ctrl-delete-work-like-a-normal-text-editor\">Make ctrl-delete work like a normal text editor\u003C\u002Fa> (WMD keyboard shortcuts should be configurable and\u002For disable-able)\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"http:\u002F\u002Fstackoverflow.uservoice.com\u002Fpages\u002Fgeneral\u002Fsuggestions\u002F19254-disabled-characters-in-editor\">Several\u003C\u002Fa> \u003Ca href=\"http:\u002F\u002Fstackoverflow.uservoice.com\u002Fpages\u002Fgeneral\u002Fsuggestions\u002F38866-fix-the-backslash-in-the-markdown-editor\">Problems\u003C\u002Fa> with international keyboards -- all related to keyboard shortcuts\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"http:\u002F\u002Fstackoverflow.uservoice.com\u002Fpages\u002Fgeneral\u002Fsuggestions\u002F86059-improve-performance-of-so-on-firefox3-on-windows\">General WMD performance concerns\u003C\u002Fa>. We believe WMD could do with some optimization, particularly for the \"idle\" case.\u003C\u002Fli>\n    \u003Cli>I'd like to see us use \u003Ca href=\"http:\u002F\u002Fwww.alistapart.com\u002Farticles\u002Fsprites\">CSS image sprites\u003C\u002Fa> for the toolbar buttons rather than downloading 6-8 individual button graphics in 6-8 HTTP requests.\u003C\u002Fli>\n\u003C\u002Fol>\n\nAnyway, if you have JavaScript chops and want to dive in, I \u003Cstrong>encourage you to \u003Ca href=\"http:\u002F\u002Fcode.google.com\u002Fp\u002Fwmd-new\u002F\">grab the repository\u003C\u002Fa>\u003C\u002Fstrong> and go for it!\n\nYour hard work could be rewarded in your job search. Check out these \u003Ca href=\"https:\u002F\u002Fstackoverflow.com\u002Fjobs\u002Fdeveloper-jobs-using-javascript?utm_source=so-owned&amp;utm_medium=blog&amp;utm_campaign=dev-c4al&amp;utm_content=c4al-link\" target=\"_blank\" rel=\"noopener\">Javascript job listings\u003C\u002Fa>.","html","2009-01-10T12:00:00.000Z",{"current":378},"wmd-editor-reverse-engineered",[380,388,393],{"_createdAt":381,"_id":382,"_rev":383,"_type":384,"_updatedAt":381,"slug":385,"title":387},"2023-05-23T16:43:21Z","wp-tagcat-community","9HpbCsT2tq0xwozQfkc4ih","blogTag",{"current":386},"community","Community",{"_createdAt":381,"_id":389,"_rev":383,"_type":384,"_updatedAt":381,"slug":390,"title":392},"wp-tagcat-company",{"current":391},"company","Company",{"_createdAt":381,"_id":394,"_rev":383,"_type":384,"_updatedAt":381,"slug":395,"title":397},"wp-tagcat-design",{"current":396},"design","Design","WMD Editor Reverse Engineered",[400,406,412,418],{"_id":401,"publishedAt":402,"slug":403,"sponsored":12,"title":405},"28e560af-f0aa-4d46-bd90-f435ad604aa7","2026-06-26T14:00:27.102Z",{"_type":10,"current":404},"paging-charity-how-can-engineering-leaders-avoid-becoming-bond-villains","Paging Charity! How can engineering leaders avoid becoming Bond villains?",{"_id":407,"publishedAt":408,"slug":409,"sponsored":12,"title":411},"4b22c2a3-3779-4966-93eb-5230391dbdce","2026-06-23T14:08:58.595Z",{"_type":10,"current":410},"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":413,"publishedAt":414,"slug":415,"sponsored":12,"title":417},"5cf362e1-fe7b-45af-b69c-914731c6a052","2026-06-23T14:00:00.000Z",{"_type":10,"current":416},"the-2026-developer-survey-is-now-open-for-human-developers-only","The 2026 Developer Survey is now open (for human developers only)!",{"_id":419,"publishedAt":420,"slug":421,"sponsored":12,"title":423},"30b995f7-7cb9-4dd8-bf71-d0685940a32b","2026-06-19T14:00:00.000Z",{"_type":10,"current":422},"dispatches-from-o-reilly-from-capabilities-to-responsibilities","Dispatches from O'Reilly: From capabilities to responsibilities",{"data":425,"sourceMap":-1},{"count":426,"lastTimestamp":12},0]