<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Professor Steven J. Murdoch</title><link href="https://murdoch.is/" rel="alternate"></link><link href="https://murdoch.is/blog/feeds/all.atom.xml" rel="self"></link><id>https://murdoch.is/</id><updated>2017-06-22T09:41:55+01:00</updated><entry><title>What’s new in EMVLab</title><link href="https://murdoch.is/blog/2017/06/updates-to-emvlab.html" rel="alternate"></link><published>2017-06-22T09:41:55+01:00</published><updated>2017-06-22T09:41:55+01:00</updated><author><name>Steven J. Murdoch</name></author><id>tag:murdoch.is,2017-06-22:/blog/2017/06/updates-to-emvlab.html</id><summary type="html">&lt;p&gt;I set up &lt;a href="http://www.emvlab.org/"&gt;EMVLab&lt;/a&gt; back in 2009, along with my former colleague, Mike Bond. We set out to provide useful tools for people working in payment systems development and research, and based on feedback from users I think broadly speaking it&amp;#8217;s done its job. I&amp;#8217;ve kept it up and running, but there have been some features which are now showing their&amp;nbsp;age.&lt;/p&gt;
&lt;p&gt;In the past few months I&amp;#8217;ve moved the site to a dedicated virtual machine in &lt;span class="caps"&gt;UCL&lt;/span&gt; (resolving some reliability and performance problems), but this also gave me an opportunity to update some other aspects that I&amp;#8217;ve long been putting off. This post summarises these updates, as well as some of my future&amp;nbsp;plans.&lt;/p&gt;
&lt;h2&gt;&lt;span class="caps"&gt;HTTPS&lt;/span&gt;&amp;nbsp;availability&lt;/h2&gt;
&lt;p&gt;EMVLab is now available &lt;a href="https://www.emvlab.org/"&gt;over &lt;span class="caps"&gt;HTTPS&lt;/span&gt;&lt;/a&gt;, thanks to &lt;a href="https://letsencrypt.org"&gt;Let&amp;#8217;s Encrypt&lt;/a&gt;. At least for now I am not re-directing &lt;span class="caps"&gt;HTTP&lt;/span&gt; to &lt;span class="caps"&gt;HTTPS&lt;/span&gt; or using &lt;span class="caps"&gt;HTTPS&lt;/span&gt;-enforcing measures like &lt;a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security"&gt;&lt;span class="caps"&gt;HSTS&lt;/span&gt;&lt;/a&gt;. This is because one of the principles behind EMVLab was that it should require the bare minimum in terms of browser capability. Workstations in some payment systems companies are incredibly locked-down and so features like Javascript might not be available. I don&amp;#8217;t know of any specific instances, but I …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I set up &lt;a href="http://www.emvlab.org/"&gt;EMVLab&lt;/a&gt; back in 2009, along with my former colleague, Mike Bond. We set out to provide useful tools for people working in payment systems development and research, and based on feedback from users I think broadly speaking it&amp;#8217;s done its job. I&amp;#8217;ve kept it up and running, but there have been some features which are now showing their&amp;nbsp;age.&lt;/p&gt;
&lt;p&gt;In the past few months I&amp;#8217;ve moved the site to a dedicated virtual machine in &lt;span class="caps"&gt;UCL&lt;/span&gt; (resolving some reliability and performance problems), but this also gave me an opportunity to update some other aspects that I&amp;#8217;ve long been putting off. This post summarises these updates, as well as some of my future&amp;nbsp;plans.&lt;/p&gt;
&lt;h2&gt;&lt;span class="caps"&gt;HTTPS&lt;/span&gt;&amp;nbsp;availability&lt;/h2&gt;
&lt;p&gt;EMVLab is now available &lt;a href="https://www.emvlab.org/"&gt;over &lt;span class="caps"&gt;HTTPS&lt;/span&gt;&lt;/a&gt;, thanks to &lt;a href="https://letsencrypt.org"&gt;Let&amp;#8217;s Encrypt&lt;/a&gt;. At least for now I am not re-directing &lt;span class="caps"&gt;HTTP&lt;/span&gt; to &lt;span class="caps"&gt;HTTPS&lt;/span&gt; or using &lt;span class="caps"&gt;HTTPS&lt;/span&gt;-enforcing measures like &lt;a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security"&gt;&lt;span class="caps"&gt;HSTS&lt;/span&gt;&lt;/a&gt;. This is because one of the principles behind EMVLab was that it should require the bare minimum in terms of browser capability. Workstations in some payment systems companies are incredibly locked-down and so features like Javascript might not be available. I don&amp;#8217;t know of any specific instances, but I could imagine that &lt;span class="caps"&gt;HTTPS&lt;/span&gt; is blocked in some cases&amp;nbsp;too.&lt;/p&gt;
&lt;h2&gt;Basic handling of 3-byte&amp;nbsp;tags&lt;/h2&gt;
&lt;p&gt;Many data structures in &lt;span class="caps"&gt;EMV&lt;/span&gt; are represented in tag-length-value format (part of the &lt;a href="https://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One"&gt;&lt;span class="caps"&gt;ASN&lt;/span&gt;.1 standard&lt;/a&gt;) and one of the most popular tools in EMVLab is the &lt;span class="caps"&gt;TLV&lt;/span&gt; decoder. When I set up the website all tags were one or two bytes long, and this assumption was built into the decoder. Since then the contactless &lt;span class="caps"&gt;EMV&lt;/span&gt; standards have now come out, and these do include 3-byte tags and so users of the site were reporting that the these broke the&amp;nbsp;decoder.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve now generalised the &lt;span class="caps"&gt;TLV&lt;/span&gt; decoder to handle arbitrary length tags (as per the specification), so such tags will not break the decoder. However I still have not updated the tag list so it will only describe tags present in &lt;span class="caps"&gt;EMV&lt;/span&gt; 4.1. Other tags will be shown and properly decoded, but &lt;a href="http://emvlab.org/tlvutils/?data=6F1A840E315041592E5359532E4444463031A508880102DFDF010165"&gt;identified as unknown tags&lt;/a&gt;. I hope to later update the list of tags to include more recent &lt;span class="caps"&gt;EMV&lt;/span&gt; tags, including contactless&amp;nbsp;variants.&lt;/p&gt;
&lt;h2&gt;Basic handling of unknown&amp;nbsp;tags&lt;/h2&gt;
&lt;p&gt;Related to the above, the &lt;span class="caps"&gt;EMV&lt;/span&gt; tag database will now generate a description for unknown tags. Obviously there&amp;#8217;s not much that can be said about tags not in the database, but there is some structure in tag values as defined in the &lt;span class="caps"&gt;ASN&lt;/span&gt;.1 specification so I can tell whether the tag is constructed or primitive, and its class. For some tag ranges the &lt;span class="caps"&gt;EMV&lt;/span&gt; specification also states who can define new tags. These results &lt;a href="http://emvlab.org/emvtags/?number=bf01"&gt;are now shown&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Future&amp;nbsp;plans&lt;/h2&gt;
&lt;p&gt;As mentioned above, I do plan to update the tag database. I also hope to incorporate some other helpful feedback I&amp;#8217;ve received from users but have not yet had time to address. If you have particular requests please do get in touch either by &lt;a href="https://murdoch.is/#contact"&gt;email&lt;/a&gt; or the &lt;a href="http://emvlab.org/contact/"&gt;contact form&lt;/a&gt;.&lt;/p&gt;</content><category term="coding"></category></entry><entry><title>Fixing slow startup of mc on Mac OS X using dtruss</title><link href="https://murdoch.is/blog/2015/08/fixing-slow-start-mc-on-osx.html" rel="alternate"></link><published>2015-08-04T10:06:39+01:00</published><updated>2015-08-04T10:06:39+01:00</updated><author><name>Steven J. Murdoch</name></author><id>tag:murdoch.is,2015-08-04:/blog/2015/08/fixing-slow-start-mc-on-osx.html</id><summary type="html">&lt;p&gt;I sometimes use &lt;a href="https://www.midnight-commander.org"&gt;Midnight Commander (mc)&lt;/a&gt; as a file manager. It&amp;#8217;s widely available, is text based so works over &lt;span class="caps"&gt;SSH&lt;/span&gt;, it&amp;#8217;s quite capable, and it&amp;#8217;s very fast. However on Mac &lt;span class="caps"&gt;OS&lt;/span&gt; X something has changed (I&amp;#8217;m not sure exactly what) that results in mc 4.8.14 taking about 10 seconds to start. If you just want to fix this problem &lt;a href="https://murdoch.is/blog/2015/08/fixing-slow-start-mc-on-osx.html#tldr"&gt;skip to the end&lt;/a&gt;, or read on for how I found the&amp;nbsp;solution.&lt;/p&gt;
&lt;p&gt;A great tool for debugging all sorts of problems on Mac &lt;span class="caps"&gt;OS&lt;/span&gt; X is &lt;a href="https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/dtruss.1m.html"&gt;dtruss&lt;/a&gt;, which prints out details of the system calls a program makes. dtruss itself is just a script using the powerful &lt;a href="https://en.wikipedia.org/wiki/DTrace"&gt;DTrace&lt;/a&gt; framework, but if dtruss does what you need it&amp;#8217;s a lot easier to use than writing your own DTrace&amp;nbsp;script.&lt;/p&gt;
&lt;p&gt;Normally to debug &lt;em&gt;&lt;code&gt;program&lt;/code&gt;&lt;/em&gt; you would just run &lt;code&gt;dtruss&lt;/code&gt; &lt;em&gt;&lt;code&gt;program&lt;/code&gt;&lt;/em&gt; and look at the output. However using dtruss to debug interactive text-mode program problems is a bit tricky. The first problem is that dtruss, like all DTrace scripts, needs root privilege to run (and mc&amp;#8217;s problem goes away when run as root). The second problem is that the output of dtruss will be obscured …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I sometimes use &lt;a href="https://www.midnight-commander.org"&gt;Midnight Commander (mc)&lt;/a&gt; as a file manager. It&amp;#8217;s widely available, is text based so works over &lt;span class="caps"&gt;SSH&lt;/span&gt;, it&amp;#8217;s quite capable, and it&amp;#8217;s very fast. However on Mac &lt;span class="caps"&gt;OS&lt;/span&gt; X something has changed (I&amp;#8217;m not sure exactly what) that results in mc 4.8.14 taking about 10 seconds to start. If you just want to fix this problem &lt;a href="https://murdoch.is/blog/2015/08/fixing-slow-start-mc-on-osx.html#tldr"&gt;skip to the end&lt;/a&gt;, or read on for how I found the&amp;nbsp;solution.&lt;/p&gt;
&lt;p&gt;A great tool for debugging all sorts of problems on Mac &lt;span class="caps"&gt;OS&lt;/span&gt; X is &lt;a href="https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/dtruss.1m.html"&gt;dtruss&lt;/a&gt;, which prints out details of the system calls a program makes. dtruss itself is just a script using the powerful &lt;a href="https://en.wikipedia.org/wiki/DTrace"&gt;DTrace&lt;/a&gt; framework, but if dtruss does what you need it&amp;#8217;s a lot easier to use than writing your own DTrace&amp;nbsp;script.&lt;/p&gt;
&lt;p&gt;Normally to debug &lt;em&gt;&lt;code&gt;program&lt;/code&gt;&lt;/em&gt; you would just run &lt;code&gt;dtruss&lt;/code&gt; &lt;em&gt;&lt;code&gt;program&lt;/code&gt;&lt;/em&gt; and look at the output. However using dtruss to debug interactive text-mode program problems is a bit tricky. The first problem is that dtruss, like all DTrace scripts, needs root privilege to run (and mc&amp;#8217;s problem goes away when run as root). The second problem is that the output of dtruss will be obscured by the ncurses interface of mc. These could be solved by running dtruss in a different (root) terminal then attaching it to the mc process (running as a normal user), but attaching to a process requires knowing the &lt;span class="caps"&gt;PID&lt;/span&gt; and by the time dtruss is attached, mc would have finished starting&amp;nbsp;up.&lt;/p&gt;
&lt;p&gt;The trick is to attach dtruss to another program, get dtruss to follow child processes as they are started (the &lt;code&gt;-f&lt;/code&gt; flag), and have this other program wait until dtruss has attached before starting mc. A simple shell script that achieves the goal&amp;nbsp;is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/usr/local/bin/bash&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;PID&amp;quot;&lt;/span&gt; &lt;span class="nv"&gt;$$&lt;/span&gt;
&lt;span class="nb"&gt;read&lt;/span&gt;
mc
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;To attach dtruss, first run the shell script and note the &lt;span class="caps"&gt;PID&lt;/span&gt; of bash that it prints out. Then, in a different terminal running as root, attach dtruss to bash (i.e. &lt;code&gt;sudo dtruss -af -p&lt;/code&gt; &lt;em&gt;&lt;code&gt;PID&lt;/code&gt;&lt;/em&gt;). Finally, allow mc to start by pressing enter in the terminal that&amp;#8217;s running the shell script. In the terminal running dtruss you can then see the system calls of particular interest (before and after the long startup&amp;nbsp;delay).&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s a snippet of the output, where &lt;code&gt;...&lt;/code&gt; is where the delay&amp;nbsp;happens.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="err"&gt;18458/0xc8907:   1197089      400       5 select(0x6, 0x7FFF5E716660, 0x0, 0x0, 0x7FFF5E716650)      = 1 0&lt;/span&gt;
&lt;span class="err"&gt;18458/0xc8907:   1197092        3       1 read(0x3, &amp;quot;bash: PROMPT_COMMAND: line 1: syntax error near unexpected token `;&amp;#39;\r\nbash: PROMPT_COMMAND: line 1: `update_terminal_cwd; ; pwd&amp;gt;\0&amp;quot;, 0x80)        = 128 0&lt;/span&gt;
&lt;span class="err"&gt;18458/0xc8907:   1197094        3       1 select(0x6, 0x7FFF5E716660, 0x0, 0x0, 0x7FFF5E716650)      = 1 0&lt;/span&gt;
&lt;span class="err"&gt;18458/0xc8907:   1197095        2       0 read(0x3, &amp;quot;&amp;amp;6;kill -STOP $$&amp;#39;\r\n\0&amp;quot;, 0x80)         = 19 0&lt;/span&gt;
&lt;span class="err"&gt;18458/0xc8907:   1196289   605871  604986 fork()         = 18459 0&lt;/span&gt;
&lt;span class="err"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;18458/0xc8907:   1197142 10001050      37 select(0x6, 0x7FFF5E716660, 0x0, 0x0, 0x7FFF5E716650)      = 0 0&lt;/span&gt;
&lt;span class="err"&gt;18458/0xc8907:   1197196       53       1 sigaction(0x2, 0x7FFF5E7166D8, 0x0)        = 0 0&lt;/span&gt;
&lt;span class="err"&gt;18458/0xc8907:   1197247       18      14 write_nocancel(0x1, &amp;quot;\033[?1001s\033[?1002h\033[?1006hread_nocancel\0&amp;quot;, 0x18)      = 24 0&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The columns are &lt;span class="caps"&gt;PID&lt;/span&gt;/thread, relative time (µs), elapsed time (µs), &lt;span class="caps"&gt;CPU&lt;/span&gt; time (µs) and syscall. The time elapsed for the last select call is 10 seconds, which explains the startup delay. This select seems to be related to reading from a file descriptor that contains an error message involving &amp;#8220;bash&amp;#8221;, &amp;#8220;PROMPT_COMMAND&amp;#8221; and&amp;nbsp;&amp;#8220;update_terminal_cwd&amp;#8221;.&lt;/p&gt;
&lt;p&gt;While it&amp;#8217;s starting up, mc creates a subshell, and the error message seems to be related to that. Perhaps because of the error message, mc fails to detect that the subshell has properly started up and only continues when it falls-back by disabling subshell&amp;nbsp;support.&lt;/p&gt;
&lt;p&gt;Looking for the strings involved in the error message turns up a function defined in &lt;code&gt;/etc/bashrc&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Tell the terminal about the working directory at each prompt.&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$TERM_PROGRAM&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Apple_Terminal&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -z &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$INSIDE_EMACS&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
    update_terminal_cwd&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;# Identify the directory using a &amp;quot;file:&amp;quot; scheme URL,&lt;/span&gt;
        &lt;span class="c1"&gt;# including the host name to disambiguate local vs.&lt;/span&gt;
        &lt;span class="c1"&gt;# remote connections. Percent-escape spaces.&lt;/span&gt;
        &lt;span class="nb"&gt;local&lt;/span&gt; &lt;span class="nv"&gt;SEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; &amp;#39;&lt;/span&gt;
        &lt;span class="nb"&gt;local&lt;/span&gt; &lt;span class="nv"&gt;REPLACE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;%20&amp;#39;&lt;/span&gt;
        &lt;span class="nb"&gt;local&lt;/span&gt; &lt;span class="nv"&gt;PWD_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;file://&lt;/span&gt;&lt;span class="nv"&gt;$HOSTNAME&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PWD&lt;/span&gt;&lt;span class="p"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;$SEARCH&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$REPLACE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
        &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;\e]7;%s\a&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$PWD_URL&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="nv"&gt;PROMPT_COMMAND&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;update_terminal_cwd; &lt;/span&gt;&lt;span class="nv"&gt;$PROMPT_COMMAND&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Something is going wrong with &lt;code&gt;update_terminal_cwd()&lt;/code&gt; and the &lt;code&gt;if&lt;/code&gt; condition suggests that running inside Emacs is a problem so it looks likely that mc has the same problem. To prevent nested subshells, mc sets the the &lt;code&gt;MC_SID&lt;/code&gt; environment variable so this is a suitable check for disabling update_terminal_cwd inside the mc&amp;nbsp;subshell.&lt;/p&gt;
&lt;h3 id='tldr'&gt;;tldr&lt;/h3&gt;

&lt;p&gt;So the fix is to change the line in &lt;code&gt;/etc/bashrc&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$TERM_PROGRAM&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Apple_Terminal&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -z &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$INSIDE_EMACS&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;to&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$TERM_PROGRAM&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Apple_Terminal&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -z &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$INSIDE_EMACS&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -z &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$MC_SID&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;and now mc starts near&amp;nbsp;instantaneously.&lt;/p&gt;</content><category term="coding"></category></entry><entry><title>Lost frog</title><link href="https://murdoch.is/blog/2015/07/lost-frog.html" rel="alternate"></link><published>2015-07-28T14:15:03+01:00</published><updated>2015-07-28T14:15:03+01:00</updated><author><name>Steven J. Murdoch</name></author><id>tag:murdoch.is,2015-07-28:/blog/2015/07/lost-frog.html</id><content type="html">&lt;p&gt;This frog was trapped by my basement and I took this photo before taking it to a better home in the garden. Taken using a &lt;a href="https://fstoppers.com/product/fstoppers-flash-disc-portable-light-modifier"&gt;Fstoppers Flash Disc&lt;/a&gt; to soften the light; you can just see its outline in the&amp;nbsp;eye.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://500px.com/photo/116312923/lost-frog-by-steven-murdoch"&gt;&lt;img class="pure-img" src="https://murdoch.is/blog/photos/lost-frog.jpg"&gt;&lt;/a&gt;  &lt;/p&gt;</content><category term="photography"></category></entry></feed>