<?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>Justin Carmony &#187; General</title>
	<atom:link href="http://www.justincarmony.com/blog/category/general/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.justincarmony.com/blog</link>
	<description>Web Designer &#38; Software Engineer</description>
	<lastBuildDate>Wed, 01 Feb 2012 04:30:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Letter to Senator Lee</title>
		<link>http://www.justincarmony.com/blog/2012/01/13/letter-to-senator-lee/</link>
		<comments>http://www.justincarmony.com/blog/2012/01/13/letter-to-senator-lee/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 19:19:47 +0000</pubDate>
		<dc:creator>Justin Carmony</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[pipa]]></category>
		<category><![CDATA[Politics]]></category>
		<category><![CDATA[sopa]]></category>
		<category><![CDATA[utah]]></category>

		<guid isPermaLink="false">http://www.justincarmony.com/blog/?p=1079</guid>
		<description><![CDATA[My letter to Senator Lee: Senator Lee, My name is Justin Carmony, and I am the C.T.O. for Dating DNA, LLC, a company that makes iPhone Apps. This is my first time writing a senator, but I feel it is important to convey my thoughts on SOPA and PIPA. We have struggled with people downloading ...


Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2008/08/28/comcast-limit-to-250gb-a-month-for-residential/' rel='bookmark' title='Comcast Limit to 250GB a month for Residential'>Comcast Limit to 250GB a month for Residential</a></li>
<li><a href='http://www.justincarmony.com/blog/2010/02/02/google-apps-dropping-ie-6/' rel='bookmark' title='Google Apps Dropping IE 6'>Google Apps Dropping IE 6</a></li>
<li><a href='http://www.justincarmony.com/blog/2008/07/21/yahoo-vs-rhapsody-why-yahoo-lost/' rel='bookmark' title='Yahoo vs. Rhapsody &#8211; Why Yahoo Lost'>Yahoo vs. Rhapsody &#8211; Why Yahoo Lost</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><em>My letter to Senator Lee:</em></p>
<p>Senator Lee,</p>
<p>My name is Justin Carmony, and I am the C.T.O. for Dating DNA, LLC, a company that makes iPhone Apps. This is my first time writing a senator, but I feel it is important to convey my thoughts on SOPA and PIPA.</p>
<p>We have struggled with people downloading our Apps from 3rd Party Websites and not paying for them. We are able to monitor and track these &#8220;cracked&#8221; apps when they connect to our services, and these &#8220;cracked apps&#8221; number in the hundreds of thousands over time. That is potentially millions of dollars in lost revenue. </p>
<p>However, I do NOT support SOPA, PIPA, or bills like it that give &#8220;blacklist&#8221; or &#8220;takedown&#8221; authority without due process.</p>
<p>Even though we struggle with piracy, these bills will do very little in preventing unauthorized distribution of copyrighted materials. However, they are extremely dangerous in terms of abuse against legitimate businesses. Even though the cost of piracy can be great, we already have tools and laws to help us minimize piracy. We work hard at providing a great service, and we&#8217;ve even successfully turned &#8220;pirates&#8221; into &#8220;legal, legitimate customers.&#8221; SOPA &#038; PIPA will do very little in helping us stop real piracy, but will also expose us to &#8220;takedowns claims&#8221; without any oversight or due process.</p>
<p>There is already testimonies on legal records of Media Companies such as Warner Music and Universal Music group admitting to using DMCA to take down content they had no copyright ownership to. Their motives instead were to silence groups being critical of them. (see &#8220;A Business Person&#8217;s SOPA Primer&#8221; &#8212; <a href="http://avoidingagoatrodeo.com/2011/12/26/a-businesspersons-sopa-primer/">http://avoidingagoatrodeo.com/2011/12/26/a-businesspersons-sopa-primer/</a>)</p>
<p>Please, as my elected representative, pull your support of SOPA. Our small business would not survive a &#8220;takedown&#8221; if a competitor used SOPA with false claims. We depend on the internet to keep us in business. I hope you can see, and understand, that due process and legal oversight should still apply to the internet.</p>
<p>Thank you,</p>
<p>Justin Carmony<br />
Utah Citizen</p>


<p>Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2008/08/28/comcast-limit-to-250gb-a-month-for-residential/' rel='bookmark' title='Comcast Limit to 250GB a month for Residential'>Comcast Limit to 250GB a month for Residential</a></li>
<li><a href='http://www.justincarmony.com/blog/2010/02/02/google-apps-dropping-ie-6/' rel='bookmark' title='Google Apps Dropping IE 6'>Google Apps Dropping IE 6</a></li>
<li><a href='http://www.justincarmony.com/blog/2008/07/21/yahoo-vs-rhapsody-why-yahoo-lost/' rel='bookmark' title='Yahoo vs. Rhapsody &#8211; Why Yahoo Lost'>Yahoo vs. Rhapsody &#8211; Why Yahoo Lost</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.justincarmony.com/blog/2012/01/13/letter-to-senator-lee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My 2011 Recap</title>
		<link>http://www.justincarmony.com/blog/2011/12/30/my-2011-recap/</link>
		<comments>http://www.justincarmony.com/blog/2011/12/30/my-2011-recap/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 02:00:20 +0000</pubDate>
		<dc:creator>Justin Carmony</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Goals]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.justincarmony.com/blog/?p=1066</guid>
		<description><![CDATA[As I look back on 2011, its been a pretty fun year technology &#038; work wise. While I have a few more draft posts to finish up, I thought I&#8217;d hit some highlights from the past year. PHP Its been a fun year with the Utah PHP Usergroup. I look forward to it each month, ...


Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2009/12/23/my-2009-technology-recap/' rel='bookmark' title='My 2009 Technology Recap'>My 2009 Technology Recap</a></li>
<li><a href='http://www.justincarmony.com/blog/2011/05/14/attending-php-tek-2011/' rel='bookmark' title='Attending PHP Tek 2011'>Attending PHP Tek 2011</a></li>
<li><a href='http://www.justincarmony.com/blog/2010/12/29/goal-for-2011-learn-c/' rel='bookmark' title='Goal for 2011: Learn C'>Goal for 2011: Learn C</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>As I look back on 2011, its been a pretty fun year technology &#038; work wise. While I have a few more draft posts to finish up, I thought I&#8217;d hit some highlights from the past year.</p>
<h3>PHP</h3>
<p>Its been a fun year with the <a href="http://uphpu.org/">Utah PHP Usergroup</a>. I look forward to it each month, and if you&#8217;re in Utah, you definitely should come. We&#8217;ve had a lot of interesting talks, such as running your app in different clouds, several MySQL Forks and NoSQL stuff. </p>
<p>I also had a great time going to my first PHP specific conference. While I&#8217;ve attended and spoken at other conferences, Tek 11 was a lot of fun. Met a lot of smart and fun people.</p>
<p>As for work, I do almost exclusively PHP work. We power the Dating DNA website and APIs using PHP. All of the Clipish Apps&#8217; APIs are powered by PHP. Alienware Arena, The GeForce StarCraft II Pro/Am Tournament, Thermaltake eSports, and a few other gaming tournaments sites, all powered by PHP. </p>
<p>I&#8217;m hoping to blog more about PHP this year. While I use it all over the place, it seems I write more about all the other pieces that interface with and support PHP.</p>
<h3>New Technologies</h3>
<p>There have been a handful of new technologies gaining traction. We&#8217;ve been using Redis in production for quite awhile now, and finding more and more uses for it. I&#8217;ve played around quite a bite with node.js, and I see some potential for augmenting PHP with it. MongoDB, CouchDB, and a few other data stores have shown a lot of potential in situations that play to their strength. I&#8217;m still a major fan of MySQL, but it&#8217;s nice to good options for things that MySQL isn&#8217;t as strong at.</p>
<h3>New Goals</h3>
<p>I&#8217;ve been working out, eating well, and such for almost 8 weeks now as well as my wife. The net effect is I&#8217;ve lost 16 pounds, and my wife has lost quite a bit too. This was done over the holidays even. We still have some ways to go to get to our goals, but we&#8217;re hoping to be successful in 2012 and hit our target goals. We&#8217;re even starting to enjoy lifting, cardio, and eating right.</p>
<p>I&#8217;m also setting the goal to blog once a week this year. I&#8217;ve tried daily, and that is just too much, but once a week is manageable. Hopefully it&#8217;ll be relating the technologies I use, to help share the cool stuff we get to use in-house.</p>
<h3>Upcoming in 2012</h3>
<p>We&#8217;re launching a new product in 2012 for Dating DNA, hopefully within a month or so. I&#8217;m also hoping to go to a few conferences this year, and perhaps speak at a few of them. Also, on the fun side of things, we&#8217;ll be going on a cruise in April, and perhaps a trip to China in September. </p>
<p>I hope everyone had an excellent 2011, and and amazing 2012!</p>


<p>Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2009/12/23/my-2009-technology-recap/' rel='bookmark' title='My 2009 Technology Recap'>My 2009 Technology Recap</a></li>
<li><a href='http://www.justincarmony.com/blog/2011/05/14/attending-php-tek-2011/' rel='bookmark' title='Attending PHP Tek 2011'>Attending PHP Tek 2011</a></li>
<li><a href='http://www.justincarmony.com/blog/2010/12/29/goal-for-2011-learn-c/' rel='bookmark' title='Goal for 2011: Learn C'>Goal for 2011: Learn C</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.justincarmony.com/blog/2011/12/30/my-2011-recap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Helping Daniel Buy A Water Buffalo</title>
		<link>http://www.justincarmony.com/blog/2011/11/27/helping-daniel-buy-a-water-buffalo/</link>
		<comments>http://www.justincarmony.com/blog/2011/11/27/helping-daniel-buy-a-water-buffalo/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 19:44:58 +0000</pubDate>
		<dc:creator>Justin Carmony</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[charity]]></category>
		<category><![CDATA[donating]]></category>
		<category><![CDATA[water buffalo]]></category>

		<guid isPermaLink="false">http://www.justincarmony.com/blog/?p=1056</guid>
		<description><![CDATA[I have a very good friend, Daniel Allen, who is living in China for 18 months for his work. It&#8217;s been very interesting to hear about how life is like in China, and how the culture is &#8220;on the other side of the world.&#8221; Well, this year for Christmas, Daniel wanted to help raise up ...


Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2008/08/12/bad-pr-the-internet-and-censorship-just-take-it/' rel='bookmark' title='Bad PR, The Internet, and Censorship &#8211; Just Take It'>Bad PR, The Internet, and Censorship &#8211; Just Take It</a></li>
<li><a href='http://www.justincarmony.com/blog/2008/12/24/merry-christmas-happy-holidays/' rel='bookmark' title='Merry Christmas &amp; Happy Holidays'>Merry Christmas &#038; Happy Holidays</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I have a very good friend, Daniel Allen, who is living in China for 18 months for his work. It&#8217;s been very interesting to hear about how life is like in China, and how the culture is &#8220;on the other side of the world.&#8221;</p>
<p>Well, this year for Christmas, Daniel wanted to help raise up $250 for&#8230; a water buffalo. Yup, thats right, a Water Buffalo.</p>
<p>What in the world for? To donate for a family in a rural. Why? From the <a href="https://secure1.heifer.org/gift-catalog/water-buffalo.html">Heifer International website</a>:</p>
<blockquote><p>A water buffalo can lead a hungry family out of poverty and give them a chance for a bright future filled with hope and free from hunger.</p>
<p>In poor Filipino villages, water buffalo from Heifer provide draft power for planting rice and potatoes, milk for protein and manure for fertilizer and fuel. A farmer can plant four times more rice with a buffalo than by hand.</p>
<p>Water buffalo haul heavy loads to the market, where the sale of extra produce brings in vital income for clothing, medicine and school. By renting their buffalo to neighbors, Heifer partner families can earn money for home improvements. And one day, those same neighbors might receive a water buffalo of their own as recipients pass on the gifts of animals and training.</p>
<p>Protein-rich milk, strength to till soil, manure to enrich the land &#8230; so many benefits. And, in turn, water buffalo are happy just to graze on coarse grasses and other plants not suitable for harvesting.</p></blockquote>
<p>So <a href="http://danielsshoefactory.wordpress.com/help-me-help-you-help-me/">Daniel wants to raise the funds for one</a>!</p>
<blockquote><p>I need your help.</p>
<p>Well actually I need your help to help me to give someone a Water Buffalo.</p>
<p>Think about it for a second. You can say you gave someone a Water Buffalo for Christmas.  You know Water Buffaloes right?</p>
<p>Like this one:</p>
<p><a href="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/11/water-buffalo.jpg"><img src="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/11/water-buffalo-300x300.jpg" alt="" title="water-buffalo" width="300" height="300" class="alignnone size-medium wp-image-1057" /></a></p>
<p>While we were in Cambodia I noticed how much of the work is still done manually. Also in the few “Real China Adventures” we have had I have been amazed at what life is like outside the cities. Don’t get me wrong the people seem happy and content. But I am sure there are places they are not. And I think we should help them.</p>
<p>So I have started a Heifer International Team, Daniel’s Shoe Factory, and I would like you to help me raise $250 to give someone in South East Asia a water buffalo.</p>
<p>Want more information: <a href="https://secure1.heifer.org/gift-catalog/water-buffalo.html">Click Here</a></p>
<p>How to help me: <a href="http://sphere.heifer.org/c.swL1KcNZLxH/b.5547921/k.86F6/Team_Search/siteapps/teampage/ShowPage.aspx?c=swL1KcNZLxH&#038;b=5547921&#038;sid=beIMLTMnGdLNJQPrHlF">Click Here</a> and join or donate.</p>
<p>I am hoping to raise $250 by Jan 1st 2012.</p>
<p>So step up. Unless you yourself are in need of a water buffalo, then no worries.</p></blockquote>
<p>So lets help Daniel buy a Water Buffalo for a family in need for this Christmas!</p>


<p>Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2008/08/12/bad-pr-the-internet-and-censorship-just-take-it/' rel='bookmark' title='Bad PR, The Internet, and Censorship &#8211; Just Take It'>Bad PR, The Internet, and Censorship &#8211; Just Take It</a></li>
<li><a href='http://www.justincarmony.com/blog/2008/12/24/merry-christmas-happy-holidays/' rel='bookmark' title='Merry Christmas &amp; Happy Holidays'>Merry Christmas &#038; Happy Holidays</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.justincarmony.com/blog/2011/11/27/helping-daniel-buy-a-water-buffalo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On the Eve of Modern Warfare 3</title>
		<link>http://www.justincarmony.com/blog/2011/11/07/on-the-eve-of-modern-warfare-3/</link>
		<comments>http://www.justincarmony.com/blog/2011/11/07/on-the-eve-of-modern-warfare-3/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 18:39:12 +0000</pubDate>
		<dc:creator>Justin Carmony</dc:creator>
				<category><![CDATA[Video Gaming]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[call of duty]]></category>
		<category><![CDATA[modern warfare]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.justincarmony.com/blog/?p=1046</guid>
		<description><![CDATA[While I do work some in the Video Game Industry, I don&#8217;t write about it very often. However, I thought I would write some thoughts on Call of Duty: Modern Warfare 3: Ultimately, I&#8217;m approaching it with a great deal of hesitation. Here is why: When you start up a Video Game, much like watching ...


Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2008/12/05/ghostbusters-the-video-game/' rel='bookmark' title='Ghostbusters &#8211; The Video Game'>Ghostbusters &#8211; The Video Game</a></li>
<li><a href='http://www.justincarmony.com/blog/2008/10/30/im-boycotting-electronic-arts-ea-games/' rel='bookmark' title='I&#8217;m Boycotting Electronic Arts (EA) Games'>I&#8217;m Boycotting Electronic Arts (EA) Games</a></li>
<li><a href='http://www.justincarmony.com/blog/2008/10/15/ea-lack-of-quality-out-of-touch/' rel='bookmark' title='EA &#8211; Lack of Quality &amp; Out of Touch'>EA &#8211; Lack of Quality &#038; Out of Touch</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>While I do work some in the Video Game Industry, I don&#8217;t write about it very often. However, I thought I would write some thoughts on Call of Duty: Modern Warfare 3:</p>
<p>Ultimately, I&#8217;m approaching it with a great deal of hesitation. Here is why:</p>
<p>When you start up a Video Game, much like watching a Movie, you will see some credits. In Modern Warfare 2, you&#8217;ll see Activision&#8217;s name, which is the Publisher, and Infinity Ward, which is the Game Development Studio. While the publisher can be involved in making (or ruining) a game, ultimately its up to the studio to produce a high quality game.</p>
<p><a href="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/11/infinity_ward.jpg"><img src="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/11/infinity_ward.jpg" alt="" title="infinity_ward" width="300" height="124" class="alignnone size-full wp-image-1048" /></a></p>
<p>However, the Infinity Ward who made Modern Warfare 2 is not the same Infinity Ward who made Modern Warfare 3. Activision fired the lead game designer and a co-founder of Infinity Ward, and about half the staff resigned soon after that. <a href="http://venturebeat.com/2010/07/10/fired-infinity-ward-founders-accuse-activision-of-running-a-police-state-in-amended-lawsuit/">They are now in a lawsuit against Activision</a> who tried to withhold 60% of the staff&#8217;s bonuses.</p>
<p>As a Developer myself, there are two things I think are critical when working on a product, <em>especially</em> a video game: Design Direction and Talented Developers. From what I&#8217;ve read on the several news stories about staff leaving Infinity Ward, the majority were Leads and Seniors developers, animators, etc. So I would say the bulk of Infinity Ward&#8217;s talent left. Why does this matter?</p>
<p>Call of Duty, Call of Duty 2, Call of Duty 4: Modern Warfare, and Call of Duty: Modern Warfare 2 were are great games. Each added on top of the other, trying new things and bringing noticeable improvements to each installment. Also, while Infinity Ward grew, many of the core team members were the same throughout the series. So you had a great team, with a lot of talent, and experience working together to make great games.</p>
<p>Meanwhile, other Call of Duty games by other studios like Treyarch, released games like Call of Duty: World at War and Call of Duty: Black Ops. While these games weren&#8217;t bad games, they weren&#8217;t ground breaking either. They felt like minor updates instead of fresh, new material. </p>
<p>So now we have an Infinity Ward with half of their staff brand new, and trying to release a game on a very tight deadline. So I wouldn&#8217;t be surprised if there are technical issues at release, especially for the PC. From all the previews I&#8217;ve ready about Modern Warfare 3, it sounds like it really is just an updated version of MW2 with new maps and a new game play mode. </p>
<p>So while the videos and images of Call of Duty: Modern Warfare 3 look impressive, and the marketing behind it is great, I&#8217;m not holding my breath. But this will be the first time I won&#8217;t be purchasing Call of Duty: Modern Warfare 3 for PC, my personal choice for playing FPS games. I&#8217;ll likely pickup a copy of it for XBox 360 so I can play with friends, but here is my prediction: </p>
<p>Critics will give it high ratings (9+), actual players will give it okay ratings (7+), but Activision and Infinity Ward will have made their biggest mistake. They will have moved from being innovators to just producers. While they might sell millions of copies of this game, and they might pump out a few more titles, they open themselves to being displaced as the leader in the future. I&#8217;m hoping that future games will be able to bring in a breath of fresh air while Activision milks their franchise into the ground.</p>
<p>Who knows, maybe I&#8217;ll be proven wrong and Modern Warfare 3 will be great. I just have my doubts, especially when you have an exodus of senior talent from a company. I&#8217;ve seen that happen before, and rarely does the company produce the same quality as before.</p>


<p>Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2008/12/05/ghostbusters-the-video-game/' rel='bookmark' title='Ghostbusters &#8211; The Video Game'>Ghostbusters &#8211; The Video Game</a></li>
<li><a href='http://www.justincarmony.com/blog/2008/10/30/im-boycotting-electronic-arts-ea-games/' rel='bookmark' title='I&#8217;m Boycotting Electronic Arts (EA) Games'>I&#8217;m Boycotting Electronic Arts (EA) Games</a></li>
<li><a href='http://www.justincarmony.com/blog/2008/10/15/ea-lack-of-quality-out-of-touch/' rel='bookmark' title='EA &#8211; Lack of Quality &amp; Out of Touch'>EA &#8211; Lack of Quality &#038; Out of Touch</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.justincarmony.com/blog/2011/11/07/on-the-eve-of-modern-warfare-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sonora Grill &#8211; Amazing, Unique Mexican Food</title>
		<link>http://www.justincarmony.com/blog/2011/11/03/sonora-grill-amazing-unique-mexican-food/</link>
		<comments>http://www.justincarmony.com/blog/2011/11/03/sonora-grill-amazing-unique-mexican-food/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 06:06:58 +0000</pubDate>
		<dc:creator>Justin Carmony</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[mexican food]]></category>
		<category><![CDATA[recommendations]]></category>
		<category><![CDATA[restaurants]]></category>

		<guid isPermaLink="false">http://www.justincarmony.com/blog/?p=1034</guid>
		<description><![CDATA[I know from running a business, the best compliment a customer can give is their referral and recommendation. So this is my best complement to Steve, Courtney, and the rest of the staff at Sonora Grill: Sonora Grill is one of the best Mexican restaurants in Utah. Not only is it great food, it is ...


Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2011/05/06/tacos-al-pastor-the-quest-begins/' rel='bookmark' title='Tacos al Pastor &#8211; The Quest Begins'>Tacos al Pastor &#8211; The Quest Begins</a></li>
<li><a href='http://www.justincarmony.com/blog/2009/09/17/great-eats-gridelis-in-ogden/' rel='bookmark' title='Great Eats: Grideli&#8217;s In Ogden'>Great Eats: Grideli&#8217;s In Ogden</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I know from running a business, the best compliment a customer can give is their referral and recommendation. So this is my best complement to Steve, Courtney, and the rest of the staff at <a href="http://www.thesonoragrill.com/">Sonora Grill</a>:</p>
<p>Sonora Grill is one of the best Mexican restaurants in Utah. Not only is it great food, it is very unique. The best way I explain to those who have never been is that it is &#8220;gourmet mexican food.&#8221; Most people I tell this to seem rather confused by this, and think it is some kind of oxymoron. When they think of Mexican restaurants, they think of those we have around here.</p>
<p>Utah, and especially Ogden, has many, many Mexican restaurants. Here is a map of the google results for &#8220;mexican restaurant ogden&#8221;:</p>
<p><a href="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/11/Ogden-Mexican-Restaurants.jpg"><img src="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/11/Ogden-Mexican-Restaurants.jpg" alt="" title="Ogden-Mexican-Restaurants" width="425" height="308" class="alignnone size-full wp-image-1035" /></a></p>
<p>Most of these restaurants are what I would call Americanized Mexican food. It can be good, but it isn&#8217;t very authentic. I lived in Mexico for two years, eating with lots of different families and at many restaurants. So I know authentic mexican food when I have it. Also, there are several restaurants locally that cater to the Latino community. They are very authentic, typically in-expensive, and pretty tasty. But many times their menu is only in Spanish, and most of my friends don&#8217;t care for the really authentic food.</p>
<p>Then, there is the Sonora Grill. Their approach is to take the authentic ingredients, flavors, and dishes of Mexico and do amazing things with them. They have a professionally &#038; classically trained chef who approaches mexican food like any other fine dining genre. They are serious about using the freshest ingredients and going above-and-beyond when it comes to preparing finely crafted dishes. They do all of this with a passion for the food, which really shows.</p>
<p>So when you go to the Sonora Grill, you get very flavorful food that each flavor is carefully balanced and blended in. It is like taking Mexican food to the next level. They will import a lot of their ingredients like spices, chiles, and cheese from Mexico so they can have the best flavors. They have some of the basics, like more generic Burritos &#038; Quesadillas, but their best dishes are their house specialties. So while it might be tempting to go with the &#8220;safe burrito,&#8221; try one of their specialties. Here are my personal favorites:</p>
<p><strong>Sweet Pork Tacos</strong> &#8211; Also know as Tacos al Pastor in Mexico, these tacos are made of pork that has been marinated for a very long time, traditionally a full day. These were my favorite tacos in Mexico. While Sonora Grill can&#8217;t cook them 100% authentic (<a href="http://www.justincarmony.com/blog/2011/05/06/tacos-al-pastor-the-quest-begins/">I&#8217;ve written about Tacos al Pastor on exactly why</a>), these tacos come as close as you can get here in the States.</p>
<p><strong>Chile Rellenos</strong> &#8211; They have a few menu items with Chile Rellenos, and I will tell you these are the best I&#8217;ve ever found. A Chile Relleno is a poblano pepper that is stuffed with mexican cheeses and sometimes other things. They are then battered and fried for a nice crisp on the outside. I <strong>love</strong> them, and recommend everyone try them at least once.</p>
<p><strong>Market Fresh Sea Food Special</strong> &#8211; I rarely get sea food unless I&#8217;m at a restaurant on the coast, but Sonora Grill does it right. It seems every week they have a new special with an in season fish that they can get and serve fresh. I&#8217;ve had some amazing dishes that were excellent that were specials. Also, they typically cost the same as a normal entre, instead of being twice as much like other restaurants. So for $15 &#8211; $18 it is a great deal.</p>
<p><strong>Chicken Chalupas</strong> &#8211; Forget what you know at Taco Bell, this appetizer has three Chalupas which have a thick corn masa base and piled on top with shredded chicken, tomatillo salsa, onions, cilantro and sour cream. They are really yummy. </p>
<p>I haven&#8217;t tried all the dishes here yet, but some others I&#8217;ve heard good things about are the Alambres (aka Fajitas) and Ceviche (specially cooked sea food). I also saw they added Pozolé, which is a great mexican soup, so I need to try that as well.</p>
<h2>Ogden&#8217;s Best Kept Secret</h2>
<p>Now, I think this is Ogden&#8217;s best kept secret: Sonora Grill&#8217;s Regional Dinners. Four to five times a year, Courtney, the chef, will select a region of Mexico and prepare a five course meal (which technically would be 7-8 courses since many times the plates will have multiple things on them). It is $32 per person, and afterwards you feel like you should have paid way more than that. This is where their passion for Mexican cuisine really shows. </p>
<p>The chef will plan the dishes weeks in advance, importing in special ingredients for just this dinner. Then, the day of the Dinner (and sometimes even days before that), the chef will spend hours and hours preparing the food. It is an opportunity for the staff to say &#8220;If the restrictions on serving a busy restaurant weren&#8217;t an issue, and we had all the time and ingredients we could ever dream of, these are the dishes we&#8217;ll make.&#8221; I&#8217;ve been to two of these dinners now, and it was <em>the absolute best</em> mexican food I&#8217;ve ever had.</p>
<p>Tonight&#8217;s dinner was for the region of Oaxaca, which is know for their Mole (pronounced &#8220;mo lay&#8221;), which is basically a sauce. It is labor intensive to make Mole, and they made not one, but five different types for tonight&#8217;s dishes. Chef Courtney spent about seven hours, since 5 AM in the morning, preparing all the different Moles. Each one was carefully and artfully prepared. I&#8217;ve never had such well-prepared Mole before, it was extremely impressive and down right yummy.</p>
<p>I took a few pictures from my iPhone during the dinner. I didn&#8217;t get all the plates, but here were some of them. Now, I really enjoy Mexican food, but I couldn&#8217;t remember all the details of each dish, so I can&#8217;t remember all the ingredients. But I do know they all tasted great.</p>
<p>The appetizers, including a very delicious mole tamale &#038; salad<br />
<a href="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/11/photo-1.jpg"><img src="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/11/photo-1-225x300.jpg" alt="" title="photo 1" width="225" height="300" class="alignnone size-medium wp-image-1036" /></a></p>
<p>A Chile Relleno stuffed with beef, pork, and black beans on a yummy tomato sauce.<br />
<a href="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/11/photo-2.jpg"><img src="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/11/photo-2-225x300.jpg" alt="" title="photo 2" width="225" height="300" class="alignnone size-medium wp-image-1037" /></a></p>
<p>Two different types of Mole with fresh corn tortillas.<br />
<a href="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/11/photo-4.jpg"><img src="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/11/photo-4-225x300.jpg" alt="" title="photo 4" width="225" height="300" class="alignnone size-medium wp-image-1038" /></a></p>
<p>A yummy fried platanos (bananas) desert.<br />
<a href="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/11/photo-5.jpg"><img src="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/11/photo-5-225x300.jpg" alt="" title="photo 5" width="225" height="300" class="alignnone size-medium wp-image-1039" /></a></p>
<p>The other dinner we attended was the Mexico City region, which had amazing Beef Tongue Tacos that tasted like Barbacoa Tacos, and Duck in an Ash mole. Both dinners were really good (though if I had to pick a favorite, I&#8217;d say the Mexico City dinner).</p>
<p>They are done with the dinners for this year, but will start them back up in the spring of 2012. They post the details on their website and Facebook. </p>
<p>So thank you, Steve, Courtney, and the rest of the gang at Sonora Grill. You can really tell that you all strive to make some serious mexican food that is great. I look forward to the Regional Dinners next year!</p>
<p>&#8211; Justin Carmony</p>
<p><a href="http://www.thesonoragrill.com/">The Sonora Grill Website</a></p>


<p>Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2011/05/06/tacos-al-pastor-the-quest-begins/' rel='bookmark' title='Tacos al Pastor &#8211; The Quest Begins'>Tacos al Pastor &#8211; The Quest Begins</a></li>
<li><a href='http://www.justincarmony.com/blog/2009/09/17/great-eats-gridelis-in-ogden/' rel='bookmark' title='Great Eats: Grideli&#8217;s In Ogden'>Great Eats: Grideli&#8217;s In Ogden</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.justincarmony.com/blog/2011/11/03/sonora-grill-amazing-unique-mexican-food/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My September 11th Rememberance</title>
		<link>http://www.justincarmony.com/blog/2011/09/11/my-september-11th-rememberance/</link>
		<comments>http://www.justincarmony.com/blog/2011/09/11/my-september-11th-rememberance/#comments</comments>
		<pubDate>Sun, 11 Sep 2011 22:22:38 +0000</pubDate>
		<dc:creator>Justin Carmony</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[patriotism]]></category>

		<guid isPermaLink="false">http://www.justincarmony.com/blog/?p=999</guid>
		<description><![CDATA[There are a lot of people will be talking today about September 11th, and the last decade that has gone by. I&#8217;m not very eloquent when it comes to this stuff, but I just wanted to share a little. I was in High School, and I remember getting off the bus and people at school ...


Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2008/12/19/xkcd-11th-grade/' rel='bookmark' title='XKCD &amp; 11th Grade'>XKCD &#038; 11th Grade</a></li>
<li><a href='http://www.justincarmony.com/blog/2009/10/03/the-lds-general-conference/' rel='bookmark' title='The LDS General Conference'>The LDS General Conference</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>There are a lot of people will be talking today about September 11th, and the last decade that has gone by. I&#8217;m not very eloquent when it comes to this stuff, but I just wanted to share a little.  I was in High School, and I remember getting off the bus and people at school were talking about some plane accident. We got to first period, and our teacher began to explain what they think happened, and the possible causes. It just seemed so unreal, like my mind couldn&#8217;t really believe it was really happening. The rest of the day, the classes tried to go on like normal, but each class had updates: the second tower was hit, the first tower had collapsed, the second tower had collapsed, etc. One class just had the TV on as we watched the news. It was an odd day. I had friends back east who were concerned for their loved ones, and it still remains a somber memory.</p>
<p>This morning started like most other sunday mornings. I was running around getting ready for church, taking care of a few things, and then I stepped outside to our neighborhood. The local Scouting program (which I had just been put in charge of) had done a simple fund-raiser: people could get for a small donation a flag placed in their yard on holidays by the scouts. Independence Day, Veterans Day, Labor Day, etc. </p>
<p>So today, when I stepped outside, I saw those flags in the yards of all our neighbors. It wasn&#8217;t one of the planned days to go out and setup the flags. Without my direction, the young men of our neighborhood thought today the flags should be placed out. So they dropped whatever they were doing before church, and went out and got the flags put in place. These few young men, who were the same age as I was when the towers fell and so many lost their lives, took their time to give a small remembrance for that day. It set the tone for me as I saw all those flags, and made me so appreciative of their service. It was a small reminder as well that we do have great young men and women growing up in our nation. They might drive me nuts sometimes, but I am grateful for their work this morning.</p>


<p>Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2008/12/19/xkcd-11th-grade/' rel='bookmark' title='XKCD &amp; 11th Grade'>XKCD &#038; 11th Grade</a></li>
<li><a href='http://www.justincarmony.com/blog/2009/10/03/the-lds-general-conference/' rel='bookmark' title='The LDS General Conference'>The LDS General Conference</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.justincarmony.com/blog/2011/09/11/my-september-11th-rememberance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Punish Everyone</title>
		<link>http://www.justincarmony.com/blog/2011/07/23/dont-punish-everyone/</link>
		<comments>http://www.justincarmony.com/blog/2011/07/23/dont-punish-everyone/#comments</comments>
		<pubDate>Sat, 23 Jul 2011 19:50:31 +0000</pubDate>
		<dc:creator>Justin Carmony</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.justincarmony.com/blog/?p=959</guid>
		<description><![CDATA[I found this little gem on Matt Mullenweg&#8217;s blog. I couldn&#8217;t agree more. No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I found this little gem on <a href="http://ma.tt/2011/07/%E2%80%AAdont-punish-everyone/">Matt Mullenweg&#8217;s blog</a>. I couldn&#8217;t agree more.</p>
<p><iframe width="560" height="349" src="http://www.youtube.com/embed/FPOezLL398U" frameborder="0" allowfullscreen></iframe></p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.justincarmony.com/blog/2011/07/23/dont-punish-everyone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL, Redis, and a Billion Rows &#8211; A Love Story</title>
		<link>http://www.justincarmony.com/blog/2011/05/23/mysql-redis-and-a-billion-rows-a-love-story/</link>
		<comments>http://www.justincarmony.com/blog/2011/05/23/mysql-redis-and-a-billion-rows-a-love-story/#comments</comments>
		<pubDate>Mon, 23 May 2011 15:20:35 +0000</pubDate>
		<dc:creator>Justin Carmony</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Dating DNA]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[scaling]]></category>

		<guid isPermaLink="false">http://www.justincarmony.com/blog/?p=923</guid>
		<description><![CDATA[This last week we pushed live a very large architecture change for Dating DNA. For those who know me, and have heard me talk about the Dating DNA Scoring System, they know how big of a problem we faced. For those who don&#8217;t know, let me give some background: The Problem With Dating DNA, our ...


Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2008/07/01/mysql-php-sql_calc_found_rows-an-easy-way-to-get-the-total-number-of-rows-regardless-of-limit/' rel='bookmark' title='MySQL &amp; PHP  – SQL_CALC_FOUND_ROWS – An easy way to get the total number of rows regardless of LIMIT'>MySQL &#038; PHP  – SQL_CALC_FOUND_ROWS – An easy way to get the total number of rows regardless of LIMIT</a></li>
<li><a href='http://www.justincarmony.com/blog/2009/01/12/mysql-40-million-rows-myisam-innodb/' rel='bookmark' title='MySQL, 40 Million Rows, MyISAM to InnoDB, 45 Minutes'>MySQL, 40 Million Rows, MyISAM to InnoDB, 45 Minutes</a></li>
<li><a href='http://www.justincarmony.com/blog/2011/04/06/restoring-large-mysql-dump-900-million-rows/' rel='bookmark' title='Restoring Large MySQL Dump &#8211; 900 Million Rows'>Restoring Large MySQL Dump &#8211; 900 Million Rows</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>This last week we pushed live a very large architecture change for <a href="http://www.datingdna.com/">Dating DNA</a>. For those who know me, and have heard me talk about the Dating DNA Scoring System, they know how big of a problem we faced. For those who don&#8217;t know, let me give some background:</p>
<h3>The Problem</h3>
<p>With Dating DNA, our goal was to display a compatibility score with <strong>every other user</strong>. This score is generated by taking two sets of answers to our 20 page survey, and running it through our algorithm. While it is super convenient for our users, this poses a problem. We wanted not only for people to be able to visit a profile and see a score, which is easy to generate a score on demand. We wanted our users to be able to <strong>browse</strong> other profiles sorted <strong>by</strong> their score with them. This requires us to <strong>pre-generate</strong> and <strong>store</strong> these scores, and then later query them.</p>
<p>So Ultimately, in theory, our &#8220;scores&#8221; data scaled at the following rate, with X as the number of registered users: </p>
<h3>X^2 &#8211; X</h3>
<p>That is at an exponential rate, which is practically impossible to scale at. The very first version of Dating DNA (before I took over the project) had about 1,500 users. The scores were stored in a single table. Every night, a &#8220;cron job&#8221; would run and get a list of every user, and loop through every possible iteration and re-generate each score. At 1,500 users that was 2,248,500 records. That is a <strong>lot</strong> for just 1,500 users. With our current user count, we would roughly have 359,999,400,000 score records. Thats <strong>359 Billion</strong> records if you don&#8217;t want to count the commas. </p>
<p>This old system of daily cron jobs broke at about 2,000 users. We would have problems with the cron job taking over 48 hours to complete, and would end up with 3 scripts running at the say time. One for today, one for yesterday, and one for the day before that.</p>
<h3>Smart Logic &#038; Threading</h3>
<p>We solved our first problem by using some common sense and smart logic. I won&#8217;t detail the lengthy measures we go through, but we can basically boil down our entire user base to an estimated top 5000 matches for any given user. If we have a heterosexual man named Joe, he doesn&#8217;t care about the hundreds of thousands of other heterosexual men who he scores a 2 or 3 with, but the heterosexual women he scores above a 6 with. So we don&#8217;t store the score for Frank, Jimmy, and Alan with Joe, but Sally, Rachael, and Tiffany. </p>
<p>The second part we solved was pre-generating scores for a user. After a User has reached a point in the survey where we have all the information we need to generate scores, and they are just filling in some miscellaneous, we put them in a queue. We then have a server process than is continuously running checking this queue, and spinning off multiple generation &#8220;threads&#8221; that crunch the data and store the score. We&#8217;ve spent a lot of time perfecting this system. Currently we typically can generate any given user&#8217;s matches in roughly 5 to 20 seconds, depending on how busy our website is. </p>
<h3>Storing The Score in MySQL</h3>
<p>The problem we now faced was the write through put of MySQL. Even through sharding and partitioning, we wanted to have a goal of sustaining 1,000 registrations per minute in a scalable and high performance manner. Which comes down to about 83,000 records per second that are either being inserted or updated. We then needed to be able to retrieve large volumes of scores just as fast.</p>
<p>I believe we could have bent MySQL to our will and got it to work, but it would be at a high cost of server power, and that cost wouldn&#8217;t scale well with our revenue stream. After we moved from the MySQL storage of the scores, I ran a query to see how many scores we were indeed storing. The final total was 950,363,992. Just 50 Million shy of one billion. It took 1 hour 49 min 38.27 sec to calculate that count. It is evidence that even though MySQL wasn&#8217;t the best choice for storing this data, it did it pretty well considering this single table was holding 90 times more data than any other table.</p>
<h3>Picking Another Solution</h3>
<p>In 2009 we started to throw around ideas for a new scoring system. I cannot stress enough when talking to others about &#8220;NoSQL&#8221; solutions the best solution for any given job is based on your data&#8217;s <strong>characteristics</strong>. User registration data needs to be treated differently than activity logging and basic stats. It might be okay to lose a few minutes of activity logging (depending on the app), but you definitely don&#8217;t want to be losing user accounts.</p>
<p>With Dating DNA&#8217;s scores, we had one great advantage. The data could be somewhat volatile, because we can always re-generate a set of matches for any given users. Of course, we didn&#8217;t want to lose <strong>all</strong> of it, because having to regenerate everyone&#8217;s scores is a major pain and extremely resource intensive. But if we lost a few minutes, anything lost could easily be regenerated. So when we started research for a solution, we were willing to sacrifice some persistance for performance. We wouldn&#8217;t be doing the same for our user registration data.</p>
<p>At first, I was contemplating building a completely in-house project to handle the data storage and retrieval of the scores. It would be a lot of work, and decided against. So I then thought about hacking together a custom solution with memcached. The idea would be a user&#8217;s set of matches would be stores in a variable in memcached. So the website and generation scripts would interface with memcached, and a server process would write inactive sets of scores (people who weren&#8217;t logged in) to a file on the disk. When they logged it and scores were being pulled and stored for that user, it would load the data from disk into memcached.</p>
<p>While the general concept was sound, the actual execution would be difficult. Memcached only supported strings for values, and we would still need some sort of database to manage which users had the data in memory vs disk, and the server process (probably just a php, python, or node.js script running continuously) would have to be running constantly, and if that broke things could get messy.</p>
<p>It boiled down too many points of failure and complexity. But it was a step in the right direction, so we kept looking for a better solution.</p>
<h3>Redis, the Advanced Key-Store</h3>
<p>I was talking with <a href="http://josephscott.org/">Joseph Scott</a>, an employee of <a href="http://automattic.com/">Automattic</a> as a Bug Exorcist (not joking, <a href="http://automattic.com/about/">his real title</a>), and he mentioned I should look into <a href="http://redis.io/">Redis</a>. He gave me a brief overview of what it was, and I shuffled that info back in my brain. I can&#8217;t remember how much longer it was before I checked out and compiled a copy of Redis, but I quickly discovered it could be a viable storage system for our scores.</p>
<p>So I spun up a virtual machine, installed Redis, and started to pound away at it. One of the things I wanted to test was the new feature (at the time) of Virtual Memory for redis. What this allowed was for Redis to make it&#8217;s own Virtual Memory on the server and store the lest recently used data to disk. When a Redis object was retrieved and it was in the VM, it would swap it back into memory, and swap older data to disk. This was just like the idea I had before with using an archaic system with memcached, but much more elegant.</p>
<p>The second thing was Redis&#8217;s support for multiple data types. So instead of having a json encoded string that held the scores and user ids for another user, we could have a hashtable or even a sorted set. It was a much more elegant solution than what we were thinking of before.</p>
<h3>Some Limitations to Redis</h3>
<p>However, there were a few limitations that we faced when implementing Redis. Redis works flawlessly with smaller sets of data. But the larger your data set, the more careful and aware you need to be about a few things that will kill your redis instance.</p>
<p>First off, with memcached, if you set a memory limit, it is a hard limit. I&#8217;ve never seen memcached use more memory than what you allow it to use. Redis, on the other hand, has soft memory limits. This is because of the way the Background Saves work so you can have persistant data. When a Background Save is issued, Redis will fork itself, and have one thread save a snapshot to the disk, and the other thread will continue to operate. In order to do this, Redis will exceed the standard memory limits, and your memory usage will go up much quicker. Once the background save is complete, it will close the forked backup process and sync the memory back to one data set. (I&#8217;m not a computer science guy, nor do I know a lot of lower level programming, so I might be describing this not 100% accurate, but this is how I envision it in my head). </p>
<p>Now, if you are not using the Virtual Memory, this isn&#8217;t that bad. However, when using Virtual Memory, the Background Saves take a great deal longer (from seconds to almost a minute or so), which isn&#8217;t too bad, but there is a catch. You will not be able to swap to the VM Disk until after the BG Save. This means that all Redis objects swaped to memory will stay in memory until after the BG Save is complete. This is because, like the memory from the fork, the Virtual Memory file is being used for the BG Save instead of the process handling requests.</p>
<p>So the one limitation we&#8217;ve encountered is we cannot run scripts that &#8220;query&#8221; large amounts of data from Redis. For example, it would be very simple to get a listing of users using the KEYS command, and then loop through the values using a HLEN to read the length. This will cause you to swap from and to the virtual memory a great deal. If a Background Save is occuring, Redis will not swap to disk until the BG Save is complete. This means if you have 10 GB of data in Virtual Memory, and you have a 1 GB instance of Redis, you will suddenly be reading gigs of data into Redis&#8217;s memory. If you are on a 2GB machine, you can easily use up all the memory on the server and then start using the System&#8217;s Swap.</p>
<p><strong>Once you start using the Operating System&#8217;s Virtual Memory, it is game over.</strong> Your Redis instance&#8217;s performance will tank, and your Background Save might not finish, and you will need to restart redis. </p>
<p>There are some ways to give Redis a &#8220;Hard&#8221; limit on memory, but we opted to configure our servers in a way that doesn&#8217;t require this. If Redis hits the memory limit, it can start throwing write operation errors, which we didn&#8217;t want.</p>
<h3>How We Configure Redis</h3>
<p>After much trial and error and testing internally, we believe we found a sweet spot. We deploy a redis server, and spin up three redis instances on a different port each. Each is configured with 4 GB of Virtual Memory using 4096 size pages, and only 256 MB of &#8220;memory&#8221; using the vm-max-memory setting. While you would think this would mean a hard limit, it is a soft limit, and more of a goal &#8220;we&#8217;ll try to only use 256 MB of memory to store the data, if we&#8217;ll exceed it if needed.&#8221; Given our patterns of usage, Redis&#8217;s actually usage fluctuates (based on ps aux&#8217;s reporting) between 640 MB to 1100 MB of RAM, depending on if a background save is being executed or not. Redis is configured to perform background saves every 10 minutes, which take about a minute to perform.</p>
<p>So between the other admin services running on the box, and the three redis instances, we use just over 3GB RAM:</p>
<p><a href="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/05/redis-instance-memory.jpg"><img src="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/05/redis-instance-memory.jpg" alt="" title="redis-instance-memory" width="602" height="230" class="alignnone size-full wp-image-926" /></a></p>
<p>The amount of CPU required is extremely low, and almost 100% from writing the background saves to the disk:</p>
<p><a href="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/05/redis-cpu.jpg"><img src="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/05/redis-cpu.jpg" alt="" title="redis-cpu" width="601" height="229" class="alignnone size-full wp-image-927" /></a></p>
<p>So what do we get in return? We estimate each instance with 256 MB of data can hold roughly 2,000 active users. So with a single server we can support 6,000 users online at any given moment. We can store the scores for roughly 360,000 users on a single 4 GB box, which is about 1.8 Billion scores. Then, if we need more, we just provision another box, and our system will start assigning users to the instances on that machine.</p>
<p>Because of our ability to re-generate the scores, we decided to only convert the users who had logged in the past three months to the new system. If a user who hadn&#8217;t logged in since then logged in again, it would in the background assign them to a redis instance and rebuild their matches for them.</p>
<h3>Using Redis with PHP</h3>
<p>I recommend currently to use the PHP Redis client <a href="https://github.com/nrk/predis">predis</a>. I&#8217;ve used others like <a href="http://rediska.geometria-lab.net/">Rediska</a>, but I prefer the straight forward approach of predis.  </p>
<p>A high level view of how we use Redis with our PHP based website is we have a class called RedisManager than manages pretty much all the connections to Redis. It supports lazy connections (which is important to us, since we don&#8217;t want to have to connect to every instance of Redis we have), and I hope to open source it some day soon.</p>
<p>One key performance trick we&#8217;ve noticed is to use Pipelining to the redis instance. We don&#8217;t use this so much on the website, but our score generation &#8220;threads.&#8221; Writing thousands of scores one by one eats up a lot of network overhead versus sending them in batches (we send in batched of 500 or 1000, depending on the situation). Using pipelining is extremely fast for us, and I highly recommend it for any large batch of commands.</p>
<h3>Using Redis Elsewhere in Dating DNA</h3>
<p>Now, it might seem that we&#8217;ve put a lot of thought and effort into using Redis, and I want to make sure it was understood that Redis itself wasn&#8217;t difficult to use, but the volume of data were were dealing with. On Dating DNA, we also use Redis to power out in-app chat system (which I&#8217;ve <a href="http://www.justincarmony.com/blog/2011/01/07/creating-chatroom-walls-with-redis-and-php/">written about previously</a>), and it works great and is currently only using 146.70 MB of RAM, and serves thousands of requests per second.</p>
<h3>The Future</h3>
<p>I still have a lot of great ideas for Redis and Dating DNA, both with the score system, and outside of it. I plan on writing several reporting tools for Redis and hope to share them on github. I am currently working on the code and scripts for automatic deployment for Redis servers for Dating DNA, so we can scale easily with the push of a button. I&#8217;m excited for the work that is being done on Redis, and highly recommend it to anyone.</p>
<p>If there are details you would like to know more about, leave a comment and I&#8217;ll try to answer them. If you see me at tek11, feel free to ask me about this, and I can show you in detail how it works (internet permitting).</p>


<p>Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2008/07/01/mysql-php-sql_calc_found_rows-an-easy-way-to-get-the-total-number-of-rows-regardless-of-limit/' rel='bookmark' title='MySQL &amp; PHP  – SQL_CALC_FOUND_ROWS – An easy way to get the total number of rows regardless of LIMIT'>MySQL &#038; PHP  – SQL_CALC_FOUND_ROWS – An easy way to get the total number of rows regardless of LIMIT</a></li>
<li><a href='http://www.justincarmony.com/blog/2009/01/12/mysql-40-million-rows-myisam-innodb/' rel='bookmark' title='MySQL, 40 Million Rows, MyISAM to InnoDB, 45 Minutes'>MySQL, 40 Million Rows, MyISAM to InnoDB, 45 Minutes</a></li>
<li><a href='http://www.justincarmony.com/blog/2011/04/06/restoring-large-mysql-dump-900-million-rows/' rel='bookmark' title='Restoring Large MySQL Dump &#8211; 900 Million Rows'>Restoring Large MySQL Dump &#8211; 900 Million Rows</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.justincarmony.com/blog/2011/05/23/mysql-redis-and-a-billion-rows-a-love-story/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Attending PHP Tek 2011</title>
		<link>http://www.justincarmony.com/blog/2011/05/14/attending-php-tek-2011/</link>
		<comments>http://www.justincarmony.com/blog/2011/05/14/attending-php-tek-2011/#comments</comments>
		<pubDate>Sat, 14 May 2011 15:24:20 +0000</pubDate>
		<dc:creator>Justin Carmony</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[speaking]]></category>
		<category><![CDATA[tek]]></category>

		<guid isPermaLink="false">http://www.justincarmony.com/blog/?p=917</guid>
		<description><![CDATA[I&#8217;m excited to say I will be attending PHP Tek 2011 in one week. This will be the first &#8220;PHP&#8221; conference I&#8217;ve attended, and hope I will learn a lot while also having some fun. It&#8217;ll be nice to meet some people who I&#8217;ve only talked to online. I&#8217;ve always wanted to attend a PHP ...


Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2010/12/29/goal-for-2011-learn-c/' rel='bookmark' title='Goal for 2011: Learn C'>Goal for 2011: Learn C</a></li>
<li><a href='http://www.justincarmony.com/blog/2009/09/16/speaking-utah-open-source-conference-2009/' rel='bookmark' title='Speaking: Utah Open Source Conference 2009'>Speaking: Utah Open Source Conference 2009</a></li>
<li><a href='http://www.justincarmony.com/blog/2010/10/07/utosc-day-one/' rel='bookmark' title='UTOSC &#8211; Day One'>UTOSC &#8211; Day One</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/05/tek11.png"><img src="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/05/tek11-300x89.png" alt="" title="tek11" width="300" height="89" class="alignright size-medium wp-image-918" /></a>I&#8217;m excited to say I will be attending PHP Tek 2011 in one week. This will be the first &#8220;PHP&#8221; conference I&#8217;ve attended, and hope I will learn a lot while also having some fun. It&#8217;ll be nice to meet some people who I&#8217;ve only talked to online. </p>
<p>I&#8217;ve always wanted to attend a PHP conference for quite some time now, but it seemed for several years either it wasn&#8217;t in the budget, or I was just too busy. But I kept hearing great things about Tek, and it&#8217;s organizers, so when the Call for Papers opened up for Tek 11 this year, I submitted. Unfortunately I wasn&#8217;t able to make it on the presenter list, so I immediately registered and booked my flights so I wouldn&#8217;t find an excuse later on to not go.</p>
<p>For those in the Utah PHP Users Group who are not able to come out with me, and other friends of mine, let me know if there is anything interesting in the <a href="http://tek11.phparch.com/schedule/">schedule</a>, and I&#8217;ll see if I can attend and take some notes for you. </p>


<p>Related posts:<ol><li><a href='http://www.justincarmony.com/blog/2010/12/29/goal-for-2011-learn-c/' rel='bookmark' title='Goal for 2011: Learn C'>Goal for 2011: Learn C</a></li>
<li><a href='http://www.justincarmony.com/blog/2009/09/16/speaking-utah-open-source-conference-2009/' rel='bookmark' title='Speaking: Utah Open Source Conference 2009'>Speaking: Utah Open Source Conference 2009</a></li>
<li><a href='http://www.justincarmony.com/blog/2010/10/07/utosc-day-one/' rel='bookmark' title='UTOSC &#8211; Day One'>UTOSC &#8211; Day One</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.justincarmony.com/blog/2011/05/14/attending-php-tek-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tacos al Pastor &#8211; The Quest Begins</title>
		<link>http://www.justincarmony.com/blog/2011/05/06/tacos-al-pastor-the-quest-begins/</link>
		<comments>http://www.justincarmony.com/blog/2011/05/06/tacos-al-pastor-the-quest-begins/#comments</comments>
		<pubDate>Sat, 07 May 2011 04:07:36 +0000</pubDate>
		<dc:creator>Justin Carmony</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cooking]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[hobby]]></category>
		<category><![CDATA[tacos]]></category>

		<guid isPermaLink="false">http://www.justincarmony.com/blog/?p=906</guid>
		<description><![CDATA[I lived in Mexico for two years when I was serving my LDS Mission. There I discovered my favorite food of all time: tacos al pastor. Also known as &#8220;Shepherds Tacos.&#8221; They were awesome. I&#8217;ve found similar tacos here in Ogden at the Sonora Grill. However, there is one problem: the food health codes in ...


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I lived in Mexico for two years when I was serving my LDS Mission. There I discovered my favorite food of all time: tacos al pastor. Also known as &#8220;Shepherds Tacos.&#8221; They were awesome. I&#8217;ve found similar tacos here in Ogden at the <a href="http://www.thesonoragrill.com/">Sonora Grill</a>. However, there is one problem: the food health codes in the USA prohibit the tradition methods of cooking tacos al pastor. Here is a traditional method of cooking:</p>
<p><a href="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/05/tacos-al-pastor-cooking.jpg"><img src="http://c747925.r25.cf2.rackcdn.com/blog/wp-content/uploads/2011/05/tacos-al-pastor-cooking.jpg" alt="" title="tacos al pastor cooking" width="499" height="333" class="alignnone size-full wp-image-909" /></a></p>
<p>The key is cooking it on the rotisserie spit. It allows for a crispy outside and juicy inside. But as listed on <a href="http://chicago.grubstreet.com/2007/11/rhyming_the_reader_tacos_al_pa.html">Grub Street Chicago</a>, there is a serious downside to this method:</p>
<blockquote><p>If the restaurant isn&#8217;t busy, your stomach will be in a tizzy: that spit meat can go bad pretty quickly, and if there&#8217;s not a lot of turnover at the taqueria, you may turn over (this has happened to us before and it&#8217;s not pretty).</p></blockquote>
<p>It takes at least 24 hours to prepare and marinate the meat, some people taking 48 or even 72 hours to prepare the meat. That means many people will prepare a very large amount of meat at a time to help save on the work. When the meat is cooking on the spit, the outside cooks much faster than the inside. So you start cutting and serving from the outside, letting the inside cook more. But if the restaurant is running slow, the inside can go bad before it is cooked.</p>
<p>The Food Safety guidelines state that you can&#8217;t start serving the meat until the entire piece of meat is finished cooking. So when Sonora Grill tried to do Tacos al Pastor, they would have to cook the entire piece of meat on the spit, and either keep it up at temperature, or cool it down and re-heat it later. This would cause the meat to dry out, and just wasn&#8217;t very good. So they changed their recipe and method of cooking. So they still taste great, but it isn&#8217;t the same.</p>
<p>Now, I won&#8217;t be preparing meat for hundreds of people, just for myself and friends. So I can plan, prepare, and cook the meat in a safe manner using the spit. So I thought &#8220;alright, I can do this myself, and have my favorite tacos.&#8221;</p>
<p>So I started researching some recipes. I found <a href="http://www.fromaway.com/cooking/tacos-al-pastor">several</a> <a href="http://www.batista.org/pastor.html">recipes</a>, and I&#8217;ve posted them at the end of this post (incase they go down, since the interent isn&#8217;t forever). </p>
<p>The second problem I face is finding a vertical rotisserie. After googling around I found out it is called a vertical broiler, and are also used in making traditional gyros. But the decent ones run about $1,000 bucks. I&#8217;m not ready to drop that kind of money on a spur of the moment feeling. So, here is my plan:</p>
<p>First, try to get the marinade down. I&#8217;ve been told this is the hardest part of making these tacos. Then, I can cook the meat in the oven and finish it on a pan. So the crispy/juicy factor won&#8217;t be quite right, but it will be pretty decent.</p>
<p>Second, there are some smaller smaller vertical rotisserie cookers for about $60-70 bucks. I figure I can try out one of these and see if it can work for making smaller batches.</p>
<p>Then, finally, if I can regularly make good tacos al pastor that are just lacking the spit, and if I am still committed, I&#8217;ll buy a vertical broiler. Then during the warm summer months I&#8217;ll be cooking my favorite tacos regularly!</p>
<p>Wish me luck!</p>
<p><span id="more-906"></span></p>
<h3>References</h3>
<h4>Recipe #1</h4>
<p>Link: <a href="http://www.fromaway.com/cooking/tacos-al-pastor">http://www.fromaway.com/cooking/tacos-al-pastor</a></p>
<p>So, how can you create this dish at home, without building your own vertical rotisserie, stacking raw marinated pork into a big pile, or hiring your own swarthy, mustachioed taquero to make your tacos? You can’t. But, you can come awfully close. Here’s how to prepare tacos al pastor at home.</p>
<p>Tacos al Pastor</p>
<p>Ingredients:</p>
<p>2 pound boneless pork loin<br />
2 Guajillo chiles<br />
1 Ancho chile<br />
1 teaspoon cinnamon<br />
1 teaspoon oregano<br />
1 teaspoon crushed whole black pepper<br />
1 teaspoon ground sea salt<br />
2 finely chopped white onions<br />
6 cloves of garlic, crushed<br />
2 teaspoons of achiote paste<br />
1 cup of pineapple juice<br />
1 white onion, diced<br />
1 handful fresh cilantro, chopped<br />
Corn tortillas<br />
Lime wedges<br />
Method:</p>
<p>Slice pork as thinly as possible, diagonally against the grain, and set aside. Rehydrate dried chilies by covering in hot water. Let soak until soft, drain water, and remove tops, seeds, and membranes from each chili. Combine with cinnamon, oregano, black pepper, sea salt, garlic, achiote paste, and pineapple juice in food processor, and pulse until thoroughly combined. Transfer pork to gallon freezer bag, and pour marinade on top. Mix to make sure all pieces are coated, and marinate, refrigerated, for 24 hours. Preheat oven to 350 degrees, and remove meat from bag. Arrange into “roll” or “loaf” shape on a baking sheet, cover with additional marinade, and cook for about an hour. The pork will still be pink, but don’t worry; finish it until cooked to your liking in a pan on the stovetop. Place a few slices of pork on a corn tortilla, and top with diced onions, cilantro, and a healthy squeeze of lime.</p>
<h4>Recipe #2</h4>
<p>Link: <a href="http://www.batista.org/pastor.html">http://www.batista.org/pastor.html</a></p>
<p>Introduction:</p>
<p>Tacos al Pastor is perhaps the best taco you could ever try. The problem is that good tacos are hard to find the United States since the recipe is such a secret.<br />
In Mexico city there are taquerias dedicated mostly or even exclusively to tacos al Pastor. Tacos al Pastor are made from pork meat that has been marinated in a secret recipe and then cooked in a rotisserie with pineapple on top. The tacos should be very small (almost like 2 bites size) and garnished with cilantro (coriander), chopped onion and the pineapple. Add your favorite hot sauce.</p>
<p>This space was empty for a long time and I apologize for it.  The recipe I started with was not bad, but it was not as good as I wanted it to be. I sent this recipe to Mexico City to be reviewed but nobody would talk much about it. Then in my last visit I wanted to have someone review it but I encountered the same problem.</p>
<p>The fact is that everyone seems to have a different list of ingredients for the marinade and nobody wants to share it.  It is after all their business to keep their recipe different and better from others as well as secret. Restaurants are sold and bought just for the value of their recipe. You get the idea? Restaurant owners have emailed me an said that there is no way the would disclose their recipe. It is a big business.<br />
Further down in the page you will find a recipe for you to try, but note that is not the real thing. The good news is that we can now sell you the real stuff in bottles, read below.</p>
<p>Below is the recipe I started with, if you experiment with it and improve on it, please tell me about it. Other ingredients mentioned to me by people are:</p>
<p>Achiote and red vinegar. Achiote can provide some color (red)<br />
Orange juice. Adds to the flavor.<br />
Coca-cola (Coke). Another recipe we make is Carne con Coca, which is pork meat cooked in Coke. Someday I&#8217;ll write it for you. It makes things taste very good and ads some sweetnes.</p>
<p>This recipe serves 4.</p>
<p>Ingredients:</p>
<p>10 chiles Pasilla<br />
10 chiles Guajillo<br />
1/2 garlic bulb<br />
1/4 litter White Vinegar<br />
1/4 tsp. Cumin<br />
5 cloves<br />
salt<br />
pineapple (fresh or canned)<br />
2 lbs thin pork meat<br />
1 onion<br />
Fresh cilantro (coriander)<br />
1 Beer<br />
2 Limes<br />
Pre-cooking:</p>
<p>Cut the pork meat in thin stakes or slices if necessary. Normally each stake would rest on top of each other while marinating and cooking.<br />
The following is the recipe for the marinade, this is a lot so you won&#8217;t have to make it very often. </p>
<p>Take the seeds out of the chiles, cut them in little pieces and mash them together with the garlic, cloves, and cumin, avoid touching the chiles and vinegar with your bare hands if possible. The vinegar and chiles can &#8220;cook&#8221; your hands, trust me. A food processor would help here.<br />
Boil the ingredients from the above step in the vinegar until it makes some sort of a heavy paste. Making sure that it won&#8217;t burn, so mix it often.<br />
Once fully cooked drink the beer while you let the marinade cool down.</p>
<p>Apply the paste to the meat putting one steak on top of the other. At a real taqueria they would form a top that eventually goes into the rotisserie. Since we do not have the rotisserie you simply pile the meat together and store in the fridge for at least 6 hours or overnight. </p>
<p>Cooking:</p>
<p>In a taqueria they would roast the &#8220;top&#8221; of meat with pineapple on top of it so that the juice gives the meat some of its flavor. The meat would be rotated constantly as the cook cuts very small slices of meat and pineapple to be served in a taco.<br />
Chop the cilantro and onion.<br />
Without a rotisserie, our only choice is to cut the pork in small bits so that it can be eaten easily in a taco.<br />
Use a frying pan and cook the meat with small pieces of pineapple making sure the pork is fully cooked and just about to burn in some cases (well roasted).<br />
Cut the limes in quarters.<br />
Serve the tacos with chopped cilantro, onion, and the limes.<br />
Tips:</p>
<p> I definitely need some (tips) this time. Or perhaps you&#8217;d like to send me a rotisserie.<br />
Squeeze a lit bit of lime juice in the taco before you eat it and add habanero salsa.<br />
If you only have large tortillas, cut them using a small plate of the size you want and a knife.<br />
For microwave, add 15 seconds per tortilla and heat them between paper napkins.<br />
Now for a totally different, radical recipe we have this, Courtesy of Jayson Mcpeak:</p>
<p>My name is Jayson Mcpeak, I am a certified chef (c.c.) through the ACF. I would like to share with you my recipe for Tacos Al Pastor.  </p>
<p>5 lb boneless pork shoulder<br />
1 lbs chorizo sausage (remove from packaging into a mixing bowl, must come to room temp)<br />
1 medium size whole pineapple skin removed (canned may be used, fresh is preffered)<br />
1/4 cup dry menudo seasoning found in most ethnic stores<br />
3 tsp kosher salt<br />
1 lime juiced</p>
<p>You will need a spit or some type of rotating cooking device for a more authintic recipe.   If using an upright spit: Thinly slice the boneless pork shoulder roughly 1/4 inch thick, lightly brush on lime juice to the meat, starting with the largest slice on the bottom while working your way up, mix the dry ingredients togeter in a shallow pan, lightly dust the bottom piece first, then spear the slice onto the spit. Now generously hand smear the chorizo to the top of the slice, besure to reserve enough to finish the job. Repeat all steps until done. Now top the fully loaded spit with the pineapple, begin cooking. Besure to collect all drippings and rebaste using these very flavorfull tidbits. Depending on your heat source cooking time may vary. However you may slice the outer portions as soon as they reach a proper temp of 165*   For a horizontal spit: follow all prep methods above, except for the meat layout and pineapple setup. Starting with the smallest slice getting bigger in the middle and smaller at the end. Make sure to use a foil drip catch under the meat. Crushed pineapple may be used here alternating between slices, use lightly. </p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.justincarmony.com/blog/2011/05/06/tacos-al-pastor-the-quest-begins/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using memcached
Database Caching 36/130 queries in 0.048 seconds using memcached
Content Delivery Network via Rackspace Cloud Files: c747925.r25.cf2.rackcdn.com

Served from: www.justincarmony.com @ 2012-02-07 23:28:11 -->
