<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Founder of Highrisepro.com, Ruby on Rails Developer, UI/UX Designer, Lean Startup Practitioner &amp; Proud Father of Fraternal Boys - Montreal, CA</description><title>Adrian's Findings &amp; Learnings</title><generator>Tumblr (3.0; @codespore)</generator><link>http://codespore.com/</link><item><title>Adam's Startup Failure: Measuring The Wrong "Speed"</title><description>&lt;p class="img"&gt;&lt;img alt="Learning gauge" height="565" src="https://s3.amazonaws.com/codespore/learning_gauge.jpg" width="565"/&gt;&lt;/p&gt;
&lt;p&gt;When driving a car, we look at the speed gauge to know how fast we are moving. The higher the KM/H, the faster we are moving, and the faster we are to reach our destination. More often than not, entrepreneurs relate to this very basic understanding to gauge the speed of their actions at the progress of their own startup. It is this very basic understanding that have both driven most startups to failure and a few towards success. The difference lies not in the act of measuring speed, but the more fundamental definition of &amp;#8220;speed&amp;#8221; itself.&lt;/p&gt;
&lt;p&gt;Like driving a car, startup entrepreneurs need to look at the right gauge to measure the &amp;#8220;speed&amp;#8221; or rather progress of it&amp;#8217;s startup. Too often than not, entrepreneurs tend to look at things that are more tangible (i.e. like the speed of the car&amp;#8217;s movement). This need to see something tangible fast is often fuelled by the need to achieve financial stability.&lt;/p&gt;
&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;
&lt;p&gt;Like Adam, quitting his job in the pursuit for his dream is not without it&amp;#8217;s consequences. Loss of income stability is one that often causes startup entrepreneurs such as Adam to derails his focus from the measuring the right &amp;#8220;speed&amp;#8221; to the wrong. Clouded by all the monthly expenses Adam&amp;#8217;s impatient eagerness to get things done quickly, in hopes to see fast tangible returns has too often been the same reason why most startups fail.&lt;/p&gt;
&lt;p&gt;Rather than focusing on learning what customers really need, Adam shifted his focus towards getting something tangible done, a live application in front of his customers, hoping to achieve success fast. In a nutshell, Adam&amp;#8217;s addiction for fast result have costed him his startup.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lessons Learned:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To know how fast we are moving, we need to measure our speed. The faster we are, the closer we are towards success. Looking at the right or wrong gauge to measure our speed can result in success or failure. For startups, the right gauge to focus on to measure speed is the &amp;#8220;Learning Gauge&amp;#8221;. The faster we learn from our customers, the faster we are at building something that customers need. Getting things done should be secondary, learning should be the primary focus.&lt;/p&gt;</description><link>http://codespore.com/post/22176227804</link><guid>http://codespore.com/post/22176227804</guid><pubDate>Tue, 01 May 2012 00:32:00 -0400</pubDate><category>startups</category></item><item><title>Adam's Startup Failure: The Power to Realize</title><description>&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p class="img"&gt;&lt;img src="https://s3.amazonaws.com/codespore/Realize.jpg" width="500"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;small&gt;Image source: http://funny-pictures-blog.com&lt;br/&gt; &lt;/small&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Third-Person View&lt;/h2&gt;
&lt;p&gt;It&amp;#8217;s always easier to clearly understand a problem from a 3rd person&amp;#8217;s point of view. Like watching a movie, it&amp;#8217;s always natural for us to comment on the wrong behaviours &amp;amp; actions of the characters in a movie. Being the observer gives us a holistic view towards every part of the bigger picture, shedding light on intricate areas that are hidden from us in the obvious that we experience.&lt;/p&gt;
&lt;h2&gt;It&amp;#8217;s Everything Else But &amp;#8220;The Idea&amp;#8221;&lt;/h2&gt;
&lt;p&gt;The typical journey of &lt;a href="http://codespore.com/post/20397689237/the-story-how-startup-entrepreneurs-fail-in-malaysia" title="How startups fail in Malaysia"&gt;Adam&amp;#8217;s startup failure&lt;/a&gt;, depicted in my previous post is not uncommon to us. Starting with an idea and a burning desire to realize, Adam made decisions &amp;amp; took actions he thought was right and necessary for him to achieve his goal. To the unexperienced, what Adam did was nothing wrong. To many, the reasons why Adam failed was a matter of both opportunity, luck and some in Malaysia might say, lack in &amp;#8220;connections&amp;#8221;. He just didn&amp;#8217;t have enough of any. There was nothing wrong with his &amp;#8220;idea&amp;#8221;. Talking to more friends further confuses Adam, as suggestions came flooding in from all areas that suggests he had a problem with user interface design. He was perhaps in the wrong market. He may not have engaged the right development agency. He didn&amp;#8217;t run a PR stunt and most common of all he didn&amp;#8217;t have enough resources (Time and money) to do what he needed to do.&lt;/p&gt;
&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;
&lt;h2&gt;The Power To &amp;#8220;Realize&amp;#8221;&lt;/h2&gt;
&lt;p&gt;If it&amp;#8217;s one thing that differentiates successful startup entrepreneurs from the rest, it is their power to &amp;#8220;realize&amp;#8221;. &lt;a href="http://goo.gl/6cgcn" target="_blank"&gt;As google suggests&lt;/a&gt;, the word &amp;#8220;Realize&amp;#8221; can be defined as follow:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;strong&gt;&lt;span&gt;Become fully aware (of something) as a fact; understand clearly&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Cause something desired or anticipated to happen&lt;/li&gt;
&lt;li&gt;Give actual or physical form to an idea&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Too much emphasis has been put into the last 2 definitions that we often ignore the importance of being consciously aware of our actions. Being able to transform our ideas into something tangible while keeping ourselves grounded to reality through self awareness is key to startup success.&lt;/p&gt;
&lt;p&gt;Looking back at Adam&amp;#8217;s journey, realization was as &amp;#8220;action&amp;#8221; as action can get. With all his attention focused on quickly realizing his idea into something tangible, Adam failed to &amp;#8220;realize&amp;#8221; that he was building a product for the sake of building it, rather than a solution to remedy a set of &amp;#8220;validated&amp;#8221; problems. He might have had listed out a few problems in his head, but nothing was done to validate whether the problems that he had &amp;#8220;assumed&amp;#8221; are in fact problems that exists, and that it mattered to his customers/users.&lt;/p&gt;
&lt;p&gt;Like Adam, one of the greatest power of entrepreneurs is our ability to believe and visualize a better future in which our very creation/innovation can hope to realize. This power has helped spurred countless creations and innovations that have helped man kind in more ways that we could imagine. However, like a double edged sword, without the ability to be fully aware, that our ideas are merely assumptions that needs to be proven, this very same power, can be the very reason why our startup will fail.&lt;/p&gt;
&lt;h2&gt;Lessons Learned&lt;/h2&gt;
&lt;p&gt;Realize that your ideas (the problems &amp;amp; solutions) are merely &lt;strong&gt;assumptions&lt;/strong&gt; that needs to be validated/proven even if you are 100% confident that they are true. There&amp;#8217;s no harm in getting them validated. On the contrary, we might just find out more valuable information through the process. Assumptions that are validated, allows us to stay grounded to make decisions &amp;amp; take actions upon what is real rather than mere illusions that generates waste and lead us to failure.&lt;/p&gt;
&lt;h2&gt;Your Comments Matters&lt;/h2&gt;
&lt;p&gt;In the coming posts, I will continue to travel deeper into the world of Adam, to unravel the many reasons that had lead Adam to its failure. With my own entrepreneurial experience, references made to other startup gurus &amp;amp; most importantly your comments/questions, I hope to share more useful thinking processes and tools along the way that could help increase the success rate of startups. Any suggestions or comments that can add value to the whole discussion will be much appreciated.&lt;/p&gt;</description><link>http://codespore.com/post/20834086743</link><guid>http://codespore.com/post/20834086743</guid><pubDate>Tue, 10 Apr 2012 04:31:26 -0400</pubDate><category>startups</category></item><item><title>The Story: How Startup Entrepreneurs Fail in Malaysia</title><description>&lt;p class="img"&gt;&lt;img height="392" src="https://s3.amazonaws.com/codespore/failedStartup.jpg" width="630"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Name:&lt;/strong&gt; Adam&lt;br/&gt;&lt;strong&gt;Age:&lt;/strong&gt; 26 years old&lt;br/&gt;&lt;strong&gt;Occupation:&lt;/strong&gt; Unemployed - Previously worked for a multinational corporation as a systems analyst&lt;br/&gt;&lt;strong&gt;Marital Status: &lt;/strong&gt;Single &lt;/p&gt;
&lt;h2&gt;The Idea&lt;/h2&gt;
&lt;p&gt;It all started off with a brilliant idea that came up over a dinner Adam had with his friends in a Mamak stall a few weeks back. He couldn&amp;#8217;t stop thinking about the idea he had. Fueled with &amp;#8220;the&amp;#8221; brilliant idea, he decided to look for a developer to help create, what he thought to be the next &amp;#8220;Big Thing&amp;#8221;. Found a few potential developers/designers through referrals and haggled for the cheapest man-day rates. Without much savings or rather not wanting to take any monetary risks (&amp;#8220;Better to use other people&amp;#8217;s money than ours&amp;#8221; mentality), he sets his next goal at securing some X amount of seed funding to help kick start his entrepreneurial success.&lt;/p&gt;
&lt;h2&gt;The Business Plan&lt;/h2&gt;
&lt;p&gt;Through his network of friends, he lands an appointment with a potential VC. Was asked to prepare a complete business plan with an executive summary, financial projections, target market &amp;amp; risks assessments in which he then spends the next 3 weeks researching on his idea hoping to present a business case that looks good enough for the VC to invest in. With some help from a few of his accounting friends, he managed to pull off a business plan that looks and sounds good. He is more than convinced that his idea, backed by all the time spent on research &amp;amp; projections, is going to be a success. There is, in Adam&amp;#8217;s mind &amp;amp; heart, no doubt about it.&lt;/p&gt;
&lt;h2&gt;The Dragon&amp;#8217;s Den&lt;/h2&gt;
&lt;p&gt;Adam submits his business plan &amp;amp; was lucky enough to be called in for an Interview. He presents his case to a senior member (A certified chartered accountant with no historical Startup success) of the investment firm. All cases presented was scrutinized, focusing most of the time on Adam&amp;#8217;s 5 year financial projections. Questions was asked over and over again on how Adam arrived at the projected figures. Adam fought back rigorously, pulling out everything he had to win his case. Adam soon realized that there&amp;#8217;s no point furthering the conversation. The VC was not able to see Adam&amp;#8217;s vision. He was finally told to return with a better well researched business plan &amp;amp; hopefully some &amp;#8220;traction&amp;#8221; that will help to prove his idea.&lt;/p&gt;
&lt;h2&gt;The &amp;#8220;FREE&amp;#8221; Money. Yay!&lt;/h2&gt;
&lt;p&gt;Feeling distraught &amp;amp; disappointed, Adam heads back home with little learning. Awaken to a new day, Adam plans on his next move to help secure the funds he needed. Sharing his bad VC experience with his friends, they suggested him to apply for seed funding from a government grant. No equity, no interest repayment. It&amp;#8217;s FREE money of up to RM 150,000. Adam signs up, went through the entire ordeal &amp;amp; managed to successfully secure the funds he needed to kick start the development process.&lt;/p&gt;
&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;
&lt;h2&gt;The Action&lt;/h2&gt;
&lt;p&gt;Adam goes to his chosen development agency &amp;amp; started working out the feature &amp;amp; design specifications of his product. As part of the grant&amp;#8217;s requirement, a written progress report needs to be submitted on a weekly basis to ensure all funds are being used appropriately. Adam puts in on average 14 to 16 hours a day, working out the product details while his developer &amp;amp; designer works on the codes &amp;amp; designs. Excitement was in the air as more &amp;amp; more features are being rolled out each day. Success was inevitable.&lt;/p&gt;
&lt;p&gt;3 months has passed. T-minus 24 hours to the planned launch date. The heat is on &amp;amp; everyone on the team is busy fixing bugs &amp;amp; attending the the nitty-gritty details of the product. Production server is all setup ready to take on any loads of traffic. Nothing can go wrong &amp;amp; will go wrong. Adam and his team was ready. 3-2-1 Launch! Wooohooo! Cheers and laughter in the air. Everyone in the team was happy. Satisfied. The entire process till this time has been both fulfilling &amp;amp; convincing. Adam was ready to take on the world!&lt;/p&gt;
&lt;h2&gt;Reality Kicks In&lt;/h2&gt;
&lt;p&gt;Long story short, days &amp;amp; weeks has passed since the launch date. What was expected to happen did not. More features were added, better design was thought out &amp;amp; implemented. Nothing seemed to work. Unsure why, Adam decides to &amp;#8220;get out of the building&amp;#8221; to talk to some people. He attended a few local monthly events &amp;amp; started talking about his product/start up. This managed to get a few spikes in his analytic dashboard but it all lasted only for a short while. All the talking &amp;amp; interviews, slowly made Adam realize that he might not have built a product/solution that really serve the need of his intended market. Unfortunately the realization came too late. Adam has ran out of resources &amp;amp; can barely survive on his own. With all the monthly expenses stacking up, Adam is unsure if he has what it takes to persistently continue his journey. He had also seek the assistance of the  government grant agency, hoping that, through their network of connections in both the public &amp;amp; private sector, something good could come out of it.&lt;/p&gt;
&lt;h2&gt;The Inevitable&lt;/h2&gt;
&lt;p&gt;With no money left on the table &amp;amp; a mounting stack of expenses to pay off, survival mode kicks in. Adam decides to halt his dream for now. What comes next can be varying degrees of the same outcome Adam had to face, being one of 80% of startups that fail.&lt;/p&gt;
&lt;h2&gt;What Can We Learn&lt;/h2&gt;
&lt;p&gt;To most, the story of Adam&amp;#8217;s entrepreneurial journey might sound similar to what we have encountered in our own journey. To some, it may had been &amp;amp; have since been better if not success. The question is, what differentiates a successful start up from a failed one? What have they done that is different, that had allowed them to achieve incomprehensible success? What are the mistakes that Adam had made &amp;amp; what can we learn from it to better improve our next startup journey?&lt;/p&gt;
&lt;p&gt;In the coming posts, I will serve to dissect each part of Adam&amp;#8217;s journey into both &amp;#8220;The Problem&amp;#8221; and &amp;#8220;The Solution&amp;#8221;, that hopefully, will allow us to better understand what is at stake and how can we as individuals &amp;amp; and as a community work together to progressively &amp;amp; iteratively work towards increasing the success rate of startups in Malaysia.&lt;/p&gt;</description><link>http://codespore.com/post/20397689237</link><guid>http://codespore.com/post/20397689237</guid><pubDate>Tue, 03 Apr 2012 02:19:00 -0400</pubDate><category>startups</category></item><item><title>Startup Lessons Learned: Lean Startup Videos</title><description>&lt;a href="http://www.justin.tv/startuplessonslearned/videos"&gt;Startup Lessons Learned: Lean Startup Videos&lt;/a&gt;: &lt;p&gt;Fantastic videos. Was reading the Lean Startup book and found these videos that really help understand the Lean concept better.&lt;/p&gt;</description><link>http://codespore.com/post/18619951281</link><guid>http://codespore.com/post/18619951281</guid><pubDate>Fri, 02 Mar 2012 16:04:00 -0500</pubDate><category>startups</category></item><item><title>XMPP Illustrated: Services Architecture</title><description>&lt;p&gt;How does XMPP fit into the whole web services architecture? How can I enable web clients and my web applications to make use of XMPP? This illustration will surely help to picture and understand the XMPP puzzle.&lt;/p&gt;
&lt;p&gt;&lt;img alt="XMPP Services Architecture" height="453" src="https://s3.amazonaws.com/codespore/downloads/XMPP+Illustrated+-+Services+Architecture.png" width="630"/&gt;&lt;/p&gt;
&lt;p&gt; Below is the link to download the PDF version:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://goo.gl/CZk6b" title="XMPP Service Architecture" target="_blank"&gt;XMPP Illustrated: Services Architecture&lt;/a&gt;&lt;/p&gt;</description><link>http://codespore.com/post/17773828095</link><guid>http://codespore.com/post/17773828095</guid><pubDate>Fri, 17 Feb 2012 13:18:00 -0500</pubDate><category>xmpp</category></item><item><title>Paper Illustration</title><description>&lt;p&gt;&lt;p class="img"&gt;&lt;img alt="Paper illustration" height="400" src="https://s3.amazonaws.com/codespore/design/Paper.png" width="630"/&gt;&lt;/p&gt;&lt;/p&gt;</description><link>http://codespore.com/post/17681527900</link><guid>http://codespore.com/post/17681527900</guid><pubDate>Wed, 15 Feb 2012 18:59:00 -0500</pubDate><category>design</category></item><item><title>XMPP Illustrated: Getting to Know XMPP</title><description>&lt;p class="img"&gt;&lt;img height="228" src="https://s3.amazonaws.com/codespore/downloads/xmpp.jpeg" width="221"/&gt;&lt;/p&gt;
&lt;p&gt;Had wanted to learn XMPP for a long time, but didn&amp;#8217;t have the time to do it. Finally straighten all my work and picked up a book by Jack Moffitt - &lt;a href="http://www.amazon.ca/dp/0470540710/ref=cm_sw_r_tw_dp_EyVopb054G4H6"&gt;&amp;#8220;Professional XMPP Programming with Javascript and JQuery&amp;#8221;&lt;/a&gt;. Really good book to start off with, but lack in illustrations, which really helps in nailing down the concepts into my head, and so I thought it would be helpful for others to grasp XMPP by illustrating some of the concepts explained in the book. Listing of core services and practical applications of XMPP were obtained from the O&amp;#8217;REILLY - &lt;a href="http://www.amazon.ca/dp/059652126X/ref=cm_sw_r_tw_dp_zCVopb14AJGTB"&gt;XMPP: The Definitive Guide&lt;/a&gt;. The official &lt;a href="http://xmpp.org/"&gt;XMPP Standards Foundation&lt;/a&gt; site was of great help as well, in understanding certain areas of XMPP, which I have incorporated into the summary for better understanding.&lt;/p&gt;
&lt;p&gt;Hope my 1st chapter summary helps to speed things up for others. Depending on permissions and support, I might just continue with the rest of the chapters. Appreciate any comments to further improve it.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s a preview of some of the illustrations:&lt;/p&gt;
&lt;p&gt;&lt;img alt="XMPP Network" height="214" src="https://s3.amazonaws.com/codespore/downloads/XMPP+Network.png" width="630"/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img alt="XMPP Addressing" height="452" src="https://s3.amazonaws.com/codespore/downloads/XMPP+Addressing.png" width="630"/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img alt="XMPP Stream" height="189" src="https://s3.amazonaws.com/codespore/downloads/XMPP+Stream.png" width="630"/&gt;&lt;/p&gt;

&lt;p&gt;Below is the link to download:&lt;/p&gt;
&lt;p&gt;&lt;a class="info" href="http://goo.gl/yNoJW" title="XMPP Illustrated: Getting to know XMPP" target="_new"&gt;XMPP Illustrated: Getting to know XMPP&lt;/a&gt;&lt;/p&gt;</description><link>http://codespore.com/post/17629906869</link><guid>http://codespore.com/post/17629906869</guid><pubDate>Tue, 14 Feb 2012 19:19:00 -0500</pubDate><category>XMPP</category></item><item><title>Vector Volume Dial Illustration</title><description>&lt;p&gt;&lt;img class="center" src="https://s3.amazonaws.com/codespore/design/dial.png"/&gt;&lt;/p&gt;
&lt;p&gt;My attempt at a vector volume dial.&lt;/p&gt;</description><link>http://codespore.com/post/17202565170</link><guid>http://codespore.com/post/17202565170</guid><pubDate>Tue, 07 Feb 2012 03:00:00 -0500</pubDate><category>design</category></item><item><title>Welcome to Metaweb - “Open, shared database of the...</title><description>&lt;iframe width="400" height="225" src="http://www.youtube.com/embed/TJfrNo3Z-DU?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Welcome to Metaweb - &lt;span&gt;“Open, shared database of the world’s knowledge”&lt;/span&gt;&lt;/p&gt;</description><link>http://codespore.com/post/17183739669</link><guid>http://codespore.com/post/17183739669</guid><pubDate>Mon, 06 Feb 2012 20:16:00 -0500</pubDate><category>Code Fast</category></item><item><title>My First Attempt at 3D Vector Calendar</title><description>&lt;p&gt;Have always been passionate about 3D vector illustrations. Never really took the time to practice until today. Here&amp;#8217;s my attempt at creating a 3D Vector Calendar using Adobe Illustrator, thanks to a tutorial by &lt;a href="http://vector.tutsplus.com/tutorials/illustration/make-a-handy-3d-vector-calendar-icon/"&gt;Jonathan&lt;/a&gt; back in 2008. Hope to have more time to work on more. It&amp;#8217;s was fun!&lt;/p&gt;
&lt;p class="img"&gt;&lt;img src="https://s3.amazonaws.com/codespore/design/codespore_cal.png"/&gt;&lt;/p&gt;</description><link>http://codespore.com/post/17163597636</link><guid>http://codespore.com/post/17163597636</guid><pubDate>Mon, 06 Feb 2012 14:32:00 -0500</pubDate><category>design</category></item><item><title>What's The Relation Between Rack, Rack Application, Rack Middleware, Rackup &amp; Rails Application?</title><description>&lt;p&gt;A mouth full of terms indeed! How else could I have shorten the title? Anyways, since you&amp;#8217;re reading this, I&amp;#8217;m sure you are confused as I am when I first came into these terms myself. Hope this post helps you understand better what all these are and how they relate to one another.&lt;/p&gt;
&lt;p class="img"&gt;&lt;img alt="image" class="center" height="200" src="http://upload.wikimedia.org/wikipedia/commons/6/64/Rack-logo.png" width="400"/&gt;&lt;/p&gt;
&lt;h3&gt;What is Rack?&lt;/h3&gt;
&lt;p&gt;Traditionally, ruby web framework developers would write an adapter for each web server they wanted their web framework to support. This is obviously unsustainable, hence a standard solutions is needed. Rack to the Rescue! Rack defines a standard way of interaction between web servers and ruby web applications. Rack basically is both a simple specification (the standard) and ruby library for connecting web servers to ruby web applications. &lt;/p&gt;
&lt;p&gt;The Specification: Defines two things: an environment (env), which is a hash that contains CGI-like headers describing the request and a response, which is an array of values including the [response code, response headers, and response body].&lt;/p&gt;
&lt;p&gt;Ruby Library: List of all modules and classes are available at &lt;a href="http://rack.rubyforge.org/doc/classes/Rack.html"&gt;&lt;a href="http://rack.rubyforge.org/doc/classes/Rack.html"&gt;http://rack.rubyforge.org/doc/classes/Rack.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;!-- more --&gt;&lt;br/&gt;What is a Rack Application?&lt;/h3&gt;
&lt;p&gt;A Rack application is a Ruby object that implements a call method that receives a CGI-like Rack environment (env) hash as its argument and returns a Rack response. A Rack response is an array containing three things: a [response code, headers, response body]. The response body is an object, such as an array, that responds to the method each. The each method must yield the response body as strings when invoked. &lt;/p&gt;
&lt;script src="https://gist.github.com/1720926.js?file=config.ru" type="text/javascript"&gt;&lt;/script&gt;&lt;h3&gt;What is a Rack Middleware?&lt;/h3&gt;
&lt;p&gt;A Rack middleware is a Rack application that is designed to run in conjunction with another Rack application, which acts as the endpoint. You can think of a Rack middleware as a filter that receives the Rack environment for the request from the previous middleware, if any, does some work with or on the request&amp;#8217;s environment and then calls the next middleware in the chain. The last Rack application in the chain is the application itself. Any middleware in the chain can return the Rack response itself, thus preventing the rest of the middlewares in the chain from executing.&lt;/p&gt;
&lt;script src="https://gist.github.com/1720964.js?file=config.ru" type="text/javascript"&gt;&lt;/script&gt;&lt;p&gt;&lt;img alt="image" height="176" src="http://ofps.oreilly.com/static/titles/9780596521424/figs/master/rack_request.png" width="576"/&gt;&lt;/p&gt;
&lt;h3&gt;What is Rackup &amp;amp; the Rackup file?&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;rackup config.ru&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Rackup is the command used to fire up a web server to start serving the rack application. The Rackup file (i.e. config.ru) specifies which rack components will be used by the application. You can use any Ruby syntax you want in the Rackup file in addition to the following three methods provided through the Rack::Builder class.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;run(app)&lt;br/&gt;&lt;/strong&gt;Specifies the actual Rack application to run at the end of the middleware chain.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;use(middleware, *args)&lt;br/&gt;&lt;/strong&gt;Specifies a middleware to add to the application&amp;#8217;s middleware stack. Middlewares are added in the order they are specified. Any additional arguments are passed along to the initialize method of the middleware.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;map(path){ block }&lt;br/&gt;&lt;/strong&gt;Mounts a Rack application under the specified URI path. An application is mounted under the URI path by calling run within a map block.
&lt;script src="https://gist.github.com/1721033.js?file=config.ru" type="text/javascript"&gt;&lt;/script&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;What is a Rails Application?&lt;/h3&gt;
&lt;p&gt;A Rails application is actually a collection of Rack and Rails middleware components that all work together to form the completed whole. View a list of middleware stack your application has configured for by running the &lt;em&gt;rake middleware&lt;/em&gt; command.&lt;/p&gt;
&lt;script src="https://gist.github.com/1725485.js?file=rails%20middlewares" type="text/javascript"&gt;&lt;/script&gt;&lt;p&gt;The entire Rack middleware stack is executed and then the application&amp;#8217;s routes are passed the Rack environment. The URI path of the current request is matched to a route in the route set defined in config/routes.rb. Once a route has been matched, the controller action it maps to is executed as a Rack application.&lt;/p&gt;
&lt;p&gt;Sources: &lt;br/&gt;&lt;a href="http://ofps.oreilly.com/titles/9780596521424/rack.html"&gt;&lt;a href="http://ofps.oreilly.com/titles/9780596521424/rack.html"&gt;http://ofps.oreilly.com/titles/9780596521424/rack.html&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;&lt;a href="http://www.engineyard.com/blog/2010/rails-and-merb-merge-rack-part-6-of-6/"&gt;&lt;a href="http://www.engineyard.com/blog/2010/rails-and-merb-merge-rack-part-6-of-6/"&gt;http://www.engineyard.com/blog/2010/rails-and-merb-merge-rack-part-6-of-6/&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;&lt;a href="http://rack.rubyforge.org/doc/"&gt;&lt;a href="http://rack.rubyforge.org/doc/%C2%A0"&gt;http://rack.rubyforge.org/doc/ &lt;/a&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://codespore.com/post/16932114523</link><guid>http://codespore.com/post/16932114523</guid><pubDate>Thu, 02 Feb 2012 15:14:00 -0500</pubDate><category>Ruby on Rails</category></item><item><title>The Quirky Manifesto - Let's Start Inventing!</title><description>&lt;p&gt;&lt;iframe frameborder="0" height="354" src="http://player.vimeo.com/video/23382817?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="630"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/23382817"&gt;Quirky Manifesto&lt;/a&gt; from &lt;a href="http://vimeo.com/quirky"&gt;Quirky&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;</description><link>http://codespore.com/post/15888742054</link><guid>http://codespore.com/post/15888742054</guid><pubDate>Sun, 15 Jan 2012 11:19:00 -0500</pubDate><category>Inspirational</category></item><item><title>Where Good Ideas Come from by Steven Johnson</title><description>&lt;iframe width="400" height="222" src="http://www.youtube.com/embed/NugRZGDbPFU?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Where Good Ideas Come from by Steven Johnson&lt;/p&gt;</description><link>http://codespore.com/post/14149642400</link><guid>http://codespore.com/post/14149642400</guid><pubDate>Mon, 12 Dec 2011 22:11:00 -0500</pubDate><category>Inspirational</category></item><item><title>Artix: The ultimate CRM for Asterisk</title><description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/codespore/6459450361/" title="Artix Landing Page by Codespore, on Flickr"&gt;&lt;img alt="Artix Landing Page" height="424" src="http://farm8.staticflickr.com/7163/6459450361_eaa9f6cb19_z.jpg" width="640"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;New landing page created for an in-house CRM with Asterisk integration. Using it to test market response before deciding to develop further on this. This site is developed using HTML5, CSS3, powered by &lt;a href="http://www.locomotivecms.com/"&gt;Locomotive&lt;/a&gt; (Open source Ruby on Rails CRM) and hosted on &lt;a href="http://www.heroku.com/"&gt;Heroku&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s part of a&lt;a href="http://theleanstartup.com/"&gt; LeanStartup&lt;/a&gt; exercise I&amp;#8217;m practicing ever since learning about it from Eric Ries. Build-Measure-Learn. Validated Learning. Those are the 2 keywords in my head everyday. Never actually took action until I last read the &lt;a href="http://www.fourhourworkweek.com/"&gt;4 hour work week book&lt;/a&gt; by Timothy Ferriss. You guys are great!&lt;/p&gt;</description><link>http://codespore.com/post/13777599373</link><guid>http://codespore.com/post/13777599373</guid><pubDate>Mon, 05 Dec 2011 08:12:00 -0500</pubDate><category>Portfolio</category></item><item><title>Start-up Metrics that Matter by Dave McClure</title><description>&lt;p&gt;&lt;iframe frameborder="0" height="347" src="http://player.vimeo.com/video/6925856?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="630"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/6925856"&gt;Start-up Metrics that Matter by Dave McClure&lt;/a&gt; from &lt;a href="http://vimeo.com/carsonified"&gt;Carsonified&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.slideshare.net/dmc500hats/startup-metrics-for-pirates-fowa-london-oct-2009" title="Startup Metrics for Pirates / KILL a Feature (FOWA London, Oct 2009)" target="_blank"&gt;Startup Metrics for Pirates / KILL a Feature (FOWA London, Oct 2009)&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="497" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/2110748" width="630"&gt;&lt;/iframe&gt; View more presentations from &lt;a href="http://www.slideshare.net/dmc500hats" target="_blank"&gt;Dave McClure&lt;/a&gt;&lt;/p&gt;</description><link>http://codespore.com/post/11269816335</link><guid>http://codespore.com/post/11269816335</guid><pubDate>Mon, 10 Oct 2011 07:35:00 -0400</pubDate><category>Startups</category></item><item><title>Startup Metrics for Pirates Slides</title><description>&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.slideshare.net/dmc500hats/startup-metrics-for-pirates-long-version" title="Startup Metrics for Pirates" target="_blank"&gt;Startup Metrics for Pirates&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="497" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/89026" width="630"&gt;&lt;/iframe&gt; View more presentations from &lt;a href="http://www.slideshare.net/dmc500hats" target="_blank"&gt;Dave McClure&lt;/a&gt;&lt;/p&gt;</description><link>http://codespore.com/post/11269198528</link><guid>http://codespore.com/post/11269198528</guid><pubDate>Mon, 10 Oct 2011 06:51:00 -0400</pubDate><category>Startups</category></item><item><title>Dave McClure - Startup Metrics for Pirates: AARRR!</title><description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/irjgfW0BIrw?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Dave McClure - Startup Metrics for Pirates: AARRR!&lt;/p&gt;</description><link>http://codespore.com/post/11269155818</link><guid>http://codespore.com/post/11269155818</guid><pubDate>Mon, 10 Oct 2011 06:47:00 -0400</pubDate><category>Startups</category></item><item><title>Rails 3 + Arel: Left outer join with table aliasing (Part 2)</title><description>&lt;p&gt;It wasn&amp;#8217;t until I read an article by Ernie Miller on &lt;a href="http://erniemiller.org/projects/metawhere/"&gt;MetaWhere&lt;/a&gt;, that I found out the lies that &lt;strong&gt;&amp;#8220;.to_sql&amp;#8221;&lt;/strong&gt; has been putting me up with. Apparently, &lt;strong&gt;&amp;#8220;.to_sql&amp;#8221;&lt;/strong&gt; doesn&amp;#8217;t show you everything under the hood. For example:&lt;/p&gt;
&lt;p class="note"&gt;Task.includes(:creator).where(&amp;#8220;users.username LIKE &amp;#8216;%manager%&amp;#8217;&amp;#8221;)&lt;strong&gt;.to_sql&lt;/strong&gt;&lt;br/&gt;# Outputs &amp;#8220;SELECT `tasks`.* FROM `tasks` WHERE (users.username LIKE &amp;#8216;%manager%&amp;#8217;)&amp;#8221;&lt;/p&gt;
&lt;p&gt;With &lt;a href="http://erniemiller.org/projects/metawhere/"&gt;MetaWhere&lt;/a&gt;&amp;#8217;s own &lt;strong&gt;&amp;#8220;.debug_sql&amp;#8221;&lt;/strong&gt;, I was then able to see the complete SQL query that was being executed against my tables.&lt;/p&gt;
&lt;p class="note"&gt;Task.includes(:creator).where(&amp;#8220;users.username LIKE &amp;#8216;%manager%&amp;#8217;&amp;#8221;)&lt;strong&gt;.debug_sql&lt;/strong&gt;&lt;br/&gt;# Outputs &amp;#8220;SELECT * FROM tasks LEFT OUTER JOIN users ON users.id = tasks.creator_id AND users.deleted_at IS NULL WHERE (users.username LIKE &amp;#8216;%manager%&amp;#8217;)&amp;#8221;&lt;/p&gt;
&lt;p&gt;Now that the issue with &amp;#8220;Includes&amp;#8221; has been straightened, lets see the updated Task example that I&amp;#8217;ve given in Part I.&lt;/p&gt;
&lt;script src="https://gist.github.com/1273225.js?file=arel_joins.rb" type="text/javascript"&gt;&lt;/script&gt;&lt;p&gt;IMPORTANT: Take note of the updated alias name for the Users table. I&amp;#8217;ve updated it to &amp;#8220;creators_tasks&amp;#8221; as including :creators into your query will result in a default aliasing of users table as &amp;#8220;creators_users&amp;#8221; in SQL&lt;/p&gt;</description><link>http://codespore.com/post/11211447266</link><guid>http://codespore.com/post/11211447266</guid><pubDate>Sat, 08 Oct 2011 23:22:00 -0400</pubDate><category>Ruby on Rails</category></item><item><title>"STARTUP 101:

1) Identify a pain point caused by a market trend
2) Create a solution that customers..."</title><description>“&lt;p&gt;STARTUP 101:&lt;/p&gt;

&lt;p&gt;1) Identify a pain point caused by a market trend&lt;br/&gt;
2) Create a solution that customers are willing to pay for&lt;br/&gt;
3) Provide that solution in a way that makes money (profitable)&lt;/p&gt;”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;Profitguide.com on &lt;a href="http://www.profitguide.com/article/42499--the-lean-growth-machine"&gt;&lt;em&gt;The Lean Growth Machine&lt;/em&gt;&lt;/a&gt;&lt;/em&gt;</description><link>http://codespore.com/post/11135938954</link><guid>http://codespore.com/post/11135938954</guid><pubDate>Fri, 07 Oct 2011 05:59:00 -0400</pubDate><category>Startups</category></item><item><title>Rails 3 + Arel: Left outer join with table aliasing (Part 1)</title><description>&lt;p&gt;I recently stumble upon a situation that surprised me while developing a feature for users to create, assign and manage tasks. Here&amp;#8217;s the background: A User model and a Task model that consists of both a &lt;strong&gt;creator_id&lt;/strong&gt; using delynn&amp;#8217;s &lt;a title="Userstamp gem" href="https://github.com/delynn/userstamp"&gt;Userstamp gem&lt;/a&gt; to refer to the user who created the task and a &lt;strong&gt;user_assigned_id&lt;/strong&gt; that refers to the user that was assigned the task.&lt;/p&gt;
&lt;p&gt;Like any other application, I need to add a table listing that allows users to search by both creator name and user_assigned name. What better to use than&lt;a title="JQuery Datatables" href="http://datatables.net/"&gt; JQuery Datatables&lt;/a&gt;. Since it comes with searching capabilities, I only need to hook up the data source from the server side.&lt;/p&gt;
&lt;p&gt;I wanted users to be able to search for Tasks by both the creator&amp;#8217;s username and user_assigned username. This had logically implied me to use &amp;#8220;Includes&amp;#8221; since I have understood it to automatically use a LEFT OUTER JOIN on my queries (as learned from &lt;a href="http://ruby.ryanbigg.com/post/1468788928/left-outer-join-with-arel"&gt;Ryan Bigg&amp;#8217;s article&lt;/a&gt;), but to my surprise the search wasn&amp;#8217;t working as intended.&lt;strike&gt; I then pulled out the handy &lt;strong&gt;.to_sql&lt;/strong&gt; on my relation and to my surprise, the &amp;#8220;Includes&amp;#8221; are not using any LEFT OUTER JOINS anymore! &lt;/strike&gt; &lt;/p&gt;
&lt;p&gt;I then decided to use JOINS instead with a LEFT OUTER JOIN statement on the users table to get it working. Below is what I have worked out.&lt;/p&gt;
&lt;script src="https://gist.github.com/1263909.js?file=arel_joins.rb"&gt;&lt;/script&gt;&lt;p class="note"&gt;Correction/Update: &amp;#8220;Includes&amp;#8221; in actual does still apply a &amp;#8220;LEFT OUTER JOIN&amp;#8221;. &lt;a href="http://codespore.tumblr.com/post/11211447266/rails-3-arel-left-outer-join-with-table-aliasing"&gt;Read Part 2 of this article to find out more&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One thing that I still can&amp;#8217;t figure it out is that, How on earth can someone use AREL to match by 2 or more fields that are CONCATENATED? i.e. CONCAT(users.first_name,users.last_name). This is something to think about and share once I find out the answer.&lt;/p&gt;</description><link>http://codespore.com/post/11135790058</link><guid>http://codespore.com/post/11135790058</guid><pubDate>Fri, 07 Oct 2011 05:47:00 -0400</pubDate></item></channel></rss>
