• 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

    Dynamically adding custom radio buttons in Android

    Zed Jensen

    By Zed Jensen
    May 9, 2013

    I’ve been writing a timesheet tracking app for End Point. In working on various features of this app, I’ve had more than a few problems to work through, since this project is one of my first on Android and I’ve never used many of the Android features that I’m now using. One particularly fun bit was setting up a scrollable list of radio buttons with numbers from 0 – 23 (no, we don’t often have people working 23 hours on a project in a day, but just in case!) when the user is creating an entry, as a prettier and more backward-compatible alternative to using a number picker to indicate how many hours were spent on this particular job.

    In Android, view layouts are usually defined in XML like this:

    layout/activity_hour_picker.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent" >
      <Button android:id="@+id/button"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:onClick="doStuff"
        android:text="Hello World!" …

    android mobile

    Dimensional Modeling

    Josh Tolley

    By Josh Tolley
    May 8, 2013

    People occasionally bring up the question, “What exactly is a data warehouse?” Though answers to this question vary, in short a data warehouse exists to analyze data and its behavior over large swaths of time or many different data sources. There’s more to it, though, than simply cramming historical data into the same old database. There are a number of defining characteristics, including the following:

    • Query patterns and behavior
    • Data retention policy
    • Database structure

    Query Behavior

    Data warehouses are sometimes called “OLAP” databases, which stands for “on-line analytical processing”, in contrast to the more common “OLTP”, or “on-line transaction processing” databases that manage data for an online storefront, a bug tracker, or a blog. A typical OLTP database supports applications that issue short, simple queries, and expect quick answers and support for many simultaneous transactions. The average OLAP query, by contrast, is generally read-only, but can be quite complex, and might take minutes or hours to complete. Such queries will often include heavy-duty statistical processing and data mining, involving terabytes of data.

    Data Retention

    In a typical e-commerce database, …


    database pentaho reporting casepointer

    Using Modernizr with the Rails Asset Pipeline

    Mike Farmer

    By Mike Farmer
    May 8, 2013

    Like many web developers, I use Google Chrome to develop my front-end user interface. I do this because the Chrome Developer Tools are very nice at letting me fix CSS styles and debug JavaScript. One downfall to using Google Chrome as my only view of my website while developing, however, is that I often find that I’ve used some feature of HTML or CSS that isn’t supported by other browsers. While this problem seems to come less often these days, I still find the occasional glitch. Most notably, this seems to happen with Microsoft’s Internet Explorer (IE) more than any other browser.

    During a recent project, I finished up the UI so that everything looked and felt great. Then I popped open IE to see what sort of things I would need to fix. One feature of HTML that I didn’t know wasn’t supported by IE was that of placeholder text for form inputs. For example:

    <input type="text" name="user_name" placeholder="Enter your user name" />
    

    This HTML generates a nice looking input box with the words “Enter your user name” already entered into the input field. When a user clicks on the field, the placeholder text disappears so that the user can begin to add their …


    javascript rails

    End Point Europe meeting in Warsaw

    Jon Jensen

    By Jon Jensen
    May 7, 2013

    Recently End Point’s European crew from Italy, Germany, and Poland met up for two full days in Warsaw. We rented an apartment and the four full-time End Pointers (Kamil, Szymon, Lele, and Jon) and two interns (Zed, Phin) worked together there on several projects.

    It was great to take advantage of the chance to collaborate in person on several projects, many of which we just got off the ground there:

    • Kamil and Szymon started work on a new AngularJS auto-CRUD admin (like RailsAdmin and the Django admin), which may grow into the Interchange 6 admin. Jon added support to Perl’s SQL::Translator (aka SQLFairy) to import/export database schemas in JSON format, which the Angular.js admin app can use.
    • Lele started work on upgrading our Request Tracker instance, which is more complicated than we would like, but needs to be done.
    • Szymon showed us all some details of Debian (and Ubuntu) package building that he’s done for Google, and packaged some simple internal scripts that we’ve only had in RPM and Yum to date.
    • Zed worked more on our Android time tracking app, and Kamil threatened to start an iOS port of it since he’s fallen in love with Objective-C.
    • Phin worked more on the Interchange …

    company conference remote-work travel

    Rackspace Load Balancers network issues and “desperate” solution

    Most people in IT already know the common “Have you tried turning it off and on again?” joke and about all of them also know that sometimes it just works.

    In a sense that’s what I experienced with Rackspace Load Balancers when after a day of networking troubleshooting, which involved (but was not limited to):

    • iptables rules proof-reading
    • overlapping network mask checks
    • tcpdump network traffic troubleshooting
    • software functionality testing both via localhost and different hosts

    I had an enlightenment moment when I realized that while I was waiting for the next desperate solution to pop out some remote areas of my brain I could just remove all nodes from the load balancer (via the web interface) and then add them back, without actually making any other change. Well it turns out that this was the solution that I was looking for after a day of reckless debugging.

    So lesson learned: before hurting yourself, try once again the most simple, obvious and possibly silly answers… and just a second before considering the impossible become possible, try “turning it off and on once again”.


    iptables sysadmin

    Elasticsearch: Give me object!

    Miguel Alatorre

    By Miguel Alatorre
    April 30, 2013

    I’m currently working on a project where Elasticsearch is used to index copious amounts of data with sometimes deeply nested JSON. A recurring error I’ve experienced is caused by a field not conforming to the type listed in the mapping. Let’s reproduce it on a small scale.

    Assuming you have Elasticsearch installed, let’s create an index and mapping:

    $ curl -XPUT 'http://localhost:9200/test' -d '
    {
        "mappings": {
            "item": {
                "properties": {
                    "state": {
                        "properties": {
                            "name": {"type": "string"}
                        }
                    }
                }
            }
        }
    }
    '
    {"ok":true,"acknowledged":true}
    

    Since we’ve defined properties for the “state” field, Elasticsearch will automatically treat it as an object.* Let’s now add some documents:

    $ curl -XPUT 'http://localhost:9200/test/item/1' -d '
    {
        "state": {
            "name": "North Carolina"
        }
    }
    '
    {"ok":true,"_index":"test","_type":"item","_id":"1", …

    elasticsearch json search

    Estimating overlayfs File Space Usage on Ubuntu 12.04 LiveCD

    Adam Vollrath

    By Adam Vollrath
    April 24, 2013

    End Point’s Liquid Galaxy platform is a cluster of computers distributing the rendering load of Google Earth and other visualization applications. Each of these “display nodes” boots the same disk image distributed over the local network. Our disk image is based on the Ubuntu 12.04 LiveCD, and uses the same overlayfs to combine a read-only ISO with a writeable ramdisk. This Union mount uses Copy-on-write to copy files from the read-only “lower” filesystem to the virtual “upper” filesystem whenever those files or directories are opened for writing.

    We often allocate 4GB of system memory to the ramdisk containing the “upper” filesystem. This allows 4GB of changed files on the / filesystem, most of which are often Google Earth cache files. But sometimes the ramdisk fills up with other changes and it’s difficult to track down which files have changed unexpectedly.

    The df command properly displays total usage for the overlayfs “upper” filesystem mounted at /.

    $ df -h
    Filesystem              Size  Used Avail Use% Mounted on
    /cow                    3.9G  2.2G  1.8G  55% /
    /dev/loop0              833M  833M     0 100% /cdrom
    /dev/loop1              808M  808M     0 100% /rofs
    

    But how can …


    google-earth linux visionport sysadmin ubuntu

    SSH ProxyCommand with netcat and socat

    Greg Sabino Mullane

    By Greg Sabino Mullane
    April 24, 2013

    Picture by Tambako the Jaguar

    Most of my day to day is work is conducted via a terminal, using Secure Shell (SSH) to connect to various servers. I make extensive use of the local SSH configuration file, ~/.ssh/config file, both to reduce typing by aliasing connections, and to allow me to seamlessly connect to servers, even when a direct connection is not possible, by use of the ProxyCommand option.

    There are many servers I work on that cannot be directly reached, and this is where the ProxyCommand option really comes to the rescue. It allows you to chain two or more servers, such that your SSH connections bounce through the servers to get to the one that you need. For example, some of our clients only allow SSH connections from specific IPs. Rather than worry about which engineers need to connect, and what IPs they may have at the moment, engineers can access servers through certain trusted shell servers. Then our engineers can SSH to one of those servers, and from there on to the client’s servers. As one does not want to actually SSH twice every time a connection is needed, the ProxyCommand option allows a quick tunnel to be created. Here’s an example entry for a .ssh/config …


    networking ssh sysadmin
    Previous page • Page 120 of 219 • Next page