Skip to content

Instantly share code, notes, and snippets.

View mikaelbr's full-sized avatar

Mikael Brevik mikaelbr

View GitHub Profile
@mikaelbr
mikaelbr / destructuring.js
Last active April 25, 2024 13:21
Complete collection of JavaScript destructuring. Runnable demos and slides about the same topic: http://git.mikaelb.net/presentations/bartjs/destructuring
// === Arrays
var [a, b] = [1, 2];
console.log(a, b);
//=> 1 2
// Use from functions, only select from pattern
var foo = () => [1, 2, 3];
@mikaelbr
mikaelbr / jsmodule.js
Created October 5, 2012 15:37
JS Module Template
;(function () {
var moduleName = 'someName',
methods = {},
root = this;
// Private methods
var _foo = function () {
};
### Keybase proof
I hereby claim:
* I am mikaelbr on github.
* I am mikaelb (https://keybase.io/mikaelb) on keybase.
* I have a public key ASDxC69lniQqB3KAMknf6mi1us1IGvVW5UhrreB7wlE9DAo
To claim this, I am signing this object:

Bli kvitt implisitt prosjektkunnskap med snevre linting-regler

I tillegg til blomster på første dag, får nye team-tilskudd ofte utdelt fiendtlige footguns. Samme footgun som resten av teamet har: Implisitt prosjektkunnskap. Eller prosjektnormer om du vil. Den kunnskapen de som har vært i kodebasen for alltid bare kjenner på kroppen. Ting du absolutt må unngå å gjøre, men er vanskelig å fange opp og krever alle konstant på alerten. Vi kan være gode på Code Reviews og ha gode rutiner, men all manuell sjekk vil være sårbart. All denne implisitte kunnskapen tilrettelegger for et minefelt. Som i all programmering er eksplisitt kunnskap bedre enn implisitt kunnskap. Ingen kommer på å lese dokumentasjon i tilfelle det kan stå noe relevant, og kommentarer har for liten kontrast i editoren. Vi trenger noe bedre system for a fange opp dette!

Det finnes allerede veldig gode mekanismer for å håndheve implisitte regler i en kodebase, slik det har gjort i et par ti-år: Linting! Statisk analyse av kodebasen og validerin

{ "superstyles": [
"American Wild Ale",
"IPA",
"New England IPA",
"Imperial Stout",
"Strong Ale",
"Triple IPA",
"American Pale Ale",
"Black IPA",
"Berliner Weisse",
{
"ut_bid": "5071040",
"desc": "Time to take another trip to fourth dimension! Seriously dry hopped with Citra, Strata and Mosaic Lupomax hops. Cheers!",
"percent": 12,
"ut_rating": 4.37,
"name": "Tesseract",
"brewery": "Salikatt",
"session": 0,
"style": "IPA - Quadruple",
"superstyle": "Quad",
@mikaelbr
mikaelbr / 1.tsx
Last active July 15, 2022 19:14
React Context Module Pattern - Gists for blogpost
// in App.tsx
type AlertWithId = {
message: string;
type: "info" | "error";
id: number;
};
// Part 1: The container to hold values
const AlertContext = createContext<AlertWithId[]>([]);
function Content() {
module.exports = {
meta: {
type: 'problem',
fixable: 'code',
schema: [
{
type: 'object',
properties: {
translateFunctionIdentifier: {type: 'string'},
@mikaelbr
mikaelbr / avoid-import.js
Created February 25, 2021 21:22
eslint rule for marking some modules/packages as avoidable and providing a suggested replacement.
module.exports = {
meta: {
type: 'problem',
fixable: 'code',
messages: {
avoidableModuleWithAlternative:
'Package {{ actualModule }} should be avoided. Use {{ suggestedModule }} instead.',
avoidableModule: 'Package {{ actualModule }} should be avoided.',
},
module.exports = {
meta: {
type: 'problem',
fixable: 'code',
schema: [
{
type: 'object',
additionalProperties: {
type: 'string',