<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3641768879785029586</id><updated>2011-12-14T18:05:17.333+11:00</updated><category term='images'/><category term='dragdrop'/><category term='installation'/><category term='javascript'/><category term='mysql'/><category term='authentication'/><category term='sortable'/><category term='bugs'/><category term='ajax'/><category term='security'/><category term='menus'/><category term='ruby helper'/><category term='syntax highlight'/><category term='graphs'/><category term='autocomplete'/><category term='embedded ruby'/><category term='tax'/><category term='effects'/><category term='script.aculo.us'/><category term='controller'/><category term='base64'/><category term='css'/><category term='unit test'/><category term='render'/><category term='form validation'/><category term='planning'/><category term='rails'/><category term='user interface'/><category term='html'/><category term='partials'/><category term='rmagick'/><category term='gruff'/><category term='reserved name'/><category term='prototype'/><category term='json'/><category term='database'/><title type='text'>Finance on Rails</title><subtitle type='html'>Sydney University thesis blog 2007. Danny and the elves will be developing a finance/budgeting web application using Ruby on Rails and AJAX.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-8792460893656058156</id><published>2008-07-09T22:57:00.006+10:00</published><updated>2008-11-01T23:50:17.693+11:00</updated><title type='text'>Finance on Rails Finale</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;It's been a while since a post has been made. We've finished our thesis and have officially graduated!&lt;br /&gt;&lt;br /&gt;I'm now working in a company called First Rate doing SEO/SEM consulting.&lt;br /&gt;&lt;br /&gt;This blog will now be officially inactive so please visit my new website at &lt;a href="http://www.dannytalk.com/"&gt;http://www.dannytalk.com/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's been fun and I hope this blog has helped users with MySQL and Ruby on Rails related problems!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-8792460893656058156?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/8792460893656058156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=8792460893656058156' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/8792460893656058156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/8792460893656058156'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2008/07/finance-on-rails-finale.html' title='Finance on Rails Finale'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-4081637935146926983</id><published>2007-10-24T13:15:00.000+10:00</published><updated>2007-10-24T13:22:48.490+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='unit test'/><title type='text'>Disable Foreign Key Check Under MySQL</title><content type='html'>&lt;pre name="code" class="sql"&gt;&lt;br /&gt;Mysql::Error: #23000Cannot add or update a child row: a foreign key constraint fails&lt;br /&gt;(`depot_development/line_items`, &lt;br /&gt;CONSTRAINT `fk_items_product` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`)&lt;br /&gt;ON DELETE CASCADE): INSERT INTO line_items (`quantity`, `product_id`, `id`,&lt;br /&gt;`unit_price`) VALUES (1, 1, 1, 29.95)&lt;br /&gt;&lt;br /&gt;OR&lt;br /&gt;&lt;br /&gt;ActiveRecord::StatementInvalid: Mysql::Error: &lt;br /&gt;Cannot delete or update a parent row: a foreign key constraint fails: &lt;br /&gt;DELETE FROM line_items WHERE id = 1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If you've ever gotten the above error message from unit testing with Rails, this is what you gotta do.&lt;br /&gt;&lt;br /&gt;Turn off constraints when fixtures are loaded to run unit tests by adding the following to the end of test_helper.rb:&lt;br /&gt;&lt;br /&gt;&lt;pre class="ruby" name="code"&gt;&lt;br /&gt;class Fixtures&lt;br /&gt;  def delete_existing_fixtures_with_fk_checks_disabled&lt;br /&gt;    @connection.update "SET FOREIGN_KEY_CHECKS = 0" &lt;br /&gt;    delete_existing_fixtures_without_fk_checks_disabled&lt;br /&gt;    @connection.update "SET FOREIGN_KEY_CHECKS = 1" &lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def insert_fixtures_with_fk_checks_disabled&lt;br /&gt;    @connection.update "SET FOREIGN_KEY_CHECKS = 0" &lt;br /&gt;    insert_fixtures_without_fk_checks_disabled&lt;br /&gt;    @connection.update "SET FOREIGN_KEY_CHECKS = 1" &lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  alias_method_chain :delete_existing_fixtures, :fk_checks_disabled unless method_defined?(:delete_existing_fixtures_without_fk_checks_disabled)&lt;br /&gt;  alias_method_chain :insert_fixtures, :fk_checks_disabled unless method_defined?(:insert_fixtures_without_fk_checks_disabled)&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Read more about it &lt;a href="http://wiki.rubyonrails.com/rails/pages/DisableForeignKeyChecksUnderMySql" target="_blank"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-4081637935146926983?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/4081637935146926983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=4081637935146926983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/4081637935146926983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/4081637935146926983'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/10/disable-foreign-key-check-under-mysql.html' title='Disable Foreign Key Check Under MySQL'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-3377138563320876084</id><published>2007-10-23T01:00:00.000+10:00</published><updated>2007-10-23T01:03:41.765+10:00</updated><title type='text'>Testing Stage</title><content type='html'>Seems like I've pretty much finished my coding. Perhaps a little bit of tweaking now and there.&lt;br /&gt;&lt;br /&gt;Will begin to write up testing reports and fix any bugs that arises. Also commenting all of my code as I go along.&lt;br /&gt;&lt;br /&gt;Marko and I will be integrating our code together tomorrow as he needs my user function and also my stylesheet.&lt;br /&gt;&lt;br /&gt;8 days to go...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-3377138563320876084?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/3377138563320876084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=3377138563320876084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/3377138563320876084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/3377138563320876084'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/10/testing-stage.html' title='Testing Stage'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-8569712181087738063</id><published>2007-10-23T00:06:00.001+10:00</published><updated>2007-10-23T00:24:48.659+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphs'/><category scheme='http://www.blogger.com/atom/ns#' term='user interface'/><category scheme='http://www.blogger.com/atom/ns#' term='gruff'/><title type='text'>Gruff Graph Customisation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eTWJkaJUnJY/RxyuiHde3FI/AAAAAAAAFis/CdziMvij6Jg/s1600-h/screenshot.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_eTWJkaJUnJY/RxyuiHde3FI/AAAAAAAAFis/CdziMvij6Jg/s400/screenshot.JPG" alt="" id="BLOGGER_PHOTO_ID_5124162377182272594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've just managed to get my graph customisation up and running. You can now graph three different types of graph: pie, stackedbar and sidestackedbar.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eTWJkaJUnJY/RxyvHXde3GI/AAAAAAAAFi0/x9oy2QimJ8k/s1600-h/screenshot.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_eTWJkaJUnJY/RxyvHXde3GI/AAAAAAAAFi0/x9oy2QimJ8k/s400/screenshot.JPG" alt="" id="BLOGGER_PHOTO_ID_5124163017132399714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The variables that you can customise are the width of the image in pixels, (automatically sets it to 4:3 ratio), graphing by project or job, data breakdown and specified flow.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eTWJkaJUnJY/Rxyvrnde3HI/AAAAAAAAFi8/YgDmaWCGcHg/s1600-h/screenshot.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eTWJkaJUnJY/Rxyvrnde3HI/AAAAAAAAFi8/YgDmaWCGcHg/s400/screenshot.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5124163639902657650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Not all of these customisations are available to all graphs but the javascript control handles what the user can select. Different graphs work differently.&lt;br /&gt;&lt;br /&gt;The way a pie graph handles data is by accepting a number, attached with the data identifier.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="ruby"&gt;&lt;br /&gt;# Example of adding data to a pie graph.&lt;br /&gt;g.data("Data Identifier", 50)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The way a sidestackedbar/stackedbar graph handles data is by accepting an array of values, attached with the data identifier.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="ruby"&gt;&lt;br /&gt;# Example of adding data to a sidestackedbar/stackedbar graph.&lt;br /&gt;g.data("Data Identifier", [1, 2, 5])&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eTWJkaJUnJY/RxywHXde3II/AAAAAAAAFjE/jOPYiInnNSA/s1600-h/screenshot.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eTWJkaJUnJY/RxywHXde3II/AAAAAAAAFjE/jOPYiInnNSA/s400/screenshot.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5124164116644027522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Of course there are so many other customisations that can be implemented but I don't think I have time to implement them. This will do for now.&lt;br /&gt;&lt;br /&gt;For Gruff API reference, click &lt;a href="http://topfunky.com/clients/rails/gruff/doc/" target="_blank"&gt;here&lt;/a&gt;. Gruff samples can also be seen &lt;a href="http://geoffreygrosenbach.com/projects/show/5" target="_blank"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-8569712181087738063?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/8569712181087738063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=8569712181087738063' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/8569712181087738063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/8569712181087738063'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/10/gruff-graph-customisation.html' title='Gruff Graph Customisation'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_eTWJkaJUnJY/RxyuiHde3FI/AAAAAAAAFis/CdziMvij6Jg/s72-c/screenshot.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-9006792435232554089</id><published>2007-10-20T13:21:00.001+10:00</published><updated>2007-10-20T15:28:52.895+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax highlight'/><title type='text'>Syntax Highlighter</title><content type='html'>I've just installed Google's &lt;a href="http://code.google.com/p/syntaxhighlighter/"&gt;Syntax Highlighter&lt;/a&gt;. This javascript allows you to highlight codes without formatting it manually.&lt;br /&gt;&lt;br /&gt;To use, simply do&lt;br /&gt;&lt;br /&gt;&amp;lt;pre name="code" class="language"&gt;&lt;br /&gt;...some code here...&lt;br /&gt;&amp;lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A wiki of usage can be found &lt;a href="http://code.google.com/p/syntaxhighlighter/wiki/Usage"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;NOTE: One important thing to watch out for is opening triangular bracket &lt;. It must be replaced with an HTML equivalent of &amp;lt; in all cases. Failure to do won't break the page, but might break the source code displayed.&lt;br /&gt;&lt;br /&gt;Here's a list of supported languages and their aliases:&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; &lt;strong&gt;Language&lt;/strong&gt; &lt;/td&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; &lt;strong&gt;Aliases&lt;/strong&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; C++ &lt;/td&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; &lt;tt&gt;cpp&lt;/tt&gt;, &lt;tt&gt;c&lt;/tt&gt;, &lt;tt&gt;c++&lt;/tt&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; C# &lt;/td&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; &lt;tt&gt;c#&lt;/tt&gt;, &lt;tt&gt;c-sharp&lt;/tt&gt;, &lt;tt&gt;csharp&lt;/tt&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; CSS &lt;/td&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; &lt;tt&gt;css&lt;/tt&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; Delphi &lt;/td&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; &lt;tt&gt;delphi&lt;/tt&gt;, &lt;tt&gt;pascal&lt;/tt&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; Java &lt;/td&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; &lt;tt&gt;java&lt;/tt&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; Java Script &lt;/td&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; &lt;tt&gt;js&lt;/tt&gt;, &lt;tt&gt;jscript&lt;/tt&gt;, &lt;tt&gt;javascript&lt;/tt&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; PHP &lt;/td&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; &lt;tt&gt;php&lt;/tt&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; Python &lt;/td&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; &lt;tt&gt;py&lt;/tt&gt;, &lt;tt&gt;python&lt;/tt&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; Ruby &lt;/td&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; &lt;tt&gt;rb&lt;/tt&gt;, &lt;tt&gt;ruby&lt;/tt&gt;, &lt;tt&gt;rails&lt;/tt&gt;, &lt;tt&gt;ror&lt;/tt&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; Sql &lt;/td&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; &lt;tt&gt;sql&lt;/tt&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; VB &lt;/td&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; &lt;tt&gt;vb&lt;/tt&gt;, &lt;tt&gt;vb.net&lt;/tt&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; XML/HTML &lt;/td&gt;&lt;td style="border: 1px solid rgb(170, 170, 170); padding: 5px;"&gt; &lt;tt&gt;xml&lt;/tt&gt;, &lt;tt&gt;html&lt;/tt&gt;, &lt;tt&gt;xhtml&lt;/tt&gt;, &lt;tt&gt;xslt&lt;/tt&gt; &lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-9006792435232554089?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/9006792435232554089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=9006792435232554089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/9006792435232554089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/9006792435232554089'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/10/syntax-highlighter.html' title='Syntax Highlighter'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-3164406366320864172</id><published>2007-10-19T17:36:00.000+10:00</published><updated>2007-10-20T13:16:45.196+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='base64'/><category scheme='http://www.blogger.com/atom/ns#' term='images'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='gruff'/><title type='text'>Converting binary data to image in HTML</title><content type='html'>Let's say you were making an Ajax request for an image, and the response is a base64 encoded string which you want to use to create an image in HTML. A way of doing so is to use "&lt;span style="font-style:italic;"&gt;data:image/png;base64,&lt;/span&gt;" at the start of your image source, and append the encoded string.&lt;br /&gt;&lt;br /&gt;For example,&lt;br /&gt;&lt;br /&gt;&amp;lt;img='data:image/&amp;lt;image format&gt;;base64,&amp;lt;encoded string&gt;' /&gt;&lt;br /&gt;&lt;br /&gt;This will correctly render the encoded string into an image that can be displayed on the browser.&lt;br /&gt;&lt;br /&gt;Using Gruff to create graphs, the Gruff::Base has a method called &lt;span style="font-style:italic;"&gt;to_blob&lt;/span&gt; which draws the graph and returns the graph as a rendered binary. Simply return a base64 encoded version of it to the Ajax call to be processed.&lt;br /&gt;&lt;pre name="code" class="ruby"&gt;&lt;br /&gt;# Controller&lt;br /&gt;g = Gruff::Pie.new(300)&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;render :text =&gt; encode64(g.to_blob)&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-3164406366320864172?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/3164406366320864172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=3164406366320864172' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/3164406366320864172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/3164406366320864172'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/10/converting-binary-data-to-image-in-html.html' title='Converting binary data to image in HTML'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-1697404569437998605</id><published>2007-10-19T02:35:00.000+10:00</published><updated>2007-10-20T13:19:57.652+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='prototype'/><category scheme='http://www.blogger.com/atom/ns#' term='menus'/><title type='text'>Creating hover menus and closing them with Javascript + Prototype</title><content type='html'>First of all I created an empty div that will be used to contain my menu contents. For example,&lt;br /&gt;&lt;br /&gt;&amp;lt;div id="accesslist" class="accessmenu"&gt;Hello there!&amp;lt;/div&gt;&lt;br /&gt;&lt;br /&gt;With CSS,&lt;br /&gt;&lt;pre name="code" class="css"&gt;&lt;br /&gt;div.accessmenu {&lt;br /&gt;    position: absolute;&lt;br /&gt;    background: #F5F5F5;&lt;br /&gt;    border: 1px solid #888;&lt;br /&gt;    margin: 0;&lt;br /&gt;    padding: 3px;&lt;br /&gt;    visibility: hidden;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now it's up to you how you want to position the menu, but this is how I did it with Javascript.&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;$('accesslist').style.left = Position.positionedOffset(el)[0];&lt;br /&gt;$('accesslist').style.top = Position.positionedOffset(el)[1] + el.offsetHeight;&lt;br /&gt;$('accesslist').style.zIndex = 10;&lt;br /&gt;$('accesslist').style.visibility = 'visible';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The code above will place the div directly below element 'el'. Now the problem is how do you close the menu when you click away from it? A simple solution can be found using prototype's &lt;a href="http://www.prototypejs.org/api/event" target="_blank"&gt;Event class&lt;/a&gt;.&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;Event.observe(document.body, 'click', function(e) {&lt;br /&gt;    if (!Element.descendantOf(Event.element(e), $('accesslist')))&lt;br /&gt;        $('accesslist').style.visibility = 'hidden';&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;What this code does is that it observes 'click' events that occur on the document.body. The third function parameter checks if the event click happened on my menu element's descendants (i.e. down the tree hierarchy). If not, then close the menu.&lt;br /&gt;&lt;br /&gt;Simple.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-1697404569437998605?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/1697404569437998605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=1697404569437998605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/1697404569437998605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/1697404569437998605'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/10/creating-hover-menus-and-closing-them.html' title='Creating hover menus and closing them with Javascript + Prototype'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-430031312039105765</id><published>2007-10-18T00:45:00.000+10:00</published><updated>2007-10-18T00:53:28.433+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Foreign Key in MySQL Error #1452 and #1216</title><content type='html'>This has caused me 3-4 hours of time wasting and it is so bloody simple! I can't believe after googling for so many hours that I could not find something that could solve this problem for me.&lt;br /&gt;&lt;br /&gt;If you've came across an error #1452 when trying to add a foreign key and you have existing entries in the table, you need to make sure there are valid values in all entries in the foreign key column before creating a foreign key.&lt;br /&gt;&lt;br /&gt;So what I did was do a zero fill on the foreign key column. Sweet I thought. This should fix it. After trying to create the foreign key again, I get an error #1216. Turns out that the values in the foreign key column must be valid (i.e. correspond to a valid id to referenced table) and the zero fill obviously didn't help because I dont have any id with 0.&lt;br /&gt;&lt;br /&gt;Once you've entered valid values in, the foreign key creation should work! Make sure that the column in the referenced table is a primary key or an index and foreign key column is an index before proceeding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-430031312039105765?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/430031312039105765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=430031312039105765' title='41 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/430031312039105765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/430031312039105765'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/10/foreign-key-in-mysql-error-1452-and.html' title='Foreign Key in MySQL Error #1452 and #1216'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>41</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-926982748075089743</id><published>2007-10-17T00:19:00.000+10:00</published><updated>2007-10-17T00:24:28.777+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='user interface'/><title type='text'>Progress Update</title><content type='html'>Have been working on budgeting functionalities this past couple of weeks. Seems like I've managed to get these things working though it may require further testing.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Transactions - Add/Edit/Delete (admin, member, guest)&lt;/li&gt;&lt;li&gt;Jobs - Add/Edit/Delete (admin) [job description might still need some work]&lt;/li&gt;&lt;li&gt;Projects - Add (all) [need to do edit and delete]&lt;/li&gt;&lt;li&gt;Members - Add/Delete (admin) [need to do permission editing]&lt;/li&gt;&lt;/ol&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eTWJkaJUnJY/RxTJcXde3EI/AAAAAAAAFiM/bgcv-CBxGtY/s1600-h/screenshot.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_eTWJkaJUnJY/RxTJcXde3EI/AAAAAAAAFiM/bgcv-CBxGtY/s400/screenshot.JPG" alt="" id="BLOGGER_PHOTO_ID_5121940165398289474" border="0" /&gt;&lt;/a&gt;All this is done using javascript and ajax. A lot of fiddling around but its getting there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-926982748075089743?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/926982748075089743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=926982748075089743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/926982748075089743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/926982748075089743'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/10/progress-update.html' title='Progress Update'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_eTWJkaJUnJY/RxTJcXde3EI/AAAAAAAAFiM/bgcv-CBxGtY/s72-c/screenshot.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-4227569535330472308</id><published>2007-10-12T17:35:00.001+10:00</published><updated>2007-10-12T17:39:12.081+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphs'/><category scheme='http://www.blogger.com/atom/ns#' term='tax'/><category scheme='http://www.blogger.com/atom/ns#' term='gruff'/><title type='text'>Tax function</title><content type='html'>Functionality for the tax function is complete. Graphing and reporting is coming to completion:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_9UtMC176_Ps/Rw8kO-jQXsI/AAAAAAAAAAU/1rou5PddPNg/s1600-h/preview.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_9UtMC176_Ps/Rw8kO-jQXsI/AAAAAAAAAAU/1rou5PddPNg/s320/preview.JPG" alt="" id="BLOGGER_PHOTO_ID_5120351141071183554" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_9UtMC176_Ps/Rw8kXujQXtI/AAAAAAAAAAc/mWicvtStrOU/s1600-h/preview2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_9UtMC176_Ps/Rw8kXujQXtI/AAAAAAAAAAc/mWicvtStrOU/s320/preview2.JPG" alt="" id="BLOGGER_PHOTO_ID_5120351291395038930" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-4227569535330472308?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/4227569535330472308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=4227569535330472308' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/4227569535330472308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/4227569535330472308'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/10/tax-function.html' title='Tax function'/><author><name>marcusAurelius</name><uri>http://www.blogger.com/profile/11870403244787975093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_9UtMC176_Ps/Rw8kO-jQXsI/AAAAAAAAAAU/1rou5PddPNg/s72-c/preview.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-9177127972149567778</id><published>2007-10-02T17:07:00.000+10:00</published><updated>2007-10-03T12:48:13.132+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphs'/><category scheme='http://www.blogger.com/atom/ns#' term='images'/><category scheme='http://www.blogger.com/atom/ns#' term='gruff'/><category scheme='http://www.blogger.com/atom/ns#' term='rmagick'/><title type='text'>ImageMagick / RMagick / Gruff  -  Installation</title><content type='html'>Installing RMagick is known to be a complex procedure, especially with an InstantRails environment. The first step is to download the RMagick-win32 package from the following location:&lt;br /&gt;&lt;a href="http://rubyforge.org/frs/download.php/24863/RMagick-1.14.1_IM-6.3.0-7-Q8-2.zip"&gt;&lt;br /&gt;http://rubyforge.org/frs/download.php/24863/RMagick-1.14.1_IM-6.3.0-7-Q8-2.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Very nice...&lt;br /&gt;&lt;br /&gt;The standard procedure, found in the file called README.html in the above archive, should generally be followed. However, the following modifications will need to be inserted for the installation to work with the InstantRails environment and to obtain the functionality required for FoR:&lt;br /&gt;&lt;br /&gt;--------------------------------------&lt;br /&gt;set HTTP_PROXY=http://proxy:port #(check for proxy and port in firefox)&lt;br /&gt;&lt;br /&gt;gem update --system -y&lt;br /&gt;&lt;br /&gt;gem install rmagick --local&lt;br /&gt;&lt;br /&gt;gem install gruff -y&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;add to environment.rb -&gt; require 'rubygems'&lt;br /&gt;&lt;br /&gt;#also add "require 'RMagick'" to necessary controllers&lt;br /&gt;&lt;br /&gt;#also add "require 'gruff'" in the controllers which are going to create gruff graphs&lt;br /&gt;--------------------------------------&lt;br /&gt;&lt;br /&gt;The following links may also be of use during installation:&lt;br /&gt;&lt;br /&gt;http://docs.rubygems.org/read/chapter/3#page70&lt;br /&gt;http://nubyonrails.com/pages/gruff&lt;br /&gt;http://geoffreygrosenbach.com/projects/show/5&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-9177127972149567778?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/9177127972149567778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=9177127972149567778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/9177127972149567778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/9177127972149567778'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/10/imagemagick-rmagick-gruff-installation.html' title='ImageMagick / RMagick / Gruff  -  Installation'/><author><name>marcusAurelius</name><uri>http://www.blogger.com/profile/11870403244787975093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-8288316757818861819</id><published>2007-09-17T22:35:00.000+10:00</published><updated>2007-09-18T22:56:57.718+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='script.aculo.us'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby helper'/><category scheme='http://www.blogger.com/atom/ns#' term='sortable'/><category scheme='http://www.blogger.com/atom/ns#' term='dragdrop'/><category scheme='http://www.blogger.com/atom/ns#' term='effects'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Let's play with Sortables</title><content type='html'>Ok, this seriously took me such a long time to figure out. I'm trying to create sortable menu customisation, like the one you see in your personalised Google homepage. The tutorial I followed was the one provided by &lt;a href="http://wiki.script.aculo.us/scriptaculous/show/Sortable.create"&gt;scrtip.aculo.us&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;First of all, you have to create a &lt;a href="http://wiki.script.aculo.us/scriptaculous/show/BlockElements"&gt;block container&lt;/a&gt;. In this case I used a div element. Its child div elements are the ones that I want to move around, and sort according to the user's preference.&lt;br /&gt;&lt;br /&gt;For example,&lt;br /&gt;&lt;br /&gt;&amp;lt;div id="container"&gt;&lt;br /&gt;&amp;lt;div id="left" style="float:left;width:50%;background:red;"&gt;Left Div&amp;lt;/div&gt;&lt;br /&gt;&amp;lt;div id="right" style="float:right;width:50%;background:green;"&gt;Right Div&amp;lt;/div&gt;&lt;br /&gt;&amp;lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="container"&gt;&lt;div id="left" style="background: red none repeat scroll 0% 50%; float: left; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;Left Div&lt;/div&gt;&lt;div id="right" style="background: green none repeat scroll 0% 50%; float: right; width: 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;Right Div&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This displays the two child divs next to each other, like a table format but without using table tags. Using Rails helper,&lt;br /&gt;&lt;br /&gt;&lt;%= sortable_element "content_container", :tag =&gt; "DIV", :constraint =&gt; false %&gt;&lt;br /&gt;&lt;br /&gt;This specifies that the sortable list is the container which has lists in it. By default, the li tag is treated as the list, that is why you have to specify :tag =&gt; "DIV". The :constraint =&gt; false all allows free movement when dragging (default is vertical).&lt;br /&gt;&lt;br /&gt;After doing so, you'd think that it should all work perfectly. Not really to be exact. This bug caused me lots of trouble to figure out as I had no idea why it wasn't working. You would be able to drag the elements, but it just would not sort.&lt;br /&gt;&lt;br /&gt;Fiddling around for some time, I came across what the problem was. When the right div is sorted to the left, the css tells it to float right meaning the css is preventing the sorting from happening. In other words, when it is in the left position, it wants to float right. Obviously this is incorrect.&lt;br /&gt;&lt;br /&gt;So I changed the right div to float left, which will still keep the alignment correct. This solved the problem pretty much. However, you are only able to sort the elements from right to left, and not the other way around. I still can't figured out why and how to fix this.&lt;br /&gt;&lt;br /&gt;Try it out here,&lt;br /&gt;&lt;br /&gt;&lt;div id="sorting_div"&gt;&lt;div id="left1" style="background: red none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; float: left; width: 50%;"&gt;Left Div&lt;/div&gt;&lt;div id="right1" style="background: green none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; float: left; width: 50%;"&gt;Right Div&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;Sortable.create("sorting_div", {constraint: false, tag: "DIV"});&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;[edit date="18/09/07"]&lt;br /&gt;&lt;br /&gt;Hmm, a bloody weird discovery. Left to right actually works! It isn't as responsive as right to left though. Left to right is harder to sort, but if you position it kinda properly, it works.&lt;br /&gt;&lt;br /&gt;Weird.&lt;br /&gt;&lt;br /&gt;[/edit]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-8288316757818861819?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/8288316757818861819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=8288316757818861819' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/8288316757818861819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/8288316757818861819'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/09/lets-play-with-sortables.html' title='Let&apos;s play with Sortables'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-7162025044924766531</id><published>2007-09-17T22:32:00.000+10:00</published><updated>2007-09-18T22:57:52.464+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='render'/><category scheme='http://www.blogger.com/atom/ns#' term='partials'/><title type='text'>Rendering Global Partials</title><content type='html'>Just a quick note to point out. If you want to render a partial thats available globally (by default its local), all you have to do is create a folder in &lt;span style="font-style: italic;"&gt;..\app\views&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Assuming we created a folder called &lt;span style="font-style: italic;"&gt;shared&lt;/span&gt; and a partial called &lt;span style="font-style: italic;"&gt;_menu.rhtml&lt;/span&gt;, you can then access it by doing,&lt;br /&gt;&lt;span style="font-style: italic;"&gt;render :partial =&gt; "shared/menu"&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Simple.&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-7162025044924766531?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/7162025044924766531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=7162025044924766531' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/7162025044924766531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/7162025044924766531'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/09/rendering-global-partials.html' title='Rendering Global Partials'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-3489938366046656595</id><published>2007-09-17T14:56:00.000+10:00</published><updated>2007-09-17T15:10:19.178+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><title type='text'>Dealing with JavaScript Object Notation (JSON)</title><content type='html'>Ruby on Rails provides an easy way to render JavaScript Object Notation (JSON) without actually having to deal with itty gritty details of forming the object literal.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;# Controller&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;render :json =&gt; { :name =&gt; "Danny", :title =&gt; "Mr" }.to_json&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;produces&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{  name: 'Danny', title: 'Mr' }&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Once you have done so, you can create an object in javascript by running&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;var person = eval("("  + request.responseText) + ")");&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;You can then access the attributes by going &lt;span style="font-style: italic;"&gt;person.name&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;person.title&lt;/span&gt; which returns "Danny" and "Mr", as expected.&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-3489938366046656595?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/3489938366046656595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=3489938366046656595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/3489938366046656595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/3489938366046656595'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/09/dealing-with-javascript-object-notation.html' title='Dealing with JavaScript Object Notation (JSON)'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-2210698274440317811</id><published>2007-09-15T01:39:00.000+10:00</published><updated>2007-09-15T02:03:00.086+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='user interface'/><title type='text'>Thesis Update!</title><content type='html'>It's been a busy past few weeks, getting familiar with the prototype and scriptaculous javascript framework but it has paid off. Been looking into user interface design where there can be more interaction with the user.&lt;br /&gt;&lt;br /&gt;What I've been trying to do is to try and simulate a 'desk' environment, where you would normally use your hands to move things around depending on what you want to do. What that means is to make things draggable, collapsible, expandable etc.&lt;br /&gt;&lt;br /&gt;As you can see below, I've added drop down menus for menu selection. I've also made the right hand navigation bar draggable, as well as the main content in the middle. Can't really see it from a picture I guess. The main content and navigation bars are also expandable and collapsible.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eTWJkaJUnJY/Ruqs6yKkzZI/AAAAAAAAEtY/Lv625GmkqMs/s1600-h/drop+down+menu.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_eTWJkaJUnJY/Ruqs6yKkzZI/AAAAAAAAEtY/Lv625GmkqMs/s400/drop+down+menu.jpg" alt="" id="BLOGGER_PHOTO_ID_5110086853103766930" border="0" /&gt;&lt;/a&gt;I've also rethought the design of performing actions that does not require a lot of data loading. In other words, utilizing AJAX to perform actions without really leaving the page which means no refresh.&lt;br /&gt;&lt;br /&gt;Created a hovering div that disables the content below, and displays the content above it depending on what type of action it is. I used scriptaculous' effects (Fade and Switchoff) to display and close the hover div.&lt;br /&gt;&lt;br /&gt;I've only tested this on a Firefox environment as the browser has great plugin tools (Firebug) which makes debugging JavaScript, HTML and CSS a walk in the park.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eTWJkaJUnJY/RuqslyKkzVI/AAAAAAAAEs4/Y_mkrz0lSEM/s1600-h/edit+profile.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_eTWJkaJUnJY/RuqslyKkzVI/AAAAAAAAEs4/Y_mkrz0lSEM/s400/edit+profile.jpg" alt="" id="BLOGGER_PHOTO_ID_5110086492326514002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eTWJkaJUnJY/RuqsrSKkzWI/AAAAAAAAEtA/Y2HsFwvn62w/s1600-h/add+project.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_eTWJkaJUnJY/RuqsrSKkzWI/AAAAAAAAEtA/Y2HsFwvn62w/s400/add+project.jpg" alt="" id="BLOGGER_PHOTO_ID_5110086586815794530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eTWJkaJUnJY/RuqwaSKkzaI/AAAAAAAAEtg/_9azIHPXGLs/s1600-h/add+job.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_eTWJkaJUnJY/RuqwaSKkzaI/AAAAAAAAEtg/_9azIHPXGLs/s400/add+job.jpg" alt="" id="BLOGGER_PHOTO_ID_5110090692804529570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eTWJkaJUnJY/Ruqs1iKkzYI/AAAAAAAAEtQ/6IxlRSnQZaY/s1600-h/add+member.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_eTWJkaJUnJY/Ruqs1iKkzYI/AAAAAAAAEtQ/6IxlRSnQZaY/s400/add+member.jpg" alt="" id="BLOGGER_PHOTO_ID_5110086762909453698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Over the next couple of weeks I plan to add drag &amp;amp; drop features which will allow more user interaction by using the mouse which in return, simulates using a hand to do stuff. Hopefully there will be minimal user input where it isn't necessary.&lt;br /&gt;&lt;br /&gt;Hopefully I'll have the chance to post up how I did all these things soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-2210698274440317811?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/2210698274440317811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=2210698274440317811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/2210698274440317811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/2210698274440317811'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/09/thesis-update.html' title='Thesis Update!'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_eTWJkaJUnJY/Ruqs6yKkzZI/AAAAAAAAEtY/Lv625GmkqMs/s72-c/drop+down+menu.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-5978706733870919753</id><published>2007-09-05T13:40:00.000+10:00</published><updated>2007-10-23T00:29:53.146+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>JavaScript Validation</title><content type='html'>I've spent some time writing a validation framework for checking user text field inputs on the client-side.&lt;br /&gt;&lt;br /&gt;The parameters it takes are:&lt;br /&gt;function(valField, type, options) where &lt;span style="font-style: italic;"&gt;valField&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;type&lt;/span&gt; are required. &lt;span style="font-style: italic;"&gt;valField&lt;/span&gt; is the element to validate, and &lt;span style="font-style: italic;"&gt;type&lt;/span&gt; is a choice of ["required", "exists", "update", "password"].&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Options&lt;/span&gt; is optional and is an object. In the &lt;span style="font-style: italic;"&gt;options&lt;/span&gt; object, it takes these attributes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;infoField&lt;/span&gt;: element - the element to display messages to the user,&lt;br /&gt;&lt;span style="font-style: italic;"&gt;repeatField&lt;/span&gt;: element - the element which is used to repeat (like repeat password or email),&lt;br /&gt;&lt;span style="font-style: italic;"&gt;required&lt;/span&gt;: boolean - specifies whether input is required (defaults to true),&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ajax&lt;/span&gt;: boolean - specifies whether Ajax is used to communicate to the server (defaults to false),&lt;br /&gt;&lt;span style="font-style: italic;"&gt;url&lt;/span&gt;: string - url for Ajax call (only works if ajax: true),&lt;br /&gt;&lt;span style="font-style: italic;"&gt;column&lt;/span&gt;: string - the column in the table (only works if ajax: true),&lt;br /&gt;&lt;span style="font-style: italic;"&gt;idkey&lt;/span&gt;: string - the id parameter (only works if ajax: true)&lt;br /&gt;&lt;br /&gt;Examples of different &lt;span style="font-style: italic;"&gt;types&lt;/span&gt; of usage:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;new Validator(this, 'exists', { infoField: $('project_name_span'), ajax: true, idkey: $('user_id').value , column: 'name', url: '/project/check_exists' });&lt;/li&gt;&lt;li&gt;new Validator(this, 'required', { infoField: $('project_name_span') });&lt;/li&gt;&lt;li&gt;new Validator(this, 'update', { infoField: $('user_lname_span'), ajax: true, column: 'lname', idkey: $('user_id').value, url: '/user/ajax_update' });&lt;/li&gt;&lt;li&gt;new Validator(this, 'password', { infoField: $('user_pwd_span') });&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-5978706733870919753?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/5978706733870919753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=5978706733870919753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/5978706733870919753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/5978706733870919753'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/09/javascript-validation.html' title='JavaScript Validation'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-1152167491581635936</id><published>2007-08-24T16:22:00.000+10:00</published><updated>2007-08-24T16:26:13.945+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='planning'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Updated Database Design</title><content type='html'>As promised.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eTWJkaJUnJY/Rs55NEWdfDI/AAAAAAAAEJQ/zpBm0VIiYrA/s1600-h/Entity+Relationship+Diagram.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_eTWJkaJUnJY/Rs55NEWdfDI/AAAAAAAAEJQ/zpBm0VIiYrA/s400/Entity+Relationship+Diagram.jpg" alt="" id="BLOGGER_PHOTO_ID_5102148693270559794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;h2 style="line-height: normal;"&gt;&lt;span style="font-family: Calibri;" lang="EN-US"&gt;Table Definition&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;users&lt;/span&gt;&lt;/b&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;table class="MsoNormalTable" style="border: medium none ; width: 439px; border-collapse: collapse; height: 153px;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Column Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Data Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Constraints&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -36pt; line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;id&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;Primary Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;handle&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;varchar(10)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;Unique Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;fname&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;varchar(15)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;lname&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;varchar(15)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;password_hash&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;varchar(128)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;password_salt&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;varchar(8)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;email&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;varchar(45)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;    &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;handle&lt;/i&gt; – name of the account&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;fname&lt;/i&gt; – first name of user&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;lname&lt;/i&gt; – last name of user&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;password_hash&lt;/i&gt; – SHA512 digest of user’s plaintext password&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;password_salt&lt;/i&gt; – 8 bit randomly generated salt&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;email&lt;/i&gt; – email of user&lt;/p&gt; &lt;br /&gt; &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;members&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoNormalTable" style="border: medium none ; border-collapse: collapse; width: 435px; height: 114px;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Column Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Data Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Constraints&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;id&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;Primary   Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;project_id&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;Foreign   Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;user_id&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;Foreign   Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;permission&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;varchar(10)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;NOT   NULL, Default “guest”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;    &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;id&lt;/span&gt;&lt;/i&gt;&lt;span style="" lang="EN-US"&gt; – primary key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;project_id&lt;/span&gt;&lt;/i&gt;&lt;span style="" lang="EN-US"&gt; – project the member belongs to&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;user_id&lt;/span&gt;&lt;/i&gt;&lt;span style="" lang="EN-US"&gt; – user that has access to the project&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;permission&lt;/span&gt;&lt;/i&gt;&lt;span style="" lang="EN-US"&gt; – the permission level (admin, member, guest)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;b style=""&gt;projects&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoNormalTable" style="border: medium none ; border-collapse: collapse; width: 434px; height: 95px;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Column Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Data Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Constraints&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;id&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;Primary Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;varchar(30)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;Primary Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;description&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;varchar(100)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;NOT NULL, Default “”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;id&lt;/i&gt; – primary key&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;name&lt;/span&gt;&lt;/i&gt;&lt;span style="" lang="EN-US"&gt; – name of the project&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;description &lt;/span&gt;&lt;/i&gt;– description of the project&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;b style=""&gt;jobs&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoNormalTable" style="border: medium none ; border-collapse: collapse; width: 440px; height: 132px;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Column Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Data Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Constraints&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;id&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;Primary Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;project_id&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;Foreign Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;varchar(30)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;description&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;varchar(100)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style=""&gt;NOT NULL, Default “”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;    &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;id&lt;/i&gt; – primary key&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;project_id&lt;/span&gt;&lt;/i&gt;&lt;span style="" lang="EN-US"&gt; – name of the project it belongs to&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;name &lt;/span&gt;&lt;/i&gt;&lt;span style="" lang="EN-US"&gt;– name of the job&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;description &lt;/span&gt;&lt;/i&gt;– description of the job&lt;/p&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;etransactions&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoNormalTable" style="border: medium none ; border-collapse: collapse; width: 437px; height: 263px;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Column Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Data Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="text-align: center; line-height: normal;" align="center"&gt;&lt;b style=""&gt;&lt;span style="" lang="EN-US"&gt;Constraints&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;id&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;Primary   Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;date&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;date&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;NOT   NULL, Default Timestamp&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;job_id&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;Foreign   Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;counterparty&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;varchar(30)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;NOT   NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;category&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;varchar(30)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;NOT   NULL, Default “Other”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;flow&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;varchar(10)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;NOT   NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;created_by&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;Foreign   Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;description&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;varchar(100)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;Default   “”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;amount&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;decimal(9,2)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 159.6pt;" valign="top" width="213"&gt;   &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;span style="" lang="EN-US"&gt;NOT   NULL, Unsigned&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;    &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;id&lt;/span&gt;&lt;/i&gt;&lt;span style="" lang="EN-US"&gt; – primary key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;&lt;span style="" lang="EN-US"&gt;date&lt;/span&gt;&lt;/i&gt; – date of the transaction&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;job_id &lt;/i&gt;– the job which the transaction belongs to&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;counterparty&lt;/i&gt; – the transaction made to&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;category&lt;/i&gt; – the category of the transaction&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;flow&lt;/i&gt; – inflow or outflow&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;created_by&lt;/i&gt; – the user who created the transaction&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: normal;"&gt;&lt;i style=""&gt;description &lt;/i&gt;– description of the transaction&lt;/p&gt;  &lt;i style=""&gt;&lt;span style="font-size: 11pt; line-height: 115%; font-family: Calibri;"&gt;amount – the amount of the transaction&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i style=""&gt;&lt;span style="line-height: 115%;font-family:Calibri;font-size:11;"  &gt;&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-1152167491581635936?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/1152167491581635936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=1152167491581635936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/1152167491581635936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/1152167491581635936'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/08/updated-database-design.html' title='Updated Database Design'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_eTWJkaJUnJY/Rs55NEWdfDI/AAAAAAAAEJQ/zpBm0VIiYrA/s72-c/Entity+Relationship+Diagram.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-3229514391804148712</id><published>2007-08-23T18:16:00.000+10:00</published><updated>2007-10-23T00:32:43.608+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='controller'/><title type='text'>Bug #2: Problem with updating user object</title><content type='html'>The bug was found in the model side as I was trying to update the user object by doing:&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;@user = User.update(params[:id], {&lt;br /&gt;  :fname =&gt; params[:user][:fname],&lt;br /&gt;  :lname =&gt; params[:user][:lname],&lt;br /&gt;  :email =&gt; params[:user][:email] })&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Whenever I tried to update, I'd get this error:&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;ArgumentError in UserController#update wrong number of arguments (2 for 4)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Could not figure out what was wrong with it from googling. So once again I decided to hop onto my trusty real-time help solution: irc. I got suggested to try this method of updating:&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;@user = User.find(params[:id])&lt;br /&gt;@user.update_attributes({&lt;br /&gt;:fname =&gt; params[:user][:fname],&lt;br /&gt;:lname =&gt; params[:user][:lname],&lt;br /&gt;:email =&gt; params[:user][:email]}) if @user != nil&lt;br /&gt;&lt;/pre&gt;This seemed to work perfectly. I still haven't figured out what was the problem with the other one. Perhaps its because I didn't provide the other two parameters that's in the table definition: &lt;span style="font-style: italic;"&gt;password_hash&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;password_salt&lt;/span&gt;. I'm not sure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-3229514391804148712?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/3229514391804148712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=3229514391804148712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/3229514391804148712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/3229514391804148712'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/08/bug-2-problem-with-updating-user-object.html' title='Bug #2: Problem with updating user object'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-5167117611839052650</id><published>2007-08-23T18:03:00.000+10:00</published><updated>2007-08-23T18:33:16.797+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='controller'/><category scheme='http://www.blogger.com/atom/ns#' term='reserved name'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Bug #1: AJAX checking in certain actions</title><content type='html'>So I came across a bug as I was testing my newly written code to check whether handles and usernames have already been registered in the database. This worked fine when I want to sign up. However, when I want to update a user's profile, it would not let me update my profile with my existing email because the email already exists in the database. Pretty obvious that there's a bug there.&lt;br /&gt;&lt;br /&gt;So when I did my AJAX checking, I had to determine what type of action I was doing (i.e. signing up, updating...). I had a parameter called &lt;span style="font-style: italic;"&gt;action&lt;/span&gt; which would be sent in the query string, telling the controller what kind of action I am doing. The problem is, whenever I did that, my code for some reason could not recognise what kind of action I'm performing. When I printed out &lt;span style="font-style: italic;"&gt;params[:action]&lt;/span&gt;, it gave me the controller's method name.&lt;br /&gt;&lt;br /&gt;Out of frustration, I hopped onto irc to get some real-time help. Turns out that &lt;span style="font-style: italic;"&gt;action&lt;/span&gt; was a reserved name used for routing purposes, which determines which method of the controller you're calling to. D'oh! Obviously I should've known this as my code is scattered with &lt;span style="font-style: italic;"&gt;:action =&gt; &lt;span style="font-style: italic;"&gt;"something"&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;So I changed the parameter name to &lt;span style="font-style: italic;"&gt;actiontype&lt;/span&gt; and it worked perfectly!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-5167117611839052650?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/5167117611839052650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=5167117611839052650' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/5167117611839052650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/5167117611839052650'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/08/bug-1-ajax-checking-in-certain-actions.html' title='Bug #1: AJAX checking in certain actions'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-1490367639042997214</id><published>2007-08-21T00:11:00.000+10:00</published><updated>2007-08-23T18:44:14.882+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='controller'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='form validation'/><title type='text'>Form validation with AJAX</title><content type='html'>Finally managed to utilise javascript and ajax to do client-side form checking. I am using javascript instead of rjs because I feel like I have more control over what I'm doing and also I'm more familiar with the javascript syntax. Since &lt;a href="http://www.prototypejs.org/"&gt;prototype framework&lt;/a&gt; is included as part of the javascript defaults in RoR, I will be using that framework too.&lt;br /&gt;&lt;br /&gt;Its got some pretty handy things like accessing DOM elements using &lt;span style="font-style: italic;"&gt;$('element id')&lt;/span&gt;, so you don't have to deal with &lt;span style="font-style: italic;"&gt;document.getElementId&lt;/span&gt; etc. The framework also provides a cool Ajax object which handles all the nasty &lt;span style="font-style: italic;"&gt;readystates&lt;/span&gt; that you will come across if you use the conventional way of doing Ajax.&lt;br /&gt;&lt;br /&gt;Here is a snippet of the client-side code:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;new Ajax.Request("/user/check_exists",&lt;br /&gt;{&lt;br /&gt;parameters: params + "=" + textField.value,             &lt;br /&gt;onLoading: showMsg(infoField, "&amp;lt;img src="../../images/ajax/ajax-loader.gif" border="0" /&amp;gt; Checking if available..."),&lt;br /&gt;      onSuccess: function(request) {&lt;br /&gt;          if (request.responseText)&lt;br /&gt;          {&lt;br /&gt;              showMsg(infoField, request.responseText);&lt;br /&gt;              textField.className = "fail";&lt;br /&gt;              textField.focus();&lt;br /&gt;          }&lt;br /&gt;          else&lt;br /&gt;          {&lt;br /&gt;              showMsg(infoField, "");&lt;br /&gt;              textField.className = "success";                 &lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;  });&lt;/blockquote&gt;Here is a snippet of the server-side code:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;def check_exists&lt;br /&gt;  if params[:handle]&lt;br /&gt;      @handle_exists = User.find(:first, :conditions =&gt; [ "handle = ?", params[:handle] ])&lt;br /&gt;      if @handle_exists == nil&lt;br /&gt;          render :text =&gt; ""&lt;br /&gt;      else&lt;br /&gt;          render :text =&gt; "Username is taken. Please choose another."&lt;br /&gt;      end&lt;br /&gt;  elsif params[:email]&lt;br /&gt;      @email_exists = User.find(:first, :conditions =&gt; [ "email = ?", params[:email] ])&lt;br /&gt;      if @email_exists == nil&lt;br /&gt;          render :text =&gt; ""&lt;br /&gt;      else&lt;br /&gt;          render :text =&gt; "This email is registered. Please choose another."&lt;br /&gt;      end&lt;br /&gt;  end&lt;br /&gt;end&lt;/blockquote&gt;Sorry about the indentations if they don't come out correctly. For some reason this current blogger layout strips any unnecessary whitespaces.&lt;br /&gt;&lt;br /&gt;Here are some screen shots of what I've done today. You will notice I used a little CSS to make things look nicer.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eTWJkaJUnJY/Rsmj0UWdfBI/AAAAAAAAEJA/ohEB1T6Dh7c/s1600-h/username_ajax.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_eTWJkaJUnJY/Rsmj0UWdfBI/AAAAAAAAEJA/ohEB1T6Dh7c/s400/username_ajax.jpg" alt="" id="BLOGGER_PHOTO_ID_5100788172185238546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eTWJkaJUnJY/RsmkP0WdfCI/AAAAAAAAEJI/bRqLvYkkrT4/s1600-h/form_validation.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_eTWJkaJUnJY/RsmkP0WdfCI/AAAAAAAAEJI/bRqLvYkkrT4/s400/form_validation.jpg" alt="" id="BLOGGER_PHOTO_ID_5100788644631641122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;[edit date="23-08-07"]&lt;br /&gt;&lt;br /&gt;I decided to move the business logic into the model and leave the transaction logic in the controller. More elegant and scalable I reckon.&lt;br /&gt;&lt;br /&gt;In the model:&lt;br /&gt;&lt;blockquote&gt;def self.attribute_exists?(attribute, value)&lt;br /&gt;       @attribute_exists = User.find(:first, :conditions =&gt; [ attribute + " = ?", value ])&lt;br /&gt;       if @attribute_exists != nil&lt;br /&gt;           return @attribute_exists&lt;br /&gt;       else&lt;br /&gt;           return nil&lt;br /&gt;       end&lt;/blockquote&gt;In the controller:&lt;br /&gt;&lt;blockquote&gt;def check_exists&lt;br /&gt;  if params[:actiontype] == "new"   &lt;br /&gt;   if params[:handle]&lt;br /&gt;    @user = User.attribute_exists?("handle", params[:handle])&lt;br /&gt;    if @user == nil&lt;br /&gt;     render :text =&gt; ""&lt;br /&gt;    else&lt;br /&gt;     render :text =&gt; "Username is taken. Please choose another."&lt;br /&gt;    end&lt;br /&gt;   elsif params[:email]&lt;br /&gt;    @user = User.attribute_exists?("email", params[:email])&lt;br /&gt;    if @user == nil&lt;br /&gt;     render :text =&gt; ""&lt;br /&gt;    else&lt;br /&gt;     render :text =&gt; "This email is registered. Please choose another."&lt;br /&gt;    end&lt;br /&gt;   end&lt;br /&gt;  elsif params[:actiontype] = "edit"   &lt;br /&gt;   @cur_user = User.find(params[:id])&lt;br /&gt;   &lt;br /&gt;   if params[:handle]&lt;br /&gt;    @user = User.attribute_exists?("handle", params[:handle])&lt;br /&gt;    if @user == nil || @user == @cur_user&lt;br /&gt;     render :text =&gt; ""&lt;br /&gt;    else&lt;br /&gt;     render :text =&gt; "Username is taken. Please choose another."&lt;br /&gt;    end    &lt;br /&gt;   elsif params[:email]&lt;br /&gt;    @user = User.attribute_exists?("email", params[:email])&lt;br /&gt;    if @user == nil || @user == @cur_user&lt;br /&gt;     render :text =&gt; ""&lt;br /&gt;    else&lt;br /&gt;     render :text =&gt; "This email is registered. Please choose another."&lt;br /&gt;    end&lt;br /&gt;   end&lt;br /&gt;  end&lt;br /&gt; end&lt;/blockquote&gt;A general rule of thumb is that code that requires communication with the database should be placed in the model side instead of the controller. The controller's job is to handle the user's request, retrieve data from the model and provide a response if necessary. The view's job is to handle presentation layer (i.e. HTML &amp; CSS) for viewing purposes (thus called the &lt;span style="font-style: italic;"&gt;View&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;[/edit]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-1490367639042997214?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/1490367639042997214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=1490367639042997214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/1490367639042997214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/1490367639042997214'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/08/form-validation-with-ajax.html' title='Form validation with AJAX'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_eTWJkaJUnJY/Rsmj0UWdfBI/AAAAAAAAEJA/ohEB1T6Dh7c/s72-c/username_ajax.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-436719829966751504</id><published>2007-08-20T22:53:00.001+10:00</published><updated>2007-08-20T22:54:35.545+10:00</updated><title type='text'>Ruby on Rails and J2EE: Is there room for both?</title><content type='html'>An interesting article about the comparison of Ruby on Rails and J2EE. Both web technologies use the MVC (Model, View, Controller) framework.&lt;br /&gt;&lt;br /&gt;You can read about it &lt;a href="http://www.ibm.com/developerworks/linux/library/wa-rubyonrails/"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-436719829966751504?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/436719829966751504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=436719829966751504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/436719829966751504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/436719829966751504'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/08/ruby-on-rails-and-j2ee-is-there-room.html' title='Ruby on Rails and J2EE: Is there room for both?'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-6363678769553845467</id><published>2007-08-17T16:22:00.000+10:00</published><updated>2007-08-17T16:28:47.119+10:00</updated><title type='text'>authentication feature</title><content type='html'>Please enable a forgot password feature - probably generating a temporary password to be emailed to user.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-6363678769553845467?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/6363678769553845467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=6363678769553845467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/6363678769553845467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/6363678769553845467'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/08/authentication-fetaure.html' title='authentication feature'/><author><name>Rodica</name><uri>http://www.blogger.com/profile/06843550611883790461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-217035582168872177</id><published>2007-08-17T16:02:00.000+10:00</published><updated>2007-10-23T00:33:50.084+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='autocomplete'/><title type='text'>auto-complete textfield</title><content type='html'>We have all seen the famous &lt;a href="http://www.google.com/webhp?complete=1&amp;hl=en"&gt;Google Suggestions&lt;/a&gt; which was one of the driving factors to the rapid growth of AJAX applications, using real-time auto-completion without refreshing your browser.&lt;br /&gt;&lt;br /&gt;Ruby on Rails makes this easy by using &lt;a href="http://script.aculo.us/"&gt;script.aculo.us&lt;/a&gt; javascript framework. A simple ajax auto-complete field only consists of two lines (with reference to the MVC framework):&lt;br /&gt;&lt;a href="http://www.google.com/webhp?complete=1&amp;amp;hl=en"&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;#View&lt;br /&gt;&lt;%= text_field_with_auto_complete :model, :attribute %&gt;&lt;br /&gt;&lt;br /&gt;#Controller&lt;br /&gt;auto_complete_for :model, :attribute&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Viola! You've got yourself a working auto-complete textfield.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eTWJkaJUnJY/RsU9-kWdfAI/AAAAAAAAEI4/zS_eX_1LBbg/s1600-h/auto_complete_textfield.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_eTWJkaJUnJY/RsU9-kWdfAI/AAAAAAAAEI4/zS_eX_1LBbg/s400/auto_complete_textfield.JPG" alt="" id="BLOGGER_PHOTO_ID_5099550298186021890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;&lt;/span&gt;&lt;code style="position: relative; bottom: 0px;"&gt;&lt;/code&gt;&lt;a href="http://www.google.com/webhp?complete=1&amp;amp;hl=en"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-217035582168872177?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/217035582168872177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=217035582168872177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/217035582168872177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/217035582168872177'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/08/auto-complete-textfield.html' title='auto-complete textfield'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_eTWJkaJUnJY/RsU9-kWdfAI/AAAAAAAAEI4/zS_eX_1LBbg/s72-c/auto_complete_textfield.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-8153916892104667998</id><published>2007-08-11T20:33:00.000+10:00</published><updated>2007-10-23T00:36:07.570+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='authentication'/><title type='text'>authentication</title><content type='html'>Currently working on FoR authentication by following this &lt;a href="http://wiki.rubyonrails.org/rails/pages/HowtoAuthenticate"&gt;tutorial&lt;/a&gt;. Most likely be using SHA1 for hashing the password to be stored/compared with the password on database. Something to note that SHA1's digest is 40 characters long.&lt;br /&gt;&lt;br /&gt;I have significantly modified the database table design with respect to the budgeting function. Will post an update on it later.&lt;br /&gt;&lt;br /&gt;[edit date="17-08-07"]&lt;br /&gt;&lt;br /&gt;Have got the authentication working now. The authentication checking is done in &lt;span style="font-style: italic;"&gt;application.rb&lt;/span&gt;  where all controllers have access to. Controllers that need protection simply need to add:&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&gt;&gt; before_filter :authenticate&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;You can also define which methods within the controller you want to exclude protection by adding this parameter to &lt;span style="font-style: italic;"&gt;before_filter&lt;/span&gt;:&lt;br /&gt;&gt;&gt; &lt;span style="font-style: italic;"&gt;before_filter: authenticate, :except =&gt; [ :method1, :method2]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The code for the authentication is:&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;def authenticate&lt;br /&gt; unless @session[:user]&lt;br /&gt;   @session[:return_to] = @request.request_uri&lt;br /&gt;   @session[:intended_action] = action_name&lt;br /&gt;   @session[:intended_controller ] = controller_name&lt;br /&gt;   flash[:notice] = 'Login required.';&lt;br /&gt;   redirect_to :action =&gt; "login",&lt;br /&gt;                        :controller =&gt; "user_admin"&lt;br /&gt;   return false&lt;br /&gt; end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I have a controller called &lt;span style="font-style: italic;"&gt;user_admin&lt;/span&gt; which handles all the user administrations (login, logout, sign up, etc.). The actual authentication logic is inside the User model. I also did a bit of research and found out that SHA-0 and &lt;a href="http://en.wikipedia.org/wiki/SHA-1"&gt;SHA-1&lt;/a&gt; can be broken through collision attack. Therefore, I decided to use SHA-512 (512 bit output) to hash the password and salted with a randomly generated 32-bit salt.&lt;br /&gt;&lt;br /&gt;The actual password and salt creation:&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;def password=(pass)&lt;br /&gt;   salt = [Array.new(6){rand(256).chr}.join].pack("m").chomp&lt;br /&gt;   self.password_salt, self.password_hash = salt, Digest::SHA512.hexdigest(pass + salt)&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So when you create a new user, to store the &lt;span style="font-style: italic;"&gt;password_hash&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;password_salt&lt;/span&gt;, simply do:&lt;br /&gt;&gt;&gt; @user.password = &lt;span style="font-style: italic;"&gt;password&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;where &lt;span style="font-style: italic;"&gt;password&lt;/span&gt; is the user's plaintext password.&lt;br /&gt;&lt;br /&gt;[/edit]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-8153916892104667998?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/8153916892104667998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=8153916892104667998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/8153916892104667998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/8153916892104667998'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/08/authentication.html' title='authentication'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-866579089277292731</id><published>2007-08-10T14:36:00.000+10:00</published><updated>2007-08-10T14:41:52.221+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='installation'/><title type='text'>configuring environments</title><content type='html'>Just finished installing and configuring&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Instant Rails&lt;/li&gt;&lt;li&gt;MySQL Tools&lt;/li&gt;&lt;li&gt;Notepad++&lt;/li&gt;&lt;li&gt;FileZilla&lt;/li&gt;&lt;li&gt;Smart Draw&lt;/li&gt;&lt;/ul&gt;on both machines (2A, 2B) in the EIE 417 labs.&lt;br /&gt;&lt;br /&gt;It seems like Instant Rails works well in Windows and that will be chosen platform to work on. Runs Mongrel behind Apache because apparently Apache is hard to configure and everything is done for you in Instant Rails.&lt;br /&gt;&lt;br /&gt;Chose Notepad++ as the ruby editor as well because Aptana doesn't have colour for ruby code (or at least I can't figure out how to do configure it).&lt;br /&gt;&lt;br /&gt;FileZilla will be used to transfer files for backup onto our diesel account.&lt;br /&gt;&lt;br /&gt;Smart Draw will be used to draw software diagrams.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-866579089277292731?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/866579089277292731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=866579089277292731' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/866579089277292731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/866579089277292731'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/08/configuring-environments.html' title='configuring environments'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-294215560256058985</id><published>2007-07-26T17:53:00.000+10:00</published><updated>2007-07-26T18:21:11.223+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='installation'/><title type='text'>Installing Ruby on Rails</title><content type='html'>Just downloaded &lt;a href="http://rubyforge.org/frs/download.php/17647/ruby185-24.exe"&gt;Ruby 1.8.5-24&lt;/a&gt; and &lt;a href="http://rubyforge.org/frs/download.php/20990/rubygems-0.9.4.zip"&gt;RubyGems 0.9.4&lt;/a&gt; (Ruby package manager). Installation was pretty easy as I followed the instructions found &lt;a href="http://www.rubyonrails.org/down"&gt;here&lt;/a&gt;. I also installed the recommended editor &lt;a href="http://www.radrails.org/download_rails_rdt.php"&gt;Aptana RadRails&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now just gotta figure out how it all works together...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-294215560256058985?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/294215560256058985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=294215560256058985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/294215560256058985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/294215560256058985'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/07/installing-ruby-on-rails.html' title='Installing Ruby on Rails'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-2740798924011642639</id><published>2007-07-23T16:48:00.000+10:00</published><updated>2007-07-23T17:11:21.978+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='planning'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Preliminary Database Design</title><content type='html'>Just spent a couple of hours with Marko doing a preliminary design of our database. Will look further into it and try to normalise it later on. Marko is meeting up with Rodica tomorrow to discuss about our computer/server arrangements. Most likely we'll be meeting up on Thursday to begin installation and configurations.&lt;br /&gt;&lt;br /&gt; &lt;h3&gt;&lt;span style=""&gt;Database Design&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style=""&gt;User&lt;/span&gt;&lt;/b&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;table class="MsoTableGrid" style="border: medium none ; width: 415px; border-collapse: collapse; height: 133px;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Column   Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Data   Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Constraints&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;handle&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(10)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Primary Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;fname&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(15)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;lname&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(15)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;password&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(x)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;dob&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;date&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Transaction&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableGrid" style="border: medium none ; width: 415px; border-collapse: collapse; height: 189px;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Column   Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Data   Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Constraints&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;recipient&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(10)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Foreign Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;amount&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;money&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL, &gt;= 0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;receivedate&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;date&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;source&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(20)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;revenuetype&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(30)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;paymenttype&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(10)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 140.4pt;" valign="top" width="187"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;transacttype&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(10)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 144pt;" valign="top" width="192"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Loan&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableGrid" style="border: medium none ; border-collapse: collapse; width: 415px; height: 187px;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Column   Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Data   Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Constraints&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;debtor&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(10)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Foreign Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;principal&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;money&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL, &gt; 0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;interest&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;real&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL, &gt; 0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;lender&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(30)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;payfrequency&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL, &gt; 0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Tax&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableGrid" style="border: medium none ; border-collapse: collapse; width: 416px; height: 153px;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Column   Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Data   Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Constraints&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;recipient&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(10)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Foreign Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;income&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;money&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;taxwitheld&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;money&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;deductions&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;money&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;carryforwardlosses&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;money&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;taxableincome&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;money&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;capitalgains&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;money&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Portfolio&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;table class="MsoTableGrid" style="border: medium none ; border-collapse: collapse; width: 414px; height: 152px;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Column   Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Data   Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style=""&gt;Constraints&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;owner&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(10)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Foreign Key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;tickersymbol&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(5)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;quantity&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;totalvalue&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;money&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;company&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(30)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 142pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;securitytype&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;varchar(20)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 142.05pt;" valign="top" width="189"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;NOT NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-2740798924011642639?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/2740798924011642639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=2740798924011642639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/2740798924011642639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/2740798924011642639'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/07/preliminary-database-design.html' title='Preliminary Database Design'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-800122394684798782</id><published>2007-07-22T20:02:00.001+10:00</published><updated>2007-07-22T20:04:21.454+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='planning'/><title type='text'>Thesis Planning</title><content type='html'>Marko and I have spent the last 4 hours this Sunday planning out our time schedule, project overview and work break down. Tomorrow we will be meeting Rodica to discuss computer/server arrangements so that we can start cracking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-800122394684798782?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/800122394684798782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=800122394684798782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/800122394684798782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/800122394684798782'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/07/thesis-planning.html' title='Thesis Planning'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3641768879785029586.post-5390926303373505098</id><published>2007-06-04T00:56:00.001+10:00</published><updated>2008-11-01T23:22:55.098+11:00</updated><title type='text'>welcome</title><content type='html'>This is a blog dedicated to our thesis which we will be working on in semester 2 of 2007. It will include updates, problems encountered, and other handy information which should be documented.&lt;br /&gt;&lt;br /&gt;Team members:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Danny Ng aka Mr. Big aka Dr. No&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rainier Wolfcastle&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Industry Supervisor:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Rodica Popp&lt;/li&gt;&lt;/ul&gt;Academic Supervisor:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dr Javid Atai&lt;/li&gt;&lt;/ul&gt;More updates to come once we've sorted through this semester.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3641768879785029586-5390926303373505098?l=myownthesis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myownthesis.blogspot.com/feeds/5390926303373505098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3641768879785029586&amp;postID=5390926303373505098' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/5390926303373505098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3641768879785029586/posts/default/5390926303373505098'/><link rel='alternate' type='text/html' href='http://myownthesis.blogspot.com/2007/06/welcome.html' title='welcome'/><author><name>Danny Ng</name><uri>http://www.blogger.com/profile/10646267481714669666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://lh6.google.com/image/dannynsl/Rf0zukTuaFI/AAAAAAAAAhA/kIL1TrNN4mk/P3170069.JPG?imgmax=512'/></author><thr:total>0</thr:total></entry></feed>
