Skip to content

Instantly share code, notes, and snippets.

View tpjnorton's full-sized avatar

Tom Norton tpjnorton

View GitHub Profile
@tpjnorton
tpjnorton / .bashrc
Created April 9, 2018 06:55
Webots Development Environment Variables
export WEBOTS_HOME=/home/tom/develop/$WEBOTS_VER
export LD_LIBRARY_PATH="/home/tom/develop/$WEBOTS_VER/lib"
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export WEBOTS_ALLOW_MODIFY_INSTALLATION=true
export WEBOTS_DISABLE_SAVE_PERSPECTIVE_ON_CLOSE=1
alias web="cd $WEBOTS_HOME"
alias webots=/home/tom/develop/$WEBOTS_VER/webots
alias trans="web; git checkout -- $WEBOTS_HOME/resources/translations"
alias mks="make release -j 12 -C $WEBOTS_HOME/src/webots"
const useMounted = () => {
const isMounted = useRef(false);
useEffect(() => {
isMounted.current = true;
return () => {
isMounted.current = false;
};
}, []);
@tpjnorton
tpjnorton / useWebSocket.ts
Last active October 28, 2020 10:27
A Handy React Hook for creating auto-closing WebSockets.
const useWebSocket = (url, protocols, onMessage, onError) => {
const ws = useRef(null);
useEffect(() => {
const socket = new WebSocket(url, protocols);
socket.onmessage = onMessage;
socket.onerror = onError;
ws.current = socket;
return () => {
ws.current.close();
};
@tpjnorton
tpjnorton / chatView.tsx
Last active October 1, 2020 12:06
An example of using the useWebSocket hook.
const ChatView = () = {
const wsRef = useWebSocket(
'wss://example.com/chat',
null,
(message) => alert(message),
() => alert('error!')
);
return (
useCode(
() => [
cond(and(not(breathing), clockRunning(clock)), stopClock(clock)),
cond(
and(not(not(breathing)), not(clockRunning(clock))),
startClock(clock)
),
set(animation, [
loop({
duration: 5000,
const mult = (a, b) => {
'worklet';
return a * b;
}
const MovingBox = () => {
const progress = useSharedValue(0);
useEffect(() => {
setTimeout(() => {
progress.value = 100;
}, 1000);
}, []);
const style = useAnimatedStyle(() => ({
progress.value = withTiming(100, { duration: 1000 });
const animation = useSharedValue(0);
const animateCircle = (breathing) => {
if (!breathing) animation.value = 0;
else {
animation.value = withRepeat(
withTiming(1, {
duration: 5000,
reverse: true,
easing: Easing.inOut(Easing.ease),
@tpjnorton
tpjnorton / useLoading.ts
Created October 23, 2020 08:55
useLoading.ts
import { useState } from "react";
const useLoading = (action) => {
const [loading, setLoading] = useState(false);
const doAction = (...args) => {
setLoading(true);
return action(...args).finally(() => setLoading(false));
};