<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkIHSXkzeyp7ImA9WhRbEUw.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851</id><updated>2012-02-01T07:35:38.783-08:00</updated><category term="TestFlight" /><category term="expand" /><category term="tools" /><category term="logs" /><category term="integrate" /><category term="provision" /><category term="IBAForms" /><category term="localization" /><category term="combine" /><category term="maven" /><category term="permgen" /><category term="migrate" /><category term="analytics" /><category term="jpg" /><category term="lion" /><category term="scjp" /><category term="war" /><category term="truncate" /><category term="DOT" /><category term="Jasypt" /><category term="smudge" /><category term="timer" /><category term="git" /><category term="classes" /><category term="divide" /><category term="drag" /><category term="video" /><category term="truststore" /><category term="redirect" /><category term="iOS" /><category term="scalable" /><category term="tomcat6w" /><category term="UINavigationController" /><category term="substitution" /><category term="parameterize" /><category term="gif" /><category term="i18n" /><category term="windows command prompt" /><category term="host" /><category term="java" /><category term="schedule" /><category term="field" /><category term="property" /><category term="left" /><category term="formatting" /><category term="flashbuilder" /><category term="huge" /><category term="memory" /><category term="dynamicField" /><category term="native" /><category term="SDK" /><category term="beta" /><category term="IconFinder" /><category term="iPhone" /><category term="build" /><category term="iphoto" /><category term="view" /><category term="practices" /><category term="Gist" /><category term="mac" /><category term="large" /><category term="design" /><category term="grab" /><category term="project" /><category term="step" /><category term="tree" /><category term="compiler" /><category term="svn" /><category term="google" /><category term="PowWeb" /><category term="JAVA_HOME" /><category term="support" /><category term="seethestats" /><category term="list" /><category term="best" /><category term="client" /><category term="ec2" /><category term="generic" /><category term="states" /><category term="restkit" /><category term="actors" /><category term="add" /><category term="locale" /><category term="flex3" /><category term="flexmojos" /><category term="github" /><category term="tomcat" /><category term="detect" /><category term="template" /><category term="hosted" /><category term="osx" /><category term="application" /><category term="stopwatch" /><category term="currency" /><category term="ResourceManager" /><category term="UiView" /><category term="concatenate" /><category term="ISO-8859-1" /><category term="drop" /><category term="internationalization" /><category term="cacerts" /><category term="shell" /><category term="deep" /><category term="compare" /><category term="gimp" /><category term="slave" /><category term="sheet" /><category term="transformer" /><category term="services" /><category term="image" /><category term="#" /><category term="inkscape" /><category term="embed" /><category term="repository" /><category term="Cloud" /><category term="chef" /><category term="current" /><category term="common" /><category term="unique" /><category term="revision" /><category term="login" /><category term="UITabBarController" /><category term="exist" /><category term="number" /><category term="compound" /><category term="constant" /><category term="area" /><category term="fluid" /><category term="pre-authentication" /><category term="implementation" /><category term="multicore" /><category term="size" /><category term="hudson" /><category term="version" /><category term="post" /><category term="target URL" /><category term="embeded" /><category term="create" /><category term="properties" /><category term="$" /><category term="builder" /><category term="skin" /><category term="ZBAR" /><category term="flex4" /><category term="UISlider" /><category term="server" /><category term="already" /><category term="cheatsheet" /><category term="webapp" /><category term="CouchApp" /><category term="parsley" /><category term="run" /><category term="replication" /><category term="master" /><category term="mobile" /><category term="jtable" /><category term="core data" /><category term="pom.xml" /><category term="common/lib" /><category term="nest" /><category term="mspaint" /><category term="l10n" /><category term="nightly" /><category term="jar" /><category term="encryption" /><category term="RSS" /><category term="css" /><category term="window" /><category term="spring" /><category term="lucidchart" /><category term="sun" /><category term="top" /><category term="link" /><category term="Tab Bar Controller" /><category term="eclipse" /><category term="Portecle" /><category term="collapse" /><category term="primary" /><category term="barcode" /><category term="generate" /><category term="multiple" /><category term="abstract" /><category term="xml" /><category term="jpeg" /><category term="security" /><category term="bindable" /><category term="spring security" /><category term="openssl" /><category term="utf-8" /><category term="language" /><category term="manage" /><category term="bash" /><category term="ZooKeeper" /><category term="move" /><category term="2.0.x" /><category term="flex" /><category term="scan" /><category term="filter" /><category term="CouchDB" /><category term="KeyStore Explorer" /><category term="split" /><category term="xcode" /><category term="escape" /><category term="html" /><category term="flowchart" /><category term="voice recognition" /><category term="dependency" /><category term="swf" /><category term="busy" /><category term="crop" /><category term="Navigation Controller" /><category term="screenshot" /><category term="syntax highlighter" /><category term="automation" /><category term="examples" /><category term="screencast" /><category term="comma separated values" /><category term="sandbox" /><category term="users" /><category term="sharp" /><category term="url" /><category term="1.5.0.M2" /><category term="width" /><category term="xcode4" /><category term="deep link" /><category term="joomla" /><category term="dynamic" /><category term="Solr Cloud" /><category term="imageio" /><category term="load" /><category term="tooltip" /><category term="graphviz" /><category term="cheat" /><category term="agvtool" /><category term="xcode3" /><category term="find" /><category term="1.5.0.M1" /><category term="java.home" /><category term="amazon" /><category term="browser" /><category term="wrap" /><category term="script" /><category term="unfuddle" /><category term="domain" /><category term="forms" /><category term="layout" /><category term="windows" /><category term="notch" /><category term="port" /><category term="cmd" /><category term="csv" /><category term="Android" /><category term="file" /><category term="mockups" /><category term="confluence" /><category term="RedLAser" /><category term="HTML5" /><category term="merge" /><category term="deploy" /><category term="ad hoc" /><category term="apache" /><category term="key" /><category term="ElasticSearch" /><category term="ant" /><category term="variable" /><category term="latin-1" /><category term="cygwin" /><category term="dock" /><category term="sso" /><category term="UIWindow" /><category term="convert" /><category term="umlgraph" /><category term="simon listens" /><category term="opscode" /><category term="tutorial" /><category term="concrete" /><category term="configure" /><category term="target" /><category term="DIH" /><category term="viewport" /><category term="origin" /><category term="internal" /><category term="website" /><category term="spring-flex" /><category term="blog" /><category term="keytool" /><category term="log4j" /><category term="bitbucket" /><category term="piwik" /><category term="blogger" /><category term="Data Import Handler" /><category term="runtime" /><category term="dates" /><category term="libiconv" /><category term="weebly" /><category term="jconsole" /><category term="Solr" /><category term="data" /><category term="password" /><category term="distribution" /><category term="utilities" /><category term="deep linking" /><title>Behemoth</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://pulkitsinghal.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>102</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Behemoth" /><feedburner:info uri="behemoth" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>Behemoth</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;C04HQHs5fSp7ImA9WhRWEks.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-6524953483243274706</id><published>2011-12-29T08:38:00.000-08:00</published><updated>2011-12-30T08:18:51.525-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-30T08:18:51.525-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="UITabBarController" /><category scheme="http://www.blogger.com/atom/ns#" term="UIWindow" /><category scheme="http://www.blogger.com/atom/ns#" term="UiView" /><category scheme="http://www.blogger.com/atom/ns#" term="Tab Bar Controller" /><category scheme="http://www.blogger.com/atom/ns#" term="window" /><category scheme="http://www.blogger.com/atom/ns#" term="view" /><title>Add Tab Bar Controller in a View instead of a Window</title><content type="html">Links used for research while experimenting:
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/1329560/adding-a-tabbarcontroller-as-the-subview-of-a-view" target="_blank"&gt;adding-a-tabbarcontroller-as-the-subview-of-a-view&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/1325288/uitabbarcontroller-view-position-and-size" target="_blank"&gt;uitabbarcontroller-view-position-and-size&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/6279733/uitabbarcontroller-in-ios5-throws-uiviewcontrollerhierarchyinconsistency-excepti" target="_blank"&gt;uitabbarcontroller-in-ios5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.iphonedevsdk.com/forum/iphone-sdk-development/66574-adding-tab-bar-controller-interface-builder.html" target="_blank"&gt;adding-tab-bar-controller-interface-builder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/6510239/uitabbarcontroller-inside-a-uiviewcontroller-viewdidappear-not-called" target="_blank"&gt;Sub-Views lifecycle methods are not called when UITabBarController inside a UIViewController&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;In iTunes search for "&lt;i&gt;WWDC 2011 Session Videos - HD&lt;/i&gt;" and go 27m:15sec into "&lt;i&gt;Session 102 - Implementing UIViewController Containment&lt;/i&gt;"&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-6524953483243274706?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-iq8BK8rhU2iT_43KD8fgzqmki0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-iq8BK8rhU2iT_43KD8fgzqmki0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-iq8BK8rhU2iT_43KD8fgzqmki0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-iq8BK8rhU2iT_43KD8fgzqmki0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/VgIYHIQszeM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/6524953483243274706/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/12/add-tab-bar-controller-in-view-instead.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/6524953483243274706?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/6524953483243274706?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/VgIYHIQszeM/add-tab-bar-controller-in-view-instead.html" title="Add Tab Bar Controller in a View instead of a Window" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/12/add-tab-bar-controller-in-view-instead.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYFQ3s_eSp7ImA9WhRXGUk.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-3450356183710041142</id><published>2011-12-26T16:49:00.000-08:00</published><updated>2011-12-26T16:51:52.541-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-26T16:51:52.541-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="actors" /><category scheme="http://www.blogger.com/atom/ns#" term="users" /><category scheme="http://www.blogger.com/atom/ns#" term="git" /><category scheme="http://www.blogger.com/atom/ns#" term="sheet" /><category scheme="http://www.blogger.com/atom/ns#" term="cheat" /><category scheme="http://www.blogger.com/atom/ns#" term="cheatsheet" /><title>Git Cheat Cheet</title><content type="html">&lt;img src="http://www.lucidchart.com/publicSegments/view/4ef91632-538c-48d7-9fef-4f330a7c1a28/image.png" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-3450356183710041142?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dJL8Eeq28ClZL2d-DOpXp24QRgI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dJL8Eeq28ClZL2d-DOpXp24QRgI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dJL8Eeq28ClZL2d-DOpXp24QRgI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dJL8Eeq28ClZL2d-DOpXp24QRgI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/lKgBUGsC_e0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/3450356183710041142/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/12/git-cheat-cheet.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/3450356183710041142?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/3450356183710041142?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/lKgBUGsC_e0/git-cheat-cheet.html" title="Git Cheat Cheet" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/12/git-cheat-cheet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8MQX88eSp7ImA9WhRXEEU.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-7886693955085252368</id><published>2011-12-16T17:51:00.000-08:00</published><updated>2011-12-16T17:54:40.171-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T17:54:40.171-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="seethestats" /><category scheme="http://www.blogger.com/atom/ns#" term="piwik" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="analytics" /><title>Use web analytics as a mirror for your users</title><content type="html">The question on you mind may be: &lt;i&gt;What do I possibly have to gain by exposing my website analytics to my users?&lt;/i&gt;&lt;br /&gt;
Well, if used simply &amp; sparingly, it offers you a chance to engage your users by letting them satiate their curiosity about where they belong in the overall community that frequents the given website.&lt;br /&gt;
&lt;br /&gt;
The following tools are polar opposites in how they decide to track the information that will be exposed but both offer the ability to expose the data and controls for which parts to expose:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.seethestats.com/"&gt;SeeTheStats&lt;/a&gt; - hooks into your Google Analytics account to collect the data and will let you expose it in a controlled manner.&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://piwik.org/"&gt;Piwik&lt;/a&gt; - runs locally on your webserver to collect real-time data and expose it in a controlled manner. You can check &lt;a target="_blank" href="http://piwik.org/hosting/"&gt;this link&lt;/a&gt; to find hosts that offer automated installation of Piwik on your webserver. In my experience &lt;a target="_blank" href="http://powweb.com"&gt;PowWeb&lt;/a&gt; is another host that does this well.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-7886693955085252368?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2-BJnMD6INrOjdJkjo16Oj-IMbE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2-BJnMD6INrOjdJkjo16Oj-IMbE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2-BJnMD6INrOjdJkjo16Oj-IMbE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2-BJnMD6INrOjdJkjo16Oj-IMbE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/qde3y41F4O4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/7886693955085252368/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/12/use-web-analytics-as-mirror-for-your.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/7886693955085252368?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/7886693955085252368?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/qde3y41F4O4/use-web-analytics-as-mirror-for-your.html" title="Use web analytics as a mirror for your users" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/12/use-web-analytics-as-mirror-for-your.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cCRn85cCp7ImA9WhRQGUs.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-8141259001092842733</id><published>2011-12-15T06:57:00.001-08:00</published><updated>2011-12-15T06:57:47.128-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-15T06:57:47.128-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bitbucket" /><category scheme="http://www.blogger.com/atom/ns#" term="port" /><category scheme="http://www.blogger.com/atom/ns#" term="git" /><category scheme="http://www.blogger.com/atom/ns#" term="unfuddle" /><category scheme="http://www.blogger.com/atom/ns#" term="repository" /><category scheme="http://www.blogger.com/atom/ns#" term="move" /><title>Move Git repository from Unfuddle to BitBucket</title><content type="html">&lt;script src="https://gist.github.com/1481376.js"&gt; &lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-8141259001092842733?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PjA0Bcl69VxPFuTqApyYXyzvXU0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PjA0Bcl69VxPFuTqApyYXyzvXU0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PjA0Bcl69VxPFuTqApyYXyzvXU0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PjA0Bcl69VxPFuTqApyYXyzvXU0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/AY9RJ7OkSBQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/8141259001092842733/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/12/move-git-repository-from-unfuddle-to.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/8141259001092842733?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/8141259001092842733?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/AY9RJ7OkSBQ/move-git-repository-from-unfuddle-to.html" title="Move Git repository from Unfuddle to BitBucket" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/12/move-git-repository-from-unfuddle-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQBR3w6fyp7ImA9WhRQFk8.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-1627524843465396654</id><published>2011-12-10T07:45:00.000-08:00</published><updated>2011-12-11T08:52:36.217-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-11T08:52:36.217-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="provision" /><category scheme="http://www.blogger.com/atom/ns#" term="opscode" /><category scheme="http://www.blogger.com/atom/ns#" term="create" /><category scheme="http://www.blogger.com/atom/ns#" term="hosted" /><category scheme="http://www.blogger.com/atom/ns#" term="automation" /><category scheme="http://www.blogger.com/atom/ns#" term="chef" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon" /><category scheme="http://www.blogger.com/atom/ns#" term="ec2" /><title>Provision &amp; Automate free Amazon EC2 instances with Hosted Chef</title><content type="html">&lt;ol&gt;&lt;li&gt;Sign-Up with Amazon via &lt;a target="_blank" href="http://aws.amazon.com/free/"&gt;this link&lt;/a&gt; and they will offer one year of usage (micro instance) to help you understand and evaluate EC2. Read their terms of usage carefully and make sure to only provision the free instances if you don't want to get dinged on costs due to ignorance or carelessness on your own part.&lt;/li&gt;
&lt;li&gt;Now the free instance image provided by Amazon happens to run &lt;i&gt;RHEL4&lt;/i&gt; but the out-of-the-box Chef-Client requires a higher &lt;a target="_blank" href="http://wiki.opscode.com/display/chef/Installing+Chef+Client+and+Chef+Solo"&gt;version&lt;/a&gt; of that OS! Luckily some, if not all, of the very same issues have already been &lt;a target="_blank" href="http://help.opscode.com/discussions/problems/991-unable-to-connect-via-ssh-for-bootstrap-of-chef-client-on-ec2-centos5-instance"&gt;tackled in a post on the opscode's help website&lt;/a&gt;. And &lt;a target="_blank" href="https://gist.github.com/1455699"&gt;here's a gist of my experience&lt;/a&gt; with it as well.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-1627524843465396654?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/K9zH3I_UM4rn06fLFtJwNqBnc_4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K9zH3I_UM4rn06fLFtJwNqBnc_4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/K9zH3I_UM4rn06fLFtJwNqBnc_4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K9zH3I_UM4rn06fLFtJwNqBnc_4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/d6WTdiCzWOc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/1627524843465396654/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/12/learn-to-use-chef-with-free-amazon-ec2.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/1627524843465396654?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/1627524843465396654?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/d6WTdiCzWOc/learn-to-use-chef-with-free-amazon-ec2.html" title="Provision &amp; Automate free Amazon EC2 instances with Hosted Chef" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/12/learn-to-use-chef-with-free-amazon-ec2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YHRnY8cCp7ImA9WhRQF0k.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-183727858239573232</id><published>2011-12-05T00:23:00.000-08:00</published><updated>2011-12-12T17:52:17.878-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-12T17:52:17.878-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="amazon" /><category scheme="http://www.blogger.com/atom/ns#" term="ec2" /><title>EC2 Bare Minimum</title><content type="html">&lt;ol&gt;&lt;li&gt;install ec2 tools&lt;br /&gt;
cd ~/.ec2&lt;br /&gt;
ssh -i /Users/XXX/.ec2/ec2.pem ec2-user@ec2-XXX.compute-1.amazonaws.com&lt;br /&gt;
sudo yum install screen (&lt;a target="_blank" href="http://mattiasgeniar.be/2008/06/04/screen-a-must-for-ssh/"&gt;why?&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;For moving data to &amp; from the EC2 instance, simply use scp which runs on top of ssh like so:&lt;script src="https://gist.github.com/1470015.js"&gt; &lt;/script&gt;&lt;/li&gt;
&lt;li&gt;A lot of images will flunk all ssh connection attempts! It seems like this has nothing to do with the permissions on the pem file that you use to connect to them or opening up port 22 by default in their security policies. They just don't work even after all that, all the attempts spit out:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;either, Permission denied (publickey,gssapi-keyex,gssapi-with-mic)&lt;/li&gt;
&lt;li&gt;or, Net::SSH::AuthenticationFailed&lt;/li&gt;
&lt;/ul&gt;So don't waste your time on them! Here's a small list of useless ones that you should avoid:&lt;ul&gt;&lt;li&gt;ami-31d41658, Red Hat Enterprise Linux 6.1, x86_64&lt;/li&gt;
&lt;li&gt;ami-8f4083e6, RHEL-5.6-Starter-EBS-x86_64-11-Hourly2&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-183727858239573232?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uMMxiU8Gp8r-ERYHkbRrA4OdZvo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uMMxiU8Gp8r-ERYHkbRrA4OdZvo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uMMxiU8Gp8r-ERYHkbRrA4OdZvo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uMMxiU8Gp8r-ERYHkbRrA4OdZvo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/MoTnh_POvic" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/183727858239573232/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/12/ec2-bare-minimum.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/183727858239573232?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/183727858239573232?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/MoTnh_POvic/ec2-bare-minimum.html" title="EC2 Bare Minimum" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/12/ec2-bare-minimum.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQESHozfip7ImA9WhRSE0w.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-518095216529742405</id><published>2011-11-14T11:07:00.000-08:00</published><updated>2011-11-14T15:45:09.486-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-14T15:45:09.486-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="syntax highlighter" /><category scheme="http://www.blogger.com/atom/ns#" term="github" /><category scheme="http://www.blogger.com/atom/ns#" term="Gist" /><category scheme="http://www.blogger.com/atom/ns#" term="embed" /><title>Ideas for improving GitHub's Gist</title><content type="html">Lets list and acknowledge some of the work that has already started happening around GitHub's Gist when it comes to using it for embedding code snippets in blogs:&lt;br /&gt;
&lt;ul id="one"&gt;&lt;li&gt;Loading the Gist through &lt;a href="http://www.markandey.com/2011/01/4-common-problems-of-embbeding-code-in.html" target="_blank"&gt;an iFrame to shorten page load times&lt;/a&gt;.&lt;ul&gt;&lt;li&gt;A nice side effect is the ability to get around any non-working Blogger templates like the Dynamic Template that was recently released but doesn't work with an embedded Gist (remark date: Nov. 14th 2011).&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;New Ideas:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Tell the script to provide line numbers.&lt;/li&gt;
&lt;li&gt;Allow a line-start/offset and line-end/length attribute for the embedded script so that users can have one large file and then simply talk about the chunks in sections. This will remove the need to break up the original large Gist into multiple individual Gists.&lt;/li&gt;
&lt;li&gt;Tell the script the array or range of line numbers to highlight.&lt;ul&gt;&lt;li&gt;The following Gist is an example of the code running on this blog page to perform basic highlighting:&lt;div id="foo"&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;Until all this happens, Syntax Highlighter will remain # 1!&lt;br /&gt;
&lt;script
  src="http://code.jquery.com/jquery-1.6.4.min.js"
  type="text/javascript"
  charset="utf-8"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script
  src="http://raw.github.com/iamnoah/writeCapture/master/writeCapture.js"
  type="text/javascript"
  charset="utf-8"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script
  src="http://raw.github.com/iamnoah/writeCapture/master/plugin/jquery.writeCapture.js"
  type="text/javascript"
  charset="utf-8"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script type="text/javascript"&gt;
  $(document).ready(
    function() {
      var $captured = $('#foo');
      $captured.writeCapture().html(
        '&lt;scrip'+'t src="https://gist.github.com/1365589.js"&gt; &lt;/s'+'cript&gt;',
        function() {
          $('#LC26, #LC27', $captured).css({'background-color': 'yellow',
                                            'color': 'green'});
        }
      );
    });
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-518095216529742405?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nzUmdmQrearJsZIuR6EzDrUoQjk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nzUmdmQrearJsZIuR6EzDrUoQjk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nzUmdmQrearJsZIuR6EzDrUoQjk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nzUmdmQrearJsZIuR6EzDrUoQjk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/2SzXQqj8Pc4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/518095216529742405/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/11/ideas-for-improving-githubs-gist.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/518095216529742405?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/518095216529742405?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/2SzXQqj8Pc4/ideas-for-improving-githubs-gist.html" title="Ideas for improving GitHub's Gist" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/11/ideas-for-improving-githubs-gist.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEHRX09eCp7ImA9WhRSEkQ.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-5735535375723234058</id><published>2011-11-12T07:03:00.000-08:00</published><updated>2011-11-14T10:50:34.360-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-14T10:50:34.360-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="simon listens" /><category scheme="http://www.blogger.com/atom/ns#" term="libiconv" /><category scheme="http://www.blogger.com/atom/ns#" term="mac" /><category scheme="http://www.blogger.com/atom/ns#" term="voice recognition" /><title>FAIL: Installing Simon Listens on Mac</title><content type="html">&lt;ol&gt;&lt;li&gt;Mac OS X 10.6.8 on MacBook Pro with an Intel Core&lt;/li&gt;
&lt;li&gt;Download and unzip Simon Listens, then:&lt;/li&gt;
&lt;pre class="brush: xml;first-line: 1;"&gt;cd simon-0.3.0
./build.sh
&lt;/pre&gt;&lt;li&gt;You will run into errors like kde and cmake are missing.&lt;/li&gt;
&lt;li&gt;Instructions for installing KDE on a mac (cmake is included) are &lt;a target="_blank" href="http://community.kde.org/Mac"&gt;available here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I chose to perform the &lt;a target="_blank" href="http://techbase.kde.org/Getting_Started/Build/Mac_OS_X/MacPorts"&gt;MacPorts based installation&lt;/a&gt;. The following command takes a long time to run.&lt;br /&gt;
&lt;pre class="brush: xml;first-line: 3;"&gt;sudo port -v install kdesdk4
&lt;/pre&gt;I waited an hour before I simply decided to leave the MacBook running overnight. So I don't know the total time it ended up taking.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;I was warned that macports in general is a bit out of date, so I decided to update that too.&lt;br /&gt;
&lt;pre class="brush: xml"&gt;sudo port selfupdate
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;I was also warned that some of the existing Macports installs may be outdated, so I fixed that as well. &lt;i&gt;Though I wonder if this is what caused the overall experiment to fail in the end?&lt;/i&gt;&lt;br /&gt;
&lt;pre class="brush: xml"&gt;sudo port upgrade outdated
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;I decided to run some extra/redundant commands in order to make sure that the kdesdk4 really did install its counterparts:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;sudo port -v install cmake
sudo port -v install qt4-mac
sudo port -v install kdelibs4
&lt;/pre&gt;All of them were already installed so I was satisfied with the sanity test.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;I pasted whatever I was &lt;a target="_blank" href="http://techbase.kde.org/Getting_Started/Build/Mac_OS_X/MacPorts#Configure_bash_scripts"&gt;instructed to&lt;/a&gt;:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd ~
mkdir bin
vi bin/findup
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;I decided to append-to/edit the .bash_profile instead of creating .profile file. And once again I pasted whatever I was &lt;a target="_blank" href="http://techbase.kde.org/Getting_Started/Build/Mac_OS_X/MacPorts#Configure_bash_scripts"&gt;told to&lt;/a&gt;:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;chmod 777 bin/findup
vi .bash_profile
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt; Performed all the steps leading up to the checkout as &lt;a target="_blank" href="http://techbase.kde.org/Getting_Started/Build/Mac_OS_X/MacPorts#Create_KDE_directories"&gt;instructed&lt;/a&gt; but did the checkout over a non-SSL (cleartext) channel:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;mkdir -p ~/Desktop/kde/build
mkdir -p ~/Desktop/kde/home
mkdir -p ~/Desktop/kde/inst
mkdir -p ~/Desktop/kde/src
mkdir -p ~/Desktop/kde/src/branches
mkdir -p ~/Desktop/kde/src/trunk
vi ~/kde/src/trunk/.my-setup
cd ~/kde/src/trunk/
env
svn co svn://svn.kde.org/home/kde/trunk/kdesupport
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Performed the actual build and created a directory that didn't exist but I had put-off creating because I thought perhaps the KDE build/installation process would create it:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd kdesupport
cmakekde
sudo chown -R $USER ~/Library/Preferences/KDE
mkdir ~/Library/Preferences/KDE
sudo chown -R $USER ~/Library/Preferences/KDE/
sudo launchctl load  -w /Library/LaunchDaemons/org.freedesktop.dbus-system.plist
launchctl load -w /Library/LaunchAgents/org.freedesktop.dbus-session.plist
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;This time the build for Simon Listens went much further but ultimately it failed!&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd simon-0.3.0
./build.sh
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;I lost the link but somewhere on the web it was suggested that the errors I saw in the build will happen when binary files have been built for a 32-bit on a 64-bit system! And the way to get around it was by passing some arguments to let Simon's build script skip this stuff. But I found way too many configure files and couldn't make heads or tails of which one to use and how to tell it do what I need to workaound the problem.&lt;br /&gt;
&lt;pre class="brush: xml"&gt;find ./ -name configure
&lt;6-7 results all in different nested directories&gt;
&lt;/pre&gt;&lt;pre class="brush: xml"&gt;cd simon-0.3.0
grep "enable-charconv" julius/julius/*
vi julius/julius/configure
./build.sh --enable-charconv=no
vi julius/julius/configure.in 
./build.sh 
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;The build error seemed to have the word iconv mentioned in a bunch of places so I decided to figure out which MacPorts install was part of the problem and remove them:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;port list | grep iconv
sudo port uninstall libiconv @1.14_0
sudo port uninstall libiconv @1.14_0+universal
&lt;/pre&gt;But then the one being used (libiconv @1.14_0+universal) couldn't actually be removed because there were dependencies present!&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;I also found out that that Mac actually ships with a 64-bit flavor of libiconv by default and I was able to locate the said files on my system:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;find /usr/lib -name libiconv*
/usr/lib/libiconv.2.4.0.dylib
/usr/lib/libiconv.2.dylib
/usr/lib/libiconv.dylib
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://blog.wwwjfy.net/2011/03/02/compile-vim-7-3-in-mac-os-x-10-6-6/"&gt;Found some clues&lt;/a&gt; on how to try out the Mac's system libiconv library as a fallback without uninstalling MacPorts' version of the lib ... but that too didn't help the Simon build work because now the Mac's system libiconv couldn't agree on version #s with some of the other MacPorts based libs ... so I reverted that trial change as well:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;mkdir ~/temp
sudo mv /opt/local/lib/lib
sudo mv /opt/local/lib/libiconv* ~/temp/
./build.sh 
sudo mv ~/temp/libiconv* /opt/local/lib/
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Finally I decided to remove all the clutter that had been placed on my system during this FAIL-ed attempt to the best of my abilities:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;sudo port uninstall kdesdk4 @4.7.3_0
sudo port uninstall cmake
sudo port uninstall --follow-dependents qt4-mac
sudo port uninstall --follow-dependents kdelibs4
cd ~
rm -rf kde/
rm -rf ~/Library/Preferences/KDE
vi /Library/LaunchDaemons/org.freedesktop.dbus-system.plist
launchctl list
launchctl list | grep dbus
launchctl remove org.freedesktop.dbus-session
launchctl list | grep dbus
cd ~
rm -rf bin/
vi .bash_profile
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-5735535375723234058?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RyPg8GmNpxNpXW4hIGZj35Yt5HM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RyPg8GmNpxNpXW4hIGZj35Yt5HM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RyPg8GmNpxNpXW4hIGZj35Yt5HM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RyPg8GmNpxNpXW4hIGZj35Yt5HM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/r8kcXN9SC10" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/5735535375723234058/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/11/fail-installing-simon-listens-on-mac.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/5735535375723234058?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/5735535375723234058?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/r8kcXN9SC10/fail-installing-simon-listens-on-mac.html" title="FAIL: Installing Simon Listens on Mac" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/11/fail-installing-simon-listens-on-mac.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYHQHY9fip7ImA9WhRUFU8.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-5194278293866663577</id><published>2011-11-02T11:45:00.000-07:00</published><updated>2012-01-25T13:32:11.866-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-25T13:32:11.866-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gimp" /><category scheme="http://www.blogger.com/atom/ns#" term="crop" /><category scheme="http://www.blogger.com/atom/ns#" term="image" /><category scheme="http://www.blogger.com/atom/ns#" term="grab" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="mac" /><category scheme="http://www.blogger.com/atom/ns#" term="iphoto" /><category scheme="http://www.blogger.com/atom/ns#" term="smudge" /><category scheme="http://www.blogger.com/atom/ns#" term="screenshot" /><title>Image Editing Toolset for Mac</title><content type="html">All of the following are free and available on the Mac:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Grab - Awesome tool for taking snapshots of on screen material.&lt;/li&gt;
&lt;li&gt;iPhoto - Decent~ish for cropping.&lt;/li&gt;
&lt;li&gt;Preview - Pretty good for cropping. You can follow the instructions given &lt;a target="_blank" href="http://www.techiecorner.com/1185/how-to-crop-image-in-mac-os-x/"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Gimp - Great for smudging out unwanted portions of existing images.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-5194278293866663577?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NXgYMqfZF8mMbkVV2BGPJ3kWYd0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NXgYMqfZF8mMbkVV2BGPJ3kWYd0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NXgYMqfZF8mMbkVV2BGPJ3kWYd0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NXgYMqfZF8mMbkVV2BGPJ3kWYd0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/UIfS9uabJc8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/5194278293866663577/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/11/image-editing-toolset-for-mac.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/5194278293866663577?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/5194278293866663577?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/UIfS9uabJc8/image-editing-toolset-for-mac.html" title="Image Editing Toolset for Mac" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/11/image-editing-toolset-for-mac.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYCSXc9cCp7ImA9WhRSFk8.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-4508554199235239367</id><published>2011-11-02T06:27:00.000-07:00</published><updated>2011-11-18T05:32:48.968-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-18T05:32:48.968-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="CouchDB" /><category scheme="http://www.blogger.com/atom/ns#" term="CouchApp" /><title>How to build a webapp with CouchApp and CouchDB</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;This is a chronicle of the additional work I had to do as I followed &lt;b&gt;Ed Parcell&lt;/b&gt;'s &lt;a href="http://blog.edparcell.com/using-jquery-and-couchdb-to-build-a-simple-we" target="_blank"&gt;&lt;i&gt;Tutorial: Using jQuery and CouchDB to build a simple AJAX web application&lt;/i&gt;&lt;/a&gt;. It is supposed to serve as a supplement.&lt;br /&gt;
&lt;br /&gt;
Ed's post covers the use of &lt;a href="https://github.com/couchapp/couchapp" target="_blank"&gt;&lt;b&gt;CouchApp&lt;/b&gt;&lt;/a&gt; as far as generating templates to work on is concerned. As a supplement, my post will leverage the &lt;a href="http://couchapp.org/page/evently-primer" target="_blank"&gt;Evently&lt;/a&gt; framework (already a part of the generated CouchApp &lt;i&gt;&lt;u&gt;0.8.1&lt;/u&gt;&lt;/i&gt;) to do the same exact thing.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;When asked to edit index.html for the first time in Ed's post, here is how the content will differ if you want to do things the Evently way:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;!DOCTYPE html&amp;gt;
  &amp;lt;html&amp;gt;

  &amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Address Book&amp;lt;/title&amp;gt;
    &amp;lt;link rel="stylesheet" href="style/main.css" type="text/css"&amp;gt;
  &amp;lt;/head&amp;gt;

  &amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Address Book&amp;lt;/h1&amp;gt;
    &amp;lt;div id="add"&amp;gt;&amp;lt;button type="button" id="add"&amp;gt;Add&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;div id="addressbook"&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;

  &amp;lt;script src="vendor/couchapp/loader.js"&amp;gt;&amp;lt;/script&amp;gt;

  &amp;lt;script type="text/javascript" charset="utf-8"&amp;gt;
    $.couch.app(function(app) {
      $("#addressbook").evently("addressbook", app);
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Lets take a moment to acknowledge all the differences:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Links to &lt;i&gt;json2.js&lt;/i&gt;, &lt;i&gt;jquery.js&lt;/i&gt; or &lt;i&gt;jquery.couch.js&lt;/i&gt; are not present in the &lt;i&gt;head&lt;/i&gt; section. This is now taken care of by &lt;i&gt;loader.js&lt;/i&gt; (&lt;a href="http://www.blogger.com/post-edit.g?blogID=7319157502989369851&amp;amp;postID=4508554199235239367&amp;amp;from=pencil#"&gt;view source +/-&lt;/a&gt;), which loads all of the required javascript files.&lt;br /&gt;
&lt;div id="loader_js" style="display: none;"&gt;&lt;pre class="brush: xml"&gt;function couchapp_load(scripts) {
  for (var i=0; i &amp;lt; scripts.length; i++) {
    document.write('&amp;lt;script src="'+scripts[i]+'"&amp;gt;&amp;lt;\/script&amp;gt;')
  };
};
couchapp_load([
  "/_utils/script/sha1.js",
  "/_utils/script/json2.js",
  "/_utils/script/jquery.js",
  "/_utils/script/jquery.couch.js",
  "vendor/couchapp/jquery.couch.app.js",
  "vendor/couchapp/jquery.couch.app.util.js",
  "vendor/couchapp/jquery.mustache.js",
  "vendor/couchapp/jquery.evently.js"
]);
&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;If you took note of the relative URLs that start with &lt;i&gt;_utils&lt;/i&gt; then you should realize that the JS files are being referenced from another application known as &lt;i&gt;Futon&lt;/i&gt; which serves as CouchDB's Admin Interface.&lt;/li&gt;
&lt;li&gt;Now this may cause some concerns about exposing Futon to your user populace!&lt;/li&gt;
&lt;li&gt;As a workaround you can always move such files to your own CouchApp, such as the AddressBook webapp that we are working on right now and then simply change these links.&lt;/li&gt;
&lt;li&gt;Based on what I read (somewhere on the web) if folks really want to then they can simply host their own Futon and point it to your CouchDB server! I admit that this is hearsay and I haven't really experimented with such a hack myself. But overall what I personally took away from all this ... is that removing Futon from your CouchDB is not really what secures it, rather setting up proper accounts so that login is required to perform non-read operations is what truly makes an instance secure.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;An additional &lt;i&gt;script&lt;/i&gt; section:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;$.couch.app(function(app) {
      $("#addressbook").evently("addressbook", app);
    });
&lt;/pre&gt;is used to wire-up the addressbook &lt;i&gt;div&lt;/i&gt; element with an evently widget (also named &lt;i&gt;addressbook&lt;/i&gt; but the names don't really have to match, its not a requirement) which we will be writing later in this tutorial.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;The Evently approach also mandates a rewrite of Ed's &lt;i&gt;refreshAddressbook&lt;/i&gt; function such that the html and javascript are placed in separate files and tied together via the use of the &lt;a href="http://github.com/janl/mustache.js" target="_blank"&gt;&lt;b&gt;Mustache&lt;/b&gt;&lt;/a&gt; template engine. So instead of injecting any more javascript into your index.html, follow these steps:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Navigate to the addressbook directory, which was generated by couchapp for you when you ran, in the past:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;couchapp generate app addressbook
cd addressbook
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Create an evently widget named addressbook by simply creating the appropriate directory structure:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;mkdir -p evently/addressbook/
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Create &lt;i&gt;_query.js&lt;/i&gt; file to hold the &lt;i&gt;view&lt;/i&gt; which should be loaded from CouchDB when the addressbook &lt;i&gt;div&lt;/i&gt; element is hooked-up with the addressbook &lt;i&gt;widget&lt;/i&gt; (refer to line # 19 in index.html source provided earlier):&lt;br /&gt;
&lt;pre class="brush: xml"&gt;function () {
  $.log('Inside evently/addressbook/_init/query.js');

  return {
    "view" : "phonenumbers",
  };
}&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Create &lt;i&gt;data.js&lt;/i&gt; file to process the data returned by CouchDB which will be available for the Mustache template engine's use:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;function(data) {
  $.log('Inside evently/addressbook/_init/data.js');
  $.log(data.rows);
  return {
    "addressbook" : data.rows
  };
}&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Create &lt;i&gt;mustache.html&lt;/i&gt; file to substitute the data and render the html directly into the addressbook &lt;i&gt;div&lt;/i&gt; element:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;{{#addressbook}}
&amp;lt;div class="address"&amp;gt;
  &amp;lt;span class="name"&amp;gt;{{key}}&amp;lt;/span&amp;gt;
  &amp;lt;span class="phonenumber"&amp;gt;{{value}}&amp;lt;/span&amp;gt;
  &amp;lt;a href="#edit" class="edit"&amp;gt;edit&amp;lt;/a&amp;gt;
  &amp;lt;a href="#delete" class="delete"&amp;gt;delete&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
{{/addressbook}}
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Uplaod the app:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;couchapp push&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Before we go any further let's test what we've written so far. You'll notice that I've thrown in logs and alerts into the javascript above. If all is well then we should see an alert pop up with the data being retrieved from the server. Also if you have debugging tools like Firebug or Web Inspector at your disposal, then you should be able to see the data printed out in the console.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Safari and Firefox on my mac work well and I hope that you too see a popup stating &lt;i&gt;[object Object]&lt;/i&gt; and your console output looks something like:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;Entering view callback in evently/addressbook/_init.js
jquery...util.js (line 3)
Object { total_rows=2, offset=0, rows=[2]}
jquery...util.js (line 3)
Exiting view callback in evently/addressbook/_init.js
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;B U T ... if you head over to your iPhone's safari browser and try the same thing, you may be in for a huge disappointment! Nothing will happen. And if you enable the &lt;i&gt;Debug Console&lt;/i&gt;, you'll see javascript errors stating that jQuery does not exist!&lt;br /&gt;
&lt;table border="0"&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href="http://2.bp.blogspot.com/-a3lfHC173F8/TrFkcWGtsyI/AAAAAAAAIIg/bdKKtL4w8NM/s1600/photo%2B1-1.PNG" imageanchor="1"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-a3lfHC173F8/TrFkcWGtsyI/AAAAAAAAIIg/bdKKtL4w8NM/s200/photo%2B1-1.PNG" width="134" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td&gt;&lt;a href="http://2.bp.blogspot.com/-q_vyBVVfpOU/TrFkp_N3yzI/AAAAAAAAIIs/y1bgiY5T85I/s1600/photo%2B2-1.PNG" imageanchor="2"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-q_vyBVVfpOU/TrFkp_N3yzI/AAAAAAAAIIs/y1bgiY5T85I/s200/photo%2B2-1.PNG" width="134" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;ul&gt;&lt;li&gt;If you run into this then based on the wisdom gleaned from &lt;a href="http://stackoverflow.com/questions/6836499/simple-couchdb-jquery-mobile-app-loads-list-fine-in-desktop-browsers-just-not" target="_blank"&gt;this post&lt;/a&gt; on stackoverflow, here's what you need to do:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Get all the supporting JS files listed under the _utils URL to be directly present in your own addressbook couchapp:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd vendor/couchapp/_attachments/
wget http://fermyon.iriscouch.com/_utils/script/jquery.couch.js
wget http://fermyon.iriscouch.com/_utils/script/sha1.js
wget http://fermyon.iriscouch.com/_utils/script/json2.js
wget http://fermyon.iriscouch.com/_utils/script/jquery.js
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Update &lt;i&gt;loader.js&lt;/i&gt; to serve the files out of your own addressbook couchapp:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;vi vendor/couchapp/_attachments/loader.js
&lt;/pre&gt;&lt;pre class="brush: xml"&gt;...
couchapp_load([
  "vendor/couchapp/sha1.js",
  "vendor/couchapp/json2.js",
  "vendor/couchapp/jquery.js",
  "vendor/couchapp/jquery.couch.js",
  "vendor/couchapp/jquery.couch.app.js",
  "vendor/couchapp/jquery.couch.app.util.js",
  "vendor/couchapp/jquery.mustache.js",
  "vendor/couchapp/jquery.evently.js"
]);
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;If things are still breaking then there is one other analysis &amp;amp; workaround for this dilemma &lt;a href="http://www.ladysign-apps.com/blog/code/javascript/jquery-does-not-load-3g-iphone-safari/" target="_blank"&gt;&lt;i&gt;presented here&lt;/i&gt;&lt;/a&gt; in a blog post by &lt;b&gt;Lee Boonstra&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;If you are still having issues then use the Safari on your Mac's iOS Simulator to browse the couchapp because it gives more detailed information in its &lt;i&gt;Debug Console&lt;/i&gt; than the actual browser on the iPhone. If you are still seeing something like the following image:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-F72pCQwO_b0/TrGve9omEeI/AAAAAAAAII4/4LSB-3DL-7k/s1600/photo%2B3-2.jpg" imageanchor="3"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-F72pCQwO_b0/TrGve9omEeI/AAAAAAAAII4/4LSB-3DL-7k/s200/photo%2B3-2.jpg" width="134" /&gt;&lt;/a&gt;&lt;/div&gt;Then you still haven't fixed the problem as described in the steps above so go back and make sure you follow all the instructions to get it resolved.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Now lets finish off editing  &lt;i&gt;_init.js&lt;/i&gt;:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;put code here...
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;mustache stuff&lt;/li&gt;
&lt;/ol&gt;&lt;script src="http://code.jquery.com/jquery-1.6.4.min.js" type="text/javascript"&gt;
jQuery.noConflict();
&lt;/script&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-4508554199235239367?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b4z87NzQf3rXzbF2lPXTZ4JPs00/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b4z87NzQf3rXzbF2lPXTZ4JPs00/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b4z87NzQf3rXzbF2lPXTZ4JPs00/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b4z87NzQf3rXzbF2lPXTZ4JPs00/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/31j_gV2fCiQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/4508554199235239367/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/11/how-to-build-webapp-with-couchapp-and.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/4508554199235239367?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/4508554199235239367?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/31j_gV2fCiQ/how-to-build-webapp-with-couchapp-and.html" title="How to build a webapp with CouchApp and CouchDB" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-a3lfHC173F8/TrFkcWGtsyI/AAAAAAAAIIg/bdKKtL4w8NM/s72-c/photo%2B1-1.PNG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/11/how-to-build-webapp-with-couchapp-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QGSXg-fyp7ImA9WhRTEEo.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-2283191412004295422</id><published>2011-10-31T08:12:00.000-07:00</published><updated>2011-10-31T09:42:08.657-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-31T09:42:08.657-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="drag" /><category scheme="http://www.blogger.com/atom/ns#" term="PowWeb" /><category scheme="http://www.blogger.com/atom/ns#" term="website" /><category scheme="http://www.blogger.com/atom/ns#" term="drop" /><category scheme="http://www.blogger.com/atom/ns#" term="weebly" /><category scheme="http://www.blogger.com/atom/ns#" term="builder" /><title>Hacking Weebly: PowWeb's Drag &amp; Drop Builder</title><content type="html">&lt;h4&gt;Background&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;a onclick="jQuery('#one').toggle();"&gt;What led to the Weebly hack-a-thon?&lt;/a&gt;&lt;br /&gt;
&lt;div id="one" style="display:none;"&gt;I'm a big fan of &lt;a href="https://powweb.com" target="_blank"&gt;PowWeb&lt;/a&gt; because of their unlimited bandwidth and storage plan which doesn't leave me guessing. Also the simplicity of additional software installation (powered by &lt;a target="_blank" href="https://www.simplescripts.com/"&gt;SimpleScripts&lt;/a&gt;) puts even the biggest Software-As-A-Service (SAAS) players in the market to shame.&lt;br /&gt;
When I was charged with hosting a website on PowWeb, I decided to give their wheel-of-fortune a big'ol whirl. In the beginning these were my top choices to try and build a website:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Joomla&lt;/li&gt;
&lt;li&gt;Drupal&lt;/li&gt;
&lt;li&gt;ocPortal&lt;/li&gt;
&lt;li&gt;Xoops&lt;/li&gt;
&lt;/ul&gt;With all four technologies at my disposal. I used each and every one of them with the goal of piecing together a simple &amp; attractive website. This was a huge failure on so many levels with each and every one of them and a four hour time sink into each technology that left me quite sad. In the end I bit the bullet and succumbed using &lt;u&gt;Weebly Drag &amp; Drop Builder&lt;/u&gt;.&lt;br /&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;a onclick="jQuery('#two').toggle();"&gt;What had kept me from using Weebly in the first place?&lt;/a&gt;&lt;br /&gt;
&lt;div id="two" style="display:none;"&gt;&lt;ul&gt;&lt;li&gt;Popups that kept asking me to pay-up for any drag &amp; drop component that was even remotely useful for building a meaningful website. For example: being able to embed a simple video.&lt;/li&gt;
&lt;li&gt;I thought that any of the free and fully-featured Content Management Systems (CMS) available on PowWeb would easily beat anything Weebly had to offer. This was not true.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;a onclick="jQuery('#three').toggle();"&gt;What keeps my &lt;u&gt;&lt;i&gt;love &amp; "ughhh"&lt;/i&gt;&lt;/u&gt; relationship with Weebly going?&lt;/a&gt;&lt;br /&gt;
&lt;div id="three" style="display:none;"&gt;&lt;ul&gt;&lt;li&gt;&lt;u&gt;&lt;i&gt;Love:&lt;/i&gt;&lt;/u&gt; The have a lot of great looking templates to offer. Really really nice stuff in my opinion when one is stating from scratch and couldn't even color inside the lines in a picture book with crayons to save one's life.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;i&gt;Ughhh:&lt;/i&gt;&lt;/u&gt; Only very few of the templates follow the basic-design principles like:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Provide a way for the user to clearly &amp; qucikly distinguish which page they are on.&lt;ul&gt;&lt;li&gt;Most of the templates had tab bars to navigate through the website but after clicking their was no indication of what was selected. There was no change in the text font, no change in the background color of the selected/clicked item of the navigation bar and there are no breadcrumbs anywhere.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Do not force the user to scroll vertically.&lt;ul&gt;&lt;li&gt;If there might not be any content that takes up the space, then what's the point of enforcing a fixed-height or min-height template?&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Don't add banner images/placeholders that cause unnecessary scrolling.&lt;ul&gt;&lt;li&gt;I could not understand why the templates wouldn't allow the banner placeholders to be removed or resize them if a thinner banner image was provided.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;i&gt;Ughhh:&lt;/i&gt;&lt;/u&gt; A prototype website cannot be built with the palm-open and finger-twiching-for-cash like-a-bellboy approach that their pop-ups have going.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;i&gt;Love:&lt;/i&gt;&lt;/u&gt; Someone in the Weebly camp understood that it takes time for any developer to truly get behind a technology via trial &amp; error PLUS convince all vested parties that it is worth forking over cash for ... so they threw in the "&lt;u&gt;Custom HTML&lt;/u&gt;" widget in the free goodies bag. This allows hackers to put together a presentable website and then perhaps if their is value in everyone being able to edit the content easily, you take away the hacks, pay for the service, and use the simple drag &amp; drop components that allow anyone to jump in and make edits without having the web-dev know how.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;Lets Hack!&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;a onclick="jQuery('#four').toggle();"&gt;How can images be replaced if the Weebly template does not allow it?&lt;/a&gt;&lt;br /&gt;
&lt;div id="four" style="display:none;"&gt;&lt;ul&gt;&lt;li&gt;Publish the Weebly website as-is and use the "View Source" option in your browser.&lt;/li&gt;
&lt;li&gt;Search for the image in the source and if it is directly embedded in the html, then you can jot down the "id" of the "img" element and change the "src" attribute via a javascript call placed in the "Custom HTML" element. You'll have to add it to your pages in the Weebly editor.&lt;/li&gt;
&lt;li&gt;If instead of the image, their is a placeholder element like a "div" in the html then jot down the "id" of that "div" element as it is probably being styled via one of the Weebly template's CSS files. Once you locate the CSS responsible, you will know which parts you want to override yourself via javascript and a "Custom HTML" widget in the Weebly editor. Here's an example:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&lt;script&gt;
document.getElementById('icon').style.background='transparent url(http://iconfinder.com/data/icons/your-icon.png) no-repeat center bottom';
document.getElementById('icon').style.left='999px';
&lt;/script&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;li&gt;&lt;a onclick="jQuery('#five').toggle();"&gt;How can expandable/collapsible (+/-) areas be added?&lt;/a&gt;&lt;br /&gt;
&lt;div id="five" style="display:none;"&gt;&lt;ul&gt;&lt;li&gt;Add a "&lt;i&gt;Custom HTML&lt;/i&gt;" widget to your page in the Weebly Editor. Add the following to load the &lt;i&gt;jQuery&lt;/i&gt; javascript library without conflicting with other libraries like &lt;i&gt;Prototype&lt;/i&gt; which the Weebly template may already be loading on its own:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&lt;script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"&gt;
jQuery.noConflict();
&lt;/script&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Place a div around the toggle-able section, give it an id, and hide it by default. Then use jQuery to show/hide the content when the user clicks on a button or text that you provide as the control.&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&lt;a onclick="jQuery('findMeAndToggleMePlease').toggle();"&gt;Click me to control show/hide.&lt;/a&gt;
&lt;div id="findMeAndToggleMePlease" style="display:none;"&gt;The div wrapped content will be shown/hidden at your whim.
&lt;/div&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"&gt;
jQuery.noConflict();
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-2283191412004295422?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5gQ5IiDtviIn-y4H8oE-kTFTf_0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5gQ5IiDtviIn-y4H8oE-kTFTf_0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5gQ5IiDtviIn-y4H8oE-kTFTf_0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5gQ5IiDtviIn-y4H8oE-kTFTf_0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/yIeHKKvFpmI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/2283191412004295422/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/10/hacking-weebly-powwebs-drag-drop.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/2283191412004295422?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/2283191412004295422?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/yIeHKKvFpmI/hacking-weebly-powwebs-drag-drop.html" title="Hacking Weebly: PowWeb's Drag &amp; Drop Builder" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>2</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/10/hacking-weebly-powwebs-drag-drop.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEDRn8yeCp7ImA9WhRTEEo.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-3691469451364917347</id><published>2011-10-20T11:51:00.000-07:00</published><updated>2011-10-31T08:07:57.190-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-31T08:07:57.190-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML5" /><category scheme="http://www.blogger.com/atom/ns#" term="native" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="iOS" /><title>HTML5 vs. Native Mobile Apps</title><content type="html">Technologies that are enabling HTML5 to either deploy to multiple mobile platforms or keep-up with the native look:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;PhoneGap&lt;/li&gt;
&lt;li&gt;Sencha Touch&lt;/li&gt;
&lt;li&gt;jqTouch&lt;/li&gt;
&lt;li&gt;jQuery Mobile&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;There is a minor issue in iOS that doesn't properly set the width when changing orientations with these viewport settings, but this will hopefully be fixed a a future release.&lt;/li&gt;
&lt;li&gt;It's not currently possible to deep link to an anchor (index.html#foo) on a page.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-3691469451364917347?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PVZR3LaBMeEenA2Mdx4dwW2gSkw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PVZR3LaBMeEenA2Mdx4dwW2gSkw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PVZR3LaBMeEenA2Mdx4dwW2gSkw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PVZR3LaBMeEenA2Mdx4dwW2gSkw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/1IesTuu5IyY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/3691469451364917347/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/10/html5-vs-native-mobile-apps.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/3691469451364917347?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/3691469451364917347?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/1IesTuu5IyY/html5-vs-native-mobile-apps.html" title="HTML5 vs. Native Mobile Apps" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/10/html5-vs-native-mobile-apps.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUNR3gzfCp7ImA9WhdaEEs.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-8639032247047084690</id><published>2011-10-17T12:38:00.000-07:00</published><updated>2011-10-19T14:38:16.684-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-19T14:38:16.684-07:00</app:edited><title>ElasticSearch and CouchDB: Match made in heaven?</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;In ElasticSearch (ES):&lt;br /&gt;
&lt;blockquote class=""&gt;&lt;i&gt;each indexed document is given a version number. This version number can be supplemented with an external value (for example, if maintained in a database). To enable this functionality, version_type should be set to external.&lt;/i&gt;&lt;/blockquote&gt;Sounds nice, primed for CouchDB, right? But:&lt;br /&gt;
&lt;blockquote class=""&gt;&lt;i&gt;The value provided must be a numeric, long value greater than 0, and less than around 9.2e+18.&lt;/i&gt;&lt;/blockquote&gt;The was CouchDB does versioning, it isn't numeric because it appends two numbers to create a sequence/version, for example:&lt;blockquote class=""&gt;&lt;i&gt;1-1234567890&lt;/i&gt;&lt;/blockquote&gt;So how is this handled in case of a CouchDB stream for ES?&lt;/li&gt;
&lt;li&gt;How does ES facilitate the generation of an "_id" based on the data in the incoming document?&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Does it allow to take the value of a field of that document? For example, there is a way to perform "_routing" via one of the incoming document's fields for distributed indexing across shards. So what about something for picking out the id?&lt;/li&gt;
&lt;li&gt;Does it allow to concatenate values of multiple fields of that document?&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Same question as the one above for CouchDB. &lt;/li&gt;
&lt;li&gt;TBD&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-8639032247047084690?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/m0MB0rauZBSYyVvfC5DtWSpF_CU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m0MB0rauZBSYyVvfC5DtWSpF_CU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/m0MB0rauZBSYyVvfC5DtWSpF_CU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m0MB0rauZBSYyVvfC5DtWSpF_CU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/dCTkDQaoW8o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/8639032247047084690/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/10/elasticsearch-and-couchdb-match-made-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/8639032247047084690?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/8639032247047084690?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/dCTkDQaoW8o/elasticsearch-and-couchdb-match-made-in.html" title="ElasticSearch and CouchDB: Match made in heaven?" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/10/elasticsearch-and-couchdb-match-made-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IBRXc5cCp7ImA9WhRTEko.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-9147667254886458156</id><published>2011-10-09T12:32:00.000-07:00</published><updated>2011-11-02T17:19:14.928-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-02T17:19:14.928-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ElasticSearch" /><category scheme="http://www.blogger.com/atom/ns#" term="Solr" /><category scheme="http://www.blogger.com/atom/ns#" term="scalable" /><category scheme="http://www.blogger.com/atom/ns#" term="compare" /><category scheme="http://www.blogger.com/atom/ns#" term="CouchDB" /><title>Scalability Madness</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;table border="1" style="text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;CouchDB&lt;/th&gt;   &lt;th&gt;CouchDB-Lucene&lt;/th&gt; &lt;th&gt;CouchIO / CouchOne / CouchBase&lt;/th&gt; &lt;th&gt;Solr&lt;/th&gt; &lt;th&gt;Elastic Search&lt;/th&gt; &lt;th&gt;MongoDB&lt;/th&gt; &lt;th&gt;&lt;a href="https://github.com/cloudant/bigcouch#readme" target="_blank"&gt;BigCouch&lt;/a&gt;&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Full-Text Search&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.slideshare.net/martin.rehfeld/couchdblucene" target="_blank"&gt;Yes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;&lt;a href="https://github.com/mikejs/photovoltaic" target="_blank"&gt;May Be with Photovoltaic&lt;/a&gt;&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Distribute-&lt;u&gt;&lt;i&gt;able&lt;/i&gt;&lt;/u&gt;&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Distribute-&lt;b&gt;&lt;u&gt;&lt;i&gt;ed&lt;/i&gt;&lt;/u&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Schema-less&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.elasticsearch.org/guide/reference/river/couchdb.html" target="_blank"&gt;Yes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Tools for Importing Data&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Comments&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;Does it go Toe to Toe against all the features of Lucene exposed by Solr?&lt;/td&gt; &lt;td&gt;&lt;a href="http://site.couchio.couchone.com/" target="_blank"&gt;best for HTML5 dev?&lt;/a&gt;&lt;/td&gt; &lt;td&gt;it is distributable but not distributed. SolrCloud has very few features&lt;/td&gt; &lt;td&gt;Compass got &lt;a href="http://www.kimchy.org/the_future_of_compass/" target="_blank"&gt;punted&lt;/a&gt; to invent Elastic Search.&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-9147667254886458156?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/icHlII2-1iStCWo22ZUu_-C6JX8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/icHlII2-1iStCWo22ZUu_-C6JX8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/icHlII2-1iStCWo22ZUu_-C6JX8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/icHlII2-1iStCWo22ZUu_-C6JX8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/4cggl4MBikw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/9147667254886458156/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/10/scalability-madness.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/9147667254886458156?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/9147667254886458156?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/4cggl4MBikw/scalability-madness.html" title="Scalability Madness" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/10/scalability-madness.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04HQn87eCp7ImA9WhdUGU0.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-8518015478098720717</id><published>2011-10-05T18:51:00.000-07:00</published><updated>2011-10-06T07:05:33.100-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-06T07:05:33.100-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="data" /><category scheme="http://www.blogger.com/atom/ns#" term="split" /><category scheme="http://www.blogger.com/atom/ns#" term="Solr" /><category scheme="http://www.blogger.com/atom/ns#" term="large" /><category scheme="http://www.blogger.com/atom/ns#" term="file" /><category scheme="http://www.blogger.com/atom/ns#" term="huge" /><category scheme="http://www.blogger.com/atom/ns#" term="xml" /><category scheme="http://www.blogger.com/atom/ns#" term="Data Import Handler" /><category scheme="http://www.blogger.com/atom/ns#" term="divide" /><category scheme="http://www.blogger.com/atom/ns#" term="DIH" /><title>Splitting up large XML data files for use with DIH in Solr</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;It is ridiculously beneficial to split up XML files if you will be using Solr's Data Import Handler (DIH) to process the data. I personally saw an improvement from a speed of 166 entries/minute to 30860 entries/minute after splitting up all the large XML data files into an individual file for every entity that is to become a lucene document in Solr.&lt;br /&gt;
&lt;br /&gt;
It was only on a whim but the script that allowed me to experiment with this and yield the desired results was found &lt;a href="http://www.computing.net/answers/unix/split-large-xml-file/8495.html" target="blank"&gt;here&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;awk '/&amp;lt;item&amp;gt;/{close("row"count".xml");count++}count{f="row"count".xml";print $0 &amp;gt; f}' *.xml&lt;/blockquote&gt;&lt;br /&gt;
So if your file looks something like:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&lt;items&gt;
  &lt;item&gt;
    &lt;title&gt;Item 1&lt;/title&gt;
    &lt;description&gt;Description 1&lt;/description&gt;
    ...
  &lt;/item&gt;
  ...
  &lt;item&gt;
    &lt;title&gt;Item 20000&lt;/title&gt;
    &lt;description&gt;Description 20000&lt;/description&gt;
    ...
  &lt;/item&gt;
&lt;/items&gt;
&lt;/pre&gt;&lt;br /&gt;
Then all the items from 1 to 19,999 will be divided up by this script into idividual files named row1.xml, row2.xml ... row19999.xml and look like:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&lt;item&gt;
  &lt;title&gt;Item N&lt;/title&gt;
  &lt;description&gt;Description N&lt;/description&gt;
  ...
&lt;/item&gt;
&lt;/pre&gt;But the last (20,000-th) item will have a trailing tag:&lt;br /&gt;
&lt;blockquote&gt;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;Item 20000&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;description&amp;gt;Description 20000&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/items&amp;gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br /&gt;
If you have processed 10 files, each with 20000 entries using the splitter command mentioned above ... then basically every 20000, 20000*2 ... 20000*10 numbered file will need to have the trailing tag deleted from it. To that end, the following script can be edited by providing the # of original files in the while loop's comparison statement:&lt;br /&gt;
&lt;pre class="brush: perl"&gt;#!/bin/sh
if [ $# -eq 0 ]
then
  echo "Error - Number missing form command line argument"
  echo "Syntax : $0 number"
  echo " Use to print multiplication table for given number"
exit 1
fi
n=$1
i=1
while [ $i -le 10 ]
do
  echo "sed -ibak '/items&gt;/d' row`expr $i \* $n`.xml"
  sed -ibak '/items&gt;/d' row`expr $i \* $n`.xml
  i=`expr $i + 1`
done
&lt;/pre&gt;And then running the script by passing it the # of the last entry (20000-th):&lt;br /&gt;
&lt;pre class="brush: perl"&gt;./sanitize.sh 20000
sed -ibak '/items&gt;/d' row20000.xml
sed -ibak '/items&gt;/d' row40000.xml
sed -ibak '/items&gt;/d' row60000.xml
sed -ibak '/items&gt;/d' row80000.xml
sed -ibak '/items&gt;/d' row100000.xml
sed -ibak '/items&gt;/d' row120000.xml
sed -ibak '/items&gt;/d' row140000.xml
sed -ibak '/items&gt;/d' row160000.xml
sed -ibak '/items&gt;/d' row180000.xml
sed -ibak '/items&gt;/d' row200000.xml
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-8518015478098720717?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3sD5X2aESDeguPm9VKcqxZcivtw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3sD5X2aESDeguPm9VKcqxZcivtw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3sD5X2aESDeguPm9VKcqxZcivtw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3sD5X2aESDeguPm9VKcqxZcivtw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/7bpjyl87KMM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/8518015478098720717/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/10/splitting-up-large-xml-data-files-for.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/8518015478098720717?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/8518015478098720717?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/7bpjyl87KMM/splitting-up-large-xml-data-files-for.html" title="Splitting up large XML data files for use with DIH in Solr" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/10/splitting-up-large-xml-data-files-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQNQX04fip7ImA9WhdUGU0.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-6728413490271880142</id><published>2011-10-05T18:35:00.000-07:00</published><updated>2011-10-06T06:39:50.336-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-06T06:39:50.336-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dynamic" /><category scheme="http://www.blogger.com/atom/ns#" term="Solr" /><category scheme="http://www.blogger.com/atom/ns#" term="xml" /><category scheme="http://www.blogger.com/atom/ns#" term="Data Import Handler" /><category scheme="http://www.blogger.com/atom/ns#" term="DIH" /><category scheme="http://www.blogger.com/atom/ns#" term="field" /><category scheme="http://www.blogger.com/atom/ns#" term="dynamicField" /><title>Import Dynamic Fields from XML into Solr via DIH</title><content type="html">Given an XML file that needs to be imported into Solr, you may often run into some uncommon data values that would be:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;best grouped together under the banner of some dynamic field defined in schema.xml file,&lt;/li&gt;
&lt;li&gt;with their mapping left up to the discretion of an admin tweaking the data-config.xml file, just before running DIH.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Off the cuff, one may be at a loss on how exactly to accomplish this ... and in doubt if it can even be done! You've seen this done for databases with Data Import Handler (DIH) but not with the XPath handler, or URL datasource, or File datasource for XML.&lt;br /&gt;
&lt;br /&gt;
Well it can be done and here's an example:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Lets say your XML file looks something like this:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&lt;items&gt;
  &lt;item&gt;
    &lt;title&gt;hammer&lt;/title&gt;
    &lt;description&gt;tough and durable&lt;/description&gt;
    &lt;disposition&gt;heavy&lt;/disposition&gt;
    &lt;width&gt;2 inches&lt;/width&gt;
  &lt;/item&gt;
  &lt;item&gt;
    &lt;title&gt;nail&lt;/title&gt;
    &lt;description&gt;sharp and thin&lt;/description&gt;
    &lt;dangerlevel&gt;hazard&lt;/dangerLevel&gt;
    &lt;height&gt;1 inch&lt;/height&gt;
  &lt;/item&gt;
&lt;/items&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Now &lt;b&gt;disposition, width, dangerLevel, height&lt;/b&gt; are pieces of data that you may not be able to plan ahead for, in your schema.xml file. So instead it makes sense to leave some wiggle room by defining somewhat predictable dynamic fields like so:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&lt;dynamicfield name="*_dimensions"  type="string"  indexed="true" stored="true"&gt;&lt;/dynamicField&gt;
&lt;dynamicfield name="*_misc"        type="text"    indexed="true" stored="true"&gt;&lt;/dynamicField&gt;
&lt;/pre&gt;Keep in mind that you have some flexibility and responsibility here in terms of choosing the &lt;b&gt;type&lt;/b&gt; of the dynamic field ahead of time.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Now when your customers or customer-facing-admins who are handling the data-import.xml file and will be looking to kick-off DIH against an XML file that they know best ... it will be quite an easy for them to come up with something like the following on the spot:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&lt;field column="disposition_misc"    xpath="/items/item/disposition"&gt;&lt;/field&gt;
&lt;field column="dangerLevel_misc"    xpath="/items/item/dangerLevel"&gt;&lt;/field&gt;
&lt;field column="height_dimensions"   xpath="/items/item/height"&gt;&lt;/field&gt;
&lt;field column="width_dimensions"    xpath="/items/item/width"&gt;&lt;/field&gt;
&lt;/pre&gt;and still have an agreed upon well-oiled working index at the end of the day.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-6728413490271880142?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-2D0YhnTtliiilJXzptgHof2QBA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-2D0YhnTtliiilJXzptgHof2QBA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-2D0YhnTtliiilJXzptgHof2QBA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-2D0YhnTtliiilJXzptgHof2QBA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/bNT4E72Qaas" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/6728413490271880142/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/10/import-dynamic-fields-from-xml-into.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/6728413490271880142?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/6728413490271880142?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/bNT4E72Qaas/import-dynamic-fields-from-xml-into.html" title="Import Dynamic Fields from XML into Solr via DIH" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/10/import-dynamic-fields-from-xml-into.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEENRXk8fSp7ImA9WhdUFkU.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-805029840288097193</id><published>2011-10-03T15:56:00.000-07:00</published><updated>2011-10-03T15:58:14.775-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-03T15:58:14.775-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="joomla" /><category scheme="http://www.blogger.com/atom/ns#" term="embed" /><title>Embedding Videos in Joomla 1.7</title><content type="html">&lt;ol&gt;&lt;li&gt;Log in as the administrator&lt;/li&gt;
&lt;li&gt;Hover over the &lt;b&gt;Extensions&lt;/b&gt; drop-down and click on &lt;b&gt;Extension Manager&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;In the &lt;b&gt;Install from URL&lt;/b&gt; section, paste the URL pointing to a zip file for the &lt;b&gt;AllVideos&lt;/b&gt; Joomla plugin.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;http://joomlaworks.googlecode.com/files/plg_jw_allvideos-v4.0_j1.5-1.7.zip&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Once you see a notification on screen for a successful installation, click on the &lt;b&gt;Manage&lt;/b&gt; tab&lt;/li&gt;
&lt;li&gt;Locate the row that lists the &lt;b&gt;AllVideos&lt;/b&gt; plugin and click on the red status icon in order to toggle it to enabled.&lt;/li&gt;
&lt;li&gt;Hover over the &lt;b&gt;Extensions&lt;/b&gt; drop-down and click on &lt;b&gt;Plugin Manager&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Locate the row that lists the &lt;b&gt;AllVideos&lt;/b&gt; plugin and click on the title of the plugin itself.&lt;/li&gt;
&lt;li&gt;Configure the plugin based on your needs.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-805029840288097193?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kGj_ynxquMM-ZDmTOXMXsFGxuJg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kGj_ynxquMM-ZDmTOXMXsFGxuJg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kGj_ynxquMM-ZDmTOXMXsFGxuJg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kGj_ynxquMM-ZDmTOXMXsFGxuJg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/-_xnn8TW5XM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/805029840288097193/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/10/embedding-videos-in-joomla-17.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/805029840288097193?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/805029840288097193?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/-_xnn8TW5XM/embedding-videos-in-joomla-17.html" title="Embedding Videos in Joomla 1.7" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/10/embedding-videos-in-joomla-17.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4GQX84eSp7ImA9WhRTF0s.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-3498876018733947459</id><published>2011-10-02T14:35:00.000-07:00</published><updated>2011-11-08T06:02:00.131-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-08T06:02:00.131-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="utilities" /><category scheme="http://www.blogger.com/atom/ns#" term="screencast" /><category scheme="http://www.blogger.com/atom/ns#" term="mac" /><title>Screencast Toolset</title><content type="html">Best toolset that I've found for working on the Mac with screencasts:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;b&gt;&lt;a target="_blank" href="http://www.techsmith.com/Jing"&gt;Jing&lt;/a&gt;&lt;/b&gt; for recording.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a target="_blank" href="http://simplemoviex.com/SimpleMovieX/index.var"&gt;SimpleMovieX&lt;/a&gt;&lt;/b&gt; for merging.&lt;ol&gt;&lt;li&gt;The videos merged using this tool will not work as intended on Vimeo or YouTube. They will stop at the very first location that was stitched together.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://www.apple.com/finalcutpro/trial/"&gt;&lt;b&gt;Final Cut Pro&lt;/b&gt;&lt;/a&gt; for merging.&lt;ol&gt;&lt;li&gt;The videos merged using this tool can be seamlessly uploaded to top providers like YouTube and everything in the video works as intended. But the content may show up as Public by default! So make sure to secure your content afterwards.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-3498876018733947459?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/S3WPNm6h3zv6xKaSBu0Id31uvfs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/S3WPNm6h3zv6xKaSBu0Id31uvfs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/S3WPNm6h3zv6xKaSBu0Id31uvfs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/S3WPNm6h3zv6xKaSBu0Id31uvfs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/wSgWdXKdOj4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/3498876018733947459/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/10/screencast-toolset.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/3498876018733947459?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/3498876018733947459?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/wSgWdXKdOj4/screencast-toolset.html" title="Screencast Toolset" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/10/screencast-toolset.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYERns6eSp7ImA9WhRSEkU.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-6855668594774183121</id><published>2011-09-19T16:47:00.000-07:00</published><updated>2011-11-14T06:48:27.511-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-14T06:48:27.511-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="primary" /><category scheme="http://www.blogger.com/atom/ns#" term="Solr" /><category scheme="http://www.blogger.com/atom/ns#" term="compound" /><category scheme="http://www.blogger.com/atom/ns#" term="unique" /><category scheme="http://www.blogger.com/atom/ns#" term="key" /><category scheme="http://www.blogger.com/atom/ns#" term="Data Import Handler" /><category scheme="http://www.blogger.com/atom/ns#" term="DIH" /><category scheme="http://www.blogger.com/atom/ns#" term="concatenate" /><title>Compound primary key for Solr's Data Import Handler (DIH)</title><content type="html">If you ever find yourself with a datasource where you need to concatenate multiple columns or values to form the primary or unique key ... but hasn't been already done for you ... then you can do so on-the-fly with Solr's DIH using the TemplateTransformer like so:&lt;br /&gt;
&lt;script src="https://gist.github.com/1364013.js"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-6855668594774183121?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/S0p1fY7XUvtRXbDtY3skt3Ndo1Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/S0p1fY7XUvtRXbDtY3skt3Ndo1Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/S0p1fY7XUvtRXbDtY3skt3Ndo1Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/S0p1fY7XUvtRXbDtY3skt3Ndo1Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/p5cizF7_Dks" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/6855668594774183121/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/09/compound-primary-key-for-solrs-data.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/6855668594774183121?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/6855668594774183121?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/p5cizF7_Dks/compound-primary-key-for-solrs-data.html" title="Compound primary key for Solr's Data Import Handler (DIH)" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/09/compound-primary-key-for-solrs-data.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQEQ30_eSp7ImA9WhRSEkU.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-115215115757999867</id><published>2011-09-14T07:56:00.000-07:00</published><updated>2011-11-14T06:51:42.341-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-14T06:51:42.341-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="transformer" /><category scheme="http://www.blogger.com/atom/ns#" term="Solr" /><category scheme="http://www.blogger.com/atom/ns#" term="RSS" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon" /><category scheme="http://www.blogger.com/atom/ns#" term="Data Import Handler" /><category scheme="http://www.blogger.com/atom/ns#" term="DIH" /><title>Import data from Amazon RSS feeds into Solr</title><content type="html">&lt;ol&gt;&lt;li&gt;For this example, lets use the RSS feed for new products that have been tagged as blu-ray, here's the URL:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.amazon.com/rss/tag/blu-ray/new/ref=tag_rsh_hl_ersn"&gt;http://www.amazon.com/rss/tag/blu-ray/new/ref=tag_rsh_hl_ersn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;If you are using Firefox, you may not get a chance to view the feed in its raw xml format as the browser tends to actually interpret and present most of the RSS feed in a user-friendly fashion. This is not very desirable for developers or adminstrators. In order to view the raw content of the feed, you can simply view the same URL via Feed-Proxy: &lt;a target="_blank" href="http://persistent.info/cgi-bin/feed-proxy?url=http%3A%2F%2Fwww.amazon.com%2Frss%2Ftag%2Fblu-ray%2Fnew%2Fref%3Dtag_rsh_hl_ersn"&gt;http://persistent.info/cgi-bin/feed-proxy?url=http%3A%2F%2Fwww.amazon.com%2Frss%2Ftag%2Fblu-ray%2Fnew%2Fref%3Dtag_rsh_hl_ersn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Refer to the following links for info on how to get the RSS feeds you want from Amazon:&lt;ul&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.amazon.com/gp/help/customer/display.html?nodeId=200202840"&gt;http://www.amazon.com/gp/help/customer/display.html?nodeId=200202840&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://www.amazon.com/gp/tagging/rss-help.html"&gt;http://www.amazon.com/gp/tagging/rss-help.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Before we import any data into Solr, lets take a moment to understand the format of the data from the RSS feed. Here's a sample item from the RSS feed:&lt;br /&gt;
&lt;script src="https://gist.github.com/1364074.js"&gt; &lt;/script&gt;&lt;ol&gt;&lt;li&gt;There are 5 basic fields per item: &lt;b&gt;title&lt;/b&gt;, &lt;b&gt;guid&lt;/b&gt;, &lt;b&gt;link&lt;/b&gt;, &lt;b&gt;pubdate&lt;/b&gt; and &lt;b&gt;description&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;If we take a closer look at the &lt;i&gt;HTML CHUNK&lt;/i&gt; inside &lt;b&gt;description&lt;/b&gt;, we will find more information like:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;the &lt;b&gt;image URL&lt;/b&gt;&lt;br /&gt;
&lt;script src="https://gist.github.com/1364081.js"&gt; &lt;/script&gt;&lt;/li&gt;
&lt;li&gt;the &lt;b&gt;price&lt;/b&gt; for a new item&lt;br /&gt;
&lt;pre class="brush: xml"&gt;Buy new: &lt;span class="tgProductPrice"&gt;$10.99&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;the &lt;b&gt;price of used items&lt;/b&gt; starting from a lowerbound:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&lt;span class="tgProductUsedPrice"&gt;
  &lt;a href="..." id="tag_rsn_rs_eofr_used"&gt;22 used and new&lt;/a&gt;
  from &lt;span class="tgProductPrice"&gt;$6.35&lt;/span&gt;
&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;In fact, the HTML Chunk is like a complete webpage, it even has a separate description section inside of itself!&lt;pre class="brush: xml"&gt;&lt;div class="description"&gt;...&lt;/div&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;All this is rather messy and unpredictable (sometimes its there, sometimes its not, sometimes its a class, sometimes its an id, sometimes there are duplicates) but we must try to make the best of it.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Having understood the complexities of our source of data, we are now ready to configure the Data Import Handler (DIH) for Solr.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Navigate to the directory which has the out-of-the-box sample core for configuring RSS feeds. And edit the rss-data-config.xml file for importing data to look as follows:&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;cd /trunk/solr/example/example-DIH/solr/rss
vi conf/rss-data-config.xml
&lt;/pre&gt;&lt;pre class="brush: xml"&gt;&lt;dataconfig&gt;
 &lt;datasource type="URLDataSource"&gt;&lt;/dataSource&gt;
 &lt;document&gt;
  &lt;entity name="amazon"
          pk="link"
          url="http://www.amazon.com/rss/tag/blu-ray/new/ref=tag_rsh_hl_ersn"
          processor="XPathEntityProcessor"
          forEach="/rss/channel | /rss/channel/item"
          transformer="DateFormatTransformer"&gt;
   &lt;field column="title"       xpath="/rss/channel/item/title"&gt;&lt;/field&gt;
   &lt;field column="link"        xpath="/rss/channel/item/link"&gt;&lt;/field&gt;
   &lt;field column="description" xpath="/rss/channel/item/description"&gt;&lt;/field&gt;
  &lt;/entity&gt;
 &lt;/document&gt;
&lt;/dataConfig&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;In order to grab and add the &lt;b&gt;price&lt;/b&gt; from the &lt;b&gt;description&lt;/b&gt;:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;add the &lt;b&gt;price&lt;/b&gt; as a field to the schema.xml file&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd /trunk/solr/example/example-DIH/solr/rss
vi conf/schema.xml
&lt;/pre&gt;&lt;pre class="brush: xml"&gt;&lt;field name="link" type="string" indexed="true" stored="true"&gt;&lt;/field&gt;
&lt;field name="description" type="html" indexed="true" stored="true"&gt;&lt;/field&gt;
&lt;field name="price" type="sdouble" indexed="true" stored="true"&gt;&lt;/field&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;add the RegexTransformer to the chain of transformers in the rss-data-config.xml file&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;cd /trunk/solr/example/example-DIH/solr/rss
vi conf/rss-data-config.xml
&lt;/pre&gt;&lt;pre class="brush: xml"&gt;&lt;entity transformer="RegexTransformer,DateFormatTransformer"&gt;
   ...
&lt;/entity&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;add the regex to find and extract the &lt;b&gt;price&lt;/b&gt;&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;cd /trunk/solr/example/example-DIH/solr/rss
vi conf/rss-data-config.xml
&lt;/pre&gt;&lt;pre class="brush: xml"&gt;&lt;entity&gt;
   ...
   &lt;field column="price"
           regex=".*\$(\d*.\d*)"
   sourceColName="description"&gt;
   &lt;/field&gt;
&lt;/entity&gt;
&lt;/pre&gt;Please keep in mind that this is &lt;i&gt;NOT&lt;/i&gt; the best regex that you can use. This one simply grabs the last set of digits with a dollar sign in front of them in the HTML, so it may grab the used price instead of the new price! Feel free to come up with a better regex for yourself.&lt;/li&gt;
&lt;li&gt;If there are any items where the regex is incapable of pulling the price due to malformed HTML or any other reason, you can choose to either skip those items and not add them to Solr. OR you can introduce your own dummy price for them. Here's how you may do so:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;add the use of the ScriptTransformer function you'll define into the chain of transformers in the rss-data-config.xml file&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd /trunk/solr/example/example-DIH/solr/rss
vi conf/rss-data-config.xml
&lt;/pre&gt;&lt;pre class="brush: xml"&gt;&lt;entity transformer="RegexTransformer,DateFormatTransformer,script:skipRow"&gt;
   ...
&lt;/entity&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;add the following script to rss-data-config.xml file if you want to skip the items where a price wasn't available or couldn't be deduced&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;cd /trunk/solr/example/example-DIH/solr/rss
vi conf/rss-data-config.xml
&lt;/pre&gt;&lt;pre class="brush: xml"&gt;&lt;datasource&gt;&lt;/dataSource&gt;
&lt;script&gt;
        &lt;![CDATA[
        function skipRow(row) {
            var price = row.get( 'price' );
            if ( price == null || price == '' ) {
                row.put( '$skipRow', 'true' );
            }
            return row;
        }
        ]]&gt;
&lt;/script&gt;
&lt;document&gt;
...
&lt;/document&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;add the following script to rss-data-config.xml file if you simply want to inject a dummy price&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;cd /trunk/solr/example/example-DIH/solr/rss
vi conf/rss-data-config.xml
&lt;/pre&gt;&lt;pre class="brush: xml"&gt;&lt;datasource&gt;&lt;/dataSource&gt;
&lt;script&gt;
        &lt;![CDATA[
        function skipRow(row) {
            var price = row.get( 'price' );
            if ( price == null || price == '' ) {
                row.put ('price',66.60);
            }
            return row;
        }
        ]]&gt;
&lt;/script&gt;
&lt;document&gt;
...
&lt;/document&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ol&gt;&lt;li&gt;The following can be added to pull out the &lt;b&gt;image URL&lt;/b&gt;:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&lt;entity&gt;
   ...
   &lt;field column="imageUrl"
          regex=".*?img src=&amp;quot;(.*?)&amp;quot;.*"
          sourceColName="description"&gt;
   &lt;/field&gt;
&lt;/entity&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;The following can be added to pull out the &lt;b&gt;date&lt;/b&gt; (&lt;a target="_blank" href="http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html"&gt;SimpleDateFormat&lt;/a&gt; was used as a reference to devise a format string to parse the incoming dates from the feed such as &lt;i&gt;Mon, 12 Sep 2011 21:14:23 GMT&lt;/i&gt;):&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&lt;entity&gt;
   ...
   &lt;field column="date"
          xpath="/rss/channel/item/pubDate"
          dateTimeFormat="EEE, dd MMM yyyy HH:mm:ss z"&gt;
   &lt;/field&gt;
&lt;/entity&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Start the Solr server:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd /trunk/solr/example
java -Dsolr.solr.home="./example-DIH/solr/" -jar start.jar
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Navigate to the following URL&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;http://localhost:8983/solr/rss/admin/dataimport.jsp?handler=/dataimport
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Click the &lt;b&gt;Full Import with Cleaning&lt;/b&gt; button to import data from Amazon RSS feed into Solr.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;u&gt;Junk / Errata&lt;/u&gt;&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;url="http://www.amazon.com/rss/tag/blu-ray/new/ref=tag_rsh_hl_ersn"
regex=".*Buy new.*span.class..tgProductPrice...(\d*.\d*)"
stripHTML="true"
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-115215115757999867?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bcPF_fITVRD2BkurAjBr9y1_wPo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bcPF_fITVRD2BkurAjBr9y1_wPo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bcPF_fITVRD2BkurAjBr9y1_wPo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bcPF_fITVRD2BkurAjBr9y1_wPo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/meitgxbGu3A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/115215115757999867/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/09/import-data-from-amazon-rss-feeds-into.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/115215115757999867?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/115215115757999867?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/meitgxbGu3A/import-data-from-amazon-rss-feeds-into.html" title="Import data from Amazon RSS feeds into Solr" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>3</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/09/import-data-from-amazon-rss-feeds-into.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4DRnY6eyp7ImA9WhdWFkU.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-1055435900234129152</id><published>2011-09-10T09:47:00.000-07:00</published><updated>2011-09-10T13:52:57.813-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-10T13:52:57.813-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="multicore" /><category scheme="http://www.blogger.com/atom/ns#" term="master" /><category scheme="http://www.blogger.com/atom/ns#" term="Solr" /><category scheme="http://www.blogger.com/atom/ns#" term="Cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="Solr Cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="slave" /><category scheme="http://www.blogger.com/atom/ns#" term="ZooKeeper" /><category scheme="http://www.blogger.com/atom/ns#" term="replication" /><title>Multicore master-slave replication in Solr Cloud</title><content type="html">&lt;ol&gt;&lt;li&gt;If you've already done some work with Solr Cloud then you may want to start fresh by cleaning up any previous ZooKeeper configuration data in order to run this example exercise smoothly.&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;cd /trunk/solr/example/solr
rm -rf zoo_data
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;We will create the following setup:&lt;ol&gt;&lt;li&gt;there will be 2 Solr instances, each with 3 cores&lt;/li&gt;
&lt;li&gt;1 of the 3 cores will be a master and the other 2 will be slaves&lt;/li&gt;
&lt;li&gt;the slaves of one instance will be configured to use the master of the other one&lt;/li&gt;
&lt;li&gt;The infrastructure will look like:&lt;ul&gt;&lt;li&gt;Solr-Instance-A&lt;ul&gt;&lt;li&gt;master1 (indexes changes for shard1)&lt;/li&gt;
&lt;li&gt;slave1-master2 (replicates changes from shard2)&lt;/li&gt;
&lt;li&gt;slave2-master2 (replicates changes from shard2)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Solr-Instance-B&lt;ul&gt;&lt;li&gt;master2 (indexes changes for shard2)&lt;/li&gt;
&lt;li&gt;slave1-master1 (replicates changes from shard1)&lt;/li&gt;
&lt;li&gt;slave2-master1 (replicates changes from shard1)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;We can reuse the multicore directory of the out-of-the-box example. It already has the core0 and core1 directories, lets create an additional core:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd /trunk/solr/example/multicore
cp -r core0 core2
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;If we were &lt;i&gt;NOT&lt;/i&gt; using Solr Cloud which has us upload an universal configuration at startup, then we would perform the following sub-steps:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;strike&gt;Replace any mention of core0 with core2&lt;/strike&gt;&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;sed -ibak 's/core0/core2/g' core2/conf/solrconfig.xml
sed -ibak 's/core0/core2/g' core2/conf/schema.xml
sed -ibak 's/zero/two/g' core2/conf/schema.xml
&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;But right now these are pointless because each individual core's configuration will not be used ... instead the configuration in ZooKeeper will be used.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Edit solr.xml as follows:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&lt;cores adminPath="/admin/cores"&gt;
    &lt;core name="master1" shard="shard1" instanceDir="core0" collection="scaleDeep"&gt;&lt;/core&gt;
    &lt;core name="slave1-master2" shard="shard2" instanceDir="core1" collection="scaleDeep"&gt;&lt;/core&gt;
    &lt;core name="slave2-master2" shard="shard2" instanceDir="core2" collection="scaleDeep"&gt;&lt;/core&gt;
&lt;/cores&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Copy over the example's zoo.cfg from the single-solr setup over to the multicore setup:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd /trunk/solr/example
cp ./solr/zoo.cfg ./multicore/
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Copy example to example2 in order to create another Solr instance&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;cd /trunk/solr
cp -r example example2
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Edit solr.xml for example2 as follows:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd trunk/solr/example2/multicore
vi solr.xml
&lt;cores adminPath="/admin/cores"&gt;
    &lt;core name="master2" shard="shard2" instanceDir="core0" collection="scaleDeep"&gt;&lt;/core&gt;
    &lt;core name="slave1-master1" shard="shard1" instanceDir="core1" collection="scaleDeep"&gt;&lt;/core&gt;
    &lt;core name="slave2-master1" shard="shard1" instanceDir="core2" collection="scaleDeep"&gt;&lt;/core&gt;
&lt;/cores&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;So where is the configuration that we will we be uploading to ZooKeeper? And what should we edit? Well, the most well formed configuration is sitting in the out-of-the-box single core example so let us simply upload it from there to ZooKeeper! And have it configured such that it can be applied conditionally to all our cores based on the java params that we specify at startup!&lt;ol&gt;&lt;li&gt;Let us begin by editing the solrconfig.xml file of the single solr core example as follows:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd /trunk/solr/example/solr/conf
vi solrconfig.xml
&lt;requesthandler name="/replication" class="solr.ReplicationHandler" &gt;
       &lt;lst name="master"&gt;
         &lt;str name="enable"&gt;${enable.master:false}&lt;/str&gt;
         &lt;str name="replicateAfter"&gt;commit&lt;/str&gt;
         &lt;str name="replicateAfter"&gt;startup&lt;/str&gt;
         &lt;str name="confFiles"&gt;schema.xml,stopwords.txt&lt;/str&gt;
       &lt;/lst&gt;
       &lt;lst name="slave"&gt;
         &lt;str name="enable"&gt;${enable.slave:false}&lt;/str&gt;
         &lt;str name="masterUrl"&gt;http://${masterHost:localhost}:${masterPort:8983}/solr/${masterCoreName:master1}/replication&lt;/str&gt;
         &lt;str name="pollInterval"&gt;00:00:60&lt;/str&gt;
       &lt;/lst&gt;
&lt;/requestHandler&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;We cannot pass the true/false values via -Denable.master or -Denable.slave at startup because it will end up applying globally to all the cores (1 master &amp; 2 slaves) and there isn't a way to start only one core at a time from the command line. So we must leverage each individual multicore's solr.xml to provide core specific values as follows:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd /trunk/solr/example/multicore
vi solr.xml
  &lt;cores adminPath="/admin/cores"&gt;
    &lt;core name="master1" shard="shard1" instanceDir="core0" collection="scaleDeep"&gt;
      &lt;property name="enable.master" value="true"&gt;&lt;/property&gt;
    &lt;/core&gt;
    &lt;core name="slave1-master2" shard="shard2" instanceDir="core1" collection="scaleDeep"&gt;
      &lt;property name="enable.slave" value="true"&gt;&lt;/property&gt;
    &lt;/core&gt;
    &lt;core name="slave2-master2" shard="shard2" instanceDir="core2" collection="scaleDeep"&gt;
      &lt;property name="enable.slave" value="true"&gt;&lt;/property&gt;
    &lt;/core&gt;
  &lt;/cores&gt;


cd /trunk/solr/example2/multicore
vi solr.xml
  &lt;cores adminPath="/admin/cores"&gt;
    &lt;core name="master2" shard="shard2" instanceDir="core0" collection="scaleDeep"&gt;
      &lt;property name="enable.master" value="true"&gt;&lt;/property&gt;
    &lt;/core&gt;
    &lt;core name="slave1-master1" shard="shard1" instanceDir="core1" collection="scaleDeep"&gt;
      &lt;property name="enable.slave" value="true"&gt;&lt;/property&gt;
    &lt;/core&gt;
    &lt;core name="slave2-master1" shard="shard1" instanceDir="core2" collection="scaleDeep"&gt;
      &lt;property name="enable.slave" value="true"&gt;&lt;/property&gt;
    &lt;/core&gt;
  &lt;/cores&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Now let us start the 1st instance of the multicore Solr with the appropriate java params and let ZooKeeper know exactly where to get its universal-config (bootstrap_confdir) from:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd /trunk/solr/example
#java -Dbootstrap_confdir=./solr/conf \
#     -Dsolr.solr.home=multicore \
#     -DmasterHost=localhost -DmasterPort=7574 -DmasterCoreName=master2 \
#     -DzkRun \
#     -jar start.jar
java -Dbootstrap_confdir=./solr/conf -Dsolr.solr.home=multicore -DmasterHost=localhost -DmasterPort=7574 -DmasterCoreName=master2 -DzkRun -jar start.jar
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Start the 2nd instance of the multicore Solr with the appropriate java params:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd /trunk/solr/example2
#java -Djetty.port=7574 \
#     -DhostPort=7574 \
#     -Dsolr.solr.home=multicore \
#     -DmasterHost=localhost -DmasterPort=8983 -DmasterCoreName=master1 \
#     -DzkHost=localhost:9983 \
#     -jar start.jar
java -Djetty.port=7574 -DhostPort=7574 -Dsolr.solr.home=multicore -DmasterHost=localhost -DmasterPort=8983 -DmasterCoreName=master1 -DzkHost=localhost:9983 -jar start.jar
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Now, you can check the ZooKeeper status here:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;http://localhost:8983/solr/master1/admin/zookeeper.jsp
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
And that's all there is to it, feel free to leave any feedback as comments below.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-1055435900234129152?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/p-ZfdPDdR_Nvogd6JyqjeuD2wyQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p-ZfdPDdR_Nvogd6JyqjeuD2wyQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/p-ZfdPDdR_Nvogd6JyqjeuD2wyQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p-ZfdPDdR_Nvogd6JyqjeuD2wyQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/jlbl2ZCAy4Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/1055435900234129152/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/09/multicore-master-slave-replication-in.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/1055435900234129152?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/1055435900234129152?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/jlbl2ZCAy4Y/multicore-master-slave-replication-in.html" title="Multicore master-slave replication in Solr Cloud" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>2</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/09/multicore-master-slave-replication-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8FRn4_cCp7ImA9WhdWFkw.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-7560543601085602889</id><published>2011-09-09T16:26:00.001-07:00</published><updated>2011-09-09T16:26:57.048-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T16:26:57.048-07:00</app:edited><title>My Solr Cloud Wishlist</title><content type="html">&lt;ol&gt;&lt;li&gt;Add code in Solr such that the admin may configure a limit on how many documents is way too many to hold in single Solr core and kick-off an automated process to:&lt;ol&gt;&lt;li&gt;Either, CREATE another core (same or separate machine?) and add it to the ZooKeeper configuration with a weight that signifies that all new addition should happen to this new core's index only. Though I wonder how an update (delete+add) would work?&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Or, begin sharding the existing core. This could be done by CREATE-ing a copy of it (core_copy) and distributing the index into two shards (core_shard1,core_shard2) using a scheme/policy that does so in a best-effort manner such that the scoring wouldn't get thrown off by too much due to each individual shard's differing IDF. Then SWAP the two sharded-cores in as replacement for the overloaded core. What would happen to any changes made during this process?&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-7560543601085602889?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dj2i1a7VKDTeWwycL7UVallpsFY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dj2i1a7VKDTeWwycL7UVallpsFY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dj2i1a7VKDTeWwycL7UVallpsFY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dj2i1a7VKDTeWwycL7UVallpsFY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/kLQgoHOy8N4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/7560543601085602889/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/09/my-solr-cloud-wishlist.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/7560543601085602889?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/7560543601085602889?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/kLQgoHOy8N4/my-solr-cloud-wishlist.html" title="My Solr Cloud Wishlist" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/09/my-solr-cloud-wishlist.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04FRXYzfip7ImA9WhRTFEw.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-8022762614041647854</id><published>2011-09-09T08:48:00.000-07:00</published><updated>2011-11-04T06:05:14.886-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-04T06:05:14.886-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="master" /><category scheme="http://www.blogger.com/atom/ns#" term="Solr" /><category scheme="http://www.blogger.com/atom/ns#" term="slave" /><category scheme="http://www.blogger.com/atom/ns#" term="ZooKeeper" /><category scheme="http://www.blogger.com/atom/ns#" term="replication" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><title>Setup Solr master-slave replication with ZooKeeper</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Reading &lt;b&gt;Chapter 9: Scaling Solr&lt;/b&gt; from the book &lt;b&gt;Solr 1.4 Enterprise Search Server&lt;/b&gt; before jumping into the world of &lt;b&gt;&lt;a href="http://wiki.apache.org/solr/SolrCloud" target="_blank"&gt;Solr Cloud&lt;/a&gt;&lt;/b&gt; is essential for anyone who wants to understand what the embedded ZooKeeper can or cannot do. This is because you have to know how to configure al the nuts &amp;amp; bolts in Solr manually before you can gain a natural understanding of what the automation does and does not take care of for you.&lt;br /&gt;
&lt;br /&gt;
If you go through the basic exercises for &lt;b&gt;&lt;a href="http://wiki.apache.org/solr/SolrCloud" target="_blank"&gt;Solr Cloud&lt;/a&gt;&lt;/b&gt;, then you will come across &lt;b&gt;&lt;a href="http://wiki.apache.org/solr/SolrCloud#Example_B:_Simple_two_shard_cluster_with_shard_replicas" target="_blank"&gt;Example B: Simple two shard cluster with shard replicas&lt;/a&gt;&lt;/b&gt;. It is important to note that the wording here can be a bit misleading based on what you are looking to accomplish. It is not &lt;i&gt;replication&lt;/i&gt; that is being set up there. Instead, that example uses "replicas" as "copies", to demonstrate high search availability.&lt;br /&gt;
&lt;br /&gt;
Here are the tested &amp;amp; tried steps for &lt;i&gt;replication&lt;/i&gt; with a master-slave setup that will fit-in with a ZooKeeper managed Solr Cloud:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;If you've already done some work with Solr Cloud then you may want to start fresh by cleaning up any previous ZooKeeper configuration data in order to run this example exercise smoothly.&lt;br /&gt;
&lt;pre class="brush: xml"&gt;cd /trunk/solr/example/solr
rm -rf zoo_data
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Collection&lt;/i&gt; is a ZooKeeper oriented terminology to indicate a bunch of Solr cores that share the same schema and this has nothing to do with the name of a Solr Core itself. Lets keep this fact plain to see by editing the solr.xml file and providing an appropriate name for the core &amp;amp; collection:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;cores adminPath="/admin/cores" defaultCoreName="master1"&amp;gt;
 &amp;lt;core name="master1" instanceDir="." shard="shard1" collection="collection1"&amp;gt;&amp;lt;/core&amp;gt;
&amp;lt;/cores&amp;gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Navigate to the configuration directory for the example in the trunk &amp;amp; begin editing solrconfig.xml using your preferred text-editor:&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;cd /trunk/solr/example/solr/conf
vi solrconfig.xml
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Uncomment and edit the replication requestHandler to be as follows:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;requesthandler name="/replication" class="solr.ReplicationHandler" &amp;gt;
       &amp;lt;lst name="master"&amp;gt;
         &amp;lt;str name="enable"&amp;gt;${enable.master:false}&amp;lt;/str&amp;gt;
         &amp;lt;str name="replicateAfter"&amp;gt;commit&amp;lt;/str&amp;gt;
         &amp;lt;str name="replicateAfter"&amp;gt;startup&amp;lt;/str&amp;gt;
         &amp;lt;str name="confFiles"&amp;gt;schema.xml,stopwords.txt&amp;lt;/str&amp;gt;
       &amp;lt;/lst&amp;gt;
       &amp;lt;lst name="slave"&amp;gt;
         &amp;lt;str name="enable"&amp;gt;${enable.slave:false}&amp;lt;/str&amp;gt;
         &amp;lt;str name="masterUrl"&amp;gt;http://localhost:8983/solr/replication&amp;lt;/str&amp;gt;
         &amp;lt;str name="pollInterval"&amp;gt;00:00:60&amp;lt;/str&amp;gt;
       &amp;lt;/lst&amp;gt;
&amp;lt;/requestHandler&amp;gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Navigate out of the examples directory and create another copy of it&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;cd /trunk/solr/
cp -r example example2
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Edit the solr.xml file for the example2 directory:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;change the name of the core to indicate that it is a slave&lt;/li&gt;
&lt;li&gt;leave the name of the shard as-is to indicate which shard it is a replica of&lt;/li&gt;
&lt;li&gt;leave the name of the collection as-is because this slave core should join the same collection as its master in ZooKeeper config&lt;/li&gt;
&lt;/ol&gt;&lt;pre class="brush: cpp"&gt;cd /trunk/solr/example2/solr
vi solr.xml
&lt;/pre&gt;&lt;pre class="brush: xml"&gt;&amp;lt;cores adminPath="/admin/cores" defaultCoreName="slave1"&amp;gt;
 &amp;lt;core name="slave1" instanceDir="." shard="shard1" collection="collection1"&amp;gt;&amp;lt;/core&amp;gt;
&amp;lt;/cores&amp;gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Start the master core, the use of java params allows us to call this out as a master at startup:&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;cd /trunk/solr/example
java -Dbootstrap_confdir=./solr/conf -Denable.master=true -DzkRun -jar start.jar
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Start the slave core, the use of java params allows us to call this out as a slave at startup:&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;cd /trunk/solr/example2
java -Djetty.port=7574 -DhostPort=7574 -Denable.slave=true -DzkHost=localhost:9983 -jar start.jar
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;After starting the slave, towards the end of the logs for the slave, you should be able to spot info to affirm that replication is working:&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;INFO: Updating cloud state from ZooKeeper...
Sep 9, 2011 6:20:00 PM org.apache.solr.handler.SnapPuller fetchLatestIndex
INFO: Slave in sync with master.
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;u&gt;Sources:&lt;/u&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;http://lucene.472066.n3.nabble.com/Solr-Cloud-is-replication-really-a-feature-on-the-trunk-td3317695.html&lt;/li&gt;
&lt;li&gt;http://lucene.472066.n3.nabble.com/Replication-setup-with-SolrCloud-Zk-td2952602.html&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-8022762614041647854?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UUb7Oy421y52d0hn2lHgAPl2nzc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UUb7Oy421y52d0hn2lHgAPl2nzc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UUb7Oy421y52d0hn2lHgAPl2nzc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UUb7Oy421y52d0hn2lHgAPl2nzc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/kV4mI47dzw8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/8022762614041647854/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/09/setup-solr-master-slave-replication.html#comment-form" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/8022762614041647854?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/8022762614041647854?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/kV4mI47dzw8/setup-solr-master-slave-replication.html" title="Setup Solr master-slave replication with ZooKeeper" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>9</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/09/setup-solr-master-slave-replication.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUNQnczeCp7ImA9WhdQGUs.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-8301363346733848852</id><published>2011-08-21T14:37:00.000-07:00</published><updated>2011-08-21T14:48:13.980-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-21T14:48:13.980-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="core data" /><category scheme="http://www.blogger.com/atom/ns#" term="xcode4" /><category scheme="http://www.blogger.com/atom/ns#" term="exist" /><category scheme="http://www.blogger.com/atom/ns#" term="add" /><category scheme="http://www.blogger.com/atom/ns#" term="project" /><category scheme="http://www.blogger.com/atom/ns#" term="already" /><title>Adding Core Data to an already existing XCode4 project</title><content type="html">&lt;ol&gt;&lt;li&gt;The mechanism to add the model is simple:&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;Ctrl+Click &gt; New File &gt; Core Data &gt; Data Model &gt; Next &gt; Save&lt;/pre&gt;but this only works if you Ctrl+Click on the project!&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;If you Ctrl+Click anywhere else, for example lets say on the &lt;i&gt;Resources&lt;/i&gt; folder, then you will get a useless &lt;i&gt;.xcdatamodeld&lt;/i&gt; file which simply won't open in the editor.&lt;/li&gt;
&lt;li&gt;So make sure to add the model file by Ctrl+Click(ing) on the project name and nothing else.&lt;/li&gt;
&lt;li&gt;Beware, if try to move it to an appropriate location like &lt;i&gt;Resources&lt;/i&gt; at a later time, it will stop working again. After the move, once again, no editor will come up if your try to re-select the &lt;i&gt;.xcdatamodeld&lt;/i&gt; file.&lt;/li&gt;
&lt;li&gt;You &lt;b&gt;must&lt;/b&gt; have it directly under the project in order to be able to work with it.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-8301363346733848852?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Q56V8f35QgkaARZGB6uoTPBhsow/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q56V8f35QgkaARZGB6uoTPBhsow/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Q56V8f35QgkaARZGB6uoTPBhsow/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q56V8f35QgkaARZGB6uoTPBhsow/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/nOL85IU9epU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/8301363346733848852/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/08/adding-core-data-to-already-existing.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/8301363346733848852?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/8301363346733848852?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/nOL85IU9epU/adding-core-data-to-already-existing.html" title="Adding Core Data to an already existing XCode4 project" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/08/adding-core-data-to-already-existing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYARH4-eip7ImA9WhdRGEk.&quot;"><id>tag:blogger.com,1999:blog-7319157502989369851.post-470426476495546657</id><published>2011-08-08T12:49:00.000-07:00</published><updated>2011-08-08T16:29:05.052-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-08T16:29:05.052-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agvtool" /><category scheme="http://www.blogger.com/atom/ns#" term="xcode3" /><category scheme="http://www.blogger.com/atom/ns#" term="version" /><category scheme="http://www.blogger.com/atom/ns#" term="build" /><category scheme="http://www.blogger.com/atom/ns#" term="iPhone" /><category scheme="http://www.blogger.com/atom/ns#" term="number" /><category scheme="http://www.blogger.com/atom/ns#" term="xcode" /><category scheme="http://www.blogger.com/atom/ns#" term="xcode4" /><title>Versioning iPhone App: Beta &amp; Production Builds</title><content type="html">A little bit of Google search yields the following great resources to help get started in the arena of versioning your iOS apps:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.blog.montgomerie.net/easy-iphone-application-versioning-with-agvtool"&gt;easy-iphone-application-versioning-with-agvtool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://macindie.com/2011/01/recipe-automatic-version-number-build-number-build-date-handling/"&gt;recipe-automatic-version-number-build-number-build-date-handling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://gabrielrinaldi.me/blog/2010/10/13/setting-ios-application-build-versions.html"&gt;setting-ios-application-build-versions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;In this blog entry, I'll:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;attempt to provide the grand total of everything I learned from these articles which are based in XCode3,&lt;/li&gt;
&lt;li&gt;provide instructions on how to do the same in XCode4, and&lt;/li&gt;
&lt;li&gt;explain some of the finer points which weren't clear to me without trial &amp; error.&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-thnRlj_zy3M/TkBZOH5GybI/AAAAAAAAH9g/INM9J8-Ja6s/s1600/versioning7.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="87" width="200" src="http://1.bp.blogspot.com/-thnRlj_zy3M/TkBZOH5GybI/AAAAAAAAH9g/INM9J8-Ja6s/s200/versioning7.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;This snapshot shows how to add pple geric versioning to your XCode4 project.&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Py2jLlksZco/TkBAb1Tl-jI/AAAAAAAAH8s/JLGU4OvRW-0/s1600/versioning1.tiff" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="44" width="200" src="http://3.bp.blogspot.com/-Py2jLlksZco/TkBAb1Tl-jI/AAAAAAAAH8s/JLGU4OvRW-0/s200/versioning1.tiff" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;Open YOUR_PROJECT in XCode 4 and navigate to &lt;b&gt;YOUR_PROJECT &amp;gt; Targets &amp;gt; YOUR_PROJECT &amp;gt; Summary &amp;gt; iOS Application Target &amp;gt; Version&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Even though it may seem intuitive to think so but &lt;b&gt;this is &lt;i&gt;&lt;u&gt;NOT&lt;/u&gt;&lt;/i&gt; the version number that the iPhone app users will see&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;Instead this is an internal build number that you can increment as many times as you like and whenever you deem appropriate. Follow the links at the top to learn more.&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-i6vH7CLTdp4/TkBJFPfExLI/AAAAAAAAH84/lcEV5iJz1g8/s1600/versioning2.tiff" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="119" width="200" src="http://3.bp.blogspot.com/-i6vH7CLTdp4/TkBJFPfExLI/AAAAAAAAH84/lcEV5iJz1g8/s200/versioning2.tiff" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;You can easily comfirm this by attempting to edit this property in &lt;b&gt;YOUR_PROJECT &amp;gt; Target &amp;gt; YOUR_PROJECT &gt; Info (maps to YOUR_PROJECT-Info.plist file) &amp;gt; Custom iOS Target Properties &gt; Bundle Version&lt;/b&gt;&lt;br /&gt;
and then confirming that the change took effect again in &lt;b&gt;Summary &amp;gt; iOS Application Target &amp;gt; Version&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-SetuMlfh8Ac/TkBKLahNq4I/AAAAAAAAH9A/ktEqkK_QJJ0/s1600/versioning3.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="156" width="200" src="http://1.bp.blogspot.com/-SetuMlfh8Ac/TkBKLahNq4I/AAAAAAAAH9A/ktEqkK_QJJ0/s200/versioning3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;If you Ctrl+click and ask it to &lt;b&gt;Show raw keys/values&lt;/b&gt;&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-o3bgCX7gNOk/TkBKQXJ0uxI/AAAAAAAAH9I/2TbvqXFJMWw/s1600/versioning4.tiff" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="99" width="200" src="http://4.bp.blogspot.com/-o3bgCX7gNOk/TkBKQXJ0uxI/AAAAAAAAH9I/2TbvqXFJMWw/s200/versioning4.tiff" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;Then you'll notice that this maps to the key: CFBundleVersion&lt;/li&gt;
&lt;li&gt;If you would eventually like to build your "About" page in the app and format a string that shows up something like &lt;b&gt;version 0.1.0 (build 42)&lt;/b&gt;, where 42 will correspond to the value of &lt;b&gt;CFBundleVersion&lt;/b&gt;, then instead of giving it an initial value like 1.0, I would suggest setting it to 1&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-mHczkr8_khI/TkBPYpVFYSI/AAAAAAAAH9Q/pTNoG3VByLs/s1600/vesioning5.tiff" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="138" width="200" src="http://2.bp.blogspot.com/-mHczkr8_khI/TkBPYpVFYSI/AAAAAAAAH9Q/pTNoG3VByLs/s200/vesioning5.tiff" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;So now what corresponds to the 0.1.0 part of the &lt;b&gt;version 0.1.0 (build 42)&lt;/b&gt; in your about page? Well, the &lt;b&gt;Bundle versions string, short&lt;/b&gt; property with the raw key value of &lt;b&gt;CFBundleShortVersionString&lt;/b&gt; would make up the 0.1.0 piece of that string.&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-QsCPSKvkgOs/TkBQBINA2FI/AAAAAAAAH9Y/EQ_TEFMvhe8/s1600/versioning6.tiff" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="130" width="200" src="http://3.bp.blogspot.com/-QsCPSKvkgOs/TkBQBINA2FI/AAAAAAAAH9Y/EQ_TEFMvhe8/s200/versioning6.tiff" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;And could this 0.1.0 be the version # that is displayed as your app's version in the App Store? &lt;b&gt;Yes!&lt;/b&gt; this is known as the marketing version and it is what shows up to the users of the App Store.&lt;/li&gt;
&lt;li&gt;What's up with the x.y.z version structure? As &lt;a href="http://gabrielrinaldi.me/blog/2010/10/13/setting-ios-application-build-versions.html" target="_blank"&gt;one of the links&lt;/a&gt; in the beginning explains, X - major revision number, Y - minor revision number, Z - maintenance or patch release. This is a very nice &amp; simple concept to use.&lt;/li&gt;
&lt;li&gt;Why should the starting of an App's marketing version be from 0.1.0? Because an application would like to enter the App Store as 1.0.0, so you don't want to use 1 as your major (X) version in the very beginning when you are probably in the process of distributing Ad-Hoc builds for alpha/beta testing. 1 as your minor (Y) version makes sense 0.1.0 because your app starts with the smallest set of features and then grows to perhaps 0.2.0, 0.3.0 and so on. Also the 0 as your patch (Z) version makes sense because there is nothing for you to patch at the very start. In conclusion: minor.major.patch is conveniently 0.1.0 for starters.&lt;/li&gt;
&lt;li&gt;Here's what my email notification message looks like when I use &lt;a href="https://testflightapp.com/" target="_blank"&gt;TestFlightApp&lt;/a&gt; to publish beta builds to testers: &lt;b&gt;v0.1.0 (4) of ShoppinPal is ready for a TestFlight&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;To check your &lt;b&gt;CFBundleVersion&lt;/b&gt; via Terminal, use: &lt;pre class="brush: cpp"&gt;agvtool what-version&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;All the following commands increment &lt;b&gt;CFBundleVersion&lt;/b&gt; by 1 but do nothing to &lt;b&gt;CFBundleShortVersionString&lt;/b&gt;: &lt;pre class="brush: cpp"&gt;agvtool next-version
agvtool next-version -all
agvtool bump -all&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;To check your &lt;b&gt;CFBundleShortVersionString&lt;/b&gt; via Terminal, use: &lt;pre class="brush: cpp"&gt;agvtool what-marketing-version&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;To change &lt;b&gt;CFBundleShortVersionString&lt;/b&gt;, you will yourself have to understand if the change is major, minor or patch and then use:&lt;br /&gt;
&lt;pre class="brush: cpp"&gt;agvtool new-marketing-version 0.2.0&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;With XCode4 there really shouldn't be any good reason not to use Git so remember to commit to the repository every time after you change the version. Perhaps even take the time to tag the repo so that you can pull the exact source for debugging if someone ever reports an issue against a specific version/build #&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7319157502989369851-470426476495546657?l=pulkitsinghal.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iPcM9Ji6VCq3T207a-UeZHW6ess/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iPcM9Ji6VCq3T207a-UeZHW6ess/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iPcM9Ji6VCq3T207a-UeZHW6ess/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iPcM9Ji6VCq3T207a-UeZHW6ess/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Behemoth/~4/7zQTzB3Rz1E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pulkitsinghal.blogspot.com/feeds/470426476495546657/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://pulkitsinghal.blogspot.com/2011/08/versioning-iphone-app-beta-production.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/470426476495546657?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7319157502989369851/posts/default/470426476495546657?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Behemoth/~3/7zQTzB3Rz1E/versioning-iphone-app-beta-production.html" title="Versioning iPhone App: Beta &amp; Production Builds" /><author><name>Tiklup</name><uri>http://www.blogger.com/profile/01430974801934581545</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://1.bp.blogspot.com/_EXP42XMziRo/TNWYuJ71OfI/AAAAAAAAH1c/d59-Ff_gdHs/S220/profile.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-thnRlj_zy3M/TkBZOH5GybI/AAAAAAAAH9g/INM9J8-Ja6s/s72-c/versioning7.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://pulkitsinghal.blogspot.com/2011/08/versioning-iphone-app-beta-production.html</feedburner:origLink></entry></feed>

