Skip to content

Instantly share code, notes, and snippets.

View iso2022jp's full-sized avatar
🌌
Working in the metaverse

USHITO Hiroyuki iso2022jp

🌌
Working in the metaverse
View GitHub Profile
@iso2022jp
iso2022jp / vlw-viewer.html
Created May 15, 2021 11:30
VLW font viewer
<!doctype html>
<html class="h-100">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>VLW viewer</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/mustache@4.2.0/mustache.min.js"></script>
@iso2022jp
iso2022jp / body-pix-injector.js
Last active July 20, 2021 03:43
BodyPix を getUserMedia に注入してみる
'use strict'
;(async () => {
const handleSelectImage = (input, select) => {
input.addEventListener('change', e => {
const files = [...input.files]
const image = files.filter(f => f.type.startsWith('image/'))
if (image.length) {
const file = image[0]
@iso2022jp
iso2022jp / encodeWindows31J.js
Created December 15, 2020 10:36
TextDecoder を使って無理矢理 Windows-31J の Encoder を作る
const encodeWindows31J = text => {
const range = (from, to) => [...Array(to - from + 1).keys()].map(b => b + from)
const islead = b => (b >= 0x81 && b <= 0x9F) || (b >= 0xe0 && b <= 0xef)
const follows = [...range(0x40, 0x7e), ...range(0x80, 0xfc)]
const decoder = new TextDecoder('Windows-31J')
const sbmap = b => ({ [decoder.decode(new Uint8Array([b]))]: [b] })
const dbmap = l => follows.reduce((mapping, f) => ({ ...mapping, [decoder.decode(new Uint8Array([l, f]))]: [l, f] }), {})
@iso2022jp
iso2022jp / ExcelWriter.php
Created December 4, 2020 03:49
ZipArchive 依存の単一シート Excel 出力
<?php
declare(strict_types=1);
namespace Damn\IO;
use ZipArchive;
class ExcelWriter
{
@iso2022jp
iso2022jp / nlstest.cs
Created November 12, 2020 13:43
NLS 更新に伴う濁点カタカナの半角全角一致テスト
using Microsoft.VisualBasic;
using NlsTest;
using System;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Text;
const int COMPARE_STRING = 1;
const int NORM_IGNOREWIDTH = 0x00020000;
@iso2022jp
iso2022jp / char-volume-ranking.js
Created August 25, 2020 13:37
文字の占有率ランキング
document.addEventListener('DOMContentLoaded', _ => {
const x0208 = [ 0x3000,0x3001,0x3002,0xFF0C,0xFF0E,0x30FB,0xFF1A,0xFF1B,0xFF1F,0xFF01,0x309B,0x309C,0x00B4,0xFF40,0x00A8,0xFF3E,0xFFE3,0xFF3F,0x30FD,0x30FE,0x309D,0x309E,0x3003,0x4EDD,0x3005,0x3006,0x3007,0x30FC,0x2015,0x2010,0xFF0F,0x005C,0x301C,0x2016,0xFF5C,0x2026,0x2025,0x2018,0x2019,0x201C,0x201D,0xFF08,0xFF09,0x3014,0x3015,0xFF3B,0xFF3D,0xFF5B,0xFF5D,0x3008,0x3009,0x300A,0x300B,0x300C,0x300D,0x300E,0x300F,0x3010,0x3011,0xFF0B,0x2212,0x00B1,0x00D7,0x00F7,0xFF1D,0x2260,0xFF1C,0xFF1E,0x2266,0x2267,0x221E,0x2234,0x2642,0x2640,0x00B0,0x2032,0x2033,0x2103,0xFFE5,0xFF04,0x00A2,0x00A3,0xFF05,0xFF03,0xFF06,0xFF0A,0xFF20,0x00A7,0x2606,0x2605,0x25CB,0x25CF,0x25CE,0x25C7,0x25C6,0x25A1,0x25A0,0x25B3,0x25B2,0x25BD,0x25BC,0x203B,0x3012,0x2192,0x2190,0x2191,0x2193,0x3013,0x2208,0x220B,0x2286,0x2287,0x2282,0x2283,0x222A,0x2229,0x2227,0x2228,0x00AC,0x21D2,0x21D4,0x2200,0x2203,0x2220,0x22A5,0x2312,0x2202,0x2207,0x2261,0x2252,0x226A,0x226B,0x221A,0x223D,0x221D,0x223
@iso2022jp
iso2022jp / char-box-ranking.js
Created August 25, 2020 13:36
文字のバウンディングボックスランキング
document.addEventListener('DOMContentLoaded', _ => {
const x0208 = [ 0x3000,0x3001,0x3002,0xFF0C,0xFF0E,0x30FB,0xFF1A,0xFF1B,0xFF1F,0xFF01,0x309B,0x309C,0x00B4,0xFF40,0x00A8,0xFF3E,0xFFE3,0xFF3F,0x30FD,0x30FE,0x309D,0x309E,0x3003,0x4EDD,0x3005,0x3006,0x3007,0x30FC,0x2015,0x2010,0xFF0F,0x005C,0x301C,0x2016,0xFF5C,0x2026,0x2025,0x2018,0x2019,0x201C,0x201D,0xFF08,0xFF09,0x3014,0x3015,0xFF3B,0xFF3D,0xFF5B,0xFF5D,0x3008,0x3009,0x300A,0x300B,0x300C,0x300D,0x300E,0x300F,0x3010,0x3011,0xFF0B,0x2212,0x00B1,0x00D7,0x00F7,0xFF1D,0x2260,0xFF1C,0xFF1E,0x2266,0x2267,0x221E,0x2234,0x2642,0x2640,0x00B0,0x2032,0x2033,0x2103,0xFFE5,0xFF04,0x00A2,0x00A3,0xFF05,0xFF03,0xFF06,0xFF0A,0xFF20,0x00A7,0x2606,0x2605,0x25CB,0x25CF,0x25CE,0x25C7,0x25C6,0x25A1,0x25A0,0x25B3,0x25B2,0x25BD,0x25BC,0x203B,0x3012,0x2192,0x2190,0x2191,0x2193,0x3013,0x2208,0x220B,0x2286,0x2287,0x2282,0x2283,0x222A,0x2229,0x2227,0x2228,0x00AC,0x21D2,0x21D4,0x2200,0x2203,0x2220,0x22A5,0x2312,0x2202,0x2207,0x2261,0x2252,0x226A,0x226B,0x221A,0x223D,0x221D,0x223
@iso2022jp
iso2022jp / measure-text-preview.js
Last active August 25, 2020 13:26
CanvasRenderingContext2D.measureText のテスト
document.addEventListener('DOMContentLoaded', _ => {
const canvas = document.querySelector('#canvas')
const context = canvas.getContext('2d')
context.font = '300px "Yu Mincho"'
context.fillStyle = 'white'
context.fillRect(0, 0, canvas.width, canvas.height)
context.textBaseline = 'top'
@iso2022jp
iso2022jp / from_base64.sql
Created September 5, 2019 23:49
FROM_BASE64 custom function for old MySQL
DROP FUNCTION IF EXISTS FROM_BASE64;
DELIMITER ;;
CREATE FUNCTION FROM_BASE64 (base64 BLOB) RETURNS BLOB DETERMINISTIC SQL SECURITY INVOKER
BEGIN
DECLARE plain BLOB DEFAULT '';
DECLARE o INTEGER DEFAULT 0;
@iso2022jp
iso2022jp / rdp-ping.sh
Last active February 25, 2022 04:59
exec 3<>/dev/tcp/$server/3389
xxd -r -p <<REQ >&3
03 00 00 2a
25 e0 00 00 00 00 00
43 6f 6f 6b 69 65 3a 20 6d 73 74 73 68 61 73 68 3d 70 69 6e 67 0d 0a
01 00 08 00 00 00 00 00
REQ
xxd -l 11 <&3 > debug.log