Tuesday, April 2, 2013

Pivoting MageUpdate from a Service to an Extension

From the beginning, I knew that I wanted MageUpdate to eventually be a self-serve offering.  My battle plan thus far has been to offer a full service upgrade service to merchants and solutions partners, and while performing the upgrades myself, to build out tools that would help to automate the process of performing the upgrades.

While doing that over the past few months, I think that I've identified some of the lowest hanging fruit, in terms of functionality that can help to save people a significant amount of time when doing upgrades.  I decided that it was time to start building an extension to wrap up this functionality.

I've updated my home page at mageupdate.com with a description of the features that you can expect the extension to contain.  Go there, check it out, and sign up on the email list if you're interested and would like to hear more once it's released.

Tuesday, March 12, 2013

LA Magento Bugathon

Made my first pilgrimage out to Magento HQ this past weekend for the Bugathon.  What an amazing time.  Got a chance to meet a couple of my all-time Magento heros - Ben Marks and Fabrizio Branca.

Picture-throwing-the-M or it didn't happen:

I forgot to take a pic with Fabrizio but I promise I met him!!!  If you don't believe me, just ask him about my ping pong skills.

Because I had my very own monitor (long story), I felt a burden to be the most productive developer of the entire group.  So I managed to be the very first one of the group with a pull request.  What did I build, you ask?  Well, while some people were busy with trivial enhancements like reducing configuration cache size by 80% for large Multi-store installations, I went to work on a truly difficult feature: adding an event dispatch to the core email template.

It's funny because because I actually got bounced back from code review like 3 different times.  They don't mess around with their code review process.  It was really a pleasure to be able to work closely with Olga - one of the core team members who I worked with on my pull requests.

For my next issue, I decided to bring out the @sweettooth guns a blazin' and tackle a Sales Rule bug.  Almost didn't make it out of that ~230 line process() method alive, but in the end emerged victorious.

Also really enjoyed the presentation by Sergey on Magento 2 - getting increasingly excited about all that v2 will bring.

Huge shout out to Mosses for organizing it - it was really well-organized and such a blast.

Monday, March 11, 2013

How to Override Magento Core Javascript Functionality

magento override javascript
In case you've ever had to modify core Magento functionality in the realm of the javascripts, this may come in handy.  Today, I needed to look into modifying some validation methods that are located in


So what you'll want to do, at a high level, is:
  1. Figure out how many different places in Mage you'll need to insert your custom javascript 
  2. Insert your javascript via layout xml of some sort
  3. Extend the core javascript objects with your customizations
  4. Profit
Where do I need to insert my javascriptation?
In my case, I was looking for instances of js/prototype/validation.js in the core, and I actually found more than I was hoping to:
  • design/adminhtml/default/default/layout/dataflow.xml
  • design/adminhtml/default/default/layout/main.xml
  • design/adminhtml/default/default/template/forgotpassword.phtml
  • design/adminhtml/default/default/template/login.phtml
  • design/adminhtml/default/default/template/resetforgottenpassword.phtml
  • design/frontend/base/default/layout/page.xml
  • design/frontend/enterprise/iphone/layout/page.xml
  • design/install/default/default/template/page.phtml
So, in my case, really the only places that I needed to deal with were the main.xml and page.xml.  The others were cases where the additional validation wasn't really going to be necessary.

How do insert this bidniss?
Well, you would go ahead and insert via an addJs in the <default> route (most likely) just like any other custom javascript file.  You probably want to put it in a location like js/<yourtheme>/prototype/validation.js - in other words map the directory and filename to the one that you're overriding, just like you'd probably do when building a class rewrite in a local code pool PHP module.

And now, the magic.
Thanks to people much smarter than me, I was able to stumble onto this stackoverflow thread where there was some sweet insight into one of the nice features of Prototype.  Basically, you can extend any object via the addMethods() method.

Now in the case of adding a validation method, it's actually more straight forward, because all you need to do is call Validation..addAllThese().

    ['validate-po', 'We don't ship to PO boxes, suckafoo.', function(v) {
        var no_po = v.toLowerCase();
        if((no_po.indexOf('po box')) >= 0) {
            return false;
        }else {
            return true;

Well there  you have it.  Now you have one less excuse to hack the core.

Monday, February 18, 2013

Website Updates and Recently Completed Projects

Finally got around to making some needed updates to the website.  That headline was way too generic ("Save Time and Money on Magento Upgrades"), so I kicked it up a notch with some spice.  Also added some testimonials for recently completed projects and updated the pricing section a bit.

I'm very proud to have worked with Kuba from Snowdog, a very experienced and respected Magento solution provider, on a white-label project.

I also completed an Enterprise Edition upgrade for Clean, a really neat product in the health and wellness industry.  My client, Dhru, has to be one of the coolest Magento merchants that I've met to date - ton of positive energy while at the same time very successful and ambitious.  He also is looking for a solid senior in-house Magento developer in or around the SoCal area, in case anyone out there is looking!

The development agency that I collaborated with on Clean is Anatta Design - big shout out to Ashish and Nirav - two very smart and friendly guys who, by the way, are working on some interesting Magento products and services, so keep an eye out.

Sunday, February 10, 2013

Magento 2 Admin Theme Sneak Peek

I recently took a peek at the Magento 2 admin theme - it's coming along quite nicely!  And I thought I'd post up some pics.

The login screen

Account edit screen - digging that left nav

Little bit o' dashboard.  

Orders grid.  Like some of the new iconography but definitely needs polish.

System config - where we'll spend most of our time, devs :)

The search bar does a nice little javascript animation when you click it

The spinner.   *Really* hoping they're gonna spruce that up a notch or two.

Product grid - nice little quick menu for selecting product type

Product create page - drag-and-drop images up in here.

The wysiwyg, looks like Brendan didn't convince them to go with markdown :) 

System Top Menu

Sunday, January 20, 2013

Crazy Idea: Stack Overflow Git Integration

stackoverflow git integration
Had a crazy idea today.  I was working on a lot of Magento core code repair - basically looking at modifications to the core, removing them and implementing them properly within the local and community module pool, locale translation csv, etc.

And it occurred to me that there are probably like 20 or 30 Stack Overflow questions related specifically to the things that I worked on today.  For one reason, people probably tend to modify the core when they're getting stuck figuring out how to implement something properly.

But even in general, a developer is probably many times more likely to be able to answer a SO question related to code that they've recently been working on.

So...I was thinking: what if there was some IDE integration that looked at the files you were working with, analyzed the class ancestry of them, and queried open, unanswered questions on SO that were related to those very classes!

Like, for example, if you just implemented a rewrite of the Mage_Catalog_Product_Image class in order to customize the GD image quality - it looks up questions related to that very class.  This would work best for SO questions that actually had code snippets with easily parseable class names in them.

A more generic alternative to IDE integration would simply be Git integration - Maybe a post-commit hook that looked at code you had recently committed.  Actually this might be better for a number of reasons:
  • Applies more generically - doesn't need to be implemented per IDE
  • Who wants to be bothered to answer SO questions while they're getting their code on.  
  • It's usually after you wrap up a task and commit it that you might be in the mood to pop over to SO

Tuesday, January 15, 2013

Magento Cleanup Service

magento cleanup service
Let's clean that junk up
A big part of my upgrade service is the process of cleaning up a Magento install and bringing the core code, themes, community modules, and database schema into a clean state.  That got me thinking today that maybe the process of cleaning up a Magento install may be of interest to merchants or solutions providers even regardless of whether they happen to be doing an upgrade or not.

A few potential use cases come to mind:
  • You're getting ready to start some new development and just want to work off of a clean base.
  • Your in-house team could use a little bit of help with some tricky issues that they've been avoiding fixing for fear of breaking something (core code mods, foreign key issues come to mind).
  • You could do it yourself but would rather focus on more creative development, and leave the grunt work to someone else.
  • You are on-boarding a new client and would like to get their Magento build into a clean state before having your development team's eyes on it.
Just thought I'd post this up and see if I get any feedback.  If this is something you may be interested in, please don't hesitate to give a shout.