Saturday, January 30, 2016

Microsoft Virtual Academy: C# for Absolute Beginners by Bob Tabor

Over the past few months I've slowly been learning C#. I found this gem yesterday, and have been making progress through it. I highly suggest it as a starting point for anyone that is interested in learning how to code, especially applications for Revit. Bob Tabor does an excellent job at illustrating how to utilize Microsoft Visual Studio into your workflow, and how to read and write C# code. Give it a shot and start learning to code. It's absolutely free and the course is roughly nine hours long. Also in the course description there is a link to a supplemental course that has twenty one, three hour long, courses you can follow for additional knowledge. This will help your understanding of the Revit SDK, and you'll be on your way to writing the applications needed to benefit your office workflows... I will share what I come across as I learn to code, and hope that this eases anyone's anxiety for learning it!

The following is the course description as clearly stated on Microsoft's Virtual Academy

Want to learn a different language? Over the course of 25 episodes, our friend Bob Tabor, from, teaches you the fundamentals of visual C# programming. Tune in to learn C# concepts applicable to video games, mobile environments, and client applications. We walk you through getting the tools, writing code, debugging features, customizations, and much more! Each concept in this C# for beginners course is broken into its own video so you can search for and focus on the information you need.

(NOTE: Would you like more practice questions, hands-on exercise projects, and additional reference materials to help you learn and use these skills? Download a companion guide to this course, courtesy of Dina and Sasha Goldshtein, of shecodes; academy. Dina and Sasha have put together 21 three-hour "she codes; hack nights" to complement Bob's course. They walk you through C# coding from start to finish, including creating your first C# program, performing advanced operations on strings and dates, exploring object-oriented programming, and much more. They even show you how to implement a game that you play against the computer! We are grateful to Dina and Sasha for sharing these resources with the MVA community.)

Instructor | Bob Tabor – Microsoft MVP
Series Introduction
Welcome to this series of lessons about the C# programming language. In this episode, Bob Tabor, from LearnVisualStudio.NET, introduces the topic, sets expectations for the series, and provides tips on how to get the most out of it. Bob also tells you where you can download the software you need to get started and offers some encouragement as you begin your journey.
Installing Visual Studio Express 2013 for Windows Desktop
If you're not sure which version of Visual Studio to install or how to go about it, this video guides you in the right direction. You may skip this lesson if you already have Visual Studio 2013 Professional or later installed or if you have Visual Studio Express 2013 for Windows Desktop or later installed. 
Creating Your First C# Program
This lesson teaches you how to create a simple application—first using Windows Notepad and the C# Command Line Compiler, and then by using Visual Studio or Visual C# Express Edition. The video concludes with an explanation of common solutions to the many different problems you might encounter as you first begin writing and compiling code.
Dissecting the First C# Program You Created
Follow an in-depth discussion of each completed action and written line of code. Explore the relationship between the C# code, the C# compiler, and the .NET Framework. The lesson also covers the concept of code blocks at a high level. Finally, the lesson shows you where your project files are stored and the different types of compilation.
Quick Overview of the Visual C# Express Edition IDE
See demonstrations of some common Visual Studio IDE features, various windows, debugging features, code window features, and customizations found in Visual C# Express Edition. A more complete discussion of features is found in the Visual C# Express Edition Fundamentals series and the Visual Studio Fundamentals series, both of which are available on Channel 9.
Declaring Variables and Assigning Values Duration
Here, we start adding C# syntax to your vocabulary by talking about fundamental building blocks: data types and variables. We also discuss basic topics, such as naming conventions and data type conversions. 
Branching with the if Decision Statement and the Conditional Operator
Branching allows us to add logic to our applications. This lesson introduces the ‘if Decision’ statement (in its various forms), along with the conditional operator. We also discuss how to refactor our code to make it more compact and less likely to produce errors, by eliminating duplicate code.
Operators, Expressions, and Statements Duration
In this lesson, we discuss how to create a properly formed C# statement. We discuss how statements are made up of expressions and how expressions are made up of operators (think: verbs) and operands (think: nouns). Finally, we talk about compilation errors that occur when the syntax rules of C# are ignored.
For Iterations
Iterations allow our applications to loop through a block of code until a condition is satisfied. We cover several different types of iteration statements throughout this series, how to utilize "code snippets" to help remind you of the syntax for this complex statement, and debugging in action.
Creating Arrays of Values
In this lesson, we talk about arrays, which are multi-part variables—a "bucket" containing other "buckets," if you will. We demonstrate how to declare and utilize arrays, and we demonstrate a couple of powerful built-in methods that give arrays added features. 
Creating and Calling Simple Overloaded Helper Methods
Now, we begin wading into the topic of methods by creating a helper method to break out code we may need to use in multiple places within our code. We create and call our methods to retrieve a value, create and use input parameters, learn about string formatting, and create overloaded versions of our method.
While Iterations and Reading Data from a Text File
Learn a new type of iteration statement (while) and how to utilize the StreamReader class to stream data from a file to the Console window. Additionally, we learn how to add new files to our project, how to set properties of our file using the Properties window, and how to add a using statement as a means of resolving a class name referenced in our code to the namespace in which it is defined. 
Working with Strings
Since oftentimes in our applications we'll want to work with string data, this lesson approaches a number of different string manipulations. We look at built-in String methods to manipulate the content inside of a literal string and at the StringBuilder class for concatenating many strings together in a memory and resource-friendly manner.
Working with DateTime
Like strings, dates and times are represented using special types and so deserve some attention. In this lesson, we learn how to work with Date and Time data, how to create new instances of DateTime, how to add time, and how to format the data for display. We also discuss the TimeSpan class.
Understanding and Creating Classes
Classes are integral to the .NET Framework, particularly the .NET Framework Class Library. Learn how classes are defined and new instances are created, how to define Properties, and how to both set values and get values for a given instance of the class.  
More About Classes and Methods
This lesson digs into more details about classes—what exactly happens when you create a new instance of a class? What is a reference to an instance of a class? How does passing the reference to a method affect a class? We also review overloaded methods, static versus instance methods, and constructors.
Working with Classes and Inheritances in the .NET Framework Class Library
This lesson continues to teach concepts about classes (specifically, in this case, inheritance) by showing you how to utilize inheritance in your own custom classes. Learn about overriding virtual functionality, abstract base classes, and sealed classes.  
Understanding Namespaces and Adding References to Assemblies
In this lesson, we explain how Namespaces allow us to disambiguate classes that may share the same name. And we explain how the .NET Framework Class Library is so large that including all its classes in every application you write is a waste of system resources. Certain project templates include references to the typical assemblies required by a given type of application, and we demonstrate this by referencing a custom assembly of Bob's own design.
Understanding Scope and Utilizing Accessibility Modifiers
Explore the scope of variables within code blocks and how accessibility modifiers, such as Public, Private, and Protected, are used by the .NET Framework Class Library to expose or hide implementation of their given services to consumers of that given class. This is sometimes referred to as "encapsulation."
Enumerations and the switch Decision Statement
Here, we demonstrate the use of Enumerations because, in the .NET Framework Class Library, properties can often be set only to a predetermined subset of possible values. To illustrate this point, we create our own custom enumeration and then utilize it in a simple application that demonstrates a third Decision statement, the switch.
Gracefully Handling Exceptions
Exceptions occur when an application experiences some unexpected problem at run time. This lesson discusses how to use the try catch finally block to anticipate potential problems and to attempt to shield the end user from those problems as much as possible. We also explore best practices when checking for exceptions.
Working with Collections
Collections are a more powerful form of arrays. In this lesson, we demonstrate an "old style" collection (pointing out its limitations), along with several of the newer, strongly typed generic collections (List<T> and Dictionary<T1, T2>) utilizing the generics syntax.
Filtering and Managing Data Collections Using LINQ
In this lesson, we discuss how Structured Query Language provides a means of working with sets of data. Similarly, the LINQ syntax provides a simple way of working with groups of data in generic collections. We demonstrate projecting data onto existing types and new anonymous types.
Understanding Event-Driven Programming
Learn how events are utilized in the .NET Framework Class Library specific to WPF and ASP.NET Web Forms applications. In these examples, we see how C# is generated by the IDE to "wire up" a user action or application event to the code that handles that event.
Where to Go from Here
In this final video, Bob talks about approaches to solving common issues that arise for new software developers, where to turn for help, how to search for answers to technical questions, and how to become part of the .NET community. He also provides a long-term path that you can follow to learn more about developing Windows and web applications.
  • Walk through the concepts of C#.

Friday, January 29, 2016

Ladybug for DynamoBIM Released

Ladybug for Dynamo has been released! Below is the link to the download installation videos and install files! Get on it! It is a great thing to see a lot of Grasshopper's addins migrating over to the Dynamo side of things. The following video is the first video in a series of five to install Ladybug for Dynamo. Enjoy!

Harvey's Plumbing and Heating As-Built Construction Documentation

The future of our mechanical room documentation is here. We're coordinating as a beta tester for YouBIQ LLC, owned and operated by Gordon Fowler. The company essentially provides a solution for journaling your construction projects throughout the construction process with an iPhone. This will provide our clients with comfort knowing where their systems reside in their walls, and will ensure any sort of servicing on our end, in the future, for these homes goes as smoothly as possible. The following illustrates strictly the imagery that we were able to snap at each location with the device provided by YouBIQ and the iPhone 6 camera. In the future we will be tagging all of our equipment/assemblies with data that will provide our service technicians with the documentation they need in the future. You can read more about YouBIQ here...

Monday, January 11, 2016

Dynamo - QR Coding Assemblies and Families with A360 Team

A few days ago, thanks to my friends on twitter, I saw a few posts about the QR Barcode generator that has been developed by Jostein Olsen. This fantastic development led me to some thinking of how I could tie it into our current workflow at Harvey's Plumbing and Heating. My colleague Tyler Graff and I developed a few modules. One for our assemblies, and another for simply mechanical equipment families. The beauty of these modules is that the data is referencing our A360 Team information. All of our specifications can be turned into shared links on A360, that are retained even when archived, that can then be referenced by these QR Codes.

Assemblies placed from Unifi
Ungroup/Assemble Module

Ungroup/Assemble Module

Transaction Handling and Renaming Based on Original Group Name
The ungroup/assemble module is the first portion of the process. This allows us to place our groups from Unifi, to ungroup/assemble them, and to have the name of the assemblies numbered in order of creation. The assembly numbers reference the prospective schedules that in turn automate our assembly creation on sheets.

Assembly QR Code Generation

Here is the module for generating qr codes for a list of assemblies in a project including obtaining a name for the qr code based on the assembly name, and writing the qr code to a destination on your computer. It's important to note that if you strictly hyperlink the information segment of this module that the qr code will automatically open the hyperlink in the app.
QR Code Generator for all the Assemblies in Project. Mass assigning barcode data to multiple assemblies. i.e. Assigning a Name for each Assembly, and then assigning the A360 shared project location. Allowing an individual to scan the object at the job site to pull open the assembly names and locations.
Selecting Assemblies and Inputting Data Based on Each Assembly. This can also be set based on parameter data and strung together to feed the tags. This information can also hyperlink the job folder so individuals can pull up the sheets on their tablets or iphones.
Folder Location, as Specified in Dynamo, with file.

Example of Project Sheet Location in A360 that can be referenced in hyperlinks associated to barcodes. This can make prefabrication of assemblies easier for foreman to understand how to actually build what's in a box labeled AS1_Etc.

The previous methods can be applied to families very easily. It's much easier to embed the links to the specified parameter that can be fueled down stream to Revizto, or other third party applications for design intent and communication.

QR Family Code Generator Based on Parameter Writing

Grundfos Pump Image
Grundfos UPS 15 58 FC

Also please note, again, that this can directly reference a pdf specification sheet to pull from A360.

The Future of Mechanical Room Documentation for Servicing

Now this is obviously going to evolve... potential to augmented reality devices that can document data for future reference in the future, but for now this is how we are intending to document spaces for future reference by our service departments. This will also provide a clear deliverable to our clients for understanding what is what in their mechanical rooms. There are other solutions becoming available in the future that we are beta testing, but for now this seems to be the cleanest solution available on the market right now for proper documentation.

You can obtain a free account here at

Feel free to explore the mechanical room below. We are going to be tying our specification data that is on A360 to this platform for now as well.

Please note that the reason these images are so incredibly distorted is because we didn't use a photosphere camera. This will be perfected by Wednesday, through a product we are beta testing, and I will share the process sometime Thursday!

Monday, January 4, 2016

Montana State University Graduate School Portfolio

Autodesk Memento - Cellphone Photogrammetry Examples

As an update to the previous post about cellphone photogrammetry, here are a few examples that I have uploaded to the Memento Gallery. I will be adding any additional assemblies, that I create in the future, to this as well. Enjoy!
Grundfos Pump Assembly

Boiler Board Assembly