Monday, December 10, 2018

Networking Part III: Networking 101

This is part 3 of a series of networking posts:

If you know nothing or very little about networking, here are the basics! I am coming from a developer background and needed to learn this, so wanted to share from my perspective a 101 level breakdown of networking.

What is a computer network?
A computer network is 2 or more computers that communicate with each other via some medium-- this medium can be anything (radio waves, wires, infrared, optical fibers, or others!).

A network interface card (NIC) allows you to connect to a computer network.

What is a Network Interface Card (NIC)?

A NIC is a piece of hardware that connects to a motherboard, and will connect the computer to a network.  The CPU will hand it data.  The NIC takes the data from the computer, translates the CPU's parallel data into a linear form that can be sent via cables, and vice versa from data coming from the cables into the CPU.  A NICs can connect to several different networks at the same time and manage which data goes to which network.

Network Interface Cards have a lot of other names, but they are are describing the same piece of hardware:

  • Network Interface Controller (NIC)
  • Network Card
  • Network Adapter
  • Network Adapter Card (NAC)
  • LAN Card
  • LAN Adapter
  • Physical Network Interface
Each Network Interface Card (NIC) gets an IP addressed assigned to it, which is the identifier of that device.

What is an IP Address (IPv4)?
4 numbers (each between 0-255), separated by periods. The lowest IP address is and the highest is

What does binary have to do with IP addresses (IPv4)?
Each of these decimal numbers is called an octet (127, 16, 254, and 1 as shown below). There are 4 octets in an IP address.  Each octet contains 8 bits and can be represented in binary. Take note that there are 32 bits, as we will talk about this more in subnetting.

There is a network portion and a host portion of an IP address. There are different options for how much of a network/host ratio that you would like which depends on how many IP addresses you need to have available, we will talk more on this later.

The network portion identifies a group of devices.  The host portion is the individual device on that specific network.

  • You can have a zipcode 11111 and address 345 Cave Stone Road, you have identified one specific house.  If you go to another zip code 22222, there may be another yet different specific house at 345 Cave Stone Road.  The zip code is the network portion of an IP address.  The actual house's address is the host portion of an IP address.
The amount of the IP address that is network or host portion depends on the subnet mask...

What is a subnet mask (netmask)?
The subnet mask separates the network and host portions of an IP address an determines how many total addresses we have internally to use (# of host addresses).

Subnet mask (netmask) shorthand:

  1. We have an IP address of (or any other IP address, the value of this is irrelevant and just used as an example)
  2. Let's say our subnet mask is
  3. In binary, this would be converted to 11111111 11111111 11111111 00000000
  4. In all IP addresses, we have 32 bits that could be changed, because there are 4 sets of 8 bits, as seen above. 
  5. Wherever there is a 1 in our subnet mask in binary, this is our network portion.
  6. This means that the network portion is the first 24 bits
  7. Using CIDR (Classless Inter-Domain Routing), we could say this is a /24 length of the network prefix. 
  8. We can now write this IP address and subnet mask as
If we were to look at the photo below where the IP address is, let's solve for the CIDR subnet value. Remember that in 255 in decimal is 11111111 in binary and 0 is 0.  If we have as our subnet, this converts to 11111111 00000000 00000000 00000000.  The network portion is 8 bits.  So it would be /8.  What are the other two IP addresses CIDR values? See below the photo for the solution. 
  • For the IP address, our subnet is /8
  • For the IP address, our subnet is /16
  • For the IP address, our subnet is /24
How does this relate to how many IP addresses I get?
Let's go through a scenario where my network is

  1. If my subnet is /24, then I have 24 bits as my network portion and 8 bits that are my host portion. 
  2. 8 bits can hold 2^8 values. 
  3. There are 256 total addresses in my network. 
  4. To get the total usable addresses you subtract 2 because there are 2 "special" addresses that cannot be used.  To be specific in this example: cannot be used because it is the zero address and cannot be used because it is the broadcast address. 
    1. The zero address cannot be used because it is used to specify a network without specifying a host.  The broadcast address is to s used to broadcast a message to every host on a network.
  5. For a subnet of /24, the total usable addresses now becomes 254.
Let's go through a scenario where my network is
  1. If my subnet is /8, then I have 8 bits as my network portion and 24 bits that are my host portion. 
  2. 24 bits can hold 2^24 values. 
  3. There are 16,777,216 total addresses in my network. 
  4. To get the total usable addresses you subtract 2 because there are 2 "special" addresses that cannot be used.  To be specific in this example: cannot be used because it is the zero address and cannot be used because it is the broadcast address. 
    1. The zero address cannot be used because it is used to specify a network without specifying a host.  The broadcast address is to s used to broadcast a message to every host on a network.
  5. For a subnet of /8, the total usable addresses now becomes 16,777,214.
The higher the number for your subnet, the less IP addresses you get.  A /24 will have much less IP addresses than a /8, as seen above.

What if the subnet isn't a nice number like 255 or 0?
If you network IP address is: 

We have 23 bits in the network and 9 bits in the host.  
/23 in binary is (twenty-three 1's):
11111111 11111111 11111110 00000000

/23 in decimal is:

  1. If my subnet is /23, then I have 23 bits as my network portion and 9 bits that are my host portion. 
  2. 9 bits can hold 2^9 values. 
  3. There are 512 total addresses in my network, minus the 2 "special" addresses you get 510 as the total usable addresses. 
  4. To get the values of the usable addresses, see below:
    • converted to binary is below.  The first 23 digits (due to /23 subnet) are the network and the last 9 are the network:
      ‭11010010‬ 00001010 00001010 00000000
      network portion                   host portion
      "The unusable zero address is where the host portion (yellow highlight) is all 0's.  The unusable broadcast address is where the host portion (yellow highlight) is all 1's."

      11010010‬ 00001010 00001010 00000000 = host address =
      ‭11010010‬ 00001010 00001011 11111111 =broadcast address =
    • To be specific in this example: cannot be used because it is the zero address and cannot be used because it is the broadcast address. 

Here are some more subnets and examples:

Big Picture: What is IPv4 vs. IPv6?
IPv4 stands for Internet Protocol version 4 and what we have been talking about above in this article (everything above related to IPv4 only).  IPv4 uses 32 bits for its Internet addresses (which we mentioned), and can allow for 2^32 IP addresses total (4.29 billion).  However, all of these 4.29 billion are assigned and we have run out.  IPv6 is the sixth revision to the Internet Protocol and the successor to IPv4, and it is 128-bit addresses so 2^128 addresses (a lot more than 4.29 billion).  IPv6 is based on the hexadecimal system.

Why don't we all just go do IPv6 now?
Only a small fraction of the web has switched over to the new protocol, Azure and other cloud providers are still mostly utilizing IPv4.  Also, exchanging data between IPv4 and IPv6 requires special gateways which makes it hard to support only partially moving over to the new protocol, and most companies have legacy systems, software, and networking-- so it could be awhile.

Checkout these news articles to see the progress so far:

What is a reserved IP address?
There are some IP addresses that you cannot use because they are not allowed to be used by the Internet Engineering Task Force (IETF) and the Internet Assigned Numbers Authority (IANA).  See a list of reserved IP addresses and what they are each set is reserved for on Wikipedia here.

Recommended Networking PluralSight Course:
If you do happen to own a PluralSight subscription about 6 hours, this course is very in depth and well made:

Networking Part II: Hexadecimal

This is part 2 of a series of networking posts:

Binary is base 2, where base 2 means that and can only hold the values of 0 or 1 for a digit.

Hexadecimal is base 16. Base 16 means that up to 16 different values in any given placeholder. The values 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, and F are the potential values for a digit in hexadecimal. Notice the pattern below between binary, decimal, and hexadecimal.


The benefit of hexadecimal is that 4 binary bits can always be expressed in 1 hexadecimal value. Hexadecimal makes it easier to read and write large binary numbers.

Where is hexadecimal used?

  • MAC addresses (on your router!)
  • Error codes on Windows blue screens in the older days (STOP codes specifically)
  • HTML color codes (#33CCFF)
Fun fact: Four bits is called a nibble.

If you want to see a cool article I like a lot that has more info, go here!

Tuesday, December 4, 2018

Wednesday, April 25, 2018

A year at Microsoft & what I've been up to & travel tips

I crossed my one-year mark at Microsoft a couple of months ago, and it's been a fun time! 

I work as a Premier Developer Consultant, so we typically take on short-term work where we help a customer out with something small like a proof of concept, code review, or workshop on specific technologies we choose to specialize in.  We can choose any technology to specialize in (keeping in mind, certain technologies are more in demand than others and we do have to spend a certain amount of hours a year working with customers). I ended up choosing Blockchain, Containers, Azure App Services, and VSTS/DevOps as my main areas.

I swear I haven't disappeared, I have been doing some posts to MSDN and you can see my blog posts here: (some of these are replicated on my blog, some are not!)

I created on a full tutorial for Azure App Services.  This is a step by step, with screenshots, tutorial of how to create a Web App, API App, and Azure SQL DB in Azure and to deploy each piece.. plus how to do the CI/CD (Build and Release) from VSTS to your Azure resources (full blog post on this to come soon):

Also really cool, Michael Crump helped bring some folk to the ToDoList tutorial by posting on his blog Azure Tips and Tricks: Thanks Michael!!!

And lastly, I worked on a Blockchain project with my colleague here, if you want to see a full step by step on setting up a Blockchain app that keeps track of Wikipedia changes go here:

Now, talking about travel: I've been to so many places as a traveling Consultant, and eaten as much food as I could get my grubby hands on in each city.  This year, for onsite work visits I have been to: Alpharetta, Las Colinas, Minneapolis, Philly, Phoenix, Seattle, Burbank, NYC, DC, Ottawa, Miami, Austin, Orlando, Lake Mary, and Portland. 

Travel tips:

  • If you hate cold, buy an electrically heated jacket! Mine is called: "Ororo Heated Jacket" and it was from Amazon, they have it for both men and women. TSA is okay with it as long as you tell them ahead of time what it is or can explain it if they ask about it.. wired jackets, I'm sure, look a little scary under the scanner. 
  • If you hate dealing with luggage, buy an Underseater.  I bought this one, it fits under every seat (aisle, middle, window) on Southwest, United, Delta, and American Airlines as long as you only pack it 80% full.  I can get 2 laptops (MSI gaming + surface), tablet, 4 days of clothes, and all toiletries into this: 
  • Airline rewards are a joke.  You'll be lucky if you can take 20 trips and get 1 free one for vacation out of it, buying airline tickets from work are severely discounted (half what you pay for personal flights), and don't add up to much.  Better seats are kinda worth it, maybe, if you need to bring luggage.  If you get an "underseater" bag like mentioned above, you never need to worry about overhead space anyways.  You are probably better off taking different airlines to get non-stop flights than trying to get rewards out of one airline taking you a long roundabout way.  I think my time is worth more than their terrible rewards points that net very little. 
  • Renting a car is a pain, it takes 30 minutes sometimes to take a tram/walk from the airport gate to the rental car center.  Take uber/lyft/cabs to save time. 
  • Hotel rewards are baller, and my goodness you can rack up points fast. If you get the credit card too, oh my gosh, hello free hotels for every vacation!
  • Hotel points go on sale and you can catch them on Slickdeals sometimes.  These are worth buying when you can get them 30% off.  You can also use hotel points to get hotels that are priced at a premium due to an event because while the $ amount goes up, the points value always stays the same.  
  • Marriott has the best Wi-Fi speeds, period, hands down.  I've gotten so many Marriotts (ranged from low budget to nicer ones) with 10-80mb/s down and up speeds and played DOTA 2 on it happily on the free Wi-Fi, not even paying for the "good" Wi-Fi.  Hyatt's Wi-Fi sucks, forget playing games online you usually get .1-2mb/s up and down. Crowne Plaza Wi-Fi ain't bad. I don't know about Hilton, never really stay there, but I think that is the only chain that allows pets.  
  • Airport food sucks 95% of the time.  Same for the food in hotels. Local food tastes the best.  Chain food is the safest and least likely to mess up your stomach. 

Friday, August 4, 2017

70-534 Azure Certification Study Guide + Tips

Hi there!

I just passed my Azure cert 70-534 and wanted to share my study guide.  Please click here to see my guide. It is a 35 page long PDF. I basically took the outlined points from the official Azure exam outline and added in notes between them.  Most of the notes are copy pastes of relevant information from the Azure documentation.  The notes from the Azure documentation and outline from the Azure exam are current as of August 2017 -- so take note that if you are reading this a year out that some of the exam has probably changed. 

 Please also utilize the Measure Up 70-534 practice exam along with studying + doing things on Azure.

Notes after taking exam, I think that you should…
  • Know the difference between page and block blobs.
  • Know when to use A series, D series, DS series, G series, GS series VMs and approximate size/RAM
  • Know ARM templates very well and the pieces in it
  • Know a lot of Azure AD stuff
  • Know security stuff for DBs, VMs, other Azure resources etc.
  • Know on-premises & communicating with Azure
  • Know Traffic manager and CDNs very well
  • Know Federated Stuff
  • Know Azure Batch.
  • Know what Chef or Data Lakes or all these other technologies do at a basic level.

General Exam Observations
  • I had about 2 hours and 45 mins (I think, it was definitely between 2.5-3 hours) for the exam, 50-60 questions total
  • I had 4 cases + the rest were multiple choice (31 multiple choice)
  • There are a lot of stupid multi-part questions, usually if it's a 3 part answer each part is scored individually.
  • There are a good amount of "order the steps to do such task" with 3-5 steps in it, no idea how this is scored.
  • Small amount of Azure CLI / Portal / Powershell / C# specific questions, I think about 5 total.
  • I had about 1.5 hour to spare at the end, after obsessively slowly double checking everything. Might be unfair though, was a med student so I take exams extremely, extremely quickly. I did not feel any time rush at all. 

Monday, July 17, 2017

What do I do, how do I start? Guide to being a C# web developer.

Welcome to the “What do I do, how do I start?” relatively all encompassing guide to becoming a C# web developer.

If you want a copy of this from Google Drive that you can download, please go here.

These are very solid step by step directions. Use it as you wish and feel free to sub out whatever. I figured it is easier for someone in the industry to give advice having done it than for someone to try to guess what they need to do. This kinda pairs up with my C# study guide in another blog post.

Completing the entire guide will cost you $30 for a month subscription on one JavaScript website.. And everything else on here is all free applications and materials to learn.  You can sub out that JavaScript section for free materials too if you really want to do it all for free, but that site is just awesome and interactive and worth it.  

  • Everything without “optional” you really, really need to know to be a web developer. Note there are obviously other tracks you could do like Java etc., this is just a specific set of steps to get to a specific job as a “C# full stack web developer”.  I went in the order you should do everything, top down. A lot of getting an interview depends on on how well your resume is written, how well your cover letter is written, and what kinda of GPA/job experience (did you hold jobs for a long time? Did you have gaps between your jobs? etc.) you have and how consistent it is… also if you have a well written nice looking blog and if you have a GitHub with projects on it.  Boring generic resumes and cover letters get thrown in the trash.  You NEED to have a very powerful set of both.  A lot of getting a job will be your people skills, communication skills, ability to show your understanding, breadth & depth in certain topics, and how well you know all the technologies they listed on the posting. I believe getting a job is more dependent on your competition and not you individually.
  • I am biased in this guide and picked one option for technology / blog choice / IDEs.  It is just easier this way and I don’t want to explain all of the options out there, this is a quick start guide.  Also if I get questions from you, I can answer them because these are all things I have used / use currently.  Yes, you can use Wordpress or Java etc. instead.
  • Yes you can do Mobile, Machine Learning, Desktop, or whatever else instead. I just am not one of those developers and cannot write you a guide for that. I have no idea what you need to know to get those kinds of jobs. Just writing about the area I know about.

Open up accounts
  1. Open a Blogger account
    1. Install SyntaxHighlighter to your Blogger

Download software
  1. Download Notepad++

Learn HTML:
  1. Go to the following:
  2. Complete all of the Beginner tutorial section
  3. HW/Project: Create a sample website using Notepad++ about a Nintendo hero.  Save it as a .HTML page.  When you are viewing the file on your Windows Explorer, right click to see in a Browser to view as HTML and right click to Edit/View in Notepad++ to edit the HTML code.  As you change HTML code in Edit mode you can hit save, then refresh your Browser viewing the HTML page to see the changes.  
    1. Include a photo of the Nintendo hero, the name in bold, then a link from the hero’s name to any Nintendo hero guide, 3 paragraphs with random text, and a bulleted list of your favorite items/powerups/whatever to get on this hero.
  4. Complete all of the Intermediate tutorial section
  5. HW/Project: From your previous HTML page, put your paragraphs inside of div tags and give them an ID or a class name. Make a short blog post about something you learned about in HTML, a screenshot of your HTML page, and use the syntax highlighter to post your HTML code online.
  6. Complete all of the Advanced tutorial section
  7. HW/Project: Make a blog post about how to target HTML to different versions of a browser and a few examples of when/why this would be very useful.  

Learn CSS:
  1. Complete all of the Beginner tutorial section
  2. HW/Project: Take that same HTML page you were working on before. Add style tags “<style>” inside of your “<head>” tag and add some global CSS to change the background color of the page.  Add some inline CSS to change the colors of each paragraph to be different.
  3. Complete all of the Intermediate tutorial section
  4. HW/Project: Add the same class selector to each div holding a paragraph.  Also give each div a unique ID.  Add a background image of some pattern you can find on Google images.  
  5. Complete all of the Advanced tutorial section (these are not as commonly used but you need to know the extent of what CSS can do so make sure you read through all of it and try a few things out in your sample html page)

Learn Twitter Bootstrap:
  1. Go to the following:
  2. Use this as a reference:
  3. Learn about Responsive Web design:
  4. Build yourself a responsive webpage using Bootstrap, with just HTML and CSS.  You should be able to shrink down your page to mobile size and it still looks decent.

Download software
  1. Download Visual Studio Code.  This is an IDE: is for front end code only (HTML, CSS, and JavaScript) AKA client side. You would use this for making front end only projects or if you were to break your project up into a front or back end portion.  Code is a much more lightweight program and often more liked that the full Visual Studio, it is much quicker.

Learn JavaScript:
    1. It used to be free long ago but it’s killer good site, it’s put out by PluralSight.  It is $30 for a month. I would recommend paying this once and completing the full JavaScript course in a month. It is worthwhile and the only thing on my guide that will cost any money. Complete the 5 JavaScript language courses and the 2 jQuery courses in one month and cancel your subscription.

How to use Google Debugger
  1. Understand HTML and CSS in the Chrome Debugger:
  2. More HTML and CSS Chrome Debugger stuff:
  3. Go through this tutorial:

Download software
  1. Download Visual Studio Community 2017. This can hold all of your code front and back end (HTML, CSS, JavaScript, C#, additonal frameworks, unit tests, connections to databases, config files, everything..).  
  2. Download Fiddler

Open up accounts
  1. Open a Github account
  1. Open a Stackoverflow account

Learn C#:
  1. Go to the following:
  2. Go through all the exercises.
  3. Go to the following, you need to know all of these topics in order to do well long term with programming. It will be hard to fully understand until you start working, but conceptionally get as strong of a grasp as you can, then come back to this site and go over it again and again in your first year of dev. This site is very crucial and everything on it is important:
  4. Go through other problems on this site:
  5. Optional, take a free Coursera course:
  6. Build a simple calculator with addition / subtraction / divison / multiplication and no order of operations. Then try it with order of operations.
  7. Do the first 10 problems on Project Euler:
  8. Build yourself a small app that takes in multiple inputs from a user, utilizes a list internally, then will read off to the user from the list what numbers they entered.
  9. Build a simple 2 player tic tac toe program. UI can just be console printing out ASCII characters. For ex.
  10. Try to build an unbeatable tic tac toe program (1 player).

Learn REST APIs:
  1. Go through this site and video:

Learn LINQ:

Learn Unit Testing:

Design Patterns:
Learn SOLID Principles:


Learn Gang of Four (super optional, nice to have):

Learn SQL:
  1. Know these charts (this always comes up in interview + is important to understand):

Learn Agile:
  1. Look at this page, read all of the sections.. The links are in blue on the right side of the page:

Learn SDLC (Software Development Lifecycle):
  1. Watch this video:
  2. Learn how software is made:

Interview Practice Questions
Study ALL of these. If you don’t know anything about any of the questions, go study all of it until you really understand it. Not joking, most of these will show up in an actual interview. Do not just memorize stuff, use it as your guide to learn all about these languages.

Read about the following so you know what they are
By this I mean spend 1-2 hours and summarize 3-4 sentences about each topics so you can at least intelligently speak about it if you hear it in an interview, on the job, talking with other developers, etc.. and so you have a background of what is upcoming and what development was like before. If any of these technologies are listed on the job description then definitely dig into it much more!!!
  • General/new stuff: ASP Core, Test driven development, Azure (web/worker roles, general technology offerings, how the cloud works), version-control like VSTS (Visual Studio Team Services) and TFS (Team Foundation Server), Node JS, Angular JS, React JS, Entity Framework Content Management System (CMS, like SiteFinity or SiteCore), Dependency Injection, Automated Testing, Performance Testing, know all the roles in a software team (Business Analyst, Quality Assurance Analyst, Project Manager, Database Administrator, Test Engineer)
  • Legacy / “old” stuff: WebForms, Access (the database), VB, VB.NET, F#,   

THESE MATTER!!! This will determine whether or not you get an interview. If you are applying to small places and not getting an interview, then work on making these better.
  • Build a strong resume
    • Explain on every job what the company does and what your role was as the first sentence
    • Explain why your role was important and what you brought to the table
    • Highlight your accomplishments
    • Explain specific technologies / etc what you worked with (very industry specific and varies a lot depending on what kind of job it was)
    • Do not make the text eensy weensy
    • Get a good structure/format for your resume
    • Put the months and years for everything
    • Do not add colors or crazy designs. Clean, simple, black text, white backgrounds. People print resumes. People don’t want to run out of ink printing resumes.
  • Build a strong cover letter
    • Write about why you care about working at this company at this position
    • Write about why pick you
    • Write about solid things and steps you have taken to be competent
    • Write about your passion
    • Thank them for their time and be very passionaite and positive about the whole process

Practice Interview Skills

  • Confidence
  • It’s good to say you don’t know and be honest when you don’t
  • Questions are open ended, if you don’t know the answer then talk about what you do know about the technology
  • Never interrupt the interviewer
  • Explain things with a summary first, then dive deeper into what you know. Don’t go off on tangents. Learn to be able to explain anything well to a 5 year old.. If you can’t do that you aren’t explaining it well enough. You should always be able to tell a non-technical person what you are doing at a high level so they understand what is going on
  • Always ask questions at the end about things that were said during the interview
  • Always ask questions about the job in general so you understand exactly what you will be getting into and what it will be like to work for a certain company