<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Yifan Lu</title>
	<atom:link href="http://www.yifanlu.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.yifanlu.com</link>
	<description>My personal weblog and projects</description>
	<lastBuildDate>Sun, 29 Aug 2010 19:43:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Load Creative Zen V Plus’s firmware on your Zen V</title>
		<link>http://www.yifanlu.com/2010/08/19/load-creative-zen-v-plus%e2%80%99s-firmware-on-your-zen-v/</link>
		<comments>http://www.yifanlu.com/2010/08/19/load-creative-zen-v-plus%e2%80%99s-firmware-on-your-zen-v/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 11:55:34 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[creative]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[patch]]></category>
		<category><![CDATA[zen v]]></category>
		<category><![CDATA[zen v plus]]></category>

		<guid isPermaLink="false">http://www.yifanlu.com/?p=178</guid>
		<description><![CDATA[So thanks to a Napster promotion, I’ve got a free 1GB Creative Zen V. If you know anything about me, you’d know that the first thing I did was pop open IDA Pro, and see what I can make this device do that it’s not made for doing. After some quick Googleing, I’ve noticed there’s [...]]]></description>
			<content:encoded><![CDATA[<p>So thanks to a Napster promotion, I’ve got a free 1GB Creative Zen V. If you know anything about me, you’d know that the first thing I did was pop open IDA Pro, and see what I can make this device do that it’s not made for doing. After some quick Googleing, I’ve noticed there’s no modifications or anything for this POS music player. However, I did notice that Creative sells a higher priced player that plays videos too. Anyways, enough talk, here’s how to turn your Zen V to a Zen V Plus (NOTE: You still won’t get radio because it’s not in the hardware)</p>
<p><strong>Directions:</strong></p>
<ol>
<li>Download the ZEN V Plus firmware 1.32.01 <a href="http://support.creative.com/downloads/download.aspx?nDownloadId=10334" target="_blank">here</a>. It’s last update was in 07, so I don’t think there’s going to be a newer version, but if there somehow is, follow the “DIY” instructions in the next section to do it manually.</li>
<li>Make a copy of the <strong>ZENVPlus_PCFW_L22_1_32_01.exe </strong>file you just downloaded. Name it <strong>ZENV_Patch.exe</strong>.</li>
<li>Patch <strong>ZENV_Patch.exe </strong>with this <a href="http://www.multiupload.com/JYCQOVQS15" target="_blank">IPS file</a> using any <a href="http://www.zophar.net/utilities/patchutil.html" target="_blank">IPS patching utility</a>.</li>
<li>Run <strong>ZENV_Patch.exe </strong>and let it reboot your Zen V.</li>
<li>Now, you should be getting an error on the device. <em>THIS IS NORMAL</em>. The firmware update should fail and put you in recovery mode.</li>
<li>In recovery mode on the Zen, choose “Reload Firmware”</li>
<li>Now, on your PC, force quit <strong>ZENV_Patch.exe </strong>and open up <strong>ZENVPlus_PCFW_L22_1_32_01.exe</strong></li>
<li>Wait until the update is done, and your Zen V is now a Zen V Plus!</li>
</ol>
<p><strong>DIY</strong></p>
<p>Now, how does this work? Well, basically the first “firmware update” with ZENV_Patch.exe makes the device think it’s a Zen V Plus, and the second update with the official file actually copies the firmware on. ZENV_Patch.exe is just the Zen V Plus updater hex-edited to run on the Zen V. You can make your own ZENV_Patch.exe by taking the official update, opening a HEX editor, and replacing every instance of “C.r.e.a.t.i.v.e. .Z.e.n. .P.l.u.s” to “C.r.e.a.t.i.v.e. .Z.e.n” (Please note that the periods represent the ASCII character 00 (null)). After doing so, the updater will accept the Zen V.</p>
<p>Now, maybe one day, I’ll port RockBox or something to it…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yifanlu.com/2010/08/19/load-creative-zen-v-plus%e2%80%99s-firmware-on-your-zen-v/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compiling the Linux kernel for Amazon Kindle</title>
		<link>http://www.yifanlu.com/2010/07/26/compiling-the-linux-kernel-for-amazon-kindle/</link>
		<comments>http://www.yifanlu.com/2010/07/26/compiling-the-linux-kernel-for-amazon-kindle/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 20:57:28 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[arm]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[kindle]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mod]]></category>

		<guid isPermaLink="false">http://www.yifanlu.com/?p=173</guid>
		<description><![CDATA[So, I recently bought a Kindle 2. As usual, the minute it arrived, I ripped it apart, poked every chip, and then started to reverse engineer the damn thing. Wait. I didn&#8217;t have to! I found this out days late, after messing with IDA Pro. Amazon has generously released most of the back end code [...]]]></description>
			<content:encoded><![CDATA[<p>So, I recently bought a Kindle 2. As usual, the minute it arrived, I ripped it apart, poked every chip, and then started to reverse engineer the damn thing. Wait. I didn&#8217;t have to! I found this out days late, after messing with IDA Pro. Amazon has generously released most of the back end code for the Kindle as open source. (The front end, aka the stuff you see, is written in Java and we might get to that another day). So I decided to compile my own Kindle kernel. Why? Why not. Here&#8217;s how:</p>
<p><strong>Part 1: Prerequisites</strong></p>
<ul>
<li>Get a root shell of your Kindle. If you don&#8217;t know, Google &#8220;usbNetworking&#8221;</li>
<li>A Linux computer for compiling code</li>
<li>Amazon&#8217;s sources for your version of the Kindle: http://www.amazon.com/gp/help/customer/display.html?nodeId=200203720</li>
<li>An ARM cross-compiler. You can compile Amazon&#8217;s code, or if you&#8217;re lazy, use CodeSourcery&#8217;s precompiled toolchain: http://www.codesourcery.com/sgpp/lite/arm</li>
<li>The following packages, get them from your distro&#8217;s repo: <em>libncurses-dev</em> (for menuconfig), <em>uboot-mkimage</em> (for making the kernel image), and <em>module-init-tools </em>(depmod)</li>
</ul>
<p><strong>Part 2: Compiling the kernel</strong></p>
<ol>
<li>Extract the source to anywhere. If you can&#8217;t decide, use &#8220;<em>~/src/kernel/</em>&#8221; and &#8220;<em>cd</em>&#8221; to the source files.</li>
<li>Now, you need to configure for the Kindle, type &#8220;<em>make mario_mx_defconfig</em>&#8220;</li>
<li>Edit the &#8220;<em>.config</em>&#8221; file and look for the line that starts with &#8220;<em>CONFIG_INITRAMFS_SOURCE</em>&#8220;. We don&#8217;t need that, delete that line or comment (#) it out.</li>
<li>Here&#8217;s the part were you make all your modifications to the kernel. You might want to do &#8220;<em>make menuconfig</em>&#8221; and add extra drivers/modules. I&#8217;ll wait while you do that.</li>
<li>Back? Let&#8217;s do the actual compiling. Type the following: &#8220;make ARCH=arm CROSS_COMPILE=~/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi- uImage&#8221;. This will make the kernel image. I assume you installed CodeSourcery&#8217;s cross compiler to your home folder (default). If your cross compiler is elsewhere, change the command to match it.</li>
<li>Compile the modules into a compressed TAR archive (for easy moving to the kindle): &#8220;<em>make ARCH=arm CROSS_COMPILE=~/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi- targz-pkg</em>&#8221; (again, if your cross compiler is installed to a different location, change it).</li>
<li>For some reason, depmod refuses to run with the compile script, so we&#8217;re going to do it manually. Do the following &#8220;<em>depmod -ae -F System.map -b tar-install -r 2.6.22.19-lab126 -n &gt; modules.dep</em>&#8221; Change 2.6.22.19-lab126 to your compiled kernel version.</li>
<li>Open modules.dep up with a text editor and do a search &amp; replace. Replace all instances of &#8220;kernel/&#8221; with &#8220;/lib/modules/2.6.22.19-lab126/kernel/&#8221; (again, use your version string). I&#8217;m not sure this is needed, but better safe then brick.</li>
<li>Now copy <em>arch/arm/boot/uImage</em>, <em>linux-2.6.22.19-lab126.tar.gz </em>(or whatever your version is), and <em>modules.dep</em> to an easy to access location.</li>
</ol>
<p><strong>Part 3: Installing on Kindle</strong></p>
<ol>
<li>Connect the Kindle to your computer, and open up the storage device. Copy the three files you moved from the previous part to your Kindle via USB.</li>
<li>This part is mostly commands, so get a root shell to your Kindle, and do the following commands line by line. Again, anywhere the version string &#8220;<em>2.6.22.19-lab126</em>&#8221; is used, change it to your kernel&#8217;s version. Explanation follows.</li>
</ol>
<blockquote><p>mv /mnt/us/linux-2.6.22.19-lab126.tar.gz /mnt/us/modules.dep /mnt/us/uImage /tmp</p>
<p>mv /lib/modules /lib/modules.old</p>
<p>cd /tmp &amp; tar xvzf /tmp/linux-2.6.22.19-lab126.tar.gz</p>
<p>mv lib/modules /lib/</p>
<p>chmod 644 modules.dep</p>
<p>mv modules.dep /lib/modules/2.6.22.19-lab126/</p>
<p>/test/flashtools/update-kernel-both uImage</p>
<p>sync</p>
<p>shutdown -r now</p></blockquote>
<p>Wow, that&#8217;s a lot of commands. What did that do? Well, line by line:</p>
<ol>
<li>Move the files we compiled to the temp folder. That way, we don&#8217;t have to clean up.</li>
<li>Back up the old kernel modules</li>
<li>Go to the temp folder and untar the modules</li>
<li>Install the modules</li>
<li>Correct the permissions for the modules.dep file (in case something happened after copying from your computer)</li>
<li>Move the module dependencies list to it&#8217;s correct folder.</li>
<li>Flash the kernel (I don&#8217;t know why it has to be flashed twice to two different partitions, but if you don&#8217;t, it won&#8217;t load, maybe sig checks?)</li>
<li>Make sure everything is finished writing</li>
<li>Reboot</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.yifanlu.com/2010/07/26/compiling-the-linux-kernel-for-amazon-kindle/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ASCIIMan: A Windows Console platformer game written in Java</title>
		<link>http://www.yifanlu.com/2010/05/29/asciiman-a-windows-console-platformer-game-written-in-java/</link>
		<comments>http://www.yifanlu.com/2010/05/29/asciiman-a-windows-console-platformer-game-written-in-java/#comments</comments>
		<pubDate>Sat, 29 May 2010 22:11:50 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Updates]]></category>
		<category><![CDATA[asciiman]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[josh]]></category>
		<category><![CDATA[platformer]]></category>
		<category><![CDATA[windows sdk]]></category>

		<guid isPermaLink="false">http://www.yifanlu.com/?p=166</guid>
		<description><![CDATA[For my final project in my Computer Science class, I decided to write a game in Windows Console, in Java. It&#8217;s hard to appreciate how hard this was unless you REALLY know Java and you REALLY know Windows SDK. I basically wrote a entire game engine complete with collision detection, physics, etc from scratch in Java. I [...]]]></description>
			<content:encoded><![CDATA[<p>For my final project in my Computer Science class, I decided to write a game in Windows Console, in Java. It&#8217;s hard to appreciate how hard this was unless you REALLY know Java and you REALLY know Windows SDK. I basically wrote a entire game engine complete with collision detection, physics, etc from scratch in Java. I used almost every obscure Java knowledge I have including reflections, JNI, enums, and thread handling. It is really less of a game and more of a technology demo because I can&#8217;t design anything. I hope someone else can write a better level (I made it very extendable), and fix collisions (those are the only major &#8220;bugs&#8221;, otherwise, it&#8217;s a fully playable game). Again, this is one of those things where people who don&#8217;t know alot about Java won&#8217;t think it&#8217;s a big accomplishment, but those who do will bow down to this wonderful code. /ego trip</p>
<p><a href="http://www.yifanlu.com/p/asciiman">ASCIIMan Project Page</a></p>
<p>P.S: I updated Josh again, I converted the whole project to NetBeans, my new found love.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yifanlu.com/2010/05/29/asciiman-a-windows-console-platformer-game-written-in-java/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Josh 1.0 Released</title>
		<link>http://www.yifanlu.com/2010/05/09/josh-1-0-released/</link>
		<comments>http://www.yifanlu.com/2010/05/09/josh-1-0-released/#comments</comments>
		<pubDate>Sun, 09 May 2010 23:41:28 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Updates]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[javadoc]]></category>
		<category><![CDATA[jni]]></category>
		<category><![CDATA[josh]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.yifanlu.com/?p=161</guid>
		<description><![CDATA[I&#8217;m not going to describe it again, go here. It&#8217;s out of beta, and completely recoded. Get it at GitHub. Also, I documented the whole thing, so: JoshDoc.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not going to describe it again, go <a href="http://www.yifanlu.com/p/josh">here</a>. It&#8217;s out of beta, and completely recoded. Get it at <a href="http://github.com/yifanlu/Josh/downloads">GitHub</a>.</p>
<p>Also, I documented the whole thing, so: <a href="http://www.yifanlu.com/joshdoc/">JoshDoc</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yifanlu.com/2010/05/09/josh-1-0-released/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Recode of Josh</title>
		<link>http://www.yifanlu.com/2010/04/25/recode-of-josh/</link>
		<comments>http://www.yifanlu.com/2010/04/25/recode-of-josh/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 22:30:26 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[josh]]></category>
		<category><![CDATA[recode]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[wrapper]]></category>

		<guid isPermaLink="false">http://www.yifanlu.com/?p=157</guid>
		<description><![CDATA[If you don&#8217;t know, Josh is a Java wrapper for native console functions on Windows (like change text color and stuff). I&#8217;m almost done recoding the whole thing. Meanwhile, I uploaded the new JavaDoc for Josh up as a sneak peek. http://www.yifanlu.com/joshdoc/]]></description>
			<content:encoded><![CDATA[<p>If you don&#8217;t know, Josh is a Java wrapper for native console functions on Windows (like change text color and stuff). I&#8217;m almost done recoding the whole thing. Meanwhile, I uploaded the new JavaDoc for Josh up as a sneak peek. <a href="http://www.yifanlu.com/joshdoc/">http://www.yifanlu.com/joshdoc/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yifanlu.com/2010/04/25/recode-of-josh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Update to TweetBot</title>
		<link>http://www.yifanlu.com/2010/04/11/update-to-tweetbot/</link>
		<comments>http://www.yifanlu.com/2010/04/11/update-to-tweetbot/#comments</comments>
		<pubDate>Sun, 11 Apr 2010 17:19:49 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Announcements]]></category>

		<guid isPermaLink="false">http://www.yifanlu.com/?p=155</guid>
		<description><![CDATA[After a good night&#8217;s sleep, I &#8220;fixed up&#8221; TweetBot. No, the code is still junk, but I made it a bit better. New features: -Doesn&#8217;t crash if no geolocation is found -Multiple commands separated by period. -Update shout -Update Twitter/Facebook -Removed debug logging (it showed things down a bit) -Commands that begin with &#8220;set&#8221; ignores the word [...]]]></description>
			<content:encoded><![CDATA[<p>After a good night&#8217;s sleep, I &#8220;fixed up&#8221; TweetBot. No, the code is still junk, but I made it a bit better. New features:</p>
<p>-Doesn&#8217;t crash if no geolocation is found</p>
<p>-Multiple commands separated by period.</p>
<p>-Update shout</p>
<p>-Update Twitter/Facebook</p>
<p>-Removed debug logging (it showed things down a bit)</p>
<p>-Commands that begin with &#8220;set&#8221; ignores the word &#8220;set&#8221;, this way your sentences can flow better.</p>
<p>Some new commands:</p>
<p>Set a shout</p>
<blockquote><p>Status is &#8220;I&#8217;m shopping&#8221;</p></blockquote>
<p>Update Twitter, facebook, or both</p>
<blockquote><p>Show twitter</p>
<p>Show facebook</p>
<p>Show twitter and facebook</p></blockquote>
<p>Multiple commands</p>
<blockquote><p>Search around me for &#8220;best buy&#8221;. Set status to &#8220;buying a new computer&#8221;. Show twitter &amp; facebook. Checkin to result 0.</p></blockquote>
<p>Remember, you can always throw in extra words outside of quotes. Only the first word, quotes, and (if no quotes), the last word are read.</p>
<p><a href="http://www.yifanlu.com/p/tweetbot">http://www.yifanlu.com/p/tweetbot</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yifanlu.com/2010/04/11/update-to-tweetbot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Update Foursquare from Twitter</title>
		<link>http://www.yifanlu.com/2010/04/10/update-foursquare-from-twitter/</link>
		<comments>http://www.yifanlu.com/2010/04/10/update-foursquare-from-twitter/#comments</comments>
		<pubDate>Sun, 11 Apr 2010 04:41:23 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Updates]]></category>
		<category><![CDATA[foursquare]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[spaghetti code]]></category>
		<category><![CDATA[tweetbot]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.yifanlu.com/?p=153</guid>
		<description><![CDATA[Ok, so I THOUGHT this was going to be a quick one hour project. I want to update foursquare from Twitter because my cell phone plan ONLY allows access to Twitter and MS Exchange (why, I don&#8217;t know). The goal was to write a application that sits in the background and waits for &#8220;command&#8221; tweets. [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, so I THOUGHT this was going to be a quick one hour project. I want to update foursquare from Twitter because my cell phone plan ONLY allows access to Twitter and MS Exchange (why, I don&#8217;t know). The goal was to write a application that sits in the background and waits for &#8220;command&#8221; tweets. My original plan was to do it in C++, however, networking &amp; sockets in C++ is too complicated for such a small project, plus no good libraries are available for Twitter in C++. Ok, so I moved to Python. It has great networking tools right? Plus a wonderful Twitter API library. I was halfway through when I found that Foursquare support was crappy. Finally, I went to the language I hate the most. Java. Also, note that I&#8217;ve been messing around for hours now. Fuck. So I quickly wrote this in Java, tired and angry. The result is the worst code I ever written. I am the only person who would ever make use of this, so I didn&#8217;t care. I&#8217;m only releasing it for archival purposes, for some laughs to random strangers, and as an example of what you should NOT do. It&#8217;s a great example of &#8220;it compiles, ship it&#8221;.</p>
<p>So, the only features are: search foursquare, checkin to foursquare, and greet the user. To use it, you need to set up two twitter accounts, one for the client (you will tweet commands from here) and one for the server (the server will use this account to tweet). Make the client follow the server and the server follow the client. Make sure your twitter client supports geotags. If your tweet doesn&#8217;t have a geotag, the listener will crash. (I know, stupid)</p>
<p>Again, you <strong>MUST </strong>have a geotag with every tweet.</p>
<p><a href="http://www.yifanlu.com/p/tweetbot">http://www.yifanlu.com/p/tweetbot</a></p>
<p>To search, tweet:</p>
<blockquote><p>Search for &#8220;restaurant&#8221;</p></blockquote>
<p><strong>Note</strong>: You MUST put the quotes for the search to work. For all commands, the server only reads &#8220;key&#8221; words. That&#8217;s the first word and any word in quotes. You can type in</p>
<blockquote><p>Search for some shitty &#8220;restaurant&#8221; up in this bitch</p></blockquote>
<p>and it&#8217;ll work just fine. For search, if you don&#8217;t have any words in quotes, then you&#8217;ll just get a list of 10 closest venues.</p>
<p>Now, the server will return top ten results near you, in two tweets (a random character appearing at the end of server tweets is not a bug, I did that because Twitter rejects any two tweets that are identical).</p>
<blockquote><p>0: Random Chinese Restaurant</p>
<p>1: Some Mexican Restaurant</p>
<p>2: Another Crappy Restaurant</p></blockquote>
<p>and so on, to check in to &#8220;Another Crappy Restaurant&#8221;, tweet</p>
<blockquote><p>Checkin 2</p></blockquote>
<p>If you know the name of the venue, you don&#8217;t have to search, you can just tweet.</p>
<blockquote><p>Checkin to &#8220;another crappy restaurant&#8221;</p></blockquote>
<p>That&#8217;s basically it.</p>
<p>Now, about the spaghetti code, here&#8217;s some of the things I used: depreciated methods, tons of try-catch just to bypass errors (no actual error handling), bad variable name and no documentation, bad code flow, usage of Runtime.getRuntime().exec() to call cURL because I was too lazy to write a proper HTTP controller which is a security and stability issue, use of reflections with data across the internet, and so much more. My hope is that someone will take it and fix it up or something, because I&#8217;m too tired to do anything about it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yifanlu.com/2010/04/10/update-foursquare-from-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Apps User Registration Script</title>
		<link>http://www.yifanlu.com/2010/02/19/google-apps-user-registration-script/</link>
		<comments>http://www.yifanlu.com/2010/02/19/google-apps-user-registration-script/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 04:25:14 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[gaurs]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.yifanlu.com/?p=143</guid>
		<description><![CDATA[Here&#8217;s another one of my famous 3-hour-projects. I finally decided to cleanup my email. It&#8217;s too hard to &#8220;clean&#8221;, so I decided to start from scratch by making a new email account. So, I made a Google Apps account. Google Apps is a great product, but one thing missing is registration for users. (You must [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s another one of my famous 3-hour-projects. I finally decided to cleanup my email. It&#8217;s too hard to &#8220;clean&#8221;, so I decided to start from scratch by making a new email account. So, I made a Google Apps account. Google Apps is a great product, but one thing missing is registration for users. (You must make an account manually for your user) So, I decided to make one myself. This PHP script acts as a proxy between you and Google Apps. It allows your users to create their own account with you and your Google Apps. It is composed of a backend and a frontend. The backend does the work of taking your admin credentials and form data from a user and creating an account for the user. The frontend hosts the GUI. I made sure to well-comment the code, so it should be easy to create your own frontend to match the style and code of your site. I&#8217;m probity won&#8217;t work on this project again, but because it&#8217;s released under GNU v3 (as all my projects), you can take it and add on to it.</p>
<p><a href="http://www.yifanlu.com/p/googleappuserregistration">Google Apps User Registration Script</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yifanlu.com/2010/02/19/google-apps-user-registration-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Site Updates + iPhone Support</title>
		<link>http://www.yifanlu.com/2010/01/28/site-updates-iphone-support/</link>
		<comments>http://www.yifanlu.com/2010/01/28/site-updates-iphone-support/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 00:09:29 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[bug fixes]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[site]]></category>
		<category><![CDATA[Updates]]></category>
		<category><![CDATA[wptouch]]></category>

		<guid isPermaLink="false">http://www.yifanlu.com/?p=135</guid>
		<description><![CDATA[I finally took some time from my busy schedule and made some changes to the site. I stopped being cheap and finally bought www.yifanlu.com Thanks to WPTouch, the site can be viewed on the iPhone &#38; Android with ease Added a contact form Made tweaks here and there in the designs, fixed some typos &#38; [...]]]></description>
			<content:encoded><![CDATA[<p>I finally took some time from my busy schedule and made some changes to the site.</p>
<ol>
<li>I stopped being cheap and finally bought www.yifanlu.com</li>
<li>Thanks to WPTouch, the site can be viewed on the iPhone &amp; Android with ease</li>
<li>Added a contact form</li>
<li>Made tweaks here and there in the designs, fixed some typos &amp; style errors</li>
</ol>
<p>Also, quick update: I&#8217;m still working on that Facebook app, with all the homework and exams, I barely have any free time, however, here&#8217;s some screens on <a href="http://www.facebook.com/album.php?aid=2034334&amp;id=1299785766&amp;l=921f5309f0">Facebook</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yifanlu.com/2010/01/28/site-updates-iphone-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making a Facebook app&#8230;</title>
		<link>http://www.yifanlu.com/2010/01/03/making-a-facebook-app/</link>
		<comments>http://www.yifanlu.com/2010/01/03/making-a-facebook-app/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 03:00:49 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Announcements]]></category>

		<guid isPermaLink="false">http://www.yifanlu.co.cc/?p=92</guid>
		<description><![CDATA[Little to report right now, but basically I&#8217;ve started working on a Facebook app to improve my CSS and Javascript/AJAX skills. Right now, it&#8217;s still in the early stages and I have nothing to show yet, but I just have to say it looks pretty awesome and clean (like part of Facebook). Smooth ajax transactions, [...]]]></description>
			<content:encoded><![CDATA[<p>Little to report right now, but basically I&#8217;ve started working on a Facebook app to improve my CSS and Javascript/AJAX skills. Right now, it&#8217;s still in the early stages and I have nothing to show yet, but I just have to say it looks pretty awesome and clean (like part of Facebook). Smooth ajax transactions, clean UI, and extreme ease of use are my goals. More to report later.</p>
<p>More information <a href="http://www.facebook.com/notes/yifan-lu/im-making-a-virtual-study-group-facebook-app-comments-suggestions-welcome/231974367878">in Facebook</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yifanlu.com/2010/01/03/making-a-facebook-app/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://analytics.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Analytics Code -->
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->