ASP.NET Skills

ASP.NET itself was all about recognizing that a web site has a lot of features that are the same across web sites. The Patterns & Practices Enterprise Library also addressed the fact that a lot of problems need to be solved for all kinds of applications– and to some extend, these cross cutting solutions have been moved into the .NET framework.

Authentication. Determining who the user is.
Authorization. Making groups of users, deciding what actions groups can do and what things they can touch.
Security. Making power APIs unavailable to hackers.
Data Tier. Getting data out of tables and into objects and collections. And putting it there.
Build. Deployment. Turning source code into a published application.

The problem domain itself. Obviously the problem domain will make some APIs more useful than others and is the most likely to consist of custom code.

Knowing that there are these half dozen problems that all websites face isn’t too useful if you don’t know the expected hosting environment.

Intranet. If the app is a private intranet application, then authentication and authorization would likely be done by Active Directory or Adam, security is somewhat less critical to be built into the application because users are employees who fear losing their jobs are not sophisticated hackers (as compared to the internet scenario where attacks are from sophisticated hackers safely in another jurisdiction). A full version of SQL Server is probably available. Full control of the Windows server allows for MSI installs, access to SSL certificates, etc.

Internet. If the app is a public internet application, then authentication is going to probably be the SQL provider, authorization will be SQL or Azman, security will be important because random world wide hackers and malware will be attacking your machine even if you aren’t an e-commerce site. The data tier might be more primative, maybe XML files, like in a Das Blog set up. The hosting account probably doesn’t provide for MSI installs,

Hybrid Intra/Internet. This is the most challenging set up because MS didn’t specifically provide for it. In 1.1 it was very hard, in 2.0 it is possible but still hard. ’nuff said.

[Sorry no time to finish writing this post]

Webcast Notes: Top 5 Challenges Faced by Software Development Teams…

Recommended listening speed: 1.25

Top five software challenges:

-Invisible Progress
-Inefficient (manual tasks, expensive communication)
-Too many *unintegrated* projects (stovepipes?)
-No process (I’d add, wrong process, too much process, fake process, dysfunctional process)
-Not enough $$

What is invisible progress?

LOC failed to measure software. Metrics tricky to collect. Customers, managers become unhappy and unrealistic. Related to the *estimation* problem. If you can’t measure progress, you probably can’t estimate either. The shift away from code that can be measured with LOC makes it that much harder to measure progress

Test for invisible progress– How much progress? (Software measurement) How much more progress can we make with our current resources? (Software estimation)

What are Inefficiencies?

SDLC– The SDLC is what is inefficient. (primary, secondary activities, e.g. analysis, code, source control, build, etc. etc.) Bottle necks here are more technical, physical, e.g. it takes long time to build, slow debug process, etc.
Social bottlenecks, eg. inter-team communication, interperson communication, customer-team communication

Communication tools- In person, phone, IM, email, memos (word documents), PPT shows <– unstructured communication.

What are disparate projects?

In particular, different tools, ie. as you move thorugh the SDLC, you have a lot of context switches, for example here is a SDLC with many tool context switches: IDE–>Source Control (subversion)–>Text Environment –>Communication Env (Word/Email) –>Reporting (ad hoc) –>Work flow (white board)

What is a lack of discipline?

Missing, wrong or bad process.

Evidence of discipline:
- formally defined workflows
- formally defined responsibilites (specialists, not a collection of 1 man teams)
- accomodating different skills (i.e. explicit consideration of the fact that there is a singnificant learning curve, different skill levels, etc.) i.e. training & progressive increase in duties
- someone collecitng metrics
- someone doing estimates, collectin data on estimates: metrics + predictions
- improvement feedback loop (formally identify problems & solutions)

Problems lack of money causes:

Fewer people, fewer tools, less formal training, fewer outside experts. Can make existing problems worse.

However…some problems can’t be solved with more money, i.e. necessary but not sufficient resource

Challenges in curing this– organizations don’t spend money on IT because it is a task peripheral to the main organization’s mission (running government, selling stuff, etc.)

Generic Solutions
Invisible progress: collect metrics! publicize it! Pay the cost of collecting metrics.
Inefficiencies: Formalize improvement process! (identify & solve, duh)
Disparate tools: Pick integrated tools (prefer IDE plug ins over separate tools)
Lack of discipline- adopt some sort of softare process. Works best if there is a advocate for process on the team, preferably the project manager.
Small budget-Solve other problems first. (spend carefully, duh)

MS Solutions
Visual Studio– plug ins, VSTS has metrics, formalized communication (bug tracker, feature tracker, tracker=workflow, reports, even datawarehousing style reports)
Editions encourage specialization (implies about 4 kinds of developers on a team)

MSDN = 5 user license for team server + 1 dev environment, ~$2,500/yr (not clear about other 4 developers licenses, presumably dev env will need to be purchased separate for each)
Team System Server — (not clear what price is, presumably $$ if more than 5 users + per user costs)Dev Env not targeting team system- $0 – $800
Dev Env targeting team system = $5,500 -> $11,000 (!!) each!

Despite the sticker shock when comparing against say a MSDN subscription, this may be cheap when comparing against Rational or other IDEs meant for huge programming teams (50+ developers)

Conclusion. Team System is for big companies. Everything up to VS200X Pro is for small teams. If you use VS200X Pro, you will still need affordable source control, collaboration, etc. Can use CodePlex if the project if opensource (which is essentially free Team System Hosting)

ASP.NET: Grid Layouts

Goal: Recreate the world of Windows Forms in the browser and generally not use the flow layout engine of the browser.

Options: Embedded GUIs (Flash, Java, Silverlight), CSS absolute positioning, CSS Grid, Table Layout.

Embedded GUIs means picking an entirely different technology that happens to be able to run as a browser plug in. They require a completely differnt skill set (maybe different staff), more configuration on the client side, are less accessible, etc. I’ll skip discussing this option.

CSS absolute positioning. CSS absolute positioning means adding this to all elements:

style=”position:absolute;top:248px;left: 536px;width: 105px;height: 8px;”

You can improve readability by moving it to a separate css file, but the result is the same, one CSS style per element, which defines size and location.

CSS grid. In the paper and ink design world, designers create various grids with various distances between columns, various distances between rows, (i.e. not necessarily a grid like green math class square grid graph paper). Design elements align to the grid and look better for it.

[place holder, still looking for a site with grid layout tools or templates]

As far as I can tell, CSS grid techniques rely on floating lots of divs around a page in such a fashion that they necessarily line up correctly.

Table grid. Table layout works, but is inaccessible, hard to maintain, etc. etc. It is easier and MS Expressions Web provides a good tool for table layout.

MS Expression Web = Visual Studio 2008 HTML designer, almost.

VS2008Beta2 in many ways is worse than VS2005. Keep in mind I’m reviewing Beta 2, for all I know all this is fixed in RTM. For example you can’t select multiple items at one time, you can’t drop a new control onto a form and expect it to land where you click (it slides to the upper right hand corner). Also, selecting controls via remote desktop is painfully slow leading to many accidental resizings, mis-draggings and setting properties on the wrong control. Using a visual desginer requires video game level responsiveness from the graphical environment and RDP prevents that (or VS2008Beta2 prevents it, I haven’t tested VS2008Beta2 on a local machine yet)

Overlapping Boxes. The text box heights that you see in the designer preview don’t match the heights you see in MSIE7 or Firefox (both browsers show the boxes as taller)

Unaligned Boxes. VS2005 has the Format/Align/Bottoms (and variations), which fix some of aligmnent woes.

Mixing Flow and Absolutely postioned Elements. Typcially you will have a flow layout for headers, sidebars and footers. Design your absolutely positioned layout in a separate page. When done, put in in two div like this:

<div style=”height:500px”>
<div style=”position:absolute;”>
(Your absolutely positioned elements go here)

Pathalogical Sensitivity to Font Resizing. VS2005 absolute position means elements are pinned at corners, so as fonts grow, screen elements begin to overlap. This means, imho, that layouts break sooner than they would if they were a flow layout.

SSIS: Transfer Database Task

Goal: Copy a database from a machine I don’t control to one I do using Transfer Database Task.

Web hosting scenario: If you don’t have sysadmin rights on the source machine, you can’t use offline transfering, which appears to use a detach-copy-reattach process.

On the otherhand, online tranfer wont work either, since you need a network share to both servers!

Patching: Ideally, you are at service pack 2 or later and probably even more ideally, the source and destination are at the same service pack level.  I ran into an issue where I couldn’t copy from SQL2005RTM to SQL2005SP2 on account of SMO versioning problems.

Advice: The Transfer Database Task is really only good if you have full control over both source and target machines and both are on the same network.

Rebuttal: ”Yeah, but SSIS is supposed to be a corporate tool, not a tool for people who don’t own both machines”  And as far as I can tell, SSMS uses the SSIS Transfer Database Tasks as it’s database copying mechanism.