Skip to content

Instantly share code, notes, and snippets.

@nyaocat
nyaocat / type-safe-builder.ts
Created November 30, 2020 10:05
Typescriptでタイプセーフなビルダーパターン
type WidthDefined = {width: number};
type HeightDefined = {height:number};
type TitleDefined = {title:string};
type AllDefined = WidthDefined & HeightDefined & TitleDefined;
class WidgetBuilder<T>{
constructor(private params: T){}
width<D>(this:WidgetBuilder<D extends WidthDefined ? never : D>, width: number):WidgetBuilder<D & WidthDefined> {
return new WidgetBuilder(Object.assign(this.params, {width}));
}
@nyaocat
nyaocat / pysdl2_and_wxpython.py
Last active March 14, 2022 03:05
pysdl2 in wxpython
import sdl2
import sdl2.ext
import math
import wx
class SDL2Timer(wx.Timer):
def Yaruzo(self, a):
sdl2.ext.init()
# window = sdl2.SDL_CreateWindow("Hi".encode("utf-8"),
@nyaocat
nyaocat / run-in-nonet
Created May 8, 2021 08:00
指定コマンドをネットワーク接続不可環境下で実行させるスクリプト
#!/bin/bash
set -eu
readonly NSNAME="ns${RANDOM}"
sudo ip netns add "$NSNAME"
trap "sudo ip netns delete '$NSNAME'" 0
sudo ip netns exec "$NSNAME" sudo -u "$USER" "$@"
@nyaocat
nyaocat / w-make
Last active September 20, 2020 01:22
make を継続的に実行するコマンド
#!/bin/bash
# w-make コマンド
# このファイルを PATH の通った場所に実行属性付きで w-make として保存し、
# `make xxx` の代わりに `w-make xxx` を実行すると必要な依存ファイルの変更を監視して継続的に make をたたく
# 要: make, inotifywait, perl
while :
do
make "$@"
@nyaocat
nyaocat / mdnsserver.pl
Last active September 20, 2019 03:56
雑な mDNS サーバ実装
#!/usr/bin/perl
# License: NYSL
use warnings;
use strict;
use Sys::Hostname;
use IO::Socket::Multicast;
use Net::DNS;
use IO::Interface::Simple;
my $sock = IO::Socket::Multicast->new(LocalPort => 5353);
@nyaocat
nyaocat / grepedit
Created April 5, 2019 02:37
grep した結果に対してのみ編集を行うコマンド(例: grepedit -E '^[1-9]' * )
#!/bin/bash
set -eu
BUF="$(mktemp)"
trap "rm '$BUF'" 0
grep -H -n "$@" > "$BUF"
"${EDITOR:-vi}" "$BUF"
IFS=":"
@nyaocat
nyaocat / npm
Created March 11, 2019 13:12
nodeをインストールしたくないので docker で代用する(下記ファイルを PATH の通る場所に node, npm, npx と名付けてそれぞれ保存すると使える)
#!/bin/bash
set -eu
mkdir -p $HOME/.config $HOME/.npm
docker run \
-it --rm \
--tmpfs "/tmp" \
-v "$PWD:$PWD" \
-v "$HOME/.config:$HOME/.config" \
@nyaocat
nyaocat / readonly.lua
Last active October 20, 2018 15:49
Lua Read Only Table (or Userdata) module http://nyaocat.hatenablog.jp/entry/2013/11/09/111856
--[[
lua readonly module
2013 (c) nyaocat
this program is licensed under NYSL( http://www.kmonos.net/nysl/ )
lua5.1 and lua5.2
]]
local newproxy = newproxy or require("newproxy") -- for Lua5.2
local type, getmetatable, pairs, assert, error = type, getmetatable, pairs, assert, error
#!/bin/bash
# usage: docker-edit container filepath
# License: NYSL
set -eu
TMPFILE=$(mktemp)
trap "rm $TMPFILE" 0
docker cp $1:$2 $TMPFILE
${EDITOR:-vi} $TMPFILE
@nyaocat
nyaocat / aaa.cpp
Last active February 15, 2018 00:30
type-safe event holder
#include <iostream>
#include <string>
#include "signal.hpp"
struct event_A : public s::signal<int, int> {};
struct event_B : public s::signal<std::string, int, double> {};
int main() {
s::bind<event_A>([](int p1, int p2) {