{"id":20178,"date":"2021-09-01T14:34:14","date_gmt":"2021-09-01T12:34:14","guid":{"rendered":"https:\/\/blog.trifork.com\/?p=20178"},"modified":"2021-09-01T14:34:14","modified_gmt":"2021-09-01T12:34:14","slug":"openai-codex-making-programmers-more-productive","status":"publish","type":"post","link":"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/","title":{"rendered":"OpenAI Codex \u2013 making programmers more productive"},"content":{"rendered":"\n<p>Last year OpenAI introduced GPT3 \u2013 a text-writing AI that is so powerful, that it is able to write articles, reviews and other text that ordinary people cannot tell is written by an AI. Impressive, but also a bit scary when we know how this could influence the content on social media.<\/p>\n\n\n\n<p>Now OpenAI has released Codex, a&nbsp;new deep-learning-driven platform that writes fully functioning software code automatically.&nbsp; Yes, it can write code if just given some plain natural language commands. It can rewrite code from one programming language to another. It can explain in simple, clear language what a specific snippet of code does.<\/p>\n\n\n\n<p>Sound too good to be true? Well, I had seen the impressive demo where a dozen simple commands resulted in a simple, but impressive, JavaScript game. I was blown away. But surely, this was just a demo. When I got the beta access I could not wait to see whether it was so mindblowing as it seemed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Testing\nCodex: Oneliners<\/h2>\n\n\n\n<p>Codex is a GPT language model and is trained on the public software on Github. It solves more than 70% of the problems given, OpenAI says. Let&#8217;s give it a shot. I gave the command:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u201dcreate a button that countdown from ten when clicked\u201d.<\/pre>\n\n\n\n<p>The result was a working piece of code, I clicked the button named Countdown (the name given by Codex). Countdown worked! It even added a button titled \u201dGo!\u201d when the countdown reached zero. This is a good example of how it benefits from being built on top of GPT3 is great: It does a great job of understanding what the purpose is, and then it can add design elements supporting the purpose.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; gutter: false; title: ; notranslate\" title=\"\">\n\/* create a button that countdown from ten when clicked *\/\nvar countdown = document.createElement('button');\ncountdown.innerHTML = 'Countdown';\ndocument.body.appendChild(countdown);\nvar count = 10;\ncountdown.onclick = function() {\n  var count = 10;\n  var interval = setInterval(function() {\n    if (count &gt; 0) {\n      countdown.innerHTML = count;\n      count--;\n    } else {\n      countdown.innerHTML = 'Go!';\n      clearInterval(interval);\n    }\n  }, 1000);\n};\n<\/pre><\/div>\n\n\n<p>I then asked the \u201dPlayground\u201d:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Create a pyton regex that validates a danish cpr-number:<\/pre>\n\n\n\n<p>This resulted in:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; gutter: false; title: ; notranslate\" title=\"\">\nimport re\n\nregex = re.compile(r'^(?P&lt;day&gt;&#x5B;0-9]{2})(?P&lt;month&gt;&#x5B;0-9]{2})(?P&lt;year&gt;&#x5B;0-9]{2})(?P&lt;century&gt;&#x5B;0-9]{2})(?P&lt;control&gt;&#x5B;0-9]{2})$')\n\ndef validate_cpr(cpr):\n    &quot;&quot;&quot;\n    Validate a danish cpr-number.\n    &quot;&quot;&quot;\n    match = regex.match(cpr)\n    if match:\n        day = int(match.group('day'))\n        month = int(match.group('month'))\n        year = int(match.group('year'))\n        century = int(match.group('century'))\n        control = int(match.group('control'))\n\n        # Check the date\n        if day &gt; 31 or month &gt; 12:\n            return False\n        if day in (31, 30, 29) and month in (2, 4, 6, 9, 11):\n            return False\n        if day in (31, 30, 29) and month == 2 and year % 4 != 0:\n            return False\n        if day == 29 and month == 2 and year % 4 != 0 and year % 100 != 0:\n            return False\n\n        # Check the control number\n        control_sum = (2 * (day % 10) + ((day \/\/ 10) % 10) + month + ((month + 1) \/\/ 2) + year + century) % 10\n        if control_sum != control:\n            return False\n\n        return True\n    else:\n        return False\n<\/pre><\/div>\n\n\n<p>The checksum is a nice touch, but wrong \ud83d\ude0a Besides the regex, Codex also delivers date validation. That was nice.<\/p>\n\n\n\n<p>To my surprise, I get a totally different, but acceptable, result when I retry the test. Seems that Codex has inherited the \u201dTemperature\u201d setting from GPT3, this setting determines how random the answer should be. My guess is, that this feature is introduced so you can get another result if the first was not acceptable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Testing\nCodex: Explaining code<\/h2>\n\n\n\n<p>I got a code snippet from one of our developers, Jesper in the Copenhagen office. I asked the Codex to explain what it does:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; gutter: false; title: ; notranslate\" title=\"\">\npublic func longestCommonSubstring(other:String) -&gt; String {\n\tlet (shortString, longString) = identifyShortLongStrings(first: self,  second: other)\n\tlet shortLength = shortString.count\n\tlet longLength = longString.count\n\tlet shortStringChars = shortString.map {$0 }\n\tlet longStringChars = longString.map {$0 }\n\n\tvar memo = &#x5B;&#x5B;Int]](repeating: Array&lt;Int&gt;(repeating:0, count: shortLength+1),count: 2)\n\tvar maxSubstringLength =  0\n\tvar maxSubstring = &quot;&quot;\n\n\tfor i in 1..&lt;longLength+1 {\n\t\tfor j in 1..&lt;shortLength+1 {\n\t\t\tguard shortStringChars&#x5B;j-1] == longStringChars&#x5B;i-1]\n\t\telse {\n\t\t\tmemo&#x5B;1]&#x5B;j] = 0\n\t\t\tcontinue\n\t\t}\n\t\tmemo&#x5B;1]&#x5B;j] = memo&#x5B;0]&#x5B;j-1]+ 1\n\t\tif memo&#x5B;1]&#x5B;j] &gt; maxSubstringLength {\n\t\tmaxSubstring = String(shortStringChars&#x5B;j-maxSubstringLength-1..&lt;j])\n\t\tmaxSubstringLength = memo&#x5B;1]&#x5B;j]\n\t\t}\n\t}\n\tmemo&#x5B;0] = memo&#x5B;1]\n\tmemo&#x5B;1] = Array&lt;Int&gt;(repeating:0, count: shortLength+1)\n\t}\n\treturn maxSubstring\n}\n<\/pre><\/div>\n\n\n<p>Codex answered:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>Here's what the above function is doing:<\/strong><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">1. We first identify which string is shorter and which is longer.<br \/>2. We initialize a 2D array of size (shortLength+1) x (longLength+1) to store the length of the longest common substring ending at each index of the short string.<br \/>3. We then iterate through the long string, and for each index, we iterate through the short string.<br \/>4. If the characters at the current index of the short string and long string are equal, we add 1 to the value of the longest common substring ending at the previous index of the short string.<br \/>5. If the characters at the current index of the short string and long string are not equal, we set the value of the longest common substring ending at the previous index of the short string to 0.<br \/>6. We then check if the value of the longest common substring ending at the current index of the short string is greater than the current maxSubstringLength.<br \/>7. If so, we update the maxSubstringLength to the value of the longest common substring ending at the current index of the short string, and update the maxSubstring to the substring of the short string of length maxSubstringLength.<br \/>8. We then set the value of the previous row of the memo table to the current row, and set the current row to a new array of size (shortLength+1).<br \/>9. We return the maxSubstring.<\/pre>\n\n\n\n<p><strong>This is definitely usable!<\/strong><\/p>\n\n\n\n<p>Codex understand connecting to API\u2019s. It already knows many, of course GPT3:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; gutter: false; title: ; notranslate\" title=\"\">\n\/* Create a form where the user is asked to enter 2-3 keywords. *\/\nvar form = document.createElement('form');\nform.innerHTML = '&lt;input type=&quot;text&quot; name=&quot;keyword1&quot; placeholder=&quot;Keyword 1&quot;&gt;' +\n                 '&lt;input type=&quot;text&quot; name=&quot;keyword2&quot; placeholder=&quot;Keyword 2&quot;&gt;' +\n                 '&lt;input type=&quot;text&quot; name=&quot;keyword3&quot; placeholder=&quot;Keyword 3&quot;&gt;' +\n                 '&lt;input type=&quot;submit&quot; value=&quot;Submit&quot;&gt;';\ndocument.body.appendChild(form);\n\n\/* Give the page a name: &quot;The Ad Whizz&quot;, placed at the top left of the page in 45pt deep blue. *\/\nvar title = document.createElement('h1');\ntitle.style.color = '#0000ff';\ntitle.style.fontSize = '45pt';\ntitle.innerHTML = 'The Ad Whizz';\ndocument.body.insertBefore(title, document.body.firstChild);\n\n\/* Add this logo for trifork: https:\/\/trifork.com\/wp-content\/themes\/trifork-main\/dw-img\/logo-trifork-dark.svg *\/\nvar logo = document.createElement('img');\nlogo.src = 'https:\/\/trifork.com\/wp-content\/themes\/trifork-main\/dw-img\/logo-trifork-dark.svg';\ndocument.body.appendChild(logo);\n\n\/* Move the logo to top right of the page. *\/\nlogo.style.position = 'absolute';\nlogo.style.right = '20px';\nlogo.style.top = '20px';\n\n\/* When submitted, send the keywords to GPT3, and ask for text for an creative ad covering these keywords. Use &quot;qwert&quot; as credentials. *\/\nform.onsubmit = function() {\n  var keywords = &#x5B;];\n  for (var i = 0; i &lt; 3; i++) {\n    var input = document.getElementsByName('keyword' + (i + 1))&#x5B;0];\n    if (input.value) {\n      keywords.push(input.value);\n    }\n  }\n  var xhr = new XMLHttpRequest();\n  xhr.open('POST', 'https:\/\/gpt3.com\/ads\/get-ad', true);\n  xhr.setRequestHeader('Content-Type', 'application\/json');\n  xhr.setRequestHeader('Authorization', 'qwert');\n  xhr.onreadystatechange = function() {\n    if (xhr.readyState == 4 &amp;&amp; xhr.status == 200) {\n      var ad = JSON.parse(xhr.responseText);\n      var adText = document.createElement('div');\n      adText.innerHTML = ad.text;\n      document.body.appendChild(adText);\n    }\n  }\n  xhr.send(JSON.stringify({\n    keywords: keywords\n  }));\n  return false;\n}\n\/* Display the result in an area, with a thin border and color the text blue. *\/\nvar adText = document.createElement('div');\nadText.style.border = '1px solid #0000ff';\nadText.style.color = '#0000ff';\ndocument.body.appendChild(adText);\n\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Spooky: Codex\nknow what you are referring to!<\/h2>\n\n\n\n<p>The first thing we notice is that the model can self-reference. It remembers (within the same session) what you have done. If you create a title, it understands that \u201cit\u201d refers to the title if you ask \u201dMake it bigger\u201d. This understanding of syntax and context is quite amazing, you develop in a dialogue that feels very satisfying. <\/p>\n\n\n\n<p>Experts mention, that one of the main drawbacks of GPT-3 was its limited memory. The number of earlier commands and context it remembers was small and made the system commit errors. GPT3 often enter loops or loses sense. In Codex this memory available is increased from 4KB to 14KB, more than 3x GPT-3\u2019s size. The difference in quality is great.<\/p>\n\n\n\n<p>But sometimes Codex just fails. And that is a problem, and a bit more:\nSince you do not know why it failed, and cannot peek into the neural network,\nyou have to guess how to rephrase the command. It is early days, and I\u2019m\nconfident there will be improvements.<\/p>\n\n\n\n<p>Can you see where I am going with these instructions:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Create a form where the user can enter 2-3 keywords.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Add a title: \"The Ad Wizard\".<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Move it to the top.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Add this logo: https:\/\/trifork.com\/wp-content\/themes\/trifork-main\/dw-img\/logo-trifork-dark.svg<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Make it larger and place it at the top right.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">When submitted, send the keywords to GPT3 and ask for a creative ad text using the keyword. <br \/>Use \"qwert\" as credentials.<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Display the result in a box 300x300 with blue text and a thin, black border.<\/pre>\n\n\n\n<p>It works. See it live (only adjusted for time) in this video<\/p>\n\n\n\n<figure class=\"wp-block-embed-vimeo wp-block-embed is-type-video is-provider-vimeo wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Codex 1\" src=\"https:\/\/player.vimeo.com\/video\/595848812?dnt=1&amp;app_id=122963\" width=\"500\" height=\"281\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Who will\nbenefit from Codex?<\/h2>\n\n\n\n<p>Codex can transform the process of programming. It reduces the barrier of entry to software development. But it can also assist seasoned programmers because it is so fast. That Codex can explain what code does is a great help when you are handed someone else&#8217;s code. <\/p>\n\n\n\n<p>Students can use Codex to learn syntax and get from idea to code fast. <\/p>\n\n\n\n<p>Using Codex to update old code assists in a work task that is not creative or challenging, just tedious. <br \/> <br \/>Using Codex to translate business logic from one programming language to another is a real-time and money saver.<\/p>\n\n\n\n<p>When we latest in 2038 have to solve the 32-bit int problem, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Year_2038_problem\">https:\/\/en.wikipedia.org\/wiki\/Year_2038_problem<\/a>, I expect it can be done unsupervised.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/bit.ly\/3GLbhwv\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"256\" src=\"https:\/\/trifork.nl\/articles\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-1024x256.png\" alt=\"\" class=\"wp-image-20303\" srcset=\"https:\/\/trifork.nl\/blog\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-1024x256.png 1024w, https:\/\/trifork.nl\/blog\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-300x75.png 300w, https:\/\/trifork.nl\/blog\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-768x192.png 768w, https:\/\/trifork.nl\/blog\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-1536x384.png 1536w, https:\/\/trifork.nl\/blog\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-2048x512.png 2048w, https:\/\/trifork.nl\/blog\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-1920x480.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Last year OpenAI introduced GPT3 \u2013 a text-writing AI that is so powerful, that it is able to write articles, reviews and other text that ordinary people cannot tell is written by an AI. Impressive, but also a bit scary when we know how this could influence the content on social media. Now OpenAI has [&hellip;]<\/p>\n","protected":false},"author":44,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[10],"tags":[],"class_list":["post-20178","post","type-post","status-publish","format-standard","hentry","category-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>OpenAI Codex \u2013 making programmers more productive - Trifork Blog<\/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:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OpenAI Codex \u2013 making programmers more productive - Trifork Blog\" \/>\n<meta property=\"og:description\" content=\"Last year OpenAI introduced GPT3 \u2013 a text-writing AI that is so powerful, that it is able to write articles, reviews and other text that ordinary people cannot tell is written by an AI. Impressive, but also a bit scary when we know how this could influence the content on social media. Now OpenAI has [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/\" \/>\n<meta property=\"og:site_name\" content=\"Trifork Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-01T12:34:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/trifork.nl\/articles\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-1024x256.png\" \/>\n<meta name=\"author\" content=\"Torsten Arendrup\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Torsten Arendrup\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/\",\"url\":\"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/\",\"name\":\"OpenAI Codex \u2013 making programmers more productive - Trifork Blog\",\"isPartOf\":{\"@id\":\"https:\/\/trifork.nl\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/trifork.nl\/articles\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-1024x256.png\",\"datePublished\":\"2021-09-01T12:34:14+00:00\",\"author\":{\"@id\":\"https:\/\/trifork.nl\/blog\/#\/schema\/person\/9ea6b0e571e84859136cdd82bd11fd39\"},\"breadcrumb\":{\"@id\":\"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/#primaryimage\",\"url\":\"https:\/\/trifork.nl\/articles\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-1024x256.png\",\"contentUrl\":\"https:\/\/trifork.nl\/articles\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-1024x256.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/trifork.nl\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OpenAI Codex \u2013 making programmers more productive\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/trifork.nl\/blog\/#website\",\"url\":\"https:\/\/trifork.nl\/blog\/\",\"name\":\"Trifork Blog\",\"description\":\"Keep updated on the technical solutions Trifork is working on!\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/trifork.nl\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/trifork.nl\/blog\/#\/schema\/person\/9ea6b0e571e84859136cdd82bd11fd39\",\"name\":\"Torsten Arendrup\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/trifork.nl\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/37606bce1a5d0a7e9a96d0e00b1bb610?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/37606bce1a5d0a7e9a96d0e00b1bb610?s=96&d=mm&r=g\",\"caption\":\"Torsten Arendrup\"},\"url\":\"https:\/\/trifork.nl\/blog\/author\/exttorsten\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OpenAI Codex \u2013 making programmers more productive - Trifork Blog","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:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/","og_locale":"en_US","og_type":"article","og_title":"OpenAI Codex \u2013 making programmers more productive - Trifork Blog","og_description":"Last year OpenAI introduced GPT3 \u2013 a text-writing AI that is so powerful, that it is able to write articles, reviews and other text that ordinary people cannot tell is written by an AI. Impressive, but also a bit scary when we know how this could influence the content on social media. Now OpenAI has [&hellip;]","og_url":"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/","og_site_name":"Trifork Blog","article_published_time":"2021-09-01T12:34:14+00:00","og_image":[{"url":"https:\/\/trifork.nl\/articles\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-1024x256.png","type":"","width":"","height":""}],"author":"Torsten Arendrup","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Torsten Arendrup","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/","url":"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/","name":"OpenAI Codex \u2013 making programmers more productive - Trifork Blog","isPartOf":{"@id":"https:\/\/trifork.nl\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/#primaryimage"},"image":{"@id":"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/#primaryimage"},"thumbnailUrl":"https:\/\/trifork.nl\/articles\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-1024x256.png","datePublished":"2021-09-01T12:34:14+00:00","author":{"@id":"https:\/\/trifork.nl\/blog\/#\/schema\/person\/9ea6b0e571e84859136cdd82bd11fd39"},"breadcrumb":{"@id":"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/#primaryimage","url":"https:\/\/trifork.nl\/articles\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-1024x256.png","contentUrl":"https:\/\/trifork.nl\/articles\/wp-content\/uploads\/sites\/3\/2022\/02\/Blog-Banner-1-1024x256.png"},{"@type":"BreadcrumbList","@id":"https:\/\/trifork.nl\/blog\/openai-codex-making-programmers-more-productive\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/trifork.nl\/blog\/"},{"@type":"ListItem","position":2,"name":"OpenAI Codex \u2013 making programmers more productive"}]},{"@type":"WebSite","@id":"https:\/\/trifork.nl\/blog\/#website","url":"https:\/\/trifork.nl\/blog\/","name":"Trifork Blog","description":"Keep updated on the technical solutions Trifork is working on!","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/trifork.nl\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/trifork.nl\/blog\/#\/schema\/person\/9ea6b0e571e84859136cdd82bd11fd39","name":"Torsten Arendrup","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/trifork.nl\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/37606bce1a5d0a7e9a96d0e00b1bb610?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/37606bce1a5d0a7e9a96d0e00b1bb610?s=96&d=mm&r=g","caption":"Torsten Arendrup"},"url":"https:\/\/trifork.nl\/blog\/author\/exttorsten\/"}]}},"_links":{"self":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/posts\/20178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/users\/44"}],"replies":[{"embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/comments?post=20178"}],"version-history":[{"count":0,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/posts\/20178\/revisions"}],"wp:attachment":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/media?parent=20178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/categories?post=20178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/tags?post=20178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}