Skip to content

Instantly share code, notes, and snippets.

View raymyers's full-sized avatar
🌳
Automating!

Ray Myers raymyers

🌳
Automating!
View GitHub Profile
@raymyers
raymyers / CharsetUtils.java
Created August 13, 2023 13:31
Wrap icu4j charset detection
package your.name;
import com.ibm.icu.text.CharsetDetector;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
@raymyers
raymyers / extract-metrics.js
Last active April 22, 2023 01:48
GPT4 generated code to extract metrics from GitHub, NOT debugged
// Warning: This code is LLM output and has NOT been debugged.
const { Octokit } = require("@octokit/rest");
// Initialize the Octokit client
const octokit = new Octokit({ auth: "your_personal_access_token" });
// Variables for your specific repository
const owner = "your_github_username";
const repo = "your_repository_name";
@raymyers
raymyers / TransactionLoader.java
Last active March 21, 2022 01:48
Mixed Concern Kata Sketch
package org.gamenet.kata.untestable;
import java.sql.*;
import java.text.DecimalFormat;
public class TransactionLoader {
// This is intended as a refactoring / testing kata for improving separation of concerns.
// Goal might be to introduce JSON output in addition to XML.
public String load() throws SQLException {
// Produces result like:
@raymyers
raymyers / LockCleaner.java
Created March 1, 2020 21:07
Delete old Lucene write.lock file
import java.io.File;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LockCleaner {
private static final Logger logger = LoggerFactory.getLogger(LockCleaner.class);
public void clearOldLockInLuceneIndexDir(File indexDir) {
@raymyers
raymyers / .gitignore
Created March 1, 2020 16:38
Backup Jenkins Config Daily Job
# Last tested in Jenkins 2.22
*
!/.gitignore
!/*.xml
!/nextBuildNumber
!/jobs
!/jobs/*
!/jobs/*/*.xml
@raymyers
raymyers / trimmedMean.js
Created February 14, 2020 16:15
Trimmed Mean and Median in ES6.
const mean = (values) => {
let sum = values.reduce((previous, current) => current += previous);
return sum / values.length;
};
const median = (arr) => {
const mid = Math.floor(arr.length / 2);
const sorted = [...arr].sort((a, b) => a - b);
return arr.length % 2 == 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];
};
@raymyers
raymyers / index.html
Last active January 29, 2020 07:42
Using diff2html on output of 'diff -u'
<html>
<head>
<!-- CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/styles/github.min.css" />
<link rel="stylesheet" type="text/css" href="vendor-js/diff2html-3.0.0/bundles/css/diff2html.min.css" />
<!-- Javascripts -->
<script type="text/javascript" src="vendor-js/diff2html-3.0.0/bundles/js/diff2html-ui.min.js"></script>
<script type="text/javascript" src="vendor-js/diff2html-3.0.0/bundles/js/diff2html.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
@raymyers
raymyers / AstWalker.java
Created January 7, 2020 23:37
Abstract Tree Walker using Type-safe Heterogeneous Container pattern.
import com.google.common.collect.Multimap;
import com.google.common.collect.MultimapBuilder;
import java.util.Collection;
import java.util.function.Consumer;
public class AstWalker {
private final Multimap<Class<?>, Consumer<?>> enterNodeListeners = MultimapBuilder.linkedHashKeys().arrayListValues().build();
private final Multimap<Class<?>, Consumer<?>> exitNodeListeners = MultimapBuilder.linkedHashKeys().arrayListValues().build();
@raymyers
raymyers / handler.py
Last active July 17, 2019 19:28
Shutdown EC2 instances off hours with AWS Lambda + Serverless framework + Python
import boto3
region = 'us-east-1'
def find_instance_ids(ec2):
response = ec2.describe_instances(Filters=[
{'Name': "tag:StopOffHours", 'Values': ["yes"]}
])
return [
instance['InstanceId']
for reservation in response['Reservations']
@raymyers
raymyers / schedule_monitor_tasks.rb
Created June 13, 2016 20:25
Scheduling periodic monitoring tasks with Rufus and Librato
unless self.class.const_defined?('SCHEDULER')
SCHEDULER = Rufus::Scheduler.new(:lockfile => ".rufus-scheduler.lock")
unless SCHEDULER.down?
SCHEDULER.every('60s', :first_in => '10s') do
active_count = DASHBOARD.find_recent_users(10.minutes.ago).count()
# Rails.logger.info "======== active users #{active_count}"
Librato.measure('users.active', active_count)
end
SCHEDULER.every('60s', :first_in => '10s') do