Scott Hanselman

Relationship Hacks - Mindfulness - Don't live your life by default

March 9, '17 Comments [22] Posted in Musings
Sponsored By

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 up 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!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Relationship Hacks: An Allowance System for Adults

March 7, '17 Comments [66] Posted in Musings
Sponsored By

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 said 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!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

NXTA - NexTech Africa Conference - Day 1 perspectives

February 4, '17 Comments [11] Posted in Africa | Musings
Sponsored By

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.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

VIDEO: How to get started with technical public speaking!

January 26, '17 Comments [12] Posted in Musings
Sponsored By

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!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

What .NET Developers ought to know to start in 2017

January 11, '17 Comments [76] Posted in Musings
Sponsored By

.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 thought 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. On Mac it usually ends up in /usr/local/share. Also .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 /l"  
      • Assembly Loading and Binding - In complex apps you can get into interesting scenarios around how Assemblies are loaded from disk
      • 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 worth looking at.
      • Reactive Extensions - "The Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators." You can create sophisticated event-based programs that work cleanly and asynchronously by applying LINQ-style operators to data streams.

      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!

      About Scott

      Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

      facebook twitter subscribe
      About   Newsletter
      Sponsored By
      Hosting By
      Dedicated Windows Server Hosting by SherWeb
      Page 1 of 137 in the Musings category Next Page

      Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.