<?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:blogger='http://schemas.google.com/blogger/2008' 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-26953697</id><updated>2026-06-09T00:39:59.113-06:00</updated><category term="Java"/><category term="NetBeans"/><category term="Geldzin"/><category term="Programming"/><category term="SJSAS"/><category term="Web Design"/><category term="Algorithms"/><category term="Hibernate3"/><category term="Scams"/><category term="Eclipse"/><category term="MySQL"/><category term="GWT-Spring-Hibernate"/><category term="Software Development"/><category term="C/C++"/><category term="Perl"/><category term="Source Control"/><category term="World Wide Web"/><category term="Linux"/><category term="Maven"/><category term="Music"/><category term="PHP"/><category term="Useful Software"/><category term="MS Outlook"/><category term="Software Testing"/><category term="Sports"/><category term="Windows"/><category term="Assembly Language"/><category term="C#"/><category term="CSS"/><category term="Causes"/><category term="Computing"/><category term="DWR"/><category term="Dating"/><category term="ExtJS4"/><category term="Internet Explorer"/><category term="Jetty"/><category term="Multimedia"/><category term="OpenGL"/><category term="Reverse Engineering"/><category term="Skills"/><category term="Technology"/><category term="WAMP"/><category term="WMI"/><category term="Wiki"/><title type='text'>All In A Day&#39;s Work</title><subtitle type='html'>Software Development, Running A Business</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://prideafrica.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>162</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-26953697.post-610880879703884255</id><published>2012-01-25T10:59:00.001-07:00</published><updated>2012-01-25T10:59:33.176-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Geldzin"/><title type='text'>Geldzin2: Final Beta Released</title><content type='html'>I&#39;ve just deployed the final beta of my little financial web application (&lt;a href=&quot;http://strive-ltd.com/geldzin/&quot;&gt;Geldzin&lt;/a&gt;). The beta&#39;s business goals were to put all core functionality in place while driving for a usable product that would demonstrate the trajectory I envision for personal finance management. The core functionality includes transaction log, tracking financial and debt accounts, categorization of transactions, distribution of income, a couple of spending reports, emergency fund, and charity&amp;amp;giving emphasis. Below is a view of the digest (main) page:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUGGnEbcZ1U8XFAoas_48l5A46sUHAxGJqnATDh0s-_lkKlDIxHRKOaVcmkmRHMn795Xsg97PubMaQpkEbYwTdcT4FH6sQkNrW2pfPY7WZs2k64Z7L2i6w8_BHYFyD-j_j10YeKg/s1600/geldzin2-1.18-dashboard.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;292&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUGGnEbcZ1U8XFAoas_48l5A46sUHAxGJqnATDh0s-_lkKlDIxHRKOaVcmkmRHMn795Xsg97PubMaQpkEbYwTdcT4FH6sQkNrW2pfPY7WZs2k64Z7L2i6w8_BHYFyD-j_j10YeKg/s400/geldzin2-1.18-dashboard.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;The digest/dashboard provides a snapshot of the overall financial picture. From top-left clockwise, it shows information about your bank and cash accounts (collectively called financial accounts), your credit cards and loans (collectively called debts), a trending chart of total expenses versus total deposits/income over the last 6 months, status of the emergency fund, the most active spending/budget items, and finally the most recent transactions logged. I have room for one more widget at bottom-left but haven&#39;t decided what it will be.&lt;br /&gt;
&lt;br /&gt;
While the initial functionality is in place and a useful product is available to users (my wife and I have been using this webapp for over a year), I also had technical goals that this phase needed to meet:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;I wanted a real project to hash out my knowledge of &lt;a href=&quot;http://www.hibernate.org/&quot;&gt;Hibernate 3.x&lt;/a&gt;. This is the technology I am using for persistence management and database connectivity. The database application itself is &lt;a href=&quot;http://www.mysql.com/&quot;&gt;MySQL 5.x&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I wanted a real project to play with &lt;a href=&quot;http://www.springsource.org/&quot;&gt;Spring MVC&lt;/a&gt;, which I use to receive all client requests and control access to data. The Spring configuration runs in an &lt;a href=&quot;http://tomcat.apache.org/&quot;&gt;Apache Tomcat 6.x&lt;/a&gt; web container.&lt;/li&gt;
&lt;li&gt;I wanted somewhere to explore &lt;a href=&quot;http://www.sencha.com/&quot;&gt;Ext JS&lt;/a&gt; 3.x, which is what I use for the UI and client/server communication.&lt;/li&gt;
&lt;li&gt;I&#39;ve wanted to exercise the project build capabilities of &lt;a href=&quot;http://maven.apache.org/&quot;&gt;Maven&lt;/a&gt; 3.x, which is what I use to compile and build this project and manage dependencies and releases. In tandem with Maven, I also use &lt;a href=&quot;http://subversion.apache.org/&quot;&gt;Subversion SVN&lt;/a&gt; for version control.&lt;/li&gt;
&lt;li&gt;I also wanted to improve my development process to include automated testing (using &lt;a href=&quot;http://testng.org/doc/index.html&quot;&gt;TestNG&lt;/a&gt; and &lt;a href=&quot;http://seleniumhq.org/&quot;&gt;Selenium&lt;/a&gt;), automated/scheduled releases (weekly in a testbay) and automated data import from old databases to new schema. For some of these, &lt;a href=&quot;http://www.perl.org/&quot;&gt;Perl&lt;/a&gt; saved the day.&lt;/li&gt;
&lt;li&gt;Finally, I wanted to understand the intricacies of hosting Java application on the web. I use &lt;a href=&quot;http://www.eapps.com/&quot;&gt;eApps&lt;/a&gt;, which provides a VPS (virtual private server) with the database application, Tomcat and JVM, among other things, for about $250/year.&lt;/li&gt;
&lt;li&gt;Figure out what it takes to obtain a &lt;a href=&quot;http://en.wikipedia.org/wiki/Software_patents_under_United_States_patent_law&quot;&gt;patent for software&lt;/a&gt; like this. &lt;/li&gt;
&lt;/ol&gt;
All these goals were met during this phase (except #7 which is still in the works). The next phase will focus on how to create better UIs (user interfaces), webapp themes (look and feel), producing technical documents (quick start and user guides, source API), mobile sites (using a framework like jQuery Mobile), how to estimate project development costs better (financial and time), and a few other business features in the release candidate (RC1). It is a learning process.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/610880879703884255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/610880879703884255'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2012/01/geldzin2-final-beta-released.html' title='Geldzin2: Final Beta Released'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUGGnEbcZ1U8XFAoas_48l5A46sUHAxGJqnATDh0s-_lkKlDIxHRKOaVcmkmRHMn795Xsg97PubMaQpkEbYwTdcT4FH6sQkNrW2pfPY7WZs2k64Z7L2i6w8_BHYFyD-j_j10YeKg/s72-c/geldzin2-1.18-dashboard.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-883319701901962094</id><published>2011-12-15T10:49:00.002-07:00</published><updated>2011-12-15T10:49:59.416-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Geldzin"/><title type='text'>Geldzin2: Emergency Fund</title><content type='html'>In version 1.9 (build#77), I implement the concept of an &lt;b&gt;emergency fund&lt;/b&gt;. The emergency fund is money that has been saved specifically for emergencies. An &lt;b&gt;emergency&lt;/b&gt; is &quot;something unexpected that has major impact on your family&quot;. Things that can be saved for or that can wait are not 
emergencies. The emergency fund &quot;turns crises into inconveniences&quot; (quoting &lt;a href=&quot;http://www.daveramsey.com/fpu&quot;&gt;Dave Ramsey&lt;/a&gt; both times).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7_Nux6RXLMo3EHRe99_X3nlFcQaxHSELxVdRT190QjGUj0WHoyl96lvB2H3NMZ2ju9BXqh3bpe1w-d1eiladnIFRy7bTiwTVNfrE-NZNLDgkIJ3_049MybBczu1swVzNu8y_aeQ/s1600/geldzin2-1.9-emergency-fund.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;185&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7_Nux6RXLMo3EHRe99_X3nlFcQaxHSELxVdRT190QjGUj0WHoyl96lvB2H3NMZ2ju9BXqh3bpe1w-d1eiladnIFRy7bTiwTVNfrE-NZNLDgkIJ3_049MybBczu1swVzNu8y_aeQ/s400/geldzin2-1.9-emergency-fund.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Geldzin2 allows users to specify what their emergencies are. Anything you can think of that you want to have money available for when it suddenly happens should be considered an emergency. The sum estimate is the emergency fund &lt;i&gt;goal&lt;/i&gt;. The minimum amount should be held in cash (ready to spend on a moment&#39;s notice), and the rest held in a bank account that you do not use for everyday expenses (separate from your main checking account).&lt;br /&gt;
&lt;br /&gt;
During distribution, emergencies are prioritized higher if the minimum amount has not been achieved. Otherwise, they are considered after debts are taken care of. (See image below).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJCnpCmgdS3VnA1dDWKl6oZo3T0M3w_1yGkHpoan423pUVgLUmtf3MVg8v6SMFr-LAswSRlfFSQDF8rgDJkuJv7qbrARjYRXQ7c-dpesZDNiNWL9NxT7m6IQXph6h9cYGl6rhexg/s1600/geldzin2-1.9-emergency-dist.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;95&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJCnpCmgdS3VnA1dDWKl6oZo3T0M3w_1yGkHpoan423pUVgLUmtf3MVg8v6SMFr-LAswSRlfFSQDF8rgDJkuJv7qbrARjYRXQ7c-dpesZDNiNWL9NxT7m6IQXph6h9cYGl6rhexg/s400/geldzin2-1.9-emergency-dist.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
The app considers various factors to determine whether current income should be distributed towards emergencies, including the fund goal, minimum, available cash and emergency account balance, and anything that might have been distributed before but not yet transferred to the account.&lt;br /&gt;
&lt;br /&gt;
To access the emergency fund feature, log into the app and navigate to {Emergency Fund}.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/883319701901962094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/883319701901962094'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/12/geldzin2-emergency-fund.html' title='Geldzin2: Emergency Fund'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7_Nux6RXLMo3EHRe99_X3nlFcQaxHSELxVdRT190QjGUj0WHoyl96lvB2H3NMZ2ju9BXqh3bpe1w-d1eiladnIFRy7bTiwTVNfrE-NZNLDgkIJ3_049MybBczu1swVzNu8y_aeQ/s72-c/geldzin2-1.9-emergency-fund.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-1490475100204792188</id><published>2011-12-12T13:37:00.000-07:00</published><updated>2011-12-12T13:44:48.477-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Geldzin"/><title type='text'>Geldzin2: Public Beta Availability</title><content type='html'>The latest version of the app (version 1.8) is considered a bonified public beta, ready for release to the masses in January 2012. At this point, &lt;a href=&quot;http://prideafrica.blogspot.com/2011/10/geldzin2-accounts.html&quot;&gt;users&lt;/a&gt; can perform basic financial tasks such as create a &lt;a href=&quot;http://prideafrica.blogspot.com/2011/10/geldzin2-categories-budget.html&quot;&gt;budget and categories&lt;/a&gt;, track &lt;a href=&quot;http://prideafrica.blogspot.com/2011/11/geldzin2-financial-accounts.html&quot;&gt;financial accounts&lt;/a&gt; and &lt;a href=&quot;http://prideafrica.blogspot.com/2011/11/geldzin2-debts.html&quot;&gt;debts&lt;/a&gt;, log daily &lt;a href=&quot;http://prideafrica.blogspot.com/2011/12/geldzin2-transactions.html&quot;&gt;transactions&lt;/a&gt; (deposit, expense, income), and &lt;a href=&quot;http://prideafrica.blogspot.com/2011/12/geldzin2-income-distribution.html&quot;&gt;distribute income&lt;/a&gt; among competing obligations. It also incorporates the idea of &lt;a href=&quot;http://prideafrica.blogspot.com/2011/11/geldzin2-charity-giving.html&quot;&gt;charity&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Over the next few weeks, progress towards a milestone version (M1) will involve implementation of other key features, a theme, and reports (including the dashboard). The second release milestone (M2) will bring under-the-hood optimizations and a complete user guide. The third release milestone (M3) will add a mobile website and an Android/iOS app. I project that the final release (version 2.0) will drop around June 2012.&lt;br /&gt;
&lt;br /&gt;
It takes me longer to complete each milestone now because I am a one-man operation with a wife, day job, and hobbies that needs my time. Soon, programming marathons will no longer be possible too, but I will keep pushing to complete this project sooner than June 2012.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/1490475100204792188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/1490475100204792188'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/12/geldzin2-public-beta-availability.html' title='Geldzin2: Public Beta Availability'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-5093183080229469380</id><published>2011-12-09T10:14:00.001-07:00</published><updated>2011-12-09T10:54:04.774-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Geldzin"/><title type='text'>Geldzin2: Transactions</title><content type='html'>In version 1.7 (build#64), I introduce the expected feature of &lt;b&gt;transaction management&lt;/b&gt;. Every financial management app provides a means for users to log their expenses, deposits, and transfers. In Geldzin, this feature integrates with &lt;a href=&quot;http://prideafrica.blogspot.com/2011/10/geldzin2-categories-budget.html&quot;&gt;categories&lt;/a&gt;, &lt;a href=&quot;http://prideafrica.blogspot.com/2011/11/geldzin2-debts.html&quot;&gt;debts&lt;/a&gt; and &lt;a href=&quot;http://prideafrica.blogspot.com/2011/11/geldzin2-financial-accounts.html&quot;&gt;financial accounts&lt;/a&gt; (and behind the scenes, it affects &lt;a href=&quot;http://prideafrica.blogspot.com/2011/12/geldzin2-income-distribution.html&quot;&gt;distributions&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKrU_tQoRnQ56-ZYrUqGC7L2LetabtlL9WZBJTW2IRtxUgBg30KYGWkAovoDbW-V3JYYRXp7vbvRdgTLOTkmw0vIO0Cj8uGqzhjRTf6sIjD5WvUYkK2E6FMpOaHOOeWZtnyWBsGA/s1600/build64-version1.7-transactions.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;232&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKrU_tQoRnQ56-ZYrUqGC7L2LetabtlL9WZBJTW2IRtxUgBg30KYGWkAovoDbW-V3JYYRXp7vbvRdgTLOTkmw0vIO0Cj8uGqzhjRTf6sIjD5WvUYkK2E6FMpOaHOOeWZtnyWBsGA/s400/build64-version1.7-transactions.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
As you can see in the screenshot above, transactions are displayed with the latest on top. Amounts are color-coded (red for outgoing money, blue for incoming money), and linked categories and financial accounts are shown. Expenses can have splits (more than one category assignment). The current version allows entry of income (via Income Distribution), deposits, and expenses. Whenever you use a category that is budgeted, its distributions are affected. For example: an expenditure using a budgeted category will deduct the transaction amount from that month&#39;s distribution for the category.&lt;br /&gt;
Using the menu immediately above the transaction display, you can also choose to view transactions  (1) in a given date range, or (2) for a particular financial account. A future version will provide more comprehensive reports so you can analyze transactions and see your financial trends.&lt;br /&gt;
&lt;br /&gt;
The &lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;lifestyle principle&lt;/span&gt;&lt;/b&gt; is that you should know where your money is coming from or where it is going. With data like this, all kinds of analysis and trending can be done to help make good financial decisions and identify opportunities for efficiency. This data can, for example, be used to refine your budget.&lt;br /&gt;
&lt;br /&gt;
To see this feature in action, access the webapp at &lt;a href=&quot;http://jubilee.homeip.net:84/geldzin2/&quot;&gt;http://jubilee.homeip.net:84/geldzin2/&lt;/a&gt; and login. [Demo account is username &lt;i&gt;guest&lt;/i&gt; and password &lt;i&gt;geldzin&lt;/i&gt;]. Navigate to {Transactions}. Select an option in the {Create New Transaction} dropdown to create an expense, deposit, or distribute income.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/5093183080229469380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/5093183080229469380'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/12/geldzin2-transactions.html' title='Geldzin2: Transactions'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKrU_tQoRnQ56-ZYrUqGC7L2LetabtlL9WZBJTW2IRtxUgBg30KYGWkAovoDbW-V3JYYRXp7vbvRdgTLOTkmw0vIO0Cj8uGqzhjRTf6sIjD5WvUYkK2E6FMpOaHOOeWZtnyWBsGA/s72-c/build64-version1.7-transactions.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-7422897302729944892</id><published>2011-12-07T15:01:00.001-07:00</published><updated>2011-12-07T15:35:03.261-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Geldzin"/><title type='text'>Geldzin2: Income Distribution</title><content type='html'>In version 1.6 (build#56), I introduce the concept of &lt;b&gt;income distribution&lt;/b&gt;. This is the second unique feature in my personal finance management system that no one else out there has. Simply put, &quot;income distribution&quot; is the practice of earmarking (or distributing) your income towards budget categories, debt, and other savings goals systematically. It ensures that your immediate budget needs are covered, debt paid off as quickly as possible, and other savings goals catered to. All you have to do is punch in your paycheck whenever it arrives, and the system will tell you how to use it.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQu2Ol9gXUF6ArO3ZMleYJxkyInUmoSnAKROaQTJefZZrePtlY-pWYhotYPAW99nF3jEQDoHhRgMpfYLMJqdAN30GhAr8p9Ig7h89VDc3u9GL-j1U2UtnYYexjFN5CQ-HVOamofQ/s1600/build56-version1.6-screenshot.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;253&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQu2Ol9gXUF6ArO3ZMleYJxkyInUmoSnAKROaQTJefZZrePtlY-pWYhotYPAW99nF3jEQDoHhRgMpfYLMJqdAN30GhAr8p9Ig7h89VDc3u9GL-j1U2UtnYYexjFN5CQ-HVOamofQ/s400/build56-version1.6-screenshot.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
As you can see in the screenshot above, you simply plug in an income amount and distribution tells you what should be applied towards charity &amp;amp; giving, current and next month budget needs, and debts or loans. When you save the distributions, it counts as a deposit as well. If there is any leftover money, you have a choice to save it for a future distribution, or spread it out among all your budget areas.&lt;br /&gt;
&lt;br /&gt;
The lifestyle principle is that you should only spend from what you have earned/distributed rather that what you have planned/budgeted. In other words, just because there is a budget doesn&#39;t mean the money is there. The budget is only the beginning: income distribution is a necessary second (and ongoing) step.&lt;br /&gt;
&lt;br /&gt;
To see this feature in action, access the webapp at &lt;a href=&quot;http://jubilee.homeip.net:84/geldzin2/&quot;&gt;http://jubilee.homeip.net:84/geldzin2/&lt;/a&gt; and login. [Demo account is username &lt;i&gt;guest&lt;/i&gt; and password &lt;i&gt;geldzin&lt;/i&gt;]. Navigate to {Distributions | Income Distributions}.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/7422897302729944892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/7422897302729944892'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/12/geldzin2-income-distribution.html' title='Geldzin2: Income Distribution'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQu2Ol9gXUF6ArO3ZMleYJxkyInUmoSnAKROaQTJefZZrePtlY-pWYhotYPAW99nF3jEQDoHhRgMpfYLMJqdAN30GhAr8p9Ig7h89VDc3u9GL-j1U2UtnYYexjFN5CQ-HVOamofQ/s72-c/build56-version1.6-screenshot.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-2189617583076733864</id><published>2011-11-21T13:56:00.001-07:00</published><updated>2011-11-21T14:26:45.478-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Geldzin"/><title type='text'>Geldzin2: Charity &amp; Giving</title><content type='html'>In version 1.6 (build#56), I introduce the concept of &lt;b&gt;charitable giving&lt;/b&gt; as part of the financial lifestyle. This is the first unique feature in my app that no other personal financial management system has. The idea is simple: &lt;i&gt;you ought to give away a portion of your earnings to charitable causes and helping others; it will make you happier!&lt;/i&gt; There is all manner of research and experience that support the connection between happiness and generosity. You are never truly wealthy until you can give away some of your treasures.&lt;br /&gt;
&lt;br /&gt;
In Geldzin, you provide a percentage that will be earmarked for charitable giving during income distribution (called the &lt;i&gt;charity rate&lt;/i&gt;). You also provide the name of the category with which charitable giving can be tracked in your transactions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-1udq2wmD6Bpnct2cnMtBj8Id3CyfwZPMDJrO9zdvcfb0k6p74C0E5534xD0wexytS943hT5uw3YQOTX0Aw27C7818PZVBDutBOEjYQqnQJZaLfRyIs-WVt_NfgZTC7uLmMTLPQ/s1600/geldzin-1.6-charity.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;170&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-1udq2wmD6Bpnct2cnMtBj8Id3CyfwZPMDJrO9zdvcfb0k6p74C0E5534xD0wexytS943hT5uw3YQOTX0Aw27C7818PZVBDutBOEjYQqnQJZaLfRyIs-WVt_NfgZTC7uLmMTLPQ/s400/geldzin-1.6-charity.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Apart from the happiness you might derive from generosity, the category is there to help you track charitable giving for tax purposes as well. The charity category is not included in the budget, as the practice is to deduct charity money and applying the rest to budget priorities. This enables people to consider charity and giving no matter what their income is, and to always be generous as long as there is an income.&lt;br /&gt;
&lt;br /&gt;
Check out the feature at &lt;a href=&quot;http://jubilee.homeip.net:84/geldzin2/&quot;&gt;http://jubilee.homeip.net:84/geldzin2/&lt;/a&gt; and login with username &quot;guest&quot; and password &quot;geldzin&quot;. Select menu {Guest &amp;gt; Profile}, access the &quot;Charity&quot; tab.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/2189617583076733864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/2189617583076733864'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/11/geldzin2-charity-giving.html' title='Geldzin2: Charity &amp; Giving'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-1udq2wmD6Bpnct2cnMtBj8Id3CyfwZPMDJrO9zdvcfb0k6p74C0E5534xD0wexytS943hT5uw3YQOTX0Aw27C7818PZVBDutBOEjYQqnQJZaLfRyIs-WVt_NfgZTC7uLmMTLPQ/s72-c/geldzin-1.6-charity.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-6104298049239688081</id><published>2011-11-13T15:27:00.001-07:00</published><updated>2011-11-13T16:06:20.004-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Geldzin"/><title type='text'>Geldzin2: Debts</title><content type='html'>In version 1.5 (build #39), I add the ability to begin tracking &lt;b&gt;debts&lt;/b&gt;. Only basic information about loans and credit cards (how much is owed, when the next payment is due and for how much) is tracked, needed to devise a debt payment strategy (coming in a later version). On this page, you can also see how many payments are left if you were to pay minimums only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5SqLqnBUsS3Gl5ilFw4XwQ5UC0x3cqyOIZeqEhKOn__XCxFp6AioWmuybn-FavHkC-f3FQ2JtPpHsOiWnW9sl1uZAVIBCTLjizpidUz0C3Q59de6XYApuKdWvZqjyOS7s4fAGyA/s1600/build39-version1.5-debts.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;185&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5SqLqnBUsS3Gl5ilFw4XwQ5UC0x3cqyOIZeqEhKOn__XCxFp6AioWmuybn-FavHkC-f3FQ2JtPpHsOiWnW9sl1uZAVIBCTLjizpidUz0C3Q59de6XYApuKdWvZqjyOS7s4fAGyA/s400/build39-version1.5-debts.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
When making a budget, you also need to account for minimum debt payments per month. If there are debts to pay, Geldzin will show debts in categories/budget under a special category highlighting payments that will need to be done throughout the year, as shown in the screenshot below. This gives you a better picture of what your expense budget should be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2dlh09tFt1uZfaqn_s0PqsimUJvEX5pPqhik1vUs7o9m_BHZ2_5Vo33P-ym1n4YMxYPkHAVlzm7Ntp0Vxq0qbPZKqYiikNjTnUIXC7knPJihW5wGySLjBpzNB4BosfVjquZDEtQ/s1600/build39-version1.5-category.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;136&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2dlh09tFt1uZfaqn_s0PqsimUJvEX5pPqhik1vUs7o9m_BHZ2_5Vo33P-ym1n4YMxYPkHAVlzm7Ntp0Vxq0qbPZKqYiikNjTnUIXC7knPJihW5wGySLjBpzNB4BosfVjquZDEtQ/s400/build39-version1.5-category.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
You can preview this feature at &lt;a href=&quot;http://jubilee.homeip.net:84/geldzin2/&quot;&gt;http://jubilee.homeip.net:84/geldzin2/&lt;/a&gt; (login as &lt;b&gt;guest&lt;/b&gt; with password &lt;b&gt;geldzin&lt;/b&gt;, select menu &lt;b&gt;&lt;i&gt;Navigate &amp;gt; Credit Cards &amp;amp; Loans&lt;/i&gt;&lt;/b&gt;).
 Note that the guest/demo account is reset each night, so any changes 
you make will be lost overnight). This application is still in beta.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/6104298049239688081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/6104298049239688081'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/11/geldzin2-debts.html' title='Geldzin2: Debts'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5SqLqnBUsS3Gl5ilFw4XwQ5UC0x3cqyOIZeqEhKOn__XCxFp6AioWmuybn-FavHkC-f3FQ2JtPpHsOiWnW9sl1uZAVIBCTLjizpidUz0C3Q59de6XYApuKdWvZqjyOS7s4fAGyA/s72-c/build39-version1.5-debts.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-3558652602731272466</id><published>2011-11-09T11:57:00.000-07:00</published><updated>2011-11-09T11:59:51.315-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Geldzin"/><title type='text'>Geldzin2: Financial Accounts</title><content type='html'>In version 1.4, I add the ability to begin tracking &lt;b&gt;bank accounts and cash&lt;/b&gt;. After you figure out how much you will be spending (see &lt;a href=&quot;http://prideafrica.blogspot.com/2011/10/geldzin2-categories-budget.html&quot;&gt;Geldzin2: Categories &amp;amp; Budget&lt;/a&gt;), you need to know how much money you currently have and where it is held. Aside from that, you should also know how you use the financial accounts, such as if there are any debit cards associated with them. I attempt to meet these goals in the latest implementation of Geldzin2, as shown in the screenshot below.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_GfhmPJ-VoqmyRTLT1tlnqqXIqP0j4K_Y7p2CSsS-3N-BHE2QWU9XSWsQvrQMKxS8htXOXXBAnJB1Cvf9C95yFVrONb6nv5w7kQp_-CH7_nm8hazMlYrIokXBAepku-OkvuUNSA/s1600/geldzin-1.4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;238&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_GfhmPJ-VoqmyRTLT1tlnqqXIqP0j4K_Y7p2CSsS-3N-BHE2QWU9XSWsQvrQMKxS8htXOXXBAnJB1Cvf9C95yFVrONb6nv5w7kQp_-CH7_nm8hazMlYrIokXBAepku-OkvuUNSA/s400/geldzin-1.4.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
In the future, I&#39;ll provide a means to connect to banks and download balances and transactions, as well as additional account analysis and reports. I&#39;ll also provide reminders for when debit cards expire, and notices for when accounts may run out of money based on historical expenditure trends.&lt;br /&gt;
&lt;br /&gt;
You can preview this feature at &lt;a href=&quot;http://jubilee.homeip.net:84/geldzin2/&quot;&gt;http://jubilee.homeip.net:84/geldzin2/&lt;/a&gt; (login as &lt;b&gt;guest&lt;/b&gt; with password &lt;b&gt;geldzin&lt;/b&gt;, select menu [&lt;i&gt;Navigate &amp;gt; Financial Accounts&lt;/i&gt;]). Note that the guest/demo account is reset each night, so any changes you make will be lost overnight). This application is still in beta.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/3558652602731272466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/3558652602731272466'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/11/geldzin2-financial-accounts.html' title='Geldzin2: Financial Accounts'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_GfhmPJ-VoqmyRTLT1tlnqqXIqP0j4K_Y7p2CSsS-3N-BHE2QWU9XSWsQvrQMKxS8htXOXXBAnJB1Cvf9C95yFVrONb6nv5w7kQp_-CH7_nm8hazMlYrIokXBAepku-OkvuUNSA/s72-c/geldzin-1.4.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-2089386253509729702</id><published>2011-10-31T18:17:00.001-06:00</published><updated>2011-10-31T18:18:28.686-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Geldzin"/><title type='text'>Geldzin2: Categories &amp; Budget</title><content type='html'>In version 1.3, I add features required to manage categories and a simple budget. All this can be done from a single page, as shown in the screenshot below (with randomly generated data).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNZyFo5mIlwyD5DZQ53hER7DH8RDfeMOkJ1bieODBGfr3ZXsNvz6Xwj7zek4hnpu31YpLMmzcG-6ITcQCkGg0lHWhLpZAKMYJ2stUj8zlTS4PpyWXX9BlZMtE-4sHxmH5WF6bbrQ/s1600/build25-version1.3-screenshot.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;257&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNZyFo5mIlwyD5DZQ53hER7DH8RDfeMOkJ1bieODBGfr3ZXsNvz6Xwj7zek4hnpu31YpLMmzcG-6ITcQCkGg0lHWhLpZAKMYJ2stUj8zlTS4PpyWXX9BlZMtE-4sHxmH5WF6bbrQ/s400/build25-version1.3-screenshot.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
At top/left section is where you manage &lt;b&gt;categories&lt;/b&gt;. All financial transactions must be itemized (or categorized). In the context of categories, you then can create a &lt;b&gt;budget &lt;/b&gt;(as seen at top/right section). A category can have any number of budget items, each specifying budget amounts for each month of the year. &lt;b&gt;Annual and monthly totals&lt;/b&gt; are displayed at bottom for convenience and quick reference.&lt;br /&gt;
&lt;br /&gt;
My philosophy on personal budgeting is that a budget should initially be designed around expenses only (as opposed to incorporating income). I take this approach for two reasons: (1) everyone has expenses regardless of income, and (2) knowing expenses first helps shape an informed strategy for obtaining income to cover the expenses. A budget is simply rules on how you plan to use money (and doesn&#39;t necessarily mean you have that money). Income should later be considered when balancing the budget (in light of actual financial activity) and for forecasting. Once you know how much you must spend, the question then becomes: &quot;how shall I get all this money?&quot;. An expense-only budget also helps bring to the forefront your lifestyle and priorities.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/2089386253509729702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/2089386253509729702'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/10/geldzin2-categories-budget.html' title='Geldzin2: Categories &amp; Budget'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNZyFo5mIlwyD5DZQ53hER7DH8RDfeMOkJ1bieODBGfr3ZXsNvz6Xwj7zek4hnpu31YpLMmzcG-6ITcQCkGg0lHWhLpZAKMYJ2stUj8zlTS4PpyWXX9BlZMtE-4sHxmH5WF6bbrQ/s72-c/build25-version1.3-screenshot.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-5898651974737306837</id><published>2011-10-16T22:08:00.000-06:00</published><updated>2011-10-16T22:08:26.722-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Geldzin"/><title type='text'>Geldzin2: Accounts</title><content type='html'>In Geldzin2, accounts are the hub of user activity, used to coordinate the various features the user experiences when using the application. The following are planned features for &lt;b&gt;version 1.2&lt;/b&gt; (developer build available Sun Oct-23, 2011):&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Accounts are created when a user activates their profile.&lt;/li&gt;
&lt;li&gt;An account can be linked to multiple users (up to 2), primarily so that each user can have their own login.&lt;/li&gt;
&lt;li&gt;One of the account users can be designated the primary user (the first user assigned to an account is by default the primary). This user is the only one allowed to schedule the account for deletion.&lt;/li&gt;
&lt;li&gt;Accounts can be &lt;i&gt;free&lt;/i&gt; or &lt;i&gt;paid&lt;/i&gt;. This implementation will support only free accounts.&lt;/li&gt;
&lt;li&gt;Accounts can be &lt;i&gt;personal&lt;/i&gt; or &lt;i&gt;business&lt;/i&gt;. This implementation will support features appropriate for personal financial management only.&lt;/li&gt;
&lt;li&gt;When a user is removed from an account, the user is scheduled for deletion. The user can no longer log into the the account thereafter. &lt;/li&gt;
&lt;li&gt;When an account is disabled, its users are also disabled, meaning that they cannot log in thereafter.&lt;/li&gt;
&lt;li&gt;When an account is deleted, its users are disabled and removed when the account is removed.&lt;/li&gt;
&lt;/ul&gt;
As usual, a &lt;b&gt;developer build&lt;/b&gt; of the previous version can be previewed at &lt;a href=&quot;http://jubilee.homeip.net:84/geldzin2/&quot;&gt;http://jubilee.homeip.net:84/geldzin2/&lt;/a&gt;. To test-drive the application, login as guest/geldzin (for username/password). &lt;br /&gt;
&lt;br /&gt;
&lt;b style=&quot;color: #990000;&quot;&gt;NOTE:&lt;/b&gt; The guest account is reset every night, so do not expect changes to persist day-to-day. Although the developer drop allows users to register new accounts, this information is lost when a new build is deployed.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/5898651974737306837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/5898651974737306837'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/10/geldzin2-accounts.html' title='Geldzin2: Accounts'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-962855053000662600</id><published>2011-10-06T12:29:00.001-06:00</published><updated>2011-10-06T12:33:06.429-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Source Control"/><title type='text'>Recipe#9: Setup Repository On VisualSVN</title><content type='html'>&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 12pt;&quot;&gt;
&lt;u&gt;&lt;b&gt;Overview:&lt;/b&gt;&lt;/u&gt; At the start of a software project, you need somewhere to store and version your source code, from where it can also be shared with others on your team.  I use &lt;a href=&quot;http://www.visualsvn.com/server/&quot;&gt;VisualSVN Server&lt;/a&gt; as my SCM server.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 12pt;&quot;&gt;
&lt;u&gt;&lt;b&gt;Use case:&lt;/b&gt;&lt;/u&gt; I am starting the redesign of my financial webapp (Geldzin) and need a new source repository for the project where I will check in source files and other resources, and launch builds + automated tests from.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 12pt;&quot;&gt;
&lt;b&gt;&lt;u&gt;How-To:&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
* Open VisualSVN Server. Right-click: Repositories &amp;gt; Create New Repository.&lt;br /&gt;
* Provide name {geldzin2} and check &quot;create default structure&quot;. [OK].&lt;br /&gt;
* If you don&#39;t already have users configured, use the &quot;Users&quot; node to
create a few.&lt;br /&gt;
* If you don&#39;t already have user groups configured, use the &quot;Groups&quot;
node to create some. Add users to groups so that permissions be set on group rather than individual users.&lt;br /&gt;
* Setup security for the repository. Right-click newly created repository,
select Properties | Security tab. Set Everyone -&amp;gt; No Access. [Add]. Select
group or user [OK]. Give this group Read/Write permissions. [OK].&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/962855053000662600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/962855053000662600'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/10/recipe9-setup-repository-on-visualsvn.html' title='Recipe#9: Setup Repository On VisualSVN'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-6647924792303062722</id><published>2011-10-03T06:54:00.001-06:00</published><updated>2011-10-03T06:57:09.841-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="Maven"/><title type='text'>Recipe#8: Setting Up Parent Maven Project In Eclipse</title><content type='html'>Whenever you create Maven projects, a best practice is to start with a parent project from which child modules will inherit. The parent POM defines global settings and doesn&#39;t itself produce a deliverable. Child modules would include the deliverables, project documentation (user guides and API docs), libraries (if this is a dependency for other projects), etc. It eases maintenance and extensibility tremendously.&lt;br /&gt;
&lt;br /&gt;
This recipe assumes you have Java (see &lt;a href=&quot;http://prideafrica.blogspot.com/2011/09/recipe2-to-start-developing-in-java.html&quot;&gt;recipe#2&lt;/a&gt;), Maven2 (see &lt;a href=&quot;http://prideafrica.blogspot.com/2011/09/recipe6-configure-maven2.html&quot;&gt;recipe#6&lt;/a&gt;),&amp;nbsp; and Eclipse (see &lt;a href=&quot;http://prideafrica.blogspot.com/2011/09/recipe3-install-eclipse-ide.html&quot;&gt;recipe#3&lt;/a&gt;) configured.&lt;br /&gt;
&lt;br /&gt;
In Eclipse:&lt;br /&gt;
* File &amp;gt; New &amp;gt; Other. Select Maven | Maven Project [Next]. Use default workspace location [Next]. Select &quot;maven-archetype-quickstart&quot; [Next]. Provide archetype parameters [Finish].&lt;br /&gt;
* Update the POM, providing #properties, #description, #licenses, #organization and #developers information, and plugin information for the compiler and surefire (test) plugins. Notice that #packaging ought to be &lt;b&gt;pom&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 12px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;project ...&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;com.strive&amp;lt;/groupId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;geldzin2&amp;lt;/artifactId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;packaging&amp;gt;pom&amp;lt;/packaging&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;0.1-SNAPSHOT&amp;lt;/version&amp;gt;
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;properties&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;project.build.sourceEncoding&amp;gt;UTF-8&amp;lt;/project.build.sourceEncoding&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;jdk.version&amp;gt;1.6&amp;lt;/jdk.version&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/properties&amp;gt;
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;name&amp;gt;Geldzin2&amp;lt;/name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;description&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; An online personal financial management application.
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/description&amp;gt;
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;licenses&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;license&amp;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;lt;name&amp;gt;The Apache Software License, Version 2.0&amp;lt;/name&amp;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;lt;url&amp;gt;http://www.apache.org/licenses/LICENSE-2.0.txt&amp;lt;/url&amp;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;lt;distribution&amp;gt;repo&amp;lt;/distribution&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/license&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/licenses&amp;gt;
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;organization&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;name&amp;gt;Strive Consulting, LLC&amp;lt;/name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;url&amp;gt;http://www.strive-ltd.com&amp;lt;/url&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/organization&amp;gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;developers&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;developer&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;id&amp;gt;prideafrica&amp;lt;/id&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;name&amp;gt;Jubz Madagascar&amp;lt;/name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;organization&amp;gt;Strive Consulting, LLC&amp;lt;/organization&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;organizationUrl&amp;gt;http://www.strive-ltd.com&amp;lt;/organizationUrl&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;roles&amp;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; &amp;lt;role&amp;gt;Architect&amp;lt;/role&amp;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; &amp;lt;role&amp;gt;Developer&amp;lt;/role&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/roles&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/developer&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/developers&amp;gt;
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;build&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;pluginManagement&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;plugins&amp;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; &amp;lt;plugin&amp;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;configuration&amp;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;source&amp;gt;${jdk.version}&amp;lt;/source&amp;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;target&amp;gt;${jdk.version}&amp;lt;/target&amp;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/configuration&amp;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; &amp;lt;/plugin&amp;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; &amp;lt;plugin&amp;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;maven-surefire-plugin&amp;lt;/artifactId&amp;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.9&amp;lt;/version&amp;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; &amp;lt;/plugin&amp;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/plugins&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/pluginManagement&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/build&amp;gt;
&amp;lt;/project&amp;gt;&lt;/code&gt;&lt;/pre&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/6647924792303062722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/6647924792303062722'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/10/recipe8-setting-up-parent-maven-project.html' title='Recipe#8: Setting Up Parent Maven Project In Eclipse'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-6442093045880633921</id><published>2011-10-01T06:51:00.000-06:00</published><updated>2011-10-01T06:53:32.157-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="ExtJS4"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetty"/><category scheme="http://www.blogger.com/atom/ns#" term="Maven"/><title type='text'>Recipe#7: Simple Maven Webapp in Eclipse</title><content type='html'>How to create a webapp using Maven, and run it on Jetty in Eclipse. This recipe creates an initial webapp that I want to use as playground for &lt;a href=&quot;http://www.sencha.com/products/extjs/&quot;&gt;ExtJS 4.x&lt;/a&gt;. Requires that you already have &lt;a href=&quot;http://prideafrica.blogspot.com/2011/09/recipe3-install-eclipse-ide.html&quot;&gt;Eclipse&lt;/a&gt; and &lt;a href=&quot;http://prideafrica.blogspot.com/2011/09/recipe6-configure-maven2.html&quot;&gt;Maven&lt;/a&gt; configured. Everything is done in the Eclipse IDE.&lt;br /&gt;
&lt;br /&gt;
* Menu File &amp;gt; New &amp;gt; Other.&lt;br /&gt;
* Select a wizard: Maven &amp;gt; Maven Project [Next].&lt;br /&gt;
* Select project name and location: use default workspace location. [Next].&lt;br /&gt;
* Select an archetype: maven-archetype-webapp. [Next].&lt;br /&gt;
* Specify archetype parameters: Group Id {com.strive}, Artifact Id {extjs4-projects}, Version {0.1-SNAPSHOT}, Package {com.strive.extjs4projects}. [Finish].&lt;br /&gt;
* Create the Java sources directory (src/main/java) and set it as a source folder (right-click: Build Path &amp;gt; Use as Source Folder).&lt;br /&gt;
* Open the POM and update #name:{ExtJS4 Sample Projects}, remove #dependencies, #build/finalName:{extjs4}.&lt;br /&gt;
* Specify properties and plugins (compiler, surefire, war, and jetty) in the POM:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 11px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&amp;nbsp; &amp;lt;properties&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;project.build.sourceEncoding&amp;gt;UTF-8&amp;lt;/project.build.sourceEncoding&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;jdk.version&amp;gt;1.6&amp;lt;/jdk.version&amp;gt;
&amp;nbsp; &amp;lt;/properties&amp;gt;
&amp;nbsp; &amp;lt;build&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;finalName&amp;gt;extjs4&amp;lt;/finalName&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;plugins&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.3.2&amp;lt;/version&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;configuration&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;source&amp;gt;${jdk.version}&amp;lt;/source&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;target&amp;gt;${jdk.version}&amp;lt;/target&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/configuration&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;maven-surefire-plugin&amp;lt;/artifactId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.9&amp;lt;/version&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.mortbay.jetty&amp;lt;/groupId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;maven-jetty-plugin&amp;lt;/artifactId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;6.1.26&amp;lt;/version&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;configuration&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;contextPath&amp;gt;/${project.build.finalName}&amp;lt;/contextPath&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/configuration&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;maven-war-plugin&amp;lt;/artifactId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.1.1&amp;lt;/version&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/plugins&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; &amp;lt;/build&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
* Create a Jetty launch configuration to run the webapp in Eclipse: Run &amp;gt; Run configurations. Maven Build | New. Name {JettyRun}, browse workspace and select current project, Goals {jetty:run}. [Apply] then [Run].</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/6442093045880633921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/6442093045880633921'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/10/recipe7-simple-maven-webapp-in-eclipse.html' title='Recipe#7: Simple Maven Webapp in Eclipse'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-2821098198726591360</id><published>2011-09-20T11:58:00.001-06:00</published><updated>2011-09-20T11:59:08.330-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Maven"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Development"/><title type='text'>Recipe#6: Configure Maven2</title><content type='html'>When I started programming 8 years ago, &lt;a href=&quot;http://en.wikipedia.org/wiki/Apache_Ant&quot;&gt;ANT&lt;/a&gt; was the build tool of choice for Java programs. These days, you are better off using &lt;a href=&quot;http://en.wikipedia.org/wiki/Apache_Maven&quot;&gt;Apache Maven&lt;/a&gt;, which adds dependency management, build profiles, and automation for common tasks (like documentation and site generation, distribution, and test).&lt;br /&gt;
&lt;br /&gt;
To &lt;b&gt;install Maven&lt;/b&gt;:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Download the package from &lt;a href=&quot;http://maven.apache.org/download.html&quot;&gt;http://maven.apache.org/download.html&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Unzip the contents to a location that will be Maven&#39;s home directory.&lt;/li&gt;
&lt;li&gt;Set the &quot;M2_HOME&quot; environment variable to point to the home directory. Some plugins still require it, although it is no longer necessary for Maven itself.&lt;/li&gt;
&lt;li&gt;Add %M2_HOME%\bin to environment PATH so that you may run the &lt;b&gt;mvn&lt;/b&gt; command from anywhere.&lt;/li&gt;
&lt;/ol&gt;
By default, Maven creates a &lt;b&gt;local repository&lt;/b&gt; under %user_profile%\.m2. To control where artifacts and dependencies are stored, specify an %M2_REPO% environment variable that points to a directory where you want the local repository. &lt;br /&gt;
&lt;br /&gt;
Because I develop in the Eclipse IDE, it is configured it with the &lt;b&gt;&lt;a href=&quot;http://eclipse.org/m2e/&quot;&gt;m2eclipse&lt;/a&gt; Maven plugin&lt;/b&gt;, which allows me to void a DOS console when I build projects and do everything in Eclipse:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;In Eclipse, create an update site for m2eclipse [Help &amp;gt; Install New Software. Add m2eclipse=&lt;a href=&quot;http://download.eclipse.org/technology/m2e/releases&quot;&gt;http://download.eclipse.org/technology/m2e/releases&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Select &quot;Maven Integration for Eclipse&quot;, click [Next]. Agree to license terms and [Install]. You will need to restart Eclipse.&lt;/li&gt;
&lt;/ol&gt;
Before you start using m2eclipse, it pays to look over the configuration. Among the things I changed: having the plugin use the Maven installation from earlier because the plugin references non-release or snapshot version of Maven. If you have other programs or scripts that use Maven outside Eclipse, this action promotes build consistency. Also consider the settings file, which you can now edit in Eclipse.&lt;br /&gt;
&lt;br /&gt;
Some recommended reads on Maven2 can be found at &lt;a href=&quot;http://maven.apache.org/articles.html&quot;&gt;http://maven.apache.org/articles.html&lt;/a&gt;. I like &quot;Maven 2: Effective Implementation&quot; because it also touches on Apache Archiva and Continuum. Otherwise &quot;Apache Maven 3 Cookbook&quot; will get you up-to-date on the latest usage of Maven.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/2821098198726591360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/2821098198726591360'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/09/recipe6-configure-maven2.html' title='Recipe#6: Configure Maven2'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-4683381776438565083</id><published>2011-09-07T11:18:00.000-06:00</published><updated>2011-09-07T11:18:42.536-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="Source Control"/><title type='text'>Recipe#5: Configure Eclipse for SVN</title><content type='html'>With access to an&lt;a href=&quot;http://prideafrica.blogspot.com/2011/09/recipe4-install-svn-server.html&quot;&gt; SVN server&lt;/a&gt;, you need to configure your IDE to connect to available SVN repositories. In Eclipse, you&#39;d need to install and configure the &lt;b&gt;Subclipse SVN plugin&lt;/b&gt;:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt; Open menu Help &amp;gt; Install new software ...&lt;/li&gt;
&lt;li&gt;Add the Tigris Subclipse update site &lt;i&gt;http://subclipse.tigris.org/update_1.6.x&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Select the Core SVNKit library, JNA library, and Subclipse.&lt;/li&gt;
&lt;li&gt;After installation, you can further configure the plugin at Window &amp;gt; Preferences &amp;gt; Team &amp;gt; SVN.&lt;/li&gt;
&lt;/ol&gt;
To check in a project:&amp;nbsp; right-click project in Eclipse, select Team &amp;gt; Share Project.&lt;br /&gt;
To checkout a project: select menu File &amp;gt; Import, select SVN &amp;gt; Checkout Projects from SVN.&lt;br /&gt;
Thereafter, all version control operations (update, commit, add, etc) are available from the Team menu.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/4683381776438565083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/4683381776438565083'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/09/recipe5-configure-eclipse-for-svn.html' title='Recipe#5: Configure Eclipse for SVN'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-915993320645766481</id><published>2011-09-06T11:01:00.002-06:00</published><updated>2011-09-06T11:01:23.942-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Software Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Source Control"/><title type='text'>Recipe#4: Install an SVN Server</title><content type='html'>Even if you are the sole programmer on any project, it is imperative that you use version control for your source code and documentation. I use &lt;a href=&quot;http://en.wikipedia.org/wiki/Subversion_%28software%29&quot;&gt;Apache Subversion&lt;/a&gt; (SVN) for, among other things:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Be able to revert to a previous version of an application, either because my current working copy is corrupted or full of unanticipated bugs.&lt;/li&gt;
&lt;li&gt;Sharing the project with other developers for collaboration or contribution.&lt;/li&gt;
&lt;li&gt;Maintaining multiple branches or tagging code at specific milestones.&lt;/li&gt;
&lt;/ol&gt;
To use SVN in development, you need an SVN server and SVN client. I use &lt;a href=&quot;http://www.visualsvn.com/server/&quot;&gt;&lt;b&gt;Visual SVN&lt;/b&gt;&lt;/a&gt; for the server component, installed on a separate machine than what I use for development. VisualSVN is easy to manage and configure, but I mostly like its ability to authenticate via Windows users or your own creations, and access to the checked-in artifacts over HTTP(s) (browser and clients).&lt;br /&gt;
&lt;br /&gt;
On why you have no excuse for not using source versioning:&lt;br /&gt;
&lt;a href=&quot;http://betterexplained.com/articles/a-visual-guide-to-version-control/&quot;&gt;http://betterexplained.com/articles/a-visual-guide-to-version-control/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.relisoft.com/co_op/whyvcs.html&quot;&gt;http://www.relisoft.com/co_op/whyvcs.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.mactech.com/articles/mactech/Vol.14/14.06/VersionControlAndTheDeveloper/index.html&quot;&gt;http://www.mactech.com/articles/mactech/Vol.14/14.06/VersionControlAndTheDeveloper/index.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://jamesmckay.net/2009/06/why-would-anyone-not-use-source-control/&quot;&gt;http://jamesmckay.net/2009/06/why-would-anyone-not-use-source-control/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.soundsoftware.ac.uk/why-version-control&quot;&gt;http://www.soundsoftware.ac.uk/why-version-control&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/915993320645766481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/915993320645766481'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/09/recipe4-install-svn-server.html' title='Recipe#4: Install an SVN Server'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-5978964244341724051</id><published>2011-09-02T10:17:00.004-06:00</published><updated>2011-09-02T10:18:26.839-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>Recipe#3: Install the Eclipse IDE</title><content type='html'>No serious Java developer I know writes code in a text editor; you need an &lt;a href=&quot;http://en.wikipedia.org/wiki/Integrated_development_environment&quot;&gt;Integrated Development Environment&lt;/a&gt; (IDE). The &lt;a href=&quot;http://code.google.com/p/gwt-examples/wiki/Eclipse_Advantages&quot;&gt;benefits of using an IDE&lt;/a&gt; can&#39;t be emphasized enough, and with many free options out there, you have no excuse. (See a &lt;a href=&quot;http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments#Java&quot;&gt;comparison of the major Java IDEs&lt;/a&gt;). My IDE of choice is &lt;a href=&quot;http://www.eclipse.org/&quot;&gt;&lt;b&gt;Eclipse&lt;/b&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Download Eclipse (&lt;a href=&quot;http://www.eclipse.org/downloads/&quot;&gt;http://www.eclipse.org/downloads/&lt;/a&gt;). Because I mostly develop web applications, I use the &quot;Eclipse IDE for Java EE Developers&quot; flavor.&lt;/li&gt;
&lt;li&gt;The platform version you get depends on what&lt;a href=&quot;http://prideafrica.blogspot.com/2011/09/recipe2-to-start-developing-in-java.html&quot;&gt; JVM you have installed&lt;/a&gt;. If the JVM is 32-bit, get the 32-bit version of the IDE.&lt;/li&gt;
&lt;li&gt;Extract the downloaded .zip to a location that will be Eclipse&#39;s installation directory.&lt;/li&gt;
&lt;li&gt;Run %install_dir%\&lt;b&gt;eclipse.exe&lt;/b&gt;. Should open the IDE and prompt you to configure workspaces. My practice is to specify a workspace for each major project I work on, most of which will have many related Eclipse projects.&lt;/li&gt;
&lt;li&gt;Since Eclipse is not installed like other Windows applications, create a shortcut on your desktop to the Eclipse executable.&lt;/li&gt;
&lt;/ol&gt;
You&#39;ll get more use out of the IDE if you learn to use it properly. Invest in a book on this topic or Google for tutorials (check out &lt;a href=&quot;http://www.vogella.de/articles/Eclipse/article.html&quot;&gt;http://www.vogella.de/articles/Eclipse/article.html&lt;/a&gt; for a start).</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/5978964244341724051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/5978964244341724051'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/09/recipe3-install-eclipse-ide.html' title='Recipe#3: Install the Eclipse IDE'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-1796438935353995854</id><published>2011-09-01T12:07:00.000-06:00</published><updated>2011-09-01T12:07:35.023-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Development"/><title type='text'>Recipe#2: To Start Developing In Java</title><content type='html'>To start any Java project, you need to install a Java Development Kit (JDK) on your computer. The kit contains the virtual machine (JVM), the language spec, and a number of other utilities. Only three things need be done to properly install a JDK:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Download the latest J2SE from &lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/index.html&quot;&gt;http://www.oracle.com/technetwork/java/javase/downloads/index.html&lt;/a&gt; and run its installer.&lt;/li&gt;
&lt;li&gt;Configure the environment variables so that your installation is available on the system classpath. In either PATH or CLASSPATH, add %install_directory%\bin. At the commandline, you should be able to run &lt;b&gt;java -version&lt;/b&gt; and see version information.&lt;/li&gt;
&lt;li&gt;Create a &lt;b&gt;JAVA_HOME&lt;/b&gt; system environment variable and point it to the directory where the JDK is installed. Plenty of Java tools, plugins, applications, and utilities expect this variable to exist.&lt;/li&gt;
&lt;/ol&gt;
At this point, you can start developing Java code (using any text editor and the shell/commandline). A word of caution: although Java SE7 has some great new features, some have observed a few drawbacks. Ref: &quot;&lt;a href=&quot;http://adtmag.com/articles/2011/08/01/java-7-crashing.aspx&quot;&gt;Java SE 7 &#39;Buggy,&#39; Causing Crashes Says Apache Lucene&lt;/a&gt;&quot;. </content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/1796438935353995854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/1796438935353995854'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/09/recipe2-to-start-developing-in-java.html' title='Recipe#2: To Start Developing In Java'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-4219907385433219935</id><published>2011-08-30T11:41:00.000-06:00</published><updated>2011-08-30T11:41:25.706-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Software Development"/><title type='text'>Recipe #1: 12 Commandments of a Java Developer</title><content type='html'>There are only two requirements to become a Java programmer: (1) know the Java programming language, and (2) have an environment in which to program. The first requirement can be achieved through the many &lt;a href=&quot;http://download.oracle.com/javase/tutorial/&quot;&gt;tutorials&lt;/a&gt;, books, and college courses that exist today. The environment is as simple as a computer with the &lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/index.html&quot;&gt;JDK&lt;/a&gt; installed.&lt;br /&gt;
&lt;br /&gt;
To become a well-rounded developer, however, requires much more than programming. Here are my 12 commandments of software development:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Know &lt;b&gt;development paradigms and the software development models&lt;/b&gt;. Practice good software development methodologies.&lt;/li&gt;
&lt;li&gt;Know the &lt;b&gt;tools of the trade&lt;/b&gt;, including IDEs, frameworks, plugins, and other utilities that will make development easier and automated.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Do not reinvent the wheel&lt;/b&gt;: there are developers that have likely solved the problems you will face. Use that body of work, build on it. (And contribute). Specifically, there are tons of libraries out there for all kinds of things.&lt;/li&gt;
&lt;li&gt;Have &lt;b&gt;project management skills&lt;/b&gt; to carry a project from statement/requirements to deployment/maintenance. You have to know everything that affects what you will produce.&lt;/li&gt;
&lt;li&gt;Have an &lt;b&gt;industry certification&lt;/b&gt; such as the &lt;a href=&quot;http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=140&quot;&gt;Java certification from Oracle&lt;/a&gt;. You should also have evidence of training in other products you are training on.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Diversify your skills&lt;/b&gt;. Be able to develop for various platforms (desktop, web, mobile), use related technologies (networking, databases, integration solutions such as ESB), and know best practices. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Network &lt;/b&gt;with other software developers and programmers. This is how you will learn undocumented techniques and perhaps land contracts.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Contribute&lt;/b&gt; to the knowledge base through blogging and reviews of others&#39; work. If you invent a wheel, consider open-sourcing it. Find a few good forums and respond helpfully to topics there. Be an expert in your craft and share the wealth.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Stay in the know&lt;/b&gt;: technology news, research, and software development publications will keep you abreast with what&#39;s going on in the world -- and believe me, it affects your craft.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Practice and keep learning&lt;/b&gt;: there is always new ways to do things, or new products that could simplify your work. Learn their implications for you. You stand a better chance of landing that job if you can also demonstrate your skills (by perhaps showing something you have developed).&lt;/li&gt;
&lt;li&gt;Write &lt;b&gt;efficient and highly optimized code&lt;/b&gt;, with good documentation. Test your stuff before you release it. This means that you can write good algorithms and have in place a way to test all your code paths.&lt;/li&gt;
&lt;li&gt;[Minor]: know how to setup the JVM, including the various options required for it to perform optimally. &lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/4219907385433219935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/4219907385433219935'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/08/recipe-1-12-commandments-of-java.html' title='Recipe #1: 12 Commandments of a Java Developer'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-4268542360454232650</id><published>2011-08-29T06:48:00.003-06:00</published><updated>2011-08-29T06:54:52.425-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Software Development"/><title type='text'>Finally, Returning To Blogging</title><content type='html'>Yes, it&#39;s been ages since I blogged here. Over the next few weeks, I&#39;ll be cleaning up this blog (removing personal posts and focusing the blog on technical content, including software development and running a business). Personal posts will be moved to another blog.&lt;br /&gt;The intent of this blog will be to share my experiences and challenges (and solutions, of course) from the world of software development, which is my current occupation.&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/4268542360454232650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/4268542360454232650'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2011/08/finally-returning-to-blogging.html' title='Finally, Returning To Blogging'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-1758485601088914987</id><published>2010-01-15T13:28:00.001-07:00</published><updated>2010-01-15T13:39:46.433-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate3"/><title type='text'>Hibernate3 Tip#7: find(), merge(), getReference()</title><content type='html'>&lt;span style=&quot;font-weight: bold;&quot;&gt;find()&lt;/span&gt; is for retrieving objects from the database - always generates SQL and loads into memory an object initialized according to the active fetch strategy. If you have newly created objects in a persistent context but have not called flush() or committed the transaction, find() will not find them and will return NULL (even if you have called persist()).&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;merge()&lt;/span&gt; is for retrieving a persistent version of a detached or transient object. If not found in the persistent context caches, an SQL statement is issued to retrieve the object from the database, and dirty checking is done to merge the objects. Because it uses non-NULL properties of the detached or transient object to overwrite the retrieved object, you want to be careful about how you use attribute defaults. So watch out when working with transient objects.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;getReference()&lt;/span&gt; returns a proxy with only the identifier initialized, and does not hit the database. If you are not working directly on an object (such as when it is used only as a reference in queries or other objects), you want to use this strategy. Rule of thumb: if you have entity references in an object, this is likely how you refer to them. Note that the proxy has all other properties set to NULL. To fully initialize the proxies, you&#39;d need to find() or merge().</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/1758485601088914987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/1758485601088914987'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2010/01/hibernate3-tip7-find-merge-getreference.html' title='Hibernate3 Tip#7: find(), merge(), getReference()'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-4505162760073904688</id><published>2010-01-06T23:13:00.003-07:00</published><updated>2010-01-06T23:32:23.038-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate3"/><title type='text'>Hibernate3 Tip#6: QL Parameters Are Objects</title><content type='html'>Consider an entity User that has a many-to-one reference to a Role entity. Each of these entities has an identifier field used to uniquely identify objects. The database schema would be such that the Users table has a column (usually of a numeric data type) with a foreign key constraint to a Role. Supposing you wanted to get all users with a specific role, plain SQL allows querying with a &quot;where user.roleid=?&quot; and providing a numeric type that matches the role&#39;s identifier type.&lt;br /&gt;&lt;br /&gt;In Hibernate, however, this strategy fails with a &quot;&lt;span style=&quot;font-weight: bold; color: rgb(204, 0, 0);&quot;&gt;org.hibernate.PropertyAccessViolation: could not get a field value by reflection&lt;/span&gt;&quot; exception. Hibernate expects you to provide actual objects as parameters. Thus the QL for the above scenario would require you to find the persistent Role object first, then pass it (or its proxy given by &lt;span style=&quot;font-style: italic;&quot;&gt;getReference()&lt;/span&gt;) as a parameter. Alternatively, you may choose to use native SQL queries. You may consider this a side effect of using an object-oriented persistent layer and query language. It is particularly useful in resolving object identity issues where perhaps more than one property is used to define the object&#39;s primary key.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/4505162760073904688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/4505162760073904688'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2010/01/hibernate3-tip6-ql-parameters-are.html' title='Hibernate3 Tip#6: QL Parameters Are Objects'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-7663222437406285706</id><published>2010-01-04T11:27:00.005-07:00</published><updated>2010-01-04T11:41:46.336-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate3"/><title type='text'>Hibernate3 Tip#5: Initializing Entity Objects</title><content type='html'>When you create entity classes, it is &lt;span style=&quot;font-weight: bold;&quot;&gt;NOT&lt;/span&gt; a good idea to initialize entity references with defaults. Only initialize class attributes that are not references to other entities, and leave references &lt;span style=&quot;font-style: italic;&quot;&gt;NULL&lt;/span&gt;ed, except the collections. A new identifier is assigned when a transient object is persisted, overriding whatever default you might have assigned. Having defaults may cause dirty checking to consider them changes that should be propagated to the database when merging or reattaching objects. For newly created objects, the dynamic update feature (if enabled) prevents sql statements that consist of null values (&lt;a href=&quot;http://prideafrica.blogspot.com/2009/12/hibernate3-tip2-enable-automatic-dirty.html&quot;&gt;see this tip&lt;/a&gt;), and the database uses whatever the default is. (It is better for defaults to be defined in the @Column annotation).&lt;br /&gt;&lt;br /&gt;When modifying objects, you only need change what needs to be changed, and if you have dirty checking enabled, only those changes will be propagated to the database. Also note that if you want to use a specific identifier for an object, you should call merge() to obtain a persistent version with that identifier almost immediately after initializing it. Otherwise you&#39;ll get a &quot;detached object passed to persist ...&quot; exception sometime when you attempt to commit the transaction. This is one pesky annoyance you discover only with experience.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/7663222437406285706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/7663222437406285706'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2010/01/hibernate3-tip5-initializing-entity.html' title='Hibernate3 Tip#5: Initializing Entity Objects'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-214569999337565886</id><published>2010-01-01T11:29:00.006-07:00</published><updated>2010-01-01T11:59:06.747-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate3"/><title type='text'>Hibernate3 Tip#4: One EntityManagerFactory Per Persistence Unit</title><content type='html'>If you use Hibernate3 for web applications, you must define a &lt;span style=&quot;font-weight: bold;&quot;&gt;persistence unit&lt;/span&gt; (database connection and entity metadata from annotated classes or XML mappings). These are essentially the settings that describe how to connect to the database and describe the schema i.e. how tables are laid out and various relationships/constraints between the tables physically.&lt;br /&gt;&lt;br /&gt;At runtime, you make persistence unit configuration available to the web application through an &lt;span style=&quot;font-weight: bold;&quot;&gt;entity manager factory&lt;/span&gt;. Its main job is to instantiate entity managers for you that provide the persistence context in which you manipulate the database. Although you can create multiple factories based on a single persistence unit, it is not recommended. Instead, you ought to instantiate one statically-scoped entity manager factory and provide a thread-safe accessor that employs the &lt;a href=&quot;http://en.wikipedia.org/wiki/Singleton_pattern&quot;&gt;singleton pattern&lt;/a&gt; to ensure there&#39;s always only one. That accessor initializes a new EMF if none exists and return EntityManager objects.&lt;br /&gt;&lt;br /&gt;An example that uses a persistence unit called &quot;puGeldzin&quot;:&lt;br /&gt;&lt;pre style=&quot;border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;&quot;&gt;&lt;code&gt;import javax.persistence.EntityManager;&lt;br /&gt;import javax.persistence.EntityManagerFactory;&lt;br /&gt;import javax.persistence.Persistence;&lt;br /&gt;&lt;br /&gt;public final class DBUtil {&lt;br /&gt;private static EntityManagerFactory emf;&lt;br /&gt;&lt;br /&gt;public static synchronized EntityManager entityManager() {&lt;br /&gt;    if(emf == null) {&lt;br /&gt;        emf = Persistence&lt;br /&gt;            .createEntityManagerFactory(&quot;puGeldzin&quot;);&lt;br /&gt;    }&lt;br /&gt;    return emf.createEntityManager();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/214569999337565886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/214569999337565886'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2010/01/hibernate3-tip4-one-entitymanagerfactor.html' title='Hibernate3 Tip#4: One EntityManagerFactory Per Persistence Unit'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26953697.post-537190499366248865</id><published>2009-12-30T20:02:00.002-07:00</published><updated>2009-12-30T20:24:39.947-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate3"/><title type='text'>Hibernate3 Tip#3: Methods You Should Override</title><content type='html'>Just some general best practices that have saved me considerable development time as I&#39;ve worked with Hibernate3:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Always override &lt;span style=&quot;font-weight: bold;&quot;&gt;equals()&lt;/span&gt;. Objects that are equal as plain Java objects are often not equal in Hibernate3 because of the identity problem. Hibernate considers the object&#39;s persistent state, database identity, and other factors to determine if two objects are equal. By overriding equals(), you set a standard of equality both Hibernate and Java can use.&lt;/li&gt;&lt;li&gt;It is a bad idea to override equals() in subclasses. Hibernate does not behave well.&lt;/li&gt;&lt;li&gt;Always override &lt;span style=&quot;font-weight: bold;&quot;&gt;hashCode()&lt;/span&gt; and provide your own implementation based on the class&#39;s attributes that are expected to change rarely. I use the class identifier commonly. Actually, overriding equals() almost always requires overriding hashCode().&lt;/li&gt;&lt;li&gt;When you implement equals() and hashCode(), always &lt;span style=&quot;font-weight: bold;&quot;&gt;use property accessors&lt;/span&gt; - getXX()/setXX(), POJO style. Hibernate allows the use of proxy classes or references that may no contain actual data if you call their properties directly. Believe me, this is a pain to debug!&lt;/li&gt;&lt;li&gt;Always make classes &lt;span style=&quot;font-weight: bold;&quot;&gt;Comparable&lt;/span&gt; in case objects of the class end up in collections that require this feature (such as SortedSet or other collections that use a class-dependent Comparator). This gives you the flexibility to switch collection types whenever (e.g. from List to Set) without further base code changes.&lt;/li&gt;&lt;li&gt;I also always override &lt;span style=&quot;font-weight: bold;&quot;&gt;toString()&lt;/span&gt; because I hate seeing memory addresses as representations of objects. I use it for debug information that I can print out and understand, and that uniquely identifies the object for me.&lt;/li&gt;&lt;/ul&gt;Pretty much every OOP project I&#39;ve worked on, these are some of the first tasks that get done. If developers would just get in the habit of these best practices, I wouldn&#39;t dread inheriting their projects so much.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/537190499366248865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26953697/posts/default/537190499366248865'/><link rel='alternate' type='text/html' href='http://prideafrica.blogspot.com/2009/12/hibernate3-tip3-methods-you-should.html' title='Hibernate3 Tip#3: Methods You Should Override'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>