Skip to content

Instantly share code, notes, and snippets.

@donpark
donpark / ClearViewApp.swift
Created May 3, 2025 17:15
macOS window with see-through background.
//
// ClearViewApp.swift
// ClearView
//
// Created by Don Park on 5/3/25.
//
import SwiftUI
@main
@donpark
donpark / README.md
Last active April 30, 2025 22:39
SwiftUI ZoomableImage

I needed a zoomable image view in SwiftUI that allows user to pan and zoom the image with useful constraints like:

  • snap back zoom in beyond 3x
  • snap back zoom out beyond entire image is visible
  • snap back pan beyond image bounds.

TODO:

  • Add rotation support
@donpark
donpark / perlincanvas.js
Created February 11, 2012 04:45
Rendering Perlin Noise Fast to HTML5 Canvas
/* Following canvas-based Perlin generation code originates from
* iron_wallaby's code at: http://www.ozoneasylum.com/30982
*/
function randomNoise(canvas, x, y, width, height, alpha) {
x = x || 0;
y = y || 0;
width = width || canvas.width;
height = height || canvas.height;
alpha = alpha || 255;
var g = canvas.getContext("2d"),
@donpark
donpark / react-query.md
Last active July 9, 2024 04:19
Error: Only plain objects, and a few built-ins, can be passed to Client Components from Server Components. Classes or null prototypes are not supported.
Error: Only plain objects, and a few built-ins, can be passed to Client Components from Server Components.
Classes or null prototypes are not supported.

When above error is thrown in React 14+, root cause may be QueryClientProvider not being defined in client scope using "use client".

Solution for Next.js apps using App Router

@donpark
donpark / PBKDF2Async.js
Created March 7, 2011 03:09
Asynch version of crypto-js 2.0.x PBKDF2
// original, synch version, is at:
// http://code.google.com/p/crypto-js/source/browse/branches/2.0.x/src/PBKDF2.js
(function(){
// Shortcuts
var C = Crypto,
util = C.util,
charenc = C.charenc,
UTF8 = charenc.UTF8,
Binary = charenc.Binary;
@donpark
donpark / DOM3D.js
Created March 27, 2024 10:41 — forked from OrionReed/dom3d.js
3D DOM viewer, copy-paste this into your console to visualise the DOM topographically.
// 3D Dom viewer, copy-paste this into your console to visualise the DOM as a stack of solid blocks.
// You can also minify and save it as a bookmarklet (https://www.freecodecamp.org/news/what-are-bookmarklets/)
(() => {
const SHOW_SIDES = false; // color sides of DOM nodes?
const COLOR_SURFACE = true; // color tops of DOM nodes?
const COLOR_RANDOM = false; // randomise color?
const COLOR_HUE = 190; // hue in HSL (https://hslpicker.com)
const MAX_ROTATION = 180; // set to 360 to rotate all the way round
const THICKNESS = 20; // thickness of layers
const DISTANCE = 10000; // ¯\\_(ツ)_/¯
@donpark
donpark / claude-journalist.md
Created March 26, 2024 16:25
claude-journalist prompts

get search terms to query SERP with (haiku)

You are a world-class journalist. Generate a list of 5 search terms to search for to research and write an article about the topic.

Please provide a list of 5 search terms related to '{topic}' for researching and writing an article. Respond with the search terms in a Python-parseable list, separated by commas.

select relevant urls among SERP results (haiku)

@donpark
donpark / test-1.md
Created March 14, 2024 00:50
news-despin tests
$ llm chat -m gpt-4-turbo-preview
Chatting with gpt-4-turbo-preview
Type 'exit' or 'quit' to exit
Type '!multi' to enter multiple lines, then '!end' to finish
> !multi

You are seasoned news editor famous for identifying and removing political spin from news articles.

@donpark
donpark / gist:870585
Created March 15, 2011 10:53
node.js crypto notes

While this note is useful for achieving compatibility with non-node.js crypto code, it contains implementation details which maybe outdated in the near future. Beware.

key argument

key arguments are expected to be binary strings which is bytes packed as chararacter codes of a string.

What this means is that only lower byte of each character will be used.

crypto.createCipher and crypto.createDecipher

@donpark
donpark / NotificationEnum.swift
Created December 2, 2016 18:17
How to use enum of Notification.Name
import Foundation
// Extension allowing enum of Notification.Names.
#if swift(>=3.0)
extension Notification.Name: ExpressibleByStringLiteral {
public init(stringLiteral value: String) {
self.init(value)
}