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
Creating a Messaging App Using Spring for Apache Kafka, Part 4
Photo by Daniel Tran on Unsplash
This article is part of a series. The GitHub repository with code examples can be found here.
After a long break from this series let’s keep moving further.
Let’s configure and prepare the WebSocket session pool. As we go through some custom operations like authentication and storing messages on the time of socket messages and sessions received, we need to create a WebSocketHandler for WebSocket configuration. When a WebSocket session message is received we’re going to send the message to a Kafka topic. In order to achieve this we need to define our WebSocket message handler MessageHandler
and Kafka message producer MessageSender
. We also need a session pool WebSocketPool
so we can manage the client sessions.
WebSocketPool
package com.endpoint.SpringKafkaMessaging.websocket;
import org.springframework.web.socket.WebSocketSession;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class WebSocketPool {
public static Map<Long, Set<WebSocketSession>> websockets = new HashMap<>();
}
WebSocketPool
holds client sessions in a map of <user_id, <set of WebSocketSession>>
. This map allows multiple …
java spring kafka spring-kafka-series
Cesium KML-CZML Editor
End Point’s immersive technology team is happy to present a great new tool for the rapidly growing Cesium community: Cesium KML-CZML Editor. The editor gives users the ability to visually and dynamically edit KML and CZML in its Cesium browser window. Updates made with it can be exported at any time to CZML, the native markup language for Cesium.
The Cesium KML-CZML Editor addresses an important but hitherto unaddressed need of the Cesium community: It provides an intuitive interface for making adjustments to fix the many inconsistencies with how KML created for (and often by) Google Earth appears on 3D maps rendered with Cesium. It is a powerful tool for converting and adapting KML for Google Earth into CZML that displays nicely in Cesium. The editor also works as a visual editor for creating and editing CZML, regardless of whether you’re converting from KML.
The inconsistencies with how Cesium displays KML created for Google Earth are due to occasional differences between how Cesium and Google Earth render KML when various attributes aren’t specifically set within a given instance of code. The situation is similar to how web browsers sometimes interpret given instances of HTML …
cesium google-earth gis open-source visionport
Media erasure in the time of SSD
How valuable is your data? Losing it to a third party is usually a business’s worst nightmare—and can cause legal or even criminal repercussions, depending on the drive’s contents and the business’s jurisdiction.
Every system adminstrator worth their salt knows that running “rm” (or equivalent delete operations) doesn’t actually remove data, it simply removes the file name from the filesystem and leaves the data in place on the disk.
When dealing with traditional storage, destroying (intentionally or otherwise) your data used to be relatively easy. A wise system admin could simply run:
shred /dev/sda
And be fairly certain of the result. A cautious one might run a demagnetizing wand over the drive. Only the most paranoid might destroy it physically.
The Age of SSDs
Nowadays, most servers have switched away from storing data on rotating metal or glass platters. Solid state drives, or SSDs, are faster, less prone to errors from physical impact, and generally more sought after.
SSDs have issues with speed if the drives are too full, and have a limited lifespan—only a certain number of write operations can be achieved. This is less of an issue with modern …
security storage
Vue 3 is out with exciting new features
Photo courtesy of NASA
Vue 3 was officially released on September 18, 2020 with improved performance and some exciting new features.
Composition API
The Composition API is one of the most significant changes. It helps with logically grouping related fragments of components. In Vue 2, we used the Options API to pass various options during component configuration:
// src/components/ProductList.vue
<template>
<div class="child">
<h3>Vue2</h3>
<div>
<div class="add-product">
<h2>Add Product</h2>
<div>Name: <input name="name" v-model="newProduct.name" /></div>
<div>Price: <input name="name" v-model="newProduct.price" /></div>
<button @click="addProduct">Add</button>
</div>
<div class="search-product">
<h2>Search Product</h2>
<input name="name" v-model="filterText" placeholder="Start typing to search" />
</div>
</div>
<div class="list-product">
<h1 …
vue frameworks javascript