Skip to content

Instantly share code, notes, and snippets.

View smashah's full-sized avatar
🏠
Working from home

Mohammed Shah smashah

🏠
Working from home
  • I don't know, yno
  • LHR/JED
View GitHub Profile
@smashah
smashah / flutter_firebase_codelabs_baby_names_main.dart
Last active January 30, 2019 22:12
A firebase & ListTile implementation that disables the tile within onTap during a transaction
import 'package:baby_names/my_list_tile.dart';
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
@smashah
smashah / remove_silence.ts
Last active June 3, 2024 08:24
A simple way to remove silences below a certain threshold in an audio file [NODEJS/TS]
//add this to your package.json
// "audio-buffer-utils": "^5.1.2",
// "audio-decode": "^1.4.0",
// "audiobuffer-to-wav": "^1.0.0",
// "node-lame": "^1.2.0",
// "ogg.js": "^0.1.0",
// "opus.js": "^0.1.1",
const fs = require('fs');

Keybase proof

I hereby claim:

  • I am smashah on github.
  • I am smashah (https://keybase.io/smashah) on keybase.
  • I have a public key ASCVdt4GK-eUVoNMs9fXiQPBOw-6MilFbZoRXhmXQ_X9MQo

To claim this, I am signing this object:

@smashah
smashah / starling_webhook_valid_express.js
Created January 14, 2020 17:01
Successfully validate a Starling Bank webhook signature
//https://stackoverflow.com/questions/56664705/nodejs-base-64-encoding-of-the-sha-512-digest/59738487#59738487
const express = require("express");
const crypto = require('crypto');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.json({
verify: (req, res, buf) => {
req.rawBody = buf
@smashah
smashah / wa-magic.ts
Last active June 18, 2020 18:25
Easily get started with wa-automate
import {
create,
Client,
decryptMedia,
ev,
smartUserAgent
} from "@open-wa/wa-automate";
const mime = require("mime-types");
const fs = require("fs");
const ON_DEATH = require("death");
@smashah
smashah / peepeepoopoo.js
Last active June 26, 2020 16:39
peepeepoopoo.js
const p =['oo','ee'];
export const pp = p.slice(0).reverse().map(p=>`p${p} `.repeat(p.length).trim()).join(' ')
//"pee pee poo poo"
console.log(`p${p[1]} p${p[1]} p${p[0]} p${p[0]}`)
//"pee pee poo poo"
@smashah
smashah / lit-media-query.ts
Created January 19, 2021 01:21
Typescript implementation of lit-media-query (with initial test & listener cleanup)
import { LitElement, customElement, property } from 'lit-element';
@customElement('lit-media-query')
export class LitMediaQuery extends LitElement {
@property({ type: Boolean }) _match: boolean = false;
@property({ type: Boolean }) _initFired: boolean = false;
@property({ type: Boolean }) _registeredListeners: boolean = false;
@smashah
smashah / Collector.ts
Created March 16, 2021 16:45
Discord Base Collector implementation for typescript + EventEmitter2
/* eslint-disable @typescript-eslint/no-unused-vars */
/**
* This code is a copy of the Discord Collector: https://github.com/discordjs/discord.js/blob/stable/src/structures/interfaces/Collector.js
* Note: please run `npm i eventemitter2 @discordjs/collection`
* Please see: https://discord.js.org/#/docs/main/stable/class/Collector
*/
import { EventEmitter2 } from 'eventemitter2';
import BaseCollection from '@discordjs/collection';
export class Collection<K, V> extends BaseCollection<K, V> {
@smashah
smashah / gar-cleaner-setup.sh
Last active April 2, 2021 20:12 — forked from bhr/gcr-cleaner-setup.sh
gar-cleaner-setup - Google Artifact Registry clean up tool
PROJECT_ID="<YOUR_PROJECT_ID>"
REPO_NAME="<YOUR_REPO_ID>"
CLOUD_RUN_REGION='europe-west1' #us-central1
APP_REGION='europe-west' #us-central
ARTIFACTS_REGION='eu' #leave empty for us
IMAGE_NAMES=("YOUR_IMAGE_1" "YOUR_IMAGE_2") # a list of image names
echo "Step 1: Enable Services"
gcloud services enable --project "${PROJECT_ID}" \
appengine.googleapis.com \
@smashah
smashah / socket_fallback.js
Created April 11, 2021 06:40
Socket client fallback URL implementation
//the url to try first
const socketUrl = `${window.location.origin}${window.location.pathname.split('/').filter(x=>!x.includes('.')).join('/')}`;
//the url to try next
const fallbackUrl = window.location.origin
//try with main socketUrl
let socket = io(socketUrl);