tag:blogger.com,1999:blog-118067532024-03-07T19:05:31.388-08:00Open Source StrategiesA blog about open source software and business models, enterprise software, and the opentaps Open Source ERP + CRM Suite.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comBlogger90125tag:blogger.com,1999:blog-11806753.post-36447586882457626292009-06-23T10:20:00.000-07:002009-06-23T10:24:43.202-07:00This blog is moving!After four years, this blog has a new home. We've just upgraded <a href="http://www.opensourcestrategies.com/">www.opensourcestrategies.com</a> to use WordPress. We hope you'll continue to follow <a href="http://www.opentaps.org">opentaps Open Source ERP + CRM</a> and our life as an open source software company there.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-46956587418833475162009-05-12T15:19:00.001-07:002009-05-12T15:23:56.746-07:00New screens for creating purchase orders in opentapsIf you have been using opentaps 0.9 or 1.0, you should find the new screens for creating purchase orders in the upcoming version 1.4 much easier to use.<br /><br />First, the screen for initializing purchase orders has been streamlined. Instead of having to go through two screens to select a supplier and agreements, there is now one screen to do both:<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjiFIKNiY1bGfw1Tkec-8dXMhp5MAFZXx-9CApz903vZ6mW8hKm-W1R9x1YeASNUpw0HekKkIOx7pn0fJmNSDH25ej7CnxfKsMdya0DRJIO9kZfML2IYab7xPPfIa2dq3IshvE/s1600-h/create-po-initialize.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 131px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjiFIKNiY1bGfw1Tkec-8dXMhp5MAFZXx-9CApz903vZ6mW8hKm-W1R9x1YeASNUpw0HekKkIOx7pn0fJmNSDH25ej7CnxfKsMdya0DRJIO9kZfML2IYab7xPPfIa2dq3IshvE/s400/create-po-initialize.png" alt="" id="BLOGGER_PHOTO_ID_5335065968284946498" border="0" /></a>Second, when you're adding items to your purchase order, there is now an auto completion which it to prompt you for a product based on either the product ID or a portion of the product name<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2nv8uxFPGv9Ias68pqZdmWPvKIG1jjMC_ck4hKKSHurpGKsIGUZJkQ6VAc9qSxq497ApDL6zuZ9DWaGqc_yOhgCiEJ-aiZMkrTilEKi7GzcPxnv_C7fsfa2ZG8rx53nVbb7tC/s1600-h/create-po-add-item.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 266px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2nv8uxFPGv9Ias68pqZdmWPvKIG1jjMC_ck4hKKSHurpGKsIGUZJkQ6VAc9qSxq497ApDL6zuZ9DWaGqc_yOhgCiEJ-aiZMkrTilEKi7GzcPxnv_C7fsfa2ZG8rx53nVbb7tC/s400/create-po-add-item.png" alt="" id="BLOGGER_PHOTO_ID_5335066221076788722" border="0" /></a>If the product has not been set up already with a supplier entry in the catalog manager, opentaps 1.4 will let you still add it to your order:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFRcjE9TVFa4D8W8Ig6Vi1ppMGuLYKAduYeYBQtOaDZFuBN45NsS3WLUM4HC817gCMK-Kt4ZYvGEKlUCokr0MpF1sGDmn7ilblzmElaM0h9Px0dHewQZOA12PpIojae4H6LZjp/s1600-h/create-po-add-item-with-no-.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 270px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFRcjE9TVFa4D8W8Ig6Vi1ppMGuLYKAduYeYBQtOaDZFuBN45NsS3WLUM4HC817gCMK-Kt4ZYvGEKlUCokr0MpF1sGDmn7ilblzmElaM0h9Px0dHewQZOA12PpIojae4H6LZjp/s400/create-po-add-item-with-no-.png" alt="" id="BLOGGER_PHOTO_ID_5335066559443165074" border="0" /></a>Finally, to create your purchase order, there is now just one screen for setting the terms of your purchase order and selecting a shipping destination:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2BYXnT3a1K3SOE1qv2mEK32Q7MBW2qUqD5j3vzowqHgrII775n3Mvr1L0lKwt6d0WP4fYTgWkDuCgNgvNMz8P-fjY9u2dSlzFKkHTLN-Fho6AeA0cwfkUuVPRCrNeRg2oa9H1/s1600-h/create-po-set-terms-shippin.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 202px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2BYXnT3a1K3SOE1qv2mEK32Q7MBW2qUqD5j3vzowqHgrII775n3Mvr1L0lKwt6d0WP4fYTgWkDuCgNgvNMz8P-fjY9u2dSlzFKkHTLN-Fho6AeA0cwfkUuVPRCrNeRg2oa9H1/s400/create-po-set-terms-shippin.png" alt="" id="BLOGGER_PHOTO_ID_5335066744812939474" border="0" /></a>Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-11206177854426619642009-04-29T14:13:00.000-07:002009-04-29T14:20:46.634-07:00opentaps Open Source ERP + CRM Quarterly Update<span class="Apple-style-span" style="font-weight: bold;">Opentaps Now Supports Hibernate</span><div><br /></div><div>We made a very significant and fundamental enhancements: opentaps now supports <a href="https://www.hibernate.org/">hibernate</a> as well as the original ofbiz entity engine. You can use the two interchangeably to store and retrieve data, but the addition of hibernate also gives us a more flexible query language, data validation, search, and distributed database capabilities. We think this will open up a lot of new opportunities for opentaps down the road.</div><div><br /></div><div><span class="Apple-style-span" style="font-weight: bold;">Asterisk VOIP PBX Also Integrated</span></div><div><br /></div><div>Another important enhancement is the <a href="http://opensourcestrategies.blogspot.com/2009/03/opentaps-integrated-with-asterisk.html">integration of opentaps with the asterisk open source voice over IP (VOIP) PBX</a>. You can now use it with opentaps CRM, purchasing, and other applications for inbound and outbound calls.</div><div><br /></div><div><span class="Apple-style-span" style="font-weight: bold;">Enhanced Manufacturing and Inventory Planning</span></div><div><br /></div><div>The inventory and manufacturing planning capabilities of opentaps, one of our traditional areas of strength, were enhanced with several new features, including:</div><div><ul><li>Support for routing specific Bills Of Material (BOMs)<br /></li><li>Minimum and maximum quantities for manufacturing routings in Material Resources Planning (MRP)<br /></li><li>Ability to edit and consolidate manufacturing and purchasing requirements<br /></li><li>Trace the source and usage of inventory items through their entire lifecycle<br /></li><li>Allow orders to be reserved in and shipped from multiple warehouses<br /></li></ul></div><div><br /></div><div><span class="Apple-style-span" style="font-weight: bold;">An Easier Way to Segment Financial Data</span></div><div><br /></div><div>Many organizations would like to be able to segment their financial results, and we introduced a new accounting tags feature which allows you to add up to 10 tags to all your invoices, payments, and general ledger transactions. For example, you can tag your transactions by division, department, activity, and cost center, and then see standard financial reports such as income statements, balance sheets, and cash flow statements for the different combinations of tags.</div><div><br /></div><div><span class="Apple-style-span" style="font-weight: bold;">More Automated Testing Resources</span></div><div><br /></div><div>We now have over 350 automated tests for the opentaps development trunk, which are run on both MySQL and PostgreSQL daily. We have also integrated the <a href="http://seleniumhq.org/about/how.html">Selenium</a> and <a href="http://fitnesse.org/">Fitnesse</a> testing frameworks into opentaps, so that we can add more automated front end testing as well.</div><div><br /></div><div><span class="Apple-style-span" style="font-weight: bold;">The World of Opentaps</span></div><div><br /></div><div>It's been almost 3 years since we unveiled opentaps at the MySQL Users' Conference in Santa Clara. Since that time, opentaps has grown both in capabilities and in its community. Last month, I used google map to make a map of where some of the organizations which use or provide services for opentaps are located, and the result is this map -- the <a href="http://www.opentaps.org/docs/index.php/World_of_opentaps">World of Opentaps</a>:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiguPryH9A9dl8korCh9K0XJ37AMY6YkEaBPN54efMMuEDAvzYlsd53GdFKfVwR8HPVOjeoGFEo5dWZmvDAaVTo-otdo_H89HnyTinSj00NpeAX7XN7IwpENe7psri5JhGdjiw0/s1600-h/World+of+opentaps.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 164px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiguPryH9A9dl8korCh9K0XJ37AMY6YkEaBPN54efMMuEDAvzYlsd53GdFKfVwR8HPVOjeoGFEo5dWZmvDAaVTo-otdo_H89HnyTinSj00NpeAX7XN7IwpENe7psri5JhGdjiw0/s400/World+of+opentaps.png" alt="" id="BLOGGER_PHOTO_ID_5330225702640065154" border="0" /></a>Take a look -- there's probably somebody near you!</div>Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-62143465216270883652009-04-27T11:47:00.000-07:002009-04-27T12:06:51.378-07:00The High Cost of ERP and the open source alternativeCFO research published a white paper last month about the <a href="http://www.cfo.com/whitepapers/index.cfm/displaywhitepaper/13316056">high cost of ERP</a>, and the results were pretty astounding: ERP software is even more expensive than most people thought! In their survey, over 80% of the companies had customized their ERP systems, and the annual cost of making those customizations can be nearly <span class="Apple-style-span" style="font-style: italic;">twice </span>the amount of annual maintenance and support fees. This is because most commercial ERP systems are very difficult to change. Even minor modifications took on average 7 person-days to make.<div><br /></div><div>As a result of this high cost of customizing ERP software, many CFO's are giving up completely on customizations and instead, as one finance director said, "... will modify the business process if necessary or create an offline procedure" instead of making customizations. In other words, either they will run their business as their ERP vendor tells them, or they won't use the ERP system at all and go back to the "offline procedures" of custom spreadsheets, stacks of paper, and whatever else our grandparents used, before computers became popular. </div><div><br /></div><div>Allow me to point out the obvious: customizations are inevitable, because each business is unique, and also because the business environment changes. If your ERP software cannot accommodate that, then it's simply the wrong solution. Adapting to it is not following "best practices" -- it's more like putting yourself into a straitjacket.</div><div><br /></div><div>Forunately, open source ERP solutions, such as our <a href="http://www.opentaps.org/">opentaps Open Source ERP + CRM</a>, are <span class="Apple-style-span" style="font-style: italic;">fundamentally </span>easier to customize because of the following reasons:</div><div><ol><li>You have access to the source code, so instead of having to follow painful vendor workarounds, you can modify the source code to fit your needs.</li><li>opentaps is newer than most of the commercial ERP software and architected for change: it is more modular, more object-oriented with our new domain driven architecture, and supported by a large body of automated tests.</li><li>opentaps is designed for a wider audience, and hence intended to be customized to fit a much larger range of uses. Take a look at the <a href="http://www.opentaps.org/docs/index.php/World_of_opentaps">world of opentaps</a>, and you'll see how organizations all around the world have tailored opentaps to their needs.</li></ol></div>Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-80878507302673715752009-04-16T17:45:00.000-07:002009-04-16T17:51:25.759-07:00The World of OpentapsI finally figured out how to use Google Maps and made this map of where some of the different users and service providers of opentaps are located:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqpIsJyBoBDxTA5JshEmrdAagkUgvtY40JFNvZAahL4a1xDfkmL5pHbguQ-h9s2eYIsghCDS0cZr_Y7J8tktO98VWJO5iBR30GXzXQKm9hcjj3VRIBAk3QWhTej9mejpP6ybZV/s1600-h/World_of_opentaps.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 740px; height: 297px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqpIsJyBoBDxTA5JshEmrdAagkUgvtY40JFNvZAahL4a1xDfkmL5pHbguQ-h9s2eYIsghCDS0cZr_Y7J8tktO98VWJO5iBR30GXzXQKm9hcjj3VRIBAk3QWhTej9mejpP6ybZV/s400/World_of_opentaps.PNG" alt="" id="BLOGGER_PHOTO_ID_5325456098837308866" border="0" /></a><br />There are probably quite a few that I've missed, but this should give you the general idea. My how we've grown!Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-46364171225176656252009-03-19T11:32:00.000-07:002009-03-19T14:49:53.854-07:00opentaps integrated with AsteriskWe've just finished a feature that a lot of you have been asking about: the integration of <a href="http://www.opentaps.org/">opentaps Open Source ERP + CRM</a> and the <a href="http://www.asterisk.org/">Asterisk voice over IP (VOIP) PBX</a>.<br /><br />With this integration, you'll be able to dial out from opentaps using Asterisk. When you get an inbound call, Asterisk will tell opentaps, which would then show this little widget (made with the Google Web toolkit) that can take you to the page with information about the caller:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3IloUZ7IXdJjk4GGuQbr9A2adg34xZetiz5aGSR67CQfiMSuPr4dRlZGJZhaLCVcXV5NtQSMNGOURkexsR6wPbZsJko6gTWpy8H7MTZTNwh-QQBpiyTyabD9nmwUgQqKdaql3/s1600-h/opentaps_asterisk_gwt_widget.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 168px; height: 51px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3IloUZ7IXdJjk4GGuQbr9A2adg34xZetiz5aGSR67CQfiMSuPr4dRlZGJZhaLCVcXV5NtQSMNGOURkexsR6wPbZsJko6gTWpy8H7MTZTNwh-QQBpiyTyabD9nmwUgQqKdaql3/s200/opentaps_asterisk_gwt_widget.PNG" alt="" id="BLOGGER_PHOTO_ID_5314969746457870338" border="0" /></a><br />This feature will be part of our upcoming version 1.4 release for opentaps. In the meantime, you can take a look at our tutorial on <a href="http://www.opentaps.org/docs/index.php/Opentaps_Asterisk_Integration">integrating opentaps with Asterisk</a> and try it out -- it's already part of our development repository.<br /><br />By the way, if you've never tried Asterisk, you can set it up pretty easily on Amazon EC2 and try it yourself. We have some information about that in our tutorial as well.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-50258496406089730332009-02-16T13:45:00.000-08:002009-02-16T13:46:33.802-08:00Open Source in a Wider WorldLast week, I wrote about how the European Commission's <a href="http://www.opentaps.org/docs/index.php/Opentaps_ToolEast_ERP">Tool East project</a> leveraged <a href="http://www.opentaps.org">opentaps Open Source ERP + CRM</a> to create an open source ERP system for the Eastern European tool and die making industry. I thought this was a very interesting example of how open source software could be used to advance social and economic development.<br /><br />I was pleasantly surprised to hear encouraging feedback from many people about this project. In a time where our environment and our economies are facing unprecedented challenges, it's gratifying to know that our work could help our societies meet those challenges. I hope that the open source communities could come together and solve greater social problems in the future.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-47326331131288439682009-01-30T14:12:00.000-08:002009-01-30T14:15:06.568-08:00opentaps Open Source ERP + CRM Quarterly UpdateIn the last few months, we've introduced a few interesting new features to opentaps.<br /><br /><span style="font-weight: bold;">Query Builder for opentaps Analytics</span><br /><br />We have completed a <a href="http://www.opensourcestrategies.com/demo/query_builder_demo.htm">query builder</a> for <a href="http://www.opentaps.org/docs/index.php/Opentaps_Analytics">opentaps analytics</a>, which allows you to query the opentaps data warehouse based on multiple criteria. For example, you can now run a report of sales by product for all "Gizmos" in the United States since 2007, or sales by product in California on Mondays during the Julys. This new tool, along with the data transformations, reports, and report generator we've already built, will give you a large number of available reports through opentaps analytics<br /><br /><span style="font-weight: bold;">Google Web Toolkit Widgets Now Officially in opentaps</span><br /><br />We have merged back the Google Web Toolkit (GWT) widgets into the main development trunk of opentaps. These widgets will be part of the upcoming version 1.4 release. They will allow you to add and search for data much more quickly than before, while still allowing you to export lists of data to Excel.<br /><br /><span style="font-weight: bold;">opentaps - Asterisk Integration Under Way</span><br /><br />We have also started developing an integration between opentaps and the Asterisk open source voice over IP (VOIP) system. This integration will also allow you to call out on your Asterisk VOIP phone from opentaps. When you receive a call on your Asterisk phone, a GWT widget will pop up with information about the caller and take you to the screen in opentaps with their information.<br /><br /><span style="font-weight: bold;">Other Development of Note</span><br /><br />Some other important developments during the last few months include:<br /><ul><li>Improved commission management and reporting. Commissions can now be issued when the customer invoices are paid, instead of just when the customers are invoiced. There is also a new commissions report to show the sales, payments, and commissions in detail.</li><li>New cash lock box management feature, which allows you to import NACHA files from your bank to create payments automatically in opentaps.</li><li>Material Resources Planning (MRP) can now account for sales forecasts as well as actual sales, purchasing, and manufacturing.</li><li>opentaps 1.0.3 was released as an upgrade for users of opentaps 1.0.x</li></ul><br /><span style="font-weight: bold;">Upcoming Release Plans</span><br /><br />The next major release of opentaps will be version 1.4, which we are currently planning for Summer 2009. Between now and then, we will be using the new GWT tools to improve the user interface, especially order and invoice entry screens. We will also be making some more fundamental improvements to the opentaps technical infrastructure.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-53292197130888005692008-10-23T17:28:00.000-07:002008-10-23T17:32:59.344-07:00opentaps Quarterly UpdateDuring the last few months, we've continue to improve the technical foundation of <a href="http://www.opentaps.org/">opentaps</a> in two important directions. In the backend, we've migrated key portions of our customer, order, inventory, and general ledger code to the new domain driven architecture. In the process, we've been able to make the underlying code more flexible and easier to maintain and improve its performance. (See this <a href="http://opensourcestrategies.blogspot.com/2008/09/cleaner-and-faster-code.html">example</a>.)<br /><br />In the front end, we have started to integrate the <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> into opentaps to build more friendly user interfaces. This toolkit will allow us to turn our web forms into interactive widgets that look and feel like a more responsive desktop application. For example, take a look at this <a href="http://opensourcestrategies.com/images/opentaps_gwt_demo.htm">Flash demo</a>, and you will see a widget which acts as its own application. It gets data from opentaps, checks user input, and connects to the server without affecting the rest of your screen. The lists of results are also more dynamic: you can sort them, show or hide fields, and rearrange the layout. The interface is also a lot faster and smoother.<br /><br />Some other recent enhancements include:<br /><ul><li> Ability for migrating data from NetSuite</li><li> Support for tracking inventory at standard costs</li><li> Better support for orders with multiple shipping destinations</li><li> Additional reports and enhanced user interfaces in opentaps analytics</li><li> Upgrade of opentaps analytics to Pentaho 1.7 </li><li> opentaps 1.0.2 released.</li></ul><br /><span style="font-weight: bold;">Looking ahead</span><br /><br />In the next few months, our key initiatives will be integrating the Google Web Toolkit more smoothly into opentaps to make building user-friendly web applications as easy as possible for you. Separately, we will also be looking to improve on the business execution, or services, layer of opentaps. Our goal is to provide you with better support for job scheduling, workflow management, and remote Web services.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-72981089003051402582008-09-26T17:28:00.001-07:002008-09-26T17:45:49.289-07:00Cleaner and Faster CodeCounting inventory should be pretty straightforward, but it doesn't have to be. In early versions of opentaps, it was handled by this block of minilang (an XML scripting language from the ofbiz framework) from the ofbiz product application:<br /><br /><pre><br /> <br /> <set from-field="parameters.productId" field="lookupFieldMap.productId"/><br /> <br /><br /> <if-compare field-name="parameters.locationSeqId" operator="equals" value="nullField"><br /> <set from-field="nullField" field="lookupFieldMap.locationSeqId"/><br /> </if-compare><br /><br /> <if-compare field-name="parameters.useCache" operator="equals" value="true" type="Boolean"><br /> <find-by-and entity-name="InventoryItem" map-name="lookupFieldMap" list-name="inventoryItems" use-iterator="true" use-cache="true"/><br /> <else><br /> <find-by-and entity-name="InventoryItem" map-name="lookupFieldMap" list-name="inventoryItems" use-iterator="true" use-cache="false"/><br /> </else><br /> </if-compare><br /> <br /> <set field="parameters.availableToPromiseTotal" value="0" type="Double"/><br /> <set field="parameters.quantityOnHandTotal" value="0" type="Double"/><br /> <iterate entry-name="inventoryItem" list-name="inventoryItems"><br /> <if-compare field-name="inventoryItem.inventoryItemTypeId" operator="equals" value="SERIALIZED_INV_ITEM"><br /> <if><br /> <condition><br /> <or><br /> <if-compare field-name="inventoryItem.statusId" value="INV_AVAILABLE" operator="equals"/><br /> <if-compare field-name="inventoryItem.statusId" value="INV_PROMISED" operator="equals"/><br /> <if-compare field-name="inventoryItem.statusId" value="INV_BEING_TRANSFERED" operator="equals"/><br /> </or><br /> </condition><br /> <then><br /> <calculate field-name="parameters.quantityOnHandTotal" type="Double"><br /> <calcop field-name="parameters.quantityOnHandTotal" operator="add"><number value="1.0"/></calcop><br /> </calculate><br /> </then><br /> </if><br /> <if-compare value="INV_AVAILABLE" operator="equals" field-name="inventoryItem.statusId"><br /> <calculate field-name="parameters.availableToPromiseTotal" type="Double"><br /> <calcop field-name="parameters.availableToPromiseTotal" operator="add"><number value="1.0"/></calcop><br /> </calculate><br /> </if-compare><br /> </if-compare><br /> <if-compare field-name="inventoryItem.inventoryItemTypeId" operator="equals" value="NON_SERIAL_INV_ITEM"><br /> <if-not-empty field-name="inventoryItem.quantityOnHandTotal"><br /> <calculate field-name="parameters.quantityOnHandTotal" type="Double"><br /> <calcop operator="get" field-name="parameters.quantityOnHandTotal"/><br /> <calcop operator="get" field-name="inventoryItem.quantityOnHandTotal"/><br /> </calculate><br /> </if-not-empty><br /> <if-not-empty field-name="inventoryItem.availableToPromiseTotal"><br /> <calculate field-name="parameters.availableToPromiseTotal" type="Double"><br /> <calcop operator="get" field-name="parameters.availableToPromiseTotal"/><br /> <calcop operator="get" field-name="inventoryItem.availableToPromiseTotal"/><br /> </calculate><br /> </if-not-empty><br /> </if-compare><br /> </iterate><br /><br /> <field-to-result field-name="availableToPromiseTotal" map-name="parameters"/><br /> <field-to-result field-name="quantityOnHandTotal" map-name="parameters"/><<br /></pre><br /><br />If you can't figure out what this does, you're not the only one. Read on. (I told you counting inventory should be pretty straightforward, remember?)<br /><br />As part of our restructuring toward a domain driven framework, we decided to clean it up. First, the task of retrieving the list of eligible inventory items was pushed to the InventoryRepository:<br /><pre><br /><br /> public List<InventoryItem> getInventoryItemsForProductId(String productId) throws RepositoryException {<br /> try {<br /> List<GenericValue> inventoryItems = getDelegator().findByAnd("InventoryItem", UtilMisc.toMap("productId", productId));<br /> return (List<InventoryItem>) Repository.loadFromGeneric(InventoryItem.class, inventoryItems, this);<br /> } catch (GenericEntityException ex) {<br /> throw new RepositoryException(ex);<br /> }<br /> }<br /></pre><br /><br />Then, we felt that whether an item was serialized or not, and calculating the net inventory quantities of that item were rightfully properties of the inventory item itself, so we made them part of the InventoryItem class:<br /><pre><br /> public Boolean isSerialized() {<br /> return "SERIALIZED_INV_ITEM".equals(this.getInventoryItemTypeId());<br /> }<br /><br /> public Boolean isOnHand() {<br /> String statusId = this.getStatusId();<br /> return "INV_AVAILABLE".equals(statusId) || "INV_PROMISED".equals(statusId) || "INV_BEING_TRANSFERED".equals(statusId);<br /> }<br /><br /> public Boolean isAvailableToPromise() {<br /> return "INV_AVAILABLE".equals(this.getStatusId());<br /> }<br /><br /> public BigDecimal getNetQOH() {<br /> if (isSerialized()) {<br /> if (isOnHand()) {<br /> return BigDecimal.ONE;<br /> }<br /> } else {<br /> BigDecimal qty = getQuantityOnHandTotal();<br /> if (qty != null) {<br /> return qty;<br /> }<br /> }<br /> return BigDecimal.ZERO;<br /> }<br /><br /> public BigDecimal getNetATP() {<br /> if (isSerialized()) {<br /> if (isAvailableToPromise()) {<br /> return BigDecimal.ONE;<br /> }<br /> } else {<br /> BigDecimal qty = getAvailableToPromiseTotal();<br /> if (qty != null) {<br /> return qty;<br /> }<br /> }<br /> return BigDecimal.ZERO;<br /> }<br /></pre><br /><br />As a result, counting inventory was as simple as this:<br /><pre><br /> public void getProductInventoryAvailable() throws ServiceException {<br /> try {<br /> InventoryDomainInterface inventoryDomain = getDomainsDirectory().getInventoryDomain();<br /> InventoryRepositoryInterface inventoryRepository = inventoryDomain.getInventoryRepository();<br /> <br /> List<InventoryItem> items = inventoryRepository.getInventoryItemsForProductId(productId);<br /> <br /> availableToPromiseTotal = BigDecimal.ZERO;<br /> quantityOnHandTotal = BigDecimal.ZERO;<br /><br /> for (InventoryItem item : items) {<br /> availableToPromiseTotal = availableToPromiseTotal.add(item.getNetATP());<br /> quantityOnHandTotal = quantityOnHandTotal.add(item.getNetQOH());<br /> }<br /><br /> } catch (GeneralException ex) {<br /> throw new ServiceException(ex) ;<br /> }<br /> }<br /></pre><br /><br />It really is as simple as the code reads -- get a list of the inventory items and out of their quantities. (Go back to the top and read the minilang XML again, and you'll see that's what it does as well.)<br /><br />But it gets better: by switching from minilang to object-oriented Java, we got not only cleaner code, but a performance improvement of about 25% as well.</field-to-result></field-to-result></calculate></if-not-empty></if-compare></if-compare></or></condition></if></if-compare></iterate></set></set></find-by-and></if-compare></if-compare></set>Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-72910664504488224022008-08-18T16:11:00.000-07:002008-08-18T16:12:57.239-07:00first pass at a domain driven architectureWe've completed the first pass of the new domain driven architecture, so I wanted to give you an update about how it works and tell you about some of the interesting things we found out along the way.<br /><br /><span style="font-weight: bold;">How It Works</span><br /><br />The basic idea of the domain driven architecture is to separate your application's business logic from the underlying nuts and bolts, so that you can use several different applications interchangeably or migrate from one platform to another while preserving the essential core of your application. Another related goal is for you to be able to write business logic code in business terms, so instead of working with tables in a database or their equivalents, you can work with business concepts such as customers, orders, and invoices. Later, when someone else comes in to read your code, it will be easier for them to understand what you've done and help maintain it going forward.<br /><br />To do this, we have implemented a set of entity class objects representing the data model of opentaps. Most of these classes are automatically generated from the original entitymodel XML's, and you can extend or reuse them to implement more complex business logic. The actual interactions with external resources such as databases or legacy services are defined as Java interfaces, and a central domains directory defines where they are implemented. So, you can define an OrderRepositoryInterface of the methods for obtaining order related information, and your Order domain can interact with this interface. The actual implementation of it is in the OrderRepository, and at run time opentaps will use Spring to look in the domains-directory.xml file to find the order domain that you are actually using and get the order repository from it. If later you decide to switch from the opentaps order management system to another order management system, you can just re-implement all the Order domain interfaces, and the core order processing logic will continue to function.<br /><br /><span style="font-weight: bold;">What We Learned</span><br /><br />A couple of the things that we realized as we work on defining the domain driven architecture:<br /><br />We decided it was necessary to implement a true object layer for the opentaps data model. I originally thought that this was unnecessary, and we could just extend the old ofbiz GenericValue into our domain objects as needed. This turned out not to work, though, because we'd be stuck with chunky GenericValue objects instead of lightweight Java objects. More importantly, it would have introduced logical inconsistencies. For example, imagine if you implemented a method called getTotal(), and later somebody introduced a field called "total" to an entity. If you were extending GenericValues to Java objects, get("total") and getTotal() would give you different results. <br /><br />My original plan also called for an Infrastructure class which provided the "plumbing" for each platform. Thus, for the ofbiz-based applications there would be the delegator and dispatcher, and for a hibernate-based application there will be a session factory, etc. etc. This actually made the code very messy, because we could not define a common Infrastructure interface which could be used across domains. Each domain with have to use an Infrastructure which is specific to its framework. After further thought, though, I realized that what we really needed was a common Infrastructure that was global to all the frameworks used in opentaps. This did not compromise the reusability of any particular domain implementation, and has a nice benefit of being able to transfer resources from one platform to another. <br /><br /><span style="font-weight: bold;">The Next Step</span><br /><br />Now that we have the structure in place, we will be reimplementing some of the existing features with the new domain driven architecture and in the process refine it further. The initial emphasis will be on parts of the application that could really use an object-oriented redesign, either to improve code manageability, like the Party and contact information features, which could benefit from inheritance, or performance, by rewriting some old minilang XML code in Java.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-26872721860620076172008-07-15T18:30:00.001-07:002008-07-16T10:46:52.958-07:00opentaps Quarterly Update<span style="font-weight: bold;">We've been busy!</span> Now that we're past version 1.0, we had a chance to make some fundamental improvements to opentaps for a long-term. We have begun to develop a new <a href="http://www.opentaps.org/docs/index.php/Domain_Driven_Architecture">domain driven architecture</a> for future versions of opentaps. This object-oriented architecture will make it easier for you to customize and extend opentaps or to combine it with other applications. It will also make it easier for us to develop opentaps and help it continue to grow.<br /><br /><a href="http://www.opentaps.org/docs/index.php/Opentaps_Analytics">opentaps Analytics</a> is also coming along nicely. You are now able to slice and dice customer, order, and return data by over a dozen different ways, including by country, by brand, by month of the year, and by category. You're also able to look at the lifetime value of your customers from all these different angles. We are completing development of an automated query generator for JasperReports which will allow us to create a lot of reports quickly and easily. (See the <a href="http://www.opentaps.org/docs/index.php/Opentaps_Analytics#Screenshots">screenshots</a>.)<br /><br />In addition, we've made the following improvements:<br /><ul><li>A maintenance release of opentaps 1.0.1</li><li>A new <a href="http://www.opentaps.org/docs/index.php/Using_the_Query_Tool">query tool</a> to make querying and reporting easier to develop</li><li>A <a href="http://www.opentaps.org/docs/index.php/POJO_Service_Engine">POJO (Plain Old Java Object) Service Engine</a> for mounting business logic written in standard Java objects (beans) in the service engine.</li><li>Support for order management and invoicing of services</li><li>Support for kerberos single sign-on</li><li>Improvements to data importing, order entry, manufacturing, and warehouse management</li><li>And last but not least, thanks for a community contributors, a translation of opentaps to Bulgarian and new documentation pages for opentaps in <a href="http://www.opentaps.org/esdocs/index.php/Portada">Spanish</a> and <a href="http://www.opentaps.org/cndocs">Chinese</a>.</li></ul><br /><span style="font-weight: bold;">Coming Soon</span><br /><br />These are some of the additional enhancements planned in the next few months:<br /><ul><li>Ability to <a href="http://www.opentaps.org/docs/index.php/Installing_opentaps_on_JBoss">deploy opentaps on JBoss</a></li><li>Support for LDAP authentication</li><li>Better Ajax look up interfaces</li><li>Improved marketing features, including customer segmentation and Recency, Frequency, Monetary (RFM) analysis</li></ul><span style="font-weight: bold;">A New opentaps</span><br /><br />Development of opentaps will continue towards <a href="http://www.opentaps.org/index.php?option=com_content&task=blogcategory&id=44&Itemid=86">version 1.4</a> using the current ofbiz-based framework in the next few months. The coding style will become more domain-driven, object-oriented as our domain driven architecture becomes more established. Later this year, we will begin developing a new framework for opentaps 2.0. This new framework will be fully compatible with existing and future applications built on ofbiz, but it will rest upon a stronger Java J2EE foundation and allow us to incorporate many other open source projects into opentaps. This will allow us to expand opentaps into whole new horizons much more easily than ever before. We can't wait!<br /><br /><span style="font-style: italic;">Finally, a special thanks to Simon Zhao, Juan Gimenez, Ivan Popov and the Tooleast team, and Skip Dever for their contributions to opentaps in the last few months. </span>Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-24002390400714484002008-07-02T09:15:00.000-07:002008-07-02T09:35:53.837-07:00The Value of Software ArchitectureEvery company, no matter how big or how small, already has software to manage their business. So if they are looking at <a href="http://www.opentaps.org/">opentaps Open Source ERP + CRM</a>, it's because their system has failed them. That system may still meet some needs well, but as a whole it can no longer support the users' long-term needs.<br /><br />Why this is happening? Usually for the following reasons:<br /><ol><li>The users have no access to the source code, so they have no way to make changes they need.</li><li>The system can't support new functionality. For example, it may have been built solely with direct marketers in mind and cannot be adapted for manufacturing or more complex B2B sales.</li><li>The source code is no longer maintainable because its original authors have moved on, and there's a lack of documentation and unit tests to help new developers work with it.</li><li>The system cannot support new technologies. It may have been written with a DOS-based rapid application development tool, which will never support the Internet.</li><li>The hardware which runs the system is no longer made or supported. For an extreme example of this, see this story about <a href="http://www.3000newswire.com/subscribers/Ecometry-05Jan.html">Ecometry and the HP3000</a>.<br /></li></ol><br /><span style="font-weight: bold;">What We Can Do (Better)</span><br /><br />These problems show how important software architecture become over a long period of time. The most important thing about well architected software is that it can withstand change. It should allow you to modify, extend, or even replace parts of the software while the rest of it keeps humming along. In this way, a good architecture could extend the lifespan of your software and allow it to adapt to new technologies, new people, or new requirements.<br /><br />For us, as developers of opentaps, it means that we need to produce a system that is not only feature rich and user friendly, but also a well architected. In this respect, there are somethings we already do well, and there are somethings that we need to do a lot better.<br /><br />I think we already do the following well:<br /><ol><li>Our source code is openly available to all of our users, and this is a huge advantage, because it allows them to modify opentaps to meet their needs. In theory, this should actually be all they need, but in practice that is not the case. Having access to the source code doesn't actually do you any good unless the source code is also easy to work with and can support changes easily.</li><li>We have a very robust data model, which can support the core business needs of most industries.</li><li>Because opentaps is a newer system, it is built with current industry standard technologies such as Java, SQL databases, and XML.<br /></li></ol><br />However, there are some things that we need to do a much better job of. Much of our code is still too static and closely tied to the underlying data structure and one particular framework. (See this <a href="http://www.opentaps.org/docs/index.php/Domain_Driven_Architecture#An_Example_Using_Domains">example</a>.) What we really need is to adopt a more object-oriented design, so that it's easier for other developers to understand and extend opentaps, and so that we can be up-to-date with the best open source technical frameworks available.<br /><br />Therefore, we have begun implementing a <a href="http://www.opentaps.org/docs/index.php/Domain_Driven_Architecture">Domain Driven Design</a> for opentaps, which is an object oriented design pattern that builds applications from business domains such as customers, orders, invoices, and shipments and separates the infrastructure tier of dealing with servers and databases from the business knowledge. We believe that this Domain Driven Design will give us -- and most importantly you -- the ability to extend opentaps, replace some parts of it with other systems, or upgrade opentaps to newer technical infrastructure, while preserving your investment in the rest of it.<br /><br /><span style="font-weight: bold;">The Plan for opentaps</span><br /><br />This Domain Driven Design will be an evolutionary change from the current architecture. We will be moving our business tier code to the new design over the next few months while continuing to piggyback off the existing ofbiz framework. While doing this, we will continue to advance the development of <a href="http://www.opentaps.org/index.php?option=com_content&task=blogcategory&id=44&Itemid=86">opentaps version 1.4</a>.<br /><br />At some point, we will begin creating a new framework for opentaps version 2.0. This will be fully compatible with the ofbiz framework, allowing you (and us) to incorporate current and future versions of ofbiz and all the opentaps and custom applications we have already built with it. The drivers of the new opentaps framework, however, will more likely be a yet to be decided combination of open-source projects such as Hibernate, Spring, guice, JBoss Seam, Struts, Wicket, etc. It will allow us to re-factor, at our leisure, legacy ofbiz-based code to this new framework and at the same time incorporate other Java open source projects into opentaps more easily.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-75724477559788646512008-06-10T09:36:00.000-07:002008-06-10T09:39:21.825-07:00First Look at opentaps AnalyticsLast week, I uploaded the first screenshots for <a href="http://www.opentaps.org/docs/index.php/Opentaps_Analytics_Screenshots">opentaps analytics</a> to the <a href="http://www.opentaps.org/docs">opentaps documentation wiki</a>. While this application is still in its early stages, I thought he screenshots should help you see what we've been working on.<br /><br />What you're looking at is an application that takes operational data from the <a href="http://www.opentaps.org">opentaps Open Source ERP + CRM</a> system and transforms them into an analytical data warehouse using the Kettle ETL tool. Then, from this data warehouse, we have built dashboards, maps, drill downs, and reports. <br /><br />The goal of <a href="http://www.opentaps.org/docs/index.php/Opentaps_Analytics">opentaps analytics</a> is to help you make better business decisions with your data by providing you with a standardized out of the box set of analytical tools and reports. At this point, we have the initial technical framework for doing this in place, thanks to MySQL, Pentaho, Mondrian, and JasperReports, and we will be extending it with more business analysis.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-45177222827243949732008-05-21T20:28:00.000-07:002008-05-22T14:59:55.508-07:00Evolution of Enterprise SoftwareA couple of months ago, I wrote about the <a href="http://opensourcestrategies.blogspot.com/2008/03/enterprise-software-hierarchy-of-needs.html">hierarchy of enterprise software needs</a>, and today I would like to share with you how I think those needs have changed.<br /><br />A long, long time (say ten years) ago, a company might decide that it needs to manage its sales effort more effectively. It might decide that a CRM system is what it needed, then buy servers, license a package, and then train, or at least try to train, its salespeople to use the system. They are told that they need to enter all their account and contact information into the system, log all their calls and meetings with clients, and fill out forms to record the sales opportunities. They will also have to make periodic forecasts with the system. <br /><br />Needless to say, some sales people might resist, but it's up to management to make sure that they use the system. Some of these measures might be draconian -- I once read about a company who would not pay sales commissions on orders which were not first created as opportunities in its CRM system! If the salespeople ultimately use the system, however, it could be very helpful, because with it management could see what's going on -- how many leads there are in the pipeline, what stage all the sales opportunities are, which customers have gone dormant, etc.<br /><br />Today, we're in a different world. Thanks to the digital explosion of the past decade, important data such as accounts and contacts, not to mention e-mails and appointments, could be spread out over Blackberries, cellular phones, Facebook, LinkedIn, Google calendars, Gmail, Hotmail, Yahoo Mail, and a thousand other places. While there's still a core organization whose data is maintained in accounting, order entry, and warehouse management systems, data vital to the success of the organization is also increasingly spreading out like a web into other systems and devices.<br /><br />This means that the enterprise software of the future could no longer meet an organization's needs by solely looking inward to the data that's available inside of the organization. Rather, it will need to fan out into this web of critical data, much like a search engine spider would, and connect with all the important online services and devices used by key employees. It must be able to bring all that information together with data from core systems like accounting, order entry, and warehouse management, to coordinate activities and provide analysis. <br /><br />This is the next evolution of enterprise software, and it's where we will be taking <a href="http://www.opentaps.org/">opentaps Open Source ERP + CRM</a>. We've got a good start already:<br /><ul><li>We can sync data with mobile devices and online service providers</li><li>We have a very robust, normalized, operational data model that could captured the true richness of business relationships and transactions.</li><li>Finally, we have some very strong open-source business intelligence tools bundled with opentaps that can make sense of it all.</li></ul>Our next step is to tie all those pieces together, so that our users could see not only what is tracked by traditional business systems but what is happening in the entire web around their organization, perform detailed analysis, and take actions based on that information.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-39394551610678968672008-05-09T16:59:00.000-07:002008-05-09T17:02:23.751-07:00Social Networking and EcommerceThere's an article about <a href="http://www.internetretailer.com/article.asp?id=26244">social networking and online retailers</a> in this month's <span style="font-style:italic;">Internet Retailer</span>.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-72167677057223008132008-05-02T09:00:00.000-07:002008-05-02T09:04:58.129-07:00Why CRM Fails Many Companies (and Can We Fix It?)A <a href="http://www.dmnews.com/Study-says-CMOs-are-failing-to-use-CRM-well/article/109182/">study</a> just released by the Chief Marketing Officer Council showed that a large percentage of marketers are unhappy with their CRM systems. Specifically:<br /><ul><li>45% believe CRM systems are not effective enough</li><li>85% do not think they can integrate disparate customer data sources well</li><li>94% do not believe they have an excellent knowledge of customer demographics or transaction histories</li></ul>As a result, even though nearly a third of the companies surveyed have customer churn rates of over 10%, two thirds have no system in place to go after these lost customers. In effect, most companies' marketing efforts resemble a "leaking bucket" -- a lot of effort is spent getting customers in, but not much is done to keep them. <br /><br />Part of the problem may be cultural. Perhaps we think of "growth" as adding new customers rather than serving existing ones better. A big part of the problem, though, is surely technological. It is harder to figure out how to generate additional revenues from our existing customers than to go after new ones. For example, there's not much involved in renting mailing lists, putting out more advertisements, or paying more for online clicks. But how many companies could really pull together all their transactional data from their retail stores, online stores, and other sales channels, and use that data to figure out what they should be doing? <br /><br />This is exactly the problem we will try to solve with <a href="http://www.opentaps.org/docs/index.php/Opentaps_Analytics">opentaps analytics</a>, where we're building a set of standard tools to help you better understand your customers. We have just gotten started with this effort and made some good progress, and I will make more posts as we go along.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-63091176034520212008-04-28T10:11:00.000-07:002008-04-28T10:13:27.247-07:00O'Reilly Web 2.0 ExpoI was at the O'Reilly Web 2.0 Expo in San Francisco last week, I thought about what I saw over the weekend. There seemed to be two Big Ideas at this conference:<br /><br />1. That applications will move into the cloud/grid/utility, with everybody from Sun, Amazon, and Google to traditional hosting ISPs offering new clout/grid/utility computing solutions. <br /><br />2. The big players are now moving away from software and software as a service to <span style="font-style: italic;">Platform as a Service</span>. Yahoo, Google, Salesforce.com, Amazon, etc. are all opening up their APIs to turn them into platforms where you can come in and build your own applications on top of them.<br /><br /><span style="font-weight: bold;">What I Think (In Case You Cared...)</span><br /><br />I don't think we'll ever move back to the days of dumb terminals and centralized applications run by service bureaus. Nevertheless, I was very excited by what I saw, because by making available both the hardware infrastructure and their platform APIs, the major vendors have just given us even more tools for building better applications.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-32874609878129134762008-04-11T12:22:00.000-07:002008-04-11T12:25:40.886-07:00Free Lessons - What I've Learned from Open SourceIt's been four years since I started working with open source software and started on the journey to create <a href="http://www.opentaps.org/">opentaps Open Source ERP + CRM</a>. Sometimes I look back and think about all the things that have happened, and what I've learned from the open source experience, which is a lot, but a few things stand out:<br /><br /><span style="font-weight: bold;">It's All About Great Software</span><br /><br />When you give away the code, there's nothing left to hide. People can -- and will -- judge every aspect of your software: stability, ease of use, code quality, even architecture. Because of this, open source software tends to stand much more on merits. This is why you often will see new open source projects leapfrog past projects with big-name backers or lots of hype.<br /><br /><span style="font-weight: bold;">There is Only One Community</span><br /><br />It took me three years to figure this one out: when you create open source software, you're not off on an island with a band of followers. You automatically join a <a href="http://opensourcestrategies.blogspot.com/2008/02/greater-community.html">greater community</a> that consists of all the other open source projects out there. The quality of your software would depend directly on the open source projects you incorporate into yours, and your success will depend on the success of the rest of the open source community.<br /><br /><span style="font-weight: bold;">Be Humble</span><br /><br />Somebody recently asked me what I would do differently if I could do it all over again. It took me a few seconds before I realized the answer was "Be more humble." If you open your mind up and look at the forum posts, other open source projects, or just about anything else and say "What can I learn from it?" rather than "Why is what I have better?" you can learn a lot from the open source community.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-15818141016298768192008-04-08T09:31:00.000-07:002008-04-08T09:38:40.637-07:00opentaps Quarterly Update<span style="font-weight: bold;">opentaps 1.0.0 Released</span><br /><br />Last week, we officially released <a href="http://sourceforge.net/forum/forum.php?forum_id=806071">opentaps Open Source ERP + CRM version 1.0.0</a>. This version marks a significant step forward for opentaps. Since the release of 0.9 nearly two years ago, opentaps has matured into a full-featured ERP and CRM suite with role-based applications designed for the sales force, customer service, warehouse, purchasing, and finance and accounting departments. We have greatly <a href="http://sourceforge.net/project/screenshots.php?group_id=145855">improved the usability of opentaps</a> since the earlier versions, created a <a href="http://www.opentaps.org/docs">free online documentation site</a> for it, and built a more solid foundation of automated tests that would allow us to deliver a higher quality product going forward.<br /><br /><span style="font-weight: bold;">A Unique Platform</span><br /><br />Most importantly, opentaps has grown into a unique and powerful platform that brings together ERP, CRM, business intelligence, and mobile connectivity. This combination of capabilities surpasses that of almost all other commercial or open source ERP software and allows opentaps to play a much more significant role for your organization: Our flexible data model could be used to capture snapshots of practically any business activity or transaction. The synchronization tools in opentaps could bring data from such diverse sources as mobile phones, Blackberries, Outlook, and web-based e-mail and calendars such as Gmail into opentaps. Finally, the analytical tools that help you tie it all together and turn all that data into knowledge.<br /><br />Together, this means that opentaps could do much more than automate back-office processes, keep accounting records, or take online orders. It could serve as the common data platform and analytical foundation of your entire organization. With opentaps, you could observe all types of activities -- sales calls, orders, shipments -- as they take place, understand their bottom-line impact, and then act upon that knowledge.<br /><br /><span style="font-weight: bold;">Just the Beginning</span><br /><br />The 1.0.0 release of opentaps was a significant milestone in our four-year journey to create free and openly available business applications, but it is also the beginning of a new journey to create a whole new kind of application. Much has happened since when we began: Ajax, Web 2.0, Gmail, social networks, service oriented architectures. Many new and exciting open source projects have also appeared on the scene.<br /><br />For us at opentaps, this means that we must change, sometimes in fundamental ways, to take advantage of these new resources. First and foremost, we want to make opentaps even easier to use. Under the hood, we will also be upgrading our framework to make it easier to deploy, more scalable and flexible, and more technically robust. Last but not least, we want to tap into the open-source business intelligence capabilities to help you make better business decisions. We have already started on this with the new <a href="http://www.opentaps.org/docs/index.php/Opentaps_Analytics">opentaps analytics</a> application, which is designed to help you sell more effectively by profiling your customers' behavior.<br /><br />This is an exciting time for us, and I hope you will join us for the next leg of our adventure.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-37038607407182077922008-03-21T12:41:00.000-07:002008-03-21T12:45:47.240-07:00Enterprise Software Hierarchy of Needs<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht-okNKsI29jcHdA01-SHAt9VBGQi9vl3eBr671xGr6tPBUslJpqx8KnzqneMu0_QKYzPDJTJsLTiqsa79nHh3Pw9Qt3h2-oKzBCKvW1a_8dH9qXKft7CK0wuBcdevVEzIFM5-/s1600-h/pyramid_of_enterprise_software_needs.png"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht-okNKsI29jcHdA01-SHAt9VBGQi9vl3eBr671xGr6tPBUslJpqx8KnzqneMu0_QKYzPDJTJsLTiqsa79nHh3Pw9Qt3h2-oKzBCKvW1a_8dH9qXKft7CK0wuBcdevVEzIFM5-/s320/pyramid_of_enterprise_software_needs.png" alt="" id="BLOGGER_PHOTO_ID_5180283050601549122" border="0" /></a><br />There is an interesting theory in psychology called <a href="http://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs">the hierarchy of needs</a>, which said that once people's basic needs such as food and sleep are fulfilled, they would turn to higher needs for love, self-esteem, and ultimately self-actualization.<br /><br />I am starting to see a similar hierarchy of needs for enterprise software, both from general trends in the industry and from our experiences with the <a href="http://www.opentaps.org/">opentaps Open Source ERP + CRM</a> system: As organizations satisfy their most basic software needs, they tend to go up the ladder and turn to "higher" and more sophisticated needs. This "enterprise software hierarchy of needs" seems to follow this pattern:<br /><br />1. <span style="font-weight: bold;">Data</span>: At the most basic level, every organization needs to standardize its operational data and make sure that everybody is using a common set of data. If this sounds simple, it isn't. In most organizations, duplicate sets of data are held in different siloed systems. For example, the accounting, shipping, and sales departments may be using separate sets of customer records. This could cause a lot of mistakes, like shipments or invoices that get sent to the wrong address. It also makes it impossible to answer basic questions like "How profitable is this customer to us?" Therefore, the first step in implementing <span style="font-style: italic;">any </span>enterprise software is to create a common data platform with a centralized system, such as an ERP or CRM system.<br /><br />2. <span style="font-weight: bold;">Automation</span>: Once you have a common set of operational data, it becomes possible to automate a lot of its processes across departments. For example, in the <a href="http://www.opentaps.org/">opentaps Open Source ERP + CRM</a> system, you can enter an order for a customer, then process the order and invoice the customer without having to re-enter any data. Each part of opentaps would simply look up the customer, order, and pricing data it needs from the centralized database. As natural as this sounds, it amazingly is something which most companies cannot do. Instead, data is manually re-entered as an order moves from one stage of fulfillment to another.<br /><br />Automation would greatly reduce manual effort and error, and anyone could see how it could make the organization more efficient. The danger, however, is that you start to automate all sorts of existing processes, even those that are losing money, while failing to focus on better opportunities. But the only way to identify the right business opportunities is through next step on our hierarchy of needs: analysis.<br /><br />3. <span style="font-weight: bold;">Analysis</span>: Perhaps the greatest value of a common data platform is actually the ability to analyze the organization as a whole, rather than just blindly automating processes. This would allow you to answer some important questions, like: Which products should we sell? Or: Which customers are actually profitable?<br /><br />There's an interesting chicken and egg problem here: you can only answer questions by having data, but you won't know what data you need until you know what questions to ask. Thus, while building a common data platform would help an organization analyzes performance on an ongoing basis, it may actually be better to start with a list of key questions and attempt to answer them first with legacy data and estimates. This way, we could get an idea of where the organization should be headed before implementing new software.<br /><br />4. <span style="font-weight: bold;">Intelligence</span>: This truly is the holy grail for enterprise software: using all that data, automation, and analysis together to improve bottom-line results. It often relies on data to support analysis that identify the opportunities, automating processes to capture those opportunities, then collecting additional data along the way. It could be something small, like the way Amazon.com uses shopper behavior to figure out which products to show to new visitors. Or it could be something sweeping and comprehensive, like using detailed sales and profitability data to identify new lines of business. Although very few companies have achieved this level of sophistication, it is exactly what every company must do to become the leader in its field. More than streamlining some back-office processes, this should be a ultimate goal for implementing enterprise software.<br /><br />In my future blogs, I will write about how the way enterprise software could fulfill these needs is fundamentally changing. I will also give some examples of how to analyze operational data to identify opportunities.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-51789649918052415882008-03-11T08:57:00.000-07:002008-03-11T09:12:03.647-07:00WikiPedia's Financial Difficulties and The Limits of VolunteerismYesterday's Los Angeles Times had an article about <a href="http://www.latimes.com/business/la-fi-wikipedia10mar10,0,3216071,full.story">WikiMedia's financial difficulties</a>. It's interesting to see that a professional core team is required to sustain even this uber-example of community volunteerism. This professional core team, in turn, needs to be paid, thus requiring a business model to sustain it.<br /><br />So are we looking at a limit to what community volunteerism could achieve? Does this mean any large-scale effort would ultimately require a commercial aspect to stay relevant, as many open source projects have come to believe as well?<br /><br />Perhaps in the end, none of us could ever escape the need to balance our social obligations with economic realities. Not that that is a bad thing: the whole point of a market-based economy is to allocate scarce resources, so that activities don't grow beyond what could be economically justified. This may mean hard choices for individuals as we decide on whether to pursue our passions or get a job, or (hopefully) find a job that allows us to do what we love. For the greater community as a whole though, this system does ensure greater efficiency and a more rational long-term allocation of time and resources.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-12911704618596201132008-02-25T16:58:00.000-08:002008-02-29T19:37:25.952-08:00Using Gmail as Hosted E-mailMy e-mail was broken this morning: Thunderbird is choking with the number of e-mails I get. So, as an experiment, I tried to set up Gmail as my e-mail client. This turned out to be surprisingly easy:<br />* I used the the <a href="http://mail.google.com/support/bin/answer.py?answer=21289">Mail Fetcher</a> to configure Gmail to pull my e-mails via POP3.<br />* In Gmail's Settings > Accounts screen, I added my e-mail address as a "send e-mail as" e-mail.<br /><br />With just these two settings, I am now receiving and sending e-mails as sichen AT opensourcestrategies DOT com with Gmail through its web interface. This is much better than having a desktop e-mail client for me, though I found the Gmail user interface to be a bit strange.<br /><br /><span style="font-weight: bold;">How Gmail Works</span><br /><br />All the e-mail client I've ever used, including Eudora, Outlook Express, Thunderbird, Hotmail, and Yahoo Mail, have the concept of a "folder." Your e-mails arrive in the inbox folder. After you send an e-mail, it gets stored in the sent folder. You can also create new folders, such as client X., and move e-mails into it to help organize your inbox.<br /><br />Gmail works differently: e-mails come into an inbox, and then you can create labels for them. An e-mail could have several labels associated with it, allowing you to classify in multiple ways (client X., technical, support, etc.) After you are done reading an e-mail, you need to click on the "archive" button, so that it gets moved out of your inbox. Then you can still see it either by clicking on the "all mail" link, or by clicking on one of the labels to see the e-mails which have been tagged by this label.<br /><br />In the end, I think this is better because I would be able to classify my e-mails across multiple criteria, rather than just one folder. However, it was a bit confusing when I first started using it, because the concept of an e-mail folder was so deeply ingrained in the mind of this user. I think it would be better for most users to introduce a folder concept, or at least to make the labels concept look and work more like a traditional e-mail folder.<br /><br />Another interesting thing about Gmail is that it automatically groups my e-mails into threads, including both the incoming and the outgoing e-mails.<br /><br /><span style="font-weight: bold;">The End of Software?</span><br /><br />A couple months ago I had considered implementing an open source Exchange solution. Now, after about 15 minutes of tinkering with Gmail, I've made that unnecessary, at least for myself. It does make me wonder, yet again, whether Gmail and Google calendar have just rendered a whole class of software, commercial or open source, irrelevant. You can bet I'll be thinking about that every time I get an email.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-40406411050454352972008-02-11T12:32:00.000-08:002008-02-11T12:33:27.841-08:00The Greater CommunityFor the first couple of years after we created the <a href="http://www.opentaps.org">opentaps Open Source ERP + CRM</a>, we thought about our community as many other open source projects do. We defined our "community" as the sum of all the users, developers, and contributors of opentaps, and we asked ourselves questions like "What can we develop for our community?" and "How do we increase the size of our community?"<br /><br />Only much later did I realize that this is completely wrong. It is wrong because an open source project is not an island, but rather part of a greater open source community that really comprises of all the open source projects out there. In that sense, there is no such thing as "our" community or "your" community. Instead we are all part of one open source community that is linked together and ultimately succeeds or fails together.<br /><br />What has created this greater open source community is simply the way that open source projects utilize each other's work to create new projects. For example, opentaps directly incorporates several major open source projects, including Apache Tomcat, Derby, Geronimo, Ofbiz, as well as non-Apache projects such as Funambol, JasperReports, Pentaho, and FCKEditor. Furthermore, most users of opentaps use it with an open source database such as MySQL or PostgreSQL, and most deployments of opentaps are on Linux. Therefore, opentaps ultimately relies on all of those projects and their communities. Similarly, when you build an application with opentaps, you are not relying just on our community, but on all these other communities as well.<br /><br />Once I realized this, I began to think of opentaps in a different way. Instead of thinking about what we can build for our community, I began to think more and more about what other communities could help us make opentaps a better product. Ultimately, our goal with opentaps is not to do everything under the sun, but rather to find innovative solutions for business problems. As such, the central focus of opentaps has shifted over the past year towards creating a platform that brings together the best open source projects for addressing business problems. You have already seen us incorporate new open source projects in the last six months to support business intelligence and reporting and mobility integration. This is just the beginning.<br /><br />Equally importantly, I started to think about opentaps not just as a product for users of opentaps, but rather as a product that could benefit the greater open source community as well. The various opentaps applications are ultimately not just a set of screens and tables and reports, but rather a set of best practices for handling business needs. Those best practices should be available to the greater community, and one of our key goals for this year is indeed to make opentaps useful for a much larger audience of users by creating extensions or bridges to other open source projects. In other words, when you choose to use something other than opentaps, you are not an enemy. We still want to help you, and we hope we will soon.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.comtag:blogger.com,1999:blog-11806753.post-1465249539516980792008-01-30T14:41:00.001-08:002008-01-30T16:21:25.615-08:00opentaps Quarterly UpdateIn the past few months, we have completed some important core development initiatives, while at the same time adding additional features to <a href="http://www.opentaps.org/">opentaps Open Source ERP + CRM</a>. The significant developments include the following:<br /><ol><li>Building out a set of cross-application unit tests to verify the correctness of key areas such as order management, inventory, purchasing, and accounting.</li><li>Improved e-mail processing and management features. Customer service e-mails can now be associated with orders and assigned to different reps for processing.</li><li>Improved the use of form letters for generating outgoing e-mails and communications.</li><li>Support for managing resellers and partners, including contact information, agreements and contracts, and invoicing partners based on their sales activity.</li><li>Completed most of the documentation site for opentaps screens.</li><li>Completed the Amazon.com integration. This feature is now in production and allows the uploading of products and inventory information to Amazon, the downloading of orders, and the acknowledgment of shipments.</li><li>Completed contact, calendar, and task integration using the <a href="http://www.funambol.com/">Funambol data synchronization server</a>. This will enable our users to integrate opentaps with Microsoft Outlook, Mozilla Thunderbird, mobile phones, as well as Google calendar and Gmail.</li><li>Improved support for UPC codes and other product ID schemes such as ISBN throughout the application for use with barcode scanners.</li></ol>Perhaps the most significant development of the past few months has been the new automated testing component in opentaps. Some of these tests are quite elaborate, involving processes in several areas of a hypothetical organization and tracking resulting changes to customers, inventory, and financial data. While the tests do not in themselves add any new features, they help us deliver on one of our original goals for opentaps: To create a stable, production ready releases which can be supported and upgraded. In addition, they give us a foundation upon which we could refine and upgrade our code base over time. Finally, the exercise of creating automated tests for applications has helped us become more methodical and rigorous in our development process.<br /><br />We are now fairly close to the completion of development for the 1.0 release of <a href="http://www.opentaps.org/">opentaps open source ERP + CRM</a>, with the only things remaining being some final unit tests and user interface polishing.<br /><br /><span style="font-weight: bold;">Looking Ahead</span><br /><br />By bringing together ERP and CRM with mobility integration and business intelligence, opentaps is now a unique and powerful platform for solving business problems. The next step for us is to make opentaps more useful to a greater number of businesses and their users, so that they could unlock the potential of opentaps.<br /><br />We believe the key for doing this is to make opentaps fundamentally easier: easier to use, easier to deploy, and easier to customize and extend. Just as importantly, we need to make it easier for users to analyze the data collected by opentaps to make better business decisions.<br /><br />To achieve these goals, we will be making some <a href="http://opensourcestrategies.blogspot.com/2007/12/opentaps-framework-enhancements.html">fundamental enhancements to the technical foundation of opentaps</a>, such as integrating opentaps with open-source content management systems to make deploying powerful, yet attractive e-commerce applications with opentaps easier, and making better use of business intelligence tools throughout the opentaps applications.<br /><br />Thank you again for being part of our community, and we hope that opentaps will continue to help your business become more successful.Si Chenhttp://www.blogger.com/profile/06331156365213416425noreply@blogger.com