Skip to content

Instantly share code, notes, and snippets.

Alexandre Rousseau madeindjs

View GitHub Profile
View nodejsGenerator.md

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:

View generator.ts
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);
}
View goaccess_report.sh
# !/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
View ic.js
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,
View index.html
<!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"> -->
View tree.ts
import assert = require("assert");
interface ISchemaTree {
id: string;
childs: ISchemaTree[];
}
class Tree {
public nodes: TreeNode[] = [];
View number_to_french.rb
# 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
Juste quelques améliorations au niveau des nommages
View number_to_english_2.rb
# 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
View api_consumer.html
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>TODO front-end</title>
</head>
<body>
<div id="app">
@madeindjs
madeindjs / json.swift
Created Apr 12, 2019
Fetch & Parse JSOn from raspberry-cook.fr
View json.swift
import Foundation
let decoder = JSONDecoder()
let uri : String = "http://raspberry-cook.fr/recipes/buddha-bowl-au-thon-cuit.json"
let feedUrl = URL(string: uri)!
struct Recipe : Codable {
var id : Int
var name : String
You can’t perform that action at this time.