Skip to content

Instantly share code, notes, and snippets.

View cecilemuller's full-sized avatar

Cecile Muller cecilemuller

View GitHub Profile
@cecilemuller
cecilemuller / OrientationDamper.swift
Last active February 16, 2023 13:33
Swift Dampers
import simd
// Interpolate a Quaternion without specifying duration, in the style of Herbert Stocker's X3D OrientationDamper:
// https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/sai/Followers/OrientationDamper.html
class OrientationDamper {
private(set) var isActive: Bool = false
private(set) var value: simd_quatf
private(set) var destination: simd_quatf
private(set) var tau: Float
private(set) var tolerance: Float
@cecilemuller
cecilemuller / cubemap.bat
Created May 1, 2019 11:32
Generate a DDS cubemap from 6 JPEG images
texassemble cube -w 1024 -h 1024 -o cubemap.dds px.jpg nx.jpg py.jpg ny.jpg pz.jpg nz.jpg
texconv cubemap.dds -m 0 -y -f BC1_UNORM
@cecilemuller
cecilemuller / index.html
Last active January 4, 2023 16:04
Record three.js to WebM video using CCapture.js
<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Record WebGL to WebM (Chrome only)</title>
<meta charset="utf-8">
<link rel="stylesheet" href="styles.css" charset="utf-8">
</head>
<body>
<div class="buttons">
@cecilemuller
cecilemuller / getMaterial.py
Last active January 1, 2023 11:54
Marmoset Toolbag: find material/object by name
import mset
# Smarter "findMaterial": doesn't print a message in the console
# or throw an error when the object to find doesn't exist.
def getMaterial(name, createIfNotFound=False):
found = None
objs = mset.getAllMaterials()
for obj in objs:
if obj.name == name:
found = obj
@cecilemuller
cecilemuller / mjpeg.js
Last active December 30, 2022 14:35
Emit a looped serie of images as an MJPEG stream using Node.js
'use strict';
const {readFileSync} = require('fs');
const {createServer} = require('http');
const {EventEmitter} = require('events');
let bufferIndex = -1;
const buffers = [
readFileSync('1.jpg'),
readFileSync('2.jpg'),
readFileSync('3.jpg'),
@cecilemuller
cecilemuller / main.ts
Last active December 20, 2022 10:27
Typescript Webworker
/* eslint-env browser */
import type {IRequestWorker} from "./worker.ts";
const worker = new Worker(new URL("./worker.ts", import.meta.url)) as IRequestWorker;
// Receive from the worker
worker.onmessage = ({data: {myresponse}}) => {
console.log(myresponse);
};
@cecilemuller
cecilemuller / Dockerfile
Last active December 12, 2022 10:55
doctl in Ubuntu Docker
FROM ubuntu:22.04
RUN apt update \
&& apt install -y wget \
&& wget https://github.com/digitalocean/doctl/releases/download/v1.88.0/doctl-1.88.0-linux-amd64.tar.gz -O doctl.tar.gz \
&& tar xf doctl.tar.gz \
&& rm doctl.tar.gz \
&& mv doctl /usr/local/bin
@cecilemuller
cecilemuller / Example.swift
Last active November 6, 2022 19:56
CSS HSL "linear-gradient" to Swift "CAGradientLayer"
// CSS gradient generated by https://www.joshwcomeau.com/gradient-generator/
// hsl(199deg 95% 55%) 0%
// hsl(140deg 63% 65%) 50%
// hsl(99deg 100% 50%) 100%
let gradient = CAGradientLayer()
// ...
gradient.type = .axial
gradient.colors = [
UIColor.hsl(degrees: 199, saturation: 0.95, lightness: 0.55).cgColor,
@cecilemuller
cecilemuller / JSON.swift
Created October 26, 2022 07:41
Swift: JSON helpers
import Foundation
class JSON {
static func encodeData<T>(_ from: T, format: JSONEncoder.OutputFormatting = .sortedKeys) -> Data? where T: Encodable {
let encoder = JSONEncoder()
encoder.outputFormatting = format
do {
return try encoder.encode(from)
} catch {
print(error)
@cecilemuller
cecilemuller / FileManager+documentDirectory.swift
Last active June 29, 2022 23:43
Swift: get document directory
import Foundation
extension FileManager {
public static var documentDirectory: URL {
return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
}
}