<?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-3935080734743020496</id><updated>2011-04-21T16:53:27.372-07:00</updated><title type='text'>Galih's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://galihaprilian.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3935080734743020496/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://galihaprilian.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Galih</name><uri>http://www.blogger.com/profile/17396922356195913958</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dLJYpIUHmeo/R32NcIQidCI/AAAAAAAAAB8/4M73z6Dvi6U/S220/Picture0008.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3935080734743020496.post-2879389403623545908</id><published>2007-06-24T22:35:00.001-07:00</published><updated>2007-06-24T22:35:07.524-07:00</updated><title type='text'>The Practices of Extreme Programming</title><content type='html'>&lt;ul&gt; &lt;li&gt;&lt;strong&gt;Whole Team&lt;/strong&gt;. We want customers, managers, and developers to work closely with one another so that they are all aware of one another's problems and are collaborating to solve those problems. Who is the customer? The customer of an XP team is the person or group that defines and prioritizes features. They can be working in the same company as the developers or a user representative commissioned by the body of users.  &lt;li&gt;&lt;strong&gt;User Stories.&lt;/strong&gt; A user story&amp;nbsp;is mnemonic token&amp;nbsp;of ongoing conversation about a requirement. A user story is planning tool that the customer uses to schedule the implementation of a requirement, based on its priority and estimated cost.  &lt;li&gt;&lt;strong&gt;Short Cycles.&lt;/strong&gt; An XP project delivers working software every two weeks. Each of these two-week iterations produces working software that addresses some of needs of the stakeholders. At the end of each iteration, the system is demonstrated to the stakeholders in order to get their feedback.  &lt;li&gt;&lt;strong&gt;Acceptance Test&lt;/strong&gt;. Acceptance test&amp;nbsp;are written by business analysts, quality assurance specialists, and testers during the iteration. It is from these tests that the programmers learn the true detailed operation of the stories they are implementing. These tests become the true requirements document of the project. Every detail about every feature is described in the acceptance tests, and those tests are the final authority as to whether those feature are done and correct.  &lt;li&gt;&lt;strong&gt;Pair Programming&lt;/strong&gt;. Code is written by pairs of programmers working together at the same workstation. Pair programming dramatically increases the spread of knowledge throughout the team. Although specialities remain, and tasks that require certain specialties will usually belong to&amp;nbsp; the appropriate specialists, those specialists will pair with nearly everyone else on the team. Pairing does not reduce the efficiency of the programming staff but does significantly reduce the defect rate.  &lt;li&gt;&lt;strong&gt;Test-Driven Development(TDD)&lt;/strong&gt;. When you write code in order to make test cases pass, that code is by definition testable. What's more, there is a string motivation to decouple modules so that they can be tested independently. Thus, the design of code that is written in this fashion tends to be much less coupled.  &lt;li&gt;&lt;strong&gt;Collective Ownership.&lt;/strong&gt; A pair has the right to check any module and improve it. No programmers are individually responsible for any one particular module or technology.  &lt;li&gt;&lt;strong&gt;Continuous Integration.&lt;/strong&gt; The programmers check their code in and integrate several times per day. The rule is simple. The first one to check in wins; everybody else merges.  &lt;li&gt;&lt;strong&gt;Sustainable Pace.&lt;/strong&gt; A software project&amp;nbsp;is not a sprint; it is a marathon. It must intentionally run at steady, moderate pace. The XP rule is that a team is not allowed to work overtime. The only exception to that rule is that in the last week in a release, a team that is within striking distance of its release goal can sprint to the finish and work overtime.  &lt;li&gt;&lt;strong&gt;Open Workspace.&lt;/strong&gt; The team works together in an open room. Tables are set up with workstations on them. Each table has two or three such workstations. Two chairs are in front of each workstation. The walls are covered with status charts, task breakdowns, Unified Modeling Language (UML) diagrams, and so on.  &lt;li&gt;&lt;strong&gt;The Planning Game.&lt;/strong&gt; The essence of the planning game is the division of responsibility between business and development. The business people(customers) decide how important a feature is, and the developers decide how much that feature will cost&amp;nbsp;to&amp;nbsp;implement.  &lt;li&gt;&lt;strong&gt;Simple Design.&lt;/strong&gt; An XP team makes its designs as simple and expressive as they can be.&amp;nbsp;3 XP mantras guide the developer: &lt;em&gt;Consider the simplest thing that could possibly work, You aren't going to need it, Once and only once.&lt;/em&gt; XPers don't tolerate duplication of code. Wherever they find it, the eliminate it.  &lt;li&gt;&lt;strong&gt;Refactoring.&lt;/strong&gt; Refactoring is the practice of making a series of tiny transformation that improve the structure of the system without affecting its behavior. Each transformation is trivial, hardly worth doing. But together, they combine into significant transformation of the design and architecture of the system.  &lt;li&gt;&lt;strong&gt;Metaphor.&lt;/strong&gt; Metaphor is the only XP practice that is not concrete and direct. It's&amp;nbsp;the big picture that ties the whole system together. It's the vision of the system that makes the location and shape of all the individual modules obvious. If a module's shape inconsistent with the metaphor, you know that is the module that is wrong.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Extreme Programming is a set of simple and concrete practices that combine into an agile development process. XP is a good general-purpose method for developing software. Many project teams will be able to adopt it as is. Many others will be able to adapt it by adding or modifying practices.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3935080734743020496-2879389403623545908?l=galihaprilian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://galihaprilian.blogspot.com/feeds/2879389403623545908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3935080734743020496&amp;postID=2879389403623545908' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3935080734743020496/posts/default/2879389403623545908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3935080734743020496/posts/default/2879389403623545908'/><link rel='alternate' type='text/html' href='http://galihaprilian.blogspot.com/2007/06/practices-of-extreme-programming.html' title='The Practices of Extreme Programming'/><author><name>Galih</name><uri>http://www.blogger.com/profile/17396922356195913958</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dLJYpIUHmeo/R32NcIQidCI/AAAAAAAAAB8/4M73z6Dvi6U/S220/Picture0008.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3935080734743020496.post-1156410787933329187</id><published>2007-06-24T22:34:00.003-07:00</published><updated>2007-06-24T22:34:40.990-07:00</updated><title type='text'>Agile processes</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;SCRUM&lt;/strong&gt;. &lt;a href="http://www.controlchaos.com"&gt;www.controlchaos.com&lt;/a&gt;  &lt;li&gt;&lt;strong&gt;Crystal&lt;/strong&gt;. &lt;a href="http://www.crystalmethodologies.org"&gt;www.crystalmethodologies.org&lt;/a&gt;  &lt;li&gt;&lt;strong&gt;feature-driven development&lt;/strong&gt;. Peter Coad, Eric Lefebvre, and Jeff De Luca, &lt;em&gt;Java Modelling in Color with UML: Enterprise Components and Process,&lt;/em&gt; Prentice Hall, 1999.  &lt;li&gt;&lt;strong&gt;Adaptive Software Development.&lt;/strong&gt; James A. Highsmith, &lt;em&gt;Adaptive Software Development: A Collaborative Approach to Managing Complex Systems&lt;/em&gt;, Dorset House, 2000.  &lt;li&gt;&lt;strong&gt;Extreme Programming&lt;/strong&gt;.  &lt;ul&gt; &lt;li&gt;Kent Beck, &lt;em&gt;Extreme Programming Explained: Embrace Change, &lt;/em&gt;Addison-Wesley, 1999.  &lt;li&gt;James Newkirk and Robert C. Martin, &lt;em&gt;Extreme Programming in Practice&lt;/em&gt;, Addison-Wesley, 2001.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3935080734743020496-1156410787933329187?l=galihaprilian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://galihaprilian.blogspot.com/feeds/1156410787933329187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3935080734743020496&amp;postID=1156410787933329187' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3935080734743020496/posts/default/1156410787933329187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3935080734743020496/posts/default/1156410787933329187'/><link rel='alternate' type='text/html' href='http://galihaprilian.blogspot.com/2007/06/agile-processes.html' title='Agile processes'/><author><name>Galih</name><uri>http://www.blogger.com/profile/17396922356195913958</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dLJYpIUHmeo/R32NcIQidCI/AAAAAAAAAB8/4M73z6Dvi6U/S220/Picture0008.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3935080734743020496.post-467489684025150376</id><published>2007-06-24T22:34:00.001-07:00</published><updated>2007-06-24T22:34:14.445-07:00</updated><title type='text'>Manifesto for Agile Software Development</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="center"&gt;&lt;em&gt;We are uncovering better ways of developing&lt;/em&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;em&gt;software by doing it and helping others do it.&lt;/em&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;em&gt;Through this work&amp;nbsp; we have come to value:&lt;/em&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;strong&gt;Individuals and interactions &lt;/strong&gt;over processes and tools&lt;/p&gt; &lt;p align="center"&gt;&lt;strong&gt;Working software&lt;/strong&gt; over comprehensive documentation&lt;/p&gt; &lt;p align="center"&gt;&lt;strong&gt;Customer collaboration &lt;/strong&gt;over contract negotiation&lt;/p&gt; &lt;p align="center"&gt;&lt;strong&gt;Responding to change&lt;/strong&gt; over following the plan&lt;/p&gt; &lt;p align="center"&gt;&lt;em&gt;That is, while there is value in the items on&lt;/em&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;em&gt;the right, we value the items on the left more.&lt;/em&gt;&lt;/p&gt; &lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="left"&gt;Above manifesto made by &lt;em&gt;Agile Alliance&lt;/em&gt; in early 2001, and I found it only now. But that's the fact I've found in my projects, slipping schedules, growing budgets, and poor quality. The lack of effective practices leads to unpredictability, repeated error, and wasted effort.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3935080734743020496-467489684025150376?l=galihaprilian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://galihaprilian.blogspot.com/feeds/467489684025150376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3935080734743020496&amp;postID=467489684025150376' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3935080734743020496/posts/default/467489684025150376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3935080734743020496/posts/default/467489684025150376'/><link rel='alternate' type='text/html' href='http://galihaprilian.blogspot.com/2007/06/manifesto-for-agile-software.html' title='Manifesto for Agile Software Development'/><author><name>Galih</name><uri>http://www.blogger.com/profile/17396922356195913958</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dLJYpIUHmeo/R32NcIQidCI/AAAAAAAAAB8/4M73z6Dvi6U/S220/Picture0008.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3935080734743020496.post-2224710857451079525</id><published>2007-06-24T22:30:00.001-07:00</published><updated>2007-06-24T22:30:56.198-07:00</updated><title type='text'>Agile Principles</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Our highest priority is to satisfy the customer through early and continuous delivery of valueable software.  &lt;li&gt;Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.  &lt;li&gt;Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter time scale.  &lt;li&gt;Businesspeople and developers must work together daily throughout the project.  &lt;li&gt;Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.  &lt;li&gt;The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.  &lt;li&gt;Working software is the primary measure of progress.  &lt;li&gt;Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.  &lt;li&gt;Continuous attention to technical excellence and good design enhances agility.  &lt;li&gt;Simplicity the art of maximizing the amount of work not done is essential.  &lt;li&gt;The best architectures, requirements, and designs emerge from self-organizing teams.  &lt;li&gt;At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3935080734743020496-2224710857451079525?l=galihaprilian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://galihaprilian.blogspot.com/feeds/2224710857451079525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3935080734743020496&amp;postID=2224710857451079525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3935080734743020496/posts/default/2224710857451079525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3935080734743020496/posts/default/2224710857451079525'/><link rel='alternate' type='text/html' href='http://galihaprilian.blogspot.com/2007/06/agile-principles.html' title='Agile Principles'/><author><name>Galih</name><uri>http://www.blogger.com/profile/17396922356195913958</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dLJYpIUHmeo/R32NcIQidCI/AAAAAAAAAB8/4M73z6Dvi6U/S220/Picture0008.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3935080734743020496.post-5852005844465572526</id><published>2007-05-28T18:55:00.001-07:00</published><updated>2007-05-28T18:55:43.366-07:00</updated><title type='text'>OO in Python (1)</title><content type='html'>&lt;p&gt;We will discuss, about 3 concept in OO :&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Encapsulation  &lt;li&gt;Inheritence  &lt;li&gt;Polymorphism&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Encapsulation&amp;nbsp;in short term&amp;nbsp;information hiding. Python 2.1 hide attribute begin with '__', but it is not true information hiding, you can still get the attribute with following way, if we set attribute '__AttributeName', we can get the attribute by get '_ClassName__AttributeName', eg:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;class ClassA:&lt;/p&gt; &lt;p&gt;&amp;nbsp; def __init__(self):&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.__Name = 'ClassA class'&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;iTest = ClassA()&lt;/p&gt; &lt;p&gt;print iTest.__Name // raise exception, attribute not found&lt;/p&gt; &lt;p&gt;print iTest._ClassA__Name&amp;nbsp; // OK&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Python 2.1 does not support property, so you must define a function to Get and Set the attribute.&lt;/p&gt; &lt;p&gt;All attribute in class-instance (object) stored in dictionary : __dict__&lt;/p&gt; &lt;p&gt;If we want to have attributes that only can set inside class, but accessible outside class, you can use this trick.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;class ClassA:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __vdict = None&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;__vdict_name = locals().keys()[0]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def __init__(self):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.__dict__[self.__vdict_name] = {}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.__Name =&amp;nbsp;'Class A'&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def __getattr__ (self, name):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; propHandled = 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; attrName =&amp;nbsp;'_ClassA__' + name&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if self.__vdict.has_key(attrName):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return self.__vdict[attrName]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; propHandled = 0 &lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not propHandled:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return self.__dict__[name] &lt;p&gt;def __setattr__(self, name, value):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; headLength = len('_ClassA__')&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; headName = name[:headLength]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if headName == '_ClassA__':&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.__vdict[name] = value&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.__dict__[name] = value &lt;p&gt;iTest = ClassA() &lt;p&gt;print iTest.__Name // raise error, attribute not found &lt;p&gt;print iTest.Name // OK&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;As you can see, you define attribute Name in __init__ with '__Name', and information store in collection named '__vdict' (actually '_ClassA__vdict' in __dict__), and then you can access it by only call 'Name'. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3935080734743020496-5852005844465572526?l=galihaprilian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://galihaprilian.blogspot.com/feeds/5852005844465572526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3935080734743020496&amp;postID=5852005844465572526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3935080734743020496/posts/default/5852005844465572526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3935080734743020496/posts/default/5852005844465572526'/><link rel='alternate' type='text/html' href='http://galihaprilian.blogspot.com/2007/05/oo-in-python-1.html' title='OO in Python (1)'/><author><name>Galih</name><uri>http://www.blogger.com/profile/17396922356195913958</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dLJYpIUHmeo/R32NcIQidCI/AAAAAAAAAB8/4M73z6Dvi6U/S220/Picture0008.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3935080734743020496.post-8611289349983619709</id><published>2007-05-24T00:19:00.000-07:00</published><updated>2007-05-24T19:44:19.820-07:00</updated><title type='text'>Creating business component logic in easyDAF with Python</title><content type='html'>We usually creating business component logic (formerly &lt;span style="font-style: italic;"&gt;kernel&lt;/span&gt;) in delphi.&lt;br /&gt;Delphi is strong-type language that has a lot of ability, but also has weakness.&lt;br /&gt;I don't say that delphi is bad, but if we have better way, why not?&lt;br /&gt;&lt;br /&gt;What's the better way? &lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Python&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Yeah.. using python will increase our development productivity (IMO), especially&lt;br /&gt;for end-user programmer, but not for creating foundation of framework. Actually&lt;br /&gt;Microsoft still use C++ for develop their kernel OS.&lt;br /&gt;&lt;br /&gt;Although, python is dynamic language, but it implement OO concept, so we can still&lt;br /&gt;use OO paradigm in our program.  Some people say OO language must implement&lt;br /&gt;Class, but some not (for some people javascript is OO language with its &lt;span style="font-style: italic;"&gt;prototype-based&lt;/span&gt;).&lt;br /&gt;But at least, there are 3 concept, must accept by OO language:&lt;br /&gt;- Encapsulation&lt;br /&gt;- Inheritance&lt;br /&gt;- Polymorphism&lt;br /&gt;&lt;br /&gt;I will explain that 3 concept in python in another blog, and design pattern in creating&lt;br /&gt;business logic in easyDAF MVC framework.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3935080734743020496-8611289349983619709?l=galihaprilian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://galihaprilian.blogspot.com/feeds/8611289349983619709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3935080734743020496&amp;postID=8611289349983619709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3935080734743020496/posts/default/8611289349983619709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3935080734743020496/posts/default/8611289349983619709'/><link rel='alternate' type='text/html' href='http://galihaprilian.blogspot.com/2007/05/creating-business-component-logic-in.html' title='Creating business component logic in easyDAF with Python'/><author><name>Galih</name><uri>http://www.blogger.com/profile/17396922356195913958</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dLJYpIUHmeo/R32NcIQidCI/AAAAAAAAAB8/4M73z6Dvi6U/S220/Picture0008.jpg'/></author><thr:total>0</thr:total></entry></feed>
