<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Luis Tineo</title><link>https://www.kingletas.com/</link><description>Recent content on Luis Tineo</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 01 Aug 2012 12:53:29 -0400</lastBuildDate><atom:link href="https://www.kingletas.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Zend Queue with Magento</title><link>https://www.kingletas.com/2012/08/zend-queue-with-magento.html</link><pubDate>Wed, 01 Aug 2012 12:53:00 -0400</pubDate><guid>https://www.kingletas.com/2012/08/zend-queue-with-magento.html</guid><description>&lt;p&gt;By using Zend Queue with magento we can create an event driven asynchronus integration system.&lt;/p&gt;
&lt;p&gt;Just think about how much work you will offload from Magento when integrating with other systems and Magento itself.&lt;/p&gt;
&lt;p&gt;To keep things simple, let&amp;rsquo;s pretend that you send emails to your customers everytime a new product gets added. Usually these products get added during the day which also happens to be when your customers are most active buying in the site. An alert about a new product is very important but you don&amp;rsquo;t want to bug down your email server. That&amp;rsquo;s where Zend Queue comes to the rescue. In this example I am using mysql to store the queue. If you follow the same example remember to create the tables first, these can be found under: lib/Zend/Queue/Adapter/Db/mysql.sql&lt;/p&gt;</description></item><item><title>Cloning magento modules</title><link>https://www.kingletas.com/2012/08/cloning-magento-modules.html</link><pubDate>Wed, 01 Aug 2012 12:37:00 -0400</pubDate><guid>https://www.kingletas.com/2012/08/cloning-magento-modules.html</guid><description>&lt;p&gt;Cloning magento modules will never this easy again.&lt;/p&gt;
&lt;p&gt;Today I wanted (read was forced) to create a module based on one of Magento&amp;rsquo;s core. Literally I needed to clone some of the Magento modules and while the copy and paste is simple stuff, going class by class and file by file renaming and configuring files is not joke.&lt;/p&gt;
&lt;p&gt;So why do I need to clone it instead of just doing the usual OOP stuff Magento is so good at? Simply because the functionality is really different in most files and settings. So creating a payment method or paygate or giftcard module is easier when you have an skeleton to work with. Think about it, how different is paying with PayPal from Google Checkout? Functionality wise not that much, essentially they do the same thing but implement it differently.&lt;/p&gt;</description></item><item><title>Full Page cache with nginx and memcache</title><link>https://www.kingletas.com/2012/08/full-page-cache-with-nginx-and-memcache.html</link><pubDate>Wed, 01 Aug 2012 12:32:00 -0400</pubDate><guid>https://www.kingletas.com/2012/08/full-page-cache-with-nginx-and-memcache.html</guid><description>&lt;p&gt;Since the cool kids at Google, Microsoft and Amazon researched how performance and scalability affect conversion rates, page load time has become the topic of every eCommerce store.&lt;/p&gt;
&lt;p&gt;Magento was once a resource hog that consumated everything available to it and you had to be a magician to pull off some awesome benchmarks without using any reverse proxy or full page cache mechanism. Creating a full page cache with nginx and memcache is really simple (right after hours of research).&lt;/p&gt;</description></item><item><title>Connect to a wireless network through the command line</title><link>https://www.kingletas.com/2012/07/connect-to-wirless-network-through.html</link><pubDate>Sat, 28 Jul 2012 17:21:00 -0400</pubDate><guid>https://www.kingletas.com/2012/07/connect-to-wirless-network-through.html</guid><description>&lt;p&gt;Sometimes you decide that you don&amp;rsquo;t want to use any GUI to connect to your wireless network, especially when it doesn&amp;rsquo;t seem to work.&lt;/p&gt;
&lt;p&gt;One of the main benefits of Linux and any other Unix based operating system is its ability to empower users to do things on their own.
So tonight when the latest Ubuntu updates broke my laptop&amp;rsquo;s wireless, I decided to write a little script to fix it.&lt;/p&gt;</description></item><item><title>Dirt cheap way to make magento fly</title><link>https://www.kingletas.com/2012/07/dirt-cheap-way-to-make-magento-fly.html</link><pubDate>Fri, 27 Jul 2012 16:47:00 -0400</pubDate><guid>https://www.kingletas.com/2012/07/dirt-cheap-way-to-make-magento-fly.html</guid><description>&lt;p&gt;There are several ways to accomplish the same task and some are more elegant than others.&lt;/p&gt;
&lt;p&gt;This one makes any Magento community edition fly and is cheap and quick (read no Magento compliant - because it modifies the templates)&lt;/p&gt;
&lt;p&gt;In other words while this trick can help you boost your Magento store server response I am not too proud of it.&lt;/p&gt;
&lt;p&gt;Why is that a big deal? I am not a huge fan or changing templates, even if they are &amp;ldquo;allowed&amp;rdquo;.&lt;/p&gt;</description></item><item><title>PHP Offloading... Nginx helps so much!</title><link>https://www.kingletas.com/2012/07/php-offloading-nginx-helps-so-much.html</link><pubDate>Thu, 26 Jul 2012 18:06:00 -0400</pubDate><guid>https://www.kingletas.com/2012/07/php-offloading-nginx-helps-so-much.html</guid><description>&lt;p&gt;So let&amp;rsquo;s continue our attempt to improve Magento&amp;rsquo;s performance and this time around let&amp;rsquo;s focus on the web server itself.&lt;/p&gt;
&lt;p&gt;There are a bunch of &lt;a href="http://en.wikipedia.org/wiki/Web_server"&gt;web servers&lt;/a&gt; out there but the most known are, a least to me: &lt;a href="http://www.apache.org/"&gt;Apache&lt;/a&gt;, &lt;a href="http://www.nginx.org/"&gt;Nginx&lt;/a&gt; and &lt;a href="http://www.lighttpd.net/"&gt;Lighttpd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My favorite, and of course I am biased here, is Nginx and it approach to serving content. As you may all know Nginx is an event-based web server and the main advantage of this asynchronous approach is scalability.&lt;/p&gt;</description></item><item><title>PHP offloading for better performance</title><link>https://www.kingletas.com/2012/07/php-offloading-for-better-performance.html</link><pubDate>Tue, 24 Jul 2012 22:19:00 -0400</pubDate><guid>https://www.kingletas.com/2012/07/php-offloading-for-better-performance.html</guid><description>&lt;p&gt;So you recently launched your PHP application (read &lt;a href="http://www.magentocommerce.com/"&gt;Magento&lt;/a&gt;) just to realize that it is really slow even though you have state of the art hardware, software and it is configured to kick ass. You decided to install &lt;a href="https://www.varnish-cache.org/"&gt;varnish&lt;/a&gt; to help full page caching and your CDN, which it only has gzipped merged and minified assets, to serve content faster now your site seems to be flying but &lt;a href="http://newrelic.com/"&gt;New Relic&lt;/a&gt; still reveals so many bottlenecks specially for the fillers you needed to keep some dynamic content rocking.&lt;/p&gt;</description></item><item><title>FireFox vs Virtualized environments</title><link>https://www.kingletas.com/2012/07/firefox-vs-virtualized-environments.html</link><pubDate>Mon, 23 Jul 2012 13:55:00 -0400</pubDate><guid>https://www.kingletas.com/2012/07/firefox-vs-virtualized-environments.html</guid><description>&lt;p&gt;Firefox rocks no doubt about it&amp;hellip; but using more memory than virtualbox just to run magento is not cool at all!&lt;/p&gt;
&lt;p&gt;This is why I really dislike using FireFox and love using &lt;a href="http://getswiftfox.com/"&gt;SwiftFox&lt;/a&gt;. How come Firefox is taking 2GB of ram, that is as much as my virtualized Ubuntu Desktop and more than my virtualized ubuntu server. In other words with that much memory I could be running a few more computers.&lt;/p&gt;</description></item><item><title>Varnish implementation hints and good to know</title><link>https://www.kingletas.com/2012/07/varnish-implementation-hints-and-good.html</link><pubDate>Tue, 17 Jul 2012 00:30:00 -0400</pubDate><guid>https://www.kingletas.com/2012/07/varnish-implementation-hints-and-good.html</guid><description>&lt;p&gt;Sharing knowledge is always a good idea. Lately I have been doing lots of integration with Varnish and Magento with different clients and it will be interesting to find out if you have any ideas or suggestions (read improvements) to make it better and ultimately help the community even more:&lt;/p&gt;
&lt;h2 id="setting-up-varnish-in-switch-mode"&gt;Setting up varnish in switch mode:&lt;/h2&gt;
&lt;p&gt;In my home directory I always have a bash aliases (vim ~/.bash_aliases) file where I add the following iptable rules:&lt;/p&gt;</description></item><item><title>Magento 301 Redirects</title><link>https://www.kingletas.com/2011/02/magento-301-redirects.html</link><pubDate>Fri, 11 Feb 2011 09:10:00 -0500</pubDate><guid>https://www.kingletas.com/2011/02/magento-301-redirects.html</guid><description>&lt;p&gt;Did you ever want to create a redirect in a Magento Store without having to use htacess?&lt;/p&gt;
&lt;p&gt;Using Observers and the powerful Request and Response objects from Zend Framework you can. In this example I will show how you can do it.&lt;/p&gt;
&lt;p&gt;First you need to create the module, more on module creations here: &lt;a href="http://goo.gl/vvT2j"&gt;http://goo.gl/vvT2j&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Create a directory under app/code/community and name it FooBar, then create another directory under FooBar and name it Redirect. Create two directories inside FooBar: etc and Model.&lt;/p&gt;</description></item><item><title>Projects</title><link>https://www.kingletas.com/projects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.kingletas.com/projects/</guid><description>&lt;p&gt;Everything here is open source and on &lt;a href="https://github.com/kingletas"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="magento-performance"&gt;Magento performance&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/manipulus"&gt;manipulus&lt;/a&gt;&lt;/strong&gt; works out which RequireJS modules each Magento 2 page type loads, straight from the codebase, and bundles them. No browser, no Node, no running store. Its walkthrough takes a real store from 226 JavaScript requests to 15.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/magento2-module-section-policy"&gt;section-policy&lt;/a&gt;&lt;/strong&gt; decides what a private-content invalidation actually invalidates, and reports what each action costs. On a stock store, logging in refetches every customer section, including a 59 KB country list that&amp;rsquo;s identical for every visitor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/magento2-module-cache-vary"&gt;cache-vary&lt;/a&gt;&lt;/strong&gt; decides what goes into the full-page-cache key, and reports how many copies of each page it allows. It keeps customer segments out of the Varnish hash when nothing cached depends on them, since each active segment can double the copies of every page.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/magento2-module-process-guard"&gt;process-guard&lt;/a&gt;&lt;/strong&gt; times every observer on the hot paths — order placement, totals, catalogue saves, queue consumers — and sheds the ones declared advisory when a path goes over its budget.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/magento2-module-catalog-access"&gt;catalog-access&lt;/a&gt;&lt;/strong&gt; does the catalogue reads every module ends up writing — load a product, turn category ids into names, work in the right store — in batches, with the usual mistakes designed out, like one product loaded per loop.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/magento2-module-promotion-access"&gt;promotion-access&lt;/a&gt;&lt;/strong&gt; answers the cart price rule questions every module ends up asking, like a rule&amp;rsquo;s action or the rule behind a coupon, in batches and without loading a rule for each one.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/magento2-module-foundation"&gt;foundation&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://github.com/kingletas/magento2-module-logger"&gt;logger&lt;/a&gt;&lt;/strong&gt; are the shared pieces the modules above are built on.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="magento-testing-and-runtime"&gt;Magento testing and runtime&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/bluetir"&gt;bluetir&lt;/a&gt;&lt;/strong&gt; drives a real browser through a storefront, adds to cart and places an order. Luma, Hyvä and ScandiPWA are each one YAML profile, so a new store means a new profile rather than new code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/drexbot"&gt;drexbot&lt;/a&gt;&lt;/strong&gt; runs regression, acceptance, behaviour and performance tests against a Magento storefront.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/harness-kernel"&gt;harness-kernel&lt;/a&gt;&lt;/strong&gt; is the test kernel drexbot is built on. It knows nothing about Magento: it owns the run, the verdicts and the reports, so it can back a harness for anything.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/emporion"&gt;emporion&lt;/a&gt;&lt;/strong&gt; runs a Magento 2 store on your machine as a Docker Compose stack or a kind cluster, from one image. A second store, with its own database, cache, search index and queue, is one command.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="platform-and-devops-tools"&gt;Platform and DevOps tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/credential-guard"&gt;credential-guard&lt;/a&gt;&lt;/strong&gt; keeps credentials out of git. It scans the working tree and every blob in the history, and installs itself as a pre-commit hook.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/dep-intel"&gt;dep-intel&lt;/a&gt;&lt;/strong&gt; tells you which of your dependencies are vulnerable without telling anyone what you run. It matches OSV and CISA&amp;rsquo;s list of exploited vulnerabilities offline, across nine ecosystems.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/ansible-role-devops"&gt;ansible-role-devops&lt;/a&gt;&lt;/strong&gt; sets up a DevOps workstation, or creates and hardens an automation account on a server, on Ubuntu, Debian, Fedora and RHEL 9.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/dev-snapshot"&gt;dev-snapshot&lt;/a&gt;&lt;/strong&gt; makes one encrypted, verified archive of a source tree, leaving out everything a package manager can rebuild.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/tooling-sync"&gt;tooling-sync&lt;/a&gt;&lt;/strong&gt; tells an installed command apart from the repository it came from, and shows which one changed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="obsidian-plugins"&gt;Obsidian plugins&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/obsidian-periodic-journal"&gt;periodic-journal&lt;/a&gt;&lt;/strong&gt; handles every recurring note from one list of note types, instead of five fixed ones. A second daily note is just another entry.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/obsidian-stickies"&gt;stickies&lt;/a&gt;&lt;/strong&gt; puts movable sticky notes on a passage. They follow the text as it&amp;rsquo;s edited and never touch the Markdown.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/obsidian-world-engine"&gt;world-engine&lt;/a&gt;&lt;/strong&gt; validates a structured vault against YAML schemas and checks it for continuity, with the notes staying the source of truth.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/obsidian-engineering-toolkit"&gt;engineering-toolkit&lt;/a&gt;&lt;/strong&gt; adds light structure to the engineering docs a vault already holds: ADRs, incidents, infrastructure notes and a decision log.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/obsidian-jira-autolink"&gt;jira-autolink&lt;/a&gt;&lt;/strong&gt; turns &lt;code&gt;PROJ-123&lt;/code&gt; into a link to your Jira, with an optional hover preview of the issue.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="desktop-apps"&gt;Desktop apps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/ordane"&gt;ordane&lt;/a&gt;&lt;/strong&gt; is a desktop console for an Ansible control plane, with or without a Makefile. It shows the exact command before it runs, streams the output and keeps a record of every run, with no server and no database.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/backsight"&gt;backsight&lt;/a&gt;&lt;/strong&gt; is a Terraform workbench that shows what a change will do while you write it. It&amp;rsquo;s early and not released yet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/solander"&gt;solander&lt;/a&gt;&lt;/strong&gt; opens an Obsidian vault on Ubuntu and never writes into it. Wikilinks, callouts, canvases and Dataview render as themselves, with no plugins, no scripts and no network.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/ariadne"&gt;ariadne&lt;/a&gt;&lt;/strong&gt; builds a book&amp;rsquo;s cast as you read and never shows you anyone past your bookmark. It works offline on epubs you own. It&amp;rsquo;s early, and it needs readers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/kingletas/cairn"&gt;cairn&lt;/a&gt;&lt;/strong&gt; keeps every job application you&amp;rsquo;re chasing in one list and screens the job feeds you turn on against what you want. Everything stays in one encrypted file on your machine: no account, no server, no sync.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>