Skip to content

Instantly share code, notes, and snippets.

@erickedji
erickedji / sparkJsonSchemaToStructTypeSource.js
Created March 30, 2021 16:44
Get spark DataFrame inferred schema with schema.json(), then use this to convert it to scala source (StructType, etc.)
// https://github.com/apache/spark/blob/0494dc90af48ce7da0625485a4dc6917a244d580/sql/catalyst/src/main/scala/org/apache/spark/sql/types/DataType.scala#L200
function sparkJsonSchemaToStructTypeSource(json) {
const types = ["string", "long", "double", "float", "boolean"];
if (typeof json === "string")
return `${json[0].toUpperCase()}${json.slice(1)}Type`;
switch (json.type) {
case "array":
@erickedji
erickedji / clean-gsmarena-data.js
Created March 15, 2019 20:36
Script de traitement du dataset gsmarena de kaggle pour brain.js
const fs = require("fs")
const parse = require("csv-parse")
const fileName = "gsmarena-phone-dataset.csv"
const fileContent = fs.readFileSync(fileName).toString()
parse(fileContent, {
columns: true,
skip_lines_with_error: true,
skip_empty_lines: true
}, function (err, records) {
const { loadOrTrain } = require("./utils")
const brain = require("brain.js")
const trainingData = require("./selectra-phone-dataset-numbers-only-normalized.json");
const net = new brain.NeuralNetwork({ hiddenLayers: [3] });
const stats = net.train(trainingData);
// const stats = loadOrTrain(net, trainingData);
[
{
"input": {
"Processeur": 1,
"Mémoire vive (RAM)": 0.3333333333333333,
"Mémoire interne": 1,
"Poids": 0.7326732673267327,
"Appareil photo frontal": 0.4375,
"Autonomie": 0.5058333333333334,
"Écran": 0.4506756756756757
https://selectra.info/telecom/guides/comparatifs/telephones-mobiles
function getPhoneData(tableDivEl) {
try {
let rawData = Array.from(tableDivEl.querySelectorAll("tr"))
.map(tr => ({
key: tr.querySelector("th").textContent,
value: parseInt(tr
.querySelector("td")
.textContent
@erickedji
erickedji / updateIncludes.js
Last active October 5, 2015 10:38
Statically process file includes for a set of html files, using underscore's template function (idempotent in-place update)
#!/usr/bin/env node
"use strict";
// This script will search for HTML files on the root folder and process
// static includes wrapped by the HTML comments like this:
//
// <!-- #include "foo.html" -->
// anything wrapped by these comments will be replaced
// by the content of the "partialsDir/foo.html" file
// <!-- endinclude -->
// How to upgrade your users passwords in the DB without their intervention
//
// SHA-1 isn't strong enough to hash passwords with, but lots of people have a
// whole bunch of SHA-1'd passwords because they thought it was. You could use
// bcrypt or scrypt, but maybe in two years' time someone will tell you that's
// also not strong enough, and you'll want to upgrade.
//
// This sample demonstrates how you can remove weak password hashes from your
// user database, without needing the user to enter their password.
@erickedji
erickedji / exo10p24_select.c
Created November 16, 2011 05:20
Exercices de la séance 5 - TP Systèmes Centralisés
/* Time-Stamp: <16 Oct 1997 12:42 charpov@enseeiht.fr> */
/* 8.9 */
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/time.h>
#include <string.h>
#include <stdlib.h>
@erickedji
erickedji / Note sur la fermeture des descripteurs de fichiers.md
Created November 9, 2011 09:30
Exercices de la séance 4 - TP Systèmes Centralisés

Quand un pipe est ouvert, et que le descripteur associé à un bout d'écriture (desc[1]) reste ouvert dans un processus, le système attendra que ce processus ferme ce descripteur (après y avoir éventuellement écrit), pour signifier qu'il a fini d'y écrire.

Conséquence: Quand on créé des processus fils, ou qu'on duplique des descripteurs, il faut fermer systématiquement tous ceux qu'on n'utilise pas dans le processus courant.

En TP, sur certaines machines, pour l'exercice 3, les deux pipes p et q étaient créés dès l'entrée dans le programme principal (pipe(p); pipe(q);). Or, seul le pipe p a été fermé ensuite dans le programme principal, ce qui fait que le système est toujours en attente d'écriture sur q[1] (d'où la non terminaison constatée chez certains).

Il faut soit fermer explicitement le pipe q (utilisé pour la communication entre le fils et le petit-fils) dans le programme principal (père), ou créer ce pipe seulement dans le fils.

Pour rappel, en TP, on avait deux pipes p et q, et tr

@erickedji
erickedji / appli_fork_exec_wait2.2.8.c
Created November 8, 2011 11:25
Exercices de la séance 3 - TP Systèmes centralisés
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(void)
{
int n, ret;