{"id":9508,"date":"2026-09-15T12:51:26","date_gmt":"2026-09-15T12:51:26","guid":{"rendered":"https:\/\/www.dyalog.com\/blog\/?p=9508"},"modified":"2026-09-15T12:58:23","modified_gmt":"2026-09-15T12:58:23","slug":"making-the-ide-my-own-part-2-mostly-windows","status":"publish","type":"post","link":"https:\/\/www.dyalog.com\/blog\/2026\/09\/making-the-ide-my-own-part-2-mostly-windows\/","title":{"rendered":"Making the IDE My Own \u2013 Part 2 (Mostly Windows)"},"content":{"rendered":"<p>In <a href=\"https:\/\/www.dyalog.com\/blog\/2026\/06\/making-the-ide-my-own-part-1\/\" target=\"_blank\" rel=\"noopener\">my previous post<\/a>, I laid the groundwork for extending the development environment by running a collection of small functions at startup time. If you&#8217;ve not read that post yet, I recommend doing so before you continue!<\/p>\n<p>So far, my extensions have been generally applicable. I&#8217;ll move onto things that are specific to the Windows IDE, as that&#8217;s where I spend my days. That said, it might still be interesting to you even if you don&#8217;t use Dyalog on Microsoft Windows. For example, shortcut keys can be configured in Ride, and the font can be used in Ride and in your terminal emulator of choice.<\/p>\n<h2 id=\"a-font-face-i-can-read\">A Font Face I Can Read<\/h2>\n<p>The first thing any APLer wants is a font that renders the glyphs properly and at a comfortable size. You might expect to set this in a configuration parameter \u2013 but you can\u2019t; the session font and size are not configuration values. The traditional route is to choose them from the UI and then save the session file, but it is easy to automate making these choices every time we start. For the font, <code>setFont<\/code> drives the real controls, exactly as if I had used them with mouse and keyboard:<\/p>\n<pre class=\"apl\"><code>\u2207 setFont\r\n \u235d Set font face and size\r\n  :With \u2395SE.cbtop.bandtb5.tb\r\n      font.Text\u2190'APL387 Unicode'\r\n      \u2395NQ font'Select'\r\n      size.Value\u219017\r\n      \u2395NQ size'Change'\r\n  :EndWith\r\n\u2207<\/code><\/pre>\n<p><code>\u2395SE.cbtop.bandtb5.tb<\/code> is the toolbar band that holds the font name combo (<code>font<\/code>) and the size spinner (<code>size<\/code>). For each control, you need to assign the new choice, then fire a <code>Select<\/code> event to make the change take effect.<\/p>\n<p>Did you spot the <code>7<\/code> instead of <code>5<\/code>? You might find it strange that I don&#8217;t use the traditional default <i>APL38<strong>5<\/strong> Unicode<\/i> font. I personally prefer the new <a href=\"https:\/\/dyalog.github.io\/APL387\/\" target=\"_blank\" rel=\"noopener\">APL38<strong>7<\/strong> Unicode<\/a>, which was drafted by a professional type designer as a successor to the venerable <i>APL385 Unicode<\/i>. The new font is now being refined and the up-to-date revision is installed with every new build of Dyalog v20.0. By the way, <a href=\"https:\/\/blog.rubenverg.com\/\" target=\"_blank\" rel=\"noopener\">Madeline Vergani<\/a> was the very first applicant to receive a grant from <a href=\"https:\/\/theapltrust.org\/\" target=\"_blank\" rel=\"noopener\">The APL Trust<\/a>, and it was for this project. It is, in my opinion, the cleanest our beloved glyphs have ever looked:<\/p>\n<div id=\"attachment_9586\" style=\"width: 920px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/06\/apl385-apl387.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-9586\" class=\"size-full wp-image-9586\" src=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/06\/apl385-apl387.png\" alt=\"Screenshot comparing APL385 and APL387\" width=\"910\" height=\"362\" srcset=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/06\/apl385-apl387.png 910w, https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/06\/apl385-apl387-300x119.png 300w, https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/06\/apl385-apl387-768x306.png 768w, https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/06\/apl385-apl387-500x199.png 500w\" sizes=\"auto, (max-width: 910px) 100vw, 910px\" \/><\/a><p id=\"caption-attachment-9586\" class=\"wp-caption-text\">Comparison of APL385 Unicode and the new APL387 Unicode.<\/p><\/div>\n<p>In the above image, the first two lines below the titles illustrate APL387&#8217;s superior distinguishing of glyphs that could potentially be confused, the next line shows APL387&#8217;s more consistent design, and the final line shows examples of where APL387 just has nicer glyph shapes.<\/p>\n<p>In Ride, you can set the font face permanently in the Preferences:<br \/>\n<div id=\"attachment_9817\" style=\"width: 786px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/09\/Ride-APL-font-1.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-9817\" src=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/09\/Ride-APL-font-1.png\" alt=\"Screenshot of Ride&#039;s Preferences dialog showing how to change APL font\" width=\"776\" height=\"593\" class=\"size-full wp-image-9817\" \/><\/a><p id=\"caption-attachment-9817\" class=\"wp-caption-text\">Ride: Preferences&gt;Style&gt;&#8221;APL font&#8221;<\/p><\/div><\/p>\n<h2 id=\"in-and-out\">In and Out<\/h2>\n<p><code>setFont<\/code> also settled on a size, but where the face is a set-and-forget choice, the ideal size depends on the situation. When I show my APL session during a video call or presentation, I usually need to increase my Session font size; conversely, I sometimes want a smaller font size to get an overview of a large piece of code, a large array, or a text-form diagram printed into the Session. These contradictory requirements mean that I like having font size controls at my fingertips:<\/p>\n<pre class=\"apl\"><code>\u2207 extViewMenu;ZC\r\n \u235d Extend View menu with Zoom items\r\n  ZC\u2190{(\u2283\u2375)\u2395WC'MenuItem'(2\u2283\u2375)('Event' \u22c4 'Select' 'Resize',3\u2283\u2375)('Hint' \u22c4 4\u2283\u2375)('Accelerator' \u22c4 5\u2283\u2375)}\r\n  '\u2395SE.mb.view.sep'\u2395WC'Separator'\r\n  ZC\u00a8(\r\n      '\u2395SE.mb.view.larger'  'Zoom &amp;In'   1 'Make text larger (Ctrl+=)'  (187 2)\r\n      '\u2395SE.mb.view.smaller' 'Zoom &amp;Out' \u00af1 'Make text smaller (Ctrl+-)' (189 2)\r\n  )\r\n\u2207<\/code><\/pre>\n<p><code>ZC<\/code> (for <em>Zoom Create<\/em>) is a small helper function that removes repetitive parts of the code. When the event specification has a third element after the event name and callback function, like <code>'Select' 'Resize' 1<\/code>, the third element is used as the left argument to the callback function. That function is <code>Resize<\/code> in our case, which, like <code>setFont<\/code>, works on the native control. It uses the size spinner\u2019s own list of sizes rather than guessing at point values:<\/p>\n<pre class=\"apl\"><code>\u2207 a Resize e\r\n \u235d Resize Session font\r\n  ;font;idx;new;sizes\r\n  font\u2190\u2395SE \u2395WG'Font'\r\n  sizes\u2190\u2395SE.cbtop.bandtb5.tb.size.Items\r\n \r\n  idx\u2190a+sizes\u2378\u2365{\u2308\u2375\u00f72}2\u2283font\r\n  new\u2190sizes\u2283\u23681\u2308idx\u230a\u2262sizes\r\n \r\n  \u2395SE.cbtop.bandtb5.tb.size.(Value Thumb)\u2190new idx\r\n  \u2395NQ \u2395SE.cbtop.bandtb5.tb.size'Spin'idx\r\n\u2207<\/code><\/pre>\n<p>This locates the current size\u2019s location (with fuzzing) within the spinner\u2019s <code>Items<\/code>, takes one step in the requested direction (while protecting against leaving the range), and writes it back into the control, then fires a <code>Spin<\/code> event so the session re-renders. Because the control owns the list of legal sizes, I can never land on one it wouldn\u2019t have offered. Anyway, this is what my <strong>View<\/strong> menu looks like now:<\/p>\n<div id=\"attachment_9824\" style=\"width: 924px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/09\/Ad\u00e1ms-View-Menu.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-9824\" src=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/09\/Ad\u00e1ms-View-Menu.png\" alt=\"Screenshot of Ad\u00e1m&#039;s View menu after running extViewMenu\" width=\"914\" height=\"459\" class=\"size-full wp-image-9824\" srcset=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/09\/Ad\u00e1ms-View-Menu.png 914w, https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/09\/Ad\u00e1ms-View-Menu-300x151.png 300w, https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/09\/Ad\u00e1ms-View-Menu-768x386.png 768w, https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/09\/Ad\u00e1ms-View-Menu-500x251.png 500w\" sizes=\"auto, (max-width: 914px) 100vw, 914px\" \/><\/a><p id=\"caption-attachment-9824\" class=\"wp-caption-text\">What my View menu looks like after running extViewMenu<\/p><\/div>\n<p><code>\u2395PFKEY<\/code> doesn\u2019t reach Ride, but Ride\u2019s own <strong>Preferences<\/strong>&gt;<strong>Shortcuts<\/strong> accepts many of the same command codes if you\u2019d like to reproduce the effect there; it allows you to assign any keystroke to an \u201cF-key\u201d too. (However, you don\u2019t need to go through F-keys to have two keystrokes for a single action; Ride allows assigning multiple keystrokes to each action.) Ride also already has keyboard shortcuts for zooming in and out, and resetting the zoom:<br \/>\n<div id=\"attachment_9818\" style=\"width: 786px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/09\/Ride-Zoom-Font-Size-1.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-9818\" src=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/09\/Ride-Zoom-Font-Size-1.png\" alt=\"Screenshot of Ride&#039;s Preferences dialog showing how to change font size\" width=\"776\" height=\"593\" class=\"size-full wp-image-9818\" \/><\/a><p id=\"caption-attachment-9818\" class=\"wp-caption-text\">Ride: Preferences&gt;Shortcuts&gt;&#8221;font&#8221;<\/p><\/div><\/p>\n<h2 id=\"function-keys-revisited\">Function Keys Revisited<\/h2>\n<p>In <a href=\"https:\/\/www.dyalog.com\/blog\/2018\/09\/enhanced-debugging-with-function-keys\/\" target=\"_blank\" rel=\"noopener\">2018<\/a> I employed <a href=\"https:\/\/docs.dyalog.com\/20.0\/language-reference-guide\/system-functions\/pfkey\/\"><code>\u2395PFKEY<\/code><\/a> to let the Tracer run up to a chosen line: I click on the line I&#8217;m interested in, which moves the text caret there, and the Tracer then executes up to that line and stops \u2014 a quick way to skip ahead to the part I actually want to inspect. In the <a href=\"https:\/\/www.dyalog.com\/blog\/2020\/12\/enhanced-debugging-with-function-keys-evaluate-selection\/\" target=\"_blank\" rel=\"noopener\">2020 follow-up<\/a> I added the ability to select (part of) an expression in the Editor and have it executed in the session without (apparently) leaving the Editor. Both of those keys live on in <code>setFKeys<\/code>, alongside a good many friends (ignore the keystrokes mentioned in the comments for now \u2013 I&#8217;ll explain those in the next section):<\/p>\n<pre class=\"apl\"><code>\u2207 setFKeys\r\n \u235d Set various F-keys\r\n  ;PF\r\n  PF\u2190{}\u2286\u235b\u2395PFKEY\u2368\r\n \r\n  5 PF' ' 'DB'                  \u235d Mark for execution   F5\r\n  6 PF'CP' 'JP' 'PT' 'ER' 'JP'  \u235d Run selection in session  F6\r\n \r\n  13 PF')' 'LL' '(' 'RL'  \u235d Parenthesise left  Ctrl+0\r\n  14 PF']' 'LL' '[' 'RL'  \u235d Bracket left       Ctrl+]\r\n  15 PF'}' 'LL' '{' 'RL'  \u235d Brace left         Ctrl+}\r\n \r\n  10 PF'BP' 'RM' 'TC' 'BP'       \u235d Trace to here    F10\r\n  34 PF'BP' 'RM' 'TC' 'BP' 'TC'  \u235d Trace into here  Ctrl+F10\r\n \r\n  43 PF'OP' 'IL'       \u235d Insert open line below  Ctrl+I\r\n  44 PF'ER' 'BK' 'RL'  \u235d Execute and recall      Alt+Enter\r\n \r\n  45 PF'BK'  \u235d Ctrl+Z\r\n  46 PF'FD'  \u235d Ctrl+Y\r\n \r\n  47 PF'Lw' 'DI'  \u235d Delete word left   Ctrl+BkSp\r\n  48 PF'Rw' 'DI'  \u235d Delete word right  Ctrl+Del\r\n\u2207<\/code><\/pre>\n<p>A word on the numbers: <code>\u2395PFKEY<\/code> programs numbered <em><strong>P<\/strong>rogrammable <strong>F<\/strong>unction <strong>key<\/strong>s<\/em>, but only some of them are literally function keys. So, while, for example, <code>5<\/code> and <code>6<\/code> are <kbd>F5<\/kbd> and <kbd>F6<\/kbd>, numbers above <code>12<\/code> refer to shifted keys:<\/p>\n<ul>\n<li><code>13<\/code> through <code>24<\/code> are <kbd>Shift<\/kbd>+<kbd>F1<\/kbd> through <kbd>F12<\/kbd><\/li>\n<li><code>25<\/code> through <code>36<\/code> are <kbd>Ctrl<\/kbd>+<kbd>F1<\/kbd> through <kbd>F12<\/kbd><\/li>\n<li><code>37<\/code> through <code>48<\/code> are <kbd>Ctrl<\/kbd>+<kbd>Shift<\/kbd>+<kbd>F1<\/kbd> through <kbd>F12<\/kbd><\/li>\n<li><code>48<\/code> through <code>96<\/code> are as above, but while holding <kbd>Alt<\/kbd><\/li>\n<\/ul>\n<p>The whole function is held together by the first line: <code>\u2395PFKEY<\/code> takes the <a href=\"https:\/\/docs.dyalog.com\/20.0\/windows-ui-guide\/keyboard-shortcuts\/\" target=\"_blank\" rel=\"noopener\">shortcut keys<\/a> and symbols on the left and the F-key number on the right. However, I prefer to write the number on the left, so I assemble a tiny tacit function:<\/p>\n<ul>\n<li><em>Commute<\/em> (<code>\u2368<\/code>) flips the arguments so I can give the number on the left.<\/li>\n<li><em>Behind<\/em> (<code>\u235b<\/code>) allows <em>nest<\/em> (<code>\u2286<\/code>) to ensure that the (new) left argument (the shortcut keys) is nested. This is so that a single code like <code>'BK'<\/code> is treated as if I\u2019d written <code>\u2282'BK'<\/code> \u2013 a small notational nicety that lets the single-code keys read as cleanly as the rest.<\/li>\n<li>The leading <code>{}<\/code> swallows the returned result (the previous value for the F-key) so that the function is silent.<\/li>\n<\/ul>\n<p>In Ride, some of these come pre-assigned. Many others can be constructed by typing key sequences into the input fields for <strong>PF<em>n<\/em><\/strong> entries under <strong>Preferences<\/strong>&gt;<strong>Shortcuts<\/strong>, where you can also assign any keyboard combination:<br \/>\n<div id=\"attachment_9820\" style=\"width: 786px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/09\/RIDE-F-keys-1.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-9820\" src=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/09\/RIDE-F-keys-1.png\" alt=\"Screenshot of Ride&#039;s Preferences dialog showing how to change F-keys\" width=\"776\" height=\"593\" class=\"size-full wp-image-9820\" \/><\/a><p id=\"caption-attachment-9820\" class=\"wp-caption-text\">Ride: Preferences&gt;Shortcuts: &#8220;PF&#8221;<\/p><\/div><\/p>\n<h2 id=\"keyboard-shortcuts\">Keyboard Shortcuts<\/h2>\n<aside style=\"float:right;width:50%\">\n<blockquote style=\"padding:1.625em;padding-bottom:0;margin-right:0\"><p>At this point, you might interject that surely I can&#8217;t be using keystrokes like <kbd>Ctrl<\/kbd>+<kbd>0<\/kbd> and <kbd>Ctrl<\/kbd>+<kbd>Y<\/kbd> as shortcuts because that&#8217;s how one types <code>\u2227<\/code> and <code>\u2191<\/code>, and so on, using the Dyalog IME (Input Method Editor). This is not an issue for me because I don&#8217;t use the IME. I made my own keyboard layout for Microsoft Windows and it uses <kbd>AltGr<\/kbd> (right-side <kbd>Alt<\/kbd>) to input APL glyphs. For more on this, see <a href=\"https:\/\/www.dyalog.com\/blog\/2025\/12\/taking-back-ctrl-keyboard-shortcuts-in-the-dyalog-ides\/\" target=\"_blank\" rel=\"noopener\">Rich Park&#8217;s blog post on Taking Back Ctrl<\/a>.<\/p><\/blockquote>\n<\/aside>\n<p><strong>Options<\/strong>&gt;<strong>Configure\u2026<\/strong>&gt;<strong>Keyboard Shortcuts<\/strong> allows us to assign custom shortcuts for the \u201ckeys\u201d, up to number <code>48<\/code>, to something more comfortable. That\u2019s what I do with <code>13<\/code>, <code>14<\/code>, and <code>15<\/code>; reassigning them to <kbd>Ctrl<\/kbd>+<kbd>0<\/kbd>, <kbd>Ctrl<\/kbd>+<kbd>]<\/kbd>, and <kbd>Ctrl<\/kbd>+<kbd>}<\/kbd> for the three \u201cwrap\u201d keys (parenthesise\/bracket\/brace from here to the left), <kbd>Alt<\/kbd>+<kbd>Enter<\/kbd> to execute the current line and recall it for further tweaks (good for teaching), and <kbd>Ctrl<\/kbd>+<kbd>Backspace<\/kbd> and <kbd>Ctrl<\/kbd>+<kbd>Delete<\/kbd> to delete a word left or right (these are virtually a standard, but Dyalog\u2019s IDE doesn\u2019t have them as available commands).<\/p>\n<p>Why am I assigning F-keys <code>45<\/code> and <code>46<\/code> to <code>&lt;BK&gt;<\/code> and <code>&lt;FD&gt;<\/code> when these actions can already be given keyboard shortcuts? Because they serve double (actually, triple!) duty: They both navigate the Session input history (and skip backwards\/forwards in the Tracer) and Undo\/Redo edits. In my head, those are completely different concepts, and everywhere else I use <kbd>Ctrl<\/kbd>+<kbd>Z<\/kbd> and <kbd>Ctrl<\/kbd>+<kbd>Y<\/kbd> for Undo and Redo, so I\u2019d like to use them as such in Dyalog too \u2014 while simultaneously keeping the default keystrokes <kbd>Ctrl<\/kbd>+<kbd>Shift<\/kbd>+<kbd>Backspace<\/kbd> and <kbd>Ctrl<\/kbd>+<kbd>Shift<\/kbd>+<kbd>Enter<\/kbd> for navigating Session history and lines in the Tracer. By way of an unused F-key, I can have two keystrokes for the same shortcut!<\/p>\n<div id=\"attachment_9567\" style=\"width: 1254px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/06\/shortcuts.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-9567\" class=\"size-full wp-image-9567\" src=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/06\/shortcuts.png\" alt=\"Screenshot of Ad\u00e1m's Preferences window, showing many of the shortcuts involving the Ctrl key\" width=\"1244\" height=\"1056\" srcset=\"https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/06\/shortcuts.png 1244w, https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/06\/shortcuts-300x255.png 300w, https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/06\/shortcuts-768x652.png 768w, https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/06\/shortcuts-1024x869.png 1024w, https:\/\/www.dyalog.com\/blog\/wp-content\/uploads\/2026\/06\/shortcuts-353x300.png 353w\" sizes=\"auto, (max-width: 1244px) 100vw, 1244px\" \/><\/a><p id=\"caption-attachment-9567\" class=\"wp-caption-text\">My Preferences window, showing many of my shortcuts that use the <kbd>Ctrl<\/kbd> key.<\/p><\/div>\n<h2 id=\"to-be-continued\">To Be Continued\u2026<\/h2>\n<p>So far in this post, I have tuned the font, put zoom controls within reach, and reprogrammed a batch of keys. In the next post of this series, I&#8217;ll enhance the Windows IDE title bar and status bar. In the meantime, the easiest way to install everything is to paste all the function definitions from this series into a clear workspace and enter (with <a href=\"https:\/\/www.dyalog.com\/blog\/2026\/06\/making-the-ide-my-own-part-1\/#the-startupsession-folder\" target=\"_blank\" rel=\"noopener\">the directory that\u2019s appropriate for you<\/a>):<\/p>\n<pre><code>]LINK.Export # C:\\Users\\adam\\Documents\\Dyalog APL-64 20.0 Unicode Files\\StartupSession\\seext<\/code><\/pre>\n<p>If any of this is useful to you, take it. If it doesn&#8217;t quite do what you want, adapt it. If you have an idea for additional Session extensions, let me know!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In my previous post, I laid the groundwork for extending the development environment by running a collection of small functions at startup time. If you&#8217;ve not read that post yet, I recommend doing so before you continue! So far, my &hellip; <a href=\"https:\/\/www.dyalog.com\/blog\/2026\/09\/making-the-ide-my-own-part-2-mostly-windows\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":25,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[],"class_list":["post-9508","post","type-post","status-publish","format-standard","hentry","category-tips-tricks"],"_links":{"self":[{"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/posts\/9508","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/comments?post=9508"}],"version-history":[{"count":91,"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/posts\/9508\/revisions"}],"predecessor-version":[{"id":9840,"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/posts\/9508\/revisions\/9840"}],"wp:attachment":[{"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/media?parent=9508"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/categories?post=9508"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dyalog.com\/blog\/wp-json\/wp\/v2\/tags?post=9508"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}