Showing posts with label Development. Show all posts
Showing posts with label Development. Show all posts

Tuesday, September 12, 2006

[OS] Will Open Source ever oust Microsoft?

Two Harvard Business School Professors say "No". Ramon Casadesus-Masanell and Pankaj Ghemawat explore the fundamental competitive dynamics question in their study, 'Will OSS ever displace traditional software from its market leadership position?'

They said that the one main advantage of OSS is that because users can modify the code directly (as they encounter problems or have new ideas on how to improve it), the development cycle is significantly shorter.

However, OSS has disadvantages too. Most importantly, it comes from behind in terms of market share (installed base). Because the value of an operating system depends critically on the number of users, traditional software has an advantage.

Their paper introduces a dynamic mixed duopoly model in which a profit-maximising competitor (Microsoft) interacts with a competitor that prices at zero (Linux), with the installed base affecting their relative values over time. The authors use a formal model to ask what conditions are needed for Linux to take over Windows. The questions that they addressed are:


  • Is Linux's superior demand-side learning sufficient to win out?
  • What is the effect of forced procurement by governments and some large corporations on the long-run equilibrium?
  • How do cost asymmetries play out?
  • Can Microsoft use piracy strategically to improve its market position?

From a managerial perspective, these are significant questions.

There is an interview with the report's authors here

Saturday, August 12, 2006

[Development] Design Patterns

A design pattern is a general repeatable solution to a commonly-occurring problem in software design. A design pattern is a description or template for how to solve a problem that can be used in many different situations.

Design patterns can be classified in terms of the underlying problem they solve. Examples of problem-based pattern classifications include:

Fundamental Patterns

  • Delegation pattern - expresses certain behaviour but in reality delegates responsibility for implementing that behavior to an associated object
  • Functional design - Assures that each modular part of a computer program has only one responsibility
  • Interface pattern - see Bridge Pattern, Composite Pattern and Delegation Pattern
  • Proxy pattern - An object representing another object
  • Immutable pattern - An object whose state cannot be modified after it is created
  • Marker interface pattern - Exposes some underlying semantic property of the class that cannot be determined solely by the class' methods

Creational Patterns

  • Abstract Factory - Creates an instance of several families of classes
  • Builder - Separates object construction from its representation
  • Factory Method - Creates an instance of several derived classes
  • Lazy initialization - delaying the creation of an object or some other expensive process until the first time it is needed
  • Prototype - A fully initialized instance to be copied or cloned
  • Singleton - A class of which only a single instance can exist

Structural Patterns

  • Adapter - Match interfaces of different classes
  • Aggregate - a version of the Composite pattern with methods for aggregation of children
  • Bridge - Separates an object's interface from its implementation
  • Composite - A tree structure of simple and composite objects
  • Container - create objects for the sole purpose of holding other objects and managing them
  • Decorator - Add responsibilities to objects dynamically
  • Extensibility - aka. Framework - hide complex code behind a simple interface
  • Facade - A single class that represents an entire subsystem
  • Flyweight - A fine-grained instance used for efficient sharing
  • Proxy - An object representing another object
  • Pipes and Filters - a chain of processes where the output of each process is the input of the next
  • Private class data - restrict accessor/mutator access

Behavioral Patterns

  • Chain of Resp. - A way of passing a request between a chain of objects
  • Command - Encapsulate a command request as an object
  • Event -
  • Interpreter - A way to include language elements in a program
  • Iterator - Sequentially access the elements of a collection
  • Mediator - Defines simplified communication between classes
  • Memento - Capture and restore an object's internal state
  • Observer - A way of notifying change to a number of classes
  • State - Alter an object's behavior when its state changes
  • Strategy - Encapsulates an algorithm inside a class
  • Template Method - Defer the exact steps of an algorithm to a subclass
  • Visitor - Defines a new operation to a class without change
  • Single-serving Visitor -
  • Hierarchical Visitor -

Friday, June 30, 2006

Microsoft Certified Solutions Developer

I have now completed the exam to qualify as a MCSD: Microsoft Certified Solutions Developer. Exam 70-300: Analysing Requirements and Defining Solutions.

Sunday, March 26, 2006

WAI Accessibility Checker

Can your website be properly viewed by everyone?

Web Accessibility Inspector is a program that can determine whether or not your website can be easily viewed by the elderly and those with visual impairments. Web Accessibility Inspector, which is based on W3C WCAG 1.0 and Fujitsu Web Accessibility Guidelines, effectively determines whether a website is easy for anyone to view.

It can evaluate not just HTML but also CSS (Cascading Style Sheets), and it can conduct a diagnostic at a high level of precision, including character size, line spacing, and the color of characters and backgrounds. Use of this software allows for the improvement of your site's overall accessibility and can ensure its reliability.

http://design.fujitsu.com/en/universal/assistance/webinspector/