Skip to content

Instantly share code, notes, and snippets.

View Shinpeim's full-sized avatar

Shinpei Maruyama Shinpeim

View GitHub Profile

トラップはよい機能だけど完全に信頼できるというわけではないよ。SIGKILLとSIGSTOPはトラップできない。

大昔のいくつかのUnixにはSIGKILLをトラップする怪しげな方法があった。もしプログラムがptraceされていたら、どのようなシグナルでも(SIGKILLでも)、そのプロセスを停止させてptraceをしている側のプロセスに通知するという動作になっていた。

そこで僕は"sh"という名前のプログラムを書いた。そのプログラムはメモリサイズを/bin/shと同じになるように注意深く調整したあと、fork & execして、子プロセスをptraceした。子プロセスは"superman"というプログラムだった。僕の偽shは、supermanが何らかのシグナルを受け取ると、そのシグナル番号をsupermanのメモリに書き込んだ後、つねにSIGINTでsupermanを再開するという動作になっていた。supermanのSIGINTハンドラはシグナル番号をみて面白メッセージを表示するようになっていた。

僕はそのプログラムを起動して、システム管理者のところにいって、何かプロセスがkillできないんだけど、と言った。システム管理者は^Cや^\を一応試した後、別の端末からログインしてrootになって、psでsupermanを見つけて、それをkill -9した。

「クリプトン星人にはSIGKILLは効かないぞ」と表示されてプロセスが動き続けているのを見た時の彼の顔といったらなかなかのものだった。

require 'active_model'
class ActiveModel::Errors
module HiddenEntity
attr_accessor :_entity
end
def generate_message_with_format(attribute, type = :invalid, options = {})
message = generate_message_without_format attribute, type, options
@hayajo
hayajo / Dockerfile
Last active August 29, 2015 14:05
NDS#37 ゴルーチンと並行性パターン
FROM ubuntu:trusty
RUN apt-get update && apt-get install -y golang mercurial
ENV GOPATH /usr/local
RUN go get code.google.com/p/go.tools/cmd/present
EXPOSE 3999
CMD cd /mnt && present -orighost="localhost"
@wakamsha
wakamsha / memo.md
Last active October 11, 2021 01:40
VirtualBox 内のゲスト OS からホスト OS にアクセスしたい

VirtualBox仮想マシンのネットワークはデフォルトでNATとなっている。 VirtualBox の場合、NAT ネットワークアダプタには 10.0.2.0/24 の IP アドレスが割り当てられ、ゲスト OS から見える ホスト OS の IP アドレスには 10.0.2.2 が設定される仕様。

したがってホストOS上に建てたサーバーにゲストOSからアクセスしたい場合は、http://10.0.2.2とアクセスすれば普通に見ることができる。

参考

@hayajo
hayajo / Vagrantfile
Created March 13, 2014 04:15
VagrantShareでカレントディレクトリのファイルを公開する
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Usage:
# $ vagrant up
# $ vagrant login
# $ vagrant share
#
# access to http://<shared_name>.vagrantshare.com
// ==UserScript==
// @name ChatWork Image Extractor
// @description Image extractor for ChatWork.
// @include https://www.chatwork.com/*
// @version 0.0.1
// ==/UserScript==
(function() {
var forEach = Array.prototype.forEach,
ATTR_NAME_APPEND_IMG_DONE = 'data-append-img-done',
@uzulla
uzulla / error.php
Last active May 11, 2019 02:23
PHPでいいかんじにエラーをあつかうの巻
<?php
// いらんものを画面にだされては困るので
ini_set("display_errors", 0);
ini_set("display_startup_errors", 0);
// NoticeやDeprecated含めて全部のエラーがほしい
error_reporting(E_ALL);
// ログファイル設定はmod_phpやBuiltin Serverなどでは設定不要、
// 設定しないとSTDERRに出力される
// ini_set("log_errors", 1);
@shogo82148
shogo82148 / cookieclicker.user.js
Created September 18, 2013 14:14
CpSをツイートするためのスクリプト
// ==UserScript==
// @name Tweet CPS
// @namespace http://shogo82148.github.io
// @version 0.1
// @description show share CpS button on cookieclicker
// @match http://orteil.dashnet.org/cookieclicker/
// @copyright 2012+, shogo82148
// ==/UserScript==
(function () {
@clicube
clicube / 0_icon_to_140.md
Last active February 27, 2024 01:05
アイコンを140文字にする話

アイコンを140文字にする話

なに?

この前ドット絵のアイコン書いたんですよ、こんなの。

@kyubing

結構うまくできたかなって満足してます。

@clicube
clicube / compress.rb
Last active December 19, 2015 22:59
binary file to ruby script file
# usage: ruby compress.rb icon.gif > myicon.rb
bit = 15
data = File.open(ARGV[0]){|f| f.read }
encoded_data = nil
offset = 0
bit_str = data.unpack("B*")[0]
(0x0000..0xffff).each do |i|