<?xml-stylesheet href="/rss.xsl" type="text/xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Parallelpoints</title><link>https://parallelpoints.com/</link><description>Recent content on Parallelpoints</description><generator>Hugo -- gohugo.io</generator><language>en-GB</language><managingEditor>martin@parallelpoints.com (Martin Thompson)</managingEditor><webMaster>martin@parallelpoints.com (Martin Thompson)</webMaster><lastBuildDate>Fri, 09 Oct 2026 15:42:38 +0100</lastBuildDate><atom:link href="https://parallelpoints.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Newly Static</title><link>https://parallelpoints.com/posts/newly-static/</link><pubDate>Fri, 09 Oct 2026 15:42:38 +0100</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/posts/newly-static/</guid><description>Parallelpoints https://parallelpoints.com/posts/newly-static/ -&lt;h1 id="newly-static"&gt;Newly Static&lt;/h1&gt;
&lt;p&gt;I have been wanting to get away from wordpress for a long time - I don&amp;rsquo;t need it and the maintenance
hassle is too large. A year or so ago, I used &lt;a href="http://gohugo.io/"&gt;hugo&lt;/a&gt; to port the existing pages to
a statically served version. It worked OK, but I was not motivated to write much because deploying updates
was something I had not got around to automating.&lt;/p&gt;
&lt;p&gt;Last weekend, I engaged Codex in the task of completely porting my wife&amp;rsquo;s business&amp;rsquo;s site from Wordpress to static,
but using publii as I did not want to inflict markdown editing on her. That went extremely well, so porting my previous
hugo-ised site into a more modern and cleaner form was dead straightforward. And I have a deploy script too.
This is all stuff I could have learned, but have no reason (or motivation) to.
I mean who wants to learn the ins and outs of wordpress exports just to get away from wordpress!?
And I am no web designer&amp;hellip; and I&amp;rsquo;m sure a real webdesigner shudders at my
&amp;lsquo;make it more modern&amp;rsquo; prompt&amp;rsquo;s results. But it gets the job done, the result is in no way horrific, and I can
spend my time hacking on more interesting things&amp;hellip;&lt;/p&gt;
- https://parallelpoints.com/posts/newly-static/ -</description></item><item><title>QNX 45 years</title><link>https://parallelpoints.com/posts/qnx-45-years/</link><pubDate>Sat, 11 Oct 2025 20:06:35 +0100</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/posts/qnx-45-years/</guid><description>Parallelpoints https://parallelpoints.com/posts/qnx-45-years/ -&lt;h1 id="qnx-45-years-on"&gt;QNX 45 years on&lt;/h1&gt;
&lt;p&gt;A really interesting &lt;a href="https://www.abortretry.fail/p/the-qnx-operating-system?hide_intro_popup=true"&gt;history of QNX&lt;/a&gt; - quite a long read, but I enjoyed the retrospective. Interesting to see that the Canadian government was funding the development of an educational computer starting in 1981 (which shipped in 1984 - based around the 80186, Intel&amp;rsquo;s family of processors that went into the IBM/PC and onwards). In the UK we had the BBC microcomputer (already shipping in 1981) in schools, using a much less powerful 6502 processsor.&lt;/p&gt;
&lt;p&gt;QNX powered the Canadian machine, and since then has created a well-founded reputation for reliability. It is architected around a microkernel, which means that even device-drivers are not in the kernel, so if the network driver crashes, it does not take down the entire machine and can be safely restarted. This is ideal for critical system, when such a rapid recovery is necessary. I have always had a soft spot for QNX, but have never had the opportunity to work directly with it. Still, since it is strong in automotive, I am sure it is only a matter of time!&lt;/p&gt;
- https://parallelpoints.com/posts/qnx-45-years/ -</description></item><item><title>We Take Your Security Seriously</title><link>https://parallelpoints.com/posts/we-take-your-security-seriously/</link><pubDate>Fri, 03 Oct 2025 19:21:24 +0100</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/posts/we-take-your-security-seriously/</guid><description>Parallelpoints https://parallelpoints.com/posts/we-take-your-security-seriously/ -&lt;p&gt;&amp;ldquo;We take your security seriously&amp;rdquo; - how many times has this been said in the aftermath
of a breach.
And how many times has it seemed a little&amp;hellip;
hollow?&lt;/p&gt;
&lt;p&gt;Here are a couple of examples of really taking security seriously.&lt;/p&gt;
&lt;h2 id="nvidia"&gt;Nvidia&lt;/h2&gt;
&lt;p&gt;Nvidia presention at this year&amp;rsquo;s Black Hat &lt;a href="https://media.defcon.org/DEF%20CON%2033/DEF%20CON%2033%20presentations/Adam%20Zabrocki%20Marko%20Mitic%20-%20How%20to%20secure%20unique%20ecosystem%20shipping%201%20billion%2B%20cores.pdf"&gt;&amp;ldquo;How to Secure Unique Ecosystem Shipping 1 Billion+ Cores?&amp;rdquo;&lt;/a&gt; was an interesting review of where they are and where they are going.
It is not widely understood that a &amp;ldquo;GPU&amp;rdquo; contains a lot of other electronics, in addition to the main processing cores which everyone is excited about.
In fact, there can be between 10 and 50 additional microprocessors within such a device.
Currently they are built around an Nvidia custom architecture.
In future, they will be using industry-standard RISC-V.&lt;/p&gt;
&lt;p&gt;In order to defend against software vulnerabilities, they have combined their silicon design teams and their offensive security research teams.
This led to extensions to the RISC-V architecture, created in collaboration with others, including Google.
One of these extensions, pointer masking, transforms the effective address of pointers, making it much harder for attackers to exploit.
A second, adds control-flow integrity (CFI) extensions.
These allow the compiler toolchain to indicate to the hardware where branches should be coming from, and going to.
Each indirect branch destination is a landing-pad (&lt;code&gt;LPAD&lt;/code&gt;) instruction which contains a label.
This label is set just before a legitimate branch happens.
If an attacker modifies the flow of the code, either the label will not match, or the destination of their branch will not be an &lt;code&gt;LPAD&lt;/code&gt; - either of which will raise an exception.
This defends nicely against &amp;ldquo;code-reuse attacks&amp;rdquo; (like &lt;a href="https://en.wikipedia.org/wiki/Return-oriented_programming"&gt;return-oriented programming&lt;/a&gt; etc.)&lt;/p&gt;
&lt;p&gt;This is a lot of work, and the combination of designers and attackers across companies has resulted in some very useful features which are available to the RISC-V community.&lt;/p&gt;
&lt;h2 id="apple"&gt;Apple&lt;/h2&gt;
&lt;p&gt;Meanwhile, Apple has announced &lt;a href="https://security.apple.com/blog/memory-integrity-enforcement/"&gt;&amp;ldquo;Memory Integrity Enforcement&amp;rdquo;&lt;/a&gt;.
Not content to rest on their laurels, Apple has spent the last half-decade or so also putting their threat-hunters and silicon design teams together.
They have analysed a lot of data about how attackers are able to exploit Apple operating systems (which, let&amp;rsquo;s be fair, is not easy anyway), and designed a set of memory-safety mitigations within the silicon which will make attackers&amp;rsquo; lives much harder still.
Pointer Authentication was already part of Apple&amp;rsquo;s devices (and may come to RISC-V in future?), and now the Enhanced Memory Tagging Extension allows software developers to enable further defences.
When memory is allocated, it is tagged, and the tags are cryptographically bound to the memory areas.
Unless the process accessing the memory has the same cryptographic secret to perform the access, it will be denied.
This tagging hardware is carefully designed to avoid timing leaks (for example through speculative execution).&lt;/p&gt;
&lt;p&gt;Again, a huge investment in &amp;ldquo;non-user-visible&amp;rdquo; features which provide security behind the scenes.&lt;/p&gt;
&lt;h2 id="this-is-what-we-take-your-security-seriously-looks-like"&gt;This is what &amp;ldquo;We take your security seriously&amp;rdquo; looks like&lt;/h2&gt;
&lt;p&gt;A continual investment of many people across diverse teams - in particular bringing the offensive researchers into contact with the upfront design, so that priorities can be organised effectively, and trade-offs (of which there we no doubt many) can be discussed between all the right people.&lt;/p&gt;
- https://parallelpoints.com/posts/we-take-your-security-seriously/ -</description></item><item><title>Fundamental Cybersecurity Controls</title><link>https://parallelpoints.com/posts/fc/</link><pubDate>Sat, 06 Sep 2025 15:36:32 +0100</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/posts/fc/</guid><description>Parallelpoints https://parallelpoints.com/posts/fc/ -&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;For designers of Internet of Things (IoT) devices, cybersecurity is a necessary provision. This series of posts will review what I regard as the basic fundamental items which should be included in the design of an IoT device.&lt;/p&gt;
&lt;p&gt;Cybersecurity is not (usually) the focus of the design, which is of course to provide some valuable function to the customers. Customers of IoT devices also do not wish to think about cybersecurity &amp;ndash; they will trust the company to have done a sufficiently good job. This may or may not be a warranted trust!&lt;/p&gt;
&lt;p&gt;There is increasing regulation and legislation which covers this topic, which we will be able to bring to the discussion.&lt;/p&gt;
&lt;p&gt;We will consider a relatively straightforward &amp;ldquo;mock&amp;rdquo; IoT device, which communicates with some back-end server. The data in this communication includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Confidential data about the customer&lt;/li&gt;
&lt;li&gt;Data to and from the IoT device which enables its function. This data must not be able to be manipulated by an adversary.&lt;/li&gt;
&lt;li&gt;Confidential data about the device and the company that makes it&lt;/li&gt;
&lt;li&gt;Data, important to the company, which transfers between the server and the device. Again we wish to defend this from adversarial manipulation. This includes software updates to the device.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The list of controls we will put in place covers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Locking of debug ports&lt;/li&gt;
&lt;li&gt;Authenticated access to development interfaces&lt;/li&gt;
&lt;li&gt;Authentication and Encryption of data between the device and the server&lt;/li&gt;
&lt;li&gt;Authentication of software updates&lt;/li&gt;
&lt;li&gt;Appropriate use of standard cryptographic protocols and primitives&lt;/li&gt;
&lt;/ul&gt;
- https://parallelpoints.com/posts/fc/ -</description></item><item><title>Restarting</title><link>https://parallelpoints.com/posts/restarting/</link><pubDate>Tue, 01 Jul 2025 13:42:06 +0200</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/posts/restarting/</guid><description>Parallelpoints https://parallelpoints.com/posts/restarting/ -&lt;h1 id="starting-somewhat-afresh"&gt;Starting (somewhat) afresh&lt;/h1&gt;
&lt;p&gt;It has been a couple of years since I posted anything, and the world has moved on since I first built this site. The revamp has 2 goals - to be less hassle for me to add to, and to be less trouble to administer. Both are met by converting the side to a set of static pages. I have no need of dynamic features, and Wordpress maintenance continues to be tedious! The previous content is still there in the same place it used to be, and can be browsed by &lt;a href="https://parallelpoints.com/tags_old/"&gt;tags&lt;/a&gt;.&lt;/p&gt;
- https://parallelpoints.com/posts/restarting/ -</description></item><item><title>Summary of AES-CMAC</title><link>https://parallelpoints.com/summary-of-aes-cmac/</link><pubDate>Thu, 14 Oct 2021 18:56:56 +0000</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/summary-of-aes-cmac/</guid><description>Parallelpoints https://parallelpoints.com/summary-of-aes-cmac/ -&lt;p&gt;CMAC creates a message authentication code from an encryption primitive. The most common is the AES-CMAC, which is described fully in &lt;a href="https://datatracker.ietf.org/doc/html/rfc4493"&gt;RFC 4493&lt;/a&gt;. It involves operating the AES operation in cipher-block chaining mode, where each 16-byte chunk of the original plaintext is fed to the AES encryption operation in turn and combined with the output of the previous block&amp;rsquo;s encryption. There is one additional wrinkle - the final block (or partial block) of plaintext is XORed with a &amp;ldquo;subkey&amp;rdquo; before passing through the encryption stage. There are two subkeys derived from the AES key (through another AES encryption and some bitwise operations). One of these two subkeys is selected for use in the final AES operation depending on whether the final block is complete or needed to be padded.&lt;/p&gt;
&lt;p&gt;However, an attacker does not need to care about all the details of AES, as the very first operation performed is to XOR the plaintext with the key and feed it through a non-linear lookup table.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://parallelpoints.com/wp-content/uploads/2021/10/Top-Of-AES.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;The very first step of AES encryption&lt;/p&gt;
&lt;p&gt;Using power analysis it is possible, by observing the power consumed by the output of this operation, to extract the key. Doing this requires the attacker to control the first block that is passed in so that they can correlate changes of power with changes of plaintext.&lt;/p&gt;
- https://parallelpoints.com/summary-of-aes-cmac/ -</description></item><item><title>Power attack on AES-CMAC - the setup</title><link>https://parallelpoints.com/power-attack-on-aes-cmac-the-setup/</link><pubDate>Mon, 27 Sep 2021 20:36:38 +0000</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/power-attack-on-aes-cmac-the-setup/</guid><description>Parallelpoints https://parallelpoints.com/power-attack-on-aes-cmac-the-setup/ -&lt;p&gt;In normal operation, the mechanic uses a piece of equipment which is colloquially known simply &amp;lsquo;a tester&amp;rsquo; which talks to the ECU using the ISO-14229 UDS services. Often this is over a CAN-bus but can also be over Flexray, LIN, Ethernet etc. When the mechanic needs to access some secured aspect of the ECU they engage in a challenge and response protocol with the ECU. In this case, the tester contacts some infrastructure (run by the vehicle manufacturer or the ECU supplier) to get the response. The mechanic will have previously authenticated themselves to this infrastructure in order to gain authorisation.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://parallelpoints.com/wp-content/uploads/2021/09/Attacker-UDS-1024x533.png" alt="Attacking the system"&gt;&lt;/p&gt;
&lt;p&gt;In order to attack such a system the attacker replaces the tester with their own device which requests challenges and sends random responses. By monitoring the power consumption of the microcontroller (either directly measuring the current consumption, or indirectly with a field-probe) the attacker can determine when the CMAC operation is taking place. Furthermore, by correlating this power consumption profile with the data over which the CMAC is operating, they can extract the keys used in the AES operations. Once these keys become known, they can create the correct responses independently and then unlock features or services on the ECU.&lt;/p&gt;
- https://parallelpoints.com/power-attack-on-aes-cmac-the-setup/ -</description></item><item><title>Power side-channel attack on AES-CMAC</title><link>https://parallelpoints.com/power-side-channel-attack-on-aes-cmac/</link><pubDate>Sun, 26 Sep 2021 18:15:57 +0000</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/power-side-channel-attack-on-aes-cmac/</guid><description>Parallelpoints https://parallelpoints.com/power-side-channel-attack-on-aes-cmac/ -&lt;p&gt;&lt;img src="https://forum.newae.com/uploads/default/original/1X/6a5bb793c9438d3d23732ad5b5dfd79e141adfcb.png" alt="Pretty image of some power traces"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://datatracker.ietf.org/doc/html/rfc4493"&gt;AES-CMAC&lt;/a&gt; is a popular message authentication code in the automotive world. Although I have been working in automotive electronics for 25 years, I don&amp;rsquo;t know the actual reason why. But my surmise is that this stems from the fact that the first cryptographic accelerators used in automotive met the &lt;a href="https://www.autosar.org/fileadmin/user_upload/standards/foundation/19-11/AUTOSAR_TR_SecureHardwareExtensions.pdf"&gt;&amp;ldquo;Secure Hardware Extensions&amp;rdquo; (SHE) specification&lt;/a&gt;, which only provided an AES cryptography accelerator (and the secure storage of some keys). SHE provides no hashing functionality, which means that &lt;a href="https://datatracker.ietf.org/doc/html/rfc2104"&gt;HMAC&lt;/a&gt; is not available. It is also implemented as is a state-machine, not a microcontroller plus software, so is completely inextensible.&lt;/p&gt;
&lt;p&gt;Modern automotive processors provide more capability in the form of a hardware security module, which is a microcontroller with user-defined code alongside it&amp;rsquo;s secure storage and cryptography accelerators. However, history dictates that CMAC is still widely used.&lt;/p&gt;
&lt;p&gt;For example, to provide a more secure challenge-response protocol for unlocking the diagnostics features, you could do worse than have the ECU present a challenge in the form of large random number (say 256-bits) to the mechanic&amp;rsquo;s tester box, and have that tester box reply with the AES-CMAC of that challenge. If that CMAC is correct, the ECU can authorise the activity requested.&lt;/p&gt;
&lt;p&gt;Being a shared-key system, this now creates the problem that the CMAC key is in the attackers hands (within the mechanic&amp;rsquo;s tester) which will allow them to extract the key from the tester. To mitigate this, we can store the key in an IT-grade HSM, within our own infrastucture. Then we require the mechanic to log in and interface the tester with our infrastructure. The challenge is then passed (over the internet, mediated by the tester) to our HSM and it performs the CMAC operation and returns the answer the tester which then sends it onwards to the ECU. The ECU contains the same key and can still use it to check the CMAC is correct.&lt;/p&gt;
&lt;p&gt;The ECU will defend this key inside its own HSM, so extracting it (even with powerful access such as an unlocked debug port) is not straightforward.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m going to attempt to extract the key by measuring the power consumption of the microcontroller while it performs the CMAC calculation in order to check the value received.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://parallelpoints.com/wp-content/uploads/2021/09/power-spikes.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Some power spikes&amp;hellip; such as we hope to take advantage of&lt;/p&gt;
&lt;p&gt;More to follow&amp;hellip;&lt;/p&gt;
- https://parallelpoints.com/power-side-channel-attack-on-aes-cmac/ -</description></item><item><title>RIP Sir Clive Sinclair</title><link>https://parallelpoints.com/rip-sir-clive-sinclair/</link><pubDate>Fri, 17 Sep 2021 20:15:39 +0000</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/rip-sir-clive-sinclair/</guid><description>Parallelpoints https://parallelpoints.com/rip-sir-clive-sinclair/ -&lt;p&gt;A hero of the early home computing era, Sir Clive Sinclair, died on 15th September 2021.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/d/d6/SinclairFTV1hand.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;The Sinclair flat screen TV&lt;/p&gt;
&lt;p&gt;Sir Clive was a diverse inventor, way ahead of his time. The portable TV, at the time scoffed at - &amp;ldquo;you can&amp;rsquo;t watch TV on the move&amp;rdquo; - now a commonplace activity. His battery-powered trike was really just waiting for better batteries.&lt;/p&gt;
&lt;p&gt;But, for me, the computers were the pinnacle. As an 11 year old, getting a ZX Spectrum at Christmas brought a whole new world to my house.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/33/ZXSpectrum48k.jpg/1920px-ZXSpectrum48k.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;The ZX Spectrum expanded my interest from electronics (which had already begun with a crystal radio) to software, as well as bringing the world of &lt;a href="https://en.wikipedia.org/wiki/Elite_%28video_game%29"&gt;Elite&lt;/a&gt; to me!&lt;/p&gt;
&lt;p&gt;Incredibly clever engineering decisions were embodied in the ZX Spectrum, made to keep the cost rock-bottom. For example, providing colour high-res graphics, with only 16KB of RAM, through the ingenious compromise of only providing low-resolution colour. The general opinion was that a keyboard made of rubber was a an optimisation too far but, for me, this was made workable by including the entire BASIC language as shortcuts on the keyboard, which reduced the effort to enter code. It had the additional benefit that the interpreter did not have to have a tokenizer as the BASIC tokens were being directly entered!&lt;/p&gt;
&lt;p&gt;These kinds of optimisations have coloured (if you&amp;rsquo;ll pardon the pun) my engineering life. My career has involved stepping from one project to another which required some kind of heavy optimisation, just to make them work, compromising the fidelity of some less-important aspect of the system to enable it to work in less space, less power or for less money.&lt;/p&gt;
&lt;p&gt;I wouldn&amp;rsquo;t be who I am today without Sir Clive Sinclair.&lt;/p&gt;
- https://parallelpoints.com/rip-sir-clive-sinclair/ -</description></item><item><title>ISO/SAE 21434 is ready</title><link>https://parallelpoints.com/iso-sae-21434-is-ready/</link><pubDate>Mon, 06 Sep 2021 21:27:17 +0000</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/iso-sae-21434-is-ready/</guid><description>Parallelpoints https://parallelpoints.com/iso-sae-21434-is-ready/ -&lt;p&gt;This standard for &lt;a href="https://www.iso.org/standard/70918.html"&gt;road-vehicles cybersecurity engineering&lt;/a&gt; finally sees the light of day. It was developed under both the International Standards Organisation and the Society of Automotive Engineers, after a lot of hard work from many contributors across the industry. The standard gives a framework within which designers of vehicles, and the electronic control units within them, can provide an appropriate level of cybersecurity. Processes need to be defined and followed, threat analysis performed in order to assess the risks present in a product, according to impact and likelihood, and appropriate decisions taken about how to respond to those risks. In some cases they will be accepted, in others a mitigation will be appropriate. Alternatively, the risk may be shared (with some higher-level system supplier perhaps) or transferred (to an insurance company maybe) or the feature that introduces the risk be removed completely to remove the risk.
What may surprise some is that it does not provide a list of cybersecurity controls which are expected to be implemented. Assuming the surrounding processes in place (cybersecurity management, both in general and project-specific, incident response etc.) one could technically create a vehicle with no cybersecurity controls and still claim compliance with ISO21434 if you have performed all the appropriate steps to assess the risks and have decided they are acceptable.&lt;/p&gt;
- https://parallelpoints.com/iso-sae-21434-is-ready/ -</description></item><item><title>中文文本测试</title><link>https://parallelpoints.com/posts/testpieces/chinese/</link><pubDate>Thu, 14 Nov 2019 11:25:05 -0400</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/posts/testpieces/chinese/</guid><description>Parallelpoints https://parallelpoints.com/posts/testpieces/chinese/ -&lt;p&gt;　　这样看来， 邓拓在不经意间这样说过，越是没有本领的就越加自命不凡。这不禁令我深思。 我们不得不面对一个非常尴尬的事实，那就是， 一般来说， 所谓中午吃什么，关键是中午吃什么需要如何写。 伏尔泰说过一句富有哲理的话，坚持意志伟大的事业需要始终不渝的精神。这启发了我， 那么， 对我个人而言，中午吃什么不仅仅是一个重大的事件，还可能会改变我的人生。 这样看来， 我们一般认为，抓住了问题的关键，其他一切则会迎刃而解。 一般来讲，我们都必须务必慎重的考虑考虑。 黑格尔说过一句富有哲理的话，只有永远躺在泥坑里的人，才不会再掉进坑里。这启发了我， 我们不得不面对一个非常尴尬的事实，那就是， 既然如何， 在这种困难的抉择下，本人思来想去，寝食难安。&lt;/p&gt;
&lt;p&gt;　　我认为， 而这些并不是完全重要，更加重要的问题是， 了解清楚中午吃什么到底是一种怎么样的存在，是解决一切问题的关键。 中午吃什么因何而发生？ 而这些并不是完全重要，更加重要的问题是， 卢梭在不经意间这样说过，浪费时间是一桩大罪过。这启发了我， 既然如此， 从这个角度来看， 歌德在不经意间这样说过，意志坚强的人能把世界放在手中像泥块一样任意揉捏。我希望诸位也能好好地体会这句话。 我认为， 我们一般认为，抓住了问题的关键，其他一切则会迎刃而解。 本人也是经过了深思熟虑，在每个日日夜夜思考这个问题。 这种事实对本人来说意义重大，相信对这个世界也是有一定意义的。 莎士比亚在不经意间这样说过，人的一生是短的，但如果卑劣地过这一生，就太长了。带着这句话，我们还要更加慎重的审视这个问题： 带着这些问题，我们来审视一下中午吃什么。 中午吃什么因何而发生？ 我们一般认为，抓住了问题的关键，其他一切则会迎刃而解。 布尔沃曾经说过，要掌握书，莫被书掌握；要为生而读，莫为读而生。这似乎解答了我的疑惑。 而这些并不是完全重要，更加重要的问题是， 生活中，若中午吃什么出现了，我们就不得不考虑它出现了的事实。 本人也是经过了深思熟虑，在每个日日夜夜思考这个问题。 带着这些问题，我们来审视一下中午吃什么。 生活中，若中午吃什么出现了，我们就不得不考虑它出现了的事实。 我认为， 一般来说， 中午吃什么，到底应该如何实现。 我们不得不面对一个非常尴尬的事实，那就是， 所谓中午吃什么，关键是中午吃什么需要如何写。 我们一般认为，抓住了问题的关键，其他一切则会迎刃而解。 现在，解决中午吃什么的问题，是非常非常重要的。&lt;/p&gt;
&lt;p&gt;　　我们一般认为，抓住了问题的关键，其他一切则会迎刃而解。 可是，即使是这样，中午吃什么的出现仍然代表了一定的意义。 带着这些问题，我们来审视一下中午吃什么。 本人也是经过了深思熟虑，在每个日日夜夜思考这个问题。 我认为， 问题的关键究竟为何？ 非洲曾经提到过，最灵繁的人也看不见自己的背脊。这启发了我， 易卜生说过一句富有哲理的话，伟大的事业，需要决心，能力，组织和责任感。这似乎解答了我的疑惑。 一般来说， 在这种困难的抉择下，本人思来想去，寝食难安。 中午吃什么，到底应该如何实现。 经过上述讨论， 我们一般认为，抓住了问题的关键，其他一切则会迎刃而解。 中午吃什么因何而发生？
带着这些问题，我们来审视一下中午吃什么。 对我个人而言，中午吃什么不仅仅是一个重大的事件，还可能会改变我的人生。&lt;/p&gt;
- https://parallelpoints.com/posts/testpieces/chinese/ -</description></item><item><title>Typography - Test for features</title><link>https://parallelpoints.com/posts/testpieces/post-5/</link><pubDate>Sun, 18 Mar 2018 12:13:38 +0530</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/posts/testpieces/post-5/</guid><description>Parallelpoints https://parallelpoints.com/posts/testpieces/post-5/ -&lt;p&gt;Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits.&lt;/p&gt;
&lt;h1 id="heading-1"&gt;Heading 1&lt;/h1&gt;
&lt;p&gt;Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits.&lt;/p&gt;
&lt;h2 id="heading-2"&gt;Heading 2&lt;/h2&gt;
&lt;p&gt;Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits.&lt;/p&gt;
&lt;h3 id="heading-3"&gt;Heading 3&lt;/h3&gt;
&lt;p&gt;Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits.&lt;/p&gt;
&lt;h4 id="heading-4"&gt;Heading 4&lt;/h4&gt;
&lt;p&gt;Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits.&lt;/p&gt;
&lt;h5 id="heading-5"&gt;Heading 5&lt;/h5&gt;
&lt;p&gt;Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits.&lt;/p&gt;
&lt;h6 id="heading-6"&gt;Heading 6&lt;/h6&gt;
&lt;p&gt;Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits.&lt;/p&gt;
&lt;h2 id="typography"&gt;Typography&lt;/h2&gt;
&lt;p&gt;Lid est laborum et dolorum fuga, This is &lt;a href="http://example.com/" title="Title"&gt;an example&lt;/a&gt; inline link. Et harum quidem rerum facilis, &lt;strong&gt;This is bold&lt;/strong&gt; and &lt;em&gt;emphasis&lt;/em&gt; cumque nihilse impedit quo minus id quod amets untra dolor amet sad. While this is &lt;code&gt;code block()&lt;/code&gt; and following is a &lt;code&gt;pre&lt;/code&gt; tag&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;print 'this is pre tag'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Following is the syntax highlighted code block&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getCookie&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;r&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;interface&lt;/span&gt;{}) (&lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;http&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Cookie&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;error&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;rd&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;r&lt;/span&gt;.(&lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;http&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Request&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;cookie&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;err&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;rd&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Cookie&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;err&lt;/span&gt; &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;nil&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;nil&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;err&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;cookie&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;setCookie&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;cookie&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;http&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Cookie&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;w&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;interface&lt;/span&gt;{}) &lt;span style="color:#66d9ef"&gt;error&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// Get write interface registered using `Acquire` method in handlers.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;wr&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;w&lt;/span&gt;.(&lt;span style="color:#a6e22e"&gt;http&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;ResponseWriter&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;http&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;SetCookie&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;wr&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;cookie&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is blockquote, Will make it &lt;em&gt;better now&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lsquo;I want to do with you what spring does with the cherry trees.&amp;rsquo; &lt;cite&gt;cited ~Pablo Neruda&lt;/cite&gt;*&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Et harum quidem &lt;em&gt;rerum facilis&lt;/em&gt; est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unordered list&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Red&lt;/li&gt;
&lt;li&gt;Green&lt;/li&gt;
&lt;li&gt;Blue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ordered list&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Red&lt;/li&gt;
&lt;li&gt;Green&lt;/li&gt;
&lt;li&gt;Blue&lt;/li&gt;
&lt;/ol&gt;
- https://parallelpoints.com/posts/testpieces/post-5/ -</description></item><item><title>(No comment) When You Have Too Much to Do</title><link>https://parallelpoints.com/posts/testpieces/post-1/</link><pubDate>Sun, 18 Mar 2018 02:01:58 +0530</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/posts/testpieces/post-1/</guid><description>Parallelpoints https://parallelpoints.com/posts/testpieces/post-1/ -&lt;p&gt;You have a to-do list that scrolls on for days. You are managing multiple projects, getting lots of email and messages on different messaging systems, managing finances and personal health habits and so much more.&lt;/p&gt;
&lt;p&gt;It all keeps piling up, and it can feel overwhelming.&lt;/p&gt;
&lt;p&gt;How do you keep up with it all? How do you find focus and peace and get stuff accomplished when you have too much on your plate?&lt;/p&gt;
&lt;p&gt;In this primer, I’ll look at some key strategies and tactics for taking on an overloaded life with an open heart, lots of energy, and a smile on your face.&lt;/p&gt;
&lt;h2 id="the-first-step-triage"&gt;The First Step: Triage&lt;/h2&gt;
&lt;p&gt;Whether you’re just starting your day, or you’re in the middle of the chaos and just need to find some sanity … the first step is to get into triage mode.&lt;/p&gt;
&lt;p&gt;Triage, as you probably know, is sorting through the chaos to prioritize: what needs to be done now, what needs to be done today, what needs to be done this week, and what can wait? You’re looking at urgency, but also what’s meaningful and important.&lt;/p&gt;
&lt;p&gt;Here’s what you might do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pick out the things that need to be done today. Start a Short List for things you’re going to do today. That might be important tasks for big projects, urgent tasks that could result in damage if you don’t act, smaller admin tasks that you really should take care of today, and responding to important messages. I would recommend being ruthless and cutting out as much as you can, having just 5 things on your plate if that’s at all possible. Not everything needs to be done today, and not every email needs to be responded to.&lt;/li&gt;
&lt;li&gt;Push some things to tomorrow and the rest of the week. If you have deadlines that can be pushed back (or renegotiated), do that. Spread the work out over the week, even into next week. What needs to be done tomorrow? What can wait a day or two longer?&lt;/li&gt;
&lt;li&gt;Eliminate what you can. That might mean just not replying to some messages that aren’t that important and don’t really require a reply. It might mean telling some people that you can’t take on this project after all, or that you need to get out of the commitment that you said you’d do. Yes, this is uncomfortable. For now, just put them on a list called, “To Not Do,” and plan to figure out how to get out of them later.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OK, you have some breathing room and a manageable list now! Let’s shrink that down even further and just pick one thing.&lt;/p&gt;
&lt;h2 id="next-focus-on-one-thing"&gt;Next: Focus on One Thing&lt;/h2&gt;
&lt;p&gt;With a lot on your plate, it’s hard to pick one thing to focus on. But that’s exactly what I’m going to ask you to do.&lt;/p&gt;
&lt;p&gt;Pick one thing, and give it your focus. Yes, there are a lot of other things you can focus on. Yes, they’re stressing you out and making it hard to focus. But think about it this way: if you allow it all to be in your head all the time, that will always be your mode of being. You’ll always be thinking about everything, stressing out about it all, with a frazzled mind … unless you start shifting.&lt;/p&gt;
&lt;p&gt;The shift:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pick something to focus on. Look at the triaged list from the first section … if you have 5-6 things on this Short List, you can assess whether there’s any super urgent, time-sensitive things you need to take care of. If there are, pick one of them. If not, pick the most important one — probably the one you have been putting off doing.&lt;/li&gt;
&lt;li&gt;Clear everything else away. Just for a little bit. Close all browser tabs, turn off notifications, close open applications, put your phone away.&lt;/li&gt;
&lt;li&gt;Put that one task before you, and allow yourself to be with it completely. Pour yourself into it. Think of it as a practice, of letting go (of everything else), of focus, of radical simplicity.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you’re done (or after 15-20 minutes have gone by at least), you can switch to something else. But don’t allow yourself to switch until then.&lt;/p&gt;
&lt;p&gt;By closing off all exits, by choosing one thing, by giving yourself completely to that thing … you’re now in a different mode that isn’t so stressful or spread thin. You’ve started a shift that will lead to focus and sanity.&lt;/p&gt;
&lt;h2 id="third-schedule-time-to-simplify"&gt;Third: Schedule Time to Simplify&lt;/h2&gt;
&lt;p&gt;Remember the To Not Do list above? Schedule some time this week to start reducing your projects, saying no to people, getting out of commitments, crossing stuff off your task list … so that you can have some sanity back.&lt;/p&gt;
&lt;p&gt;There are lots of little things that you’ve said “yes” to that you probably shouldn’t have. That’s why you’re overloaded. Protect your more important work, and your time off, and your peace of mind, by saying “no” to things that aren’t as important.&lt;/p&gt;
&lt;p&gt;Schedule the time to simplify — you don’t have to do it today, but sometime soon — and you can then not have to worry about the things on your To Not Do list until then.&lt;/p&gt;
&lt;h2 id="fourth-practice-mindful-focus"&gt;Fourth: Practice Mindful Focus&lt;/h2&gt;
&lt;p&gt;Go through the rest of the day with an attitude of “mindful focus.” That means that you are doing one thing at a time, being as present as you can, switching as little as you can.&lt;/p&gt;
&lt;p&gt;Think of it as a settling of the mind. A new mode of being. A mindfulness practice (which means you won’t be perfect at it).&lt;/p&gt;
&lt;p&gt;As you practice mindful focus, you’ll learn to practice doing things with an open heart, with curiosity and gratitude, and even joy. Try these one at a time as you get to do each task on your Short List.&lt;/p&gt;
&lt;p&gt;You’ll find that you’re not so overloaded, but that each task is just perfect for that moment. And that’s a completely new relationship with the work that you do, and a new relationship with life.&lt;/p&gt;
- https://parallelpoints.com/posts/testpieces/post-1/ -</description></item><item><title>What is an embedded system?</title><link>https://parallelpoints.com/what-is-an-embedded-system/</link><pubDate>Thu, 20 Apr 2017 09:44:58 +0000</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/what-is-an-embedded-system/</guid><description>Parallelpoints https://parallelpoints.com/what-is-an-embedded-system/ -&lt;p&gt;I just wrote a post for an &lt;a href="https://www.peerlyst.com/"&gt;Infosec site&lt;/a&gt;, discussing some definitions of embedded systems. I survey some existing definitions, describe why I don&amp;rsquo;t feel they represent the current state of embedded systems, and offer another:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;It&amp;rsquo;s an embedded system if the end-user doesn&amp;rsquo;t control the code that it runs&amp;rdquo;.
Once an end user takes control of the code it changes from being an appliance and becomes a general purpose computer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You used to be able to
&lt;a href="https://www.peerlyst.com/posts/what-is-an-embedded-system-martin-thompson"&gt;read the whole post&lt;/a&gt; here: &lt;a href="https://www.peerlyst.com/posts/what-is-an-embedded-system-martin-thompson"&gt;https://www.peerlyst.com/posts/what-is-an-embedded-system-martin-thompson&lt;/a&gt; but Peerlyst shut down and I didn&amp;rsquo;t archive my post :(&lt;/p&gt;
- https://parallelpoints.com/what-is-an-embedded-system/ -</description></item><item><title>Chapter VI: Esmeralda</title><link>https://parallelpoints.com/posts/testpieces/chapter-6/</link><pubDate>Fri, 14 Apr 2017 11:25:05 -0400</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/posts/testpieces/chapter-6/</guid><description>Parallelpoints https://parallelpoints.com/posts/testpieces/chapter-6/ -&lt;p&gt;We are delighted to be able to inform the reader, that during the whole of
this scene, Gringoire and his piece had stood firm. His actors, spurred on
by him, had not ceased to spout his comedy, and he had not ceased to
listen to it. He had made up his mind about the tumult, and was determined
to proceed to the end, not giving up the hope of a return of attention on
the part of the public. This gleam of hope acquired fresh life, when he
saw Quasimodo, Coppenole, and the deafening escort of the pope of the
procession of fools quit the hall amid great uproar. The throng rushed
eagerly after them. “Good,” he said to himself, “there go all the
mischief-makers.” Unfortunately, all the mischief-makers constituted the
entire audience. In the twinkling of an eye, the grand hall was empty.&lt;/p&gt;
&lt;p&gt;To tell the truth, a few spectators still remained, some scattered, others
in groups around the pillars, women, old men, or children, who had had
enough of the uproar and tumult. Some scholars were still perched astride
of the window-sills, engaged in gazing into the Place.&lt;/p&gt;
&lt;p&gt;“Well,” thought Gringoire, “here are still as many as are required to hear
the end of my mystery. They are few in number, but it is a choice
audience, a lettered audience.”&lt;/p&gt;
&lt;p&gt;An instant later, a symphony which had been intended to produce the
greatest effect on the arrival of the Virgin, was lacking. Gringoire
perceived that his music had been carried off by the procession of the
Pope of the Fools. “Skip it,” said he, stoically.&lt;/p&gt;
&lt;p&gt;He approached a group of bourgeois, who seemed to him to be discussing his
piece. This is the fragment of conversation which he caught,—&lt;/p&gt;
&lt;p&gt;“You know, Master Cheneteau, the Hôtel de Navarre, which belonged to
Monsieur de Nemours?”&lt;/p&gt;
&lt;p&gt;“Yes, opposite the Chapelle de Braque.”&lt;/p&gt;
&lt;p&gt;“Well, the treasury has just let it to Guillaume Alixandre, historian, for
six hivres, eight sols, parisian, a year.”&lt;/p&gt;
&lt;p&gt;“How rents are going up!”&lt;/p&gt;
&lt;p&gt;“Come,” said Gringoire to himself, with a sigh, “the others are
listening.”&lt;/p&gt;
&lt;p&gt;“Comrades,” suddenly shouted one of the young scamps from the window, “La
Esmeralda! La Esmeralda in the Place!”&lt;/p&gt;
&lt;p&gt;This word produced a magical effect. Every one who was left in the hall
flew to the windows, climbing the walls in order to see, and repeating,
“La Esmeralda! La Esmeralda?” At the same time, a great sound of applause
was heard from without.&lt;/p&gt;
&lt;p&gt;“What’s the meaning of this, of the Esmeralda?” said Gringoire, wringing
his hands in despair. “Ah, good heavens! it seems to be the turn of the
windows now.”&lt;/p&gt;
&lt;p&gt;He returned towards the marble table, and saw that the representation had
been interrupted. It was precisely at the instant when Jupiter should have
appeared with his thunder. But Jupiter was standing motionless at the foot
of the stage.&lt;/p&gt;
&lt;p&gt;“Michel Giborne!” cried the irritated poet, “what are you doing there? Is
that your part? Come up!”&lt;/p&gt;
&lt;p&gt;“Alas!” said Jupiter, “a scholar has just seized the ladder.”&lt;/p&gt;
&lt;p&gt;Gringoire looked. It was but too true. All communication between his plot
and its solution was intercepted.&lt;/p&gt;
&lt;p&gt;“The rascal,” he murmured. “And why did he take that ladder?”&lt;/p&gt;
&lt;p&gt;“In order to go and see the Esmeralda,” replied Jupiter piteously. “He
said, ‘Come, here’s a ladder that’s of no use!’ and he took it.”&lt;/p&gt;
&lt;p&gt;This was the last blow. Gringoire received it with resignation.&lt;/p&gt;
&lt;p&gt;“May the devil fly away with you!” he said to the comedian, “and if I get
my pay, you shall receive yours.”&lt;/p&gt;
&lt;p&gt;Then he beat a retreat, with drooping head, but the last in the field,
like a general who has fought well.&lt;/p&gt;
&lt;p&gt;And as he descended the winding stairs of the courts: “A fine rabble of
asses and dolts these Parisians!” he muttered between his teeth; “they
come to hear a mystery and don’t listen to it at all! They are engrossed
by every one, by Chopin Trouillefou, by the cardinal, by Coppenole, by
Quasimodo, by the devil! but by Madame the Virgin Mary, not at all. If I
had known, I’d have given you Virgin Mary; you ninnies! And I! to come to
see faces and behold only backs! to be a poet, and to reap the success of
an apothecary! It is true that Homerus begged through the Greek towns, and
that Naso died in exile among the Muscovites. But may the devil flay me if
I understand what they mean with their Esmeralda! What is that word, in
the first place?—‘tis Egyptian!”&lt;/p&gt;
- https://parallelpoints.com/posts/testpieces/chapter-6/ -</description></item><item><title>Chapter I: The Grand Hall</title><link>https://parallelpoints.com/posts/testpieces/chapter-1/</link><pubDate>Sun, 09 Apr 2017 10:58:08 -0400</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/posts/testpieces/chapter-1/</guid><description>Parallelpoints https://parallelpoints.com/posts/testpieces/chapter-1/ -&lt;p&gt;Three hundred and forty-eight years, six months, and nineteen days ago
to-day, the Parisians awoke to the sound of all the bells in the triple
circuit of the city, the university, and the town ringing a full peal.&lt;/p&gt;
&lt;p&gt;The sixth of January, 1482, is not, however, a day of which history has
preserved the memory. There was nothing notable in the event which thus
set the bells and the bourgeois of Paris in a ferment from early morning.
It was neither an assault by the Picards nor the Burgundians, nor a hunt
led along in procession, nor a revolt of scholars in the town of Laas, nor
an entry of “our much dread lord, monsieur the king,” nor even a pretty
hanging of male and female thieves by the courts of Paris. Neither was it
the arrival, so frequent in the fifteenth century, of some plumed and
bedizened embassy. It was barely two days since the last cavalcade of that
nature, that of the Flemish ambassadors charged with concluding the
marriage between the dauphin and Marguerite of Flanders, had made its
entry into Paris, to the great annoyance of M. le Cardinal de Bourbon,
who, for the sake of pleasing the king, had been obliged to assume an
amiable mien towards this whole rustic rabble of Flemish burgomasters, and
to regale them at his Hôtel de Bourbon, with a very “pretty morality,
allegorical satire, and farce,” while a driving rain drenched the
magnificent tapestries at his door.&lt;/p&gt;
&lt;p&gt;What put the “whole population of Paris in commotion,” as Jehan de Troyes
expresses it, on the sixth of January, was the double solemnity, united
from time immemorial, of the Epiphany and the Feast of Fools.&lt;/p&gt;
&lt;p&gt;On that day, there was to be a bonfire on the Place de Grève, a maypole at
the Chapelle de Braque, and a mystery at the Palais de Justice. It had
been cried, to the sound of the trumpet, the preceding evening at all the
cross roads, by the provost’s men, clad in handsome, short, sleeveless
coats of violet camelot, with large white crosses upon their breasts.&lt;/p&gt;
&lt;p&gt;So the crowd of citizens, male and female, having closed their houses and
shops, thronged from every direction, at early morn, towards some one of
the three spots designated.&lt;/p&gt;
&lt;p&gt;Each had made his choice; one, the bonfire; another, the maypole; another,
the mystery play. It must be stated, in honor of the good sense of the
loungers of Paris, that the greater part of this crowd directed their
steps towards the bonfire, which was quite in season, or towards the
mystery play, which was to be presented in the grand hall of the Palais de
Justice (the courts of law), which was well roofed and walled; and that
the curious left the poor, scantily flowered maypole to shiver all alone
beneath the sky of January, in the cemetery of the Chapel of Braque.&lt;/p&gt;
&lt;p&gt;The populace thronged the avenues of the law courts in particular, because
they knew that the Flemish ambassadors, who had arrived two days
previously, intended to be present at the representation of the mystery,
and at the election of the Pope of the Fools, which was also to take place
in the grand hall.&lt;/p&gt;
&lt;p&gt;It was no easy matter on that day, to force one’s way into that grand
hall, although it was then reputed to be the largest covered enclosure in
the world (it is true that Sauval had not yet measured the grand hall of
the Château of Montargis). The palace place, encumbered with people,
offered to the curious gazers at the windows the aspect of a sea; into
which five or six streets, like so many mouths of rivers, discharged every
moment fresh floods of heads. The waves of this crowd, augmented
incessantly, dashed against the angles of the houses which projected here
and there, like so many promontories, into the irregular basin of the
place. In the centre of the lofty Gothic* façade of the palace, the grand
staircase, incessantly ascended and descended by a double current, which,
after parting on the intermediate landing-place, flowed in broad waves
along its lateral slopes,—the grand staircase, I say, trickled
incessantly into the place, like a cascade into a lake. The cries, the
laughter, the trampling of those thousands of feet, produced a great noise
and a great clamor. From time to time, this noise and clamor redoubled;
the current which drove the crowd towards the grand staircase flowed
backwards, became troubled, formed whirlpools. This was produced by the
buffet of an archer, or the horse of one of the provost’s sergeants, which
kicked to restore order; an admirable tradition which the provostship has
bequeathed to the constablery, the constablery to the &lt;em&gt;maréchaussée&lt;/em&gt;,
the &lt;em&gt;maréchaussée&lt;/em&gt; to our &lt;em&gt;gendarmeri&lt;/em&gt; of Paris.&lt;/p&gt;
- https://parallelpoints.com/posts/testpieces/chapter-1/ -</description></item><item><title>Why use an FPGA?</title><link>https://parallelpoints.com/why-use-an-fpga/</link><pubDate>Fri, 04 Oct 2013 17:55:26 +0000</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/why-use-an-fpga/</guid><description>Parallelpoints https://parallelpoints.com/why-use-an-fpga/ -&lt;h2 id="please-help-me-do-this-on-an-fpga"&gt;&amp;ldquo;Please help me do this on an FPGA&amp;rdquo;&lt;/h2&gt;
&lt;h3 id="the-question-you-shouldnt-ask"&gt;The question you shouldn&amp;rsquo;t ask!&lt;/h3&gt;
&lt;p&gt;A common refrain on many of the internet&amp;rsquo;s finest help forums and newsgroups is &amp;ldquo;I&amp;rsquo;m trying to do x using an FPGA, help!&amp;rdquo; And very often &amp;ldquo;x&amp;rdquo; is a task which would be more optimally (by many different measures!) be performed in another way. But there is a common assumption that if a task is &amp;ldquo;intensive&amp;rdquo; then FPGAs are the answer. One recent example was asking how to implement face-detection in FPGA. It quickly became apparent the the poster didn&amp;rsquo;t actually know how to perform face-detection at all, so adding FPGAs to the equation was not a great help!&lt;/p&gt;
&lt;p&gt;For a quick answer to the question &amp;ldquo;why use an FPGA?&amp;rdquo;, I&amp;rsquo;ll reproduce this list that I used in a lecture to a class of undergraduates:&lt;/p&gt;
&lt;h3 id="use-an-fpga-if-one-or-more-of-these-apply"&gt;Use an FPGA if one or more of these apply:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;you have &lt;em&gt;hard real-time&lt;/em&gt; deadlines (measured in μs or ns)&lt;/li&gt;
&lt;li&gt;you need more than one DSP (lots of arithmetic &lt;em&gt;and&lt;/em&gt; parallelisable)&lt;/li&gt;
&lt;li&gt;a suitable processor (or DSP) costs too much (money, weight, size, power)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And for students, there&amp;rsquo;s one more:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Because your assignment tells you to :) Although ideally it&amp;rsquo;ll be something that is at least representative of a reasonable FPGA task (not a traffic light controller or vending machine!)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-to-do-instead"&gt;What to do instead?&lt;/h2&gt;
&lt;h3 id="softwares-easy"&gt;Software&amp;rsquo;s easy&lt;/h3&gt;
&lt;p&gt;Writing software, I&amp;rsquo;d hazard a guess that even amongst &lt;em&gt;embedded&lt;/em&gt; software engineers (those that work at the really low level, not writing code for PCs) many of them don&amp;rsquo;t really know what their target processor looks like under the hood. They just click compile, wait maybe 10 seconds, and test. And that&amp;rsquo;s great, it makes for a very productive development environment. When you are sufficiently abstracted from the architecture, there&amp;rsquo;s enough performance from the tools and chips that you don&amp;rsquo;t (often) have to think hard about how to implement things, you can just get on with the interesting bit, creating your application.&lt;/p&gt;
&lt;h3 id="fpgas-hurt"&gt;FPGAs hurt&lt;/h3&gt;
&lt;p&gt;In comparison, FPGAs are painful to use - don&amp;rsquo;t get me wrong, the software tools and the silicon architectures have improved massively over the last few years - but compared to writing software, it&amp;rsquo;s a completely different realm. You have to be much more aware of the architecture of your device, know much more about how the tools operate, wait ages for them to run (and think fundamentally differently about algorithms and implementations). FPGA code takes tens of minutes to compile, and it&amp;rsquo;s much easier to push up against the performance limits, and then have to mess around with your code to make it more recognisable to the tools you are using.&lt;/p&gt;
&lt;h3 id="choosing-an-implementation"&gt;Choosing an implementation&lt;/h3&gt;
&lt;p&gt;My advice is always &amp;ldquo;Avoid using an FPGA unless you have to&amp;rdquo;. And I say this as a great advocate of FPGAs!&lt;/p&gt;
&lt;p&gt;If you can do it in Octave or Matlab on a PC, do so. In fact, even if you end up somewhere else, start from there so you can understand the problem properly.&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t have enough processing power, make use of a GPU.&lt;/p&gt;
&lt;p&gt;If that solution costs too much (in money, power, size, weight terms) then you&amp;rsquo;ll have to get cleverer. Start thinking about microcontrollers. They&amp;rsquo;re well-tooled up and very powerful. You can have an 80MHz 32-bit ARM for a few pounds (or Euros. Or Dollars) these days, you can do an awful lot with that.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re still struggling for processing power, think about a DSP. But be careful - analyse what you are trying to do very carefully. Figure out which bits will suit a DSP (lots of multiplying and adding in parallel with memory moving) - suddenly you have to know your architecture, just to decide if it&amp;rsquo;s feasible. Be careful about memory bandwidth, caches are not magic and if your code requires data reads or writes that are randomly scattered about, expect to lose some performance.&lt;/p&gt;
&lt;p&gt;The next stage on might be multiple DSPs&amp;hellip; and once you start considering multiple DSPs, it might finally be time to think about an FPGA. The downside is you are responsible for so much more of the architecture. Floating-point maths is becoming a sensible option, but you&amp;rsquo;ll still want to look at the trade-off between development time using floating point and the device-size cost and power savings that come from using a fixed point implementation. You can take advantage of your knowledge of data access patterns to tune the memory controller - in fact you&amp;rsquo;ll probably have to - yet more grovelling around in the details. Add to this, the fact that it&amp;rsquo;s a lot harder to hire good FPGA people than DSP people (and they are harder to get than microcontroller people), and help on the internet can be harder to come by. You development time will lengthen as you build simulation models of the hardware you are talking to and have to debug them. And the hour-long build times will try your patience.&lt;/p&gt;
&lt;h3 id="but-if-you-have-good-reason-to-go-for-it"&gt;But if you have good reason to, go for it!&lt;/h3&gt;
&lt;p&gt;FPGAs are really well suited to&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;many &lt;a href="http://www.conekt.co.uk/capabilities/electronic-hardware/50-fpga-for-ldw"&gt;image&lt;/a&gt; and &lt;a href="http://rfel.com/index.php/solutions/radar"&gt;radar&lt;/a&gt; processing tasks especially when cost, power and space constrained. (Disclosure: I wrote the first article)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hpcwire.com/hpcwire/2011-07-13/jp_morgan_buys_into_fpga_supercomputing.html"&gt;financial analysis&lt;/a&gt; (when time constrained)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.maxeler.com/media/documents/MaxelerSummaryAcousticWaveEquation.pdf"&gt;seismic analysis&lt;/a&gt; (lots of money at stake, the faster you process, the more processing you can do, and the less risk to your drilling)&lt;/li&gt;
&lt;li&gt;hard-real-time, low-latency deadlines - single-digit microsecond response times to stimulus. See the &lt;a href="http://www.conekt.co.uk/images/stories/Capabilities_FILES/conekta4%20simulated%20fault%20insertion%20final%20press_lr.pdf"&gt;second page of this flyer&lt;/a&gt; - I&amp;rsquo;ve worked on this project too.&lt;/li&gt;
&lt;/ul&gt;
- https://parallelpoints.com/why-use-an-fpga/ -</description></item><item><title>Flash memory through the ages</title><link>https://parallelpoints.com/flash-memory-through-the-ages/</link><pubDate>Sat, 04 May 2013 20:50:38 +0000</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/flash-memory-through-the-ages/</guid><description>Parallelpoints https://parallelpoints.com/flash-memory-through-the-ages/ -&lt;p&gt;I was reading &lt;a href="http://www.bunniestudios.com/blog/?p=2946"&gt;bunnie&amp;rsquo;s recent post on the manufacturing techniques used in USB flash-drives&lt;/a&gt;&amp;hellip; bare die manipulated by hand with a stick!&lt;/p&gt;
&lt;p&gt;Today I found an old (128MB!) SD card from my Palm Tungsten-T. Circa 2005 if I remember rightly. Very different technology, actual chips soldered down on the board. And it&amp;rsquo;s clear that the SD card form factor was very much defined by the physical size of the NAND flash chips available at the time!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://parallelpoints.com/wp-content/uploads/2013/05/sdcard.png"&gt;&lt;img src="https://parallelpoints.com/wp-content/uploads/2013/05/sdcard-300x168.png" alt="The innards of an old SD card"&gt;&lt;/a&gt;&lt;/p&gt;
- https://parallelpoints.com/flash-memory-through-the-ages/ -</description></item><item><title>More ARM FPGA</title><link>https://parallelpoints.com/more-arm-fpga/</link><pubDate>Fri, 03 May 2013 21:10:16 +0000</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/more-arm-fpga/</guid><description>Parallelpoints https://parallelpoints.com/more-arm-fpga/ -&lt;p&gt;A while ago &lt;a href="https://parallelpoints.com/fpgas-considered-arm-full/"&gt;I compared Altera and Xilinx&amp;rsquo;s ARM-based FPGA combos&lt;/a&gt;. More information is now available publicly, so let&amp;rsquo;s see what we know now&amp;hellip;&lt;/p&gt;
&lt;p&gt;One thing that&amp;rsquo;s hard to miss is that Altera are making a big thing of their features to support applications with more taxing reliability and safety requirements.&lt;/p&gt;
&lt;p&gt;Altera&amp;rsquo;s external DRAM interface supports error-checking and correction (ECC) on 32-bit wide memory, whereas Zynq can only do this on 16-bit wide memory, allowing Altera to keep a higher-performance system with ECC. The Altera SoCs also &lt;a href="http://www.altera.co.uk/technology/memory/soc/mem-error-correction-soc-fpga.html"&gt;claim ECC on the large blocks of RAM within the processor subsystem&lt;/a&gt; (ie the L2 cache and peripheral memory buffers). It appears that Zynq only has parity (ie error checking, but not correction) on the cache and on-chip memory. In Xilinx&amp;rsquo;s favour, they have performed lots of failure testing (they always have - to a heroic degree!) and &lt;a href="http://forums.xilinx.com/t5/Embedded-Processors-and/Zynq-DDR-ECC-error-count-register-never-incremented/m-p/318059#M8078"&gt;the entire processor subsystem has a silent data corruption rate of about 15 FIT&lt;/a&gt;. Not seen any FIT data for Altera yet.&lt;/p&gt;
&lt;p&gt;Both vendors have memory protection within the microprocessor section to stop errant software processes stomping on each other&amp;rsquo;s data, but Altera appear to have additional protection within the DDR controller too, which presumably protects against accesses from the FPGA fabric going where they shouldn&amp;rsquo;t. Again, Zynq does not (as far as I can see) provide this feature.&lt;/p&gt;
&lt;p&gt;Looking &amp;ldquo;mechanically&amp;rdquo;, Altera have devices which are pinout compatible with and without their many-gigabit-transceiver blocks, which would provide one of my applications with a useful development interface which could be dropped in production without a board respin.&lt;/p&gt;
&lt;p&gt;Finally, Altera also have a single-core option. Of course, that only makes any difference if it saves enough money to make the silicon cheaper in any applications which can get away with a single core. Xilinx have clearly decided not&amp;hellip; we&amp;rsquo;ll have to see!&lt;/p&gt;
- https://parallelpoints.com/more-arm-fpga/ -</description></item><item><title>Now running Wordpress</title><link>https://parallelpoints.com/now-running-wordpress/</link><pubDate>Wed, 19 Dec 2012 14:36:06 +0000</pubDate><author>martin@parallelpoints.com (Martin Thompson)</author><guid>https://parallelpoints.com/now-running-wordpress/</guid><description>Parallelpoints https://parallelpoints.com/now-running-wordpress/ -&lt;p&gt;This site is now running Wordpress, rather then Drupal. Ultimately, I got fed up with the very tedious processes involved with managing a Drupal installation. This added to the fact that I somehow got the Image plugin broken such that I couldn&amp;rsquo;t upload any more images, and despite much Googling, couldn&amp;rsquo;t fix it. And this was the second time that had happened - the first time I fixed it by restoring from a backup&amp;hellip; but that&amp;rsquo;s not really a proper solution!&lt;/p&gt;
&lt;p&gt;So, here we are in Wordpress land - updates involve me clicking a button and waiting&amp;hellip; much simpler. Bear with me while I find all the little bits of formatting which are no doubt broken, especially as the markdown had to be hacked on by hand, and the code formatting is not (so far) as well configured as my Drupal setup.&lt;/p&gt;
- https://parallelpoints.com/now-running-wordpress/ -</description></item></channel></rss>