Skip to content

Instantly share code, notes, and snippets.

View thierryc's full-sized avatar
🚀

Thierry Charbonnel thierryc

🚀
View GitHub Profile
@thierryc
thierryc / index.html
Created July 24, 2024 10:19
pressure-sensitive-drawing-page-gist
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pressure-Sensitive Drawing</title>
<style>
body, html {
margin: 0;
padding: 0;
@thierryc
thierryc / clean_node_versions.sh
Last active July 24, 2024 22:41
NVM Node.js Version Manager
#!/bin/zsh
# Ensure nvm is loaded
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# Get the script name reliably
SCRIPT_NAME=$(basename "$0")
# Function to display help
show_help() {
@thierryc
thierryc / one-at-a-time.js
Last active May 29, 2021 22:03
Javascript Jenkins's one-at-a-time hash function
// An implementation of Jenkins's one-at-a-time hash
// <http://en.wikipedia.org/wiki/Jenkins_hash_function>
// key: string
// return hex
function oneAtATimeHash(key) {
var hash = 0, i = key.length;
while (i--) {
hash += key.charCodeAt(i);
hash += (hash << 10);
hash ^= (hash >> 6);
@thierryc
thierryc / CSS Mobile First CSS Media Queries in em
Created July 2, 2018 21:37
CSS Mobile First CSS Media Queries in em
/* smartphones, iPhone, portrait 480x320 phones(min-width:320px) */
@media screen and (min-width: 20em) {}
/* portrait e-readers (Nook/Kindle), smaller tablets @ 600 or @ 640 wide. (min-width:481px) */
@media screen and (min-width: 30.06em) {}
/* portrait tablets, portrait iPad, landscape e-readers, landscape 800x480 or 854x480 phones (min-width:641px) */
@media screen and (min-width: 40.06em) {}
/* tablet, landscape iPad, lo-res laptops ands desktops (min-width:961px) */
@thierryc
thierryc / Axis.js
Created December 30, 2017 00:10 — forked from MrToph/Axis.js
Charts in React Native with React-Native-SVG and D3.js
import React, { Component, PropTypes } from 'react'
import { G, Line, Path, Rect, Text } from 'react-native-svg'
import * as d3scale from 'd3-scale'
import { dateToShortString } from '../utils'
export default class Axis extends Component {
static propTypes = {
width: PropTypes.number.isRequired,
ticks: PropTypes.number.isRequired,
x: PropTypes.number,
import React, { Component, PropTypes } from 'react'
import { G, Line, Text } from 'react-native-svg'
import * as d3scale from 'd3-scale'
export default class Axis extends Component {
static propTypes = {
width: PropTypes.number.isRequired,
ticks: PropTypes.number.isRequired,
x: PropTypes.number,
y: PropTypes.number,

Keybase proof

I hereby claim:

  • I am thierryc on github.
  • I am thierryc (https://keybase.io/thierryc) on keybase.
  • I have a public key ASBT28oQoktqbZn2HNSLBjQ7UWv1lngTkyYYrgvsOrArjAo

To claim this, I am signing this object:

@thierryc
thierryc / gh-pages-deploy.md
Created September 10, 2017 00:39 — forked from cobyism/gh-pages-deploy.md
Deploy to `gh-pages` from a `dist` folder on the master branch. Useful for use with [yeoman](http://yeoman.io).

Deploying a subfolder to GitHub Pages

Sometimes you want to have a subdirectory on the master branch be the root directory of a repository’s gh-pages branch. This is useful for things like sites developed with Yeoman, or if you have a Jekyll site contained in the master branch alongside the rest of your code.

For the sake of this example, let’s pretend the subfolder containing your site is named dist.

Step 1

Remove the dist directory from the project’s .gitignore file (it’s ignored by default by Yeoman).

@thierryc
thierryc / .block
Last active July 21, 2017 01:01
fresh block
license: mit
@thierryc
thierryc / gist:5dc31333e2224729f94200e2b33199e0
Created March 30, 2017 07:52 — forked from fwextensions/gist:2052247
Decomposing a 2D transformation matrix to find the skew
/*
This code takes a 2D transformation matrix described as a one-dimensional array
(in column order, top to bottom and left to right) and decomposes it using the dojo
matrix library. This input matrix should produce a 45-deg X skew:
1 1 0
0 1 0
0 0 1
The output of decompose() looks like this: