﻿<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
<title>yoy.be Why-O-Why</title>
<link>http://yoy.be/computers.html</link>
<description>yoy.be &quot;Why-O-Why&quot; - computers</description><item>
<link>http://yoy.be/d64lvi.html</link>
<title>Delphi 64-bits: set your local variables!</title>
<description>
&lt;p&gt;I'm relatively new to programming for the 64-bits platform, and I ran into the same thing twice now, so I feel I need to write about this. This last time, it even first showed up as an exception that occurred with the release build only, not the debug build! But it showed up consistently, so it was something I could investigate. I found out the specific exception only occurred&amp;nbsp;with the 'Optimization' compiler switch enabled. Apparently 'modern' Delphi has the 'Optimization' switch set to off in default 'Debug' configurations, and on in default 'Release&quot; configurations.&lt;/p&gt;<br />
&lt;p&gt;'Modern' Delphi apparently also has 'Use debug DCUs' on for both 'Debug' &lt;em&gt;and&lt;/em&gt; 'Release', which I very much regret. Most especially because when I introduce newlings to the Delphi debugger, we invariably drop into a core .pas-file,&amp;nbsp;either causing confusion, or the need for an explanation of what that is and why you'd better never make changes there. Or also what's the relation to the program you're building on one side, and the resulting compiled&amp;nbsp;binary code on the other side. Any way breaking away from working with the debugger for the remainder of the lesson.&lt;/p&gt;<br />
&lt;p&gt;What I want to warn about is that apparently the 64-bit compiler no longer provides the internal scaffolding to clear the memory of the local variables in procedures and functions. It also doesn't warn that you're using an unintialized value &lt;em&gt;(1)&lt;/em&gt;. In my case I've seen bugs appear just by switching from 32-bits to 64-bits, so be careful to always have an assignment to local variables before using them. Even if it's integers to zero and booleans to false. (Strings on the other hand, because of them being a pointer-type by nature, are zeroed for you.)&lt;/p&gt;<br />
&lt;p style=&quot;padding-left: 30px;&quot;&gt;&lt;em&gt;(1)&amp;nbsp;&lt;/em&gt;The compiler&amp;nbsp;does warn about you &lt;em&gt;not&lt;/em&gt; using a value set to a local variable. And there's also a difference there between 32-bits and 64-bits compiling there. If you have a superfluous assignment to set a default value at the beginning, and the following code also sets a value in all branches of &lt;em&gt;if&lt;/em&gt;s and &lt;em&gt;case&lt;/em&gt;s, I've found that the 32-bits compiler warns less about the unused assignment than the 64-bits compiler does. Perhaps because it's silently de-duplicating the assignments it's doing behind the scenes anyway? It's a minor inconvenience, but one I can live with, and one that reminds me to check if all local values get an initial value by my code.&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/coding.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_coding.gif&quot; class=&quot;c&quot; alt=&quot;coding&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/computers.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_computers.gif&quot; class=&quot;c&quot; alt=&quot;computers&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/dagboek.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_dagboek.gif&quot; class=&quot;c&quot; alt=&quot;dagboek&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/delphi.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_delphi.gif&quot; class=&quot;c&quot; alt=&quot;delphi&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/werk.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_werk.gif&quot; class=&quot;c&quot; alt=&quot;werk&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
<guid isPermaLink="true">http://yoy.be/d64lvi.html</guid>
<pubDate>Sat, 14 Feb 2026 09:43:29 GMT</pubDate>
</item><item>
<link>http://yoy.be/allsorts700.html</link>
<title>AllSorts 1.2.0.700</title>
<description>
&lt;p&gt;&lt;strong&gt;&amp;rarr;&amp;nbsp;&lt;a href=&quot;AllSorts.html&quot;&gt;AllSorts&lt;/a&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/stijnsanders/tools/releases/tag/rev700&quot;&gt;github release...&lt;/a&gt;)&lt;/p&gt;<br />
&lt;p&gt;Shell extension &quot;AllSorts&quot; had been switched back from Lazarus to Delphi Community Edition some time ago, but this also allows me to add something that I was thinking of for a while, but hadn't taken the time to get it done: an option to 'paste into' a new file any text content currently on the clipboard&amp;nbsp;&lt;em&gt;and&lt;/em&gt; have explorer switch to editing this new file, just like you get with the 'new...' content menu options.&lt;br /&gt;And lo and behold: &lt;a href=&quot;https://github.com/stijnsanders/tools/blob/master/AllSorts/shexAllSorts1.pas#L501&quot;&gt;it's just one API call away!&lt;/a&gt;&amp;nbsp;(Well, two actually, I need the path converted to an item-id-list first...) But it looks like it works (and it looks like it'll be one of those things I'll need a few times a day, just like the &quot;Copy UNC&quot; option!)&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/coding.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_coding.gif&quot; class=&quot;c&quot; alt=&quot;coding&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/computers.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_computers.gif&quot; class=&quot;c&quot; alt=&quot;computers&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/delphi.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_delphi.gif&quot; class=&quot;c&quot; alt=&quot;delphi&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/freeware.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_freeware.gif&quot; class=&quot;c&quot; alt=&quot;freeware&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
<guid isPermaLink="true">http://yoy.be/allsorts700.html</guid>
<pubDate>Tue, 20 May 2025 21:06:25 GMT</pubDate>
</item><item>
<link>http://yoy.be/ildasm.html</link>
<title>Gek ideetje: ilasm.exe</title>
<description>
&lt;p&gt;Hier is een gek ideetje: zou ik met &lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/framework/tools/ilasm-exe-il-assembler&quot;&gt;ilasm.exe&lt;/a&gt; sneller dingen voor dotnet kunnen op basis van &lt;a href=&quot;https://github.com/stijnsanders/strato#strato&quot;&gt;mijn eigen taal&lt;/a&gt;, dan dat ik me in de dingen rond &lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/api/system.codedom.compiler&quot;&gt;CodeDom&lt;/a&gt; en &lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/compiler-api-model&quot;&gt;Roslyn&lt;/a&gt; zou moeten inwerken? Stel, ik doe kleine dingetjes in C#, kijk met &lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/framework/tools/ildasm-exe-il-disassembler&quot;&gt;ildasm.exe&lt;/a&gt; hoe die IL er uit ziet en die doe ik na. Alleen, veel optimizing moet ik niet verwachten waarschijnlijk. Behalve &lt;code&gt;/optimize&lt;/code&gt; die blijkbaar wat instructies kan verkorten, en eventuele achter-de-feiten optimalisatie van de JIT. Maar misschien zou het genoeg zijn om de &lt;a href=&quot;https://www.geeksforgeeks.org/bootstrapping-in-compiler-design/&quot;&gt;bootstrappen&lt;/a&gt;? En/of beter de rest te snappen eenmaal ik verder raak met het &lt;em&gt;echte&lt;/em&gt; compilerwerk. (Of zou ik toch eerst nog eens &lt;a href=&quot;https://www.llvm.org/docs/tutorial/MyFirstLanguageFrontend/LangImpl03.html&quot;&gt;LLVM proberen&lt;/a&gt;?) Ik was voorzichtig begonnen aan een 'Pascal code gen', maar daar komt meer bij kijken dan ik had kunnen denken. En dan doe ik dat al om uit de weg te blijven van &lt;a href=&quot;https://www.geeksforgeeks.org/register-allocation-algorithms-in-compiler-design/&quot;&gt;register allocation&lt;/a&gt;...&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/coding.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_coding.gif&quot; class=&quot;c&quot; alt=&quot;coding&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/computers.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_computers.gif&quot; class=&quot;c&quot; alt=&quot;computers&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/dagboek.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_dagboek.gif&quot; class=&quot;c&quot; alt=&quot;dagboek&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/weblog.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_weblog.gif&quot; class=&quot;c&quot; alt=&quot;weblog&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
<guid isPermaLink="true">http://yoy.be/ildasm.html</guid>
<pubDate>Wed, 24 Nov 2021 19:38:24 GMT</pubDate>
</item><item>
<link>http://yoy.be/cpuidea.html</link>
<title>Quick, write it down: just another CPU design idea</title>
<description>
&lt;p&gt;Ever since learning about &lt;a href=&quot;https://hackaday.com/2013/08/02/the-mill-cpu-architecture/&quot;&gt;the Mill architecture&lt;/a&gt;, and watching an excellent series of MIT 6.004 lectures by Chris Terman (I can't find them on Youtube any more! But there are newer versions of &lt;a href=&quot;https://www.youtube.com/results?search_query=6.004&quot;&gt;6.004&lt;/a&gt; online which probably are great as well.) and reading up on what's new about x64 and RISC-V and ARM, from time to time my mind wanders if you could go crazy and design &lt;a style=&quot;font-style: italic;&quot; href=&quot;https://xkcd.com/927/&quot;&gt;yet another&lt;/a&gt; CPU design that does novel things with the umptillions of available transistors and not have the downsides of the currently popular CPU's.&lt;/p&gt;<br />
&lt;p&gt;So here's an idea I just need to write out of my system, and let you have a look so you can see if there's anything there at all. Modern CPU's use virtual registers to have hyperthreading and speculative execution, and push whatever ahead in the hope it was the right branch to make pipelining work better for the workload at hand. The Mill architecture would handle that a little different and fill the pipeline just with more concurrent threads and interleave those. (At least that's how I understood what would be going on.)&lt;/p&gt;<br />
&lt;p&gt;What if you design a CPU so that it also takes in a &lt;em&gt;larger&lt;/em&gt; set of streams of instructions, also using a bank of virtual registers that get alotted to these streams, but also have &lt;em&gt;hot&lt;/em&gt; memory just like the closest cache is, but use that for the stack. Ideally you could expect programs to keep the current stack-frame fit within one or a few kilobytes, and by having a larger number of streams you could avoid having to switch this stack along with all the rest on context changes (by the OS). Switching the stack and overflowing the stack to and from memory is something that will have to happen, so you'll have decent support for that, but if you're after speed you'll try to avoid it as much as possible.&lt;/p&gt;<br />
&lt;p&gt;Let's have some numbers just to get a clearer mental picture. Let's say a core has &lt;em&gt;support&lt;/em&gt; for 256 streams of instructions. If the work for them is pipe-lines across the rest of the core, addressing them would take 8 bits, so you would see a band of 8 lines pipe-lined to everything everywhere. It's not even required to have 256 instruction decoders, and sub-groups of streams could share commen instruction decoders, but depending on the instruction set design itself, this could turn out to be the bottleneck, but let's find that out with further design and research.&lt;/p&gt;<br />
&lt;p&gt;Let's say each stream gets 4KiB of &lt;em&gt;hot&lt;/em&gt; stack memory, in total is 1MiB which is not unrealistic to have in a modern code nowadays, if I understood that correctly. This special memory could have extra lines so it &lt;em&gt;automatically&lt;/em&gt; flows over into system's memory if the local stack index &lt;em&gt;rolls over&lt;/em&gt;, which perhaps could also help with loading and flushing stack data on context changes.&lt;/p&gt;<br />
&lt;p&gt;With instruction fetching, stack handling and these streams doing their thing with alotted virtual registers, there's a lot covered, but the ofcourse the sweet magic happens in ALU's and related things, so down the pipe-line, according to what instruction decoding prescribes, the streams queue up to get one of the available ALU's to handle an operation.&lt;/p&gt;<br />
&lt;p&gt;This would be a point at which you start on a real design in a simulator, but that's where my knowledge is stronger than my experience. I just decide to start writing things down (right here, right now), let it simmer a bit and maybe pickup starting a first attempt sometime later. If you see what a former attempt like &lt;a href=&quot;https://github.com/stijnsanders/plasm&quot;&gt;plasm (&quot;play assembler&quot;)&lt;/a&gt; looks, don't get your hopes up too much. For now it's good that I wrote the core idea down here. If I ever get down to it again and get something working, you'll read it here. Sometime later.&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/coding.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_coding.gif&quot; class=&quot;c&quot; alt=&quot;coding&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/computers.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_computers.gif&quot; class=&quot;c&quot; alt=&quot;computers&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
<guid isPermaLink="true">http://yoy.be/cpuidea.html</guid>
<pubDate>Wed, 5 May 2021 22:57:34 GMT</pubDate>
</item><item>
<link>http://yoy.be/randomdelphi.html</link>
<title>205B random strings and no 'Delphi'</title>
<description>
&lt;p&gt;&amp;rarr;&amp;nbsp;&lt;a href=&quot;https://en.delphipraxis.net/topic/4573-can-delphi-randomize-string-delphi/&quot;&gt;Delphi-PRAXiS: Can Delphi randomize string 'Delphi'?&lt;/a&gt;&lt;/p&gt;<br />
&lt;p&gt;Ah, that takes me back. A&amp;nbsp;while ago at work I got someone baffled by this statement: It is said that a &lt;a href=&quot;https://en.wikipedia.org/wiki/Infinite_monkey_theorem&quot;&gt;thousand monkeys&lt;/a&gt; banging away on keyboards could at some moment&amp;nbsp;&lt;em&gt;in infinite time&lt;/em&gt; produce the complete work of Shakespeare (and that the combined internet forums are a living counter-proof). Now if you search online you can find an XML download of the combined works of Shakespeare, so it's not hard to find the relative occurance of each letter of the alphabet. One can guess this will have rougly the same values per letter as the total of the English language. So, then, if you take &lt;em&gt;'random'&lt;/em&gt; by its definition, and the monkey's produce text at 1/26 probability for each letter in the alphabet,&amp;nbsp;&lt;em&gt;therefore&lt;/em&gt; they'll &lt;em&gt;never&lt;/em&gt; reach a point in time where they (re)produce the works Shakespeare.&lt;/p&gt;<br />
&lt;p&gt;Now, I'm not a real philosopher, or a statistician, so my thesis could be complete fiction and based on nothing, but sometimes you really got to take a lesson from practice. In theory,&amp;nbsp;&lt;em&gt;in infinite time,&amp;nbsp;&lt;/em&gt;it's ofcourse&amp;nbsp;&lt;em&gt;possible&lt;/em&gt; that something really really inherently possible could emerge out of a random system, but there are characteristigs to anything random, and there are exponential things at play that soon but experimantal set-ups like with the link above, that they&amp;nbsp;&lt;em&gt;probably&lt;/em&gt; would produce the expected outcome in a time-span that exceeds the number of years we've got left before the sun sheds its outer layers and devours the earth, complete with a set of silicon-based machines churning away at putting a series of random characters in sequence and comparing them of some neat stories of a long gone English playwright.&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/coding.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_coding.gif&quot; class=&quot;c&quot; alt=&quot;coding&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/computers.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_computers.gif&quot; class=&quot;c&quot; alt=&quot;computers&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/delphi.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_delphi.gif&quot; class=&quot;c&quot; alt=&quot;delphi&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/werk.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_werk.gif&quot; class=&quot;c&quot; alt=&quot;werk&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
<guid isPermaLink="true">http://yoy.be/randomdelphi.html</guid>
<pubDate>Sun, 28 Feb 2021 17:48:19 GMT</pubDate>
</item><item>
<link>http://yoy.be/splitgoog.html</link>
<title>Google is too big! Time to split it up in pieces.</title>
<description>
&lt;p&gt;I've tought and written before &lt;a href=&quot;http://yoy.be/splitms.html&quot;&gt;about splitting up Microsoft.&lt;/a&gt; With &lt;a href=&quot;https://www.cnn.com/2020/12/16/tech/google-state-antitrust-lawsuits/index.html&quot;&gt;the recent lawsuits against Google,&lt;/a&gt; there's talk about splitting up Google. But how? My mind starts to wonder. If you would ask me, this is what I would say, based on what I know (which may not be the full picture, but I'm just trying to do the same to Google what I did to Microsoft before, let's see where it takes us.)&lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;Department: Advertising&lt;/strong&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;Products:&amp;nbsp;&lt;/strong&gt;online ads and banners&lt;br /&gt;&lt;strong&gt;Revenue:&lt;/strong&gt; price per exposure&lt;/p&gt;<br />
&lt;p&gt;Let's start with the cash cow. I know there's a bit if 'advertising' tied into 'selling' keywords with the search results, but I'm not considering that in this department. So specifically the online ads and banners shown on all kinds of websites, should separate into something independent. The sweet talk that proclaimed benefit from keeping it tied into the &lt;em&gt;big mix&lt;/em&gt;&amp;nbsp;is about being able to offer you more relevant ads, but we know what that means.&amp;nbsp; Your e-mails and search queries go through a farm of computer centers, and you get advertisements for the stuff you just bought. (Or a brand of dental prosthetics you're orthodontist doesn't even work with...) So back to basics, one&amp;nbsp;&lt;em&gt;trustworthy&lt;/em&gt; entity you can call upon to fill a side-bar of your website to show a marketing message of some other company (that's not on your black-list). (Or perhaps that&amp;nbsp;&lt;em&gt;is&lt;/em&gt; on your white-list, but I guess you would have to agree to review newcomers soon enough or your percentage might suffer, or something...)&lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;Department: Android&lt;/strong&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;Products:&lt;/strong&gt; anything Android&lt;br /&gt;&lt;strong&gt;Revenue:&lt;/strong&gt;&amp;nbsp;licensing&lt;/p&gt;<br />
&lt;p&gt;Open source and big companies are a complicated subject. If we stick to the basics, and perhaps &lt;a href=&quot;http://yoy.be/mscc.html&quot;&gt;compare to something different but somewhat similar,&lt;/a&gt; I still think an independant corporate identity could be the steward of the Android project&amp;nbsp;&lt;em&gt;and&lt;/em&gt;&amp;nbsp;sell licenses to get permission to use the Android name, and get a hand on a curated build by the central authority of the project. If you really want, you can fork the project and roll it all yourself, but if you&amp;nbsp;&lt;em&gt;pay&lt;/em&gt; a reasonable price, you could get feedback if you're doing it right, get certifiers from the central authority to guarantee you the binding with your hardware devices is just right&amp;nbsp;&lt;em&gt;and&lt;/em&gt; is future-proofed for at least a version or three.&lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;Department: Chromium&lt;/strong&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;Products:&amp;nbsp;&lt;/strong&gt;Chrome, ChromeOS, (Fuchsia?)&lt;br /&gt;&lt;strong&gt;Revenue:&lt;/strong&gt;&amp;nbsp;not for profit foundation&lt;/p&gt;<br />
&lt;p&gt;Google once decided the best it could do to be sure people could get the best possible access to their web services, is provide the best possible browser. It took an available HTML rendering engine that was the easiest to adapt (WebKit), an advanced new JavaScript engine that was beating benchmarks by compiling the&amp;nbsp;&lt;em&gt;hottest&lt;/em&gt; bits of code of a page (V8),&amp;nbsp;did all the new things the others did also (tabbing, accept more than URL's in the address box),&amp;nbsp;added sandboxing for security and a brute but effective technique to protect against a minor problem browsers sufferd from back then (process crashes, with a process per tab, only a tab crashes). It was a success. It may have been the beginning of the end for Microsoft's Internet Explorer, but it did re-heat the browser competition. It's sad maybe that Mozilla is having difficulty keeping up of late, but the fact that they're a&amp;nbsp;not-for-profit, is something I guess would be a good setting for everything Chrome when Google would split. Microsoft, Brave, Apple (Safari), could all benifit from a central authority to work with and decide over important things about the internals of the generic browser experience. It should keep close ties to Mozilla and web-standards-workgroups, and perhaps even merge. But this may be wishful thinking on my part. There's also a thing called ChromeOS and Fuchsia, and I'm not sure if a full fledged operating system (built around a browser) would fit into this, but it might. Look at Linux, that's doing great as a set of non-profits, but with corporate backing here and there, right?&lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;Department: Search engine&lt;/strong&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;Products:&lt;/strong&gt; search engine&lt;br /&gt;&lt;strong&gt;Revenue:&lt;/strong&gt; keywords auctioning&lt;/p&gt;<br />
&lt;p&gt;There's this story online of an ex-employee of a search service provider, that knew the end was near when fellow employees were using Google themselves. Search for it online, you'll find it. Google cut out the middle man and the search service market evaporated. It started with a thing called PageRank, but what it did was offer better results to anyone's search queries. If you take all the text on the web, and search for bits of text, you're off to one side of the ideal result set. If you think you could catalog all of the web in an extensive category system, you end up on the other side of the ideal result set. (And put a lot of effort in for limited returns.) You could try and build something intelligent that organically aims at this center sweet spot, but remember &lt;a href=&quot;https://en.wikipedia.org/wiki/Goodhart%27s_law&quot;&gt;Goodhart's law&lt;/a&gt;. If you succeed,&amp;nbsp;your new system will get gamed. In other words, &lt;a href=&quot;https://en.wikipedia.org/wiki/Search_engine_optimization&quot;&gt;SEO&lt;/a&gt; was born.&lt;/p&gt;<br />
&lt;p&gt;So the search engine part of Google living on its own could and should still offer to show 'paid for' search results on the keywords stakeholders select and/or organic statistics indicate as good candidates. Since there's money envolved, the engine needs to be transparent (of the crystal clear kind). In tune with the new spirit, it should&amp;nbsp;be based on anonymity and respect privacy to a high degree. Even so, it could and should still actively promote societal inclusivity and combat&amp;nbsp;(internationally?) criminal behaviour like enciting violence or popular misleading.&lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;Department: Productivity Software&lt;/strong&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;Products: &lt;/strong&gt;G-Suite apps&lt;strong&gt;&lt;br /&gt;Revenue:&lt;/strong&gt;&amp;nbsp;subscriptions&lt;/p&gt;<br />
&lt;p&gt;It will need a new name though.&amp;nbsp;I guess it started with GMail (which itself may be a response to &lt;a href=&quot;https://en.wikipedia.org/wiki/Outlook_on_the_web#History&quot;&gt;Outlook Web Access&lt;/a&gt;)&amp;nbsp;that hit a sweet spot for people in search of a low bar to clear to get started with e-mail, and also with established users that appreciate improved defaults in e-mail handling. (Yes, &lt;a href=&quot;https://duckduckgo.com/?q=outlook+threaded+conversation&quot;&gt;Outlook has a threaded conversation view,&lt;/a&gt; but not by default, I remember it was buried in the custom column sort group view something in Outlook 2000.) A logical extension was a calendar and the rest of the usual apps in an office suite typical attachments are made with (word-processor, spreadsheet, slide show).&amp;nbsp;That it would all get delivered through the browser, now looks like an evolution that would have happened anyway. But it may be easy to take heavy-hitting modern browsers for granted these days. Anyway,&amp;nbsp;their office suite has managed to catch up fast and is almost feature complete with most other office suites out there.&lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;Department: Cloud Services&lt;/strong&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;Products: &lt;/strong&gt;anything cloud&lt;strong&gt;&lt;br /&gt;Revenue:&amp;nbsp;&lt;/strong&gt;pay for what you use&lt;/p&gt;<br />
&lt;p&gt;It takes a lot of resources and effort to put up all this machinery in data centers to churn away and convert network traffic to and from storage. It takes a specific organisation to make it all work, and it's inceasingly done with a distance&amp;nbsp;to what it is you're clients are actually up to. As a provider you've got a set of virtual machines running, and everything everywhere has the hell encrypted out of it. In the&amp;nbsp;ideal case, you &lt;em&gt;couldn't&lt;/em&gt; even get to know what you're clients are actually working on if you really wanted to, by design. (Though &lt;a href=&quot;http://cyberlaw.stanford.edu/blog/2020/01/earn-it-act-how-ban-end-end-encryption-without-actually-banning-it&quot;&gt;some find this too ideal&lt;/a&gt;.) What I noticed is that much of the cloud offerings out there&amp;nbsp;like AWS and Microsoft Azure, are getting a lot of parity: for everything cloud, there's a roughly similar offering from each of the providers. In an ideal world, you can mix and match to your benifit, but since they're still tied to the data-centers they run in, we're still stuck in one of the silo's unless we pay extra to set up a dedicated link between them.&lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;Department: Research&lt;/strong&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;strong&gt;Products:&amp;nbsp;&lt;/strong&gt;?&lt;br /&gt;&lt;strong&gt;Revenue:&amp;nbsp;&lt;/strong&gt;?&lt;/p&gt;<br />
&lt;p&gt;Being Google, the research that's been done ends up all over the place, or nowhere (Wave? Glass?). They start a thing called SPDY (pronounced &quot;speedy&quot;), and it ends up parts in HTTP 3 and part in a &lt;a href=&quot;https://en.wikipedia.org/wiki/QUIC&quot;&gt;kind-of successor to TCP&lt;/a&gt;?&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Waymo#Project_Chauffeur&quot;&gt;They're building cars&lt;/a&gt;, and also a boat, &lt;a href=&quot;https://en.wikipedia.org/wiki/Google_barges&quot;&gt;or is it a barge&lt;/a&gt;?&lt;/p&gt;<br />
&lt;p&gt;To their credit, it's actually OK that Alphabet Inc. was created as a group with Google as a member. It opens up the endeavours thet get 'promoted' into members of Alphabet of their own for a possible future on their own, or under another corporate parent. One of these is &quot;X&quot;,&amp;nbsp;which apparently handles any undefined research going on. Anyway, things like&amp;nbsp;that&amp;nbsp;may be going&amp;nbsp;on in any large young tech firm, so why not&amp;nbsp;out of one of the newly formed ex-Google-chunks outline above.&lt;/p&gt;<br />
&lt;p&gt;And I'm sure I forgot some things that Google is also doing, but I think I've listed the most important things here.&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/actueel.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_actueel.gif&quot; class=&quot;c&quot; alt=&quot;actueel&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/beurs.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_beurs.gif&quot; class=&quot;c&quot; alt=&quot;beurs&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/computers.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_computers.gif&quot; class=&quot;c&quot; alt=&quot;computers&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
<guid isPermaLink="true">http://yoy.be/splitgoog.html</guid>
<pubDate>Fri, 18 Dec 2020 22:42:12 GMT</pubDate>
</item><item>
<link>http://yoy.be/winmslinux.html</link>
<title>What if they replaced Windows with Microsoft Linux...</title>
<description>
&lt;p&gt;&amp;rarr;&amp;nbsp;&lt;a href=&quot;https://linux.slashdot.org/story/20/10/11/0225229/what-if-they-replaced-windows-with-microsoft-linux&quot;&gt;What if they replaced Windows with Microsoft Linux&lt;/a&gt;&lt;/p&gt;<br />
&lt;p&gt;Hmm, in the very far future, sure, why not. But right now, it may be a little harder than these people make it look like. So, where are we now and what would it take? I'll do some projections here based on what I personally feel and think, so I may be far off, but I hope I can make some points some people may be overlooking in this matter...&lt;/p&gt;<br />
&lt;p&gt;We've got WSL which was a great first step in the right direction. The most important thing here, and I guess it follows from the work that was done to get Docker working on Windows, is that there's &lt;em&gt;deep deep down&lt;/em&gt; in the mechanics of the kernal, made an opening into the very fiber of the very thing that makes Windows Windows, and a base into the task scheduler so it could work with both the heavy-handed old-style Windows processes, and the lighter, moderner Linux-like processes. (I believe it was chosen to call them &lt;em&gt;pico-processes&lt;/em&gt; because I guess at that level you'll not really want to get tied to something specific like Linux there and then...) What I really think is the most important that this serves as a precedent, that the kernel team is listening and willing to budge in any direction at all. So yes perhaps into a hybrid model where Windows allows a little more *nix very close to it's internals, and move from there to a little more and more of this and a little less and less of the old until it's all fine and ready to &lt;em&gt;move up&lt;/em&gt; into an emulation layer. At this point they should have seen this coming, Windows 95 had to be able to run 16-bit applications for DOS, and ran 'Windows on Windows' 16-bit application with a translation layer that would convert all the calls to the underlying system 32-bits system. So, if you're on Windows, check your machine now for &lt;code&gt;C:\Windows\SysWOW64&lt;/code&gt;, yes there's another emulation layer your 32-bits applications use to get work done on the underlying 64-bits system. I guess they're very hard at work as we speak to have a &quot;Windows x64 on Windows ARM&quot; as we speak, I've noticed some news items about that here and there recently.&lt;/p&gt;<br />
&lt;p&gt;(Which I regret a little bit, to be honest. I guess things could get a lot smoother to first have a &quot;Windows ARM on Windows x64&quot; sub-system and start promoting the developer tools to get your current applications &lt;em&gt;already&lt;/em&gt; running in (fake) ARM and have the &lt;em&gt;plain&lt;/em&gt; user completely oblivious. Performance will probably be comparable, and the gain you'd get when you finally get a hand on Windows-ready ARM hardware would be even greater because they've already prepared for ARM... But this may be all wishful thinking on my part, and a hard sell to management that need to get to maximum success with minimal investment...)&lt;/p&gt;<br />
&lt;p&gt;WSL 2 is another step in this direction, it lets go of talking the speach a kernel would, and talks all like 'system' what a kernel itself understands. It's only a step though, and what I'm really looking forward to is having a full-on Linux application play nice with the Windows graphical environment. There's a lot of differences to overcome there to make it happen, but it would open the way for the next steps. If there's a way to have both side by side, the work can start on the mirror movement: having a revised Windows graphical sub-system that talks with a *nix-style graphical setup, and have that as primary agent handling the graphical environment. With that you'll have much more in place to build a solution that runs as a Linux process and emulates a system with the DLL's in place to make an EXE work.&lt;/p&gt;<br />
&lt;p&gt;I know too little about the Linux kernel to know if this would mean Linux needs to provide the neccessary to have &lt;em&gt;pico-processes&lt;/em&gt; of its own (or better &lt;em&gt;giga-processes&lt;/em&gt; to fully reverse the projection), so this emulation layer actually shows in process enumeration that there's an EXE image running together with the other ELF-based images. Then again, I don't even know if Wine has this now, or even needs it. It would be nice though, that in this progress Microsoft pays respect to what went into Wine and silently and respectfully makes it so that the end-result nicely overlaps with Wine, progressing into a single strong solution to run Windows programs on Linux.&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/actueel.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_actueel.gif&quot; class=&quot;c&quot; alt=&quot;actueel&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/computers.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_computers.gif&quot; class=&quot;c&quot; alt=&quot;computers&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
<guid isPermaLink="true">http://yoy.be/winmslinux.html</guid>
<pubDate>Sun, 11 Oct 2020 19:26:39 GMT</pubDate>
</item><item>
<link>http://yoy.be/millrisc.html</link>
<title>Could you do a mill architecture with RISC-V?</title>
<description>
&lt;p&gt;I wondered today if it would be feasable to build a processing unit according to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Mill_CPU_Architecture&quot;&gt;mill architecture&lt;/a&gt; with the &lt;a href=&quot;https://en.wikipedia.org/wiki/RISC-V&quot;&gt;RISC-V&lt;/a&gt; instruction set. But as always, I also wonder if I'm out of my league and know far too little of these things to come even close to forming an accurate answer, or even if I'm anywhere close to a good idea. If I understood correctly, the mill architecture does what modern CPU's already do: use a bank of virtual registers with multiple heavily pipelined streams of translated instructions. CPU's that do hyperthreading have two streams of instructions, but that's about it. I'm really rooting for the first article I read about a real system that has more than two, but with just a little imagination, and if you know the 'price per transistor' keeps going down, you can image a huge bank of virtual registers, with a bank of ALU's close, that processes a 'large' number of instruction streams. Ideally even a totally variant number of instruction streams. This may be a caching nightmare, but instead of &lt;em&gt;wasting&lt;/em&gt; a lot of in-system logic to do branch prediction and other bookkeepingof what an instruction stream is doing, what if you could just load &lt;em&gt;another&lt;/em&gt; instruction stream, just up until you get all of the piplined stages fully occupied...&lt;/p&gt;<br />
&lt;p&gt;Alas, I'm so much out of that business that I guess I need to conclude I'm a wild dreamer. I may stumble on a good idea now and then, but know too little to be sure. So I'll note it down here. I hope I haven't bored you, and with just a little luck, you &lt;em&gt;are&lt;/em&gt; able to judge about this idea. If so let me know...&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/actueel.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_actueel.gif&quot; class=&quot;c&quot; alt=&quot;actueel&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/coding.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_coding.gif&quot; class=&quot;c&quot; alt=&quot;coding&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/computers.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_computers.gif&quot; class=&quot;c&quot; alt=&quot;computers&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/dagboek.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_dagboek.gif&quot; class=&quot;c&quot; alt=&quot;dagboek&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
<guid isPermaLink="true">http://yoy.be/millrisc.html</guid>
<pubDate>Tue, 29 Sep 2020 21:26:48 GMT</pubDate>
</item><item>
<link>http://yoy.be/hppk300.html</link>
<title>HP Pavilion Keyboard 300</title>
<description>
&lt;p&gt;&lt;em&gt;Dear HP,&lt;/em&gt;&lt;br /&gt;&lt;em&gt;More specifically: Dear HP-person that was responsible for the design of the HP Pavilion Keyboard 300,&lt;/em&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;br /&gt;&lt;em&gt;Congratulations on the great design. I appreciate the effort that went into designing a keyboard that brings the evolution of the laptop design to the desktop user. (Though I have bought this keyboard because the keys on my laptop are coming loose. It's not an HP, don't worry.) The result is a sleek minimal design that fits well with most other accessories of contemporary office work.&lt;/em&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;br /&gt;&lt;em&gt;&quot;Modern&quot; applications are using less and less of the function keys. So I understand that keys marked &quot;f1&quot; though to &quot;f12&quot; now have a primary function that controls multi-media, the screen, or open the search or configuration dialogs. If you need to press a function key, you can still unlock this function by combining the key press with the &quot;fn&quot; key. I'm willing to adapt. (Albeit grudgingly.) I'm also willing to forgive the dumb pricks from electronics that forgot to provide a 'fn-lock' feature, for example under a combination of &quot;fn&quot; and the padlock key, or &quot;fn&quot; and &quot;esc&quot;.&lt;/em&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;br /&gt;&lt;em&gt;A daring design decision must have been to drop the num-lock, caps-lock and scroll-lock indicators. They take up much space and are in a place that people don't notice anyway. Considering nobody ever has 'num' unlocked anymore &amp;mdash; all keyboards have dedicated arrow keys, now &amp;mdash;&amp;nbsp; I was pleasantly surprised to find a &quot;paste&quot; key where &quot;num lock&quot; is on other keyboards! It must have been a such big departure from current standards, that you've decided to keep a &quot;scr lk&quot; button as a reminder of all the good times. I too think there must be enough people using it in their daily work that it still merits a key of its own.&lt;/em&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;br /&gt;&lt;em&gt;You can hear I'm quite positive. The one big regret, though, is you stole my right &quot;ctrl&quot;. I used that one a lot. Especially with one-hand combinations with the arrow keys. Now I get &quot;&amp;lt;&quot; and the cursor not in the place I wanted. That'll be a lot harder to adapt to. It'll take so much concentration that I'd want to temporarily halt my music, but that's easily done now with a single press of the &quot;f5&quot; key &amp;mdash; excuse me the &quot;⏯&quot; key.&lt;/em&gt;&lt;/p&gt;<br />
&lt;p&gt;&amp;nbsp;&lt;/p&gt;<br />
&lt;p&gt;&lt;em&gt;Congratulations and thank you. I'll be thinking about you a lot.&lt;/em&gt;&lt;/p&gt;<br />
&lt;p&gt;&amp;nbsp;&lt;/p&gt;<br />
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update:&lt;/strong&gt; I recently learned this may be limited to AZERTY-versions of this keyboard. Still, if you are responsible for the above, my angry gaze is aimed at you.&lt;/em&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/computers.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_computers.gif&quot; class=&quot;c&quot; alt=&quot;computers&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/dagboek.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_dagboek.gif&quot; class=&quot;c&quot; alt=&quot;dagboek&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
<guid isPermaLink="true">http://yoy.be/hppk300.html</guid>
<pubDate>Thu, 2 Jul 2020 09:48:37 GMT</pubDate>
</item><item>
<link>http://yoy.be/ggggrgviz.html</link>
<title>Carefull with Gogole Sheet CSV export</title>
<description>
&lt;p&gt;Ready for another story from the trenches? So image a Google Sheet made by someone else, with all kinds of dat in about 30 columns, of about a few thousand rows. Yes, it's a stretch to keep using Sheets for that, but this data will serve for&amp;nbsp;the analysis for a decent application to manage this with... That probably won't be my team handling that project, but I had to do a quick cross reference of this data with the data in the database of one our current projects. The best way to do cross-checks is get the sheet into a table in the database to run queries. I guess you should be able to import a CSV pretty easily, right? I searched around and found this:&lt;/p&gt;<br />
&lt;p&gt;&lt;code&gt;https://docs.google.com/spreadsheets/d/{key}/gviz/tq?tqx=out:csv&amp;amp;sheet={sheet_name}&lt;/code&gt;&lt;/p&gt;<br />
&lt;p&gt;Which I thought would provide the data in just the way ready for me to import. Wrong. The second column just happened to have codes for all of the items that are numeric for the first few hundreds of items, and then alphanumeric codes. At first I thought the CSV importer was fouling up, but I hadn't looked at the CSV data itself. Turns out this CSV exporter checks the first few lines (or perhaps even only the first one!), guesses the column is numeric, and then just exports an empty value for all non-numeric values in that column!&lt;/p&gt;<br />
&lt;p&gt;The code in that column was only in a number of cases needed to uniquely identify the items, so I first was looking for a reason why my cross-match was throwing duplicates in all of the wrong places. Ofcourse. Weep one tear for the time lost, then move on. Take&amp;nbsp;solace in the wisdom&amp;nbsp;gained.&lt;/p&gt;<br />
&lt;p&gt;I solved it by using the CSV from the Export menu. I only needed it once so I didn't get a URL for that.&amp;nbsp;&lt;br clear=&quot;all&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/coding.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_coding.gif&quot; class=&quot;c&quot; alt=&quot;coding&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/computers.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_computers.gif&quot; class=&quot;c&quot; alt=&quot;computers&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/dagboek.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_dagboek.gif&quot; class=&quot;c&quot; alt=&quot;dagboek&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/internet.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_internet.gif&quot; class=&quot;c&quot; alt=&quot;internet&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://yoy.be/werk.html&quot;&gt;&lt;img src=&quot;http://yoy.be/cat/cat_werk.gif&quot; class=&quot;c&quot; alt=&quot;werk&quot; width=&quot;50&quot; height=&quot;13&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
<guid isPermaLink="true">http://yoy.be/ggggrgviz.html</guid>
<pubDate>Fri, 26 Jun 2020 13:18:29 GMT</pubDate>
</item></channel></rss>