Get Solarized – Awesome command prompt colors for VS, VS Code, cmd, PowerShell, and more

imageI was on a call with my co-worker Maria today and she commented on how nice my command prompt in Windows looked. I told it was “Solarized” and then our conference call fell apart as we collected all kinds of fun info about how you can get Solarized in your favorite apps on Windows.

Solarized is a sixteen color palette (eight monotones, eight accent colors) designed for use with terminal and gui applications. It’s by Ethan Schoonover and it’s spread all over the web. You can see screenshots and learn about it on GitHub.

Solarized for your Windows Command Prompt (cmd, powershell, bash)

By default when you right click and hit properties on a shortcut for a prompt like cmd, powershell, or bash, you’ll get a dialog that looks like this.

Default Colors in CMD

You’ll see there’s 16 colors, usually 8 colors on the left, and then the “light/intense/bold” version of each color on the right. I usually used Intense Terminal Green on black before Solarized.

Those values (the defaults) are stored in the registry here HKEY_CURRENT_USER\Console

Where default colors are stored in the Registry

Those defaults are used for NEW shortcuts or consoles that start afresh, via Windows+R. This won’t change existing shortcuts you may already have created. There’s a few ways to fix this.

I’ve found the easiest manual way is to recreate the shortcuts. You can do this by just copy-pasting a shortcut and using the new one.

However, there is talk of programmatically updating .lnk (Start Menu link files) with PowerShell.

You’d just go to the location of each LNK file you want to change, then run Update-Link.ps1 YOURLINK.LNK “light|dark” and it’ll load up the .lnk file using Windows APIs and save it with a new Color Table.

I’ve started that work here and I’ll PR the main repo if I can solve one issue – I can’t get it to switch to Solarized Light, just Dark. It might be something wrong on my side. Please take a look if you’re a Win32/PowerShell internals type.

Here I went to where the Start Menu stores most of the LNK files. You can also search for an item in your start and right-click “Open File Location.”pow

Programatically Update your LNKs with PowerShell

Here’s before and after with my Developer Command Prompt for Visual Studio 2015.

Solarized!

NOTE: Once this is done, in cmd.exe you can also switch between light and dark with “color f6” or “color 01” which is nice for presentations. I’m not sure how to do this yet in PowerShell or Bash.

Here is the palette after:

Solarized Palette

For PowerShell there is also an extra-step you’ll want to put into your Microsoft.PowerShell_profile.ps1 where you map things like Errors, Progress Bars, and Warnings internally in PowerShell. Be sure to read the instructions.

Solarized in Visual Studio and Visual Studio Code

As for Visual Studio and Visual Studio Code, they’re far easier. You can just Ctrl-K then Ctrl-T in VSCode and pick Solarized.

Solarized in VS Code

For Visual Studio (all versions) you can head over to @leddt’s GitHub and download settings files for Solarized that you can then import info VS from Tools | Import and Export Settings.


Sponsor: Big thanks to Raygun! Don’t rely on your users to report the problems they experience. Automatically detect, diagnose and understand the root cause of errors, crashes and performance issues in your web and mobile apps. Learn more.


© 2017 Scott Hanselman. All rights reserved.
     

imageI was on a call with my co-worker Maria today and she commented on how nice my command prompt in Windows looked. I told it was "Solarized" and then our conference call fell apart as we collected all kinds of fun info about how you can get Solarized in your favorite apps on Windows.

Solarized is a sixteen color palette (eight monotones, eight accent colors) designed for use with terminal and gui applications. It's by Ethan Schoonover and it's spread all over the web. You can see screenshots and learn about it on GitHub.

Solarized for your Windows Command Prompt (cmd, powershell, bash)

By default when you right click and hit properties on a shortcut for a prompt like cmd, powershell, or bash, you'll get a dialog that looks like this.

Default Colors in CMD

You'll see there's 16 colors, usually 8 colors on the left, and then the "light/intense/bold" version of each color on the right. I usually used Intense Terminal Green on black before Solarized.

Those values (the defaults) are stored in the registry here HKEY_CURRENT_USER\Console

Where default colors are stored in the Registry

Those defaults are used for NEW shortcuts or consoles that start afresh, via Windows+R. This won't change existing shortcuts you may already have created. There's a few ways to fix this.

I've found the easiest manual way is to recreate the shortcuts. You can do this by just copy-pasting a shortcut and using the new one.

However, there is talk of programmatically updating .lnk (Start Menu link files) with PowerShell.

You'd just go to the location of each LNK file you want to change, then run Update-Link.ps1 YOURLINK.LNK "light|dark" and it'll load up the .lnk file using Windows APIs and save it with a new Color Table.

I've started that work here and I'll PR the main repo if I can solve one issue - I can't get it to switch to Solarized Light, just Dark. It might be something wrong on my side. Please take a look if you're a Win32/PowerShell internals type.

Here I went to where the Start Menu stores most of the LNK files. You can also search for an item in your start and right-click "Open File Location."pow

Programatically Update your LNKs with PowerShell

Here's before and after with my Developer Command Prompt for Visual Studio 2015.

Solarized!

NOTE: Once this is done, in cmd.exe you can also switch between light and dark with "color f6" or "color 01" which is nice for presentations. I'm not sure how to do this yet in PowerShell or Bash.

Here is the palette after:

Solarized Palette

For PowerShell there is also an extra-step you'll want to put into your Microsoft.PowerShell_profile.ps1 where you map things like Errors, Progress Bars, and Warnings internally in PowerShell. Be sure to read the instructions.

Solarized in Visual Studio and Visual Studio Code

As for Visual Studio and Visual Studio Code, they're far easier. You can just Ctrl-K then Ctrl-T in VSCode and pick Solarized.

Solarized in VS Code

For Visual Studio (all versions) you can head over to @leddt's GitHub and download settings files for Solarized that you can then import info VS from Tools | Import and Export Settings.


Sponsor: Big thanks to Raygun! Don't rely on your users to report the problems they experience. Automatically detect, diagnose and understand the root cause of errors, crashes and performance issues in your web and mobile apps. Learn more.


© 2017 Scott Hanselman. All rights reserved.
     

Suggestions and Tips for attending your first tech conference

WoC Tech Chat used under CC

This last week Joseph Phillips tweeted that he was going to his first big tech conference and wanted some tips and suggestions. I have a TON of tips, but I know YOU have more, so I retweeted his request and prompted folks to reply. This was well timed as I had just gotten back from OSCON and BUILD, two great conferences.

What suggestions to you offer to someone who is attending their first big tech conference? @2joephillips https://t.co/2HtRs4N6cj

— Scott Hanselman (@shanselman) May 15, 2017

The resulting thread was fantastic, so I’ve pulled some of the best recommendations out. As per usual, the Community has some great ideas and you should check them out!

  • @saraford – Whenever you get a biz card write down why you met them or what convo was about. It might seem obvious at time but you wont remember at home
  • @arcdigg – Meet people and speakers. Tech is part of your success, but growing your network matters too. Conf can give you both or not. Up to you!
  • @marypcbuk – if approaching people is hard for you, just ask ‘what do you work on?’
  • @ohhoe – don’t be afraid to introduce yrself to people! let them know its yr first conference, often people will introduce you to other people too 🙂
  • @IrishSQL – connect with a few attendees/speakers online prior to event, and bring plenty of business cards. When u get one, write details on back
  • @arcdigg – Backpack and sneakers beat cute laptop bag and heels (ed: dress comfortably)
  • @scribblingon – You might feel left out & think everyone knows everyone else. Don’t be afraid to approach people & talk even if seems random sometimes 🙂 If you liked someone’s talk, strike a convo & tell them that!!
  • @arcdigg – Plan session attendance in advance, have a backup in case the session is full.
  • @jesslynnrose – Reach out to some other folks who are using the hashtag before you get there, events can be cliquey, say hi and make friends before you go!
  • @thelarkinn – Never feel afraid to say hi to maintainers, and speakers!!!! Especially if you want to help!
  • @everettharper – Pick 3 ppl you want to meet. Prep 1 Q for each. Go early, find person #1 in the 1st hr before crowds. 1/3 done = momentum for rest of day!
  • @jorriss – Meet people. Skip sessions. You’ll get more from meeting and talking with people then sitting in the sessions. #hallwaytrack
  • @stabbycutyou – Leave room in your schedule, Meet people, Eavesdrop on hallway convos, Take notes, Present on them at your job
  • @patrickfoley – Don’t forget to sleep. Evidence that long-term memories get “written” then
  • @david_t_macknet – Drinking will not help you remember it better or have a better time mingling. Most of us are just as introverted & the awkwardness fades.
  • @carlowahlstedt – Don’t feel like you have to go to EVERY session.
  • @davidpine7 – Try your best to NOT be an introvert — in our industry that can be challenging, but if you put yourself out there…you will not regret it!
  • @frontvu – Don’t rely on the conference wifi
  • @shepherddad – Put snacks in your bag or pocket.
  • @sod1102 – Find out if there will be slides (and even better!) video available post conference, then don’t worry about missing stuff and relax & enjoy
  • @rnelson0 – Take notes. Live tweet, carry a notebook, jot it all down at 1am before sleeping, whatever method helps you remember what you did.
  • @hoyto – Sit [at] meal tables with random people and introduce yourself.
  • @_s_hari – Ask speaker when *not* to use product/methodology that they’re speaking on. If they cannot explain that, then it’s just a marketing session
  • @EricFishor – Don’t be afraid to discreetly leave or enter an on going session. It’s up to you to seek out sessions that interest you.
  • @texmandie – If you get to meet and talk to your heroes, don’t freak out – they’re normal people who happen to do cool stuff
  • @wilbers_ke – Greatest connections happen in the hallways, coffee queue and places with animated humans. Minimize seated conference halls
  • @CJohnsonO365 – CLEAR YOUR SCHEDULE. Don’t try to get “regular” work done during the conference— you’ll end up missing something important!
  • @g33konaut – Tweet with the conf hashtag to ask if people wanna meet and talk or hangout after the conference, also follow the hashtag tweets to find ppl. Don’t sweat missing a talk, meeting people and talking to them is always better than than seeing a talk. Also the talks are often recorded
  • @foxdeploy – Who cares about swag, it’s all about connections. Meet the people who’ve helped you over the years and say thanks.
  • @jfletch – Ask people which after parties they are attending. Great way to find out about smaller/more interesting events and get yourself invited!
  • @marxculture – The Law of Two Feet – if you aren’t enjoying a session then leave. Go to at least one thing outside your normal sphere.
  • @joshkodroff – Bring work business cards if you’re not looking for a job, personal business cards if you are.
  • @benjimawoo – Go to sessions that cover tehnologies you wouldn’t otherwise encounter day to day. Techs you don’t use in your day job.

Fantastic stuff. You’ll get more out of a conference if you say hello, include the “hallway track” in your planning, stay off your phone and laptop, and check out sessions and tech you don’t usually work on.

What are YOUR suggestions? Sound off in the comments.


Sponsor: Did you know VSTS can integrate closely with Octopus Deploy? Watch Damian Brady and Brian A. Randell as they show you how to automate deployments from VSTS to Octopus Deploy, and demo the new VSTS Octopus Deploy dashboard widget. Watch now!


© 2017 Scott Hanselman. All rights reserved.
     
WoC Tech Chat used under CC

This last week Joseph Phillips tweeted that he was going to his first big tech conference and wanted some tips and suggestions. I have a TON of tips, but I know YOU have more, so I retweeted his request and prompted folks to reply. This was well timed as I had just gotten back from OSCON and BUILD, two great conferences.

The resulting thread was fantastic, so I've pulled some of the best recommendations out. As per usual, the Community has some great ideas and you should check them out!

  • @saraford - Whenever you get a biz card write down why you met them or what convo was about. It might seem obvious at time but you wont remember at home
  • @arcdigg - Meet people and speakers. Tech is part of your success, but growing your network matters too. Conf can give you both or not. Up to you!
  • @marypcbuk - if approaching people is hard for you, just ask 'what do you work on?'
  • @ohhoe - don't be afraid to introduce yrself to people! let them know its yr first conference, often people will introduce you to other people too :)
  • @IrishSQL - connect with a few attendees/speakers online prior to event, and bring plenty of business cards. When u get one, write details on back
  • @arcdigg - Backpack and sneakers beat cute laptop bag and heels (ed: dress comfortably)
  • @scribblingon - You might feel left out & think everyone knows everyone else. Don't be afraid to approach people & talk even if seems random sometimes :) If you liked someone's talk, strike a convo & tell them that!!
  • @arcdigg - Plan session attendance in advance, have a backup in case the session is full.
  • @jesslynnrose - Reach out to some other folks who are using the hashtag before you get there, events can be cliquey, say hi and make friends before you go!
  • @thelarkinn - Never feel afraid to say hi to maintainers, and speakers!!!! Especially if you want to help!
  • @everettharper - Pick 3 ppl you want to meet. Prep 1 Q for each. Go early, find person #1 in the 1st hr before crowds. 1/3 done = momentum for rest of day!
  • @jorriss - Meet people. Skip sessions. You'll get more from meeting and talking with people then sitting in the sessions. #hallwaytrack
  • @stabbycutyou - Leave room in your schedule, Meet people, Eavesdrop on hallway convos, Take notes, Present on them at your job
  • @patrickfoley - Don't forget to sleep. Evidence that long-term memories get "written" then
  • @david_t_macknet - Drinking will not help you remember it better or have a better time mingling. Most of us are just as introverted & the awkwardness fades.
  • @carlowahlstedt - Don't feel like you have to go to EVERY session.
  • @davidpine7 - Try your best to NOT be an introvert -- in our industry that can be challenging, but if you put yourself out there...you will not regret it!
  • @frontvu - Don't rely on the conference wifi
  • @shepherddad - Put snacks in your bag or pocket.
  • @sod1102 - Find out if there will be slides (and even better!) video available post conference, then don't worry about missing stuff and relax & enjoy
  • @rnelson0 - Take notes. Live tweet, carry a notebook, jot it all down at 1am before sleeping, whatever method helps you remember what you did.
  • @hoyto - Sit [at] meal tables with random people and introduce yourself.
  • @_s_hari - Ask speaker when *not* to use product/methodology that they're speaking on. If they cannot explain that, then it's just a marketing session
  • @EricFishor - Don't be afraid to discreetly leave or enter an on going session. It's up to you to seek out sessions that interest you.
  • @texmandie - If you get to meet and talk to your heroes, don't freak out - they're normal people who happen to do cool stuff
  • @wilbers_ke - Greatest connections happen in the hallways, coffee queue and places with animated humans. Minimize seated conference halls
  • @CJohnsonO365 - CLEAR YOUR SCHEDULE. Don’t try to get “regular” work done during the conference— you’ll end up missing something important!
  • @g33konaut - Tweet with the conf hashtag to ask if people wanna meet and talk or hangout after the conference, also follow the hashtag tweets to find ppl. Don't sweat missing a talk, meeting people and talking to them is always better than than seeing a talk. Also the talks are often recorded
  • @foxdeploy - Who cares about swag, it's all about connections. Meet the people who've helped you over the years and say thanks.
  • @jfletch - Ask people which after parties they are attending. Great way to find out about smaller/more interesting events and get yourself invited!
  • @marxculture - The Law of Two Feet - if you aren't enjoying a session then leave. Go to at least one thing outside your normal sphere.
  • @joshkodroff - Bring work business cards if you're not looking for a job, personal business cards if you are.
  • @benjimawoo - Go to sessions that cover tehnologies you wouldn't otherwise encounter day to day. Techs you don't use in your day job.

Fantastic stuff. You'll get more out of a conference if you say hello, include the "hallway track" in your planning, stay off your phone and laptop, and check out sessions and tech you don't usually work on.

What are YOUR suggestions? Sound off in the comments.


Sponsor: Did you know VSTS can integrate closely with Octopus Deploy? Watch Damian Brady and Brian A. Randell as they show you how to automate deployments from VSTS to Octopus Deploy, and demo the new VSTS Octopus Deploy dashboard widget. Watch now!



© 2017 Scott Hanselman. All rights reserved.
     

Relationship Hacks – Mindfulness – Don’t live your life by default

Setting the DefaultsI’m setting a goal for myself to finish my half-finished book relationshiphacks.com this year. In an attempt to make that happen (and because the recent podcast with my wife was wildly popular) I’m going to try to blog some guiding principles. Then I’ll attempt to collect the feedback and comments, improve the posts, then move them into the book. Yesterday I posted about “An allowance system for adults.”

In this post on I want to touch briefly on the concept of “mindfulness.” When I was younger I didn’t know this term so I said “don’t live your life by default.” Phrased alternatively, “don’t let your life happen by default.”

I mentioned it years ago on a podcast and Paul Apostolos did a very nice blog post where he paraphrased:

Teach your children to make life choices rather than just let life happen to them.

Now, to be clear, stuff happens and this isn’t always possible. There’s luck, there’s planning, there’s inherent privilege, but the root idea of mindfulness and awareness is crucial. As they say, “Luck Is what happens when preparation meets opportunity”

I met with a young mentee today who is considering not just leaving her job but also moving to a totally different career. What I appreciated about her perspective and questions was that she clearly was going into the future fully aware of the possibilities. She embraced both the potential good and bad possibilities with a conscious and mindful awareness that was inspiring.

She wasn’t going to just “let whatever happen, happen.” She wasn’t going to just start the game and accept the defaults. She is opening open the options menu of life and trying to change the settings consciously.

I’m doing my best to teach my kids this, hopefully by example. Yes there are things they can’t change about themselves, but the one thing they can change (or try) is how they think and how they act. I catch them saying things like “I’m not good at math.” They have tapes that are already starting to run in their little heads that feed them negativity and inaction. The defaults are just doing nothing. Humans (myself included) can be very lazy. I want them to build up their reservoirs of self-esteem and “I can do it” so they don’t accept the defaults.

Do you have any stories of where you “woke up” and realized you were coasting (perhaps for a week, perhaps for years) and were just accepting the defaults in your life? How did you break out of that thinking?


Sponsor: Get next level application monitoring with Raygun – The revolutionary software intelligence platform for your web and mobile apps. Take a free trial today!


© 2017 Scott Hanselman. All rights reserved.
     

Setting the DefaultsI'm setting a goal for myself to finish my half-finished book relationshiphacks.com this year. In an attempt to make that happen (and because the recent podcast with my wife was wildly popular) I'm going to try to blog some guiding principles. Then I'll attempt to collect the feedback and comments, improve the posts, then move them into the book. Yesterday I posted about "An allowance system for adults."

In this post on I want to touch briefly on the concept of "mindfulness." When I was younger I didn't know this term so I said "don't live your life by default." Phrased alternatively, "don't let your life happen by default."

I mentioned it years ago on a podcast and Paul Apostolos did a very nice blog post where he paraphrased:

Teach your children to make life choices rather than just let life happen to them.

Now, to be clear, stuff happens and this isn't always possible. There's luck, there's planning, there's inherent privilege, but the root idea of mindfulness and awareness is crucial. As they say, "Luck Is what happens when preparation meets opportunity"

I met with a young mentee today who is considering not just leaving her job but also moving to a totally different career. What I appreciated about her perspective and questions was that she clearly was going into the future fully aware of the possibilities. She embraced both the potential good and bad possibilities with a conscious and mindful awareness that was inspiring.

She wasn't going to just "let whatever happen, happen." She wasn't going to just start the game and accept the defaults. She is opening open the options menu of life and trying to change the settings consciously.

I'm doing my best to teach my kids this, hopefully by example. Yes there are things they can't change about themselves, but the one thing they can change (or try) is how they think and how they act. I catch them saying things like "I'm not good at math." They have tapes that are already starting to run in their little heads that feed them negativity and inaction. The defaults are just doing nothing. Humans (myself included) can be very lazy. I want them to build up their reservoirs of self-esteem and "I can do it" so they don't accept the defaults.

Do you have any stories of where you "woke up" and realized you were coasting (perhaps for a week, perhaps for years) and were just accepting the defaults in your life? How did you break out of that thinking?


Sponsor: Get next level application monitoring with Raygun - The revolutionary software intelligence platform for your web and mobile apps. Take a free trial today!



© 2017 Scott Hanselman. All rights reserved.
     

Relationship Hacks: An Allowance System for Adults

Nintendo Switch - YOU DESERVE ONEI’m setting a goal for myself to finish my half-finished book relationshiphacks.com this year. In an attempt to make that happen (and because the recent podcast with my wife was wildly popular) I’m going to try to blog some guiding principles. Then I’ll attempt to collect the feedback and comments, improve the posts, then move them into the book.

I got a Nintendo Switch yesterday. Bought it with cash, brought it home, set it up, and – with neither shame nor regret – showed my non-gamer spouse.

“That’s cool,” she said. “Is that the new Nintendo 64 they were talking about on the radio?”

No judgment. Not a comment about the $300 price tag. Nothing was sad like “do we really need another game?” or “what credit card did you buy that with?”

How is this possible? No fight (not even a lowercase F fight) and no tension.

My wife and I give each other an allowance. In cash.

Every two weeks when our paychecks are deposited, we each get an allowance. It’s a $100 a week (yes, for some that’s a lot, for others, it’s not. It works for us.) and it’s the same for each of us. We put all our money in one account, give ourselves the allowance, pay the bills, then if there is anything left over it goes it savings.

Let me back up. We used to a bicker and judge each other for our purchases. If you’d log into our bank you’d see something like:

  • Paycheck
  • Mortgage
  • Car Note
  • $5 Starbucks
  • $3 Subway
  • $8 Chipotle
  • $60 GameStop
  • $70 Nordstrom

HOLD UP. What is that GameStop? Well, what’s this Nordstrom? Did you need to be getting that [widget?]

You get the idea. We needed to remove all that noise at the bottom of the ledger as it was distracting us from the larger goals.

Then my wife had the idea that we just needed to pay ourselves first. We can spend that money however we like – with promised zero judgment from the other spouse. That’s crucial, otherwise the system doesn’t work.

The allowance for anything that isn’t “necessarily living stuff.” So it’s not for toothpaste, but it IS for eating out when we don’t need to eat out.

I could have eaten at Chipotle each day this week, but that would come out of my allowance. Instead, I chose to eat at home all month and save my allowance for a Nintendo Switch.

This works – of course – both ways. My wife has hobbies and social stuff that she does, and she uses her allowance for that.

If you made it this far, perhaps you’re thinking, “wow, you’re a wimp” or “gee, he/she has you in their pocket.” Wait.

Step back and absorb. We are grown-ass people. This system works because we designed it for us. All arguments around “frivolous” spending are gone.

This allows us the best of all worlds.

  • It keeps credit card spending to an absolute minimum. 
  • We are empowered and we empower each other with this system.
  • There’s a certain sense of power in carrying cash. You know exactly how much you have and exactly when you have to stop spending.
  • We can decide if we want $200 shoes or a $100 meal or a $50 game. One spouse comes home excited about their purchase while the other greets them without resentment. The fixed allowance amount handles that.
    • Additional spending is discussed on a case-by-case basis. But we’ve picked an amount that is large enough that I could buy something crazy like a Vive – if I am willing to forgo movies, excessive eating out, etc.
  • It sets a good example for the kids as they watch us weigh the pros and cons of a purchase. Money is spent when it’s in-hand and not on credit.

My wife and I are in a mixed marriage. It’s not that I’m White and she’s Black, is that I’m a techie/geek/nerd and she’s fairly normal. 😉 Of course, this kind of mix isn’t gender or race specific. I know lots of couples of varying combos and flavors that bump up against issues in their relationships because of budding resentment, missed or poorly set expectations, divergent points of view around problem solving, and more.

I’d love to hear YOUR story of your partner and your “mix” and how you (mostly) solved it with a simple Relationship Hack like this. Sound off in the comments.


Sponsor: Check out JetBrains Rider: a new cross-platform .NET IDE. Edit, refactor, test, build and debug ASP.NET, .NET Framework, .NET Core, or Unity applications. Learn more and get access to early builds!


© 2017 Scott Hanselman. All rights reserved.
     

Nintendo Switch - YOU DESERVE ONEI'm setting a goal for myself to finish my half-finished book relationshiphacks.com this year. In an attempt to make that happen (and because the recent podcast with my wife was wildly popular) I'm going to try to blog some guiding principles. Then I'll attempt to collect the feedback and comments, improve the posts, then move them into the book.

I got a Nintendo Switch yesterday. Bought it with cash, brought it home, set it up, and - with neither shame nor regret - showed my non-gamer spouse.

"That's cool," she said. "Is that the new Nintendo 64 they were talking about on the radio?"

No judgment. Not a comment about the $300 price tag. Nothing was sad like "do we really need another game?" or "what credit card did you buy that with?"

How is this possible? No fight (not even a lowercase F fight) and no tension.

My wife and I give each other an allowance. In cash.

Every two weeks when our paychecks are deposited, we each get an allowance. It's a $100 a week (yes, for some that's a lot, for others, it's not. It works for us.) and it's the same for each of us. We put all our money in one account, give ourselves the allowance, pay the bills, then if there is anything left over it goes it savings.

Let me back up. We used to a bicker and judge each other for our purchases. If you'd log into our bank you'd see something like:

  • Paycheck
  • Mortgage
  • Car Note
  • $5 Starbucks
  • $3 Subway
  • $8 Chipotle
  • $60 GameStop
  • $70 Nordstrom

HOLD UP. What is that GameStop? Well, what's this Nordstrom? Did you need to be getting that [widget?]

You get the idea. We needed to remove all that noise at the bottom of the ledger as it was distracting us from the larger goals.

Then my wife had the idea that we just needed to pay ourselves first. We can spend that money however we like - with promised zero judgment from the other spouse. That's crucial, otherwise the system doesn't work.

The allowance for anything that isn't "necessarily living stuff." So it's not for toothpaste, but it IS for eating out when we don't need to eat out.

I could have eaten at Chipotle each day this week, but that would come out of my allowance. Instead, I chose to eat at home all month and save my allowance for a Nintendo Switch.

This works - of course - both ways. My wife has hobbies and social stuff that she does, and she uses her allowance for that.

If you made it this far, perhaps you're thinking, "wow, you're a wimp" or "gee, he/she has you in their pocket." Wait.

Step back and absorb. We are grown-ass people. This system works because we designed it for us. All arguments around "frivolous" spending are gone.

This allows us the best of all worlds.

  • It keeps credit card spending to an absolute minimum. 
  • We are empowered and we empower each other with this system.
  • There's a certain sense of power in carrying cash. You know exactly how much you have and exactly when you have to stop spending.
  • We can decide if we want $200 shoes or a $100 meal or a $50 game. One spouse comes home excited about their purchase while the other greets them without resentment. The fixed allowance amount handles that.
    • Additional spending is discussed on a case-by-case basis. But we've picked an amount that is large enough that I could buy something crazy like a Vive - if I am willing to forgo movies, excessive eating out, etc.
  • It sets a good example for the kids as they watch us weigh the pros and cons of a purchase. Money is spent when it's in-hand and not on credit.

My wife and I are in a mixed marriage. It's not that I'm White and she's Black, is that I'm a techie/geek/nerd and she's fairly normal. ;) Of course, this kind of mix isn't gender or race specific. I know lots of couples of varying combos and flavors that bump up against issues in their relationships because of budding resentment, missed or poorly set expectations, divergent points of view around problem solving, and more.

I'd love to hear YOUR story of your partner and your "mix" and how you (mostly) solved it with a simple Relationship Hack like this. Sound off in the comments.


Sponsor: Check out JetBrains Rider: a new cross-platform .NET IDE. Edit, refactor, test, build and debug ASP.NET, .NET Framework, .NET Core, or Unity applications. Learn more and get access to early builds!


© 2017 Scott Hanselman. All rights reserved.
     

NXTA – NexTech Africa Conference – Day 1 perspectives

imageI’m in Nairobi, Kenya this week attending a fantastic event called NexTech Africa. It is a free event that showcases the best of what Africa’s Startup community has to offer. This event is mostly focused on East Africa’s tech community but it included delegates from all over the continent. I’m told over 1000 people are here.

My wife is Zimbabwean and we have family all over in places like South Africa, Tanzania, and Zimbabwe, and friends in a dozen other countries. I personally feel that access to technology and technical education is a fantastic way to help Africa’s burgeoning middle class.

However, this trip was for listening. It’s silly for me (or anyone who isn’t living on the continent) to fly in and “drop the knowledge” and fly out. In fact, it’s condescending. So I’m spending this week visiting startups, talking to engineers, university students, and tech entrepreneurs.

I spoke at length with the engineers at BRCK, a Kenya-based startup that has a “brick” that’s a portable router, NAS, Compute Module, Captive Portal, and so much more. They can drop one of these a little outside of town and give wi-fi to an entire area. Even better, there could be hyper-local content on the devices. Folks with 30+Mbps Internet may be spoiled with HD content, but why not have a smart router download TV shows and Movies that can be served (much like movies stored on an airplane’s hard drive that you can watch via wi-fi while you fly) to everyone in the local area. The possibilities are endless and they’re doing all the work from hardware to firmware to software in-country with local talent.

image

I also visited iHub‘s Technology Innovation Community and saw where they teach classes to local students, have maker- and hacker-spaces, support a UXLab and host local tech meetups. I’ll be hopefully communicating more and more with the new friends I’ve met and perhaps bring a few of them to the podcast so you can hear their stories yourself.

image

These are uniquely African solutions to problems that Africans have identified they want to solve. I am learning a ton and have been thrilled to be involved. Since I focus on Open Source .NET and .NET Core, I think there’s an opportunity for C# that could enable new mobile apps via Xamarin with backends written in ASP.NET Core and running on whatever operating system makes one happy.


Sponsor: Track every change to your database. See who made changes, what they did, & why, with SQL Source Control. Get a full version history in your source control system. See how.


© 2016 Scott Hanselman. All rights reserved.
     

imageI'm in Nairobi, Kenya this week attending a fantastic event called NexTech Africa. It is a free event that showcases the best of what Africa's Startup community has to offer. This event is mostly focused on East Africa's tech community but it included delegates from all over the continent. I'm told over 1000 people are here.

My wife is Zimbabwean and we have family all over in places like South Africa, Tanzania, and Zimbabwe, and friends in a dozen other countries. I personally feel that access to technology and technical education is a fantastic way to help Africa's burgeoning middle class.

However, this trip was for listening. It's silly for me (or anyone who isn't living on the continent) to fly in and "drop the knowledge" and fly out. In fact, it's condescending. So I'm spending this week visiting startups, talking to engineers, university students, and tech entrepreneurs.

I spoke at length with the engineers at BRCK, a Kenya-based startup that has a "brick" that's a portable router, NAS, Compute Module, Captive Portal, and so much more. They can drop one of these a little outside of town and give wi-fi to an entire area. Even better, there could be hyper-local content on the devices. Folks with 30+Mbps Internet may be spoiled with HD content, but why not have a smart router download TV shows and Movies that can be served (much like movies stored on an airplane's hard drive that you can watch via wi-fi while you fly) to everyone in the local area. The possibilities are endless and they're doing all the work from hardware to firmware to software in-country with local talent.

image

I also visited iHub's Technology Innovation Community and saw where they teach classes to local students, have maker- and hacker-spaces, support a UXLab and host local tech meetups. I'll be hopefully communicating more and more with the new friends I've met and perhaps bring a few of them to the podcast so you can hear their stories yourself.

image

These are uniquely African solutions to problems that Africans have identified they want to solve. I am learning a ton and have been thrilled to be involved. Since I focus on Open Source .NET and .NET Core, I think there's an opportunity for C# that could enable new mobile apps via Xamarin with backends written in ASP.NET Core and running on whatever operating system makes one happy.


Sponsor: Track every change to your database. See who made changes, what they did, & why, with SQL Source Control. Get a full version history in your source control system. See how.



© 2016 Scott Hanselman. All rights reserved.
     

NXTA – NexTech Africa Conference – Day 1 perspectives

imageI’m in Nairobi, Kenya this week attending a fantastic event called NexTech Africa. It is a free event that showcases the best of what Africa’s Startup community has to offer. This event is mostly focused on East Africa’s tech community but it included delegates from all over the continent. I’m told over 1000 people are here.

My wife is Zimbabwean and we have family all over in places like South Africa, Tanzania, and Zimbabwe, and friends in a dozen other countries. I personally feel that access to technology and technical education is a fantastic way to help Africa’s burgeoning middle class.

However, this trip was for listening. It’s silly for me (or anyone who isn’t living on the continent) to fly in and “drop the knowledge” and fly out. In fact, it’s condescending. So I’m spending this week visiting startups, talking to engineers, university students, and tech entrepreneurs.

I spoke at length with the engineers at BRCK, a Kenya-based startup that has a “brick” that’s a portable router, NAS, Compute Module, Captive Portal, and so much more. They can drop one of these a little outside of town and give wi-fi to an entire area. Even better, there could be hyper-local content on the devices. Folks with 30+Mbps Internet may be spoiled with HD content, but why not have a smart router download TV shows and Movies that can be served (much like movies stored on an airplane’s hard drive that you can watch via wi-fi while you fly) to everyone in the local area. The possibilities are endless and they’re doing all the work from hardware to firmware to software in-country with local talent.

image

I also visited iHub‘s Technology Innovation Community and saw where they teach classes to local students, have maker- and hacker-spaces, support a UXLab and host local tech meetups. I’ll be hopefully communicating more and more with the new friends I’ve met and perhaps bring a few of them to the podcast so you can hear their stories yourself.

image

These are uniquely African solutions to problems that Africans have identified they want to solve. I am learning a ton and have been thrilled to be involved. Since I focus on Open Source .NET and .NET Core, I think there’s an opportunity for C# that could enable new mobile apps via Xamarin with backends written in ASP.NET Core and running on whatever operating system makes one happy.


Sponsor: Track every change to your database. See who made changes, what they did, & why, with SQL Source Control. Get a full version history in your source control system. See how with Red Gate’s SQL Source Control.


© 2016 Scott Hanselman. All rights reserved.
     

imageI'm in Nairobi, Kenya this week attending a fantastic event called NexTech Africa. It is a free event that showcases the best of what Africa's Startup community has to offer. This event is mostly focused on East Africa's tech community but it included delegates from all over the continent. I'm told over 1000 people are here.

My wife is Zimbabwean and we have family all over in places like South Africa, Tanzania, and Zimbabwe, and friends in a dozen other countries. I personally feel that access to technology and technical education is a fantastic way to help Africa's burgeoning middle class.

However, this trip was for listening. It's silly for me (or anyone who isn't living on the continent) to fly in and "drop the knowledge" and fly out. In fact, it's condescending. So I'm spending this week visiting startups, talking to engineers, university students, and tech entrepreneurs.

I spoke at length with the engineers at BRCK, a Kenya-based startup that has a "brick" that's a portable router, NAS, Compute Module, Captive Portal, and so much more. They can drop one of these a little outside of town and give wi-fi to an entire area. Even better, there could be hyper-local content on the devices. Folks with 30+Mbps Internet may be spoiled with HD content, but why not have a smart router download TV shows and Movies that can be served (much like movies stored on an airplane's hard drive that you can watch via wi-fi while you fly) to everyone in the local area. The possibilities are endless and they're doing all the work from hardware to firmware to software in-country with local talent.

image

I also visited iHub's Technology Innovation Community and saw where they teach classes to local students, have maker- and hacker-spaces, support a UXLab and host local tech meetups. I'll be hopefully communicating more and more with the new friends I've met and perhaps bring a few of them to the podcast so you can hear their stories yourself.

image

These are uniquely African solutions to problems that Africans have identified they want to solve. I am learning a ton and have been thrilled to be involved. Since I focus on Open Source .NET and .NET Core, I think there's an opportunity for C# that could enable new mobile apps via Xamarin with backends written in ASP.NET Core and running on whatever operating system makes one happy.


Sponsor: Track every change to your database. See who made changes, what they did, & why, with SQL Source Control. Get a full version history in your source control system. See how with Red Gate's SQL Source Control.



© 2016 Scott Hanselman. All rights reserved.
     

VIDEO: How to get started with technical public speaking!

On .NET is a weekly chat with team members from the .NET team at Microsoft. This week we put together something a little different, and honestly, I think it not only went really well, but I think it’s an hour that provides a lot of value that goes well beyond .NET or any technology.

image

We put together a panel of folks at different points in their technical careers. Some just starting to speak publicly and some who’ve been doing it for 20+ years. Some introverts, some extroverts. Some with speaking or theater experience, others with none. And we talked!

We chatted about how to get started, where you can learn to speak on technical topics, how to form a story arc, how to best utilize your gifts, when to be critical and when to breathe.

It was great fun and included myself, Kendra Havens, Maria Naggaga Nakanwagi, Kasey Uhlenhuth, and Donovan Brown. You can view or download it here on Channel 9, or you can watch it on YouTube embedded below.

Let us know if this kind of content is useful, and if you want to see more in the future.


Sponsor: Big thumbs-up for Kendo UI! They published a comprehensive whitepaper on responsive web design and the best and fastest way to serve desktop and mobile web users in a tailored and cost-effective manner. Check it out!


© 2016 Scott Hanselman. All rights reserved.
     

On .NET is a weekly chat with team members from the .NET team at Microsoft. This week we put together something a little different, and honestly, I think it not only went really well, but I think it's an hour that provides a lot of value that goes well beyond .NET or any technology.

image

We put together a panel of folks at different points in their technical careers. Some just starting to speak publicly and some who've been doing it for 20+ years. Some introverts, some extroverts. Some with speaking or theater experience, others with none. And we talked!

We chatted about how to get started, where you can learn to speak on technical topics, how to form a story arc, how to best utilize your gifts, when to be critical and when to breathe.

It was great fun and included myself, Kendra Havens, Maria Naggaga Nakanwagi, Kasey Uhlenhuth, and Donovan Brown. You can view or download it here on Channel 9, or you can watch it on YouTube embedded below.

Let us know if this kind of content is useful, and if you want to see more in the future.


Sponsor: Big thumbs-up for Kendo UI! They published a comprehensive whitepaper on responsive web design and the best and fastest way to serve desktop and mobile web users in a tailored and cost-effective manner. Check it out!



© 2016 Scott Hanselman. All rights reserved.
     

VIDEO: How to get started with technical public speaking!

On .NET is a weekly chat with team members from the .NET team at Microsoft. This week we put together something a little different, and honestly, I think it not only went really well, but I think it’s an hour that provides a lot of value that goes well beyond .NET or any technology.

image

We put together a panel of folks at different points in their technical careers. Some just starting to speak publicly and some who’ve been doing it for 20+ years. Some introverts, some extroverts. Some with speaking or theater experience, others with none. And we talked!

We chatted about how to get started, where you can learn to speak on technical topics, how to form a story arc, how to best utilize your gifts, when to be critical and when to breathe.

It was great fun and included myself, Kendra Havens, Maria Naggaga Nakanwagi, Kasey Uhlenhuth, and Donovan Brown. You can view or download it here on Channel 9, or you can watch it on YouTube embedded below.

Let us know if this kind of content is useful, and if you want to see more in the future.


Sponsor: Big thumbs-up for Kendo UI! They published a comprehensive whitepaper on responsive web design and the best and fastest way to serve desktop and mobile web users in a tailored and cost-effective manner. Check it out!


© 2016 Scott Hanselman. All rights reserved.
     

On .NET is a weekly chat with team members from the .NET team at Microsoft. This week we put together something a little different, and honestly, I think it not only went really well, but I think it's an hour that provides a lot of value that goes well beyond .NET or any technology.

image

We put together a panel of folks at different points in their technical careers. Some just starting to speak publicly and some who've been doing it for 20+ years. Some introverts, some extroverts. Some with speaking or theater experience, others with none. And we talked!

We chatted about how to get started, where you can learn to speak on technical topics, how to form a story arc, how to best utilize your gifts, when to be critical and when to breathe.

It was great fun and included myself, Kendra Havens, Maria Naggaga Nakanwagi, Kasey Uhlenhuth, and Donovan Brown. You can view or download it here on Channel 9, or you can watch it on YouTube embedded below.

Let us know if this kind of content is useful, and if you want to see more in the future.


Sponsor: Big thumbs-up for Kendo UI! They published a comprehensive whitepaper on responsive web design and the best and fastest way to serve desktop and mobile web users in a tailored and cost-effective manner. Check it out!



© 2016 Scott Hanselman. All rights reserved.
     

What .NET Developers ought to know to start in 2017

.NET ComponentsMany many years ago I wrote a blog post about what .NET Developers ought to know. Unfortunately what was just a list of questions was abused by recruiters and others who used it as a harsh litmus test.

There’s a lot going on in the .NET space so I though it would be nice to update with a gentler list that could be used as a study guide and glossary. Jon Galloway and I sat down and put together this list of terms and resources.

Your first reaction might be “wow that’s a lot of stuff, .NET sucks!” Most platforms have similar glossaries or barriers to entry. There’s TLAs (three letter acronyms) in every language and computer ecosystems. Don’t get overwhelmed, start with Need To Know and move slowly forward. Also, remember YOU decide when you want to draw the line. You don’t need to know everything. Just know that every layer and label has something underneath it and the whatever program you’re dealing with may be in a level you have yet to dig into.

Draw a line under the stuff you need to know. Know that, and know you can look the other stuff up.  Some of us want the details – the internals. Others don’t. You may learn from the Metal Up or from the Glass Back. Know your style, and revel in it.

First, you can start learning .NET and C# online at https://dot.net. You can learn F# online here http://www.tryfsharp.org. Both sites let you write code without downloading anything. You just work in your browser.

When you’re ready, get .NET Core and Visual Studio Code at https://dot.net and start reading! 

Need To Know

  • What’s .NET? .NET has some number of key components. We’ll start with runtimes and languages.
  • Here are the three main runtimes:
    • .NET Framework – The .NET framework helps you create mobile, desktop, and web applications that run on Windows PCs, devices and servers.
    • .NET Core – .NET Core gives you a fast and modular platform for creating server applications that run on Windows, Linux and Mac.
    • Mono for Xamarin – Xamarin brings .NET to iOS and Android, reusing skills and code while getting access to the native APIs and performance. Mono is an open source .NET that was created before Xamarin and Microsoft joined together. Mono will support the .NET Standard as another great .NET runtime that is open source and flexible. You’ll also find Mono in the Unity game development environment.
  • Here are the main languages:
    • C# is simple, powerful, type-safe, and object-oriented while retaining the expressiveness and elegance of C-style languages. Anyone familiar with C and similar languages will find few problems in adapting to C#. Check out the C# Guide to learn more about C# or try it in your browser at https://dot.net
    • F# is a cross-platform, functional-first programming language that also supports traditional object-oriented and imperative programming. Check out the F# Guide to learn more about F# or try it in your browser at http://www.tryfsharp.org 
    • Visual Basic is an easy language to learn that you can use to build a variety of applications that run on .NET. I started with VB many years ago.
  • Where do I start?
  • After runtimes and languages, there’s platforms and frameworks.
    • Frameworks define the APIs you can use. There’s the .NET 4.6 Framework, the .NET Standard, etc. Sometimes you’ll refer to them by name, or in code and configuration files as a TFM (see below)
    • Platform (in the context of .NET) – Windows, Linux, Mac, Android, iOS, etc. This also includes Bitness, so x86 Windows is not x64 Windows. Each Linux distro is its own platform today as well.
  • TFMs (Target Framework Moniker) – A moniker (string) that lets you refer to target framework + version combinations. For example, net462 (.NET 4.6.2), net35 (.NET 3.5), uap (Universal Windows Platform). For more information, see this blog post. Choosing a TFM decides which APIs are available to you, and which frameworks your code can run on.
  • NuGet – NuGet is the package manager for the Microsoft development platform including .NET. The NuGet client tools provide the ability to produce and consume packages. The NuGet Gallery is the central package repository used by all package authors and consumers.
  • What’s an Assembly? – An assembly is typically a DLL or EXE containing compiled code. Assemblies are the building blocks of .NET Full Framework applications; they form the fundamental unit of deployment, version control, reuse, activation scoping, and security permissions. In .NET Core, the building blocks are NuGet packages that contain assemblies PLUS additional metadata
  • .NET Standard or “netstandard” – The .NET Standard simplifies references between binary-compatible frameworks, allowing a single target framework to reference a combination of others. The .NET Standard Library is a formal specification of .NET APIs that are intended to be available on all .NET runtimes.
  • .NET Framework vs. .NET Core: The .NET Framework is for Windows apps and Windows systems, while the .NET Core is a smaller cross platform framework for server apps, console apps, web applications, and as a core runtime to build other systems from.

Should Know

    • CLR – The Common Language Runtime (CLR), the virtual machine component of Microsoft’s .NET framework, manages the execution of .NET programs. A process known as just-in-time compilation converts compiled code into machine instructions which the computer’s CPU then executes.
    • CoreCLR – .NET runtime, used by .NET Core.
    • Mono – .NET runtime, used by Xamarin and others.
    • CoreFX – .NET class libraries, used by .NET Core and to a degree by Mono via source sharing.
    • Roslyn – C# and Visual Basic compilers, used by most .NET platforms and tools. Exposes APIs for reading, writing and analyzing source code.
    • GC – .NET uses garbage collection to provide automatic memory management for programs. The GC operates on a lazy approach to memory management, preferring application throughput to the immediate collection of memory. To learn more about the .NET GC, check out Fundamentals of garbage collection (GC).
    • “Managed Code” – Managed code is just that: code whose execution is managed by a runtime like the CLR.
    • IL – Intermediate Language is the product of compilation of code written in high-level .NET languages. C# is Apples, IL is Apple Sauce, and the JIT and CLR makes Apple Juice. 😉
    • JIT – Just in Time Compiler. Takes IL and compiles it in preparation for running as native code.
    • Where is  .NET on disk? .NET Framework is at C:\Windows\Microsoft.NET and .NET Core is at C:\Program Files\dotnet. .NET Core can also be bundled with an application and live under that application’s directory as a self-contained application.
    • Shared Framework vs. Self Contained Apps – .NET Core can use a shared framework (shared by multiple apps on the same machine) or your app can be self-contained with its own copy. Sometimes you’ll hear “xcopy-deployable / bin-deployable” which implies that the application is totally self-contained.
    • async and await– The async and await keywords generate IL that will free up a thread for long running (awaited) function calls (e.g. database queries or web service calls). This frees up system resources, so you aren’t hogging memory, threads, etc. while you’re waiting.
    • Portable Class Libraries –  These are “lowest common denominator” libraries that allow code sharing across platforms. Although PCLs are supported, package authors should support netstandard instead. The .NET Platform Standard is an evolution of PCLs and represents binary portability across platforms.
    • .NET Core is composed of the following parts:
      • A .NET runtime, which provides a type system, assembly loading, a garbage collector, native interop and other basic services.
      • A set of framework libraries, which provide primitive data types, app composition types and fundamental utilities.
      • A set of SDK tools and language compilers that enable the base developer experience, available in the .NET Core SDK.
      • The ‘dotnet’ app host, which is used to launch .NET Core apps. It selects the runtime and hosts the runtime, provides an assembly loading policy and launches the app. The same host is also used to launch SDK tools in much the same way.

    Nice To Know

      • GAC – The Global Assembly Cache is where the .NET full Framework on Windows stores shared libraries. You can list it out with “gacutil /list.”  
      • Assembly Loading and Binding – In complex apps you can get into interesting scenarios around how Assemblies are loaded from disl
      • Profiling (memory usage, GC, etc.) – There’s a lot of great tools you can use to measure – or profile – your C# and .NET Code. A lot of these tools are built into Visual Studio.
      • LINQ – Language Integrated Query is a higher order way to query objects and databases in a declarative way
      • Common Type System and Common Language Specification define how objects are used and passed around in a way that makes them work everywhere .NET works, interoperable. The CLS is a subset that the CTS builds on.
      • .NET Native – One day you’ll be able to compile to native code rather than compiling to Intermediate Language.
      • .NET Roadmap – Here’s what Microsoft is planning for .NET for 2017
      • “Modern” C# 7 – C# itself has new features every year or so. The latest version is C# 7 and has lots of cool features work looking at.

      NOTE: Some text was taken from Wikipedia’s respective articles on each topic, edited for brevity. Creative Commons Attribution-ShareAlike 3.0. Some text was taken directly from the excellent .NET docs. This post is a link blog and aggregate. Some of it is original thought, but much is not.


      Sponsor: Big thanks to Raygun! Join 40,000+ developers who monitor their apps with Raygun. Understand the root cause of errors, crashes and performance issues in your software applications. Installs in minutes, try it today!


      © 2016 Scott Hanselman. All rights reserved.
           

      .NET ComponentsMany many years ago I wrote a blog post about what .NET Developers ought to know. Unfortunately what was just a list of questions was abused by recruiters and others who used it as a harsh litmus test.

      There's a lot going on in the .NET space so I though it would be nice to update with a gentler list that could be used as a study guide and glossary. Jon Galloway and I sat down and put together this list of terms and resources.

      Your first reaction might be "wow that's a lot of stuff, .NET sucks!" Most platforms have similar glossaries or barriers to entry. There's TLAs (three letter acronyms) in every language and computer ecosystems. Don't get overwhelmed, start with Need To Know and move slowly forward. Also, remember YOU decide when you want to draw the line. You don't need to know everything. Just know that every layer and label has something underneath it and the whatever program you're dealing with may be in a level you have yet to dig into.

      Draw a line under the stuff you need to know. Know that, and know you can look the other stuff up.  Some of us want the details – the internals. Others don't. You may learn from the Metal Up or from the Glass Back. Know your style, and revel in it.

      First, you can start learning .NET and C# online at https://dot.net. You can learn F# online here http://www.tryfsharp.org. Both sites let you write code without downloading anything. You just work in your browser.

      When you're ready, get .NET Core and Visual Studio Code at https://dot.net and start reading! 

      Need To Know

      • What's .NET? .NET has some number of key components. We'll start with runtimes and languages.
      • Here are the three main runtimes:
        • .NET Framework - The .NET framework helps you create mobile, desktop, and web applications that run on Windows PCs, devices and servers.
        • .NET Core - .NET Core gives you a fast and modular platform for creating server applications that run on Windows, Linux and Mac.
        • Mono for Xamarin - Xamarin brings .NET to iOS and Android, reusing skills and code while getting access to the native APIs and performance. Mono is an open source .NET that was created before Xamarin and Microsoft joined together. Mono will support the .NET Standard as another great .NET runtime that is open source and flexible. You'll also find Mono in the Unity game development environment.
      • Here are the main languages:
        • C# is simple, powerful, type-safe, and object-oriented while retaining the expressiveness and elegance of C-style languages. Anyone familiar with C and similar languages will find few problems in adapting to C#. Check out the C# Guide to learn more about C# or try it in your browser at https://dot.net
        • F# is a cross-platform, functional-first programming language that also supports traditional object-oriented and imperative programming. Check out the F# Guide to learn more about F# or try it in your browser at http://www.tryfsharp.org 
        • Visual Basic is an easy language to learn that you can use to build a variety of applications that run on .NET. I started with VB many years ago.
      • Where do I start?
      • After runtimes and languages, there's platforms and frameworks.
        • Frameworks define the APIs you can use. There's the .NET 4.6 Framework, the .NET Standard, etc. Sometimes you'll refer to them by name, or in code and configuration files as a TFM (see below)
        • Platform (in the context of .NET) - Windows, Linux, Mac, Android, iOS, etc. This also includes Bitness, so x86 Windows is not x64 Windows. Each Linux distro is its own platform today as well.
      • TFMs (Target Framework Moniker) - A moniker (string) that lets you refer to target framework + version combinations. For example, net462 (.NET 4.6.2), net35 (.NET 3.5), uap (Universal Windows Platform). For more information, see this blog post. Choosing a TFM decides which APIs are available to you, and which frameworks your code can run on.
      • NuGet - NuGet is the package manager for the Microsoft development platform including .NET. The NuGet client tools provide the ability to produce and consume packages. The NuGet Gallery is the central package repository used by all package authors and consumers.
      • What's an Assembly? - An assembly is typically a DLL or EXE containing compiled code. Assemblies are the building blocks of .NET Full Framework applications; they form the fundamental unit of deployment, version control, reuse, activation scoping, and security permissions. In .NET Core, the building blocks are NuGet packages that contain assemblies PLUS additional metadata
      • .NET Standard or "netstandard" - The .NET Standard simplifies references between binary-compatible frameworks, allowing a single target framework to reference a combination of others. The .NET Standard Library is a formal specification of .NET APIs that are intended to be available on all .NET runtimes.
      • .NET Framework vs. .NET Core: The .NET Framework is for Windows apps and Windows systems, while the .NET Core is a smaller cross platform framework for server apps, console apps, web applications, and as a core runtime to build other systems from.

      Should Know

        • CLR – The Common Language Runtime (CLR), the virtual machine component of Microsoft's .NET framework, manages the execution of .NET programs. A process known as just-in-time compilation converts compiled code into machine instructions which the computer's CPU then executes.
        • CoreCLR - .NET runtime, used by .NET Core.
        • Mono - .NET runtime, used by Xamarin and others.
        • CoreFX - .NET class libraries, used by .NET Core and to a degree by Mono via source sharing.
        • Roslyn - C# and Visual Basic compilers, used by most .NET platforms and tools. Exposes APIs for reading, writing and analyzing source code.
        • GC - .NET uses garbage collection to provide automatic memory management for programs. The GC operates on a lazy approach to memory management, preferring application throughput to the immediate collection of memory. To learn more about the .NET GC, check out Fundamentals of garbage collection (GC).
        • "Managed Code" - Managed code is just that: code whose execution is managed by a runtime like the CLR.
        • IL – Intermediate Language is the product of compilation of code written in high-level .NET languages. C# is Apples, IL is Apple Sauce, and the JIT and CLR makes Apple Juice. ;)
        • JIT – Just in Time Compiler. Takes IL and compiles it in preparation for running as native code.
        • Where is  .NET on disk? .NET Framework is at C:\Windows\Microsoft.NET and .NET Core is at C:\Program Files\dotnet. .NET Core can also be bundled with an application and live under that application's directory as a self-contained application.
        • Shared Framework vs. Self Contained Apps - .NET Core can use a shared framework (shared by multiple apps on the same machine) or your app can be self-contained with its own copy. Sometimes you'll hear "xcopy-deployable / bin-deployable" which implies that the application is totally self-contained.
        • async and await– The async and await keywords generate IL that will free up a thread for long running (awaited) function calls (e.g. database queries or web service calls). This frees up system resources, so you aren't hogging memory, threads, etc. while you're waiting.
        • Portable Class Libraries -  These are "lowest common denominator" libraries that allow code sharing across platforms. Although PCLs are supported, package authors should support netstandard instead. The .NET Platform Standard is an evolution of PCLs and represents binary portability across platforms.
        • .NET Core is composed of the following parts:
          • A .NET runtime, which provides a type system, assembly loading, a garbage collector, native interop and other basic services.
          • A set of framework libraries, which provide primitive data types, app composition types and fundamental utilities.
          • A set of SDK tools and language compilers that enable the base developer experience, available in the .NET Core SDK.
          • The 'dotnet' app host, which is used to launch .NET Core apps. It selects the runtime and hosts the runtime, provides an assembly loading policy and launches the app. The same host is also used to launch SDK tools in much the same way.

        Nice To Know

          • GAC – The Global Assembly Cache is where the .NET full Framework on Windows stores shared libraries. You can list it out with "gacutil /list."  
          • Assembly Loading and Binding - In complex apps you can get into interesting scenarios around how Assemblies are loaded from disl
          • Profiling (memory usage, GC, etc.) - There's a lot of great tools you can use to measure – or profile – your C# and .NET Code. A lot of these tools are built into Visual Studio.
          • LINQ - Language Integrated Query is a higher order way to query objects and databases in a declarative way
          • Common Type System and Common Language Specification define how objects are used and passed around in a way that makes them work everywhere .NET works, interoperable. The CLS is a subset that the CTS builds on.
          • .NET Native - One day you'll be able to compile to native code rather than compiling to Intermediate Language.
          • .NET Roadmap - Here's what Microsoft is planning for .NET for 2017
          • "Modern" C# 7 – C# itself has new features every year or so. The latest version is C# 7 and has lots of cool features work looking at.

          NOTE: Some text was taken from Wikipedia's respective articles on each topic, edited for brevity. Creative Commons Attribution-ShareAlike 3.0. Some text was taken directly from the excellent .NET docs. This post is a link blog and aggregate. Some of it is original thought, but much is not.


          Sponsor: Big thanks to Raygun! Join 40,000+ developers who monitor their apps with Raygun. Understand the root cause of errors, crashes and performance issues in your software applications. Installs in minutes, try it today!



          © 2016 Scott Hanselman. All rights reserved.
               

          Teaching coding from the Metal Up or from the Glass Back?

          * Stock photo by WOCInTech Chat used under CC

          Maria on my team and I have been pairing (working in code and stuff together) occasionally in order to improve our coding and tech skills. We all have gaps and it’s a good idea to go over the “digital fundamentals” every once in a way to make sure you’ve got things straight. (Follow up post on this topic tomorrow.)

          As we were white boarding and learning and alternating teaching each other (the best way to make sure you know a topic is to teach it to another person) I was getting the impression that, well, we weren’t feeling each other’s style.

          Now, before we get started, yes, this is a “there’s two kinds of people in this world” post. But this isn’t age, background, or gender related from what I can tell. I just think folks are wired a certain way.  Yes, this a post about generalities.

          Here’s the idea. Just like there are kinesthetic learners and auditory learners and people who learn by repetition, in the computer world I think that some folks learn from the metal up and some folks learn from the glass back.

          Learning from Metal Up

          Computer Science instruction starts from the metal, most often. The computer’s silicon is the metal. You start there and move up. You learn about CPUs, registers, you may learn Assembly or C, then move your way up over the years to a higher level language like Python or Java. Only then will you think about Web APIs and JSON.

          You don’t learn anything about user interaction or user empathy. You don’t learn about shipping updates or test driven development. You learn about algorithms and Turing. You build compilers and abstract syntax trees and frankly, you don’t build anything useful from a human perspective. I wrote a file system driver in Minix. I created new languages and built parsers and lexers.

          • When your type cnn.com and press enter you can pretty much tell you from the address bar down to electrons what happens. AND YOU LOVE IT.
          • Your feel like you own the whole stack and you understand computers like your mechanic friends understand internal combustion engines.
          • You’ll open the hood of a car and look around before you drive it.
          • You’ll open up a decompiler and start poking around to learn.
          • When you learn something new, you want to open it up and see what makes it tick. You want to see how it relates to what you already know.
          • If you need to understand the implementation details then an abstraction is leaking.
          • You know you will be successful because you can have a FEEL for the whole system from the computer science perspective.

          Are you this person? Were you wired this way or did you learn it? If you teach this way AND it lines up with how your students learn, everyone will be successful.

          Learning from the Glass Back

          Learning to code instruction starts from the monitor, most often. Or even the user’s eyeballs. What will they experience? Let’s start with a web page and move deeper towards the backend from there.

          You draw user interfaces and talk about user stories and what it looks like on the screen. You know the CPU is there and how it works but CPU internals don’t light you up. If you wanted to learn more you know it’s out there on YouTube or Wikipedia. But right now you want to build an application for PEOPLE an the nuts and bolts are less important. 

          • When this person types cnn.com and presses enter they know what to expect and the intermediate steps are an implementation detail.
          • You feel like you own the whole experience and you understand people and what they want from the computer.
          • You want to drive a car around a while and get a feel for it before you pop the hood.
          • You’ll open F12 tools and start poking around to learn.
          • When you learn something new, you want to see examples of how it’s used in the real world so you can build upon them.
          • If you need to understand the implementation details then someone in another department didn’t do their job.
          • You know you will be successful because you can have a FEEL for the whole system from the user’s perspective.

          Are you this person? Were you wired this way or did you learn it? If you teach this way AND it lines up with how your students learn, everyone will be successful.

            Conclusion

            Everyone is different and everyone learns differently. When teaching folks to code you need to be aware of not only their goals, but also their learning style. Be ware of their classical learning style AND the way they think about computers and technology.

            My personal internal bias sometimes has me asking “HOW DO YOU NOT WANT TO KNOW ABOUT THE TOASTER INTERNALS?!?!” But that not only doesn’t ship the product, it minimizes the way that others learn and what their educational goals are.

            I want to take apart the toaster. That’s OK. But someone else is more interested in getting the toast to make a BLT. And that’s OK.

            * Stock photo by WOCInTech Chat used under CC


            Sponsor: Big thanks to Telerik! They recently published a comprehensive whitepaper on The State of C#, discussing the history of C#, what’s new in C# 7 and whether C# is the top tech to know. Check it out!


            © 2016 Scott Hanselman. All rights reserved.
                 
            * Stock photo by WOCInTech Chat used under CC

            Maria on my team and I have been pairing (working in code and stuff together) occasionally in order to improve our coding and tech skills. We all have gaps and it's a good idea to go over the "digital fundamentals" every once in a way to make sure you've got things straight. (Follow up post on this topic tomorrow.)

            As we were white boarding and learning and alternating teaching each other (the best way to make sure you know a topic is to teach it to another person) I was getting the impression that, well, we weren't feeling each other's style.

            Now, before we get started, yes, this is a "there's two kinds of people in this world" post. But this isn't age, background, or gender related from what I can tell. I just think folks are wired a certain way.  Yes, this a post about generalities.

            Here's the idea. Just like there are kinesthetic learners and auditory learners and people who learn by repetition, in the computer world I think that some folks learn from the metal up and some folks learn from the glass back.

            Learning from Metal Up

            Computer Science instruction starts from the metal, most often. The computer's silicon is the metal. You start there and move up. You learn about CPUs, registers, you may learn Assembly or C, then move your way up over the years to a higher level language like Python or Java. Only then will you think about Web APIs and JSON.

            You don't learn anything about user interaction or user empathy. You don't learn about shipping updates or test driven development. You learn about algorithms and Turing. You build compilers and abstract syntax trees and frankly, you don't build anything useful from a human perspective. I wrote a file system driver in Minix. I created new languages and built parsers and lexers.

            • When your type cnn.com and press enter you can pretty much tell you from the address bar down to electrons what happens. AND YOU LOVE IT.
            • Your feel like you own the whole stack and you understand computers like your mechanic friends understand internal combustion engines.
            • You'll open the hood of a car and look around before you drive it.
            • You'll open up a decompiler and start poking around to learn.
            • When you learn something new, you want to open it up and see what makes it tick. You want to see how it relates to what you already know.
            • If you need to understand the implementation details then an abstraction is leaking.
            • You know you will be successful because you can have a FEEL for the whole system from the computer science perspective.

            Are you this person? Were you wired this way or did you learn it? If you teach this way AND it lines up with how your students learn, everyone will be successful.

            Learning from the Glass Back

            Learning to code instruction starts from the monitor, most often. Or even the user's eyeballs. What will they experience? Let's start with a web page and move deeper towards the backend from there.

            You draw user interfaces and talk about user stories and what it looks like on the screen. You know the CPU is there and how it works but CPU internals don't light you up. If you wanted to learn more you know it's out there on YouTube or Wikipedia. But right now you want to build an application for PEOPLE an the nuts and bolts are less important. 

            • When this person types cnn.com and presses enter they know what to expect and the intermediate steps are an implementation detail.
            • You feel like you own the whole experience and you understand people and what they want from the computer.
            • You want to drive a car around a while and get a feel for it before you pop the hood.
            • You'll open F12 tools and start poking around to learn.
            • When you learn something new, you want to see examples of how it's used in the real world so you can build upon them.
            • If you need to understand the implementation details then someone in another department didn't do their job.
            • You know you will be successful because you can have a FEEL for the whole system from the user's perspective.

            Are you this person? Were you wired this way or did you learn it? If you teach this way AND it lines up with how your students learn, everyone will be successful.

              Conclusion

              Everyone is different and everyone learns differently. When teaching folks to code you need to be aware of not only their goals, but also their learning style. Be ware of their classical learning style AND the way they think about computers and technology.

              My personal internal bias sometimes has me asking "HOW DO YOU NOT WANT TO KNOW ABOUT THE TOASTER INTERNALS?!?!" But that not only doesn't ship the product, it minimizes the way that others learn and what their educational goals are.

              I want to take apart the toaster. That's OK. But someone else is more interested in getting the toast to make a BLT. And that's OK.

              * Stock photo by WOCInTech Chat used under CC


              Sponsor: Big thanks to Telerik! They recently published a comprehensive whitepaper on The State of C#, discussing the history of C#, what’s new in C# 7 and whether C# is the top tech to know. Check it out!


              © 2016 Scott Hanselman. All rights reserved.