<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.3">Jekyll</generator><link href="https://ajcvickers.github.io//feed.xml" rel="self" type="application/atom+xml" /><link href="https://ajcvickers.github.io//" rel="alternate" type="text/html" /><updated>2023-12-12T10:23:19+00:00</updated><id>https://ajcvickers.github.io//feed.xml</id><title type="html">1unicorn2</title><subtitle>More thoughts from a member of the Entity Framework team.</subtitle><author><name>Arthur Vickers</name><email>ajcvickers@hotmail.com</email></author><entry><title type="html">Hacking my Sixth Form College network in 1991</title><link href="https://ajcvickers.github.io//2020/04/10/nimbus/" rel="alternate" type="text/html" title="Hacking my Sixth Form College network in 1991" /><published>2020-04-10T15:07:00+00:00</published><updated>2020-04-10T15:07:00+00:00</updated><id>https://ajcvickers.github.io//2020/04/10/nimbus</id><content type="html" xml:base="https://ajcvickers.github.io//2020/04/10/nimbus/">&lt;h1 id=&quot;hacking-my-school-network-in-1991&quot;&gt;Hacking my school network in 1991&lt;/h1&gt;
&lt;p&gt;Back in 1991 I was a student at &lt;a href=&quot;https://www.franklin.ac.uk/&quot;&gt;Franklin Sixth Form College&lt;/a&gt; in Grimsby, England.
A sixth form college is roughly equivalent to the junior and senior years in an American high school--I was about 17.&lt;/p&gt;
&lt;h2 id=&quot;the-challenge&quot;&gt;The challenge&lt;/h2&gt;
&lt;p&gt;The college had a local area network (LAN).
It wasn't connected to the Internet.
However, it still had accounts and permissions--teachers could access files that students couldn't.
And the admin could access anything.&lt;/p&gt;
&lt;p&gt;There were two people in charge of &amp;quot;computer stuff&amp;quot; at the college.
A system admin, Steve B, who I got along very well with, and another Steve (last name forgotten) who was the computer science teacher.
I didn't get along so well with the second Steve.
Probably because I was an annoyingly arrogant teenager who had no interest in taking his computer science classes.
(I studied Maths, Physics, Chemistry, and Biology at A-Level. Yes, I was that kid.)&lt;/p&gt;
&lt;p&gt;One day, I was hanging out and chatting with the system admin, Steve B.
I expressed a hunch that the network security was probably pretty bad.
Steve thought it probably wasn't as bad as I was suggesting.&lt;/p&gt;
&lt;p&gt;&amp;quot;Why don't &lt;strong&gt;you&lt;/strong&gt; hack it then?&amp;quot;&lt;/p&gt;
&lt;p&gt;Yes, the admin had challenged me, a student, to hack the network!&lt;/p&gt;
&lt;p&gt;Oh dear.&lt;/p&gt;
&lt;h2 id=&quot;the-network&quot;&gt;The network&lt;/h2&gt;
&lt;p&gt;The college LAN was &lt;a href=&quot;https://en.wikipedia.org/wiki/10BASE2&quot;&gt;10BASE2 Ethernet&lt;/a&gt;.
That's the kind that uses coax cables and no hubs.
The machines were &lt;a href=&quot;https://www.thenimbus.co.uk/&quot;&gt;RM Nimbus PCs&lt;/a&gt;, mostly with &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_80186&quot;&gt;80186&lt;/a&gt; processors.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/nimbus.jpg&quot;&gt;&lt;img src=&quot;/assets/nimbus.jpg&quot; alt=&quot;RM Nimbus&quot; width=50% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Most of the machines did not have hard drives.
Instead, they booted from the network and ran software fom network shares.
These were located on two servers named &amp;quot;ADA&amp;quot; and &amp;quot;HAL&amp;quot;.
(I wasn't aware just how good these names were back then!)&lt;/p&gt;
&lt;p&gt;Some of the machines had 3.5&amp;quot; floppy drives, as seen in the image.
This turned out to be very useful!&lt;/p&gt;
&lt;h2 id=&quot;phishing&quot;&gt;Phishing&lt;/h2&gt;
&lt;p&gt;The first approach I came up with was essentially phishing, even if it wasn't called that back then.
The idea was to create a fake login screen, get the admin to login, and thereby obtain the password.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/nimbus_login.jpg&quot;&gt;&lt;img src=&quot;/assets/nimbus_login.jpg&quot; alt=&quot;RM Nimbus login screen&quot; width=50% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;But this seemed like a lot of effort.
And it would probably only work a couple of times at best.
So I gave up on this approach.&lt;/p&gt;
&lt;h2 id=&quot;login-observations&quot;&gt;Login observations&lt;/h2&gt;
&lt;p&gt;Next, I observed something interesting about the login process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There was a noticeable delay after entering the username before the password prompt was shown&lt;/li&gt;
&lt;li&gt;There was no delay between entering the password and being logged on&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So my hypothesis was that the computer did a network round-trip after the username was entered, but not after the password was entered.&lt;/p&gt;
&lt;p&gt;Maybe the password was cached locally in-memory after being obtained from the network?
Seemed worth pursuing.&lt;/p&gt;
&lt;h2 id=&quot;boot-process&quot;&gt;Boot process&lt;/h2&gt;
&lt;p&gt;The boot order for these machines had the network first.
You couldn't just stick in a floppy and boot off it.
Unless you unplugged the network cable...&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/10BASE2.gif&quot;&gt;&lt;img src=&quot;/assets/10BASE2.gif&quot; alt=&quot;10BASE2&quot; width=50% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Also, the &lt;a href=&quot;https://en.wikipedia.org/wiki/AUTOEXEC.BAT&quot;&gt;AUTOEXEC.BAT&lt;/a&gt; and other boot files required to connect to the network were easily copied onto a floppy.
This meant that I could boot onto the network from a floppy by&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unplugging the coax from the back of the machine&lt;/li&gt;
&lt;li&gt;Waiting until just after the floppy boot had started&lt;/li&gt;
&lt;li&gt;Plugging the network cable back in&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;tsr&quot;&gt;TSR&lt;/h2&gt;
&lt;p&gt;So now I could inject my own code into the boot process.
But, of course, it couldn't stop the boot--it needed sit quietly and then activate when I needed it.
In MS-DOS, this was called a &lt;a href=&quot;https://en.wikipedia.org/wiki/Terminate_and_stay_resident_program&quot;&gt;Terminate and stay resident program&lt;/a&gt;, or TSR.&lt;/p&gt;
&lt;p&gt;I don't remember full details of the TSR code I wrote, but it was in x86 assembly and hooked into an interrupt such that it could be triggered by some key combination.
It was very hacky, which seemed appropriate.&lt;/p&gt;
&lt;h2 id=&quot;success&quot;&gt;Success!&lt;/h2&gt;
&lt;p&gt;I ran the TSR and triggered it after I had entered my username.
It scanned memory for my username, which it found, and then displayed any text in the surrounding memory.
My password was sitting right next to my username in memory!&lt;/p&gt;
&lt;p&gt;In plaintext!&lt;/p&gt;
&lt;p&gt;(Even in 1991 I was surprised by this!
I was expecting at least some form of trivial encryption.)&lt;/p&gt;
&lt;p&gt;So I ran it again with Steve B's username.
Sure enough, there was his password!&lt;/p&gt;
&lt;p&gt;(Btw, for me, the thrill of even this small hack was pretty intense.
I can easily see how people can be sucked into hacking just for this thrill!)&lt;/p&gt;
&lt;h2 id=&quot;the-reveal&quot;&gt;The reveal!&lt;/h2&gt;
&lt;p&gt;&amp;quot;Hey, Steve? Is this your password?&amp;quot;&lt;/p&gt;
&lt;p&gt;He probably should have uttered some choice language at this point.
But we were in school.
Anyway, he changed his password.&lt;/p&gt;
&lt;p&gt;&amp;quot;Hey, Steve? Is this your &lt;em&gt;new&lt;/em&gt; password?&amp;quot;&lt;/p&gt;
&lt;p&gt;The fact that Steve still didn't swear says a lot about his self control!&lt;/p&gt;
&lt;h2 id=&quot;fallout&quot;&gt;Fallout&lt;/h2&gt;
&lt;p&gt;Soon after, I was summoned into the other Steve's office.
He was not happy.
But what could he do?
(I believe they contacted RM, but were told this kind of thing was pretty common.)&lt;/p&gt;
&lt;p&gt;He tried to instill in me that I should behave responsibly and should under no circumstances give anyone else access.
I thought this was all rather amusing since I had never intended to do anything with the hack anyway!
The fact that I didn't seem to be taking this seriously probably annoyed him more.&lt;/p&gt;
&lt;h2 id=&quot;no-more-hacking&quot;&gt;No more hacking&lt;/h2&gt;
&lt;p&gt;After sixth form, I went off to Nottingham University to read Neuroscience.
There was some pretty scary language in the document everyone had to sign to use the computers.
They made it very clear that they would both expel and prosecute criminally anyone who hacked anything!&lt;/p&gt;
&lt;p&gt;So I gave it up.
But I still look back fondly to the days of easy hacking and limited consequences!&lt;/p&gt;
&lt;hr /&gt;
&lt;div class=&quot;things-change&quot;&gt;
Images of RM Nimbus machines from &lt;a href=&quot;https://www.thenimbus.co.uk/&quot;&gt;The RM Nimbus Museum.&lt;/a&gt;
Many thanks.
&lt;/div&gt;</content><author><name>ajcvickers</name></author><summary type="html">Hacking my school network in 1991</summary></entry><entry><title type="html">Totally made up conversations about choosing Entity Framework version numbers</title><link href="https://ajcvickers.github.io//2020/03/26/numbersarehard/" rel="alternate" type="text/html" title="Totally made up conversations about choosing Entity Framework version numbers" /><published>2020-03-26T09:55:00+00:00</published><updated>2020-03-26T09:55:00+00:00</updated><id>https://ajcvickers.github.io//2020/03/26/numbersarehard</id><content type="html" xml:base="https://ajcvickers.github.io//2020/03/26/numbersarehard/">&lt;h1 id=&quot;all-your-versions-are-belong-to-us&quot;&gt;All your versions are belong to us&lt;/h1&gt;
&lt;h3 id=&quot;totally-made-up-conversations-about-choosing-entity-framework-version-numbers&quot;&gt;Totally made up conversations about choosing Entity Framework version numbers&lt;/h3&gt;
&lt;p&gt;These conversations are a work of fiction.
Any resemblance of to real Microsoft employees, either past or present, is purely coincidental.&lt;/p&gt;
&lt;h3 id=&quot;ef1&quot;&gt;EF1&lt;/h3&gt;
&lt;p&gt;A: So this Entity Framework thing we're shipping. What version is it?&lt;br&gt;
B: It's version 1. Duh.&lt;br&gt;
A: So the assemblies are stamped with 1.0?&lt;br&gt;
B: Err. Well, no. The assemblies are in .NET Framework, so they are versioned as 3.5.&lt;br&gt;
A: So this is really version 3.5? Isn't that weird for a v1?&lt;br&gt;
B: I guess we shouldn't give it any version, since it's in .NET Framework.&lt;br&gt;
A: Okay...&lt;br&gt;
B: How about, &amp;quot;ADO.NET Entity Framework for .NET Framework 3.5 Service Pack 1&amp;quot;?&lt;br&gt;
A: Catchy!&lt;br&gt;&lt;/p&gt;
&lt;h3 id=&quot;ef4&quot;&gt;EF4&lt;/h3&gt;
&lt;p&gt;A: So this Entity Framework thing we're shipping. What version is it?&lt;br&gt;
B. It's version 2. Duh.&lt;br&gt;
A: So the assemblies are stamped with 2.0?&lt;br&gt;
B: Err. Well, no. The assemblies are in .NET Framework, so they are versioned as 4.0.&lt;br&gt;
A: So this is really version 4.0? Isn't that weird for a v2?&lt;br&gt;
B: I guess we shouldn't give it any version, since it's in .NET Framework.&lt;br&gt;
A: Err. We've already been telling customers that it's EF2.&lt;br&gt;
B: Hmm.&lt;br&gt;
A: Also, customers are referring to &amp;quot;ADO.NET Entity Framework for .NET Framework 3.5 Service Pack 1&amp;quot; as EF1.&lt;br&gt;
B: What!? Can't we stop them? We gave it a catchy name for a reason!&lt;br&gt;
A: Customers will be customers...&lt;br&gt;
B: Fine. Fine. EF4 it is.&lt;br&gt;
A: Four?&lt;br&gt;
B: Yes. it's in .NET 4 so it's EF4.&lt;br&gt;
A: But...&lt;br&gt;&lt;/p&gt;
&lt;h3 id=&quot;code-first&quot;&gt;Code First&lt;/h3&gt;
&lt;p&gt;A: So this Entity Framework Code Only thing we're shipping. What's it called?&lt;br&gt;
B: It's a preview right?&lt;br&gt;
A: Yes.&lt;br&gt;
B: And it's a preview of new features, right?&lt;br&gt;
A: Yes...&lt;br&gt;
B: So call it a &amp;quot;Feature Community Technology Preview&amp;quot;. That's the catchy name we have for previews.&lt;br&gt;
A: Why not just &amp;quot;Preview&amp;quot;?&lt;br&gt;
B: Because otherwise people won't know it's for the community, uses technology, and has features.&lt;br&gt;
A: Right. Got it. So it's &amp;quot;ADO.NET Entity Framework Community Technology Preview&amp;quot;?&lt;br&gt;
B: Yep. Catchy and informative!&lt;br&gt;
A: Hmm.&lt;br&gt;
B: Hang on a minute. What is &amp;quot;Code Only&amp;quot; anyway?&lt;br&gt;
A: Well it describes how only code is needed to specify database mappings.&lt;br&gt;
B: But we have &amp;quot;Database First&amp;quot; and &amp;quot;Model First&amp;quot;. Can't we have &amp;quot;Code First&amp;quot; too? It would be really catchy!&lt;br&gt;
A: But that implies you must write the code first.&lt;br&gt;
B. Yeah, but &amp;quot;Code First&amp;quot; is catchy!&lt;br&gt;
A: But...okay, fine. What about the new DbContext API surface? How we refer to that?&lt;br&gt;
B: You can't give it a name. New brands are bad.&lt;br&gt;
A: How do we refer to it?&lt;br&gt;
B: Call it &amp;quot;productivity improvements&amp;quot;.&lt;br&gt;
A: Nice! Catchy and it doesn't mean anything!&lt;br&gt;&lt;/p&gt;
&lt;h3 id=&quot;ef-41&quot;&gt;EF 4.1&lt;/h3&gt;
&lt;p&gt;A: So this Entity Framework thing we're releasing on NuGet. What version is it?&lt;br&gt;
B: It's a minor release that builds on EF4, right?&lt;br&gt;
A: Yep.&lt;br&gt;
B: Then call the package EntityFramework and version it as 4.1.&lt;br&gt;
A: Are you sure?&lt;br&gt;
B: Yes. Doesn't it make sense?&lt;br&gt;
A: No, no. It does make sense. I just wasn't expecting it to!&lt;br&gt;&lt;/p&gt;
&lt;h3 id=&quot;ef-42&quot;&gt;EF 4.2&lt;/h3&gt;
&lt;p&gt;A: I'm going to go out on a limb here. Can it be EF 4.2?&lt;br&gt;
B: Ship-it!&lt;br&gt;
A: I can't believe this is happening. It makes so much sense!&lt;br&gt;&lt;/p&gt;
&lt;h3 id=&quot;ef-43&quot;&gt;EF 4.3&lt;/h3&gt;
&lt;p&gt;A: Rinse and repeat?&lt;br&gt;
B: Yep.&lt;br&gt;
A: Awesome!&lt;br&gt;&lt;/p&gt;
&lt;h3 id=&quot;ef5&quot;&gt;EF5&lt;/h3&gt;
&lt;p&gt;A: So this Entity Framework thing we're shipping. What version is it?&lt;br&gt;
B. So it's aligned with .NET 4.5, right?&lt;br&gt;
A: Yes.&lt;br&gt;
B: So EF 4.5 then?&lt;br&gt;
A: But it's a major release and semantic versioning says it should be 5.0.&lt;br&gt;
B: Fine. Call it EF5, then. I miss the catchy names we used to have. But hey, we're living in a NuGet world!&lt;br&gt;
A: Awesome!&lt;br&gt;&lt;/p&gt;
&lt;h3 id=&quot;ef6&quot;&gt;EF6&lt;/h3&gt;
&lt;p&gt;A: EF6?&lt;br&gt;
B: Yes.&lt;br&gt;&lt;/p&gt;
&lt;h3 id=&quot;ef-core-10&quot;&gt;EF Core 1.0&lt;/h3&gt;
&lt;p&gt;A: So this new Entity Framework thing we're building. What do we call it?&lt;br&gt;
B: Entity Framework?&lt;br&gt;
A: But it's a different code base and works differently. We've been calling it EF Lite.&lt;br&gt;
B: No, no. New brands are bad. It must be called Entity Framework.&lt;br&gt;
A: Won't that be confusing and send the wrong message?&lt;br&gt;
B: Just bump the major version.&lt;br&gt;
A: So, EF7?&lt;br&gt;
B: Yep.&lt;br&gt;
A: But... Okay.&lt;br&gt;
B: No, wait. We just decided, everything Project K will now be &amp;quot;Core&amp;quot;.&lt;br&gt;
A: So, EF Core?&lt;br&gt;
B: Yep. But you have to change the package name as well. Some people can't tell EntityFramework comes from Microsoft.&lt;br&gt;
A: Microsoft.EFCore?&lt;br&gt;
B: Not catchy enough. How about, &amp;quot;Microsoft.EntityFrameworkCore&amp;quot;?&lt;br&gt;
A: So be it. By the way, you do realize we're not actually really ready for a 1.0 release?&lt;br&gt;
B: Does it work.&lt;br&gt;
A: Well, yeah. But there's a lot of stuff missing.&lt;br&gt;
B: It must ship!&lt;br&gt;&lt;/p&gt;
&lt;h3 id=&quot;ef-core-11---31&quot;&gt;EF Core 1.1 - 3.1&lt;/h3&gt;
&lt;p&gt;A: Can we use semantic versioning and make sane version number changes?&lt;br&gt;
B: Why would we not do?&lt;br&gt;
A: I love new Microsoft.&lt;br&gt;&lt;/p&gt;
&lt;h3 id=&quot;ef-core-50&quot;&gt;EF Core 5.0&lt;/h3&gt;
&lt;p&gt;A: So, we're not calling &amp;quot;.NET Core&amp;quot; &amp;quot;.NET Core&amp;quot; anymore?&lt;br&gt;
B: Nope.&lt;br&gt;
A: What about EF Core.&lt;br&gt;
B: It can stay the same.&lt;br&gt;
A: Cool. What version number?&lt;br&gt;
B: Everything in .NET 5 is version 5.&lt;br&gt;
A: But EF Core isn't technically even part of .NET 5. It should be just EF Core 4.0.&lt;br&gt;
B: Everything in .NET 5 is version 5.&lt;br&gt;
A: Five might be confusing because we already had an EF5. And a six. And kind of a seven. Maybe EF Core 8?&lt;br&gt;
B: Everything in .NET 5 is version 5.&lt;br&gt;
A: Well, it given our history, it certainly could be worse!&lt;br&gt;&lt;/p&gt;</content><author><name>ajcvickers</name></author><summary type="html">All your versions are belong to us</summary></entry><entry><title type="html">Moving to Linux - Part 1: Background and first impressions</title><link href="https://ajcvickers.github.io//2020/03/07/movingtolinux1/" rel="alternate" type="text/html" title="Moving to Linux - Part 1: Background and first impressions" /><published>2020-03-22T07:30:00+00:00</published><updated>2020-03-22T07:30:00+00:00</updated><id>https://ajcvickers.github.io//2020/03/07/movingtolinux1</id><content type="html" xml:base="https://ajcvickers.github.io//2020/03/07/movingtolinux1/">&lt;h1 id=&quot;moving-to-linux&quot;&gt;Moving to Linux&lt;/h1&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/logo-linux.png&quot;&gt;&lt;img src=&quot;/assets/logo-linux.png&quot; alt=&quot;Linux!&quot; width=40% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h1 id=&quot;part-1-background-and-first-impressions&quot;&gt;Part 1: Background and first impressions&lt;/h1&gt;
&lt;p&gt;A few weeks ago, I decided to &lt;a href=&quot;https://twitter.com/ajcvickers/status/1224736879683072003&quot;&gt;move from Windows to Linux as my primary development platform&lt;/a&gt;.
These posts are about my experience.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Part 1: Background and first impressions&lt;/li&gt;
&lt;li&gt;Part 2: &lt;a href=&quot;/2020/03/07/movingtolinux2/&quot;&gt;My life in operating systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 3: &lt;a href=&quot;/2020/03/07/movingtolinux3/&quot;&gt;Installation and day-to-day use&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 4: &lt;a href=&quot;/2020/03/07/movingtolinux4/&quot;&gt;Conclusions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;
&lt;h3 id=&quot;why&quot;&gt;Why?&lt;/h3&gt;
&lt;p&gt;I work for Microsoft on .NET Core. (However, the opinions expressed here are my own.)
Cross-platform support is a key part of &lt;a href=&quot;https://dotnet.microsoft.com/learn/dotnet/what-is-dotnet&quot;&gt;.NET Core&lt;/a&gt; and running Linux in the cloud is a key part of Azure.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;https://dotnet.microsoft.com/download/dotnet-core&quot;&gt;&lt;img src=&quot;/assets/dotneteverywhere.png&quot; alt=&quot;.NET Core everywhere!&quot; width=80% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;So we have been targeting and testing against Linux for several years now.
But most .NET development still happens on Windows and Mac machines.&lt;/p&gt;
&lt;p&gt;Using Linux for day-to-day development will help me get a better understanding of how Linux works.
In the same way that emersion in a culture is a good way to understand that culture, so emersion in an operating system is a good way to understand that operating system.
In particular, I'll get a better understanding of how .NET works in non-Windows environments.&lt;/p&gt;
&lt;h3 id=&quot;but-why-emnowem&quot;&gt;But why &lt;em&gt;now&lt;/em&gt;?&lt;/h3&gt;
&lt;p&gt;But I've been here before--see &lt;a href=&quot;/2020/03/07/movingtolinux2/&quot;&gt;&lt;em&gt;My life in operating systems&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Beyond wanting to understand Linux better, two other things motivated me to pull the trigger now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I'm a big fan of full-featured IDEs. &lt;a href=&quot;https://www.jetbrains.com/rider/&quot;&gt;Rider&lt;/a&gt; brings this to Linux for .NET. I couldn't work on Linux without a good IDE.&lt;/li&gt;
&lt;li&gt;I'm less happy with Windows than I used to be. (More details in later posts.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All that being said, I'm also doing this because it's a fun and interesting experience. :smile_cat:&lt;/p&gt;
&lt;h3 id=&quot;what-emexactlyem&quot;&gt;What, &lt;em&gt;exactly&lt;/em&gt;?&lt;/h3&gt;
&lt;p&gt;It's important to note that I still use Windows.
I'm gradually using Windows less, but I'll always need to use it to test Windows-specific behavior in the same way as I previously used Linux to test Linux-specific behavior.
Also, Outlook is hard to replace.&lt;/p&gt;
&lt;p&gt;I was advised Ubuntu was a good place to start, so I installed &lt;a href=&quot;https://ubuntu.com/&quot;&gt;Ubuntu 19.10&lt;/a&gt; natively onto my hardware.
I considered using &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/wsl/wsl2-index&quot;&gt;WSL2&lt;/a&gt; or running Linux in a VM.
Those are both things that I have used and will continue to use going forward.
WSL2 in particular is very good.
However, for this experiment I wanted a pure Linux experience with nothing else getting in the way.&lt;/p&gt;
&lt;h2 id=&quot;first-impressions&quot;&gt;First impressions&lt;/h2&gt;
&lt;p&gt;Getting &lt;a href=&quot;https://ubuntu.com/tutorials/tutorial-create-a-usb-stick-on-windows#1-overview&quot;&gt;Ubuntu onto a USB stick&lt;/a&gt; was trivially easy.&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-1&quot;&gt;1&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;
This is what you need to install Ubuntu, but you can also just &lt;a href=&quot;https://ubuntu.com/tutorials/try-ubuntu-before-you-install#1-getting-started&quot;&gt;boot into Ubuntu from the USB stick&lt;/a&gt; without installing anything.&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-2&quot;&gt;2&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;
I found this a great way to play with things safely before taking the plunge.&lt;/p&gt;
&lt;p&gt;Part of my playing was to try to &lt;a href=&quot;https://github.com/dotnet/efcore/blob/master/docs/getting-and-building-the-code.md&quot;&gt;build EF Core&lt;/a&gt;. I was successful in a matter of minutes.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/buildefcoreeasy.jpeg&quot;&gt;&lt;img src=&quot;/assets/buildefcoreeasy.jpeg&quot; alt=&quot;Building EF Core without installing an OS&quot; width=max /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Remember this is &lt;em&gt;without installing the operating system&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The most impressive part of this was the response I got when trying to use git.
Windows default:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;C:\Users\Arthur&amp;gt;git
'git' is not recognized as an internal or external command, operable program or batch file.
C:\Users\Arthur&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ubuntu default:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ubuntu@ubuntu:~$ git

Command 'git' not found, but can be installed with:

sudo apt install git

ubuntu@ubuntu:~$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then following those instructions worked perfectly!&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/gitinstall.png&quot;&gt;&lt;img src=&quot;/assets/gitinstall.png&quot; alt=&quot;sudo apt install git&quot; width=max /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;This may seem like a small thing, but it was very helpful to not have to leave the terminal just to find out how to install git.&lt;/p&gt;
&lt;h2 id=&quot;up-next&quot;&gt;Up next...&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/2020/03/07/movingtolinux2/&quot;&gt;Part 2&lt;/a&gt; of the series is deep background on my life in operating systems.
Skip this unless you're interested in old computer stuff.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;/2020/03/07/movingtolinux3/&quot;&gt;part 3&lt;/a&gt; I talk about my experience installing Linux.&lt;/p&gt;
&lt;h3 id=&quot;footnotes&quot;&gt;Footnotes&lt;/h3&gt;
&lt;div style=&quot;font-size: small&quot;&gt;
&lt;p&gt;&lt;a name=&quot;footnote-1&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(1)&lt;/sup&gt; What else are USB sticks even for these days?&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-2&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(2)&lt;/sup&gt; The tricky part is getting your machine to boot from USB stick if it has secure &lt;a href=&quot;https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface&quot;&gt;UEFI&lt;/a&gt; boot settings.
On both my home machines booting from the USB was easy because I wasn't doing any of this.
On my work machine it required a lot of messing with UEFI settings.&lt;/p&gt;
&lt;/div&gt;</content><author><name>ajcvickers</name></author><summary type="html">Moving to Linux</summary></entry><entry><title type="html">Moving to Linux - Part 2: My life in operating systems</title><link href="https://ajcvickers.github.io//2020/03/07/movingtolinux2/" rel="alternate" type="text/html" title="Moving to Linux - Part 2: My life in operating systems" /><published>2020-03-22T07:30:00+00:00</published><updated>2020-03-22T07:30:00+00:00</updated><id>https://ajcvickers.github.io//2020/03/07/movingtolinux2</id><content type="html" xml:base="https://ajcvickers.github.io//2020/03/07/movingtolinux2/">&lt;h1 id=&quot;moving-to-linux&quot;&gt;Moving to Linux&lt;/h1&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/logo-linux.png&quot;&gt;&lt;img src=&quot;/assets/logo-linux.png&quot; alt=&quot;Linux!&quot; width=40% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h1 id=&quot;part-2-my-life-in-operating-systems&quot;&gt;Part 2: My life in operating systems&lt;/h1&gt;
&lt;p&gt;A few weeks ago, I decided to &lt;a href=&quot;https://twitter.com/ajcvickers/status/1224736879683072003&quot;&gt;move from Windows to Linux as my primary development platform&lt;/a&gt;.
These posts are about my experience.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Part 1: &lt;a href=&quot;/2020/03/07/movingtolinux1/&quot;&gt;Background and first impressions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 2: My life in operating systems&lt;/li&gt;
&lt;li&gt;Part 3: &lt;a href=&quot;/2020/03/07/movingtolinux3/&quot;&gt;Installation and day-to-day use&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 4: &lt;a href=&quot;/2020/03/07/movingtolinux4/&quot;&gt;Conclusions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;you-may-want-to-skip-this-post&quot;&gt;You may want to skip this post&lt;/h2&gt;
&lt;p&gt;There's nothing in this post specifically about my current experience on Linux.
Instead, this is some deep background on where I am coming from.&lt;/p&gt;
&lt;p&gt;I'm mainly writing this because my personal experience with operating systems in the past will necessarily color my experiences this time.
For example, I &lt;em&gt;have&lt;/em&gt; used Linux in the past; I'm not a total newbie.&lt;/p&gt;
&lt;p&gt;Also, I like reminiscing about old computer stuff, and maybe some others will find this interesting. :smile_cat:&lt;/p&gt;
&lt;h2 id=&quot;sharp-mz-80k&quot;&gt;Sharp MZ-80K&lt;/h2&gt;
&lt;p&gt;My first computer was a &lt;a href=&quot;https://en.wikipedia.org/wiki/Sharp_MZ&quot;&gt;Sharp MZ-80K&lt;/a&gt;&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-1&quot;&gt;1&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/mz80k.jpg&quot;&gt;&lt;img src=&quot;/assets/mz80k.jpg&quot; alt=&quot;Sharp MZ-80K&quot; width=50% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;When turned on it presented a very simple loader, with a prompt.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;** MONITOR SP-100X **
* 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That's it.
There was no BASIC in ROM;
you loaded it off a cassette tape.
&lt;em&gt;Everything&lt;/em&gt; had to be loaded from tape.
You &lt;a href=&quot;https://en.wikipedia.org/wiki/ZX_Spectrum&quot;&gt;ZX-Spectrum&lt;/a&gt; owners with your fancy BASIC in ROM didn't know how good you had it!&lt;/p&gt;
&lt;p&gt;The operating system experience could only get better from here! (But believe me, I worshipped that MZ-80K because...I had a computer!)&lt;/p&gt;
&lt;h2 id=&quot;amiga&quot;&gt;Amiga&lt;/h2&gt;
&lt;p&gt;I used a few other computers after the MZ-80K, but the first with what I would consider a real, general purpose operating system was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_500&quot;&gt;Amiga A500&lt;/a&gt;, which I got my hands on in 1990.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/a500.jpg&quot;&gt;&lt;img src=&quot;/assets/a500.jpg&quot; alt=&quot;Amiga A500. Image © Bill Bertram 2006.&quot; width=50% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;The GUI shell and file manager (&lt;a href=&quot;https://en.wikipedia.org/wiki/Workbench_(AmigaOS)&quot;&gt;Workbench&lt;/a&gt;) were built on a native windowing system called &lt;a href=&quot;https://en.wikipedia.org/wiki/Intuition_(Amiga)&quot;&gt;Intuition&lt;/a&gt;.
These were both ahead of their time, especially for a home operating system.&lt;/p&gt;
&lt;p&gt;The Amiga also supported &lt;a href=&quot;https://en.wikipedia.org/wiki/Preemption_(computing)#PREEMPTIVE&quot;&gt;full, preemptive multitasking&lt;/a&gt;.
As a geek, this was very cool.
However, looking back I don't think it was actually very important.
Windows caught up partially in 95, and completely in NT.&lt;/p&gt;
&lt;h2 id=&quot;enter-windows&quot;&gt;Enter Windows&lt;/h2&gt;
&lt;p&gt;The Amiga was a hard act to follow in many ways.
Pretty much every aspect was better than early PC clones.
I used Windows &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_2.1x&quot;&gt;2.x&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_3.1x&quot;&gt;3.x&lt;/a&gt;, but found both very lacking.&lt;/p&gt;
&lt;p&gt;But Amiga as a platform didn't last.
In 1996 I finally gave up saving for an &lt;a href=&quot;https://en.wikipedia.org/wiki/Amiga_4000&quot;&gt;Amiga A4000&lt;/a&gt; and switched to a PC clone.
&lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_95&quot;&gt;Windows 95&lt;/a&gt; made this possible.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/win95.png&quot;&gt;&lt;img src=&quot;/assets/win95.png&quot; alt=&quot;Windows 95 ©Microsoft&quot; width=50% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;A lot of nasty things have been written about Windows 95.
But I found it to be a very good operating system.
Most importantly, it was easy and pleasurable to use, at least compared to the competition at the time.&lt;/p&gt;
&lt;p&gt;And yes, I include pre OS-X Mac operating systems in this.
Coming from an Amiga background, the Mac OS just never seemed that good.
Macs were also expensive.&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-2&quot;&gt;2&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;
Windows 95 copied a lot of ideas from other places, but it did what Microsoft did best--package them into a consumer product people could afford and use.&lt;/p&gt;
&lt;h2 id=&quot;windows-nt&quot;&gt;Windows NT&lt;/h2&gt;
&lt;p&gt;I recently finished reading &lt;a href=&quot;https://www.amazon.com/Show-Stopper-Breakneck-Generation-Microsoft/dp/0029356717&quot;&gt;&lt;em&gt;Show Stopper!: The Breakneck Race to Create Windows NT and the Next Generation at Microsoft&lt;/em&gt;&lt;/a&gt;.
What a great book!&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-3&quot;&gt;3&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;
NT evolved out of ideas that Dave Cutler and others brought with them from the world of DEC workstations.
By the release of &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_NT_4.0&quot;&gt;Window NT 4.0&lt;/a&gt;, it had become a very successful melding of workstation concepts to PC hardware.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/nt4.png&quot;&gt;&lt;img src=&quot;/assets/nt4.png&quot; alt=&quot;Windows NT 4.0 ©Microsoft&quot; width=50% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;This continued with &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_2000&quot;&gt;Windows 2000&lt;/a&gt; (NT 5.0), &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_XP&quot;&gt;Windows XP&lt;/a&gt; (NT 5.1), and finally&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-4&quot;&gt;4&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_7&quot;&gt;Windows 7&lt;/a&gt; (NT 6.1).
What a great line of operating systems!&lt;/p&gt;
&lt;h2 id=&quot;enter-linux&quot;&gt;Enter Linux&lt;/h2&gt;
&lt;p&gt;Even though it was first released in 1991, Linux was really starting to become popular at about the same time as Windows NT.
In 1997, I bought one of the InfoMagic CD packs containing various distros and other good stuff.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/linuxoncd.jpg&quot;&gt;&lt;img src=&quot;/assets/linuxoncd.jpg&quot; alt=&quot;InfoMagic Linux CDs&quot; width=50% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;It was fun to play with and learn, but the ease of use, the applications available, and the desktop experience was nowhere near what NT was offering.
Even as a programmer, I found it very frustrating to have resolve dependencies and compile things before I could use them.
That's just not something I want to bother with, even if it is technically superior in some situations.&lt;/p&gt;
&lt;p&gt;Also, the lack of a good IDE (such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Visual_Studio#6.0_(1998)&quot;&gt;Visual Studio 6.0&lt;/a&gt;) was really limiting.&lt;/p&gt;
&lt;p&gt;So I mostly used Linux as a server OS in the late '90s and early 2000s.
For example, I used an old &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_Personal_System/2&quot;&gt;IBM PS/2&lt;/a&gt; as a router for sharing an Internet connection with multiple PCs on home Ethernet.&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-5&quot;&gt;5&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;tektronix&quot;&gt;Tektronix&lt;/h2&gt;
&lt;p&gt;I joined &lt;a href=&quot;https://en.wikipedia.org/wiki/Tektronix&quot;&gt;Tektronix&lt;/a&gt; in 2006 to work on the design software for oscilloscopes.
Tektronix was full of hard-cord Unix guys.&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-6&quot;&gt;6&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;All my development at Tektronix was on Linux.
It was a terrible experience.
We were forced to use really old (even for then) Red Hat Enterprise Linux, and it crashed all the time.
And by crash, I mean the whole machine would just randomly restart with no warning.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/rhel4.png&quot;&gt;&lt;img src=&quot;/assets/rhel4.png&quot; alt=&quot;Red Hat Enterprise Linux 4.&quot; width=50% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Also, the lack of a good IDE was still really limiting.
(See the patten here!)
By this time &lt;a href=&quot;https://en.wikipedia.org/wiki/Eclipse_(software)&quot;&gt;Eclipse&lt;/a&gt; was available, and it was my favorite IDE for Java.
But for C++ on Linux it just wasn't great.&lt;/p&gt;
&lt;p&gt;Even the hardcore Unix guys had Windows machines for everything other than coding and circuit design.
I was not at all sad to leave Linux behind when I left Tektronix to join Microsoft.&lt;/p&gt;
&lt;h2 id=&quot;windows-10&quot;&gt;Windows 10&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_8&quot;&gt;Windows 8&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_8.1&quot;&gt;8.1&lt;/a&gt; are best left in the Vista bucket, but &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_10&quot;&gt;Windows 10&lt;/a&gt; is much better.
It is, of course, the latest incarnation of NT, so it has good heritage.
The push to improve fundamentals has made Windows faster, smaller, and more secure.
Also, features like &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_10#System_security&quot;&gt;Windows Hello&lt;/a&gt; are very nice to use.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/win10.png&quot;&gt;&lt;img src=&quot;/assets/win10.png&quot; alt=&quot;Windows 10 ©Microsoft&quot; width=50% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;I'm happy on Windows 10, but some things still feel worse than they were in NT's golden years:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Hitting the Windows Key followed by typing still sometimes misses the first few letters typed.
This is very annoying given that this is my primary way of running applications.
(This has got better, but is still a problem, especially when using a remote desktop.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Once I do start searching, Windows frequently can't find my applications and files anymore.
For example, I have one application installed where the only way I can run it is to manually find the .exe.
I've used this application (updating frequently) for years, and it's never had this issue on previous Windows releases.&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-7&quot;&gt;7&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Too often Windows 10 feels like using a mobile operating system on a desktop PC.
It works, but its clunky, not elegant.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;
&lt;p&gt;So that's a brief history of my life in operating systems.&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-8&quot;&gt;8&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;
I work for Microsoft and I've been most recently using Windows 10, but that's only a small part of where I'm coming from in this move to try Linux again.&lt;/p&gt;
&lt;h2 id=&quot;up-next&quot;&gt;Up next&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;/2020/03/07/movingtolinux3/&quot;&gt;Part 3&lt;/a&gt; covers my experience installing Ubuntu Linux on two modern PCs.&lt;/p&gt;
&lt;p&gt;Go back to &lt;a href=&quot;/2020/03/07/movingtolinux1/&quot;&gt;Part 1&lt;/a&gt; for general background and my first impressions of Ubuntu.&lt;/p&gt;
&lt;h3 id=&quot;footnotes&quot;&gt;Footnotes&lt;/h3&gt;
&lt;div style=&quot;font-size: small&quot;&gt;
&lt;p&gt;&lt;a name=&quot;footnote-1&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(1)&lt;/sup&gt; Given to me by my grandad when he upgraded to a &lt;a href=&quot;https://en.wikipedia.org/wiki/BBC_Micro&quot;&gt;BBC Model B&lt;/a&gt;.
There's a good story there I should tell sometime.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-2&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(2)&lt;/sup&gt; Some things don't change.
The reason I have never developed on a Mac is because Apple hardware is just too expensive.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-3&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(3)&lt;/sup&gt; If you can get past the terrible attempts to make technical concepts understandable to laymen.
Seriously, if you don't know what an operating system is, you're unlikely to be reading a book about Windows NT!&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-4&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(4)&lt;/sup&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_Vista&quot;&gt;Windows Vista&lt;/a&gt; is best left unmentioned.
When I started at Microsoft it was common to set up Windows Server as a desktop OS basically to avoid using Vista.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-5&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(5)&lt;/sup&gt; For those interested, it was &lt;a href=&quot;https://en.wikipedia.org/wiki/10BASE2&quot;&gt;10Base2 Ethernet&lt;/a&gt; and we shared a &lt;a href=&quot;https://en.wikipedia.org/wiki/Modem#Echo_cancellation,_9600_and_14,400&quot;&gt;14,400 bits/s modem&lt;/a&gt; using &lt;a href=&quot;https://en.wikipedia.org/wiki/Slirp&quot;&gt;SLiRP&lt;/a&gt; to my Iowa State University shell account.
Very slow, but very reliable.
We could stay connected for a full weekend.
Much to the annoyance of my family who could never get hold of me by phone!&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-6&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(6)&lt;/sup&gt; Back in the '80s, Tektronix was also a hotbed for Smalltalk and IDEs, and one of the birthplaces of agile development.
I loved hearing stories of Kent Beck and Ward Cunningham pair-programming, even though I was there too late to meet them.
I had read &lt;a href=&quot;https://www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0321278658&quot;&gt;&lt;em&gt;Extreme Programming Explained&lt;/em&gt;&lt;/a&gt; several years before, and it changed my life.
Its tag line of &amp;quot;Embrace Change&amp;quot; is just as relevant now as it was back then.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-7&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(7)&lt;/sup&gt; I realize that the application is likely doing something &amp;quot;wrong&amp;quot;.
That a common application can easily do something &amp;quot;wrong&amp;quot; and this doesn't get fixed is part of the problem.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-8&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(8)&lt;/sup&gt; I have missed out all the embedded and mobile operating systems that I've used over the years, since they aren't relevant for desktop use.&lt;/p&gt;
&lt;/div&gt;</content><author><name>ajcvickers</name></author><summary type="html">Moving to Linux</summary></entry><entry><title type="html">Moving to Linux - Part 3: Installation and day-to-day use</title><link href="https://ajcvickers.github.io//2020/03/07/movingtolinux3/" rel="alternate" type="text/html" title="Moving to Linux - Part 3: Installation and day-to-day use" /><published>2020-03-22T07:30:00+00:00</published><updated>2020-03-22T07:30:00+00:00</updated><id>https://ajcvickers.github.io//2020/03/07/movingtolinux3</id><content type="html" xml:base="https://ajcvickers.github.io//2020/03/07/movingtolinux3/">&lt;h1 id=&quot;moving-to-linux&quot;&gt;Moving to Linux&lt;/h1&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/logo-linux.png&quot;&gt;&lt;img src=&quot;/assets/logo-linux.png&quot; alt=&quot;Linux!&quot; width=40% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h1 id=&quot;part-3-installation-and-day-to-day-use&quot;&gt;Part 3: Installation and day-to-day use&lt;/h1&gt;
&lt;p&gt;A few weeks ago, I decided to &lt;a href=&quot;https://twitter.com/ajcvickers/status/1224736879683072003&quot;&gt;move from Windows to Linux as my primary development platform&lt;/a&gt;.
These posts are about my experience.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Part 1: &lt;a href=&quot;/2020/03/07/movingtolinux1/&quot;&gt;Background and first impressions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 2: &lt;a href=&quot;/2020/03/07/movingtolinux2/&quot;&gt;My life in operating systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 3: Installation and day-to-day use&lt;/li&gt;
&lt;li&gt;Part 4: &lt;a href=&quot;/2020/03/07/movingtolinux4/&quot;&gt;Conclusions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;installation&quot;&gt;Installation&lt;/h2&gt;
&lt;p&gt;Overall, installation went very smoothly.
I had only minor issues with getting my corporate machine to boot from USB, and with my NVIDIA graphics card.&lt;/p&gt;
&lt;h3 id=&quot;secure-uefi-is-a-pain&quot;&gt;Secure UEFI is a pain&lt;/h3&gt;
&lt;p&gt;I first installed Ubuntu onto my main Microsoft dev box, which previously booted to Windows 10.
It was a major pain messing with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface&quot;&gt;UEFI&lt;/a&gt; to get it to boot from the &lt;a href=&quot;https://ubuntu.com/tutorials/tutorial-create-a-usb-stick-on-windows#1-overview&quot;&gt;Ubuntu USB stick&lt;/a&gt;.
My home machines didn't have these problems, and booting from the USB stick was very easy.&lt;/p&gt;
&lt;h3 id=&quot;third-party-drivers&quot;&gt;Third-party drivers&lt;/h3&gt;
&lt;p&gt;Part of the installation process asks you if you want to install third-party drivers.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/trickquestion.png&quot;&gt;&lt;img src=&quot;/assets/trickquestion.png&quot; alt=&quot;Do you want your computer to work?&quot; width=70% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;This option is unchecked by default.
Since I didn't fully grok the implications, I went with the default.
That was a mistake.&lt;/p&gt;
&lt;p&gt;The result was a very unstable system with frequent freezes.
The reason being that I have a modern NVIDIA graphics card, and multiple hi-res monitors.
The open-source drivers simply don't work for this; the propriety drivers are required.&lt;/p&gt;
&lt;p&gt;To me, this is an example of old-school Linux thinking hampering a consumer product.
I get the open source philosophy involved here, and I understand the advantage of being 100% open source.
But in this case it's much more important to get a working, stable system by default.
When things crash, people give up very quickly.&lt;/p&gt;
&lt;p&gt;On the positive side, it was very easy to fix.
Just hit the Windows Key and type &amp;quot;drivers&amp;quot;.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/drivers.png&quot;&gt;&lt;img src=&quot;/assets/drivers.png&quot; alt=&quot;Additional Drivers&quot; width=70% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;I didn't make this mistake on my second machine.&lt;/p&gt;
&lt;h2 id=&quot;the-windows-key&quot;&gt;The Windows Key&lt;/h2&gt;
&lt;p&gt;In &lt;a href=&quot;/2020/03/07/movingtolinux2/&quot;&gt;&lt;em&gt;My life in operating systems&lt;/em&gt;&lt;/a&gt; I talked about how the Windows Key doesn't work very well for me on Windows anymore.
To recap, the main problems are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hitting the Windows Key and then immediately typing sometimes misses the first few letters typed, especially in a remote desktop.&lt;/li&gt;
&lt;li&gt;I frequently no longer find what I'm looking for even when it captures what I'm typing correctly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So it was fantastic to find that this Windows Key muscle memory works perfectly on Ubuntu!
It works like it used to on Windows--I just type and more often than not I find what I'm looking for.
For example, see above for how I used it to install additional drivers by intuitively hitting Windows and typing &amp;quot;drivers&amp;quot;.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/sittingontheshouldersofgiants.png&quot;&gt;&lt;img src=&quot;/assets/sittingontheshouldersofgiants.png&quot; alt=&quot;Penguin Key&quot; width=40% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Most of my other muscle memories for keyboard shortcuts also work on Ubuntu.
For example, I've been using Alt-Tab to switch applications without even thinking about it.
This really helps when coming from Windows.&lt;/p&gt;
&lt;h2 id=&quot;applications&quot;&gt;Applications&lt;/h2&gt;
&lt;p&gt;In the &lt;a href=&quot;/2020/03/07/movingtolinux2/&quot;&gt;old days&lt;/a&gt;, finding and installing applications on Linux was a major pain.
I certainly don't want to be compiling myself and resolving dependencies just to install everyday apps.
Thankfully, things are much better now.
Ubuntu makes installing apps easy, as well as keeping them up-to-date.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/ubuntuapps.png&quot;&gt;&lt;img src=&quot;/assets/ubuntuapps.png&quot; alt=&quot;Ubuntu Applications&quot; width=70% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;These are the applications I've been using day-to-day:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.google.com/chrome/&quot;&gt;Chrome&lt;/a&gt;&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-1&quot;&gt;1&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.dropbox.com/&quot;&gt;Dropbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Files&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-2&quot;&gt;2&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;GNOME Screenshot&lt;/li&gt;
&lt;li&gt;GNOME System monitor (to watch my cores working&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-3&quot;&gt;3&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;)&lt;/li&gt;
&lt;li&gt;GNOME Terminal&lt;/li&gt;
&lt;li&gt;GNU Image Manipulation Program (&lt;a href=&quot;https://www.gimp.org/&quot;&gt;GIMP&lt;/a&gt;; for all images in these posts)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://remmina.org/&quot;&gt;Remmina&lt;/a&gt; (for remote desktop to Windows)&lt;/li&gt;
&lt;li&gt;JetBrains &lt;a href=&quot;https://www.jetbrains.com/rider/&quot;&gt;Rider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SimpleScreenRecorder (for capturing screenshot videos&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-3&quot;&gt;3&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.spotify.com/us/download/linux/&quot;&gt;Spotify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microsoft &lt;a href=&quot;https://teams.microsoft.com/downloads&quot;&gt;Teams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;Visual Studio Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I wasn't expecting to find Dopbox or Spotify&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-4&quot;&gt;4&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;, so this was a very nice surprise.
Also, the built-in screen capture works great, and GIMP is now much more complete and easy to use than it used to be.&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-5&quot;&gt;5&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I have also used &lt;a href=&quot;https://www.libreoffice.org/&quot;&gt;LibraOffice&lt;/a&gt; for the few times I need this kind of office application.
It was fine.&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-6&quot;&gt;6&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3 id=&quot;jekyll&quot;&gt;Jekyll&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt; is where things started to go a bit old-school for me.
I ended up compiling the tools I needed locally.
And managing version conflicts.
As I mentioned above, I don't want to do this.&lt;/p&gt;
&lt;p&gt;Now I realize that I likely didn't find the correct instructions, or misunderstood something, and that Jekyll installation could have been much smoother.
Nevertheless, for me, it was a pain.&lt;/p&gt;
&lt;h2 id=&quot;high-dpi-and-multiple-monitors&quot;&gt;High DPI and multiple monitors&lt;/h2&gt;
&lt;p&gt;I use multiple monitors with different resolutions and orientations at both home and work.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/toomany.jpg&quot;&gt;&lt;img src=&quot;/assets/toomany.jpg&quot; alt=&quot;Enough monitors?&quot; width=70% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Windows has put a lot of effort into support for this and it now works very well.
At least by default, Ubuntu with GNOME is not nearly as good.
For example, Ubuntu tends to open new applications with strange sizes and locations.&lt;/p&gt;
&lt;p&gt;That being said, a little bit of monitor reorganization got me to a place where I was happy.
I'm also hoping there is better support available in Linux if I go outside the Ubuntu defaults.&lt;/p&gt;
&lt;h2 id=&quot;net-development&quot;&gt;.NET development&lt;/h2&gt;
&lt;h3 id=&quot;net-core-sdk&quot;&gt;.NET Core SDK&lt;/h3&gt;
&lt;p&gt;As covered in &lt;a href=&quot;/2020/03/07/movingtolinux1/&quot;&gt;part 1&lt;/a&gt;, I do most of my day-to-day development using C# in .NET Core.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://dotnet.microsoft.com/download&quot;&gt;.NET Core SDK&lt;/a&gt; was trivial to install on Ubuntu.
Nothing else really needs to be said; I installed it; it worked.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/dotnetlinux.png&quot;&gt;&lt;img src=&quot;/assets/dotnetlinux.png&quot; alt=&quot;.NET Core on Linux&quot; width=85% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Likewise, installing &lt;a href=&quot;https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup?view=sql-server-ver15&quot;&gt;SQL Server Developer Edition for Linux&lt;/a&gt; was also very easy.
In fact, it was much easier than that last time I tried to go through the torturous installation process on Windows.
There is no LocalDb on Linux, but I don't miss it at all.
Developer Edition works better for what I do.&lt;/p&gt;
&lt;h3 id=&quot;rider&quot;&gt;Rider&lt;/h3&gt;
&lt;p&gt;As I have mentioned several times in these posts, I am a big fan of IDEs and spend most of my development time using one.
On Windows, Visual Studio is the &lt;em&gt;de facto&lt;/em&gt; standard for C# development, but Visual Studio is not available for Linux.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;Visual Studio Code&lt;/a&gt; has great support for C# and runs very well on Linux.
It's also great as a general text editor, especially for markdown.
But it's not a fully-featured IDE in the vein of Visual Studio.&lt;/p&gt;
&lt;p&gt;Luckily, JetBrains &lt;a href=&quot;https://www.jetbrains.com/rider/&quot;&gt;Rider&lt;/a&gt; is such an IDE for C#, and it runs extremely well on Linux.
This isn't a post about Rider, so I won't go into details, but I have been exceptionally happy with it.
I love programming, and Rider is a joy to use that makes my coding time both fun and productive.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/rider.png&quot;&gt;&lt;img src=&quot;/assets/rider.png&quot; alt=&quot;Rider on Linux&quot; width=85% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;I used the &lt;a href=&quot;https://www.jetbrains.com/toolbox-app/&quot;&gt;JetBrains Toolbox&lt;/a&gt; to install Rider and it has been happily keeping it up-to-date for me.&lt;/p&gt;
&lt;h3 id=&quot;git&quot;&gt;Git&lt;/h3&gt;
&lt;p&gt;Git runs just fine on Linux, as is to be expected given its &lt;a href=&quot;https://en.wikipedia.org/wiki/Git&quot;&gt;origins&lt;/a&gt;.
I'm fairly good at git on the command line, but I would also sometimes use &lt;a href=&quot;https://tortoisegit.org/&quot;&gt;TortoiseGit&lt;/a&gt; on Windows.
Lately, even on Windows, the built-in git support in Rider and VS Code has meant using TortoiseGit less.
I rarely feel the need to leave Rider to do anything with git these days.&lt;/p&gt;
&lt;p&gt;I've also been happy with &lt;a href=&quot;https://www.gitkraken.com/&quot;&gt;GitKraken&lt;/a&gt; for the times where I needed a bit more power.&lt;/p&gt;
&lt;h2 id=&quot;outlook&quot;&gt;Outlook&lt;/h2&gt;
&lt;p&gt;Microsoft Outlook is kind of the elephant in the room.
As of now, I am still using remote desktop to my Windows machines when I want to use Outlook--which is every day at work.
I am planning to try the web application, which I have been assured is much better than it was years ago.&lt;/p&gt;
&lt;p&gt;I'm very reluctant to use a third-party Outlook client.
Again, this may now work well, but I've been burned in the past.
Outlook is so vital to my day-to-day work at Microsoft that I'm very wary of anything messing this up!&lt;/p&gt;
&lt;p&gt;If you're lucky enough to have both Windows and Linux machines under your desk, then &lt;a href=&quot;https://remmina.org/&quot;&gt;Remmina&lt;/a&gt; makes remote access to Windows really nice and easy.
Just make sure to enable font smoothing in the Remmina options.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/outlookremote.png&quot;&gt;&lt;img src=&quot;/assets/outlookremote.png&quot; alt=&quot;Outlook running in a remote desktop&quot; width=85% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Running Windows in a virtual machine would be another option for Outlook if you don't have a spare Windows machine.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Basically, my experience as a C# programmer on Ubuntu has been very good.
The &lt;a href=&quot;/2020/03/07/movingtolinux4/&quot;&gt;final post in this series&lt;/a&gt; summarizes my findings in more detail.&lt;/p&gt;
&lt;h3 id=&quot;footnotes&quot;&gt;Footnotes&lt;/h3&gt;
&lt;div style=&quot;font-size: small&quot;&gt;
&lt;p&gt;&lt;a name=&quot;footnote-1&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(1)&lt;/sup&gt; I'm not a Firefox fan. :man_shrugging:
Edge for Linux? Yes please!&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-2&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(2)&lt;/sup&gt; I also installed &lt;a href=&quot;https://midnight-commander.org/&quot;&gt;Midnight Commander&lt;/a&gt; for old times sake.
It looks exactly the same as it always did!
Some thing change.
Some things stay the same.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-3&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(3)&lt;/sup&gt; For example, see &lt;a href=&quot;https://twitter.com/ajcvickers/status/1227496521744166912&quot;&gt;all my cores being used&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-4&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(4)&lt;/sup&gt; Me: This is Spotify running on Linux on my new computer with an optical digital connection to the receiver and output to my subwoofer and Klipsch speakers!
Wife: That’s impressive, sweetie. But you know what would have been more impressive? If you had put these dishes up!&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-5&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(5)&lt;/sup&gt; Ten years ago I was a Photoshop user on Windows.
At some point it became too expensive to be worth it anymore.
Its really nice that GIMP has got to the point where I don't miss Photoshop.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-6&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(6)&lt;/sup&gt; I'm not a Microsoft Office power user.
I use PowerPoint, Word, and Excel occasionally, but I doubt I have used any of the new features added in the last 10 to 15 years.
Outlook is a different matter.&lt;/p&gt;
&lt;/div&gt;</content><author><name>ajcvickers</name></author><summary type="html">Moving to Linux</summary></entry><entry><title type="html">Moving to Linux - Part 4: Conclusions</title><link href="https://ajcvickers.github.io//2020/03/07/movingtolinux4/" rel="alternate" type="text/html" title="Moving to Linux - Part 4: Conclusions" /><published>2020-03-22T07:30:00+00:00</published><updated>2020-03-22T07:30:00+00:00</updated><id>https://ajcvickers.github.io//2020/03/07/movingtolinux4</id><content type="html" xml:base="https://ajcvickers.github.io//2020/03/07/movingtolinux4/">&lt;h1 id=&quot;moving-to-linux&quot;&gt;Moving to Linux&lt;/h1&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/logo-linux.png&quot;&gt;&lt;img src=&quot;/assets/logo-linux.png&quot; alt=&quot;Linux!&quot; width=40% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h1 id=&quot;part-4-conclusions&quot;&gt;Part 4: Conclusions&lt;/h1&gt;
&lt;p&gt;A few weeks ago, I decided to &lt;a href=&quot;https://twitter.com/ajcvickers/status/1224736879683072003&quot;&gt;move from Windows to Linux as my primary development platform&lt;/a&gt;.
These posts are about my experience.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Part 1: &lt;a href=&quot;/2020/03/07/movingtolinux1/&quot;&gt;Background and first impressions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 2: &lt;a href=&quot;/2020/03/07/movingtolinux2/&quot;&gt;My life in operating systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 3: &lt;a href=&quot;/2020/03/07/movingtolinux3/&quot;&gt;Installation and day-to-day use&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 4: Conclusions&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;my-experience&quot;&gt;My experience&lt;/h2&gt;
&lt;p&gt;My experience moving my development from Windows to Linux has been almost entirely positive.
Not once did I wonder if this was a good idea.&lt;/p&gt;
&lt;h3 id=&quot;comparison-of-windows-and-linux&quot;&gt;Comparison of Windows and Linux&lt;/h3&gt;
&lt;p&gt;Linux (and Ubuntu specifically) is now much more friendly than it used to be.
Applications (other than Outlook) are available and easy to install and update.
Also, applications like GIMP being freely available and easy to install often makes the application experience on Linux better than Windows.&lt;/p&gt;
&lt;p&gt;Both Windows 10 and Ubuntu Linux are stable, professional, secure, and productive desktop operating systems.
Windows still does better at high-DPI and multiple monitors, and Windows Hello is very nice.
But it's U.I. and interaction model has become a bit too clunky for my tastes.
Too often Windows 10 feels like using a mobile operating system on a desktop PC.&lt;/p&gt;
&lt;p&gt;For example, here are the user interfaces for setting application defaults on Windows:.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/windowsappdefaults.png&quot;&gt;&lt;img src=&quot;/assets/windowsappdefaults.png&quot; alt=&quot;Set app defaults on Windows 10&quot; width=40% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;And Ubuntu:&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/ubuntuappdefaults.png&quot;&gt;&lt;img src=&quot;/assets/ubuntuappdefaults.png&quot; alt=&quot;Set app defaults on Ubuntu&quot; width=40% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;To me, the Ubuntu U.I. is much more suited to a desktop computer used with a mouse and keyboard.
The Windows U.I. would be okay for a tablet or phone, but it's just clunky for a desktop computer.&lt;/p&gt;
&lt;p&gt;Fundamentally, for me, Ubuntu feels like a real desktop computer operating system.
It doesn't abstract too far from the metal, which is generally what I want as a programmer, while still making it easy to install and maintain my apps and environment.&lt;/p&gt;
&lt;h3 id=&quot;should-you-move-too&quot;&gt;Should you move too?&lt;/h3&gt;
&lt;p&gt;I am using Linux for day-to-day programming, but that &lt;strong&gt;doesn't necessarily mean you should&lt;/strong&gt;.
Windows, Mac, and Linux are &lt;strong&gt;all&lt;/strong&gt; now very good development platforms for .NET/C# programmers.&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/windows_yes.png&quot;&gt;&lt;img src=&quot;/assets/windows_yes.png&quot; alt=&quot;Windows is a great OS&quot; width=40% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/mac_yes.png&quot;&gt;&lt;img src=&quot;/assets/mac_yes.png&quot; alt=&quot;Mac OS is probably a great OS&quot; width=30% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;/assets/ubuntu_yes.png&quot;&gt;&lt;img src=&quot;/assets/ubuntu_yes.png&quot; alt=&quot;Ubuntu is a great OS&quot; width=40% /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;I think it's fantastic that we now have three viable development platforms for programming in general, and for .NET specifically.
Hopefully, the competition between them will drive further improvements across all three. It's an exciting time to be a .NET developer!&lt;/p&gt;
&lt;p&gt;So, use whatever you are happy with. And be thankful &lt;a href=&quot;/2020/03/07/movingtolinux2/&quot;&gt;things have come as far as they have&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Happy coding!&lt;/p&gt;</content><author><name>ajcvickers</name></author><summary type="html">Moving to Linux</summary></entry><entry><title type="html">Welcome to One Unicorn 2.0!</title><link href="https://ajcvickers.github.io//2020/02/29/1unicorn2/" rel="alternate" type="text/html" title="Welcome to One Unicorn 2.0!" /><published>2020-02-29T13:23:00+00:00</published><updated>2020-02-29T13:23:00+00:00</updated><id>https://ajcvickers.github.io//2020/02/29/1unicorn2</id><content type="html" xml:base="https://ajcvickers.github.io//2020/02/29/1unicorn2/">&lt;h1 id=&quot;welcome-to-one-unicorn-20&quot;&gt;Welcome to One Unicorn 2.0!&lt;/h1&gt;
&lt;p&gt;I created my first blog back in 2011.
I called it &lt;a href=&quot;/2011/03/20/why-one-unicorn/&quot;&gt;&lt;em&gt;One Unicorn&lt;/em&gt;&lt;/a&gt;.
It seemed like a good idea at the time... :man_shrugging:&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;time-to-move&quot;&gt;Time to move...&lt;/h2&gt;
&lt;p&gt;Back then people suggested WordPress for it's ease of use.
It has worked out okay, but, honestly, I was never particularly happy with it.&lt;/p&gt;
&lt;p&gt;Then in early 2020 two things happened:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;I started to blog again and I realized that I was quite unhappy with the WordPress experience.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I moved to Linux as a primary development platform.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So I decided to convert my blog to &lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt; in &lt;a href=&quot;https://pages.github.com/&quot;&gt;GitHub Pages&lt;/a&gt;, and to use Linux as my platform for doing this.&lt;/p&gt;
&lt;p&gt;I still plan to blog more about my experiences with Linux, but for the purpose of this post it has been relatively smooth.
It wasn't super-easy to get Jekyll running locally, but once I did I found it to be very productive.
I've been using &lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;Visual Studio Code&lt;/a&gt; for markdown editing and Git tooling.
The Visual Studio Code experience for this on Linux is pretty much the same as on Windows and has been very nice.&lt;/p&gt;
&lt;p&gt;(Please don't look at my markdown/css/etc.
I totally hacked this together and it's horrendous!
I'm so not a front-end developer!)&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;content-and-contact&quot;&gt;Content and contact&lt;/h2&gt;
&lt;p&gt;Most the posts from the original blog have been moved over.
(I excluded a couple for personal reasons. Let me know if you can't find something.)&lt;/p&gt;
&lt;p&gt;I've updated links, especially to old MSDN blogs that have been moved.
Also, the text and code examples are much easier to read.&lt;/p&gt;
&lt;p&gt;No comments yet.
I spend a lot of my time helping people on GitHub and other places; I'm not sure I want to manage another channel here.
For now, contact me on &lt;a href=&quot;https://twitter.com/ajcvickers&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://github.com/ajcvickers&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;what-about-the-name&quot;&gt;What about the name?&lt;/h2&gt;
&lt;p&gt;I'm a pretty stereotypical computer geek in a lot of ways.
I like interesting little wordplays, obscure references, and puns.
So when I realized that this was turning into a version 2.0 of One Unicorn, it wasn't long before my mind went:&lt;/p&gt;
&lt;div style=&quot;text-align: center&quot;&gt;
&lt;h3 id=&quot;one-unicorn-20&quot;&gt;One Unicorn 2.0&lt;/h3&gt;
&lt;h3 id=&quot;section&quot;&gt;⇓&lt;/h3&gt;
&lt;h3 id=&quot;unicorn-2&quot;&gt;1 Unicorn 2&lt;/h3&gt;
&lt;h3 id=&quot;section-1&quot;&gt;⇓&lt;/h3&gt;
&lt;h3 id=&quot;unicorn2&quot;&gt;1unicorn2&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Then I noticed how many of the letters in &amp;quot;unicorn&amp;quot; can be used to make other little wordplays:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;quot;UNIxy&amp;quot; since Linux is Unix-like operating system&lt;/li&gt;
&lt;li&gt;&amp;quot;CORe&amp;quot; for .NET Core and EF Core&lt;/li&gt;
&lt;li&gt;&amp;quot;C#&amp;quot; for Visual Basic :wink:&lt;/li&gt;
&lt;li&gt;&amp;quot;Net&amp;quot; for .NET&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have a feeling that in about 10 years I'll be saying, &amp;quot;It seemed like a good idea at the time... :man_shrugging:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Anyway, hope you enjoy the new look-and-feel, and that the content is still (??) interesting.&lt;/p&gt;
&lt;p&gt;Thanks,&lt;br&gt;
Arthur&lt;/p&gt;</content><author><name>ajcvickers</name></author><summary type="html">Welcome to One Unicorn 2.0!</summary></entry><entry><title type="html">Use your noggin!</title><link href="https://ajcvickers.github.io//noggin/" rel="alternate" type="text/html" title="Use your noggin!" /><published>2020-02-29T13:10:00+00:00</published><updated>2020-02-29T13:10:00+00:00</updated><id>https://ajcvickers.github.io//noggin</id><content type="html" xml:base="https://ajcvickers.github.io//noggin/">&lt;img class=&quot;just-me&quot; src=&quot;/assets/noggin.jpg&quot; alt=&quot;Use your noggin!&quot;&gt;
&lt;h2 style=&quot;text-align:center&quot;&gt;You just read something on the Internet!&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-1&quot;&gt;1&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt;&lt;/h2&gt;
&lt;h2 style=&quot;text-align:center&quot;&gt;But can you trust it?&lt;/h2&gt;
&lt;p&gt;So ask yourself...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Who wrote it?&lt;/li&gt;
&lt;li&gt;Where are you reading it?&lt;/li&gt;
&lt;li&gt;When was it written?&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;author&quot;&gt;Author&lt;/h2&gt;
&lt;p&gt;What do you know about the author?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do they know what they are talking about?&lt;/li&gt;
&lt;li&gt;What are their biases?&lt;/li&gt;
&lt;li&gt;What are they hoping to get out of this?&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;Website&lt;/h2&gt;
&lt;p&gt;It might be hard to learn about individual authors, so in addition look at the website serving the content.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What motivates the website to serve this content?&lt;/li&gt;
&lt;li&gt;Does a company/organization/agency hold a stake that could bias this content?&lt;/li&gt;
&lt;li&gt;Does the website generally provide reliable information?&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;date&quot;&gt;Date&lt;/h2&gt;
&lt;p&gt;The content might have been complete, accurate, and unbiased&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-2&quot;&gt;2&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt; when it was written.
But if this was a long time&lt;sup&gt;&lt;span style=&quot;font-size: x-small&quot;&gt;(&lt;a href=&quot;#footnote-3&quot;&gt;3&lt;/a&gt;)&lt;/span&gt;&lt;/sup&gt; ago, then:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;By this time. none of it may be relevant.&lt;/li&gt;
&lt;li&gt;Despite being old, all of it may still be relevant.&lt;/li&gt;
&lt;li&gt;Most likely some of it is still relevant and some is not.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;so-what-can-you-do&quot;&gt;So what can you do?&lt;/h2&gt;
&lt;p&gt;Use your noggin!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Research the author and the website.&lt;/li&gt;
&lt;li&gt;Validate content from multiple reliable sources.&lt;/li&gt;
&lt;li&gt;Make sure the information is still relevant today.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 style=&quot;text-align:center&quot;&gt;Use your noggin!&lt;/h2&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;footnotes&quot;&gt;Footnotes&lt;/h3&gt;
&lt;div style=&quot;font-size: small&quot;&gt;
&lt;p&gt;&lt;a name=&quot;footnote-1&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(1)&lt;/sup&gt; Not just the Internet.
If you read enough technical books about stuff you know, then it becomes readily apparent that just because something is published in a book doesn't mean it's true.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-2&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(2)&lt;/sup&gt; Unbiased? &lt;a href=&quot;https://en.wikipedia.org/wiki/Implicit_stereotype&quot;&gt;No&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-3&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(3)&lt;/sup&gt; What is a long time?
Depends on the content.
In software, five years is definitely a long time.&lt;/p&gt;
&lt;/div&gt;</content><author><name>ajcvickers</name></author><summary type="html"></summary></entry><entry><title type="html">Today was a good day at work</title><link href="https://ajcvickers.github.io//2020/02/05/today-was-a-good-day-at-work/" rel="alternate" type="text/html" title="Today was a good day at work" /><published>2020-02-05T22:36:00+00:00</published><updated>2020-02-05T22:36:00+00:00</updated><id>https://ajcvickers.github.io//2020/02/05/today-was-a-good-day-at-work</id><content type="html" xml:base="https://ajcvickers.github.io//2020/02/05/today-was-a-good-day-at-work/">&lt;h1 id=&quot;today-was-a-good-day-at-work&quot;&gt;Today was a good day at work&lt;/h1&gt;
&lt;p&gt;No, this post isn't about installing Linux.&lt;/p&gt;
&lt;p&gt;And I didn't write any code today.&lt;/p&gt;
&lt;p&gt;I was working with people all day.
This isn't easy for me, but more and more it feels both rewarding and worthwhile.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;me&quot;&gt;Me&lt;/h3&gt;
&lt;p&gt;I'm a geek, a dork, a clumsy introvert.
Meeting new people is hard for me.&lt;/p&gt;
&lt;p&gt;But I strongly believe that effective collaboration results in better software.
And happier people.&lt;sup&gt;(&lt;a href=&quot;#footnote-1&quot;&gt;1&lt;/a&gt;)&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;One of my most important jobs as a manager is to facilitate and encourage effective collaboration.
Today I think I achieved that, which made it a good day.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;my-day&quot;&gt;My day&lt;/h3&gt;
&lt;p&gt;The EF team meets for a couple of hours every Wednesday morning for a &amp;quot;Design Meeting&amp;quot;.
It went well--good humored, productive, and with digressions about other stuff going on around us.
(I tell people about what I hear in &amp;quot;manager meetings&amp;quot; as much as I can. As a non-manager, being kept in the dark was very frustrating.)&lt;/p&gt;
&lt;p&gt;Half way through the design meeting a prospective new team member was able to drop in.
I felt awkward getting people to introduce themselves.
But I tried hard to keep it upbeat, lighthearted, and enthusiastic.
It went well.
I was a socially awkward dork, but a happy, enthusiastic, and hopefully engaging one.&lt;/p&gt;
&lt;p&gt;Several meetings later I was in a similar situation again; meeting new people.&lt;sup&gt;(&lt;a href=&quot;#footnote-2&quot;&gt;2&lt;/a&gt;)&lt;/sup&gt;
This time it was the first in a new sync I setup with the SqlClient team.
Again, I felt I was quite clumsy in kicking off the meeting and doing introductions.
I talked quite a bit at the beginning trying to get things going.
But by the end people seemed at their ease and were engaging in interactive discussions.&lt;/p&gt;
&lt;p&gt;I also remembered to thank the SqlClient team for the good job they are doing managing their GitHub repo.
(It's not that I had to remember to be thankful.
But remembering to &lt;em&gt;tell people&lt;/em&gt; you are thankful when appropriate is important.)
It went well.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;im-medicated&quot;&gt;I'm medicated&lt;/h3&gt;
&lt;p&gt;I've been taking antianxiety medication for three years now.
It took me until my 40s to realize that I didn't have to live with the level of social anxiety I was accustomed to.&lt;/p&gt;
&lt;p&gt;I'm not saying medication is the right path for everyone.
But I don't think I could be a manager without it.
Days like today would have been too stressful for me to cope.&lt;/p&gt;
&lt;p&gt;Instead I was able to bring people together.
And that made it a good day.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;footnotes&quot;&gt;Footnotes&lt;/h3&gt;
&lt;p&gt;&lt;a name=&quot;footnote-1&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(1)&lt;/sup&gt; I have many thoughts on teamwork. And happy people. I'll probably post more about it at a later date.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote-2&quot;&gt;&lt;/a&gt;
&lt;sup&gt;(2)&lt;/sup&gt; If you're interested in the complexities of meeting new people, then I highly recommend &lt;em&gt;Talking to Strangers&lt;/em&gt; by Malcolm Gladwell. Get the &lt;a href=&quot;https://www.audible.com/pd/Talking-to-Strangers-Audiobook/1549150340&quot;&gt;audiobook&lt;/a&gt;.&lt;/p&gt;</content><author><name>ajcvickers</name></author><summary type="html">Today was a good day at work</summary></entry><entry><title type="html">EF Core adoption is very healthy</title><link href="https://ajcvickers.github.io//2020/01/29/coreadoption/" rel="alternate" type="text/html" title="EF Core adoption is very healthy" /><published>2020-01-29T15:32:00+00:00</published><updated>2020-01-29T15:32:00+00:00</updated><id>https://ajcvickers.github.io//2020/01/29/coreadoption</id><content type="html" xml:base="https://ajcvickers.github.io//2020/01/29/coreadoption/">&lt;h1 id=&quot;ef-core-adoption-is-very-healthy&quot;&gt;EF Core adoption is very healthy&lt;/h1&gt;
&lt;p&gt;I commonly see feedback from people assuming that EF Core is not heavily used. This isn't true. The internal usage numbers are &lt;em&gt;very&lt;/em&gt; healthy. The number of people moving from previous EF Core releases to 3.1 is also very healthy. I'm not going to post these numbers on my personal blog because, basically, I don't want to get fired! However, the trends are also visible in public data--notably, NuGet package downloads.&lt;/p&gt;
&lt;p&gt;At the time of writing, &lt;a href=&quot;https://nugettrends.com/packages?months=24&amp;ids=Microsoft.EntityFrameworkCore&amp;ids=EntityFramework&amp;ids=Dapper&amp;ids=NHibernate&quot;&gt;NuGet Trends&lt;/a&gt; is returning the following data:&lt;/p&gt;
&lt;div class=big-image&gt;
&lt;a href=&quot;https://nugettrends.com/packages?months=24&amp;ids=Microsoft.EntityFrameworkCore&amp;ids=EntityFramework&amp;ids=Dapper&amp;ids=NHibernate&quot;&gt;&lt;img src=&quot;/assets/trends.png&quot; alt=&quot;NuGet Trends&quot; width=max /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Now, NuGet package downloads are notoriously hard to interpret. However, I think the trend here is pretty clear.&lt;/p&gt;
&lt;p&gt;I should point out that I don't intend from showing this that people drop one technology and use another. As I said in my &lt;a href=&quot;/2020/01/29/coreor6/&quot;&gt;previous post&lt;/a&gt;, please use what works best for you.&lt;/p&gt;
&lt;p&gt;I think it's also true that Microsoft packages have an advantage. Fully embracing the .NET ecosystem is something I push for internally. It's much better now than it was 10 years ago, but there is still room for improvement.&lt;/p&gt;
&lt;p&gt;Anyway, as I said, I really just want to point out that EF Core adoption is very healthy and growing very fast.&lt;/p&gt;</content><author><name>ajcvickers</name></author><summary type="html">EF Core adoption is very healthy</summary></entry></feed>