• 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
  • What’s the difference?

    Josh Tolley

    By Josh Tolley
    February 27, 2011

    Not long ago a software vendor we work with delivered a patch for a bug we’d been having. I was curious to know the difference between the patch, a .tgz file, and the files it was replacing. I came up with this:

    ( \
      for i in `( \
          find new -type f | sed "s/new\///" ; \
          find old -type f | sed "s/old\///" ) | \
          sort | uniq`; do \
        md5sum old/$i new/$i 2>&1; \
      done \
    ) | uniq -u  -c -w 32

    Assuming the original .tgz file was unpacked into a directory called “old”, and the new one into “new”, this tells me which files exist in one directory and not other, and which files exist in both in different forms. Here’s an example using a few random files in two directories:

    josh@eddie:~/tmp/transient$ ls -l old new
    new:
    total 16
    -rw-r--r-- 1 josh josh 15 2011-03-01 10:15 1
    -rw-r--r-- 1 josh josh 12 2011-03-01 10:14 2
    -rw-r--r-- 1 josh josh 13 2011-03-01 10:15 3
    -rw-r--r-- 1 josh josh 12 2011-03-01 10:16 4
    
    old:
    total 16
    -rw-r--r-- 1 josh josh 15 2011-03-01 10:15 1
    -rw-r--r-- 1 josh josh  5 2011-03-01 10:06 2
    -rw-r--r-- 1 josh josh 13 2011-03-01 10:15 3
    -rw-r--r-- 1 josh josh 20 2011-03-01 10:18 5
    
    josh@eddie:~/tmp/transient$ ( \
    >   for i in `( …

    tips

    YUI Extensions and Post Initialization

    Brian J. Miller

    By Brian J. Miller
    February 26, 2011

    When using YUI3’s provided extension mechanism to enhance (composite, mix in, role, whatever you like to call it) a Y.Base inherited base class, it is often helpful to have “post initialization” code run after the attributes’ values have been set. The following code provides an easy way to hook onto a Y.Base provided attribute change event to run any post initialization code easily.


    javascript

    Debugging PHP extensions with the dynamic linker

    Jason Dixon

    By Jason Dixon
    February 25, 2011

    If you’ve ever had to track down a missing dependency or incompatible libraries, chances are good that you were assisted by the ldd command. This helpful utility reports the list of shared library dependencies required by a binary executable. Or in the typical use case, it will tell you which libraries are missing that your application needs to run.

    Fortunately most Linux and BSD distributions do a decent job of enforcing dependencies with their respective package managers. But inevitably, there’s the occasional proprietary, closed-binary third-party application or built-from-source utility that skirts the convenience of mainstream distributions. If you’re lucky, the vendor accurately details which software is required, including specific versions theirs was built against. If you’re not, well, you might have to resort to tools like ldd, or even process tracers like strace (Linux), ktrace (OpenBSD) and truss (Solaris).

    I recently had the misfortune of troubleshooting a PHP application that was unable to load imagick.so, a native PHP extension to create and modify images using the ImageMagick API. The problem manifested itself innocently enough:

    PHP Warning:  PHP Startup: Unable to …

    linux php tools

    Google Earth KML Tour Development Challenges on Liquid Galaxy

    Adam Vollrath

    By Adam Vollrath
    February 24, 2011

    Because Liquid Galaxy runs Google Earth, it can easily visualize an organization’s GIS data. End Point also develops tours within Google Earth to better present this data. A Liquid Galaxy’s networked multi-system architecture presents unique technical challenges to these tours.

    Many Google Earth tours incorporate animations and dynamic updates using the <gx:AnimatedUpdate> element. KML features in the Earth environment can be modified, changed, or created during a tour, including the size, style, and location of placemarks, the addition of ground overlays, geometry, and more.

    However, these updates are only executed on the Liquid Galaxy master system running the tour, not sent to its slaves. Liquid Galaxy nodes communicate primarily via ViewSync UDP datagrams. These datagrams contain only the master’s position in space and time. This means we cannot use <gx:AnimatedUpdate> to animate features across all Liquid Galaxy systems, sharply limiting its utility.

    But tours can also use chronological elements to display, animate, and hide features. Using <gx:TimeSpan> or <gx:TimeStamp> within an tour stop enables flying to a specific location in space and time. All …


    google-earth visionport kml

    Ecommerce Facebook Integration Tips

    Steph Skardal

    By Steph Skardal
    February 23, 2011

    Over the past couple of months, I’ve done quite a bit of Facebook integration work for several clients. All of the clients have ecommerce sites and they share the common goal to improve site traffic and conversion with successful Facebook campaigns. I’ve put together a brief summary of my recent experience.

    First, here are several examples of Facebook integration methods I used:

    Name & Notes Screenshot Examples
    Link to Facebook Page: This is the easiest integration option. It just requires a link to a Facebook fan page be added to the site. A link to Lots To Live For’s Facebook page was added to the header.
    Facebook Like Button: Implementation of the like button is more advanced than a simple link. Technical details on implementation are discussed below. This was integrated on multiple product page templates. The "like" event and page shows up on the user’s wall. Like button’s were added throughout Paper Source’s site. The screenshot shown above indicates I’ve liked this product page.

    "Liking" a product page shows up on my facebook wall.
    Facebook Like Box: Another example of Facebook integration is adding a “Like Box”. Acting on the Like Box results in liking …

    ecommerce social-networks

    GNU Screen + SSH_AUTH_SOCK; my new approach

    David Christensen

    By David Christensen
    February 23, 2011

    Over the years, I’ve played around with several different methods of keeping my forwarded SSH-Agent authentication socket up-to-date in long-running screen sessions (referenced via the $SSH_AUTH_SOCK shell variable). The basic issue here is that Screen sees the process environment at the time it was initially launched, not that which exists when reattaching in a subsequent login session. This means that the $SSH_AUTH_SOCK variable as screen sees it will refer to a socket which no longer exists (as it was removed when you logged out after detaching on the initial login when starting screen).

    Some of my previous methods have included a hard-coded variable for the socket itself (downsides: if it’s a predictable name you’re potentially opening some security issues, plus if you open multiple sessions to the same account, you kill the latest socket), symlinking the latest $SSH_AUTH_SOCK to a hard-coded value on login (similar issues), dumping $SSH_AUTH_SOCK to a file, and aliasing ssh and scp to first source said file to populate the local window’s enviroment (doesn’t work in scripts, too much manual setup when adapting to a new system/environment, won’t work with any other subsystem not …


    environment sysadmin tips tools

    A Simple WordPress Theme In Action

    Steph Skardal

    By Steph Skardal
    February 22, 2011

    I’m a big fan of WordPress. And I’m a big fan of building WordPress themes from the ground up. Why am I a big fan of building them from the ground up? Because…

    • It’s very easy to setup and build if you plan to move to utilize WordPress’s blog architecture for your site, but just have a set of static pages initially.
    • It allows you to incrementally add elements to your theme from starting from the ground up, rather than cutting out elements from a complex theme.
    • It allows you to leave out features that you don’t need (search, comments, archives, listing of aticles), but still take advantage of the WordPress plugin community and core functionality.
    • The learning curve of WordPress APIs and terminology can be complicated. It’s nice to start simple and build up.

    Here are some screenshots from my simple WordPress theme in action, a site that contains several static pages.

    The template is comprised of several files:

    File Notes
    header.php Includes doctype, header html, and global stylesheets included here. wp_head() is called in the header, which will call any executables tied to the header hook using WordPress’s hook API. wp_list_pages() is also called, which is …

    php wordpress

    Managing Perl environments with perlbrew

    Jason Dixon

    By Jason Dixon
    February 21, 2011

    As a Perl hobbyist, I’ve gotten used to the methodical evolution of Perl 5 over the years. Perl has always been a reliable language, not without its faults, but with a high level of flexibility in syntactical expression and even deployment options. Even neophytes quickly learn how to install their own Perl distribution and CPAN libraries in $HOME. But the process can become unwieldy, particularly if you want to test across a variety of Perl versions.

    To contrast, Ruby core development frequently experiences ABI breakages, even between minor releases. In spite of the wide adoption of Ruby as a Web development language (thanks to Ruby on Rails), Ruby developers are able to plod along unconcerned, where these incompatibilities would almost certainly lead to major bickering within the Perl or PHP communities. How do they do it? The Ruby Version Manager.

    Ruby Version Manager (RVM) allows users to install Ruby and RubyGems within their own self-contained environment. This allows each user to install all (or only) the software that their particular application requires. Particularly for Ruby developers, this provides them with the flexibility to quickly test upgrades for regressions, ABI …


    environment perl ruby
    Previous page • Page 171 of 223 • Next page