• 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

    Uploading multiple files in a single request in an ASP.NET Core application

    Kevin Campusano

    By Kevin Campusano
    July 4, 2024

    Lines of wispy clouds move upward and to the left against a backdrop of light blue sky

    We recently developed a web application for maintaining an ecommerce site’s product catalog. Unsurprisingly, one of the features involved the management of product images. Specifically, we wanted to create a page where all the images of a given product were displayed and new ones could be uploaded.

    In addition to that, this wasn’t a single-page application. We weren’t using a JavaScript framework and instead were relying on regular server-rendered views with ASP.NET Razor Pages. Even so, we wanted to create a user experience with a good balance of usability and development complexity. So, we decided to create the capability of uploading several image files at once within a single request — that is, within a single HTML form submission.

    In this article, I’m going to describe the solution that we came up with in order to make this happen.

    To demonstrate the approach, I’ll use a sample ASP.NET Core solution that I’ve been building out throughout several blog posts. Its main feature is calculating the value of used cars and offering quotes for them. The system stores all generated quotes as database records. Given this context, we’ll add the …


    dotnet aspdotnet csharp

    Secure Your Dockerized Nginx with Let's Encrypt SSL Certificates

    Jeffry Johar

    By Jeffry Johar
    June 27, 2024

    A rusted lock at at an old wooden door

    Photo by Animesh Srivastava from Pexels.

    In this tutorial I will demonstrate how to secure Nginx on Docker using HTTPS, leveraging free certificates from Let’s Encrypt. Let’s Encrypt certificates provide trusted and secure encryption at no cost, although they require renewal every 90 days. Fortunately, this renewal process can be automated with various tools. We will use acme.sh, a versatile Bash script compatible with major platforms. The tutorial will guide you through obtaining Let’s Encrypt certificates on the host system and mounting them as a volume in the Nginx container. Please ensure the following prerequisites are met before proceeding:

    • Working Docker Engine
    • Working domain name
    • A host with ports 80 and 443 that is accessible from the internet

    1. Domain validation

    First, we need an Nginx instance on Docker that will expose port 80 and have a directory on the host mounted for its web root. This is required by acme.sh for its file-based domain validation. I’ve prepared a Docker Compose file (docker-compose.yml) and an Nginx configuration file (nginx.conf) for this purpose. Git clone the following repository and change into the directory

    git clone …

    docker linux nginx tls security

    Practical Linux Command Line Tips for Productivity and Efficiency

    Edgar Mlowe

    By Edgar Mlowe
    June 22, 2024

    A shadow draws sharp lines on brightly lit concrete. On the left side is a thick line descending across the full height diagonally, connected at the top to a subtly curved line which spans the full width of the image. It is connected by a thinner parallel diagonal line, which has two more horizontal lines equally spaced across the image.

    Feeling stuck with basic Linux commands? You’re not alone! Many people know some commands but don’t feel efficient. The good news is that with some know-how and common commands, you can transform your skills.

    In this post, you’ll learn to combine commands with pipes, master shell techniques, efficiently recall and edit past commands, and navigate the filesystem with speed. Let’s dive in!

    1. Combining Commands with Pipes

    Understanding How Pipes Work

    Ever wish your commands could work together? Pipes make it happen! They let one command pass its output to another, creating a smooth workflow.

    Commands take input (stdin) and give output (stdout). The pipe symbol (|) links them, making life easier.

    For example, ls -l /bin lists files in the /bin directory, but the amount of output is overwhelming. Try ls -l /bin | less to view one screen at a time—like having a personal organizer! This command pipes the output of the ls command into the pager less, which is very useful for reading large amounts of data.

    Let’s dive into pipes and practice them with commands like wc, head, cut, grep, sort, and uniq to handle data like a pro. If any of these commands are new to …


    linux shell tips

    Docker and iptables

    Jeffry Johar

    By Jeffry Johar
    June 12, 2024

    Four metal poles connected by chains with padlocks at the center stand against the sea, with a blue-orange sunset above.

    Photo by Egor Kamelev from Pexels.

    Docker utilizes iptables for its networking and routing. Blocking and accepting connections to the running containers on a host might be tricky at first if we are not aware of where Docker puts its chains. Docker chains are all located in the iptables FORWARD chain. Within this chain, Docker provides a convenient chain named DOCKER-USER for users to add their custom rules.

    One common mistake is attempting to block Docker Containers at the iptables INPUT chain, which will not work. This is because Docker does not pass through the INPUT chain, it only passes through the FORWARD chain. The following diagram illustrates a simplified chains traversal of Docker containers.

    Docker iptables traversal. A cloud shape labeled “network” sits at the top of a block diagram. An arrow points down from it to a block reading “prerouting”. The “PREROUTING” block points down at a green block reading “routing decision”. This block has two outward arrows, one to the left and one to the right. The arrow to the left points at a block labeled “INPUT” which itself points down at several stacked blocks labeled “other chains…”. The arrow to the right points at a block reading “FORWARD”, which points down to a block labeled “DOCKER-USER”, which points down to a block labeled “DOCKER”, which points down to a block labeled “other chains…”

    Below are a few working examples of iptables rules that can serve as references. These rules will be applied to the DOCKER-USER chain. It’s important to note that the DOCKER-USER chain comes after the PREROUTING chain and FORWARD chain, so we’ll need to use the iptables conntrack module for getting the information about source addresses and host ports. iptables conntrack extension allows iptables to track the state of network connections passing through the system. This …


    docker linux iptables redhat

    End Point’s CasePointer business acquired by Deloitte

    Rick Peltzman

    By Rick Peltzman
    June 3, 2024

    We are proud to announce that Deloitte has acquired the industry-leading public health disease surveillance business, CasePointer, from End Point Corporation as of June 1, 2024. This acquisition brings to Deloitte, End Point’s experienced and skilled software engineers, cloud developers, DevOps engineers, epidemiologists, and former public health officials.

    Since 2008, End Point’s CasePointer business has worked with open-source public health software to modernize tools, automate processes, improve the user experience, and provide better return on investment to state and local public health agencies for their disease surveillance and epidemiologic needs.

    Jon Jensen, End Point’s former chief technical officer, has joined Deloitte with this transaction. He said: “We are excited to work with Deloitte’s team of professionals and serve their broad client base. Together, we expect to make an even greater impact for government health organizations.”

    Deloitte is only acquiring assets, clients, and personnel related to End Point’s CasePointer business. All other business lines remain with End Point, including systems administration, database engineering, e-commerce programming, application …


    casepointer company epitrax emsa

    How to validate record uniqueness in ASP.NET

    Kevin Campusano

    By Kevin Campusano
    May 28, 2024

    The edges of the image show dark green (almost black) leaves out of focus, creating a frame around the center, where there is a bright full moon sitting in the evening blue sky. The detailed moon takes up a third of the image vertically.

    In ASP.NET, the System.ComponentModel.DataAnnotations namespace includes many attributes that can be used to instruct the framework to perform basic validation tasks for us. There are built-in validators for ensuring that certain fields are present, that they meet character length limits, that they don’t exceed or fall short of certain amounts, that they match certain formats, and more.

    One omission however, is checking for record uniqueness: making sure that no other record in the entity’s underlying persistent data storage has the same “name”, or the same “code”, or the same “any other field”.

    In this article, we’re going to try to address this shortcoming by implementing this type of uniqueness validation ourselves. We will see two approaches: a simpler solution using a database index, and a more flexible one using a custom validation attribute. Let’s get started.

    Throughout this article, I will be using a demo Web API application for code examples. If you’d like to see what the final implementation looks like, you can find all the code on GitHub.

    The API is about calculating quotes for used vehicles based on …


    dotnet aspdotnet csharp

    Writing integration tests for an ASP.NET Web API

    Kevin Campusano

    By Kevin Campusano
    May 13, 2024

    A concrete wall is patchily covered in shadows from a tree or something similar. Standing out against the sporadic texture of the shadows is the shadow of an arm and hand pointing up and to the right in a thumbs-up.

    Integration tests exercise a system by instantiating major components and making them interact with each other. They are great for validating important use case scenarios in an end-to-end or close to end-to-end manner.

    Full integration tests seldom use mocks or fake objects. Usually, the full stack is tested as if the entire system were running for real. For REST APIs, that generally means tests that involve issuing HTTP requests, validating HTTP responses, and asserting on changes made to a persistent data store, like a database.

    In this article, we’re going to discuss how to write such tests for a Web API built using ASP.NET.

    Introducing the project

    I’ll use an existing ASP.NET Web API project to demonstrate how to write these tests. The API is part of a system that calculates the value of used cars and offers quotes for them. As such, the API has an endpoint for calculating a vehicle quote, given its information and condition: POST /api/Quotes. It also has an endpoint for administration purposes that returns all the quotes that have been stored in the system’s database: GET /api/Quotes. These are the two endpoints that we’ll want to test.

    The source …


    testing dotnet aspdotnet csharp rest api

    An OpenStreetMap Editor for Adding Public Transit Data Using GTFS

    Dmitry Kiselev

    By Dmitry Kiselev
    May 8, 2024

    The OpenStreetMap GTFS editor. The right side is a map with a darkened map, and blue, red, and black dots overlayed along the roads where public transit stops are. In the corner, the map reads “Leaflet | copyright OpenStreetMap”. It has controls to zoom, change between satellite and OpenStreetMap, darken the map, and open in JOSM. The left side has navigation buttons reading “Import” (which is selected), “Stops”, “Routes”, “Trips”, and “Changes”. Below there is text on several lines: “gtfs.zip. Loaded 5246 stops” then a button reading “Query OSM data”. Then, “OSM Tag with GTFS stop code: " and a text box with “gtfs:ref” typed inside. Next, bold text reading “Possible GTFS stop code tags”, followed by a list of tags: “ref (6615 objects), route_ref (129 objects), local_ref (127 objects), ref:US-UT:uubus (24 objects), railway:ref (5 objects), loc_ref (7 objects), gtfs:stop_id (2 objects), ref:left (2 objects), ref:right (2 objects), noref (26 objects), crossing_ref (16 objects)”. Next, “show help”. “Match stops by name: " and an unchecked checkbox. Next, “Match stops by GTFS code in name: " and an unchecked checkbox. Next, bold text reading “Template tags for platform”. Then, 3 rows in a table. The first two have minus sign buttons on the left, and two columns reading: “public_transport”,“platform” and “highway”,“bus_stop”. The third row is just a plus sign button.

    You can think of OpenStreetMap (OSM) as Wikipedia for maps. While it may not be as well known as Google Maps or Apple Maps, OSM becomes indispensable when you need data, rather than just a visual representation on your phone. The only other real option for data retrieval is to consult a local agency, so if you’re in search of a comprehensive and global cartographic dataset, OSM is the go-to choice.

    OSM also excels in providing navigation for pedestrians and cyclists. For the past decade, I’ve navigated the US, Canada, and Europe using OSM through the OsmAnd app, a dedicated Android application for OpenStreetMap.

    Overall, my experience has been quite positive, except for one significant weakness: public transportation. Specifically, I’ve been missing the convenient access to timetables for buses, trams, or any other form of public transit.

    A significant part of the challenge in making public transportation data readily available on OSM and its associated applications is the fact that the OSM data model isn’t particularly well suited for this type of information. While OSM can store the location of bus and train stops, the actual timetables change so often that …


    gis visionport open-source
    Previous page • Page 2 of 217 • Next page