Skip to content

Instantly share code, notes, and snippets.

View GFoley83's full-sized avatar
☘️
CTO @ Educa

Gavin Foley GFoley83

☘️
CTO @ Educa
View GitHub Profile
@GFoley83
GFoley83 / deferred-promise.ts
Created April 26, 2018 07:37
Deferred Promise for Typescript
/**
* A new instance of deferred is constructed by calling `new DeferredPromse<T>()`.
* The purpose of the deferred object is to expose the associated Promise
* instance APIs that can be used for signaling the successful
* or unsuccessful completion, as well as the state of the task.
* @export
* @class DeferredPromise
* @implements {Promise<T>}
* @template T
* @example
@GFoley83
GFoley83 / Azure DevOps - Delete Stale Branches.ps1
Created November 26, 2024 23:57
Delete all branches X number of commits behind master
# Define variables
$organization = ""
$project = ""
$repositoryName = ""
$masterBranch = "master"
$devBranch = "develop"
$maxCommitsBehind = 500
$apiKey = $env:AZURE_DEVOPS_API_KEY
# Validate API Key
@GFoley83
GFoley83 / location-finder.js
Last active September 17, 2024 21:54
A function which returns a jQuery promise that resolves when a user's location has been found. Also handles the scenario where by when not clicking allow/deny the browser never fires the timeout option of `getCurrentPosition()`. If `getCurrentPosition()` fails then the fallback lat lng is used instead.
/*
Sample use:
var loc = new LocationFinder(-41.29247, 174.7732);
$.when(loc.findUserLocationAsync()).then(function (lat, lng) {
// console.log("Lat & lng set as: ", loc.usersPosition())
});
*/
@GFoley83
GFoley83 / CascadeDelete.sql
Last active May 20, 2024 02:36 — forked from lionofdezert/CasecadeDelete.sql
Cascade Delete in SQL Server
/*
Originally written by Daniel Crowther 16 Dec 2004.
Addresses the recursive deletion of child table entries, even those not directly related to the parent table, before ultimately attempting to delete from the parent table.
Passing 'Y' to @ExecuteDelete will run the deletion & wrap everything in a transaction
Passing 'Y' to @TrialRun rolls back the transaction after executing all the delete statements.
@GFoley83
GFoley83 / LinkedIn - Remove crap posts.js
Created September 30, 2018 22:52
Unlike facebook, LinkedIn creates entire posts just for likes and comments which fills up the feed with crap. This snippet removes those posts from the feed. Best used with an Chrome extension like "Custom JavaScript for Websites".
const removeCrap = () => {
const $crapSelector = $(`
span.ember-view span:contains(" likes this"),
span.ember-view span:contains(" commented on this"),
span.ember-view span:contains(" liked "),
span.ember-view span:contains("Short course you may like"),
div.feed-shared-text-view span:contains("Promoted")
`);
const crapCount = $crapSelector.length;
@GFoley83
GFoley83 / AwsV4SigningExample.cs
Created February 9, 2022 23:02
Full example showing how to sign AWS requests with Signature Version 4 using .NET
using System.Globalization;
using System.Net.Mime;
using System.Security.Cryptography;
using System.Text;
using Microsoft.AspNetCore.Mvc;
namespace EvaporateJSTest.Controllers;
[ApiController]
[Route("signAuth")]
@GFoley83
GFoley83 / DbDeadlockRetryHandlerProcessor.cs
Last active January 29, 2021 17:24
MediatR pipeline for retrying Db deadlocks
using System;
using System.Data.Common;
using System.Threading;
using System.Threading.Tasks;
using MediatR;
namespace Foo
{
public class DbDeadlockRetryHandlerProcessor<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
{
using System;
using System.Collections.Generic;
namespace builder
{
/// <summary>
/// MainApp startup class for .NET optimized
/// Builder Design Pattern.
/// </summary>
public class MainApp
@GFoley83
GFoley83 / message-bus.service.ts
Last active June 2, 2020 12:55
Angular 2 Message Bus / PubSub ex.
import { Injectable } from "@angular/core";
import { ReplaySubject, Observable } from "rxjs/Rx";
interface Message {
channel: string;
data: any;
}
@Injectable()
export class MessageBus {
@GFoley83
GFoley83 / mtls-policy.xml
Created April 20, 2020 23:43 — forked from nov/mtls-policy.xml
Azure API Management Policy for MTLS
<policies>
<inbound>
<base />
<!-- TODO: limit by client_id, not token itself -->
<rate-limit-by-key calls="30" renewal-period="10" counter-key="@(context.Request.Headers.GetValueOrDefault("Authorization",""))" />
<choose>
<when condition="@(context.Request.Certificate != null && context.Request.Certificate.NotAfter > DateTime.Now)">
<set-header name="Client-Certificate" exists-action="override">
<value>@(context.Request.Certificate.GetRawCertDataString())</value>
</set-header>