• 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
  • Kamelopard Updates

    Josh Tolley

    By Josh Tolley
    February 15, 2013

    I’ve just pushed Kamelopard v0.0.10 to RubyGems. With the last couple of releases, Kamelopard has gained a couple of useful features I felt deserved some additional attention.

    Support for viewsyncrelay actions

    Many of our Liquid Galaxy tours require more than just Google Earth. For instance, it’s not uncommon to want audio or video media to play at a certain point in the tour. We may want our Liquid Galaxy enabled panoramic image viewer to start up and display an image, or perhaps we need to signal some other external process. Unfortunately Google Earth tours don’t support configuration to run these actions directly upon reaching a certain point, but there are alternatives. Google Earth synchronizes nodes in a Liquid Galaxy with what are called ViewSync packets, which tell all the slave nodes exactly where a master node’s camera is positioned, in terms of latitude, longitude, tilt, etc. We can watch this traffic to determine the master node’s progress through a tour and trigger actions at defined locations, and we use an application called viewsyncrelay (available here) to do exactly that. We configure viewsyncrelay to run certain actions when the ViewSync traffic matches a set of …


    google-earth visionport open-source ruby kamelopard kml

    Git as rsync

    Jeff Boes

    By Jeff Boes
    February 14, 2013

    I had a quick-and-dirty problem to solve recently:

    The clients had uploaded many assorted images to a development camp, but the .gitignore meant those updates were not picked up when we committed and pushed and rolled out to the live site. Normally, one would just rsync the files, but for various reasons this was not practical.

    So my solution, which I think can get filed under “Stupid ‘git’ tricks (as opposed to Tricks of a Stupid Git)”:

    (on the source repo)

    $ git checkout -b images_update
    $ git add -f path-to-missing-images
    $ git commit -m 'Do not push me! I'm just a silly temporary commit'

    (“add -f” forces the images into the index, overriding our gitignore settings)

    (on the target repo)

    $ git remote add images /path/to/source/repo
    $ git fetch
    $ git checkout -f images/images_update path-to-missing-images
    $ git remote rm images
    $ git reset HEAD path-to-missing-images

    That last “git reset” is because the newly-restored images will be git-added by default, and we didn’t want them committed to the central repo.

    So what did we do here? For those dumbfounded by the level of silly, we used git to record the state of all the files in a certain path; then we pulled them back …


    camps git

    Detecting Bufferbloat

    Brian Buchalter

    By Brian Buchalter
    February 11, 2013

    Bufferbloat is topic which has been gaining broader attention, but is still not widely understood. This post will walk you through the basics of bufferbloat and how to determine if you are the victim of bufferbloat.

    A Brief Synopsis of the Bufferbloat Problem

    The topic of bufferbloat has been explained wide and far, but I’ll add to the conversation too, focusing on brevity. This summary is based on the highly informative and technical talk Bufferbloat: Dark Buffers in the Internet, a Google Tech Talk by Jim Gettys. There is an assumption in the design of TCP that if there is network congestion, there will be timely packet loss. This packet loss triggers well designed TCP flow control mechanisms which can manage the congestion. Unfortunately, engineers designing consumer grade routers and modems (as well as all sorts of other equipment) misunderstood or ignored this assumption and in an effort to prevent packet loss added large FIFO (first-in-first-out) buffers. If users congest a network chokepoint, typically an outgoing WAN link, the device’s large buffers are filled with packets by TCP and held instead of being dropped. This “bufferbloat” prevents TCP from controlling flow and …


    networking

    Ghost Table Cells in IE9

    Greg Davidson

    By Greg Davidson
    February 8, 2013

    What’s this about ghosts?

    I recently came across an arcane layout issue in my work on a redesigned client site. The problem was specific to Internet Explorer 9 (IE9). The related CSS styles had been well tested and rendered consistently across a variety of browsers including IE7 and 8. Everything was fine and dandy until some new content was introduced into the page for a “Quickview” feature. While all of the other browsers continued to behave and render the page correctly, the layout would break in random and confusing ways in IE9.

    The following screenshots compare the correct layout with an example of the broken layout in IE9.

    Correct grid layout:

    Correct grid

    Broken layout in IE9:

    IE9 ghost cells

    The Stage

    The following is a list of the factors at work on the page in question:

    • Internet Explorer 9
    • Browser mode: IE9, Document mode: IE9 standards
    • Some content manipulation performed via JavaScript (and jQuery in this case)
    • Lots of table cells

    Debugging

    The page included a list of products. The first “page” of twelve results was shown initially while JavaScript split the rest of the list into several additional pages. Once this JavaScript pagination function was complete, users could cycle …


    browsers css javascript jquery

    Getting started with Heroku

    Marina Lohova

    By Marina Lohova
    February 7, 2013

    It’s becoming increasingly popular to host applications with a nice cloud-based platform like Engine Yard or Heroku.

    Here is a little guide showing how to join the development of a Heroku-based project. In Heroku terms it’s called “collaborating on the project”. The official tutorial does provide answers to most of the questions, but I would like to enhance it with my thoughts and experiences.

    First essential question: how to get your hands on the app source code?

    I wish Heroku had something like devcamps service provided, so you wouldn’t need to experience the hassle of launching the application locally, dealing with the database and system processes needed for development. With Heroku the code does need to be cloned to the local environment like this:

    $ heroku git:clone --app my_heroku_app

    Second, how to commit the changes?

    I got this error when trying to push to the repository:

    ! Your key with fingerprint xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx is not authorized
    to access my_heroku_app.
    fatal: The remote end hung up unexpectedly

    Turned out I needed to add the new identity to my local machine.

    Also, if you previously had accounts with Heroku with different email …


    cloud hosting

    Install SSL Certificate from Network Solutions on nginx

    Brian Buchalter

    By Brian Buchalter
    February 5, 2013

    Despite nginx serving pages for 12.22% of the web’s million busiest sites, Network Solutions does not provide instructions for installing SSL certificates for nginx. This artcle provides the exact steps for chaining the intermediary certificates for use with nginx.

    Chaining the Certificates

    Unlike Apache, nginx does not allow specification of intermediate certificates in a directive, so we must combine the server certificate, the intermediates, and the root in a single file. The zip file provided from Network Solutions contains a number of certificates, but no instructions on the order in which to chain them together. Network Solutions’ instructions for installing on Apache provide a hint, but let’s make it clear.

    cat your.site.com.crt UTNAddTrustServer_CA.crt NetworkSolutions_CA.crt > chained_your.site.com.crt

    This follows the general convention of “building up” to a trusted “root” authority by appending each intermediary. In this case UTNADDTrustServer_CA.crt is the intermediary while NetworkSolutions_CA.crt is the parent authority. With your certificates now chained together properly, use the usual nginx directives to configure SSL.

    listen                 443;
    ssl …

    hosting tls

    jQuery Performance Tips: Slice, Filter, parentsUntil

    Steph Skardal

    By Steph Skardal
    February 4, 2013

    I recently wrote about working with an intensive jQuery UI interface to emulate highlighting text. During this work, I experimented with and worked with jQuery optimization quite a bit. In the previous blog article, I mentioned that in some cases, the number of DOM elements that I was traversing at times exceeded 44,000, which caused significant performance issues in all browsers. Here are a few things I was reminded of, or learned throughout the project.

    • console.profile, console.time, and the Chrome timeline are all tools that I used during the project to some extent. I typically used console.time the most to identify which methods were taking the most time.
    • Caching elements is a valuable performance tool, as it’s typically faster to run jQuery calls on a cached jQuery selector rather than reselecting the elements. Here’s an example:
    Slower Faster
    //Later in the code
    $('.items').do_something();
    
    //On page load
    var cached_items = $('.items');
    //Later in the code
    cached_items.do_something();
    
    Slower Faster
    $('.highlighted');
    
    cached_items.filter('.highlighted');
    

    javascript jquery rails

    How to Apply a Rails Security Patch

    Brian Buchalter

    By Brian Buchalter
    January 29, 2013

    With the announcement of CVE-2013-0333, it’s time again to secure your Rails installation. (Didn’t we just do this?) If you are unable to upgrade to the latest, secure release of Rails, this post will help you apply a Rail security patch, using CVE-2013-0333 as an example.

    Fork Rails, Patch

    The CVE-2013-0333 patches so kindly released by Michael Koziarski are intended for use with folks who have forked the Rails repository. If you are unable to keep up with the latest releases, a forked repo can help you manage divergences and make it easy to apply security patches. Unfortunately, you cannot use wget to download the attached patches directly from Google Groups, so you’ll have to do this in the browser and put the patch into the root of your forked Rails repo. To apply the patch:

    cd $RAILS_FORK_PATH
    git checkout $RAILS_VERSION
    # Download attachment from announcement in browser, sorry no wget!
    git am < $CVE.patch

    You should see the newly committed patch(es) at the HEAD of your branch. Push out to GitHub and then bundle update rails on your servers.

    Patching without Forks

    If you are in the unfortunate case where there have been modifications or patches applied informally outside …


    rails security
    Previous page • Page 128 of 223 • Next page