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");

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:

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.
@madeindjs
madeindjs / number_to_english_2.rb
Created May 12, 2019 09:40
Juste quelques améliorations au niveau des nommages
# Il vaut mieux définir des constantes (aka des variables qui ne changerons jamais)
# en dehors de la méthode. Les constantes sont juste nomées en majuscule
#
# La syntaxe avec le `%w[]` permet simplement de définir des tableaux en mode un peu plus sexy
NUMBER_TRANSLATIONS = %w[one two three four five six seven eight nine].freeze
DOZEN_TRANSLATIONS = %w[ten twenty thirty forty fifty sixty seventy eighty ninety].freeze
TEENAGERS = %w[eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen].freeze
# Convert a number to a beautiful string
# @param [Integer] as a number
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>TODO front-end</title>
</head>
<body>
<div id="app">