Author Archives: Marc

Release : Finally Listed on WordPress.org

My Dash Note plugin (a little Saturday afternoon scripting) is finally live on WordPress.org here. The biggest hurdle was getting in line with the dev and marketplace guidelines for WordPress. With that done migration for more work to the WP site is in line.

My local supprt page for this plug-in is here.  Thanks for your support and drop mad stars on my script

Posted in Blog, Programming, Release, Web, Wordpress | Tagged , , , , | Leave a comment

Release : Python Baseline for _framework

[MIDI Remote Script] Python baseline [Control Surface] extends the _framework instance of the experimental, undocumented, and officially unsupported API for Ableton. This particular script is very simple in the functions currently provided, but this is pivotal in establishing a clean, usable, and well thought out pattern for building MIDI control surfaces.

Posted in Release | Tagged , , , , , , , | Leave a comment

Release : iz_custom_script for WordPress

iz_custom_script is a WordPress plugin allowing the user to place custom PHP (as well as HTML) scripts inline with content. This plug requires almost zero configuration, is incredibly lightweight, and simple to use.

Posted in Release | Tagged , , | Leave a comment

Demistifying Search Engine Experts

With each passing year I fear Search Engine “Experts” more and more. I rank them as modern snake oil sales*, at best. Typically a project brings in an “Expert” who has the personality of gum stuck to my shoe and siphons money from my employers riding on the results of others and contributing little.

* Large enterprise SEO not withstanding. I am talking about the various fly-by-night SEO companies who come in using destructive methods to get fast results at the expense of the small business.

In this post I want to discuss how search engines work and why I advocate against using SEO “experts” until a site is live for 6-12 months minimum with a rich collection of valid content.

Assumption : You have a web programmer and coder like me who will write solid code, coach the staff, and encourage good work.

Meta Tags & Description :

Truth : Not too valuable. Estimated at 5% of overall ranking calculation
Continue reading

Posted in Off Topic | Tagged , , , , , , | Leave a comment

Apple OSX

I use a Mac.

The OS(X) is just a nightmare with only a few exceptions.

This is not one of the exceptions.

The Problem: In learning C++ (C Plus Plus) and want to compile and execute some simple programs – math and text manipulation mostly.
Continue reading

Posted in Apple | Tagged , , | 2 Comments

Remote Access via SOAP in Magento – the short version

Keeping it short. After I got (c)Rackspace to turn on SOAP I had to step back for a while, those tech support issued wear me down. I could have turned it on myself, but we have a full service contract.

Now I am left with mostly 500 errors, occasional 404 (mod_rewrite was dropping page not found error).
Continue reading

Posted in Magento commerce, Programming | Tagged , , | 1 Comment

Get Tracking Information from Magento via Order Number

I work in Magento frequently. Here’s a pretty straight forward query to get the core shipping information out of  in Magento for  v 1.4.1 (will not work pre 1.4x as all the tables changed – no really, thanks)

select  shp.number, shp.title, shp.carrier_code, shp.updated_at, flt.shipping_description
 from `magento_store`.`sales_flat_order` as flt
 left join `magento_store`.`sales_flat_shipment_track` as shp
 on (flt.entity_id = shp.order_id)
 where flt.increment_id = '$order_id';

I use a WordPress install to interface with the Magento DB to stress server less.

Don’t forget that the 1.4x shipping API for Magento is B-U-S-T-E-D as of this writing. Here is the link I found:

http://magebase.com/magento-tutorials/shipment-api-in-magento-1-4-1-broken/

If you are considering working with Magento you must understand that the community version is out there to crowd source debugging. Living on the Magento forums for a long while now I see a specific pattern of disengagement from the Magento development team in addressing major issues. I am sure they would speak to the contrary.

Posted in Magento commerce, Programming, Web | Tagged , , , | 1 Comment

Advanced application of Options in Simple Products

I wanted to drop some notes in there to helpfully assist someone who might be doing weird stuff in Magento similar to me.

As short as possible – a current project uses a custom design interface for our products (in Flash) for the final sell-able item.  Every item is a unique design (serialized) on a “stock” product.

In the end of the design process the customer design is serialized (unique).  The problem was simple – how do you get the serial # in the cart with the item and pass through the product option phase (not directly to cart).

At first you say – No Problem! Use the

?option[##]=stuff

Not so simple.

After the design, options need to be selected like material type or what ever.  So here is some of  my solution…

You can AJAX in your results if you want, but this jumps over the “options” phase of the product page.  Your AJAX string looks like this (we can’t use .htaccess rewrites because of Flash – BOO!)

AJAX CALL PROTOTYPE : [code]/index.php/checkout/cart/add/product/113/?options[27]=17067[/code]

27 = option ID and 17067 is our generated serial#

Wrap and trigger that JS how you need.

Ultimately I had to inject a hidden input (dynamically) – the input looks like this (PHP code):

$inputStr = '<input type="hidden" value="'.$_GET['serial'].'" name="options['.$ret.']">';

This input is printed inside the form here:

…./template/catalog/product/view.phtml

Where the $_GET['serial'] is the unique design instance appended to the product page (generated by a call to the PHP header() function using variables returned from our designer – buncha’ sick tight queries and code to do this!)

The $ret is the option # for the product. This is returned from a backwards query on the item/sku in Magento.

The basic function is:

// this is actually encapsulated in a class and I leave it as a public static function....
function get_option($product_id){
  $product_id = mysqlEscapeString($product_id);
  $write = Mage::getSingleton('core/resource')->getConnection('core_write');
  $readresult=$write->query("SELECT option_id FROM catalog_product_option WHERE product_id = $product_id AND sku = 'serial';");
  $row = $readresult->fetch();
  if (intval($row['option_id'])>1) {
    return mysqlEscapeString($row['option_id']);
  }else{
    return false;
  }
// there is a lot of room in this  do what you want!

mysqlEscapeString is a local function that preps data for use in MySQL – replace with your favorite one, there should be a call like this in the Zend framework. It was faster to use from my library as Zend is sluggish.

This function is fed the Magento product ID (easy to get that info) while “serial” is the sku of the option in Magento (we use one sku for these products and  options make things simple)

One of the reasons why I am putting this post up is to warn people on some odd stuff and failures.  I am not about to worry too much on the how and why, instead let me tell I experience fail.

The fail:

The AJAX call above works well BUT if you apply a “?option[##]=#### to the form action by appending to the

this->getAddToCartUrl($_product);

on the file

…./template/catalog/product/view.phtml

The /uenc/STUFF-HERE in the form action”THATLINK”will see extra garbage.

That garbage will cause failure when the form is submitted.  The “garbage”is totally weird and I stopped caring how/why (an unfortunate consequence working with Magento that I dislike). In short I was getting the standard UENC/STUFF with an underscore and other alpha-numeric info added. This  breaks the form submission.

So don’t mess with the action URL!

I hope this helps, drop a note if you need more or clarification.  This was a long battle in creating a hybrid between a legacy system and Magento.

Closing note – you can not do this in Magento with the Wishlist.  Your expectation of the wishlist operating like a “holding area” that is a parallel dimension to the cart is wrong.  This “stamping” of the product instance with my required serial # is not possible in the wishlist. (add that feature right?)

Until this is dialed in (if ever), I wired in our own custom design manager.  Now back to that work…

Posted in Magento commerce, Web | Tagged , , , , , | Leave a comment

Ableton, the Launchpad, and your busted warranty

Got another Launchpad (actually 2 – long story).  Fun unit.  Clunky, does not have a long life in my world- getting the 2 year Guitar Center serious abuse plan.

Did you know that many manufacturers warranties do not cover professional abuse?

Way to take care of the pros right…?

So when you swap that item you broke at the gig do wipe off the beer and tell them you were working in your basement alone.

As for automap – here’s the tip of the day:

Don’t Install

Posted in Ableton | Tagged , , , , | Leave a comment

GoDaddy 554 Error gone horribly wrong

Short and sweet, if and when I am found to be in error let me know so I can update.

Define the players:

  • Email thread between me and 2 other people me@somegodaddyhostedemail.com and person1@gmail.com and person2@hotmail.com
  • Also, there is a site referred to as referencedsite-inmessagebody.com – copied and pasted in the discussion.

Timeline, crude but true:

  1. Email string gets big, 10+ responses
  2. Suddenly email only yeilds massive 554 errors from GoDaddy – no option to avoid fail
  3. Email programs and (my) IP address changes with no effect on the final outcome.
  4. Call GoDaddy, they scan the issue email.
  5. Answer: referencedsite-inmessagebody.com has an associated PBL entry (http://www.spamhaus.org/pbl/) via the IP address associated with the domain.

We now stop and look at the problem.

The site referencedsite-inmessagebody.com is associated with an ip address that has a PBL listing.  In short it could be said that referencedsite-inmessagebody.com sent spam or had mail flagged as spam and made it on the naughty list.

Moving forward with the assumption that referencedsite-inmessagebody.com is not one of the real offenders of spam on the net. We have to ask WTF?

Well, the WTF turns out to be just plain evil wrapped in evil.

I drop a WhoIs on referencedsite-inmessagebody.com and find out they are on a large shared (virtual) host. We all use similar services.

I happen to know this host, I use them.  Generally I think the company runs 200+ clients per server.

What follows is a wild summary of the conversation I had with the tech at GoDaddy (he was cool and honest).

Any idiot on a virtual host can start spamming, get busted, loose account and flag the (shared) IP . That means  referencedsite-inmessagebody.com is  pretty much doomed along with any emails associated to that domain name, regardless of the location of the email server (as far as IP address goes).

Doomed to the point where (the actually broken GoDaddy protocol) is blocking my email because my message body has a “flagged” http address (with associated PBL flagged IP address).

Is there anything to be done – Nope. I asked they guy straight up, should I just move my emails off or is there something we can  do such as petitions.

His response was “don’t even try”.

My Solution is to move all these email accounts onto a leased server with dedicated IP address I can get unflagged if ever necessary and run no risk of colliding with “some idiot”.

Ever wonder why certain stuff will NEVER EVER make it from one email to another, this is a clear outline of a protocol that will (often silently) kill your communication.

Emergency Workarounds are available and cumbersome for the low-tech.  I suggest instant messaging and file sharing sites.  You can create a real time one-to-one connection with your target and provide information to get the data.

File sharing services (of the professional type) are also a good alternative for moving files, but this is not a solution for general text communication over email.

Let’s close out with a list of things you should not do:

  • Do not use shared hosting with out a dedicated IP
  • Do not use any service like GoDaddy who utilizes services like SpamHaus
  • Do not reference any website in your email or only write them as “domain[dot]com”

And one more important “beware“:

  • Beware the dynamic IP address. (Who knows how many IP’s we all share are flagged and/or associated with strange shit)

With that in mind email becomes a rather difficult form of communication.

I was taking no responses personally when they were dying or errored out. Going to have to meet people face to face  to talk.

OMG.

Posted in Off Topic, Programming, Web | Tagged , , , | 1 Comment