GStreamer Nvenc for Ubuntu 20.04
Image by Martin Adams on Unsplash
GStreamer is a library for creating media-handling components. Using GStreamer you can screencast your desktop, transcode a live stream, or write a media player application for your kiosk.
Video encoding is expensive, even with AMD’s current lineup making it more palatable. Recent Nvidia Quadro and GeForce video cards include dedicated H.264 encoding and decoding hardware as a set of discrete components alongside the GPU. The hardware is used in the popular Shadowplay toolkit on Windows and available to developers through the Nvidia Video SDK on Linux.
GStreamer includes elements as part of the “GStreamer Bad” plugin set that leverages the SDK without having to get your hands too dirty. The plugins are not included with gst-plugins-bad in apt, and must be compiled with supporting libraries from Nvidia. Previously this required registering with Nvidia and downloading the Nvidia Video SDK, but Ubuntu recently added apt packages providing them, a big help for automation.
Environment
- Ubuntu 20.04 LTS
- Video card from GPU support matrix
- GStreamer
CUDA
The nvenc and nvdec plugins depend on CUDA 11. The apt version is too old. I’ve found the runfile to …
video ubuntu
CZML-KML Editor Geometry Editing
We are happy to introduce a new feature for the Cesium CZML-KML Editor: polygons and polylines geometry editing. You can now edit geometries for existing entities and move entered points during the creation process. Here is a video with a short summary of the editing process:
See our previous blog post introducing the Cesium CZML-KML Editor for further reference.
cesium google-earth gis open-source visionport
Spatial queries with MySQL
Photo by Francois Powell, CC BY 2.0, cropped
MySQL is one of the most widely used relational databases. Most PHP websites rely on MySQL for persisting their information, which makes it one of the DB-Engines top four most popular databases along with Oracle, SQL Server, and PostgreSQL.
One of its capabilities that is not very well known is that the engine supports working with spatial data, allowing you to save different shapes (points, lines, polygons) and querying information based on intersections, distances, or overlaps. This capability was included in MySQL a long time ago, but it became easier to use starting in version 5.6, when the distance and point intersection functions were added.
Spatial data can be useful for many needs, including:
- Searching for places based on latitude/longitude coordinates
- Displaying information and areas as layers on maps
- Architecture or home design applications
My first experience with spatial queries was for a weather website I developed that displays local alerts/warnings on a map using MySQL spatial functions to return active weather alerts for a given location, or to inform if lightning has been observed near the user’s current …
mysql database gis leaflet
Database Design: Using Natural Keys
Whether to use natural or surrogate keys is a long-debated subject of database design. I am a fan of using natural keys. I think there are even more compelling reasons to use natural keys in databases as the systems grow more complex and interdependent.
Natural or Surrogate
Let’s start by what we mean by natural. It’s not trivial to define this. In today’s world of APIs, someone’s surrogate key is another’s natural key. Wikipedia defines natural keys as “a type of unique key in a database formed of attributes that exist and are used in the external world outside the database”. This makes it clear that the keys we get from APIs are our natural keys. But how about the ones generated by us to be used in the external world?
When applications expose the keys on the URLs and APIs, others start relying on them. This is where our choices become important. When all those different applications generate their own keys instead of using the keys they got from other places, life becomes difficult for no reason.
Let’s elaborate with an example corporate database where employees are identified by their usernames and the departments with their domains. So our data would look like this:
| …
database development performance postgres sql
Job opening: Ruby on Rails & Vue.js developer
This position has been filled. See our active job listings here.
Photo by WOCinTech Chat, CC BY 2.0, cropped
We are seeking a full-time software engineer specializing in Ruby on Rails and Vue.js to work with us on our clients’ applications.
End Point is an Internet technology consulting company based in New York City, founded 25 years ago! We have over 50 employees serving many clients ranging from small family businesses to large corporations.
Even before the pandemic most of us worked remotely from home offices. We collaborate using SSH, Git, project tracking tools, Zulip chat, video conferencing, and of course email and phones.
What you will be doing:
- Develop new web applications and support existing ones for our clients
- Consult with clients on software features and plans
- Work together with End Point co-workers and our clients’ in-house staff
- Use open source tools and contribute back as opportunity arises
What you bring:
Professional experience developing and supporting web applications in these technical areas:
- 3+ years of development with Ruby on Rails and front-end JavaScript
- Frameworks and libraries such as Vue.js, React, Angular
- Databases such as PostgreSQL, MySQL, Redis, Solr, Elasticsearch, etc.
- Security consciousness
- Git version …
jobs-closed ruby rails javascript remote-work
An Introduction to TypeScript
TypeScript is a programming language defined as a superset of JavaScript. It adds static type information to JavaScript code using type annotations. These annotations permit strong type-checking at compile-time, kind of like a very strict linter. They are only used for static analysis. TypeScript is transpiled to JavaScript for execution in the browser or Node.js and the type annotations are stripped out. It is still possible to use standard JavaScript type information at run-time, such as that obtained using the typeof
and instanceof
operators.
Adding type annotations brings many benefits. Most importantly, TypeScript can tell us when we’re doing something dumb that’s likely to cause a type-related bug. But more than that, it powers editors’/IDEs’ context sensitive tool tips so when you hover or start typing the editor can supply helpful information so you can get your job done quicker. This is particularly useful to new developers as it saves them the trouble of reading all the sources to figure out the variable types from context, especially when debugging.
JavaScript is a fairly dynamic language but types still exist in JavaScript, whether we like it or not. Because it’s so …
typescript javascript nodejs
Monads: Another tool from the functional programming toolbox
I was first exposed to the world of functional programming back in 2007 with the release of .NET Framework 3.5 and the introduction of LINQ into the C# language. At the time, I was just beginning to learn how to code and LINQ seemed to be little more than an extension of the C# language that allowed programmers to use SQL-like syntax to interact with collections of data. This was mostly useful for interacting with databases, via LINQ to SQL. The concept of “functional programming” never even crossed my mind back then.
Once you had created a LINQ to SQL Object Model using the tools provided in Visual Studio, you could write code like this directly in C#:
var customersWithRecentExpensiveOrders =
// Think of db.Orders as your hypothetical "orders" table.
from o in db.Orders
where o.Total >= 100.00 && o.Date == DateTime.Now
// All orders have a customer
select o.Customer;
Alternatively, you could also use the so-called method syntax:
var customersWithRecentExpensiveOrders =
db.Orders
.Where(o => o.Total >= 100.00 && o.Date == DateTime.Now)
.Select(o => o.Customer);
LINQ would take that and turn it into native SQL that got …
functional-programming javascript
Endless OS: A Linux Distro for Kids
In 2020 some of us had to work from home while taking care of the kids ourselves, as most childcare services are temporarily closed due to the COVID-19 pandemic. In this post I won’t complain about the pandemic, but rather share my experience.
I have installed several different Linux distributions for my kids’ desktop computer in the past, but have found it quite difficult to find a balance between strict parental controls and no parental controls at all. Then I came across Endless OS, a Linux distro based on Debian, but with heavy customizations to focus on school from home.
Installation
The installation process was smooth and easy. The install image I chose was quite huge though, at around 16GB. But given we can just use a USB drive as the installation medium nowadays this should not be a big issue. The installer does not seem to give an option to encrypt my hard disk with LUKS during the installation phase.
Endless OS is powered by OSTree (which is defined as “a system for versioning updates of Linux-based operating systems”) and Flatpak. According to the website, “Endless OS uses OSTree, a non-destructive and atomic technique to deploy operating …
linux kids