Writing more effective emails in your company.

by jtstroup 18. October 2012 03:30

I work at a very email-centric environment and worked under the best CTO I’ve ever had the pleasure to work under. One of his emails he sent out is a great template to follow when writing emails. I wanted to share the email template.

 

1. Format email responses that consistently repeat the following:

  • What is the problem?
  • What are the steps that will be taken to identify the fix?
  • Who owns driving those steps?
  • When will those steps be taken and results published?

 

2. The above email should be sent daily until the issue is resolved

  • A day in SRS time is a week for another company

 

The second item is clarity of communication.  When we are sending an email that contains release notes, UAT notes/plans, crisis management steps (i.e. what was mentioned above), etc. we need to make sure we are explaining things in layman terms.  Describe the situation like you would to a family member who doesn’t work at the company.  Someone you care about.  This may sound silly, but it’s not.  Terms engineering uses are not universal and are thus a foreign language to others in the company.  Please communicate briefly, but clearly using words that are more likely to appear in Webster’s dictionary than in the wiki.

Tags:

Email | Template

.NET Gem–Google Analytics Dot Net

by jtstroup 10. October 2012 04:48

Found this little tool which is a awesome way to use Google Analytics to track what your users are doing in your application. This can be adapted to fire off events in your application to feed Google Analytics how your users are utilizing your application. Thus giving you better data mining to see what features are being used and which ones aren’t.

Thanks to Doug Rathbone for this project.

http://www.diaryofaninja.com/blog/2010/07/04/release-of-google-analytics-dot-net

Tags:

CodeResource

Reengineering Engineering with a new SDLC, with influences from Salesforce.com and Facebook

by jtstroup 27. August 2012 10:42

Our company has made amazing progress over several years and we create some world class products and we had a SDLC (Software Development Lifecycle) that matched.

  • We were in a niche market owning about 95% and we were doing excellent.
  • We acquired three other companies and placed them under an umbrella corporation.
  • We were generating millions in profits after operating expenses.
  • For the past five to six years we’ve had a twenty percent profit every year.
  • We are the true company that will actual go public. Not just talk about it. You see we’ve been keeping our closet clean and our books show that for the past six years we have profits, a clean SDLC, and a top notch workforce, we continually get on the Inc. 5000 as top 5 fastest growing software company.
  • We’ve built up a great culture here. People we hire know how to work hard and we know how to reward that work.

 

However as the term goes “who moved my cheese” things change. We turned around and had a recession in the automobile industry so we had to adjust. We then had a dozen competitors who were taking our business away from us.

Rant!

We offered a “Premium” package, this means we offered our customers everything. Put our products in your shop. Follow our processes and you WILL make more revenue which pays off our cost and puts a s**t amount more money into your pocket. Just because somebody builds something that looks like clone at a 3rd of the cost, does not mean it equals our product!!. As they soon found out and came back to us. But still! where’s the faith!.

Anyway we got a new presidente that recognized this and ALA Carted our product. Which I think was genius, we now offer completive rates with many behind the covers that our competitors just can’t match.

 

Reengineering:

Okay so now we want to show these competitors who their dealing with. Lets. We need a new SDLC for the new strategy.  It will be painful and tough to communicate to our offshore teams. A quick look at our old SDLC yielded something like this:

  • Milestone I (Define Features)
  • Milestone II (Specifications)
  • Milestone III (Developer Code Complete)
  • Milestone IV (Quality Assurance Complete)
  • Milestone V ( User Acceptance Testing)
  • General Release

 

This was built with a vertically integrated, monolithic technology for our onsite client/server architecture (distributed). It served us well and when functionality and reliability were being invented to address the needs of our customers.

Cons of old SDLC:

  • It took QA as much time as it took the developer creating the code. Two weeks for a feature, Two weeks for QA.
  • There is or can be a lot of finger pointing between QA and Development.
  • Development might just code something and throw it over the wall, thus developers were not taking as much ownership over not writing bugs VS allowing somebody to find bugs and then building the cushion for them to fix the bug. This still held up the release date.
  • Technical Debt would bite us sometimes because of the all too quick agile design to produce features.
  • Million of other projects to add to the existing core products to address other roles in the service departments. But not enough developers as well as cost of training new development into the domain.
  • Inaccurate early estimates resulted in missed features and their complete dates.
  • Teams compressing their testing schedules to meet the demands of the hard feature date.
  • Lack of visibility at all stages of the release.
  • Late feedback on features at the end of the release cycle.
  • Long and unpredictable release schedules.
  • Gradual productivity decline as the team grew.

 

Research:

Here is some great resources that helps put things in perspective.

  1. http://tcrn.ch/qEp6i1
  2. http://bit.ly/rntqq6

 

NOTE: I just want to say in video 2. I love how Eric Schmidt started talking about US workforce and how he believes what America needs to accomplish to help bring it back into the top workforce of the world. I think it starts around 0:45:00. It’s very interesting.

 

New SDLC:

Outcome of our Company Engineering Standards Meeting.

  • Foster Open Communication and over communicate.
  • Empower teams.
  • Continuous iteration.
  • Delivering customer value early (More agile type processes in the form of weekly releases).

 

So what did we do. We looked at how Facebook operates and focus our SDLC towards their structure. Yes we know we are not Facebook. which is why we don’t adopt everything across the board. But obviously they have some good ideas.

  • We eliminated quality assurance and took all those resources with their existing domain knowledge and put it back into the development organization.
  • This means quality is now the responsibility of all developers.
  • We determine to build a software architecture to be more in line with Salesforce.com and their service offerings.
  • The development organization will adopt test driven development that allows for the discovery and resolution of bugs at the top of the project effort instead of at the end. “lean manufacturing” or lean software development.
  • The development team has ownership over the features, this means they are responsible for seeing their feature promoted to production in a controlled manner.

 

Each team is now responsible for their own:

  • Browser/OS Test Matrix.
  • Repository Updates.
  • End-to-End Testing.
  • Environment Update Testing.
  • Crash Emails.
  • IT updates.
  • Load and Performance Tests.
  • Release Version Tracking.
  • Server Setup.
  • TSG (Trouble Shooting Guide) Documentation.
  • User Acceptance Testing, in combination with other teams.

 

What we learned:

It has now been a 12 months since we’ve completely revamped our engineering SDLC so what have we learned, what’s the the post mortem?

  • We are now a loosely coupled organization (Robust).
  • We built a CI server that allows every team to use Ant and PowerShell to build their own CI that works for them.
  • Every team now implements acceptance tests driven by the ScrumMaster/PM.
  • Every team now has all their Ant/Powershell scripts custom to their unique needs and running on every check.
  • Each team has dropped off branches and we focus on a single main branch.
  • New teams/projects formed pick the new technology. So although we are primarily a Microsoft workshop. We have Java, Rails, Android, I O/S teams. (After approval. of course.)
  • Teams have adopted testing as part of their development processes
  • Reduced the number of processes.
  • Strengthen those processes that remain so they now have more attention.
  • Teams that spent a lot of time manually testing their products, now focus that time allocation towards building a effective acceptance test or integration test when applicable.
  • Don’t write up bugs caught during the development life cycle. that just slows you down. Only create the bugs after a project has passed all unit and acceptance tests when a bug is found.
  • Teams now focus on team throughput rather than individual productivity.
  • Simple agile processes with common vocabulary.
  • Prioritized work for every team.
  • More defined organization roles (ScrumMaster, Product Owner…).
  • Daily metric visibility into each team.
  • Weekly Scrum of Scrums that provides visibility to all teams at a higher level.
  • Reduction of bugs.
  • Potentially release-able products every 30 days.
  • Mandatory design meetings, code reviews. Any change no matter what is reviewed by at least one person
  • Our code is beginning to look like one single developer wrote everything, not just a multitudes of everybody.

 

What we would do next time:

  • Involve more individual contributors earlier.
  • Train PM earlier.
  • Work on automation earlier.
  • Communicate delayed deadlines to executives due to the reengineering.
  • Be more clear to workforce what the new SDLC rules are and ensure the dev managers enforce them more.
  • Encourage more peer to peer coaching.
  • Create a better dedicated, fully empowered cross functional rollout team.
  • Managers need to understand to be patient and expect mistakes.

 

I hope this information enlightens you as it has me through this process. Much thanks to my old CTO Marcus Daley and VP of Software Architecting Nate Zobrist. Marcus is a CTO that can keep at least 600 people all on their toes and pushing them all to be better and everybody should thank him for making them better at their career. Nate is a forward thinker and just has a much higher IQ then most anybody I’ve ever met.

Tags:

Agile | Architecture | Business | SDLC

GWT Plugin for Chrome Fix on Windows 7

by jtstroup 17. August 2012 07:26

So recently I have decided to go with using the GAE (Google Application Engine) for a small little server page and try some things out. I downloaded Juno (Eclipse). I installed the following plugins into Eclipse:

 

image

Just to ensure I had everything I needed. I then followed this tutorial for creating a website “Guestbook” https://developers.google.com/web-toolkit/doc/2.1/tutorial/ and every time I ran the site my chrome would show me.

 

image

 

No matter what I did, I could not get the “.crx” to install. It was very annoying. I read all over the Google Dev Forums about others having this issue. I read about having to recompile the GWT. Which I did by

right clicking my project –> Google –> Compile

 

 

image

But that didn’t work.

 

Installing GWT Dev Plugin in Chrome:

Finally I read about overriding chromes “Can only add extensions via Web Store” and decided to manually install the GWT Dev plugin for chrome. Here is what I ended up doing to get the GWT plugin to work.

Right click chrome icon and goto properties –> in the arguments I added

--enable-easy-off-store-extension-install

 

image

Once this was done I opened chrome and browsed to "

chrome://chrome/extensions/

 

Then I was able to drag my .crx onto the page and it installed the plugin.

 

image

 

Once I restarted eclipse and ran my site again I was able to get the guestbook working.

 

image

 

w00t! Hope this helps somebody else.

Tags:

GoogleAppEngine

Installing Ruby on Rails on Windows 7 Pro

by jtstroup 16. August 2012 08:42

I have just installed rails on my PC, it was pretty easy and wasn’t too difficult. Here is the process I did to install.

Installing Ruby:

I went to http://rubyinstaller.org/downloads/ and downloaded the latest installer.  I let it install by default to C:\Ruby193.

image

I open up the “Start Command Prompt”  (Windows Key + R) then typed in “cmd” (Make sure it’s an administrator prompt!, should say “Administrator: at the top title window) and I wanted to start the Gem Server. To do this I typed:

gem server

You should see:

image

To know if this works you can then browse to http://localhost:8808

image

 

At this point my command window was stationary sitting at something like this:

image

So I just opened a new command prompt.or MySQL or something equivalent.

Installing SQLite:

Now we want to Install the personal SQL database. For production its best to use PostgreSQL or MySQL.

To install SQLite type the following at your command prompt:

gem install sqlite3-ruby

 

The installer told me that I need to manually install the sqlite3.dll in my C:Ruby193\bin folder. I found the dll here:

http://www.sqlite.org/download.html/

and under the:

Precompiled Binaries for Windows Runtime

sqlite-dll-winrt-x64-3071300.zip
(950.51 KiB)

After dropping the dll into the bin folder. I’m ready to install rails.

 

Installing Rails

To install rails you just need to type in the command prompt:

gem install rails –include-dependencies

This will load all the good gems for you to use.

 

Congrats, now what?

You have successfully installed Ruby on Rails. Good Job!. But where to go from here:

To create your first website I created a folder name RailsWeb at C:\Users\jtstroup\

Then I changed directories into that folder path.

cd RailsWeb

 

image

And then you type:

Rails new MyFirstRailsSite

 

Now change directories into your folder with your website.

cd MyFirstRailsSite

and start your website server

rails server

Now browse to http://localhost:3000 and you’ll see your first website.

 

Installing individual Gems

For some reason some of my gem’s were not installed correctly. No problem. Each time I typed in

rails server

It would give me some error such as:

image

So I would just type in:

gem install coffee-rails

 Good luck!

Tags:

Ruby on Rails

Hiring Fresh Engineers VS Seasoned Engineers.

by jtstroup 11. July 2012 08:01

Me and friend at my company were having a discussion on this topic, I thought I would share.

Company Problem:

In a leadership position you want to attempt to get a talented, preferably super star team.  To assemble this team, every manager is faced with which pool of developer he/she wants to focus efforts in.

Seems the current trend with some larger companies like Google and Facebook is to hire, isolate from the workforce on a boot camp project for a few months (so employees don’t miss Josh, who was a great guy, but gone in a few months.) and then determine termination or placement into the engineering ladder. So who best to focus efforts on attempting to recruit?

His view as I understand it:

His thoughts was to pick only from the Fresh Engineers pool. Because most likely you’ll get the root skillset that drives the best engineers. Passion. With passion you can provide them a great training ground, and with the different degrees of mentoring and reviews, which can be a big help for them in the first couple of years. As a bonus, they can join at a cheaper salary.

You are less likely to find a Seasoned Engineers who has that same level of passion that’s wanted to make a good employee.

Thus, his choice, hire from fresh engineers, put them in boot camp, determine placement.

My view on this matter:

I think a Fresh Engineer should try to find a company that will truly grow him/her and fill in the gaps of education or self taught programming with experience to build a well rounded and solid engineer. However some students end up at a company and never learned the modern tools they are using. Do you really think that he/she is going to show you what a super-star they are in a few months? I don’t believe so. Most companies must hire a developer coming out of school and pay them their salary for at least a year before their return on investment starts coming back to them. But during this time the criteria of what’s considered a “super star” is set. Each company. I would even say each manager, has a different set of pre-defined criteria’s on what they consider a excellent talent.

for Seasoned Engineers. This is the engineer that you can put on the un-sexy projects, the projects that are a pretty thankless task and there isn’t really any rewards or spotlight, but are very necessary. These engineers are seasoned enough to get the job done and to not put up a big fight about going to these projects. Of course they also want the sexy projects as well, which helps them enjoy their work too. It’s tough to keep a good programmer as many many other companies will snatch up good talent.

My Conclusion

So the way I see it is that you need a mixed team of both. Fresh and Seasoned Engineers. Passion and Dedication to getting the job done. It won’t take long before the team will close the technological knowledge gap and all your engineers are within the same range skillset focused towards the overall team project outputs.

 

There is so many more differences I can get into between the two types of developers. But it’s not for this article.

Tags:

Business

Rally isn’t just for Scrum Masters

by jtstroup 18. May 2012 07:07

Situation:

· My company uses Rally and our PM/SM creates a User Story. They opted to use a title to track DEFECT. I have no idea why, but I’m guessing it’s a good practice. Normally rally queries etc are focused on the PM/SM, but doesn’t have to be. By following this system the developer can creates some task with him assigned as the owner. I wanted the “My Defects” in Rally to reflect any I might get, so here is what I did. “

myDevDefectsRally.png

Query for rally: ((Name contains "Defect") and (Owner contains "Stroup"))

Here is what I see:

myDevDefectsViewRally.png

Tags:

Rally | Agile

Be nice to your fellow developer in a shared environment.

by jtstroup 12. May 2012 14:04

​Hey,

Several times we’ve found the need to hook a debugger from Visual Studio into the deployed central server dll code, to see what’s going on.
However on our shared environment we have several instances of IIS (W3WP.exe) for each instance running. So which one is the one we are supposed to hook into.  If you hook into all the processes you might get a break point from somebody else testing at the same time. So here’s a little trick to find your correct IIS process running to hook your debugger into.

From IIS 7.0 you need you to run IIS Command Tool ( appcmd ).
• Start > Run > Cmd
• Go To Windows > System32 > Inetsrv
• Run “appcmd list wp

central.png

Tags:

Architecture | IIS Express | Sandbox | Environments

Get a copy of dll in GAC

by jtstroup 31. January 2012 11:57

C:\Windows\assembly folder looks like this:

  1. Open up administrator CMD prompt and type.
  2. regsvr32 –u C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\shfusion.dll
  3. Now look in your folder and copy the dll you want.

 

When finish register the shfusion.dll again to restore the assembly where it was previously.

  1. regsvr32C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\shfusion.dll

Tags:

Search for text in stored procedures

by jtstroup 29. September 2011 11:46

I’m tried of searching for this all the time. So here is where I’m storing it. ^_^

 

SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION
    FROM INFORMATION_SCHEMA.ROUTINES
    WHERE ROUTINE_DEFINITION LIKE '%text%'
    AND ROUTINE_TYPE='PROCEDURE'
    ORDER BY ROUTINE_SCHEMA, ROUTINE_NAME

 

Just replace text with whatever you are looking for. But this does not search for functions or such.

Tags:

SQL

IIK Series I–Software Construction Part 1 of 3

by jtstroup 7. September 2011 12:13

Who should read this article:

Welcome to the first article in the IIK Series I. The main goal of each article is help you (and me) create higher-quality software and to complete our projects with fewer problems. I am hoping for the experience programmers will see this as a good guide. For the self-taught programmers, I hope to share new concepts and help give insight in topics you may not already know. For the students, I know you get a ton of theoretical knowledge, but this should help unbalance the biasness you get of the controlled environment of computer theory with the demand of practicality.

--------------------------------------------------------------------

Software Construction

1.1 What is Software Construction

1.2 Why is Software Construction Important

1.3 Determine the Kind of Software or Industry requirements you are working on.

1.4 Defining the Problem

1.5 Categorizing the Software Project

1.6 Meeting the Business needs of your Software Project

1.7 Construction Example

 

Related Topics:

Who should read these articles: Preface

---------------------------------------------------------------------

1.1 What is Software Construction?

Many books, articles will make analogies that software construction is a lot like building development. They port over concepts from building development into the software construction world. Many points are accurate, but some are not. The root problem that everybody should agree to is that computer software can be a complicated process.

To me programming is human thought codified and crystalized. Today's software metaphor normally relate software to buildings. There are others beside this metaphor, programming to math, programming as a model, or programming as rule-following. Given that my premise of programming is just raw human thought, then it stands to reason that some people are more apt towards this field then others are. That doesn't mean we can't train our brains or though process to be better focused towards this field. But it also means that there are those out there with slight advantages as a "master programmer." however the software industry does not only need "master programmers" just because you are a great problem solver does not mean you are somebody that can stand back and look at the larger picture. So in our field you also need the "Architect." Metaphors, design patterns and coding styles cannot replace actual intelligence, but they do help us to communicate to each other what it is we are trying to do. This is what Software Construction is about.

1.2 Why is Software Construction Important?

In our current market of today, construction is a major part of the Software Development Life Cycle. (SDLC), this is the life cycle of a software project with formalized stages for a start to finish solution. In the business world, it is a major part of their process.

Each software project you begin, you must realized there are four factors that effect that project;

  • Time
  • Resources
  • Quality
  • Features

 

At any given moment, you as the developer, own one of those four items. The other two are controlled by external sources. For example, say you have to complete this project in three months. You have customers flying in to train, or trainers flying out to train on your new feature/product. This is a hard date (meaning it can't be moved). Also the quality of the product must work as a finished product with very high quality requirements. In this situation you should be able to control how many resources it takes to get to this milestone.

  • For every project you work on you must pay the price of time. Either you pay for that time up front with some good construction design. Making your application scalable or flexible . Then when you do need to be handle changing something, because you designed your application with flexibility, you can easily "hook" into the existing code "interject" some new behavior at the right processing stage, debug, test and ship over to QA. (because we all know you don't just ship out to the customer without QA approval. That is what we call a "Hope Install.", and your customer should not be your first and last QA).

 

  • Most business stakeholders want you to finish the project faster and meet the requirements. Get it done and quickly. These people do not know that choice leads to greater bug time, as the developer will have to either refactor a lot of code to fit in the new changes. Let me put it to you another way business people. You tell me which is cheaper. When would you like to choose to move a elevator shaft if it ends up not being in the proper position. Would you choose to do this on paper while designing, or once it's completed. If you choose to do so once it's completed, it will be very expensive.

 

However there is a pitfall here. Anybody can sit down with a architect and produce a "specification" that, in truth does not adequately describe what the customer wants or what the requirements needs. This fact may not be apparent until after the customer sees the first demo of the software. Identifying these features and planning on them moving will money and time for all involved.

  • Many software projects fail because of weak specifications, not all of them, but enough to say.. Don't make weak specifications.
  • Many formally trained developers might over engineer and take way too much time for specifications that are not accurate. So don’t over engineer, just for the sake of making documentation.

 

My recommendation to you is, take some time to focus on the most critical 20% of your project core that needs to be worked out (thoughts onto paper) and then proceed with the project. This is a good general rule, but depending on the size of the project, may or may not be necessary. Large projects need more documentation, projects with more then three developers need more documentation to coordinate API's with each other. Small projects or one developer don’t need as much. It's a weighted scale and you must identify what is necessary to get the job done.

1.3 Determine the Kind of Software or Industry requirements you are working on.

Ask yourself what category does this project fit into?

  • Business Systems
    • Type of Projects: Internal, Intranet
    • Type of Work: As-needed testing and QA Planning, informal requirements, Design and coding are combined, Developers test their own code and little or no testing by separate test group, somewhat informal deployment procedure.

 

  • Core Systems
    • Type of Projects: Embedded Software, Packaged Software, Tools, Web Services
    • Type of Work: Staged delivery, up front planning, basic test planning, semiformal requirements, architectural designs documented, as-needed design reviews, code reviews, developers test their own code, separate testing group, formal deployment procedure.

 

  • Mission-Critical Systems
    • Type of Projects: Core Embedded Frameworks, Required Release Set Software
    • Type of Work: Staged Delivery, Extensive up-front planning, extensive QA test planning, Rigorous change control, Formal requirements specification, Architectural design, formal architecture inspections, formal detailed design, formal check-in procure, code reviews, developers test their own code, separate testing group, formal deployment procedure.

 

1.4 Defining the Problem

Defining the problem should be described from the user's point of view, not to be stated in technical computer terms. You don't want to tie the problem to specific technologies, because that may not be the best solution to the problem. If you list something like "Refactor stored procedures to solve performance problems." You are focusing on the specific area that may not be the problem at all. Instead the problem should be stated. "Performance problems when running client reports." This way you are not miscommunicating to the developer where the problem lies. Listing stored procedures may or may not be the solution.

1.5 Categorizing the Software Project

  1. Small Projects
    1. Less then 100,000 lines of code
  1. Medium Projects
    1. Greater than 100,000 lines of code and less than 3 million lines of code
  1. Large Projects
    1. Greater than 3 million lines of code

 

Lines of Codes of other projects

  • Windows NT 3.1 ( 4-5 Million)
  • Android OS (12 Million)
  • Windows Server 2003 (50 million)
  • Mac OS X (86 Million)

 

1.6 Meeting the Business needs of your Software Project

This is where you choose your technology you want to use to solve your software project. This includes the programming language, any third party libraries or technologies. Most times the programming language has been selected for you, so you might want to determine the type of classes you are going to use. Are you going to consistently use LINQ Query Syntax, or use long query syntax. Maybe you will use EJB's for Java, maybe not, or you might use WCF for .NET technologies.

What types of coding conventions do you follow? Good code should look like one developer wrote all of it, not pieced together from multiple developers. When choosing technologies if it's bleeding edge, realize that the community for it will not be mature. VS a mature community of a proven product or technologies which chances are that somebody already has tried what you are attempting to do. Be certain to choose the best software practices and tools that are best suited to your project.

1.7 Quick Construction example

Focus on documenting 20% of the Core requirements, do this by identifying the most critical components to achieve success. Focus on categorizing each component into three categories:

Lets say my company required me to create a listening web service for a partner to push massive amounts of data through so I can parse some information out of it, and build a held message for another project to pull from my storage cloud down to it's domain.

Identify your components

  • Focus on documenting 20% of the Core requirements, do this by identifying the most critical components to achieve success. Focus on categorizing each component into three categories:
  • Lets say my company required me to create a listening web service for a partner to push massive amounts of data through so I can parse some information out of it, and build a held message for another project to pull from my storage cloud down to it's domain.

 

Identify my components

  1. Listening Web Service: I choose WCF
  2. Partner Interface Method:  I choose to follow a standard in my industry name STAR Standard
  3. Extracting data - I will use LINQ Query Syntax
  4. Storing Message Structure - Build a project that handles dealing with Message Packets.
  5. Storage - Utilize Windows Azure Cloud
  6. Testing - Utilize a 3rd party tool. SOAPUI to mimic our partners message, use Azure storage explorer to see data in cloud
  1. Deploying -
    1. Dev - (Use host file to build a friendly name for dev testing purpose, no need to bother IT with outside dns) Azure also provides the Cloud Compute Emulator to simulate cloud on dev box
    1. Stage - Azure accounts each have staging and production. This can be combined for a "Dev Azure Account for my final testing"
    1. QA - Get a Domain Name alias (friendly name) to give to partner to use. Map to a "QA" Cloud account. Again there is a Staging and Production in the cloud, so no staging is necessary to configure.
    1. Production- Get a domain name alias (friendly name). Deploy to cloud
  1. Maintaining - What can I do to minimize having to redeploy for bug fixes? Research this with the cloud to see what I can use. Estimate: 6 hours for research. 3 for designing something if there is anything. After that.
  1. Recovery Plan - Research.

 

Focus on identifying the 20%

  • I know what I know (1 - lowest to 5 - strongest)
    1. (4) WCF
    2. (3) STAR Standard
    3. (4) LINQ Query Syntax - extracting data from where clause. No fancy queries foreseeable.
    4. (1) Azure Storage Cloud
    5. (3) SOAP UI
    6. (3) Azure Storage Explorer
  • I know what I don't know (this only focuses on what we actually have in the requirements)
    1. Customer data structure
    2. Performance of WCF in Cloud
    3. Integrating WCF with Web Role or Worker Roles of the Azure Cloud
    4. What types of configuration/power should I give to those that maintain this?
    5. Logging in the cloud. (Limitations?)
    1. Recovery if production is wiped out, how to rebuild this easily? Scripts? What?
  • I don't know what I don't know (these are the what if scenarios)
    1. Schema validation?
    1. Duplicate messages one to many?

     

    So from the look of things, I think I should probably focus my detailed documentation on what happens When I extract the data from the customer and how I'm storing the message. I might end up with a rough draft that looks something like this:

     

clip_image001_thumb3

1. Inputs to Public Azure Roles

  • PutMessageV1.svc : Called by IIK Series Partner to send information through. Message will parse information and create a unique address name.
  • ProcessMessageV1.svc: See PutMessageV1, exact same functionality.

 

2. Input to Internal Azure Roles

  • ReceiverV1.svc Receives structured data to store until pulled by another project.

 

3. Internal Azure Storage

  • Held Packet Table Held messages in Azure Storage.
  • Delivered Packet Table Once message has been delivered it is stored in this table for archiving or audit purposes as well as guaranteed delivery
  • Log Table Log table for storing log entries. 1_7Image_thumb[4]

 

This concludes Part 1 of Software Construction. In Part 2 we will be discussing some best practices on construction classes , methods and defensive programming as well as some code smells.

Tags:

IIK Series

It Is Known Series

by jtstroup 24. May 2011 11:29

I mostly use my website blog as a reference more then anything else. I’m still learning and new to blogging and I feel I still have a long way to go. It’s tough for me to find good new content to blog about. So in a new twist I think I’m going to start a string of series that explain intermediate and advanced topics about C# and other various technologies that I use in my career.

I hope that I can provide myself and others with some good blogging. Here is a rough estimate of the series I have planned for subsequent blogs. Interlaced with anything I feel might be important to blog about in-between.

IIK Series I

  • Software Construction
  • Object Orientated Programming
  • Events
  • C# Flow Control Suggestions
  • Exceptions oh my!
  • With and Without Generics
  • Multithreading and Thread Synchronization
  • Assemblies and Versioning
  • Algorthims
  • CLR

 

IIK Series II

  • Intro to WCF
  • Advanced WCF
  • WCF RESTful Services Project
  • WCF and Azure
  • WCF Best Practices

 

IIK Series III

  • Windows 7 Mobile Development Adventures (Coming soon..)

 

Tags:

Architecture | Azure | C# Development | TechArticle

VS Tip–Incremental Search

by jtstroup 10. March 2011 12:42

Most of us use Ctrl + F or Ctrl + Shift + F to find code. However you can also use a Ctrl + I which is the Incremental Search. The nice thing about this is you don’t have to wait for the dialog. Just hit Ctrl + i , and as you type it will match the string being typed.

Tags:

Visual Studio

Visual Studio Break When Exception Thrown

by jtstroup 10. March 2011 12:16

Maybe some of you know this, maybe some of you don’t. But I just learned about it. Apparently I’m a old man programmer because I normally just look at the code and try to solve it without debugging the application, or I write it out somewhere.

I’ve been trying to track down this wiggly bug in my factory pattern code, but it was a slippery bugger. I finally asked somebody for some help and they suggested that instead of all my try/catch’s I use the Break when Exception is thrown. By default Visual Studio only breaks when the exception is unhandled in the user code. For me this was some distance from where the exception was thrown.

So if you want to throw the error in the code where the error occurs and not wait for it to catch. You can select the Debug menu, then Exceptions (or use Ctrl-Alt-E) which will bring up this dialog box:

exceptions

Check the box under Thrown for the “Common Language Runtime Exceptions and viola. You are set.

Tags:

Replacing NaN in XSLT 1.0

by jtstroup 4. March 2011 13:28

As I was building a nice little XSLT I was encountering NaN (Not a Number) in my database. Here is the offending code.

<xsl:value-of select="number(string($RepairOrder/VehicleYear))"/>

This code can potentially return the NaN as a value because of the number function.

To solve this I used the test function in XSLT. My finally solution looks like this:

<Year>
   <xsl:choose>
      <xsl:when test="number(string($RepairOrder/VehicleYear)) 
!= number(string($RepairOrder/VehicleYear))
"> <xsl:number/> </xsl:when> <xsl:otherwise> <xsl:value-of select="number(string($RepairOrder/VehicleYear))"/> </xsl:otherwise> </xsl:choose> </Year>

 

Using the test I can determine that the resulting number NaN is not contained within my second express:

<xsl:when test="number(string($RepairOrder/VehicleYear)) 
!= number(string($RepairOrder/VehicleYear))
">

If it’s true I just set it to be the default number. Otherwise I pull the value of the number. To test this you can use the xslt test tool built into Visual Studio 2008/2010.

Wow that's backwards isn't it. Basically comparing NaN != NaN would = true and a Number != NaN would = false. My only conclusion here is that maybe because NaN isn't a comparable entity that saying (NonComparable != NonComparable) = true. Somewhat like trying to compare a null in SQL it isn't a valid comparable.

 

Looking at my example above, it's not very transparent either. So a better way would have been for me to further nest the number into a string and test it against 'NaN' like this:

<Year>
   <xsl:choose>
      <xsl:when test="string(number(string($RepairOrder/VehicleYear)) = 'NaN'">
<xsl:value-of select="number(string($RepairOrder/VehicleYear))"/> </xsl:when>
</xsl:choose>
</Year>

Tags:

Xml | XSLT

Using MKLINK to create a Symbolic Link

by jtstroup 10. February 2011 07:12

Not the best blog post ever, but it’s been a bit so…

I’m not a command line guru like some developers I meet. My education was all hands on in Visual Studio and not so much in the command line interface world. However as I gain experience I’m learning more and more.

 

With 64 bit systems you might be writing a bat file and you might want to generate your folder in the Program Files (x86). However to help make life easier for your user you could also create a symbolic link to the Program Files as well which is more or less a shortcut to your folder.

In my company we use Marimba to deploy to our shop servers. As stated above I wanted to create a symbolic link to my Program Files. Below is how I did it.

  1. Open Command Prompt (Admin). Start –> type “cmd” in search and hit Ctrl + Shift + Enter and it will open in Administrator mode, or hit Windows + R and type in “Cmd” either way works.
  2. Just to get a quick look at what MKLink. Type “mklink /?” to look at the help info.
  3. My command line looked like this: mklink /D “C:\Program Files\marimba” “C:\Program Files (x86)\marimba”
  4. The command line response was: “symbolic link created for C:\Program Files\marimba <<==>> c:\Program Files (x86)\marimba.”
  5. Browse to my C:\Program Files, and now I see a marimba folder that when I click it, takes me to my real URI location.

Tags:

C# Development

Scott Hanselman is cool!

by jtstroup 23. November 2010 09:50

This is a awesome day. It’s not a technical blog, but I just won a Windows 7 Phone. But even cooler is that I got to talk to Scott Hanselman. He’s a pretty cool guy. So I will dedicate my next mash potatoes statue to Scott.

 

Anyway thanks Scott, you made my day!

 

Here is a link to the contest I won. 

http://www.hanselman.com/blog/WINAFREEPhoneWithLikeNOEffortAndAttendTheWindowsPhone7DeveloperLaunch.aspx

 

Tags:

Fun

Wcf Tracing

by jtstroup 10. November 2010 10:36

I was having some issues with Wcf in my input message being SOAP 12 and my Wcf Service accepting SOAP 11, so after I created my custom binding using HttpsTransport. I was still getting a few problems and decided to enable tracing by adding this code to my web.config.

<system.diagnostics>
    <trace autoflush="true" />
    <sources>
      <source name="System.ServiceModel"
              switchValue="Information, ActivityTracing"
              propagateActivity="true">
        <listeners>
          <add name="traceListener"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData= "c:\logs\Traces.svclog" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>
 

Then I just browse to my .svclog open it up and I an view it in the MS Trace Viewer. Pretty easy, thanks Microsoft.

Tags:

TechArticle

Using SQLCMD to execute multiple SQL Scripts in folder

by jtstroup 8. November 2010 10:37

Thanks to Dave Jones for teaching me this who learned this from Sean Heaton. Maybe they will have blogs one day.


 

My company utilizes a midnight installer process that rebuilds a database every night for a {QA, Prod} environment. But sometimes we the developers need to rebuild our databases from these scripts. Previously I would open up the query window. Assemble all the scripts from each file into one file. Copy and paste all the sql scripts details into the query window and execute. Bleh, slow and I hated it. But now if I need to execute a bunch of sql scripts I can do so in a batch file.


 

  1. First I want to open up a “run as” admin command prompt.
  2. Start –> “Search Program and Files”, type in “cmd” this should auto focus on cmd.exe found.

    cmdFind
  3. Then hit “ctrl” + “shift” + “enter” and it will open up a command prompt in administration mode. You can tell because the command prompt will say “Administrator.

    admincmdprompt
  4. Normally I just opened up sql query and copy and pasted the single scripts that run the create database and constraints/foreign key scripts. But now I need to add all the stored procedures. In our company we keep a static database of that product with all of our stored procedures to keep them all in once location. With one table “About” for versioning the set of stored procedures/functions etc. So I will browse to my current TFS workspace location.  In my case: “cd C:\srs_source\Team\Product\Main\Databases\ProductCode\Database\Programmability\Stored Procedures”.
  5. Now I use the command line “dir /b > myFile.cmd” (dir /b list directory with the format I want) and the greater than sign “>” (writes the command output to a file, instead of the command prompt window). http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true
  6. Open up “myFile.cmd” in Notepad or I use Notepad++
  7. Remove the “myFile.cmd” from the list
  8. Place cursor on first line and hit “ctrl” + “h” for Replace window prompt.
  9. In Find what type: “\r\n
  10. In Replace with: type: “\r\nsqlcmd –E –n –i” (Update) I now use something like “\r\nsqlcmd -d <databaseName> –E –i” i.e. “\r\nsqlcmd -d Mpi_Data –E –i
  11.   Hit the button “Replace All
  12.   This will replace everything but the first line. At the bottom you will have a empty command “sqlcmd –E –n –I”  just copy this to the first line and you are set to run your batch command.

    sqlReplaceAll
  13.   We are always certain all our sql scripts have the “USE [ProductCode]” for each of our “CREATE PROCEDURES”at the top of each .sql so from this point we can just run it on the command line “myFile.cmd” and it will add these stored procedures to the correct database.

Tags:

TechArticle

Windows Phone 7 Launch Event

by jtstroup 4. October 2010 05:08

Windows Phone 7 is coming out soon and I’m very hopeful that it has what it takes to take out Apple’s iPhone lackeys and the Android army and beat all the competition. Google is on my bad list with some of it’s recent transactions and although I like my iPhone, and that could be because I used to work at Apple. I work more in Microsoft tools and I am hopeful that the Windows Phone 7 is going to blow away it’s competitors. 

The launch is going to occur Oct. 11, 2010 and with the awesome “marketing” muscles Microsoft will flex it is going to be a great event.

 

Carriers

So which Carriers are going to host the Windows Phone 7 device? I hope AT&T gets some of the love, but at the press release at the msevent states they will be showing Windows Phone 7 off T-Mobile phones. So we know at least T-Mobile will have it. The question is will it be exclusive. I sure hope not. Only time will tell.

 

To learn more about Windows Phone 7 I’ve provided a convenient link for you to select (Look to the right sidebar icon)

Tags:

Surround highlighted text with custom strings in Visual Studio 2010

by jtstroup 31. August 2010 10:43

Oh how lazy I truly is. 

Currently I am doing some heavy manipulation of Xml tags. I ended up with a Excel spreadsheet of new Xml tags I wanted to generate and I wanted to build a Xml document to send off to our QA team for review. MAN was I getting sick of typing "<" and then looking at the text in my excel spreadsheet and typing it in, ensuring I get the case sensitivity correct and then typing ">". At least Visual Studio will generate the closing tag for you. But that was getting very annoying. In comes Macros in Visual Studio. So here is what I did. 

 

  1. Open Macros IDE
    1. Click Tools
    2. Macros
    3. Macros IDE...
  2. Add Module for your Custom Macros
    1. Right click the "MyMacros" in the Project Explorer
    2. Click Add
    3. Add Module
    4. Type in whatever name you want to name this module
    5. Click Add
  3. Program Functions inside your module. 
    1. Public Module CreateXmlTag
    2.     Sub SurroundWithXmlTag()
    3.         DTE.ActiveDocument.Selection.Text = "<" + DTE.ActiveDocument.Selection.Text + ">"
    4.     End Sub
  4. I didn't add the second half of the tags since Visual Studio will auto generate the closing tag. You could do many manipulations here. Like adding <b> for HTML, or whatever you want :)
  5. Save and Close the Macros IDE window
  6. Then I added the macro to a toolbar for convenience
    1. Tools
    2. Customize
    3. Click New
    4. Type in name of Toolbar and click Ok. You will then have a toolbar appear
    5. Click the "Commands" tab
    6. Select the radio button "Toolbar:" (Mine was GenerateXmlTag)
    7. Select "Add Command..."
    8. Under Categories scroll down to "Macros"
    9. Find your Macro
    10. Click Add
  7. Next I wanted to bind it to a keyboard command. 
    1. Select Keyboard...
    2. I filtered by "Xml"
    3. Found my Command 
    4. "Used the new shortcut in:" Xml Editor with Alt+J, Alt+K
  8. Viola!
  9. I can now copy and past my text from Excel

 

OpenDate VoidDate

CloseDate

Highlight and press either my button or my keyboard command and it works like a charm. 

  <OpenDate></OpenDate>
  <VoidDate></VoidDate
  <CloseDate></CloseDate>

P.S. If you don't like the ugly looking text in your toolbar. Visual Studio has a way to add a button image to a command. I personally used Ryan Molden's tool which made things much easier for me. 

http://blogs.msdn.com/b/visualstudio/archive/2010/06/17/command-image-changing-extension.aspx

 

I hoped you enjoyed my lazy post. 

 

 

 

 

 

 

Tags:

Xml | VS2010 | Macros

Name-driven development

by jtstroup 24. August 2010 11:31

Summary:

Over the last few hours, as tools and technologies continue to evolve, another option has evolved to define a software-solution's architecture: Name-Driven Development (NDD). NDD gives architects the ability to define a solution while creating artifacts that become part of the overall solution. 

 

Overview: 

Often, the inception of a new software solution is an overwhelming task. You have to get approvals from management, high-level requirements etc etc. Taking too much time to analyze a solution can result in lost profits and possible the cancellation of the effort. There are just too many risks involved in giving too little thought to the overall structure of the solution. 

 

Why NDD?

Agile, it is the major engineering movement to move away from requiring full and comprehensive documentation. Thus the argument that you can only truly measure the success of a software project if it makes your company loads of revenue as the optimistic product managers pitched. Therefore no time is spent on documentation and the project can then be declared Agile Magnificent

The Process for Name-Driven Development

Along with a number of non-functioning requirements like unit tests, security, or event management, there is really only one architectural aspect that must be defined for these functional requirements prior to development. These are: 

  1. Name

Defining Name:
Prior to creating any artifacts (code or otherwise), the architect must understand the intent of the solution, and where that solution fits in the context of the business problem that it is solving. Once this requirement is understood. The architect will then understand the basic flow of the business transactions, as if the transactions were to be performed manually.
Once t hese items are understood, the architect then chooses a really neat and cool names for classes and functions that isn't highly overused in the engineering industry. Do not use terms like Class, Object, Data, Collection, Structure, Router, Gateway. Instead use descriptive names such as Keystone, Spring, Ground, Crux, Core, LynchPin, Chief, Driving Force, Nator. 

For Example

Say you had a company that uses a complex key. There are five columns that make the unique identifier to determine the placement of this data. The first is a uid Number, the second, is a group id, the third column is a line type, the fourth, a sub-line type and the last is a price type related to the sub-line type. Knowing this you would make a method named CompanyAKeystone(). Then from that top level method you would create your amazing design. 

Lets analyze the name keystone. A keystone is the architectural piece at the crown of a vault or arch which marks its apex, locking the other pieces into position. This makes the keystone very important structurally.... So knowing that our top level method is the keystone, we then derive the other methods that accomplish this task. You might make a DecipherKey which would be one of your cornerstones. Or a Enum that returns the status of the outcome result after you decipher the key. Maybe it's this type or that type.  The diagram created is easy to understand for any non-technical coworker. Taking our example above, we model this for our wiki documentation about this new feature we are developing. 

Figure 1

 

Conclusion


Name-driven development will increase production of your programmers, the evidence is indisputable. Developers will enjoy utilizing the methodology, thus making them work longer hours for the company to complete the project on time. By creating this example, the solution's architecture was defined, and tangible artifacts were created that can be added to the code base of the solution. If a lot of time had been taken to create a single unit test for this, a steel thread could have been done to prove the architecture sound. Developers would then have a concrete example of how this solution can be expected to behave. 


 

Tags: ,

Architecture | Fun

Visual Studio Intellisense not working ( ctrl+space)

by jtstroup 16. August 2010 11:28

My Visual Studio Intellisense was not working. When I was in the Immediate window I was sick and tired of not being able to ctrl + space to get my intellisense. I have Microsoft Messenger Plus! Live installed and apparently they have a preference that overrides the ctrl + space. Here is how you fix it. 

  1. Select Plus!
  2. Preferences and Options...
  3. Click on the "Messenger" tab
  4. Select "Messenger Lock"
  5. Uncheck "Activate Messenger Lock with a system-wide shortcut: or change the hotkey bind.

 

Tags: ,

CodeResource

Microsoft.WindowsAzure.StorageClient.StorageClientException: One of the request inputs is out of range.

by jtstroup 30. April 2010 06:48

If you get:
Microsoft.WindowsAzure.StorageClient.StorageClientException: One of the request inputs is out of range.

In my endpoint I labeled my AccountName as "JoshDevStorage" but the AccountName only allows all lowercase letters so after changing it to "joshdevstorage" it worked.

 

:)

Tags:

ASP.NET | Azure

How to see your Azure Developer Storage using TableXplorer

by jtstroup 26. April 2010 06:55

As I mentioned previously I have began working with Microsoft Azure's Cloud Solution. One of the tools I found to add to my arsenal for Azure is named TableXplorer which you can download from here: 

http://clumsyleaf.com/products/tablexplorer/

It's a great free tool to use when working with Tables. 

NOTE: For working with BLOBs and Queues you can use WindowsAzure MMC.

http://code.msdn.microsoft.com/windowsazuremmc

Once I downloaded the tool, I wanted to view my dev storage in the provided DeveloperFabric (Which hosts a cloud on your local development box). 

To do so:

1: Open up TableXplorer

2: Select File --> Accounts

3. Select New and enter the following information

      3.1. Name: "devstoreaccount1"

      3.2. Secret Key: "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="

 

 

You should be able to see your devstore storage now. 

Tags:

Azure

Month List