Image compression: WebP presets, HEIC, AVIF, JPEG XL
How time flies. Eight years ago I wrote the blog post WebP images experiment on End Point website to describe and demonstrate how the WebP image format can store an equivalent-quality image in a much smaller file size than the older JPEG, PNG, and GIF formats.
My WebP examples there were 17–23% of the JPEGs they came from, or about 5–6× smaller. While experimenting with higher levels of compression, I found that WebP tends to leave less-noticeable artifacts than JPEG does.
The main drawback at the time was that, among major browsers, only Chrome and Opera supported WebP, and back then, Chrome was far less popular than it is now.
Can I use it?
Since Apple’s iOS 14 and macOS 11 (Big Sur) became available in late 2020, the WebP image format now works in all the currently supported major operating systems and browsers: Linux, Windows, and macOS, running Chromium, Chrome, Brave, Edge, Opera, Firefox, and Safari. You can see the specifics at the ever-useful site “Can I use”.
It only took about 10 years! 😁
So for you who are hosting websites, all your site visitors can see WebP images and animations except those vanishing few using Internet Explorer (now long past its …
!-->compression graphics browsers optimization
Fun with Rational Numbers
So, you say you adored learning long division in elementary school? Well here we are revisiting that wonderful activity we have missed so much: fabulous magical moments like dividing 1.0 by 7. The especially tedious exercise of dragging over one more of the endless 0’s and seeing how many 7’s would fit into that woefully large remainder. Soon the delight mounts as you desperately hope the next digit will be the last and you discover that beautiful 1 as a remainder.
Undoubtedly you have wondered, like I have, what would happen if you divided 1.0 by 19? Would it repeat after only 8 digits? How many digits would it really take before it repeats?
That’s exactly how I stumbled into the wonderful world of rational numbers. There I was, wondering and wandering along the gloomy Belgian beach — the tide way out as far as you could see — in the winter wind, and I couldn’t stop thinking how long it would take for that mantissa to repeat. I had actually already tried 1.0 over 19. Finally, on that miserable day, I got the courage to divide 1 by 23.
Fortunately for me, I wasn’t alone, and I was able to enlist, coax, oblige, implore the help of baffled little Susan, my daughter who was 7 …
!-->programming javascript audio mathematics graphics
Web developer in GIS, mapping, Cesium, JavaScript job opening
This position has been filled. See our active job listings here.
Image by Carbon Visuals for NYC Clean Heat Project, CC BY 2.0, cropped
We are looking for a full-time JavaScript developer for geospatial web applications using GIS data, mapping, and 3D imagery, to work with us on our clients’ applications. Location somewhere in the Western Hemisphere is preferred.
End Point Dev is an Internet technology consulting company based in New York City. We have about 50 employees serving many clients ranging from small family businesses to large corporations. We are going strong after 26 years in business!
Even prior to the pandemic most of us worked remotely from our home offices. We collaborate using project tracking tools, GitHub/GitLab/Bitbucket, Zulip chat, video conferencing, and of course email and phones.
What you will be doing:
- Develop interesting and innovative geospatial web applications for our clients.
- Work together with co-workers here at End Point Dev and our clients’ in-house staff.
- Use your preferred desktop operating system: Linux, macOS, or Windows.
- Build on open source software and contribute back when possible.
Professional development experience you’ll need:
- 2+ years of development with JavaScript, TypeScript, and/or …
jobs-closed gis javascript remote-work
How We Do It
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
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
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
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
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