Skip to content

Instantly share code, notes, and snippets.

View joenoon's full-sized avatar

Joe Noon joenoon

  • SF Bay Area - San Ramon
View GitHub Profile
@joenoon
joenoon / binary_kv.ex
Created March 6, 2021 16:47
Simple ecto Binary KV store in the db, MIT License, Joe Noon, Copyright 2020
defmodule Noonhq.Repo.BinaryKv do
@moduledoc """
Simple ecto Binary KV store in the db
MIT License, Joe Noon, Copyright 2020
"""
require Logger
use Ecto.Schema
import Ecto.Query
@joenoon
joenoon / _000.txt
Last active January 10, 2020 09:09
my liveview setup
i have one MainLive live_view defined in router as live "/*path", MainLive . then i created
a router_live.ex which looks sort of like a normal router.ex with all the live routes, but
they all point to live_components. and that router is not used in the endpoint, its purely
to get the functionality with route matching and Routes.live_path etc. my MainLive
handle_params does a URI.parse(url) and then Phoenix.Router.route_info(MyAppWeb.RouterLive,
"GET", uri.path, uri.authority) and i come out with a route that i pass down. my MainLive
render does a header/footer and in the middle something like live_component(assigns.socket,
route.live_view, id: route.route, store: store) (route here is what i created in
handle_params… route.live_view is the LiveComponent defined in the router_live.ex for the
route that matched). ive liked how it worked out so far. i also have an “AppState” that i
@joenoon
joenoon / app.html.eex
Last active January 18, 2023 00:18
Phoenix LiveView main/nested setup
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet" href="<%= Routes.static_path(@conn, "/css/app.css") %>"/>
</head>
<body>
<div id="phx_root">
defmodule MyAppWeb.LiveView.Session do
@moduledoc """
Joe Noon on 9/3/2019
LiveView does not have a direct way to change the session, but does provide a way to set flash.
The application can use `put_flash(socket, :session, %{...})`, and this plug will merge that
map when present into the persisted session.
"""
@joenoon
joenoon / jn-mobx-lite.macro.d.ts
Last active March 26, 2019 15:54
needs some custom setup, but here is the idea
import {MobxReactLiteHooks} from './jn-mobx-lite';
declare module 'jn-mobx-lite.macro';
export function useObserver<T>(baseComponentName?: string): MobxReactLiteHooks;
@joenoon
joenoon / jn-mobx-lite.ts
Last active March 25, 2019 08:27
Simplified pattern for using mobx-react-lite with less room for error
import {useComputed, useObservable, useObserver as useObserverInternal} from 'mobx-react-lite';
const HOOKS = {
useComputed,
useObservable,
};
export type MobxReactLiteHooks = typeof HOOKS;
// This is for my convenience, not neccessary for the pattern.
export * from 'mobx';
@joenoon
joenoon / flash.ts
Created October 16, 2018 07:16
Flash implementation inspired by Rails (ie. flash[:notice]) for frontend.
import { observable, computed, toJS } from 'mobx';
function defaultData() {
return {
text: null,
dataText: null,
type: null,
};
}
@joenoon
joenoon / icon.js
Created June 27, 2018 07:26
SVG icon react class
import React from 'react';
import {View} from 'react-native';
function Icon(props: {size: number, color: string, name: string, style?: any}) {
const SVGIcon = Icon.SVGS[props.name];
if (!SVGIcon) {
throw new Error(`Unknown icon ${props.name}`);
}
const {style, ...rest} = props;
@joenoon
joenoon / quaternion.js
Created June 15, 2018 04:39 — forked from bellbind/quaternion.js
[javascript]understanding quaternion
//[understanding quaternion]
// - basic vector knowledge
// - quaternion basics
// - quaternion multiply
// - rotation with quaternion
// - slerp
// - convert quaternion to matrix
//[(basic) vector func]
var negate = function (vec) {
const LETTERS = 'acdfgilmnoprstuw';
const HASH = 7;
function hash(s) {
let hash = HASH;
for (let i = 0; i < s.length; i++) {
hash = (hash * 23 + LETTERS.indexOf(s[i]));
}
return hash;
}