<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Part Man, Part Zilla, 100% Grade ‘A’ Nerd</description><title>LeeZilla.net</title><generator>Tumblr (3.0; @leezilla)</generator><link>http://www.leezilla.net/</link><item><title>The Arduino Pro Mini in all of it’s glory.

I have used...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_lzkfewOmqk1qil0qro1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;h4&gt;The Arduino Pro Mini in all of it’s glory.&lt;/h4&gt;

&lt;p&gt;I have used various Arduino’s for projects and recommend them. The smallness of the Pro Mini is just shocking though.&lt;/p&gt;</description><link>http://www.leezilla.net/post/17796868620</link><guid>http://www.leezilla.net/post/17796868620</guid><pubDate>Fri, 17 Feb 2012 17:42:00 -0800</pubDate><category>arduino</category><category>electronics</category></item><item><title>A more succinct definition I have never heard</title><description>&lt;blockquote&gt;
  &lt;p&gt;With RISC, though, every instruction is 4 bytes: the chip knows that every 4 bytes, it can expect to see a new instruction. It doesn’t have to work as hard figuring out the grammar.&lt;cite&gt;John Brownlee&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;John&amp;#8217;s entire piece is an excellent read and worthy of your time. The above paragraph just blew me away. Over the years I&amp;#8217;ve worked down deep in the CPU on both x86 CPU&amp;#8217;s (286 FOREVER!) and both MIPS and Dec Alpha CPU&amp;#8217;s. In that time I have never really thought threw the non-techno jargon for the difference between CISC and RISC.&lt;/p&gt;

&lt;p&gt;Until the iPad came out. Now I have my de facto answer, as well as a fabulous article to refer anyone that asks back to.&lt;/p&gt;</description><link>http://www.leezilla.net/post/17597678152</link><guid>http://www.leezilla.net/post/17597678152</guid><pubDate>Mon, 13 Feb 2012 22:25:55 -0800</pubDate><category>risc</category></item><item><title>On the experience of Apple and Safeway</title><description>&lt;p&gt;Apple is rarely on record discussing company strategy, direction or goals. They tend to let the products demonstrate what they are about. There have been a number of times that Steve Jobs (and now Tim Cook) has slipped little bits out though, and they always paraphrase down to something like:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Put the end user first.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Like so much about Apple, it is amazingly simple and impossibly complex all at the same time. It can be complex to develop around, but at retail it usually means a couple of things. Training and empowerment.&lt;/p&gt;

&lt;p&gt;Today I was at my local Safeway, getting some items from the deli. I found a company that is going the opposite way with things. The couple in front of me in line had to leave the deli and stand in a standard cashier line because they had a case of soda and bag of chips to go with their fried chicken. They asked why they couldn&amp;#8217;t check out here, as it was only them and me in line and the deli. I was even being helped by another employee at the time.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It&amp;#8217;s a new corporate policy, if you have non-deli items I cannot ring you up at the deli&lt;cite&gt;Patient Safeway Employee&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After hearing this conversation, I asked the employee helping me with my own order about it. He confirmed that this was a new policy handed down from high above. Service at the deli had experienced some number of issues with customers bringing large sets of non-deli groceries to the deli cashier. Rather than training and empower staff to handle this situation in a manner appropriate to conditions, management decided to castrate their employees and put a policy in place that will &lt;strong&gt;not&lt;/strong&gt; be applicable 99% of the time.&lt;/p&gt;

&lt;p&gt;By pushing this policy down, management has told staff &amp;#8220;You are not capable of handling basic customer service, we do not respect you.&amp;#8221; I can&amp;#8217;t help but feel like this is the kind of decision made by someone that has never met their customer and does not care about developing a long standing relationship with them.&lt;/p&gt;

&lt;p&gt;I find it very weird that I found myself thinking about Apple retails stores after this experience. I&amp;#8217;ve seen Apple employees make &lt;strong&gt;horrible&lt;/strong&gt; short term business decisions (honoring long expired warranties for example) in order to foster long term relationships. They do this because Apple trains the hell out of them and gives them the power to make those types of decisions.&lt;/p&gt;</description><link>http://www.leezilla.net/post/17132511949</link><guid>http://www.leezilla.net/post/17132511949</guid><pubDate>Sun, 05 Feb 2012 18:35:17 -0800</pubDate><category>apple</category><category>safeway</category><category>retail</category><category>training</category><category>customer service</category></item><item><title>"That is Schrödinger’s Joke. You can know either the setup or the punchline, but not both."</title><description>“That is Schrödinger’s Joke. You can know either the setup or the punchline, but not both.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;LeeZilla&lt;/em&gt;</description><link>http://www.leezilla.net/post/17067833562</link><guid>http://www.leezilla.net/post/17067833562</guid><pubDate>Sat, 04 Feb 2012 18:43:05 -0800</pubDate></item><item><title>How to Lose a Guy [Market Lead] in 10 Days [4 Years]</title><description>&lt;blockquote&gt;
  &lt;p&gt;We’ve made a lot of changes in the past 18 months. Not changes, but also evolution. I changed a lot of my management team, in hardware, software &amp;#8230; I’ve trained a lot of other people in the last four years. What do you think I did?&lt;cite&gt;Thorsten Heins&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Wow. Just, wow. RIM spent 4+ years falling from market leader to market punchline, and these two gentlemen finally decide to jump ship.&lt;/p&gt;

&lt;p&gt;Did I say &lt;strong&gt;falling&lt;/strong&gt; from market leader? I should have said &lt;strong&gt;stagnating&lt;/strong&gt; from market leader.&lt;/p&gt;

&lt;p&gt;Stagnation within RIM started in the earlier part of last decade. The last (and first) great idea after push-mail was BBM, and that was somewhere around 2006. BBM is really the only end-user feature that has been fully backed and worthy of usage. Every other consumer-oriented feature in the RIM line is lazy and sloppy.&lt;/p&gt;

&lt;p&gt;To me, RIM&amp;#8217;s troubles go right to the root of product design. When you design a product for a specific market you have massively limited your appeal. BlackBerry wasn&amp;#8217;t a success because people liked the product, they liked the experiences that BlackBerry enabled. Beyond that their design was based around the needs of a market (enterprise) rather than the end user (human).&lt;/p&gt;

&lt;p&gt;In the phone / portable market it seems that when you have devices geared towards humans in a broad sense, you can always add specific market appeal via software (&lt;em&gt;obviously&lt;/em&gt; there are some exceptions). That being the case, products that humans enjoy using will be the most successful over any period of time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;caugh iphone caugh&lt;/strong&gt;&lt;/p&gt;</description><link>http://www.leezilla.net/post/16338770560</link><guid>http://www.leezilla.net/post/16338770560</guid><pubDate>Sun, 22 Jan 2012 22:30:00 -0800</pubDate><category>to little to late</category></item><item><title>‘Is the iPad a PC?’</title><description>&lt;p&gt;&lt;a href="http://brooksreview.net/2012/01/ipad-pc/" target="_blank"&gt;Ben Brooks&lt;/a&gt; turned me on to an article by &lt;a href="http://www.asymco.com/2012/01/12/is-the-ipad-a-pc/" target="_blank"&gt;Horace Dediu&lt;/a&gt; today.  I present the quotable:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&amp;#8220;One wonders if these “media tablets” are not PCs and yet they negatively affect the purchase of PCs whether they are indeed competing with PCs.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I often find myself talking to great ends about the nature of Apple&amp;#8217;s success. It seems that there are a &lt;strong&gt;vast number&lt;/strong&gt; of reasons they succeed, and one of them is understanding their market.&lt;/p&gt;

&lt;p&gt;PC manufacturers (and I lump Microsoft in here) have it in their heads that people want to buy PC&amp;#8217;s. It turns out that people don&amp;#8217;t want to buy PC&amp;#8217;s, and they never did. No customer wanted an IBM XT or an Apple II, they wanted VisiCalc or Oregon Trail. They want the applications, the media and the experiences that the PC enables.&lt;/p&gt;

&lt;p&gt;Take a moment and consider the ramifications of that vantage point. &lt;strong&gt;People don&amp;#8217;t want PC&amp;#8217;s, they want the experiences they enable.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where Apple has long succeeded. It is why Steve Jobs pursued the Macintosh, with it&amp;#8217;s GUI and mouse. Reduce the barrier to using a computer, advance the world out of the terminal prompt. The iPad is an evolution of that, and it took Steve Jobs many years to clarify his thinking. To quote the man himself:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it’s worth it in the end because once you get there, you can move mountains.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If adding a GUI and a mouse to the Macintosh all those years ago enabled customers that much of a revolution to the experience, what did the iPad represent? It almost directly connects us to the experience. We have directly added another dimension to how we interact with these &lt;strong&gt;things&lt;/strong&gt;. In the pre-iPad times we experienced our applications and media with our eyes and our ears. We now physically touch our media and applications.&lt;/p&gt;

&lt;p&gt;We use our hands to experience the world. Touch is the very first of our senses, from almost the moment of zygote (&lt;em&gt;slight&lt;/em&gt; exaggeration of course) we can sense through our skin. When we enter the world, we might see something first but we grab it in our hands and explore it with touch in order to fully know the new object. Touch is a &lt;strong&gt;powerful&lt;/strong&gt; way to relate to an object, and most users anthropomorphize their iPads and iPhones because of this relationship.&lt;/p&gt;

&lt;p&gt;iPads are impacting PC sales because nobody ever wanted a PC. Now that there is something genuinely &lt;strong&gt;BEYOND&lt;/strong&gt; what a PC is and can do, why would anyone go back?&lt;/p&gt;</description><link>http://www.leezilla.net/post/15763184399</link><guid>http://www.leezilla.net/post/15763184399</guid><pubDate>Sat, 14 Jan 2012 08:46:16 -0800</pubDate></item><item><title>Apple Mini-Stores</title><description>&lt;p&gt;Paul Thurrott &lt;a href="http://www.winsupersite.com/article/paul-thurrotts-wininfo/wininfo-short-takes-january-13-2012-141890" target="_blank"&gt;offered up this gem today&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Oh good, I was just thinking that what this country needs is more Apple Stores. I have an idea: Rather than build all this crap, why doesn&amp;#8217;t Apple just unilaterally make each of its products available for 25 percent less than the current selling price? It would save money, raise market share, and benefit the millions of people who can&amp;#8217;t actually afford all this stuff to begin with.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I love this kind of link-bait punditry. It reads good, it&amp;#8217;s sensationalistic and it&amp;#8217;s batshit wrong. A massive portion of Apple&amp;#8217;s success has been creating a retail environment completely foreign to consumers. The pre and post purchase experience of owning an Apple product is &lt;strong&gt;part&lt;/strong&gt; of the product itself. A big part of Apple&amp;#8217;s strategy is not to sell a product, it is to create a customer.&lt;/p&gt;

&lt;p&gt;What Paul is really suggesting is going the route Dell did. Dell products suck. Dell products suck. I hated supporting them in the datacenters I worked in and on the desktops as a user. Apple has a vision that is proving to be what the public wants, and the have the management team to continue to refine and improve an already world-class ecosystem.&lt;/p&gt;</description><link>http://www.leezilla.net/post/15784794091</link><guid>http://www.leezilla.net/post/15784794091</guid><pubDate>Fri, 13 Jan 2012 11:29:58 -0800</pubDate><category>apple pundit</category></item><item><title>EE, MSM and Datagrab</title><description>&lt;p&gt;Over the weekend, twitter user &lt;a target="_blank" href="http://twitter.com/#!/audiopleb"&gt;@audiopleb&lt;/a&gt; ran into issues importing data to Expression Engine MSM sites via Datagrab. This is something we have a huge amount of experience in back at the office. That is to say, migrating data between sites (Non-EE -&amp;gt; EE and EE -&amp;gt; EE) is something of a specialty of mine.&lt;/p&gt;
&lt;p&gt;One of the issues I&amp;#8217;ve noticed with Datagrab (indeed, other add-ons as well) is how they deal with MSM sites. Datagrab for example uses this parameter to do a lot of it&amp;#8217;s internal MSM handling:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    $this-&amp;gt;EE-&amp;gt;config-&amp;gt;item('site_id')&lt;/code&gt;

&lt;/pre&gt;
&lt;p&gt;This seems to mean that if you are accessing the control panel via http://site_1/system, then site_id will always be &lt;strong&gt;1&lt;/strong&gt;. For some reason, possible depending not the version of EE/MSM/Datagrab, changing the site via the CP drop down does NOT update the site_id value (at least according to Datagrab). My workaround has been to access the CP via the secondary sites URL. For example, use http://site_2/system. This seems to get things where they want to be.&lt;/p&gt;
&lt;p&gt;All you really need to do to make this happen is put a copy of /admin.php somewhere under site_2. I use this structure for my sites:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;/ee_system/&lt;/strong&gt; - site_1 system&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/html/&lt;/strong&gt; - site_1 web root&lt;/li&gt;
&lt;li&gt; 
&lt;ul&gt;&lt;li&gt;/html/sites/
&lt;ul&gt;&lt;li&gt;/html/sites/site_2/
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;/html/sites/site_2/dashboard/index.php&lt;/strong&gt; - site_2 version of admin.php&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Edit the site_2 version of admin.php to point all the way back to your main EE System folder via the $system_path variable. Mine looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    $system_path = '../../../../ee_system';&lt;/code&gt;

&lt;/pre&gt;
&lt;p&gt;This keeps things nice and relative for easy migrations. I&amp;#8217;m sure there is a solid explanation for this occasional behavior, but every the I&amp;#8217;ve hit it I have been deep into a time-sensitive work. Some day I would love to understand why this happens, and why my work-around (aka, dirty hack) seems to work so consistently.&lt;/p&gt;</description><link>http://www.leezilla.net/post/12475341735</link><guid>http://www.leezilla.net/post/12475341735</guid><pubDate>Mon, 07 Nov 2011 11:04:44 -0800</pubDate><category>Expression Engine</category><category>expressionengine</category><category>ee</category><category>eecms</category><category>msm</category><category>multi site manager</category><category>datagrab</category><category>dirty hack</category></item><item><title>Google and the patent double talk</title><description>&lt;p&gt;Care of &lt;a target="_blank" href="http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2011/11/05/BUQP1LQN3V.DTL"&gt;SFGate.com&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It&amp;#8217;s fair to say that one of the most effective ways to respond to a threatened patent assertion is to be able to assert patents of your own.&lt;/p&gt;
&lt;p&gt;- Tim Porter, Google Patent Council&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So then the plan is to:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Like what the iPhone is doing&lt;/li&gt;
&lt;li&gt;Do a half-ass implementation of that thing you liked&lt;/li&gt;
&lt;li&gt;Shit-talk the patent system when the thing you stole gets noticed by who you stole it from&lt;/li&gt;
&lt;li&gt;Get your hardware partners sued from now to the end of time&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;At least they don&amp;#8217;t have a corner on anything important, like information storage, indexing, searching and presentation.&lt;/p&gt;
&lt;p&gt;Shit.&lt;/p&gt;</description><link>http://www.leezilla.net/post/12456762573</link><guid>http://www.leezilla.net/post/12456762573</guid><pubDate>Sun, 06 Nov 2011 20:35:00 -0800</pubDate><category>google</category><category>patent</category><category>apple</category><category>iphone</category><category>android</category><category>litigation</category></item><item><title>AB Seeing your sites performance</title><description>&lt;p&gt;The subject of Expression Engine Snippets versus EE Embeds was recently brought back to my mind by &lt;a target="_blank" href="http://twitter.com/#!/qbmarketing/status/132542155599265792"&gt;Jean St-Amand&lt;/a&gt; on Twitter yesterday. It has been some time since I&amp;#8217;ve thought about the matter, so this got me thinking a bit more about EE performance. First, some background on how we got sideways and how we solved it. Then some zen learnings at the end.&lt;/p&gt;



&lt;p&gt;At the office, we are now on the 3rd major version of our core web product. The second version of that product was our first EE project as a team, and my first EE project ever. I am fortunate to have come in with EE 2.1.0, and I was hooked right away. It was one of the more complex systems my partner in crime has built on EE, containing over 7,000 entries at the time we did the initial build (now well over 10,000 entries). We used every trick in the book to build this thing out, and by every trick I mean every WRONG way. Related entries for every entry, categories by NAME as part of our URL structure, and my LORD did we have some embeds. Our home page must have embedded 4 levels deep at a minimum. Some of those embeds went out and performed relationship lookups to then perform a 5th level of embeds.&lt;/p&gt;



&lt;p&gt;Looking back at the pingdom records, page response time had pass the 5.7 second mark. &lt;strong&gt;5.7 seconds&lt;/strong&gt;. There are cars that could go 0-60 mph in that time. TWICE. AB testing from a good solid cable broadband connection showed a number closer to 11 seconds. ELEVEN. Once we factored in a normal user internet connection our response time almost doubled. I was embarrassed. The smallest site (by unique visitors) I had worked on in quite some time and it was performing this poorly? We started upgrading hosting. Then migrating. Then out came Varnish. I&amp;#8217;m not saying that Varnish is a bad tool, but by this point I knew I was just hiding the root cause. By this point I had learned enough about EE to understand the error of my ways. Vint Cerf gave me the look of a disappointed grandparent.&lt;/p&gt;



&lt;p&gt;I bring up Varnish for a reason. It&amp;#8217;s good. Use it. Or Memcached. Or both. I don&amp;#8217;t care how clean your architecture is, how fast your server. Even small amounts of traffic will clog things up on smaller VPS hosting or low-end dedicated stuff. Varnish keeps traffic from even getting into your AMP stack. Memcached can help keep things out of PHP and MySQL. Learn them. Use them. &lt;a target="_blank" href="http://gristlabs.com/ironcache/"&gt;IronCache makes playing with Memcached simple&lt;/a&gt;, I highly recommend it. The Grist Labs team is awesome.&lt;/p&gt;



&lt;p&gt;In the recent past we had enough time to both redesign and refactor this core site. Combining over a year of EE learnings along with a better understanding of our product and customer combined powers to generate a much better product. Everything was turned into snippets. As a rule we avoided any embeds. Ditto for any type of relationship field. We found some exceptions to the embed rule, but held firm to the relationships issue. Embeds became a tool ONLY for exposing integral data and not just for making our code &amp;#8220;look clean&amp;#8221;. We worked hard to understand when and where an embed was needed and when other strategies solved the problem.&lt;/p&gt;



&lt;p&gt;The numbers tell the story. The problem version had 56 embeds in our global includes template group. The new version has 14. These 14 are also infrequently used in our code. We plan on replacing a lot of these 14 with jQuery tricks in order to take the direct embed out of EE. That will make an interesting write-up of it&amp;#8217;s own when finished.&lt;/p&gt;



&lt;p&gt;AB testing from a normal user connection followed this line of performance:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;Version 2 - Bare System: &lt;strong&gt;11 seconds&lt;/strong&gt;&lt;/li&gt;&#13;
&lt;li&gt;Version 2 - Varnish: &lt;strong&gt;0.8 seconds&lt;/strong&gt; &lt;em&gt;wow, Varnish is cool!&lt;/em&gt;&lt;/li&gt;&#13;
&lt;li&gt;Version 3 - Bare System: &lt;strong&gt;1.2 seconds&lt;/strong&gt; &lt;em&gt;wow, Snippets are cooler than Varnish!&lt;/em&gt;&lt;/li&gt;&#13;
&lt;li&gt;Version 3 - Memcached: &lt;strong&gt;0.6 seconds&lt;/strong&gt;&lt;/li&gt;&#13;
&lt;/ul&gt;&lt;p&gt;Those are some telling numbers. As I said before, use either Varnish or Memcached. Use both if you need, they are NOT mutually exclusive. After refactoring into Version 3, our site performance almost caught up to Version 2 with Varnish. Note that our data structure changed in just one way: Removal of all relationships. We used two relationships on the site, but they were used on almost every single page. Worse, each relationship was usually used to feed an embed. Terrible combination there.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;The Zen Learnings&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Test early and test often. In the traditional software world (think C++ or Java) testing is done at nearly every stage. My best developers always turned out code that was performance tuned. You do this by testing performance on each component as well as testing performance on the integrated whole. This can be done and SHOULD be done with web development as well. I feel ignorant for not doing this the first go around. How to test? &lt;a target="_blank" href="http://httpd.apache.org/docs/2.0/programs/ab.html"&gt;AB&lt;/a&gt; is the standard tool for simulating load. Combine this with server utilization numbers (I use &lt;strong&gt;sar 4&amp;#160;5&lt;/strong&gt;) and you have a winning combination.&lt;/p&gt;



&lt;p&gt;How do you run the test? AB makes it easy, and it should be a standard install on Linux systems as well as Mac OS X. You run it like this:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;ab -n 500 -c 20&amp;#160;&lt;a href="http://www.mydomain.com/" target="_blank"&gt;http://www.mydomain.com/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Pretty straight forward so long as you know that:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;&lt;strong&gt;-n 500&lt;/strong&gt; means to snag the requested URL 500 times (-n, number, get it?)&lt;/li&gt;&#13;
&lt;li&gt;&lt;strong&gt;-c 20&lt;/strong&gt; means to run 20 gets at a time (-c is concurrency)&lt;/li&gt;&#13;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.mydomain.com/" target="_blank"&gt;http://www.mydomain.com/&lt;/a&gt;&lt;/strong&gt; is the target URL to get. I seem to need the trailing &lt;strong&gt;/&lt;/strong&gt; on this to make AB happy.&lt;/li&gt;&#13;
&lt;/ul&gt;&lt;p&gt;When do you test? All the time. Continuously. Test each Snippet, embed and template individually then after integrating them. Create a template that just contains a single snippet with just enough supporting EE code to test what is inside of that snippet. Use preload:replace to test embeds. Test every time you think you are &amp;#8220;done&amp;#8221; with a feature. Test against your local dev machine. Test against production. Test, test test test and test some more.&lt;/p&gt;



&lt;p&gt;There isn&amp;#8217;t a magic bullet for knowing when your code is fast enough or clean enough. Indeed it is easy to assume it IS fast enough. Always challenge that assumption. It will make you think cleaner and clearer about what you are trying to do. It will force you to learn things you didn&amp;#8217;t know existed. It will cause you to see the world from your end-users perspective. One last bit of zen advice I learned in my performance seeking adventures:&lt;/p&gt;



&lt;blockquote&gt;&lt;strong&gt;Not all fast websites are good, but all good websites are fast.&lt;/strong&gt;&lt;br/&gt; - Me, right now&lt;/blockquote&gt;</description><link>http://www.leezilla.net/post/12377053779</link><guid>http://www.leezilla.net/post/12377053779</guid><pubDate>Sat, 05 Nov 2011 10:47:00 -0700</pubDate><category>Expression Engine</category><category>expressionengine</category><category>performance</category><category>lamp</category><category>ee</category><category>ab</category><category>snippet</category><category>embed</category><category>varnish</category><category>memcache</category><category>memcached</category><category>ironcache</category></item><item><title>MSM and the mysterious Logout issue</title><description>&lt;p&gt;On the &lt;a title="EECMS Zone" target="_blank" href="http://twitter.com/#!/search/eecms"&gt;#EECMS&lt;/a&gt; zone of the Twitterz today, Matt Everson of &lt;a title="Super Awesome Web Design!" target="_blank" href="http://astuteo.com/"&gt;Astuteo&lt;/a&gt; was having a problem with MSM and mysterious logout issues. His reasoning was that this cropped up with EE 2.3.x, but I have seen it as far back as 2.1.0. The solution is simple enough. Via the control panel visit Admin -&amp;gt; Security and Privacy -&amp;gt; Cookie Settings. You need to set the Cookie Domain as appropriate. For me I wildcard it out a bit, like this:&lt;/p&gt;
&lt;p&gt;.mydomain.com&lt;/p&gt;
&lt;p&gt;Repeat this once for each MSM site under the install. Problem solved? Good. Now, why is this the solution? When a cookie is issued to the client browser, it is tied to that Cookie Domain value. That is really the root of identity for each cookie. After the domain, you then have the Cookie Path and the Cookie Name.&lt;/p&gt;
&lt;p&gt;The next bit of knowledge that helps build on the understanding here is that EE manages your login based on a Session ID number. That Session ID number is stored in a cookie named exp_sessionid. This is a simplified way to think of the cookie that results from a control panel login:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[cookie domain].[cookie path].[cookie name] = [cookie value]&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If we login to Site_1 of an MSM install, we might get something like this:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[.mydomain.com].[/].[exp_sessionid] = 123456789&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It is important to note that EE will use the domain for the FIRST of the MSM sites if no configured value is set for Cookie Domain across all sites. That means if you then logged in to Site_2, you get a new cookie with the new Session ID. That cookie would have the EXACT SAME identity tree, and would then overwrite the cookie set by Site_1. Now there is no longer a way for Site_1 and your browser to track the session you are with on the server and you are logged out.&lt;/p&gt;
&lt;p&gt;Setting that unique Cookie Domain will allow you to have multiple cookies with differing domains but the same name (exp_sessionid). Since nothing gets overwritten once this is setup you are able to keep your login working.&lt;/p&gt;</description><link>http://www.leezilla.net/post/12273600377</link><guid>http://www.leezilla.net/post/12273600377</guid><pubDate>Wed, 02 Nov 2011 21:22:56 -0700</pubDate><category>eecms</category><category>expressionengine</category><category>expression engine</category><category>cookie</category><category>cookie domain</category><category>logout</category></item><item><title>Looping through the Matrix</title><description>&lt;p&gt;Anyone out there use ExpressionEngine? Okay, settle down. Anyone use Pixel &amp;amp; Tonic&amp;#8217;s Matrix field type? Likely that the same number of people just raised their hands. Now, how many of you custom-dashboard-matrix-using-expression-engine developers also use jQuery?&lt;/p&gt;
&lt;p&gt;That should have been everyone as well.&lt;/p&gt;
&lt;p&gt;One of the challenges we run into at the office is looking at the values of a Matrix field to compute, compare or validate on. For example, one might have a matrix with this format column format:&lt;/p&gt;
&lt;p&gt;Item Description | Price&lt;/p&gt;
&lt;p&gt;Very simple data entry example. Item and Price. At any time you might want to get an updated Total Price number to the end user. Looping over the entire Matrix is the pain point we found a nice solution to. Take this jQuery snippet as our reference bit:&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;    $('div#field_id_106 textarea.matrix-textarea[name^="field_id_106[row_"]').filter('[name*="[col_id_38]"]').each(function() {
        // Do some cool stuff here with the data. Access the local cell with
        // $(this).val()
    });
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The jQuery warriors among us are saying &amp;#8220;Well, yeah, duh!&amp;#8221;. The rest of us are looking at Sanskrit. The magic are the &lt;strong&gt;name^=&lt;/strong&gt; and the &lt;strong&gt;name*=&lt;/strong&gt; selectors. First, we select down to the Matrix we care about. In my example, it is contained inside of div#field_id_106. Next I select down to the textarea stuff, since the fields I care about here happen to be textarea fields. Now for some magic.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;[name^="field_id_106[row_"]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The operator ^ after the name attribute tells us that the selector we are isolating down to must &lt;strong&gt;START&lt;/strong&gt; with the string &lt;strong&gt;field_id_106[row_&lt;/strong&gt; in order to be included. Stopping at the &lt;strong&gt;row_&lt;/strong&gt; is a trick that really made this useful for us. Both NEW matrix rows as well as UPDATE matrix rows (existing values in place) will contain this. You won&amp;#8217;t need to know anything about the matrix you are looking at in order for this selector to work.&lt;/p&gt;
&lt;p&gt;Last I add the &lt;strong&gt;.filter()&lt;/strong&gt; to our object. This filters further to look at a specific column in the Matrix. I take advantage of the * operator here (can contain ANYWHERE), and I look for the &lt;strong&gt;[col_id_38]&lt;/strong&gt; string in the name attribute. We wrap it up with the &lt;strong&gt;.each()&lt;/strong&gt; call, and now we have a nicely set loop. Within the loop we can get to our cell values with:&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;$(this).val()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There are going to be a lot of ways to slice this turkey, and I would love to hear from anyone else that has faced this issue. Are there even cleaner ways to get into the Matrix cells via jQuery?&lt;/p&gt;</description><link>http://www.leezilla.net/post/12271914945</link><guid>http://www.leezilla.net/post/12271914945</guid><pubDate>Wed, 02 Nov 2011 20:32:26 -0700</pubDate><category>eecms</category><category>expressionengine</category><category>matrix</category><category>safecracker</category><category>jquery</category><category>expression engine</category><category>pixel &amp;amp; tonic</category><category>selector</category></item><item><title>The myth of the overnight success: App Store Edition</title><description>&lt;p&gt;Today &lt;a title="Casino or Gold Mine" target="_blank" href="http://www.fastcompany.com/1792313/striking-it-rich-in-the-app-store-for-developers-its-more-casino-than-gold-mine"&gt;Chris Steven posted an essay&lt;/a&gt; (or rather, a marketing piece for his book) on the randomization of success rates in the App Store. As a current and former App developer, as well as a long time commercial software developer, I do not like his Casino analogy. As a long time gambler, I also don&amp;#8217;t like being reminded that there isn&amp;#8217;t a way to &amp;#8220;beat the casino&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Chris has been involved in successful consumer software, and his post can be taken as being &amp;#8220;from the horses mouth&amp;#8221; in that regard. Successfully making a living via mobile software is a very challenging niche. But to equate success to anything inside of a Casino is just silly, as mobile games don&amp;#8217;t provide free drinks. It doesn&amp;#8217;t matter if you are selling nails, books, art or video games. Perhaps luck can help you shortcut a path to success. But hard work, intense research and development of your product are fundamental to success.&lt;/p&gt;
&lt;p&gt;Rovio. Overnight they became one of the biggest franchises in the world of mobile. Overnight. Of course you must ignore the previous 6 years of experience the company built on. The principals started a path in 2003 together that led to 51 dismal failures. Poor character design, ungainly gameplay and hardware platforms that nobody used all conspired to create repeated failures. Read that again. 51 games that failed to be &amp;#8220;huge&amp;#8221;. The fortitude to push forward again and try number 52 is what separated them for the other slot machine players in the casino. By the time Angry Birds hit big Rovio already had Platinum Players Club status.&lt;/p&gt;
&lt;p&gt;Rovio had to develop an understanding of their market. Indeed they had to develop this understanding while the market was being ripped apart and redesigned by Apple. They honed their personal identity, game concepts and business processes over these repeated failures. They sought and achieved angel funding to keep the lights on while driving forward. Hard work. Long days. Short weekends. Iterate, iterate and iterate some more.&lt;/p&gt;
&lt;p&gt;Did this hard work and iteration guarantee success? Hell no it didn&amp;#8217;t. Not even close. Did it guarantee that when a little bit of luck did happen that they would be in the right position to turn that into maximum success? Hell yes they did.&lt;/p&gt;
&lt;p&gt;This is where the analogy to a casino is flawed. In a casino, you can walk in and hit a jackpot on the very first spin of a slot machine. Drop in your $5 bill and win big. You cannot do that with software. Winning big means you have iterated on a product over and over and over again. You have honed the details, worked with your customers and developed a core following.&lt;/p&gt;
&lt;p&gt;When the first time a developer enters the casino (publishes a product), they might get a little win. If they are lucky. That same first-time developer will have a buggy product that is very likely incomplete or short on content. It will be ill marketed and ill supported. It will be bargain-basement priced. They have stacked the deck against themselves by trying to sell a poor product in a poor manner.&lt;/p&gt;
&lt;p&gt;The next time a developer enters the market, he will carry the weight of that failure. He will know to have a better tested product. His product will be complete and flushed out. There will be a nice website and support system in place. It will be priced off of the floor level. They have begun to stack the deck in their own favor. A great product requires more than just itself to succeed. It needs all that support surrounding it to stand upright and live.&lt;/p&gt;
&lt;p&gt;Even though I don&amp;#8217;t like the Casino analogy, I&amp;#8217;m still going to read his book. Chris has been on a side of the market (massive success) that I have not been on. Some day I would like to see what he has seen.&lt;/p&gt;
&lt;p&gt;Interested? Amazon has it for both &lt;a title="On Kindle" target="_blank" href="http://amzn.to/rNKvBJ"&gt;kindle&lt;/a&gt; and &lt;a title="On Tree" target="_blank" href="http://amzn.to/uVsfF6"&gt;tree&lt;/a&gt;.&lt;/p&gt;</description><link>http://www.leezilla.net/post/12267817803</link><guid>http://www.leezilla.net/post/12267817803</guid><pubDate>Wed, 02 Nov 2011 18:56:35 -0700</pubDate><category>iphone</category><category>ios</category><category>game</category><category>games</category><category>mobile</category><category>mobile games</category><category>book</category><category>chris steven</category></item><item><title>The Great Texture Debate</title><description>&lt;p&gt;Not long back &lt;a title="On Apples Skeuomorphic UI Textures" target="_blank" href="http://daringfireball.net/linked/2011/10/26/against-skeuomorphism"&gt;John Gruber posted a bit of thinking&lt;/a&gt; surrounding the Skeuomorphic UI Textures that Apple has started using and expanding on. This piece was a response to &lt;a title="Apple's aesthetic dichotomy" target="_blank" href="http://madebymany.com/blog/apples-aesthetic-dichotomy"&gt;James Higgs criticism of the same&lt;/a&gt;. Both Gruber and Higgs are some of the most thoughtful and insightful journalists around, but both can prone to &amp;#8220;inside the machine&amp;#8221; thinking. By this I mean that some folk (myself included) see design decisions like this as obscure and unneeded. We are entirely right. leather trimmed textures are stoopid. Yes, stoopid. Two O&amp;#8217;s and zero You&amp;#8217;s.&lt;/p&gt;
&lt;p&gt;We don&amp;#8217;t have leather trimmed desk blotters. We don&amp;#8217;t carry paper and leather day planners or contact lists (didn&amp;#8217;t they used to be phone books?). Why should our software have something our &amp;#8220;real world&amp;#8221; doesn&amp;#8217;t?&lt;/p&gt;
&lt;p&gt;I am not the target of this design. Higgs and Gruber are not either. For the target audience I must look to my Father-In-Law. 64 years young. Handle bar mustache. 30+ year veteran of the Washington State Department of Corrections, prison guard to the non-con and outsider. Also a well educated man, smart by smarts standard. He reads more in a week than I do in a month.&lt;/p&gt;
&lt;p&gt;He won&amp;#8217;t touch a computer.&lt;/p&gt;
&lt;p&gt;He is afraid of them. Not evil per say, just something he feels is beyond his abilities. He does own a desk blotter and a phone book. Both leather and paper products. He owns an iPad (1st gen) too. He just &amp;#8220;gets&amp;#8221; the iPad.  Ask him and he will tell you &amp;#8220;anyone with half a bean in their noodle would make a computer as simple as an iPad&amp;#8221;.&lt;/p&gt;
&lt;p&gt;This Skeuomorphic trend (beautiful word, skeuomorphic) is about your Father-In-Law. It is about pushing further distinction between computers and Apple&amp;#8217;s. Computers are hard, cruel and beyond the average man. Apple&amp;#8217;s are something else entirely. Hell, the iPad is a physical object. You interact directly with it. Zero abstraction between intent and input. A book is much the same, as is a desk blotter.&lt;/p&gt;
&lt;p&gt;The &amp;#8220;wrapped in leather&amp;#8221; look represents the reality that most of the world is still afraid of computing devices. Apple solved this problem without patronizing my Father-In-Law, and without alienating the tech-forward among us.&lt;/p&gt;</description><link>http://www.leezilla.net/post/12231294713</link><guid>http://www.leezilla.net/post/12231294713</guid><pubDate>Tue, 01 Nov 2011 22:15:00 -0700</pubDate><category>iphone</category><category>ios</category><category>apple</category><category>John Gruber</category><category>James Higgs</category><category>design</category><category>leather</category><category>calendar</category><category>iPad</category><category>mac</category></item><item><title>"Has anyone seen my triceratops? He’s fanTASTIC!"</title><description>“Has anyone seen my triceratops? He’s fanTASTIC!”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;Zombie Christopher Walken&lt;/em&gt;</description><link>http://www.leezilla.net/post/12079400923</link><guid>http://www.leezilla.net/post/12079400923</guid><pubDate>Sun, 30 Oct 2011 21:10:48 -0700</pubDate></item><item><title>Two Weeks with an iPhone</title><description>&lt;p&gt;Shhhhh&amp;#8230;  Don&amp;#8217;t tell my F.O.S.S. friends, but I have switched to the &amp;#8220;dark side&amp;#8221;.  After spending a tick over two weeks with my iOS partner I have some odd thoughts on the matter.  Odd because they are not the things I had anticipated, but probably should have.&lt;/p&gt;
&lt;p&gt;First, iOS lacks a lot of features that are on some Android devices.  For example, I haven&amp;#8217;t had to reboot my iPhone once.  It stays functional, and it stays working.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve never had the dock go MIA on me.  I turn the screen on, and go to work.  Icons are where they should be.  Moving between screens happens without massive redraw showing it&amp;#8217;s face.  I liked watching the screen refresh.  I felt like I understood the nature of my machine.  iOS?  I have no clue what it going on in there.  It is just magic, and that scares me a little.&lt;/p&gt;
&lt;p&gt;No lag.  None.  My old Android had TONNES of lag.  I kind of miss it.  Without all the wait time I am forced to get things done.  Did I just intend on making a call?  BOOM.  Call happens and I am now required actually conversate with the other party.&lt;/p&gt;
&lt;p&gt;Yeah, that was a bit of sarcasm.  I apologize for that.  It started out with good intentions but quickly went sideways.  My very initial thought did concern a lack of features.  Android just packs features in everywhere possible.  Lots and lots of features.&lt;/p&gt;
&lt;p&gt;If Android was Windows, all you Stallman fanatics would call that &lt;strong&gt;BLOAT&lt;/strong&gt;.  Since this is Linux based though, we will forgive you your hypocrisy.  Much like Ubuntu, Android is just an over-bloated whale.  Loved by all, useful to nobody.&lt;/p&gt;
&lt;p&gt;After two solid weeks though I realized that my iPhone friend packs in a lot of features.  It limits itself to the features that are actually useful though.  Do I want the ability to install additional browsers?  Hell Yes.  Did I EVER use those browsers on any of my old phones?  &lt;strong&gt;Nope&lt;/strong&gt;.  The long story short is this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What is popular isn&amp;#8217;t right.  What is &lt;a title="Popularity Defined" target="_blank" href="http://www.apple.com/pr/library/2011/10/17iPhone-4S-First-Weekend-Sales-Top-Four-Million.html"&gt;right is INCREDIBLY popular&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I also need to highlight the GET IT DONE attitude my Cupertino companion has.  Everything just moves fast and smooth.  It is so responsive to touch that I feel like &lt;strong&gt;it actually reacts to my touch BEFORE I have physically come in contact with the glass&lt;/strong&gt;.  I never really felt like my last Android device was slow or laggy.  But that was ignorances bliss and not reality.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ltuvgne4Fc1qhbeed.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;I guess to summarize, two features jump out and stick with me.  Every single feature on the phone is polished to a beautiful shine.  They work exactly the right way.  And they work FAST.&lt;/p&gt;</description><link>http://www.leezilla.net/post/12098332606</link><guid>http://www.leezilla.net/post/12098332606</guid><pubDate>Sat, 29 Oct 2011 18:44:36 -0700</pubDate><category>ios</category><category>iphone</category><category>android</category><category>gtd</category><category>review</category></item><item><title>The jQuery, The Link and The Target</title><description>&lt;p&gt;I received an e-mail yesterday evening from someone using some old ExpressionEngine plugin of mine.  Specifically it was &lt;a title="Rewrite Links" target="_blank" href="http://devot-ee.com/add-ons/rewrite-link"&gt;Rewrite Links&lt;/a&gt;, and I have long since orphaned this.  The story behind this plugin was that my content people did not consistently use &lt;strong&gt;target=&amp;#8221;_blank&amp;#8221;&lt;/strong&gt; for outbound links.  At the time, ExpressionEngine was new to me and I was trying to use it as the hammer for every nail I found.&lt;/p&gt;
&lt;p&gt;That was a dumb way to go.  About a month later I found several bugs with the methodology and realized the code path was fundamentally flawed.  As I am still in denial about making such a poor engineering choice so I will avoid discussing what I messed up and move on to my solution.  Long story short, the above e-mailer had run into these bugs as well and was curious if I had seen and solved them.&lt;/p&gt;
&lt;p&gt;I am getting rather good with jQuery.  Good enough to be dangerous anyways.  My solution for some time has been a little jQuery snippet in my footer.  The absolute minimal approach is to stick this at the end of the page (or in a &lt;span&gt;$(document).ready()&lt;/span&gt; call):&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;  $("a[@href^='http']").attr('target', '_blank');
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This bit looks at all the A tags in the page, then filters down to tags with the characters &lt;strong&gt;http&lt;/strong&gt; in the &lt;strong&gt;href&lt;/strong&gt; attribute.  All results get &lt;strong&gt;target=&amp;#8221;_blank&amp;#8221;&lt;/strong&gt; added to them.  Very simple, fast and effective.  We can even expand the concept a bit in a number of ways.  Most useful to me has been to use the .each() iterator with it.&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;  $("a[href^='http']").each(function() {
    if( $(this).attr('href').indexOf('localdomain.com') &amp;lt; 0 ) {
      $(this).attr('target', '_blank');
    }
  });
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is getting to be a pretty powerful bit of code.  Going back to my content people, they all seem to use different types of links for on-site stuff.  Some of them use a relative path.  Some of them use absolute paths.  Some of them use absolute paths without the &lt;strong&gt;WWW.&lt;/strong&gt; in front of our domain.  We force that in our .htaccess file.  The above snippet applies this logic:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;All link tags&lt;/li&gt;
&lt;li&gt;That contain http&lt;/li&gt;
&lt;li&gt;That do NOT contain localdomain.com&lt;/li&gt;
&lt;li&gt;Add the attribute &lt;strong&gt;target=&amp;#8221;_blank&amp;#8221;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;This has proven to be pretty effective for us.  It is important to leave out the WWW. from your localdomain.com in the IF conditional.  Some users will use it, some will not.  Your site might force WWW, it might force NON-WWW, or it might not care.  By using the 2nd level naming only and dropping the 3rd, you will get what you intend with less fuss and failures.&lt;/p&gt;
&lt;p&gt;If you really REALLY wanted to, you could even replace the hard-coded &amp;#8216;localdomain.com&amp;#8217; string with &lt;a title="Document.domain documentation" target="_blank" href="https://developer.mozilla.org/en/DOM/document.domain"&gt;document.domain&lt;/a&gt;.  To keep things sane, just check for and truncate any WWW. from the return and you have code you never need to touch.&lt;/p&gt;
&lt;p&gt;Maybe something kewl like this, tossing some &lt;a title="NOT Selector" target="_blank" href="http://api.jquery.com/not-selector/"&gt;:not()&lt;/a&gt; selectors into the mix:&lt;/p&gt;
&lt;pre class="prettyprint"&gt;&lt;code&gt;  $("a[href^='http']:not(a[href^='http://" + window.location.host.toLowerCase() + "']):not(a[href^='http://www." + window.location.host.toLowerCase() + "'])").attr("target", "_blank");
&lt;/code&gt;&lt;/pre&gt;</description><link>http://www.leezilla.net/post/12080289777</link><guid>http://www.leezilla.net/post/12080289777</guid><pubDate>Sat, 29 Oct 2011 10:56:00 -0700</pubDate><category>jquery</category><category>javascript</category><category>expressionengine</category><category>html</category><category>code</category><category>epik</category></item></channel></rss>

