<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Theo Armour</title>
    <description>The latest articles on Forem by Theo Armour (@theoarmour).</description>
    <link>https://forem.com/theoarmour</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F297057%2F1f8b7487-e2ef-486e-a811-e7f920944b89.png</url>
      <title>Forem: Theo Armour</title>
      <link>https://forem.com/theoarmour</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/theoarmour"/>
    <language>en</language>
    <item>
      <title>A day living in the "Singularity"</title>
      <dc:creator>Theo Armour</dc:creator>
      <pubDate>Sun, 03 May 2020 08:39:45 +0000</pubDate>
      <link>https://forem.com/theoarmour/a-day-living-in-the-singularity-1l29</link>
      <guid>https://forem.com/theoarmour/a-day-living-in-the-singularity-1l29</guid>
      <description>&lt;p&gt;Yesterday was one of those days. It was not that memorable a day but it was merely a thrilling day. Let me explain. For several hours I was in the &lt;a href="https://en.wikipedia.org/wiki/Technological_singularity"&gt;"singularity"&lt;/a&gt;. I was living and experiencing in a future I had only barely dreamed of.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the singularity is a hypothetical future point in time at which technological growth becomes uncontrollable and irreversible, resulting in unforeseeable changes to human civilization&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The objective of this post is to share aspects of this singularity with you - wherever and whenever you are. The interesting thing is that you are already in and part of the singularity. I will explain. I am a software designer and have been designing things - mostly computer programs - in 3D for decades. The programs I write have been used to design houses, furniture, math visualizations, air traffic moves, stock market moves and more. In all of these workflows, my goal is always to share with you the design I am currently working on and to do this as quickly and as easily as possible.&lt;/p&gt;

&lt;p&gt;I am happiest when, for example: you make a comment. I bang on the keyboard for a bit and press enter.  You see the changes and make a new comment. I bang some more. The design progresses until we are both happy with it.&lt;/p&gt;

&lt;p&gt;In the real world this is really kind of an impossible idea. You cannot look at a house and say "well, I'd like that room to be a little bit bigger" and - &lt;em&gt;presto!&lt;/em&gt; - the room becomes bigger. But we have been able to do shared real-time editing like this on the computer screen for several decades. The only issue is that you really have to be sitting right next to me and my computer. You can talk and I can edit and we can both see what's happening in real time.&lt;/p&gt;

&lt;p&gt;The moment you are not in the same room it starts getting tricky. We can work over the internet but then you have to have the same program I am running or maybe a lot of technical expertise. These are all difficult things. The result is that there is very little 3D communication in the world as of yet. The only exception is, obviously, gaming. With gaming you can see excellent visions of ways people can communicate and collaborate online and in 3D. The only issue here is that games take huge amount of time, effort and money to design, build and deliver. &lt;/p&gt;

&lt;p&gt;The time and effort to do things like this just to share my design for your new bookshelf or new data viz has been way outside of normal means.&lt;/p&gt;

&lt;p&gt;I have been able to embed 3D designs into WordPress and Blogger. But each instance has been a hand-crafted and time-consuming experience. It involves saving the design data, uploading it to a server, creating some kind of thing in the post that links to the server and adds ways of allowing the user to rotate the view and whatever. What usually happens instead is that somebody does a screen grab of the 3D thing and saves it as a jpeg and then adds the jpeg to the blog post or email or forum thread. I have been doing this kind of thing for decades. This reduction or simplification of the design has inevitably become a cause for anguish and disappointment for me whenever I share my 3D designs.&lt;/p&gt;

&lt;p&gt;Generally I have had two unsatisfactory choices I can spend much time producing a visualization (viz) that becomes useless as soon as we make even a minor change or I can spend time and producing a number of screen captures with the hope that you will get it.&lt;/p&gt;

&lt;p&gt;Until yesterday.&lt;/p&gt;


&lt;div class="glitch-embed-wrap"&gt;
  &lt;iframe src="https://glitch.com/embed/#!/embed/theo-2020-04-28-population?previewSize=100&amp;amp;path=index.html" alt="theo-2020-04-28-population on glitch"&gt;&lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;The thing you see above is definitely a 3D viz and it is appearing in a post on your browser. It takes no more effort than clicking on a link for you and countless others to view it, rotate it, zoom it, whatever.&lt;/p&gt;

&lt;p&gt;The viz is created and maintained by me using &lt;a href="https://code.visualstudio.com/"&gt;VS Code&lt;/a&gt; - currently the most popular text editor for software programmers. &lt;/p&gt;

&lt;p&gt;The code is turned into a viz via &lt;a href="https://glitch.com/"&gt;Glitch.com&lt;/a&gt;. Glitch supplies a &lt;a href="https://marketplace.visualstudio.com/items?itemName=glitch.glitch"&gt;plugin or extension for VS Code&lt;/a&gt; that captures any and all edits on your computer, sends the edits to the Glitch server which then updates the viz. The plugin allows you to open any project you have in Glitch and start maintaining it.&lt;/p&gt;

&lt;p&gt;The next step is get the viz from Glitch to wherever it wants to be seen - which in this cases is in this post on Dev.to. Glitch, Dev.to and other have simplified this process. In order to add the above viz, all I had to do was add the following text in the post wherever I want thrr viz to be displayed&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  {% glitch theo-2020-04-28-population app %}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;That little bit of text causes Dev.to post to go and read the viz data from Glitch. Any time the code in Glitch is updated the Dev.to post is updated. With the VS Code extension enabled, anytime I edit in VS Code, Glitch is updated which then in turn updates the Dev.to post.&lt;/p&gt;

&lt;p&gt;So there I was yesterday happily editing my code in my favorite editor on a Windows machine and also seeing the updates to the Dev.to post I was working on in real time in the browser on my Chromebook computer. I did not need push any buttons, I did not need to run any scripts, I did not need to recite any magic incantations. It just worked.&lt;/p&gt;

&lt;p&gt;Then I wanted to see what was happening in Glitch. So I opened the project on Glitch and started typing in VS Code on the Windows machine. Sure enough, the code I typed on the Windows machine appeared immediately in the Glitch project tab in the Chromebook. &lt;/p&gt;

&lt;p&gt;Then I started typing in the Glitch project on the Chromebook. After a while I looked over at the Windows machine. OMG, the new text was appearing there as well. The bottom line is that all the editing is bi-directional. Coding and presenting a 3D viz is now as easy and as painless as collaborating on a Google Doc.&lt;/p&gt;

&lt;p&gt;Wait, there's more!&lt;/p&gt;

&lt;p&gt;I was so pleased with what was happening, I thought it would a nice thing to thank the authors of the Glitch VS Code Extension. So I went to the Glitch Forum and started a thank you post: &lt;a href="https://support.glitch.com/t/about-the-vs-code-extension-category/12451?u=theo-armour"&gt;https://support.glitch.com/t/about-the-vs-code-extension-category/12451?u=theo-armour&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As I was running the thank you, I thought it would be nice to explain a little bit about what I was working on. so I tried embedding a glitch viz inside of the Glitch Discourse Forum post. Discourse is a very popular Forum producer but has nothing to do with Glitch or Dev.to, so getting anything to work seemed unlikely or would take a lot of labor. That is until I dropped the embed code provided by Glitch into the Discourse post.&lt;/p&gt;

&lt;p&gt;Bingo! The viz worked in Discourse.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- Copy and Paste Me --&amp;gt;
&amp;lt;div class="glitch-embed-wrap" style="height: 420px; width: 100%;"&amp;gt;
  &amp;lt;iframe
    src="https://glitch.com/embed/#!/embed/glitch-in-vscode-2020-05-01?path=README.md&amp;amp;previewSize=0"
    title="glitch-in-vscode-2020-05-01 on Glitch"
    allow="geolocation; microphone; camera; midi; vr; encrypted-media"
    style="height: 100%; width: 100%; border: 0;"&amp;gt;
  &amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Which looks like this&lt;/p&gt;


&lt;div class="glitch-embed-wrap"&gt;
  &lt;iframe src="https://glitch.com/embed/#!/embed/glitch-in-vscode-2020-05-01?path=index.html" alt="glitch-in-vscode-2020-05-01 on glitch"&gt;&lt;/iframe&gt;
&lt;/div&gt;



&lt;p&gt;The Read Me file contains an account of my experiences. Click the "View App" button at lower right to obtain another dose of 3D. ;-)&lt;/p&gt;

&lt;p&gt;Even if you read the post, you will get only a part of what was going on. I could do things such as Update FireFox on Windows from my Google Phone. I could voice dictate on the Chromebook and text edit on Windows. I could have multiple windows on multiple devices all in sync. And more/&lt;/p&gt;

&lt;p&gt;After years of waiting, my 3D world is beginning to have the no-cost, easy and powerful online tools that my 2D brethren have enjoyed for decades.&lt;/p&gt;

&lt;p&gt;So for me yesterday was more than a singularity. Yesterday was a "triplearity".&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>threejs</category>
      <category>webdev</category>
      <category>glitch</category>
    </item>
    <item>
      <title>Software is not magic; software is made by humans</title>
      <dc:creator>Theo Armour</dc:creator>
      <pubDate>Fri, 01 May 2020 04:03:24 +0000</pubDate>
      <link>https://forem.com/theoarmour/software-is-not-magic-software-is-made-by-humans-2m0e</link>
      <guid>https://forem.com/theoarmour/software-is-not-magic-software-is-made-by-humans-2m0e</guid>
      <description>&lt;p&gt;We did it! &lt;a class="comment-mentioned-user" href="https://dev.to/harald3dcv"&gt;@harald3dcv&lt;/a&gt;
 and I solved the issues with having objects circling the globe in a nice easily readable fashion. See the post &lt;a href="https://dev.to/theoarmour/animated-gifs-of-3d-globes-and-tilting-the-bar-1gin"&gt;"Animated GIFs of 3D Globes and Tilting the bar"&lt;/a&gt; for the problem we were trying to solve.  In the animation above, each bar was given a random height, latitude and longitude. You will note the the text and bar are nicely positioned, are always aligned vertically. Each bar is scaled individually but the every text element is scaled the same. And the best thing is that the frames per second are 60 fps on my win10 laptop with a GPU and still in the high 50s on my Samsung Galaxy Chromebook. So what was the magic?&lt;/p&gt;

&lt;p&gt;The magic is all in this function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;      &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;getMatrixComposed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;position&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;latLonToXYZ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lon&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;matrix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Matrix4&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;quaternion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Quaternion&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;setFromRotationMatrix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nx"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lookAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Vector3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Vector3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Vector3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="nx"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nx"&gt;quaternion&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nx"&gt;scale&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The THREE.Matrix4().compose function sets the position, rotation and scale of any three.js object in a single line of code. In some ways it is elegant and simple. And in other ways maddening and complex. All of which is another way of saying: Welcome to the world of &lt;a href="https://en.wikipedia.org/wiki/Linear_algebra"&gt;linear algebra&lt;/a&gt;! ;-)&lt;/p&gt;

&lt;p&gt;Linear algebra plays a huge role in the creation of interactive 3D graphics. My own skills in linear algebra would hardly fill a teaspoon. Thank goodness there are lots of &lt;a href="https://en.wikipedia.org/wiki/Standing_on_the_shoulders_of_giants"&gt;shoulders of giants to stand&lt;/a&gt; on and build upon. Three.js takes care of the core of the issues. There are hundreds of &lt;a href="https://threejs.org/examples/#webgl_animation_cloth"&gt;three.js examples&lt;/a&gt;. Among the examples there is likely to be a demo of what you are looking for.&lt;/p&gt;

&lt;p&gt;On occasion there is a new problem - like the one above. So Harald and I spent a good amount of time looking at the three.js math library.  The three.js math library is a treasure. It is fairly well documented. Here are two pages I look at a lot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://threejs.org/docs/#api/en/math/Matrix4"&gt;https://threejs.org/docs/#api/en/math/Matrix4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://threejs.org/docs/#api/en/math/Vector3"&gt;https://threejs.org/docs/#api/en/math/Vector3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And when I am really in trouble, I look at the very readable source code:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mrdoob/three.js/blob/master/src/math/Vector4.js"&gt;https://github.com/mrdoob/three.js/blob/master/src/math/Vector4.js&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the good news: In this day and age most of the problems you will encounter have been solved already. If you cannot find the answer it is probably because you did not identify the correct search terminology.&lt;/p&gt;

&lt;p&gt;So why did Harald and I spend two hours in battle with a 4x4 matrix this morning? In two hours we might have been able to find a dozen examples of similar solutions to our problem.&lt;/p&gt;

&lt;p&gt;One reason is because solving linear algebra problems is so mentally challenging. The problems are tough, take a lot of thought and there are lots of fails. But then there is that &lt;a href="https://en.wikipedia.org/wiki/Eureka_(word)"&gt;"Eureka!"&lt;/a&gt; - I have found it - moment. The thing you have been dreaming about appears on the screen and you know you have found the right answer.&lt;/p&gt;

&lt;p&gt;You are then reminded that software is not magic, that software is made by people. You have turned something you imagined into something that is now real, useful and shareable. You are a good human.&lt;/p&gt;

&lt;p&gt;Enough chit-chat for now. Have a look at the source code on Glitch. Click on the "addMeshGeometryInstanced" button and watch a hundred items of text pop up on your screen. &lt;/p&gt;


&lt;div class="glitch-embed-wrap"&gt;
  &lt;iframe src="https://glitch.com/embed/#!/embed/theo-2020-04-globe-template?previewSize=100&amp;amp;path=index.html" alt="theo-2020-04-globe-template on glitch"&gt;&lt;/iframe&gt;
&lt;/div&gt;



&lt;p&gt;The happy thing is that this is beginning to turn into a nice project - to create and maintain a template on Glitch of a script that create a nice interactive 3D globe. More on this idea in the next post. In the meantime be happy that things are looking up just the way we wanted.&lt;/p&gt;

</description>
      <category>threejs</category>
      <category>webgl</category>
      <category>javascript</category>
      <category>glitch</category>
    </item>
    <item>
      <title>Animated GIFs of 3D Globes and Tilting the bar</title>
      <dc:creator>Theo Armour</dc:creator>
      <pubDate>Thu, 30 Apr 2020 04:17:40 +0000</pubDate>
      <link>https://forem.com/theoarmour/animated-gifs-of-3d-globes-and-tilting-the-bar-1gin</link>
      <guid>https://forem.com/theoarmour/animated-gifs-of-3d-globes-and-tilting-the-bar-1gin</guid>
      <description>&lt;h2&gt;
  
  
  Animated GIF Horror
&lt;/h2&gt;

&lt;p&gt;Yes, I know the spinning globe is really, really irritating. I am still way down on the learning curve with trying to reduce my beautiful, interactive 3D world of &lt;a href="https://threejs.org"&gt;Three.js&lt;/a&gt; to work with you &lt;a href="https://en.wikipedia.org/wiki/Flatland"&gt;"Flatlanders"&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My goal is to be able to push a button on a web page I am working on and have a nice smooth animated GIF come out the other end. The GIF should be small enough to be under the 1 MB maximum size set by &lt;a href="https://help.github.com/en/github/administering-a-repository/customizing-your-repositorys-social-media-preview"&gt;GitHub Social Preview&lt;/a&gt; and/or Glitch.&lt;/p&gt;

&lt;p&gt;The code to generate an animated GIF from a three.js demo is Jaume Sanchez's &lt;a href="https://github.com/spite/ccapture.js/"&gt;CCapture&lt;/a&gt;. It creates a [WebM]( &lt;a href="https://en.wikipedia.org/wiki/WebM"&gt;https://en.wikipedia.org/wiki/WebM&lt;/a&gt; file and then uploading to &lt;a href="https://ezgif.com/video-to-gif"&gt;EZGif&lt;/a&gt; for optimizing. It's all fairly easy to use, the only issue is that there many parameters from from the number of colors in a bitmap uses as a texture in the 3D model to the FPS used by CCapture compared to the FPS used by EZGIF. So getting anything going takes a lot of trial and error - and lots of groaning and saying to to yourself "Oh dang! Another 10 MB file".&lt;/p&gt;

&lt;p&gt;The problem with a spinning earth is that it is no fun unless you go all the way around at a nice smooth gentle pace. At 60 frames per second for ten seconds that's 600 frames. Well, that takes a file of many megabytes. So you end up just looking for a less-sucky compromise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tilting the Bar
&lt;/h2&gt;

&lt;p&gt;What is the animated GIF showing? It is a demo of the problem I am posing for tomorrow's &lt;a href="https://dev.to/harald3dcv/three-js-visualizations-with-theo-armour-week-2-1c40"&gt;pair programming session&lt;/a&gt; with Harald Reingruber&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__274996"&gt;
  
    .ltag__user__id__274996 .follow-action-button {
      background-color: #010C1F !important;
      color: #aebcd5 !important;
      border-color: #010C1F !important;
    }
  
  &lt;a href="/harald3dcv" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Jw4o-hYQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--1YoVe3np--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/274996/9c0015e4-b5e5-4e60-a1a2-18e9ded8cb07.jpeg" alt="harald3dcv image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a href="/harald3dcv" class="ltag__user__link"&gt;Harald Reingruber&lt;/a&gt;
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/harald3dcv" class="ltag__user__link"&gt;
        Software Crafter, 3D Computer Graphics, Augmented Reality, Computer Vision, Image Processing, Hobby DJ
      &lt;/a&gt;
    &lt;/div&gt;
    &lt;p class="ltag__user__social"&gt;
        &lt;a href="https://twitter.com/Harald3DCV" rel="noopener"&gt;
          &lt;img class="icon-img" alt="twitter logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--oEHrSmvE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-logo.svg"&gt;Harald3DCV
        &lt;/a&gt;
        &lt;a href="https://github.com/haraldreingruber" rel="noopener"&gt;
          &lt;img class="icon-img" alt="github logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--C74Jn3f1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo.svg"&gt;haraldreingruber
        &lt;/a&gt;
        &lt;a href="https://www.h-reingruber.at" rel="noopener"&gt;
          &lt;img class="icon-img" alt="external link icon" src="https://res.cloudinary.com/practicaldev/image/fetch/s--WsHTbjfA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/link.svg"&gt;https://www.h-reingruber.at
        &lt;/a&gt;
    &lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;I am trying to place sticks or bars that are at given latitudes and longitudes on the surface of a 3D globe. I have been doing this successfully in &lt;a href="https://www.ladybug.tools/spider-covid-19-viz-3d/"&gt;c19-viz3d&lt;/a&gt;. You will note, however, that the bars are all circular in section. This means that the bars can be rotated at any angle and look OK. But if non-circular profiles are desired or if 3D text is desired, then the appearance - with everything tilted every which way - is not pleasing.&lt;/p&gt;

&lt;p&gt;Below is the demo file used to created the animated GIF and the tilted bars. Click the "addMeshGeometryInstance" button in order to generate the bars = and note that they are all rotated at different angles. &lt;/p&gt;


&lt;div class="glitch-embed-wrap"&gt;
  &lt;iframe src="https://glitch.com/embed/#!/embed/theo-2020-04-29-tilted-bars?previewSize=100&amp;amp;path=index.html" alt="theo-2020-04-29-tilted-bars on glitch"&gt;&lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;Will we be able to get the "up" of all the bars facing in the same direction? Who knows, but we shall find out tomorrow.&lt;/p&gt;

</description>
      <category>threejs</category>
      <category>glitch</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>2020-04-27 3D faster miles an hour</title>
      <dc:creator>Theo Armour</dc:creator>
      <pubDate>Tue, 28 Apr 2020 07:18:38 +0000</pubDate>
      <link>https://forem.com/theoarmour/2020-04-27-3d-faster-miles-an-hour-48n1</link>
      <guid>https://forem.com/theoarmour/2020-04-27-3d-faster-miles-an-hour-48n1</guid>
      <description>&lt;p&gt;3D graphics in your browser tend to want to use all the processing power available on your device. A typical metric people look at is frames per second or "fps". The benchmark is keeping your script running at 60 fps.&lt;/p&gt;

&lt;p&gt;The script I am currently working on - &lt;a href="https://www.ladybug.tools/spider-covid-19-viz-3d/"&gt;c19-viz3d&lt;/a&gt; - is generally running at between 30 to 40 fps. There is a large variance, however, that depends on whether you are viewing it on an old phone or the latest gaming computer. In any case it would be a really nice thing if we can get it back up to 60 fps.&lt;/p&gt;

&lt;p&gt;I spent a lot of today on a cookbook example that explores helping three.js web pages run faster miles an hour. As and when success is achieved, the code will be folded into the main app.&lt;/p&gt;

&lt;p&gt;The code I ended up with is running below. Click the buttons to check out the three different modules. At top left of the menu, you can click "load stats.js" to the fps for the module currently running. &lt;/p&gt;


&lt;div class="glitch-embed-wrap"&gt;
  &lt;iframe src="https://glitch.com/embed/#!/embed/theo-2020-04-27?previewSize=100&amp;amp;path=index.html" alt="theo-2020-04-27 on glitch"&gt;&lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;The interesting thing about all this actually has little to do about the code itself. It has much more to do about how the code in today's example was written&lt;/p&gt;

&lt;h2&gt;
  
  
  Pair Programming
&lt;/h2&gt;

&lt;p&gt;Since March 30 Harold Reingruber have been &lt;a href="https://en.wikipedia.org/wiki/Pair_programming"&gt;pair programming&lt;/a&gt; twice a week for a couple of hours each session.&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__274996"&gt;
  
    .ltag__user__id__274996 .follow-action-button {
      background-color: #010C1F !important;
      color: #aebcd5 !important;
      border-color: #010C1F !important;
    }
  
    &lt;a href="/harald3dcv" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Jw4o-hYQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--1YoVe3np--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/274996/9c0015e4-b5e5-4e60-a1a2-18e9ded8cb07.jpeg" alt="harald3dcv image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/harald3dcv"&gt;Harald Reingruber&lt;/a&gt;
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/harald3dcv"&gt;Software Crafter, 3D Computer Graphics, Augmented Reality, Computer Vision, Image Processing, Hobby DJ&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;We met up this morning on Google Hangouts. I mentioned the effort I had put in over the weekend - for details see my post of yesterday &lt;a href="https://dev.to/theoarmour/2020-04-26-dev-to-glitch-markdown-three-js-3b2g"&gt;2020-04-26 dev.to, glitch, markdown &amp;amp; three.js&lt;/a&gt;. I pointed out that the speed-up was very good but that there were a number of issues with scaling objects and setting their rotation. These issues would be difficult to overcome. Therefore we could could move on to new topics.&lt;/p&gt;

&lt;p&gt;Nonetheless Harald wanted to double click into the issues. We spent much of the two hours hacking code and not really solving anything. At the end of the session we were just about where we started. BUT! But somehow during the session Harald set things up in such a way that the scaling of objects appeared to be working as we hoped they would work. But apart from that brief instant where things looked right we had nothing really. And, as we all know, you cannot un-see something. &lt;/p&gt;

&lt;p&gt;I had seen the scaling work. There were no doubts. Within two hours I had the module totally working as desired - and in just nine lines of code.&lt;/p&gt;

&lt;p&gt;Frankly, the experience was like magic. I came in a negative Ned. Then just a few hours later I became positive Pete&lt;/p&gt;

&lt;p&gt;I am still not entirely convinced that pair programming is "good" use of time. Then again, if "magic" happens - who cares?&lt;/p&gt;

&lt;h2&gt;
  
  
  Nice example
&lt;/h2&gt;

&lt;p&gt;A cookbook example is code that you and others can fork again and again. The example tends to sit a folder somewhere along with many other examples. From time time you visit that folder and click on all the examples to see if one might be doing something you could use just now. It really helps you - and others - if the cookbook example shows more than boxes jumping up and down. So here is the cookbook example that was started over the weekend and is now running at 60 fps. Move your cursor over any of the "bars" to see the population of the city and more.&lt;/p&gt;


&lt;div class="glitch-embed-wrap"&gt;
  &lt;iframe src="https://glitch.com/embed/#!/embed/theo-2020-04-28-population?previewSize=100&amp;amp;path=index.html" alt="theo-2020-04-28-population on glitch"&gt;&lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;Thank you &lt;a href="https://simplemaps.com/data/world-cities"&gt;SimpleMaps&lt;/a&gt; for the free, open source data.&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>javascript</category>
      <category>glitch</category>
      <category>threejs</category>
    </item>
    <item>
      <title>2020-04-26 dev.to, glitch, markdown &amp; three.js</title>
      <dc:creator>Theo Armour</dc:creator>
      <pubDate>Mon, 27 Apr 2020 07:31:16 +0000</pubDate>
      <link>https://forem.com/theoarmour/2020-04-26-dev-to-glitch-markdown-three-js-3b2g</link>
      <guid>https://forem.com/theoarmour/2020-04-26-dev-to-glitch-markdown-three-js-3b2g</guid>
      <description>&lt;h2&gt;
  
  
  Posting to Dev.to?
&lt;/h2&gt;

&lt;p&gt;Blogging as a pastime is a really nice activity for oneself , but where you blog brings other people into the process. So blogging about technical matters on Facebook tends to toward losing followers. Blogging on your own website - unless you are already famous - means almost no readers. Wordpress.com, Blogger.com and Medium.com are all great platforms. I have used and admire all of them. The issue is that the readerships - even when the readers are themselves programmers - don't really have the intention of going to those sites to read about programming.&lt;/p&gt;

&lt;p&gt;I have been following Dev.to for a while and this is my second post. From what I have seen so far, Dev.to is a nice place for quick and easy posting dedicated to discussing topical aspects of coding - while at the same fulfilling a bunch of items on my wishlist.   &lt;/p&gt;

&lt;h2&gt;
  
  
  Real 3D in the post
&lt;/h2&gt;

&lt;p&gt;I build real-time 3D web-pages that work on your computer, tablet or laptop. The three.js WebGL JavaScript library is my single dependency. Everything I do is free and open source and in plain-vanilla JavaScript.&lt;/p&gt;

&lt;p&gt;What this means is that I do not do 2D. I do not do static. I do not do Ruby. I do not do Node. I do not do Videos (2D after all). I do not do databases. So what do I want to be able to show in my blog posts? Real-time, animated interactive 3D. the question is: where can you do this on the web? I have had some success in embedding iframes in WordPress and blogger posts, but the process is by no means satisfactory - let alone easy, fast and producing nice results.&lt;/p&gt;

&lt;p&gt;The other day while going through the help menu I noticed this Liquid Tags thing. Scrolling down screws that I noticed that you could embed Glitch files - actual working scripts - in a Dev.to post. just like this one:   &lt;/p&gt;


&lt;div class="glitch-embed-wrap"&gt;
  &lt;iframe src="https://glitch.com/embed/#!/embed/ta-2020-04-26?previewSize=100&amp;amp;path=index.html" alt="ta-2020-04-26 on glitch"&gt;&lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;WooHoo! Write the text in Markdown. View the 3D demo "inworld". This could be the beginning of a dream come true.&lt;/p&gt;

&lt;h2&gt;
  
  
  Today's script
&lt;/h2&gt;

&lt;p&gt;The script you see above is a side hustle on my main current project &lt;a href="https://www.ladybug.tools/spider-covid-19-viz-3d/"&gt;c10-viz3d&lt;/a&gt;. in 2019, three.js added some modules that make it possible to generate and process huge numbers of 3D faces. I just started playing with these modules and the script above has some of the first demos.&lt;/p&gt;

&lt;p&gt;This afternoon I set one of the scripts to load and display a million boxes. And to my shock and awe, the script worked - six million faces or twelve million triangles were rotating on my screen at 60 frames per second. I couldn't believe it. Neither could my computer. After three minutes it overheated and shut itself down.&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>javascript</category>
      <category>glitch</category>
      <category>threejs</category>
    </item>
    <item>
      <title>C19-VIZ3D: real-time pandemic data in 3D</title>
      <dc:creator>Theo Armour</dc:creator>
      <pubDate>Sun, 26 Apr 2020 19:13:04 +0000</pubDate>
      <link>https://forem.com/theoarmour/c19-viz3d-real-time-pandemic-data-in-3d-17p9</link>
      <guid>https://forem.com/theoarmour/c19-viz3d-real-time-pandemic-data-in-3d-17p9</guid>
      <description>&lt;p&gt;Speedy access to the latest, local COVID-19 data with a familiar interface: the Globe&lt;/p&gt;

&lt;h2&gt;
  
  
  Stable version &lt;a href="https://www.ladybug.tools/spider-covid-19-viz-3d/"&gt;c19-viz3d&lt;/a&gt;
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qF2jUiUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-6a5bca60a4ebf959a6df7f08217acd07ac2bc285164fae041eacb8a148b1bab9.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ladybug-tools"&gt;
        ladybug-tools
      &lt;/a&gt; / &lt;a href="https://github.com/ladybug-tools/spider-covid-19-viz-3d"&gt;
        spider-covid-19-viz-3d
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Speedy access to the latest, local COVID-19 data with a familiar interface: the Globe
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;span&gt;&lt;a href="https://ladybug-tools.github.io/spider-covid-19-viz-3d/readme.html" title="View file as a web page." rel="nofollow"&gt;You are now in a GitHub source code view - click this link to view Read Me file as a web page&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;
&lt;a href="https://raw.githubusercontent.com/ladybug-tools/spider-covid-19-viz-3d/master/#README.md"&gt;COVID-19 Viz3D Read Me&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://raw.githubusercontent.com/ladybug-tools/spider-covid-19-viz-3d/master/./assets/images/c19-v3d-020-04-24.jpg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TI836DmR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/ladybug-tools/spider-covid-19-viz-3d/master/./assets/images/c19-v3d-020-04-24.jpg" width="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Full Screen stable: &lt;a href="https://ladybug-tools.github.io/spider-covid-19-viz-3d/" rel="nofollow"&gt;covid 19 viz3d&lt;/a&gt;
&lt;/h2&gt;
&lt;h3&gt;
Full Screen latest: &lt;a href="https://ladybug-tools.github.io/spider-covid-19-viz-3d/dev/" rel="nofollow"&gt;covid 19 viz3d/dev &lt;/a&gt;
&lt;/h3&gt;
&lt;h3&gt;
&lt;a href="https://ladybug-tools.github.io/spider-covid-19-viz-3d/cookbook" rel="nofollow"&gt;Cookbook&lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Demos of the various modules used to build the viewer&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
&lt;a href="https://ladybug-tools.github.io/spider-covid-19-viz-3d/dev/covid-19-viz-3d-archive" rel="nofollow"&gt;Archive Gallery 2&lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Files for every daily project update since 200-03-19. Some files are better than others.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
&lt;a href="https://ladybug-tools.github.io/spider-covid-19-viz-3d/dev/covid-19-statistics-on-globe" rel="nofollow"&gt;Archive Gallery 1&lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Files from the first day of the project&lt;/li&gt;
&lt;/ul&gt;

Concept
&lt;p&gt;The concept of the web page is to show you the current COVID-19 situation around the entire world in 3 seconds or less.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;View the latest COVID-19 data from John Hopkins University &lt;a href="https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data"&gt;GitHub repository&lt;/a&gt; with interactive 3D&lt;/li&gt;
&lt;li&gt;Provide entry-level programming code - plain-vanilla JavaScript - anybody can copy and make better&lt;/li&gt;
&lt;li&gt;Display all the data in seconds on any device then zoom and rotate and click to see the cases in 3D&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ladybug-tools/spider-covid-19-viz-3d"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Realtime 3D interaction with &lt;a href="https://threejs.org"&gt;three.js&lt;/a&gt; and real-time data harvesting from &lt;a href="https://en.wikipedia.org/wiki/2019%E2%80%9320_coronavirus_pandemic"&gt;Wikipedia Coronavirus Pandemic&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Statistics for 230 countries &amp;amp; states with timely access via &lt;a href="https://developer.github.com/v3/"&gt;GitHub&lt;/a&gt; &amp;amp; &lt;a href="https://www.mediawiki.org/wiki/API:Main_page"&gt;Wikipedia&lt;/a&gt; APIs&lt;/li&gt;
&lt;li&gt;Compare world pandemic case data in seconds on computer, tablet or phone&lt;/li&gt;
&lt;li&gt;Frequent program versions with the entire &lt;a href="https://www.ladybug.tools/spider-covid-19-viz-3d/dev/covid-19-viz-3d-archive"&gt;archive of daily releases&lt;/a&gt; online &amp;amp; viewable&lt;/li&gt;
&lt;li&gt;Plain vanilla Javascript, single dependency, JSON data, GitHub pages hosted&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;This project started on March 15 - a few days after the self quarantine started here in San Francisco. While looking for trackers and finding the Johns Hopkins University (JHU) &lt;a href="https://www.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6"&gt;COVID-19 Dashboard&lt;/a&gt;, I discovered that JHU was making their COV1D-19 data readily available at no charge via their &lt;a href="https://github.com/CSSEGISandData/COVID-19"&gt;GitHub repository&lt;/a&gt;. A great feature of the JHU data is its inclusion of latitude and longitude for each location - making the data easy to add to a map. A second feature is that the data, being from a reliable academic source, may be considered true and authoritative - no fake news here.&lt;/p&gt;

&lt;p&gt;On the other hand there are a number of issues with the JHU website. In 2D maps, locations with big circles quickly overwhelm the locations with little circles. Looking at the charts, although you can tell which are the biggest or smallest quite easily, trying to compare the numbers for locations that are neighbors in the real world (for example: Argentina and Uruguay ) requires a lot of clunky scrolling.&lt;/p&gt;

&lt;p&gt;So, because of the 1. break from the normal rhythm of life, 2. opportunity to use my time in new ways, 3. easy access to great data and 4. issues with existing visualizations, my objective became quickly clear: design a way of tracking the COVID-19 data that is fast, easy and works wherever &amp;amp; whenever.&lt;/p&gt;

&lt;p&gt;Given the isolation, the project also needed to be engaging and enjoyable. A fun thing is to have results appear quickly, so I embarked on a mission to create a new version or release every day. The mantras have been along the lines "Release early - release often", "Move fast and break things" and "Full speed ahead - damn the torpedoes." Six weeks into the project there have been commits every day and new versions almost every day.&lt;/p&gt;

&lt;p&gt;The current status is that technically the project is beginning to settle down. With the assistance and guidance of - Tania, Cynthia, Paul, @Harald, Michal, Terry and others - a good number of the desired features are in place and beginning to work without too many issues. From a human experience point of view the "Interactive legend" and the pop-ups that appear when you touch a country are beginning to work as you might expect. Upcoming versions will be concentrating on increasing the display of frames per second and making more data appear "in-world".  &lt;/p&gt;

&lt;p&gt;There is, however, another aspect to the project that arrived as a "&lt;a href="https://en.wiktionary.org/wiki/bolt_from_the_blue"&gt;bolt from the blue&lt;/a&gt;" that changed everything and - to this day - remains to be tackled in a proper way. This insight arrived as a &lt;a href="https://github.com/ladybug-tools/spider-covid-19-viz-3d/issues/5"&gt;GitHub issue&lt;/a&gt; posted by Oleg Lavrovsky from Bern, Switzerland. The title of his message is "Expressions of Hope" and contains the following words: "I wonder if we could show positive tweets and expressions of hope and gratitude for the courage of health workers around the world."&lt;/p&gt;

&lt;p&gt;Oleg's message reimagines the project. The project must be more than a number delivery system. What you see must be better than just a list of quantities; what you see must provide insights into qualities. Now that we have a working technical foundation and reasonable workflow, we can begin to respond to Oleg's wish list. We want to go from "What you see is what you get" to "What you want to see is what you hoped for". Fingers crossed.&lt;/p&gt;

</description>
      <category>covid19</category>
      <category>threejs</category>
      <category>javascript</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
