Monday, October 29, 2007

2007-10-29 Monday

Microsoft FxCop 1.36 Beta 2

FxCop is a code analysis tool that checks .NET managed code assemblies for conformance to the Microsoft .NET Framework Design Guidelines. It uses MSIL parsing, and callgraph analysis to inspect assemblies for more than 200 defects in the following areas:

Library design
Globalization
Naming conventions
Performance
Interoperability and portability
Security
Usage

FxCop includes both GUI and command line versions of the tool and supports analyzing .NET 1.x, .NET 2.0 and .NET 3.x components.



Microsoft® Silverlight™ 1.0 Software Development Kit

Sandcastle - September 2007 Community Technology Preview (CTP)
Documentation compilers for managed class libraries
Enabling managed class library developers throughout the world to easily create accurate, informative documentation with a common look and feel.



MyJgui: MySQL client graphic user interface

ViewVC
"ViewVC is a browser interface for CVS and Subversion version control repositories. It generates templatized HTML to present navigable directory, revision, and change log listings. It can display specific versions of files as well as diffs between those versions. Basically, ViewVC provides the bulk of the report-like functionality you expect out of your version control tool, but much more prettily than the average textual command-line program output."


Style Guide for Python Code

python.org
"Python is a dynamic object-oriented programming language that can be used for many kinds of software development. It offers strong support for integration with other languages and tools, comes with extensive standard libraries, and can be learned in a few days. Many Python programmers report substantial productivity gains and feel the language encourages the development of higher quality, more maintainable code."

Friday, October 26, 2007

2007-10-26 Friday

Architecture Resources

New England Complex Systems Institute (NECSI)

Adaptive Engineering of Large Software Projects with Distributed/Outsourced Teams

Zend Core for IBM

Zend and IBM have partnered to deliver Zend Core for IBM, a Web application solution that combines a production quality PHP solution of Zend Core combined with IBM’s powerful DB2 Express-C database.

Zend Core for IBM provides a fully certified, enhanced and supported PHP based application development and deployment stack which includes Apache, PHP, Zend Framework and DB2 Express-C. DB2 Express-C is IBM’s industrial strength hybrid relational-XML data server providing customers access to enterprise grade features such as data replication, high availability clustering and off-site disaster recovery. The result is a highly scalable and reliable web application infrastructure.


IBM Mashup Starter Kit

IBM Mashup Starter Kit's two components (Mashup Hub and QEDWiki) are Web applications that are written in PHP and that run on the Apache Server. They use a database to manage assets (such as feeds and wiki pages) and user-specific and structured data. The user interfaces use the Dojo toolkit and the AreaEdit WYSIWYG editor; internally, the applications use REST (Representational State Transfer), Ajax, and JSON (JavaScript Object Notation).



Linux Resource

LINUX: Rute User's Tutorial and Exposition (Version 1.0.0) Paul Sheer

LinuxSurvival.com

Unbuntu Linux

Documentation for Ubuntu 7.04


SOA / Web Service Resources

WSO2 Oxygen Tank

A practical application of SOA

IBM: Design an SOA solution using a reference architecture

IBM: Service-oriented modeling and architecture

IBM: SOA programming model for implementing Web services, Part 1: Introduction to the IBM SOA programming model

IBM Developerworks > Architecture

Ali Arsanjani, PhD, is Chief Architect for the SOA and Web Services Center of Excellence within IBM Global Services

Rule Object 2001: A Pattern Language for Adaptive and Scalable Business Rule Construction

IBM: Mashups -- The evolution of the SOA, Part 1: Web 2.0 and foundational concepts

web2.socialcomputingmagazine.com

IBM: Building SOA composite business services...the series...(1..11)

  • IBM: Building SOA composite business services, Part 1: Develop SOA composite applications to enable business services


  • IBM: Building SOA composite business services, Part 10: Providing governance over service consumption using WebSphere Process Server and WebSphere Service Registry and Repository


  • IBM > developerWorks > SOA and Web services

    IBM > developerWorks > SOA and Web services > SOA and Web services forums

    IBM > developerWorks > SOA and Web services > SOA and Web services forums > Best Practices for SOA and Web Services

    IBM: Develop asynchronous Web services with Axis2

    IBM: Asynchronous operations and Web services, Part 1: A primer on asynchronous transactions

    IBM: Asynchronous operations and Web services, Part 2:


    Sun.com: Java Message Service Tutorial


    w3.org: Web Services Message Exchange Patterns

    govtech.com: Building Blocks of Shared Services


    Use Cases

    IBM: Getting from use cases to code, Part 1: Use-Case Analysis

    IBM: Getting from use cases to code: Part II: Use Case Design


    LISP Resources

    Lisp for Agile Teams


    Cusp is a development environment for Lisp built on top of the Eclipse platform

    common-lisp.net

    Practical Common Lisp

    The Nature of Lisp


    Misc. Findings

    Prototype is a JavaScript Framework that aims to ease development of dynamic web applications.

    Radiant is a no-fluff, open source content management system designed for small teams. (Ruby on Rails)

    wikipedia.org: Understanding the Long Tail phenomenon

    An Amazon employee described the Long Tail as follows: "We sold more books today that didn't sell at all yesterday than we sold today of all the books that did sell yesterday

    Sunday, October 14, 2007

    2007-10-14 Sunday

    I recently offered to help an Open Source project - by contributing a set of BIRT reports to their code base - which would enable users to print out HTML, RTF, or PDF details of the contents of the system. The lead developer's response was essentially: that's a useless thing - when people can just go online and access the system. I offered counter examples of how/why this could be a useful addition to the tool's capabilities: distributed teams that may be restricted by corporate firewall policies - or security restrictions - that may not be able to access the system; working with multiple external vendors who do not (and should not) have privileges to access the company's internal system; teams that may prefer to work offline in a more relaxed environment (coffee shops?) - and discuss / review detailed print-outs at off site meetings; executive-level steering committee meetings - where the players generally prefer to have paper copies to work from and annotate notes. Try as I might - I could not budge that person one inch to accept the offered contribution.

    As someone once said, "you can lead a horse to water...but you can't make them drink".

    Then again, it could be a blatant (or latent?) prejudice - since BIRT is a Java based application - and the other tool is a PHP based application.

    Eoin Woods (Enterprise Architect, UBS Bank): Top Ten Software Architecture Mistakes: Part-1, Part-2

    Large Scale Software Architecture: A Practical Guide Using UML by Jeff Garland and Richard Anthony published by John Wiley & Sons

    Carnegie Mellon® Software Engineering Institute (SEI): Software Architecture Essential Bookshelf

    Establishing a Service Governance Organization

    The ESB Question

    This is an interesting wikipedia article: Technology Adoption Lifecycle



    I'm a proponent of a mixed SOA model - using an Enterprise Service Bus (ESB) for transactions that need a more powerful layer of infrastructure support (e.g. security, transaction controls, etc.)- but balancing that with services that can / should be implemented with a lighter architectural approach. This book has some good information to help teams balance their approach - and avoid the "everything must go through the bus" fatal performance approach that has plagued many organizations efforts to adopt SOA: RESTful Web Services

    Getting grubby: Demystifying the Linux start-up processes

    Boot loader showdown: Getting to know LILO and GRUB

    Wednesday, October 10, 2007

    2007-10-10 Wednesday

    I'm testing out a new Open Source wiki tool: Wikyblog. It was simple to install - and I like that it supports MediaWiki style wiki syntax. It includes an integrated blog feature.

    I have discovered that some features of the TikiWiki software are not quite ready for prime time. For example - the PDF generation of a page is apparently broken:
    "Tiki has a PDF export from wiki feature, but it has many bugs."

    "Marc Laport, Jason Diceman, Val Luck and, Xavier de Pedro, (add your name here) are offering a total of $300 USD to any single or team of developers that can get this feature fully functional."


    I have been leaning more and more toward a recommendation for my client engagements that suggests a technology stack that would leverage PHP for most web user interface development - Java for heavy backend integration code - Linux and Apache software for much of the baseline framework - PostgreSQL (or MySQL) for the database. This article on InfoQ seems to reflect a possible trend in the same direction: PHP on Java: Best of Both Worlds?

    AgileEVM: Measuring Cost Efficiency Across the Product Lifecycle

    Saturday, October 06, 2007

    2007-10-06 Saturday

    I'm doing some development this evening on a small Open Source project that I'm planning to release - and I'm comparing the implementation between a PostgreSQL and a MySQL implementation.

    Whereas PostgreSQL supports the common RDBMS concept of a SEQUENCE - MySQL does not (at least for the version I'm running: mysql Ver 14.12 Distrib 5.0.24a). However, MySQL Forge has a suggested workaround.
    "MySQL Forge is a place for the MySQL user and developer community to contribute content, suggestions, code, projects, and other MySQL-related goodies."


    A better way to handle this would be as an abstraction layer - such as implemented by a library (e.g. ADOdb for PHP and Python).


    "
    * Designed for speed. It is probably the fastest open source database abstraction library available for PHP. See benchmarks.

    * Provides extensive portability support such as date and type-handling and portable schema creation. See portable sql tips

    * Support many enterprise features such as database backed sessions (with session expiry notification), SQL code generation, pivot tables, SELECT LIMIT emulation for all databases, performance monitoring.

    * Easy to learn, especially if you have Window's programming experience, as it uses many ADO conventions.

    * Extensive QA, every release is unit-tested on Access, MySQL, PostgreSQL, MS SQL, Oracle 9.

    * Mature, continiously developed since August 2000. Has a large community of users.

    * Very reasonable licensing terms (BSD). This means that you can incorporate (and even compile) it into your software applications royalty-free without asking the author's permission, provided you include license.txt in your release. Also dual-licensed (Lesser GPL).
    "





    Some Open Source Code Resources
    OpenLogic Exchange
    "OLEX makes it easy to find and download certified, enterprise-ready open source software packages."



    koders.com
    "Koders helps software developers explore the collective intelligence of more than 15 million programmers and 50 years of computer science..leader in code search for enterprises, communities and software developers...allow programmers to quickly find and leverage existing source code assets to bring new software applications to market faster, with fewer defects, and at substantial cost savings."





    I've made some decisions in the last week on adopting some new Open Source tools for a client engagement:

    TikiWiki

    Pros:

    + Wiki
    + Forums
    + Newsletters
    + Blogs
    + Articles
    + Link Directory
    + Community development of 200+ plugins

    Cons:

    - I liked MediaWiki's Wiki Syntax better




    Flyspray: Task / Bug / Risk / Issue Tracking System

    Pros:

    + Clean, Simple, Intuitive User Interface
    + Customizable (e.g. Status, Task, Category)
    + Support for multiple projects

    Cons:

    - Not yet integrated with webSVN
    - Not yet integrated with Subversion
    - Doesn't support explicit component association with a bug / task entry




    Hudson: Extensible continuous integration engine

    Pros:

    + Clean, Simple, Intuitive User Interface
    + Simple configuration
    + User Interface is a core component of the application
    + Supports Ant or Maven build processes
    + Supports execution of Unit Tests
    + Email notification on build failure
    + Scheduled builds - with Source Code Management integration with Subversion

    Cons:

    - TBD?






    Coding Horror Stories

    OpenMQ




    Setting up a Windows Service for Glassfish v2


    Apache JMeter is a 100% pure Java desktop application designed to load test functional behavior and measure performance.


    FunkLoad is a functional and load Web tester whose main use cases are functional testing of Web projects (and thus regression testing as well), performance testing, load testing (such as volume testing or longevity testing), and stress testing. It can also be used to write Web agents to script any Web repetitive task, like checking whether a site is alive.

    WebLOAD is a load and stress testing tool that is sponsored by RadView. It can load-test any Internet application, including applications that use Web 2.0 and AJAX. Screenshots

    WAPT 4.0 is a load and stress testing tool for websites and web-based applications. It uses a fully customizable set of virtual users to simulate a real-life load.

    Load Testing 101: ASP.NET Web Applications

    How do I stress test my ASP application?


    Web Performance Suite™ Version 3.3 is a testing tool targeted at web sites that use standard technologies such as web forms, J2EE, ASP, .NET/C#, PHP, Ruby, ColdFusion, Java, etc


    DB2 Connect Personal Edition

    Thursday, October 04, 2007

    2007-10-04 Thursday

    A few stories to tell tonight...

    The Value of a Business Card...

    Throughout my career I have been fortunate enough to have met some very smart and successful people. Smart in terms of business, technology, and people skills. Successful as measured against multiple dimensions: achievements, recognition, wealth, relationships, and experiences.

    Through the years I have consciously sought to observe and learn something from each of these individuals - to learn what they do best, how the do it, and why they do it.

    One of those lessons learned: The value of building and maintaining a life-long network of professional contacts. A network of contacts translates into the power to help, the power to affect change.

    Even as a child, I had dreams of running my own business. In college, I had business cards made for a small venture that I launched - even as I worked part-time and full-time jobs to pay my way.

    I have seldom been without a business card in my pocket. It is a fundamental belief of mine that my value as a professional is in no small part a function of the breadth and depth of my network of contacts. I ENJOY making new contacts. I ENJOY being able to introduce people that can help each other solve problems.

    As an example, a manager I knew had a key team member suddenly resign - putting a critical multi-million dollar client project at risk. Another colleague suffered an unexpected loss of their job. Two parts of a puzzle - and knowing each, allowed me to see how they might fit together - and by helping each - I strengthened my professional network by introducing two people to each other.

    I LOVE to make those kind of connections. My only reward is the joy in helping people. I subscribe to the belief that karma accumulates - and eventually, good karma will come back to me - most often in unexpected and unlooked-for ways.

    But to make it happen, you have to plant the seeds.

    The seed is your business card. Have one. Give one. Eagerly accumulate them.

    I've worked hard to maintain my network of contacts - some going back over 25 years.

    One of those contacts: Alex VanLaningham. In 2000-2001 I met Alex. We had some brief discussions about possible opportunities to collaborate. My last business contact with Alex was in March 2002. But we know each other - and we exchanged business cards. I kept his. He kept mine.

    I'll have a little more to say about Alex a little bit later in this posting...


    No-Fluff-Just-Stuff, Redmond, September 21-23, 2007


    [begin-rant]
    So I went to the NFJS Seminar a few weeks ago. About 250 attendees. A very intense, very deep dive, series of sessions covering some leading Open Source Java projects. I looked forward to the 3-day event - to make new contacts - and possibly find some potential candidates / resources for some MAJOR upcoming client engagements that are already inflight.

    I took a lot of business cards to the event...

    Even though I TRIED to network with the people I met - it seemed no one was interested in giving or accepting a business card. A VERY strange experience. Not like anything I've ever experienced at any other software development conference that I've attended in over 25 years in the business.

    Perhaps they thought I was trying to sell consulting services. That certinaly wasn't my intent - I just enjoy networking and adding to my knowledge of people - the kinds of interesting projects they might be doing - what interesting tools and technologies they use to solve those problems - and any lessons learned. Apparently that perspective is in the minority at NFJS Seminars.

    As a matter fact, I found there to be a distinct chill in the air when I actually tried to engage in a few discussions durings breaks or at the Birds-of-Feather sessions regarding actual honest-to-god hands-on product application development experiences. Counter to the advertised "Come learn from industry experts and from each other" - I found a rather hostile response to hearing anything that wasn't either a glowing praise of their Open Source agenda - or restricted to whatever discussion agenda they had in mind.

    But perhaps I missed out on my serving of the Kool-Aid.

    [end-rant]


    Poland Calling...

    Tuesday, October 2nd - an email arrives in my inbox from Alex (see first part of this posting). He's in Poland. He's developed a business leveraging some offshore developers he's connected with in Poland. I can't use his services at the moment - but I'll keep his information handy - and try to keep him in mind as opportunities arise.

    But it-just-so-happens that I have an excellent contact in Poland for Alex to connect with - the president of a fairly substantial consulting firm based out of Warsaw: Don Bailey. Don is someone that I have done business with in the past - and know quite well. The last time I saw Don in person was February 2002 - when we had dinner and a bottle of wine in Warsaw to celebrate my departure back to the States. He's someone with a keen business sense - and has a wide network of contacts in both business and government - throughout Western and Eastern Europe - as well as exceptional connections within the Polish banking and financial sectors. My last contact with Don? A few weeks ago, via email.

    All because Alex accepted my business card almost 7 years ago...

    Tuesday, October 02, 2007

    2007-10-02 Tuesday

    This week I started working on installing and configuring CruiseControl for a client development environment - when I happened to come across Hudson. Apparently a number of JBoss teams use Hudson. I downloaded and had it up and running within about 15 minutes. So far, I am very pleased with its ease of use. The web UI is simple enough that it doesn't throw too big of yet-another-learning-curve at the team.

    So far I have an Ant build.xml firing every 15 minutes (if there are changes detected in the Subversion repository) for a test project. There are 11 JUnit test cases defined in the test project which are also executed. An email notification is automatically generated and sent out based on any failures - or after the 1st successful build.

    A must-read is Martin Fowler's paper on Continuous Integration.

    "Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly. This article is a quick overview of Continuous Integration summarizing the technique and its current usage."


    Another Open Source project that is on my short-list this week: John A. Brugge's Glean



    Glean is a framework of Ant scripts for generating feedback on a team's source code. Glean's goal is to make it possible to add feedback to your build cycle with as little pain as possible. The scripts drive a number of open-source tools and collect the resulting HTML for you to deploy to a project website or some other common team area. Add it at the end of a daily build cycle and it is a quick way to keep a number of feedback sources up to date and in one place.

    There are any number of feedback tools that have Ant tasks, but applying them individually to your project build script usually involves copying some boilerplate Ant target from the tool's documentation and tweaking it a little for your project. Of course, even that doesn't help when you move on to the next project, other than now having a new place to copy and paste. And as you find more areas where another feedback tool would help, it adds an organizing challenge to the build script maintainer to figure out where to put the script for this new tool.

    Glean is a collection of these boilerplate Ant targets, tied together with some common properties that describe your source project. The goal is to give you flexibility in a couple of different directions: to let you plug in different tools that analyze, document or measure your code, and to let you apply those tools to any source project you have.



    Today I'm also trying to get Subversion's post-commit hook to fire and send out an email noification to the team - but so far, there is no joy. I have the Perl script commit-email.pl working (tested from the command-line) - but it appears as if Subversion isn't firing the post-commit event. Sometimes trying to get Open Source tools to work under Windows is a royal pain.