Taswar Bhatti
The synonyms of software simplicity
node.js

Node Tools for Visual Studio is currently in Alpha 1.0 and its free and opensource, in this post I will show you how to install Node and Node Tools for Visual Studio (NTVS).

NTVS

NTVS

First lets install Node.js
Download Node from http://nodejs.org/

The currently version is node-v0.10.26-x64
Step one lets run the msi that we just downloaded from nodejs.org

Node Install

Node Install

Read and Accept the License Terms and Conditions and click on next.

Node Install

Node Install Screen 2

I have chosen the default location which is C:\Programs Files\nodejs

Node Install

Node Install Screen 3

Remember to install npm, Node Package Manager is the package manager for node, similar to NuGet for .NET

Node Install

Node Install Screen 4

Node Install

Node Install Screen 5

Node Install

Node Install Screen 6

Node Install

Node Install Screen 7

Finally we will verify with command prompt if node was installed properly by typing the command node -v

Node Install

Node Verification screen

Now lets install the NTVS tools for visual studio.
Download it from http://nodejstools.codeplex.com/

I have downloaded the Visual Studio 2013 version of it, it also comes with a 2012 version.
Let run the NTVS 1.0 Alpha VS 2013.msi

Read and accept the terms and condition and click install

Node Visual Studio

Node Visual Studio

ntvs2

ntvs3

Now we will lauch Visual Studio 2013 and go to the JavaScript section, one will find templates for Node.js

NTVS

NTVS

In my next post we will go through and write a simple node and express web application.

motivation

Here are some tips on motivating software development teams

Not exactly like the image above, but more realistic motivation for knowledge based people, especially developers. Being a lead for many years I found these tips very useful so I though I would share them, and to be honest they are mostly just common sense stuff.

1. Build Trust
Be with the team build trust just like a coach who motivates a team for a game, keep them motivated before and during and after the game, even for the next game. Keep them engaged have food/lunch with them (there is something about breaking bread together), bring them pizza during crunch time.

2. Realistic goals and targets
Get the input and agreement with the team, for work the team has to do, don’t just assign the work to the team/person and mark it (2 week project) when the team/person who is involved in doing the job does not even know about the work/task that needs to be done. Have them involved during the scoping of the project since they will have insights to the project or code base that as a lead or manager did not think about.

3. Measure performance
Are we on track or off track, how do we measure (Agile, Scrum/Kanban board, Story Board), what resources my team members need to get back on track. Maybe there needs help in some area expertise, support and tools

4. Celebrate success and incentives
Even for small milestones, not just at the end, rewarding the team all together not just the super man hero attitude. A Starbucks or TimHorton card for everyone goes a long way, also buy nick knacks for a reward. Let people know that they are awesome for what they do.

5. Know your team
Is the person a detail oriented person, are they right for the job that you have assign them Find out if they are introvert or extrovert, what are their idiosyncrasy, being aware of where they are on the project, be mindful treat people with respect. During a marathon, runners get water at certain spots, being the manager you need to be the person who is handing out the water and cheering for them, so that your team is motivated and hydrated to keep them running, same goes for software development.

6. Meet regularly
Have small/daily meetings with the team to find out if there are any road blocks and additional resources that is required. Have monthly meetings with individuals one-on-one to talk to about: future projects, how as a manager you can improve (reviews goes both ways), a form of retrospective on things that one can do well, get inputs from individuals sometimes people may not like to speak in a crowd, having 1-1 input is great for even performance review, take notes, rather than leaving it for end of year one should do it every month.

7. Its not about you, its about the team and give them a purpose
Its about the team now, as a manager you need to know what motivates your team. Is it money? Is it work life balance? comfortable environment? working remotely? Every one is different and is motivated differently, find out what makes the developer “ticks” and unlock the potential of the developer. Allow them to create a purpose to what they are building find ways to show values of what they do and not something nonsense that they are building.

8. Share work with Autonomy
There is something called the “bus factor” for a reason. If developer A is the only person who knows the database code and no one else does, what happens if tomorrow s/he gets hit by the bus? Utilize your team to know all the skills of the system, have people work on a project together to motivate each other, be confident in their ability, let them have the autonomy of making decisions on modules.

9. Be positive
No one wants to work for a negative workplace/person. Show your excitement on the business or project you are completing. Being positive is infectious, it will lift the spirit of others and grows like a snowball.

SQL
Square Brackets

Here is a quick tip, when you are searching for a text that contains square brackets “[]” in Microsoft SQL Server. For example you are searching for a text that contains “text text text [text] text text”. A simple query using LIKE % would not do the trick.
One has to add double square brackets to search for the square bracket text.

Example

The previous query will not return any match items. But if you replace the query with double brackets like

The above will return you data that match the square bracket text.

startups

team work

Here are 4 tips on Hiring for startups

1) Hire well rounded senior developers.

If you hire junior developers you will end up having a lot of code debt and at the end you will
have to pay back the debt (just like borrowing money with interest). Having well rounded generalist senior developers would alleviate most of the debt but also have a small number of juniors to help out small modules. I have seen companies with 4 seniors do amazing things.

Of course, the initial cost of hiring senior developers is way more than juniors but at the end it will cost you less, since you will have less technical debt.

Also try not to hire specialist. e.g database scaling pro (DBA), web scaling pro, since you need someone who can jump into any part of the code to fix things (database, network, web, font-end javascript, version control etc), while a specialist may not have that experience.

2) Give Incentive to employees

Early stage startup need to give incentive’s to all the founders. Give equity to the people who work, but do give them by fairness and by giving it in equal portions to their input to the company. By giving them shares or equity, you would create more loyalty from the employees, they would put their heart and soul into the baby (startup).

Don’t forget to create a vesting schedule, overtime give share to the founders they are allocated. e.g first year 30% and over the months the rest of the amount of it, thus it will eliminate if a founder leaves the company of having 50% of the share in the 10th year of the company when they left in the first year.

Example:

  • Founders: 25% up front and the rest monthly over 3-4 years.
  • Employees: 25% after one year and the rest monthly over 3-4 years.

3) Dont’ forget remote talent

It may be hard to hire local talent but remote work is getting very popular. I don’t mean outsourcing by just hiring people from China or India to do the work, maybe the talent is not in your city, maybe in another part of your country, and the developer is willing to work remotely and time to time travel to the startup location to have meetings etc.
I believe this is gaining quite a momentum these days e.g #37signals, #github, etc | https://weworkremotely.com/

4) Always be hiring ABH

In the words of Glengarry Glen Ross speech ABC (Always be closing). A startup needs ABH (Always be Hiring). A startup needs to be always be hiring and looking for great talent, because you may be happy with your team but you never know if someone else would scout your talent away from you.

dotnet C#

Here is another C# tip.
Most of the time when you are trying to get a value from dictionary you would try to check if the key exist or not something like.

But one can use TryGetValue

The benefit of using TryGetValue is that the dictionary is synchronized, there is no race condition.

WPF

Here is a hint when using WPF and you may come into a situation where you want to databind an element to its Parent ViewModel.

ViewModel

As an example lets say you have a view that is binding to ViewModel and inside your xaml you have a control that has DataTemplate
The code Below we are using the BusyIndicator from https://wpftoolkit.codeplex.com/

Our ViewModel looks like

We would assume that the property would bind, but actually it doesn’t since the datatemplate is there.

So what we need to do is bind it to its parent viewmodel

What we need to provide is RelativeSource and the AncestorType, below we are using UserControl but it could also be Window or a provided type like AncestorType={x:Type XYZObject}

iis8

If you are running Windows Server 2012 with IIS8 and you got this error HTTP Error 500.19 – Internal Server Error. If you web.config file contains “handler” or “modules” tag.

In order to fix this, launch cmd or powershell and execute these 2 commands inside of C:\Windows\System32\InetSrv

This will unlock the handlers and modules section.

dotnet C#

In C# there is a params keyword which allows a method parameter to take variable number of arguments. MSDN

Some notes on param

  • It must always be the last parameter in the function/method definition
  • There can only be one params keyword in a function/method parameter signature

Example:

But by changing it to params we can change the call and simplify it

There is no performance bottleneck in using params because the compiler is basically changing your code into an array for you, thus it is basically just syntactic sugar for C#.

phantomjs

Thanks to everyone who came out last night at OttawaJS for the phantomjs talk, the slides are located at slid.es.
You can find the code in my github account. https://github.com/taswar/ottawajs-dec2013

A recap of things we covered:

  • Simple screencapture
  • CoffeeScript with phantomjs
  • Scraping hackernews and dzone site for links
  • using webdriver to integrate with phantomjs (python and ruby)
  • Using remote webdriver to integrate phantomjs with jruby
  • Rails app with phantomjs integrated to take screencapture
dotnet C#

In C# there is the out parameter keyword which causes arguments to be passed by reference. It is like the ref keyword, except that ref requires that the variable be initialized before it is passed.

Example:

The out parameter keyword provides a way for a method to output multiple values from a method without using an array or object, since the return statement only allows one output, by using out one can return multiple values.

Last but not least I personally do not recommend using out keyword and also from
The Framework Design Guidelines it also recommend to avoid using out. If you have multiple returns use an object that wraps around the value is a better design.

UA-4524639-2