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

<channel>
	<title>Weez.com &#187; system</title>
	<atom:link href="http://www.weez.com/tag/system/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.weez.com</link>
	<description>Solving everyday practical LAMP problems... one at a time</description>
	<lastBuildDate>Fri, 10 Feb 2012 23:07:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Classes System Pages</title>
		<link>http://www.weez.com/2012/01/classes-system-pages/</link>
		<comments>http://www.weez.com/2012/01/classes-system-pages/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 03:26:23 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[pages]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://www.weez.com/2012/01/classes-system-pages/</guid>
		<description><![CDATA[Package: Classes System Pages Summary: Generate links to browse MySQL table query results Groups: Databases, HTML, PHP 5 Author: murad Description: This class can generate links to browse MySQL table query results&#8230; Read more at http://www.phpclasses.org/package/7289-PHP-Generate-links-to-browse-MySQL-table-query-results.html View full post on PHP Classes: Latest entries]]></description>
			<content:encoded><![CDATA[<div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Package:</div>
<div><a href="http://www.phpclasses.org/package/7289-PHP-Generate-links-to-browse-MySQL-table-query-results.html">Classes System Pages</a></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Summary: </div>
<div><span name="description">Generate links to browse MySQL table query results</span></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Groups: </div>
<div><a href="http://www.phpclasses.org/browse/class/10.html">Databases</a>, <a href="http://www.phpclasses.org/browse/class/1.html">HTML</a>, <a href="http://www.phpclasses.org/browse/class/8.html">PHP 5</a></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Author: </div>
<div><a href="http://www.phpclasses.org/browse/author/1044048.html">murad</a></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Description: </div>
<div>This class can generate links to browse MySQL table query results&#8230;</p>
<p>Read more at http://www.phpclasses.org/package/7289-PHP-Generate-links-to-browse-MySQL-table-query-results.html</p></div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/dHctnb9wsa-mGS-RlY13ukCRIi8/0/da"><img src="http://feedads.g.doubleclick.net/~a/dHctnb9wsa-mGS-RlY13ukCRIi8/0/di" border="0" ismap="true"></img></a><br/><br />
<a href="http://feedads.g.doubleclick.net/~a/dHctnb9wsa-mGS-RlY13ukCRIi8/1/da"><img src="http://feedads.g.doubleclick.net/~a/dHctnb9wsa-mGS-RlY13ukCRIi8/1/di" border="0" ismap="true"></img></a></p>
<p><img src="http://feeds.feedburner.com/~r/phpclasses/~4/PwDQsMarvhk" height="1" width="1"/></p>
<p>View full post on <a href="http://feedproxy.google.com/~r/phpclasses/~3/PwDQsMarvhk/7289-PHP-Generate-links-to-browse-MySQL-table-query-results.html">PHP Classes: Latest entries</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2012/01/classes-system-pages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tech Talk: Neha Narkhede (LinkedIn) — Kafka, LinkedIn’s open-source distributed pub-sub messaging system</title>
		<link>http://www.weez.com/2011/10/tech-talk-neha-narkhede-linkedin-%e2%80%94-kafka-linkedin%e2%80%99s-open-source-distributed-pub-sub-messaging-system/</link>
		<comments>http://www.weez.com/2011/10/tech-talk-neha-narkhede-linkedin-%e2%80%94-kafka-linkedin%e2%80%99s-open-source-distributed-pub-sub-messaging-system/#comments</comments>
		<pubDate>Sun, 09 Oct 2011 19:31:30 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[Voldemort]]></category>
		<category><![CDATA[distributed]]></category>
		<category><![CDATA[Kafka]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[LinkedIn’s]]></category>
		<category><![CDATA[Messaging]]></category>
		<category><![CDATA[Narkhede]]></category>
		<category><![CDATA[Neha]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[pub/sub]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[Talk]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.weez.com/2011/10/tech-talk-neha-narkhede-linkedin-%e2%80%94-kafka-linkedin%e2%80%99s-open-source-distributed-pub-sub-messaging-system/</guid>
		<description><![CDATA[Kafka Neha Narkhede (LinkedIn) Wednesday, July 27, 2011 ABSTRACT Kafka is a distributed publish-subscribe messaging system aimed at providing a scalable, high-throughput, low latency solution for log aggregation and activity stream processing for LinkedIn. Built on Apache Zookeeper in Scala, Kafka aims at providing a unified stream for both real-time and offline consumption. We provide [...]]]></description>
			<content:encoded><![CDATA[<p><center><iframe src="http://player.vimeo.com/video/27592622?title=0&amp;byline=0&amp;portrait=0&amp;color=80ceff" width="658" height="370" frameborder="0"></iframe></center></p>
<p><em>Kafka</em><br />
<strong>Neha Narkhede</strong> (LinkedIn)<br />
Wednesday, July 27, 2011</p>
<p>ABSTRACT</p>
<p>Kafka is a distributed publish-subscribe messaging system aimed at providing a scalable, high-throughput, low latency solution for log aggregation and activity stream processing for LinkedIn. Built on Apache Zookeeper in Scala, Kafka aims at providing a unified stream for both real-time and offline consumption. We provide a mechanism for parallel data load into Hadoop as well as the ability to partition real-time consumption over a cluster of machines. Kafka combines the benefits of traditional log aggregators and messaging systems and has been used successfully in production for 8 months. It provides API similar to that of a messaging system and allows applications to consume log events in real-time.</p>
<p>Written by the SNA team at LinkedIn, Kafka is open sourced under the Apache 2.0 License and is an Apache incubator project. In this presentation, we will highlight the core design principles for this system, and how this system fits into LinkedIn&#8217;s data ecosystem as well as some of the products and monitoring applications it supports in our usage.</p>
<p>BIOGRAPHY</p>
<p>Neha Narkhede is a Senior Software Engineer in the Search, Network and Analytics Team at LinkedIn, focusing on Distributed Systems. She is one of the initial contributors to Project Kafka. In the past she&#8217;s worked on search systems in large scale databases and has been an active contributor to several projects LinkedIn has open sourced, including Voldemort, Bobo and Zoie.</p>
<p>View full post on <a href="http://sna-projects.com/blog/2011/08/kafka/">SNA Projects Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2011/10/tech-talk-neha-narkhede-linkedin-%e2%80%94-kafka-linkedin%e2%80%99s-open-source-distributed-pub-sub-messaging-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patrick Crews: Drizzle’s Jenkins system using dbqp for randgen and crashme testing</title>
		<link>http://www.weez.com/2011/06/patrick-crews-drizzle%e2%80%99s-jenkins-system-using-dbqp-for-randgen-and-crashme-testing/</link>
		<comments>http://www.weez.com/2011/06/patrick-crews-drizzle%e2%80%99s-jenkins-system-using-dbqp-for-randgen-and-crashme-testing/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 20:06:49 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[Drizzle]]></category>
		<category><![CDATA[crashme]]></category>
		<category><![CDATA[Crews]]></category>
		<category><![CDATA[dbqp]]></category>
		<category><![CDATA[Drizzle’s]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[Patrick]]></category>
		<category><![CDATA[randgen.]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[using]]></category>

		<guid isPermaLink="false">http://www.weez.com/2011/06/patrick-crews-drizzle%e2%80%99s-jenkins-system-using-dbqp-for-randgen-and-crashme-testing/</guid>
		<description><![CDATA[Well, that&#8217;s pretty much it, thanks for stopping by ; ) In all seriousness, it&#8217;s kind of neat that we&#8217;re using dbqp to run some of our staging tests and we gain a few neat things: Speed Here are the trend charts for randgen and crashme.  While it doesn&#8217;t look like randgen is showing much [...]]]></description>
			<content:encoded><![CDATA[<p>Well, that&#8217;s pretty much it, thanks for stopping by ; )</p>
<p>In all seriousness, it&#8217;s kind of neat that we&#8217;re using <a href="http://docs.drizzle.org/testing/dbqp.html">dbqp</a> to run some of our staging tests and we gain a few neat things:</p>
<h2>Speed</h2>
<p>Here are the trend charts for <a href="http://jenkins.drizzle.org/view/Drizzle-staging/job/drizzle-staging-randgen/buildTimeTrend">randgen</a> and <a href="http://jenkins.drizzle.org/view/Drizzle-staging/job/drizzle-staging-crash-me/buildTimeTrend">crashme</a>.  While it doesn&#8217;t look like randgen is showing much of an improvement, it is worth mentioning that this job now runs both the standard <strong>and</strong> the transaction log tests in a single run &gt;: )  Previously, we had a separate drizzle-automation job for the transaction log.  Just the trx_log tests took ~30 minutes to run (plus build time).  Long story short, we&#8217;re saving about 30-40 minutes on randgen testing per staging run and only needing to build once!</p>
<h2>Maintainability</h2>
<p>The jobs we run are in the tree and anyone can easily repeat them.  While <a href="https://launchpad.net/drizzle-automation">Drizzle-automation</a> kicks major butt (and I have taken many ideas from it), it is a separate piece of software that requires <a href="http://wiki.drizzle.org/Automation_Documentation#Installing_drizzle-automation">setup and maintenance</a>.  Basing things around an in-tree setup means that you only need the code and any required bits and pieces.  Now if we need to set up a new <a href="http://docs.drizzle.org/testing/randgen.html">randgen</a> machine, we only need the <a href="https://launchpad.net/randgen">randgen</a> and dbd::drizzle installed (and we plan on including randgen in-tree soon, so you won&#8217;t even need that!).  If we need to set up a new crash-me machine, we only need dbd::drizzle &#8211; and everyone should have dbd::drizzle installed! ; )</p>
<h2>Ease of use</h2>
<p>Pretty much all tests provide the same standard output:</p>
<h3>dtr mode</h3>
<p>From the command:<br />
<code><br />
./dbqp<br />
</code><br />
Our default mode is dtr (aka using drizzletest.cc to execute standard .test files).  To run all available tests, use the make target &#8211; make test-dbqp<br />
<code><br />
20110621-081404  trigger_dictionary.loaded                  [ pass ]       43<br />
20110621-081408  logging_stats.cumulative                   [ pass ]     1045<br />
20110621-081412  errmsg_stderr.stderr                       [ pass ]       36<br />
20110621-081412  ===============================================================<br />
20110621-081412 INFO Test execution complete in 496 seconds<br />
20110621-081412 INFO Summary report:<br />
20110621-081412 INFO Executed 566/566 test cases, 100.00 percent<br />
20110621-081412 INFO STATUS: PASS, 566/566 test cases, 100.00 percent executed<br />
20110621-081412 INFO Spent 254 / 496 seconds on: TEST(s)<br />
20110621-081412 INFO Test execution complete<br />
20110621-081412 INFO Stopping all running servers...<br />
</code></p>
<h3>randgen mode</h3>
<p>From the command:<br />
<code><br />
./dbqp --mode=randgen --randgen-path=/path/to/your/randgen<br />
</code><br />
<code><br />
20110621-170141  main.subquery                              [ pass ]     3780<br />
20110621-170148  main.subquery_semijoin                     [ pass ]     3016<br />
20110621-170156  main.subquery_semijoin_nested              [ pass ]     3750<br />
20110621-170202  main.varchar                               [ pass ]     2658<br />
20110621-170202  ===============================================================<br />
20110621-170202 INFO Test execution complete in 147 seconds<br />
20110621-170202 INFO Summary report:<br />
20110621-170202 INFO Executed 19/19 test cases, 100.00 percent<br />
20110621-170202 INFO STATUS: PASS, 19/19 test cases, 100.00 percent executed<br />
20110621-170202 INFO Spent 77 / 147 seconds on: TEST(s)<br />
20110621-170202 INFO Test execution complete<br />
20110621-170202 INFO Stopping all running servers...<br />
</code></p>
<h3>crashme mode</h3>
<p>From the command:<br />
<code><br />
./dbqp --mode=crashme<br />
</code><br />
<code><br />
20110621-181515  main.crashme                               [ fail ]   149840<br />
20110621-181515  func_extra_to_days=error        # Function TO_DAYS<br />
20110621-181515  ###<br />
20110621-181515  ###&lt;select to_days('1996-01-01') from crash_me_d<br />
20110621-181515  ###&gt;2450084<br />
20110621-181515  ###We expected '729024' but got '2450084'<br />
20110621-181515  func_odbc_timestampadd=error        # Function TIMESTAMPADD<br />
20110621-181515  ###<br />
20110621-181515  ###&lt;select timestampadd(SQL_TSI_SECOND,1,'1997-01-01 00:00:00')<br />
20110621-181515  ###&gt;1997-01-01 00:00:01.000000<br />
20110621-181515  ###We expected '1997-01-01 00:00:01' but got '1997-01-01 00:00:01.000000'<br />
20110621-181515  ###<br />
20110621-181515  ###&lt;select {fn timestampadd(SQL_TSI_SECOND,1,{ts '1997-01-01 00:00:00'}) }<br />
20110621-181515  ###&gt;1997-01-01 00:00:01.000000<br />
20110621-181515  ###We expected '1997-01-01 00:00:01' but got '1997-01-01 00:00:01.000000'<br />
20110621-181515<br />
20110621-181515 ERROR Failed test.  Use --force to execute beyond the first test failure<br />
20110621-181515  ===============================================================<br />
20110621-181515 INFO Test execution complete in 153 seconds<br />
20110621-181515 INFO Summary report:<br />
20110621-181515 INFO Executed 1/1 test cases, 100.00 percent<br />
20110621-181515 INFO STATUS: FAIL, 1/1 test cases, 100.00 percent executed<br />
20110621-181515 INFO FAIL tests: main.crashme<br />
20110621-181515 INFO Spent 149 / 153 seconds on: TEST(s)<br />
20110621-181515 INFO Test execution complete<br />
20110621-181515 INFO Stopping all running servers...<br />
</code></p>
<p>While this isn&#8217;t a huge feature, it is nice to have a standardized report for knowing if something failed, what failed and how (we always dump test tool output on test failures).  Why is this nice?  Well, the world is a busy place and only needing to know one way of reading test output simplifies things just a teensy little bit.  This small improvement becomes a huge benefit over time if you happen to spend good chunks of your day looking at test output like me : )</p>
<p>Other than that, I&#8217;m still working on teaching dbqp interesting new tricks that will help me in testing <a href="http://www.skysql.com/en/index">SkySQL</a>&#8216;s <a href="http://blogs.skysql.com/2011/05/new-features-added-to-skysql.html">Reference Architecture</a> &#8211; expect to hear more about that next month!</p>
<p>View full post on <a href="http://www.wc220.com/?p=276">Planet Drizzle</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2011/06/patrick-crews-drizzle%e2%80%99s-jenkins-system-using-dbqp-for-randgen-and-crashme-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Template System</title>
		<link>http://www.weez.com/2011/04/simple-template-system/</link>
		<comments>http://www.weez.com/2011/04/simple-template-system/#comments</comments>
		<pubDate>Sun, 01 May 2011 03:25:06 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Simple]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://www.weez.com/2011/04/simple-template-system/</guid>
		<description><![CDATA[Package: Simple Template System Summary: Template engine based on replacing text strings Groups: PHP 5, Templates Author: Erick-Master Description: This is a basic template engine based on replacing text strings&#8230; Read more at http://www.phpclasses.org/package/6920-PHP-Template-engine-based-on-replacing-text-strings.html View full post on PHP Classes: Latest entries]]></description>
			<content:encoded><![CDATA[<div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Package:</div>
<div><a href="http://www.phpclasses.org/package/6920-PHP-Template-engine-based-on-replacing-text-strings.html">Simple Template System</a></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Summary: </div>
<div><span name="description">Template engine based on replacing text strings</span></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Groups: </div>
<div><a href="http://www.phpclasses.org/browse/class/8.html">PHP 5</a>, <a href="http://www.phpclasses.org/browse/class/37.html">Templates</a></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Author: </div>
<div><a href="http://www.phpclasses.org/browse/author/975012.html">Erick-Master</a></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Description: </div>
<div>This is a basic template engine based on replacing text strings&#8230;</p>
<p>Read more at http://www.phpclasses.org/package/6920-PHP-Template-engine-based-on-replacing-text-strings.html</p></div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/fs7WmLa37-NTO5iy_84Aeq-Yl6c/0/da"><img src="http://feedads.g.doubleclick.net/~a/fs7WmLa37-NTO5iy_84Aeq-Yl6c/0/di" border="0" ismap="true"></img></a><br/><br />
<a href="http://feedads.g.doubleclick.net/~a/fs7WmLa37-NTO5iy_84Aeq-Yl6c/1/da"><img src="http://feedads.g.doubleclick.net/~a/fs7WmLa37-NTO5iy_84Aeq-Yl6c/1/di" border="0" ismap="true"></img></a></p>
<p><img src="http://feeds.feedburner.com/~r/phpclasses/~4/UPeE387rMPY" height="1" width="1"/></p>
<p>View full post on <a href="http://feedproxy.google.com/~r/phpclasses/~3/UPeE387rMPY/6920-PHP-Template-engine-based-on-replacing-text-strings.html">PHP Classes: Latest entries</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2011/04/simple-template-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estoy Database system</title>
		<link>http://www.weez.com/2011/03/estoy-database-system/</link>
		<comments>http://www.weez.com/2011/03/estoy-database-system/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 03:24:52 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[Estoy]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://www.weez.com/2011/03/estoy-database-system/</guid>
		<description><![CDATA[Package: Estoy Database system Summary: Compose and execute MySQL queries programmatically Groups: Databases, PHP 5 Author: amralaa Description: This class can compose and execute MySQL queries programmatically&#8230; Read more at http://www.phpclasses.org/package/6850-PHP-Compose-and-execute-MySQL-queries-programmatically.html View full post on PHP Classes: Latest entries]]></description>
			<content:encoded><![CDATA[<div>
<div style="float: right"><img border="0" width="150" height="95" alt="Estoy Database system" src="http://www.phpclasses.org/browse/view/image/file/34704/name/Code"></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Package:</div>
<div><a href="http://www.phpclasses.org/package/6850-PHP-Compose-and-execute-MySQL-queries-programmatically.html">Estoy Database system</a></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Summary: </div>
<div><span name="description">Compose and execute MySQL queries programmatically</span></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Groups: </div>
<div><a href="http://www.phpclasses.org/browse/class/10.html">Databases</a>, <a href="http://www.phpclasses.org/browse/class/8.html">PHP 5</a></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Author: </div>
<div><a href="http://www.phpclasses.org/browse/author/817150.html">amralaa</a></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Description: </div>
<div>This class can compose and execute MySQL queries programmatically&#8230;</p>
<p>Read more at http://www.phpclasses.org/package/6850-PHP-Compose-and-execute-MySQL-queries-programmatically.html</p></div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/nkgSchJxacQrJUmoxxvbrOVqzIA/0/da"><img src="http://feedads.g.doubleclick.net/~a/nkgSchJxacQrJUmoxxvbrOVqzIA/0/di" border="0" ismap="true"></img></a><br/><br />
<a href="http://feedads.g.doubleclick.net/~a/nkgSchJxacQrJUmoxxvbrOVqzIA/1/da"><img src="http://feedads.g.doubleclick.net/~a/nkgSchJxacQrJUmoxxvbrOVqzIA/1/di" border="0" ismap="true"></img></a></p>
<p>View full post on <a href="http://feedproxy.google.com/~r/phpclasses/~3/LTthTU6CcTk/6850-PHP-Compose-and-execute-MySQL-queries-programmatically.html">PHP Classes: Latest entries</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2011/03/estoy-database-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Build a distributed realtime tweet search system in no time. Part 2/2</title>
		<link>http://www.weez.com/2011/02/build-a-distributed-realtime-tweet-search-system-in-no-time-part-22/</link>
		<comments>http://www.weez.com/2011/02/build-a-distributed-realtime-tweet-search-system-in-no-time-part-22/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 19:29:41 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[Voldemort]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[distributed]]></category>
		<category><![CDATA[Part]]></category>
		<category><![CDATA[Realtime]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[Time]]></category>
		<category><![CDATA[Tweet]]></category>

		<guid isPermaLink="false">http://www.weez.com/2011/02/build-a-distributed-realtime-tweet-search-system-in-no-time-part-22/</guid>
		<description><![CDATA[Chirper is all about realtime indexing, so we wanted to highlight that on the frontend as much as possible, the search box performs the instant search as you type in the terms, and also show the number of tweets as they are indexed live on the system. It was important to keep the frontend as [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://javasoze.github.com/chirper/">Chirper</a> is all about realtime indexing, so we wanted to highlight that on the frontend as much as possible, the search box performs the instant search as you type in the terms, and also show the number of tweets as they are indexed live on the system.<br />
It was important to keep the frontend as simple as possible, keeping the frontend very thin and simple is not hard, it requires discipline to not add complex logic and operations, delegating all the complexity and scaling challenges to the backend and middleware services.</p>
<p>Ideas and decisions:</p>
<p><strong>We want to ship the frontend with the backend code as one package with no extra setup, and minimal code (no &#8220;nonsense xml&#8221; servlet configurations).<br />
</strong>We chose <a href="https://github.com/scalatra/scalatra">Scalatra</a>, Scalatra is to scala what sinatra is for Ruby, it allows you to define the resources with very minimal code, for example:<code><br />
  get("/salute") {<br />
    "Hello World"<br />
  }<br />
</code></p>
<p>It also offers powerful templating features through <a href="http://scalate.fusesource.org/">Scalate</a>, which allows you to render JSP, HAML, Mustache, etc.</p>
<p><strong>Realtime updating on the page will require some Ajax and DOM manipulation.</strong><br />
Dealing with browser inconsistencies is a pain, <a href="http://jquery.com/">JQuery</a> makes it a breeze and also offers powerful ajax functions, it is also used as the glue for other libraries like backbone.js and <a href="https://github.com/janl/mustache.js/">mustache.js</a>.</p>
<p><strong>Javascript code tends to get messy and big over time, let&#8217;s use something that allows the frontend to be a good starting point and scale the code over time.</strong><br />
<a href="http://documentcloud.github.com/backbone/">Backbone.js</a> is a MVC pattern implementation for javascript apps, very minimal, from all the options out there Backbone seems to be the cleanest dont-try-to-do-everything option. While for this frontend is still a bit of an overkilll, it offers a good starting point for a larger project. Also enforces writing code in a specific style wich makes it easy to know where all the pieces are put together.</p>
<p>The backbone layer holds a model (Tweet), a collection of tweets (TweetList), and two views, one for the visual representation of a Tweet model (TweetView), and one for  the left sidebar that contains the search box and list of results (AppView).</p>
<p>Do take a look at the commented code for the <a href="https://github.com/javasoze/chirper/blob/master/src/main/webapp/js/app.js">app.js</a> and the <a href="https://github.com/javasoze/chirper/blob/master/src/main/webapp/index.ssp">index.ssp</a> file to learn more about how everything works in more detail.</p>
<p><strong>Some UI niceties like good looking buttons, realtime update of timestamps, and animation.</strong><br />
A nice touch would be to refresh the time associated with a tweet, for that we used a JQuery plugin called EasyDate. For the buttons and layout we used CSS3 properties that degrade fine to older browsers (and IE). For the images we used one sprited png file.</p>
<p>And that&#8217;s it!, it&#8217;s a very simple page, that in order to build fast we leveraged lots of great opensource software that is out there, check out the code and give it a try locally. It&#8217;s really simple.</p>
<p>View full post on <a href="http://sna-projects.com/blog/2011/02/build-a-distributed-realtime-tweet-search-system-in-no-time-part-22/">SNA Projects Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2011/02/build-a-distributed-realtime-tweet-search-system-in-no-time-part-22/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Build a distributed realtime tweet search system in no time. Part 1/2</title>
		<link>http://www.weez.com/2011/02/build-a-distributed-realtime-tweet-search-system-in-no-time-part-12/</link>
		<comments>http://www.weez.com/2011/02/build-a-distributed-realtime-tweet-search-system-in-no-time-part-12/#comments</comments>
		<pubDate>Tue, 22 Feb 2011 19:30:30 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[Voldemort]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[distributed]]></category>
		<category><![CDATA[Part]]></category>
		<category><![CDATA[Realtime]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[Time]]></category>
		<category><![CDATA[Tweet]]></category>

		<guid isPermaLink="false">http://www.weez.com/2011/02/build-a-distributed-realtime-tweet-search-system-in-no-time-part-12/</guid>
		<description><![CDATA[Last Friday was an InDay (A day at LinkedIn where you can take a break from your day-to-day work and build something cool) As a part of the SNA team, we have been building some really cool distributed systems, from storage, to messaging, to search. So we thought it&#8217;d be cool on this InDay to [...]]]></description>
			<content:encoded><![CDATA[<p>Last Friday was an InDay (A day at <a href="http://www.linkedin.com">LinkedIn</a> where you can take a break from your day-to-day work and build something cool) As a part of the <a href="http://sna-projects.com">SNA</a> team, we have been building some really cool distributed systems, from storage, to messaging, to search. So we thought it&#8217;d be cool on this InDay to put it all together and see what we can come up with.</p>
<p>A challenge we gave ourselves was to see how quickly we can build a scalable Tweet search system. Some requirements:</p>
<ul>
<li>The entire stack must be scalable, e.g. by adding  commodity hardware, it should theoretically handle all tweets with real internet traffic.</li>
<li>The part of the system should be able to scale differently, e.g. there is no reason the messaging system needs to scale the same way as the storage system.</li>
<li>Fault tolerant &#8211; The system should be able to tolerate system failures as well as data corruption.</li>
<li>Only 1 day to build it.</li>
</ul>
<p>We scribbled together the following architecture:</p>
<p><img class="alignnone" title="Chirper Architecture" src="http://javasoze.github.com/chirper/images/chirp-arch.png" alt="" width="560" height="341" /></p>
<p>Every component here is an open-source project we have deployed into our production environment with its own scaling characteristics.</p>
<p>Some design considerations and implementation details:</p>
<p><a href="https://github.com/acrosa/Scala-TwitterStreamer">TweetStreamer</a> is a twitter streamer using the twitter API written in Scala. We chose to use it because it is light-weight, simple and frankly, does exactly what we wanted. It can be easily configured to handle different types of twitter feeds.</p>
<p>We now have a data feed, one obvious thing to do is to store it. <a href="http://sna-projects.com/voldemort">Voldemort</a> seemed to be an obvious choice. Key = twitter id, value = tweet status (json string).</p>
<p>We also send the feed to a <a href="http://sna-projects.com/kafka">Kafka</a> topic to be consumed by down-stream services, e.g. <a href="http://sna-projects.com/sensei">Sensei</a> (our search system). You can find the code <a href="https://github.com/javasoze/chirper/blob/master/src/main/scala/com/linkedin/chirper/streamer/ChirperStreamProcessor.scala">here</a>.</p>
<p>The Sensei/search integration is more work: (<a href="https://github.com/javasoze/chirper/tree/master/src/main/scala/com/linkedin/chirper/search">code here</a>), We need to setup of the following pieces:</p>
<ul>
<li>How we would parse the query.</li>
<li>How to consume indexing events: e.g. extract from a tweet json string pieces of data we want to index. The search node consumes from Kafka, and builds an index-able object from a json string. In this case, we are only interested in 3 pieces of data: unique tweet id, the actual tweet text and the time (to be able to sort on): see (<a href="https://github.com/javasoze/chirper/blob/master/src/main/scala/com/linkedin/chirper/search/ChirpJSONInterpreter.scala">here</a>)</li>
<li>Index data retention policy as we accumulate more and more tweets. For this case, we configured index retention to be 7 days, with the index rolling forward nightly. Here is a <a href="http://snaprojects.jira.com/wiki/display/ZOIE/HourGlass+-+Forward-Rolling+Indexing">wiki</a> on how this works under-the-hood.</li>
</ul>
<p>The result set contains an array of search hits, each hit containing the tweet id, relevance score and the time. We then for each tweet id, get the original tweet status object from Voldemort and build the result json object. This is done in a Scalatra servlet: see code <a href="https://github.com/javasoze/chirper/blob/master/src/main/scala/com/linkedin/chirper/frontend/ChirperServlet.scala">here</a>.</p>
<p>This pretty much describes the system. Let&#8217;s understand some design decisions that were made:</p>
<ul>
<li>One design choice was letting the process that writes to Voldemort also be a Kafka consumer. Although this would be cleaner, we would risk a data-race where search may return hit array before they are yet added to Voldemort. By making sure it is first added to Voldemort, we can rely on it being an authoritative storage for our tweets.</li>
<li>You may have already realized Kafka is acting as a proxy for twitter stream, and we could have also streamed tweets directly into the search systems, bypassing the Kafka layer. What we would be missing is the ability to play back tweet events from a specific check-point. One really nice feature about Kafka is that you can keep a consumption point to have data replayed. This makes reindexing for cases such as data corruption and schema changes, etc., possible. Furthermore, to scale search, we would have a growing number of search nodes consume from the same Kafka stream. Kafka is written in a way where adding consumers does not affect through-put of the system really helps in scaling the entire system.</li>
<li>Another important design decision was on using Voldemort for storage. One solution would be instead store tweets in the search index, e.g. Lucene stored fields. The benefits with this approach would be stronger consistency between search and store, and also the stored data would follow the retention policy of that&#8217;s defined by the search system. However, other than the fact that Lucene stored field is no-where near as optimal comparing to a Voldemort cluster (an implementation issue), there are more convincing reasons:
<ul>
<li>We can first see the consistency benefit for having search and store be together is negligible. Actually, if we follow our assumption of tweets being append-only and we always write to Voldemort first, we really wouldn&#8217;t have consistency issues. Yet, having data storage reside on the same search system would disproportionally introduce contention for IO bandwidth and OS cache, as data volume increases, search performance can be negatively impacted.</li>
<li>The point about retention is rather valid. As search index guarantees older tweets to be expired, Voldemort store would continue to grow. Our decision ultimately came down to two points: 1) Voldemort&#8217;s growth factor is very different, e.g. adding new records into the system is much cheaper, so it is feasible to have a much longer data retention policy. 2) Having have cluster of tweet storage allows us to integrate with other systems if desired for analytics, display etc.</li>
</ul>
</li>
</ul>
<p>We tossed up what we built on <a href="https://github.com/javasoze/chirper">Github</a> (Chirper Project). As you can see, the amount of code is rather minimal, and yes, we were able to build it in one day.</p>
<p>Here is a screenshot:</p>
<p>
<div id="attachment_634" class="wp-caption alignleft" style="width: 932px"><img class="size-large wp-image-640 " title="screen-shot-2011-02-21-at-94602-pm" src="http://sna-projects.com/blog/wp-content/uploads/2011/02/screen-shot-2011-02-21-at-94602-pm-1024x640.png" alt="screen-shot-2011-02-21-at-94602-pm" width="922" height="576" />
<p class="wp-caption-text">chirper screenshot</p>
</div>
<p>As you can see, the UI is rather fancy. Read on for part 2 of 2 of this post where <a href=" http://www.linkedin.com/in/alejandrocrosa">Alejandro</a> will detail out the UI portion of this application.</p>
<p>View full post on <a href="http://sna-projects.com/blog/2011/02/build-a-distributed-realtime-tweet-search-system-in-no-time-part-12/">SNA Projects Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2011/02/build-a-distributed-realtime-tweet-search-system-in-no-time-part-12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Language System</title>
		<link>http://www.weez.com/2010/12/language-system/</link>
		<comments>http://www.weez.com/2010/12/language-system/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 03:24:56 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://www.weez.com/2010/12/language-system/</guid>
		<description><![CDATA[Package: Language System Summary: Let the user choose the application idiom Groups: Localization, PHP 5 Author: Stanescu Mihai Description: This class can be used to let the user choose the application idiom. It can scan a directory with files with texts to support different idioms and display a form select input to let the user [...]]]></description>
			<content:encoded><![CDATA[<div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Package:</div>
<div><a href="http://www.phpclasses.org/package/6655-PHP-Let-the-user-choose-the-application-idiom.html">Language System</a></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Summary: </div>
<div><span name="description">Let the user choose the application idiom</span></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Groups: </div>
<div><a href="http://www.phpclasses.org/browse/class/5.html">Localization</a>, <a href="http://www.phpclasses.org/browse/class/8.html">PHP 5</a></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Author: </div>
<div><a href="http://www.phpclasses.org/browse/author/720877.html">Stanescu Mihai</a></div>
<div style="font-weight: bold; font-size: larger; margin-top: 1ex">Description: </div>
<div>This class can be used to let the user choose the application idiom.</p>
<p>It can scan a directory with files with texts to support different idioms and display a form select input to let the user choose the idiom he prefers from a list available idioms.</p>
<p>The chosen idiom can be stored in a cookie to let the class load the respective application idiom texts.</p></div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/MnFjyEDWAS1savkbw2VdR8h1V64/0/da"><img src="http://feedads.g.doubleclick.net/~a/MnFjyEDWAS1savkbw2VdR8h1V64/0/di" border="0" ismap="true"></img></a><br/><br />
<a href="http://feedads.g.doubleclick.net/~a/MnFjyEDWAS1savkbw2VdR8h1V64/1/da"><img src="http://feedads.g.doubleclick.net/~a/MnFjyEDWAS1savkbw2VdR8h1V64/1/di" border="0" ismap="true"></img></a></p>
<p>View full post on <a href="http://feedproxy.google.com/~r/phpclasses/~3/2kC2MQREkcg/6655-PHP-Let-the-user-choose-the-application-idiom.html">PHP Classes: Latest entries</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2010/12/language-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tech Talk: Anil Madhavapeddy (Cambridge) — “Mirage: A New Multi-Scale Operating System for Clouds and Crowds”</title>
		<link>http://www.weez.com/2010/10/tech-talk-anil-madhavapeddy-cambridge-%e2%80%94-%e2%80%9cmirage-a-new-multi-scale-operating-system-for-clouds-and-crowds%e2%80%9d/</link>
		<comments>http://www.weez.com/2010/10/tech-talk-anil-madhavapeddy-cambridge-%e2%80%94-%e2%80%9cmirage-a-new-multi-scale-operating-system-for-clouds-and-crowds%e2%80%9d/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 19:30:00 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[Voldemort]]></category>
		<category><![CDATA[Anil]]></category>
		<category><![CDATA[Cambridge]]></category>
		<category><![CDATA[Clouds]]></category>
		<category><![CDATA[Crowds”]]></category>
		<category><![CDATA[Madhavapeddy]]></category>
		<category><![CDATA[MultiScale]]></category>
		<category><![CDATA[operating]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[Talk]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[“Mirage]]></category>

		<guid isPermaLink="false">http://www.weez.com/2010/10/tech-talk-anil-madhavapeddy-cambridge-%e2%80%94-%e2%80%9cmirage-a-new-multi-scale-operating-system-for-clouds-and-crowds%e2%80%9d/</guid>
		<description><![CDATA[Mirage: A New Multi-Scale Operating System for Clouds and Crowds Anil Madhavapeddy (University of Cambridge) Friday, October 22, 2010 ABSTRACT Applications run on all kinds of environments these days: multicore desktops, virtual cloud infrastructures, smart-phones, and web browsers. These diverse environments make it worth rethinking the long-term future of our software stacks; do we really [...]]]></description>
			<content:encoded><![CDATA[<p><center><iframe src="http://player.vimeo.com/video/16189862?portrait=0" width="658" height="370" frameborder="0"></iframe></center></p>
<p><em>Mirage: A New Multi-Scale Operating System for Clouds and Crowds</em><br />
<strong><a href="http://anil.recoil.org/">Anil Madhavapeddy</a></strong> (University of Cambridge)<br />
Friday, October 22, 2010</p>
<p>ABSTRACT</p>
<p>Applications run on all kinds of environments these days: multicore desktops, virtual cloud infrastructures, smart-phones, and web browsers. These diverse environments make it worth rethinking the long-term future of our software stacks; do we really want to continue bundling gigabytes of general-purpose OS software with every single cloud image? Is there any point holding onto decades-old interfaces such as POSIX any more?</p>
<p>I will introduce Mirage, a new operating system built in the statically type-safe OCaml functional language. Mirage compiles high-level functional  source code directly into a variety of targets such as:<br />
(i) small microkernels that run directly on the &#8220;bare-metal&#8221; Xen hypervisor;<br />
(ii) Javascript for web browsers; or<br />
(iii) embedded ARM devices;<br />
and of course normal operating systems such as Linux. </p>
<p>Mirage provides a consistent, simple programming API across all of these diverse backends, which makes it a powerful foundation for constructing safe, complex distributed systems across a heterogeneous set of modern compute resources such as mobile devices or cloud computing infrastructure.  Also, it&#8217;s just plain fun programming in OCaml.</p>
<p>BIOGRAPHY</p>
<p>Dr. Anil Madhavapeddy is a Senior Research Fellow at Wolfson College Cambridge based in the Systems Research Group, investigating programming models for cloud computing. Dr. Madhavapeddy was on the original team at Cambridge that developed the Xen hypervisor, and subsequently served as the senior architect and product director for XenSource/Citrix before returning to academia.</p>
<p>Prior to obtaining his PhD in 2006 from the University of Cambridge, Dr. Madhavapeddy had a diverse background in industry at Network Appliance, NASA, and Internet Vision. In addition to professional and academic activities, Dr. Madhavapeddy is an active member of the open source development community with the OpenBSD operating system, a member of the steering committee for Commercial Uses of Functional Programming, and on the boards of startup companies such as Limbe Labs and Ashima Arts.</p>
<p>View full post on <a href="http://sna-projects.com/blog/2010/10/mirage/">SNA Projects Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2010/10/tech-talk-anil-madhavapeddy-cambridge-%e2%80%94-%e2%80%9cmirage-a-new-multi-scale-operating-system-for-clouds-and-crowds%e2%80%9d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle presents upgraded Exadata system</title>
		<link>http://www.weez.com/2010/09/oracle-presents-upgraded-exadata-system/</link>
		<comments>http://www.weez.com/2010/09/oracle-presents-upgraded-exadata-system/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 21:04:02 +0000</pubDate>
		<dc:creator>Abidoon</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Exadata]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Presents]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[Upgraded]]></category>

		<guid isPermaLink="false">http://www.weez.com/2010/09/oracle-presents-upgraded-exadata-system/</guid>
		<description><![CDATA[Oracle presents upgraded Exadata system The company&#8217;s co-president has introduced an update to the Exadata system, promising greater speed and increased memory ( ZDNet UK &#8211; Application Development ) Read more on ZDNet UK]]></description>
			<content:encoded><![CDATA[<p><b>Oracle presents upgraded Exadata system</b><br />
The company&#8217;s co-president has introduced an update to the Exadata system, promising greater speed and increased memory ( ZDNet UK &#8211; Application Development )</p>
<p>Read more on <a rel="nofollow" href="http://rss.feedsportal.com/c/32424/f/469424/s/df5fe01/l/0L0Szdnet0O0Cnews0Capplication0Edevelopment0C20A10A0C0A90C210Coracle0Epresents0Eupgraded0Eexadata0Esystem0E40A0A90A1810C0Ds0Icid0F938/story01.htm">ZDNet UK</a><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.weez.com/2010/09/oracle-presents-upgraded-exadata-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

