Skip to content

Instantly share code, notes, and snippets.

View Cycymomo's full-sized avatar

Cyril Moreau Cycymomo

View GitHub Profile
@Cycymomo
Cycymomo / ClosureExplain.md
Created January 17, 2014 16:25
ClosureExplain.md

Closure ... à quoi ça sert ?

Sans doute un des points les plus compliqués ...

@Cycymomo
Cycymomo / document.all.falsy.md
Last active January 3, 2016 14:29
document.all.falsy.md

L'exception qui confirme la règle

En JavaScript, comme spécifié par ECMAScript 5, tous les objets (non primitifs) sont évalués à true (on dit en anglais qu'ils sont truthy). Certains sont évalués à false (ils sont dits falsy) :

  • falsy : undefined, null, false, +0, -0, NaN, ''
  • truthy : tous les autres

Tous ? En JavaScript oui. Mais lorsqu'on se trouve côté client (donc avec l'objet window en plus), il y a un intru dans le DOM qui résiste à la norme. Il s'agit de document.all.

Pourquoi ? Pour ne pas casser certains sites archaïque qui utilisaient cette propriété dépréciée afin de différencier Netscape de IE5.

@Cycymomo
Cycymomo / wrapperUMD.js
Created January 15, 2014 17:33
wrapperUMD (compat CommonJS, AMD et others)
(function (root, factory) {
if (typeof exports === 'object') {
// CommonJS
module.exports = factory(require('b'));
} else if (typeof define === 'function' && define.amd) {
// AMD
define(['b'], function (b) {
return (root.returnExportsGlobal = factory(b));
});
} else {
@Cycymomo
Cycymomo / MEANExplain.md
Last active January 3, 2016 01:09
Comment déployer un site créé avec MEAN gratuitement et facilement sur ubuntu
@Cycymomo
Cycymomo / parseIntEvil.md
Last active December 31, 2015 03:29
parseInt is evil

parseInt est pratique. Il est embarqué nativement dans JavaScript et permet de convertir une chaîne de caractère (String) en entier. JavaScript étant permessif historiquement1, n'importe quelle valeur peut lui être passée. Il va silencieucesment la convertir en String (à l'aide de la méthode toString embarquée nativement dans chaque instance d'Object), puis effectuer le parseInt.

D'où :

parseInt("0.0000008", 10); // 0, ok tout va bien
parseInt(0.0000008, 10); // 8 WTF ?!

WTF ?!?

Etapes (grossières) de parseInt(nb) sous le capot 2 :

@Cycymomo
Cycymomo / Pattern observer.md
Last active December 30, 2015 23:29 — forked from addyosmani/examples.md
Pattern observer

What are we trying to observe? Raw object data.

// Objects
var obj = { id: 2 };
obj.id = 3; // obj == { id: 3 }
 
// Arrays
var arr = ['foo', 'bar'];
arr.splice(1, 1, 'baz'); // arr == ['foo', 'baz'];
echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc
. ~/.bashrc
mkdir ~/local
mkdir ~/node-latest-install
cd ~/node-latest-install
curl http://nodejs.org/dist/node-latest.tar.gz | tar xz --strip-components=1
./configure --prefix=~/local
make install # ok, fine, this step probably takes more than 30 seconds...
curl https://npmjs.org/install.sh | sh
@Cycymomo
Cycymomo / explainHeritage1.md
Last active December 28, 2015 07:59
explainHeritage

Comment faire de l'héritage en JavaScript ?

ou la POO classique, c'est pas automatique !

tl;dr

Cet article présente les différentes manières de faire de l'héritage en JavaScript. Il répondra aussi à ces questions :

  • Y a t il des classes en JavaScript comme dans les autres langages ?
  • Quelles sont les différentes façons de faire de l'héritage en JavaScript ?
  • Quelle est la bonne pratique ?

De la POO en JavaScript, sans classe ?

@Cycymomo
Cycymomo / getDaysInYear.js
Last active December 28, 2015 05:59
getDaysInYear.js
function getDaysInYear(year,day){
var d=new Date(year,0), dates=[];
d.setDate(d.getDate()+(7+day-d.getDay())%7);
while(d.getFullYear()===year){
dates.push(new Date(d));
d.setDate(d.getDate()+7);
}
return dates;
}
@Cycymomo
Cycymomo / pl_sql_pense_bete.md
Last active December 27, 2015 13:49
PL/SQL : pense-bête

TYPE_TABLE :

Déclaration d'un tableau contenant des string de 3 caractères :

TYPE type_table IS TABLE OF VARCHAR2(3) INDEX BY BINARY_INTEGER;
mon_type_table   type_table;

Ajouter un élément :