Job opening: Windows Systems Integrator
This position has been filled. See our active job listings here.
We are looking for a Windows systems integrator in the New York City metropolitan region to work with us.
We are an Internet technology consulting company based in NYC, with 50 employees serving many clients ranging from small family businesses to large corporations. The company turns 25 years old this year!
This is a consulting position, so excellent verbal and written communication, troubleshooting, and time management skills are required, along with a good sense for when to quickly escalate issues to resolve them efficiently as needed.
Skills and tools
You will need to have extensive experience in the Microsoft Windows ecosystem: the MS Windows OS, Windows networking, Active Directory management via Group Policies, MS Exchange Server, MS SQL Server, etc.
The greater knowledge of and larger base of experience you have with these, the better:
- Remote management & monitoring (RMM) systems, such as ConnectWise Manage and Automate
 - Mobile devices and mobile device management (MDM) systems, such as SOTI MobiControl, AirWatch, and MaaS360
 - VMware’s vSphere or Microsoft Hyper-V hypervisors
 - Managing firewall security policies, switches, and wireless access points (WAPs)
 - Storage …
 
jobs-closed windows
Deploying (Minecraft) Servers Automatically with Terraform

Last year I bought an old Dell Optiplex on eBay to use as a dedicated Minecraft server for my friends and me. It worked well for a while, but when my university switched to online classes and I moved home, I left it at my college apartment and was unable to fix it (or retrieve our world save) when it failed for some reason. I still wanted to play Minecraft with friends, though, so I had to figure out a solution in the meantime.
I’d previously used a basic DigitalOcean droplet as a Minecraft server, but that had suffered with lag issues, especially with more than two or three people logged in. Their $5 tier of virtual machine provides 1GB of RAM and 1 CPU core, so it shouldn’t be too much of a surprise that it struggled with a Minecraft server. However, more performant virtual machines cost a lot more, and I wanted to keep my solution as cheap as possible.
I mentioned this to a co-worker and he pointed out that most companies don’t actually charge for virtual machines on a monthly basis; in reality, it’s an hourly rate based on when your virtual machine instance actually exists. So, he suggested I create a virtual machine and start my Minecraft server every time I wanted to play, …
automation terraform cloud
Random Strings and Integers That Actually Aren’t

Image from Flickr user fsse8info
Recently the topic of generating random-looking coupon codes and other strings came up on internal chat. My go-to for something like that is always this solution based on Feistel networks, which I didn’t think was terribly obscure. But I was surprised when nobody else seemed to recognize it, so maybe it is. In any case here’s a little illustration of the thing in action.
Feistel networks are the mathematical basis of the ciphers behind DES and other encryption algorithms. I won’t go into details (because that would suggest I fully understand it, and there are bits where I’m hazy) but ultimately it’s a somewhat simple and very fast mechanism that’s fairly effective for our uses here.
For string generation we have two parts. For the first part we take an integer, say the sequentially generated id primary key field in the database, and run it through a function that turns it into some other random-looking integer. Our implementation of the function has an interesting property: If you take that random-looking integer and run it back through the same function, we get the original integer back out. In other words…
cipher(cipher(n)) == n…for any integer …
postgres python tips
Improving max() performance in PostgreSQL: GROUP BY vs. CTE
Photo by Maxpax, used under CC BY-SA 2.0, cropped from original.
When working with large tables, even simple actions can have high costs to complete. What queries are acceptable for smaller tables can often be less than ideal when applied to large tables, so your specific choice of approach to a given problem becomes more important.
Note: We are using PostgreSQL 12, which supports some nice features like parallel btree index building, which can speed up parts of this process compared to earlier versions. We are using the default settings for this, which lets PostgreSQL use up to 2 parallel backend workers to speed up some operations.
Say you have a table table_a with multiple grouping fields field_a and field_b and you want to find the maximum value of another field field_c for each group.
The direct approach is to do something like the following:
SELECT field_a, field_b, max(field_c) FROM table_a GROUP BY 1,2;This is functional and very straightforward. However, even if you have an index on (field_a, field_b, field_c), this can end up taking quite a long time if the tables are large. Let’s look at an actual example and the numbers we use.
First, let’s create our table:
CREATE …postgres database
Randomly spacing cron jobs
Cron is the default job scheduler for the Unix operating system family. It is old and well-used infrastructure — it was first released 45 years ago, in May 1975!
On Linux, macOS, and other Unix-like systems, you can see any cron jobs defined for your current user with:
crontab -lIf nothing is printed out, your user doesn’t have any cron jobs defined.
You can see the syntax for defining the recurring times that jobs should run with:
man 5 crontabImportant in that document is the explanation of the space-separated time and date fields:
field          allowed values
-----          --------------
minute         0-59
hour           0-23
day of month   1-31
month          1-12 (or names, see below)
day of week    0-7 (0 or 7 is Sunday, or use names)
A field may contain an asterisk (*), which always stands for "first-last".For example, to make a job run every Monday at 3:33 am in the server’s defined time zone:
33 3 * * 1 /path/to/executableRandom interval scheduling
Sometimes it may be good to schedule a cron job to run at a somewhat random time: generally not truly random, but maybe at an arbitrary time within a specified time range rather than at a specific recurring …
!-->sysadmin automation
Job opening: PHP / JavaScript developer
This position has been filled. See our active job listings here.
We are looking for a PHP software engineer to work with us during business hours somewhere in the UTC-7 to UTC-4 time zones (U.S. Pacific to Eastern Time). This role can be full-time or part-time.
We are an Internet technology consulting company based in New York City, with 50 employees serving many clients ranging from small family businesses to large corporations. The company turns 25 years old this year!
Even before COVID-19 most of us worked remotely from home offices. We collaborate using SSH, GitHub, GitLab, 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
 - Work together with End Point co-workers and our clients’ in-house staff
 - Use your desktop OS of choice: Linux, macOS, Windows
 - Use open source tools and contribute back as opportunity arises
 
What you bring:
Professional experience developing and supporting web applications in these technical areas:
- 5+ years of development with PHP and front-end JavaScript
 - Frameworks such as Symfony, Laravel, Magento and Vue.js, React, Angular
 - Databases such as PostgreSQL, MySQL, MongoDB, Redis, Solr, Elasticsearch, etc.
 - Security …
 
jobs-closed php remote-work
Magento 2: Creating a custom theme
Photo by Maria Eklind, CC BY-SA 2.0
In my previous post, we went through the steps needed to create a custom module in Magento 2. While modules consist of a set of classes to add new features to Magento, a theme controls how these features, and the entire website in general, will be displayed to the user. As stated in the Magento guide, a theme uses a combination of custom templates, layouts, styles, and images to provide a consistent look and feel across a Magento store.
Creating a new Magento 2 theme
We can create a theme based on a default “parent” theme or create a standalone theme from scratch. In most cases, I would recommend the first option. For this example, we will use Luma as our parent theme. The other option would be inheriting from the default “blank” theme.
Here’s an initial task list to get our new theme ready:
- Create a new directory for the theme
 - Create the 
registration.phpscript - Create the 
theme.xmlinformation file - Activate the new theme
 
Creating a new directory for the theme
While all our backend code should go in app/code, the frontend content is expected to go in app/design. And as our theme will only apply design changes to the frontend content, we should …
magento php ecommerce
Linux Development in Windows 10 with Docker and WSL 2

I’m first and foremost a Windows guy. But for a few years now, moving away from working mostly with .NET and into a plethora of open source technologies has given me the opportunity to change platforms and run a Linux-based system as my daily driver. Ubuntu, which I honestly love for work, has been serving me well by supporting my development workflow with languages like PHP, JavaScript and Ruby. And with the help of the excellent Visual Studio Code editor, I’ve never looked back. There’s always been an inclination in the back of my mind though, to take some time and give Windows another shot.
With the latest improvements coming to the Windows Subsystem for Linux with its second version, the new and exciting Windows Terminal, and Docker support for running containers inside WSL2, I think the time is now.
In this post, we’ll walk through the steps I took to set up a PHP development environment in Windows, running in a Ubuntu Docker container running on WSL 2, and VS Code. Let’s go.
Note: You have to be on the latest version of Windows 10 Pro (Version 2004) in order to install WSL 2 by the usual methods. If not, you’d need to be part of the Windows Insider Program to have access to …
windows linux docker containers php