{"id":1094,"date":"2011-05-05T01:31:46","date_gmt":"2011-05-05T00:31:46","guid":{"rendered":"https:\/\/www.entropywins.wtf\/blog\/?p=1094"},"modified":"2011-05-05T01:31:46","modified_gmt":"2011-05-05T00:31:46","slug":"some-fun-with-python","status":"publish","type":"post","link":"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/","title":{"rendered":"Some fun with Python"},"content":{"rendered":"<p>Yesterday I for some reason decided to have some fun with Python by writing a simple script to Find Dead Translation keys in <a href=\"http:\/\/www.mediawiki.org\/wiki\/\">MediaWiki<\/a> extensions. The resulting script, titled FDT, can be found <a href=\"https:\/\/github.com\/JeroenDeDauw\/fdt\">on GitHub<\/a>, and is licenced under the GNU GPL v3+ (yes, the later probably comes as a shock to you!).<\/p>\n<p><a href=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/05\/fdt.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1095\" title=\"FDT (Find\/Fix Dead Translations) script running on my laptop for the Maps MediaWiki extension\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/05\/fdt.png\" alt=\"FDT (Find\/Fix Dead Translations) script running on my laptop for the Maps MediaWiki extension\" width=\"702\" height=\"385\" \/><\/a><\/p>\n<p><strong>What is does, and how<\/strong><\/p>\n<p>The script works by first obtaining a list of defined language keys from the specified i18n file (which is done via an evil PHP subprocess, to avoid messy parsing of array keys), and then looping over all php files in the directory (recursively ofc) to check if they contain any of the keys, after which a list of not-found keys is returned. If there are not-found keys, the script offers to delete those from the i18n file, which also saves quite some work if they are assigned to for many languages. One important limitation is that the script finds key usage by doing a simple &#8220;in string&#8221; search on the whole contents of each file, which obviously will miss dynamically constructed strings. An example of the work this script did (for <a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/mediawiki\/wiki\/Extension:Semantic_Maps\">Semantic Maps<\/a>) can be found in <a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/mediawiki\/wiki\/Special:Code\/MediaWiki\/87374\">this commit<\/a>.<\/p>\n<p><strong>Some more points of interest<\/strong><\/p>\n<p>This was a nice little exercise in Python for me, making me more familiar with the language basics, which after several similar small projects, I now think I pretty much have mastered. Also fun was that this is the first project I did using <a href=\"http:\/\/www.aptana.com\/products\/studio3\">Apatana Studio 3<\/a>, which was released very recently. It&#8217;s an <a href=\"http:\/\/www.eclipse.org\/\">Eclipse<\/a> based IDE aimed at Python and Ruby web development, including excellent support for JavaScript and various JS libraries such as jQuery and Ext. It also has some support for PHP, but that&#8217;s a bit meagre compared to Zend Studio or PhpStorm, an IntelliJ based IDE I&#8217;ve been trying out lately.<\/p>\n<p><strong>More posts to come<\/strong><\/p>\n<p>Over the past 2 years I&#8217;ve changed my blog posting style from posting casual updates about small stuff like this post, to only posting about new MediaWiki extensions or important updates to existing ones. I&#8217;ve decided to reverse this trend and post more lightweight for fun things, as opposed to only big release announcements \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Yesterday I for some reason decided to have some fun with Python by writing a simple script to Find Dead&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[7],"tags":[28,29,106,129,156,181,205,206],"class_list":["post-1094","post","type-post","status-publish","format-standard","hentry","category-programming","tag-aptana","tag-aptana-studio","tag-github","tag-i18n","tag-mediawiki","tag-open-source","tag-pydev","tag-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Some fun with Python - Blog of Jeroen De Dauw<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Some fun with Python - Blog of Jeroen De Dauw\" \/>\n<meta property=\"og:description\" content=\"Yesterday I for some reason decided to have some fun with Python by writing a simple script to Find Dead&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog of Jeroen De Dauw\" \/>\n<meta property=\"article:published_time\" content=\"2011-05-05T00:31:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/05\/fdt.png\" \/>\n<meta name=\"author\" content=\"Jeroen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/JeroenDeDauw\" \/>\n<meta name=\"twitter:site\" content=\"@JeroenDeDauw\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeroen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/\"},\"author\":{\"name\":\"Jeroen\",\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"headline\":\"Some fun with Python\",\"datePublished\":\"2011-05-05T00:31:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/\"},\"wordCount\":374,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"image\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/05\/fdt.png\",\"keywords\":[\"Aptana\",\"Aptana Studio\",\"GitHub\",\"i18n\",\"MediaWiki\",\"Open Source\",\"PyDev\",\"Python\"],\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/\",\"url\":\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/\",\"name\":\"Some fun with Python - Blog of Jeroen De Dauw\",\"isPartOf\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/05\/fdt.png\",\"datePublished\":\"2011-05-05T00:31:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#primaryimage\",\"url\":\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/05\/fdt.png\",\"contentUrl\":\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/05\/fdt.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.entropywins.wtf\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Some fun with Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#website\",\"url\":\"https:\/\/www.entropywins.wtf\/blog\/\",\"name\":\"Entropy Wins\",\"description\":\"A blog on Software Architecture, Design and Craftsmanship\",\"publisher\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.entropywins.wtf\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7\",\"name\":\"Jeroen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"caption\":\"Jeroen\"},\"logo\":{\"@id\":\"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeroendedauw\/\",\"https:\/\/x.com\/https:\/\/twitter.com\/JeroenDeDauw\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Some fun with Python - Blog of Jeroen De Dauw","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/","og_locale":"en_US","og_type":"article","og_title":"Some fun with Python - Blog of Jeroen De Dauw","og_description":"Yesterday I for some reason decided to have some fun with Python by writing a simple script to Find Dead&hellip;","og_url":"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/","og_site_name":"Blog of Jeroen De Dauw","article_published_time":"2011-05-05T00:31:46+00:00","og_image":[{"url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/05\/fdt.png","type":"","width":"","height":""}],"author":"Jeroen","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/JeroenDeDauw","twitter_site":"@JeroenDeDauw","twitter_misc":{"Written by":"Jeroen","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#article","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/"},"author":{"name":"Jeroen","@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"headline":"Some fun with Python","datePublished":"2011-05-05T00:31:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/"},"wordCount":374,"commentCount":0,"publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/05\/fdt.png","keywords":["Aptana","Aptana Studio","GitHub","i18n","MediaWiki","Open Source","PyDev","Python"],"articleSection":["Programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/","url":"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/","name":"Some fun with Python - Blog of Jeroen De Dauw","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#primaryimage"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/05\/fdt.png","datePublished":"2011-05-05T00:31:46+00:00","breadcrumb":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#primaryimage","url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/05\/fdt.png","contentUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2011\/05\/fdt.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.entropywins.wtf\/blog\/2011\/05\/05\/some-fun-with-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.entropywins.wtf\/blog\/"},{"@type":"ListItem","position":2,"name":"Some fun with Python"}]},{"@type":"WebSite","@id":"https:\/\/www.entropywins.wtf\/blog\/#website","url":"https:\/\/www.entropywins.wtf\/blog\/","name":"Entropy Wins","description":"A blog on Software Architecture, Design and Craftsmanship","publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.entropywins.wtf\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7","name":"Jeroen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","caption":"Jeroen"},"logo":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/in\/jeroendedauw\/","https:\/\/x.com\/https:\/\/twitter.com\/JeroenDeDauw"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p74TBF-hE","jetpack-related-posts":[{"id":510,"url":"https:\/\/www.entropywins.wtf\/blog\/2009\/10\/30\/aptana-studio-and-aptana-radrails\/","url_meta":{"origin":1094,"position":0},"title":"Aptana Studio and Aptana RadRails","author":"Jeroen","date":"2009-10-30","format":false,"excerpt":"I've finally made up my mind about whether I'm going to learn Python or Ruby. I've been looking at both for nearly 2 months now, and could not really find a strong reason to use the one or the other. So I've simply decided to learn both. Both Ruby and\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"Aptana PyDev","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2009\/10\/pydev_banner2.gif?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":515,"url":"https:\/\/www.entropywins.wtf\/blog\/2009\/11\/05\/printhai-world\/","url_meta":{"origin":1094,"position":1},"title":"Print(&#8220;Hai world&#8221;)","author":"Jeroen","date":"2009-11-05","format":false,"excerpt":"Today I made quite some progress learning the basics of Python. After doing a traditional \"O hai earf\", I went over the different core data types, control flow and data structures. Next in line are modules, I\/O, exceptions and classes (yay!). I'm testing my understanding of the language in Aptana\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"Python","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2009\/11\/python-logo.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":539,"url":"https:\/\/www.entropywins.wtf\/blog\/2009\/11\/10\/from-python-import-modules-classes-namespaces\/","url_meta":{"origin":1094,"position":2},"title":"from python import Modules, Classes, Namespaces","author":"Jeroen","date":"2009-11-10","format":false,"excerpt":"Last few days I had some time (while sitting on the train) to have a good look at the second part of the Python docs tutorial. I've now got a good understanding of everything up to classes, and know the most important language specific notations, behaviours and features. So far,\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1460,"url":"https:\/\/www.entropywins.wtf\/blog\/2015\/08\/19\/lazy-iterators-in-php-and-python\/","url_meta":{"origin":1094,"position":3},"title":"Lazy iterators in PHP and Python","author":"Jeroen","date":"2015-08-19","format":false,"excerpt":"I recently watched Clean Code Episode 34: Pattern Apocalypse, which is about several design patterns, including the Iterator. Afterwards I took some example code from this episode and tried writing it first in PHP and then in Python. While there is no rocket science involved in any of it, I\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2101,"url":"https:\/\/www.entropywins.wtf\/blog\/2018\/01\/20\/php-project-template\/","url_meta":{"origin":1094,"position":4},"title":"PHP project template","author":"Jeroen","date":"2018-01-20","format":false,"excerpt":"Want to start a new PHP project? Perhaps yet another library you are creating? Tired of doing the same lame groundwork for the 5th time this month? Want to start a code kata and not lose time on generic setup work? I got just the project for you! Edit: there\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2018\/01\/php.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2018\/01\/php.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2018\/01\/php.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2018\/01\/php.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2018\/01\/php.png?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":1117,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/06\/29\/github-extension-for-mediawiki-and-simplecache-php-library\/","url_meta":{"origin":1094,"position":5},"title":"GitHub extension for MediaWiki and SimpleCache PHP library","author":"Jeroen","date":"2013-06-29","format":false,"excerpt":"Background A few months back I got annoyed at having to maintain some documentation both in README files and on-wiki. I figured I\u2019d be a lot nicer if I could just embed those README files in the wiki and have their contents rendered. I therefore created the GitWeb MediaWiki extension,\u2026","rel":"","context":"With 1 comment","block_context":{"text":"With 1 comment","link":"https:\/\/www.entropywins.wtf\/blog\/2013\/06\/29\/github-extension-for-mediawiki-and-simplecache-php-library\/#comments"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1094","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/comments?post=1094"}],"version-history":[{"count":0,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1094\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/media?parent=1094"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/categories?post=1094"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/tags?post=1094"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}