Subscribe: Chris Pietschmann - crpietschmann
http://pietschsoft.com/syndication.axd?author=crpietschmann
Added By: Feedage Forager Feedage Grade B rated
Language: English
Tags:
build  code  exam  failure  javascript  learn  make  microsoft  new  people  software  success  time  unit  var  write 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: Chris Pietschmann - crpietschmann

Chris Pietschmann - crpietschmann



husband, father, hacker, entrepreneur, futurist, innovator, autodidact



 



Awarded 2017 Microsoft MVP - Azure

Sun, 01 Jan 2017 11:39:00 -0500

(image) I received notice this morning that I have been awarded Microsoft MVP in the Azure expertise category. It's been a few years since I wasn't renewed as a Bing Maps MVP, and it feels great to be recognized for the work I've been doing with BuildAzure.com, the Milwaukee Azure group, and other online and offline community contributions. This is certainly a great way to ring in the new year.

Happy New Year! And, congratulations to all other renewed and newly awarded MVPs!

If you are not familiar with the Microsoft MVP Program, you can find information about it here: http://mvp.support.microsoft.com

 

P.S. I first posted this saying "2016". Oh boy, it's so easy to type/write the old yer at the beginning of a new year. Happy new year!!




Software is Written FOR PEOPLE

Fri, 09 Sep 2016 17:54:00 -0500

To most software developers it can seem extremely obvious that software is written for computers. After all it runs on the computer and tells the computer how / what to do. But this isn't the entirety of the purpose of software. Through and through, software is really written / built for PEOPLE.

There is a movement in computer programming called "Clean Code" that pushes the idea that software is written for other developers. Clean Code is human readable and as such is more easily maintained over time. All software is updated, fixed and changed over time, and it's useless if it needs to be completely rewritten from scratch anytime a change or bug fix is needed. So with Clean Code is move the obvious point to say that software code is written for not just computers to run, but also for developers to be able to read and the modify more easily.

As much as software code is written for computers and developers there is one audience that's ultimately more important: the USER. Without users there is not software in the first place. In order to write good software these three audiences need to be not only kept in mind but embraced for all their input and consideration. If a user can't use the software then it doesn't matter how easily maintainable by a developer or how well it executes on a computer.

All in all, the entire purpose for software is PEOPLE. Software almost has nothing to do with computers. Computers are only one of the many tools needed for PEOPLE to get work done. Without PEOPLE (users and developers alike) there is no software.

You must realize the truth, Software is for PEOPLE!

Software Developers and Engineers need to embrace the thing many of them see as their greatest deficiency and weakness. Don't cut yourself short by saying, "I'm not good with people." If you're a developer then you've already spent ample time getting good at writing code. It's also possible you've compromised your ability to spend enough time improving you interpersonal skills.

Don't cut yourself short and forget about the people!

You don't have to go to parties all the time or other things many people likely urge you to do. All you have to do is communicate and embrace the input of others. As unintuitive as it sounds, when you improve your interpersonal skills, you will improve your ability to write / build better software.

Never forget, without people there is no software.

Software is so ingrained in society today. It affects all our lives. Software runs the world! However, if it's built for computers instead of people then there's no point to it. Computers are a tools, and software is the means to make the tool work for people, help people, to change the world!

Go make a dent in the universe by building truly great software, made by people, for people.




Imposter Syndrome is Fake

Sat, 23 Jul 2016 09:09:00 -0500

Ok, maybe the title of this post is a little extreme. However, let me explain what I mean. Really, Imposter Syndrome is fake. It's just something you do to yourself. Think about it.

Make a list of why you think you're inferior. Why are you an Imposter?

Go ahead write down a list or think of it in your head.

Ok, now that you have a list...

Every reason you can come up with of why you're an imposter is based on comparing yourself to someone else. And, to make it worse you aren't comparing yourself to the whole person. You're comparing yourself to all the best parts of that one person, or group of people. You need to remember, they have failures too, and they don't know everything. No on can know "everything." Really, think about it!

Since Imposter Syndrome is Fake, you can eliminate it. Just stop comparing yourself to others. It really is that simple.

Now, instead, come up with a list of reason your better than your past self. Make a list of your accomplishments; of how far you've come from where you were.

Look at that list of your self comparison. Doesn't it look awesome!?

Ok, now go do something, anything you want. And, stop holding yourself back!




Study Guide for 70-480 Programming HTML5, JavaScript, CSS3 Certification Exam

Mon, 09 May 2016 17:15:00 -0500

There are many benefits to getting certified in a given technology, as it helps to show / prove your expertise. While there are many certifications for various technologies, there are not very many available to get certified win HTML5, JavaScript, and CSS3 web technologies. The Microsoft 70-480 exam is a really good exam to get certified as a Microsoft Specialist: Programming in HTML5 with JavaScript and CSS3. Exam Target Audience The target audience of the Microsoft Specialist: Programming in HTML5 with JavaScript and CSS3 (exam 70-480) certification is any Web Developer that uses HTML5, JavaScript and CSS3. While the certification exam is offered by Microsoft to compliment the larger MCSD: Web Developer certification with ASP.NET, this exam doesn't require any Microsoft technologies as it covers standard web technologies. Skills Measured Here's a high level breakdown of the exam objectives: Implement and manipulate document structures and objects (24%) Implement program flow (25%) Access and secure data (26%) Use CSS3 in applications (25%) Note: The percentage next to each is the approximate break out of how much of the exam focuses on each objective area. As you can see it's pretty evenly distributed across the 4 areas. The full exam objectives are listed on the office page for the 70-480 Programming in HTML5 with JavaScript and CSS3 exam. Free Video Courses / Training There are a number of video training courses available online that cover the topics on this exam. However, the courses available over at the Microsoft Virtual Academy are completely FREE, and they are targeted towards this specific exam. HTML5 & CSS3 Fundamentals: Developing for Absolute Beginners from Microsoft Virtual Academy JavaScript Fundamentals for Absolute Beginners from Microsoft Virtual Academy Developing in HTML5 with JavaScript and CSS3 Jump Start from Microsoft Virtual Academy Adding Style with CSS from Microsoft Virtual Academy Introduction to jQuery from Microsoft Virtual Academy Books There are many, many books available on the topics of HTML5, JavaScript, and CSS3. However, to better prepare for this certification exam, the following books are especially useful as they are targeted towards preparing for this specific exam. Training Guide Programming in HTML5 with JavaScript and CSS3 (MCSD) from Microsoft Press Exam Ref 70-480 Programming in HTML5 with JavaScript and CSS3 (MCSD) from Microsoft Press These are both excellent books to use for studying. If you are looking for a more condensed book then the Exam Ref book is what you're looking for as it's a little more brief and to the point on the exam objectives. If you need more training and want a more thorough review that guide you through things more, then the Training Guide is what you're looking for. Practice Tests / Exams One of the most important parts of studying for a certification exam is to take a practice test of some sort that mimics the real exam experience. This will allow you to both get familiar with the overall questions style, as well as get a view of how ready for the real exam you are. Taking a practice exam will give you a really good idea of the areas you need to study further before taking the real exam. Keep taking the practice exam questions, reviewing wrong answers, studying related material, and repeat the process until you feel confident you are ready while also scoring 100% on the practice test questions. Note: Remember to try your best not to memorize the answers, but rather learn the patterns to look for in determining and remembering the correct answers. Play Time When learning something new or just brushing up your expertise, there's no better method to learn than to just play around. Come up with a sample application or two and just build it out. Also, make sure you build it out utilizing as much material and topics on the exam as possible. This play time will really help drive in the material as you will make mistakes and learn from them. This simulates on the jo[...]



On Being an Expert

Tue, 03 May 2016 08:49:00 -0500

There are many definitions of what it means to be an expert. Everyone likes to be seen as an expert, but many don't feel worthy of the title. This feeling of being unworthy relates to the "Imposter Syndrome" where an individual feels inferior because they constantly compare their single self to everyone else's combined selves. While it's really not possible for everyone to be "THE" expert, it's an absolute constant that everyone is "AN" expert is some fashion.

Are you "AN" expert? Yes.
Am I "AN" expert? Yes.
Are either of us "THE" expert? No.

Is it possible to be "AN" expert in everything? No.
Is it possible to be "AN" expert in a single topic? Yes.

Expert != Expert == Expert

Everyone is an expert in some area at some time, but not in all areas at all times. What this means is that any single person will always know at least a little more than someone else. It's likely that you'll rarely be "THE" expert in a given room of people, but there will be times that you are. Never be discouraged by this. Be confident in yourself, in your knowledge, and in your abilities. If you have knowledge to contribute and wisdom to part unto other, then do it. If you can learn from others, then do it. Don't let the perceived "expertness" of yourself or other hold back the potential for progress and learning.

An expert knows when to go and when to stop. Be that expert. Remain humble.




My Top 11 Business Tips

Sat, 30 Apr 2016 11:56:00 -0500

I have quite a bit of experience in both failing and succeeding in my career, from working as an employee to being an entrepreneur. If you follow my blog you may not know this as I haven't really blogged about it. In quick summary: Back in 2007 I quite my day job and went all in on a side project I was working on to build a product to sell with Simplovation LLC. The product didn't sell quite like I had planned, so I had to get consulting work. I was a freelance consultant for quite a few years overall. In 2009 the ball got rolling on another startup for me that was kicked off in 2010, Carto LLC. In 2012, business wasn't as I had hoped so I started doing contract work full time again. In 2014 I went the employee route to get more stability after 7.5 years of being independent. This was an extremely tough 7.5 years, very straining on my wife and kids, and very financially stressful. Currently, I'm employed as a Solutions Architect with a specialization in Microsoft Azure. Plus, I still have more side projects (Simplovation, Build Azure, Build HoloLens, Open Source, and many more!) than I have time to work on. Given the opportunity to redo past experience I wouldn't do anything different. I'm a serial entrepreneur. Building things in ingrained in who I am. I was extremely lucky to be able to have taken the leap to be independent and see where my various business ventures and experiments would take me. Today, I'm not as big of a risk taker than I used to be. This isn't because of the tough times, but rather because I now have kids and a family to support. I must be more strategic and careful with the chances I take. My passions are learning, building and sharing. This is likely evident to many who have been following my blog for the past however many years. When I learn something technical, I enjoy sharing it. Since I've never really blogged about starting a business I thought I would share some tips I've learned over the years. Specialization is a required. This is how to differentiate yourself from everyone else. Anyone can build software, but how many have deep expertise in a specific technology or industry? Selling is Hard. In fact, selling is harder than you think. Whether you're selling a product or just your consulting services, it is difficult to sell. To affectively sell, as an independent, you basically have 2 full time jobs. The first is to perform the services you're selling, the second is to be the salesman your business needs. Don't underestimate how important it is to sell yourself. Rarely do sales opportunities come to you, especially when first starting out. Promotion and Marketing are NOT Bragging. I used to feel that I shouldn't try to market myself and my business too much as that meant no being genuine. This is just an excuse of the fearful. You need to market yourself. Blogging helps, but participation on Stack Overflow, social media, forums, local user groups, conferences, etc. are all good ways to market your business. If people don't know you exist, they will never know to consider doing business with you. Offer something for FREE. Never be afraid to give something away for free. If you can offer someone value for nothing, then they'll come back to you and be more likely to pay you for even more value. Plus, offering something free like a Blog, Open Source project, or even a free consultation or product trial help get customers dependent on you. Once they're hooked, the'll likely stay with you for a while. I once had to give a client free usage of a Software as a Service product for an entire year so I wouldn't lose them, and they stayed and started paying after the year was up. Produce as much blog, video or other content as you can. The more content you produce the more value you will be able to provide. Whether it's Free or Paid content, it doesn't matter. You can't be of value if you don't produce. Plus, producing Free blog, video or other content will offer pr[...]



Image Editing Tools: Here's what I use

Sun, 24 Apr 2016 10:52:00 -0500

If you follow my blogs (here, BuildAzure.com, BuildHoloLens.com), Twitter (@crpietschmann, @BuildAzure, @BuildHoloLens) and Open Source project then you're familiar that I have a number of custom drawn images and screenshots that I author to go with various content I'm authoring. Something I've never posted on is what tools I use for editing / creating all these images. The reason I felt this would be worth posting is that I do NOT use Photoshop or any other professional tool. In fact I use FREE tools!

Here's the tools I use for various Operating Systems:

Paint.NET on Windows

When using Windows, I use the Paint.NET image editing tool. This is a completely FREE image editing application. It's simple, has TONS of features, and importantly is extremely easy to use! I've been using this app for over 10 years!

(image)

GIMP on Mac OSX

When using Mac OSX, I use the GIMP image editing tool. This is a completely FREE image editing application that is simple, has TONS of features, and importantly is extremely easy to use!

 (image)

How difficult is it switching between the two?

Yes, I use 2 different applications for image editing depending on the Operating System I am using when I need to edit / create / modify images, art and screenshots. This isn't as confusing as you might think. These 2 tools are very similar in the primary features they support. In addition, the UI's of both are fairly similar. This helps when switching between the two, but you will still need to figure out how to use each apps tools as there are some differences.

Free Image Editors FTW!




Announcing New BuildHoloLens.com Blog!

Sat, 09 Apr 2016 21:32:00 -0500

 (image)

With the recent release of the Microsoft HoloLens, I've decided to dig deep into HoloLens development. In an effort to continue in a similar fashion to what I'm already doing with BuildAzure.com, I've decided to create a dedicated site for all my Microsoft HoloLens content.

The latest addition to my learning, blogging, and sharing endeavors is the all new Build HoloLens blog located at http://BuildHoloLens.com. I have also created the new @BuildHoloLens Twitter account associated with the new blog as well.

Just as when I started BuildAzure.com last year, I will still continue to post here. I will just be posting all Microsoft HoloLens related content at http://BuildHoloLens.com, in addition to all Microsoft Azure content being posted over at http://BuildAzure.com.

If you're interested in content in those topic areas, please subscribe to those separate blogs. For all other randomness as usual and anything that doesn't fit my other blogs, you will still find it posted here at http://pietschsoft.com.




Milwaukee Azure Bootcamp - Apr 16, 2016

Sun, 13 Mar 2016 12:18:00 -0500

(image)

It's time for the 4th annual Global Azure Bootcamp, and this year it's coming to Milwaukee, WI on April 16, 2016. Whether you're already using Microsoft Azure, or are looking to learn and get started, then you'll likely be interested in this Free training event. It's a fully immersive, single day filled with presentations and hands on labs. Tables and Wifi will be provided, so do not forget to bring your laptops!

Sign up to attend here

This is a community events with local speakers presenting their Microsoft Azure expertise. I am co-organizing this event along with Scott Petersen, and the current speaker lineup represents 4 different firms from Wisconsin.

Space is limited and may fill up fast, so please go register if you'd like to attend. The event is Free, and lunch will be provided.




Follow You Own Path, Dreams and Passion

Wed, 02 Mar 2016 18:03:00 -0500

Many of us hear the negative insecurities and fears of others being projected towards us through the "you can't", or "that won't work" statements of negativity. These statements are rooted in these peoples own fears and insecurities. They are afraid of failure themselves, so they try to discourage you too. Don't listen to this advice from others. In fact, distance yourself from these people and find people who encourage you.

"Whether you think you can or you can't, you're right." - Henry Ford

In the pursuit of happiness, it is extremely important to follow your dreams, passions and find your own path to achieve the life you're after. Surround yourself with as many people that are positive towards your goals, and distance yourself from those who are constantly trying to bring you down.

This negativity that others try to push onto you is something that I refer to as "Poison." You need to eliminate the poison from your life. Just as poison kills the body, it also kills the mind.

If you want something, all you need to do is simply take a single step each day towards the end goal. There is no such thing as overnight success. All success is the culmination of tiny steps taken repeatedly over a long period of time. Just like climbing a mountain, the path to success is taken a single step at a time.

Find your passion and work to take a single step towards your goal every day. Follow your own path, and break away from the crowd that's perpetually poisoned by negative people.

You can succeed. You can reach your dreams. You just need to be willing to do what it takes to get there. Never give up, and remember to keep taking it one step at a time.




Never Give Up

Tue, 01 Mar 2016 05:45:00 -0500

There is a statement that is very prevalent in our culture that "you only have 1 shot" at success. This promotes the premise that any failure is futile. This couldn't be further from the truth. We learn from failure. Failure is inevitable on the path to success, and every single person who has ever succeeded has failed at some point. It's what you do with failure that defines your chances at future success.

I've blogged about failure on a couple occasions already, but it's importance can not be overstated. The true importance of failure on the path to success is not something that can be summed up in a single statement as simple as "You only got 1 shot." The truth is you have as many shots are you give yourself.

As Henry Ford once said, "Whether you think you can or you can't, you're right."

The only person holding you back from success is ultimately yourself. Every single time you fail is another opportunity to learn and to grow. It is extremely important that you reflect on failure and learn from it so you can take that failure and turn it into future success.

As Apple and Steve Jobs once said, "It's the people crazy enough to think they can change the world who do."

It's guaranteed that any successful person you look up to (Steve Jobs, Bill Gates, Elon Musk, Mark Zuckerberg, and on, and on) has experienced failure at some point in their careers. They never gave up. They never let that turn them away from their passions; from their dreams. They learned from that failure and used it for their advantage at some point in the future.

Here's a couple posts I've written on failure in the past:

Never give up!




Raspberry Pi 3 released, faster CPU, integrated Wifi

Mon, 29 Feb 2016 07:30:00 -0500

(image) It's only been a year since the Raspberry Pi 2 Model B was released, and to mark the 4th birthday of the Raspberry Pi a new Pi is being released today. The NEW Raspberry Pi 3 Model B! This new Pi offers a faster CPU at 1.2Ghz, along with integrated 802.11n Wireless LAN and Bluetooth 4.1 with Bluetooth LE.

Over the last few months I'd been wondering if a new Pi might come this year. After all, hardware keeps advancing so there's not much reason to stand still on RPi2 for long. I also didn't want to be spoiled by rumors, so I kept those thoughts to myself, with the possible comments on Twitter.

This morning I woke up, checked my feeds and found that the Raspberry Pi 3 is being released on this Leap Day of 2016.

Here's what's changed in Pi3 versus Pi2:

Pi 2Pi 3
900 Mhz quad-core ARM Cortex-A7 CPU 1.2 Ghz 64-bit quad-core ARMv8 CPU
1GB RAM 1GB RAM
no integrated Wifi 802.11n Wireless LAN
no integrated Bluetooth Bluetooth 4.0 w/ Bluetooth Low Energy (BLE)

Other than the above changes, the Raspberry Pi 3 Model B is basically the same as the Raspberry Pi 2 Model B. The Pi 3 is also completely backwards compatible with Raspberry Pi 1 and 2. The Pi 3 has the same form factor as the Pi2 and Pi2 Model B+.

Lastly, according to the Microsoft IoT Dev Center, the Windows 10 for IoT Core is supported on the Raspberry Pi 3!




Software is like Automobiles and has a lot to learn

Sat, 27 Feb 2016 11:17:00 -0500

Recently I watched the documentary "A Faster Horse" which is a story about the Ford Mustang and the creation of the new 2015 redesign for the 50th anniversary of the Mustang. There was a quote from Henry Ford mentioned that Simplicity, Reliability, and Affordability as keys to the success of building and selling an automobile. Watching this documentary really got me thinking about how similar the automobile industry is to the software industry. There must be some things the software industry can learn from the automobile industry; after all it is about 50 years older. You can not see the correlation immediately, so I'll explain what I mean. Simplicity Just as everyone should be able to just get in and drive, users of software should be able to get automatic productivity. This is something that the software industry has failed horribly at time and time again. So many legacy systems, many of which are very prevalent in the industry today, get simplicity wrong. But, what is Simplicity? Both automobiles and software can be extremely complex systems. However, the interface and certain key maintenance items need to be easy; they need to be "simple." A simple interface means the product is intuitive such that there doesn't need to be a huge amount of training required to use it. Simple maintenance means not requiring the user to remove the engine in order to change the oil or air filter. Certain items should be easily maintainable in a product. If a product (car, software, or otherwise) doesn't attain a certain level of simplicity then no one (NO ONE!) will want to use it. And, if they do use it, they may use it incorrectly. Incorrect use of a product can result in many bad problems or accidents. With cars, accidents from improper use can be deadly. Software run the worlds these days, and it too can have some very serious consequences if the people using it can't use if productively and/or effectively. Reliability While Simplicity can be hard, reliability can be just as hard to achieve. However, it is a bit easier to gauge how reliable a system is. Does the car work every time the key is turned? Whats the likelihood it won't start? How about the likelihood something else stops working? These concerns are just as equal with software. Some of the tools we use in software development to help with this are TDD / Unit Testing, Performance Testing and Monitoring. These tools help gauge metrics on software systems before they are called "finished" and released for use. These metrics area also used to make sure the system stays working tomorrows the same as today. Part of the Reliability concern are both Security and Fault Tolerance. Fault Tolerance is the concept of how many and which things can go wrong or break while still allowing the entire system to function. With a car this could be if you pop a tire, you have a spare you can put on. Or, the engine runs and car still "works" even if the air conditioning or headlights stop working. With software, this could be building a system that can handle 1 our of 2 servers going down without the system completely going down. Security is the concept that if the Reliability of the system falters, the product will not become unsafe. With a car, this could be how likely the drive could lose control and crash the car if something goes wrong. With software, security is generally a little less life threatening, but in some industries it's not. Affordability How affordable is it? What's the longer term life expectancy of the product? What kind of ROI will the company get after investing in the development and/or implementation of the system? Sure, given enough time and money, anything can be built. However, almost no one is willing to spend $5 Million to implement a software s[...]



Find Your Passion

Sun, 14 Feb 2016 11:56:00 -0500

Much of success in life hinges on finding something you're passionate about. Sure, certain interests that turn into passions can be difficult to build a career around, but there's certainly ways to do it. No matter what your passion, you need to find it!

Once you find your passion, you need to figure out how you can exploit that to build a career. What ever your passion may be, you will be able to find something related to it that you can build a career around.

Building a successful career around a passion will be hard. it will take time. It will require you to never give up! It also may require you to make certain sacrifices, as nothing worthwhile pursuing comes without risk.

If you aren't really believing me that any passion can be turned into a career, then please think about the following examples:

  • If your ultimate passion is Fitness, then you could 1) open a gym, 2) become a personal fitness coach, 3) write books, 4) design fitness equipment
  • If your ultimate passion is Fishing, then you could 1) design lures to sell, 2) do guided fishing tours, 3) start or work at a sporting goods store
  • If your ultimate passion is Programming, then you could 1) start a freelance programming business, 2) build apps for iOS, Android, etc, 3) create training videos, 4) write books

The above examples are just a small limited few. In reality there is almost unlimited potential to build a career around any passion in life.

When you find your passion, you will find your direction. Once you have a direction, you will be able to set goals and then design plans to make those goals a reality.

Anyone can make plans and work towards them, but only those fueled by their passions truly have what it takes to persevere and obtain the success dreamed of.




Failure is the cost of Wisdom

Tue, 09 Feb 2016 17:39:00 -0500

Everyone fails at something before they succeed. There is so much more to learn from failure than success. I've posted before about Failure being greater success than success pointing out how valuable failure is for learning, growing and future success. A huge benefit of failing here and there over time is Wisdom. Wisdom comes from experience, and more experience can be gained from failure than success.

Sure success is great, but when you succeed all you learn is how to succeed under those singular circumstances. When you fail you have an opportunity to learn so much more, and grow so much more personally, professionally, what ever. In order to make the most out of failure you must be honest with yourself, accept criticism from others, and be humbled by the experience. By reflecting on what when well and what went poorly, you will gain an immense insight about why things ended the way they did.

Take those failures for all they are worth. Own them. Grow from them. Then, use what you've learned, the wisdom you've gained, and apply it later to succeed greater than you could have if you never acquired that wisdom.

Embrace failure. Let it earn you the wisdom to succeed.




TDD: Testable is most important

Thu, 04 Feb 2016 18:55:00 -0500

Test Driven Development (TDD) is great and it really helps you build better, higher quality systems. Unit Tests FTW! However, when TDD meets the real world, there is a clash and many times developers just don't write unit tests. This is bad, but it can be better if the right steps are taken. Writing code that is testable is the key; whether you write the unit tests now or later. Testability FTW!

Testability is when you write code using the same best practices (short methods, use interfaces, clean code, etc.) that lend to being able to write unit tests to get good code coverage. While it can take quite a bit of practice to be able to design class / interface structures and method signatures that are more easily unit testable, it is a key to building more maintainable systems in the long run. Refactoring code to allow for testability is hard; it can be really hard. As long as your code is unit testable in the first place you can always write unit tests at any time in the future.

Once you've written nice, testable code, you can write unit tests with good code coverage at any time. Many developers sacrifice those unit tests to meet client / user deadlines and eventually get to production. Instead of creating a huge pile of technical debt that needs to be refactored in addition to have unit tests written, just make it testable in the first place. Technical debt is bad, and writing non-testable systems will kill the code and make it a bad kind of legacy before you even ship to production. Always strive to write code that is unit testable, so you can always go back and add unit tests at any time.

Now that you have unit testable code written and likely deployed to production, you will still have bugs reported from either UAT testing or PROD users. When a bug comes in, you'll be able to easily write a unit test to expose the bug since you wrote the code to be unit testable in the first place. Then you can fix the bug and verify that the bug never occurs again. You can even take a few minutes to add more unit tests while you're in there to increase the code coverage percentage to help with future testing, maintenance and bug fixes.

Testable code is the most important part of Test Driven Development (TDD). Unit Test help verify bugs are fixed and future changes don't break existing functionality, but in order for this all to work properly the code must first be written in a manner that lends itself to being testable.

Go write testable code. Always!




Be True to Yourself, First

Sat, 30 Jan 2016 11:14:00 -0500

There are many times in life that we get nudged in this direction or that so that we make other people happy by doing or saying what's necessary to get to that goal. We all need people to work for, be friends with, get along with that do require a little extra effort at times to keep them happy. This is a necessity of life, however, if you aren't true to yourself then you will eventually lose interested and fade off.

Being true to yourself is being honest with yourself at the most basic level. Everyone makes promises to themselves to get projects done or meet certain goals. Being true to yourself is being honest about what you need to do, how you've done and what you need to do going forward. We all falter and struggle at times. We will all fail at something once in a while. While the consequences of these failures can be tough from others; it is often our own personal disappointment that can be the toughest. It is important to be honest with yourself and take responsibility for that failure.

I've blogged about failure being greater success than success in the past. The most important thing of failure is to learn from it; learn what to do better next time. If you don't learn, then you tried and failed both for no reason. Why just keep repeating the same thing over and over without success? You may not "succeed" depending on your definition for "success" every time, but eventually you will meet that "success" definition. It feels awesome when you finally do!

The next important thing whether you succeed or fail is to be true to yourself. You need to be happy with yourself, with who you are, and who you are becoming in life.

What ever you do, first be true to yourself. The honesty and integrity that results will help impress others and help you earn the credibility to get the chances necessary to meet your goals; what ever those goals are.

Remember, Be True to Yourself! First.




Do your best and Own it

Tue, 19 Jan 2016 17:32:00 -0500

A couple years ago I posted some thoughts on "You are responsible for YOU" pointing out that you much take control for your own actions. I've been thinking about this a bit recently and thought I would expand on that thought and add a bit. You can't merely be responsible for yourself and your actions, but you much also "Own it."

Own It

To "Own It" means to not just take the responsibility for yourself and to start action, but to also take responsibility for the consequences of your actions. Whether the consequences are good or bad, you must take responsibility and just Own It.

Something good happens; Own it.

Something bad happens; Own it.

Once you own it, you will stop blaming others for your failures; for your misfortune; for your luck. When you own it, you start taking full responsibility for your actions and their outcomes. Owning it grants you the power to truly control what you do and the path you take as a result of the consequences of your actions.

Just Own It!

Do Your Best

Theres another aspect to the whole "Own it" idea, and that is to "Do Your Best." I've borrowed this a bit from what I've learned from Tony Horton.

Tony Horton says: "Do your best, and forget the rest."

There's a lot to learn from such a simple phrase. The lessons learned from my own personal health and fitness journey with the help from Tony Horton, Beachbody and P90X / P90X3 have really taught me what it means to do my best. When you've done your best, you know there isn't anything more you could have done. Additionally, the next time you take a go at it, you just do your best again, but this time leveraging the improvements you've made from the last time to do better; even if it's just a little bit better.

The "forget the rest" part of that quote perhaps offers a bit more wisdom. There are so many times when people tend to keep comparing themselves to others; not just one other, but all others. When we compare ourselves to everyone else, there's a huge disconnect from how we see ourselves and how other individuals actually are. If you compare ALL others best parts to your own, you will certainly feel weak, little and inadequate. But, when you compare your individual self to your past self, you will certainly see strength, power and capability.




Beachbody On Demand - Netflix of Exercise

Sat, 09 Jan 2016 12:08:00 -0500

(image)

Personally, I've been a Beachbody customer since 2010 when I originally began my own personal fitness and health journey. I first started with P90X and then purchased the newer P90X3 from Beachbody and Tony Horton. For a long time the only way to do Beachbody workouts were to put in a DVD (in your TV, Computer or portable DVD player); while this works just fine there are a few things that can go wrong. What if the DVDs get scratched? or Lost? Fortunately, Beachbody has innovated recently with the all new Beachbody On Demand streaming service. This service is like Netflix or Amazon Video from Beachbody workout programs.

Workouts

By subscribing to Beachbody On Demand you get access to MANY different Beachbody workouts like: P90, P90X, P90X2, P90X3, TurboFire, Insanity, Insanity The Asylum, plus MANY more workouts all included in the small monthly subscription fee! You no longer have to purchase and commit to a single workout program. By subscribing to Beachbody On Demand you can try out many different workouts from various workout programs and find the program that you like the most as you get fit.

Also, your first month is completely FREE!

In addition to the MANY various workout programs, Beachbody On Demand also have workouts that are exclusive to the the "on demand" service from Tony Horton, Autumn Calabrese, and Sagi Kalev.

(image)

How to Access

Accessing Beachbody On Demand is extremely simple since you can play the workouts from any web browser, or even via the Beachbody On Demand app for the new Apple TV.

(image)




Code Tip: Simpler Performance Timer Logging in C#

Thu, 17 Dec 2015 18:02:00 -0500

At this point application logging is pretty trivial as there are tons of logging libraries available for use. However, logging of performance timing is a bit ambiguous. There are many ways to do it, and one of the most common is to use the System.Diagnostics.Stopwatch class. Rather, than just embed the Stopwatch class code within and mixed with your application code; in this post I'll cover a more graceful approach to using a simple class along with the C# using keyword. If you're familiar with the MiniProfiler project, then you'll already be familiar with this type of class / usage.

Here's a quick example of gathering simple performance timing using the Stopwatch class:

using System.Diagnostics;

var timer = new Stopwatch();
timer.Start();

// do something you want to profile

timer.Stop();
var ms = timer.ElapsedMilliseconds;

// write timing to logs

 

While the above example is fairly simple, your code can start to get messy. So, lets make it better by encapsulating it into a special class to make it as easy to use as possible.

First, here's the usage example of the performance timing logging class that will be listed below:

using (new PerfTimerLogger("name of code being profiled"))
{
    // do something you want to profile
}

Now, as you can see the above code is MUCH simpler to implement within your code and not very intrusive. Basically, 2 lines of code, instead of 4; and not extra variables to keep track of.

Here's an implementation of the PerfTimerLogger class that allows it to be used as the above example demonstrates:

using System.Diagnostics;

public class PerfTimerLogger : IDisposable
{
    public PerfTimerLogger(string message)
    {
        this._message = message;
        this._timer = new Stopwatch();
        this._timer.Start();
    }

    string _message;
    Stopwatch _timer;

    public void Dispose()
    {
        this._timer.Stop();
        var ms = this._timer.ElapsedMilliseconds;

        // log the performance timing with the Logging library of your choice
        // Example:
        // Logger.Write(
        //     string.Format("{0} - Elapsed Milliseconds: {1}", this._message, ms)
        // );
    }
}

The way this class works the way it does is coupled with how the using keyword and Disposable work together under the covers in the .NET CLI. In order to use the using keyword the class needs to implement IDisposable. When the code exits the scope of the block of code within the using statement, the CLI and Garbage Collector immediately calls the Dispose method on the object and cleans up the memory usage of that object. Because the using statement functions this way allows for any class, such as PerfTimerLogger, to be able to "know" when it's exactly instantiated as well as finished being used; disposed.

Hope this simple tips either helps you implement better logging infrastructure within your applications, or just gives you a better understanding of how the insides of the .NET Framework function.




Exciting Time for Makers! We're in a Maker Renaissance!

Wed, 16 Dec 2015 18:10:00 -0500

This is something I've thought about from time to time the last few years. It's also something that just keeps getting more and more exciting; amazing if you will! The "Maker culture" has been around for some time, but we're currently in a renaissance of sorts. It's really never been easier for DIY'ers / Makers to to take off-the-shelf components and make some amazing projects that just weren't affordable to do just 10 or 20 years ago.

The maker space that stand out the most to me are the various projects people are making and sharing in Electronics or Computer Engineering. You can get cheap, commodity hardware and make your own computers, robots, Internet of Things sensors, and much, much more. In the past you needed deep understanding of electrical and computer engineering to do this stuff, and today it's a whole new world.

This Electronics Maker Renaissance is breeding whole new generations of makers for the digital century; the 21st century. People like Steve Jobs, Steve Wozniak, Bill Gates, and companies like Apple and Microsoft were there at the creation of the digital age and the Personal Computer Revolution. Today, we are building on the shoulders of these giants, and your niece, nephew, son, daughter, or neighbor could really be the next Steve Jobs; the next Bill Gates!

Stepping back and thinking about some of my ideas and predictions from a few years ago, I've realized how much things have changed and how different the state of maker hardware is today compared to just a few years ago.

2005: I'd like to build a computer for in my car with touch screen; man this stuff is expensive and commodity hardware isn't well suited for the use case.

2011: Smartphones are really taking off. I wonder if a smartphone could be used to build other "smart" devices or even be used in low power parallel computing clusters? Specifically the ARM processor.

2012: Raspberry Pi is released. Well, I guess I was on to something with the thought about Smartphones and their ARM processors.

2015: Raspberry Pi 2 is released with support for Windows 10 support (intriguing to me as a Microsoft developer in my day job!) It's been awhile since I looked into building a computer in my car. Wow, there's a ton of relatively cheap hardware available! It can now be done for a couple hundred dollars or less; instead of $1,000 or more.

P.S. I know I skipped over a tone of detail with the above timeline, but you get the point.

It's truly an exciting time, and we're really just in the beginning of it all!

I wonder what 2016 and beyond will bring!




Windows Live Writer now Open Source! as Open Live Writer

Mon, 14 Dec 2015 14:02:00 -0500

(image) The old Windows Live Writer application for authoring blog posts in a “Word-style” fashion was a really good blog authoring application. Unfortunately, it hasn’t been maintained by Microsoft in a long time and is closed sourced. Thankfully, there’s been a movement to finally get Windows Live Writer released as Open Source. Thanks to Scott Hanselman and MANY others, the all new Open Live Writer has now been released!

(image)

Download it here: http://openlivewriter.org

The new Open Live Writer is licensed under the MIT License, and the open source project is hosted up on GitHub. Open Live Writer also a project supported by the .NET Foundation.

Lastly, as proof that Open Live Writer works with BlogEngine.NET (the software I use to host this blog,) I have authored and published this post using it. It’s nice to finally be able to use Live Writer again, and I have missed using it.

P.S. Sorry about the nested, inception screenshot but I just couldn’t help it. (image)




JavaScript Tips: Parse QueryString to Dictionary

Fri, 25 Sep 2015 06:04:00 -0500

The URL Query String is something that is usually just sent to the server-side code and parse there for use in specifying the data to query. A somewhat little known feature of the JavaScript DOM is that the QueryString values are accessible from client-side javaScript code too.

The following code can be used to read what the full QueryString value is from the current pages URL:

var queryString = document.location.search;

Although, the QueryString value can be accessed from JavaScript, it isn't parsed and separated out into any kind of Key/Value pairs automatically. This parsing must be done manually. Below is an example parsing function and it's example usage:

// get raw QueryString value
var queryString = document.location.search;
var dict = parseQueryStringToDictionary(queryString);


// Enumerate through all the Key/Value pairs
// in the Dictionary object
for(var item in dict) {
	var key = item;
	var value = dict[item];
	
	alert('Key: ' + key + '\nValue: ' + value);
}

// Get Value by Key directly
alert(dict['name']);



/* Parse QueryString using String Splitting */
function parseQueryStringToDictionary(queryString) {
	var dictionary = {};
	
	// remove the '?' from the beginning of the
	// if it exists
	if (queryString.indexOf('?') === 0) {
		queryString = queryString.substr(1);
	}
	
	// Step 1: separate out each key/value pair
	var parts = queryString.split('&');
	
	for(var i = 0; i < parts.length; i++) {
		var p = parts[i];
		// Step 2: Split Key/Value pair
		var keyValuePair = p.split('=');
		
		// Step 3: Add Key/Value pair to Dictionary object
		var key = keyValuePair[0];
		var value = keyValuePair[1];
		
		// decode URI encoded string
		value = decodeURIComponent(value);
		value = value.replace(/\+/g, ' ');
		
		dictionary[key] = value;
	}
	
	// Step 4: Return Dictionary Object
	return dictionary;
}

 




jQuery Basics: Is Element Hidden or Visible?

Thu, 24 Sep 2015 06:33:00 -0500

A very common code snippet that's used a lot in various applications is the ability to detect if a specific element in the page is hidden or visible. jQuery provides some very useful functionality that allows for this to be easily determined; as well as making it easy to toggle the visibility of HTML elements on the page.

Detect if Element is Visible

Using a bit of CSS and the jQuery ".is" method makes it very easy to determine if the HTML element in the jQuery selector is either hidden or visible.

// jQuery selector to get an element
var query = $('#elementId');

// check if element is Visible
var isVisible = query.is(':visible');

if (isVisible === true) {
   // element is Visible
} else {
  // element is Hidden
}

What is jQuery ".is" method?

The jQuery ".is" method will check the current set of elements of the selector (see the 'query' variable in above code sample) against the specified CSS selector passed to the ".is" method. This method does not create a new jQuery object, but rather allows for the contents of a jQuery object to be tested without any modifications.

Full Documentation: http://api.jquery.com/is/

What is the ":visible" selector?

The ":visible" selector will match an elements that are essentially Visible to the user within the page. This is determined by inspecting the elements to determine if they are taking up any visible space on the page; that is having a height or width greater than zero on the page.

Helpful Hint: If the CSS "display: none" is applied to the element, then ":visible" will evaluate to False.

Full Documentation: https://api.jquery.com/visible-selector/

Toggle Element Visibility

On a related note, toggling element visibility can be done using the ".hide()" and ".show()" jQuery methods.

// jQuery selector to get element(s)
var query = $('div.className');

// Hide all matching elements
query.hide();

// Display all matching elements
query.show();



JavaScript Basics: String Contains Function

Fri, 18 Sep 2015 06:30:00 -0500

In many of the server-side programming languages like C#, the String object has a "Contains" method that returns a boolean indicating if the string contains another specified string. JavaScript however does not have a ".contains" method. Fortunately, the ".indexOf" method in JavaScript can easily be used to mimic or build your own ".contains" method.

Simple JavaScript String Contains Method

Here's a simple implementation of a ".contains" function that is case sensitive:

function contains(value, searchFor)
{
	return (value || '').indexOf(searchFor) > -1;
}

Sample Usage:

// returns true
var v1 = contains('one value', 'value');

// returns false
var v2 = contains('another value', 'two');

Something to note about the above method is that it implements a JavaScript Null Coallesce to prevent the method from throwing an exception if 'null' or 'undefined' are passed in. This may or may not be necessary for your use, but most times a false result is preferred over a JavaScript exception.

Make it Ignore Case

To make it ignore case you just need to modify the function to convert the passed in strings to be either all uppercase or all lowercase. Here's a modified version that does this:

function contains(value, searchFor)
{
	var v = (value || '').toLowerCase();
	var v2 = searchFor;
	if (v2) {
		v2 = v2.toLowerCase();
	}
	return v.indexOf(v2) > -1;
}