• 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

    How We Do It

    Rick Peltzman

    By Rick Peltzman
    January 31, 2022

    Ducks walking on grass in a park

    As CEO of End Point Dev, a tech and software company of about 50 people, I have seen our company tested with many challenges over our 27 years in business: the “dot-com” implosion in 2000, the financial crisis of 2009, and various wars and geopolitical upheavals, to name a few.

    The latest, of course, are the well-documented hurdles associated with running a company in the age of the COVID-19 pandemic, as well as the political divisions that have been simultaneously affecting the world.

    Today I want to reflect on how End Point has navigated these churning waters. Perhaps some of our approaches may be useful to others.

    Distributed Workforce

    End Point is a distributed company and has been since its founding in 1995. This means that most of the staff works remotely from home offices, using telecommunication. This lets us be distributed all over the globe and has allowed us to:

    • Minimize office costs, which helps offset our occasional travel costs for in-person meetings;
    • Find highly-qualified people wherever they live, not just in the geographic areas near our company offices in New York City and eastern Tennessee;
    • Enable staff who prefer to work from home to do so, while those who …

    company

    How to use regular expression group quantifiers in PostgreSQL

    Selvakumar Arumugam

    By Selvakumar Arumugam
    January 27, 2022

    Side of brick building with windows and protruding roof, tiered shrubs in foreground, with a small corner of blue sky, clouds, and snowy mountaintop

    I recently encountered a situation where it was necessary to extract address content from text in HL7 V2 format from a PostgreSQL table’s column. The following example is representative:

    ||121212^^^2^ID 1|676767||SELVA^KUMAR^^^^|19480203|M||B||123456 SAMPLE ROAD^^New York City^NY^12345^USA^H^^New York||123456-7890|||M|NON|4000|
    

    In order to manipulate our example, the address section needs to be extracted from the HL7 V2 message PID segment for patient demographic information. The segments have delimiters for fields (|), components (^), subcomponents (&) and repetition (~).

    Our example has only fields and components delimited by pipe (|) and caret (^). The address contains nine components delimited by ^.

    I hoped to do this by applying a regular expression (regex) because the address is in a standard format that regex can match with alphanumeric and caret repetition.

    Here is my journey figuring out how to match the data I wanted.

    Regex pattern in grep

    As a test, I got this regex working with the grep command, which successfully extracts the address section from the content:

    $ content='||121212^^^2^ID 1|676767||SELVA^KUMAR^^^^|19480203|M||B||123456 SAMPLE ROAD^^New …

    postgres sql regex hl7 casepointer

    Using SSH tunnels to get around network limitations

    Zed Jensen

    By Zed Jensen
    January 26, 2022

    Cliff dwelling in Arizona

    SSH is an extremely useful way to use computers that you aren’t in front of physically.

    It can also be used to overcome some unique networking challenges, particularly those where one computer needs to connect to another in an unorthodox way. Let me show you a couple of uses of SSH tunnels that have come in handy for me personally.

    Serving content without a public IP address

    In the past, I wrote about maintaining a Minecraft server to play on with my friends. In that case I was dealing with being physically separated from the server hardware I intended to use, but once I got that machine back, I realized that I still had a problem: My ISP and their networking gear didn’t support port forwarding, meaning that I couldn’t connect to my server from outside my home network. But even if I could have, the public IP address I was assigned changed regularly.

    One solution I found was to use a reverse SSH tunnel to forward traffic from a publicly-visible virtual server to my local server.

    To set this up, you just need your local machine and a server with a publicly visible IP address. I used a virtual machine from UpCloud, which costs $5 per month, but you could use any …


    development networking sysadmin ssh tips docker containers

    VisionPort Hardware Overview

    Alejandro Ramon

    By Alejandro Ramon
    January 24, 2022

    A VisionPort system, with labeled servers, wall, displays, and controllers

    End Point’s VisionPort has gone through a number of hardware iterations before becoming the system our clients are familiar with today. In this post, we will break down the history of the changes we have made over the years, and how we ended up where we are today.

    The latest server specification used for all current VisionPort installations is known internally as the “LGOne” (Liquid Galaxy One): a node that can support up to eight discrete displays as a single desktop. LGOne is now considered the default specification and will guide the direction and future of VisionPort platform development.

    A few definitions before we continue

    • Node: a single computer/​server.
    • Display node: A computer that acts as a source for the displays, and runs applications.
    • Head node: A computer that acts as the “brain” of the system.

    Some history

    The original server specification for the Liquid Galaxy (now known as VisionPort), was developed around 2011 and is now known as “LGClassic”. The LGClassic specification supported one display per node. For the typical seven-screen installation, this meant that eight individual LGClassic display nodes and one head node were required to run our seamless video wall …


    visionport

    Creating Telegram bots with Google Apps Script

    Empty clothes in the shape of a human sitting on a bench with fall leaves

    In a previous post on this blog, Afif wrote about how to use Google Apps Script with Google Forms. Coincidentally, last year I learned a bit about how to use Google Apps Script with Telegram Bot as a personal ledger tool, as outlined in this post by Mars Escobin.

    The Telegram Bot I created from Mars’s code looks like this:

    In this post I will share a bit on how to adapt Mars’s code and use Telegram Bot to get the input from the user and let Google Apps Script call Google’s cloud-based services (translation and finance) to later return the outputs to the user.

    The initial process of creating a Telegram bot is outlined on Telegram’s website. After receiving Telegram’s API key we can use it inside our Google Apps Script editor.

    Translation Bot

    One way to use the Telegram Bot and Google Cloud Services which came to mind was to create a translation bot. Although there are undoubtedly tons of mobile apps out there which do the same thing, I wanted to learn about it by using Telegram. So I found a class that I could use in Apps Script to realize that.

    Google Apps Script can be used to manipulate the Google Translate capability by calling the Language.App class. The translation …


    google-apps-script chat integration

    Comparison of Lightweight CSS Frameworks

    Seth Jensen

    By Seth Jensen
    January 13, 2022

    The frame of a house in front of a mountain range

    Several months ago I was building a new website and needed a CSS framework. There are many new CSS frameworks around now, so I decided to do several small trial runs and compare them to find the most fitting for our site.

    Initially I tried using Foundation, which this site is built on, but I ran into a problem: Foundation and other popular frameworks are powerful, but they have more features than I needed, and they take up too much disk space for a modest website. Foundation is about 6000 lines long and 200kB unminified. It can be shrunk by removing components you don’t need, but the time it takes to slim a large CSS framework down to your needs can be more than it’s worth, especially if you want to change any styling.

    Instead of adapting a larger framework to my needs, I looked into lightweight CSS frameworks. These aim to provide boilerplate components, better styling for buttons, forms, tables, and the like, all at the cost of very little disk space.

    I like to modify the source CSS as needed, so all of the sizes I list will be unzipped and unminified. They are also from my brief real-world testing on one machine, so your mileage may vary.

    Bulma

    Bulma looked very …


    css design

    Database integration testing with .NET

    Kevin Campusano

    By Kevin Campusano
    January 12, 2022

    Sunset over lake in mountains

    Ruby on Rails is great. We use it at End Point for many projects with great success. One of Rails’ cool features is how easy it is to write database integration tests. Out of the box, Rails projects come with all the configuration necessary to set up a database that’s exclusive for the automated test suite. This database includes all the tables and other objects that exist within the regular database that the app uses during its normal execution. So, it is very easy to write automated tests that cover the application components that interact with the database.

    ASP.NET Core is also great! However, it doesn’t have this feature out of the box. Let’s see if we can’t do it ourselves.

    The sample project

    As a sample project we will use a REST API that I wrote for another article. Check it out if you want to learn more about the ins and outs of developing REST APIs with .NET. You can find the source code on GitHub.

    The API is very straightforward. It provides a few endpoints for CRUDing some database tables. It also provides an endpoint which, when given some vehicle information, will calculate a monetary value for that vehicle. That’s a feature that would …


    dotnet integration database testing docker containers

    On the Importance of Explicitly Converting Strings to Numbers

    Jeff Laughlin

    By Jeff Laughlin
    January 11, 2022

    Wall with tiles of 4 colors in a pattern

    Recently a valued colleague approached me with a JavaScript problem. This individual is new to programming and is working on a self-taught course.

    The assignment was fairly simple: Take a list of space-delimited integers and find the maximum and minimum values. If you are an experienced developer you can probably already guess where this is going. His code:

    function highAndLow(numbers) {
      const myArr = numbers.split(" ");
      let lowNum = myArr[0];
      let highNum = myArr[0];
      for (let i = 0; i < myArr.length; i++) {
        if (myArr[i] > highNum) {
          highNum = myArr[i];
        } else if (myArr[i] < lowNum) {
          lowNum = myArr[i];
        }
      }
      return highNum + ' ' + lowNum;
    }
    
    console.log(highAndLow("8 3 -5 42 -1 0 0 -9 4 7 4 -4"));
    

    This produced the output:

    "8 -1"
    

    These are clearly not the maximum or minimum values.

    After looking at it for a few moments I recognized a classic JavaScript pitfall: failure to explicitly convert stringy numbers to actual number types.

    You see, JavaScript tries to be clever. JavaScript tries to get it right. JavaScript tries to say “the thing you are doing looks like something that you would do with numbers so …


    programming javascript typescript
    Previous page • Page 18 of 218 • Next page