Monday, June 23, 2008

AutoHotKey


AutoHotkey unleashes the full potential of your keyboard, joystick, and mouse. For example, in addition to the typical Control, Alt, and Shift modifiers, you can use the Windows key and the Capslock key as modifiers. In fact, you can make any key or mouse button act as a modifier.


JP's Take

Friday, June 20, 2008

Tools

Microsoft SoftGrid Application Virtualization
Microsoft Application Virtualization platform allows applications to be deployed in real-time to any client from a virtual application server. It removes the need for local installation of the applications. Instead, only the SoftGrid runtime needs to be installed on the client machines. All application data is permanently stored on the virtual application server. Whichever software is needed is streamed from the application server on demand and run locally. The SoftGrid stack sandboxes the execution environment so that the application does not make changes to the client itself. SoftGrid applications are also sandboxed from each other, so that different versions of the same application can be run under SoftGrid concurrently. This approach enables any application to be streamed without making any changes to its code.



Gallio The Gallio Automation Platform is an open, extensible, and neutral system for .NET that provides a common object model, runtime services and tools (such as test runners) that may be leveraged by any number of test framewo



Pex

Pex (Program EXploration) is an intelligent assistant to the programmer. From a parameterized unit test, it automatically produces a traditional unit test suite with high code coverage. In addition, it suggests to the programmer how to fix the bugs.

Thursday, May 15, 2008

Agile Q&A

with Dave Laribee

No direct access to the customer or How do we work with indirect customers? (15)

·Bring them in

·This is one of the highest risk type of client

·You need a continuous presence / continuous access

·You don't want any barriers to communication

·You need to have a good working relationship with the client. You really can't do this unless you have actaully met the person.

·Move us to them

·Customer proxy can fill in a pinch.

    • Needs customer level authority / responsibility

Agile in a waterfall org? (13)

·Focus on the agile principles and not on Agile itself

·Don't call it agile and let your results sell your process

·Start with things that'll make the customer happy

    • A CI server so the customer can see the build and you'll seem more trustworthy and transperent
    • The customer has to be aware of what they're seeing

·Have success and show your success and be aware that others will push back

·A whole bunch of short iterations can fit inside a CMMI cycle

    • You will have points of synchronization

·How do you eat an elephant? One bite at a time.

·Solve pain

How do we not get mired in the details of the process? (10)

· Ensure the goal does not become Agile, it should always be the product

· Get a Champion

· Build up rules of etiquette

· Learn from your peers and resources

· Don't let estimation session turn into design sessions

How to start with Agile? (9)

Can we use Agile engineering practices without the management practice? If so, which ones yield the best results. (9)

· Yes

· CI and automated build are an easy start

· Focus on frequent releases

How do we involve customers and stakeholders? (9)

Agile as a one-man-band or small shop? (8)

Where's the Agile NorthWind? (8)

How to maintain velocity near the End of a release? (7)

How to we sell Agile to Suits? How to we sell Agile to our technical leaders? (6)

How do we foster an environment of continues improvement when "Agile" adoption is surface of mediocre? (6)

Distributed Teams (6)

Books and Articles

· Scott Ambler article on blocking

Notes

· Self organizing teams are very risky as they do have clear authority and reasonability

· With estimation the SD will average out over time

§ You want stories around the same time so you can keep the same velocity

§ Break tasks up into the same point stories so all your work is a similar size

§ You just want to know if something is so big it need to be broken down

§ We are good at determining relative size, but not exact size

· Agile in not just Scrum, Scrum is not the only Agile

OR/M +=2: More than just Data to Objects

with Oren Eini

Oren is so far above the normal programmer it’s like he’s talking about a programming language I’ve never even heard of. So, there’s not much detail here.

Definitions

·Combinatorial Explosion

Data Access

·Is just too difficult

·However, Persistence is a solved problem

·Once we have the solution in place however we still have problems in scalability

Adaptive Domain Models

·A domain model that can change after it's been compiled

·Use in

    • Composite applications
    • Counded contexts
    • Pluggable components

Multi Tenancy

·Multiple tenets using the database so you need to virtually partition the data

·Or same code with different domain objects

·Each customer gets a model that matches their needs and a database that inherit that same structure

·Each customer can get the behaviors that matches their needs

·Have a standard model and just customize the different little bits

    • Don't use IF statements!

Full Text Searching over the entire database

·Apparently it's possible with NHibernateContrib, just don't ask me how

The Future

·Self optimizing queries

o A Future

o Defers execution until a value is needed, then fetches all the deferred values

o Check out the code for the Future Object in the DevTeach materials

Power Tools

·These tools and techniques give you flexibility and power, use them

Notes

·What is a Strategy?

·ThreadStatic Attribute

DDD by Example

with JP Boodhoo

This was a very heard session, there was a lot in this that I will have to follow up on later.

Define

·SUT - System Under Test

Stories

·The who, the what, the why

·The why is very important.

·If you're not solving a problem, then you're just a programmer

Repositories

·What are they?

Aggregate roots

·Gatekeepers to sets of related items

o controls access to children

Notes

·Tests in project perhaps and use NAnt to strip them out

·Writing service layer using Specifications?

·Learn expression trees

·Leverage the extension methods

·Favor side effect free functions

·Drive from the UI down

·Inappropriate intimacy

o Let items manage their own state

o Don't expose through get/sets and let others do the work

Efficient UI Deisgn

with Markus Egger

Importance

·iPhone is almost useless as a business product, but has an amazing UI that is carrying the product

·The UI is what people see, it's what they can touch

·The only way the user can access our kick ass features

·This is the first impression of your application

Design consideration

·Familiarity

·Easy and intuitive

·Productive

    • For beginner and advanced users

·Have to help

Rules

·Know your users

    • We, as developers, tend to look at things differently than other users
    • User Types
      • Apologists versus Survivors

·User's Goals

    • User's have tasks and goals they want to achieve

·Skill Level

    • People don't stay beginners on a system for long
    • Average users aren’t targeted enough
    • Skill level is a bell curve

·Mental Model

    • People approach your application with previous knowledge about the application domain

Cognitive Friction

·It's tough to deal with things that change over time

·The result

    • Uses will sue the smallest set of features that they can get away with
      • We need to make features more discoverable
    • Users feel stupid
    • Higher maintenance and support costs
    • Makes people hate us

Learnability

·How easy is it to discover and then use features

    • You can time this

Usability

·How productive and intuitive is the UI for the average user

·Often confused with Learnability

·Usability tests tend to be large scale and over a long time

Clarity

·Don't overwhelm

Choices

·How many choices to provide

·What can / should we assume up front

·Remember the user’s answers

Metaphors

·Applying real world things to computers

·Be cautious of broken metaphors

Notes

·Don't make users look bad

·Make sure you Let users do something they couldn't do without a compute

·People don't read

Books

The Inmates are running the asylum

Load Testing ASP.Net Applications for Scalability and Performance

with Richard Campbell

Definitions

·GC - Garbage Collection

·WAST - Windows application stress tool

·RTT - Round Trip Time

Load Failure

·Looks like a bug

    • Object reference not found
    • Usually in relation to Session

·If the GC is too slow, the process will reset

What eats memory

·Session is long duration memory

·Cached objects

    • The server will destroy the cache if needed

Where to start

·Get one good script

·What is the most common usage/path

·Build scripts from WebTrends

How to test

·You can test in VM

·Run for 2 - 3 hours for more realistic data

What to look for

·Heap size

·Request caches

Performance

·Concurrent Users are different than Active users

·Pages per Second is different than Transaction Per Second

·RTT can be a killer

·ASP.Net will tend to die due to memory first

Performance versus Scaling

·Scaling is the difference in performance between the best and the worst performance

Tools

·StrangeLoop - performance enhancement hardware

·VSTS for Software Testers

o Can cluster multiple machines together

o Provides a variety of measures

·Perfmon

·YSlow for Firefox

·Apdex.org - Application Performance Index

Notes

·Every product is load tested

    • Either in a lab or with your customers

·Performance testing must be a day 1 actility

·Processors are either on or off. 80% means it's on 80% of the time

·Average web page is 250k with 60 resources