<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.4" -->
<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/"
	>

<channel>
	<title>lunaru | weblog | thoughts</title>
	<link>http://www.lunaru.com</link>
	<description>Lu &#038; Lulu's Personal Site</description>
	<pubDate>Wed, 20 Aug 2008 07:50:57 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.4</generator>
	<language>en</language>
			<item>
		<title>The inadequacies of existing e-commerce solutions</title>
		<link>http://www.lunaru.com/2008/08/20/the-inadequacies-of-existing-e-commerce-solutions/</link>
		<comments>http://www.lunaru.com/2008/08/20/the-inadequacies-of-existing-e-commerce-solutions/#comments</comments>
		<pubDate>Wed, 20 Aug 2008 07:50:57 +0000</pubDate>
		<dc:creator>l_frequency</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">http://www.lunaru.com/2008/08/20/the-inadequacies-of-existing-e-commerce-solutions/</guid>
		<description><![CDATA[If you&#8217;ve ever thought that starting a company online and charging people money for your great software is easy, you&#8217;re seriously underestimating the pains of the current e-commerce state.
Consider this: You&#8217;ve got a great web-based software app. You think you&#8217;re going to be the next 37signals. You build out your application to perfection, skipping all [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve ever thought that starting a company online and charging people money for your great software is easy, you&#8217;re seriously underestimating the pains of the current e-commerce state.</p>
<p>Consider this: You&#8217;ve got a great web-based software app. You think you&#8217;re going to be the next <a href="http://www.37signals.com">37signals</a>. You build out your application to perfection, skipping all that trivial stuff about charging for the software for the latter stages of the development cycle. You think you can push out all that payment processing mumbo-jumbo until the end.</p>
<p>Well, you are in serious trouble.</p>
<p>The problem isn&#8217;t even bottlenecked at a grandiose level - like lacking a great business idea to reel in the money. The pain is all in the details like setting up an online payment processing system.</p>
<p>I understand that trying to process credit cards should be a heavier process than setting up a lemonade stand, but the current state of the art is absolutely ridiculous. This is because the current players in the market are either 1) pigeon-holing all e-commerce transactions into simple, but totally uninteresting processes, or 2) completely ill-equipped to handle online commerce.</p>
<p>In corner number one, you&#8217;ve got players like <a href="http://www.paypal.com">PayPal</a>, with whom you can easily set up a check-out form with PayPal express. Given that this is just about as brain-dead as e-commerce can get, you&#8217;d think that it&#8217;s as easy as filling in your name, getting a URL, and link your form to that URL. No. You&#8217;ve got to wade through a million pages of marketing rhetoric to get to any real documentation. And the end result is often so simple, that it doesn&#8217;t break the mold. If you&#8217;re doing anything remotely interesting, like a web-based software app, you&#8217;re not going to get much mileage here. Move along.</p>
<p>In the other corner, you&#8217;ve got big bank institutions offering online merchant solutions. Big trouble. Don&#8217;t even bother. From personal experience, I walked in and talked to no fewer than 3 representatives from your big names like Bank of America and Wells Fargo and got nothing but empty stares. &#8220;You want to do what?&#8221; &#8220;Wait, are you shipping anything?&#8221; &#8220;Do you need a terminal?&#8221; &#8220;You want a merchant account? We&#8217;ve got a nice merchant services package&#8230;&#8221; If you want to actually do credit card processing, you&#8217;re on your own when you talk to these big boys. They&#8217;re still living in a world where people walk into shops, swipe their credit cards in a terminal, and physically transact. Trust me, they&#8217;ve got good reasons to keep their focus (and employee training) in the physical space.</p>
<p>However, that leaves us web guys stuck out of luck. If you do your research correctly, you probably know that online payment processing comes in 3 pieces. First, at the layer closest to your application or system is the payment processing logic to initiate transactions and authorizations. There are plenty of great ways to roll this logic, my favorite being <a href="http://www.lunaru.com/www.activemerchant.org">ActiveMerchant</a>, a great gem for Ruby on Rails. This is the area closest to developers and I promise you will spend more time shopping for a solution than implementing it. You&#8217;re mostly in the care of savvy professionals here.</p>
<p>The next level, and one step removed from your application, is the Payment Gateway. See <a href="http://www.lunaru.com/www.authorize.net">Authorize.net</a> or <a href="http://www.lunaru.com/www.trustcommerce.com">TrustCommerce</a> or <a href="http://www.lunaru.com/www.braintreepaymentsolutions.com">Braintree</a>. These guys provide an API for your application logic to talk to banks and do the actual transaction. Payment gateways are generally good people - they understand web commerce, since that&#8217;s their bread and butter. They can hold your hands a bit and even offer sandboxes and other developer friendly options to make sure your app is behaving properly. ActiveMerchant will generally abstract away gateway differences for you, so this step is solid, though it could use some improvements.</p>
<p>Another step removed, and the final step is your merchant account. Your merchant account is the part of all of this that actually touches the banks. This is where the Visa or Mastercard magic happens. This is also where you&#8217;ll pull your hair out trying to figure out why the support folks are speaking in alien languages.</p>
<p>For the most part, people who provide merchant accounts and the people who work for them do not understand what you are doing. They don&#8217;t understand web applications, they don&#8217;t understand why you&#8217;re doing what you&#8217;re doing and why you chose to do things a certain way. They don&#8217;t understand APIs, IP addresses, servers, Ruby on Rails, HTTP, SSL, or anything like that. They understand forms, paperwork, support tickets, legal documents, and all that bureaucratic burden.</p>
<p>I&#8217;m not kidding when I say that it took me over a *month* to finally get a merchant account properly integrated with my payment gateway. I won&#8217;t say who the two parties were, but let me say that no fewer than 10 bulky and sometimes unnecessary forms where sent back-and-forth in a span of 3 weeks with the rest of the time wasted in some weird support limbo.</p>
<p>For developers like me, who prefer to focus on the elegance, simplicity, and unerring logic of clean code, the frustration and archaic nature of filling out PDFs and DOCs just seemed like a step back in the wrong direction.</p>
<p>The problem arises from the many layers that it takes to build an e-commerce solution. There are too many middle-men and too many ways to lose empathy along the way. There is no way a support person at a bank can understand how web applications tick - they&#8217;re not trained for that.</p>
<p>So my question is - can there be a hero to arise from all this mess and deliver to us a better way?
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.lunaru.com/2008/08/20/the-inadequacies-of-existing-e-commerce-solutions/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Teasing out great development concepts from Rails</title>
		<link>http://www.lunaru.com/2008/03/16/teasing-out-great-development-concepts-from-rails/</link>
		<comments>http://www.lunaru.com/2008/03/16/teasing-out-great-development-concepts-from-rails/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 23:29:14 +0000</pubDate>
		<dc:creator>l_frequency</dc:creator>
		
	<category>Programming</category>
		<guid isPermaLink="false">http://www.lunaru.com/2008/03/16/teasing-out-great-development-concepts-from-rails/</guid>
		<description><![CDATA[When DHH teased out Rails from the Basecamp source, the process was described as &#8220;experience-based design&#8221; - meaning that everything Rails provided from day one was born from the need to solve common development headaches met by everyday developers working on everyday development projects. The idea was to extract the largest common denominator of all [...]]]></description>
			<content:encoded><![CDATA[<p>When DHH teased out Rails from the Basecamp source, the process was described as &#8220;experience-based design&#8221; - meaning that everything Rails provided from day one was born from the need to solve common development headaches met by everyday developers working on everyday development projects. The idea was to extract the largest common denominator of all common projects and throw them into one prescriptive framework.</p>
<p>The funny thing about that is, this particular cuddliness of Rails has seemed to split the Rails camp into two groups of people. Yes I know, generalization is bad, but it&#8217;s convenient. In one corner, we have the hardcore developers who know the entire framework inside and out. These are the ones that can break Rails down into it&#8217;s actual and somewhat separable components. They know and understand how ActiveRecord (M) is separate from ActionPack (VC), which is separate from ActionMailer, which is separate from ActiveSupport, etc. They see both the forest and the individual trees that make the forest possible. The other corner of developers couldn&#8217;t care less. They&#8217;re using Rails as an all-in-one packaged deal. Like (some of) the old MFC developers of yore, they couldn&#8217;t tell how things work under the hood, they just care that it does.</p>
<p>Having said all that, in the spirit of &#8220;experienced-based&#8221; teasing out of great ideas, I think Rails has gotten to the point where it&#8217;s interesting to take a look at some of the concepts from which it is comprised and acknowledge them each individually. It&#8217;s time to not just look at the largest common denominator, but each reasonably sized denominator as well. I&#8217;ll skip the obvious cookie-cutter cliche ones like MVC and ActiveRecord. I&#8217;m going for the more underrated things.</p>
<p>Granted, I haven&#8217;t put much thought into this. This post is just a result of me thinking: &#8220;These ideas would and should work anywhere and everywhere&#8221;. Here&#8217;s my top 5:</p>
<p>5) Unit-testing and testing in general. I guess this falls under &#8220;cliche&#8221;, but the fact that Rails comes with testing ready out of the box speaks worlds of how important it is to all software projects. This is a should have/must have for any project</p>
<p>4) Mongrel (included in Rails 2.x I believe). It&#8217;s not this particular piece of software that I like, it&#8217;s what it represents. It screams &#8220;acknowledge your entire stack&#8221;. Mongrel was written to address the specific performance issues with Rails apps, but every project should have its Mongrel - its underlying engine that makes it run and run fast.</p>
<p>3) DB Abstraction/Migrations. MySQL, Oracle, SQLite, PostgreSQL, WhoTheHellCaresSQL. They should all be made to behave the same. Yes, I run SQLite on development and test, but MySQL on production. As long as I keep in mind the performance characteristics (see #4), who cares which DB is running?</p>
<p>2) Development, Test, and Production environments. Every project has some variation of these three environments. Every project should formalize that fact! Make it configurable in a YAML file! The fact that Rails comes with this out of the box makes development so, so easy.</p>
<p>1) Documentation. &#8216;Nuff said. If you don&#8217;t document it, it never happened.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.lunaru.com/2008/03/16/teasing-out-great-development-concepts-from-rails/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Setting up subversion server on a Windows machine.</title>
		<link>http://www.lunaru.com/2008/02/05/setting-up-subversion-server-on-a-windows-machine/</link>
		<comments>http://www.lunaru.com/2008/02/05/setting-up-subversion-server-on-a-windows-machine/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 09:06:38 +0000</pubDate>
		<dc:creator>l_frequency</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">http://www.lunaru.com/2008/02/05/setting-up-subversion-server-on-a-windows-machine/</guid>
		<description><![CDATA[I&#8217;ve been telling myself that it&#8217;s time to run my own subversion server for personal uses for a while now. So I decided to finally get started with the extra Windows box I had laying around. My plan was to host the files on the Windows box (a desktop) and have the files I needed to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been telling myself that it&#8217;s time to run my own subversion server for personal uses for a while now. So I decided to finally get started with the extra Windows box I had laying around. My plan was to host the files on the Windows box (a desktop) and have the files I needed to checkout available on my Mac (a laptop).</p>
<p>I don&#8217;t think it&#8217;s worth while documenting the entire experience. Instead, I think it would be useful to list the webpages I referenced.</p>
<p>First and foremost, I downloaded subversion from <a title="tigris" href="http://subversion.tigris.org/project_packages.html">tigris</a>. In my case, since I&#8217;m running this on windows, I grabbed the Windows binaries built against Apache 2.2.x.</p>
<p>Next, the best reference for starting a project with Windows is <a href="http://blogs.vertigosoftware.com/teamsystem/archive/2006/01/16/Setting_up_a_Subversion_Server_under_Windows.aspx">here</a>. This entry talks about setting up the right environment variables and creating a repository. Note that the SVNService wrapper being referred to is no longer necessary. Instead, <a href="http://www.thecrumb.com/2006/10/24/svnservice-no-longer-needed-with-subversion-14/">check this out</a>. Here, the author denotes steps to setup an NT service with no downloads necessary with subversion 1.4.x.</p>
<p>Lastly, I looked for a tutorial on some of the most basic svn commands and found <a href="http://artis.imag.fr/~Xavier.Decoret/resources/svn/index.html">this article</a>, which goes over some of basic concepts of subversion as well.</p>
<p>The above articles should be all that is necessary for setting up a Windows subversion server in minutes.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.lunaru.com/2008/02/05/setting-up-subversion-server-on-a-windows-machine/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Safari 3.0 wins</title>
		<link>http://www.lunaru.com/2007/11/27/safari-30-wins/</link>
		<comments>http://www.lunaru.com/2007/11/27/safari-30-wins/#comments</comments>
		<pubDate>Tue, 27 Nov 2007 09:18:57 +0000</pubDate>
		<dc:creator>l_frequency</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">http://www.lunaru.com/2007/11/27/safari-30-wins/</guid>
		<description><![CDATA[I&#8217;m an unabashed Safari hater. Correction, I *was* an unabashed Safari hater. I think the transition first happened when I picked up an iPhone and realized that Safari makes mobile browsing seem like second-nature. (I know, I&#8217;m such an Apple fanboy. I&#8217;ll go wallow in shame now.) Still, I was unconvinced that there need be [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m an unabashed Safari hater. Correction, I *was* an unabashed Safari hater. I think the transition first happened when I picked up an iPhone and realized that Safari makes mobile browsing seem like second-nature. (I know, I&#8217;m such an Apple fanboy. I&#8217;ll go wallow in shame now.) Still, I was unconvinced that there need be yet-another-browser-to-support.</p>
<p>It&#8217;s no secret that I love working on web apps. A necessary part of writing good web apps necessitates delving into the front-end technologies that the end-user interacts with while using said web apps. Thus, I&#8217;ve always been a fan of Firefox (for it&#8217;s developer friendly tools and plug-ins, it&#8217;s strict upholding of standards) and IE (out of necessity, due to widespread adoption, and the fact that they really did a good job on IE7). I&#8217;ve come to live with the fact that these two browsers simply must be supported, but Opera and Safari were always troublesome.</p>
<p>Then comes along Safari 3.0. I would have never known had I not installed Leopard over Thanksgiving weekend. Not only is it blazing fast, standards compliant, elegant, and full of new-hotness - dynamic widget creator anyone? - it comes with it&#8217;s own Inspector tool. Included are handy tools like a DOM-inspector, a CSS box model metrics tool, and a network transfer analyzer. The latter even comes with helpful hints about how to speed up transfer times, reminiscent of YSlow. The only thing missing is a firebug-esque debugger where one could set breakpoints. Oh well, nothing is perfect.</p>
<p>In fact, I&#8217;m sure Safari 3.0 is still missing a few bells and whistles. Even as I write this entry, I notice the lack of support of rich WYSIWIG editting in Safari that I usually have with IE or Firefox. Like I said, nothing is perfect. At least I won&#8217;t loathe debugging Safari specific issues as much as I have in the past. Maybe it&#8217;s also time for me to give Opera another chance&#8230;
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.lunaru.com/2007/11/27/safari-30-wins/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Apache - Upgrading OS X 10.4 (Tiger) to OS X 10.5 (Leopard)</title>
		<link>http://www.lunaru.com/2007/11/22/apache-upgrading-os-x-104-tiger-to-os-x-105-leopard/</link>
		<comments>http://www.lunaru.com/2007/11/22/apache-upgrading-os-x-104-tiger-to-os-x-105-leopard/#comments</comments>
		<pubDate>Fri, 23 Nov 2007 02:08:53 +0000</pubDate>
		<dc:creator>l_frequency</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">http://www.lunaru.com/2007/11/22/apache-upgrading-os-x-104-tiger-to-os-x-105-leopard/</guid>
		<description><![CDATA[A while ago, I posted a blog entry about upgrading to apache 2.x on OS X 10.4. I just got around to installing the brand-spanking new version of Apple&#8217;s OS (Leopard, OS X 10.5) and realized that it comes with apache 2.2.6!
Unfortunately, it also comes with a rather bloated httpd.conf, which was unappealing to me. [...]]]></description>
			<content:encoded><![CDATA[<p>A while ago, I posted a blog entry about <a href="http://www.lunaru.com/2007/07/23/updating-to-apache2-for-mac-os-x-tiger-apache-13/">upgrading to apache 2.x on OS X 10.4</a>. I just got around to installing the brand-spanking new version of Apple&#8217;s OS (Leopard, OS X 10.5) and realized that it comes with apache 2.2.6!</p>
<p>Unfortunately, it also comes with a rather bloated httpd.conf, which was unappealing to me. Not only that, but the conf file didn&#8217;t seem to be picking up personal conf files (default in /private/etc/httpd/users/). Fortunately, all I had to do to get back in the game was to back up httpd, apxs, and apachectl and then symlink them to my custom installation of apache, with my own custom httpd.conf.</p>
<p>I&#8217;m actually convinced that this is better in the long run than using the out-of-box apache installation, since this affords me flexibility going forward. I like to be in control of the software running on my box (which may or may not be in conflict with Apple&#8217;s easy-to-use stance).
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.lunaru.com/2007/11/22/apache-upgrading-os-x-104-tiger-to-os-x-105-leopard/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>It&#8217;s not so much an Object. It&#8217;s a Type.</title>
		<link>http://www.lunaru.com/2007/09/24/its-not-so-much-an-object-its-a-type/</link>
		<comments>http://www.lunaru.com/2007/09/24/its-not-so-much-an-object-its-a-type/#comments</comments>
		<pubDate>Tue, 25 Sep 2007 05:51:57 +0000</pubDate>
		<dc:creator>l_frequency</dc:creator>
		
	<category>Programming</category>
		<guid isPermaLink="false">http://www.lunaru.com/2007/09/24/its-not-so-much-an-object-its-a-type/</guid>
		<description><![CDATA[If you ever sit down to wonder why object-oriented programming is the dominant paradigm in software design, you might have also wondered whether there were any alternatives. That is, not alternatives as in that which is theoretically possible (because there are many), but alternatives that offer the elegance of OOP in a pragmatic sense. The [...]]]></description>
			<content:encoded><![CDATA[<p>If you ever sit down to wonder why object-oriented programming is the dominant paradigm in software design, you might have also wondered whether there were any alternatives. That is, not alternatives as in that which is theoretically possible (because there are many), but alternatives that offer the elegance of OOP in a pragmatic sense. The simple argument is that computer science, and thus programming, revolves around data structures, and an object is a natural way to think about data structures in an actionable way. We can build our applications by reasoning about the data that the application works with, and that trend lends itself well to things like objects where they seem to be a natural extension of the same idea.</p>
<p>While I am quite happy to leave it at that in describing OOP to novices, that explanation itself never suffices for me. The above explanation does not explain interfaces, abstract classes, and class hierarchies. The explanation leaves no room to think about proper design of interfaces, object relationships, and above-all, separation of concerns, which are all fundamental concepts in OOP.</p>
<p>In truth, I believe the answer lies in the fact that we&#8217;re not so attached to Objects as we are to Types. For example, if we take time to the most basic of expressions, like:</p>
<p><code> x * y </code></p>
<p>We might infer that we are working with integer or float types. In fact, this is basic <a href="http://en.wikipedia.org/wiki/Type_inference">type inference</a> operating in the human brain. However, taking an expression like:</p>
<p><code>"Hello" * "World"</code></p>
<p>We might be much less inclined to give a proper explanation for what this might do. This is because we understand string types don&#8217;t naturally implement multiplication.</p>
<p>From the most basic examples like this, we come to understand that we don&#8217;t rely on values so much as we rely on behavorial contracts. Even at the most basic primitive types, we understand the types that implement &#8216;+&#8217; and the types that implement &#8216;*&#8217;. Extending this to the higher level objects, we come across the most elegant way to describe our logic in programming statements.</p>
<p>By thinking about types, from the simplest Printers to design-pattern favorites like Factories, we can reason about our code in a way that lends itself well to implicit understanding. We can also reason about our code not necessarily from the point of view of the object (which is just an instance, just a &#8220;value&#8221;) but the interface for which that object implements. And because we reason about interfaces, we are really reasoning about complex types - a concept that is much more universal and broad than objects.</p>
<p>So really, when we talk about object-oriented programming, we&#8217;re basically presenting a misnomer for type-oriented programming, which is a much stronger and older concept than objects. While this explanation might seem trivial to those not necessarily curious about the details, to me, it helps classify and generalize concepts which may seem to be pure convenience (Objects) to concepts that are more universal (Types).
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.lunaru.com/2007/09/24/its-not-so-much-an-object-its-a-type/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Updating to Apache2 for Mac OS X Tiger (Apache 1.3)</title>
		<link>http://www.lunaru.com/2007/07/23/updating-to-apache2-for-mac-os-x-tiger-apache-13/</link>
		<comments>http://www.lunaru.com/2007/07/23/updating-to-apache2-for-mac-os-x-tiger-apache-13/#comments</comments>
		<pubDate>Mon, 23 Jul 2007 19:03:42 +0000</pubDate>
		<dc:creator>l_frequency</dc:creator>
		
	<category>Programming</category>
		<guid isPermaLink="false">http://www.lunaru.com/2007/07/23/updating-to-apache2-for-mac-os-x-tiger-apache-13/</guid>
		<description><![CDATA[This past weekend, I wanted to update the built-in Apache 1.3 (Darwin) build with a more recent Apache 2.2.4, all while preserving the Mac OS X&#8217;s Personal Web Sharing capabilities transparently. Here are the simple steps:

Download the latest apache src from http://www.apache.org. In my case it was version 2.2.4
Extract the src to a directory where [...]]]></description>
			<content:encoded><![CDATA[<p>This past weekend, I wanted to update the built-in Apache 1.3 (Darwin) build with a more recent Apache 2.2.4, all while preserving the Mac OS X&#8217;s Personal Web Sharing capabilities transparently. Here are the simple steps:</p>
<ul>
<li>Download the latest apache src from http://www.apache.org. In my case it was version 2.2.4</li>
<li>Extract the src to a directory where you keep all your src files, cd to that directory</li>
</ul>
<p><code>./configure –prefix=/usr/local/apache2 –enable-so –enable-mods-shared=most<br />
make<br />
make install</code></p>
<ul>
<li>Replace /usr/local/apache2 with the directory you&#8217;d like apache to be installed in. I named mine apache2. The above command will build apache2.</li>
</ul>
<p><code> cd /usr/sbin<br />
sudo mv httpd httpd.apache1.back<br />
sudo ln –s /usr/local/apache/bin/httpd httpd<br />
sudo mv apxs apxs.apache1.back<br />
sudo ln –s /usr/local/apache/bin/apxs apxs<br />
sudo mv apachectl apachectl.apache1.back<br />
sudo ln –s /usr/local/apache/bin/apachectl apachectl</code></p>
<ul>
<li>httpd (the binary for apache) version 1.3 is installed in /usr/sbin/. You can see the version by typing &#8220;httpd -v&#8221; in the command line. Replace this (after backing it up) with a symlink to our new apache2 httpd binary. This should also be done for apachectl and apxs.</li>
<li>At this point. apache2 is already running on your system, but the conf files are not quite ready. Add the following to your httpd.conf (found under /usr/local/apache2/conf). The PidFile is where the Personal Web Sharing manager looks to see if an apache instance is running.</li>
</ul>
<p><code> PidFile "/private/var/run/httpd.pid" </code></p>
<ul>
<li>You should also add the following to enable user directories.</li>
</ul>
<p><code> &lt;IfModule mod_userdir.c&gt;<br />
UserDir Sites<br />
&lt;/IfModule&gt;<br />
Include /private/etc/httpd/users/*.conf</code></p>
<ul>
<li>At this point, you are all set. Try toggling the Personal Web Sharing on and off. The next steps you might want to take (optionally) is to add MultiView support and change your DocumentRoot. These can all be done in the httpd.conf file. You might also want to uncomment the line that includes support for http://localhost/manual/</li>
<li>You can also find the previous 1.3 conf file at /private/etc/httpd. Notice how much more verbose this conf file is compared to the apache2 conf file. This is because most of the additional conf settings can be includes via conf/extra directory.</li>
</ul>
]]></content:encoded>
			<wfw:commentRSS>http://www.lunaru.com/2007/07/23/updating-to-apache2-for-mac-os-x-tiger-apache-13/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Being a Father</title>
		<link>http://www.lunaru.com/2007/07/15/being-a-father/</link>
		<comments>http://www.lunaru.com/2007/07/15/being-a-father/#comments</comments>
		<pubDate>Mon, 16 Jul 2007 04:15:51 +0000</pubDate>
		<dc:creator>l_frequency</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">http://www.lunaru.com/2007/07/15/being-a-father/</guid>
		<description><![CDATA[Luke Wang was born on July 4th, 2007 at 1:44pm, a warm, cheery summer day. Despite the fact that it was Independence Day, it was quite a non-descript summer day, full of sun and a slight breeze. Of course, having been confined to the labor &#038; delivery department of Kaiser, neither mom nor I were [...]]]></description>
			<content:encoded><![CDATA[<p>Luke Wang was born on July 4th, 2007 at 1:44pm, a warm, cheery summer day. Despite the fact that it was Independence Day, it was quite a non-descript summer day, full of sun and a slight breeze. Of course, having been confined to the labor &#038; delivery department of Kaiser, neither mom nor I were able to take advantage of that fact. I was anxious, nervous, and all-in-all quite queasy, and the dimly-lit room didn&#8217;t help. While mom was going through contractions, I felt myself fighting through my own nervousness. The birth itself went smoothly, Lulu having only been in real labor for no longer than 11 hours or so, and the delivery taking no longer than 30 minutes. Luke came out kicking and screaming, seemingly ready to take on the world and all its caveats.</p>
<p>I think it&#8217;s impossible to describe what it is like to suddenly come to full realization of becoming a father. Purposely, I&#8217;ve let all the emotions simmer down before making an entry here, as I knew only words of retrospect could do justice to the jumble of feelings that were suddenly thrust upon me. On that note, I&#8217;ve realized that there had been one overriding contemplation that I&#8217;ve had over the last week or so.</p>
<p>To bring life into this world is both a joy and an overwhelming responsibility, but it was also the onset of an epiphany. A baby is born into this world with no baggage, no past, no enemies, and no debt. When you think of all the new things to learn and experience for a newborn, it dulls the trivial things in our life we take as important - our everyday grind, our everyday matters, our everyday worries. It puts into perspective the everyday things in our life that we&#8217;ve become consumed in wrongfully, and frees us from the chains of mediocrity we&#8217;ve come to bind ourselves. At once, it is a new beginning for both the baby and the father.</p>
<p>What can we provide for our newborns? Of course, I mean more than just food, clothes, and shelter - I mean our knowledge, our sense of compassion, our sense of morality. Spare them our burdens, our hardships, and our immaturity. Spare them our love of bickering, our sense of greed, and our penchant for prejudice. Give them love, hope, and peace. Give them a better world in which to live, a better environment in which to grow. Give them truth. Give them honesty.</p>
<p>The one thing I can take away from this, as I step back and reflect on this little miracle of my own is that this is an opportunity for me to become a better person, and then to take that energy and posit it in a way that has lasting effects in this world. My contribution to humankind will be my willingness to give the next generation a better future, as should be the contribution of every father.</p>
<p>In the end, our society is built on the strength of our ability to not just create, but to share creation. That includes raising, and loving, our children.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.lunaru.com/2007/07/15/being-a-father/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Marketing 2.0 to go along with Web 2.0</title>
		<link>http://www.lunaru.com/2007/05/22/marketing-20-to-go-along-with-web-20/</link>
		<comments>http://www.lunaru.com/2007/05/22/marketing-20-to-go-along-with-web-20/#comments</comments>
		<pubDate>Wed, 23 May 2007 05:27:14 +0000</pubDate>
		<dc:creator>l_frequency</dc:creator>
		
	<category>Uncategorized</category>
		<guid isPermaLink="false">http://www.lunaru.com/2007/05/22/marketing-20-to-go-along-with-web-20/</guid>
		<description><![CDATA[I got to thinking: If I were to create a start up featuring a web 2.0 application du jour, how would I market myself to get that initial batch of traction traffic? It&#8217;s sometimes stunning to recall how I found all my web 2.0 staples like yelp.com, digg.com, and meebo.com.
So, besides Google Ads, here is [...]]]></description>
			<content:encoded><![CDATA[<p>I got to thinking: If I were to create a start up featuring a web 2.0 application du jour, how would I market myself to get that initial batch of traction traffic? It&#8217;s sometimes stunning to recall how I found all my web 2.0 staples like yelp.com, digg.com, and meebo.com.</p>
<p>So, besides Google Ads, here is my list of Marketing 2.0 do&#8217;s and dont&#8217;s.</p>
<p>Do:</p>
<ol>
<li>Get Dugg</li>
<li>Stealthily mention yourself in wikipedia under hot dev terms like AJAX (Ahem, Meebo)</li>
<li>Be viral and incite word-of-mouth.</li>
<li>Have a presense on blogs and web-based articles.</li>
<li>Have free T-Shirts.</li>
</ol>
<p>Don&#8217;t:</p>
<ol>
<li>SEO</li>
<li>Rely on e-mail spam</li>
<li>Fight for impossible keywords.</li>
<li>Build a crappy product</li>
<li>Have Ads all over your site.</li>
</ol>
]]></content:encoded>
			<wfw:commentRSS>http://www.lunaru.com/2007/05/22/marketing-20-to-go-along-with-web-20/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Working in Binary</title>
		<link>http://www.lunaru.com/2007/04/22/working-in-binary/</link>
		<comments>http://www.lunaru.com/2007/04/22/working-in-binary/#comments</comments>
		<pubDate>Sun, 22 Apr 2007 22:57:33 +0000</pubDate>
		<dc:creator>l_frequency</dc:creator>
		
	<category>Programming</category>
		<guid isPermaLink="false">http://www.lunaru.com/2007/04/22/working-in-binary/</guid>
		<description><![CDATA[I&#8217;ve been trying to implement a web-client for a server (implemented in C/C++) that has to deal with a lot of encrypting and decrypting of data with Rijndael/AES. Obviously, the weapon of choice for the web-end is javascript (and a little bit of Flash XMLSockets via Aflax).
Unfortunately, another requirement is that the client must deal [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been trying to implement a web-client for a server (implemented in C/C++) that has to deal with a lot of encrypting and decrypting of data with <a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard">Rijndael/AES</a>. Obviously, the weapon of choice for the web-end is javascript (and a little bit of Flash XMLSockets via <a href="http://www.aflax.org/">Aflax</a>).</p>
<p>Unfortunately, another requirement is that the client must deal with Unicode perfectly. After all, in today&#8217;s international world, it&#8217;s just plain wrong to implement anything with purely 8-bit ASCII in mind. Specifically, in this implementation, the plaintext is encoded in utf-8, then encrypted in AES, followed by an encoding to base64. The web client is of course then responsible for receiving that base64 blob out of the XMLSocket and attempt to display the original plaintext properly.</p>
<p>It sounds easy enough, but the shopping for various open source parts took me longer than expected. In light of that, I&#8217;ve decided to document the various implementations I found useful.</p>
<p>The first step is to take that base64 blob and convert it to something useful. In C, we&#8217;d want to tear it down to 8-bit bytes in order to feed it to our AES implementation. Unfortunately, in JavaScript the notion of a byte is &#8220;nicely&#8221; abstracted away, so we&#8217;ll have to deal with strings.  Using webtoolkits <a href="http://www.webtoolkit.info/javascript-base64.html">Base64</a> and <a href="http://www.webtoolkit.info/javascript-utf8.html">Utf8</a> implementations, we can convert the blob to a garbled ASCII string. (i.e. 5Lit5paH -> 中文 -> [some unreadable 6-byte string] ). We can then feed this string into <a href="http://www-cse.ucsd.edu/~fritz/rijndael.html">this Rijndael implementation</a>. We&#8217;re now left with another string, which we can decode to JavaScripts internal Unicode representation. Voila!</p>
<p>The key to the particular Rijndael implementation I&#8217;ve chosen is that it has a well documented approach to dealing with bytes in JavaScript. In particular, it converts any ASCII string to its byte representation as an array of integers (i.e. &#8220;Hello&#8221; -> [104, 101, 108, 108, 111]) and then operates on those &#8220;bytes&#8221; following the AES algorithm. While this is slow, it is clearer than other implementations I&#8217;ve found.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.lunaru.com/2007/04/22/working-in-binary/feed/</wfw:commentRSS>
		</item>
	</channel>
</rss>
