<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;CE8FQXc-cCp7ImA9WhRWGU4.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855</id><updated>2012-01-07T02:40:10.958-08:00</updated><category term="mobile" /><category term="facebook" /><category term="extensions" /><category term="javascript" /><category term="utorrent" /><category term="php" /><category term="ajax" /><category term="sd card" /><category term="random" /><category term="broadband" /><category term="hosting" /><category term="self" /><category term="freeware" /><category term="wordpress" /><category term="firefox" /><category term="jquery" /><category term="florida" /><category term="android" /><category term="iphone" /><category term="blogger" /><category term="tips" /><category term="delicious" /><category term="monitor" /><category term="keyboard" /><category term="isyncr" /><category term="cakephp" /><category term="windows" /><category term="dreamhost" /><category term="email" /><category term="nearlyfreespeech" /><category term="hacker news" /><category term="podcasts" /><category term="cron" /><category term="winamp" /><category term="work" /><category term="itunes" /><category term="hardware" /><category term="svn" /><title>singletonio</title><subtitle type="html">web developer . android fanboi</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/singletonio" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="singletonio" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CkcGR38-eip7ImA9WhZVF0U.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-5959123532331978643</id><published>2011-05-30T11:27:00.000-07:00</published><updated>2011-05-30T11:27:06.152-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-30T11:27:06.152-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="podcasts" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="itunes" /><title>Use Android to download and manage your podcasts</title><content type="html">Still using iTunes to download your podcasts? Unless you listen to podcasts on your PC, it's such a hassle to always download podcasts and sync them to your iPhone or iTunes. Syncing with wires is not fun. Our modern smartphones are already little PC's right? These little machines can already download and play music, but why are we still syncing to iTunes for podcasts? If you're using Android, &lt;a href="https://market.android.com/details?id=mobi.beyondpod&amp;amp;feature=search_result"&gt;BeyondPod&lt;/a&gt; will let you manage and download your podcasts on the phone itself! You can try it out for free and if you like it, go buy the &lt;a href="https://market.android.com/details?id=mobi.beyondpod.unlockkey"&gt;unlock key&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-5959123532331978643?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/E9CqfJc13Qk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/5959123532331978643/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2011/05/use-android-to-download-and-manage-your.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/5959123532331978643?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/5959123532331978643?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2011/05/use-android-to-download-and-manage-your.html" title="Use Android to download and manage your podcasts" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;Ck4ERHk7cSp7ImA9WhZbE08.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-83776166596626453</id><published>2011-05-30T11:13:00.000-07:00</published><updated>2011-06-17T07:28:25.709-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-17T07:28:25.709-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="isyncr" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="itunes" /><title>How to sync your Android phone to iTunes (wirelessly!)</title><content type="html">&lt;i&gt;Update: I'm now using &lt;a href="https://market.android.com/details?id=jp.vier.music.syncpro&amp;amp;feature=search_result"&gt;WiFi Tunes Sync Pro&lt;/a&gt; ($0.99) which I think is simpler and faster. It also has a &lt;a href="https://market.android.com/details?id=jp.vier.music.sync&amp;amp;feature=search_result"&gt;free version&lt;/a&gt; that you can try first.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;As a previous owner of an iPod touch, I've come to love how the iPod syncs to iTunes. iTunes is a very good and stable media player/music management software. One shortcoming of Android is that even though it has a very functional music player, it doesn't have something like iTunes where you can sync and manage your music on your PC. There are several options out there like Winamp and DoubleTwist, but they either don't work very well or they lack the simplicity and features of iTunes. Thankfully there's &lt;a href="https://market.android.com/details?id=com.jrtstudio.iSyncr&amp;amp;feature=search_result"&gt;iSyncr&lt;/a&gt; ($2.99) which will let you sync your Android to iTunes. It works very well -- no need to switch to another media player to sync your iTunes library. Even better is there's &lt;a href="https://market.android.com/details?id=com.jrtstudio.iSyncr.WiFi"&gt;iSyncr WiFI Add-on&lt;/a&gt; ($0.99) which will let you sync using wifi -- now that's even better than iPod/iPhone! I suggest buying both paid versions since it's cheap and very worth your money. There's also a free lite versions &lt;a href="https://market.android.com/details?id=com.jrtstudio.iSyncrLite"&gt;(iSyncr Lite&lt;/a&gt;/ &lt;a href="https://market.android.com/details?id=com.jrtstudio.iSyncr.WiFiLite"&gt;iSyncr WiFi Lite&lt;/a&gt;) that you can try out with limited features.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-83776166596626453?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/KqGqGFxXbyY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/83776166596626453/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2011/05/how-to-sync-your-android-phone-to.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/83776166596626453?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/83776166596626453?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2011/05/how-to-sync-your-android-phone-to.html" title="How to sync your Android phone to iTunes (wirelessly!)" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DkYFRXg6eSp7ImA9WhdSF0Q.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-6255466588678785102</id><published>2011-04-21T14:47:00.000-07:00</published><updated>2011-07-27T12:15:14.611-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-27T12:15:14.611-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="self" /><category scheme="http://www.blogger.com/atom/ns#" term="florida" /><category scheme="http://www.blogger.com/atom/ns#" term="work" /><title>My experience being onshore</title><content type="html">Last year I was assigned onshore (Florida) by my company. I can say that it was one of those best experiences that I wouldn't want to repeat (well, that's a little exaggerated ;). Best because I really learned A LOT of stuff in those 3 months. In terms of experience, nothing can beat being onshore. You practice speaking in english, learn how to deal with clients, and be exposed to a totally different culture and environment. The first 2 months was quite fun, since everything was new for me. I was curious about everything. Maybe think about when you're still learning how to program. Everything is really abundant there, especially if you have the money to spend. I usually find myself browsing Amazon for my next gadget to buy (thanks Amazon Prime!). At some point, we were being materialistic to overcome the sadness of being away from home.&lt;br /&gt;
&lt;br /&gt;
My experience there is a little different because we did not have our own car. We had to get a cab even just to buy some groceries. That is a big deal if you are in Florida, since almost nothing is walking distance. One good thing though is our hotel is near the office so we don't have to commute -- but for everything else, it's a cab ride. Since our budget is limited, we didn't go out as much, so most of the time we're in the hotel watching TV or browsing the web. I guess this is where things get sad - feeling very far away from your home country, feeling alienated because you're not a citizen of that country. By the 3rd month we were all eager to go back, everyday seems the same and we counted days. This is also the time when I reflected on a lot of things that otherwise I wouldn't think of when I'm here in the Philippines. Being away from your comfort zone opens up your mind. I missed the Philippines so much. I missed how I just called up my friends and meet up in a whim. I missed how my family is always around. That time I decided that when I get back home, I'll be more open to meeting new friends, and spending more time with everyone. I'll be traveling to all the beautiful places in our country whenever I can. These are things you won't realize unless it's taken away from you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-6255466588678785102?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/8rvzGjME7u8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/6255466588678785102/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2011/04/my-experience-being-onshore.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/6255466588678785102?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/6255466588678785102?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2011/04/my-experience-being-onshore.html" title="My experience being onshore" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0cHRXY8eip7ImA9WhdSEE8.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-3006760593260099350</id><published>2011-04-19T12:21:00.000-07:00</published><updated>2011-07-18T14:37:14.872-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-18T14:37:14.872-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="self" /><category scheme="http://www.blogger.com/atom/ns#" term="work" /><title>Notes on co-workers – a humbling experience</title><content type="html">&lt;span style="font-style: italic;"&gt;This was something I wrote a year ago when I just started on a new job.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
One of the things that came with my apartment is my new job. Actually it’s one big reason why I chose to live independently since I will be able to afford the rent and bills. In this post I will write about my experience with our just finished company outing.&lt;br /&gt;
&lt;br /&gt;
I didn’t expect it to be such a good experience and we were supposed to back out since most of our team mates did not join. Well nothing really special about it, aside from the great resort where it was held. It was the usual company outing – maybe more boring than usual. But what made it different is that I met a lot of great people and learned so much from their experiences.&lt;br /&gt;
&lt;br /&gt;
This is my first time working for a big consulting company. It certainly has a lot of downsides working in big companies, one thing I immediately noticed is I felt just like a cog in a machine. Looking at the brighter side, I kinda felt like a stereotype salaryman: good salary, own apartment, living in the city. Whether that’s a good or bad thing, at least it’s something new for me.&lt;br /&gt;
&lt;br /&gt;
One thing I’m guilty of when it comes to jobs and companies is I’m quick to judge a person based on how he/she looks or acts. A lot of people are guilty of that. But I’m kinda defensive in a way that I will have no interest on getting to know about the person if I don’t like his aura. That certainly changed after our company outing. At first it was awkward since in the whole company, I only know my team mate. It’s hard to get to know everyone since we are working on different projects. But in this outing we had the chance to talk to our co-workers.&lt;br /&gt;
&lt;br /&gt;
People who are a lot older and more senior than me. People who look strong and aggressive. People who can express themselves really well. Before, I usually judged people like this since I feel we’re very different and we won’t get along. But when I got a chance to talk to a lot of them, I found out that they’re actually geeks like me. We’re all IT people anyway, and we’ve had similar experiences in the same company (or our previous jobs). Whew, I didn’t think you can find a lot of great people in a company. I felt really humbled, and I feel this is one advantage of working in a big (and maybe selective) company, there are a lot of quality people and there are little egos.&lt;br /&gt;
&lt;br /&gt;
I heard before from a &lt;a href="http://www.facebook.com/votegordon"&gt;good senator&lt;/a&gt; that you should not quickly judge a person, because once you accept that he is that way, than that will be the reality for you (something like that). In a way you are already closing your mind without getting pass what’s superficial. A lot of us are like that, and I think it is partially because of our own insecurities. It doesn’t hurt to try to get to know someone, so try (and win a friend).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-3006760593260099350?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/wClbQhbfjp4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/3006760593260099350/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2011/04/notes-on-co-workers-humbling-experience.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/3006760593260099350?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/3006760593260099350?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2011/04/notes-on-co-workers-humbling-experience.html" title="Notes on co-workers – a humbling experience" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkIBRXwzfyp7ImA9WhZQEkk.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-7226870464223153418</id><published>2011-04-19T12:02:00.000-07:00</published><updated>2011-04-19T12:15:54.287-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-19T12:15:54.287-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="sd card" /><title>Fix Damaged SD Card error on Android</title><content type="html">I often get this error on my Android phone since I got a class 2 16gb SD card. It might be that this SD card is faulty my phone just doesn't work well with this specific card. But anyway, it still works! Before, whenever I get the "Damaged SD Card" error I copy all my SD card files to my PC, then format the SD card and copy it back. This works, but it takes a lot of time especially if you have a large SD card. Another easier way I found is use the "Check Disk" function of Windows 7 (I'm not sure about previous Windows versions). Follow this guide:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mount your SD card using an SD card reader&lt;/li&gt;&lt;li&gt;Right click on the drive, select properties&lt;/li&gt;&lt;li&gt;Go to Tools tab, under Error-checking, click Check now&lt;/li&gt;&lt;li&gt;On Check disk options, check both "Automatically fix file system errors" and "Scan for and attempt recovery of bad sectors"&lt;/li&gt;&lt;li&gt;Click Start!&lt;/li&gt;&lt;/ul&gt;This still takes some time but it's a lot faster than reformatting the SD card. When it's done checking (and fixing), put back your SD card to your Android phone. Hopefully this fixes it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-7226870464223153418?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/6VN0JZLtUVM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/7226870464223153418/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2011/04/fix-damaged-sd-card-error-on-android.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/7226870464223153418?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/7226870464223153418?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2011/04/fix-damaged-sd-card-error-on-android.html" title="Fix Damaged SD Card error on Android" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total></entry><entry gd:etag="W/&quot;CkIDQXk5fCp7ImA9WhZQEkk.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-5036463586553124616</id><published>2011-04-19T12:01:00.001-07:00</published><updated>2011-04-19T12:16:10.724-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-19T12:16:10.724-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="winamp" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Fix Winamp Sync Problem on Android</title><content type="html">I've been battling with what Media Player to use on Android (too bad  iTunes is out of the equation). I've tried Winamp and DoubleTwist --  overall Winamp wins. Winamp is faster, has more features, and more  mature. Importing my iTunes library was a breeze. I only had one  problem, some files won't sync properly. I found out that to fix this  issue is simple but requires some manual work. It has something to do  with the files' meta info; either it has no meta info, it has blank  values, or it has inconsistent values (ID3v1 and ID3v2).&lt;br /&gt;&lt;br /&gt;Simplest  way to fix it is use auto tag. On Winamp, select files you want to fix  -&amp;gt; right click -&amp;gt; send to -&amp;gt; Auto-Tag. Wait for all items to be  queried (click Check All or manually check each file if the status is  'Unsure'). Then click 'Apply Changes' to update the track info for the  selected files.&lt;br /&gt;&lt;br /&gt;Another way to fix meta info is check if ID3V1 or  ID3V2 is more updated. For example if ID3v2 is more updated on a file,  right click -&amp;gt; View file info -&amp;gt; ID3v2 (tab) -&amp;gt; click 'Copy to  ID3v1'. This should make the meta info consistent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-5036463586553124616?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/jzrZPM931hc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/5036463586553124616/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2011/04/fix-winamp-sync-problem-on-android.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/5036463586553124616?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/5036463586553124616?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2011/04/fix-winamp-sync-problem-on-android.html" title="Fix Winamp Sync Problem on Android" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkIFRn04eCp7ImA9WhZQEkk.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-9076697431937608473</id><published>2010-03-17T20:25:00.000-07:00</published><updated>2011-04-19T12:15:17.330-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-19T12:15:17.330-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cakephp" /><category scheme="http://www.blogger.com/atom/ns#" term="ajax" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>AJAX notes on CakePHP</title><content type="html">It's usually handy to do small ajax requests that return (or output) simple string values like 'true', 'false', 'ok', 0, 1. It's easy to test and debug because you can see the results immediately. For CakePHP you usually have to do some things before rendering your view so your output will be as espected:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Configure::write('debug', 0);&lt;/span&gt;&lt;br /&gt;In case you are in development mode, this will prevent things like SQL logs from displaying at the end of the output&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$this-&amp;gt;layout = 'ajax';&lt;/span&gt;&lt;br /&gt;This is CakePHP's built in layout that you can use for ajax requests, or basically this is a blank layout without the HTML head tags, etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$this-&amp;gt;disableCache();&lt;/span&gt;&lt;br /&gt;This is usually forgotten and usually causes problems. I encountered this once with IE7 because it was caching one of my ajax requests. This will send proper headers so the browser will not cache the current request.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-9076697431937608473?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/zQE9C8xvXB4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/9076697431937608473/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2010/03/disable-browser-caching-in-cakephp.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/9076697431937608473?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/9076697431937608473?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2010/03/disable-browser-caching-in-cakephp.html" title="AJAX notes on CakePHP" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;Ak8HR3s6eSp7ImA9WxNbGEo.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-6578139814646913961</id><published>2009-11-22T00:30:00.000-08:00</published><updated>2009-11-22T00:33:56.511-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-22T00:33:56.511-08:00</app:edited><title>Link of the week: How to Work from Home Without Going Crazy</title><content type="html">&lt;a href="http://news.ycombinator.com/item?id=952256"&gt;Here's a thread on Hacker News about working at home&lt;/a&gt;. I've been working at home for about a year now so it's really interesting to me. I found the HN comments more interesting than the actual article hehe :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.ycombinator.com/item?id=952256"&gt;How to Work from Home Without Going Crazy&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-6578139814646913961?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/rqU-u4h5QsQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/6578139814646913961/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/11/link-of-week-how-to-work-from-home.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/6578139814646913961?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/6578139814646913961?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/11/link-of-week-how-to-work-from-home.html" title="Link of the week: How to Work from Home Without Going Crazy" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0YFSXk7eip7ImA9WxNWGUk.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-5611196370330932481</id><published>2009-10-19T03:30:00.000-07:00</published><updated>2009-10-19T03:45:18.702-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-19T03:45:18.702-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Merging associative arrays in PHP</title><content type="html">I've come across a problem recently when merging associative arrays in PHP using the &lt;a href="http://php.net/array_merge"&gt;array_merge&lt;/a&gt; function. The problem is that when one of the arrays has an element with a numeric key (even if the array is associative), the resulting array will be re-indexed as a numeric array. This is really how array_merge works so it is not a bug. A solution is to use the '+' operator to join the two arrays so the keys will be preserved. Here's an example:&lt;br /&gt;&lt;pre&gt;$a = array(&lt;br /&gt;'1'=&gt; 'one',&lt;br /&gt;);&lt;br /&gt;$b = array(&lt;br /&gt;'3'=&gt; 'three',&lt;br /&gt;'5'=&gt; 'five'&lt;br /&gt;);&lt;br /&gt;print_r(array_merge($a, $b));&lt;br /&gt;print_r($a + $b);&lt;br /&gt;&lt;br /&gt;The output will be:&lt;br /&gt;&lt;br /&gt;Array&lt;br /&gt;(&lt;br /&gt;[0] =&gt; one&lt;br /&gt;[1] =&gt; three&lt;br /&gt;[2] =&gt; five&lt;br /&gt;)&lt;br /&gt;Array&lt;br /&gt;(&lt;br /&gt;[1] =&gt; one&lt;br /&gt;[3] =&gt; three&lt;br /&gt;[5] =&gt; five&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/2628045589460149855-5611196370330932481?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/g4T1eIPAtWk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/5611196370330932481/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/10/merging-associative-arrays-in-php.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/5611196370330932481?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/5611196370330932481?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/10/merging-associative-arrays-in-php.html" title="Merging associative arrays in PHP" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;CUYFRHo9eCp7ImA9WxNQGE0.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-6413323066776651670</id><published>2009-09-24T07:19:00.000-07:00</published><updated>2009-09-24T07:38:35.460-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-24T07:38:35.460-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wordpress" /><title>How to move your WordPress blog to a new domain (the easy way)</title><content type="html">Whether you're moving a WordPress blog to a new domain or moving a new blog from staging to live, it could be problematic especially if you don't like mucking around with the database. Here's an easy way to move your blog just by editing wp-config.php and using the &lt;a href="http://wordpress.org/extend/plugins/velvet-blues-update-urls/"&gt;Velvet Blues Update URLs plugin&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; Edit wp-config.php, add the following lines at the beginning of the file&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;where "example.com" is the NEW location of your site)&lt;span&gt;:&lt;/span&gt;&lt;br /&gt;define('WP_HOME','http://example.com');&lt;br /&gt;define('WP_SITEURL','http://example.com');&lt;br /&gt;&lt;br /&gt;After editing wp-config.php, you will be able to access your new blog's admin on the new domain, but images and links that are on your blog posts will still be pointing to your old domain. To fix this, &lt;span style="font-weight: bold;"&gt;download and install the &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://wordpress.org/extend/plugins/velvet-blues-update-urls/"&gt;Velvet Blues Update URLs plugin&lt;/a&gt;. Go to Settings-&gt; Update Urls, select "Update urls AND links in page or post content: YES", enter your old URL and your new URL, and click Update URLs.&lt;br /&gt;&lt;br /&gt;..and you're done! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-6413323066776651670?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/Zt3IeC3-4qc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/6413323066776651670/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/09/how-to-move-your-wordpress-blog-to-new.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/6413323066776651670?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/6413323066776651670?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/09/how-to-move-your-wordpress-blog-to-new.html" title="How to move your WordPress blog to a new domain (the easy way)" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D04ARng7fyp7ImA9WxNQEEQ.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-889394484017530952</id><published>2009-09-16T02:51:00.001-07:00</published><updated>2009-09-16T03:12:27.607-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-16T03:12:27.607-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cakephp" /><category scheme="http://www.blogger.com/atom/ns#" term="tips" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>CakePHP Tip: Creating https:// links</title><content type="html">It's always better to use CakePHP's HTML helper to create relative links that will make your app portable. What if you need to create relative link that will use https:// instead of the default http://? This will be useful if most of your site uses http:// but some pages need to be secure (eg. registration or checkout page). Let's say your link is pointing to /pages/register, here's how to do it:&lt;br /&gt;echo $html-&gt;link("Register", str_replace('http://', 'https://',&lt;br /&gt;&lt;div id=":4d" class="ii gt"&gt; $html-&gt;url("/pages/register"&lt;wbr&gt;, true)));&lt;br /&gt;&lt;br /&gt;What happens here? we use $html-&gt;url() to create a relative URL, and set the 2nd parameter to true so it will return the full URL (eg. http://domain.com/pages/register) and then replace http:// with https://, we then pass that URL to HTML helper's link() method to create a HTML link.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Note that you don't need to do this if the originating page is already using https://. If that is the case, then all relative links will also use https:// by default.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-889394484017530952?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/4IR4HiQxWMw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/889394484017530952/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/09/cakephp-tip-creating-https-links.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/889394484017530952?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/889394484017530952?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/09/cakephp-tip-creating-https-links.html" title="CakePHP Tip: Creating https:// links" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0MCQXo5eip7ImA9WxJUGU0.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-2936891262759568598</id><published>2009-07-18T01:09:00.000-07:00</published><updated>2009-07-18T01:24:20.422-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-18T01:24:20.422-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="extensions" /><category scheme="http://www.blogger.com/atom/ns#" term="delicious" /><title>Delicious Lite extension for Firefox 3.5</title><content type="html">Today I decided to discontinue developing the Delicious Lite Firefox extension because the code is getting outdated and I don't have time to update it for the newly released Firefox 3.5. The good news is there's another new delicious bookmark extension that pretty much does the same thing (and better :). Check out the &lt;a href="http://aecreations.mozdev.org/deliciouspost/index.html"&gt;Delicious Post&lt;/a&gt; extension from &lt;a href="http://aecreations.blogspot.com/"&gt;AE Creations&lt;/a&gt;. This extension also stems from the original work of &lt;a href="http://www.splintered.co.uk/experiments/68/"&gt;Patrick H. Lauke&lt;/a&gt; which I also used in Delicious Lite. So please try it out and kudos to &lt;a href="http://aecreations.blogspot.com/"&gt;AE Creations&lt;/a&gt; for such great work!&lt;br /&gt;&lt;br /&gt;There are some stuff that I feel Delicious Post still lacks like a shortcut key and some super minor UI issues. To solve these issues for me I created a modified version which adds a shortcut key CTRL+SHIFT+D to post a bookmark (btw I borrowed this shortcut key from Firefox's Bookmark all tabs which I don't use much, and transfered it to CTRL+SHIFT+K). On the post dialog, I also made it focus on the tags textbox immediately because that's just usually what I edit when posting a bookmark. If you like these modifications, feel free to download the version &lt;a href="http://toniobox.dreamhosters.com/aedeliciouspost_1.0-modified.xpi"&gt;here&lt;/a&gt;. I hope these will also get implemented on the official release :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-2936891262759568598?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/mZSe7o6STcU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/2936891262759568598/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/07/delicious-lite-extension-for-firefox-35.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/2936891262759568598?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/2936891262759568598?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/07/delicious-lite-extension-for-firefox-35.html" title="Delicious Lite extension for Firefox 3.5" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;Ak8ERXc_eip7ImA9WxBXEEk.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-6140834718667147087</id><published>2009-07-04T01:04:00.000-07:00</published><updated>2010-01-20T20:40:04.942-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-20T20:40:04.942-08:00</app:edited><title>Simple PHP Rest Client using cURL</title><content type="html">I recently worked with a third party API that uses REST. I've been reading about REST all this time and this is the first time I've actually used it. Surprised me because it was really nice and simple. It's a lot easier trying it out than reading about it (but it sure helps to read some about it first :). What took quite some time was finding a REST client that I will use to connect and some authorization issues (which is site specific).&lt;br /&gt;&lt;br /&gt;If you're already using Zend Framework, you might want to try out it's built in &lt;a href="http://framework.zend.com/manual/en/zend.rest.client.html"&gt;rest client&lt;/a&gt;. But if you're looking for a simpler solution, you can do well with PHP's cURL functions. Honestly I don't like cURL because it really looks dirty when you use it (aesthetically that is), and all the options you need to set kinda bums me. It's like you have to research a lot of option flags just to make something work. But hey, it almost always gets the job done :) Good thing &lt;a href="http://developer.beta.icontact.com/documentation/icontact-application-programming-interface-api"&gt;iContact's API documentation&lt;/a&gt; (the API I'm working with) has a &lt;a href="http://developer.beta.icontact.com/documentation/code-library"&gt;downloadable sample code&lt;/a&gt; that uses plain cURL functions to connect to it's REST service. I have to credit them for most of the code. I just did some minor edits so it is more generalized. So here, try it out if it works for you (this is plain PHP code, hopefully you'll put this in a function or method :)&lt;br /&gt;&lt;br /&gt;This example is specific to JSON input/output, so you have to change some stuff if the API requires XML or some other format.&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;$url = 'https://www.google.com';&lt;br /&gt;$method = 'POST';&lt;br /&gt;&lt;br /&gt;# headers and data (this is API dependent, some uses XML)&lt;br /&gt;$headers = array(&lt;br /&gt;'Accept: application/json',&lt;br /&gt;'Content-Type: application/json',&lt;br /&gt;);&lt;br /&gt;$data = json_encode(array(&lt;br /&gt;'firstName'=&amp;gt; 'John',&lt;br /&gt;'lastName'=&amp;gt; 'Doe'&lt;br /&gt;));&lt;br /&gt;&lt;br /&gt;$handle = curl_init();&lt;br /&gt;curl_setopt($handle, CURLOPT_URL, $url);&lt;br /&gt;curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);&lt;br /&gt;curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);&lt;br /&gt;curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);&lt;br /&gt;&lt;br /&gt;switch($method)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;case 'GET':&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 'POST':&lt;br /&gt; curl_setopt($handle, CURLOPT_POST, true);&lt;br /&gt; curl_setopt($handle, CURLOPT_POSTFIELDS, $data);&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 'PUT':&lt;br /&gt; curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');&lt;br /&gt; curl_setopt($handle, CURLOPT_POSTFIELDS, $data);&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;case 'DELETE':&lt;br /&gt; curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'DELETE');&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$response = curl_exec($handle);&lt;br /&gt;$code = curl_getinfo($handle, CURLINFO_HTTP_CODE);&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-6140834718667147087?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/GgRTI23_BOE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/6140834718667147087/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/07/simple-php-rest-client-using-curl.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/6140834718667147087?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/6140834718667147087?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/07/simple-php-rest-client-using-curl.html" title="Simple PHP Rest Client using cURL" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>5</thr:total></entry><entry gd:etag="W/&quot;C0MFSH4zeip7ImA9WxJQEEU.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-1500100947429594571</id><published>2009-05-23T04:53:00.000-07:00</published><updated>2009-05-23T05:23:39.082-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-23T05:23:39.082-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cakephp" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="svn" /><title>How to exclude CakePHP's tmp directory on SVN using svn:ignore</title><content type="html">I wrote a post before about &lt;a href="http://singletonio.blogspot.com/2009/01/changing-tmp-directory-of-cakephp-so-it.html"&gt;moving CakePHP's tmp directory outside of app&lt;/a&gt; so it won't be included in SVN. It's a good concept but since it's a bit dirty and not standard, it might lead to some problems later and when upgrading.&lt;br /&gt;&lt;br /&gt;A better solution to this problem is to just exclude the contents of tmp (or any other directory you don't want to include in SVN). Here's how to do it on TortoiseSVN:&lt;br /&gt;1. Backup the contents of tmp/ (cache, logs, sessions, tests, etc)&lt;br /&gt;2. Delete all the contents tmp/&lt;br /&gt;3. Commit the empty directory tmp/ to svn&lt;br /&gt;4. After commit, right click the tmp/ folder and choose TortoiseSVN-&gt; Properties&lt;br /&gt;5. On the properties dialog, click New.., then set the Property name to svn:ignore and Property value to *&lt;br /&gt;6. Commit the changes to SVN&lt;br /&gt;7. Move back the previous contents of tmp/&lt;br /&gt;&lt;br /&gt;There you go! SVN will now ignore the contents of tmp/&lt;br /&gt;Note: when you checkout on another machine, you will have to manually create the folders inside tmp since it's not included in your repository&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-1500100947429594571?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/djjWfL8--ao" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/1500100947429594571/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/05/how-to-exclude-cakephps-tmp-directory.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/1500100947429594571?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/1500100947429594571?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/05/how-to-exclude-cakephps-tmp-directory.html" title="How to exclude CakePHP's tmp directory on SVN using svn:ignore" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;D04GSHk4fSp7ImA9WxJQEEs.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-3008229292750517363</id><published>2009-05-22T22:30:00.000-07:00</published><updated>2009-05-23T01:05:29.735-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-23T01:05:29.735-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="delicious" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><title>Twitter-like delicious gadget for your blog</title><content type="html">I was inspired by the great articles I've read today (which I got from &lt;a href="http://news.ycombinator.com/"&gt;Hacker News&lt;/a&gt;) so I decided to put links to these articles on my blog. Using the &lt;a href="http://delicious.com/help/feeds"&gt;delicious API&lt;/a&gt; and some &lt;a href="http://jquery.com/"&gt;javascript goodness&lt;/a&gt;, I created a twitter-like delicious bookmarks list that I can use on my blog (or any blog for that matter). Check it out in action at my sidebar (below the twitter widget).&lt;br /&gt;&lt;br /&gt;If you want the same thing, copy the code below and put it to where you want it to appear on your blog.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;// change to your username and tag&lt;br /&gt;delicious_widget = {username: 'tonio95', tag: 'read'};&lt;br /&gt;&lt;br /&gt;delicious_widget.feed = 'http://feeds.delicious.com/v2/json/'+delicious_widget.username+'/'+delicious_widget.tag+'?count=10&amp;amp;callback=delicious_widget.print_list';&lt;br /&gt;delicious_widget.print_list = function(data) {&lt;br /&gt;var box = ['&amp;lt;ul&amp;gt;'];&lt;br /&gt;$.each(data, function(i, item){&lt;br /&gt;box.push(['&amp;lt;li&amp;gt;&amp;lt;a href="', item.u, '"&amp;gt;', item.d.substring(0,60), '&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;'].join(''));&lt;br /&gt;});&lt;br /&gt;box.push('&amp;lt;li&amp;gt;&amp;lt;a href="http://delicious.com/'+delicious_widget.username+'/'+delicious_widget.tag+'"&amp;gt;More!&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;');&lt;br /&gt;document.write(box.join(''));&lt;br /&gt;};&lt;br /&gt;document.write(unescape("%3Cscript src='" + delicious_widget.feed + "' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Enjoy! and have fun reading!&lt;br /&gt;Want more delicious? check out the &lt;a href="http://singletonio.blogspot.com/2009/04/delicious-lite-lightweight-delicious.html"&gt;delicious lite firefox extension&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-3008229292750517363?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/DHvG_N2f5sQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/3008229292750517363/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/05/displaying-your-delicious-bookmarks-on.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/3008229292750517363?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/3008229292750517363?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/05/displaying-your-delicious-bookmarks-on.html" title="Twitter-like delicious gadget for your blog" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;Ck8DR3w_eip7ImA9WxJRGUU.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-935638563653352416</id><published>2009-05-21T08:06:00.000-07:00</published><updated>2009-05-22T01:27:56.242-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-22T01:27:56.242-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="broadband" /><title>Smart Bro Prepaid (USB Modem)</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sHnvFUzGMFw/ShVyY9hr9lI/AAAAAAAAAJs/SlLlJ7S5IhQ/s1600-h/BigBro2.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 133px; height: 200px;" src="http://2.bp.blogspot.com/_sHnvFUzGMFw/ShVyY9hr9lI/AAAAAAAAAJs/SlLlJ7S5IhQ/s200/BigBro2.gif" alt="" id="BLOGGER_PHOTO_ID_5338298706475873874" border="0" /&gt;&lt;/a&gt;I recently bought a Smart Wireless Broadband Prepaid (USB Modem) because I needed a backup internet connection for my work. This thing costs PhP1995 and includes PhP100 load. I was able to connect in no time (from unboxing to installing the software). It's really easy to use and you don't have to configure anything. I'm quite impressed with it (based on my initial testing). I used it at 11pm, and the download speed was around 1.5-1.8mb/s. YouTube streams *almost* in  real time (it buffers sometimes but you won't have to wait long).&lt;br /&gt;&lt;br /&gt;My plan before was to use a 3G phone as modem (LG KU250) on Globe's network (my primary network), but Globe doesn't have a 3G signal here (weird because the 2G signal is full) so I decided to go with Smart. Smart's signal in my area (I live in QC) is WCDMA, which I think is the best signal you could get. I don't know how Globe's mobile broadband compares to Smart, but one thing I like about Globe is it charges per 15mins (Php5), while Smart charges per 30mins (Php10). Globe's charging rate seems more practical especially if you're just checking email every once in a while.&lt;br /&gt;&lt;br /&gt;Anyway, I won't be using this much since it's only a backup connection in case Bayantel's DSL goes down for a whole day, like what happened last month. Let's just hope it won't go down when I need it :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-935638563653352416?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/gd0R58tGP3k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/935638563653352416/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/05/smart-bro-prepaid-usb-modem.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/935638563653352416?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/935638563653352416?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/05/smart-bro-prepaid-usb-modem.html" title="Smart Bro Prepaid (USB Modem)" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_sHnvFUzGMFw/ShVyY9hr9lI/AAAAAAAAAJs/SlLlJ7S5IhQ/s72-c/BigBro2.gif" height="72" width="72" /><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;CUYCRHk_fyp7ImA9WxJRGE0.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-9160102924148103465</id><published>2009-05-09T06:12:00.000-07:00</published><updated>2009-05-20T00:06:05.747-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-20T00:06:05.747-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cakephp" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Essential CakePHP tips for starters</title><content type="html">It's been 3 months since I started using CakePHP and I have to say I'm having a great time using it. Before trying it out I was using my own little framework and tried a bit of Zend Framework. I think the best thing about CakePHP is that it's a full stack framework, which means you can take advantage of a lot of built in features. It takes some time to get used to especially if you come from a do-it yourself background (like me :), but in the long run using its conventions and built in features will save you a lot of time.&lt;br /&gt;&lt;br /&gt;First off, I will assume that you already know the basics (at least Chapter 1 &amp;amp; 2 of the CakePHP manual). Also, this post was inspired by &lt;a href="http://teknoid.wordpress.com/2008/06/09/15-essential-cakephp-tips/"&gt;Teknoid's 15 Essential CakePHP Tips&lt;/a&gt; which is a great read. I suggest you read it first before reading this (my favorites are &lt;span style="font-style: italic;"&gt;#5 I’m losing the extra URL parameters when paginating&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;#9 Avoid using the $uses array&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;Disclaimer: I'm no CakePHP expert yet so feel free to suggest or correct me if I'm wrong!&lt;br /&gt;&lt;br /&gt;Let's start!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HABTM query&lt;/span&gt;&lt;br /&gt;Let's suppose recipes has and belongs to many tags, how do you query recipies that contain a certain tag? There are many ways to do this, as documented on the &lt;a href="http://book.cakephp.org/view/83/hasAndBelongsToMany-HABTM"&gt;CakePHP manual&lt;/a&gt;. I think the simplest and cleanest way is given on the first example:&lt;br /&gt;$this-&gt;Recipe-&gt;bindModel(array('hasOne' =&gt; array('RecipesTag')));&lt;br /&gt;$this-&gt;Recipe-&gt;find('all', array('conditions'=&gt;array('RecipesTag.tag_id'=&gt;124)));&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Use named parameters&lt;/span&gt;&lt;br /&gt;CakePHP works better with named parameters (/name:value), especially when you are using pagination and other helpers. But if you don't want to, classic style parameters (?name=value) can still be accessed via $this-&gt;params on the controller&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Paginate an unrelated model&lt;/span&gt;&lt;br /&gt;If you need to paginate a model that's not in the current controller, use loadModel('model').&lt;br /&gt;$this-&gt;loadModel('User');&lt;br /&gt;$this-&gt;paginate = array('limit'=&gt;20);&lt;br /&gt;$this-&gt;paginate('User');&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Getting data from $this-&gt;params and $this-&gt;data&lt;/span&gt;&lt;br /&gt;The usual way is to get request parameters directly is to get them from the $this-&gt;params (or $this-&gt;passedArgs) and $this-&gt;data array directly (eg. $input = $this-&gt;params['named']['input']). But it's a little dirty because PHP shows a notice if the key does not exist in the array. To prevent this, I created two functions on my app/app_controller.php file that gets data from the param and data array, in case the key does not exist, it will just return null.&lt;br /&gt;&lt;br /&gt;function getParam($key)&lt;br /&gt;{&lt;br /&gt;// eg. http://myapp.com/pages/1/somekey:somevalue&lt;br /&gt;// $somevalue = $this-&gt;getParam('named.somekey');&lt;br /&gt;return Set::classicExtract($this-&gt;params, $key);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function getData($key)&lt;br /&gt;{&lt;br /&gt;// eg $name = $this-&gt;getData('Person.name')&lt;br /&gt;return Set::classicExtract($this-&gt;data, $key);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;(for more array functions, check out CakePHP's &lt;a href="http://book.cakephp.org/view/640/Set"&gt;Set component&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Secure forms using the security component&lt;/span&gt;&lt;br /&gt;If you want to quickly secure your forms, CakePHP can do this automatically by using the &lt;a href="http://book.cakephp.org/view/175/Security-Component"&gt;Security component&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Keep links relative. Use $html-&gt;link(), or Router::url()&lt;/span&gt;&lt;br /&gt;If you want your app to be portable, take advantage of CakePHP's built in URL functions to keep your links working wherever you install your app (eg root directory or sub directory). Use $html-&gt;link() for generating full link tags, or Router::url() if you only want the URL (eg. using it inside javascript or inside the controller).&lt;br /&gt;Hint: if you want to get the full URL (including http://) use Router::url('/controller/action', true)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Use form helper&lt;/span&gt;&lt;br /&gt;Because writing a lot of forms by hand is boring :) You will also take advantage of other built in functions, like displaying validation error messages.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Use the same view for add/edit forms&lt;/span&gt;&lt;br /&gt;Most of the time add and edit views are just the same. To avoid code duplication, you could set the add action to also use the edit view. Just add $this-&gt;render('edit') at the end of the action.&lt;br /&gt;function add()&lt;br /&gt;{&lt;br /&gt;$this-&gt;render('edit');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Looking for more tips?&lt;/span&gt;&lt;br /&gt;Check out &lt;a href="http://www.pseudocoder.com/archives/2009/05/13/free-cakephp-e-book-super-awesome-advanced-cakephp-tips/"&gt;Matt Curry's Super Awesome Advanced CakePHP Tips&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-9160102924148103465?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/uhVObk9weSI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/9160102924148103465/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/05/essential-cakephp-tips-for-starters.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/9160102924148103465?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/9160102924148103465?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/05/essential-cakephp-tips-for-starters.html" title="Essential CakePHP tips for starters" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total></entry><entry gd:etag="W/&quot;D0IMSHozeyp7ImA9WxJUGU0.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-1344712566385630122</id><published>2009-04-04T08:29:00.000-07:00</published><updated>2009-07-18T01:26:29.483-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-18T01:26:29.483-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="extensions" /><title>Delicious Lite - a lightweight delicious firefox extension</title><content type="html">Update: this extension is no longer being developed. Check out the &lt;a href="http://aecreations.mozdev.org/deliciouspost/index.html"&gt;Delicious Post&lt;/a&gt; extension from &lt;a href="http://aecreations.blogspot.com/"&gt;AE Creations&lt;/a&gt; which is compatible with Firefox 3.5.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sHnvFUzGMFw/SdeBvSjvf-I/AAAAAAAAAJM/AvAHTN6bJE0/s1600-h/deliciouslite.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 292px;" src="http://2.bp.blogspot.com/_sHnvFUzGMFw/SdeBvSjvf-I/AAAAAAAAAJM/AvAHTN6bJE0/s320/deliciouslite.jpg" alt="" id="BLOGGER_PHOTO_ID_5320864134197116898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://dl.getdropbox.com/u/650328/apps/deliciouslite_v1.xpi"&gt;Delicious Lite v1&lt;/a&gt;&lt;br /&gt;I've been using &lt;a href="http://delicious.com/"&gt;delicious&lt;/a&gt; for a long time now. I remember using it even before it was acquired by Yahoo and it had a lot of growing pains. I even considered switching to Google bookmarks for a while because delicious was always going down (or super slow) that time. The thing that keeps me going back is it's simplicity. The URL structure (delicious.com/username/tag) is just great. Hey, I don't even need to install stuff just to access or manage my bookmarks!&lt;br /&gt;&lt;br /&gt;There are many ways to bookmark websites on delicious. The simplest is installing the browser bookmarklet that pops up a window when you bookmark a website. I kinda like this one except that I hate waiting for the popup window to load and especially when it asks me to login. It's just too much time wasted for a simple bookmark. Another thing is installing the official delicious firefox extension which is super bloated (IMHO). I tried using an early version and remember it screwing up my browser because it tried to download and sync my thousands of bookmarks in delicious. That's just a major pain. I'm fine putting my bookmarks on the cloud and accessing them by tag when I need them.&lt;br /&gt;&lt;br /&gt;What I need is a simple delicious extension that just lets me post bookmarks to delicious. Simple, no waiting, no logging in. That's delicious lite for you. This was originally done by &lt;a href="http://hublog.hubmed.org/"&gt;Alf Eaton&lt;/a&gt; and &lt;a href="http://www.splintered.co.uk/"&gt;Patrick Lauke&lt;/a&gt;, and I updated it to work with Firefox 3. I've been using this modified version for a while now but haven't had time to package it well for other people to use. Well here it is! enjoy!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dl.getdropbox.com/u/650328/apps/deliciouslite_v1.xpi"&gt;Install Delicious Lite v1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note: once installed, you can use the shortcut key CTRL+SHIFT+P to bookmark a page to delicious. There is also a toolbar button that you can add on Firefox's toolbar customize screen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-1344712566385630122?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/WagsYz7IGjI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/1344712566385630122/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/04/delicious-lite-lightweight-delicious.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/1344712566385630122?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/1344712566385630122?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/04/delicious-lite-lightweight-delicious.html" title="Delicious Lite - a lightweight delicious firefox extension" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_sHnvFUzGMFw/SdeBvSjvf-I/AAAAAAAAAJM/AvAHTN6bJE0/s72-c/deliciouslite.jpg" height="72" width="72" /><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;CUUASX85eSp7ImA9WxJRGE0.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-6590747687705481446</id><published>2009-03-24T07:31:00.000-07:00</published><updated>2009-05-20T00:07:28.121-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-20T00:07:28.121-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="monitor" /><category scheme="http://www.blogger.com/atom/ns#" term="keyboard" /><category scheme="http://www.blogger.com/atom/ns#" term="hardware" /><title>Pleomax SuperSlim keyboard is pure joy (converting my laptop to a CPU)</title><content type="html">I recently converted my laptop to a CPU (haha) because it's killing my neck already. Using the laptop 8hrs a day is really a pain! I bought a 19inch Samsung LCD monitor and this Pleomax SuperSlim  keyboard so I can get away from using the laptop directly. I think I'm becoming a Samsung fanboy haha.. so far I'm satisfied with these 2 items, both are worth the money.&lt;br /&gt;&lt;br /&gt;I really like how the laptop feels except my posture when I'm using it. That's the only drawback. But I'm so used to the keyboard, touchpad, and even the small screen. I think I've been working around 6 months on just my laptop. Until my neck gave up.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sHnvFUzGMFw/Scj-MnJknGI/AAAAAAAAAI0/PjP5ZVqgj24/s1600-h/samsung933nw.jpg"&gt;&lt;img style="cursor: pointer; width: 300px; height: 200px;" src="http://1.bp.blogspot.com/_sHnvFUzGMFw/Scj-MnJknGI/AAAAAAAAAI0/PjP5ZVqgj24/s320/samsung933nw.jpg" alt="" id="BLOGGER_PHOTO_ID_5316778852731886690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;LCD Monitor&lt;/span&gt;&lt;br /&gt;The 19inch Samsung costs PhP 6,800. I like it's low resolution (relative to the screen size - 1360x768) which makes everything big. I always wondered why some LCD makers max out the pixel density for the screen size, yes it makes the desktop real estate bigger but you will need a microscope for everything, especially the text. It's just not practical. We bought a 17inch LG before that was just like that. The problem with these monitors is that you have to use their native resolution, or else it the pixels will look ugly. Kudos to Samsung (and others) who make big LCD's with low pixel density (not sure if LG still does it like before).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sHnvFUzGMFw/Scj-ob3-xfI/AAAAAAAAAJE/Noi6Tpxeczw/s1600-h/pleomax.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 242px;" src="http://2.bp.blogspot.com/_sHnvFUzGMFw/Scj-ob3-xfI/AAAAAAAAAJE/Noi6Tpxeczw/s320/pleomax.jpg" alt="" id="BLOGGER_PHOTO_ID_5316779330741650930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Keyboard&lt;/span&gt;&lt;br /&gt;The Pleomax SuperSlim keyboard costs PhP 1,000. I read about Pleomax before on the newspaper that they were making these keyboards that are like the laptop keyboards. I just love laptop keyboards (especially Lenovo haha) because I can type very fast with no effort at all. My brother says that this keyboard is too expensive, but in my job I use the keyboard like 99% of the time so for me it's really essential. If you have a supercomputer with a generic cheapo keyboard then your computer sucks!!! hahaa no flames please, I just have to say that ;) I've had jobs before where they would let us use a generic keyboard which really irritates me. I mean it's the thing I use all day (!!!), plus it doesn't really cost that much to buy a premium keyboard like this one. The Pleomax SuperSlim keyboard totally feels like a laptop keyboard so that makes it worth the money for me (Pleomax is owned by Samsung btw).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mouse&lt;/span&gt;&lt;br /&gt;Just using a regular A4tech mouse. Haha. No innovation on the mouse department anyway. I'm still wishing I can buy a USB touchpad so I don't have to move my right hand away from the keyboard from time to time.&lt;br /&gt;&lt;br /&gt;So there. Laptop users, please don't damage your neck! (at least if you're using it all day everyday).&lt;br /&gt;&lt;br /&gt;Photo credits: &lt;a href="http://www.pchome.com.tw/"&gt;pchome.com.tw&lt;/a&gt;, &lt;a href="http://www.lacentnetwork.com/"&gt;lacentnetwork.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-6590747687705481446?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/HxSBh7qaMM4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/6590747687705481446/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/03/pleomax-superslim-keyboard-is-pure-joy.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/6590747687705481446?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/6590747687705481446?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/03/pleomax-superslim-keyboard-is-pure-joy.html" title="Pleomax SuperSlim keyboard is pure joy (converting my laptop to a CPU)" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_sHnvFUzGMFw/Scj-MnJknGI/AAAAAAAAAI0/PjP5ZVqgj24/s72-c/samsung933nw.jpg" height="72" width="72" /><thr:total>5</thr:total></entry><entry gd:etag="W/&quot;C0MARHw_eyp7ImA9WhZUEU4.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-3131188768191800305</id><published>2009-03-19T09:31:00.000-07:00</published><updated>2011-06-03T13:04:05.243-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-03T13:04:05.243-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wordpress" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Building my band's website using Wordpress</title><content type="html">Besides coding, my other passion is music. I sing and write songs for the pop/rock/alternative band Nelo at ang Tala. Last week, I decided to recreate my band's outdated website so it can go well with our newly finished demo. I used &lt;a href="http://wordpress.org/"&gt;Wordpress&lt;/a&gt; (WP) as CMS for the website so I can edit it with my bandmates and it's easy to post updates soon. Wordpress really rocks, everytime I have a chance to use it I constantly get awed by its new features and very nice interface. I really salute the people behind this project for creating this kick-ass software. Anyway, enough of my fanboyism.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_sHnvFUzGMFw/ScKHT48DT0I/AAAAAAAAAIQ/npKhjVYxjv0/s1600-h/nelowebsite.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="cursor: pointer; width: 320px; height: 199px;" src="http://3.bp.blogspot.com/_sHnvFUzGMFw/ScKHT48DT0I/AAAAAAAAAIQ/npKhjVYxjv0/s320/nelowebsite.jpg" alt="" id="BLOGGER_PHOTO_ID_5314959286022131522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Theme&lt;/span&gt;&lt;br /&gt;I copied the whole kubrick folder (default) and renamed it to nelo. Then I wiped the css clean so I can start from scratch (hehe). I'm not really sure if they've updated kubrick since WP 2.0, but the last time I used it, the css file was full of hacks (haha). Not blaming it though, this theme is being used by gazillions of blogs (don't flame me pls ;). I've even used this on some sites before. I just wanted a clean slate because I already have a static design (HTML/CSS) ready. Made some edits to the templates and voila it's good and working! Another nice thing about WP is the excellent semantic markup; it will be just as usable as is, even without CSS.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Content&lt;/span&gt;&lt;br /&gt;I wanted to make everything editable on the admin. Offcourse that's not possible (maybe it is, but I don't want to spend forever for something that will change in a year). What I'd like to be editable is the text intro and teaser that's on the header part of the template. I don't think WP doesn't have a snippets feature yet for misc parts of the website (there's widgets, but that's for the sidebar). What I did was created a 'page' for each section of content on the template that I want to be editable, so I created an 'intro' and 'teaser' page. I looked into the codex and found out about this nice function get_posts, what it does is it queries posts/pages based on the arguements given. It's really a charm, here's how I used it on the template:&lt;br /&gt;&lt;br /&gt;$intro = get_posts('pagename=intro&amp;amp;showposts=1&amp;amp;post_type=page');&lt;br /&gt;foreach($intro as $i) :&lt;br /&gt;setup_postdata($i);&lt;br /&gt;the_content('More »');&lt;br /&gt;endforeach;&lt;br /&gt;&lt;br /&gt;This looks for the page 'intro' and displays it on the part where I want it to show. One disadvanage of using this approach is you can't use WP's function to list the pages for your nav, since it will also show the pages that you are only using on the template (maybe you can use link categories but I haven't tried that yet). On my template, the links on the nav are hardcoded (and I don't mind ;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Gallery&lt;/span&gt;&lt;br /&gt;The gallery feature of WP is just new, so I don't really mind that it sucks right now. It's hard to understand how to use it (attach photos to a page/post to create a gallery). But I've managed to use it on our photos page! It still helped a lot.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Blog&lt;/span&gt;&lt;br /&gt;Oh did I mention that WP is mainly a blogging engine? hehe. That's one reason why I really like to use it on our site. You won't see it now but the frontpage is also where the blog posts will appear. (will post updates soon!)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Plugins&lt;/span&gt;&lt;br /&gt;The admin interface if you are an admin (sorry about the sentence!) is quite messy at first. I don't want my bandmates to get intimidated by the number of options and features. I assigned them as authors so they can focus on the content. One problem I faced is that an author cannot edit widgets, which I need because our gig schedule (which appears on the sidebar) is using the text widget. To solve this I used the &lt;a href="http://www.im-web-gefunden.de/wordpress-plugins/role-manager/"&gt;Role Manager&lt;/a&gt; plugin which lets you assign custom privileges to a certain user. I just added the 'switch theme' privilege and it worked!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Misc&lt;/span&gt;&lt;br /&gt;Wow this is already long. I really enjoyed building our website especially because I used a lot of stuff that are available already for free. If you notice I'm using a flash player (ala myspace). The player is from &lt;a href="http://www.premiumbeat.com/flash_resources/free_flash_music_player/"&gt;Premiumbeat&lt;/a&gt; and it's free. I like it because it's simple and elegant (and it works quite well!).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Streaming&lt;/span&gt;&lt;br /&gt;Lastly, I'd like our music to stream fast so the user won't get stuck while playing it. This is another story but I'm using Amazon's &lt;a href="http://aws.amazon.com/s3/"&gt;S3&lt;/a&gt; to host the mp3 files, so it will always stream fast. Special mention to &lt;a href="http://www.s3fox.net/"&gt;S3fox&lt;/a&gt; which is a free software to manage files on S3.&lt;br /&gt;&lt;br /&gt;That's it. Some people say that our website is simple and effective. I'm very glad to hear that! I'm not really much of a designer but I think I'm good at creating simple and effective user interfaces. Thanks for reading and keep the music playing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-3131188768191800305?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/LHtwqd4GVAE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/3131188768191800305/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/03/building-my-bands-website-using.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/3131188768191800305?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/3131188768191800305?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/03/building-my-bands-website-using.html" title="Building my band's website using Wordpress" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_sHnvFUzGMFw/ScKHT48DT0I/AAAAAAAAAIQ/npKhjVYxjv0/s72-c/nelowebsite.jpg" height="72" width="72" /><thr:total>8</thr:total></entry><entry gd:etag="W/&quot;CUUDSHk9eSp7ImA9WxJRGE0.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-3583292846370568183</id><published>2009-02-24T00:54:00.001-08:00</published><updated>2009-05-20T00:07:59.761-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-20T00:07:59.761-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><title>Facebook Apps: Viral Marketing on Steroids</title><content type="html">First there were invites by email. I still get those *friend* wants you to join *website* on my email inbox. If that was not annoying enough, then try Facebook and wait till you get hundreds of invites on you notification pane. Inviting people to join an app is just a simple click away. No more typing email addresses or signing in to your email accounts. This should be a good thing (at least for app developers), but often times you get those notifications 10x a day that say you've been poked or someone has done something to you, inviting you to see what it is.&lt;br /&gt;&lt;br /&gt;Recently there was much buzz about Facebook changing it's terms of agreement. If you think about it, you've *already* given much of your personal information to a lot of third parties - everytime you use a new Facebook app. So regardless of Facebook's terms of agreement, your information is already stored on servers outside of Facebook's control. What really bothers me is that Facebook aims to be a social networking platform based on your real identity, yet it is the easiest platform to harvest personal information by using viral marketing. Always think twice before clicking that "Allow Access" button.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-3583292846370568183?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/9wNV8spuAXQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/3583292846370568183/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/02/facebook-apps-viral-marketing-on.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/3583292846370568183?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/3583292846370568183?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/02/facebook-apps-viral-marketing-on.html" title="Facebook Apps: Viral Marketing on Steroids" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;A04ARns7fyp7ImA9WxVQF08.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-5205062715945399085</id><published>2009-02-03T22:11:00.001-08:00</published><updated>2009-02-03T22:45:47.507-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-03T22:45:47.507-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cakephp" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Enhancing CakePHP's debug() function for null, false, and empty string</title><content type="html">CakePHP's debug() function is great. Aside from printing out the variable content, it also displays from which line it is called. If you call out debug() in different places, knowing which line saves a lot of time tracking something.&lt;br /&gt;&lt;br /&gt;What bothers me sometimes is it doesn't tell you if the variable is NULL, false, or  an empty string, so I end up using var_dump() to double check. So how to fix this? Right! We'll edit something inside the cake folder ;) This is usually bad practice but this is a safe one (we'll just plug something in.. kinda), and it won't break your stuff in case you upgrade your cake library. Here you go:&lt;br /&gt;&lt;br /&gt;Add this function at the bottom of app/config/core.php:&lt;br /&gt;&lt;pre&gt;# this prints out booleans, nulls, and empty strings&lt;br /&gt;# will be called inside cake's debug() on cake/basics.php&lt;br /&gt;function debug2($var)&lt;br /&gt;{&lt;br /&gt;if(is_null($var) || is_bool($var))&lt;br /&gt;{&lt;br /&gt;var_dump($var);&lt;br /&gt;}&lt;br /&gt;else if( is_string($var) )&lt;br /&gt;{&lt;br /&gt;if( '' == trim($var) )&lt;br /&gt;{&lt;br /&gt;var_dump($var);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Here's the dirty part! open cake/basics.php and find the debug() function (line ~104). Add this code before print_r is called: (only the bold part)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;if(function_exists('debug2')) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;    debug2($var);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-weight: bold;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;$var = print_r($var, true)&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;Now when you call debug(NULL), it will now look like this:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;app\app_controller.php (line 72)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;NULL&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Have fun baking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-5205062715945399085?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/HAicirQhUcc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/5205062715945399085/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/02/enhancing-cakephps-debug-function.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/5205062715945399085?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/5205062715945399085?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/02/enhancing-cakephps-debug-function.html" title="Enhancing CakePHP's debug() function for null, false, and empty string" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;Ck8ASXY-cCp7ImA9WxJQEEU.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-8515780884283755836</id><published>2009-01-26T00:03:00.000-08:00</published><updated>2009-05-23T05:14:08.858-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-23T05:14:08.858-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cakephp" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Changing CakePHP's tmp directory so it won't be included on SVN</title><content type="html">&lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt;: this solution is quite dirty, and I don't recommend it now. &lt;a href="http://singletonio.blogspot.com/2009/05/how-to-exclude-cakephps-tmp-directory.html"&gt;Check out my new post on using SVN's ignore property to ignore CakePHP's tmp directory&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you're putting your CakePHP app on version control (SVN), you'll notice that the /tmp directory is inside /app. You might want to &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; include /tmp on your repository as it's just a location for caches, logs, session, and other temporary stuff which is not part of your application code. Here's how to change the tmp directory of CakePHP:&lt;br /&gt;&lt;br /&gt;1. Copy /app/tmp to /tmp (copy it outside of the app directory)&lt;br /&gt;2. Add this code on /app/webroot/index.php after CAKE_CORE_INCLUDE_PATH is defined (line ~60). This will change the tmp directory from /app/tmp to /tmp.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    # define a different TMP dir outside of app&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    define('TMP', ROOT.DS.'tmp'.DS);&lt;br /&gt;&lt;/span&gt;3. Configure the file cache path on /app/config/core.php (line ~226):&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Cache::config('default', array('engine' =&gt; 'File', 'path' =&gt; ROOT.DS.'tmp'.DS) );&lt;/span&gt;&lt;br /&gt;(This step is necessary for BAKE to work properly if you are using the default file cache)&lt;br /&gt;4. To check if it's working fine, try renaming  /app/tmp to /app/xtmp and see if your app still works properly (then you can already delete that directory). If not, make sure the new tmp directory is the same as the original structure  (cache, logs, sessions, tests)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-8515780884283755836?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/rFlmq-2-WNo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/8515780884283755836/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/01/changing-tmp-directory-of-cakephp-so-it.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/8515780884283755836?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/8515780884283755836?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/01/changing-tmp-directory-of-cakephp-so-it.html" title="Changing CakePHP's tmp directory so it won't be included on SVN" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>5</thr:total></entry><entry gd:etag="W/&quot;D0QMRns7fCp7ImA9WxVRF0k.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-6461087907589424328</id><published>2009-01-23T12:52:00.000-08:00</published><updated>2009-01-23T13:16:27.504-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-23T13:16:27.504-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="random" /><title>Things I love</title><content type="html">I want to write something positive to end the day. So here, I'm writing about the things I love.. at least those that come to my mind right now ;)&lt;br /&gt;&lt;br /&gt;Web Development.&lt;br /&gt;It's what I do. Sometimes it pays, sometimes it doesn't. I love it either way ;) I can't spend a week without coding something. I'm currently enjoying &lt;a href="http://cakephp.org/"&gt;CakePHP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Music.&lt;br /&gt;I love music. It helps me work everyday. I'm really into &lt;a href="http://www.savestheday.com"&gt;Saves The Day&lt;/a&gt; right now. I also listen to a lot of emo punk and Japanese stuff. Too many to mention haha. I wish I could write about each of them. Oh and I'm also part of a band called &lt;a href="http://www.neloatangtala.com"&gt;Nelo at ang Tala&lt;/a&gt;. We're currently recording our demo and I'm so excited about it. Watch out ;)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.instapaper.com"&gt;Instapaper&lt;/a&gt;.&lt;br /&gt;iPod Touch really fits me. I love reading and listening to music. iPod takes care of my music, and Instapaper takes care of my reading. If you like reading blogs then try it out! It's free and I promise it won't let you down.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.ycombinator.com"&gt;Hacker News&lt;/a&gt;.&lt;br /&gt;This is where I get stuff to read. Hacker News + Instapaper = :)&lt;br /&gt;If you like reading Hacker News on weekly mode, check out my project &lt;a href="http://hnweekly.watdahel"&gt;hnweekly&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sleep.&lt;br /&gt;Yeah I usually sleep late.. but I get lots of it!&lt;br /&gt;&lt;br /&gt;That's it for now.. I'm sleepy. I'm sure I missed out a lot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-6461087907589424328?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/1YAfyIx1FXI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/6461087907589424328/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/01/things-i-love.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/6461087907589424328?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/6461087907589424328?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/01/things-i-love.html" title="Things I love" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUUNQH44eCp7ImA9WxJRGE0.&quot;"><id>tag:blogger.com,1999:blog-2628045589460149855.post-5885392955094225079</id><published>2009-01-16T07:30:00.000-08:00</published><updated>2009-05-20T00:08:11.030-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-20T00:08:11.030-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="nearlyfreespeech" /><category scheme="http://www.blogger.com/atom/ns#" term="dreamhost" /><category scheme="http://www.blogger.com/atom/ns#" term="hosting" /><title>Moving to DreamHost</title><content type="html">Wow it took me (just) 2 days to move my sites from &lt;a href="http://www.nearlyfreespeech.net/"&gt;NearlyFreeSpeech&lt;/a&gt; (NFS) to &lt;a href="http://www.dreamhost.com/"&gt;DreamHost &lt;/a&gt;(DH) :) I thought it would take a year haha. It's been smooth sailing on DH so far, I'm enjoying all the features included (everything's unlimited!!). If you're not yet familiar with DH, check out their &lt;a href="http://www.dreamhost.com/hosting.html"&gt;hosting&lt;/a&gt;, some features worth noting are: unlimited domains, unlimited storage, unlimited bandwidth, unlimited databases, ssh access, user accounts, svn hosting.. ahh the list goes on. I also like the simplicity of their control panel.&lt;br /&gt;&lt;br /&gt;I have to say I've had a good experience with NearlyFreeSpeech after 2 years of hosting with them. It's the perfect place to learn things and play. NFS charges you depending on usage, which really just costs very little if you're just trying out stuff. Bandwidth, storage, and database will just cost you around $0.03 per day. But as my projects grew, the storage costs also grew. Well, not really much but it came to a point that I don't want to worry about it and just go unlimited at DH.&lt;br /&gt;&lt;br /&gt;I'm glad I tried (possibly) the 2 best shared hosting available. I'm not expecting a super awesome time at DH, it's shared hosting after all :) If the time comes that one of my websites demand dedicated resources, then maybe it's time to try out VPS hosting (&lt;a href="http://www.linode.com/"&gt;Linode &lt;/a&gt;seems to be a good deal). Right now I'm still enjoying DH.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.. yeah and I sound like a fanboy right now ;)&lt;br /&gt;&lt;br /&gt;(If you're curious what websites I host on DreamHost, two of them are &lt;a href="http://eatmycharts.com/"&gt;EatMyCharts.com&lt;/a&gt; and &lt;a href="http://hnweekly.watdahel.com/"&gt;hnweekly&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;DreamHost super offer: &lt;a href="http://www.dreamhost.com/r.cgi?476364/signup%7CHNWEEKLY"&gt;&lt;b&gt;$50 discount&lt;/b&gt; on yearly hosting! enter the code &lt;b&gt;HNWEEKLY&lt;/b&gt; when you sign up!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2628045589460149855-5885392955094225079?l=singletonio.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/singletonio/~4/LcxgXr9HdDA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://singletonio.blogspot.com/feeds/5885392955094225079/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://singletonio.blogspot.com/2009/01/moving-to-dreamhost.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/5885392955094225079?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2628045589460149855/posts/default/5885392955094225079?v=2" /><link rel="alternate" type="text/html" href="http://singletonio.blogspot.com/2009/01/moving-to-dreamhost.html" title="Moving to DreamHost" /><author><name>Tonio</name><uri>http://www.blogger.com/profile/07362105225895924666</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry></feed>

