Skip to content

Instantly share code, notes, and snippets.

View madeindjs's full-sized avatar
💩

Alexandre Rousseau madeindjs

💩
View GitHub Profile
@madeindjs
madeindjs / mpv-musicbrainz.js
Last active September 15, 2023 07:17
mpv script to send listen to musicbrainz
var version = "1.1";
var listenbrainzToken = "your token here";// https://listenbrainz.org/profile/
mp.msg.debug("loaded");
/**
* @returns {string | undefined}
*/
function getTitle(metadata) {
if (!metadata) metadata = mp.get_property_native("metadata");
@madeindjs
madeindjs / defer.js
Created December 2, 2016 14:28
make script execution wait until jquery is loaded
function defer(method) {
if (window.jQuery)
method();
else
setTimeout(function() { defer(method) }, 50);
}

Les générateurs en Node.js

Récemment chez Dougs, j'ai du faire un script pour calculer les données de tous nos utilisateurs. J'ai rencontré quelques problèmes de performances liées à la quantité de données que cela représente (plusieurs milliers d'utilisateurs). J'ai réussi à régler ce problème en utilisant les générateurs qui permettent dans certains cas de réduire considérablement l'empreinte mémoire. Si ce terme ne te dis rien, je t'invite à lire la suite de cet article.

Exemple simpliste

Afin que tu saisisse le problème, je vais recréer un exemple simple. Basique.

Imagine une classe qui représente un utilisateur avec un firstname, lastname, une birthDate. Voici une implémentation en TypeScript avec un constructeur qui définit des données factices et une méthode age afin de calculer l'âge de l'utilisateur:

@madeindjs
madeindjs / pre-commit
Last active March 16, 2020 10:47
Git hook to store in .git/hooks/ folder to check commit
#!/bin/bash
# .git/hooks/pre-commit
GREEN='\033[0;32m'
RED='\033[0;31m'
DEFAULT='\033[0m'
# loop on all commited PHP files
echo -e "\n${GREEN}Check PHP files${DEFAULT}\n"
class User {
public birthDate: Date;
public constructor(
public readonly firstname: string = 'Douggie',
public readonly lastname: string = 'Dougs',
) {
const birthYear = Math.floor((Math.random() * 50) + 1970)
this.birthDate = new Date(birthYear, 1, 1);
}
# !/bin/bash
# concat log
touch /tmp/complete_isignif_fr_access.log
cat /var/log/apache2/isignif_fr_access*.log >> /tmp/complete_isignif_fr_access.log
gzip -d /var/log/apache2/isignif_fr_access.log.*.gz --stdout >> /tmp/complete_isignif_fr_access.log
# generate HTML report
goaccess /tmp/complete_isignif_fr_access.log -o /tmp/goaccess_report.html
@madeindjs
madeindjs / ic.js
Last active February 11, 2020 11:20
const Intercom = require('intercom-client');
const myAdminId = 3385260;
const client = new Intercom.Client({ token: '...=' });
const until = new Date(2020, 3, 15);
const conversationId = 25726415330;
client.conversations.reply({
id: conversationId,
@madeindjs
madeindjs / index.html
Created October 11, 2019 22:07
isignif mockup
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Act mockup</title>
<!-- <link rel="stylesheet" href="https://bootswatch.com/4/darkly/bootstrap.min.css"> -->
<!-- <link rel="stylesheet" href="https://bootswatch.com/4/flatly/bootstrap.min.css"> -->
@madeindjs
madeindjs / tree.ts
Last active September 2, 2019 15:40
import assert = require("assert");
interface ISchemaTree {
id: string;
childs: ISchemaTree[];
}
class Tree {
public nodes: TreeNode[] = [];
# on inclue la librairie de test de Ruby pour faires quelques petits test unitaires
require 'test/unit'
# On va gérer toute la conversion dans une classe qui va avoir une méthode `translate` qui s'occupera de tout traduire.
# La classe va nous permettre de mieux organizer le code en plusieurs méthodes plus petites et donc plus lisibles
class Converter
# On va commencer par définir des constantes (aka des variables qui ne changerons jamais)
# En Ruby, les constantes sont des variables nomées en majuscule
# La syntaxe avec le `%w[]` permet simplement de définir des tableaux en mode un peu plus sexy.