<?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>Sunny Singh</title>
	<atom:link href="http://sunnyis.me/feed/" rel="self" type="application/rss+xml" />
	<link>http://sunnyis.me</link>
	<description>Web Developer, Designer, and all around cool person</description>
	<lastBuildDate>Sat, 12 Jan 2013 19:03:38 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Server Move</title>
		<link>http://sunnyis.me/blog/server-move/</link>
		<comments>http://sunnyis.me/blog/server-move/#comments</comments>
		<pubDate>Sun, 06 Nov 2011 22:58:14 +0000</pubDate>
		<dc:creator>Sunny Singh</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Server Move]]></category>
		<category><![CDATA[Tyreus]]></category>

		<guid isPermaLink="false">http://sunnyis.me/?p=300</guid>
		<description><![CDATA[Just wanted to post a quick update on what has been happening in the past week or so. Closing of Tyreus My favorite Web host, Tyreus, has finally closed down. I&#8217;ve hosted all my websites on there for years, so it&#8217;s definitely sad to see it go. Nonetheless, I congratulate Tyreus for being the longest-lasting [...]]]></description>
				<content:encoded><![CDATA[<p>Just wanted to post a quick update on what has been happening in the past week or so.</p>
<p><span id="more-300"></span></p>
<h2>Closing of Tyreus</h2>
<p>My favorite Web host, <a href="http://tyreus.com/" target="_blank">Tyreus</a>, has finally closed down. I&#8217;ve hosted all my websites on there for years, so it&#8217;s definitely sad to see it go. Nonetheless, I congratulate Tyreus for being the longest-lasting Post2Host out there, and thank them for offering such a great service. I was also staff there for a while, so it was nice to have been a part of something so huge.</p>
<h2>Moving to a New Server</h2>
<p>With the closing of Tyreus, I obviously had to move my sites somewhere. I decided to use the VPS that Hylus is currently hosted on, since there&#8217;s plenty of space on there. The move was a definite success, otherwise you wouldn&#8217;t be reading this right now.</p>
<p>The server move also allowed me to re-organize my project files. I decided that I will definitely be revamping <a href="http://www.myunv.com/" target="_blank">UE</a> and <a href="http://trpy.me/" target="_blank">Trippy</a>. UE currently has a message on the homepage that says that it&#8217;s undergoing revamp, and Trippy is still up and running but has a message in the footer saying that it will be updated in early 2012. My personal site has also been moved, but nothing will really change.</p>
<h2>Upcoming</h2>
<p>I&#8217;ve lately been focusing a lot on getting my life more organized. This means that I do not want to waste time on anything that does not deserve it. I have a set group of applications that I use every day that helps me get stuff done, in which I plan to write a post about soon. Also, I obviously want to get Hylus done before the year ends and plan to revamp all my other projects sometime in 2012.</p>
<p>That&#8217;s it for this post. Have a great week!</p>
]]></content:encoded>
			<wfw:commentRss>http://sunnyis.me/blog/server-move/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Secure Passwords with Phpass</title>
		<link>http://sunnyis.me/blog/secure-passwords/</link>
		<comments>http://sunnyis.me/blog/secure-passwords/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 16:55:41 +0000</pubDate>
		<dc:creator>Sunny Singh</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Phpass]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://sunnyis.me/?p=256</guid>
		<description><![CDATA[When we create an account on a website, we are essentially trusting the service to be secure and we pray that our data will be safe. But, is it? Implementing good security in a website can sometimes seem like a daunting task, but the trick is to attack each vulnerability one by one. Passwords are [...]]]></description>
				<content:encoded><![CDATA[<p>When we create an account on a website, we are essentially trusting the service to be secure and we pray that our data will be safe. But, is it? Implementing good security in a website can sometimes seem like a daunting task, but the trick is to attack each vulnerability one by one. Passwords are one of those vulnerabilities, and users expect that your system will securely encrypt them so that prying eyes can stay shut.</p>
<p><span id="more-256"></span></p>
<p>A while back ago I decided that I wanted to learn more about proper password encryption, and so I came across <a href="http://www.openwall.com/phpass/" title="Portable PHP password hashing framework" target="_blank">Phpass</a>: a framework aimed at simplifying the process for encrypting or &#8220;hashing&#8221; passwords. Phpass has been integrated into many well-known CMS&#8217;s such as WordPress, Vanilla, phpBB, and Drupal, and is a huge reason for why I trust this framework. The only downside was that I could not find an easy-to-follow tutorial on using it, so I decided to write my own.</p>
<h2>Current Insecure Techniques</h2>
<p>Before we jump into Phpass, let&#8217;s take a look at some of the wrong techniques of storing passwords. First would be pretty obvious: storing the raw password. Not only does this open up your website to hackers, but legal authorities will probably come after you as well. The next and probably most popular way that developers secure passwords is by the use of the <code>md5()</code> function. It&#8217;s better than storing raw passwords, but is not well suited for password encryption as it can easily be broken.</p>
<p>The code below should <strong>never</strong> be used to hash a user&#8217;s password.</p>
<p>&lt;?php</p>
<p>$hash = md5(&#8220;the password&#8221;);</p>
<p>?></p>
<p>I will note that the <code>sha1()</code> and <code>hash()</code> functions are slightly more secure (especially in combination) but still don&#8217;t give as much protection against hackers as Phpass.</p>
<h2>Using Phpass</h2>
<p>It&#8217;s actually very easy to start using Phpass, so go ahead and <a href="http://www.openwall.com/phpass/">download the framework at Openwall</a>. Extract and open the folder until you see the file <code>PasswordHash.php</code>. This is the only file that you will be needing so upload it to wherever your website files are stored.</p>
<p>You must then include the file into wherever you will be working with passwords.</p>
<p>&lt;?php</p>
<p>require(&#8220;PasswordHash.php&#8221;);</p>
<p>?></p>
<p>Make sure that the path to <code>PasswordHash.php</code> is correct. If you receive no errors, then Phpass is ready to be used.</p>
</p>
<p>Next you will want to construct the class with the proper arguments. The default arguments specified should be fine for up-to-date installations of PHP. The first argument specifies the &#8220;base-2 logarithm of the iteration count used for password stretching&#8221; and the second argument specifies the use of portable hashes.</p>
<p>&lt;?php</p>
<p>$hasher = new PasswordHash(8, false);</p>
<p>?></p>
<h3>Creating the Hash&mdash;Signup</h3>
<p>For something like a signup system, you will now want to create a hash of the password. In a typical situation, the password will be coming from a form that the user filled out.</p>
<p>&lt;?php</p>
<p>// In this case, the password is retrieved from a form input<br />
$password = $_POST["password"];</p>
<p>// Passwords should never be longer than 72 characters to prevent DoS attacks<br />
if (strlen($password) > 72) { die(&#8220;Password must be 72 characters or less&#8221;); }</p>
<p>// The $hash variable will contain the hash of the password<br />
$hash = $hasher->HashPassword($password);</p>
<p>if (strlen($hash) >= 20) {</p>
<p> // Store the hash somewhere such as a database<br />
 // The code for that is up to you as this tutorial only focuses on hashing passwords</p>
<p>} else {</p>
<p> // something went wrong</p>
<p>}</p>
<p>?></p>
<p>The <code>$hash</code> variable now contains the hash that you will need to store somewhere such as a database. Make sure to never actually store the raw password, only the hash that Phpass generates.</p>
<p>Also take a note the following:</p>
<ul>
<li>The password limit should be set to 72 characters to prevent certain DoS attacks. We do this here with the <code>strlen()</code> function.</li>
<li>The hash can never be less than 20 characters, so if it is then something went wrong during the encryption process. A simple if statement is done for this as well.</li>
</ul>
<h3>Checking &#8220;Matched&#8221; Passwords&mdash;Login</h3>
<p>For something like a login system, you will want to be able to check that the provided password matches up against your stored hash. Include the framework in if you haven&#8217;t already.</p>
<p>&lt;?php</p>
<p>require(&#8220;PasswordHash.php&#8221;);</p>
<p>$hasher = new PasswordHash(8, false);</p>
<p>?></p>
<p>There is no way to actually &#8220;decode&#8221; the hash (which is the point), instead we let Phpass do its magic for finding out if the password matches up against the stored hash.</p>
<p>&lt;?php</p>
<p>// Password from form input<br />
$password = $_POST["password"];</p>
<p>// Passwords should never be longer than 72 characters to prevent DoS attacks<br />
if (strlen($password) > 72) { die(&#8220;Password must be 72 characters or less&#8221;); }</p>
<p>// Just in case the hash isn&#8217;t found<br />
$stored_hash = &#8220;*&#8221;;</p>
<p>// Retrieve the hash that you stored earlier<br />
$stored_hash = &#8220;this is the hash we stored earlier&#8221;;</p>
<p>// Check that the password is correct, returns a boolean<br />
$check = $hasher->CheckPassword($password, $stored_hash);</p>
<p>if ($check) {</p>
<p>  // passwords matched! show account dashboard or something</p>
<p>} else {</p>
<p> // passwords didn&#8217;t match, show an error</p>
<p>}</p>
<p>?></p>
<p>The <code>$check</code> variable will return true if the passwords matched. It&#8217;s a good idea to then either display some sort of account dashboard for the user, or redirect them to their profile. If the check failed, you will need to send them back to the login form or output some sort of error message.</p>
<h2>Extra Resources</h2>
<p>That is all it takes to start using Phpass, so pat yourself on the back for being a security-aware developer. Of course you should also make sure that your website is safe against other vulnerabilities such as SQL Injection, which can also be easily fixed by using prepared statements or the <a href="http://sunnyis.me/blog/database-framework/">database framework</a> I wrote earlier.</p>
<p>If you need a bit more help on getting started with Phpass, I recommend you check out this <a href="http://github.com/sunnysingh/phpass-starter" target="_blank">starter project I made on GitHub</a>. It basically follows all the steps in this post but is separated into files as well as including the Phpass framework. Also feel free to read the more lengthy <a href="http://www.openwall.com/articles/PHP-Users-Passwords" title="How to manage a PHP application's users and passwords" target="_blank">article about secure passwords on Openwall</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sunnyis.me/blog/secure-passwords/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Database Framework</title>
		<link>http://sunnyis.me/blog/database-framework/</link>
		<comments>http://sunnyis.me/blog/database-framework/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 00:00:52 +0000</pubDate>
		<dc:creator>Sunny Singh</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[MySQLi]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://sunnyis.me/?p=222</guid>
		<description><![CDATA[I published my first project on GitHub called Database (super clever name, I know) which is a PHP framework for MySQL that makes interacting with databases easier. The purpose of this article is to introduce you to the MySQLi extension that it uses, and to explain why I built this framework. The Problem For years [...]]]></description>
				<content:encoded><![CDATA[<p>I published my first project on GitHub called <a href="http://github.com/sunnysingh/database" target="_blank">Database</a> (super clever name, I know) which is a PHP framework for MySQL that makes interacting with databases easier. The purpose of this article is to introduce you to the MySQLi extension that it uses, and to explain why I built this framework.</p>
<p><span id="more-222"></span></p>
<h2>The Problem</h2>
<p>For years I&#8217;ve been using the <a href="http://www.php.net/manual/book.mysql.php" title="Documentation on the MySQL database extension" target="_blank">MySQL database extension</a> which you might typically know as the <code>mysql_*</code> functions in PHP. I never found a problem with it until recently when I realized that it is an outdated and insecure way to interact with MySQL databases. I am probably really late to realize that, but I still see a ton of people using these functions.</p>
<p>For those of you that still use the MySQL extension functions such as <code>mysql_connect()</code>, don&#8217;t be alarmed. It&#8217;s fairly secure and gets the job done, and is probably the simplest way to use MySQL in PHP. However, these functions are extremely old now and don&#8217;t support many of MySQL&#8217;s latest features. Not only that but there are better options out there that will help secure your queries and prevent vulnerabilities such as SQL injection. If you&#8217;re starting a new website, doing a redesign, or simply want to add something new to your skill set, please read on.</p>
<h2>MySQL Improved: Pros and Cons</h2>
<p>The &#8220;i&#8221; in MySQLi stands for improved (some say it can also stand for interface), so you can already guess that it&#8217;s better. The main pros are speed, performance, security, and that it&#8217;s written in an Objected Oriented Programming (OOP) style. It also has a procedural API with function aliases, but that&#8217;s only to make old code easy to convert to the MySQLi extension.</p>
<p>The only con it has is the amount of code needed to execute and fetch results from a single query. Here&#8217;s a quick example of some code written using MySQLi:</p>
<p>[code lang="php"]<br />
<?php<br />
$db = new mysqli("host", "username", "password", "database");<br />
$stmt = $db->prepare("SELECT first_name, last_name FROM users WHERE id = ? AND username = ?")<br />
if ($stmt) {<br />
 $stmt->bind_param("is", $_GET["id"], $_GET["username"]);<br />
 $stmt->execute();<br />
 $stmt->bind_result($first_name, $last_name);<br />
 while ($stmt->fetch()) {<br />
  echo "First Name: ".$first_name; echo "Last Name: ".$last_name;<br />
 }<br />
 $stmt->close();<br />
}<br />
$db->close();<br />
?><br />
[/code]</p>
<p>Here&#8217;s a not so quick walk-through of this mess of code, line-by-line:</p>
<ol start="2">
<li>Sets up the database connection and creates the <code>$db</code> object that will contain all the methods we need.</li>
<li>Similar to <code>mysql_query()</code> except that we replace all variables with question marks (a.k.a. markers or placeholders). This is a feature of MySQLi that prevents SQL injection completely.</li>
<li>Makes sure there are no errors in the query.</li>
<li>Bind the parameters (variables) that will replace the markers in our query. The first argument specifies that we have an integer and a string, while the rest of the arguments are your variables. You don&#8217;t need to escape them because MySQLi treats our query and parameters separately, making it fine to use values from <code>$_GET</code> or <code>$_POST</code>.</li>
<li>Execute the query we&#8217;ve &#8220;prepared.&#8221;</li>
<li>Finally, retrieve the result and setup the variables we&#8217;d like to retrieve them as.</li>
<li>Loops through the result.</li>
<li>Here I&#8217;m just echo-ing out the data, but you can do whatever you want with it.</li>
<li>Close loop.</li>
<li>Close the statement (if you don&#8217;t, you&#8217;ll get errors while executing multiple queries).</li>
</ol>
<p>As you can see, it&#8217;s a very daunting task to execute a query and then fetch the results. I can definitely code this using the <code>mysql_*</code> functions and use less lines of code, but like I said before: you really want to take advantage of all the new features of MySQL and make your queries as secure as possible (unless you like getting hacked).</p>
<p>But you may be thinking, if the <code>mysql_*</code> functions are so bad, then why did they make using MySQLi so hard? To be honest, I don&#8217;t know. All I know is that there are many benefits to using MySQLi and I hope the framework I&#8217;m about to talk about will help aid more people to stop using those outdated functions.</p>
<h2>Introducing the Framework</h2>
<p>Using MySQLi shouldn&#8217;t be hard at all, and so that is why I&#8217;ve written this framework. It is more than a class wrapper: it cleans up the syntax needed to execute a query and adds methods specifically for fetching data. If you&#8217;re itching to get started with it, you can <a href="http://github.com/sunnysingh/database" target="_blank">get the full source on GitHub</a>. I really recommend that you look at the docs, test it out for yourself, and let me know what you think. If you think it&#8217;s stupid, fine don&#8217;t use it but at least give me your constructive opinion. If you think it&#8217;s the greatest thing since the Internet, then I&#8217;d love to know your opinions as well.</p>
<h3>A Taste</h3>
<p>[code lang="php"]<br />
<?php</p>
<p>$db = new Database($name, $host, $username, $password);</p>
<p>$name = $_GET["name"];<br />
$age = $_GET["age"];</p>
<p>$insert = $db->query("INSERT INTO people (name, age) VALUES(?, ?)", array($name, $age));</p>
<p>if ($insert !== false) {<br />
 $name = $db->fetch_field("SELECT name FROM people WHERE age = '123' LIMIT 1");<br />
 echo $name;<br />
}</p>
<p>?><br />
[/code]</p>
<p>There&#8217;s a little taste of some of the code that makes use of a few great features of the database framework. What you should notice is how easy it is to setup a database connection, execute a secure insert statement, check if that insert was successful, and then retrieve some of the data we just inserted. This also looks nicer (and shorter) than the previous example, doesn&#8217;t it?</p>
<h2>Feedback</h2>
<p>I hope some of you find this framework useful and I&#8217;d love to get some feedback on it. I built this out of personal need, but decided to open source it and give something back to the developer community. That&#8217;s all for now though, thanks for wasting your time to read this.</p>
]]></content:encoded>
			<wfw:commentRss>http://sunnyis.me/blog/database-framework/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Let Me Introduce Myself</title>
		<link>http://sunnyis.me/blog/introduction/</link>
		<comments>http://sunnyis.me/blog/introduction/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 04:50:12 +0000</pubDate>
		<dc:creator>Sunny Singh</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[@font-face]]></category>
		<category><![CDATA[DISQUS]]></category>
		<category><![CDATA[Google Chrome Frame]]></category>
		<category><![CDATA[Google Web Fonts]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://sunnyis.me/?p=1</guid>
		<description><![CDATA[Very first post that describes what the site is for, what type of content to expect, and the software that went into building it.]]></description>
				<content:encoded><![CDATA[<p>Hey all, and welcome to my personal site and blog. The site itself is pretty self-explanatory: it&#8217;s a place for people to go to whenever they want to know more about me and where they can easily find out how to contact me. It&#8217;s also where I will be able to publish content, such as coding experiments and interesting posts on various topics. I plan to write mostly about web development, but since this is my <em>personal</em> site I might also do reviews, rants, and anything else I find worth talking about.</p>
<p><span id="more-1"></span></p>
<h2>Walk-through</h2>
<p>I put a decent amount of work into the site, and so I&#8217;d like to take a second and tell you all about the design and code that went into it.</p>
<h3>Design</h3>
<p>The overall design is very simple, and in fact a bit too simple for my liking. I decided to go down this route because this will mostly be a content site, and so all I really needed to do was make the site visually appealing with focus set on the content itself. This is also the first time I tried to make typography look as pleasant and readable as possible. CSS&#8217; <a href="http://developer.mozilla.org/en/css/@font-face" title="Learn about using @font-face" target="_blank">@font-face</a> is utilized for custom fonts with the help of <a href="http://www.google.com/webfonts" target="_blank">Google Web Fonts</a>; I&#8217;m currently using <a href="http://www.google.com/webfonts/specimen/Open+Sans" target="_blank">Open Sans</a> for headings, and <a href="http://www.google.com/webfonts/specimen/Muli" target="_blank">Muli</a> for regular text. I also bumped up the font size a bit so no one has to squint while reading my posts. If any typography purists are reading this, let me know if I&#8217;m doing anything wrong here.</p>
<p>As far as the color scheme goes, I went with dark blue and shades of gray. I tend to use gray on almost all my projects as it&#8217;s an easy way to add contrast, and I chose dark blue because it&#8217;s my favorite color (I mean that in the most serious way possible).</p>
<h3>Features</h3>
<p>There are quite a few features that I&#8217;d like to point out.</p>
<h4>Social Links</h4>
<p>It is really easy to find me across the Web as I have provided my profile links right below the header. I decided against using the oh-so-popular social icons because they are too much of a distraction, plus I think the links look pretty nice (and I always wanted to embed that neat <a href="http://twitter.com/about/resources/followbutton" target="_blank">Twitter follow button</a> somewhere).</p>
<h4>Comments</h4>
<p>I decided to go with <a href="http://disqus.com/" target="_blank">DISQUS</a> for the comments system. Main reason is because I love it when other blogs use it, as it makes commenting so much easier and faster. If you have a DISQUS account and are already logged in, then all you need to do is type your comment and hit &#8220;post&#8221;. If you don&#8217;t have an account, you can still as easily login with other accounts, e.g., Twitter, Yahoo!, Google. Not only that but I also enabled guest comments, so if you&#8217;re used to the way WordPress handles comments then you should feel right at home.</p>
<p>There are also a ton of other useful features such as email notifications, comment threading, mentions, and reactions. I particularly can&#8217;t wait to see how the reactions feature works out, as it will bring conversations from across other sites like Twitter back to the comment thread.</p>
<h4>WordPress</h4>
<p>If you haven&#8217;t figured it out already, the site runs completely on <a href="http://wordpress.org/" target="_blank">WordPress</a>. I have only used it to set up single blogs in the past, but not as a <abbr title="Content Management System">CMS</abbr>. It is more than a blog script though, thus I decided to try it out for my personal site. I don&#8217;t regret the decision at all, because the many new WordPress features that were recently introduced as well as the customizable nature of the system made it perfect for small sites like mine. Not only that but I knew that I wanted to have a blog section, and having a framework that already included blogging as a core feature made it a no-brainer.</p>
<h3>Known Issues</h3>
<p>This can&#8217;t be a legit post if I don&#8217;t talk about good old Internet Explorer, right? I actually applied almost no fixes for that browser, and the site surprisingly looks decent. IE8 and IE9 are lookin&#8217; good, and IE7 is not perfect but it should manage. By default I prompt a <a href="http://code.google.com/chrome/chromeframe/" target="_blank">Google Chrome Frame</a> overlay for IE6 users, as I have phased out that browser a long time ago.</p>
<p><del datetime="2011-08-18T00:35:07+00:00">There also seems to be a bug with DISQUS and Google Web Fonts not playing nice with each other. When loading a post like this, you might notice that the fonts sort of do a &#8220;reload&#8221; when DISQUS finishes loading its stuff. I&#8217;m not sure of the exact cause, but if someone knows a solution please let me know.</del></p>
<p><ins datetime="2011-08-18T00:35:07+00:00">Font reloading seems to no longer be an issue after I upgraded to Firefox 6.</ins></p>
<h3>Other Stuff</h3>
<p>I&#8217;ve customized the hell out of WordPress, trying to make it more secure, faster, and work the way I want it to. Short URLs that would usually be shown as <code>[siteurl]/?p=1[/siteurl]</code> are now shown as <code>[siteurl]/p1[/siteurl]</code>. Not only does that look better, but saves a few characters as well. Then there&#8217;s little stuff like how the share buttons load asynchronously, some custom DISQUS styles, a plugin that improves search, and so on. Like I said before: I&#8217;m a developer, and so simply installing WordPress with a pre-built theme would not satisfy me. This theme is built from scratch, and I read through a bunch of WordPress documentation on how to change the slightest things. Nothing&#8217;s perfect of course, but I&#8217;m pretty happy with how things turned out so far.</p>
<p>So that&#8217;s it. This is my initial release and I hope to write more posts in the future (hopefully at least on a weekly basis or so) and release cool scripts, downloads, all that jazz. For now, feel free to let me know what you think so far and what I can make better.</p>
]]></content:encoded>
			<wfw:commentRss>http://sunnyis.me/blog/introduction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

 Served from: sunnyis.me @ 2013-06-18 18:10:38 by W3 Total Cache -->