<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Microsoft | AkitaOnRails.com</title><link>https://akitaonrails.github.io/en/tags/microsoft/</link><description>Fabio Akita's blog — tech, career, and assorted geek topics. English edition.</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 19 Oct 2026 23:20:51 +0000</lastBuildDate><atom:link href="https://akitaonrails.github.io/en/tags/microsoft/index.xml" rel="self" type="application/rss+xml"/><item><title>Your Windows May Be Crippled Without You Knowing. Check This!!</title><link>https://akitaonrails.github.io/en/2025/05/21/your-windows-may-be-crippled-without-you-knowing-check-this/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2025/05/21/your-windows-may-be-crippled-without-you-knowing-check-this/</guid><pubDate>Wed, 21 May 2025 17:15:00 -0300</pubDate><description>&lt;p&gt;I usually don&amp;rsquo;t bother documenting silly Windows problems, but this one in particular got me really annoyed, so I&amp;rsquo;m going to report the sequence of events. But let me just drop the spoiler right now: open Control Panel and Power Options on your Windows and check if it&amp;rsquo;s not in &amp;ldquo;Power saver&amp;rdquo; mode. Get it out of that garbage, at the very least leave it on Balanced, but if it&amp;rsquo;s a desktop PC bump it up to &amp;ldquo;High Performance&amp;rdquo; or &amp;ldquo;Ultimate Performance&amp;rdquo;. Thank me later.&lt;/p&gt;</description><content:encoded><![CDATA[<p>I usually don&rsquo;t bother documenting silly Windows problems, but this one in particular got me really annoyed, so I&rsquo;m going to report the sequence of events. But let me just drop the spoiler right now: open Control Panel and Power Options on your Windows and check if it&rsquo;s not in &ldquo;Power saver&rdquo; mode. Get it out of that garbage, at the very least leave it on Balanced, but if it&rsquo;s a desktop PC bump it up to &ldquo;High Performance&rdquo; or &ldquo;Ultimate Performance&rdquo;. Thank me later.</p>
<p>Now sit down, here comes the story.</p>
<p>I built a pretty decent PC for my girlfriend: Intel i7 12th Gen 8 cores, 32GB DDR4-2400, NVIDIA RTX 3090, MSI Edge z790 motherboard, NVME and I even hooked up a Synology DS1621+ NAS on a 2.5Gbps network - because she&rsquo;s a content creator and has A LOT of video to edit. Modesty aside, it turned out pretty nice:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/a8c82k3ocnpu1jamxb9w0z1fx2cf" alt="pc branco"  loading="lazy" /></p>
<p>Everything worked very well for a long time, but eventually, for no apparent reason, everything started feeling kind of slow. Not completely slow, but sometimes web pages seemed to stutter while loading. I&rsquo;d click on the Windows Start menu and it seemed to freeze up. Sometimes Explorer would hang and I&rsquo;d need to go to Task Manager and restart the process manually. Several super inconvenient things but none of them throwing any explicit &ldquo;error&rdquo;. It just felt &ldquo;weird&rdquo;.</p>
<p>I&rsquo;m a Linux user. My main PC is Manjaro Linux. I only use Windows on my gaming mini-PCs, exclusively to run Steam and some emulators. I avoid installing anything on them at all costs. Because I know how much of a pain it is to diagnose Windows after some weird program invades it.</p>
<p>I went after the usual suspects. She had installed games for streaming, like Valorant, Genshin Impact and stuff like that. I always suspect anti-cheats, the crap from Riot Vanguard or Easy or VAC. I started by uninstalling all the games. But I always think anti-cheat is like malware: once installed, it will never leave the system. I uninstalled everything, but that feeling of kind of freezing, kind of slow, intermittent, remained.</p>
<p>I tried the next suspects: peripheral software, like Elgato, Logitech, Razer stuff that install a bunch of garbage on your machines, and recently I was reading about the malware that was shipping with all of them. Watch this GamersNexus video to understand the house of cards that the whole peripheral industry with RGB has become:</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/H_O5JtBqODA"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<p>Even uninstalling all of them, still the same behavior: kind of slow, kind of freezing, unstable.</p>
<p>Let&rsquo;s try to go deeper, and for that you have to install tools like <a href="https://learn.microsoft.com/en-us/sysinternals/downloads/autoruns"target="_blank" rel="noopener">Sysinternals Autoruns</a> to see if there&rsquo;s anything starting up (things hidden in the Registry for example). I tried to disable everything I thought was suspicious.</p>
<p>Nothing. By that point I had also made sure that the newest MSI BIOS firmware was installed. I checked that nothing had been turned off in the BIOS, XMP profile was ok, no fast-boot and stuff like that.</p>
<h3>Is It the Internet?<span class="hx:absolute hx:-mt-20" id="is-it-the-internet"></span>
    <a href="#is-it-the-internet" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Since most of the usage is internet and it seemed &ldquo;slow&rdquo;, I thought it might be network problems. Vivo&rsquo;s router? The plan? Wifi with interference?</p>
<p>Running out of patience I decided to go nuclear on the internet idea. In fact, opening the <a href="https://speed.cloudflare.com/"target="_blank" rel="noopener">Cloudflare Speed Test</a> page I could see that the speed itself was ok, but the latency was VERY high, jitter high and, mainly, PACKET LOSS was over 15%. That&rsquo;s not normal, it has to be 0%.</p>
<p>Taking advantage of a trip to Miami I brought back a TP-LINK BE9300 router for Wi-fi 7, and I also bought a compatible Wi-fi 7 PCIe card. I turned off Vivo&rsquo;s Wi-fi router and bumped the plan up to 800Mbps. And indeed, the internet improved a lot:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/ogesvmtex2ek825hel7d4l0f5i30" alt="vivo internet"  loading="lazy" /></p>
<p>Latency dropped, jitter dropped, packet loss went to 0%.</p>
<p>But this didn&rsquo;t fix the problem. Out of nowhere the browser would pause when loading some page. That feeling of kind of slow, kind of freezing. And yes, I tried switching from Edge to Chrome, to Firefox, to everything. Nothing made any difference. The internet really did get faster, but Windows itself didn&rsquo;t seem to improve much and while browsing, it was getting slower and slower. So the problem wasn&rsquo;t the internet.</p>
<p>I was running out of options. Everything that could be manually cleaned in Windows, I cleaned. There was almost nothing left to delete - and I delete things without mercy. But I always had it in my head that it was some malware, something that loads before boot, some &ldquo;ROOTKIT&rdquo;. Anti-cheats are Rootkits by definition. They load even before the kernel and from that point on, the compromised system can no longer be trusted, because no tool will be able to find it.</p>
<p>Assuming at that point it had to be a compromised system, I decided to go with the nuclear option: reinstall everything from scratch. We backed up the data and off I went to reinstall from scratch.</p>
<h3>Reinstalling DID NOT WORK<span class="hx:absolute hx:-mt-20" id="reinstalling-did-not-work"></span>
    <a href="#reinstalling-did-not-work" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Now it got worse.</p>
<p>With Windows 11 Pro, freshly installed, guaranteed with no third-party software installed, it still had the same behavior of kind of slow, kind of freezing. The start menu wouldn&rsquo;t let me click on anything. I had to open task manager and kill Explorer manually to get it to work again.</p>
<p>I spent some time staring at Task Manager, but there wasn&rsquo;t any process running that I could suspect further: it was bare-bones Windows. I had even run a <a href="https://github.com/Raphire/Win11Debloat"target="_blank" rel="noopener">Debloater</a> to uninstall unnecessary Microsoft apps like Teams.</p>
<p>But lo and behold, from staring at task manager so much, I saw that I had been ignoring an important piece of data. See if you can spot it:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/pky39kkwcbuyqocwpj15n36i9gai" alt="cpu low"  loading="lazy" /></p>
<p>The image is kind of messed up because I took a photo of the monitor with my phone. The refresh rate clashes with the camera&rsquo;s and you get this &ldquo;grid&rdquo;, but I think you can still read it.</p>
<p>Even when you have almost no program running, it&rsquo;s not natural for the CPU to be at such a low clock, 0.50Ghz - HALF A GIGAHERTZ. This Intel i7 can go above 4Ghz and the base clock is 2Ghz.</p>
<p>I opened browsers, opened tabs, kept monitoring, and it never went above 1.5Ghz. An occasional spike to 2Ghz for 1 second and then it dropped below 1Ghz again. Then I thought: could the AIO be failing??</p>
<p>Looking at Event Viewer you could see when the Start menu (which is part of Explorer.exe) stopped working and froze: it logs it as &ldquo;Hanging Events&rdquo; code 1002.</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/dtugk013p4decud6zo1dzg3rjhxr" alt="event viewer"  loading="lazy" /></p>
<p>See all those Errors? All Hanging Events, and &ldquo;hanging&rdquo; is exactly the behavior: something seems to &ldquo;hold&rdquo;, &ldquo;freeze&rdquo; and only by killing the process does it come back to working.</p>
<p>And this was happening before and also AFTER reinstalling everything from scratch. Something seemed fundamentally wrong with the hardware itself. With the super low clock, this behavior starts to make sense: it&rsquo;s so slow it can&rsquo;t even process basic things. Click several times on the Start Menu (which will be digging through recent documents, updating the list of applications, opening the search bar, etc) and there&rsquo;s no clock to process all that while there&rsquo;s still Windows Defender in background, browser tabs processing.</p>
<h3>Could It Be Thermal Throttle??<span class="hx:absolute hx:-mt-20" id="could-it-be-thermal-throttle"></span>
    <a href="#could-it-be-thermal-throttle" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Since Windows was wiped clean, it can&rsquo;t be anti-cheat anymore, it can&rsquo;t be some weird anti-virus, it can&rsquo;t be malware, it&rsquo;s not the internet, it had to be something EXTERNAL, that was what made sense.</p>
<p>I opened the PC and left it open so I could feel if the heatsink was getting absurdly hot. If it was, it would mean my AIO (Coolermaster Watercooler) had started to fail.</p>
<p>It&rsquo;s normal for the CPU, when it overheats, to drop the clock to avoid burning the chip. This is called &ldquo;THERMAL THROTTLING&rdquo;.</p>
<p>And again, weird: it was COLD to the touch!!!</p>
<p>No way. I opened the BIOS to re-check fan profiles, but everything was normal:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/yl02sk0dug6zj9d1gen877d22gnw" alt="cpu fans"  loading="lazy" /></p>
<p>That&rsquo;s when it finally hit me:</p>
<pre><code>**LET ME CHECK THE POWER SETTINGS**
</code></pre>
<p>On a normal PC/laptop, it should show something like this:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/a5dkm6eag4ebma6ye1i1mnzphy3s" alt="Power Settings"  loading="lazy" /></p>
<p>By default, Windows always boots in &ldquo;Balanced Mode&rdquo;.</p>
<p>But on my girlfriend&rsquo;s PC, <strong>I have no idea why</strong>, there was no Power Mode option!!! And I&rsquo;m on a Windows 11 Pro with a paid license!!</p>
<p>That&rsquo;s weird, but I know that in the old Control Panel, there&rsquo;s a Power Options entry:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/70ymku67f5ufp0pd76jp0b2hqjx2" alt="control panel"  loading="lazy" /></p>
<p>AND THERE&rsquo;S THE PROBLEM:</p>
<p>It was on &ldquo;Power saver&rdquo;!!!</p>
<p>How did that happen? I have absolutely no idea. REMEMBER: I had reinstalled Windows from scratch. This is right after reinstalling!!</p>
<p>On a laptop this profile makes sense, to save battery when you don&rsquo;t have an outlet. But on a desktop PC, which is my case, it makes no sense at all!! I switched to &ldquo;Ultimate Performance&rdquo; and look at the task manager now:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/5hg5d85ivuxv9tw5si21wcb3hm5p" alt="cpu high"  loading="lazy" /></p>
<p>NOW WE&rsquo;RE TALKING!! Above 4Ghz!!!</p>
<p>The NORMAL range for this CPU is around 4Ghz, with Turbo Boost of 5Ghz. But in Power saver mode, it NEVER goes above 2Ghz and idles at 500Mhz. In other words, everything was <strong>TEN TIMES SLOWER</strong>, sometimes it tried to boost and was still <strong>FIVE TO TWO TIMES SLOWER</strong>. And it&rsquo;s intermittent!!!</p>
<p>Testing installing apps, browsing, etc, everything is now working normally, no freezing, no feeling of slowness. Start menu doesn&rsquo;t hang anymore - because now there&rsquo;s enough CPU to process the crap it needs in background.</p>
<h3>Conclusion<span class="hx:absolute hx:-mt-20" id="conclusion"></span>
    <a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>CHECK POWER OPTIONS IN CONTROL PANEL!!!!</p>
<p>Again: I had JUST REINSTALLED WINDOWS. It was wiped clean and, by default, it came up in Power Saver mode.</p>
<p>I have no idea why it did that, I don&rsquo;t know if it always does that, I don&rsquo;t know if it failed to recognize the MSI motherboard, I don&rsquo;t know what combination of hardware factors can make Windows fall back to this.</p>
<p>But it&rsquo;s ALARMING that it does this without warning. There&rsquo;s no error message. There&rsquo;s no notification. It doesn&rsquo;t show up in Event Viewer. In other words, even a Power User like myself has to randomly suspect &ldquo;hmm, let me check the power profile&rdquo;.</p>
<p>Lots of people with Windows must be feeling this slowness and freezing and thinking &ldquo;hmm, my PC is just crap, I need to save up to buy another one&rdquo;, without knowing that maybe it&rsquo;s just crippled by this power profile and in reality their PC is 2x to 5x, even 10x faster and they don&rsquo;t know it! That&rsquo;s not a small difference!</p>
<p>POWER SAVER MODE is a huge piece of garbage, it has no practical use and it shouldn&rsquo;t even exist. It&rsquo;s one of those legacy things that give Windows a terrible experience - because it doesn&rsquo;t warn you.</p>
<p>Remember those 1002 hanging events error codes? If you go searching on Google, every forum will tell you to run diagnostic programs, uninstall stuff, or reinstall Windows. None of them mention anything about the power profile.</p>
<p>I hope this helps someone else!</p>
]]></content:encoded><category>microsoft</category><category>performance</category><category>hardware</category></item><item><title>Running Arch Linux over Windows 10!</title><link>https://akitaonrails.github.io/en/2018/04/29/running-arch-linux-over-windows-10/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2018/04/29/running-arch-linux-over-windows-10/</guid><pubDate>Sun, 29 Apr 2018 22:06:00 -0300</pubDate><description>&lt;p&gt;Ok, anyone that has been reading my blog for the past year or two knows how I &lt;a href="http://www.akitaonrails.com/archlinux"target="_blank" rel="noopener"&gt;enjoy Arch Linux&lt;/a&gt; (in particular Manjaro Gnome).&lt;/p&gt;
&lt;p&gt;I am also still very much intrigued by the idea of Windows Subsystem for Linux (or WSL) which properly debuted in the &lt;a href="http://www.akitaonrails.com/en/2016/07/26/o-ano-do-linux-no-desktop-esta-usavel"target="_blank" rel="noopener"&gt;Windows 10 Anniversary Edition&lt;/a&gt; back in mid-2016.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s been almost 2 years and we&amp;rsquo;re expecting some significant updates to WSL compatibility and performance for the next &lt;a href="https://winaero.com/blog/command-line-wsl-improvements-windows-10-version-1803/"target="_blank" rel="noopener"&gt;Spring Creators Update&lt;/a&gt; (or version 1803) scheduled to arrive on April 30, 2018. This brings it closer to making WSL actually usable for professional programmers. Just to give you an idea, right now you will have orders of magnitude better performance if you run your favorite Linux distro inside Virtualbox or VMWare Workstation.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Ok, anyone that has been reading my blog for the past year or two knows how I <a href="http://www.akitaonrails.com/archlinux"target="_blank" rel="noopener">enjoy Arch Linux</a> (in particular Manjaro Gnome).</p>
<p>I am also still very much intrigued by the idea of Windows Subsystem for Linux (or WSL) which properly debuted in the <a href="http://www.akitaonrails.com/en/2016/07/26/o-ano-do-linux-no-desktop-esta-usavel"target="_blank" rel="noopener">Windows 10 Anniversary Edition</a> back in mid-2016.</p>
<p>It&rsquo;s been almost 2 years and we&rsquo;re expecting some significant updates to WSL compatibility and performance for the next <a href="https://winaero.com/blog/command-line-wsl-improvements-windows-10-version-1803/"target="_blank" rel="noopener">Spring Creators Update</a> (or version 1803) scheduled to arrive on April 30, 2018. This brings it closer to making WSL actually usable for professional programmers. Just to give you an idea, right now you will have orders of magnitude better performance if you run your favorite Linux distro inside Virtualbox or VMWare Workstation.</p>
<p>Moreover, out of the box the &ldquo;Bash for Windows&rdquo; proper only officially supports Ubuntu, Fedora, and OpenSuse I guess. Most people will just install Ubuntu. And it works ok. For toy and cool demonstration purposes, it works. But it really frustrates me that I can do so much but I can&rsquo;t actually use it as my daily driver. It&rsquo;s like being able to carry the fully built prototype of the next iPhone but no 4G support yet. So it&rsquo;s just a toy.</p>
<p>Bear with me here, if you just want to see how the performance compares to my VMWare setup, go straight to the end of the article.</p>
<p>Anyway, in the case of distros. Serious Linux users would prefer better alternatives. Enter this GitHub repository:</p>
<p><a href="https://github.com/yuk7/ArchWSL"target="_blank" rel="noopener"><img src="http://web.archive.org/web/20221226012212/https://raw.githubusercontent.com/wiki/yuk7/WSL-DistroLauncher/img/Arch_Alpine_Ubuntu.png" alt="screenfetch of arch"  loading="lazy" /></a></p>
<p>You just download <a href="https://github.com/yuk7/ArchWSL/releases/latest"target="_blank" rel="noopener">this zip file</a>, unzip it and run the included <code>Arch.exe</code>. And that&rsquo;s about it!</p>
<p>Now, you can go ahead and open the Windows version of &ldquo;Bash&rdquo; and we can bootstrap the rest of the installation setup from there.</p>
<p>We must get Pacman and some AUR manager. To start Pacman, we must do this:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>pacman-key --init
pacman-key --populate
pacman -Syu</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Hell yeah, Pacman running natively on Windows!! Who would&rsquo;ve known??</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/674/big_IMG_20180429_174518.jpg" alt="pacman on windows"  loading="lazy" /></p>
<p>This will bring everything up to date. Next up, we must create a non-root user:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>useradd -m your_user
passwd your_user
EDITOR=nano visudo</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Look for the line that says <code>root   ALL=(ALL) ALL</code> and add your user right on the next line like this:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>your_user   ALL=(ALL) ALL</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Finally, we should login as this user:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>su your_user</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Next up, let&rsquo;s install Yaourt so we can use it to install Pacaur (this is a personal preference, you can just use Yaourt. I think Yaourt prompts too much, that&rsquo;s why I prefer Pacaur).</p>
<p>Start by editing your <code>/etc/pacman.conf</code> file with your favorite editor like vim or nano.</p>
<p>Just add the following section to the very bottom of the file:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Before we can proceed, we have one small problem. WSL still has no support for SYSV IPC. This is required for <a href="https://unix.stackexchange.com/questions/9714/what-is-the-need-for-fakeroot-command-in-linux"target="_blank" rel="noopener">fakeroot</a>, which is required by <code>makepkg</code> (which cannot run as root).</p>
<p>To overcome this problem, this is what we&rsquo;ll have to do:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>wget https://github.com/yuk7/arch-prebuilt/releases/download/17121600/fakeroot-tcp-1.22-1-x86_64.pkg.tar.xz
sudo pacman -U fakeroot-tcp-1.22-1-x86_64.pkg.tar.xz</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>And that&rsquo;s it for now! Until WSL adds proper support for SYSV IPC, we can use this. Yaourt itself will probably prompt you to install <code>fakeroot-tcp</code> on top of it, just let it.</p>
<p>As I said, Yaourt is quite verbose in its many prompts for confirmations. Rule of thumb, whenever it prompts if you want to edit anything, just say &ldquo;N&rdquo;(o). Whenever it prompts you if you want to build or install something, just say &ldquo;Y&rdquo;(es). If you got annoyed with me, do this:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>yaourt -S pacaur</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>From now on, I will assume you have Pacaur.</p>
<h3>Graphical User Interface Support<span class="hx:absolute hx:-mt-20" id="graphical-user-interface-support"></span>
    <a href="#graphical-user-interface-support" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Now, let&rsquo;s install some of the basics for a development environment:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>sudo pacman -S base base-devel gvim git</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>It will prompt you sometimes &ldquo;default: all&rdquo;, just install everything. Hard disk space should not be a concern in 2018.</p>
<p>I prefer to have a full-on GNOME 3 environment, so I just do:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>sudo pacman -S gnome</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Again, let it install everything it wants. Everybody has a different taste when it comes to GUIs, some prefer KDE5, others prefer XFCE4. Some even go as far as using the tile-based GUI <a href="https://i3wm.org/"target="_blank" rel="noopener">i3</a>.</p>
<p>That requires some serious adapting. It&rsquo;s for people that like to do stuff like using a tenkeyless keyboard with nothing written in the keycaps and using an alien layout like  DVORAK or <a href="https://colemak.com/"target="_blank" rel="noopener">Colemak</a> (yikes!). Taste is taste. And I dare you to become a touch typist using <a href="https://www.maltron.com/the-maltron-letter-layout-advantage.html"target="_blank" rel="noopener">Maltron</a>, I double dare ya! :-D</p>
<p>But, I digress. Now, you can add this to your <code>/etc/.bashrc</code> file or the global <code>/etc/environment</code> file:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>echo &#34;export LIBGL_ALWAYS_INDIRECT=1&#34; &gt;&gt; /etc/.bashrc
echo &#34;export DISPLAY=:0&#34; &gt;&gt; /etc/.bashrc</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Export those to your current shell, or just close and reopen Bash.</p>
<p>We can have a full GUI environment by installing a local X Server. You have 2 options, Xming and VcXSrv. I am having trouble resizing windows in Xming, so I am recommending <a href="https://sourceforge.net/projects/vcxsrv/"target="_blank" rel="noopener">VcXSrv</a> instead. Just download and install it as you would with any Windows application and start it up. It will add a Desktop shortcut named &ldquo;XLaunch&rdquo;, just fire it up.</p>
<p>And finally, we can install a <strong>PROPER</strong> usable terminal instead of that poor contraption derived from old cmd.exe that WSL provides you out of the box.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>pacaur -S tilix-bin
tilix</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>If you&rsquo;ve been a Mac user, you probably know iTerm2, which is possibly the best Terminal emulator I&rsquo;ve ever used. There is nothing else that comes close. Nothing, except possibly <a href="https://gnunn1.github.io/tilix-web/"target="_blank" rel="noopener">Tilix</a> (previously known as Terminix).</p>
<p>Just for having &ldquo;Ctrl-Alt-D&rdquo; to split the terminal horizontally down and &ldquo;Ctrl-Alt-R&rdquo; to split it vertically to the right, and using &ldquo;Alt-1&rdquo;, &ldquo;Alt-2&rdquo;, and so on to switch between the terminals, it&rsquo;s great for me. It also comes pre-installed with very nice themes such as the now classic Solarized Dark or my current favorite Monokai Dark.</p>
<p>Don&rsquo;t curse me, I know. Some will prefer the default terminal app and just add TMUX. Again, taste (it&rsquo;s more useful if I were working on a remote server).</p>
<p>Add the Hack monotype font to make everything more pleasing to the eye:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>sudo pacman -S ttf-hack</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<h3>Programming Languages<span class="hx:absolute hx:-mt-20" id="programming-languages"></span>
    <a href="#programming-languages" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Let&rsquo;s see if the most important languages out there install correctly. As I always say, look no further than ASDF for that task.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.4.3
echo -e &#39;\n. $HOME/.asdf/asdf.sh&#39; &gt;&gt; ~/.bashrc
echo -e &#39;\n. $HOME/.asdf/completions/asdf.bash&#39; &gt;&gt; ~/.bashrc</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Restart your terminal and continue:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>asdf plugin-add nodejs
addf plugin-add ruby</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>For Node.js you must add the proper GPG keys and only then you can install:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>bash ~/.asdf/plugins/nodejs/bin/import-release-team-keyring
asdf install nodejs 10.0.0
asdf global nodejs 10.0.0</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Ruby benefits from jemalloc to allocate less system memory. I have no idea if it impacts WSL but let&rsquo;s do it anyway:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>sudo pacman -S jemalloc
RUBY_EXTRA_CONFIGURE_OPTIONS=&#34;--with-jemalloc&#34; asdf install ruby 2.5.1
asdf global ruby 2.5.1
gem install bundler</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/675/big_IMG_20180429_193432.jpg" alt="ruby compiles"  loading="lazy" /></p>
<p>So far so good, if you need to install an old Ruby (&lt; 2.4) for legacy projects, you must do:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>pacaur -S openssl-1.0
PKG_CONFIG_PATH=/usr/lib/openssl-1.0/pkgconfig RUBY_EXTRA_CONFIGURE_OPTIONS=&#34;--with-openssl-dir=/usr/lib/openssl-1.0&#34; asdf install ruby 2.3.3</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Unfortunately it needs a version of OpenSSL that you should not be using due to security problems. We all moved on to 1.1. But Ruby 2.3.x reached its EOL (end of line). So it&rsquo;s at your own risk to keep using it.</p>
<p>Well, so far so good. Can we install Go as well? Let&rsquo;s see:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>asdf plugin-add golang
asdf install golang 1.9.5
asdf global goland 1.9.5</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>We can keep going, but I think you got the idea. It just works!</p>
<h3>Background Jobs<span class="hx:absolute hx:-mt-20" id="background-jobs"></span>
    <a href="#background-jobs" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Again, another current limitation of WSL (that we expect to see fixed on the Spring Creators Update) is the ability to start and keep running background jobs (daemons).</p>
<p>Just doing <code>sudo systemctl enable postgresql</code> and restarting won&rsquo;t automatically start Postgresql in the background as it should. This Arch.exe thing we&rsquo;re using won&rsquo;t even have systemd.</p>
<p>Fortunately, servers such as Postgresql or Redis do work normally, they can be started as user-level processes, and they do properly bind to their respective TCP ports. But, you will have to manually start them in every session. Close your Bash terminal and they are all killed off.</p>
<p>For example, Postgresql:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>[your_user]# sudo pacman -S postgresql
[your_user]# sudo mkdir -p /run/postgresql
[your_user]# sudo chown -R postgres:postgres /run/postgresql

[your_user]# sudo -u postgres -i
[postgresql]# initdb --locale $LANG -E UTF8 -D &#39;/var/lib/postgres/data&#39;

[postgresql]# pg_ctl -D /var/lib/postgres/data start
waiting for server to start....2018-04-29 23:30:35.483 UTC [1064] LOG:  listening on IPv4 address &#34;127.0.0.1&#34;, port 5432
2018-04-29 23:30:35.505 UTC [1064] LOG:  listening on Unix socket &#34;/run/postgresql/.s.PGSQL.5432&#34;
2018-04-29 23:30:35.583 UTC [1065] LOG:  database system was shut down at 2018-04-29 23:23:48 UTC
2018-04-29 23:30:35.660 UTC [1064] LOG:  database system is ready to accept connections

[postgresql]# createuser --interactive
Enter name of role to add: your_user
Shall the new role be a superuser? (y/n) y

[postgresql]# exit
[your_user]#</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>See what I did here? There is a small problem in the install under WSL where the <code>/run/postgresql</code> is not created with the correct permissions. Fixing that we can start the server. We can exit out of the <code>su</code> session and the postgresql server will keep running. But when we close the first Bash window/session, it will die.</p>
<p>And another very annoying thing? The <code>mkdir</code> and <code>chown</code> fixes above? I have to do it every single time I close the Bash for Windows app and start it again!! Super duper annoying if you ask me!</p>
<p>But, we can live with it for now. Hopefully, this will be fixed tomorrow (April 30) or in an upcoming upgrade.</p>
<p>In a Rails development environment, we can take advantage of <a href="https://github.com/theforeman/foreman"target="_blank" rel="noopener">Foreman</a> to help us out. Just edit some <code>Procfile.dev</code> file:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>web: bundle exec puma -C config/puma.rb -p 3000
db: su postgres -c &#39;pg_ctl start -D /var/lib/postgres/data&#39;
redis: redis-server /usr/local/etc/redis.conf
mailcatcher: mailcatcher -f</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Now we can do: <code>foreman start -f Procfile.dev</code> and all services will start properly at once.</p>
<h3>Real World Performance<span class="hx:absolute hx:-mt-20" id="real-world-performance"></span>
    <a href="#real-world-performance" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>My daily driver is Manjaro GNOME under VMWare Workstation Pro on my Surface Book 2. I give it 6 threads out of the 8 and a hefty 12GB of RAM out of the total 16GB (damn Microsoft, we need more RAM nowadays that the cool kids deploy stupid ass Apps with heavy JS/CSS coating that eats up all available RAM).</p>
<p>In the project I am currently working on, my full RSpec suite is a bit on the slow side. For this comparison, I am skipping all my feature specs as I am in no mood to tweak chrome-driver to work in WSL (probably runs, but let&rsquo;s have it another day).</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>Finished in 12 minutes 8 seconds (files took 14.58 seconds to load)
1493 examples, 0 failures, 35 pending

531,34s user 127,56s system 88% cpu 12:24,99 total</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>In this comparable WSL environment I have just installed, I am running the exact same RSpec suite, and this is what I get:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>Finished in 13 minutes 43 seconds (files took 3 minutes 16.8 seconds to load)
1474 examples, 0 failures, 35 pending


455.80s user 399.14s system 83% cpu 17:04.96 total</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>For some reason, my WSL environment is skipping a few examples (seems more like an RSpec counter bug of some sort though), but I think this shouldn&rsquo;t pose too much of a difference in the grand scheme of things here. WSL is losing even if the counter is correct and it&rsquo;s running fewer examples.</p>
<p>When we start to really exercise the WSL a whole lot of issues start to show up. For example, PostgreSQL goes crazy and keeps stdout&rsquo;ing &ldquo;could not flush dirty data: Function not implemented&rdquo;, which is due to <a href="https://github.com/Microsoft/WSL/issues/645"target="_blank" rel="noopener">this documented issue</a> from the WSL! So what ends up happening is that sometimes the RSpec runner just pauses while PG tries to figure out what to do.</p>
<p>You can clearly see that under VMWare files took less than 15 seconds to load. On WSL they took over 3 minutes just on file I/O! It&rsquo;s orders of magnitude slower. This is the bad part. When it&rsquo;s just CPU vs CPU, they are pretty comparable actually.</p>
<p>On paper, the total time is actually quite close. And CPU-wise I think WSL has an edge, which is why it&rsquo;s able to recover in the totals even though the I/O is clearly sluggish.</p>
<p>In practice what happens in a normal programming situation is that you fire up Vim, or any other text editor of your choice. Any programmer has to keep opening files and going back and forth between a lot of files. Now, I/O being super slow, every file you try to open pauses your action for a split second. And this adds up.</p>
<p>Within VMWare, Vim is super responsive, whenever I need to open a file, it&rsquo;s almost instantaneous.</p>
<p>The benchmark may be hard to account for this situation. But in a normal scenario, you will end up annoyed. Moreover, running a GUI over X (VcXsrv in my case) slows things down a bit as well. From within VMWare, the normal Xorg can take advantage of being GPU accelerated. So the entire rasterization pipeline is faster.</p>
<p>You &ldquo;can&rdquo; use WSL as your daily driver. But if I can have a smoother experience from within VMWare, that&rsquo;s where I will be for now.</p>
<h3>Conclusion<span class="hx:absolute hx:-mt-20" id="conclusion"></span>
    <a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>I will actually hold my conclusions until tomorrow (April 30) or later this week, because if the Spring Creators Update actually fixes some performance issues, then I can see myself using this instead of my VMWare Workstation install of Manjaro GNOME.</p>
<p>It may not come in this big update, but I have word that they are working on the outstanding I/O performance issues. So it&rsquo;s right around the corner.</p>
<p>Everything I need just works. Tilix, Vim, Git, Zsh, Ruby, Node.js. Everything installs as expected from Pacman and AUR. Pure Arch Linux glory! So sad the bad performance spoils it.</p>
<p>It&rsquo;s close, it&rsquo;s very close! For the first time in almost 15 years, I can almost see myself returning to 100% Windows (with no VMWare support) and still be able to be fully productive with real, professional, open source tools that &ldquo;Just Works&rdquo;.</p>
<p>Keep an eye on this blog post for updates this week!</p>
]]></content:encoded><category>linux</category><category>microsoft</category><category>developer-tools</category></item><item><title>From Microsoft to Apple, and Back Again</title><link>https://akitaonrails.github.io/en/2017/11/21/from-microsoft-to-apple-and-back-again/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2017/11/21/from-microsoft-to-apple-and-back-again/</guid><pubDate>Tue, 21 Nov 2017 21:51:00 -0200</pubDate><description>&lt;p&gt;This is going to be a very lengthy article, buckle up ladies and gentlemen.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re hasty, here&amp;rsquo;s what you need to know:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows 10 is still Windows, but it&amp;rsquo;s nowhere near the nightmare of the 2000s. It rightfully deserves a new chance.&lt;/li&gt;
&lt;li&gt;OS X is on its way to becoming no more than an XCode runtime. Rumor says that Apple doesn&amp;rsquo;t even have a dedicated team for the desktop OS anymore. They are entirely focused on iOS and to make the iPad the desktop replacement.&lt;/li&gt;
&lt;li&gt;Linux is great, if you&amp;rsquo;re a full-time web developer, you can comfortably run something like Ubuntu or Manjaro/Arch (my personal recommendation).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Best cost-benefit: the Dell XPS 13. The Surface Book 2 is totally worth it if you&amp;rsquo;re a nerd like me. But as always, there are caveats to discuss.&lt;/p&gt;</description><content:encoded><![CDATA[<p>This is going to be a very lengthy article, buckle up ladies and gentlemen.</p>
<p>If you&rsquo;re hasty, here&rsquo;s what you need to know:</p>
<ul>
<li>Windows 10 is still Windows, but it&rsquo;s nowhere near the nightmare of the 2000s. It rightfully deserves a new chance.</li>
<li>OS X is on its way to becoming no more than an XCode runtime. Rumor says that Apple doesn&rsquo;t even have a dedicated team for the desktop OS anymore. They are entirely focused on iOS and to make the iPad the desktop replacement.</li>
<li>Linux is great, if you&rsquo;re a full-time web developer, you can comfortably run something like Ubuntu or Manjaro/Arch (my personal recommendation).</li>
</ul>
<p>Best cost-benefit: the Dell XPS 13. The Surface Book 2 is totally worth it if you&rsquo;re a nerd like me. But as always, there are caveats to discuss.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/663/20171121_111616.jpg" alt="Book 2"  loading="lazy" /></p>
<h2>The Specs<span class="hx:absolute hx:-mt-20" id="the-specs"></span>
    <a href="#the-specs" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>I will definitely not duplicate every <a href="https://www.youtube.com/watch?v=-Hh0lZ7Jg4U"target="_blank" rel="noopener">hardware review</a> you can find out there. They are all true. As <a href="https://www.ifixit.com/Teardown/Microsoft&#43;Surface&#43;Book&#43;2&#43;Teardown/100364"target="_blank" rel="noopener">iFixIt says</a>: it&rsquo;s the worst score in repairability. Like a Macbook, the Surface line-up is a statement. It&rsquo;s the best combination of design and functionality. But the trade-off is that it has zero expandability and you should really take care not to break it. If it breaks, make sure you have a warranty and ask for a replacement.</p>
<p>In terms of specs, it is close to other top-of-the-line notebooks.</p>
<p>The top of the line Surface Book 2 costs <a href="https://www.microsoft.com/en-us/surface/devices/surface-book-2/overview"target="_blank" rel="noopener">USD 3,299</a> and comes with 1 TB SSD, 16GB RAM, GTX 1060 w/ 6 GB GDDR5,  Intel Core i7 8th Gen Kaby Lake R, 4K display. It is super expensive, but you can easily justify it. More on that below.</p>
<p>The top of the line Dell XPS 15&quot; Touch costs <a href="http://dell.to/2jMDOx5"target="_blank" rel="noopener">USD 2,459</a> and comes with 1 TB SSD, <strong>32GB RAM</strong>, GTX 1050 w/ 4 GB GDDR5, Intel Core i7 7th Gen Kaby Lake, 4K display. The design of the XPS is top notch for at least 3 generations now. To me, this is the best cost-benefit.</p>
<p>The top of the line Razer Blade costs <a href="https://www.razerzone.com/gaming-laptops/razer-blade/shop"target="_blank" rel="noopener">USD 2,599</a> and comes with 1 TB SSD, 16 GB RAM, GTX 1060 w/ 6 GB, Intel Core i7 7th Gen, 4K display. It&rsquo;s arguably the best industrial design of this bunch, with Razer&rsquo;s impeccable attention to detail. But it&rsquo;s also arguably the one with least available support and more construction problems reported, so be careful to buy it overseas.</p>
<p>The top of the line HP Spectre x360 costs <a href="http://store.hp.com/us/en/pdp/hp-spectre-x360-15-bl152nr"target="_blank" rel="noopener">USD 1,499</a> and comes with 512 GB SSD, GeForce MX150 w/ 2GB GDDR5, Intel Core i7 8th Gen, 4K display. The design is awesome, super thin convertible. The specs are not so great, but it&rsquo;s the cheapest of the premium notebooks, so there&rsquo;s that.</p>
<p>The top of the line Lenovo Yoga 920 14&quot; Vibe costs <a href="http://lnv.gy/2A4DjlU"target="_blank" rel="noopener">USD 1,899</a> but it only comes with Intel Integrated Graphics (no secondary GPU), 1 TB SSD, 16 GB RAM, Intel Core i7 8th Gen, 4K display, and comes with the Pen. The design, again, is great with an almost 360-degree hinge so you can flip your screen around and use it as a tablet. A very good 2-in-1.</p>
<p>Now, the top of the line MacBook Pro 15&quot; costs <a href="http://apple.co/2zXSz6d"target="_blank" rel="noopener">USD 3,399</a> and comes with 1 TB SSD, Radeon Pro 560 w/ 4GB, Intel Core i7 7th Gen, UHD Display, and the infamous touch bar (50% chance of liking it). And that&rsquo;s it. The industrial design and construction are still top-notch, but the others are nearly as good nowadays.</p>
<p>If you use graphics-intensive applications, the Radeon Pro 560 is good, but the GTX 1060 is <a href="http://bit.ly/2zsIjE5"target="_blank" rel="noopener">superior</a>. Apple&rsquo;s UHD IPS (LCD) displays have a maximum resolution of 2560x1600. All premium notebooks nowadays come with full 4K (LED) displays with a maximum resolution of 3840x2160. It is noticeable. If you&rsquo;ve never seen a modern 4K display, the MacBook displays will look good enough. And that&rsquo;s without mentioning that they are all touchscreens with 4,096 points of sensitivity. What was once just a gimmick nowadays compares with the best Wacom has to offer. The Surface line-up comes close to the top of the line Wacom Cintiq and the new iPad Pro. They are in the same league.</p>
<p>There are 2 aspects of the Surface Book 2 that are lacking, unfortunately. First is the absence of a proper Thunderbolt 3 port. Without it, you can&rsquo;t connect to modern external storage or external GPUs. The second is the weak power supply. Reports say that in highly demanding games (a.k.a. Destiny 2 not properly configured), the system will throttle down and drain all the battery faster than it can charge from the wall. <a href="https://www.theverge.com/2017/11/21/16685986/microsoft-surface-book-2-power-problem"target="_blank" rel="noopener">The Verge broke this story</a> and Microsoft is yet to unveil a solution if any. So, if gaming is your top priority buy a Razer or any of the gaming specific laptops such as an Alienware. The battery issue is <a href="https://www.youtube.com/watch?v=imzVR4JSITM&amp;t=1s"target="_blank" rel="noopener">not as dramatic</a> as some have previously reported, though.</p>
<p>In terms of construction. Macs are usually all built with the same aluminum unibody construction. The Book 2 uses Magnesium instead. It makes for a very solid construction but also very lightweight. By the way, after so many years, everybody mastered aluminum. And they are moving in other directions, for example, Dell uses carbon fiber on the palm rests, which I find much more comfortable. Magnesium is also not as freezing cold as aluminum, again, more comfortable. I like that they are past just copying and really trying new and interesting materials.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/664/20171121_111533.jpg" alt="it’s not as thin"  loading="lazy" /></p>
<h2>Value Proposition<span class="hx:absolute hx:-mt-20" id="value-proposition"></span>
    <a href="#value-proposition" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>We established that the Surface Book 2 is very expensive, and it&rsquo;s not even good enough for highly demanding games such as Destiny 2.</p>
<p>Where it really shines is the fact that it&rsquo;s not a convertible 2-in-1 such as the Spectre or Yoga. You already know that it can detach the screen from the base.</p>
<p>The crown achievement of the Surface team is the <strong>dynamic fulcrum hinge</strong>. It&rsquo;s a marvel of engineering. When it&rsquo;s attached, it doesn&rsquo;t wobble nearly as much as one would expect. It&rsquo;s very solid, you can pick up the entire unit from the screen without worrying that the base might fall down or break.</p>
<p>When I first heard about it 2 years ago, I thought it was cool but that it could break over time, so I waited. I am all in now because 2 years later you don&rsquo;t see a &ldquo;hinge-gate&rdquo; or massive reports of the hinge falling apart, so you know it&rsquo;s solid. And 2 years later, no other manufacturer has it, and if you don&rsquo;t see a cheap knockoff from China, you can tell that this is a very difficult thing to build. Microsoft really nailed this part.</p>
<p>By having a detachable screen you also know that the main components are all behind the screen. The CPU, the GPU, the RAM, the SSD. So you have a top-of-the-line Intel i7 in a tablet! The battery is understandably small (no more than 3 hours) to drive a 15&quot; 4K display with touch capabilities and enough precision to rival the iPad Pro and the Wacom Cintiq or Mobile Studio.</p>
<p>Now, what most people don&rsquo;t report is that because of this, the screen housing is the one that gets warm. The performance base remains cool! So it&rsquo;s super comfortable to have it on your lap for many hours without the risk of getting sterile or getting boiled eggs in the process.</p>
<p>It has enough power to drive 1 external 4K display at 60hz or two 4K displays at 30hz. The MacBook Pro, with its custom port, can drive a 5K display. Something most notebooks still can&rsquo;t. So there&rsquo;s that.</p>
<p>I am not a designer by trade, but I am a hobbyist. And after many years working hard, I do believe that I can afford something like this. And don&rsquo;t get me wrong, the Surface Pro is another great option for a designer. The top-of-the-line Surface Pro has everything the Book 2 has, without the GTX 1060 but costing USD 600 less at <a href="https://www.microsoft.com/en-us/surface/devices/surface-pro/overview#surfaceconfiguration"target="_blank" rel="noopener">USD 2,699</a>. I think it&rsquo;s a more suitable product for most people interested in having an easy to carry sketch solution around.</p>
<p>Creative Professionals are the ones that fully need to be careful about specs. But for the majority of non-demanding professionals, they can pay a lot cheaper. They don&rsquo;t need extra GPU horsepower, or the i7 (an i5 is more than adequate), 8 GB of RAM is enough, even 256 GB of SSD is ok because everything is in the so-called &ldquo;Cloud&rdquo; these days. This is the <a href="http://www.dell.com/en-us/shop/dell-laptops/new-xps-13/spd/xps-13-9360-laptop/dncwtr744h"target="_blank" rel="noopener">USD 999</a> Dell XPS 13. Or the only comparable option from Apple is the <a href="https://www.apple.com/shop/buy-mac/macbook"target="_blank" rel="noopener">USD 1,299</a> with a ridiculous Intel m3 processor. For most professionals, the cheaper Dell XPS 13 is a much better value proposition than the Macbook.</p>
<p>For demanding professionals, the Dell XPS 15 is the best value for the buck. The Surface Book 2 is the best premium one for those that favor the touch screen more than workflow. Meaning: designers, go with the Book 2, video editors or 3D modelers, go with the Dell XPS.</p>
<p>Oh, and one last thing about price. The MacBook Pro 15&quot; costs USD 3,399 and the Book 2 costs USD 3,299. But if you want a tablet, you still need to add an extra USD 949 for a 12&quot; iPad Pro with Wi-Fi and 256 GB of storage. And you will end up having to carry around a heavier backpack.</p>
<h2>Why not install Linux?<span class="hx:absolute hx:-mt-20" id="why-not-install-linux"></span>
    <a href="#why-not-install-linux" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>You don&rsquo;t buy a Surface product unless you&rsquo;re interested in the <strong>Surface Pen</strong> experience and ecosystem. I think this is obvious, otherwise, you&rsquo;re better off buying a Dell XPS or any other cheaper notebook.</p>
<p>It&rsquo;s also obvious why it makes no sense to ask <em>&ldquo;Why don&rsquo;t you ditch Windows and install Linux on it?&rdquo;</em>. Because no Linux distro has Pen support, whatsoever. The performance base also has a physical key that you need to press in order for the hinge to release the display.</p>
<p>You want to have Adobe Photoshop, or Autodesk Sketchbook, or Sketchable, or any other great software package out there. Again, I don&rsquo;t want to repeat every other <a href="https://www.youtube.com/watch?v=U8cpC2jZdgM"target="_blank" rel="noopener">review available</a> out there showing how great the pen is. I will just confirm that, yes, the pen is super great, precise, accurate, and flows very naturally. It&rsquo;s an entire studio in a box.</p>
<p>Software developers by trade should <strong>stay away</strong> from this kind of product because most Linux distros won&rsquo;t have the proper drivers to hook up to so much exclusive hardware solutions. For those situations I highly recommend the Dell XPS 13, specifically the <a href="http://dell.to/2A3SPOZ"target="_blank" rel="noopener">USD 1,759</a> configuration with Windows 10 Pro (or you can save USD 60 and get it with the Home edition if you intend to install Linux on top of it), the great QHD+ (3200x1800) InfinityEdge touch display, 8th Gen Intel Core i7, 16 GB RAM, 512 GB SSD. This is, by far, the best value for the money for a full-time software developer.</p>
<p>OS X has a great community <strong>despite</strong> Apple not doing a lot to help them. Historically, the jump from the legacy MacOS to OS X meant having a UNIX-compatible kernel and toolchain available. To this day, it&rsquo;s still not comparable to a modern Linux distro. But OS X makes it up to it by having, by far, the best Graphics Compositor around. The GUI is smooth, responsive.</p>
<p>The Darwin Mach kernel supports multiple policies, most important for Creative Professionals, mainly musicians, was the <strong>soft real-time</strong> capabilities of the scheduler. To this day, <a href="https://wiki.archlinux.org/index.php/Realtime_kernel"target="_blank" rel="noopener">Linux Real Time</a> is not the default option, and it&rsquo;s not as well tuned or stable. And the Windows kernel evolved, but again, still not nearly as polished.</p>
<p>Soft Real-Time avoids the stuttering effect we see. And is one factor of why the Mac experience is, overall, superior even on less powerful hardware.</p>
<p>In particular, everybody around the <a href="https://brew.sh/"target="_blank" rel="noopener">Homebrew</a> community deserves high praise for their efforts of keeping up in bringing open source tools to OS X, <strong>despite</strong> every new Xcode update and OS X upgrade, breaking them.</p>
<h2>My Environment<span class="hx:absolute hx:-mt-20" id="my-environment"></span>
    <a href="#my-environment" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/662/20171121_111546.jpg" alt="Magnesium Body"  loading="lazy" /></p>
<p>After a lot of experimentation, I decided to settle on having a native Windows 10 to drive the host and having a full-blown Linux distro (<a href="https://manjaro.org/get-manjaro/"target="_blank" rel="noopener">Manjaro GNOME</a>) on a Virtualbox environment where I give 4 of the 8 cores (2 physical cores, each with 2 hyperthreads) and half the memory (8 GB).</p>
<p>Why not use the brand new <a href="https://msdn.microsoft.com/en-us/commandline/wsl/faq#can-i-run-all-linux-apps-in-wsl"target="_blank" rel="noopener">Windows Subsystem for Linux (WSL)</a> instead?</p>
<p>Because although it&rsquo;s great and all, we will need to wait until they figure out the rough edges. Particularly a better GUI support and faster I/O abstraction. What hurts the most is how <strong>painfully slow</strong> the filesystem layer is right now. It&rsquo;s an <a href="http://www.akitaonrails.com/en/2017/09/20/windows-subsystem-for-linux-e-bom-mas-ainda-nao-suficiente"target="_blank" rel="noopener">order of magnitude slower</a> than using Linux on Virtualbox.</p>
<p>I could use a Vagrant-like hybrid solution, having a headless Linux distro on Virtualbox and accessing a file through CIFS/NFS. And that should be fine if you like editors like Sublime Text 3, Visual Studio Code or Atom. But I am a Vim guy, and I like GVIM, which works best within GNOME, within a proper GUI-enabled Linux distro.</p>
<blockquote>
  <p><em>&ldquo;Why not use Docker? It&rsquo;s supposed to be super-fast and all.&rdquo;</em></p>

</blockquote>
<p>It surprises me when people ask that because it demonstrates how little they know about the tools they recommend.</p>
<p>Docker only really makes sense on a proper Linux distro. On Windows, it will have to run Linux on Virtualbox or Hyper-V. On Mac, it will use the Hypervisor framework, which - like Microsoft&rsquo;s Hyper-V - is a <strong>virtualization</strong> layer. It&rsquo;s just like Virtualbox, for all intents and purposes.</p>
<p>Docker, like LXC, is just making a process &ldquo;believe&rdquo; it&rsquo;s running alone on the OS by hiding the other processes from it. So, on Linux, it&rsquo;s super fast. On any other platform, they have to virtualize Linux proper and then run Docker there.</p>
<p>The Docker client is actually communicating with a virtualized Linux on Windows or Mac. You&rsquo;ve been fooled if you believed it&rsquo;s faster than Virtualbox or Hyper-V in any meaningful way. There is no magic here.</p>
<blockquote>
  <p><em>&ldquo;Why not just dual-booting then?&rdquo;</em></p>

</blockquote>
<p>Again, this doesn&rsquo;t help my scenario. I want a full GNOME GUI environment. And I don&rsquo;t want to keep Outlook on Windows and Thunderbird or Evolution on Linux for example, and managing different accounts on all sorts of different applications (and yes, I highly prefer native binaries instead of web apps, I am old-school like that). I don&rsquo;t want to reboot when I want to use Photoshop and reboot back to Linux to run Vim.</p>
<p>I <strong>want</strong> to have software from both platforms available to me <strong>at the same time</strong>. I don&rsquo;t believe in dual-boot scenarios unless the usages are completely separated. For example, using a Linux distro all day, and at night rebooting into Windows to run Steam and play some games.</p>
<p>Yes, Virtualbox will have a less responsive UI thanks to a virtualized Graphics pipeline. But for software development, it works just fine. I even see people doing gimmicky things such as having a full development environment in an AWS EC2 instance and SSH&rsquo;ing there to use Vim with Tmux, for example. That is far more convoluted if you ask me. I wouldn&rsquo;t go that far.</p>
<p>All top-of-the-line hardware I listed above has enough Cores and enough RAM so I can afford running 2 OSes at the same time. Don&rsquo;t do that on budget hardware.</p>
<p>And if you don&rsquo;t need to carry around a notebook, for the same amount of money you can buy a far superior desktop computer.</p>
<blockquote>
  <p><em>&ldquo;But you have all native on OS X, because it&rsquo;s UNIX and all&rdquo;</em></p>

</blockquote>
<p>Yes, but I really distrust Apple&rsquo;s OS X big upgrades. They always, always screw up something. After I had my fair share of lost work days after upgrades, I moved my development environment to <a href="https://www.vagrantup.com/"target="_blank" rel="noopener">Vagrant</a> at least 5 years ago. So I was using Linux in Virtualbox (or VMWare) all along. I never looked back. I was always reading people complaining after the big upgrades and there I was, unharmed and productive. Virtualbox was way worse back then, it&rsquo;s not so much nowadays. I can&rsquo;t remember the last time it crashed on me, if ever.</p>
<blockquote>
  <p><em>&ldquo;Well, and why not Hyper-V instead of Virtualbox?&rdquo;</em></p>

</blockquote>
<p>I did try it. And I do not recommend it right now. It was built so Windows can run Linux boxes in <strong>servers</strong>. So it&rsquo;s super good in partitioning the hardware resources between the different virtual instances. Unless you&rsquo;re a sysadmin in training or in need of a simulated server on your laptop, this is not for you.</p>
<p>It has very poor support for graphics (headless servers don&rsquo;t need graphics). The maximum resolution in the virtual monitor is a ridiculous 1152x864. My Virtualbox supports my LG Ultrawide 2560x1080 monitor just fine. Hyper-V can&rsquo;t and this is a deal breaker.</p>
<p>Virtualbox, VMWare, Parallels, Hyper-V will all use the same VT-X instructions provided by Intel. The base performance will not be so different. Guest tools might differ. Some stability might differ. But all in all, they&rsquo;re basically the same thing from the user&rsquo;s usability standpoint.</p>
<p>I know, it sounds &ldquo;weird&rdquo; to run Windows 10 as the primary native host. But it does work generally fine right now.</p>
<p>And I also know that it sounds weirder to run a Linux distro as a secondary guest OS in Virtualbox. And again, let me tell you that when I am using it in full-screen mode, working, I don&rsquo;t feel like it&rsquo;s slow or unresponsive.</p>
<h2>The Software<span class="hx:absolute hx:-mt-20" id="the-software"></span>
    <a href="#the-software" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>If you&rsquo;re in OS X you are probably used to a lot of tools. You paid money for some of those. And switching to another OS is always a pain.</p>
<p>In summary, the only piece of software that I really missed, at first, was Keynote. But I went past my prejudice against PowerPoint and I have to say that it does everything I really need right now.</p>
<p>I always hated Pages and Numbers, they are very good for amateurs. But nothing, not even LibreOffice, and definitely not Google Docs can replace Office. Google Slides is terrible and Impress is beyond useless to me (and it&rsquo;s super slow). Seriously, PowerPoint is now a much better tool.</p>
<p>Office in the Mac was always &ldquo;enough&rdquo;, luckily. But Office on Windows is far superior. No doubts in my mind, so one big benefit for me going back to Windows 10 is having the full Office experience.</p>
<p>If you use the Pro line of tools, you will miss Final Cut Pro. If you&rsquo;re a professional musician, you will miss Logic Pro. There is nothing like Garageband if you&rsquo;re a hobbyist musician. There is nothing we can do here. And even though we have better hardware on PC, Apple custom tweaks Final Cut to perform exceedingly better on AMD Radeon Pro. So Final Cut export times are still superior to Adobe Premiere&rsquo;s. Motion 5 is still easier and more responsive than After Effects.</p>
<p>That being said, it&rsquo;s not by a huge margin. Adobe Creative Suite is super strong, and unless you&rsquo;re a one-trick pony, any pro can switch to Adobe and get the job done.</p>
<p>In terms of software development, unless you&rsquo;re a one-trick .NET pony, you will want all the open source shebang. WSL is supposed to provide you that - in the future. Right now your best bet is running Virtualbox and you will not regret it.</p>
<p>Yes, yes, you have small exclusive software such as 1Password, Tweetbot, Alfred. I don&rsquo;t miss any of those. Especially because my last iPhone was the 4 back in 2010. Then I switched to Android with the Galaxy S4 and also never looked back. I&rsquo;m using an S8 and about to receive my Pixel 2, so I am good in terms of Twitter client or password management (I use LastPass and although it&rsquo;s not perfect, it gets the job done).</p>
<p>Either there is a good enough native desktop replacement or a mobile replacement, or there is a Web service. I may feel uncomfortable changing, but in practice, there is nothing in macOS that prohibits me from switching. Even if you bought iTunes songs or movies, there is iTunes for Windows.</p>
<blockquote>
  <p><em>&ldquo;But wait, Windows Update will annoy you!&rdquo;</em></p>

</blockquote>
<p>I thought as much. Microsoft did finally figure it out. It&rsquo;s still there, you still need to restart. But it&rsquo;s not nearly as annoying as it was before. Most updates will run in the background and you won&rsquo;t even notice. And you have several options such as <a href="https://support.microsoft.com/en-us/help/4028233/windows-10-schedule-or-pause-updates"target="_blank" rel="noopener">scheduling it</a> to run only at night when you&rsquo;re not working.</p>
<blockquote>
  <p><em>&ldquo;But what about the security issues and viruses!?&rdquo;</em></p>

</blockquote>
<p>Yes, I highly recommend you not to browse the Deep Web on a Windows machine, you will be owned. Not even using a Tor browser. You will be owned.</p>
<p>I also recommend you to use BitLocker (only available on Windows 10 Pro) to encrypt your partition. And also to backup to external hard drives as frequently as you can. Nothing can save you better than a readily available cold backup.</p>
<p>And yes, install some 3rd party solution such as <a href="https://www.avast.com/index"target="_blank" rel="noopener">Avast antivirus</a>. Have healthy web browsing behavior and avoid shady websites. You know what I am talking about. You will be owned.</p>
<p>If you must, install a secure Linux distro within Virtualbox and open Tor from there.</p>
<blockquote>
  <p><em>&ldquo;But what about the mess that is the Registry!?&rdquo;</em></p>

</blockquote>
<p>It&rsquo;s still there. If you never experienced it, the Registry is Windows&rsquo; equivalent of &ldquo;/etc&rdquo; in Linux distros. It&rsquo;s a binary database. It gets corrupted. It gets dirty entries.</p>
<p>But my recommendation is: forget about it. If you&rsquo;re thinking and tinkering with it, you will get a corrupt system. Do not try to clean it up (never, ever use something like CCleaner).</p>
<p>Windows itself now has automatic system restore snapshotting everytime something big happens. And it&rsquo;s mostly reliable. They go as far as duplicating the current &ldquo;C:\Windows&rdquo; directory into a &ldquo;C:\Windows.old&rdquo; when there is a big Windows Update, just in case. They shot themselves in the foot so many times that they finally learned to have several layers of recovery options.</p>
<p>Nowadays you can even download the <a href="https://www.microsoft.com/en-us/software-download/windows10"target="_blank" rel="noopener">Media Creation tool</a> from the Windows website itself. You don&rsquo;t even have to sign up anywhere. And the Windows license comes with the machine&rsquo;s firmware (BIOS). You don&rsquo;t even have to remember where your product activation key is. It automatically activates and because every machine comes with a license, the process is seamless. And most manufacturers have automatic updates for drivers and firmware.</p>
<p>So you should have a reasonably smooth experience, no matter what.</p>
<blockquote>
  <p><em>&ldquo;But Windows is not open source!&rdquo;</em></p>

</blockquote>
<p>Neither is OS X. And this is a Linux advantage. So, if you must, use just Linux natively. The point of the argument is finding an alternative to the Mac. So we&rsquo;re on the same page.</p>
<h2>The Ruby on Rails and the Hipsters effect<span class="hx:absolute hx:-mt-20" id="the-ruby-on-rails-and-the-hipsters-effect"></span>
    <a href="#the-ruby-on-rails-and-the-hipsters-effect" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Truth be told. In the software development arena, we switched to the Mac mainly because of Rails and Textmate 2. We had access to some open source tools built-in, we had GCC to compile the rest. Windows XP was way past due. Windows Vista was a terrible experience. The PC hardware manufacturers were not even trying, and Apple was launching good hardware and good experience all the time.</p>
<p>Developers switched in droves after the switch from PowerPC to Intel in 2005. My very first Mac was a G4 Mac Mini with OS X 10.4 Tiger. And then I bought the very first Intel White MacBook and I never looked back.</p>
<p>Software tools on Windows were laughable. Visual Studio.NET was terrible. Eclipse-based IDEs were terrible. We didn&rsquo;t have Powershell yet. And we definitely never had anything like WSL for command-line. You could install Cygwin, but it was a poor experience.</p>
<p>And running Linux as the primary OS was also terrible. Wine is still terrible, despite its best efforts. Unfortunately, NVIDIA and AMD GPUs will only run at their best on Windows. And Linux was never really good for content creation. It&rsquo;s not even a matter of learning a new workflow, the tools are mediocre. They have to reverse engineer everything, and that takes time. And in the velocity of social media, we don&rsquo;t have enough time, so we need to settle for compromises.</p>
<p>The Windows ecosystem stopped pretending, and finally embraced everything the open source and Apple ecosystem built. Now we all benefit.</p>
<p>By the way, if you like iTerm 2, you will be delighted to install <a href="https://gnunn1.github.io/tilix-web/"target="_blank" rel="noopener">Tilix for Linux</a>, which is very similar.</p>
<h2>As time goes by<span class="hx:absolute hx:-mt-20" id="as-time-goes-by"></span>
    <a href="#as-time-goes-by" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>I have been following the Surface line-up evolution over the years. In the beginning, I was very skeptical. Because it&rsquo;s very easy to launch a gimmicky product and discontinue it. I trust companies that keep evolving their products over the years. Not only does an ecosystem form around it, but you have time to put together support services, there are parts available in the official stores and in the aftermarket. After all these years, Microsoft deserves to be called a hardware manufacturer.</p>
<p>This is Microsoft finally fulfilling what Alan Kay once said:</p>
<blockquote>
  <p><em>&ldquo;People who are really serious about software should make their own hardware.&rdquo;</em></p>

</blockquote>
<p>They only really failed in the smartphone market, the competition is way more difficult there and because of that margins are super low. But they did nail the tablet market, the desktop, the notebook, the gaming, the servers (with their own Azure services), so now I believe that they really <strong>understand</strong> the specific needs of all those areas, and it shows in the software. They have a far superior understanding of every market - but the smartphone - than Apple. They finally have true skin in the game.</p>
<p>Because now Microsoft builds their own hardware and they made a business out of it, they have real incentive inside the teams in the company for a positive feedback loop that results in more refinements to the Windows codebase.</p>
<p>They have been trying and failing in the touch-based solutions since the early 2000s. Now the Pen is not a gimmick anymore, it&rsquo;s a real product, with real qualities, and real use cases.</p>
<p>They also kept their vision of playing nice with Open Source. No one can reasonably expect Microsoft to go full-blown open source. But it shows. They are second only to Google on GitHub in terms of open source contributions. They acquired Xamarin and their .NET Core strategy is on-going and strong. Heck, even Visual Studio received the open source treatment. There is still a long road ahead, but one has to recognize the giant steps.</p>
<p>Which is way more than we can say about Apple, where the poor guys at <a href="https://github.com/Homebrew/homebrew-core/issues/14418"target="_blank" rel="noopener">Homebrew suffer</a> on each OS X upgrade.</p>
<p>The Surface RT and Windows Mobile attempt even made it possible for Windows to finally be compiled to run on ARM processors. This is a good sign going forward. Reminds me when OS X was first compiled to run on Intel processors (they ran on PowerPC before) in 2005.</p>
<p>And the Macbook? They get a gimmick touch bar. Apple is really out of touch with reality.</p>
<h2>Why am I out from the Apple ecosystem?<span class="hx:absolute hx:-mt-20" id="why-am-i-out-from-the-apple-ecosystem"></span>
    <a href="#why-am-i-out-from-the-apple-ecosystem" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Apple&rsquo;s focus is not on the Mac. Worse: the Mac is quickly becoming abandonware, despite the PR statements.</p>
<p>They are clearly an iPhone company, with a hobbyist side business that builds Macs and MacBooks, which exist mostly to serve as an iPhone app development toolchain. This is the business model.</p>
<p>Did you see their latest Ad for the iPad?</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/sQB2NjhJHvY"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<p>Yes, this is super cute and I dig it.</p>
<p>But the message is crystal clear: the vision is for people to use only iPhones and iPads. There is no such thing as a &ldquo;computer&rdquo;.</p>
<p>They are the most valued tech company right now. But since last year, they don&rsquo;t even have a dedicated OS X team anymore. What does that tell you?</p>
<p>The iOS line-up is a &ldquo;monopoly&rdquo; within Apple&rsquo;s line up. The Mac can&rsquo;t compete. Steve Jobs himself <a href="https://www.youtube.com/watch?v=ZBma82g3Uag"target="_blank" rel="noopener">warned</a> about what happens to monopolies.</p>
<p>We are starting to hear the same story all over the industry:</p>
<ul>
<li><a href="http://cdm.link/2016/09/apples-relationship-pro-music-needs-mending/"target="_blank" rel="noopener">Apple&rsquo;s relationship with pro music needs some mending</a> - Sep, 26, 2016</li>
<li><a href="https://www.bloomberg.com/news/articles/2016-12-20/how-apple-alienated-mac-loyalists"target="_blank" rel="noopener">How Apple Alienated Mac Loyalists</a> - Dec, 20, 2016</li>
<li><a href="https://www.theverge.com/2016/12/21/14037686/apple-macbook-macos-focus-mobile-features-ios"target="_blank" rel="noopener">macOS is becoming legacy software</a> - Dec, 21, 2016</li>
<li><a href="https://www.stuckincustoms.com/2017/02/10/switching-from-mac-to-windows/"target="_blank" rel="noopener">Apple Is Dead To Me… I&rsquo;m Switching To Windows!</a> - Feb, 10, 2017</li>
<li><a href="https://char.gd/blog/2017/why-i-left-mac-for-windows-apple-has-given-up"target="_blank" rel="noopener">Why I left Mac for Windows: Apple has given up</a> - Mar, 5, 2017</li>
</ul>
<p>Microsoft played their cards right. It took almost 15 years. But it paid off in spades. Apple really did alienate the loyalists, the ones that used to &ldquo;Think Different&rdquo;.</p>
<p>Apple is a &ldquo;victim&rdquo; of Clayton Christensen&rsquo;s <a href="https://www.amazon.com/Innovators-Dilemma-Revolutionary-Change-Business/dp/0062060244"target="_blank" rel="noopener">&ldquo;Innovator&rsquo;s Dilemma&rdquo;</a>. If they still had vision left, they could reach out and maintain. But instead, they chose to go all-in on a single product line.</p>
<p>Microsoft seems to have read the Clayton&rsquo;s <a href="https://www.amazon.com/Innovators-Solution-Creating-Sustaining-Successful/dp/1422196577/ref=pd_sim_14_4?_encoding=UTF8&amp;psc=1&amp;refRID=CC6NWGVZMEWTTDETMZ8W"target="_blank" rel="noopener">&ldquo;Innovator&rsquo;s Solution: Creating and Sustaining Successful Growth&rdquo;</a>.</p>
<p>When the iPod was at its peak, Microsoft had &ldquo;lost&rdquo;. They were out of the game. It was a depressing thing to see. Steve Ballmer was a shameful CEO. Windows Vista was a shameful OS. The Zune failed to capture the aura of the iPod. Windows Mobile was a mess. And Sharepoint &hellip; oh Sharepoint. They even celebrated when JQuery was added to ASP.NET! Talk about too little too late.</p>
<p>And Amazon - a retail store - successfully launched the best infrastructure in the world and became synonymous with &ldquo;Cloud&rdquo; and Microsoft was still struggling to understand what Linux was.</p>
<p>Failure after failure, instead of defending their low position, they finally decided to step up and move forward one step at a time. Refine. Evolve. Sustain.</p>
<p>Now, Windows 10 recaptured the aura of XP at its best. It&rsquo;s doing incremental, and solid upgrades. First the Anniversary Edition, then the Creators Update and finally the most recent Fall Creators Update. All solid upgrades.</p>
<p>The Surface line-up is going strong as the best reference for industrial design and features on desktops, notebooks, and accessories. Seriously, Apple still sells that terrible slippery, difficult to hold, <a href="https://www.apple.com/shop/product/MLA02LL/A/magic-mouse-2"target="_blank" rel="noopener">Magic Mouse 2</a>, but the &ldquo;magic&rdquo; is that someone actually buys those. Microsoft has the <a href="http://amzn.to/2ztHZVv"target="_blank" rel="noopener">Arc Touch</a> and the <a href="http://amzn.to/2zu8p9o"target="_blank" rel="noopener">Precision Mouse</a>, two of the best ever made.</p>
<p>Creative professionals, software developers, we all jumped ship in droves to OS X when it was the &ldquo;Different Thing&rdquo; on the &ldquo;Think Different&rdquo; campaign. We helped evangelize. We helped build tools. We helped build services. We wrote tons of <a href="http://www.akitaonrails.com/2012/04/20/off-topic-comprei-meu-primeiro-mac-e-agora-edicao-2012"target="_blank" rel="noopener">blog posts</a> and documentation to help out.</p>
<p>Steve Jobs died, and Apple died with him. They basically did nothing new ever since, and their once successful products were left to decay and die. The only thing left is the halo effect, the inertia, and their ever-growing hunger for milking the same cow indefinitely, while ditching R&amp;D altogether.</p>
<h2>Apple doesn&rsquo;t care. Why should I?<span class="hx:absolute hx:-mt-20" id="apple-doesnt-care-why-should-i"></span>
    <a href="#apple-doesnt-care-why-should-i" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Microsoft played smart, they kept fixing and evolving, year after year. They lost the 90s generation. They recaptured the 2010s generation. And they started early, getting their attention from the Xbox all the way to Windows.</p>
<p>Seriously, the XBox Dashboard is better than the PS4&rsquo;s. I highly prefer it.</p>
<p>And they are now in a good position. The players are inverted in the game. The &ldquo;Think Different&rdquo; now refers to Windows 10 and the PC hardware. Intel is playing conservative. NVIDIA builds the best GPUs. There are many great options not available on the Mac.</p>
<p>The jump from 32-bits to 64-bits and the necessities of the XBox even helped Microsoft rethink how to isolate and package their software. Even though the Windows Store is still a bad joke at this point.</p>
<p>And Bill Gates was dead right in the mid-90s: the browser would render the Windows monopoly obsolete. And it did. On the bright side, you have the very same Chrome and Firefox browsers available on OS X, Windows 10, and any Linux distro. This means instant access to most of what people need: Gmail, Google Docs, Office 365, Dropbox, LastPass, Spotify, Slack, Discord, Twitter, Netflix, HBO, Hulu, etc.</p>
<p>I hate Javascript-based desktop wrappers like the plague. Electron is dumb heavy. But, what can I do? At least powerful hardware and RAM come cheap these days, and we can afford browser tabs that eat up 100 MB each.</p>
<p>The browser is the new OS for the majority of people. Heck, most people can get around using Chromebooks! Everything else is on the phones, not the desktop. So hard tools are needed. Soft tools you already carry in your pocket.</p>
<p>The Apple ecosystem is not dead yet. Apple still has time to fix this situation. I&rsquo;ve been waiting for the past 3 years, but still zero signs of anything getting better. My very first switching article was <a href="http://www.akitaonrails.com/en/2015/11/10/situacao-brasil-no-macs-for-the-rest-of-us"target="_blank" rel="noopener">published on Nov 10, 2015</a>.</p>
<p>Unlike other &ldquo;switching&rdquo; articles, I am not saying this lightly. I have switched already, in the past 2 years.</p>
<p>As I say in many of my posts and talks about events: I am not defined by my tools. I don&rsquo;t carry banners. I am not loyal to anyone by default. I was never paid by Apple to defend it. And I am not paid by Microsoft to say good things about them. I just analyze the facts and state the best course of action going forward.</p>
<p>And the facts tell me that macOS is no more. It was a good ride. Goodbye to the Mac and thanks for all the fish.</p>
]]></content:encoded><category>apple</category><category>microsoft</category><category>hardware</category></item><item><title>Windows Subsystem for Linux is good, but not enough yet</title><link>https://akitaonrails.github.io/en/2017/09/20/windows-subsystem-for-linux-is-good-but-not-enough-yet/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2017/09/20/windows-subsystem-for-linux-is-good-but-not-enough-yet/</guid><pubDate>Wed, 20 Sep 2017 14:43:00 -0300</pubDate><description>&lt;p&gt;I wrote a premature post in July of 2016 titled &lt;a href="http://www.akitaonrails.com/en/2016/07/26/o-ano-do-linux-no-desktop-esta-usavel"target="_blank" rel="noopener"&gt;&amp;ldquo;The Year of Linux on the Desktop - It&amp;rsquo;s Usable!&amp;rdquo;&lt;/a&gt; and, indeed, it was (barely) usable.&lt;/p&gt;
&lt;p&gt;The real &amp;ldquo;Year of Linux on the Desktop&amp;rdquo; is still not here. It&amp;rsquo;s getting closer as I will explain.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; this won&amp;rsquo;t be &amp;lsquo;yet-another-WSL-install-blog-post&amp;rsquo;, there are already several out there, for example &lt;a href="https://medium.com/xtrememl/why-how-to-use-windows-10-wsl-built-in-linux-for-machine-learning-6a225f4bbd3a"target="_blank" rel="noopener"&gt;this one&lt;/a&gt; or &lt;a href="https://www.neowin.net/news/bash-plus-windows-10-equals-linux-gui-apps-on-the-windows-desktop"target="_blank" rel="noopener"&gt;this other one&lt;/a&gt;. And you can always &lt;a href="http://lmgtfy.com/?q=windows&amp;#43;10&amp;#43;creator&amp;#43;update&amp;#43;install&amp;#43;WSL"target="_blank" rel="noopener"&gt;Google it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Back in early 2016 Microsoft announced and launched a very alpha version of their current Windows Subsystem for Linux (WSL). It booted and ran some software, but it was awfully buggy. Fair enough as it was still an Insider preview only (by the way, avoid Insider Preview builds, they BSOD all the time as it&amp;rsquo;s in active development).&lt;/p&gt;</description><content:encoded><![CDATA[<p>I wrote a premature post in July of 2016 titled <a href="http://www.akitaonrails.com/en/2016/07/26/o-ano-do-linux-no-desktop-esta-usavel"target="_blank" rel="noopener">&ldquo;The Year of Linux on the Desktop - It&rsquo;s Usable!&rdquo;</a> and, indeed, it was (barely) usable.</p>
<p>The real &ldquo;Year of Linux on the Desktop&rdquo; is still not here. It&rsquo;s getting closer as I will explain.</p>
<p><strong>TL;DR</strong> this won&rsquo;t be &lsquo;yet-another-WSL-install-blog-post&rsquo;, there are already several out there, for example <a href="https://medium.com/xtrememl/why-how-to-use-windows-10-wsl-built-in-linux-for-machine-learning-6a225f4bbd3a"target="_blank" rel="noopener">this one</a> or <a href="https://www.neowin.net/news/bash-plus-windows-10-equals-linux-gui-apps-on-the-windows-desktop"target="_blank" rel="noopener">this other one</a>. And you can always <a href="http://lmgtfy.com/?q=windows&#43;10&#43;creator&#43;update&#43;install&#43;WSL"target="_blank" rel="noopener">Google it</a>.</p>
<p>Back in early 2016 Microsoft announced and launched a very alpha version of their current Windows Subsystem for Linux (WSL). It booted and ran some software, but it was awfully buggy. Fair enough as it was still an Insider preview only (by the way, avoid Insider Preview builds, they BSOD all the time as it&rsquo;s in active development).</p>
<p>A year has passed, and we got to the Windows 10 Anniversary Update and, finally, the much-anticipated <strong>Creators Update</strong>. This is very polished in comparison.</p>
<p>If you&rsquo;re unaware of what the WSL is, I highly recommend that you read the <a href="https://blogs.msdn.microsoft.com/wsl/"target="_blank" rel="noopener">articles at Microsoft&rsquo;s Developer Blog</a> and Jessie Frazelle&rsquo;s awesome <a href="https://blog.jessfraz.com/post/windows-for-linux-nerds/"target="_blank" rel="noopener">Windows for Linux Nerds blog post</a>. In a nutshell, WSL wraps the Windows kernel system calls and maps them as Linux Kernel system calls, fooling ELF64 unmodified Linux compatible binaries to run as if they were on a real Linux-based system. The kicker is that there is no Linux kernel running! It also wraps Windows services such as filesystem, networking, into appropriate devices that Linux can access.</p>
<p>So, it&rsquo;s not any kind of virtualization. There is no Hyper-V involved. It&rsquo;s enabling Windows to boot ELF64 binaries up directly, without recompilation, without modification.</p>
<p>Unlike in OS X where we need to tweak source code and recompile to run on Darwin (the Mach/BSD-based operating system layer), we can download Ubuntu binaries (or any other distro for that matter, there are Fedora and Suse coming soon to the Windows App Store) and run them <strong>directly</strong>.</p>
<p>Even more interesting, you can run system level daemons (yes, Postgresql, Memcached, Redis, etc all load and run in the background) and you can even run X (GUI) programs!</p>
<p>Don&rsquo;t get me wrong, I commend everybody that is working hard at Microsoft to make this happen. It is a technical tour de force in itself.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/657/2017-09-14.png" alt="Windows and X side-by-side"  loading="lazy" /></p>
<p>Take a good look at the screenshot above. This is a sight to behold: native GNOME-VIM running natively side-by-side with Microsoft Edge loading a web site running out of a Rails app running within WSL, accessing PostgreSQL.</p>
<p>But, is it good for real people?</p>
<h3>How good is WSL?<span class="hx:absolute hx:-mt-20" id="how-good-is-wsl"></span>
    <a href="#how-good-is-wsl" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p><strong>TL;DR</strong> it&rsquo;s not nearly as smooth as running a pure Linux-distro, and the integration is not nearly as good as OS X in terms of usability as Windows was not redesigned in any meaningful way to be a UNIX system like OS X.</p>
<p>In an ideal world, Windows should replace its entire NT underpinnings and either build their own BSD-inspired infrastructure (like Darwin) or create their own Linux distro using off-the-shelf Linux kernel as the main driver (probably can&rsquo;t because of GPL).</p>
<p>But this is unrealistic. Apple could do it in a time when the Mac installed base was tiny, so alienating some people wouldn&rsquo;t hurt so much. Windows is just too big to fail. It is and will remain a maintenance nightmare of epic proportions.</p>
<p>That being said, WSL in itself is a miracle, so I can&rsquo;t complain. Microsoft had a really harsh decade in the turn of the century. Windows 10 is a return to form, and 2 big iterations later, it&rsquo;s finally becoming reasonable again. Maybe we&rsquo;re a couple of upgrades away from a really usable WSL. Remains to be seen.</p>
<p>Apple had its miracle in the turn of the century, and OS X and iOS are terrific OSes. Best of the breed. And by being able to reboot the entire ecosystem from scratch is not something anyone can do.</p>
<p>Linux-distros had their own ups and downs. No ecosystem can evolve healthily and in a cohesive way being that fragmented. But each major distro was able to brute force their own ecosystems. Canonical has prevailed where many failed but they are still not a definitive winner, and it feels like they&rsquo;re <a href="https://arstechnica.com/information-technology/2017/04/ubuntu-unity-is-dead-desktop-will-switch-back-to-gnome-next-year/"target="_blank" rel="noopener">losing their steam</a>. RedHat enjoyed the craze of the dot-com era and was able to fly high in the Enterprise market. There is no &ldquo;best&rdquo; distro. It&rsquo;s again, a matter of taste and ego, most of the time for most of the people.</p>
<p>And the OSS community still wastes an insurmountable amount of time in crazy disputes over stuff like the <a href="https://www.reddit.com/r/linuxmasterrace/comments/616wxo/what_is_with_all_the_controversy_with_systemd/"target="_blank" rel="noopener">Systemd controversy</a> or the time it is taking to get over X and finally get into Wayland. OSS has pros and cons, just like everything else.</p>
<p>But I digress, going back to WSL. Yes, as promised almost anything you can do in a native Ubuntu 16.04 can be done in this new environment. Even the ridiculous <code>cmd.exe</code> was heavily upgraded to the 21st century. Still nowhere near a default Terminal on Linux or OS X, but getting close. Actually, I&rsquo;d recommend installing <a href="https://github.com/goreliu/wsl-terminal"target="_blank" rel="noopener">WSL Terminal</a> as a replacement, and despite the terrible &ldquo;Bash on Ubuntu on Windows&rdquo; moniker, I&rsquo;d recommend installing ZSH instead and launching it over Bash for extra usability features.</p>
<p>You can Google around for endless tutorials on how to customize your environment, Vim, tweak PostgreSQL and so forth. So again I am not repeating those here. A caveat is that I have to <code>sudo /etc/init.d/PostgreSQL start</code> to actually run daemons. They won&rsquo;t autoload on a restart, keep that in mind.</p>
<p>And now you can install a Windows X Server such as <a href="https://sourceforge.net/projects/xming/"target="_blank" rel="noopener">xming</a> and <code>export DISPLAY=:0</code> and you now <code>sudo apt install gvim</code> and load the graphical version of Gvim, for instance. Or a full GNOME or XFCE desktop if that&rsquo;s your thing. You can run X based applications side-by-side to Windows apps, and that&rsquo;s super neat. I like to install <a href="https://github.com/skwp/dotfiles"target="_blank" rel="noopener">YADR</a> which is one of those super customized dotfiles collection and it works just fine.</p>
<p>I am now using <a href="https://github.com/asdf-vm/asdf"target="_blank" rel="noopener">ASDF</a> to install and manage multiple versions of Ruby, Node.js, Elixir, etc. And it also just works.</p>
<p>I was able to move my SSH keys from my previous <a href="http://www.akitaonrails.com/en/2017/01/10/arch-linux-a-melhor-distro-de-todas"target="_blank" rel="noopener">Arch Linux</a> install. And then I can clone from my Git repositories. Now, here comes the <strong>big caveat</strong>. I cloned and configured a Rails project. This is the fastest I can get running an entire RSpec suite with PhantomJS acceptance tests:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>Finished in 5 minutes 35 seconds (files took 48.53 seconds to load)
888 examples, 0 failures</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>This is running on my <a href="http://www.akitaonrails.com/en/2017/01/31/do-macbook-pro-para-o-dell-xps-arch-linux-para-usuarios-criativos"target="_blank" rel="noopener">Dell XPS 9550</a> with Core i7 Skylake (4 cores, 8 threads), 16 GB of RAM and NVME2 SSD. I asked a co-worker to run it on his very old Mac Mini 2012 with Core i5 (probably Haswell), 10 GB of RAM, normal SSD. And this is his test run:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>Finished in 3 minutes 37.6 seconds (files took 9.73 seconds to load)
888 examples, 0 failures</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Yep, this is shocking. The filesystem emulation is <a href="https://meta.discourse.org/t/installation-notes-for-discourse-on-bash-for-windows/48141/3?u=sam"target="_blank" rel="noopener">notoriously slow</a> under WSL (at least 4 times slower as you can see in the numbers above).</p>
<p>This other test ran in a slightly newer hardware (still underpowered compared to my Dell XPS) running on Linux Mint:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>Finished in 3 minutes 2.4 seconds (files took 22.69 seconds to load)
888 examples, 1 failure</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>I ran the same suite a couple of times to make sure, but it can&rsquo;t go below the 5 minute mark and loading files is always around 1 minute while in other OSes it&rsquo;s 2 to 4 times faster.</p>
<p>If your development workflow is I/O bound, you will suffer. Webpack compilation, which is slow, gets even slower. Npm/Yarn installs take forever. Installing stuff from source is super slow.</p>
<p>It&rsquo;s not unusable, but this slowness will get old fast.</p>
<h3>What about Virtualization?<span class="hx:absolute hx:-mt-20" id="what-about-virtualization"></span>
    <a href="#what-about-virtualization" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>After I saw the dismal filesystem performance shown above, I wondered <em>&ldquo;and what about running everything under good old Virtualbox?&rdquo;</em></p>
<p>In theory, WSL &ldquo;should&rdquo; be a thinner layer than Virtualbox, but the worst offender in terms of overhead seems to be the filesystem abstraction layer, and not necessarily access to CPU or RAM. My instinct would first suggest that a Virtual Drive, which is a single file mounted as a virtual hard drive, would perform much better.</p>
<p>So here I go, installing Virtualbox and the same set of tools (asdf, etc).</p>
<p>Mounting a shared folder directly to the one in WSL doesn&rsquo;t work properly, seems like the mounting protocol doesn&rsquo;t understand dot files, so they don&rsquo;t show up. One has to tar the folder and untar within the machine to preserve hidden files and permissions.</p>
<p>This is running the same Rspec suite over Virtualbox with 4 Cores (out of the 8 my machine has) and 4GB of RAM:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>Finished in 2 minutes 3.4 seconds (files took 6.33 seconds to load)
888 examples, 2 failures</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>So, we&rsquo;re down from 5:35 min to 2:03 min and file loading from 49 seconds down to 6 seconds! So around 2.5 times faster execution and a whopping 8 times increase in file loading! This is ridiculous and it makes way more sense. My 2016 machine, within Virtualbox, still outperforms 2011/2012 bare hardware. And WSL is in the bottom of the list.</p>
<p>Forget synthetic benchmarks, this is a real-world case mixing CPU and I/O bound executions. Just for the sake of comparison, I tried to see if I could squeeze a bit more performance if I try to run over VMWare Workstation. This is the result:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>Finished in 2 minutes 3.3 seconds (files took 6.21 seconds to load)</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Almost identical. To me, it says that Virtualbox came a long way in being comparable to commercial, historically more robust solutions such as VMware or Parallels, so I will stick with Virtualbox for the time being.</p>
<p>I tried another test. This is <code>asdf</code> installing the brand new Ruby 2.4.2 from source. First over WSL (running with <code>time</code>):</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>229.38s user 244.59s system 113% CPU 6:57.51 total</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>And the same install from Virtualbox:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>295,39s user 22,43s system 135% CPU 3:53,87 total</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Again, a mixed scenario of CPU and I/O bound executions. And I am at least twice as fast on Virtualbox.</p>
<p>If you do want to see more controlled scenarios running synthetic benchmark comparison, I recommend you read <a href="http://www.phoronix.com/scan.php?page=article&amp;item=intel-7900x-wsl&amp;num=1"target="_blank" rel="noopener">Phoronix&rsquo;s take on WSL vs Virtualbox</a></p>
<h3>The &ldquo;Year of Linux on the Desktop&rdquo; Conundrum<span class="hx:absolute hx:-mt-20" id="the-year-of-linux-on-the-desktop-conundrum"></span>
    <a href="#the-year-of-linux-on-the-desktop-conundrum" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>The Lack of commercial software is one problem but one of the reasons is the lack of backward binary compatibility.</p>
<p>For all its problems, Microsoft remained committed to a very difficult concept: you can actually run unmodified binaries from Windows 95 in the current Windows 10. Most of the time they &ldquo;just work&rdquo;. In Linux distros, every binary is compiled against very specific library headers such as the kernel itself, Glibc and many others. Whenever one of those change, all binaries must be recompiled to run. Which is why you have the concept of &ldquo;distros&rdquo; where they recompile and test a whole set of software. Long-Term Support (LTS) is basically locking those dependencies versions for a couple of years to have software running without the need to recompile so much. But in bleeding-edge distros, you can&rsquo;t avoid having to recompile a lot of things many times over.</p>
<p>Windows carries the old dependency binaries around. OS X does the same to a degree. And OS X goes one step further by providing the concept of &ldquo;fat binaries&rdquo; (or &ldquo;Universal Binaries&rdquo;) where you have a package with multiple binaries that target different hardware architectures (32-bit vs 64 bit, Intel vs ARM vs PowerPC).</p>
<p>Mostly because of this support, commercial complex applications like Office or Adobe&rsquo;s Creative Suite can run on many different machines, across many different OS versions, over many years without upgrading. In Linux distros, it&rsquo;s a major hassle for binaries. Which is why having source code available is so important and it&rsquo;s a philosophical discussion over the whole &ldquo;Free Software&rdquo; concept, as envisioned by Richard Stallman.</p>
<p>This is an unsolvable dilemma. Linux distros don&rsquo;t have binary backward compatibility out of the box. Developers must rely on tools such as the <a href="https://lvc.github.io/abi-compliance-checker/"target="_blank" rel="noopener">ABI Compliance Checker</a>. Try to use <a href="http://www.airs.com/blog/archives/220"target="_blank" rel="noopener">symbol versioning</a> from glibc and so forth, but it&rsquo;s not realistic to expect volunteers collaborating their free time to open source to keep maintaining old versions of software for many years down the road. It is a fair compromise. Do you want the best, faster, most secure? Upgrade often, but expect old, unmaintained software to break.</p>
<p>So, without releasing the source code, you can&rsquo;t have good compatible binaries for every single major distribution, across many different versions going back many years.</p>
<h3>Which is right for you?<span class="hx:absolute hx:-mt-20" id="which-is-right-for-you"></span>
    <a href="#which-is-right-for-you" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>There is no point in trying to benchmark OSes. They are all generally good enough.</p>
<p>Macs are more expensive (sometimes by a whopping 1 grand or more). There is no denying that. The compromise is that Apple&rsquo;s hardware, OS X and the ecosystem are generally the better all around, and the &quot; fit and finish&quot; of the products are really usually better from a user experience perspective.</p>
<p>For the best mix of mainstream software and open source software, you won&rsquo;t find a better alternative. If you can afford a Mac, get a Mac.</p>
<p>Gamers have to stick with Windows. Again, there is no denying that. The best games are on Windows, period. The best combination of hardware supports Windows. No Linux tweaking will give you the raw juice you need to squeeze out 4K 60fps out of the newest AMD and NVIDIA cards through DirectX. And the Mac hardware is capped, and you can&rsquo;t add the newest GPUs. If you want to play the latest AAA games the way they were envisioned to perform, get custom hardware and Windows 10.</p>
<p>Web Developers are luckier. You can&rsquo;t go wrong, it&rsquo;s literally a matter of taste which OS you choose. You will be able to deliver the same results using the same tools. And unless you&rsquo;re targeting specific Microsoft infrastructure (SQL Server, Active Directory, etc), you can install any Linux distro and rejoice.</p>
<p>Desktop App Developers must target their audience. If you want to build Windows desktop apps, you have to be on Windows. You can use .NET/Xamarin or Java to build cross-platform compatible binaries, though. But you guys are out of luck because ideally, you have to have all 3 to ensure your software is performing as you want.</p>
<p>Mobile App Developers are also out of luck. You can do Android on Windows or Linux, but you have to have a Mac to develop for the Apple App Store. You can&rsquo;t escape that, and good luck waiting for Apple to release their tools for other platforms.</p>
<p>Creative Professionals can choose either Windows or OS X. That depends on the tooling. If you&rsquo;re an Adobe guy, either will do just fine, but you will probably want a custom workstation. Until Apple remodels the ridiculous Mac Pro, you won&rsquo;t find the best hardware for the buck at Apple. The current iMac 5K is good, but higher than that is not available. For example, if you need the power of 2 NVIDIA Titan or Quadro cards running in parallel, Apple can&rsquo;t help you there.</p>
<p>If you do require a Final Cut Pro, Logic Pro, Motion 5 workflow, the best option you will get is the iMac 5K.</p>
<p>I am not a full-time developer anymore. And I mix my time running a company, doing presentations, experimenting with tech and doing research. My ideal setup is actually a MacBook Pro. But I am forcing myself to live out of the Apple ecosystems, and it hurts. My web developer side can stay in Linux (Manjaro GNOME is my favorite nowadays) and be happy. But when my Creative side needs tooling, Gimp, Inkscape, Kdenlive, are just not good enough. I am too used to Photoshop, Illustrator, Final Cut/Premiere, Motion 5/After Effects. LibreOffice Impress is terrible to do complex presentations, and  those HTML/JS based slides software are good just for simple stuff. Try to do serious graphics and animation there and you will suffer in hell.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/a59U6kRJHLg"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<p>If you&rsquo;re a Creative, you <strong>need</strong> Color Calibrated screens (Adobe RGB space), you need the raw processing power to do a quick render and advanced post-processing. Adobe video editors will prefer Windows. Final Cut video editors are well served on Macs, even though the new MacBook Pro&rsquo;s cooling system is terrible:</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/6TWbXV5xeYE"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<p>And if you&rsquo;re a full-time video editor, you can afford either high-end PC or Mac configurations, so there is not much dispute here.</p>
<p>If you&rsquo;re a video editor on a budget, you will <strong>not</strong> have a good 4K editing workflow on Linux, period. There is poor support to unlock the full potential of modern GPUs, no good Cuda or OpenCL support, and most video editing tools don&rsquo;t use them. Blender - which is primarily a 3D modeling and animation tool - is considered one of the best video editing tools available on Linux, which says a lot. The sad state of GPU support on Linux compromises Creative usage. The only other non-linear video editing tool that can achieve professional level workflows is <a href="https://www.linux.com/learn/pro-level-video-editing-lightworks-linux"target="_blank" rel="noopener">LightWorks</a> and it&rsquo;s not open source, requires the proprietary NVIDIA binaries, and <a href="https://www.lwks.com/index.php?option=com_shop&amp;view=shop&amp;Itemid=205"target="_blank" rel="noopener">will cost</a> you.</p>
<p>If you&rsquo;re going that way, it&rsquo;s probably better to stick with either Windows or OS X at this point.</p>
<h3>Conclusion<span class="hx:absolute hx:-mt-20" id="conclusion"></span>
    <a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>I digressed quite a bit, but my conclusion is simple:</p>
<ul>
<li>WSL is not there yet. We have to wait another couple upgrades. When you hear that they improved the filesystem abstraction by a few orders of magnitude, then we can try again. And keep in mind that there are tons of <a href="https://github.com/Microsoft/BashOnWindows/issues"target="_blank" rel="noopener">open issues</a>, so your mileage will vary.</li>
<li>If you&rsquo;re a Web Developer, you&rsquo;re safe on any Linux distro.</li>
<li>If you&rsquo;re a mixed professional in need of both development toolkits and creative tools, use a Mac or Windows 10 with a fully virtualized Linux distro.</li>
<li>If you&rsquo;re a Gamer, Windows.</li>
<li>If you&rsquo;re a full-time creative professional, either Macs or PCs will do just fine.</li>
</ul>
<p>For me, I will stick with my Dell XPS running Windows 10 and Manjaro GNOME over Virtualbox. Virtualbox is fast enough that it won&rsquo;t hurt my workflow. And the creative tools can appreciate the access to my NVIDIA Cuda cores without any problem, so I can render with Blender and make Premiere render 4K video quickly enough.</p>
]]></content:encoded><category>linux</category><category>microsoft</category><category>performance</category></item><item><title>The Year of Linux on the Desktop - It's Usable!</title><link>https://akitaonrails.github.io/en/2016/07/26/the-year-of-linux-on-the-desktop-it-s-usable/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2016/07/26/the-year-of-linux-on-the-desktop-it-s-usable/</guid><pubDate>Tue, 26 Jul 2016 14:13:00 -0300</pubDate><description>&lt;p&gt;07/23/16: coincidentally I posted this review a day before the final release :-) So the final build is 14393 and &lt;a href="http://arstechnica.com/information-technology/2016/07/windows-10-anniversary-update-is-ready-to-go-and-free-for-just-a-few-more-days/"target="_blank" rel="noopener"&gt;it&amp;rsquo;s available&lt;/a&gt; for free right now!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s been 3 months since I posted &lt;a href="https://akitaonrails.github.io/en/2016/04/12/the-year-of-linux-on-the-desktop-by-microsoft"&gt;my initial impressions&lt;/a&gt; on Windows 10 Anniversary Edition&amp;rsquo;s most important feature: Bash on Windows. My conclusion at the time was that it was not ready for prime time yet.&lt;/p&gt;
&lt;p&gt;My conclusion as of right now, on July 26th is that it&amp;rsquo;s finally usable enough for web developers, particularly for Ruby developers who always suffered through lack of Windows support.&lt;/p&gt;</description><content:encoded><![CDATA[<p>07/23/16: coincidentally I posted this review a day before the final release :-) So the final build is 14393 and <a href="http://arstechnica.com/information-technology/2016/07/windows-10-anniversary-update-is-ready-to-go-and-free-for-just-a-few-more-days/"target="_blank" rel="noopener">it&rsquo;s available</a> for free right now!</p>
<p>It&rsquo;s been 3 months since I posted <a href="/en/2016/04/12/the-year-of-linux-on-the-desktop-by-microsoft">my initial impressions</a> on Windows 10 Anniversary Edition&rsquo;s most important feature: Bash on Windows. My conclusion at the time was that it was not ready for prime time yet.</p>
<p>My conclusion as of right now, on July 26th is that it&rsquo;s finally usable enough for web developers, particularly for Ruby developers who always suffered through lack of Windows support.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/543/big_Screen_Shot_2016-07-26_at_13.28.48.png" alt="It’s alive!"  loading="lazy" /></p>
<p>Installation process is the same. You must be signed up to the <a href="http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/"target="_blank" rel="noopener">Windows Insider</a> program, wait at least one day if this is your first time. Enable the <strong>Fast ring</strong> of updates, install the Preview edition from normal Windows Update and then turn on the &ldquo;Windows Subsystem for Linux (Beta)&rdquo; feature.</p>
<blockquote>
  <p>Last time I was testing Windows 10 over Virtualbox over Ubuntu 14.04 on a Dell Inspiron notebook (8 cores i7 with 16GB of RAM). It was super slow, I don&rsquo;t recommend it at all. Now I am back on my trustworthy Macbook Pro 2013 with 16GB of RAM and SSD running VMWare Fusion, and Windows 10 flies here. Super recommended.</p>

</blockquote>
<p>Once you do all that, you can start the &ldquo;Bash on Ubuntu on Windows&rdquo; (a mouthful). The first good surprise is that it prompts you to register a new username instead of just falling back to Root. As I said in my previous post, it&rsquo;s good practice to create a new user and add it to the sudoers group, and this is what it does. So you can install packages using &ldquo;sudo apt-get install&rdquo;.</p>
<p>You should follow my <a href="/en/2016/04/12/the-year-of-linux-on-the-desktop-by-microsoft">previous post</a> for all the packages and configurations I normally do in a development Linux box.</p>
<p>RVM now works! I was able to install Ruby 2.3.1 through RVM without any problems whatsoever.</p>
<p>I was able to <code>git clone</code> a small Rails project and properly <code>bundle install</code>. All gems were downloaded, native extensions compiled without any flaws.</p>
<p>Some things still don&rsquo;t work. For example, you won&rsquo;t be able to finish the Postgresql 9.3 installation. It will download and install but the cluster setup fails as you can follow through <a href="https://github.com/microsoft/WSL/issues/61"target="_blank" rel="noopener">this issue</a> thread.</p>
<p>But you don&rsquo;t need to have <strong>everything</strong> installed under Ubuntu, you can just fall back to the native <a href="https://www.postgresql.org/download/windows/"target="_blank" rel="noopener">Postgresql for Windows</a> and edit your <code>config/database.yml</code> to point to server <code>127.0.0.1</code> and port <code>5432</code>. On the Ubuntu side you just need to install <code>libpq-dev</code> so the <code>pg</code> gem can compile its native extensions and that&rsquo;s it.</p>
<p>Smaller services such as Memcached or Redis install properly with <code>apt-get</code> but they won&rsquo;t auto-start through Upstart. But you can start them up manually and use something like <a href="https://github.com/ddollar/foreman"target="_blank" rel="noopener">Foreman</a> to control the processes. They both start and work well enough, so you can test caching in your Rails projects and also test Sidekiq workers.</p>
<p>I know this is still a Preview, so more bug fixes and possibly new features are still coming before the final release in August. What bugs me the most is that every command I run with <code>sudo</code> takes a few seconds to start. It&rsquo;s annoying, but it works in the end.</p>
<p>Node.js 6.3.1 successfully installs and runs. I was able to <code>npm i</code> and <code>node server.js</code> on Openshift&rsquo;s Node <a href="https://github.com/openshift/nodejs-ex"target="_blank" rel="noopener">example repository</a>.</p>
<p>Crystal 0.18.7 installs successfully and properly compiled my <a href="https://github.com/akitaonrails/cr_manga_downloadr"target="_blank" rel="noopener">Manga Downloader</a> project. It ran my built-in performance test in 15 minutes. The performance is modest, but it runs correctly to the end. (And yes, Crystal runs on Windows now too!).</p>
<p>Go 1.6 works. I just did a <code>go get</code> to install Martini and just ran the simple &ldquo;Hello World&rdquo; server. Compiles, starts and executes very fast as expected.</p>
<p>Unfortunately, Elixir 1.3.1 crashes, I don&rsquo;t know why yet.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>$ iex
Crash dump is being written to: erl_crash.dump...done
erl_child_setup closed</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Actually, Erlang itself crashes by just trying to run <code>erl</code>. None of the Elixir tools work as a result. No iex, no mix. The funny thing is that it was working in the initial Preview. So either it&rsquo;s something in the new Preview or something in the newest Erlang releases. There are <a href="https://github.com/microsoft/WSL/issues?utf8=%e2%9c%93&amp;q=is%3Aissue%20elixir"target="_blank" rel="noopener">open issues</a> regarding this problem, so let&rsquo;s hope it gets fixed soon.</p>
<p><a name="best-windows-dev-env"></a></p>
<h3>&ldquo;The Best Environment for Rails on Windows&rdquo;<span class="hx:absolute hx:-mt-20" id="the-best-environment-for-rails-on-windows"></span>
    <a href="#the-best-environment-for-rails-on-windows" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>I have <a href="https://web.archive.org/web/20160814041945/http://www.akitaonrails.com/2009/1/13/the-best-environment-for-rails-on-windows"target="_blank" rel="noopener">this very old 2009 post</a> to guide developers that are locked on Windows to implement Rails projects. The first advice is to avoid Ruby for Windows. I really commend the efforts of great developers such as Luis Lavena, who invested a lot of time to make it work well enough. But unfortunately the reality is that Ruby is made for Linux environments, it binds to native extensions in C that have lots of dependencies that are not easy to make available on Windows.</p>
<p>So the best option up until now was to install Vagrant (through Virtualbox or, even better, VMWare) as the runtime and use Windows-available editors such as Sublime Text 3 or Atom.</p>
<p>Now you can avoid the Vagrant/virtualization part and directly use &ldquo;Bash on Ubuntu on Windows&rdquo;. It&rsquo;s so complete that I can even use ZSH and install complex dotfiles such as YADR. You can run Postgresql for Windows and connect to localhost:5432 in your Rails application or any web application that requires Postgresql for example.</p>
<p>You can install ConEmu as a better terminal emulator than the stupidly bad cmd.exe default console. Follow <a href="https://conemu.github.io/en/BashOnWindows.html"target="_blank" rel="noopener">this article</a> to get news on its support of Bash on Windows. Right now you have to edit the &ldquo;Ctrl-V&rdquo; hotkey to something else (&ldquo;Ctrl-Shift-V&rdquo;), arrow keys don&rsquo;t work well on Vim, and you can add a Default Task for Bash like this: <code>%windir%\system32\bash.exe ~ -cur_console:p</code></p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/544/big_Screen_Shot_2016-07-28_at_14.13.36.png" alt="Developing Rails on Windows"  loading="lazy" /></p>
<h3>Conclusion<span class="hx:absolute hx:-mt-20" id="conclusion"></span>
    <a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>So, yes, at least from this version I tested (installed on July 25th) this is a <strong>usable</strong> &ldquo;Bash on Ubuntu on Windows&rdquo; and web developers from Ruby to Javascript to Crystal to Go can really start testing and trying to make Windows 10 Anniversary their primary platform for serious Linux-based development.</p>
<p>Add Sublime Text or Atom (or Visual Studio, if that&rsquo;s your thing) and you should be good to go. I expect the next releases to fix some of the bugs and performance issues, but compared to what we saw in April, it&rsquo;s a huge improvement.</p>
<p>Kudos to Microsoft for that!</p>
<p>And if you want to know more hardcore details on how the Windows Subsystem for Linux is actually implemented, I recommend this series of blog posts from MSDN itself:</p>
<ul>
<li><a href="https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/"target="_blank" rel="noopener">Windows Subsystem for Linux Overview</a></li>
<li><a href="https://blogs.msdn.microsoft.com/wsl/2016/05/23/pico-process-overview/"target="_blank" rel="noopener">Pico Process Overview</a></li>
<li><a href="https://blogs.msdn.microsoft.com/wsl/2016/06/08/wsl-system-calls/"target="_blank" rel="noopener">WSL System Calls</a></li>
<li><a href="https://blogs.msdn.microsoft.com/wsl/2016/06/15/wsl-file-system-support/"target="_blank" rel="noopener">WSL File System Support</a></li>
</ul>
]]></content:encoded><category>microsoft</category><category>linux</category><category>developer-tools</category><category>off-topic</category></item><item><title>The Year of Linux on the Desktop, by Microsoft??</title><link>https://akitaonrails.github.io/en/2016/04/12/the-year-of-linux-on-the-desktop-by-microsoft/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2016/04/12/the-year-of-linux-on-the-desktop-by-microsoft/</guid><pubDate>Tue, 12 Apr 2016 18:33:00 -0300</pubDate><description>&lt;p&gt;So, it&amp;rsquo;s finally here. I wrote about the announcement at the Build event a few days ago &lt;a href="https://akitaonrails.github.io/en/2016/03/31/war-is-over-or-is-it-a-new-dawn-for-microsoft"&gt;here&lt;/a&gt;. Now Microsoft is teasing us a bit more and &lt;a href="http://thehackernews.com/2016/04/how-to-run-ubuntu-on-windows-10.html"target="_blank" rel="noopener"&gt;released the first Insider Build Preview&lt;/a&gt;. The label is &amp;ldquo;Build 14316.rs1_release.160402-2217&amp;rdquo;; make sure that&amp;rsquo;s exactly the one you have before going further.&lt;/p&gt;
&lt;p&gt;To get it, you must have the following requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Have an activated Windows 10 64-bits&lt;/li&gt;
&lt;li&gt;Sign up for the &lt;a href="https://insider.windows.com/"target="_blank" rel="noopener"&gt;Windows Insider&lt;/a&gt; Program. If it&amp;rsquo;s your first time it can take up to 24 hours to activate&lt;/li&gt;
&lt;li&gt;In your Windows Update Settings, Advanced Options, you must choose to &amp;ldquo;Get Started&amp;rdquo; in the Insider option and also choose the &amp;ldquo;Fast&amp;rdquo; Ring option. Now, when you Check for Updates, the Preview 14316 should show up. If not, wait until your account is refreshed by Microsoft.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/538/windows_update_settings.jpg"target="_blank" rel="noopener"&gt;&lt;img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/538/big_windows_update_settings.jpg" alt="windows update settings" loading="lazy" /&gt;&lt;/a&gt;&lt;/p&gt;</description><content:encoded><![CDATA[<p>So, it&rsquo;s finally here. I wrote about the announcement at the Build event a few days ago <a href="/en/2016/03/31/war-is-over-or-is-it-a-new-dawn-for-microsoft">here</a>. Now Microsoft is teasing us a bit more and <a href="http://thehackernews.com/2016/04/how-to-run-ubuntu-on-windows-10.html"target="_blank" rel="noopener">released the first Insider Build Preview</a>. The label is &ldquo;Build 14316.rs1_release.160402-2217&rdquo;; make sure that&rsquo;s exactly the one you have before going further.</p>
<p>To get it, you must have the following requirements:</p>
<ul>
<li>Have an activated Windows 10 64-bits</li>
<li>Sign up for the <a href="https://insider.windows.com/"target="_blank" rel="noopener">Windows Insider</a> Program. If it&rsquo;s your first time it can take up to 24 hours to activate</li>
<li>In your Windows Update Settings, Advanced Options, you must choose to &ldquo;Get Started&rdquo; in the Insider option and also choose the &ldquo;Fast&rdquo; Ring option. Now, when you Check for Updates, the Preview 14316 should show up. If not, wait until your account is refreshed by Microsoft.</li>
</ul>
<p><a href="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/538/windows_update_settings.jpg"target="_blank" rel="noopener"><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/538/big_windows_update_settings.jpg" alt="windows update settings"  loading="lazy" /></a></p>
<p>You must have, at the very least, 10GB of available space in your main partition, so keep that in mind. Another caveat: if you&rsquo;re like me and you&rsquo;re testing under Virtualbox, also bear in mind that to resize a virtual drive you must delete your snapshots, and the merging process can take a ridiculously long time.</p>
<p>Once it&rsquo;s installed, you must go to the Developer options in the &ldquo;Update &amp; Security&rdquo; Control Panel and change your profile to &ldquo;Developer Mode&rdquo;. This &ldquo;Bash on Windows&rdquo; feature will show up under the Windows Features list. It&rsquo;s intended for <strong>developers only</strong>, not to be used in production servers.</p>
<p>Once you have the Preview installed you must be able to fire up the old cmd.exe console (or any other better console such as <a href="https://conemu.github.io/"target="_blank" rel="noopener">ConEmu</a>) and type in &ldquo;bash&rdquo;; it will prompt you to install the userland Canonical packaged for Ubuntu. This takes another while. The whole process takes a lot of time, by the way, so make sure you reserve half a day at least. Don&rsquo;t do it at work :-)</p>
<p>One problem I stumbled upon right away is that networking was not working properly. Someone <a href="https://github.com/microsoft/WSL/issues/35"target="_blank" rel="noopener">narrowed it down</a> to DNS not being added to <tt>/etc/resolv.conf</tt> so you must add it manually. Just add the Google DNS (8.8.8.8 and 8.8.4.4) to the resolv.conf file and you&rsquo;re up.</p>
<p>Finally, you land inside bash as the root user. If you&rsquo;re a Windows user, know right now that running as root is insecure and a bad practice. Don&rsquo;t do it.</p>
<p>The very first thing you <strong>must</strong> do is manually create an unprivileged Linux user and add it to the sudo group as Andrew Malton <a href="https://web.archive.org/web/20160411063840/http://blog.greenarrow.me/elixir-with-ubuntu-for-windows/"target="_blank" rel="noopener">blogged</a> first:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>useradd new_username -m -s /bin/bash 
passwd new_username
usermod -aG sudo new_username</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Then you can log into this user shell with <tt>su - [your user]</tt> every time!</p>
<p>From here, we can assume it&rsquo;s a plain Ubuntu 14.04 and you should be able to follow <a href="http://www.akitaonrails.com/2015/01/28/ruby-e-rails-no-ubuntu-14-04-lts-trusty-tahr"target="_blank" rel="noopener">my very old post</a> on how to setup a developer Ubuntu environment, or any other tutorial you can find over Google. These basic development packages that I always install first all run:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>sudo apt-get install curl build-essential openssl libcurl4-openssl-dev libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev libgmp-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion redis-server libhiredis-dev memcached libmemcached-dev imagemagick libmagickwand-dev exuberant-ctags ncurses-term ack-grep git git-svn gitk ssh libssh-dev

sudo dpkg-divert --local --divert /usr/bin/ack --rename --add /usr/bin/ack-grep</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>This should give you all the compilation toolchain essentials as well as some well known command line tools such as ack (way better than grep). It also adds Redis and Memcached. They all run.</p>
<p>As good practice you should add the following to your <tt>/etc/bash.bashrc</tt> configuration file:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>And after that you should also configure locale to UTF-8:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>sudo locale-gen en_US.UTF-8
sudo dpkg-reconfigure locales</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Just to warm up a little bit, we can start with one of the things that were impossible in Windows: getting a stable Ruby installation. For that, RVM is said to not work (as ZSH is also not working due to /dev/pts and symlink problems in this preview, see more below). But RBENV is working! You must <a href="https://github.com/rbenv/rbenv"target="_blank" rel="noopener">install it</a> first and then the <a href="https://github.com/rbenv/ruby-build#readme"target="_blank" rel="noopener">ruby-build</a> plugin:</p>
<p><a href="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/536/installing_ruby.png"target="_blank" rel="noopener"><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/536/big_installing_ruby.png" alt="installing ruby through rbenv"  loading="lazy" /></a></p>
<p>Interestingly, it takes a lot of time to complete and during the process CPU usage goes through the roof. Installing Go is even longer! Something is still unstable underneath as it shouldn&rsquo;t take the CPU to 100% for so long.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/537/big_resources.jpg" alt="CPU through the roof"  loading="lazy" /></p>
<p>If I check how much memory I have in the system it becomes clearer:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>root@localhost:/mnt/c/Users/fabio# free -h
             total       used       free     shared    buffers     cached
Mem:          1.0G       342M       664M         0B         0B         0B
-/&#43; buffers/cache:       342M       664M
Swap:           0B         0B         0B</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>I am not sure if this is somehow just a &ldquo;hard-coded&rdquo; value for memory as many people are reporting the same &ldquo;664M&rdquo; free regardless of what we are running. But something is incomplete here. Swap is also zero and you can&rsquo;t add any as far as I can tell. Swapon, fallocate, none of those work yet.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>root@localhost:/mnt/c/Users/fabio# swapon -s
swapon: /proc/swaps: open failed: No such file or directory

root@localhost:/mnt/c/Users/fabio# fallocate -l 4G swapfile
fallocate: swapfile: fallocate failed: Invalid argument</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>I actually tried to <a href="https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04"target="_blank" rel="noopener">create a swap file</a> using <tt>dd</tt> instead of <tt>fallocate</tt> and add it to the <tt>/etc/fstab</tt> but it didn&rsquo;t work:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>root@localhost:/mnt/c/Users/fabio# free -m
             total       used       free     shared    buffers     cached
Mem:          1006        342        664          0          0          0
-/&#43; buffers/cache:        342        664
Swap:            0          0          0

root@localhost:/mnt/c/Users/fabio# cat /etc/fstab
LABEL=cloudimg-rootfs   /        ext4   defaults        0 0
/swapfile       none    swap    sw      0 0</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>So it sounds like memory is &ldquo;hard-coded&rdquo;. Follow <a href="https://github.com/microsoft/WSL/issues/92"target="_blank" rel="noopener">this issue #92</a> if you want to know how it develops.</p>
<p>But worse than that, shared memory has very low limits and strange behavior. Postgresql will install but won&rsquo;t start up at all:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>root@localhost:/mnt/c/Users/fabio# pg_createcluster 9.3 main --start
Creating new cluster 9.3/main ...
  config /etc/postgresql/9.3/main
  data   /var/lib/postgresql/9.3/main
  locale en_US.UTF-8
FATAL:  could not create shared memory segment: Invalid argument
DETAIL:  Failed system call was shmget(key=1, size=48, 03600).
HINT:  This error usually means that PostgreSQL&#39;s request for a shared memory segment exceeded your kernel&#39;s SHMMAX parameter, or possibly that it is less than your kernel&#39;s SHMMIN parameter.
        The PostgreSQL documentation contains more information about shared memory configuration.
child process exited with exit code 1
initdb: removing contents of data directory &#34;/var/lib/postgresql/9.3/main&#34;
Error: initdb failed</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>And if we try to expand the SHMMAX limit this is what we get:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>root@localhost:/mnt/c/Users/fabio# sysctl -w kernel.shmmax=134217728
sysctl: cannot stat /proc/sys/kernel/shmmax: No such file or directory

root@localhost:/mnt/c/Users/fabio# echo 134217728 &gt;/proc/sys/kernel/shmmax
bash: /proc/sys/kernel/shmmax: Operation not permitted</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>So, no Postgresql for the time being. Some people who were able to complete the Go Lang installation (I gave up after a very, very long time waiting for apt-get to finish) complained that Go also crashed on shared memory requirements. Follow <a href="https://github.com/microsoft/WSL/issues/32"target="_blank" rel="noopener">Issue #32</a> and <a href="https://github.com/microsoft/WSL/issues/146"target="_blank" rel="noopener">Issue #146</a> to see if anyone can make it work.</p>
<p>I also tried to install Node.js. No luck with package installs:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -
...
E: dpkg was interrupted, you must manually run &#39;sudo dpkg --configure -a&#39; to correct the problem.
Error executing command, exiting</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>NVM installs, sort of, with many errors in git:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>...
error: unable to create file test/slow/nvm run/Running &#34;nvm run 0.x&#34; should work (No such file or directory)
error: unable to create file test/slow/nvm run/Running &#34;nvm run&#34; should pick up .nvmrc version (No such file or directory)
error: unable to create file test/slow/nvm use/Running &#34;nvm use iojs&#34; uses latest io.js version (No such file or directory)
error: unable to create file test/slow/nvm use/Running &#34;nvm use node&#34; uses latest stable node version (No such file or directory)
error: unable to create file test/slow/nvm use/Running &#34;nvm use v1.0.0&#34; uses iojs-v1.0.0 iojs version (No such file or directory)
error: unable to create file test/slow/nvm use/Running &#34;nvm use&#34; calls &#34;nvm_die_on_prefix&#34; (No such file or directory)</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>And this is what happens if I try to install the most recent version:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>akitaonrails@localhost:~/.nvm$ nvm install 5.10.1
Downloading https://nodejs.org/dist/v5.10.1/node-v5.10.1-linux-x64.tar.xz...
######################################################################## 100.0%
tar: bin/npm: Cannot create symlink to &#39;../lib/node_modules/npm/bin/npm-cli.js&#39;: Invalid argument
tar: Exiting with failure status due to previous errors
Binary download failed, trying source.
######################################################################## 100.0%
Checksums empty
tar: bin/npm: Cannot create symlink to &#39;../lib/node_modules/npm/bin/npm-cli.js&#39;: Invalid argument
tar: Exiting with failure status due to previous errors
Binary download failed, trying source.
Detected that you have 1 CPU thread(s)
Number of CPU thread(s) less or equal to 2 will have only one job a time for &#39;make&#39;
Installing node v1.0 and greater from source is not currently supported</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><a href="https://github.com/microsoft/WSL/issues/9"target="_blank" rel="noopener">Issue #9</a> points to non-implemented symlink support.</p>
<p>Another very annoying thing is the lack of Pseudo-Terminals (/dev/pts), which is possibly one of the reasons ZSH won&rsquo;t work. Follow <a href="https://github.com/microsoft/WSL/issues/80"target="_blank" rel="noopener">Issue #80</a>.</p>
<p>You should also be able to copy over your SSH private keys to &ldquo;.ssh&rdquo; and start git cloning from Github or git push-ing to Heroku in no time.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>akitaonrails@localhost:~$ ssh-keygen  -t rsa
Generating public/private rsa key pair.
Created directory &#39;/home/akitaonrails/.ssh&#39;.kitaonrails/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/akitaonrails/.ssh/id_rsa.
Your public key has been saved in /home/akitaonrails/.ssh/id_rsa.pub.
The key fingerprint is:
f8:16:b1:be:85:31:0c:71:f8:c2:d3:72:ab:48:42:9a akitaonrails@localhost
The key&#39;s randomart image is:
&#43;--[ RSA 2048]----&#43;
|      ...        |
|      .o         |
|     ..o.        |
|  .   =&#43;&#43;o       |
| &#43;    .=S.       |
|E . .  o.=       |
|   o . .= .      |
|    . .. o       |
|        .        |
&#43;-----------------&#43;</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>At least, Elixir does seem to work:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>akitaonrails@localhost:~$ iex
Erlang/OTP 18 [erts-7.3] [source-d2a6d81] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]

Interactive Elixir (1.2.3) - press Ctrl&#43;C to exit (type h() ENTER for help)
iex(1)&gt; defmodule HelloWorld do; def say(name) do; IO.puts(&#34;Hello #{name}&#34;); end; end
iex:1: warning: redefining module HelloWorld
{:module, HelloWorld,
 &lt;&lt;70, 79, 82, 49, 0, 0, 5, 240, 66, 69, 65, 77, 69, 120, 68, 99, 0, 0, 0, 147, 131, 104, 2, 100, 0, 14, 101, 108, 105, 120, 105, 114, 95, 100, 111, 99, 115, 95, 118, 49, 108, 0, 0, 0, 4, 104, 2, ...&gt;&gt;,
 {:say, 1}}
iex(2)&gt; HelloWorld.say(&#34;Fabio&#34;)
Hello Fabio
:ok</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Not so fast&hellip;</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>akitaonrails@localhost:~$ mix new ex_test
** (ErlangError) erlang error: :terminated
    (stdlib) :io.put_chars(#PID&lt;0.25.0&gt;, :unicode, [[[[[[[] | &#34;\e[32m&#34;], &#34;* creating &#34;] | &#34;\e[0m&#34;], &#34;.gitignore&#34;] | &#34;\e[0m&#34;], 10])
    (mix) lib/mix/generator.ex:26: Mix.Generator.create_file/3
    (mix) lib/mix/tasks/new.ex:76: Mix.Tasks.New.do_generate/4
    (elixir) lib/file.ex:1138: File.cd!/2
    (mix) lib/mix/cli.ex:58: Mix.CLI.run_task/2</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>You will find more information on the pseudo-project Microsoft opened over Github to keep track of <a href="https://github.com/microsoft/WSL/issues?q=is%3Aissue&#43;is%3Aclosed"target="_blank" rel="noopener">Issues</a> from testers like me. You can follow the list of opened and closed issues there. You will see many things that work, but also many other things that won&rsquo;t work until a new release is available to fix everything I mentioned here.</p>
<h3>Conclusion<span class="hx:absolute hx:-mt-20" id="conclusion"></span>
    <a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>So, is &ldquo;Bash on Windows&rdquo; a good development environment for Linux users to have over Windows?</p>
<p>As far as Preview 14316, not yet. The keyword here is &ldquo;yet&rdquo;. It&rsquo;s shaping up nicely, and if they can actually fix all the issues opened so far, it will be very usable very fast.</p>
<p>We still need decent memory controls, well-implemented pseudo-terminal support, configurable shared memory limits, and working symlinks. We also need Ubuntu&rsquo;s upstart, so services like Redis or Memcached (which I installed and run) come up on their own when I start the environment. Right now they don&rsquo;t come back after I reboot the machine.</p>
<p><a href="http://www.neowin.net/news/bash-plus-windows-10-equals-linux-gui-apps-on-the-windows-desktop"target="_blank" rel="noopener">Some people</a> went as far as being able to trick X11 and run GUI apps such as Firefox and even XFCE over this environment already, so it&rsquo;s really promising. This idea does work.</p>
<p>Once those issues are ironed out, yes, I believe we are closer than ever to finally using Windows as a viable and full-featured development environment. Let&rsquo;s see if by the Windows 10 Anniversary Release in June we will have a stable Ubuntu installation.</p>
<p>One thing that I think they did very wrong was to tie the Linux Subsystem to the Windows 10 installation. It should&rsquo;ve been a separate installer, so the team could release build updates without having to bundle it all together with the entire Windows OS.</p>
<p>If you were intending to move to Windows for your Linux-based developments, not yet. Hold your horses a bit longer.</p>
]]></content:encoded><category>microsoft</category><category>linux</category><category>developer-tools</category><category>off-topic</category></item><item><title>War is Over, or is it? A New Dawn for Microsoft</title><link>https://akitaonrails.github.io/en/2016/03/31/war-is-over-or-is-it-a-new-dawn-for-microsoft/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2016/03/31/war-is-over-or-is-it-a-new-dawn-for-microsoft/</guid><pubDate>Thu, 31 Mar 2016 18:02:00 -0300</pubDate><description>&lt;p&gt;Update 04/07: &lt;a href="http://thehackernews.com/2016/04/how-to-run-ubuntu-on-windows-10.html"target="_blank" rel="noopener"&gt;the preview is already out&lt;/a&gt; ahead of the June release. If you&amp;rsquo;re an Insider member, try it. Leave your impressions in the comments.&lt;/p&gt;
&lt;p&gt;Yesterday was a historic day for Microsoft. From my personal perspective, it may have been a watershed. Ever since, I&amp;rsquo;ve been trying to figure out how to register the moment for posterity.&lt;/p&gt;
&lt;h3&gt;Prologue - 1995 to 2005, the 1st Decade&lt;span class="hx:absolute hx:-mt-20" id="prologue---1995-to-2005-the-1st-decade"&gt;&lt;/span&gt;
&lt;a href="#prologue---1995-to-2005-the-1st-decade" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;I mean this for us, software developers. We&amp;rsquo;ve been through moments like this before: the release of Turbo Pascal in 1983, Visual Basic in 1991, Java in 1995, the first Linux distros like Slackware from 1993 on, the release of OS X in 2000, and the PowerPC-to-Intel transition in 2005.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Update 04/07: <a href="http://thehackernews.com/2016/04/how-to-run-ubuntu-on-windows-10.html"target="_blank" rel="noopener">the preview is already out</a> ahead of the June release. If you&rsquo;re an Insider member, try it. Leave your impressions in the comments.</p>
<p>Yesterday was a historic day for Microsoft. From my personal perspective, it may have been a watershed. Ever since, I&rsquo;ve been trying to figure out how to register the moment for posterity.</p>
<h3>Prologue - 1995 to 2005, the 1st Decade<span class="hx:absolute hx:-mt-20" id="prologue---1995-to-2005-the-1st-decade"></span>
    <a href="#prologue---1995-to-2005-the-1st-decade" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>I mean this for us, software developers. We&rsquo;ve been through moments like this before: the release of Turbo Pascal in 1983, Visual Basic in 1991, Java in 1995, the first Linux distros like Slackware from 1993 on, the release of OS X in 2000, and the PowerPC-to-Intel transition in 2005.</p>
<p>The 80s and 90s were convoluted, an era of accelerated growth where everything went obsolete fast. In one decade, from 1989 to 1999, I went from Basic to dBase, Clipper, Fox Pro, Visual Basic, Delphi, Java, multimedia (Flash, Director/Shockwave), and the Internet (HTML, Javascript, ASP, PHP, Perl). I&rsquo;ve never seen a decade move so fast. I went from a 4 MHz XT to a Pentium III at almost 1 GHz in those ten years.</p>
<p>We reached the end of the century at the peak of the Internet Bubble, had 9/11 in 2001 and the crash. But the Internet came to stay, and personal devices started showing up with the Palms and iPods. In 2001 Microsoft launched Windows XP and would spend the next decade carrying that legacy on its back.</p>
<p>A year earlier, the small Apple had started its comeback with the new iMac, iBook, and iPod, plus the BSD-UNIX-based OS X. One step at a time, it was building a system meant for both consumers and developers, the NeXT promise taking shape a decade after its inception.</p>
<p>Then, in 2005, Apple forged an alliance with one of Microsoft&rsquo;s oldest partners, Intel, and Macs would finally run on the same processor as Windows, a stratospheric leap in adoption. And that opened another door: since OS X was built processor-agnostic, it was a matter of time before it ran on smaller, more efficient ARM chips. That&rsquo;s what happened in 2007 with the iPhone. The rest is history.</p>
<h3>2005 to 2015 - 2nd Decade<span class="hx:absolute hx:-mt-20" id="2005-to-2015---2nd-decade"></span>
    <a href="#2005-to-2015---2nd-decade" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Meanwhile, Microsoft fell behind. It failed the Windows Vista promise, shipped a competent Windows 7, and followed it with the controversial Windows 8. Only with Windows 10, unveiled at the end of 2014, did things start to change. And the effects of Steve Jobs&rsquo;s death, at the end of 2011, were getting more obvious: Apple had stopped.</p>
<p>From 2011 to today, all we got were new versions. Nothing significant, nothing new. The last big iPhone was the 5, from 2012. The last big OS X feline was Mountain Lion, from 2011. In the meantime Google pulled ahead in mobile when KitKat shipped in 2013, in my view the first Android release on equal footing with iOS.</p>
<p>From 1999 to 2005, broadly, the enterprise software developer had two options: Java and .NET. PHP had solid adoption, but mostly for customizing Wordpress and Magento, far from the same league as Java or .NET; the rest was niche. From 2006 on, a new generation of developers rose for the so-called Web 2.0, the post-Google world of SEO, UX, fast iterations, and Agility with a capital &ldquo;A&rdquo;. That&rsquo;s where Ruby, Python, and then Node took off exponentially.</p>
<p>From 2010, the mobile world sped up, and one kind of integrated development in particular: the &ldquo;Cloud&rdquo; variety, where a native &ldquo;app&rdquo; talks to services on remote servers, mostly Amazon AWS, which had debuted not long before, in 2006.</p>
<p>Microsoft stayed out of that move and spent the next ten years playing catch-up, nursing the Vista hangover. It kept its lead in purely enterprise markets, with SQL Server and Office licenses, but on the margins of cutting-edge software development.</p>
<p>Actually, I&rsquo;d say the watershed came in 2013, with <a href="http://web.archive.org/web/20160404073120/http://olhardigital.uol.com.br/pro/noticia/mercado-reage-bem-a-saida-de-ballmer-da-microsoft/36992"target="_blank" rel="noopener">Ballmer&rsquo;s exit</a> and the end of the &ldquo;Extended Gates Era&rdquo;, opening the door for <a href="http://www.businessinsider.com/microsoft-year-in-review-2015-12"target="_blank" rel="noopener">Satya Nadella to step in</a>. Microsoft is a giant, plenty of its brains had been researching this for years, and a lot of it only surfaced now. But I mean &ldquo;Eras&rdquo; in a symbolic sense: the end of Microsoft&rsquo;s Highlander culture, the &ldquo;there can only be one&rdquo;.</p>
<p>The <a href="http://1995blog.com/2015/05/24/the-internet-tidal-wave-20-years-on/"target="_blank" rel="noopener">1995 prophecy</a> that the Internet would destroy the Windows hegemony came true. And we reached the post-Moore world, where computing became accessible and ubiquitous. Think about it: in 1995, having a cluster of &ldquo;super&rdquo; computers for high-throughput distributed computing was for universities or big corporations. Today, you spin up a cluster of as many dozens of machines as you want on EC2 for a month at the price of a video game console.</p>
<p>I was a DOS user from 1988, switched to Windows 95 as soon as it launched, and spent almost ten years developing primarily on Windows, in the corporate world. I went from Visual Basic to ASP to .NET while also doing Java and PHP. But I wanted to run Perl, PHP, Python, and Ruby native on Linux, without giving up Office and Photoshop.</p>
<p>The answer we were waiting for was OS X. With the release of Tiger, things got serious. I tried it myself on a Mac Mini G4 in 2004. It was exceptional to have usability far better than Windows XP and access to all the UNIX I wanted on a single machine.</p>
<p>When Intel launched the Core Duo and then the 64-bit Core 2 Duo, and Tiger started running on Intel in 2005, there was nothing to think about: it was time to migrate. I&rsquo;d spend the next decade in a pure OS X environment, developing on a different kind of platform, with different tools and a different culture. That was my whole story with Ruby and OS X over these ten years, which you know well if you follow this blog.</p>
<h3>2015 on forward, Epilogue<span class="hx:absolute hx:-mt-20" id="2015-on-forward-epilogue"></span>
    <a href="#2015-on-forward-epilogue" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>2015 arrived, four years after Steve Jobs&rsquo;s death. It was an important gap, because it gave the non-Mac platforms time to catch up and surpass OS X in many areas. We&rsquo;re firmly in the Software as a Service Era. We don&rsquo;t &ldquo;buy&rdquo; anything anymore, we &ldquo;subscribe&rdquo; to services.</p>
<p>We&rsquo;re past the Post-PC Era. We&rsquo;re past the Smartphone Era. We&rsquo;re in the Services Era, where everything is a service. Our identity is a Facebook profile, our voice is WhatsApp, and everything we do generates data. We&rsquo;re in the Big Data Era, a pile of useless data that no SQL Server in the world can keep up with.</p>
<p>We need new things to handle this paradigm: Cassandra, Riak, Hadoop, HBase, Spark, Elasticsearch, Go, Rust, Elixir. They all &ldquo;run&rdquo; on Windows, but someone has to spend time doing ports, writing compatibility patches, and packaging installers. And the main thing: most of the developers behind these technologies are on Linux or OS X, almost nobody builds this new generation of tools inside Windows. They all use Emacs, Vim, or Sublime Text, hardly anyone wants Visual Studio.</p>
<p>And this brings me back to the start of the post: it&rsquo;s a new Era for Microsoft. It spent the last ten years playing catch-up and, for the first time, it looks like it has a real shot at turning things around and becoming relevant to the non-.NET developer again.</p>
<p>For that, two things happened yesterday.</p>
<h3>2016 - The Year of Linux on the Desktop<span class="hx:absolute hx:-mt-20" id="2016---the-year-of-linux-on-the-desktop"></span>
    <a href="#2016---the-year-of-linux-on-the-desktop" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>First, the announcement that <a href="http://thehackernews.com/2016/03/ubuntu-on-windows-10.html"target="_blank" rel="noopener">&ldquo;Bash is coming to Windows&rdquo;</a>. Which in practice is much more than Bash: it&rsquo;s a partnership with Canonical, one that had been taking shape since the announcement of <a href="http://web.archive.org/web/20160415160138/http://www.microsoft.com/en/server-cloud/sql-server-on-linux.aspx"target="_blank" rel="noopener">SQL Server running on Linux</a>. In practice, it&rsquo;s a <a href="http://blog.dustinkirkland.com/2016/03/ubuntu-on-windows.html"target="_blank" rel="noopener">Linux subsystem</a> running alongside the Windows kernel, translating Linux syscalls into Windows syscalls.</p>
<p>The original idea came from the deceased Project Astoria, or Windows Bridge for Android, which back then wanted to let Android apps run on Windows. Technically, Android is a flavor of Linux, so the jump to yesterday was a short one.</p>
<p>So it&rsquo;ll be possible to take a binary built for Ubuntu and run it on Windows without changing a thing.</p>
<p>Ever since we started developing with Ruby, a lot of Windows users wanted to run Ruby natively. There&rsquo;s a <a href="http://rubyinstaller.org/"target="_blank" rel="noopener">distribution</a>, but it&rsquo;s not good, and that&rsquo;s not the maintainers&rsquo; fault. Ruby, like Python and PHP, was built to work on Linux.</p>
<p>To port it to Windows you have to write &ldquo;wrappers&rdquo;, and you still lack an environment with compilers like GCC to build extension packages. All of that is trivial on Linux and a headache on Windows. It wasn&rsquo;t worth the trouble, so the only way out was to run a virtual machine (like VirtualBox) with something like Vagrant to make it easier and use the real Linux Ruby.</p>
<p>Everything from Linux that &ldquo;works&rdquo; on Windows, whether Python or PHP, never worked 100%, and we just got used to it.</p>
<p>What Microsoft is shipping in the Anniversary Update is a very thin translation layer at the lowest level, and not a virtual machine or a hypervisor: from a &ldquo;virtual&rdquo; Linux kernel to the Windows kernel. Everything will think it&rsquo;s running on Linux. It&rsquo;s what the Wine project tries to do to run Windows applications on Linux, only in reverse. It&rsquo;s also different from Cygwin, which requires recompiling everything from Linux to get a semi-Linux environment on top of Windows.</p>
<p>There probably won&rsquo;t be a secondary graphical environment at first, so no X, no GNOME or KDE. And there&rsquo;s no need: we&rsquo;re in a Web world, our graphical environment now is HTML and Javascript, and Chrome and Firefox already run native on Windows. For things like compiling gems with native extensions, even GCC will work. It&rsquo;s the exact same binary, in the same environment, with everything we&rsquo;re used to on UNIX. Having Bash and SSH on Windows is just the tip of the iceberg.</p>
<p>The second announcement is the <a href="http://techcrunch.com/2016/03/31/thanks-to-microsoft-small-teams-can-now-get-xamarins-ide-and-core-tools-for-free"target="_blank" rel="noopener">release of the Xamarin tools for free and as open source</a>! Microsoft acquired Xamarin, Miguel de Icaza&rsquo;s company, not long ago. They built open-source .NET through pure reverse engineering, reimplementing everything as open source, and now Microsoft did the smart thing: on top of buying them, it opened the tools. The last thing still keeping a developer on the Mac was needing Xcode, which ships with OS X, to develop for iOS. Now you can do that on Windows for free.</p>
<p>So the math got much simpler. Windows 10 is the first respectable Windows version since the brief window of 7. Let&rsquo;s forget Windows 8 existed, the same way we already forgot Vista. XP is finally dead, it took over a decade, along with the hideous Internet Explorer 6, 7, and 8. Google did us the favor of making Chrome ubiquitous, and services like Facebook forced users to migrate faster.</p>
<p>With the <a href="http://arstechnica.com/information-technology/2016/03/windows-10-270-million-users-binbash-supporting-anniversary-update-coming-summer/"target="_blank" rel="noopener">Windows 10 Anniversary Update</a>, we&rsquo;ll probably be able to do:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>apt-get install build-essential
\curl -sSL https://get.rvm.io | bash
rvm install 2.3.0
bundle install</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>And it should just work.</p>
<p>In the same environment, we&rsquo;ll still be able to use Xamarin Studio and, with a little effort to jog the C# muscle memory, build iOS and Android apps. We&rsquo;ll be able to use native Office 365, all the latest Adobe CS6 tools, and even play The Division, all on the same machine.</p>
<p>In one shot, Windows 10 becomes the best value choice: convenience of use, development options, and competent hardware in the form of the Surface Book, Lenovo Yoga 3, and Razer Blade Stealth, which finally caught up to and passed the legendary finish of the MacBook.</p>
<p>2016 is finally the infamous Year of Linux on the Desktop, just not the way the Free Software crowd wanted. You can&rsquo;t have everything.</p>
]]></content:encoded><category>microsoft</category><category>developer-tools</category><category>tech-market</category><category>off-topic</category></item><item><title>[Off-Topic] Demystifying the "Evil" Microsoft</title><link>https://akitaonrails.github.io/en/2011/02/20/off-topic-desmistificando-a-microsoft-do-mal/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2011/02/20/off-topic-desmistificando-a-microsoft-do-mal/</guid><pubDate>Sun, 20 Feb 2011 17:53:00 -0300</pubDate><description>&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2011/2/20/ballmerasdrevil_original.jpg?1298235025" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Maybe anyone who entered the tech market this decade never followed the 90s saga that ended in the antitrust case against Microsoft. The &amp;ldquo;fear&amp;rdquo; of &amp;ldquo;monopolist&amp;rdquo; Microsoft got replaced by disdain and ridicule. I know, I use that image myself now and then. It&amp;rsquo;s almost a universal joke: Microsoft is the eternal evil, and everyone else, the Canonicals, the Apples, the Googles, are the good guys.&lt;/p&gt;
&lt;p&gt;Or almost, because now it&amp;rsquo;s Apple growing too big, and Google too, which already has thousands of detractors instead of fans. Soon we may see a new antitrust case: against Apple&amp;rsquo;s iTunes Store, for its &amp;ldquo;unfair&amp;rdquo; and &amp;ldquo;anti-competitive&amp;rdquo; practices. If that happens, it&amp;rsquo;s because people really don&amp;rsquo;t learn, and we&amp;rsquo;re doomed to go backward instead of forward.&lt;/p&gt;</description><content:encoded><![CDATA[<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2011/2/20/ballmerasdrevil_original.jpg?1298235025" alt=""  loading="lazy" /></p>
<p>Maybe anyone who entered the tech market this decade never followed the 90s saga that ended in the antitrust case against Microsoft. The &ldquo;fear&rdquo; of &ldquo;monopolist&rdquo; Microsoft got replaced by disdain and ridicule. I know, I use that image myself now and then. It&rsquo;s almost a universal joke: Microsoft is the eternal evil, and everyone else, the Canonicals, the Apples, the Googles, are the good guys.</p>
<p>Or almost, because now it&rsquo;s Apple growing too big, and Google too, which already has thousands of detractors instead of fans. Soon we may see a new antitrust case: against Apple&rsquo;s iTunes Store, for its &ldquo;unfair&rdquo; and &ldquo;anti-competitive&rdquo; practices. If that happens, it&rsquo;s because people really don&rsquo;t learn, and we&rsquo;re doomed to go backward instead of forward.</p>
<p>In terms of personal taste, guaranteed by individual freedom of expression, I dislike most Microsoft products and like most Apple products. That doesn&rsquo;t stop me from understanding, respecting, and admiring the ability of both to go from a garage to the top of the world. It&rsquo;s what a capitalist free market makes possible.</p>
<p>And it bothers me when success starts getting seen through the disdain and envy of the incompetent, who in the end think they have a &ldquo;right&rdquo; to something without having the same ability.</p>
<p>Whether I consider a product &ldquo;technically&rdquo; better or not is beside the point. &ldquo;Better&rdquo; and &ldquo;worse&rdquo; are matters of taste, and the best thermometer in the market is demand. If demand is high, the product can be &ldquo;good&rdquo; even if it&rsquo;s &ldquo;technically bad.&rdquo;</p>
<p>Nobody has a &ldquo;right&rdquo; to anything beyond what they produce themselves, let alone to something of others for free. But plenty of people think nobody is allowed to grow too big, or else what happens to the smaller competitors? That kind of statist thinking led to the Great Depression of 1929, the World Wars, and the Financial Crisis of 2008.</p>
<p>I find it disoriented to lump the fact that a piece of software is &ldquo;open,&rdquo; or that a company backs &ldquo;free software,&rdquo; together with social and populist movements. Technology shouldn&rsquo;t be dragged into failed socialist ideologies. In another article I&rsquo;ll explain why Open Source has everything to do with Capitalism and nothing to do with politicized social movements.</p>
<p>The text below is old, translated from Onkar Ghate&rsquo;s <a href="https://ari.aynrand.org/issues/government-and-business/regulations/drop-the-antitrust-case-against-microsoft/"target="_blank" rel="noopener">original article</a> (Pittsburgh Tribune-Review, March 17, 2002), and it should convince you of what I mean. Drop the prejudices (&ldquo;Microsoft = Evil&rdquo;) and read with reasoning, because the arguments are logical. The context is 2002; Microsoft has shrunk a lot since then, and its qualities have changed.</p>
<h2>[TRANSLATION] Drop the antitrust case against Microsoft<span class="hx:absolute hx:-mt-20" id="translation-drop-the-antitrust-case-against-microsoft"></span>
    <a href="#translation-drop-the-antitrust-case-against-microsoft" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>The historic antitrust case against Microsoft is now entering its final phase: the determination of Microsoft&rsquo;s punishment. The presiding judge, U.S. District Court judge Colleen Kollar-Kotelly, should be as lenient as legally permissible. (If possible, she should impose only a nominal punishment like a one-dollar fine or, better still, throw the case out entirely.)</p>
<p>To understand why, one needs to understand two points, one general and one particular. First, antitrust laws are nonobjective and unjust. Second, Microsoft is guilty of no actual crime. Let us begin with the first point.</p>
<p>The &ldquo;actions&rdquo; that antitrust laws prohibit are vague, contradictory, undefined. For instance, antitrust laws prohibit companies from engaging in &ldquo;restraint of trade.&rdquo; But what specific actions constitute &ldquo;restraint of trade&rdquo;? If, as is done repeatedly in the business world, a company signs an exclusive distribution agreement with another company, is that &ldquo;restraint of trade&rdquo; because now other potential competitors are excluded from that area of the market? Or if a company sells a computer to individual X, is that &ldquo;restraint of trade&rdquo; because competing computer companies can no longer sell X a computer since he has need for only one? No — the courts have declared to businessmen — only those &ldquo;restraints&rdquo; that are &ldquo;unreasonable&rdquo; are illegal. But which specific &ldquo;restraints&rdquo; are &ldquo;unreasonable&rdquo;? No definition is to be found in the law, so no company can know before it acts which actions are in law legal and which are not.</p>
<p>Consider another example. The antitrust laws prohibit &ldquo;unfair&rdquo; trade practices. But again, what counts as an &ldquo;unfair&rdquo; practice? Is it any business practice that, for instance, causes bankruptcies among some of a firm&rsquo;s competitors, because they cannot find a way to compete with the firm&rsquo;s low prices and/or superior products? Or is it simply any practice that the administration in power disapproves of? Again, no answer is to be found in the law, so it is impossible for a company to determine beforehand which specific actions the law prohibits.</p>
<p>Take one last example. Under antitrust laws, a company can be charged with &ldquo;predatory pricing&rdquo; if it sets prices below those of its competitors, because the competitors might as a result go bankrupt. It can be charged with &ldquo;monopoly pricing&rdquo; if it sets prices that are deemed too high, because then it is supposedly bilking consumers of their hard-earned income. But if it therefore decides to set prices at the level of those of its competitors — it can be charged with &ldquo;collusion&rdquo; or &ldquo;conspiracy,&rdquo; because now it is said to be no longer &ldquo;competing.&rdquo;</p>
<p>In the nightmarish world of antitrust law, any and no action can be pronounced illegal. There are and can be no definite, objective principles specified in the law — and as a result a businessman has no way to determine, before he acts, whether his action is legal or not. In practice, this means that businessmen are at the mercy of the government. Any moment the government wants to cripple a particular company, it can unleash the antitrust laws against the company. In logic, a business has no possible defense against a charge of &ldquo;restraint of trade&rdquo; or &ldquo;unfair&rdquo; trade policies or &ldquo;predatory pricing&rdquo; because the charge itself has no objective meaning. The antitrust laws, therefore, vest the government with arbitrary power.</p>
<p>The result, unsurprisingly, is that when, say, a bureaucrat is disgruntled with a successful company because it has failed to share (i.e., give away) its wealth or support the government&rsquo;s particular programs — or when a government official thinks that destroying a powerful company will win him votes with misguided citizens who believe that Big Business is their enemy — or when resentful, envious competitors (like Netscape and Oracle and AOL in the Microsoft case) can persuade their government representatives to cripple a superior competitor — the brunt of the antitrust laws descends upon that company.</p>
<p>It is no accident that it is America&rsquo;s most successful, most productive, most admired companies — Microsoft, IBM, Intel, Wal-Mart, American Airlines, Standard Oil, etc. — that are subjected to antitrust lawsuits.</p>
<p>As a form of granting arbitrary power to the government, antitrust laws are unconstitutional and un-American. As a means of penalizing the successful for being successful, antitrust laws are a perversion of justice.</p>
<p>Let us therefore now leave to one side antitrust law, under which any action of a company could be considered a crime, and ask whether in actual fact Microsoft is guilty of any crime.</p>
<p>What are the principal accusations against Microsoft?</p>
<p>Microsoft is accused of &ldquo;unfair&rdquo; competition. But competition refers to the process by which companies utilize their assets and personnel to build better and/or cheaper products. They thereby seek to earn, through voluntary trade, even greater profits. In a free market, there is no such thing as &ldquo;unfair&rdquo; competition. There are only better and worse competitors. In other words, some companies are better than others at research and development, at structuring long-term, mutually beneficial business agreements, at marketing products, at keeping good employees happy yet challenged. Microsoft, for example, excels at all these processes — and many more. (The charge that Microsoft is not innovative is particularly disingenuous given its continual upgrades and improvements to its major products; even Judge Jackson had to concede this point.) The fact that Microsoft is one of the greatest competitors the business world has seen is, in a free nation, not a crime but a virtue.</p>
<p>The only &ldquo;unfair competition&rdquo; that exists is in fact not competition. If, say, the Mafia threatens to blow up a shopkeeper&rsquo;s store unless he gives it a percentage of his sales, the Mafia is not engaged in competition, albeit unfair. It is engaged in coercion — precisely to prevent voluntary trade and the free market from operating. When Netscape loses sales to Microsoft because Microsoft&rsquo;s browser is better and/or cheaper, Netscape&rsquo;s loss of sales bears no similarity to a shopkeeper&rsquo;s &ldquo;loss&rdquo; of sales to the Mafia. One must never equate the voluntary (people choose to buy Microsoft&rsquo;s products) with the coerced (if he had a choice, the shopkeeper would not &ldquo;deal&rdquo; with the Mafia).</p>
<p>Second, Microsoft is accused of &ldquo;predatory pricing.&rdquo; Translated into reality, this means that Microsoft is able to charge prices below those of its competitors, such as Netscape. Some of these competitors, who cannot match Microsoft&rsquo;s low prices, lose market share or go bankrupt. But it is Microsoft&rsquo;s incredible efficiency and productiveness that allows it to undersell its competition yet still make large profits. Again, this represents not criminal behavior but real virtue.</p>
<p>Finally, Microsoft is accused of wielding &ldquo;monopoly power.&rdquo; This accusation as well is based on equating the voluntary with the coerced.</p>
<p>It is true that Microsoft has a dominant market position in some segments of the software industry and that some of its competitors have gone out of business. But this is because Microsoft has out-competed them: it is more innovative, more efficient, a better marketer, and/or a better employer than other software firms. Microsoft, in other words, has earned its dominant position.</p>
<p>And it continues to earn it: it faces constant competition, even if there are no actual competitors presently in its market. For whenever another entrepreneur can figure out a way to produce similar software at a cheaper price or better software at an attractive price (or some undreamt of product that makes current software obsolete), he is free to enter Microsoft&rsquo;s market. And if he has a sound business plan, he will be able to raise the necessary capital even if he himself has none: there are thousands of venture capitalists looking for the next Bill Gates. Microsoft&rsquo;s dominant position in the software industry, in other words, must be earned anew each day.</p>
<p>So once again, Microsoft is being attacked for its success: in reality it has no monopoly power — just brilliant management.</p>
<p>The only monopolies that can in fact exist are government-created ones. Only a government can prevent someone from entering a market and thus eliminate competition. The Post Office, for instance, is a monopoly. There is little doubt that Federal Express could provide better service, more cheaply, and still earn a profit. But the government forcibly prevents it from entering the Post Office&rsquo;s market. The Post Office&rsquo;s dominant market position is unearned: it offers sub-par service but because of government coercion faces no competition. Microsoft&rsquo;s dominant market position, by contrast, is earned: it faces constant competition, which it continues to win. Again, do not equate the voluntary with the coerced.</p>
<p>Microsoft is the epitome of American business success: it produces enormous wealth through intelligence and hard work. Imagine the wealth that would exist — for every firm, for every employee, for every shareholder, for every customer — if all companies in America were run by a Bill Gates. The fact that they are not should not lead us to destroy Bill Gates&rsquo;s creation but, all the more, to admire and champion it.</p>
<p>Why should Microsoft&rsquo;s punishment be as lenient as possible (assuming the case cannot be thrown out at this stage in the proceedings)? Because antitrust laws are arbitrary laws that penalize virtue for being virtue — as the specific accusations against Microsoft clearly reveal.</p>
<p>Dr. <a href="https://ari.aynrand.org/experts/onkar-ghate/"target="_blank" rel="noopener">Onkar Ghate</a>, PhD in philosophy, is a senior researcher at the Ayn Rand Institute in Irvine, California. The Institute promotes Objectivism, the philosophy of Ayn Rand, author of <a href="http://web.archive.org/web/20070202073236/http://www.aynrandbookstore.com:80/prodinfo.asp?number=AR91B"target="_blank" rel="noopener">Atlas Shrugged</a> and <a href="http://web.archive.org/web/20070202073147/http://www.aynrandbookstore.com:80/prodinfo.asp?number=AR89B"target="_blank" rel="noopener">The Fountainhead</a>.</p>
<h2>Disclaimer<span class="hx:absolute hx:-mt-20" id="disclaimer"></span>
    <a href="#disclaimer" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>To be clear, the intention isn&rsquo;t to say Microsoft is innocent of everything. That&rsquo;s what the judicial system is for, and any company that feels illegally harmed has every right to sue, as has happened countless times. See <a href="http://en.wikipedia.org/wiki/Microsoft_litigation"target="_blank" rel="noopener">this list</a> of lawsuits.</p>
<p>And this holds for any company. One of a government&rsquo;s functions is to make sure contracts are honored.</p>
<p>What interests me in the episode above is the <a href="http://en.wikipedia.org/wiki/Sherman_Antitrust_Act"target="_blank" rel="noopener">Sherman Antitrust Act</a>, which in essence gives the government carte blanche to sue any company for any reason. This wasn&rsquo;t the only lawsuit against Microsoft, but it was one of the most widely publicized. Antitrust law itself is an evil, like any regulation that hands out privileges nobody could earn in the market.</p>
<p>And for anyone who wants to dig deeper, I recommend reading the full <a href="https://www.justice.gov/sites/default/files/atr/legacy/2006/04/11/msjudge.pdf"target="_blank" rel="noopener">Findings of Fact</a> on the case in the U.S. justice archive. To understand why antitrust law is a serious problem, start with <a href="http://wiki.objectivismonline.net/Antitrust"target="_blank" rel="noopener">this article</a>, but mostly the book <a href="http://en.wikipedia.org/wiki/Capitalism:_The_Unknown_Ideal"target="_blank" rel="noopener">Capitalism: The Unknown Ideal</a>.</p>
]]></content:encoded><category>law-and-regulation</category><category>microsoft</category><category>philosophy</category><category>off-topic</category></item><item><title>Chatting with Luis Lavena (Ruby on Windows)</title><link>https://akitaonrails.github.io/en/2008/07/02/chatting-with-luis-lavena-ruby-on-windows/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2008/07/02/chatting-with-luis-lavena-ruby-on-windows/</guid><pubDate>Wed, 02 Jul 2008 14:16:00 -0300</pubDate><description>&lt;p&gt;This time I interviewed &lt;a href="http://blog.mmediasys.com/"target="_blank" rel="noopener"&gt;&lt;strong&gt;Luis Lavena&lt;/strong&gt;&lt;/a&gt;. If you&amp;rsquo;re a Ruby developer working on Windows, you owe him a lot! After all he is the maintainer of &lt;a href="http://github.com/luislavena/rubyinstaller/tree"target="_blank" rel="noopener"&gt;One-Click Ruby Installer&lt;/a&gt;, the main Windows Ruby distribution. It is a lot of work to maintain such a distro and Luis explains all the hoops necessary to achieve this. The main message: we need more collaborators! Anyone can rant, but there are a few who actually step down from the pedestal and get their hands dirty.&lt;/p&gt;</description><content:encoded><![CDATA[<p>This time I interviewed <a href="http://blog.mmediasys.com/"target="_blank" rel="noopener"><strong>Luis Lavena</strong></a>. If you&rsquo;re a Ruby developer working on Windows, you owe him a lot! After all he is the maintainer of <a href="http://github.com/luislavena/rubyinstaller/tree"target="_blank" rel="noopener">One-Click Ruby Installer</a>, the main Windows Ruby distribution. It is a lot of work to maintain such a distro and Luis explains all the hoops necessary to achieve this. The main message: we need more collaborators! Anyone can rant, but there are a few who actually step down from the pedestal and get their hands dirty.</p>
<p><a href="http://www.flickr.com/photos/diegal/325572435/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/7/2/325572435_f1f1382372.jpg" alt=""  loading="lazy" /></a></p>
<p><strong>AkitaOnRails:</strong> Ok. So, let&rsquo;s start. First of all thank you for your time. This is very funny because we are like 5 hours apart. You&rsquo;re in Paris right now, but I understand you were in Argentina. Can you tell us what you are doing now?</p>
<p><strong>Luis Lavena:</strong> Yeah, funny indeed. Right now I&rsquo;m Technical director of an interactive and design agency with offices in NY and Paris. My job is to bridge the design field with the technology one, mostly on web based application development.</p>
<p>I&rsquo;m from Argentina, live there, family and friends. I moved a few months ago to boost some developments and get first steps of the new organization in place.</p>
<p>I&rsquo;m from a small province named Tucuman, northwest area of Argentina (1200 kms from Buenos Aires to be exact)</p>
<p><strong>AkitaOnRails:</strong> Awesome, have you ever been in Brazil? Do you have contact with other Latin America Railers?</p>
<p><strong>Luis Lavena:</strong> Even though Brazil is so close from Argentina I have never been there, which is a shame. I have several friends that lived there over the years.</p>
<p>I keep in touch with several Rubists and Railers of Latin America, but most with the ones in Argentina due to several meetings we had during the years <a href="http://lista.rubyargentina.com.ar"target="_blank" rel="noopener">RubyArg</a> mailing list has been working.</p>
<p><strong>AkitaOnRails:</strong> I am very interested in understanding how the Railers are organizing themselves in Argentina as we, in Brazil, are a growing community as well. Do you see new programmers going straight to Rails or is it the usual move from Java/others to Rails? Are companies adopting it, or Rails (and Ruby in general) still has a long way to go there as well?</p>
<p><strong>Luis Lavena:</strong> Well, there is a huge number of developers that came from Java and dotNET stuff (mostly Java) and they are playing with Rails, there is also lot of developers that do Ruby for administrative stuff or even creating games with it.<br>
Companies that develop software still need to adopt Ruby/Rails for their business, the biggest problem with that is the lack of support shaped as companies like Sun or some consulting services for Java. (or even Microsoft).</p>
<p><strong>AkitaOnRails:</strong> Going back to the past, how did you start in programming in general? Did you study computer science, or were you dragged in there in some other way? And, finally, how did you stumble upon Ruby and Rails?</p>
<p><strong>Luis Lavena:</strong> It&rsquo;s funny, I started programming back in 1989, playing with sprites and GOTO&rsquo;s with BASIC on a Z80 computer.</p>
<p>I officially didn&rsquo;t finish my degree on CS, since job and fun stuff distracted me away from it. I first met Ruby back in 2001, loved its syntax, enjoyed its verbosity but it was not mature enough for my needs, at least not in Windows.</p>
<p>Even though I was using Python for so many years, I internally used Ruby to manage several stuff, from simple scripts to later rake tasks that helped us build our tools.</p>
<p>With Rails it was kind of different, since we started to look for alternatives to Zope and we bet on Rails at that time (0.10 or 0.12 at that time, if memory plays nice with me).</p>
<p>I can say I don&rsquo;t regret the bet on Rails at that time.</p>
<p><strong>AkitaOnRails:</strong> It is very interesting to see professionals like you moving out from your zone of comfort toward something &lsquo;unknown&rsquo; as Ruby and Rails. Most programmers are very defensive and even aggressive on trying to find justifications for not using neither. Did you feel like that back then? What drove you towards Ruby?</p>
<p><strong>Luis Lavena:</strong> Well, I&rsquo;m used to change languages to fit my needs.<br>
Keep in consideration that our first choice was pre-J2EE era or dotNET stuff, we analyzed which would provide us better solutions in the long run and we decided to avoid them.</p>
<p>Java stuff sounded at that time, and until today, expensive for business. Argentina is not a country where you will find customers with huge budgets to invoice them the cost of using tools designed for other markets.</p>
<p>Banks and such can pay the luxury of have everything running with J2EE, but that doesn&rsquo;t work when you try to go smaller and agile. (mostly based on experiences with the market flow in Argentina).</p>
<p><strong>AkitaOnRails:</strong> It is even more daunting considering that you decided that you wanted Ruby on Windows, you probably didn&rsquo;t find anything reasonable and decided to tackle the problem yourself. Is that how it happened?</p>
<p><strong>Luis Lavena:</strong> I&rsquo;ve been forced to use Windows for many years, mostly related to hardware development in the video broadcast field. Moreover, I&rsquo;m a BSD user and Linux one, even played some years with Macs and lately with OSX.</p>
<p>So that restriction forced me to build most of my tools around that limitation.<br>
Ruby allowed me to enjoy that limitation by being expressive, which made me more productive in that field.</p>
<p>Ruby is not capable of handling my main requirements for video processing, but it still powers 70% of my environment, along with Open Source Software and Freeware.</p>
<p>I&rsquo;ve been using Ruby for so long, that I thought the community, now that it&rsquo;s growing, would maybe value the experience and the willingness to help in this particular scenario.</p>
<p>So instead of just scratching my itch in the shadow, I decided to contribute back and help others that search for the same stuff. So you can say I&rsquo;m trying to balance my karma.</p>
<p><strong>AkitaOnRails:</strong> Americans probably don&rsquo;t understand this but in emerging countries such as Brazil, people don&rsquo;t actually have much choice, most are not educated enough (<em>cof</em> english <em>cof</em>) and so they find lots of barriers. The last resort for everybody is Windows. I think it is the same thing in Argentina. Railers here don&rsquo;t simply migrate to Macs or Linux, I would say that at least 90% of all developers are locked in to Windows for one reason or another. Is it the same in Argentina, I presume?</p>
<p><strong>Luis Lavena:</strong> Even though I don&rsquo;t like it, I must agree. Thankfully the Universities started to change that some years ago, giving talks and been more open to Linux community, which grew a lot.</p>
<p>Still, there are plenty of users and developer that are locked in to some corporate / mid-size environments or they require to run Windows for some proprietary hardware or such.</p>
<p>So, we (as the community) can&rsquo;t get to those developers without being more open minded or provide tools that ease the path between their current environment and alternative tools.</p>
<p><strong>AkitaOnRails:</strong> But for some reason there seems to be near to zero interest from the community on supporting Ruby on Windows. I mean, there are people like you, some RubyGem developers who go through all the trouble of making available a binary for win32, but it is not enough it seems. How did the <a href="http://rubyforge.org/projects/rubyinstaller/"target="_blank" rel="noopener">One-Click Ruby Installer</a> begin, did you create it or you inherited it?</p>
<p><strong>Luis Lavena:</strong> Yeah, I agree with you, but I cannot blame them, after all, everybody just scratches their own itch ;-)</p>
<p>I&rsquo;ve inherited One-Click Installer from <a href="http://curthibbs.wordpress.com/"target="_blank" rel="noopener">Curt Hibbs</a>, who also inherited from <a href="http://en.wikipedia.org/wiki/Andy_Hunt_%28author%29"target="_blank" rel="noopener">Andy Hunt</a> and other contributors.</p>
<p>The truth is that for many years I&rsquo;ve been using my own version of Ruby, compiled in-house, so we had control over it. We didn&rsquo;t patch it in any way, we like to have the whole process documented and automated, so we can take a look to the specific components updated that introduced conflicts.</p>
<p>One-Click Installer, on the other hand, relies on some builds made by the current ruby-core developers and maintainers, which make the process of finding the proper dependencies a bit hard. That build also imposed other problems, but that will require more time to explain</p>
<p><strong>AkitaOnRails:</strong> Haha, I want to dive in to the more technical stuff so people can better understand the current situation on Windows. How different is Ruby on Windows compared to Ruby on Linux, for instance? The most obvious thing is that any Gem with C Extensions without proper binaries for Windows will fail. Trying to execute shell commands will fail and <a href="http://www.zenspider.com/ZSS/Products/RubyInline/"target="_blank" rel="noopener">RubyInline</a> as well. What else?</p>
<p><strong>Luis Lavena:</strong> Hehe, that&rsquo;s just the tip of the iceberg, let me show you one example. Let&rsquo;s say that you have a package ABC that was built for your current distribution of Linux. That specific version of Linux links to a common runtime that handles the basic commands like file handling, console, etc. That is often called CRT (C Runtime) and on Linux, glibc.</p>
<p>So, your distro of Linux is linked to this glibc version A.B.C. If your distribution upgrades glibc version (like from 2.2 to 2.5) then you&rsquo;re forced to:</p>
<ol>
<li>upgrade all your installed packages, or</li>
<li>build everything from scratch.</li>
</ol>
<p>I&rsquo;ve even heard of some of these upgrades go so bad that users are forced to start from scratch. Windows, on the other hand, cannot break 2 billion applications just because of a change of CRT, so they keep old versions and maintain compatibility in the MSVCRT.dll file (where the base version is 6.0).</p>
<p>A plus for Windows is that you can have several CRT co-existing in your OS, the bad thing is that you cannot safely link to one CRT and use components that link to another version without worrying about segfaults and such stuff.</p>
<p>I tried to condense this information in <a href="http://blog.mmediasys.com/2008/01/17/ruby-for-windows-part-1/"target="_blank" rel="noopener">a post</a> some time ago. So you can see, the lack of development tools is not the worst problem dealing with Windows development.</p>
<p><strong>AkitaOnRails:</strong> Interesting. And another thing is the Visual Studio compiler vs <a href="http://www.mingw.org/"target="_blank" rel="noopener">MinGW</a>. Can you give us a glimpse on why you chose MinGW? Is it just because VS is commercial and developers would have to pay?</p>
<p><strong>Luis Lavena:</strong> Visual Studio is great, but only when you can pay for it. The free versions lack some stuff that is very useful, like Profile-Guided Optimization (PGO) which is being used to build Windows binaries of Python, as an example.</p>
<p>The thing with VS, even the free versions, is that you&rsquo;re not allowed to distribute them, I think it is even illegal to link to the download URL/page of it. So even for our automated sandbox project, Visual Studio would be required to be manually downloaded, installed and configured.</p>
<p>Thankfully in the latest versions you don&rsquo;t need to install Platform SDK kit, which was 1GB. VS versions link only to the latest version of MSVCRT, which then force us to relink every library that ruby depends on with it (and Ruby source code depends on lots of externals).</p>
<p>Also, Ruby doesn&rsquo;t use the safe CRT version of string copy functions, so you need to use a compiler flags just to avoid them… So after weeks of hard work getting it built with VC8 and every dependency, you end with something that performs almost the same, since there is no performance gain (but now you have less hair).</p>
<p>MinGW, on the other hand, was closer to a Linux environment, so most of the tools worked out of the box. The good part was that we didn&rsquo;t need to build all the dependencies with it, since by default everything links with MSVCRT (the default CRT on Windows). MinGW also provides some cross-compilation tools that lets you build, using Linux environment, shared libraries (dll) and executables for Windows.<br>
I can consider that a plus, dunno what others think about it</p>
<p><strong>AkitaOnRails:</strong> Wow, this is really overwhelming and I recommend anyone interested in the details to take a look at your <a href="http://blog.mmediasys.com/"target="_blank" rel="noopener">blog</a>. But all that said, you now have everything in place, a proper process and such, I assume. If I am a Windows C developer and I want to contribute, where should I go first, I mean, so I can know what tools to use, how to build stuff and so on?</p>
<p><strong>Luis Lavena:</strong> That&rsquo;s the good part! <a href="http://blog.robustlunchbox.com/"target="_blank" rel="noopener">Gordon Thiesfeld</a> and I have been working on two packages for new One-Click Installer: Runtime and Developer Kit.</p>
<p>Runtime ships the minimum Ruby+RubyGems so you get started, and it can also be used as modules for other installations. The DevKit provides the MinGW environment so you create Ruby extensions or even install the ones that are not pre-built for Windows but they are easy to get it.</p>
<p>This DevKit will not only let you get easily working with Ruby on Windows (and have access to some great and cool Rubygems) but also lets you contribute back to Ruby project. How? Easily, the Ruby Installer project (on <a href="http://github.com/luislavena/rubyinstaller/tree/master"target="_blank" rel="noopener">Github</a>) is self-hosted. What does it mean? It is possible for you to replicate our development environment anywhere, hack your changes or even debug Ruby&rsquo;s own C code and contribute back to the community. We have been doing that for several months, and it&rsquo;s working, how cool is that?</p>
<p><strong>AkitaOnRails:</strong> That sounds awesome, I didn&rsquo;t know that, and I bet lots of developers didn&rsquo;t also. So I hope C developers reading this can get up to speed with this now. Another detail: RubyGems. How difficult is it to port a Gem with C Extensions to provide a Windows binary when you install it?</p>
<p><strong>Luis Lavena:</strong> Oh, that requires that some developers don&rsquo;t fall into platform specific tricks to make their tools work. One example, that is also a bad practice, is to use hardcoded paths…</p>
<p>Another one is to rely on the existence of some external tools, which sometimes are not available or developers/users didn&rsquo;t install it. And I&rsquo;m not talking about Linux-Windows platform issues, even between Linux distros that is a problem.</p>
<!-- dead Flash embed removed (service offline): flash -->  
<p><a href="http://www.vimeo.com/1266418?pg=embed&amp;sec=1266418"target="_blank" rel="noopener">Installing Gems on RubyInstaller</a> from <a href="http://www.vimeo.com/luislavena?pg=embed&amp;sec=1266418"target="_blank" rel="noopener">Luis Lavena</a> on <a href="http://vimeo.com?pg=embed&amp;sec=1266418"target="_blank" rel="noopener">Vimeo</a>.</p>
<p><strong>AkitaOnRails:</strong> So it is pretty much dependent on the quality of the original Gem, right? The cleaner the code the easier to port it, of course. But does your DevKit provide some shortcuts to achieve that? And what about RubyInline, does it simply break down?</p>
<p><strong>Luis Lavena:</strong> Yeah, I&rsquo;ve learned over the years that you shouldn&rsquo;t assume anything about the environment your application is supposed to run, in that way, you avoid those mistakes.</p>
<p>Thankfully RubyInline is playing nice with Ruby Installer (One-Click Installer that uses MinGW) for a few versions back (Thanks goes to Ryan Davis to include those patches).</p>
<p>The current, VC6 build of One-Click Installer is not safe, since you need VS6 to work, which is no longer available. I&rsquo;ve heard of users enjoying Sequel, Ambition and ImageScience on Windows thanks to those patches.</p>
<p><strong>AkitaOnRails:</strong> Correct me if I am wrong, but isn&rsquo;t it a way to embed C code snippets mixed in Ruby code? This means it will natively compile this snippet to run? How does it achieve this in a Windows environment that doesn&rsquo;t have compilers by default?</p>
<p><strong>Luis Lavena:</strong> We managed to sneak some patches to Hoe and RubyInline that &ldquo;bundles&rdquo; the pre-built extensions into the gems, so users don&rsquo;t need a compiler in those cases.</p>
<p>Anyway, right now using VC6 build of Ruby requires man power to maintain those gems and keep up with new releases, which takes time. Up until now I was the only man in the show (since we own some VC6 licenses). Building everything for everyone is a burden I&rsquo;m looking forward to drop into DevKit.</p>
<p><strong>AkitaOnRails:</strong> Are you the ones maintaining the Windows versions of Gems or each Gem developer takes care of his own project? Is there a central repository for Windows-ready Gems? Is the DevKit already available, by the way?</p>
<p><strong>Luis Lavena:</strong> For some projects I&rsquo;m the only one maintaining gems for Windows, for others I only had contributed patches and other users manage the builds. There is no central repository for Windows gems since I want RubyForge to be the central one.<br>
In any case, I&rsquo;m pushing MinGW specific ones based on github forks here:</p>
<pre><code>gem list --remote --source http://gems.rubyinstaller.org</code></pre>
<p>The devkit is already available, but we are wrapping it into a good Windows Installer package. You can get your hands dirty and grab the sandbox project from <a href="http://github.com/luislavena/rubyinstaller">Github</a> to get your environment, or simply <a href="http://www.rubyinstaller.org/sandbox/">download the packages</a>.</p>
<p><strong>AkitaOnRails:</strong> So, as far as tools and processes are concerned you're doing a great job. But then there is the Ruby code that, by itself, is a big challenge from what I hear. You mentioned to me that it doesn't even look like C. What are the biggest problems? Technical or getting help from the Ruby-Core mailing list, or both? And what about test suites, how are you squashing compatibility bugs?</p>
<p><strong>Luis Lavena:</strong> To be honest, sometimes peeking into Ruby C code gives me headaches. There are lot of macros and definitions and macro conditions that happens in the middle of a if .. else block… The hardest part, besides tracing the bug is getting feedback from ruby-core. Several times I've <a href="http://blog.mmediasys.com/2008/03/06/is-windows-a-supported-platform-for-ruby-i-guess-not/">expressed</a> my concerns about it on mailing lists, #irc and on my blog.</p>
<p>Several times I asked if it was OK to get some errors in the unit tests of Ruby itself and sometimes got answers, but sometimes didn't. Thankfully we no longer need to base our testing quality in bundled unit tests of Ruby. We started to find issues with the Ruby implementation on Window using the Ruby Specs created by the guys at the Rubinius project and that most of the Implementations (IronRuby and jRuby) actively contribute and use as foundation of their interpreters.</p>
<p><strong>AkitaOnRails:</strong> So, speaking of which, <a href="http://blog.emptyway.com/2008/04/06/the-rubyspecs-quick-starting-guide/">RubySpecs</a> how far is Ruby on Windows from passing it through? Or is it already?</p>
<p><strong>Luis Lavena:</strong> Well, that's a big tasks. First we started making MSpec to work properly on Windows, since RubySpec require some audit to remove some hardcoded paths in it. So we started to add guards around things that are not supported or don't even work on Windows in <span class="caps">MRI</span>.</p>
<p>That takes longer since we need to review the results on each platform, dig into the Ruby documentation (that is sometimes lacking) or take a deep breath and look at the C code to find what is actually doing.</p>
<p>If we had <strong>more man power</strong>, maybe we could finish guarding all the code and get a clear running specs on Windows. Right now there are many that just break or segfault.</p>
<p><strong>AkitaOnRails:</strong> You should document this process so people can help, if you didn't already :-) Now speaking of more practical stuff: Ruby on Windows, today, is it a viable runtime to run Rails apps on Windows? Even production apps? You worked with Zed Shaw on Mongrel for Windows, right? Did you try the newest FastCGI support from Microsoft for <span class="caps">IIS</span>?</p>
<p><strong>Luis Lavena:</strong> Hehee, documentation, documentation, it's totally overrated. We planned to have several screencasts in the RubyInstaller website, but it just remains as <em>'coming soon'</em> for now.</p>
<p>Not only you can develop Rails applications in Windows (as I do too), but I know several companies that run it side-to-side with <span class="caps">IIS</span> or even Tomcat.</p>
<p>Even 2 years after Zed created it, Mongrel still rules the scene of Ruby web servers. I didn't do too much to Mongrel itself, since Zed created something that worked out of the box on Windows with small tweaks.</p>
<p>I created something to run Mongrel as a service (mongrel_service), which helped several people to sneak in Ruby and Rails into their corporate environments, even talking to <span class="caps">MSSQL</span> Servers.</p>
<p>I personally didn't test the <a href="http://mvolo.com/blogs/serverside/archive/2007/02/18/10-steps-to-get-Ruby-on-Rails-running-on-Windows-with-IIS-FastCGI.aspx"><span class="caps">FCGI</span> support on <span class="caps">IIS</span></a>, but I was the one fixing it to be bundled with One-Click Installer so some users could enjoy it. We could say it works.</p>
<p><strong>AkitaOnRails:</strong> About performance, Windows seems to have an inherent condition: in the same machine when I start, let's say, a simple <span class="caps">IRB</span> in Windows, then I dual boot to Linux and run it, it seems to open up much faster (not exactly a scientific experiment :-). What is your experience around Ruby performance on Windows?</p>
<p><strong>Luis Lavena:</strong> There are performance issues related to the C code being generated by the compiler, and issues related to the OS and I/O handled by it. Loading <span class="caps">IRB</span> on Windows could be requiring RubyGems in the background, which in turn needs to scan and load all the gems specifications. I try to keep <code>RUBYOPT=rubygems</code> out of my environment variables.</p>
<p><strong>AkitaOnRails:</strong> By the way, why I have the impression that I see <span class="caps">RUBYOPT</span>=rubygems being recommended in every windows tutorial I see?</p>
<p><strong>Luis Lavena:</strong> <code>RUBYOPT=rubygems</code> is the part of the magic we must avoid.<br>
On Linux, if you start creating a script and you need a gem, you start with:</p>
<hr>
<pre><code>require 'rubygems'
require 'some_gem'</code></pre>
<p>The same should be done for Windows, it is not painful, it's good practice. <span class="caps">RUBYOPT</span> is a shortcut that I dislike, I haven't seen a Linux distro that enables that by default, and I dislike that being set on Windows. (of course, that's my personal point of view)</p>
<p>So to avoid falling into standard testing procedures, I keep using a simple but good sudoku solver that exercise recursion, array and conditions of the VM instead of being IO bound.</p>
<p>You can see that, with funny results on <a href="http://blog.mmediasys.com/2008/04/24/contributions-speedup-and-less-quirks-for-us/">my blog</a> (see <em>"Rubinius, RubySpecs, and speed."</em> section of the post).</p>
<p>The main thing is that VC6 make it slow. Then you have I/O bound stuff (I/O stuff on Windows is not as good as Linux). I consider the default VC6 build of Ruby on Windows painfully slow. On the other hand, the MinGW one is snappier but I still think that there is a huge path for improvement.</p>
<p><strong>AkitaOnRails:</strong> So, overall, Ruby on Windows is always evolving which is great, runs great on Windows, which is remarkable, but it could use some more help, right? Do you think more Windows C developers would help? I mean, adding more hands would help improve its quality?</p>
<p><strong>Luis Lavena:</strong> Definitely!</p>
<p><strong>AkitaOnRails:</strong> What kind of developers, I mean what one should know to help?</p>
<p><strong>Luis Lavena:</strong> Dunno if Ruby "core" will accept that, I lately only hear the fork word around <span class="caps">MRI</span> ruby. Moreover, we can squash bugs in the Ruby for Windows implementation, but we cannot improve the quality too much since those changes would affect other platforms too.</p>
<p>The bad thing is that there is no clear separation by platform of specific code, everything is around a series of macros and compilation conditions that makes it hard to track (for the non-sadistic developers).</p>
<p><strong>AkitaOnRails:</strong> Which reminds me of the Phusion guys with their <a href="http://www.rubyenterpriseedition.com/">Enterprise Edition</a> which is a fork of <span class="caps">MRI</span>. Did you try to take a look on the copy-on-write GC patches from them? Maybe have it on the Windows version? Ruby on Windows itself is a 'fork'. You end up having to synchronize your trunk with theirs, is that how it works?</p>
<p><strong>Luis Lavena:</strong> Honestly I didn't have time to look at Enterprise Edition, even though I followed all the posts and the discussion of those patches in ruby-core. The funny thing is that the latest releases of the Ruby 1.8.6 branch are giving me headaches (more than looking at the C code). They cannot even complete the self-tests and segfault with some extensions like the mysql gem.</p>
<p><strong>AkitaOnRails:</strong> Yes, it has been causing a lot of fuzz around the community, and it should. Hope they can get around it soon. Well, I think I already took a lot of your time. Is there any subject you would like to tackle, or at least some message for your younger brazilian community?</p>
<p><strong>Luis Lavena:</strong> Yeah, don't be afraid to ask questions, don't feel ashamed for using Windows as Platform. You can accomplish great applications using Windows, and you can infiltrate more easily into corporate environments with it.</p>
<p><strong>AkitaOnRails:</strong> Oh, which reminds me of one last question that everybody asks me all the time – and I shall forward it to you, as you're a Windows developer: what are your tools of choice to edit Ruby/Rails projects?</p>
<p><strong>Luis Lavena:</strong> I mostly use Free or Open Source stuff, so I've been using <a href="http://www.activestate.com/store/download.aspx?prdGUID=20f4ed15-6684-4118-a78b-d37ff4058c5f">Komodo Edit</a> (not Pro) and <a href="http://www.pnotepad.org/">Programmer Notepad</a>, since sometimes I use them to work on C, FreeBASIC and Assembler code for embedded hardware.</p>
<p>Lately I've been using a lightweight Editor called <a href="http://intype.info/home/index.php">Intype</a> that ships with some bundles to mimic TextMate, but I really don't take advantage of them. I used NetBeans for a while, but after 500MB I just closed it :-)</p>
<p><strong>AkitaOnRails:</strong> Haha, and what would you recommend for a beginner Rails programmer?</p>
<p><strong>Luis Lavena:</strong> To get started NetBeans is good, but with practice they will learn that even notepad is enough to code.</p>
<p>(PS: We are already including Enterprise patches for latest issues on MinGW build! :-)</p>
<p><strong>AkitaOnRails:</strong> Haha, right. Well, I think this is it. I think this will reach a broader audience and call the attention of Windows developers out there. Thanks a lot!</p>
<p><strong>Luis Lavena:</strong> Thanks to you Fabio.</p>
<p style="text-align: center; margin: 5px"><a href="http://www.flickr.com/photos/diegal/325555121/"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/7/2/325555121_e6e22ea444.jpg" alt=""></a></p>
]]></content:encoded><category>interviews</category><category>ruby</category><category>microsoft</category></item><item><title>Chatting with Scott Hanselman</title><link>https://akitaonrails.github.io/en/2008/02/18/chatting-with-scott-hanselman/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2008/02/18/chatting-with-scott-hanselman/</guid><pubDate>Mon, 18 Feb 2008 09:45:00 -0300</pubDate><description>&lt;p&gt;This week I interviewed another person from the Microsoft camp, &lt;a href="http://www.hanselman.com/"target="_blank" rel="noopener"&gt;Scott Hanselman&lt;/a&gt;. I know him from his podcast &lt;a href="http://www.hanselminutes.com/"target="_blank" rel="noopener"&gt;Hanselminutes&lt;/a&gt;. In one episode he &lt;a href="https://akitaonrails.github.io/2007/07/08/hanselminutes-entrevista-com-david-hansson-e-martin-fowler/"&gt;interviewed&lt;/a&gt; both Martin Fowler and David Hansson at last year&amp;rsquo;s RailsConf, a truly remarkable conversation.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/18/1370206727_84d760de06.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;He also posted a great &lt;a href="http://www.hanselman.com/blog/ASPNET35ExtensionsPlusMVCHowToScreencast.aspx"target="_blank" rel="noopener"&gt;screencast&lt;/a&gt; about Microsoft&amp;rsquo;s new alternative MVC framework and I thought it would be great to have him at my blog to talk about technology and web frameworks. As I said before I think that we should not become alienated about what&amp;rsquo;s going on in other fronts and Scott is a very forward thinking and open minded person as well.&lt;/p&gt;</description><content:encoded><![CDATA[<p>This week I interviewed another person from the Microsoft camp, <a href="http://www.hanselman.com/"target="_blank" rel="noopener">Scott Hanselman</a>. I know him from his podcast <a href="http://www.hanselminutes.com/"target="_blank" rel="noopener">Hanselminutes</a>. In one episode he <a href="/2007/07/08/hanselminutes-entrevista-com-david-hansson-e-martin-fowler/">interviewed</a> both Martin Fowler and David Hansson at last year&rsquo;s RailsConf, a truly remarkable conversation.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/18/1370206727_84d760de06.jpg" alt=""  loading="lazy" /></p>
<p>He also posted a great <a href="http://www.hanselman.com/blog/ASPNET35ExtensionsPlusMVCHowToScreencast.aspx"target="_blank" rel="noopener">screencast</a> about Microsoft&rsquo;s new alternative MVC framework and I thought it would be great to have him at my blog to talk about technology and web frameworks. As I said before I think that we should not become alienated about what&rsquo;s going on in other fronts and Scott is a very forward thinking and open minded person as well.</p>
<p><strong>AkitaOnRails:</strong> First of all, let me congratulate you mr. <a href="http://www.hanselman.com/blog/BlueBadge.aspx"target="_blank" rel="noopener">progman.exe</a> :-) I understand that this was something you&rsquo;re very excited about. Can you tell us a bit more about your transition to Microsoft and your new duties?</p>
<p><strong>Scott Hanselman:</strong> I&rsquo;m working for Simon Muzio who runs <a href="http://www.asp.net"target="_blank" rel="noopener">www.asp.net</a>, <a href="http://www.iis.net"target="_blank" rel="noopener">www.iis.net</a> and large content-packed sites like that. I like to think my job is writing a book that will never end, where that book is blog posts, articles, screencasts, videos, talks, etc. I&rsquo;m a teacher at heart, so while I took the title &ldquo;Community Liaison&rdquo; I like &ldquo;Teacher.&rdquo;</p>
<p><strong>AkitaOnRails:</strong> Tell us about your history. How did you start in the computer world? Did you always develop more toward Windows or did you have a background in the Unix world as well? And before your recent departure to Microsoft you worked for <a href="http://www.hanselman.com/blog/CheckFreeClosesDealToAcquireCorillianNowTheRealWorkBegins.aspx"target="_blank" rel="noopener">Corillian</a>. What was your role there?</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/18/computerolympics.jpg" alt=""  loading="lazy" /></p>
<p><strong>Scott Hanselman:</strong> <a href="http://www.hanselman.com/blog/TeachingChildrenAndKidsToProgramTheOldSchoolWay.aspx"target="_blank" rel="noopener">This blog</a> posts talks about my early years in school.</p>
<blockquote>
  <p>See that book on the right there? That&rsquo;s how I learned to program. This book was THE book in 1984. I typed in the whole book on a Commodore 64.</p>

</blockquote>
<p>And a VERY <a href="http://www.hanselman.com/blog/MrsMayfieldHillMyFifthGradeTeacher.aspx"target="_blank" rel="noopener">influential teacher</a> that set me on the right track.</p>
<blockquote>
  <p>Marianne Mayfield is my fifth-grade teacher and the reason I&rsquo;m in computers today. She was at my wedding, at graduations, at family events. Twenty years later and we are still close. When I was young, she recognized that I was &ldquo;at risk for trouble&rdquo; and sat down with my family in order to find a way to get me back on track. She saw that I was transfixed by the Apple II in our classroom and set it up so we could sneak the computer out of the school as long as it was back by Sunday night and no one noticed.</p>

</blockquote>
<p>(click links above for more details)</p>
<p><strong>Scott Hanselman:</strong> I was the Chief Architect at Corillian, working with other engineers and architects throughout the company, planning, designing, coding the next generation of Corillian&rsquo;s Online Banking Platform.</p>
<p><strong>AkitaOnRails:</strong> I applaud your <a href="http://www.hanselman.com/blog/TeamHanselmanAndDiabetesWalk2007.aspx"target="_blank" rel="noopener">Team Hanselman</a> campaign to help fight Diabetes. I understand that you have Diabetes as well and that, fortunately, you managed to have it under control nowadays. Can you tell us this story and the goals of your campaign?</p>
<p><strong>Scott Hanselman:</strong> My personal story is <a href="http://hanselman.com/fightdiabetes"target="_blank" rel="noopener">here</a> :</p>
<blockquote>
  <p>I currently take three shots a day of Symlin while also wearing an Insulin Pump 24-hours a day, even while I sleep. The pump saves me from an additional six shots a day, which I took for 8 years before the pump. I test my blood sugar by pricking my finger between 8 and 10 times a day – that&rsquo;s about 46,500 finger pricks so far, and miles to go before I sleep.</p>

</blockquote>
<p>And there&rsquo;s a good explanation of diabetes <a href="http://www.hanselman.com/blog/ScottsDiabetesExplanationTheAirplaneAnalogy.aspx"target="_blank" rel="noopener">here</a> :</p>
<blockquote>
  <p>Here&rsquo;s where the analogy gets interesting. Remember in the analogy we are flying from L.A. to New York, except we only get to check our altitude seven times. And, we only get to change altitude (take insulin) less than ten times. But, when I check my blood sugar, I&rsquo;m actually seeing the past. I&rsquo;m seeing a reading of what my blood sugar was 15 minutes ago. And, when I take insulin, it doesn&rsquo;t start lowering my blood sugar for at least 30 minutes.</p>

</blockquote>
<p>The campaign ended up raising over USD$30,000, and that money will be applied to research, education and programs surrounding diabetes.</p>
<p><strong>AkitaOnRails:</strong> <em>&ldquo;What in the world were you doing at a RailsConf?&rdquo;</em> That&rsquo;s what I think people from outside of the Microsoft blogosphere would ask you :-) So, are you just curious about Rails, or do you actually develop Rails-based apps? I am very interested to learn your opinions about Rails. How did you find it? What do you think is best about Rails? And more importantly, what do you think Rails could have improved?</p>
<p><strong>Scott Hanselman:</strong> I&rsquo;m always trying different programming languages and frameworks. I&rsquo;ve been doing Rails on and off for about 18 months, but it hasn&rsquo;t clicked for me yet. I&rsquo;m sure it will soon. The MVC pattern is very old…I was doing it in Java over 10 years ago, and certainly the pattern goes back 30 years. I think that Rails is a good framework considering its young age. I think it&rsquo;s Ruby that is the real magic though and I find the Ruby aesthetic to be very in line with my own.</p>
<p><strong>AkitaOnRails:</strong> Then, following my biased preferences, the next article I like is your <a href="http://www.hanselman.com/blog/ASPNET35ExtensionsPlusMVCHowToScreencast.aspx"target="_blank" rel="noopener">screencast</a> over the CTP ASP.NET MVC framework. I see that this new framework resembles Rails a lot. Of course, it may just look like that because both implement MVC2. But on the other hand, it uses very similar Rails idioms everywhere. It lacks a little bit of &lsquo;convention-over-configuration magic&rsquo; but from what I saw, it looks much better than doing conventional ASP.NET. What do you think about it? Can you summarize it a little bit for those that don&rsquo;t know this product yet? And what do you think will still improve in it?</p>
<p><strong>Scott Hanselman:</strong> If one points at Rails and says &ldquo;that&rsquo;s MVC&rdquo; then everything else looks like Rails, sure. Any good MVC framework needs to not only follow the pattern as appropriate but also abstract away HTTP (assuming it&rsquo;s a web framework) in a clean, but not complete, way. The ASP.NET MVC implementation still has some baggage that it will always have to carry because ASP.NET WebForms came first and wasn&rsquo;t designed from scratch with testability in mind. That said, it&rsquo;s all about alternatives. Use the framework that makes you happy and you feel most productive in. Some fraction, maybe 20%, of ASP.NET devs will prefer MVC. Now they have a MS support choice with good integration with C# 3.0</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/18/505403549_2ad6d13ce7.jpg" alt=""  loading="lazy" /><br>
at RailsConf'07</p>
<p><strong>AkitaOnRails:</strong> And what would be tech world without discussions and flame wars? I understand that most .NET developers don&rsquo;t even pay attention to Rails or other frameworks. I even heard that there are some developers questioning things like <em>&ldquo;Why yet another web framework if ASP.NET is already there?&rdquo;</em> Meaning, why reinvent the wheel and divide attentions? I particularly think that this new MVC is the way to go, but it is undeniable that the old ASP.NET has much more acceptance and support. How to reconcile both point of views?</p>
<p><strong>Scott Hanselman:</strong> That&rsquo;s just FUD (fear, uncertainty, and doubt). Think what they like, this Framework is just about alternatives. WebForms is great, and if you&rsquo;re doing Line of Business (LOB) apps with complex grids and such, it&rsquo;s not going anywhere. However, if you&rsquo;re an agile shop with a penchant for TDD and have been frustrated by ViewState, then check out ASP.NET MVC. There&rsquo;s nothing to reconcile. Some people take a car, some a motorcycle, and others walk. As long as you get from point A to point B and feel good about the journey.</p>
<p><strong>AkitaOnRails:</strong> Speaking of flame wars, there is probably one subject that gives me the creeps: the paranoid conspiracy theories regarding Miguel de Icaza and <a href="http://www.hanselman.com/blog/MonoAndItsManyFacetsScreencast.aspx"target="_blank" rel="noopener">Mono</a>. A lot of people actually believe that Miguel is &lsquo;selling&rsquo; part of the open source world to Microsoft. Have you ever used it? What do you hear throughout the community and what&rsquo;s your opinion about this matter?</p>
<p><strong>Scott Hanselman:</strong> Yes, I&rsquo;ve used Mono and I think it&rsquo;s a great way to get your .NET application working on Linux or Mac. I think Miguel is brilliant and a fine dancer. I hear in the community that they are happy Mono exists and that it&rsquo;s available as an option.</p>
<p><strong>AkitaOnRails:</strong> I will probably be cursed for this one: but I am not &lsquo;strongly&rsquo; against Microsoft as some fundamentalists are. It is public and notorious that Microsoft is a big corporation and as such it did its share of ill conceived deeds. A lot of them were already settled in court. So, it&rsquo;s more complex than people usually think. I prefer to assume that inside Microsoft there is a lot of very smart people.</p>
<p><strong>Scott Hanselman:</strong> I stay out of legal stuff. Microsoft is a huge company with a lot of smart people, but it&rsquo;s really many medium sized companies working together (usually). I can&rsquo;t speak to &ldquo;ill conceived deeds.&rdquo; I can only say that I do my best every day to not be evil, as do my coworkers. There&rsquo;s no evil master plan in my group.</p>
<p><strong>AkitaOnRails:</strong> I particularly like the roadmap for Windows Server 2008 (with it&rsquo;s minimalist approach, finally having only what you need installed). Last year you were experimenting with <a href="http://www.hanselman.com/blog/ScreencastHowToIIS7AndPHPWithFastCGI.aspx"target="_blank" rel="noopener">IIS 7</a> and its new FastCGI support. I think it was primarily intended for PHP support but it could theoretically handle Ruby on Rails as well. Have you tried Rails there? I think Microsoft is clearly going after the low-end with Windows Server 2008 + IIS 7, against the inexpensive Linux+Apache boxes. I think they won&rsquo;t be able to reach them in terms of prices but what do you think of it as an internet service contender?</p>
<p><strong>Scott Hanselman:</strong> I have little power in that arena, but every time someone will listen I&rsquo;m pushing for a nice inexpensive Web Server SKU. I&rsquo;m a huge fan of IIS7 and I&rsquo;d like as many people as possible to check it out. I haven&rsquo;t tried IIS7+Rails but I&rsquo;ve heard rumors of folks getting it working.</p>
<p><strong>AkitaOnRails:</strong> There are a lot of new features in .NET 3.5. LINQ is the one that interests me the most. Can you give us a brief description of why it&rsquo;s so interesting? And what do you think are the best improvements of the 3.5 version? Are you already using Orcas? What&rsquo;s your opinion? Oh, and are you aware of the <a href="http://www.sapphiresteel.com/"target="_blank" rel="noopener">Sapphire in Steel</a> project?</p>
<p><strong>Scott Hanselman:</strong> LINQ is interesting because it&rsquo;s its own Domain Specific Language for querying objects of all kinds, and it&rsquo;s living right inside VB and C#. It&rsquo;s a MUCH smarter compiler and it&rsquo;s a joy to work with. I&rsquo;ve installed Sapphire In Steel and I know a few people who are digging it. I&rsquo;m looking forward to Rails on .NET.</p>
<p><strong>AkitaOnRails:</strong> One of the advantages of the Microsoft .NET strategy was being prepared since its first day to be language-agnostic. Now we have the DLR that was derived from the works in IronPython and not IronRuby. But there is yet another cool language that not many people are aware of: F#, the OCaml inspired language. Have you tried it?</p>
<p><strong>Scott Hanselman:</strong> Yes, and I&rsquo;ve done two podcasts on it, one with <a href="http://www.hanselman.com/blog/HanselminutesPodcast76FWithRobertPickering.aspx"target="_blank" rel="noopener">Robert Pickering</a>, author of a book on F# and one with <a href="http://www.hanselman.com/blog/HanselminutesPodcast96StartingSmallWithFWithDustinCampbell.aspx"target="_blank" rel="noopener">Dustin Campbell</a>, an enthusiast. I&rsquo;m stoked it&rsquo;ll be a first-class language inside VS.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/18/1930668335_0719ad4d3f.jpg" alt=""  loading="lazy" /><br>
with John Lam</p>
<p><strong>AkitaOnRails:</strong> I am not against technical comparisons, we have to do such things to decide our steps in projects. But I am against pointless challenges. Rails is far from perfect and I am the first say it. That said, it is great for an specific niche of web development. I usually recommend that good programmers should expand their horizons and learn as much new stuff as possible. You can&rsquo;t know everything perfectly but it&rsquo;s always good to be aware of the possibilities. You <a href="http://www.hanselman.com/blog/TheProgrammingLanguageExplosion.aspx"target="_blank" rel="noopener">wrote something</a> around these lines. What do you think about it?</p>
<p><strong>Scott Hanselman:</strong> Rails is good for what it does in its niche. You don&rsquo;t create Windows Desktop apps with Rails and that&rsquo;s fine. That&rsquo;s why we don&rsquo;t compare Rails to WPF, we compare it to Web Frameworks. Comparison is good and there&rsquo;s always good to be found on either side. I avoid flame wars as well. It&rsquo;s pointless. If the shoe pinches, don&rsquo;t wear it. But, try as many shoes as you can!</p>
<p><strong>AkitaOnRails:</strong> Last year you wrote an <a href="http://www.hanselman.com/blog/TheSkynetComputeCloudIThinkThereIsAWorldMarketForMaybeFiveComputers.aspx"target="_blank" rel="noopener">interesting post</a> about the future. Google is this big giant, Amazon released surprisingly good products in the last few months like S3, EC2, SimpleDb. I am not well aware of the current Microsoft Live&rsquo;s strategy. Can you say something about where is it heading to?</p>
<p><strong>Scott Hanselman:</strong> I&rsquo;m not in that group so I have no insight outside of what&rsquo;s already been said. However, I do still hold to my predictions in that post!</p>
<blockquote>
  <p>Computing will be moved into the Cloud. It&rsquo;s already happening, we&rsquo;re 20% there. The idea has been around since the beginning, and it will, in my opinion, continue to come up until it actually happens and we build Skynet. One of these compute clouds will no doubt end up in orbit.</p>

</blockquote>
<p><strong>AkitaOnRails:</strong> And of course, I kind of &lsquo;have&rsquo; to ask you this: do you use Windows Vista? How has it been for you given that there&rsquo;s a huge underground campaign against it? Do you think it is as bad as everybody else says? I can&rsquo;t comment because I never tried it outside of my virtual machine (I am a Mac guy), but they did sell 100 million licenses.</p>
<p><strong>Scott Hanselman:</strong> Sure. I run Vista 64-bit on 3 machines, and Vista 32-bit on 2 machines. It was rough for the first 3 months while the driver support sucked, but now it&rsquo;s fine. I&rsquo;ve got 2 vista machines that haven&rsquo;t been rebooted in months, just put to sleep and woken up. Once you get good video drivers, you&rsquo;re usually cool.</p>
<p>Folks give Vista a hard time but they forget the wide range of hardware it has to run on. OS X only has to run on Macs, and a narrow range at that. Vista has to run on millions of combinations of hardware. Third Party Drivers are by FAR the thing that crashes Vista the most and it gets blamed. That&rsquo;s why I run 64-bit and use only signed drivers. I&rsquo;ve been thrilled with 64-bit. Works great.</p>
<p><strong>AkitaOnRails:</strong> Ok, this is it :-) Thanks a lot!</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/2/18/90081476_85f9a226dd.jpg" alt=""  loading="lazy" /></p>
]]></content:encoded><category>interviews</category><category>microsoft</category><category>web-development</category></item></channel></rss>