<?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-5965248995424798524</id><updated>2011-11-28T08:24:16.970+08:00</updated><category term='job ict malaysia jobber.my'/><title type='text'>:CakePHP =&gt; 'Ruby On Rails'</title><subtitle type='html'>I'm Ruby on Rails explorer coming from the world of CakePHP</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>59</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-5577505062974385511</id><published>2009-05-31T21:37:00.000+08:00</published><updated>2009-05-31T21:38:27.019+08:00</updated><title type='text'>CakePHP Shell</title><content type='html'>cd cake/console&lt;br /&gt;./cake report&lt;br /&gt;&lt;br /&gt;lol jgn lupa lagi&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-5577505062974385511?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/5577505062974385511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/05/cakephp-shell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/5577505062974385511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/5577505062974385511'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/05/cakephp-shell.html' title='CakePHP Shell'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-4832275272043507693</id><published>2009-04-27T17:59:00.001+08:00</published><updated>2009-04-27T18:00:37.791+08:00</updated><title type='text'>MamakSpot.my new look</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SfWCPU1S7XI/AAAAAAAAAwk/m3l5wuJUtVw/s1600-h/Screenshot-4.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SfWCPU1S7XI/AAAAAAAAAwk/m3l5wuJUtVw/s400/Screenshot-4.png" alt="" id="BLOGGER_PHOTO_ID_5329308933864746354" 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/5965248995424798524-4832275272043507693?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/4832275272043507693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/mamakspotmy-new-look.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4832275272043507693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4832275272043507693'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/mamakspotmy-new-look.html' title='MamakSpot.my new look'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_PMSLAMTiap8/SfWCPU1S7XI/AAAAAAAAAwk/m3l5wuJUtVw/s72-c/Screenshot-4.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-4686750894915716274</id><published>2009-04-27T17:55:00.000+08:00</published><updated>2009-04-27T17:56:20.057+08:00</updated><title type='text'>GPS Live Tracking using GPS</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SfWBNtfbvhI/AAAAAAAAAwc/dDJ8pD65swk/s1600-h/Screenshot-3.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SfWBNtfbvhI/AAAAAAAAAwc/dDJ8pD65swk/s400/Screenshot-3.png" alt="" id="BLOGGER_PHOTO_ID_5329307806612569618" 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/5965248995424798524-4686750894915716274?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/4686750894915716274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/gps-live-tracking-using-gps.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4686750894915716274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4686750894915716274'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/gps-live-tracking-using-gps.html' title='GPS Live Tracking using GPS'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/SfWBNtfbvhI/AAAAAAAAAwc/dDJ8pD65swk/s72-c/Screenshot-3.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-7145471443637218248</id><published>2009-04-27T09:04:00.002+08:00</published><updated>2009-04-27T09:08:18.503+08:00</updated><title type='text'>Extjs &amp; Cakephp</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SfUFCnfp5rI/AAAAAAAAAwU/pa7rApCZSmk/s1600-h/Screenshot-2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SfUFCnfp5rI/AAAAAAAAAwU/pa7rApCZSmk/s400/Screenshot-2.png" alt="" id="BLOGGER_PHOTO_ID_5329171276582479538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The Movie add form. The drop down select value was retrieved from database via JSON&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/SfUFCSQh9mI/AAAAAAAAAwM/_1K2jHL7Ius/s1600-h/Screenshot-1.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SfUFCSQh9mI/AAAAAAAAAwM/_1K2jHL7Ius/s400/Screenshot-1.png" alt="" id="BLOGGER_PHOTO_ID_5329171270881900130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Basic grid using CakePHP &amp;amp; ExtJS.The data retrieved using JSON&lt;br /&gt;&lt;br /&gt;2 days of learning Ext JS, slowly but result oriented.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-7145471443637218248?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/7145471443637218248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/extjs-cakephp.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/7145471443637218248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/7145471443637218248'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/extjs-cakephp.html' title='Extjs &amp; Cakephp'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_PMSLAMTiap8/SfUFCnfp5rI/AAAAAAAAAwU/pa7rApCZSmk/s72-c/Screenshot-2.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-1662836545201834477</id><published>2009-04-21T10:08:00.003+08:00</published><updated>2009-04-21T10:10:12.463+08:00</updated><title type='text'>GPS Tracking Field Test : satria neo attacking Putrajaya corner</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/Se0qx8HGCII/AAAAAAAAAwE/9_xcCPpJjp4/s1600-h/Screenshot-6.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/Se0qx8HGCII/AAAAAAAAAwE/9_xcCPpJjp4/s400/Screenshot-6.png" alt="" id="BLOGGER_PHOTO_ID_5326960971687004290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The route used.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/Se0qxkvks6I/AAAAAAAAAv8/BORR1NVkx78/s1600-h/Screenshot-5.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/Se0qxkvks6I/AAAAAAAAAv8/BORR1NVkx78/s400/Screenshot-5.png" alt="" id="BLOGGER_PHOTO_ID_5326960965414335394" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The Speed&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-1662836545201834477?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/1662836545201834477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/gps-tracking-field-test-satria-neo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/1662836545201834477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/1662836545201834477'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/gps-tracking-field-test-satria-neo.html' title='GPS Tracking Field Test : satria neo attacking Putrajaya corner'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/Se0qx8HGCII/AAAAAAAAAwE/9_xcCPpJjp4/s72-c/Screenshot-6.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-7243253144451209795</id><published>2009-04-18T18:32:00.002+08:00</published><updated>2009-04-18T18:34:23.616+08:00</updated><title type='text'>CakePHP Ext JS( pagination, add users )</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SemshRo2pEI/AAAAAAAAAv0/0Obhor45-ns/s1600-h/ext-add.jpg"&gt;&lt;img style="cursor: pointer; width: 377px; height: 260px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SemshRo2pEI/AAAAAAAAAv0/0Obhor45-ns/s400/ext-add.jpg" alt="" id="BLOGGER_PHOTO_ID_5325977722012738626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Sample of adding user form&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SemsaFvVI2I/AAAAAAAAAvs/cVrohuBSTk4/s1600-h/ext-pagination.jpg"&gt;&lt;img style="cursor: pointer; width: 399px; height: 400px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SemsaFvVI2I/AAAAAAAAAvs/cVrohuBSTk4/s400/ext-pagination.jpg" alt="" id="BLOGGER_PHOTO_ID_5325977598559593314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;sample of datagrid with workable pagination&lt;br /&gt;&lt;br /&gt;I follow the tutorial here -&gt; &lt;a href="http://www.ntatd.org/mark/?cat=13"&gt;http://www.ntatd.org/mark/?cat=13&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-7243253144451209795?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/7243253144451209795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/cakephp-ext-js-pagination-add-users.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/7243253144451209795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/7243253144451209795'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/cakephp-ext-js-pagination-add-users.html' title='CakePHP Ext JS( pagination, add users )'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_PMSLAMTiap8/SemshRo2pEI/AAAAAAAAAv0/0Obhor45-ns/s72-c/ext-add.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-5725730392291801576</id><published>2009-04-17T08:55:00.003+08:00</published><updated>2009-04-17T09:01:00.443+08:00</updated><title type='text'>GPS Tracker HTTP Update Field Test</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SefUlZ4-lcI/AAAAAAAAAvk/4Ci8Wn1kNuY/s1600-h/DSC00490.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SefUlZ4-lcI/AAAAAAAAAvk/4Ci8Wn1kNuY/s400/DSC00490.JPG" alt="" id="BLOGGER_PHOTO_ID_5325458823459018178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The HTTP Update logger running on my E71&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/SefUVm_cuyI/AAAAAAAAAvc/ATqNA1OW0mw/s1600-h/Screenshot-3.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SefUVm_cuyI/AAAAAAAAAvc/ATqNA1OW0mw/s400/Screenshot-3.png" alt="" id="BLOGGER_PHOTO_ID_5325458552097913634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The result on GPS Tracker Portal&lt;br /&gt;&lt;br /&gt;This morning I fired up my Nokia E71 GPS update via http using Celcom Prepaid 3G. Update interval is 5 seconds. There gone my hard earn money...lol&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-5725730392291801576?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/5725730392291801576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/gps-tracker-http-update-field-test.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/5725730392291801576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/5725730392291801576'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/gps-tracker-http-update-field-test.html' title='GPS Tracker HTTP Update Field Test'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/SefUlZ4-lcI/AAAAAAAAAvk/4Ci8Wn1kNuY/s72-c/DSC00490.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-6059166031873728192</id><published>2009-04-16T17:59:00.003+08:00</published><updated>2009-04-16T18:01:58.412+08:00</updated><title type='text'>Display 1000++ schools on Goole Map</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SecBzOCbTtI/AAAAAAAAAvU/Kw2F7Wz0Gcs/s1600-h/Screenshot-2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SecBzOCbTtI/AAAAAAAAAvU/Kw2F7Wz0Gcs/s400/Screenshot-2.png" alt="" id="BLOGGER_PHOTO_ID_5325227063842131666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Spent almost 1 day on this. Cleaning up MySQL DB etc etc&lt;br /&gt;&lt;br /&gt;URL : &lt;a href="http://map.cikgu.net.my/schools/data"&gt;http://map.cikgu.net.my/schools/data&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Powered by&lt;/span&gt;&lt;br /&gt;1. CakePHP 1.2&lt;br /&gt;2. Javascript&lt;br /&gt;3. MySQL&lt;br /&gt;4. GMap EZ Framework&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-6059166031873728192?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/6059166031873728192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/display-1000-schools-on-goole-map.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/6059166031873728192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/6059166031873728192'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/display-1000-schools-on-goole-map.html' title='Display 1000++ schools on Goole Map'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/SecBzOCbTtI/AAAAAAAAAvU/Kw2F7Wz0Gcs/s72-c/Screenshot-2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-1466305061863308368</id><published>2009-04-14T22:29:00.003+08:00</published><updated>2009-04-14T22:34:09.827+08:00</updated><title type='text'>GPS Tagged Photo Viewer</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/SeSd9NRFy9I/AAAAAAAAAvM/cyUS7E35Oxg/s1600-h/gps-photo.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SeSd9NRFy9I/AAAAAAAAAvM/cyUS7E35Oxg/s400/gps-photo.jpg" alt="" id="BLOGGER_PHOTO_ID_5324554334317693906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;demo : &lt;a href="http://map.jobber.my/photos"&gt;http://map.jobber.my/photos&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My Nokia E71 camera have the GPS Stamp function. So when I snap a picture, GPS info will be stamped in the image's exif data. Uploading the image on the server is plain easy, but how to extract the GPS data in the image and store it into database ? The answer is to use PHP's built in exif parser.&lt;br /&gt;&lt;br /&gt;-CakePHP 1.2&lt;br /&gt;-phpThumb&lt;br /&gt;-MySQL Database&lt;br /&gt;-GMap Ez Google Map Reader&lt;br /&gt;-Exifier&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-1466305061863308368?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/1466305061863308368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/gps-tagged-photo-viewer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/1466305061863308368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/1466305061863308368'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/gps-tagged-photo-viewer.html' title='GPS Tagged Photo Viewer'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PMSLAMTiap8/SeSd9NRFy9I/AAAAAAAAAvM/cyUS7E35Oxg/s72-c/gps-photo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-8710352507240775627</id><published>2009-04-14T10:27:00.002+08:00</published><updated>2009-04-14T10:28:32.725+08:00</updated><title type='text'>Python S60 HTTP file uploader</title><content type='html'>I did some research on the net on how to upload file from S60 Python to webserver&lt;br /&gt;&lt;a href="http://www.lfdm.net/thesis/index.php/2007/02/15/43-upload-file-to-url-with-multipart-form-data"&gt;&lt;br /&gt;1. uploader 1&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-8710352507240775627?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/8710352507240775627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/python-s60-http-file-uploader.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8710352507240775627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8710352507240775627'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/python-s60-http-file-uploader.html' title='Python S60 HTTP file uploader'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-8465836688821282056</id><published>2009-04-13T17:23:00.002+08:00</published><updated>2009-04-13T17:28:52.039+08:00</updated><title type='text'>Update GPS using HTTP</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/SeMFuZnJrTI/AAAAAAAAAvE/VISwGCx8Sdw/s1600-h/Screenshot.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SeMFuZnJrTI/AAAAAAAAAvE/VISwGCx8Sdw/s400/Screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5324105479189278002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Simple Python Uploader&lt;br /&gt;&lt;br /&gt;The task pretty simple, user just select the menu on the phone and it will update the GPS every 60 seconds. On listening server, it will receive data from HTTP GET and plot it into MySQL database&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-8465836688821282056?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/8465836688821282056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/update-gps-using-http.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8465836688821282056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8465836688821282056'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/update-gps-using-http.html' title='Update GPS using HTTP'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PMSLAMTiap8/SeMFuZnJrTI/AAAAAAAAAvE/VISwGCx8Sdw/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-8530741942580211280</id><published>2009-04-13T09:17:00.002+08:00</published><updated>2009-04-13T09:29:47.668+08:00</updated><title type='text'>Update via http and GPS Exif parser</title><content type='html'>Currently, I can update GPS data using SMS update and by uploading log file. The next phase, will be HTTP update using GET method.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;------------------------8&lt;------------------------------&lt;br /&gt;&lt;br /&gt;S60 Python on my Nokia E71 will update via http get using the sample url.&lt;br /&gt;&lt;br /&gt;update.php?type=http&amp;amp;lat=xxx&amp;amp;lng=xxx&amp;amp;alt=xxx&amp;amp;speed=xxx&amp;amp;heading=xxx&amp;amp;time=xxx&lt;br /&gt;&lt;br /&gt;where xxx is the GIS value&lt;br /&gt;&lt;br /&gt;-------------------------8&lt;------------------------------&lt;br /&gt;&lt;br /&gt;Image taken using my Nokia E71 have GPS data stamped, so my plan is, when I upload the image into http://map.jobber.my, the system can grab the GPS data and put it into the database and map it on Google Map&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-8530741942580211280?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/8530741942580211280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/update-via-http-and-gps-exif-parser.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8530741942580211280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8530741942580211280'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/update-via-http-and-gps-exif-parser.html' title='Update via http and GPS Exif parser'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-4701574505091779996</id><published>2009-04-12T19:42:00.002+08:00</published><updated>2009-04-12T19:50:08.080+08:00</updated><title type='text'>Updated GPS Portal with new data</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/SeHU0UkXi8I/AAAAAAAAAu8/9b8YzNRMbPI/s1600-h/gps-menu.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SeHU0UkXi8I/AAAAAAAAAu8/9b8YzNRMbPI/s400/gps-menu.jpg" alt="" id="BLOGGER_PHOTO_ID_5323770229868170178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Upgraded the user interface on Nokia E71. The tracker now have 2 ltracking option, by SMS or log into text file&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/SeHU0FyWpDI/AAAAAAAAAu0/bdJK0NowJAQ/s1600-h/gps-result.jpg"&gt;&lt;img style="cursor: pointer; width: 300px; height: 400px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SeHU0FyWpDI/AAAAAAAAAu0/bdJK0NowJAQ/s400/gps-result.jpg" alt="" id="BLOGGER_PHOTO_ID_5323770225900299314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Sample of GPS data displayed on Nokia E71&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SeHU0Bv1yII/AAAAAAAAAus/sEy_gECb01Q/s1600-h/gps-route.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SeHU0Bv1yII/AAAAAAAAAus/sEy_gECb01Q/s400/gps-route.jpg" alt="" id="BLOGGER_PHOTO_ID_5323770224816015490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The route used while logging to text file.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SeHUzzY6MfI/AAAAAAAAAuk/7zBqsWbPsSI/s1600-h/gps-sms.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SeHUzzY6MfI/AAAAAAAAAuk/7zBqsWbPsSI/s400/gps-sms.jpg" alt="" id="BLOGGER_PHOTO_ID_5323770220961739250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Sample of sms data being sent to listening server.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SeHUztdZzUI/AAAAAAAAAuc/WqChBe_25G8/s1600-h/gps-speed.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SeHUztdZzUI/AAAAAAAAAuc/WqChBe_25G8/s400/gps-speed.jpg" alt="" id="BLOGGER_PHOTO_ID_5323770219369975106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Sample of GPS log.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-4701574505091779996?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/4701574505091779996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/updated-gps-portal-with-new-data.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4701574505091779996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4701574505091779996'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/updated-gps-portal-with-new-data.html' title='Updated GPS Portal with new data'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PMSLAMTiap8/SeHU0UkXi8I/AAAAAAAAAu8/9b8YzNRMbPI/s72-c/gps-menu.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-8422690303267270154</id><published>2009-04-12T12:37:00.002+08:00</published><updated>2009-04-12T12:40:45.583+08:00</updated><title type='text'>S60 Python GPS info</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/SeFwqCMWwiI/AAAAAAAAAuU/nwp8V4qNCWA/s1600-h/gps-info.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 290px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SeFwqCMWwiI/AAAAAAAAAuU/nwp8V4qNCWA/s400/gps-info.jpg" alt="" id="BLOGGER_PHOTO_ID_5323660101974147618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The python source code, pretty amateur&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SeFwqOHHM7I/AAAAAAAAAuM/nR6a4JH2BW8/s1600-h/gps-result.jpg"&gt;&lt;img style="cursor: pointer; width: 300px; height: 400px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SeFwqOHHM7I/AAAAAAAAAuM/nR6a4JH2BW8/s400/gps-result.jpg" alt="" id="BLOGGER_PHOTO_ID_5323660105173382066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The result on my Nokia E71 phone.&lt;br /&gt;&lt;br /&gt;So I'm back to python s60 programming. The task is pretty simple, get the GPS data and display it back.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-8422690303267270154?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/8422690303267270154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/s60-python-gps-info.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8422690303267270154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8422690303267270154'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/s60-python-gps-info.html' title='S60 Python GPS info'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_PMSLAMTiap8/SeFwqCMWwiI/AAAAAAAAAuU/nwp8V4qNCWA/s72-c/gps-info.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-8521142392022618950</id><published>2009-04-12T12:35:00.001+08:00</published><updated>2009-04-12T12:36:46.855+08:00</updated><title type='text'>My collection of books</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/SeFv1qg0onI/AAAAAAAAAuE/XB2c2_rtAwM/s1600-h/DSC00455.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SeFv1qg0onI/AAAAAAAAAuE/XB2c2_rtAwM/s400/DSC00455.JPG" alt="" id="BLOGGER_PHOTO_ID_5323659202264343154" 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/5965248995424798524-8521142392022618950?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/8521142392022618950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/my-collection-of-books.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8521142392022618950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8521142392022618950'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/my-collection-of-books.html' title='My collection of books'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_PMSLAMTiap8/SeFv1qg0onI/AAAAAAAAAuE/XB2c2_rtAwM/s72-c/DSC00455.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-5456841482115388410</id><published>2009-04-08T16:32:00.003+08:00</published><updated>2009-04-08T16:43:14.717+08:00</updated><title type='text'>CakePHP : Tracking GPS live last known position</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SdxjV_TBkMI/AAAAAAAAAt8/x1RUqGX1e1M/s1600-h/gps2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SdxjV_TBkMI/AAAAAAAAAt8/x1RUqGX1e1M/s400/gps2.png" alt="" id="BLOGGER_PHOTO_ID_5322238089064714434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;left: MySQL lat/lon data&lt;br /&gt;right top : CakeSMS SMS listening server&lt;br /&gt;right bottom : CakePHP Shell Daemon&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SdxjVbkjWcI/AAAAAAAAAt0/sEprsz-GTIk/s1600-h/gps.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SdxjVbkjWcI/AAAAAAAAAt0/sEprsz-GTIk/s400/gps.png" alt="" id="BLOGGER_PHOTO_ID_5322238079474555330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The result page&lt;br /&gt;&lt;br /&gt;The idea is, you can track the tracker on the web browser without hitting the refresh button every 5 secons or use the meta refresh tag. Just open the Google Map then sit and relax. The marker automatically updated to new location using Ajax every seconds.&lt;br /&gt;&lt;br /&gt;Nokia E71 will send the current GPS location every 30 seconds to listening server with Sony Ericsson W980 acts as GSM Modem. The received SMS then processed by CakePHP Shell Daemon which process the GPS location into the MySQL Database.&lt;br /&gt;&lt;br /&gt;Then, using AJAX, the browser will call the last known location every second and mark in on the Google Map.&lt;br /&gt;&lt;br /&gt;Demo URL : &lt;a href="http://map.jobber.my/locations/data"&gt;http://map.jobber.my/locations/data&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-5456841482115388410?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/5456841482115388410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/cakephp-tracking-gps-live-last-known.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/5456841482115388410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/5456841482115388410'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/cakephp-tracking-gps-live-last-known.html' title='CakePHP : Tracking GPS live last known position'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_PMSLAMTiap8/SdxjV_TBkMI/AAAAAAAAAt8/x1RUqGX1e1M/s72-c/gps2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-3164830956349365434</id><published>2009-04-07T16:54:00.003+08:00</published><updated>2009-04-07T17:01:47.380+08:00</updated><title type='text'>Google Map : Update Marker using Ajax</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SdsWIi0Lj1I/AAAAAAAAAts/J1ZIq4YzaKM/s1600-h/interval_script.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SdsWIi0Lj1I/AAAAAAAAAts/J1ZIq4YzaKM/s400/interval_script.jpg" alt="" id="BLOGGER_PHOTO_ID_5321871720708804434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The Javascript&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SdsWIR9EcyI/AAAAAAAAAtk/kG5QKZbW8bY/s1600-h/interval.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SdsWIR9EcyI/AAAAAAAAAtk/kG5QKZbW8bY/s400/interval.jpg" alt="" id="BLOGGER_PHOTO_ID_5321871716182684450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Output in browser and sample XML data&lt;br /&gt;&lt;br /&gt;Imagine you want to track in realtime without refreshing the whole page, this is the solution..ajax update the XML data.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-3164830956349365434?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/3164830956349365434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/google-map-update-marker-using-ajax.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/3164830956349365434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/3164830956349365434'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/google-map-update-marker-using-ajax.html' title='Google Map : Update Marker using Ajax'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_PMSLAMTiap8/SdsWIi0Lj1I/AAAAAAAAAts/J1ZIq4YzaKM/s72-c/interval_script.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-8057837496537522458</id><published>2009-04-02T16:52:00.002+08:00</published><updated>2009-04-02T16:58:09.079+08:00</updated><title type='text'>CakeSMS : Setting up Siemens C35i Modem</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SdR-BJUW6LI/AAAAAAAAAtU/DdU1wztIbPQ/s1600-h/DSC00424.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SdR-BJUW6LI/AAAAAAAAAtU/DdU1wztIbPQ/s400/DSC00424.JPG" alt="" id="BLOGGER_PHOTO_ID_5320015617977673906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SdR-AlTgYsI/AAAAAAAAAtM/oOd_skI6-30/s1600-h/DSC00425.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SdR-AlTgYsI/AAAAAAAAAtM/oOd_skI6-30/s400/DSC00425.JPG" alt="" id="BLOGGER_PHOTO_ID_5320015608310424258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;One of my client sent this GSM Modem to me, Siemens C35i USB. So I fired up my Linux Ubuntu and change the Gnokii settings.&lt;br /&gt;&lt;br /&gt;Using dmesg, the modem connected at /dev/ttyUSB0&lt;br /&gt;&lt;br /&gt;Some crucial settings on gnokiirc&lt;br /&gt;speed = 115000&lt;br /&gt;connection = serial&lt;br /&gt;port = /dev/ttyusb0&lt;br /&gt;&lt;br /&gt;Run the gnokii --identify to check the connection status&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-8057837496537522458?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/8057837496537522458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/04/cakesms-setting-up-siemens-c35i-modem.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8057837496537522458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8057837496537522458'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/04/cakesms-setting-up-siemens-c35i-modem.html' title='CakeSMS : Setting up Siemens C35i Modem'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/SdR-BJUW6LI/AAAAAAAAAtU/DdU1wztIbPQ/s72-c/DSC00424.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-2691656606877145937</id><published>2009-03-31T09:17:00.002+08:00</published><updated>2009-03-31T09:19:57.644+08:00</updated><title type='text'>SLow down on programming, gaining on Forex Learning</title><content type='html'>I never invest in Forex, but have been reading about it extensively since months ago. BabyPips.com provides the best guides ever. So I'll slow down a bit on programming reserach and put some efforst on learning Forex.&lt;br /&gt;&lt;br /&gt;Pisces born clads are not greedy type, so the trait quite useful while trading on FX......&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-2691656606877145937?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/2691656606877145937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/slow-down-on-programming-gaining-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/2691656606877145937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/2691656606877145937'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/slow-down-on-programming-gaining-on.html' title='SLow down on programming, gaining on Forex Learning'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-6454750060986545118</id><published>2009-03-29T18:40:00.002+08:00</published><updated>2009-03-29T18:42:35.012+08:00</updated><title type='text'>Tiara Beach Resort</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/Sc9QeGM2pwI/AAAAAAAAAtE/w4kdDsdeFlY/s1600-h/tiara2.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/Sc9QeGM2pwI/AAAAAAAAAtE/w4kdDsdeFlY/s400/tiara2.jpg" alt="" id="BLOGGER_PHOTO_ID_5318558162938668802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The aerial view of Tiara Beach Rsort&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/Sc9Qd4IszyI/AAAAAAAAAs8/fGcoZXKSGfE/s1600-h/tiara1.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/Sc9Qd4IszyI/AAAAAAAAAs8/fGcoZXKSGfE/s400/tiara1.jpg" alt="" id="BLOGGER_PHOTO_ID_5318558159163150114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Travelling path from Putrajaya&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-6454750060986545118?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/6454750060986545118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/tiara-beach-resort.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/6454750060986545118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/6454750060986545118'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/tiara-beach-resort.html' title='Tiara Beach Resort'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PMSLAMTiap8/Sc9QeGM2pwI/AAAAAAAAAtE/w4kdDsdeFlY/s72-c/tiara2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-1643359020794261504</id><published>2009-03-27T14:18:00.003+08:00</published><updated>2009-03-27T14:23:19.304+08:00</updated><title type='text'>Field Test 2 : Satria NEO from Putrajaya To PD</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/ScxwdGT8zxI/AAAAAAAAAs0/Iqvztbzn1LA/s1600-h/neo-face.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 211px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/ScxwdGT8zxI/AAAAAAAAAs0/Iqvztbzn1LA/s400/neo-face.jpg" alt="" id="BLOGGER_PHOTO_ID_5317748905230520082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I'm not a 100% computer geek, apart from coding, I enjoy motorsports, esp Sepang Sunday Track Day Session. Yesterday I burnt almost RM900 changing new front tires, adjusting camber degree, changed the APM rear coilspring to Eibach.&lt;br /&gt;&lt;br /&gt;Now the car handles beatifully. The new camber setup improved the cornering performance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-1643359020794261504?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/1643359020794261504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/field-test-2-satria-neo-from-putrajaya.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/1643359020794261504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/1643359020794261504'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/field-test-2-satria-neo-from-putrajaya.html' title='Field Test 2 : Satria NEO from Putrajaya To PD'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_PMSLAMTiap8/ScxwdGT8zxI/AAAAAAAAAs0/Iqvztbzn1LA/s72-c/neo-face.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-3404338945904357061</id><published>2009-03-25T22:44:00.002+08:00</published><updated>2009-03-25T22:47:51.865+08:00</updated><title type='text'>RoR : batch geocoding using shell command</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/ScpD91BdbdI/AAAAAAAAAss/3uUOkech8ts/s1600-h/runner2.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 253px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/ScpD91BdbdI/AAAAAAAAAss/3uUOkech8ts/s400/runner2.jpg" alt="" id="BLOGGER_PHOTO_ID_5317137039548575186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;batch_geocode.rb&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/ScpD9XoR8oI/AAAAAAAAAsk/NB3oSlsQId8/s1600-h/runner1.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 252px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/ScpD9XoR8oI/AAAAAAAAAsk/NB3oSlsQId8/s400/runner1.jpg" alt="" id="BLOGGER_PHOTO_ID_5317137031658336898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;runner in action&lt;br /&gt;&lt;br /&gt;Imagine you have thousands of data of subscribers with address and postcode, and suddenly your boss asking for Latitude and Longitude value for each entry using the given address. The answer is, using geokit and RoR runner&lt;br /&gt;&lt;br /&gt;ruby script/runner batch_geocoding.rb&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-3404338945904357061?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/3404338945904357061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/ror-batch-geocoding-using-shell-command.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/3404338945904357061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/3404338945904357061'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/ror-batch-geocoding-using-shell-command.html' title='RoR : batch geocoding using shell command'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/ScpD91BdbdI/AAAAAAAAAss/3uUOkech8ts/s72-c/runner2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-6201760626459999430</id><published>2009-03-24T10:17:00.002+08:00</published><updated>2009-03-24T10:19:15.061+08:00</updated><title type='text'>GPS: View by route</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SchC-poiOqI/AAAAAAAAAsc/srGRHM1LsBk/s1600-h/tracker1.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SchC-poiOqI/AAAAAAAAAsc/srGRHM1LsBk/s400/tracker1.png" alt="" id="BLOGGER_PHOTO_ID_5316573004206062242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Updated the prototype engine with display by route. Additional info is total distance in kilometer and time taken for the tracking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-6201760626459999430?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/6201760626459999430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/gps-view-by-route.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/6201760626459999430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/6201760626459999430'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/gps-view-by-route.html' title='GPS: View by route'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_PMSLAMTiap8/SchC-poiOqI/AAAAAAAAAsc/srGRHM1LsBk/s72-c/tracker1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-5578947958308048668</id><published>2009-03-23T11:40:00.003+08:00</published><updated>2009-03-23T11:42:40.835+08:00</updated><title type='text'>GMAP Ez in CakePHP</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/SccFG4aZTjI/AAAAAAAAAsU/zwPgJTc4R2I/s1600-h/speed.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 131px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SccFG4aZTjI/AAAAAAAAAsU/zwPgJTc4R2I/s400/speed.png" alt="" id="BLOGGER_PHOTO_ID_5316223500914609714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is the result&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SccE0mvZIWI/AAAAAAAAAsM/3_Sgf2r5g5E/s1600-h/gmap-foreach.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 78px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SccE0mvZIWI/AAAAAAAAAsM/3_Sgf2r5g5E/s400/gmap-foreach.png" alt="" id="BLOGGER_PHOTO_ID_5316223186933195106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is how i use Foreach in CakePHP to plot the map&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SccE0QgSK3I/AAAAAAAAAsE/SjVcq1R9qcU/s1600-h/gmap-default.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 144px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SccE0QgSK3I/AAAAAAAAAsE/SjVcq1R9qcU/s400/gmap-default.png" alt="" id="BLOGGER_PHOTO_ID_5316223180964244338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is the JS init in app/views/layouts.ctp&lt;br /&gt;I use GMAP Ez Google MAP Framework ( http://n01se.net/gmapez/ )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-5578947958308048668?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/5578947958308048668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/gmap-ez-in-cakephp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/5578947958308048668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/5578947958308048668'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/gmap-ez-in-cakephp.html' title='GMAP Ez in CakePHP'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_PMSLAMTiap8/SccFG4aZTjI/AAAAAAAAAsU/zwPgJTc4R2I/s72-c/speed.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-3392882170350531054</id><published>2009-03-23T11:22:00.003+08:00</published><updated>2009-03-23T11:28:04.089+08:00</updated><title type='text'>Speed &amp; Distance</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SccBtnNR0GI/AAAAAAAAAr8/vx12lg_dJ98/s1600-h/speed-view.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SccBtnNR0GI/AAAAAAAAAr8/vx12lg_dJ98/s400/speed-view.png" alt="" id="BLOGGER_PHOTO_ID_5316219768264577122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The view sample&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/SccBfE5WoFI/AAAAAAAAAr0/JFX-xHtkJfU/s1600-h/speed-controller.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 55px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SccBfE5WoFI/AAAAAAAAAr0/JFX-xHtkJfU/s400/speed-controller.png" alt="" id="BLOGGER_PHOTO_ID_5316219518536032338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The controller sample.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SccA_DVfsTI/AAAAAAAAArs/59Oo3gXR5tI/s1600-h/speed-model.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SccA_DVfsTI/AAAAAAAAArs/59Oo3gXR5tI/s400/speed-model.png" alt="" id="BLOGGER_PHOTO_ID_5316218968361382194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The Location Model. Add process_afterfind() function&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/SccA-0_7mzI/AAAAAAAAArk/4p0aaFhrtb4/s1600-h/speed2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SccA-0_7mzI/AAAAAAAAArk/4p0aaFhrtb4/s400/speed2.png" alt="" id="BLOGGER_PHOTO_ID_5316218964512840498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The result on view&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/SccA94_l5UI/AAAAAAAAArc/-gHNPV3obfM/s1600-h/speed.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 131px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SccA94_l5UI/AAAAAAAAArc/-gHNPV3obfM/s400/speed.png" alt="" id="BLOGGER_PHOTO_ID_5316218948405290306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The result on info balloon&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So I add some new functions today, to display covered distance between 2 nodes and average speed too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-3392882170350531054?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/3392882170350531054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/speed-distance.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/3392882170350531054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/3392882170350531054'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/speed-distance.html' title='Speed &amp; Distance'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/SccBtnNR0GI/AAAAAAAAAr8/vx12lg_dJ98/s72-c/speed-view.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-953657507018425654</id><published>2009-03-21T12:43:00.003+08:00</published><updated>2009-03-21T13:00:25.662+08:00</updated><title type='text'>Field Test 1 : Logging GPS from Putrajaya to Batu Pahat</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/ScR0UBC1-WI/AAAAAAAAArU/A57fg3FC4v0/s1600-h/1-min-logger.png"&gt;&lt;img style="cursor: pointer; width: 309px; height: 400px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/ScR0UBC1-WI/AAAAAAAAArU/A57fg3FC4v0/s400/1-min-logger.png" alt="" id="BLOGGER_PHOTO_ID_5315501347430594914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Sample python logger used in this field testing.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/ScRzN9h-XbI/AAAAAAAAArM/60NwfjjqLvU/s1600-h/Pagoh-BP.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/ScRzN9h-XbI/AAAAAAAAArM/60NwfjjqLvU/s400/Pagoh-BP.png" alt="" id="BLOGGER_PHOTO_ID_5315500143896583602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Sample GPS Log with info window tracking from Plus Pagoh Toll to Batu Pahat, Johore town&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/ScRzNLppakI/AAAAAAAAArE/9RY4anMiHQQ/s1600-h/PJ-BP1.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/ScRzNLppakI/AAAAAAAAArE/9RY4anMiHQQ/s400/PJ-BP1.png" alt="" id="BLOGGER_PHOTO_ID_5315500130506992194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The path taken from Putrajaya to Batu Pahat,&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/ScRzMCJr_RI/AAAAAAAAAq8/aHX4ALXbVPo/s1600-h/gps-logger-sample.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/ScRzMCJr_RI/AAAAAAAAAq8/aHX4ALXbVPo/s400/gps-logger-sample.png" alt="" id="BLOGGER_PHOTO_ID_5315500110777154834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Sample logging output from Nokia E71 GPS Tracker&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The aim for this field test is to do stress testing on the Python GPS logger running on my Nokia E71. The logger will write GPS and Time data into text file every 60 secs. Average cruising speed on my wife's Toyota Altis is 120kmh - 140kmh on the highway.&lt;br /&gt;&lt;br /&gt;From the log file,&lt;br /&gt;1. Must be able to upload to the server and automatic plot on Google MAP&lt;br /&gt;2. Have to write a Python script to automate the upload using HTTP transport.&lt;br /&gt;&lt;br /&gt;From the report&lt;br /&gt;1. Calculate covered distance in meters.&lt;br /&gt;2. Calculate each node covered distance&lt;br /&gt;3. Calculate average speed&lt;br /&gt;4. Calculate speed from node to node&lt;br /&gt;&lt;br /&gt;Field Testing Reports&lt;br /&gt;1. The logging was successful&lt;br /&gt;2. Log file size is 86kb in size&lt;br /&gt;3. Abto to upload and automatic plot without problem&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-953657507018425654?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/953657507018425654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/field-test-1-logging-gps-from-putrajaya.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/953657507018425654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/953657507018425654'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/field-test-1-logging-gps-from-putrajaya.html' title='Field Test 1 : Logging GPS from Putrajaya to Batu Pahat'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PMSLAMTiap8/ScR0UBC1-WI/AAAAAAAAArU/A57fg3FC4v0/s72-c/1-min-logger.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-33673680160831836</id><published>2009-03-15T21:52:00.003+08:00</published><updated>2009-03-15T22:00:01.555+08:00</updated><title type='text'>Python GPS logger</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/Sb0JgGpoISI/AAAAAAAAAqw/s3yTMaWpnZA/s1600-h/Screenshot-5.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/Sb0JgGpoISI/AAAAAAAAAqw/s3yTMaWpnZA/s400/Screenshot-5.png" alt="" id="BLOGGER_PHOTO_ID_5313413582512726306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Simple Python script&lt;br /&gt;&lt;br /&gt;My Prepaid credit is null, and I want to do live tracking today. So I fired up my vi text editor and begin experimenting.&lt;br /&gt;&lt;br /&gt;The script should log the gps data every 5 secs into flat file&lt;br /&gt;The format will be "gps|&lt;lat&gt;|&lt;lon&gt;|&lt;time&gt;"&lt;br /&gt;Every new entry will be seperated with new line&lt;br /&gt;When I upload the log file into CakePHP, the system will autimatically plot my journey using Google Map&lt;br /&gt;&lt;br /&gt;&lt;/time&gt;&lt;/lon&gt;&lt;/lat&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-33673680160831836?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/33673680160831836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/python-gps-logger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/33673680160831836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/33673680160831836'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/python-gps-logger.html' title='Python GPS logger'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PMSLAMTiap8/Sb0JgGpoISI/AAAAAAAAAqw/s3yTMaWpnZA/s72-c/Screenshot-5.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-1706868098326789375</id><published>2009-03-15T01:23:00.000+08:00</published><updated>2009-03-15T01:26:23.601+08:00</updated><title type='text'>Live Tracking Site</title><content type='html'>Ok, it's live. Now you can track me live on the net ( unless I have enough credits on Nokia E71 Celcom's prepaid )&lt;br /&gt;&lt;a href="http://map.jobber.my"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;http://map.jobber.my&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-1706868098326789375?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/1706868098326789375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/live-tracking-site.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/1706868098326789375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/1706868098326789375'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/live-tracking-site.html' title='Live Tracking Site'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-3717187991206740101</id><published>2009-03-14T16:43:00.004+08:00</published><updated>2009-03-14T16:53:16.500+08:00</updated><title type='text'>Satria NEO Tracking Project</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/SbtuzbkVJ_I/AAAAAAAAAqo/eFuXDhTbLRY/s1600-h/neo-face.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 211px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SbtuzbkVJ_I/AAAAAAAAAqo/eFuXDhTbLRY/s400/neo-face.jpg" alt="" id="BLOGGER_PHOTO_ID_5312962015266154482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;My wifey's Corolla Altis is not suitable for this project since, it's a family car. So I'll use my Satria NEO  as test car in this Google MAP Live tracking project.  Some facts about the car&lt;br /&gt;&lt;br /&gt;1600cc normally aspirated Campro Engine&lt;br /&gt;APM lowering spring ( till I got enough money for TEIN )&lt;br /&gt;TSW Hockenheim R 16" Competition Wheels&lt;br /&gt;205x50 Hankook rubber on rear and 205x45 Silverstone on the front&lt;br /&gt;Built in Video Camera holder ( bought from US for RM400 0&lt;br /&gt;&lt;br /&gt;For tracking device, I'll use Nokia E71 installed with Python script that will send SMS for current location for every 30 secs ( suck my money yeah )&lt;br /&gt;&lt;br /&gt;For receiver at home, I'll use my Wife's SONY Laptop connected to receiver GSM Modem, Sony K770i.&lt;br /&gt;&lt;br /&gt;For programming I'll use CakeSMS ( http://cakesms.blogspot.com ) for SMS Framework and write simple listening daemon for SMS processing&lt;br /&gt;&lt;br /&gt;For the output, I'll use GMap EZ framework for Google MAP.&lt;br /&gt;&lt;br /&gt;This tracking device is suitable to track the car movement live on your web browser, maybe for Rally fan, can watch the car movement live on the mobile phone connected to GPS&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-3717187991206740101?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/3717187991206740101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/satria-neo-tracking-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/3717187991206740101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/3717187991206740101'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/satria-neo-tracking-project.html' title='Satria NEO Tracking Project'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PMSLAMTiap8/SbtuzbkVJ_I/AAAAAAAAAqo/eFuXDhTbLRY/s72-c/neo-face.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-4028727240760021819</id><published>2009-03-14T15:35:00.001+08:00</published><updated>2009-03-14T15:44:15.558+08:00</updated><title type='text'>Google MAP Tracking using Polylines</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/Sbtf-iGrNQI/AAAAAAAAAqg/HcKQreo2hak/s1600-h/Screenshot-7.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/Sbtf-iGrNQI/AAAAAAAAAqg/HcKQreo2hak/s400/Screenshot-7.png" alt="" id="BLOGGER_PHOTO_ID_5312945713324963074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Info windows on event start&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/Sbtf9LuOKHI/AAAAAAAAAqY/hwPqx5fUmY8/s1600-h/Screenshot-6.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/Sbtf9LuOKHI/AAAAAAAAAqY/hwPqx5fUmY8/s400/Screenshot-6.png" alt="" id="BLOGGER_PHOTO_ID_5312945690136946802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Infor windows on event stop&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-4028727240760021819?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/4028727240760021819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/google-map-tracking-using-polylines.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4028727240760021819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4028727240760021819'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/google-map-tracking-using-polylines.html' title='Google MAP Tracking using Polylines'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_PMSLAMTiap8/Sbtf-iGrNQI/AAAAAAAAAqg/HcKQreo2hak/s72-c/Screenshot-7.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-4534060478976621800</id><published>2009-03-13T12:20:00.000+08:00</published><updated>2009-03-13T12:21:35.476+08:00</updated><title type='text'>Formula to calculate distance of 2 corrdinats</title><content type='html'>$lat1 = 3.033555;&lt;br /&gt;$lon1 = 101.87347;&lt;br /&gt;&lt;br /&gt;$lat2 = $location['lat'];&lt;br /&gt;$lon2 = $location['lon'];&lt;br /&gt;&lt;br /&gt;$location['distance'] = (3958*3.1415926*sqrt(($lat2-$lat1)*($lat2-$lat1) + cos($lat2/57.29578)*cos($lat1/57.29578)*($lon2-$lon1)*($lon2-$lon1))/180);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-4534060478976621800?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/4534060478976621800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/formula-to-calculate-distance-of-2.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4534060478976621800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4534060478976621800'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/formula-to-calculate-distance-of-2.html' title='Formula to calculate distance of 2 corrdinats'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-8107514321641634174</id><published>2009-03-11T23:43:00.002+08:00</published><updated>2009-03-11T23:49:39.165+08:00</updated><title type='text'>Google Map Nokia E71 Tracking</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/SbfcvKYKXhI/AAAAAAAAAqA/Xz2ZWRuYQwY/s1600-h/Screenshot-2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SbfcvKYKXhI/AAAAAAAAAqA/Xz2ZWRuYQwY/s400/Screenshot-2.png" alt="" id="BLOGGER_PHOTO_ID_5311956988304449042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;On the left is my listening SMS daemon, on the right is the debug mode for Gnokii&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SbfcvCtXbBI/AAAAAAAAAp4/7GC-8kl73zU/s1600-h/Screenshot-1.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SbfcvCtXbBI/AAAAAAAAAp4/7GC-8kl73zU/s400/Screenshot-1.png" alt="" id="BLOGGER_PHOTO_ID_5311956986245901330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here's the tracking Sample. The balloon pointed where was me on the specified time&lt;br /&gt;&lt;br /&gt;It works !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-8107514321641634174?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/8107514321641634174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/google-map-nokia-e71-tracking.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8107514321641634174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8107514321641634174'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/google-map-nokia-e71-tracking.html' title='Google Map Nokia E71 Tracking'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PMSLAMTiap8/SbfcvKYKXhI/AAAAAAAAAqA/Xz2ZWRuYQwY/s72-c/Screenshot-2.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-3997335929215057950</id><published>2009-03-11T09:22:00.006+08:00</published><updated>2009-03-11T13:55:44.072+08:00</updated><title type='text'>GPS2SMS: Using Mobile Python on Nokia E71 to send GPS using SMS</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/Sbc3s-rOt8I/AAAAAAAAApw/oJba74ipuAc/s1600-h/60secs.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/Sbc3s-rOt8I/AAAAAAAAApw/oJba74ipuAc/s400/60secs.png" alt="" id="BLOGGER_PHOTO_ID_5311775531384879042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is continuous 60secs version.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SbcrWTrwzlI/AAAAAAAAApo/wXdjTYi0lpk/s1600-h/DSC00252.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SbcrWTrwzlI/AAAAAAAAApo/wXdjTYi0lpk/s400/DSC00252.JPG" alt="" id="BLOGGER_PHOTO_ID_5311761947747733074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Get the GPS, then send to predefined mobile phone ( listening server )&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/SbcSjhMmDKI/AAAAAAAAApg/FwJHMnSfggw/s1600-h/gps2sms.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SbcSjhMmDKI/AAAAAAAAApg/FwJHMnSfggw/s400/gps2sms.png" alt="" id="BLOGGER_PHOTO_ID_5311734686922706082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This code will run on Signed Python shell in E71&lt;br /&gt;Credit : &lt;a href="http://code.activestate.com/recipes/576601/"&gt;http://code.activestate.com/recipes/576601/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;References :&lt;br /&gt;I use&lt;br /&gt;1. Python 1.4.5 3rd edition self signed&lt;br /&gt;2. Python 1.4.5 Shell Unsigned ( then go to Nokia Symbian Signed website to get it signed )&lt;br /&gt;URL : &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=154155&amp;amp;package_id=171153"&gt;http://sourceforge.net/project/showfiles.php?group_id=154155&amp;amp;package_id=171153&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Imagine this application combined with CakeSMS ( http://cakesms.blogspot.com )&lt;br /&gt;&lt;br /&gt;If you met the gridlock or application can't run, try read this forum&lt;br /&gt;&lt;a href="http://discussion.forum.nokia.com/forum/showthread.php?t=156442"&gt;http://discussion.forum.nokia.com/forum/showthread.php?t=156442&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-3997335929215057950?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/3997335929215057950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/gps2sms-using-mobile-python-on-nokia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/3997335929215057950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/3997335929215057950'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/gps2sms-using-mobile-python-on-nokia.html' title='GPS2SMS: Using Mobile Python on Nokia E71 to send GPS using SMS'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_PMSLAMTiap8/Sbc3s-rOt8I/AAAAAAAAApw/oJba74ipuAc/s72-c/60secs.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-7609946291536612046</id><published>2009-03-10T23:19:00.000+08:00</published><updated>2009-03-10T23:22:02.001+08:00</updated><title type='text'>Aspicore.com GPS 2 SMS</title><content type='html'>I managed to install the trial software ( runs on for 10 minutes ) and sending periodic GPS using SMS every 1 minute.&lt;br /&gt;&lt;br /&gt;So I have my own Fleet and Vehicle Tracking System, and only cost me USD40&lt;br /&gt;&lt;br /&gt;Imagine Google Map + RoR + Apricot + Nokia E71&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-7609946291536612046?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/7609946291536612046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/aspicorecom-gps-2-sms.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/7609946291536612046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/7609946291536612046'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/aspicorecom-gps-2-sms.html' title='Aspicore.com GPS 2 SMS'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-5629372514133808095</id><published>2009-03-04T18:02:00.005+08:00</published><updated>2009-03-04T18:18:55.453+08:00</updated><title type='text'>Search engine with pagination</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/Sa5SNr8LJFI/AAAAAAAAApY/F6EQYj_AeI4/s1600-h/search-result.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/Sa5SNr8LJFI/AAAAAAAAApY/F6EQYj_AeI4/s400/search-result.png" alt="" id="BLOGGER_PHOTO_ID_5309271405803283538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The search result with pagination&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/Sa5R9-q86xI/AAAAAAAAApI/T-UF9HdD-hc/s1600-h/search-view-code.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 120px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/Sa5R9-q86xI/AAAAAAAAApI/T-UF9HdD-hc/s400/search-view-code.png" alt="" id="BLOGGER_PHOTO_ID_5309271135953414930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The will_paginate object, Note the extra params.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/Sa5R9y14kLI/AAAAAAAAApA/ozXHShCqReE/s1600-h/search-controller.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 103px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/Sa5R9y14kLI/AAAAAAAAApA/ozXHShCqReE/s400/search-controller.png" alt="" id="BLOGGER_PHOTO_ID_5309271132778041522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The search method. Note the 2nd @pages object. It's lazy man way&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/Sa5R9vNPJHI/AAAAAAAAAo4/wPf8LoebV88/s1600-h/search-view.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 167px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/Sa5R9vNPJHI/AAAAAAAAAo4/wPf8LoebV88/s400/search-view.png" alt="" id="BLOGGER_PHOTO_ID_5309271131802248306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The search from using built in Ajax.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-5629372514133808095?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/5629372514133808095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/search-engine-with-pagination.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/5629372514133808095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/5629372514133808095'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/search-engine-with-pagination.html' title='Search engine with pagination'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_PMSLAMTiap8/Sa5SNr8LJFI/AAAAAAAAApY/F6EQYj_AeI4/s72-c/search-result.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-4269642018711915876</id><published>2009-03-04T10:16:00.002+08:00</published><updated>2009-03-04T10:24:59.432+08:00</updated><title type='text'>Geocoding in Ruby On Rails</title><content type='html'>My boss quite impressed by the JARING BizOnNet portal. So he decided to give me a new task. To plot all the WiFi nodes in Malaysia installed by JARING.&lt;br /&gt;&lt;br /&gt;The requirements will be :&lt;br /&gt;1. Auto geocoding street address. For example, you put Jalan K/4 P11, Presint 11, 62300 Putrajaya, the system should be able to get the longitude and latitude for the address.&lt;br /&gt;&lt;br /&gt;2. Display the Google MAP for geocoded address&lt;br /&gt;This is simple, just get the lon/lat value and use YM4R plugins to display the MAP in RoR style.&lt;br /&gt;&lt;br /&gt;3. Each node will have many users. So the DB relationship will be Nodes hasMany Users and User belongsTo Node&lt;br /&gt;&lt;br /&gt;4. Category, will have 2 category, 512kbps and 1024 kbps. So the map ballon will be using customised icon. YM4R have this nifty function.&lt;br /&gt;&lt;br /&gt;5. Tagging for each node for easy search&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-4269642018711915876?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/4269642018711915876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/geocoding-in-ruby-on-rails.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4269642018711915876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4269642018711915876'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/geocoding-in-ruby-on-rails.html' title='Geocoding in Ruby On Rails'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-8386961331416954893</id><published>2009-03-03T10:31:00.003+08:00</published><updated>2009-03-03T10:36:13.004+08:00</updated><title type='text'>SEOd URL using to_param method in RoR</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SayWwuRIWjI/AAAAAAAAAoo/iqLnUY7Vcyw/s1600-h/seo-result.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 113px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SayWwuRIWjI/AAAAAAAAAoo/iqLnUY7Vcyw/s400/seo-result.png" alt="" id="BLOGGER_PHOTO_ID_5308783824560740914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The SEOd URL. Looks nice and clean " http://bizonnet.jaring.my/pages/9-adelia-power-services"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/SayWvtzdQZI/AAAAAAAAAog/1A_cDlSfgsE/s1600-h/seo-view.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 151px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SayWvtzdQZI/AAAAAAAAAog/1A_cDlSfgsE/s400/seo-view.png" alt="" id="BLOGGER_PHOTO_ID_5308783807256412562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This the view. Note I use button_to helper instead of link_to.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/SayWvDmdiRI/AAAAAAAAAoY/oPT2X5wbOFU/s1600-h/seo-model.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 152px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SayWvDmdiRI/AAAAAAAAAoY/oPT2X5wbOFU/s400/seo-model.png" alt="" id="BLOGGER_PHOTO_ID_5308783795927615762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The magic is in the mode, the to_param method.&lt;br /&gt;&lt;br /&gt;Insetad of http://bizonnet.jaring.my/pages/9 , I would like a more nicer and meaningful URL like http://bizonnet.jaring.my/pages/9-adelia-power-services. So when the URL is being stored in Search Engine, people will know what's the page is all about. So How do I do that ?&lt;br /&gt;&lt;br /&gt;First, add the to_param new defination to your model, and it's will be donw automatically.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-8386961331416954893?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/8386961331416954893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/seod-url-using-toparam-method-in-ror.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8386961331416954893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8386961331416954893'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/seod-url-using-toparam-method-in-ror.html' title='SEOd URL using to_param method in RoR'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/SayWwuRIWjI/AAAAAAAAAoo/iqLnUY7Vcyw/s72-c/seo-result.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-7653445743529921299</id><published>2009-03-01T11:55:00.003+08:00</published><updated>2009-03-01T12:05:00.016+08:00</updated><title type='text'>10 Skills a Web Developer should know</title><content type='html'>1. &lt;span style="font-weight: bold;"&gt;User Authentication system&lt;/span&gt;&lt;br /&gt;- signup engine&lt;br /&gt;- login engine&lt;br /&gt;- forget password engine&lt;br /&gt;- confirmation thru email engine&lt;br /&gt;&lt;br /&gt;2. &lt;span style="font-weight: bold;"&gt;User Roles System&lt;/span&gt;&lt;br /&gt;- User has many Roles&lt;br /&gt;- function for each role&lt;br /&gt;&lt;br /&gt;3. &lt;span style="font-weight: bold;"&gt;CRUD System&lt;/span&gt;&lt;br /&gt;- Create new item&lt;br /&gt;- Read created item&lt;br /&gt;- Update created item&lt;br /&gt;- delete created item&lt;br /&gt;&lt;br /&gt;4. &lt;span style="font-weight: bold;"&gt;Search engine&lt;/span&gt;&lt;br /&gt;- simple search&lt;br /&gt;- full text&lt;br /&gt;- with pagination&lt;br /&gt;&lt;br /&gt;5. &lt;span style="font-weight: bold;"&gt;Pagination engine&lt;/span&gt;&lt;br /&gt;- digg like pagination engine&lt;br /&gt;&lt;br /&gt;6. &lt;span style="font-weight: bold;"&gt;Relationships&lt;/span&gt;&lt;br /&gt;- A User has many Posts&lt;br /&gt;- A Post belongs To User&lt;br /&gt;&lt;br /&gt;7. &lt;span style="font-weight: bold;"&gt;Tagging System&lt;/span&gt;&lt;br /&gt;- Tag search&lt;br /&gt;- tag cloud&lt;br /&gt;- tag an item&lt;br /&gt;&lt;br /&gt;8.&lt;span style="font-weight: bold;"&gt; Upload system&lt;/span&gt;&lt;br /&gt;- image&lt;br /&gt;- file&lt;br /&gt;- video&lt;br /&gt;&lt;br /&gt;9.&lt;span style="font-weight: bold;"&gt; Image Processing&lt;/span&gt;&lt;br /&gt;- photo resizing&lt;br /&gt;- image thumbnails&lt;br /&gt;&lt;br /&gt;10. &lt;span style="font-weight: bold;"&gt;AJAX&lt;/span&gt;&lt;br /&gt;- ajax pagination&lt;br /&gt;- ajax drop down select&lt;br /&gt;- ajax search&lt;br /&gt;- ajax updates&lt;br /&gt;- ajax validation&lt;br /&gt;- ajax suggest&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-7653445743529921299?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/7653445743529921299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/03/10-skills-web-developer-should-know.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/7653445743529921299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/7653445743529921299'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/03/10-skills-web-developer-should-know.html' title='10 Skills a Web Developer should know'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-4330903766866914110</id><published>2009-02-25T17:12:00.004+08:00</published><updated>2009-02-25T17:22:56.343+08:00</updated><title type='text'>Custom routing in RoR</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SaUNc23-dEI/AAAAAAAAAoI/gn5rxjSrqTM/s1600-h/view.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 147px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SaUNc23-dEI/AAAAAAAAAoI/gn5rxjSrqTM/s400/view.png" alt="" id="BLOGGER_PHOTO_ID_5306662525343790146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The index.html.erb view sample&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SaUNc74YXGI/AAAAAAAAAoA/4DM7P2KcEyA/s1600-h/route.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 118px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SaUNc74YXGI/AAAAAAAAAoA/4DM7P2KcEyA/s400/route.png" alt="" id="BLOGGER_PHOTO_ID_5306662526687665250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The resources in config/routes.rb&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SaUNcjZPYbI/AAAAAAAAAn4/cCOq_P_PvOY/s1600-h/controller.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 395px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SaUNcjZPYbI/AAAAAAAAAn4/cCOq_P_PvOY/s400/controller.png" alt="" id="BLOGGER_PHOTO_ID_5306662520114602418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The user_pages.rb controller&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SaULwgL9hpI/AAAAAAAAAnw/dae-Hhj_Ug8/s1600-h/my_pages.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SaULwgL9hpI/AAAAAAAAAnw/dae-Hhj_Ug8/s400/my_pages.png" alt="" id="BLOGGER_PHOTO_ID_5306660663827728018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The results&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Added a feature in Bizonnet, My Pages or List of my SMS Business Location. After the user logged in, they can view,edit or destroy the added pages. And the system will list all the created pages created by them. If the pages spanning way beyond 10 pages, the system will automatically trigger Pagination helper, so the user can flip thru the list of pages using the helpers.&lt;br /&gt;&lt;br /&gt;I'm using http://domain.com/users/:user_id/pages/:id format. So in the config/routes.rb I have to modify it.&lt;br /&gt;&lt;br /&gt;It's so tired..and I need a new haircut by today. Bye&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-4330903766866914110?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/4330903766866914110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/02/index.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4330903766866914110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4330903766866914110'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/02/index.html' title='Custom routing in RoR'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/SaUNc23-dEI/AAAAAAAAAoI/gn5rxjSrqTM/s72-c/view.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-7596793466669093311</id><published>2009-02-24T16:50:00.001+08:00</published><updated>2009-02-24T17:22:40.562+08:00</updated><title type='text'>RoR Search Engine</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SaO8Lwsof1I/AAAAAAAAAno/-DMW7pobGro/s1600-h/Clipboard04.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 104px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SaO8Lwsof1I/AAAAAAAAAno/-DMW7pobGro/s400/Clipboard04.png" alt="" id="BLOGGER_PHOTO_ID_5306291696209264466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The sample controller. Now I can search on 3 different join tables, Tags,Category and Pages&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SaO08Lt7g-I/AAAAAAAAAng/CX1tmJgB4mo/s1600-h/Clipboard02.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SaO08Lt7g-I/AAAAAAAAAng/CX1tmJgB4mo/s400/Clipboard02.png" alt="" id="BLOGGER_PHOTO_ID_5306283732003161058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The library&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-7596793466669093311?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/7596793466669093311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/02/ror-search-engine.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/7596793466669093311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/7596793466669093311'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/02/ror-search-engine.html' title='RoR Search Engine'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/SaO8Lwsof1I/AAAAAAAAAno/-DMW7pobGro/s72-c/Clipboard04.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-8250109651028889532</id><published>2009-02-24T16:22:00.000+08:00</published><updated>2009-02-24T16:23:53.302+08:00</updated><title type='text'>CakePHP Search Controller</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/SaOuelqAlYI/AAAAAAAAAnY/FggbrdMhoqM/s1600-h/Clipboard01.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SaOuelqAlYI/AAAAAAAAAnY/FggbrdMhoqM/s400/Clipboard01.png" alt="" id="BLOGGER_PHOTO_ID_5306276626500195714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sample controller for typical search in CakePHP&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-8250109651028889532?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/8250109651028889532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/02/cakephp-search-controller.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8250109651028889532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8250109651028889532'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/02/cakephp-search-controller.html' title='CakePHP Search Controller'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PMSLAMTiap8/SaOuelqAlYI/AAAAAAAAAnY/FggbrdMhoqM/s72-c/Clipboard01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-865788287462726684</id><published>2009-02-23T15:43:00.002+08:00</published><updated>2009-02-23T15:49:39.800+08:00</updated><title type='text'>TREE Category Management</title><content type='html'>Category Tree is very important tool while doing web development. You can create unlimited categories using this technique.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SaJUcNRyIbI/AAAAAAAAAnQ/7EbfNcC--PY/s1600-h/Clipboard04.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SaJUcNRyIbI/AAAAAAAAAnQ/7EbfNcC--PY/s400/Clipboard04.png" alt="" id="BLOGGER_PHOTO_ID_5305896154573185458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The Tree helper in app/helpers/application.rb&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/SaJUcNIpTMI/AAAAAAAAAnI/RI9Ot8C62hU/s1600-h/Clipboard03.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SaJUcNIpTMI/AAAAAAAAAnI/RI9Ot8C62hU/s400/Clipboard03.png" alt="" id="BLOGGER_PHOTO_ID_5305896154534857922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Using it in view&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/SaJUb7iIVpI/AAAAAAAAAnA/v2uYkse1IIE/s1600-h/Clipboard02.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SaJUb7iIVpI/AAAAAAAAAnA/v2uYkse1IIE/s400/Clipboard02.png" alt="" id="BLOGGER_PHOTO_ID_5305896149809911442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The output while editing page&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SaJUb9Exn3I/AAAAAAAAAm4/YcSiBczuUm8/s1600-h/Clipboard01.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SaJUb9Exn3I/AAAAAAAAAm4/YcSiBczuUm8/s400/Clipboard01.png" alt="" id="BLOGGER_PHOTO_ID_5305896150223658866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A very simple Tree Category Management&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-865788287462726684?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/865788287462726684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/02/tree-category-management.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/865788287462726684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/865788287462726684'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/02/tree-category-management.html' title='TREE Category Management'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_PMSLAMTiap8/SaJUcNRyIbI/AAAAAAAAAnQ/7EbfNcC--PY/s72-c/Clipboard04.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-6270798886299043722</id><published>2009-02-19T17:45:00.003+08:00</published><updated>2009-02-19T17:52:40.497+08:00</updated><title type='text'>Jaring Biz-on-Net</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/SZ0q6-6vFWI/AAAAAAAAAmo/mJ73CkXgCEQ/s1600-h/jbon.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SZ0q6-6vFWI/AAAAAAAAAmo/mJ73CkXgCEQ/s400/jbon.png" alt="" id="BLOGGER_PHOTO_ID_5304443128922445154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jaring Biz-on-Net Portal features&lt;br /&gt;1. Tagging for each business&lt;br /&gt;2. Tag Cloud&lt;br /&gt;3. Google Map pointing&lt;br /&gt;4. Auto geocoding using normal address&lt;br /&gt;5. User Management System&lt;br /&gt;&lt;br /&gt;Thanks to:&lt;br /&gt;1. Ruby On Rails&lt;br /&gt;2. MySQL&lt;br /&gt;3. Webbring Proxy Apache&lt;br /&gt;4. VMWARE Enterprise&lt;br /&gt;5. Linux Centos&lt;br /&gt;&lt;br /&gt;I got this task around 7 days ago and must be finished by today. Thanks for Ruby On Rails, you are life saver. Using the available plugins, make the build from scratch is much easier.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-6270798886299043722?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/6270798886299043722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/02/jaring-biz-on-net.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/6270798886299043722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/6270798886299043722'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/02/jaring-biz-on-net.html' title='Jaring Biz-on-Net'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_PMSLAMTiap8/SZ0q6-6vFWI/AAAAAAAAAmo/mJ73CkXgCEQ/s72-c/jbon.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-912621365144608504</id><published>2009-02-13T01:36:00.003+08:00</published><updated>2009-02-13T02:32:29.686+08:00</updated><title type='text'>RESTful Authentication</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SZRq1T8lV1I/AAAAAAAAAmg/YOWlhEZFJjg/s1600-h/Clipboard01.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SZRq1T8lV1I/AAAAAAAAAmg/YOWlhEZFJjg/s400/Clipboard01.png" alt="" id="BLOGGER_PHOTO_ID_5301980125441906514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you are like me, you'll probably finished reading these books&lt;br /&gt;&lt;br /&gt;1. Practical Rails Social Networking Sites&lt;br /&gt;2. Simply Rails 2&lt;br /&gt;3. Advanced Rails Recipes&lt;br /&gt;4. Agile Web Development With RoR 2nd Edition&lt;br /&gt;&lt;br /&gt;And none of them give an example for complete user management &amp;amp; authentication system. Before you write your own system, follow this tutorial.&lt;br /&gt;&lt;a href="http://railsforum.com/viewtopic.php?pid=74245#p74245"&gt;&lt;br /&gt;http://railsforum.com/viewtopic.php?pid=74245#p74245&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The tutorial is so great, my auth system  now have these features&lt;br /&gt;1.user registration form&lt;br /&gt;2. manage user roles&lt;br /&gt;3. roles management&lt;br /&gt;4. role checking&lt;br /&gt;5. forgot password mechanism&lt;br /&gt;6. email activation code&lt;br /&gt;7. login/logout&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-912621365144608504?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/912621365144608504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/02/restful-authentication.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/912621365144608504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/912621365144608504'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/02/restful-authentication.html' title='RESTful Authentication'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/SZRq1T8lV1I/AAAAAAAAAmg/YOWlhEZFJjg/s72-c/Clipboard01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-4193168222683993133</id><published>2009-02-08T16:46:00.004+08:00</published><updated>2009-02-08T16:50:31.504+08:00</updated><title type='text'>Video Conversion using Pazera CLI</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SY6cOeIVKfI/AAAAAAAAAmY/bhEd0seR1Qw/s1600-h/pazera2.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SY6cOeIVKfI/AAAAAAAAAmY/bhEd0seR1Qw/s400/pazera2.jpg" alt="" id="BLOGGER_PHOTO_ID_5300345583881759218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Thumbnails generated by FFMPEG&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SY6cOBNC7HI/AAAAAAAAAmQ/G8OnhQEZCok/s1600-h/pazera1.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SY6cOBNC7HI/AAAAAAAAAmQ/G8OnhQEZCok/s400/pazera1.jpg" alt="" id="BLOGGER_PHOTO_ID_5300345576116907122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The magic command&lt;br /&gt;&lt;br /&gt;It works, using WINE and PAZERA free command line video conversion.&lt;br /&gt;&lt;br /&gt;Demo site&lt;br /&gt;&lt;a href="http://social.jobber.my/videos"&gt;http://social.jobber.my/videos&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pazera&lt;br /&gt;&lt;a href="http://www.download.com/Pazera-Free-FLV-to-AVI-Converter/3000-2194_4-10786669.html"&gt;http://www.download.com/Pazera-Free-FLV-to-AVI-Converter/3000-2194_4-10786669.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-4193168222683993133?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/4193168222683993133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/02/video-conversion-using-pazera-cli.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4193168222683993133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4193168222683993133'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/02/video-conversion-using-pazera-cli.html' title='Video Conversion using Pazera CLI'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_PMSLAMTiap8/SY6cOeIVKfI/AAAAAAAAAmY/bhEd0seR1Qw/s72-c/pazera2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-742614091649765745</id><published>2009-02-08T13:41:00.003+08:00</published><updated>2009-02-08T13:46:14.375+08:00</updated><title type='text'>Linux VPS + WINE + Pazera == Youtube</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SY5wxG5gwWI/AAAAAAAAAmI/PvqUl8X5D04/s1600-h/pazera.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 174px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SY5wxG5gwWI/AAAAAAAAAmI/PvqUl8X5D04/s400/pazera.png" alt="" id="BLOGGER_PHOTO_ID_5300297800429388130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;showing Pazera ffmpeg)x264.exe converting *.mp4 into *.flv and it works&lt;br /&gt;&lt;br /&gt;TVCC is cool but it costs money and FFMPEG not working on my linux box but it does on Windows XP.&lt;br /&gt;&lt;br /&gt;So here's the solution, install wine, upload c:\pazera folder into your Linux box, and convert the video using wine /root/ffmpeg.exe --args&lt;br /&gt;&lt;br /&gt;pazera is free video converter for windows, and it use FFMPEG. Tested with MP4,3GP,AVI ...all the videos can be converted into flv.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-742614091649765745?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/742614091649765745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/02/linux-vps-wine-pazera-youtube.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/742614091649765745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/742614091649765745'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/02/linux-vps-wine-pazera-youtube.html' title='Linux VPS + WINE + Pazera == Youtube'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/SY5wxG5gwWI/AAAAAAAAAmI/PvqUl8X5D04/s72-c/pazera.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-390396567322014599</id><published>2009-02-07T16:38:00.005+08:00</published><updated>2009-02-07T17:12:50.032+08:00</updated><title type='text'>Shop, RoR E-Commerce Store</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SY1Qf39a49I/AAAAAAAAAmA/SCziwkilYIw/s1600-h/store.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SY1Qf39a49I/AAAAAAAAAmA/SCziwkilYIw/s400/store.png" alt="" id="BLOGGER_PHOTO_ID_5299980845012673490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The Storefront&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/SY1IxW1ds6I/AAAAAAAAAl4/RaYh_PFsnX0/s1600-h/shp.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SY1IxW1ds6I/AAAAAAAAAl4/RaYh_PFsnX0/s400/shp.png" alt="" id="BLOGGER_PHOTO_ID_5299972349265556386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Shopping Cart Engine being developed using RoR 2.2.2 using guides from Depot,  Agile Web Development 2nd Edition&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-390396567322014599?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/390396567322014599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/02/shop-ror-e-commerce-store.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/390396567322014599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/390396567322014599'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/02/shop-ror-e-commerce-store.html' title='Shop, RoR E-Commerce Store'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/SY1Qf39a49I/AAAAAAAAAmA/SCziwkilYIw/s72-c/store.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-1941058817928635171</id><published>2009-02-07T00:14:00.002+08:00</published><updated>2009-02-07T00:19:44.986+08:00</updated><title type='text'>Video Conversion @ Social.Jobber.MY</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SYxiYI-gxDI/AAAAAAAAAlw/B9TDMeZjfH4/s1600-h/videos.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SYxiYI-gxDI/AAAAAAAAAlw/B9TDMeZjfH4/s400/videos.png" alt="" id="BLOGGER_PHOTO_ID_5299719028374291506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The video list&lt;br /&gt;&lt;br /&gt;At last, my video engine using Ruby On Rails finally working&lt;br /&gt;&lt;br /&gt;1. Upload video + title + body&lt;br /&gt;2. Flow FLV player&lt;br /&gt;3. Acts As State Machine&lt;br /&gt;4. Comments&lt;br /&gt;5. Total Video Conveter CLI running on Linux Centos 5.2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-1941058817928635171?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/1941058817928635171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/02/video-conversion-socialjobbermy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/1941058817928635171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/1941058817928635171'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/02/video-conversion-socialjobbermy.html' title='Video Conversion @ Social.Jobber.MY'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_PMSLAMTiap8/SYxiYI-gxDI/AAAAAAAAAlw/B9TDMeZjfH4/s72-c/videos.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-663074943964922304</id><published>2009-02-05T14:27:00.003+08:00</published><updated>2009-02-05T14:36:06.024+08:00</updated><title type='text'>Video Conversion in Linux using TVCC</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PMSLAMTiap8/SYqIpcnPERI/AAAAAAAAAlo/I_bWd1UmU8c/s1600-h/tvcc.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SYqIpcnPERI/AAAAAAAAAlo/I_bWd1UmU8c/s400/tvcc.png" alt="" id="BLOGGER_PHOTO_ID_5299198157191581970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Command line conversion in action&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SYqIdNhmyJI/AAAAAAAAAlg/txx8idMjuCM/s1600-h/convert.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 133px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SYqIdNhmyJI/AAAAAAAAAlg/txx8idMjuCM/s400/convert.png" alt="" id="BLOGGER_PHOTO_ID_5299197946983008402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The convert section in ruby on rails model&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ok, I hate FFMPEG period.&lt;br /&gt;&lt;br /&gt;TVCC ( Search google the term )&lt;br /&gt;&lt;br /&gt;1. Download TVCC.exe&lt;br /&gt;2. Install dalam Windows&lt;br /&gt;3. Yum install wine dalam VPS Centos server&lt;br /&gt;4. Kalau takder repo, edit /etc/yum.conf , add DAG punya repo&lt;br /&gt;&lt;br /&gt;[dag]&lt;br /&gt;name=Dag RPM Repository for Red Hat Enterprise Linux&lt;br /&gt;baseurl=&lt;a href="http://apt.sw.be/redhat/el$releasever/en/$basearch/dag" onmousedown="'UntrustedLink.bootstrap($(this)," target="_blank" rel="nofollow"&gt;&lt;span&gt;http://apt.sw.be/redhat/el&lt;/span&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;&lt;span&gt;$releasever/en/$basearch/d&lt;/span&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;ag&lt;/a&gt;&lt;br /&gt;gpgcheck=0&lt;br /&gt;enabled=1&lt;br /&gt;&lt;br /&gt;5. yum install wine&lt;br /&gt;6. Installing TVCC, apply PATCH from Mazwan&lt;br /&gt;7. Upload c:\TVCC to /root/TVCC&lt;br /&gt;&lt;span&gt; 8. wine /root/TVCC/TVCC.exe -f /root/MOV00022.3GP -o /var/www/ror_projects/soci&lt;/span&gt;&lt;div&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;&lt;span&gt;al_networking/public/flash&lt;/span&gt;&lt;wbr&gt;&lt;span class="word_break"&gt;&lt;/span&gt;/cuba.flv&lt;br /&gt;9. Ok, cool conversion done. The application works in Linux&lt;br /&gt;&lt;br /&gt;The software priced at USD1k ...for full unlimited version..unlimited sites&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-663074943964922304?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/663074943964922304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/02/video-conversion-in-linux-using-tvcc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/663074943964922304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/663074943964922304'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/02/video-conversion-in-linux-using-tvcc.html' title='Video Conversion in Linux using TVCC'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/SYqIpcnPERI/AAAAAAAAAlo/I_bWd1UmU8c/s72-c/tvcc.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-6530995847656256995</id><published>2009-02-04T15:23:00.003+08:00</published><updated>2009-02-04T15:46:28.282+08:00</updated><title type='text'>Designer learnt how to build Guestbook using Ruby On Rails in 16 seconds warp speed</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/SYlHoubW9II/AAAAAAAAAlY/E09E_2lqXr4/s1600-h/Clipboard05.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SYlHoubW9II/AAAAAAAAAlY/E09E_2lqXr4/s400/Clipboard05.png" alt="" id="BLOGGER_PHOTO_ID_5298845201561220226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nampak tak InstantRails nyer application, klik I..pastu pilih Rails Apps..pilih Console&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/SYlE5NwwjSI/AAAAAAAAAlQ/-HSzFNq26ME/s1600-h/Clipboard04.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SYlE5NwwjSI/AAAAAAAAAlQ/-HSzFNq26ME/s400/Clipboard04.png" alt="" id="BLOGGER_PHOTO_ID_5298842186315500834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Contoh Edit Guestbook&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PMSLAMTiap8/SYlE5AdGnkI/AAAAAAAAAlI/YhaA06lao-s/s1600-h/Clipboard03.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SYlE5AdGnkI/AAAAAAAAAlI/YhaA06lao-s/s400/Clipboard03.png" alt="" id="BLOGGER_PHOTO_ID_5298842182743400002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Contoh isi guest book, kalau ada error , terus highlight&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SYlE5AFXpfI/AAAAAAAAAlA/WiEH_cuLrb0/s1600-h/Clipboard02.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SYlE5AFXpfI/AAAAAAAAAlA/WiEH_cuLrb0/s400/Clipboard02.png" alt="" id="BLOGGER_PHOTO_ID_5298842182643852786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Form untuk isi guestbook&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SYlE43NMvTI/AAAAAAAAAk4/z-tf7-BIfIM/s1600-h/Clipboard01.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SYlE43NMvTI/AAAAAAAAAk4/z-tf7-BIfIM/s400/Clipboard01.png" alt="" id="BLOGGER_PHOTO_ID_5298842180260773170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Paparan guestbook&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The conversation.....&lt;br /&gt;&lt;br /&gt;wan azrif: okie&lt;br /&gt;wan azrif: download tu dah settle&lt;br /&gt;wan azrif: so cam mana nak install dulu&lt;br /&gt;Azril Nazli Alias: ok ko install kat c:\instanrails&lt;br /&gt;wan azrif: jap&lt;br /&gt;wan azrif: aku sedang extrack&lt;br /&gt;wan azrif: baru 61 persen&lt;br /&gt;Azril Nazli Alias: ok&lt;br /&gt;wan azrif: okie dah extrack then&lt;br /&gt;Azril Nazli Alias: ok cun&lt;br /&gt;Azril Nazli Alias: skrg masuk folder dia&lt;br /&gt;Azril Nazli Alias: klik ikon I&lt;br /&gt;Azril Nazli Alias: dable klik&lt;br /&gt;wan azrif: then klik okie kan&lt;br /&gt;Azril Nazli Alias: ok&lt;br /&gt;Azril Nazli Alias: ko klik I&lt;br /&gt;Azril Nazli Alias: pilih rails application&lt;br /&gt;Azril Nazli Alias: open ruby console windows&lt;br /&gt;wan azrif: okie dah&lt;br /&gt;wan azrif: then&lt;br /&gt;Azril Nazli Alias: ok skrg ko dalam skrin hitam lagi menakutkan bukan ?&lt;br /&gt;wan azrif: haaa&lt;br /&gt;wan azrif: aku ade nampak path&lt;br /&gt;Azril Nazli Alias: ok taip nih&lt;br /&gt;Azril Nazli Alias: rails guestbook&lt;br /&gt;wan azrif: c:\ balh balh blah&lt;br /&gt;Azril Nazli Alias: pastu enter&lt;br /&gt;wan azrif: dah&lt;br /&gt;wan azrif: wahhh&lt;br /&gt;wan azrif: apa benda berlaku tadi&lt;br /&gt;Azril Nazli Alias: pastu tunggu&lt;br /&gt;wan azrif: tetiba jer keluar&lt;br /&gt;wan azrif: create bebeanyak&lt;br /&gt;Azril Nazli Alias: ok seterusnya&lt;br /&gt;wan azrif: virus kaaa&lt;br /&gt;wan azrif: then&lt;br /&gt;Azril Nazli Alias: guest book ko nak cemana&lt;br /&gt;Azril Nazli Alias: nama,emel,message ?&lt;br /&gt;Azril Nazli Alias: betul&lt;br /&gt;Azril Nazli Alias: guna 3 field&lt;br /&gt;wan azrif: haaa&lt;br /&gt;Azril Nazli Alias: cd guestbook&lt;br /&gt;Azril Nazli Alias: taip tuh&lt;br /&gt;wan azrif: then&lt;br /&gt;wan azrif: sekarang aku dalam folder gustbook&lt;br /&gt;Azril Nazli Alias: cunn&lt;br /&gt;Azril Nazli Alias: ko nak buat 3 field kan&lt;br /&gt;Azril Nazli Alias: so aku citer sikit&lt;br /&gt;wan azrif: okie cam mana tu&lt;br /&gt;Azril Nazli Alias: name adalah string&lt;br /&gt;Azril Nazli Alias: email adalah string&lt;br /&gt;Azril Nazli Alias: dan message adalah text&lt;br /&gt;Azril Nazli Alias: so command dia jeng je jeng&lt;br /&gt;wan azrif: so cam mana aku nak type&lt;br /&gt;wan azrif: aku nak tulis kat mana&lt;br /&gt;wan azrif: hahahah&lt;br /&gt;Azril Nazli Alias: jap aku tgh taip&lt;br /&gt;Azril Nazli Alias: ruby script\generate scaffold Guestbook name:string email:string message:text&lt;br /&gt;Azril Nazli Alias: pastu enter&lt;br /&gt;wan azrif: dah&lt;br /&gt;wan azrif: dia createkan dah&lt;br /&gt;Azril Nazli Alias: ok cuns&lt;br /&gt;Azril Nazli Alias: skrg kita nak run server&lt;br /&gt;wan azrif: huh pendek gilos&lt;br /&gt;Azril Nazli Alias: ruby script\server&lt;br /&gt;Azril Nazli Alias: pastu taip enter&lt;br /&gt;Azril Nazli Alias: opss tekan enter&lt;br /&gt;wan azrif: dah&lt;br /&gt;wan azrif: lepas tu&lt;br /&gt;Azril Nazli Alias: http://localhost:3000&lt;br /&gt;Azril Nazli Alias: kat browser&lt;br /&gt;wan azrif: dah&lt;br /&gt;wan azrif: ooo cam nie rupa dia&lt;br /&gt;Azril Nazli Alias: ok jap aku lupa&lt;br /&gt;Azril Nazli Alias: create database&lt;br /&gt;wan azrif: sama cam kat tutorial lah pulak&lt;br /&gt;Azril Nazli Alias: ko buat arahan nih&lt;br /&gt;Azril Nazli Alias: rake db:create pastu enter&lt;br /&gt;wan azrif: create database kat mana&lt;br /&gt;Azril Nazli Alias: rake db:migrate pastu enter&lt;br /&gt;Azril Nazli Alias: ko tekan ctrl c&lt;br /&gt;Azril Nazli Alias: matikan server balik&lt;br /&gt;wan azrif: perkara tu nak create kat dos tadi ker&lt;br /&gt;Azril Nazli Alias: taip kat dos tadi&lt;br /&gt;wan azrif: k jap&lt;br /&gt;wan azrif: ermm tetiba jer aku tak leh type kat situ lah pulak&lt;br /&gt;Azril Nazli Alias: ok ko dah tekan ctrl + c?&lt;br /&gt;wan azrif: jap&lt;br /&gt;wan azrif: okie dah&lt;br /&gt;wan azrif: then&lt;br /&gt;Azril Nazli Alias: rake db:create&lt;br /&gt;Azril Nazli Alias: kemudian rake db:migrate&lt;br /&gt;Azril Nazli Alias: ok skrg start balik server&lt;br /&gt;wan azrif: apa funtion dia&lt;br /&gt;Azril Nazli Alias: ruby script/server&lt;br /&gt;wan azrif: nak restart&lt;br /&gt;Azril Nazli Alias: taip ruby script\server&lt;br /&gt;wan azrif: dah&lt;br /&gt;wan azrif: then&lt;br /&gt;Azril Nazli Alias: http://localhost:3000/guestbooks&lt;br /&gt;wan azrif: hahahah ade lah siut&lt;br /&gt;wan azrif: biar betul&lt;br /&gt;Azril Nazli Alias: ok sign guestbok ko&lt;br /&gt;wan azrif: udah&lt;br /&gt;wan azrif: beb&lt;br /&gt;wan azrif: siap leh tengok listing lagi tu&lt;br /&gt;wan azrif: tapi&lt;br /&gt;wan azrif: kalau aku biar kan kosong&lt;br /&gt;Azril Nazli Alias: ok ko nak edit&lt;br /&gt;wan azrif: still leh isi lagi tu&lt;br /&gt;Azril Nazli Alias: ok ko nak buat validation ?&lt;br /&gt;Azril Nazli Alias: he heh jap&lt;br /&gt;wan azrif: yela maksud nya&lt;br /&gt;wan azrif: kene isi lah jgn kasi kosong itu jer&lt;br /&gt;wan azrif: basic basic punya dulu&lt;br /&gt;Azril Nazli Alias: ok sat aku test&lt;br /&gt;wan azrif: k&lt;br /&gt;wan azrif: tapi mudah gila beb&lt;br /&gt;wan azrif: kalau aku pro leh siap dalam 1 minti jer tu&lt;br /&gt;wan azrif: ahahahha&lt;br /&gt;Azril Nazli Alias: ok&lt;br /&gt;Azril Nazli Alias: ko bukak file nih&lt;br /&gt;wan azrif: mana&lt;br /&gt;Azril Nazli Alias: c:\instant rails \ rails_apps&lt;br /&gt;Azril Nazli Alias: c:\instant rails \ rails_apps \ guestbook\ap \ model \ guestbook.rb&lt;br /&gt;Azril Nazli Alias: pakai textpad ker&lt;br /&gt;wan azrif: wahh cam mana aku nak bukak tuuu&lt;br /&gt;wan azrif: aku nak tengok kat dos ker&lt;br /&gt;Azril Nazli Alias: pakai textpad laa&lt;br /&gt;Azril Nazli Alias: iskk&lt;br /&gt;wan azrif: WHAT THE FUCK&lt;br /&gt;wan azrif: AKU NAMPAK INI JER&lt;br /&gt;wan azrif: class Guestbook &lt;&gt; validates_presence_of :name&lt;br /&gt;Azril Nazli Alias: dia akan pastikan user isik name&lt;br /&gt;wan azrif: ler itu jer ker&lt;br /&gt;wan azrif: ko biat betul&lt;br /&gt;wan azrif: so aku save ker&lt;br /&gt;Azril Nazli Alias: kalau nak semua sekali&lt;br /&gt;Azril Nazli Alias: validates_presence_of :name&lt;br /&gt;Azril Nazli Alias: validates_presence_of :email&lt;br /&gt;Azril Nazli Alias: validates_presence_of :message&lt;br /&gt;Azril Nazli Alias: save pastu try isik tanpa tulis nama&lt;br /&gt;wan azrif: okie jap&lt;br /&gt;wan azrif: bapak gudang nya besar&lt;br /&gt;wan azrif: error dia&lt;br /&gt;wan azrif: hahahahahaha&lt;br /&gt;wan azrif: 1 error prohibited this guestbook from being saved&lt;br /&gt;&lt;br /&gt;There were problems with the following fields:&lt;br /&gt;&lt;br /&gt;* Email can't be blank&lt;br /&gt;wan azrif: huh itu jer code dia yek simple gila lah bro&lt;br /&gt;Azril Nazli Alias: he heh&lt;br /&gt;Azril Nazli Alias: nak ubah ko godek views/guestbooks/&lt;br /&gt;wan azrif: ooo tak salah aku&lt;br /&gt;Azril Nazli Alias: dalam layouts file master dia&lt;br /&gt;wan azrif: dalam folder dia nie&lt;br /&gt;wan azrif: sama macam warisan lah pulak&lt;br /&gt;Azril Nazli Alias: views/layouts/&lt;br /&gt;Azril Nazli Alias:&lt;br /&gt;wan azrif: ade app folder&lt;br /&gt;wan azrif: hahahaaha&lt;br /&gt;wan azrif:&lt;br /&gt;Azril Nazli Alias: warisan..e-rakan&lt;br /&gt;wan azrif: maknanya ko guna ruby lah nie yek&lt;br /&gt;wan azrif: oooo ic&lt;br /&gt;wan azrif: cam tu senang lah aku nak godek&lt;br /&gt;wan azrif: sebab aku dah tau&lt;br /&gt;Azril Nazli Alias: tak..aku guna cakephp&lt;br /&gt;wan azrif: hahahahaahh&lt;br /&gt;Azril Nazli Alias: yg aku ajar kko nih guna ruby&lt;br /&gt;Azril Nazli Alias: super ultra easy&lt;br /&gt;Azril Nazli Alias: ok aku nak ajar ko guestbook guna database pulak&lt;br /&gt;Azril Nazli Alias: jom start balik&lt;br /&gt;Azril Nazli Alias: database mysql&lt;br /&gt;Azril Nazli Alias: k kata nak buat contact form kan ?&lt;br /&gt;wan azrif: oooo&lt;br /&gt;wan azrif: satu satu lah&lt;br /&gt;wan azrif: sebab aku nak try buat balik&lt;br /&gt;Azril Nazli Alias: ok ko layan laa dulu guest book&lt;br /&gt;wan azrif: haaaa&lt;br /&gt;wan azrif: dah ler aku baru nak berjinak&lt;br /&gt;Azril Nazli Alias: ko try ubah layout&lt;br /&gt;Azril Nazli Alias: ubah file view dia&lt;br /&gt;Azril Nazli Alias: ko tengok fail view dia&lt;br /&gt;Azril Nazli Alias: ada 4 keping&lt;br /&gt;wan azrif: okie&lt;br /&gt;wan azrif: aku nak tanya ko nie&lt;br /&gt;wan azrif: kenapa&lt;br /&gt;wan azrif: name : string&lt;br /&gt;wan azrif: dan message : text lak&lt;br /&gt;Azril Nazli Alias: sebab nama kan pendek&lt;br /&gt;Azril Nazli Alias: kalau ko set text..boleh jadi panjang&lt;br /&gt;Azril Nazli Alias: dan automatik dia set textarea&lt;br /&gt;wan azrif: kalau nama dia cam nama aku wan ariffuddin bin wan ramli&lt;br /&gt;Azril Nazli Alias: tetap string&lt;br /&gt;wan azrif: okieee&lt;br /&gt;Azril Nazli Alias: text nih macma nak isi karangan&lt;br /&gt;wan azrif: okie kalau aku nak letak yg melibatkan number&lt;br /&gt;Azril Nazli Alias: phone:integer&lt;br /&gt;wan azrif: contoh phone:number cam tu ker&lt;br /&gt;wan azrif: ohh interger&lt;br /&gt;Azril Nazli Alias: age:number&lt;br /&gt;wan azrif: ceh cam c++ lah pulak&lt;br /&gt;Azril Nazli Alias: umur:integer&lt;br /&gt;Azril Nazli Alias: bukan number&lt;br /&gt;wan azrif: okie okie aku nak tau benda benda tu dulu&lt;br /&gt;Azril Nazli Alias: age:integer&lt;br /&gt;wan azrif: so baru rancak nak buat testing nanti&lt;br /&gt;Azril Nazli Alias: http://solutions.treypiepmeier.com/2006/12/04/rails-migration-data-types/&lt;br /&gt;wan azrif: so kalau tarikhate lah yek&lt;br /&gt;wan azrif: tarikh : date lah kan&lt;br /&gt;Azril Nazli Alias: yup&lt;br /&gt;Azril Nazli Alias: tarikhate&lt;br /&gt;Azril Nazli Alias: dem&lt;br /&gt;Azril Nazli Alias: kahwin ker belum ? status:boolean&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-6530995847656256995?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/6530995847656256995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/02/designer-learn-ruby-on-rails.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/6530995847656256995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/6530995847656256995'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/02/designer-learn-ruby-on-rails.html' title='Designer learnt how to build Guestbook using Ruby On Rails in 16 seconds warp speed'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PMSLAMTiap8/SYlHoubW9II/AAAAAAAAAlY/E09E_2lqXr4/s72-c/Clipboard05.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-281509512021655906</id><published>2009-01-30T21:45:00.002+08:00</published><updated>2009-01-30T21:47:43.994+08:00</updated><title type='text'>CakePHP : AfterFind()</title><content type='html'>Rather than hacking the view to check if the number in my Inbox or Outbox table tally with my Contacts number, I use the afterModel() hack.&lt;br /&gt;&lt;br /&gt;The Inbox Model&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;class Inbox extends AppModel {&lt;br /&gt;  var $name = 'Inbox';&lt;br /&gt;  var $useTable = 'inbox';&lt;br /&gt;  var $order = 'Inbox.id DESC';&lt;br /&gt;&lt;br /&gt;  function afterFind($results) {&lt;br /&gt;&lt;br /&gt;    // load Contact model here&lt;br /&gt;    App::import('Model','Contact');&lt;br /&gt;    $this-&gt;Contact = new Contact();&lt;br /&gt;&lt;br /&gt;    // For any results returned from the 'Inbox' model, take 'number' and check with Contact model&lt;br /&gt;    foreach ($results as $key =&gt; $val) {&lt;br /&gt;      if(!empty( $val['Inbox']['number'] )) {&lt;br /&gt;        if ( $contact_id = $this-&gt;Contact-&gt;findByMobileNumber($val['Inbox']['number'],array('id','name')) ){&lt;br /&gt;          $results[$key]['Inbox']['contact_id'] = $contact_id['Contact']['id'];&lt;br /&gt;          $results[$key]['Inbox']['contact_name'] = $contact_id['Contact']['name'];&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    } &lt;br /&gt;    return $results;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Try the output in view&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;pre&gt;Array&lt;br /&gt;(&lt;br /&gt;   [Inbox] =&gt; Array&lt;br /&gt;       (&lt;br /&gt;           [id] =&gt; 266&lt;br /&gt;           [number] =&gt; +60146412911&lt;br /&gt;           [smsdate] =&gt; 2009-01-30 15:02:06&lt;br /&gt;           [insertdate] =&gt; 2009-01-30 15:02:25&lt;br /&gt;           [text] =&gt; test1243&lt;br /&gt;           [phone] =&gt;&lt;br /&gt;           [processed] =&gt; 0&lt;br /&gt;           [read] =&gt; 1&lt;br /&gt;           [contact_id] =&gt; 14&lt;br /&gt;           [contact_name] =&gt; Bazet&lt;br /&gt;       )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Clean hack&lt;br /&gt;&lt;br /&gt;)&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/5965248995424798524-281509512021655906?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/281509512021655906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/01/cakephp-afterfind.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/281509512021655906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/281509512021655906'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/01/cakephp-afterfind.html' title='CakePHP : AfterFind()'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-427060871029151982</id><published>2009-01-29T17:20:00.002+08:00</published><updated>2009-01-29T17:26:48.016+08:00</updated><title type='text'>CakeSMS : 2 Way SMS</title><content type='html'>I just updated CakeSMS application. Adding validation to Outbox model so I can limit the text to 160 characters and only numeric format accepted in number field.&lt;br /&gt;&lt;br /&gt;Then my phone rang, somebody from the govt interested with the product and asking about 2 WAY sms support.&lt;br /&gt;&lt;br /&gt;For example&lt;br /&gt;&lt;br /&gt;sending 'HELP' will list out all the command&lt;br /&gt;&lt;br /&gt;sending ' get staff 3713' will list staff 3713 informations&lt;br /&gt;&lt;br /&gt;Well, how do I do that ?&lt;br /&gt;&lt;br /&gt;First I need to write a listener in CakePHP that run every seconds. the listener will read all the incoming SMS and will process the text, if the matching text found, it will trigger the command for that text.&lt;br /&gt;&lt;br /&gt;Keep It Simple&lt;br /&gt;&lt;br /&gt;How do I run PHP code forever then ?&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;while (1 == true) {&lt;br /&gt;// logic is here&lt;br /&gt;} ?&gt;&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/5965248995424798524-427060871029151982?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/427060871029151982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/01/cakesms-2-way-sms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/427060871029151982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/427060871029151982'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/01/cakesms-2-way-sms.html' title='CakeSMS : 2 Way SMS'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-1868340219364182768</id><published>2009-01-26T09:07:00.003+08:00</published><updated>2009-01-26T09:19:20.203+08:00</updated><title type='text'>CakeSMS Development</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PMSLAMTiap8/SX0PYNP3jZI/AAAAAAAAAjk/yVj-hQv7wjs/s1600-h/debug.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SX0PYNP3jZI/AAAAAAAAAjk/yVj-hQv7wjs/s400/debug.png" alt="" id="BLOGGER_PHOTO_ID_5295405645405064594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Running smsd in debug mode. You can clearly see whats happening.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PMSLAMTiap8/SX0NAVKH9kI/AAAAAAAAAjc/Jn2OnBb69JA/s1600-h/cakesms.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SX0NAVKH9kI/AAAAAAAAAjc/Jn2OnBb69JA/s400/cakesms.png" alt="" id="BLOGGER_PHOTO_ID_5295403036188341826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is group SMS interface. Just a simple one. Just choose the Contact Group, type the message, and all the SMS will be put on qeueu on Outbox table. SMS sending speed depends on how many modem attached to the system&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-1868340219364182768?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/1868340219364182768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/01/cakesms-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/1868340219364182768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/1868340219364182768'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/01/cakesms-development.html' title='CakeSMS Development'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_PMSLAMTiap8/SX0PYNP3jZI/AAAAAAAAAjk/yVj-hQv7wjs/s72-c/debug.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-8574497282461304078</id><published>2009-01-25T22:36:00.002+08:00</published><updated>2009-01-25T22:41:50.106+08:00</updated><title type='text'>CakeSMS</title><content type='html'>Screw Ruby On Rails for a while, back to CakePHP. I've written a simple guide in PDF on how to deploy your own SMS server using normal hand phone and Linux via VMWARE. The PDF cane be downloaded at here, &lt;a style="font-weight: bold;" href="http://cakesms.blogspot.com"&gt;http://cakesms.blogspot.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;At the end of the session, you'll get a working web interface for managing incoming and outgoing SMS.&lt;br /&gt;&lt;br /&gt;Now, I'm extending the functions to include :&lt;br /&gt;1. Group SEND ( send SMS to all contacts under specified group )&lt;br /&gt;2. Contact Group Management&lt;br /&gt;3. Contacts Management&lt;br /&gt;4. User Authentication&lt;br /&gt;5. SMS log for incoming and outgoing message&lt;br /&gt;&lt;br /&gt;Ok folks, that all for now. Going to finish the module in an hour or so&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-8574497282461304078?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/8574497282461304078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/01/cakesms.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8574497282461304078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8574497282461304078'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/01/cakesms.html' title='CakeSMS'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-3486951421568072692</id><published>2009-01-22T15:23:00.004+08:00</published><updated>2009-01-22T15:38:17.017+08:00</updated><title type='text'>FFMpeg to convert 3GP to FLV</title><content type='html'>Did you know, default FFMPEG binary can't convert 3GP to FLV ? You will need to compile back again.&lt;br /&gt;&lt;br /&gt;I'm using Linux Centos 5.1 ( upgraded overnight using yum -y )&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1: Install Subversion and Checkinstall thru YUM&lt;/span&gt;&lt;br /&gt;yum install subversion&lt;br /&gt;yum install checkinstall&lt;br /&gt;yum install git&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2: Create SRC directory, and Download the sourcecode&lt;/span&gt;&lt;br /&gt;mkdir /root/src/&lt;br /&gt;cd /root/src/&lt;br /&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt; git clone git://git.videolan.org/x264.git&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt; wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-7.0.0.2.tar.bz2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt; wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-7.0.0.3.tar.bz2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt; wget http://www.tortall.net/projects/yasm/releases/yasm-0.7.2.tar.gz&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3 : Untar &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style="font-weight: normal;"&gt;tar -xjvf amrnb-7.0.0.2.tar.bz2&lt;br /&gt;tar -xjvf amrwb-7.0.0.3.tar.bz2&lt;br /&gt;tar -xzvf yasm-0.7.2.tar.gz&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4 : Compile&lt;br /&gt;&lt;/span&gt;&lt;strong style="font-weight: normal;"&gt;$ cd yasm-0.7.2&lt;br /&gt;$ ./configure&lt;br /&gt;$ make&lt;br /&gt;$ sudo checkinstall&lt;br /&gt;$ cd ..&lt;br /&gt;&lt;/strong&gt;Libamr is the audio encoder/decoder for 3gp format&lt;br /&gt;&lt;strong style="font-weight: normal;"&gt;$ cd amrnb-7.0.0.2&lt;br /&gt;$ ./configure –prefix=/usr&lt;br /&gt;$ make&lt;br /&gt;$ sudo make install&lt;br /&gt;$ cd ..&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;$ cd amrwb-7.0.0.3&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;$ ./configure –prefix=/usr&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;$ make&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;$ sudo make install&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;$ cd ..&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;From&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/X264" target="_blank"&gt;&lt;span style="font-weight: bold;"&gt;Wi&lt;/span&gt;kipedia&lt;/a&gt;: x264 is a free software library for encoding H.264/MPEG-4 AVC video streams&lt;br /&gt;&lt;strong style="font-weight: normal;"&gt;$ cd x264&lt;br /&gt;$ ./configure –prefix=/usr –enable-shared&lt;br /&gt;$ make&lt;br /&gt;$ sudo checkinstall –pkgname=x264 –pkgversion “1:0.svn`date +%Y%m%d`-0.0ubuntu1″&lt;br /&gt;$ sudo ldconfig&lt;br /&gt;$ cd ..&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;$ cd ffmpeg&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;$ ./configure –enable-gpl –enable-swscale –enable-pthreads –enable-libvorbis –enable-libtheora –enable-libvorbis –enable-libgsm –enable-libdc1394 –disable-debug –enable-shared –enable-libmp3lame –enable-libfaad –enable-libfaac –disable-vhook –enable-libxvid –enable-libx264 –enable-postproc –enable-libamr-nb –enable-libamr-wb –enable-avfilter –enable-nonfree –prefix=/usr&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;$ make&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;$ sudo checkinstall or make install ( either one )&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-3486951421568072692?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/3486951421568072692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/01/ffmpeg-to-convert-3gp-to-flv.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/3486951421568072692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/3486951421568072692'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/01/ffmpeg-to-convert-3gp-to-flv.html' title='FFMpeg to convert 3GP to FLV'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-8951566413509871602</id><published>2009-01-22T00:48:00.004+08:00</published><updated>2009-01-22T00:56:08.920+08:00</updated><title type='text'>Social Networking @Jobber.MY</title><content type='html'>The social networking development engine is quite near to finish. It is one man job and I'm using Alan Bradburne's Practical Rails Social Networking Sites as guidance.&lt;br /&gt;&lt;br /&gt;Well the book is good if you have basic Ruby knowledge. But I want to add Video engine. User can upload video in various format and rendered in FLV format.&lt;br /&gt;&lt;br /&gt;I'm using Centos 5.1 VPS, and I need to install FFMPEG,&lt;br /&gt;&lt;br /&gt;1. I use this guide to install FFMPEG ( turn off gpgcheck = 0 )&lt;br /&gt;http://www.tuxmachines.org/node/17063&lt;br /&gt;&lt;br /&gt;2. Then I ran &lt;span style="font-weight: bold;"&gt;yum install ffmpeg&lt;/span&gt; and yum install &lt;span style="font-weight: bold;"&gt;ffmpeg-devel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3. Run ffmpeg -v to check the version&lt;br /&gt;&lt;pre&gt;[root@vmap1 social_networking]# ffmpeg -v&lt;br /&gt;FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2007 Fabrice Bellard, et al.&lt;br /&gt;  configuration: --prefix=/usr --libdir=/usr/lib --mandir=/usr/share/man --incdir=/usr/include/ffmpeg --enable-libmp3lame --enable-libogg --enable-libvorbis --enable-libogg --enable-libtheora --enable-libfaad --enable-libfaac --enable-libgsm --enable-xvid --enable-x264 --enable-liba52 --enable-liba52bin --enable-pp --enable-shared --enable-pthreads --enable-gpl --disable-strip&lt;br /&gt;  libavutil version: 49.4.0&lt;br /&gt;  libavcodec version: 51.40.4&lt;br /&gt;  libavformat version: 51.12.1&lt;br /&gt;  built on Jun  4 2007 11:02:12, gcc: 4.1.1 20070105 (Red Hat 4.1.1-52)&lt;br /&gt;ffmpeg: missing argument for option '-v'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;4. Cool. Now to install Background Worker for video conversion in Ruby On Rails&lt;br /&gt;http://backgroundrb.rubyforge.org/&lt;br /&gt;&lt;br /&gt;5. More reading @&lt;br /&gt;http://kpumuk.info/ruby-on-rails/encoding-media-files-in-ruby-using-ffmpeg-mencoder-with-progress-tracking/&lt;br /&gt;&lt;br /&gt;http://jimneath.org/2008/06/03/converting-videos-with-rails-converting-the-video/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-8951566413509871602?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/8951566413509871602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/01/social-networking-jobbermy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8951566413509871602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/8951566413509871602'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/01/social-networking-jobbermy.html' title='Social Networking @Jobber.MY'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-4767379729476216936</id><published>2009-01-21T14:09:00.002+08:00</published><updated>2009-01-21T14:17:08.928+08:00</updated><title type='text'>200,000 workers to be retrenched in Malaysia</title><content type='html'>The economy slowdown not hitting Malaysia pretty bad. According to official press release by Human Resource Department in Malaysia, almost 200,000 workers will lost their jobs. Most of then came from manufacturing sectors.&lt;br /&gt;&lt;br /&gt;So how to prepare yourself as a web programmer or web designer ?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;For Programmers&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1. Equip yourself with latest development tool&lt;/li&gt;&lt;li&gt;2. Intstead of know 1 programming language, extends to many such as PHP,Ruby,Python&lt;/li&gt;&lt;li&gt;3. Try to minimize development cycle, this can be achieved if you're using RAD Frameworks like &lt;a href="http://cakephp.org/"&gt;CakePHP&lt;/a&gt;, &lt;a href="http://codeigniter.com/"&gt;Code Igniter&lt;/a&gt;,&lt;a href="http://symfony-project.org/"&gt; Symfony&lt;/a&gt; or &lt;a href="http://www.rubyonrails.com/"&gt;Ruby On Rails&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;4. Learn to write Ajax functions using Framework such as &lt;span style="font-weight: bold;"&gt;Jquery&lt;/span&gt;,&lt;span style="font-weight: bold;"&gt;MooTool&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;ScriptAculosU&lt;/span&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/5965248995424798524-4767379729476216936?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/4767379729476216936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/01/200000-workers-to-be-retrenched-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4767379729476216936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/4767379729476216936'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/01/200000-workers-to-be-retrenched-in.html' title='200,000 workers to be retrenched in Malaysia'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-6891427064225118355</id><published>2009-01-21T11:17:00.001+08:00</published><updated>2009-01-21T11:28:25.636+08:00</updated><title type='text'>PHP Programmers in Malaysia</title><content type='html'>&lt;span style="font-weight:bold;"&gt;PHP Programmers&lt;/span&gt; are the most demanded jobs at &lt;a href="Jobber.my"&gt;Jobber.my&lt;/a&gt;. Well at least in Malaysia, PHP Programmy are needed virtually anywhere. So how to be a PHP Programmer ?&lt;br /&gt;&lt;br /&gt;Me myself have coding in PHP for since year 2000. My teacher is Google. Yeah, I'm self taught PHP Programmer and most of the PHP Programmers out there is same like. &lt;br /&gt;&lt;br /&gt;So how to start ? If you have some basic programming like C and Java it will help a lot since coding in PHP is not much different in Java or C. But if you don't have any programming background, dont't worry. As long you're willing to spend time learning programming, in 1 year you can be a PHP programmer too.&lt;br /&gt;&lt;br /&gt;Honestly, you need to spend some money for books and training. Just head up to any bookstore and look for &lt;a href="http://www.apress.com/book/view/1590598628"&gt;Beginning PHP &amp; MySQL from APress&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Learn on how to program by yourself, not to copy others code and claim yourself as PHP Programmer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-6891427064225118355?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/6891427064225118355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/01/php-programmers-in-malaysia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/6891427064225118355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/6891427064225118355'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/01/php-programmers-in-malaysia.html' title='PHP Programmers in Malaysia'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5965248995424798524.post-6239966117094090217</id><published>2009-01-21T02:55:00.000+08:00</published><updated>2009-01-21T11:07:09.141+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='job ict malaysia jobber.my'/><title type='text'>Jobber.MY , Hub for ICT Jobs in Malaysia</title><content type='html'>Hosted with my friend webhosting, &lt;a href="http://www.zenpipe.com"&gt;Zenpipe.com&lt;/a&gt;, Jobber.my was a successful hit. After 2 days of soft launch, almost 1000 unique users view the job board. Thanks for free website tracking, &lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The job board itself, is using free open source software, &lt;a href="http://www.jobberbase.com"&gt;Jobber Base&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Most of the job sites in Malaysia, are not targetting niche market like ICT, but Jobber.my does.&lt;br /&gt;&lt;br /&gt;So if your company or just need a freelancer, you guys can post the job for free at &lt;a href="http://www.jobber.my"&gt;Jobber.my&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5965248995424798524-6239966117094090217?l=cakegps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakegps.blogspot.com/feeds/6239966117094090217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://cakegps.blogspot.com/2009/01/jobbermy-hub-for-ict-jobs-in-malaysia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/6239966117094090217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5965248995424798524/posts/default/6239966117094090217'/><link rel='alternate' type='text/html' href='http://cakegps.blogspot.com/2009/01/jobbermy-hub-for-ict-jobs-in-malaysia.html' title='Jobber.MY , Hub for ICT Jobs in Malaysia'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry></feed>
