• Home

  • Custom Ecommerce
  • Application Development
  • Database Consulting
  • Cloud Hosting
  • Systems Integration
  • Legacy Business Systems
  • Security & Compliance
  • GIS

  • Expertise

  • About Us
  • Our Team
  • Clients
  • Blog
  • Careers

  • VisionPort

  • Contact
  • Our Blog

    Ongoing observations by End Point Dev people

    A Little Less of the Middle

    Josh Williams

    By Josh Williams
    March 14, 2012

    I’ve been meaning to exercise a bit more. You know, just to keep the mid section nice and trim. But getting into that habit doesn’t seem to be so easy. Trimming middleware from an app, that’s something that can catch my attention.

    Something that caught my eye recently is a couple recent commits to Postgres 9.2 that adds a JSON data type. Or more specifically, the second commit that adds a couple handy output functions: array_to_json() and row_to_json(). If you want to try it out on 9.1, those have been made available as a backported extension.

    Lately I’ve been doing a bit of work with jQuery, using it for AJAX-y stuff but passing JSON around instead. (AJAJ?) And traditionally that involves something in between the database and the client rewriting rows from one format to another. Not that it’s all that difficult; for example, in Python it’s a simple module call:

    jsonresult = json.dumps(cursor.fetchall())
    

    … assuming I don’t have any columns needing processing: TypeError: datetime.datetime(2012, 3, 09, 18, 34, 20, 730250, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=0, name=None)) is not JSON serializable Similarly in PHP I can stitch together a …


    jquery json postgres

    The Mystery of The Zombie Postgres Row

    Greg Sabino Mullane

    By Greg Sabino Mullane
    March 14, 2012

    Being a PostgreSQL DBA is always full of new challenges and mysteries. Tracking them down is one of the best parts of the job. Presented below is an error message we received one day via tail_n_mail from one of our client’s production servers. See if you can figure out what was going on as I walk through it. This is from a “read only” database that acts as a Bucardo target (aka slave), and as such, the only write activity should be from Bucardo.

     05:46:11 [85]: ERROR: duplicate key value violates unique constraint "foobar_id"
     05:46:11 [85]: CONTEXT: COPY foobar, line 1: "12345#011...
    

    Okay, so there was a unique violation during a COPY. Seems harmless enough. However, this should never happen, as Bucardo always deletes the rows it is about to add in with the COPY command. Sure enough, going to the logs showed the delete right above it:

     05:45:51 [85]: LOG: statement: DELETE FROM public.foobar WHERE id IN (12345)
     05:46:11 [85]: ERROR: duplicate key value violates unique constraint "foobar_id"
     05:46:11 [85]: CONTEXT: COPY foobar, line 1: "12345#011...
    

    How weird. Although we killed the row, it seems to have resurrected, and shambled like a zombie into our …


    bucardo database postgres

    PHP Vulnerabilities and Logging

    Steph Skardal

    By Steph Skardal
    March 13, 2012

    I’ve recently been working on a Ruby on Rails site on my personal Linode machine. The Rails application was running in development with virtually no caching or optimization, so page load was very slow. While I was not actively developing on the site, I received a Linode alert that the disk I/O rate exceeded the notification threshold for the last 2 hours.

    Since I was not working on the site and I did not expect to see search traffic to the site, I was not sure what caused the alert. I logged on to the server and checked the Rails development log to see the following:

    Started GET "/muieblackcat" for 200.195.156.242 at 2012-02-15 10:01:18 -0500
    Started GET "/admin/index.php" for 200.195.156.242 at 2012-02-15 10:01:21 -0500
    Started GET "/admin/pma/index.php" for 200.195.156.242 at 2012-02-15 10:01:22 -0500
    Started GET "/admin/phpmyadmin/index.php" for 200.195.156.242 at 2012-02-15 10:01:24 -0500
    Started GET "/db/index.php" for 200.195.156.242 at 2012-02-15 10:01:25 -0500
    Started GET "/dbadmin/index.php" for 200.195.156.242 at 2012-02-15 10:01:27 -0500
    Started GET "/myadmin/index.php" for 200.195.156.242 at 2012-02-15 10:01:28 …

    hosting security

    Handling outside events with jQuery and Backbone.js

    Greg Davidson

    By Greg Davidson
    March 2, 2012

    I recently worked on a user interface involving a persistent shopping cart on an ecommerce site. The client asked to have the persistent cart close whenever a user clicked outside or “off” of the cart while it was visible. The cart was built with Backbone.js, and jQuery so the solution would need to play nicely with those tools.

    The first order of business was to develop a way to identify the “outside” click events. I discussed the scenario with a colleague and YUI specialist and he suggested the YUI Outside Events module. Since the cart was built with jQuery and I enjoyed using that library, I looked for a comparable jQuery plugin and found Ben Alman’s Outside Events plugin. Both projects seemed suitable and a review of their source code revealed a similar approach. They listened to events on the document or the element and examined the event.target property of the element that was clicked. Checking to see if the element was a descendant of the containing node revealed whether the click was “inside” or “outside”.

    With this in mind, I configured the plugin to listen to clicks outside of the persistent cart like so:

      $(function(){
        $('#modal-cart').bind( …

    javascript jquery

    IPv6 Tunnels with Debian/Ubuntu behind NAT

    Brian Buchalter

    By Brian Buchalter
    March 1, 2012

    As part of End Point’s preparation for World IPv6 Launch Day, I was asked to get my IPv6 certification from Hurricane Electric. It’s a fun little game-based learning program which had me setup a IPv6 tunnel. IPv6 tunnels are used to provide IPv6 for those whose folks whose ISP or hosting provider don’t currently support IPv6, by “tunneling” it over IPv4. The process for creating a tunnel is straight forward enough, but there were a few configuration steps I felt could be better explained.

    After creating a tunnel, Hurricane Electric kindly provides a summary of your configuration and offers example configurations for several different operating systems and routers. Below is my configuration summary and the example generated by Hurricane Electric.

    However, entering these commands change won’t survive a restart. For Debian/Ubuntu users an update in /etc/network/interfaces does the trick.

    #/etc/network/interfaces
    auto he-ipv6
    iface he-ipv6 inet6 v4tunnel
      address 2001:470:4:9ae::2
      netmask 64
      endpoint 209.51.161.58
      local 204.8.67.188
      ttl 225 
      gateway 2001:470:4:9ae::1
    

    Firewall Configuration

    If you’re running UFW the updates to /etc/default/ufw are very …


    debian hosting linux networking sysadmin

    jQuery Async AJAX: Interrupts IE, not Firefox, Chrome, Safari

    Carl Bailey

    By Carl Bailey
    March 1, 2012

    I recently worked on a job for a client who uses (Thickbox). Now, ThickBox is no longer maintained, but the client has used it for a while, and, “if it ain’t broke don’t fix it,” seems to apply. Anyway, the client needed to perform address verification checks through Ajax calls to a web-service when a form is submitted. Since the service sometimes takes a little while to respond, the client wanted to display a ThickBox, warning the user of the ongoing checks, then, depending on the result, either continue to the next page, or allow the user to change their address.

    Since the user has submitted the form and is now waiting for the next page, I chose to have jQuery call the web service with the async=false option of the ajax() function. (Not the best choice, looking back). Everything worked well: Firefox, Safari and Chrome all worked as expected, and then we tested in IE. Internet Explorer would not pop up the initial ThickBox (‘pleaseWait’ below), until the Ajax queries had completed, unless I put an alert in place between them, then the ThickBox would appear as intended.

    function myFunc(theForm) {
        ...
        tb_show("Please …

    javascript jquery

    Multi-store Architecture for Ecommerce

    Steph Skardal

    By Steph Skardal
    February 29, 2012

    Something that never seems to go out of style in ecommerce development is the request for multi-site or multi-store architecture running on a given platform. Usually there is interest in this type of setup to encourage build-out and branding of unique stores that have shared functionality.

    A few of Backcountry.com’s stores driven by a multi-store architecture, developed with End Point support.

    End Point has developed several multi-store architectures on open source ecommerce platforms, including Backcountry.com (Interchange/Perl), College District (Interchange/Perl), and Fantegrate (Spree/Rails). Here’s an outline of several approaches and the advantages and disadvantages for each method.

    Option #1: Copy of Code Base and Database for Every Site

    This option requires multiple copies of the ecommerce platform code base, and multiple database instances connected to each code base. The stores could even be installed on different servers. This solution isn’t a true multi-store architecture, but it’s certainly the first stop for a quick and dirty approach to deploy multiple stores.

    The advantages to this method are:

    • Special template logic doesn’t have to be written per site — the …

    ecommerce interchange rails spree

    Rails 3 remote delete link handlers with Unobtrusive Javascript

    Brian Gadoury

    By Brian Gadoury
    February 28, 2012

    I recently encountered a bug in a Rails 3 application that used a remote link_to tag to create a Facebook-style “delete comment” link using unobtrusive javascript. I had never worked with remote delete links like this before, so I figured I’d run through how I debugged the issue.

    Here are the relevant parts of the models we’re dealing with:

    class StoredFile < ActiveRecord::Base
      has_many :comments, :dependent => :destroy
    end
    class Comment < ActiveRecord::Base
      belongs_to :user
      belongs_to :stored_file
    end
    

    Here’s the partial that renders a single Comment (from the show.html.erb view for a StoredFile) along with a delete link if the current_user owns that single Comment:

    <%= comment.content %> -<%= comment.user.first_name %>
    <% if comment.user == current_user >
      <%= link_to 'X', stored_file_comment_path(@stored_file, comment), :remote => true, :method => :delete, :class => 'delete-comment' >
    <% end  ->
    

    Here’s a mockup of the view with 3 comments:

    At first, the bug seemed to be that the “X” wasn’t actually a link, and therefore, didn’t do anything. Clicking the “X” with Firebug enabled told a different story. There …


    javascript jquery rails tips
    Previous page • Page 149 of 220 • Next page