Liquid Galaxy at New York Tech Meetup
On December 15th, End Point presented the Liquid Galaxy at New York Tech Meetup, the largest meetup group in the world. End Point Co-Founder/President Ben Goldstein and I gave a five minute overview and then answered questions from the audience for another five minutes. At the conclusion of the presentation portion of the event, attendees went to the after-party, where we had a full Liquid Galaxy system set up for attendees to experience for themselves.
I opened up the presentation by speaking about where the Liquid Galaxy is being utilized (corporate offices, museums, and commercial enterprises around the world), and about the setup of the system (large paneled HDTVs, a touchscreen, 3D joystick, and 3 rack-mount servers). I talked about how the Liquid Galaxy was originally a tool designed to view Google Earth in an immersive setting, but from there End Point has expanded the Liquid Galaxy’s capabilities to make it a tool for educational and commercial use, marketing, sales, and research.
I went on to explain how End Point’s Content Management System gives users the ability to tell their story and show information and data points on the system. You easily can include images, …
event visionport
Postgres checksum performance impact
Way back in 2013, Postgres introduced a feature known as data checksums. When this is enabled, a small integer checksum is written to each “page” of data that Postgres stores on your hard drive. Upon reading that block, the checksum value is recomputed and compared to the stored one. This detects data corruption, which (without checksums) could be silently lurking in your database for a long time. We highly recommend to our Postgres clients to turn checksums on; hopefully this feature will be enabled by default in future versions of Postgres.
However, because TANSTAAFL (there ain’t no such thing as a free lunch), enabling checksums does have a performance penalty. Basically, a little bit more CPU is needed to compute the checksums. Because the computation is fast, and very minimal compared to I/O considerations, the performance hit for typical databases is very small indeed, often less than 2%. Measuring the exact performance hit of checksums can be a surprisingly tricky problem.
There are many factors that influence how much slower things are when checksums are enabled, including:
- How likely things are to be read from shared_buffers, which …
database postgres
2015 Perl Dancer Conference videos
The 2015 Perl Dancer Conference has recently released the presentation videos. This year the conference was hosted in beautiful Vienna, Austria. Josh Lavin and I were both honored to attend the conference as well as give talks. Earlier, Josh wrote summaries of the conference:
Conference Recap
Conference Presentations
SpaceCamps “The Final Frontier”
I gave a talk exploring new technologies for End Point’s own DevCamps development tool. During the presentation I detailed my research into containers and what a cloud-based development environment might look like.
AngularJS & Dancer for Modern Web Development
Josh detailed his experience migrating legacy applications utilizing Dancer, AngularJS, and modern Perl techniques. Josh highlighted the challenges he faced during the process, as well as lessons he learned along the way.
AngularJS & Dancer for Modern Web Development Presentation Video
Lightning Talks
Josh and I both gave short “lightning talks.” Josh’s was on Writing Unit Tests for a Legacy App (Interchange 5), and mine was on Plack & Interchange 5.
To review the rest of the presentations please checkout the …
angular camps dancer environment interchange perl
Git: pre-receive hook error on CentOS 7
We recently had to move a git repository from an old CentOS 5 to a new CentOS 7 server.
On the old CentOS 5 we had a recent, custom compiled version of git while on the new server we are using the system default old 1.8 version, shipped by the official CentOS repositories. And, as usual when you tell yourself “What could possibly go wrong?”, something did: every push began to return the dreaded “fatal: The remote end hung up unexpectedly” error.
After some time spent trying to debug the problem, we managed to isolate the problem to the pre-receive hook, specifically active on that repository. The script was very simple:
#!/bin/bash
read_only_users="alice bob"
for user in $read_only_users
do
if [ $USER == $user ]; then
echo "User $USER has read-only access, push blocked."
exit 1
fi
done… which apparently had no visible mistakes. On top of the lack of errors, this very same script used to work perfectly for years on the old server. Unfortunately, and quite disappointingly, even changing it to a simple:
#!/bin/bash
echo "These are not the droids you are looking for. Move along."…did not help and the error …
redhat git
Event Listener Housekeeping in Angular Apps
I was recently debugging an issue where a large number of errors suddenly cropped up in an angular application. The client reported that the majority of the errors were occurring on the product wall which was an area of application I was responsible for. After some sleuthing and debugging I determined the culprit was a scroll event listener in an unrelated angular controller. When customers viewed this section of the application, the scroll listener was added to manage the visibility of some navigation elements. However, when the customer moved on to other sections of the site the listener continued to fire in a context it was not expecting.
Scroll event listeners fire very often so this explained the sheer volume of errors. The product wall is a tall section of the site with lots of content so this explained why the bulk of the errors were happening there. The solution was to simply listen to the $destroy event in the controller and unbind the troublesome scroll listener:
$scope.$on('$destroy', function() {
$window.unbind('scroll');
});Single page apps do not have the benefit of getting a clean state with each page load. Because of this it’s important to keep …
html javascript
ROS architecture of Liquid Galaxy
ROS has become the pivotal piece of software we have written our new Liquid Galaxy platform on. We have also recently open sourced all of our ROS nodes on GitHub. While the system itself is not a robot per se, it does have many characteristics of modern robots, making the ROS platform so useful. Our system is made up of multiple computers and peripheral devices, all working together to bring view synced content to multiple displays at the same time. To do this we made use of ROS’s messaging platform, and distributed the work done on our system to many small ROS nodes.
Overview
Our systems are made up of usually 3 or more machines:
- Head node: Small computer that runs roscore, more of a director in the system.
- display-a: Usually controls the center three screens and a touchscreen + spacenav joystick.
- display-b: Controls four screens, two on either side of the middle three.
- display-$N: Controls more and more screens as needed, usually about four a piece.
Display-a and display-b are mostly identical in build. They mainly have a powerful graphics card and a PXE booted Ubuntu image. ROS has become our means to communicate between these machines to synchronize content across the …
visionport python ros kml
ROS Platform Upgrades for Liquid Galaxy
For the last few months, End Point has been rolling out a new application framework along with updated display applications and monitoring infrastructure for the Liquid Galaxy Display Platform. These upgrades center on the ROS framework and allow a great number of functionality extensions and enhancements for the end user, as well as improvements to the stability and security of the core systems. It is intended that the 50+ systems that we currently maintain and support on behalf of our enterprise clients will be upgraded to this new platform.
ROS Overview
ROS is short for “Robot Operating System”. Just as it sounds, it is a framework used for controlling robots, and handles various environmental ‘inputs’ and ‘outputs’ well. End Point chose this framework in conjunction with related ongoing development projects on behalf of our enterprise clients. This system allows complex interactions from a touchscreen, camera, SpaceNav, or other device to be interpreted conditionally and then invoke other outputs such as displaying Google Earth, Street View, or other content on a given screen, speaker, or other output device. For more details, see: http://www.ros.org
Liquid Galaxy …
gis google-earth visionport ros
Testing Django Applications
This post summarizes some observations and guidelines originating from introducing the pytest unit testing framework into our CMS (Content Management System) component of the Liquid Galaxy. Our Django-based CMS allows users to define scenes, presentations and assets (StreetView, Earth tours, panos, etc) to be displayed on the Liquid Galaxy.
The purpose of this blog post is to capture my Django and testing study points, summarize useful resource links as well as to itemize some guidelines for implementing tests for newcomers to the project. It also provides a comparison between Python’s standard unittest library and the aforementioned pytest. Its focus is on Django database interaction.
Versions of software packages used
This post describes some of our experiences at End Point in designing and working on comprehensive QA/CI facilities for a new system which is closely related to the Liquid Galaxy.
The experiments were done on Ubuntu Linux 14.04:
- python (2.7.6) and its corresponding version of unittest
- django 1.7 (current recent is 1.9 but our CMS uses still 1.7 version)
- pytest-django 2.8.0
- pytest 2.7.2 (with py 1.4.30)
- virtualenv 13.1.2
- factory_boy 2.6.0
Testing Django …
django jenkins python testing cms visionport




