5 useful url rewriting examples using .htaccess

Now let’s look at the examples

1)Rewriting product.php?id=12 to product-12.html

It is a simple redirection in which .php extension is hidden from the browser’s address bar and dynamic url (containing “?” character) is converted into a static URL.

RewriteEngine on
RewriteRule ^product-([0-9]+)\.html$ product.php?id=$1

2) Rewriting product.php?id=12 to product/ipod-nano/12.html

SEO expert always suggest to display the main keyword in the URL. In the following URL rewriting technique you can display the name of the product in URL.

RewriteEngine on
RewriteRule ^product/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ product.php?id=$2

3) Redirecting non www URL to www URL

If you type yahoo.com in browser it will be redirected to www.yahoo.com. If you want to do same with your website then put the following code to .htaccess file. What is benefit of this kind of redirection?? Please check the post about SEO friendly redirect (301) redirect in php and .htaccess.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^optimaxwebsolutions\.com$
RewriteRule (.*) http://www.optimaxwebsolutions.com/$1 [R=301,L]

4) Rewriting yoursite.com/user.php?username=xyz to yoursite.com/xyz

Have you checked zorpia.com.If you type http://zorpia.com/roshanbh233 in browser you can see my profile over there. If you want to do the same kind of redirection i.e http://yoursite.com/xyz to http://yoursite.com/user.php?username=xyz then you can add the following code to the .htaccess file.

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?username=$1

5) Redirecting the domain to a new subfolder of inside public_html.

Suppose the you’ve redeveloped your site and all the new development reside inside the “new” folder of inside root folder.Then the new development of the website can be accessed like “test.com/new”. Now moving these files to the root folder can be a hectic process so you can create the following code inside the .htaccess file and place it under the root folder of the website. In result, www.test.com point out to the files inside “new” folder.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^test\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.test\.com$
RewriteCond %{REQUEST_URI} !^/new/
RewriteRule (.*) /new/$1

Backtrack: http://roshanbh.com.np/2008/03/url-rewriting-examples-htaccess.html


  • Permanent link to this post Permalink 
  • Share this post! Share It! 
  • View this post's comments Comments (0) 
  • RSS Feed for this post's comments Comment RSS
  •    


Role of Solution Architect

What is a Solution Architect?

The essence of the Solution Architect (SA) role is the conversion of the requirements into an architecture and design that will become the blueprint for the solution being created. This conversion is based largely upon the previous design patterns that the SA has been involved with in the past through reading and staying abreast of the latest techniques, or through personal experience.

It is this conversion part of the role - the role of the SA -that most often is underestimated in its complexity. Just as the ability of the Functional Analyst to create a requirements document is one part science and wrote procedure so is the creation of the architecture. The rest, however, is an art form. Creating effective architectures to create a solution requires the careful balance of dozens of development concepts ranging from "Keep it Simple Stupid" to "Fail to Safe".

In the process of converting requirements to an architecture there are often parts of the SA's role which seem out of place. For instance, there is often a fair amount of research that happens during this phase. The research may be targeted at testing a technology that will become critical to the architecture. For instance, the SA may test to see if USB or serial port access is available from Java if there's a need to read a device without downloading software. This process can either be done alone or depending upon the size and velocity of the project can be delegated to a development lead.

In addition to research on technologies and approaches critical to the architecture, there is often a review of patterns that might be useful to the architecture. Patterns are previously described and validated approaches that can be used to create portions of the solution. Patterns are released through research and can come from places such as Microsoft's software development libraries. Reviewing the pattern allows the architect to refresh their memory on the details of the pattern and to evaluate what additional guidance they will have to provide if they choose to use the pattern.

The final component to the role of solution architect is the motivation and guidance of the development leads. Development leaders need to buy into and accept the architecture, to know how the pieces will fit together at a high level. They must also see the art portion of the architecture to get an appreciation of the subtle nuances of their portion of the architecture. It's the art portion of the architecture that makes it elegant. That elegance helps to maintain cohesion between various parts of the design and encourages simplicity. It is necessary for the lower level design and approach to match the higher-level architecture for the solution to be cohesive. Once the development leader has internalized their portion of the architecture the SA must continuously motivate and reinforce the good work that is being done. They must continue to motivate the Developer Lead(s) to push through tough issues and create the solution.

Getting Started as a Solution Architect

For most people becoming the SA on a large project doesn't just happen. It's not like winning the lottery where one day your name is drawn out of the proverbial hat. It is, instead, a slow steady progression of learning and developing. A person may find their way to this coveted role within only a few years of professional experience but more frequently it takes a dozen or more years to consistently find themselves in this role.

The starting point is generally being the only person on a very small, and sometimes insignificant project. The project may be small enough that a single person may fill every role - including the role of solution architect. These little projects can even be ones where the organization hasn't identified the project as something that needs to be done yet but are items that a member of the software development team realizes that would be helpful.

Another approach to becoming a SA is to become a distinguished Development Lead (DL). The SA role and the role of the DL are very similar in the skill sets needed. The SA skill set is slightly broader and requires a bit more finesse, however, fundamentally the same. The SA lays out the architecture for the overall solution whereas the DL converts that architecture into detailed design. One approach to getting started as a SA is to become a DL and work towards the additional skills that a SA possesses. Most SAs have that ability to give some of their work to DLs looking to step up.

One of the ways to demonstrate an interest in the SA role, no matter what role you may currently be filling is to invest time in learning patterns. Because patterns form the basic building blocks of nearly every architecture, learning patterns makes it far easier to identify where they can be helpful. Also, reading books and articles on different architecture perspectives and new development techniques can broaden your point of view and allow you to see opportunities to create your own small sections of the solution.

The distinction between a development lead and the SA are often subtle. Where the development lead focuses on detailed knowledge of a particular area the SA is very broad. This allows the SA to view the problem from a different perspective. Instead of getting mired down into the details of implementing one specific thing the SA focuses on integrating various parts of the solution into one cohesive network that solves the larger problem.

The other subtle change is in accountability. While the development lead is responsible for their part of the solution, the SA is the proverbial one neck to choke if it doesn't all come together right. The SA has the ultimate responsibility for making the technologies work together. As a result the SA role comes with a requisite level of responsibility for the success of the project.

What's in their Toolbox?

The toolbox of a SA has more tools in it than most other roles. Most SAs have grown up in the software development world and have learned dozens of tools designed to help them be more productive.

Perhaps the most important tool in the toolbox is a visual documentation language, such as UML. The UML structure for describing a variety of different views of the software development problem in pictorial form is the most recognizable visual documentation language for developers. The SA should be familiar with each of the various UML forms and have expertise in the development of use cases, class diagrams, and occasionally state diagrams as well. Mastery of UML allows quicker, easier, and better communication with the DLs and the developers.

In addition to UML, the SA may need to be good at database design. Because most of the time the way that data is stored and retrieved is integral to the success of the solution, knowing how to design a database to hold the information is a critical part of the solution being successful. SAs know how to create databases and optimize them for good performance.

In addition to mastery of UML and database design, it's sometimes necessary for the SA to have experience with specific tools and processes when the organization has decided upon a specific process for software development. The most common software and process is the Rational Rose Unified Process. Other tools and processes exist the ones that the SA will have to master are based on what the organization has chosen.

Perhaps the most critical skills for the SA are the ability to create consensus and understanding around the architecture. While a development lead my need to involve a few people in their detailed design the architecture of the application touches every member of the team and there's a need to get them to understand it and agree with it. Once the SA has created the architecture it's time to communicate and sell it.

Where's the position heading anyway?

There is a great deal of pressure in the US to move development to countries with cheaper labor. While the SA role could be outsourced, , there is some insulation because of the need to work closely with the Functional Analysts in the gathering and organization of requirements. The distributed software of the global world requires more effort on the part of the SA and increases their need.

The overall need for SAs will continue to increase as the problems that the SMEs present are more complex and thus they require more complex solutions. The more complex the solution, the more SAs will be required to create it.

The software development tools were supposed to reduce the effort of the SAs and therefore reduce their need for the role, however, that increase in efficiency has been far outstripped by new demand.

The Good, the Bad, and the Ugly
  • Good: Key, High-Value Position - The SA is a key role and one which can provide immense value if done correctly. This generally means a healthy salary.
  • Good: An SA is likely to get to interact with many of the key members of the development team as well as key members of the user community. This makes it a very visible position.
  • Bad: Hard to keep up - Being a SA means keeping up to date on a wide variety of new techniques, patterns, and tools. The effort to keep up can be very draining at times.
  • Bad: Difficult to get right - The role requires balancing so many factors that it's difficult to get right. In other words, it's easy to fail.
  • Ugly: Requirements - Although a good Functional Analyst can provide great requirements a moderately skilled one may not. The difficulty is that most people, including seasoned SAs, have trouble spotting bad requirements documents before it's too late. The SA must always have to consider that the requirements may require the SA to do a lot more research and legwork into what the client really needs.
  • Ugly: If a project fails, the SA is at the top of the list for people to blame.
Conclusion

The solution architect role may be the most sought after role in the software development process but it's not without its challenges. Learning the broad array of skills, shouldering the responsibility, and dealing with the consequences can be more than the average mortal may want to take on.

About the Author

Robert Bogue, MCSE (NT4/W2K), MCSA:Security, A+, Network+, Server+, I-Net+, IT Project+, E-Biz+, CDIA+ has contributed to more than 100 book projects and numerous other publishing projects. He writes on topics from networking and certification to Microsoft applications and business needs. Robert is a strategic consultant for Crowe Chizek in Indianapolis. Some of Robert's more recent books are Mobilize Yourself!: The Microsoft Guide to Mobile Technology, Server+ Training Kit, and MCSA Training Guide (70-218): Managing a Windows 2000 Network. He was honored to become a Microsoft MVP for Microsoft Windows Server - Networking. You can reach Robert at Robert.Bogue@CroweChizek.com

Backtrack: http://www.developer.com/mgmt/article.php/3504496/Anatomy-of-a-Software-Development-Role-Solution-Architect.htm


  • Permanent link to this post Permalink 
  • Share this post! Share It! 
  • View this post's comments Comments (0) 
  • RSS Feed for this post's comments Comment RSS
  •    


List of C# Tools

A collection of development tools and utilities for C# programming.

C# Build Tools

  • CruiseControl.NET - A .NET continuous integration tool and an extensible framework for creating a custom continuous build process. more
  • FinalBuilder - An automated build and release management solution for Windows software developers. more
  • Hippo.NET - A tool for streamlining the build process of .NET projects in a team environment. more
  • MegaBuild - An automated build utility. more
  • MSBuild - The build system for Microsoft and Visual Studio. more
  • NAnt - An open source .NET build tool. more
  • Visual Build Professional - Software for Windows that enables developers and build masters to easily create an automated, repeatable process for building and deploying software. more

C# Compilers and Frameworks

  • .NET Framework SDK - Contains the .NET Framework, runtime and compilers for C# (and other languages). more
  • ANTLR - ANother Tool for Language Recognition, is a language tool that provides a framework for constructing recognizers, compilers, and translators from grammatical descriptions. more
  • Coco/R - A compiler generator, which takes an attributed grammar of a source language and generates a scanner and a parser for this language. more
  • DotGNU - DotGNU Portable.NET, a cross-platform implementation of the Common Language Infrastructure (CLI). more
  • Mono - A cross-platform, open-source .NET development framework. more
  • Script# - Brings the power and productivity of C# and .NET tools to AJAX development by compiling C# source code into regular JavaScript. more
  • Silverlight - Microsoft Silverlight 2 allows rich application experiences for the Web and mobile devices to be written in C#. more
  • Visual C# Express Edition - Free edition of Visual Studio for C# developers. more

Collaboration

  • AQdevTeam - A project control and management system. more
  • Ultra Apps - Free web-based bug tracking with source code in ASP and ASP.NET/C#. Features include: issue tracking, response history, Excel export, bookmarks, search and more... more
  • Visual Studio Team System - An integrated application life-cycle management (ALM) solution comprising tools, processes, and guidance to help everyone on the team improve their skills and work more effectively together. more

C# Decompilers

  • .NET Reflector - A class browser and analysis tool for .NET. It allows developers to navigate, search, disassemble and analyze .NET components. more
  • Anakrino/Exemplar - more
  • Dis# - A .NET decompiler. more
  • Spices.Decompiler - A powerful and flexible .NET decompiler that converts .NET assemblies from binary format to well-formed and optimized source code. more
  • Salamander .NET Decompiler - A .NET decompiler that converts executable files (.EXE or .DLL) from Intermediate Language (IL, MSIL, CIL) binary format to high-level source code, such as C#, managed C++, Visual Basic.NET, etc. more

C# Deployment

  • Thinstall - Application virtualization for .NET. more
  • Windows Installer XML - (WiX) A toolset that builds Windows installation packages from XML source code. The toolset supports a command line environment that developers may integrate into their build processes to build MSI and MSM setup packages. more

C# Design Tools

  • StarUML - An open source project to develop a fast, flexible, extensible, featureful and freely-available UML/MDA platform running on the Win32 platform. more
  • WithClass - A UML design tool that can generate and reverse engineer C# source code. more

C# Development Environments (IDEs)

  • Borland C#Builder for Microsoft .NET - Integrated development environment (IDE) for building .NET applications with C#. more
  • C# Studio - A simple IDE for a C#/Mono/GTK# developer. more
  • QuickSharp - QuickSharp 2008 is a simplified, free C# development environment for Microsoft .NET 2.0. It's open source and allows C# applications to be created instantly without having to create projects and solutions. Ideal for the beginner just wanting to try out some code. more
  • MonoDevelop - An open source integrated development environment for the Linux platform, primarily targeted for the development of software that uses both the Mono and Microsoft .NET framework. more
  • SharpDevelop - The Open Source Development Environment for .NET. #develop (short for SharpDevelop) is a free IDE for C# and VB.NET projects on Microsoft's .NET platform. more
  • Snippet Compiler - A tool for working with C# code snippets (perfect for when you just need to run a couple lines of code). more
  • Visual C# Express Edition - An integrated development environment designed for beginning programmers and non-professional developers interested in building Windows Forms, class libraries, and console-based applications. Visual C# 2005/2008 Express Edition includes many of the same productivity features found in Visual Studio, all streamlined to fit the needs of the non-professional Windows developer. more

C# Documentation

  • GhostDoc - A free add-in for Visual Studio that automatically generates XML documentation comments for C#, either by using existing documentation inherited from base classes or implemented interfaces, or by deducing comments from the name and type of methods, properties or parameters. more
  • NDoc - Generates class library documentation from .NET assemblies and the XML documentation files generated by the C# compiler. more
  • Sandcastle - Produces MSDN style documentation by reflecting over the source assemblies and optionally integrating XML documentation comments. more

Database

  • ADO.NET Express - Add-in for Visual Studio that automates common tasks of writing repetitive data access code. more
  • Data Access Application Block for .NET - A reusable and extensible source code-based guidance that simplifies development of common data access functionality in .NET-based applications. more
  • DataLG - Generates a complete data layer for your VB and C# applications. more
  • DeKlarit - A model-driven tool that combines agile database modeling, declarative business rules, code generation and integration with Microsoft Visual Studio. more
  • NHibernate - An object-relational mapping (ORM) solution for the Microsoft .NET platform. It provides a framework for mapping an object-oriented domain model to a traditional relational database. more
  • OlyMars - SQL Server Centric .NET Code Generator (code named OlyMars) is a code generator based on database modeling. more

C# Editors

C# Formatters and C# Code Beautifiers

  • Code Highlighter - A source code syntax highlighting component available for the .NET environment. more
  • NArrange - An open-source tool for arranging .NET source code. This code beautifier allows you to sort and organize C# and VB.NET code members into groups or regions. more
  • Semantic Designs: C# Source Code Formatter - Reorganizes C# source text files to neatly indent code blocks according to their nesting level, or, conversely, obfuscates the code to make it difficult to understand by renaming variables. more
  • Uncrustify - Source code beautifier for many languages, including C#. more
  • Regionerate - An open-source tool for developers and team leaders that allows you to automatically apply layout rules on C# code. more

C# Graphics and Games

  • CadLib - DXF 3D .NET component and viewer. more
  • ExoEngine - An open source C# 3D game engine for Microsoft .NET, based upon OpenGL and NVIDIA's Cg. more
  • OpenGL & SDL for C# - An open source implementation of OpenGL in C#. more
  • VG.net - Animated vector graphics in Visual Studio .NET. more
  • XNA Game Studio - Enables hobbyists, academics, and independent game developers to easily create video games for Microsoft Windows and the Microsoft Zune digital media player using optimized cross-platform gaming libraries based on the Microsoft .NET Framework. more

C# Libraries and Components

  • C# Math Expression parser assembly - Math expression parser written in C#. It evaluates mathematical expressions such as "cos(x)+cos(y)-2", with given values. more
  • C-Sharpener For VB - Code converter tool from VB.NET to C#. more
  • Castle .NET - An open-source project to create a set of .NET tools/frameworks to ease enterprise and web application development. more
  • CenterSpace Software - C# libraries that provide building blocks for .NET mathematical and financial applications, including matrix and vector classes, and object-oriented interfaces to public domain computing packages such as the BLAS (Basic Linear Algebra Subprograms) and LAPACK (Linear Algebra PACKage). more
  • Enterprise Library - A collection of reusable software components (application blocks), provided by Microsoft, that assist enterprise .NET developers with common application development scenarios. more
  • Evolutility - Dual-licensed, open-source web UI framework for CRUD applications. Free for use in open-source projects. more
  • Glacial Components - Free .NET components. more
  • IE Web Controls - The Internet Explorer Web Controls including C# source code. more
  • LibCheck - This tool allows you to compare two versions of an assembly and determine the differences. more
  • Neural Network Library in C# - A neural network library written in C#. more
  • Sharp3D.Math - Fundamental classes for dealing with numerics on the .NET platform. more
  • Spring.NET: Application Framework - Spring.NET is a port and extension of the Spring Framework for .NET. more
  • Visual Guard - Security solution for .NET Applications. Allows management of users, memberships, roles and password policy. more

C# Logging

  • Log4Net - A tool to help the programmer output log statements to a variety of output targets. log4net is a port of the log4j framework to the .NET runtime more
  • SmartInspect - Logging tool for debugging and monitoring .NET applications. more

Miscellaneous

  • CSharpTelnet - Telnet client for C#. more
  • IntelliSpell - Spell-checking add-in for Microsoft Visual Studio. A free, community edition is available. more
  • Ora Visual Studio Add-In - A Visual Studio 2008 add-in that provides an instant grouped overview of the class, interface or struct you are viewing or editing. more
  • PostSharp - An aspect weaver for .NET. It can can reduce the number of lines of code and improve the logical decoupling of your programs. more
  • Resourcer - Resourcer is an editor for .resources binaries and .resx XML file formats used with the .NET platform. Resourcer allows editing of name/string pairs, import of bitmaps/icons and and merging of resources from different sources. By Lutz Roeder. more
  • StudioSpell - A Visual Studio spell check add-in. more

C# Obfuscators

  • C# Source Code Obfuscator - by Semantic Designs. Scrambles C# source code to make it very difficult to understand or reverse-engineer. more
  • .NET Reactor - A .NET code protection and licensing system which assists developers in protecting their .NET software. more
  • {smartassembly} - A .NET obfuscation, protection and improvement tool. more
  • Demeanor for .NET - Protects your intellectual property by making it difficult to reverse engineer your .NET applications. more
  • Dotfuscator - A .NET Obfuscator. more
  • Salamander .NET Obfuscator - A .NET code protection tool that offers sophisticated technologies to protect your .NET code and intellectual properties. more

Object Browsers

C# Profiling Tools and C# Optimization

  • .NET Memory Profiler - A tool for finding memory leaks and optimizing the memory usage in programs written in C#, VB.NET or any other .NET Language. more
  • ANTS Profiler - Performance profiling and memory profiler for .NET code. more
  • AQtime - Performance profiling and memory/resource debugging toolset for Microsoft, Borland, Intel, Compaq and GNU compilers. more
  • CLR Profiler - The CLR Profiler allows developers to see the allocation profile of their managed applications. more
  • DevPartner Studio Professional Edition - A suite of software development and testing tools that enable Windows application teams to build reliable, high-performance applications, components and web services for Microsoft .NET and native Windows platforms. more
  • ILMerge - A utility for merging multiple .NET assemblies into a single .NET assembly. more
  • NCover - .NET code coverage tool. Commercial, but a disontinued free version is also available. more
  • NGen - The Native Image Generator (Ngen.exe) is a tool that improves the performance of managed applications. Ngen.exe creates native images, which are files containing compiled processor-specific machine code, and installs them into the native image cache on the local computer. more
  • NProf - .NET profiler application and API. more
  • PartCover - An open-source .NET code coverage tool. more
  • Prof-It for C# - A standalone profiler for C# that measures execution frequencies for each statement, while keeping the instrumentation of the source code to a minimum. more

C# Refactoring

  • devAdvantage - C# source code analyzer for Visual Studio.NET - A Microsoft Visual Studio .NET add-in that provides C# static source code analysis to automate code reviews and detects errors, bugs and issues. The community edition is free. more
  • dotEASY - A Visual Studio .NET add-in that evaluates C# source code and performs “advices” in order to improve software quality. more
  • ReSharper - A powerful productivity suite for Visual Studio. Refactoring, code analysis, code generation... more

Regular Expressions

  • Expresso - A regular expression development tool. more
  • RegexDesigner.NET - A visual tool for helping you construct and test .NET regular expressions. more
  • The Regulator - An advanced regular expressions testing tool, featuring syntax highlighting and web-service integration with Regexlib.com's database of online regular expressions. more

C# Reporting

  • ActiveReports - Reporting solution for .NET that is written in fully managed Visual C# and provides complete integration into the Visual Studio .NET IDE. more
  • Crystal Reports - Professional .NET reporting. more
  • Report Generator List & Label - Equip your applications with classic printing, fast preview and comprehensive export functions. more

C# Standards Verifiers

  • Code Style Enforcer - A DXCore plug-in for Microsoft Visual Studio 2005/2008 that provides code style enforcement against configurable coding standards. more
  • devAdvantage - C# source code analyzer for Visual Studio .NET - A Microsoft Visual Studio .NET add-in that provides C# static source code analysis to automate code reviews and detects errors, bugs and issues. The community edition is free. more
  • FxCop - FxCop is an application that analyzes managed code assemblies and reports information about the assemblies, such as possible design, localization, performance and security improvements. more
  • StyleCop - Analyzes C# source code to enforce a set of style and consistency rules. It can be run from inside of Visual Studio or integrated into an MSBuild project. more

C# Testing and C# Test Frameworks

  • .NETUnit - An implementation of Kent Beck's XUnit testing framework designed specifically for unit testing components written for the .NET platform. more
  • csUnit - Inspired by JUnit, csUnit brings the power of unit testing to the .NET framework. csUnit is your key to unit testing and test-driven development using .NET languages such as C#, Visual Basic .NET, Visual J#, or Managed C++. more
  • MbUnit - A generative unit test framework for the .NET Framework. more
  • NMock - A dynamic mock object library for .NET. more
  • NUnit - A unit-testing framework for all .NET languages; initially ported from JUnit. more
  • Pex - Automated white box testing for .NET. more
  • POCMock - A tool for creating mock classes. more
  • Rhino Mocks - A dynamic mock object framework for the .Net platform. Its purpose is to ease testing by allowing the developer to create mock implementations of custom objects and verify the interactions using unit testing. more
  • Silverlight Unit Test Framework (Ignite) - A simple, extensible unit testing solution for rich Silverlight 2 applications, controls and class libraries. more
  • TestComplete - A full-featured environment for automated testing of Windows, .NET, WPF (XAML) applications, web pages, web servers and web services. more
  • TestDriven.NET - Unit-Testing add-in for Visual Studio .NET that is fully integrated with all major unit testing frameworks including NUnit, MbUnit, csUnit and Visual Studio Team System. more
  • TestMatrix for Visual Studio - Adds test driven development support to Visual Studio with unit testing, code coverage analysis, and test profiling. more
  • WatiN - Write automated web application tests in C#. more
  • XtUnit - Extend NUnit or MbUnit with new test attributes. more
  • xUnit.net - Unit testing for .NET. more
  • X-Unity - A suite of development tools enabling unit testing and continuous integration activities on Microsoft .NET projects. more

Source: http://www.csharptools.com


  • Permanent link to this post Permalink 
  • Share this post! Share It! 
  • View this post's comments Comments (4) 
  • RSS Feed for this post's comments Comment RSS
  •    


Breaking Down the Software Development Roles

Software development is done differently at every organization, and in every home office throughout the world. The process that one organization or person uses to develop software may work for their specific environment and situation but may fail miserably in another set of circumstances.

It is, in part, the differences in environments which make it so difficult to quantify the process of software development in a single set of terms that all practitioners can agree to. As newer approaches appear on the scene, such as extreme programming and agile development the perspective of the world on what the process should look like changes slightly or dramatically.

However, despite these changes there are some things that remain the same. There will always be a need to understand the business problem, convert that problem into an architecture, convert the architecture into a solution, test the solution, and deploy the solution. Although each of these processes may change to some extent based on the programming models and tools being used, fundamentally there are some roles, which every process has in one form or another. One person may be filling all the roles or a handful of the roles, or one very specific role. Despite this there is a need for all of the roles - each serves a purpose. The origanization chart below gives you an idea of how each position fits together within an organization.

Common Roles

There is a series of roles that exist in most software development processes. As mentioned above one team member may be filling many roles and some roles may be suppressed for a specific type of project but all of these roles exist in one form or another in every software development project:

FullSA

Click here for a larger image.

  • Subject Matter Experts (SMEs) - The subject matter expert is the person or persons from which requirements are captured. These are the people who know what the software needs to do and how the process works. The SME role is somewhat different from the other roles because it is constantly changing as new clients (internal or external) are brought in to help design a solution. SMEs are rarely from IT - except when the solution is being designed to support IT. SMEs are most frequently the person who will receive the benefit of the system.
  • Functional Analysts (FAs) - Functional analysts have the unenviable roles of eliciting clear, concise, non-conflicting requirements from the Subject Matter Experts who may or may not understand how technology can be used to transform the business processes in a positive way.
  • Solutions Architect (SA) - The technical architect is responsible for transforming the requirements created by the Functional Analysts into a set of architecture and design documents that can be used by the rest of the team to actually create the solution. The Solutions Architect is typically responsible for matching technologies to the problem being solved.
  • Development Lead (DL) - The development lead's role is focused around providing more detail to the Solution Architect's architecture. This would include detailed program specifications creation. The Development Lead is also the first line of support for the developers who need help understanding a concept or working through a particularly thorny issue.
  • Developer (Dev) - The heart and soul of the process, the developer actually writes the code that the Development Leads provided specifications for.
  • Quality Assurance (QA) - The quality assurance role is an often thankless position that is designed to find bugs before they find their way to the end customers. Using a variety of techniques ranging from keying in data and playing with the system to formalized, automated testing scripts the Quality Assurance team is responsible for ensuring the quality of the solution and it's fit to the requirements gathered by the Functional Analyst. Sometimes the QA team is known by their less flattering name of testers.
  • Deployment (Deploy) - The deployment role is the one which packages up all of the compiled code and configuration files and deploys it through the appropriate environments or on the appropriate systems. The deployment role is focused on getting the solution used. To that end the role may include automated software installation procedures or may be as simple as copying the files to the appropriate place and running them.
  • Training - The training role is responsible for documentation for the system as well as any instructor or computer based training solutions, which are designed to help the users better understand how the system works and what they can do with it.
  • Project Manager (PM) - The project manager is responsible for ensuring consistent reporting, risk mitigation, timeline, and cost control. The project manager role is a problem solver role. They try to resolve problems why they are small so that they can be handled more quickly and with less cost.
  • Development Manager (DM) - The development manager is responsible for managing multiple priorities of conflicting projects. The Development Manager role is also an escalation for issues from the team, which it is unable to resolve internally.

Of course, each organization has it's own take on these roles; however, these are the roles you'll see most often in an organization doing development.

Over the course of the next few weeks, articles will be published that delve deeper into each of the above roles.

Critical Skills for Every Role

In the articles describing each role there is a section, much like this one, which is designed to support a bulleted list of items that are critical to the success of the role. During the creation of the series a common set of skills was identified that were essential business skills that professionals in nearly every role needed to consider during their career. Rather than repeat them within the individual articles describing each role, they have been brought together here so that you could consider the impact of these roles in whole no matter where you are in the software development process. The common skills to all roles are:

  • Understanding Business - Although some roles are focused very specifically around certain aspects of understanding and converting business requirements, every role in the process should have an awareness and sensitivity to the business processes and needs which require technology in the first place. Without this technology may be implemented but it may not solve the real needs and will therefore be considered a failure.
  • Broad Understanding - Although an understanding of software development is critical there are other areas where an understanding can be invaluable. For instance, understanding how computers work internally including memory, cache, hard drives, etc., can help you learn how to more appropriately conserve those resources. Similarly understanding networking can help in the development of applications, which are compatible or even friendly to the networks that they're working across. SMEs broad understanding of the industry can be invaluable in terms of creating solutions that fit both the organization and the industry. The QA team can benefit the project by a broad understanding by minimizing QA costs while improving testing coverage. In short, a broad understanding can help every role.
  • Multiple Perspectives - The ability to approach solutions from multiple perspectives is critical to software development. Understanding how each person who is working on a problem views an issue - or how different customers will view the solution is important to be able to find the best solution based on all of the information. There are always multiple ways of viewing - and solving - a problem. The trick is to find the best one from the list of possible options. The larger the list of options (perspectives) the better the solution.
  • People Skills - Also known as soft skills, the ability to interact with other people and to be a part of a team is essential to nearly every role in a software development project. The lower the overall people skills of the team the higher the likelihood that the project will end in some explosion.
  • Lifelong Learning - Although some might argue that the perspective of being a life long learner is more of an attitude than a skill, it is a critical part of being in a high-change industry like IT in general and software development specifically. What is learned today will be obsolete tomorrow. The only way to stay ahead of the game is to approach life from the perspective of continuous learning. Each new experience is a new opportunity to learn and each new year brings with it the need for skills renewal.

In the next article, the first detailed review of a role in the series, we'll delve into the role of the SME in the process and what specific skills can make an SME stand out from the rest.

About the Author

Robert Bogue, MCSE (NT4/W2K), MCSA:Security, A+, Network+, Server+, I-Net+, IT Project+, E-Biz+, CDIA+ has contributed to more than 100 book projects and numerous other publishing projects. He writes on topics from networking and certification to Microsoft applications and business needs. Robert is a strategic consultant for Crowe Chizek in Indianapolis. Some of Robert's more recent books are Mobilize Yourself!: The Microsoft Guide to Mobile Technology, Server+ Training Kit, and MCSA Training Guide (70-218): Managing a Windows 2000 Network. He was honored to become a Microsoft MVP for Microsoft Windows Server - Networking . You can reach Robert at Robert.Bogue@CroweChizek.com

Trackback: http://www.developer.com/print.php/3490871


  • Permanent link to this post Permalink 
  • Share this post! Share It! 
  • View this post's comments Comments (1) 
  • RSS Feed for this post's comments Comment RSS
  •    


Using MetaWebLog API with C#

Most modern blogging engines support the MetaWeblog API, which was defined by XML-RPC.com many years ago.  It's become one of the most popular API's for programmatically interacting with blogs because of its simplicity. Even Microsoft's Windows Live Spaces provides support for it.

I wanted to use this API recently to interact with our Community Server implementation so I started searching around for client-side implementations that would be easy to program in C#. I was surprised that I couldn't find a mainstream implementation readily available. So I followed the example on MSDN and built my own MetaWeblog library in C# on top of Cook Computing's XML-RPC.NET library.

in this article I'd like to describe MetaWeblog API and later share some c# examples of using it with Windows Live Writer. I started thinking about writing custom blog engine which will support MetaWeblog API after discovering that Windows Live Writer support this API.

What is Windows Live Writer?

A Microsoft programm which allow you to make posts to most favorites blog engines.

What is MetaWeblog API?

The MetaWeblog API (MWA) is a programming interface that allows external programs to get and set the text and attributes of weblog posts. It builds on the popular XML-RPC communication protocol.

What is XML-RPC?

It's remote procedure calling using HTTP as the transport and XML as the encoding. XML-RPC is designed to be as simple as possible, while allowing complex data structures to be transmitted, processed and returned.

First I'd like briefly talk about XML-RPC and it's C# implementation. On XML-RPC implementation page I found link to Charles Cook XML-RPC.NET package with tons of examples and docs. Using this package you can simply add xml-rpc support to your classes by adding several attributes (XMLRpcService, XmlRpcMethod). Below you can see example of blogger class with xml-rpc support

[XmlRpcService(
    Name = "blogger",
    Description = "This is a sample XML-RPC service illustrating method calls with simple parameters and return type.",
    AutoDocumentation = true)]
[XmlRpcUrl("http://www.gtrifonov.com/MetaBlogApi.ashx")]

public class blogger : XmlRpcService
{
 [XmlRpcMethod("metaWeblog.newPost")]
    public string newPost(string blogid, string username, string password, XmlRpcStruct rpcstruct, bool publish)
    {
}
}

As you noticed newPost method use parameter with type of XmlRpcStruct. This type represents XML-RPC struct data type . In XML-RPC there are few simple  data types,array datatype  and XML-RPC struct data type which is basically simple representation of dictionary.

MetaWeblog API interface

MetaWeblog API interface contains following methods:

  • metaWeblog.newPost (blogid, username, password, struct, publish) returns string  - Add new post
  • metaWeblog.editPost (postid, username, password, struct, publish) returns true - Edit existing post
  • metaWeblog.getPost (postid, username, password) returns struct - Returns existing post
  • metaWeblog.getCategories (blogid, username, password) returns struct - Returns blog categories
  • metaWeblog.getRecentPosts (blogid, username, password, numberOfPosts) returns array of structs - Return recent posts
  • metaWeblog.newMediaObject (blogid, username, password, struct) returns struct - Add new media object to post

When I started coding and testing this interface I found that Windows Live Writer called blogger.getUsersBlogs and blogger.deletePost methods which actually defined in Blogger API. I defined these methods with appropriate XmlRPcMethod attributes in my blogger class and start coding: Below you can find skeleton of my blogger class:

using System;

using System.Web;
using CookComputing.XmlRpc;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
using System.Collections.Generic;

using System.IO;

[XmlRpcService(
    Name = "blogger",
    Description = "This is a sample XML-RPC service illustrating method calls with simple parameters and return type.",
    AutoDocumentation = true)]
[XmlRpcUrl("http://www.gtrifonov.com/MetaBlogApi.ashx")]

public class blogger : XmlRpcService
{


    [XmlRpcMethod("blogger.getUsersBlogs")]
    public XmlRpcStruct[] getUsersBlogs(string appKey, string username, string password)
    {       
        ....
        return struct;
    }

    [XmlRpcMethod("metaWeblog.setTemplate")]
    public bool setTemplate(string appKey, string blogid, string username, string password, string template, string   templateType)
    {
        return true;
    }

    [XmlRpcMethod("metaWeblog.getCategories")]
    public XmlRpcStruct[] getCategories(string blogid, string username, string password)
    {
        XmlRpcStruct rpcstruct = new XmlRpcStruct();

        rpcstruct.Add("description", "description");
        rpcstruct.Add("categoryid", "123");
        rpcstruct.Add("title", "title");

        return new XmlRpcStruct[] { rpcstruct };
    }

    [XmlRpcMethod("metaWeblog.getRecentPosts")]
    public XmlRpcStruct[] getRecentPosts(string blogid, string username, string password,int numberOfPosts)
    {
        XmlRpcStruct[] posts = new XmlRpcStruct[5];
       .......
        return posts;
    }
    [XmlRpcMethod("metaWeblog.getTemplate")]
    public string getTemplate(string appKey, string blogid, string username, string password, string templateType)
    {      
        .....................
        return id;
    }
    [XmlRpcMethod("metaWeblog.editPost")]
    public bool editPost(string postid, string username, string password, XmlRpcStruct rpcstruct, bool publish)
    {
        ..................
        return true;
    }
    [XmlRpcMethod("metaWeblog.getPost")]
    public XmlRpcStruct getPost(string postid, string username, string password)
    {
       ..................
        return rpcstruct;
    }

    [XmlRpcMethod("blogger.deletePost")]
    public bool deletePost(string appKey, string postid, string username, string password, bool publish)
    {
        return false;

    }
    [XmlRpcMethod("metaWeblog.newMediaObject")]
    public XmlRpcStruct newMediaObject(string blogid, string username, string password, XmlRpcStruct rpcstruct)
    {
        bool allowed = System.Web.Security.FormsAuthentication.Authenticate(username, password);
        
        return rstruct;
    }   

}

Issues:

After defining all methods and adding basic functionality I figure out that Windows Live Writer not using getTemplate and setTemplate method and trying to detect your blog appearance by connecting to blog site and downloading content. It's strange because these methods were designed especially for this.

Also I found that in xml-rpc RFS documentation method getRecentPosts returns struct with array of posts, but Windows Live Writer expecting to receive array of structs.

If you tried coding method getCategories looking only to RFS it will not work with Windows Live Writer, because writer expecting categoryid as one of structure member. Thanks to Wiktor for his post with example of how to avoid this issue and example of working structure.

<?xml version="1.0"?>
  <methodResponse>
    <params>
      <param>
        <value>
          <array>
            <data>
              <value>
                <struct>
                 <member>
                   <name>categoryid</name>
                   <value>1</value>
                 </member>
                 <member>
                   <name>title</name>
                   <value>Category 1</value>
                 </member>
                 <member>
                   <name>description</name>
                   <value>Description </value>
                 </member>
	        </struct>
             </value>
           </data>
         </array>
       </value>
     </param>
 </params>
</methodResponse>

I hope issue with template methods and categories will be solved in next Windows Live Writer beta releases.

Download MetaWeblog API example (C#)
References:

Trackback:

http://www.pluralsight.com/community/blogs/aaron/archive/2008/08/19/programming-the-metaweblog-api-in-net-c.aspx
http://www.gtrifonov.com/blog/2006/11/27/Coding_blog_engine_with_MetaWeblog_API_support_and.aspx
  • Permanent link to this post Permalink 
  • Share this post! Share It! 
  • View this post's comments Comments (16) 
  • RSS Feed for this post's comments Comment RSS
  •    


Using MetaWebLog with PHP-XMLRPC

Due to the fact that there is virtually no documentation available on how to get the MetaWebLog API working with the PHP-XMLRPC library, I decided to write this post. The MetaWebLog API is an application programming interface that allows data to be passed from a client to a server, and vice versa. It is used by all of the most popular blogging software, allowing the user to post blog entries from software like Microsoft Word or Windows Live Writer.

If you want to add MetaWebLog functionality to your custom blog or CMS, then this post will really help you. First off, download the PHP-XMLRPC library and upload the three files - xmlrpc.inc, xmlrpcs.inc, xmlrpc_wrappers.inc - found within the lib folder to your web server.

With that done, you can now start implementing the MetaWebLog functions. The first one you’ll need to implement is blogger.getUsersBlogs, otherwise software like Microsoft Word won’t recognise it as a valid MetaWebLog implementation. With that done, you can then start working on the functions that you might need to use.

To debug your code, make sure you take advantage of the XMLRPC debugger. And for more information on what each function is supposed to accept and return, check out Microsoft’s MSDN.

Trackback: http://ryanhemelaar.blogsome.com/2009/01/29/using-metaweblog-with-php-xmlrpc/trackback/


  • Permanent link to this post Permalink 
  • Share this post! Share It! 
  • View this post's comments Comments (2) 
  • RSS Feed for this post's comments Comment RSS
  •    


Wishing you a Merry Christmas

I would like to wish you a warm Merry Christmas and prosperous Happy New Year.

9-creative-christmas-cards 5-merry-christmas-greeting-card


  • Permanent link to this post Permalink 
  • Share this post! Share It! 
  • View this post's comments Comments (1) 
  • RSS Feed for this post's comments Comment RSS
  •    


Twenty20 International - India vs Sri Lanka

As you know, there was a Twenty20 International - India vs Sri Lanka Cricket match on 12-Dec-2009, Saturday at Punjab Cricket Association Stadium, Mohali, Chandigarh.

On 13-Dec-2009, Sunday, I was travelling from Chandigarh to Bangalore via New Delhi with my family – Simmi and Diya. We were at Chandigarh International Airport, when we met all the team players and coach of Indian and Sri Lanka Cricket Team when they were going back to New Delhi. I got autographs of all the team players. I was also got success in clicking photographs with them.

banglore 127 banglore 125
Deepak and Diya with Sunil Gavaskar Simmi and Diya with Sunil Gavaskar

  • Permanent link to this post Permalink 
  • Share this post! Share It! 
  • View this post's comments Comments (8) 
  • RSS Feed for this post's comments Comment RSS
  •    


Performance tuning For .NET Applications

Performance tuning is one of the daunting task for making your applications run faster. There are several factors that can cause your application run slow. One of the factor is memory which can directly impact on your program execution. This post discusses the basics of memory optimization for .NET programs. If we outline the cases where memory access is bottleneck then it is easier for tune them. I also discuss the tools and strategies to determine the bottlenecks of memory in .NET Applications.

dot_net_memory_profiler_graph

Bottlenecks

Memory Usage and Speed

Case1:

Memory consumption is matter when your application manipulates the large amount of data. The speed is limited by how long it takes for CPU to bring the instructions from memory. More data then more time……

Case2:

Memory consumption also matter is during an application startup. Hard disk access is much slower than main memory access. When the application launched second time then it will be faster.

Case3:

Memory consumption matter is during application switching. When your application switches to the other applications , there is a chance of stealing the physical memory of your applications. When user returns to your application, these stolen pages needs to be fetched back from the desk, which makes your application very slow.

Solution

A feasible solution could be minimizing the amount of memory used. This reduces the load on the fast cache and makes program execution faster.

You can execute less code while program startup. Efficiently using the data structures. These things needs to be done in the early stages of the development.

Task Manager

You can use Task Manager to know how much of memory your application currently used. You can invoke it by (Winkey + R). If the columns don’t include PID, Memory-Working Set, use the View->Select Columns menu option to add them to the display.

Working Set is the physical memory currently being used by the process.

Application Size

Depending on memory usage application can be categorized small, medium or large. A simple and quick way to monitor memory usage and check for leaks is by running a test on your application. Run the application and monitor its working set usage; if the working set grows unbounded then it can mean a memory leak.

VADump: A More Detailed View

Task Manager just provides the summary of the memory usage of an application. To get more detail you need a tool called VADump. This can be invoked by typing VADump –sop processID in the command prompt under the directory in which it is installed. It prints a breakdown of memory within a single process down to DLL level. You can download the tool from here.

The .NET Garbage Collector

The .NET runtime supports automatic memory management. Garbage Collector in runtime finds memory that is no longer in use and reuses it for new allocations. Garbage Collector partitions the heap into three generations(0,1, and 2).

PerfMon

VADump gives the first level of breakdown of memory usage in the process. It does not tell you how much GC memory we are using and also whether we are having a healthy ration of GC generations. You can invoke it by typing PerfMon in run command. After PerfMon comes up, we need to configure it to display information about the GC. A healthy number for GC is less than 10 percent of total application time.

Conclusion

Memory issues are difficult to debug. If your application is large enough to care about memory, the key is to control memory usage in early stages of the development.

Source: MSDN magazine

Backtrack: http://www.techbubbles.com/microsoft/performance-tuning-for-net-applications/


  • Permanent link to this post Permalink 
  • Share this post! Share It! 
  • View this post's comments Comments (18) 
  • RSS Feed for this post's comments Comment RSS
  •    


Web Forms model in ASP.NET 4.0

ASP.NET 4.0 platform is built up with various components Web Forms,ASP.NET MVC, Dynamic Data Controls and ASP.NET AJAX. It has the same foundation as in ASP.NET 3.5 SP1 but refined the above features. This post speaks about features in the Web Form model.


ASP.NET 4.0 features are nothing new, all are in 3.5 but this version gives more control over frequently used features.

Example: ASP.NET 4.0 Web Forms give developers more control over viewstate management, generation of Control ID’s, and HTML generated by some template based controls.

Control Over the Viewstate

Every developer knows that ASP.NET Viewstate burdens the page and waste of bandwidth. Same developers welcomed the ASP.NET MVC because of its complete absence of viewstate. If you ignore the viewstate on your page then you need to reload the data from server to controls.

The Viewstate is functional to Web Forms model, as it caches the contents from cache for control in the page.The overlooked feature is we can turnoff the viewstate for the page or control.The viewstate support is turned on for each page by default. The property EnableViewstate is defined is System.Web.UI.Control class and can be used to turn it on or off.

You can turn off the viewstate for ASP.NET page either declaratively or programmatically during the page’s life cycle.

void Page_Load(object sender,EventArgs e)
{
//Disable viewstate for the page and all of its child controls
 
this.EnableViewState = false;
 
....
 
}

Viewstate setting in ASP.NET has hierarchical nature, which means if the viewstate is enabled on the parent control, it can not be disabled on any of its child controls. You can disable the viewstate at page level and enable it in control level wherever it required.

ASP.NET 4.0 feature is you can enable viewstate at control level. In ASP.NET 4.0, the System.Web.UI.Control class exposes a new property named ViewStateMode:

public virtual ViewStateMode {get; set; }

ViewStateMode enumeration has the following values

 

Value Description
Inherit Inherits the value of ViewStateMode property from the parent control
Enabled Enables viewstate for this control even if the parent control has set the viewstate property disabled.
Disabled Disables viewstate for this control even if the parent control has set the viewstate property enabled.

 

Auto-Generated IDs

It is possible that rendered HTML can contain the same ID. When search for an element using getElementById, you will simply get an array of elements.Most data-bound controls generate their output by repeating the HTML for every data-bound item.

The sample generated Id string look like the following

ctl00$ContentPlaceHolder2$Gridview11$TextBox1

First issue might be with the length of the string, which repeated for several elements, makes the downloaded larger. Predicting the ID of a given control from script is difficult.

A frequently used technique for the above issue is

var btn = document.getElementById("<%=Button1.ClientID %> ");

ASP.NET 4.0 supports another option for autogenerated ids problem and developer can has greater control over generating the clientid of a control.

The System.Web.UI.Control Class now has a brand new property named ClientIDMode.

The ClientIDMode property values can be

Value Description
Legacy Indicates that ID should be generated as in earlier versions of ASP.NET
Static ASP.NET doesn’t make any attempt to scope the client ID. The ID is assigned as-is.
Predictable The ID is obtained by simply concatenating the ID of parent controls and ignoring master page’s parent elements.
Inherit The control will use the same algorithm as its parent.

Consider the following code:

<asp:GridView ID="GridView1" runat="server"
              ClientIDMode = "Predictable"
              RowClientIdsuffix="CustomerID">
  ......
 
</asp:GridView>

In this case, each row of the grid is identified by one or more columns in the data source with a trailing index. example

Panel1_GridView1_ALFKI_1

Finally, note that the ClientIDMode property affects only the ID attribute of the resulting HTML. The more about clientids in ASP.NET 4.0 can read here

HTML Enhancements

In the early version of ASP.NET developer didn’t have much control over programmatically accessing the HTML tags of a Web Page.

In ASP.NET 4.0, the Page class exposes two new string properties to set some common tags in the <head> section of a page. The two properties are Keywords and Description. The Keywords and Description properties can also be set directly as attributes of the @Page directive as shown below

 
<%@ Page Language="c#"
    AutoEventWireup="true"
    CodeFile="Default.aspx.cs"
    Inherits="_Default"
    Keywords="ASP.NET, AJAX "
    Description="ASP.NET 4.0 WebForms" %>
 
 

permanently redirecting the page feature can be found here

More Control over Output Caching here

Conclusion

ASP.NET 4.0 Web Forms contains a number of features that together can make it a bigger development platform. It is moreover a refinement of existing features.

Source: MSDN Magazine

Backtrack: http://www.techbubbles.com/aspnet/web-forms-model-in-asp-net-4-0/


  • Permanent link to this post Permalink 
  • Share this post! Share It! 
  • View this post's comments Comments (2) 
  • RSS Feed for this post's comments Comment RSS
  •    


About Me

Deepak Kamboj

Deepak Kamboj, MCTS, JCP
ASP.NET/C# Web Developer
Chandigarh, India

RSS Contact Twitter Facebook LinkedIn

Yahoo: DeepakKamboj@yahoo.com
GTalk: DeepakKamboj@gmail.com
Skype: DeepakKamboj

Recent Comments