{"id":764,"date":"2015-02-07T17:16:26","date_gmt":"2015-02-07T17:16:26","guid":{"rendered":"https:\/\/wade.one\/blog\/?p=764"},"modified":"2015-02-07T17:16:26","modified_gmt":"2015-02-07T17:16:26","slug":"standardising-logging-and-parallelisation-in-multiple-languages","status":"publish","type":"post","link":"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/","title":{"rendered":"Standardising logging and parallelisation in multiple languages"},"content":{"rendered":"<p>Over the last few days I&#8217;ve been working on interfaces to use across multiple programming languages to standardise how some things are done. This stemmed from a requirement to allow processing to be dealt with in any language from any other language. People do this all the time, it&#8217;s nothing new, but they generally stick to &#8220;language A will have a requirement to get some data and we&#8217;ll\u00a0get this data using language B across multiple servers\/threads&#8221;. This results in an API contract between the two languages but not much else (you, in advance say I&#8217;ll request it in this way and receive it in this way) but it&#8217;s often a unique way and a newcomer wouldn&#8217;t necessarily understand it immediately.<\/p>\n<p>What I want is a way to know, in advance, what to expect between any language, a schema if you will to say &#8220;I will adhere to this implementation of parallelisation and this method of data transfer.&#8221; I am working towards that goal and so far it is going well. What I do not want to do is restrict people however which means the implementation still has to be abstract enough to work for all situations but concrete enough to make doing it in any language a breeze.<\/p>\n<p>For the parallelisation I am using a form of events, event handlers and event input and output interfaces. These allow for a guaranteed method of delivering and receiving a description of the work to be done but the flexibility to deliver any relevant data. I intend to expand on the interfaces for common multi-threaded tasks in order to standardise as much as possible in any many languages as possible &#8211; something I will undoubtedly need help for.<\/p>\n<p>With regards to logging (which will have an example using the parallelisation as an extreme example) it borrows from the event driven interface but standardises the log format, a simple but essential requirement. The log levels are that of syslog and the rest of the data allows it to be used in a simple, single server, app to a distributed system. The key here is every language logs in exactly the same way and can be off-loaded into the event system of the parallelisation interfaces who can handle it in any language as they will all have a copy of the contract (interface). To see just why this is needed, search for things like &#8220;php logging&#8221;, &#8220;c# logging&#8221;, &#8220;python logging&#8221; and compare just how different languages do the fundamentally same thing. And then try and let an application in PHP log using a system written in C# &#8211; it just becomes more custom code.<\/p>\n<p>The transport between languages will be doing using JSON due to it&#8217;s relative ubiquitous nature among all modern development languages. Rather than just say &#8220;use JSON&#8221; however I am implementing schema&#8217;s for the JSON data using the existing (but unfinished) standard being developed by <a href=\"http:\/\/json-schema.org\/\" target=\"_blank\">json-schema.org<\/a>. This is one of the biggest part of this venture, not only to say &#8220;adhere to this interface and we can work together&#8221; but to say &#8220;adhere to this interface and you can be 100% sure you can validate me against this public schema, regardless of the language you want to use&#8221;.<\/p>\n<p>For now, you can see the work in<span class=\"text_exposed_show\"> progress at <a href=\"https:\/\/github.com\/xcitestudios\">https:\/\/github.com\/xcitestudios<\/a>.\u00a0<\/span>They will be open source and I welcome feedback.<\/p>\n<div class=\"text_exposed_show\">\n<p>I am currently working on examples in PHP and C# for the interfaces to show why they exist and how they work. The logging interfaces are self explanatory, but the parallelisation interfaces will require some examples to explain just why they exist.<\/p>\n<p>Aside from examples, <a class=\"profileLink\" href=\"https:\/\/www.facebook.com\/MediaSkunkWorks\" data-hovercard=\"\/ajax\/hovercard\/page.php?id=142894529111429\">Media Skunk Works<\/a> will be using these interfaces (alongside proprietary work) to help scale work extremely cost efficiently. That is some time off though; but will prove their value.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Over the last few days I&#8217;ve been working on interfaces to use across multiple programming languages to standardise how some things are done. This stemmed from a requirement to allow processing to be dealt with in any language from any other language. People do this all the time, it&#8217;s nothing new, but they generally stick &#8230; <a href=\"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/\" class=\"more-link\">Read More<span class=\"screen-reader-text\"> &#8220;Standardising logging and parallelisation in multiple languages&#8221;<\/span> &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":765,"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":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13],"tags":[],"class_list":["post-764","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Standardising logging and parallelisation in multiple languages - wade.one<\/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:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Standardising logging and parallelisation in multiple languages - wade.one\" \/>\n<meta property=\"og:description\" content=\"Over the last few days I&#8217;ve been working on interfaces to use across multiple programming languages to standardise how some things are done. This stemmed from a requirement to allow processing to be dealt with in any language from any other language. People do this all the time, it&#8217;s nothing new, but they generally stick ... Read More &quot;Standardising logging and parallelisation in multiple languages&quot; &raquo;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/\" \/>\n<meta property=\"og:site_name\" content=\"wade.one\" \/>\n<meta property=\"article:published_time\" content=\"2015-02-07T17:16:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/source-code-583537_640.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"362\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Wade\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@wadewomersley\" \/>\n<meta name=\"twitter:site\" content=\"@wadewomersley\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Wade\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated 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:\\\/\\\/wade.one\\\/blog\\\/2015\\\/02\\\/07\\\/standardising-logging-and-parallelisation-in-multiple-languages\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2015\\\/02\\\/07\\\/standardising-logging-and-parallelisation-in-multiple-languages\\\/\"},\"author\":{\"name\":\"Wade\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/f9dedd948575256e77a44aa1417f63de\"},\"headline\":\"Standardising logging and parallelisation in multiple languages\",\"datePublished\":\"2015-02-07T17:16:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2015\\\/02\\\/07\\\/standardising-logging-and-parallelisation-in-multiple-languages\\\/\"},\"wordCount\":650,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"image\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2015\\\/02\\\/07\\\/standardising-logging-and-parallelisation-in-multiple-languages\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/source-code-583537_640.jpg\",\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wade.one\\\/blog\\\/2015\\\/02\\\/07\\\/standardising-logging-and-parallelisation-in-multiple-languages\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2015\\\/02\\\/07\\\/standardising-logging-and-parallelisation-in-multiple-languages\\\/\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/2015\\\/02\\\/07\\\/standardising-logging-and-parallelisation-in-multiple-languages\\\/\",\"name\":\"Standardising logging and parallelisation in multiple languages - wade.one\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2015\\\/02\\\/07\\\/standardising-logging-and-parallelisation-in-multiple-languages\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2015\\\/02\\\/07\\\/standardising-logging-and-parallelisation-in-multiple-languages\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/source-code-583537_640.jpg\",\"datePublished\":\"2015-02-07T17:16:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2015\\\/02\\\/07\\\/standardising-logging-and-parallelisation-in-multiple-languages\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wade.one\\\/blog\\\/2015\\\/02\\\/07\\\/standardising-logging-and-parallelisation-in-multiple-languages\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2015\\\/02\\\/07\\\/standardising-logging-and-parallelisation-in-multiple-languages\\\/#primaryimage\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/source-code-583537_640.jpg\",\"contentUrl\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/source-code-583537_640.jpg\",\"width\":640,\"height\":362},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2015\\\/02\\\/07\\\/standardising-logging-and-parallelisation-in-multiple-languages\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wade.one\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Standardising logging and parallelisation in multiple languages\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/\",\"name\":\"wade.one\",\"description\":\"wade womersley - york based software engineer\",\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wade.one\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\",\"name\":\"Wade Womersley\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"contentUrl\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"width\":202,\"height\":200,\"caption\":\"Wade Womersley\"},\"logo\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/f9dedd948575256e77a44aa1417f63de\",\"name\":\"Wade\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/94100ef7361b8aaac136b852c8df93bdd10942165a122d5c56e4466cc403e5d9?s=96&d=retro&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/94100ef7361b8aaac136b852c8df93bdd10942165a122d5c56e4466cc403e5d9?s=96&d=retro&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/94100ef7361b8aaac136b852c8df93bdd10942165a122d5c56e4466cc403e5d9?s=96&d=retro&r=pg\",\"caption\":\"Wade\"},\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/author\\\/wade\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Standardising logging and parallelisation in multiple languages - wade.one","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:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/","og_locale":"en_GB","og_type":"article","og_title":"Standardising logging and parallelisation in multiple languages - wade.one","og_description":"Over the last few days I&#8217;ve been working on interfaces to use across multiple programming languages to standardise how some things are done. This stemmed from a requirement to allow processing to be dealt with in any language from any other language. People do this all the time, it&#8217;s nothing new, but they generally stick ... Read More \"Standardising logging and parallelisation in multiple languages\" &raquo;","og_url":"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/","og_site_name":"wade.one","article_published_time":"2015-02-07T17:16:26+00:00","og_image":[{"width":640,"height":362,"url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/source-code-583537_640.jpg","type":"image\/jpeg"}],"author":"Wade","twitter_card":"summary_large_image","twitter_creator":"@wadewomersley","twitter_site":"@wadewomersley","twitter_misc":{"Written by":"Wade","Estimated reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/#article","isPartOf":{"@id":"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/"},"author":{"name":"Wade","@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/f9dedd948575256e77a44aa1417f63de"},"headline":"Standardising logging and parallelisation in multiple languages","datePublished":"2015-02-07T17:16:26+00:00","mainEntityOfPage":{"@id":"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/"},"wordCount":650,"commentCount":0,"publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"image":{"@id":"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/#primaryimage"},"thumbnailUrl":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/source-code-583537_640.jpg","articleSection":["Programming"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/","url":"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/","name":"Standardising logging and parallelisation in multiple languages - wade.one","isPartOf":{"@id":"https:\/\/wade.one\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/#primaryimage"},"image":{"@id":"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/#primaryimage"},"thumbnailUrl":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/source-code-583537_640.jpg","datePublished":"2015-02-07T17:16:26+00:00","breadcrumb":{"@id":"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/#primaryimage","url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/source-code-583537_640.jpg","contentUrl":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/source-code-583537_640.jpg","width":640,"height":362},{"@type":"BreadcrumbList","@id":"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wade.one\/blog\/"},{"@type":"ListItem","position":2,"name":"Standardising logging and parallelisation in multiple languages"}]},{"@type":"WebSite","@id":"https:\/\/wade.one\/blog\/#website","url":"https:\/\/wade.one\/blog\/","name":"wade.one","description":"wade womersley - york based software engineer","publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wade.one\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3","name":"Wade Womersley","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","contentUrl":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","width":202,"height":200,"caption":"Wade Womersley"},"logo":{"@id":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png"}},{"@type":"Person","@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/f9dedd948575256e77a44aa1417f63de","name":"Wade","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/94100ef7361b8aaac136b852c8df93bdd10942165a122d5c56e4466cc403e5d9?s=96&d=retro&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/94100ef7361b8aaac136b852c8df93bdd10942165a122d5c56e4466cc403e5d9?s=96&d=retro&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/94100ef7361b8aaac136b852c8df93bdd10942165a122d5c56e4466cc403e5d9?s=96&d=retro&r=pg","caption":"Wade"},"url":"https:\/\/wade.one\/blog\/author\/wade\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/source-code-583537_640.jpg","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":1120,"url":"https:\/\/wade.one\/blog\/2023\/03\/28\/php-in-2023-why-its-still-relevant-and-a-smart-hiring-decision\/","url_meta":{"origin":764,"position":0},"title":"PHP in 2023: Why It&#8217;s Still Relevant and a Smart Hiring Decision","author":"Wade","date":"March 28, 2023","format":false,"excerpt":"There are few languages that have stood the test of time like PHP. First introduced in 1994, PHP has been powering websites for nearly three decades. While many new and powerful languages have emerged since then, PHP remains an essential tool in the web developer's arsenal. In this blog post,\u2026","rel":"","context":"In &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/wade.one\/blog\/category\/php\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1118,"url":"https:\/\/wade.one\/blog\/2023\/03\/26\/expanding-on-performance-of-redis-vs-mongodb-for-a-push-pull-system\/","url_meta":{"origin":764,"position":1},"title":"Expanding on performance of Redis vs MongoDB for a push\/pull system","author":"Wade","date":"March 26, 2023","format":false,"excerpt":"When it comes to building a push\/pop system, both Redis and MongoDB can be used as effective solutions. However, there are a few key differences between these two databases that can impact which one you choose for your system. Redis is an in-memory data structure store that can be used\u2026","rel":"","context":"In &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/wade.one\/blog\/category\/php\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1109,"url":"https:\/\/wade.one\/blog\/2023\/03\/26\/php-8-2-vs-7-4\/","url_meta":{"origin":764,"position":2},"title":"PHP 8.2 vs 7.4","author":"Wade","date":"March 26, 2023","format":false,"excerpt":"PHP is a widely used programming language that has been evolving rapidly in recent years. PHP 8.2 is the latest release, which came out on November 25th, 2021. This version brings several improvements, new features, and bug fixes, making it more efficient and secure than PHP 7.4. In this blog\u2026","rel":"","context":"In &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/wade.one\/blog\/category\/php\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1103,"url":"https:\/\/wade.one\/blog\/2023\/03\/26\/google-bard-vs-chatgpt-a-quick-review\/","url_meta":{"origin":764,"position":3},"title":"Google Bard vs ChatGPT &#8211; a quick review","author":"Wade","date":"March 26, 2023","format":false,"excerpt":"I am loving the evolution of AI in the last year: it's really developing rapidly and, if you still know how to rephrase your requests to work around limitations of the current implementations you can get a lot out of it. Google Bard and ChatGPT are two of the most\u2026","rel":"","context":"In &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/wade.one\/blog\/category\/ai\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1175,"url":"https:\/\/wade.one\/blog\/2026\/04\/07\/what-good-kotlin-code-feels-like-after-too-much-java\/","url_meta":{"origin":764,"position":4},"title":"What Good Kotlin Code Feels Like After Too Much Java","author":"Wade","date":"April 7, 2026","format":false,"excerpt":"Kotlin feels good when it removes friction instead of adding ceremony. After enough Java, that difference becomes obvious very quickly.","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1154,"url":"https:\/\/wade.one\/blog\/2026\/03\/25\/typescript-7-0-looks-like-the-bigger-story\/","url_meta":{"origin":764,"position":5},"title":"TypeScript 7.0 Looks Like the Bigger Story","author":"Wade","date":"March 25, 2026","format":false,"excerpt":"TypeScript 6.0 matters, but TypeScript 7.0 looks like the real shift. The native compiler work is the part I think most teams should actually care about.","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/764","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/comments?post=764"}],"version-history":[{"count":1,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/764\/revisions"}],"predecessor-version":[{"id":766,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/764\/revisions\/766"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/media\/765"}],"wp:attachment":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/media?parent=764"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/categories?post=764"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/tags?post=764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}