data = <<EOF ++++++++++++++++++++ ++++++++++++++++++++ +++++++OOOOOO+++++++ ++++++O++++++O++++++ +++++O++++++++O+++++ ++++++O++++++O++++++ +++++++OOOOOO+++++++ ++++++++++++++++++++ ++++++++++++++++++++ EOF LOOP = false board = data.split(/\n/) Y = board.size X = board[0].size def alive(board,y,x) return 0 if not LOOP and ( x<0 or x>=X or y<0 or y>=Y ) board[y%Y][x%X] == "O" ? 1 : 0 end def update(t0, t1) (0...Y).each do |i| (0...X).each do |j| life = alive(t0,i-1,j-1)+alive(t0,i-1,j)+alive(t0,i-1,j+1)+ alive(t0,i ,j-1)+ alive(t0,i ,j+1)+ alive(t0,i+1,j-1)+alive(t0,i+1,j)+alive(t0,i+1,j+1) t1[i][j] = case life when 2 then t0[i][j] when 3 then "O" else "+" end end end end while gets == "\n" puts board next_board = Array.new(Y){"+"*X} update(board, next_board) board = next_board end
コンソールから切れたプロセスの標準出力をつなげなおす
コンソールから切れたプロセスを標準出力につなげなおす - 絶品ゆどうふのタレ に、gdbを使って稼働中のプロセスの標準出力、標準エラー出力を繋ぎ直す話が載っていた。
.bash_profileからscreenを起動しているので、ここに書かれた事態に陥ることはまず無いのだが、記憶するためにシェルスクリプトにしておく。
#!/bin/bash usage(){ cat <<-EOF >&2 ; exit $1 Usage: 既存プロセスの標準出力と標準エラー出力を割り当て直す ${0##*/} PID [[-a] OUTFILE] EOF } error(){ echo "$@" >&2 ; exit 1 } pid="$1" test -z "$pid" && usage 0 user=$(ps h p "$pid" o user 2>/dev/null) || error "プロセスが見つからない" test "$USER" = root -o "$USER" = "$user" || error "プロセスオーナーが自分ではない" FLAG=0001 # O_WRONLY out="$2" case "$out" in "") out=/dev/$(ps h p $$ o tty) ;; -a) FLAG=02001 # O_WRONLY | O_APPEND out="$3" test -z "$out" && usage 1 ;; /*) ;; *) out=$PWD/$out ;; esac touch "$out" 2>/dev/null || error "出力先に書けない" gdb -p "$pid" <<EOF p close(1) p open("$out", $FLAG) p close(2) p open("$out", $FLAG) detach quit EOF
RD機にキーボードを付けたら快適
HDDレコーダーRD機に、USBキーボードがつなげられることは分かっていたのだが、「有線でキーボードつなぐのも面倒」と思っていました。
ふと、無線キーボードでもいけるのでは無いかと検索すると、物によってはいけそう。
パソコンの他に、PlayStation(R)3、Wii、WiiUでも使用可能です。
という説明のあるキーボードをAmazon Prime Dayに買ってみた。問題なくつながり、タイトル修正が快適。
リモコン代わりの操作もできる。
エレコム ワイヤレスキーボード メンブレン式 1000万回高耐久 ブラック 【PlayStation4/3対応】TK-FDM063TBK
- 出版社/メーカー: エレコム
- 発売日: 2013/10/12
- メディア: Personal Computers
- この商品を含むブログ (2件) を見る
Firefoxで何でも新しいタブで開く
Tab Mix Plusが使えなくなって以来、いろいろ不便。
サーチ窓: browser.search.openintab;true ブックマーク: browser.tabs.loadBookmarksInTabs;true アドレスバー: browser.urlbar.openintab;true
ついでにメモ。これをしないと、起動後にタブをクリックするまでページが読み込まれない。
browser.sessionstore.restore_on_demand;false
日本語マニュアルページの更新
Linuxの日本語マニュアルを最新化する。
1.https://linuxjm.osdn.jp/download.html から全体のアーカイブをダウンロードして解凍
2.make config して適当に答える。全部インストールすると指定する
⇒ installman.sh が出来る
3.インストール済みのマニュアルのみ更新するように、インストールコマンドを抽出
#!/bin/sh # manファイルは /usr/share/man に、日本語manファイルは /usr/share/man/ja にあり、gzipされている前提 find /usr/share/man -type f | awk ' FILENAME=="-"{w=$1;sub(/\.gz$/,"",w);man[w]=1;next} FNR==1{ORS="\n\n";print;next} { split($0,line,/\n/) split(line[4],word,/ /) if(word[3] in man) { print;next } sub(/\/ja\//,"/",word[3]) if(word[3] in man) { print } } ' - RS= installman.sh > my-installman.sh
4.更新実行。sudo sh my-installman.sh
5.whatisDB更新。sudo makewhatis
これを自動化すべきか。
いまさら知ったfor変数
for %%A in (A B C D E) do call :sub goto :EOF :sub for %%B in (1 2 3 4 5) do echo %%A-%%B
レキシカルには :sub は、for %%A のループの外だが、%%A が参照できる!
今まで、引数で渡してました。なんてことだ。
しかし、goto すると %%B だけでなく %%A も参照できなくなる。
まあ、これはしょうがない。
@echo off for %%A in (A B C D E) do call :sub goto :EOF :sub for %%B in (1 2 3 4 5) do ( echo %%A-%%B goto foo ) :foo echo %%A-%%B
Proxy経由でMastodonをインストールする
ファイアーウォールの中でProxyサーバー経由で、CentOS7にMastodonをインストールするときのメモ。
1.DockerデーモンのProxy設定
★/etc/systemd/system/docker.service.d/proxy.conf に
[Service] Environment="HTTP_PROXY=http://prox-hostname:port/" Environment="HTTPS_PROXY=http://prox-hostname:port/"
というファイルを作って、
systemctl daemon-reload
systemctl restart docker
で反映して、
docker info
で、Proxy情報が表示されることを確認する。
2.コンテナにに対してのProxy設定
Mastodonインストールディレクトリにある .env.production に、
http_proxy=http://prox-hostname:port https_proxy=http://prox-hostname:port
を追加する。
3.apk や npm や yarn に対してのProxy設定
Mastodonインストールディレクトリにある Dockerfile に、環境変数を追加してみる。
ENV https_proxy=http://prox-hostname:port ENV http_proxy=http://prox-hostname:port
しかし、これではapkのhttpsに対して効かない(何故??)ようなので、リポジトリのURLをhttpに変更する。
RUN echo "@edge https://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories \ ↓ RUN echo "@edge http://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories \
これで、apkはOK。
npmが環境変数を見ていないようなので、proxy設定を追加する。
&& npm config set proxy http://prox-hostname:port \ && npm config set https-proxy http://prox-hostname:port \
yarnはコマンドラインで指定する。
&& yarn --proxy http://prox-hostname:port --https-proxy http://prox-hostname:port --ignore-optional \