<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4302276564178052369</id><updated>2011-11-10T22:06:07.133-08:00</updated><category term='Business'/><category term='WCSF'/><category term='Technology'/><category term='Reporting Service'/><category term='VB6'/><category term='Culture'/><category term='MVP'/><category term='Mindset'/><category term='ReportViewer'/><category term='IIS7'/><category term='ASP.NET'/><category term='dbI'/><category term='DI'/><title type='text'>OTK Founder's Column</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://otkfounder.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4302276564178052369/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://otkfounder.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Antonio Ooi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_GUoxyGqqxZ8/S6CjlriXdmI/AAAAAAAAA4I/mM0LvVDrsjc/S220/%E5%BB%B6%E5%BE%81%EF%BC%88%E4%B8%89%EF%BC%89.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4302276564178052369.post-2369709771021582501</id><published>2008-05-10T01:33:00.001-07:00</published><updated>2008-05-10T01:33:46.797-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Business'/><category scheme='http://www.blogger.com/atom/ns#' term='Mindset'/><category scheme='http://www.blogger.com/atom/ns#' term='VB6'/><category scheme='http://www.blogger.com/atom/ns#' term='Culture'/><title type='text'>Why keeping up to technology trend while my old VB6 product is working fine?</title><content type='html'>&lt;p&gt;Recently, I was being told by the COO of a software company that having the passion to build software with great patterns and practices is too unrealistic and I was being classified by him as a perfectionist. To him, I may not have the opportunity to contribute this to the company as the situations are usually not allowed. For instance, they have some old products written in VB6 without any proper coding standard and yet they still need to continue providing feature enhancements and support maintenance to their customers. If I were being employed, I may need to live with the traditional and messy coding standards in order to continue supporting the business. Secondly, the design architecture of the ongoing projects could have already been established and he does not want anyone to mess around with the architecture anymore so that the development can proceed. Thirdly, they only need someone who can play a full project management role which only has little chance for the person to get involved in the technical aspect. &lt;p&gt;In fact, the COO of this company is not the first person that I have met so far with this kind of mindset; there are plenty in the Malaysia’s software industry. If having a passion to build software in great patterns and practices is too impractical to software businesses, I wonder why Microsoft and Google can be so successful – the God must be pampering them too much.  &lt;p&gt;After having a long discussion with the COO, I can only conclude that: In Malaysia, we lack of industry leader who can control the situation instead of letting the situation to control us. Usually, there are too much of excuses for us not to move forward until we really have forgotten which field that we are in now – An information TECHNOLOGY company that does not believe in TECHNOLOGY. How can ones lose their trust on technology if they still willing to survive in the software businesses? Are they forgetting about what they are selling? How can ones continue to sell nutrition and food supplement to the consumer when they no longer believe in nutrition can make people healthier? &lt;p&gt;Another key argument is that, if you believe great health can give greater success to someone, why don’t you take your own food supplement products regularly and prove to your customers that this really works? The same goes to software businesses. One thing that most of them never realized is that, the software industry has come to the realization that the methodologies and approaches being used should not only help to build software that improves the efficiency and productivity of the end-users. It should also help to improve the efficiency and productivity of the developers and therefore the software businesses as a whole. For example, Microsoft has realized the popularity of a design pattern called Model-View-Controller (MVC) and started to officially incorporate it into ASP.NET 3.5 to facilitate automated unit test (also referred as Test-Driven Development, TDD) as well as improving the agility of the Web application architecture to facilitate change. Also, the Agile Development Methodology has been aggressively promoted by many industry experts to correct the way that we build and deliver the right working software to the stakeholder based on the nature of how the software suppose to be designed and developed. Such improvements have not only brought revolutionary benefits to the ISVs but also gives significant benefits to the end-users, e.g. better architectural agility that capable of adapting to the ever changing business needs, highly predictable and maintainable code that allows developers to provide faster response to the change requests, much more stable and usable software that reduces the total cost of ownership and so on.  &lt;p&gt;Many key persons of the software companies were questioning me: &lt;i&gt;“How do you think a software company can continue to sustain without businesses? Do you think we can survive for not selling anything for one or two years time by just doing R&amp;amp;D in designing and developing product using industry best patterns and practices?”&lt;/i&gt; To me, if you are not capable of producing competitive products and services, why start the business? In that case, what is your key competency in the IT market? Is it because you have not faced any great competition so far? If one day you have, will you fight, or will you close up the business for surrender, leaving the company with the money that you have earned for years and enjoy your retirement with your family? What about those who have been loyal and led by you for years, maintaining VB6 code without progressing themselves to the next level and losing their market value simply because of trusting your leadership? &lt;p&gt;The following chart explains software companies are likely to be more sustainable when they are able to grow according to the technology trend: &lt;p&gt;&lt;a href="http://lh3.ggpht.com/antonio.ooi/SCVd47BW1VI/AAAAAAAAAgw/GlFmQq0K9YA/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="248" alt="image" src="http://lh4.ggpht.com/antonio.ooi/SCVd6LBW1WI/AAAAAAAAAg4/0Wzd2AYxtXE/image_thumb%5B1%5D.png?imgmax=800" width="400" border="0"&gt;&lt;/a&gt; &lt;p&gt;&lt;b&gt;&lt;i&gt;Figure 1.0 – Company B, although not a market leader in the earlier age, due to the ability to keep up with market trend, they are more sustainable in long-term basis&lt;/i&gt;&lt;/b&gt;. &lt;p&gt;Figure 1.0 shows that Company A may be the market leader in the earlier age when Thick Client technology was first introduced. Due to the size of the Company B and its financial strength as a startup company, they were far behind Company A. However, due to the ability and their passion to catch up with the new technology trend, they are able to continue fulfilling the market demand. This has also created opportunities for them to enter as a pioneer for a specific market segment, for example Smart Client, Mobile Client, Web 2.0, and even Service Oriented Architecture (SOA) (as what was happening to Company A during the age of thick client). For Web 2.0, due to the Software-as-a-Service (SaaS) and Application Service provider (ASP) business model, they gained one thousand customers as their monthly subscribers and enjoy monthly recurring income. Then they proceed to their venture to SOA and earned millions of dollars from the 50 customers. As for Company A, many of their software products were written in traditional VB6 programming language and they can’t afford to revamp the entire product range because they had been stopped leveraging on newer development technology since the release of .NET Framework. As the technology gap is too huge, the cost of conversion is too high for them until they are not able to move forward to the new era of development. Therefore, they continue to suffer with their existing customers in fixing their software bugs and performance issue because as time goes by, the data and number of users are growing. No proper design patterns and scalability approach were being adopted while building their applications. Due to this, they were also facing serious manpower shortage problem because many of their senior developers had left the company in order to acquire newer technology for the sake of their career. Besides, hiring new developers is difficult as nobody willing to deal with the primitive technology to make their skill set obsolete. As a result, Company A is lacking of capable people to help them to build more competitive software products and can no longer sustain in the current software market.  &lt;p&gt;About how to make the company survive without compromising the software quality &lt;i&gt;(this statement sounds stupid)&lt;/i&gt;, I think I should leave this to the business experts to think about it – this is supposed to be their expertise for them to prove their business skills, not for me to answer. My job is to make sure that I can deliver highly competitive products for my company and the software that really works to the customers, this is my bottom-line. If the business operation management is not able to find ways to balance up between business and technology advancement, then this is simply too bad to the company. However, my thinking is simple: if I were to sell fried noodles, fundamentally, I have to make sure that my fried noodles are tasty enough to be publicly acceptable. And if I really want to be a successful and famous fried noodle’s business owner, I have to make sure that my fried noodle is EXTREMELY TASTY and HIGH QUALITY. These will of course very much concerning about the methodology and approach that I use in the production of my fried noodles. I will not give myself excuses like: My customers always get hungry and want me to be fast; I used to the way I’m frying the noodle and I have no time to think of changing my way of frying tastier noodles and so on. In Penang, Lorong Selamat, the famous Char Koay Teow costing RM7.00 per plate with great traditional taste and extra big prawns. The customers may need to wait for 30 minutes to an hour, queuing up under the rain or hot sun with umbrella, just to eat their Char Koay Teow. This is what Scott Ambler from IBM, who was conducting his speech during the IASA conference: “Do you prefer RED RED RED and then GREEN, or GREEN GREEN GREEN and then RED?!” &lt;p&gt;If we are selling software for survival, fundamentally, we should respect on what we sell and take pride on what we sell. If we have to do it, we got to do it. No matter how much effort that you have put in for reaching the current destination, If you think there will be a dead end by going further with the current practices, then you should make a U-turn and think of other alternative. Making a U-turn may cost you a lot of time, effort, and money, but it is definitely worthwhile than reaching to the dead end and fall down to the cliff. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4302276564178052369-2369709771021582501?l=otkfounder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4302276564178052369/posts/default/2369709771021582501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4302276564178052369/posts/default/2369709771021582501'/><link rel='alternate' type='text/html' href='http://otkfounder.blogspot.com/2008/05/why-keeping-up-to-technology-trend.html' title='Why keeping up to technology trend while my old VB6 product is working fine?'/><author><name>Antonio Ooi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_GUoxyGqqxZ8/S6CjlriXdmI/AAAAAAAAA4I/mM0LvVDrsjc/S220/%E5%BB%B6%E5%BE%81%EF%BC%88%E4%B8%89%EF%BC%89.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/antonio.ooi/SCVd6LBW1WI/AAAAAAAAAg4/0Wzd2AYxtXE/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-4302276564178052369.post-8437258204033329311</id><published>2008-03-16T05:13:00.000-07:00</published><updated>2008-03-16T09:19:16.051-07:00</updated><title type='text'>Managing Mess: The Ability to Classify and Associate</title><content type='html'>I always believe that all complexities in the universe originated from simple, small, and interrelated objects or entities. Things become extremely messy when various kinds of object have been mixed up together and not properly grouped. For example, consumers will find the desired product items hard to find if the available products sold in the supermarket &lt;em&gt;do not well-arranged &lt;/em&gt;or &lt;em&gt;well-classified&lt;/em&gt;. Besides, having the product items well-classified is not enough; ones should also know how to &lt;em&gt;associate the relevancy &lt;/em&gt;among items to enhance the consumer's shopping experience.&lt;br /&gt;&lt;br /&gt;The same goes to relational data modeling, object-oriented programming, user interface design, software architecture design, and even for project documentation. I came across with various kind of people in the software industry, throwing a few scenarios to me and asking me how to have a good design in addressing a specific business problem. Often, in my thinking process, before giving out my answer, I always start from two basic things: &lt;strong&gt;Classify&lt;/strong&gt; &lt;strong&gt;and&lt;/strong&gt; &lt;strong&gt;Associate&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Every business issue, or perhaps I would say every specific business domain, involves multiple business entities that have various kinds of relationship interconnected to each other. Without having all these clearly identified and understood, one may suffer in the mess and lose his/her clue in resolving problems. This may sound very basic and familiar to everyone, however, many tend to skip this process as it is 'too basic'. Others may also want to argue that 'I have done that', but most of the time, they are putting those that 'they have done' aside while cracking their head for solution. Let me give you a very good example which I got it from the real world experience:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;A specific &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;workflow&lt;/span&gt; system allows the registration clerk to submit a particular application from an applicant for approval. Once the application is submitted, the application status will change to 'Pending for approval'. If the applicant failed to submit a specific required information, however, the application status will change to 'Pending for information XXX'. Both 'Pending for approval' and 'Pending for information XXX' status are allowed to be forwarded to the officer for approval but the later will have the following two outcomes: &lt;/em&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;em&gt;The application will be approved by the officer; &lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;The officer will not approve the application and further follow-up need to be done by the registration clerk. Once the issue is settled, the officer will verify and approve the application, otherwise it will remain 'Pending for information XXX' until the problem is resolved.&lt;/em&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The system analyst (SA) of this project approached me and asked: &lt;em&gt;"Can we add a button called 'Reject' and notify the clerk that the application needs to be resolved further? But I want the status to remain as 'Pending for information XXX' instead of 'Rejected'."&lt;/em&gt; &lt;/p&gt;&lt;p&gt;Here, the SA had made a couple of mistakes:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;She was trying to give herself an allowance for not classifying 'Pending for information XXX' and 'Rejected' under &lt;strong&gt;Application Status&lt;/strong&gt;, which may add confusion and complicate the status logic.&lt;/li&gt;&lt;li&gt;She did not realize that when she asked for the 'Reject' button to be added and at the same time remain the 'Pending for information XXX' application status, she was actually trying to add/change the ATTRIBUTE of the specific application status.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To resolve this issue, the simplest solution is to allow the officer to add a &lt;strong&gt;Remark&lt;/strong&gt; to the specific application of this status while remain the status logic of 'Pending for information XXX' (Pending for information XXX &lt;em&gt;with Remarks&lt;/em&gt;). As such, the system can still notify the registration clerk by distinguishing the difference between 'Pending for information XXX' and 'Pending for information XXX with Remarks'. Here, the &lt;strong&gt;Remarks&lt;/strong&gt; will become the ATTRIBUTE of any application status. It also act like a subtype of each application status -- &lt;em&gt;with or without remarks&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;Of course, there are couple of ways to resolve this issue in a proper classified and associated manner, such as creating a new status called &lt;strong&gt;On-hold&lt;/strong&gt; and have a status selection control &lt;em&gt;(e.g. radio button or dropdown list) &lt;/em&gt;for the officer to select instead of having a one-status-one-button approach, which will never be agile and facilitate extensibility. The UI designer can then remain the consistency of the UI design by having the &lt;strong&gt;Save &lt;/strong&gt;and &lt;strong&gt;Cancel &lt;/strong&gt;buttons across application forms, which later could possibly be converted into reusable UI framework.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;CONCLUSION:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Improving the skill of classifying and associating business entities in a logical manner will not only help making the complicated-sound business rules simple but also help ones to explain the solution &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;logic&lt;/span&gt; in a clearer and more systematic way. In addition, complex business problems can be easily resolved once the job of classifying and associating business entities has been completed and well-defined. The reason behind this is that, the clearly defined business components and relationships provide higher visualization of the problem and hence making the path to solution visible.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4302276564178052369-8437258204033329311?l=otkfounder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4302276564178052369/posts/default/8437258204033329311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4302276564178052369/posts/default/8437258204033329311'/><link rel='alternate' type='text/html' href='http://otkfounder.blogspot.com/2008/03/managing-mess-ability-to-classify-and.html' title='Managing Mess: The Ability to Classify and Associate'/><author><name>Antonio Ooi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_GUoxyGqqxZ8/S6CjlriXdmI/AAAAAAAAA4I/mM0LvVDrsjc/S220/%E5%BB%B6%E5%BE%81%EF%BC%88%E4%B8%89%EF%BC%89.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-4302276564178052369.post-4398094916361478024</id><published>2007-11-19T13:13:00.000-08:00</published><updated>2007-11-19T14:02:05.058-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dbI'/><category scheme='http://www.blogger.com/atom/ns#' term='MVP'/><category scheme='http://www.blogger.com/atom/ns#' term='DI'/><category scheme='http://www.blogger.com/atom/ns#' term='WCSF'/><title type='text'>How OTK Custom dbInstaller 2.0 achieves high flexibility and stability with MVP</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_GUoxyGqqxZ8/R0IAr8oqTbI/AAAAAAAAADc/xo1trDPSLwE/s1600-h/Database+Installation+Options.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5134667280166833586" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_GUoxyGqqxZ8/R0IAr8oqTbI/AAAAAAAAADc/xo1trDPSLwE/s400/Database+Installation+Options.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div align="justify"&gt;As some of you may already know that, &lt;strong&gt;Model-View-Presenter (MVP) &lt;/strong&gt;is a design pattern that cleanly separate the concerns between UI (View), UI-data interaction logic (Presenter), and your data logic (Model). If you came across with &lt;strong&gt;Web Client Software Factory (WCSF)&lt;/strong&gt;, you may notice that when you added a specific business module, guidance automatioin will create a presenter class for you for each page view. However, that doesn't mean that in MVP, you can only have one presenter for one view. In fact, you can have one presenter for multiple views. This is what dbI 2.0 alpha is currently implementing now.&lt;br /&gt;&lt;br /&gt;If you browse through the &lt;a href="http://blog.360.yahoo.com/blog-1.qMe98wdbL_QY1NGoysAwk-?cq=1&amp;amp;p=35"&gt;OTK Web Community&lt;/a&gt; photos, you will notice quite easily that dbI 2.0 is actually providing a wizard-like database installer to facilitate the database deployment tasks of your enterprise applications. What you may not notice is that, one of the great features that dbI wanted to achieve is to allow the developers to easily take out/incorporate in any wizard dialog steps with any combinations for different usage and target users. Developers can decide which steps they want to allow the users to customize for the installation of their application's database and which they do not.&lt;br /&gt;&lt;br /&gt;In order to achieve that, dbI 2.0 needs to find a way to separate the concerns between the &lt;strong&gt;dialog specific logics &lt;/strong&gt;and &lt;strong&gt;cross-dialog standard logics &lt;/strong&gt;so that the common logics do not need to be repeated on each form. Duplicating the same logic across multiple forms may introduce bugs as well as making the programs very hard to maintain.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;(NOTE: The 'cross-dialog standard logics' involve the manipulation of those common form controls together with some function calls from the data object, which may not be easily achieved a clean SoC by creating common class.)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Therefore, to tackle this issue, we do the following:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;First of all, we got to identify what are standard UI components that available on every wizard dialog. Then we create an interface called &lt;span style="font-family:courier new;"&gt;IWizardView&lt;/span&gt; that exposes these standard UI objects as properties.&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;Then we implement &lt;span style="font-family:courier new;"&gt;IWizardView&lt;/span&gt; on each of the wizard dialog boxes. Now every form will have all these common controls exposed as its public properties.&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;We now create a presenter class called &lt;span style="font-family:courier new;"&gt;InstallerPresenter&lt;/span&gt;, having one of its property as the type of &lt;span style="font-family:courier new;"&gt;IWizardView&lt;/span&gt; and its associated private variable called &lt;span style="font-family:courier new;"&gt;_wizardView&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="justify"&gt;Meanwhile, we also make the presenter's constructor to accept a parameter of type &lt;span style="font-family:courier new;"&gt;IWizardView&lt;/span&gt; and get the parameter value assigned to &lt;span style="font-family:courier new;"&gt;_wizardView&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Back to each wizard form, we want the presenter class to be created once the Form object is created. Hence, on each form's contructor, we do the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;_presenter = New InstallerPresenter(Me)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;where &lt;span style="font-family:courier new;"&gt;'Me'&lt;/span&gt; is the form itself.&lt;/li&gt;&lt;/ol&gt;&lt;div align="justify"&gt;Since the constructor's parameter is just an interfance but not the form, we can say that the presenter does not have the knowledge of the specific form but just the "rules" that it can accept, i.e. the &lt;span style="font-family:courier new;"&gt;IWizardView&lt;/span&gt; interface. Through this way, the presenter will therefore can serve multiple forms with its logic as long as each form is implementing the &lt;span style="font-family:courier new;"&gt;IWizardView&lt;/span&gt; interface.&lt;br /&gt;&lt;br /&gt;Here, I also want you to take note that, in order to implement MVP design pattern, it is not necessary that you need the &lt;strong&gt;ObjectBuilder&lt;/strong&gt; (for &lt;em&gt;Dependecy Injection&lt;/em&gt; purposes) as proposed by WCSF. It is optional and just a nice-to-have feature that will further pushing the loosely-coupled practices into extreme.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4302276564178052369-4398094916361478024?l=otkfounder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4302276564178052369/posts/default/4398094916361478024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4302276564178052369/posts/default/4398094916361478024'/><link rel='alternate' type='text/html' href='http://otkfounder.blogspot.com/2007/11/how-otk-custom-dbinstaller-20-achieves.html' title='How OTK Custom dbInstaller 2.0 achieves high flexibility and stability with MVP'/><author><name>Antonio Ooi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_GUoxyGqqxZ8/S6CjlriXdmI/AAAAAAAAA4I/mM0LvVDrsjc/S220/%E5%BB%B6%E5%BE%81%EF%BC%88%E4%B8%89%EF%BC%89.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_GUoxyGqqxZ8/R0IAr8oqTbI/AAAAAAAAADc/xo1trDPSLwE/s72-c/Database+Installation+Options.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-4302276564178052369.post-5615960558231088546</id><published>2007-11-02T10:10:00.000-07:00</published><updated>2007-11-02T12:22:58.652-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ReportViewer'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS7'/><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Service'/><title type='text'>Solving ReportViewer Rendering Issue on IIS7</title><content type='html'>&lt;strong&gt;Applies to:&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Internet Information Services 7.o (IIS7)&lt;/li&gt;&lt;li&gt;Microsoft Report Viewer Redistributable 2005&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;Symptoms:&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Unable to render ReportViewer on ASP.NET Web pages while running on IIS7.&lt;/li&gt;&lt;li&gt;You have no problem viewing your reports when running on debug mode with your Visual Studio 2005.&lt;/li&gt;&lt;li&gt;You are able to view your reports on Report Manager but not able to view them on IIS7.&lt;/li&gt;&lt;li&gt;You encounter JavaScript error when loading your report page with ReportViewer. Image buttons such as calendar appear as red 'X'.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;When the ReportViewer control is added to Web Form (.aspx), the&lt;br /&gt;Reserved.ReportViewerWebControl.axd httpHandler is added to System.Web section of the Web.Config file. In IIS7, it should be added under System.Webserver section.&lt;/li&gt;&lt;li&gt;IIS7 Handler Mappings does not contain Reserved.ReportViewerWebControl.axd httpHandler, and therefore unable to render the ReportViewer elements needed by the JavaSript.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Resolution:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Open &lt;strong&gt;Internet Information Services (IIS) Manager &lt;/strong&gt;and select your Web application.&lt;/li&gt;&lt;li&gt;Under &lt;strong&gt;IIS &lt;/strong&gt;area, double-click on &lt;strong&gt;Handler Mappings &lt;/strong&gt;icon.&lt;/li&gt;&lt;li&gt;At the &lt;strong&gt;Action &lt;/strong&gt;pane on your right, click on &lt;strong&gt;Add Managed Handler&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;At the &lt;strong&gt;Add Managed Handler &lt;/strong&gt;dialog, enter the following:&lt;br /&gt;&lt;strong&gt;Request path:&lt;/strong&gt; Reserved.ReportViewerWebControl.axd&lt;br /&gt;&lt;strong&gt;Type: &lt;/strong&gt;Microsoft.Reporting.WebForms.HttpHandler&lt;br /&gt;&lt;strong&gt;Name: &lt;/strong&gt;Reserved-ReportViewerWebControl-axd&lt;/li&gt;&lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt;. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Reserved-ReportViewerWebControl-axd handler is now added to your Handler Mappings list. Notice that the following line has also been added to your Web.config file under the system.webserver's handler section:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;add name="Reserved-ReportViewerWebControl-axd" path="Reserved.ReportViewerWebControl.axd"&lt;br /&gt;verb="*" type="Microsoft.Reporting.WebForms.HttpHandler" resourceType="Unspecified"&lt;br /&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Run your report again.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4302276564178052369-5615960558231088546?l=otkfounder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4302276564178052369/posts/default/5615960558231088546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4302276564178052369/posts/default/5615960558231088546'/><link rel='alternate' type='text/html' href='http://otkfounder.blogspot.com/2007/11/solving-reportviewer-rendering-issue-on.html' title='Solving ReportViewer Rendering Issue on IIS7'/><author><name>Antonio Ooi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_GUoxyGqqxZ8/S6CjlriXdmI/AAAAAAAAA4I/mM0LvVDrsjc/S220/%E5%BB%B6%E5%BE%81%EF%BC%88%E4%B8%89%EF%BC%89.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-4302276564178052369.post-2244880138965420021</id><published>2007-03-11T00:21:00.000-08:00</published><updated>2007-03-11T23:17:25.060-07:00</updated><title type='text'>People-Process-Technology: My Belief in Successful Software Business</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_Z_1zsok3UkA/RfTwTbJ3DYI/AAAAAAAAABw/_7uwu4SnfPY/s1600-h/People-Process-Technology.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5040918099431722370" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_Z_1zsok3UkA/RfTwTbJ3DYI/AAAAAAAAABw/_7uwu4SnfPY/s400/People-Process-Technology.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;By looking at the subject title, some may say that: &lt;em&gt;"Antonio, you're not the only one who believes this, everybody believes this also."&lt;/em&gt; Yes, but perhaps they will believe more of it only at the moment when they looking at this diagram -- &lt;strong&gt;People-Process-Technology&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;I observed quite a number of software companies almost a decade, some succeeded, some failed. Those succeeded usually taking care of the balance of these three great areas, that is &lt;strong&gt;people quality&lt;/strong&gt;, &lt;strong&gt;process quality&lt;/strong&gt;, and &lt;strong&gt;technology quality&lt;/strong&gt;. These three components are interlinked together, supporting each other, in achieving common business goals. But why People Quality as the top-most priority? Reason: At the beginning, Process and Technology do not create themselves but human does. Human defined the processes and invented the technology. Therefore, the quality of the process and technology is very much depending on the human quality, the creator's quality. How the creator behaves, how the creator thinks, are all reflected on the process and technology invented by them. &lt;/span&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;span style="font-family:verdana;"&gt;However, good business processes and technologies may help producing good people. How? For example, &lt;a href="http://www.sei.cmu.edu/"&gt;Software Engineering Institute (SEI)&lt;/a&gt; may have good people that are capable of developing great process improvement methodologies that many software companies through out the world may be able to benefit from it -- &lt;strong&gt;Capability Maturity Model Integration (CMMI)&lt;/strong&gt;. Therefore, if you think you do not have people who are good enough to come out with a good process for the company businesses, you can adopt CMMI. By properly adopting CMMI, you may be able to influence and improve your people quality.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;span style="font-family:verdana;"&gt;The same lies to implementing great technology in your company. Your people may not be able to invent fantastic new technology for your company to be more competitive. But if you willing to bring in external expertise or adopting proven design patterns and practices brought to you by some of the successful software companies, this may help improving your people quality because they can learn from them while implementing them. In terms of business process quality, technology quality may have direct contribution on it. For example, you may want to have unified and integrated business process model but do not know how. In that case, software tools and platform like &lt;a href="http://office.microsoft.com/en-us/sharepointserver/FX100492001033.aspx?ofcresset=1"&gt;Microsoft Office SharePoint Server 2007&lt;/a&gt; may be able to help by providing Business Intelligence, Workflow, Document Sharing, Version Control, Wikis, Blog, Issue Tracking System and so on, all integrated, which eventually bring you a high-efficient and productive business collaboration platform.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;span style="font-family:verdana;"&gt;As you can see, People-Process-Technology are tightly integrated. In Chinese, I describe it as "三者缺一，无计可施", namely, by lacking either one of these three components, there will be no clue for us to come out with a good strategy. So, if you have not done so, try to review your current company policy, culture, and philosophy -- Are they focus on the balance of these three key factors that determining the success of your company? If not, it is time to "refactor" it!&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;span style="font-family:Verdana;"&gt;Thank you.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;Antonio Ooi&lt;br /&gt;Founder &amp;amp; Software Architect&lt;br /&gt;OTK Web Solutions&lt;br /&gt;&lt;em&gt;"Zero Compromise, Our Inspiration"&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4302276564178052369-2244880138965420021?l=otkfounder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4302276564178052369/posts/default/2244880138965420021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4302276564178052369/posts/default/2244880138965420021'/><link rel='alternate' type='text/html' href='http://otkfounder.blogspot.com/2007/03/people-process-technology-my-belief-in.html' title='People-Process-Technology: &lt;br&gt;My Belief in Successful Software Business'/><author><name>Antonio Ooi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Z_1zsok3UkA/RfTwTbJ3DYI/AAAAAAAAABw/_7uwu4SnfPY/s72-c/People-Process-Technology.jpg' height='72' width='72'/></entry></feed>
