{"id":1151,"date":"2013-11-24T22:06:05","date_gmt":"2013-11-24T21:06:05","guid":{"rendered":"https:\/\/www.entropywins.wtf\/blog\/?p=1151"},"modified":"2016-02-01T23:26:19","modified_gmt":"2016-02-01T22:26:19","slug":"datavalues-library","status":"publish","type":"post","link":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/24\/datavalues-library\/","title":{"rendered":"DataValues library"},"content":{"rendered":"<p>Last week I released the first version of the <a href=\"https:\/\/github.com\/DataValues\">DataValues library<\/a>. This blog post serves as an introduction to that library, explaining the motivations behind it, and providing a historical context.<\/p>\n<p>(Originally posted on November 24, 2013)<\/p>\n<div>\n<p>A bit over a year ago, I wrote down a basic strategic <a href=\"https:\/\/meta.wikimedia.org\/wiki\/Wikidata\/Notes\/SMW_and_Wikidata\">outline for reuse and interoperability between the SMW and Wikidata<\/a> projects. Though not all of this has happened yet, and though we decided to go down slightly different routes in some cases, good progress has been made towards the goals described there. A big part of this is the DataValues library, and the parsing and formatting infrastructure build on top.<\/p>\n<p>Weighing the different package principles in the context of the current and expected consumers of these libraries, I ended up deciding to split the functionality somewhat differently than as described in the original document. After all, at the time of writing I had not done any research into package design, and thought bundling inheritance hierarchies into their own components was a smart thing to do. (Hah!) I read many articles on the topic, discussed some trade-offs with various knowledgeable people and even managed to get some input from his holiness Robert C. Martin. The preliminary result can be seen <a href=\"https:\/\/github.com\/DataValues\">here<\/a>.<\/p>\n<p>The two most foundational packages there are <a href=\"https:\/\/github.com\/DataValues\/DataValues\/blob\/master\/README.md\">DataValues<\/a>, and <a href=\"https:\/\/github.com\/DataValues\/Interfaces\/blob\/master\/README.md\">Interfaces<\/a>. They both mainly serve to define the interfaces, and are thus both abstract and stable, as packages at the bottom of the dependency graph ought to be. DataValues also comes with some trivial implementations, such as StringValue, and NumberValue, which do not undermine these characteristics.<\/p>\n<p>The next two in line are <a href=\"https:\/\/github.com\/DataValues\/Common\/blob\/master\/README.md\">Common<\/a> and <a href=\"https:\/\/github.com\/DataValues\/Validators\/blob\/master\/README.md\">Validators<\/a>. I\u2019m listing them together here as I see them both as misfits and collections of technical debt that need addressing. Common essentially contains stuff that did not fit anywhere else. It also defines some base test classes for ValueParser implementations. Those test classes are abusing inheritance in a harmful way, so hopefully this will soon be gone. Validators holds the existing implementations of the ValueValidators interface. Both the interface and its implementations have serious issues, and are perhaps the most crappy code in any of the DataValue repositories. Luckily this sits into its own repo, and can easily be ignored by anyone who is not already bound to this code.<\/p>\n<p>Finally we have the repos proving concrete functionality for specific use cases: <a href=\"https:\/\/github.com\/DataValues\/Geo\/blob\/master\/README.md\">Geo<\/a>, <a href=\"https:\/\/github.com\/DataValues\/Number\/blob\/master\/README.md\">Number<\/a>, <a href=\"https:\/\/github.com\/DataValues\/Iri\/blob\/master\/README.md\">Iri<\/a> and <a href=\"https:\/\/github.com\/DataValues\/Time\/blob\/master\/README.md\">Time<\/a>. These contain objects representing values in their respective domains, and typically some parsers and formatters as well. You can view the documentation of each for more details. I might well do a blog post on the Geo one in the near future.<\/p>\n<p>All of these components have seen their initial release about one week ago. They can be installed via Composer, and are <a href=\"https:\/\/packagist.org\/packages\/data-values\/\">listed on Packagist<\/a>.<\/p>\n<p>A lot of them are currently <a href=\"https:\/\/packagist.org\/packages\/param-processor\/param-processor\">used by the ParamProcessor library<\/a>, which in turn is used by <a href=\"https:\/\/github.com\/JeroenDeDauw\/Maps\">Maps<\/a> and <a href=\"https:\/\/github.com\/SemanticMediaWiki\/SemanticMediaWiki\">Semantic MediaWiki<\/a>. This means you will be making use of these new libraries when installing Maps 3.0 or SMW 1.9, once these are released that is. Another user of the library is the <a href=\"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/17\/ask-1-0-released\/\">new implementation of the Ask query language<\/a>.<\/p>\n<p>The individual components will see new releases as it makes sense for them and their users. For instance I am personally planning to make some additions to the Geo library to facilitate functionality I want to have in Maps 3.0. Another example I am working on is a new component titled <a href=\"https:\/\/github.com\/DataValues\/Serialization\">Serialization<\/a>, which aims to provide better serialization infrastructure than what is currently in the DataValue interface itself. The hope is that as this set of foundational libraries matures, more higher level functionality will be build on top, as part of the <a href=\"https:\/\/semantic-mediawiki.org\/\">SMW project<\/a>, and part of the <a href=\"https:\/\/www.wikidata.org\/\">Wikidata project<\/a>, or by other users altogether.<\/p>\n<p>To end this post, I would like to thank all the awesome people that contributed to those various components. In particular the Number and Time components have been written nearly entirely by my great Wikidata colleagues, so credit goes to them.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Last week I released the first version of the DataValues library. This blog post serves as an introduction to that&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":[67,306,307,308,309,149,155,310,181,195,197,311,228,237,371,259,312],"class_list":["post-1151","post","type-post","status-publish","format-standard","hentry","category-programming","tag-component","tag-composer","tag-datavalues","tag-geo","tag-iri","tag-library","tag-maps","tag-number","tag-open-source","tag-php","tag-planet-wikimedia","tag-release","tag-semantic-mediawiki","tag-smw","tag-software","tag-time","tag-wikidata-posted-in-programming"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>DataValues library - 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\/2013\/11\/24\/datavalues-library\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DataValues library - Blog of Jeroen De Dauw\" \/>\n<meta property=\"og:description\" content=\"Last week I released the first version of the DataValues library. This blog post serves as an introduction to that&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/24\/datavalues-library\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog of Jeroen De Dauw\" \/>\n<meta property=\"article:published_time\" content=\"2013-11-24T21:06:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-02-01T22:26:19+00:00\" \/>\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=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/11\\\/24\\\/datavalues-library\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/11\\\/24\\\/datavalues-library\\\/\"},\"author\":{\"name\":\"Jeroen\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"headline\":\"DataValues library\",\"datePublished\":\"2013-11-24T21:06:05+00:00\",\"dateModified\":\"2016-02-01T22:26:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/11\\\/24\\\/datavalues-library\\\/\"},\"wordCount\":669,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"keywords\":[\"Component\",\"composer\",\"DataValues\",\"Geo\",\"Iri\",\"Library\",\"Maps\",\"Number\",\"Open Source\",\"PHP\",\"Planet Wikimedia\",\"Release\",\"Semantic MediaWiki\",\"SMW\",\"Software\",\"Time\",\"WikiData Posted in Programming\"],\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/11\\\/24\\\/datavalues-library\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/11\\\/24\\\/datavalues-library\\\/\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/11\\\/24\\\/datavalues-library\\\/\",\"name\":\"DataValues library - Blog of Jeroen De Dauw\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\"},\"datePublished\":\"2013-11-24T21:06:05+00:00\",\"dateModified\":\"2016-02-01T22:26:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/11\\\/24\\\/datavalues-library\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/11\\\/24\\\/datavalues-library\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2013\\\/11\\\/24\\\/datavalues-library\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DataValues library\"}]},{\"@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:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"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:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/jeroendedauw\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/JeroenDeDauw\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"DataValues library - 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\/2013\/11\/24\/datavalues-library\/","og_locale":"en_US","og_type":"article","og_title":"DataValues library - Blog of Jeroen De Dauw","og_description":"Last week I released the first version of the DataValues library. This blog post serves as an introduction to that&hellip;","og_url":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/24\/datavalues-library\/","og_site_name":"Blog of Jeroen De Dauw","article_published_time":"2013-11-24T21:06:05+00:00","article_modified_time":"2016-02-01T22:26:19+00:00","author":"Jeroen","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/JeroenDeDauw","twitter_site":"@JeroenDeDauw","twitter_misc":{"Written by":"Jeroen","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/24\/datavalues-library\/#article","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/24\/datavalues-library\/"},"author":{"name":"Jeroen","@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"headline":"DataValues library","datePublished":"2013-11-24T21:06:05+00:00","dateModified":"2016-02-01T22:26:19+00:00","mainEntityOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/24\/datavalues-library\/"},"wordCount":669,"commentCount":0,"publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"keywords":["Component","composer","DataValues","Geo","Iri","Library","Maps","Number","Open Source","PHP","Planet Wikimedia","Release","Semantic MediaWiki","SMW","Software","Time","WikiData Posted in Programming"],"articleSection":["Programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.entropywins.wtf\/blog\/2013\/11\/24\/datavalues-library\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/24\/datavalues-library\/","url":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/24\/datavalues-library\/","name":"DataValues library - Blog of Jeroen De Dauw","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#website"},"datePublished":"2013-11-24T21:06:05+00:00","dateModified":"2016-02-01T22:26:19+00:00","breadcrumb":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/24\/datavalues-library\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.entropywins.wtf\/blog\/2013\/11\/24\/datavalues-library\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/24\/datavalues-library\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.entropywins.wtf\/blog\/"},{"@type":"ListItem","position":2,"name":"DataValues library"}]},{"@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:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","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:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g"},"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-iz","jetpack-related-posts":[{"id":1147,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/17\/ask-1-0-released\/","url_meta":{"origin":1151,"position":0},"title":"Ask 1.0 released!","author":"Jeroen","date":"2013-11-17","format":false,"excerpt":"I\u2019m very happy to announce the first release of the Ask library. The Ask library is a fresh PHP implementation of the Ask query language. This is the query language used by Semantic MediaWiki. At the Wikidata project we aim to provide similar query functionality in our Wikibase software, and\u2026","rel":"","context":"With 3 comments","block_context":{"text":"With 3 comments","link":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/17\/ask-1-0-released\/#comments"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1484,"url":"https:\/\/www.entropywins.wtf\/blog\/2015\/11\/08\/wikidata-wikibase-json-dump-reader\/","url_meta":{"origin":1151,"position":1},"title":"Wikidata\/Wikibase Json Dump Reader","author":"Jeroen","date":"2015-11-08","format":false,"excerpt":"I've created a small PHP library to read from, and iterate through, Wikidata\/Wikibase JSON dumps. Wikidata is the free knowledge base that anyone can edit, and serves as a central data repository for Wikipedia and associated projects. Wikibase is a set of free open source software that powers Wikidata. You\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":1169,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/12\/31\/php-framework-interoperability-group\/","url_meta":{"origin":1151,"position":2},"title":"PHP Framework Interoperability Group","author":"Jeroen","date":"2013-12-31","format":false,"excerpt":"Those who have worked with me in recent history know that I\u2019m rather passionate about reuse and interoperability. Holding that in mind it should not come as a surprise that I\u2019m very happy to announce Wikidata and Semantic MediaWiki are now represented on PHP FIG. PHP FIG stands for \u201cPHP\u2026","rel":"","context":"In \"Interoperability\"","block_context":{"text":"Interoperability","link":"https:\/\/www.entropywins.wtf\/blog\/tag\/interoperability\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1524,"url":"https:\/\/www.entropywins.wtf\/blog\/2016\/01\/25\/replicator-a-cli-tool-for-wikidata\/","url_meta":{"origin":1151,"position":3},"title":"Replicator: Wikidata import tool","author":"Jeroen","date":"2016-01-25","format":false,"excerpt":"I'm happy to announce the first release of Replicator, a CLI tool for importing entities from Wikidata. Replicator was created for importing data from Wikidata into the QueryR REST API persistence. It has two big conceptual components: getting entities from a specified source, and then doing something with said entities.\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":1111,"url":"https:\/\/www.entropywins.wtf\/blog\/2012\/03\/04\/wikidata-wikipedia-2-0\/","url_meta":{"origin":1151,"position":4},"title":"WikiData, Wikipedia 2.0?","author":"Jeroen","date":"2012-03-04","format":false,"excerpt":"I just moved to Berlin to work on the WikiData project for a year at Wikimedia Germany. The WikiData project will start on April 1st (yes, really) and will tackle many data re-usability issues by having structured storage much like done by Semantic MediaWiki (although it will not use SMW).\u2026","rel":"","context":"In \"wikidata\"","block_context":{"text":"wikidata","link":"https:\/\/www.entropywins.wtf\/blog\/tag\/wikidata\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1303,"url":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/10\/diff-1-0-released\/","url_meta":{"origin":1151,"position":5},"title":"Diff 1.0 released!","author":"Jeroen","date":"2014-04-10","format":false,"excerpt":"I'm very happy to announce the 1.0 release of the PHP Diff library. Diff is a small PHP library for representing differences between data structures, computing such differences, and applying them as a patch. For more details see the usage instructions. I created this library as part of the Wikibase\u2026","rel":"","context":"In &quot;Software&quot;","block_context":{"text":"Software","link":"https:\/\/www.entropywins.wtf\/blog\/category\/software\/"},"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\/1151","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=1151"}],"version-history":[{"count":3,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1151\/revisions"}],"predecessor-version":[{"id":1595,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1151\/revisions\/1595"}],"wp:attachment":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/media?parent=1151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/categories?post=1151"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/tags?post=1151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}