suzuzusu日記

(´・ω・`)

オブジェクト指向を学ぶ前にイデア論を学ぼう!(?)

イデア論とオブジェクト指向ってすごい似てるなぁと思い色々調べてみると同じようなことを考えている記事がたくさん出てきた。 考えることは皆同じなんだなぁ。

オブジェクト指向の世界(10):プラトン編−イデア論とクラス/インスタンス - ITmedia エンタープライズ

aragger.blogspot.jp

aidiary.hatenablog.com

なぜここまで似ているのか少し考えてみるとプラトンという人間が世界を説明するイデア論という理論を提唱したようにプログラミングというある意味で世界を記述するものの中でアラン・ケイという人間がオブジェクト指向という考えを提唱するのは必然的なものなのではなかったのではないか。 つまり両者の本質は同じであるという説明で自己解決した次第です。

プログラミングパラダイムを学ぶ上で実は哲学を学ぶことは非常に有用ではないかという一つの考えが浮かんだ。 まあ日本では大学が文系と理系で区別されているという背景があり多方面に学ぶことがなかなか難しいのと本当に学んだところで直接結びつくとは限らないと思うが。

sslhを用いてsshとOpenVPNを443portで待ち受ける

sslh でport443 を有効活用して、sshもhttpsも同時に待ち受けする。

この記事を見てsslhはopenvpnも対応しているらしいので試してみることにした。

環境はHyper-V上のdebian 8.6 ip:192.168.10.2

OpenVPN設定

sudo apt-get install openvpn

cd /usr/share/easy-rsa/

# 各証明書生成
. ./vars
./clean-all
./build-ca
./build-key-server server
./build-key client
./build-dh

# サーバに必要な証明書を配置する
cp keys/ca.crt /etc/openvpn/
cp keys/server.crt /etc/openvpn/
cp keys/server.key /etc/openvpn/
cp keys/dh2048.pem /etc/openvpn/

# /etc/share/easy-rsa/keys/ 
# 上記のディレクトリにクライアントに必要な各証明書ca.crt client.crt client.keyがあるのでクライアントに安全な方法で移す

openvpnサーバの設定ファイル(/etc/openvpn/server.conf)を以下に記述する。

port 1194
proto tcp
dev tun

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3

OpenVPN起動

sudo systemctl start openvpn.service

sslh設定

sudo apt-get install sslh

sslhの設定ファイル(/etc/default/sslh)を以下に記述する。

RUN=yes

DAEMON=/usr/sbin/sslh

DAEMON_OPTS="--user sslh --listen 192.168.10.2:443 --ssh 127.0.0.1:22 --openvpn 127.0.0.1:1194 --pidfile /var/run/sslh/sslh.pid"

sslh起動

sudo systemctl start sslh.service

まとめ

クライアント側でssh, openvpnを試したが両方無事接続することを確認した。 vpnを使用する際のsslhのレイテンシがどの程度なのかまだ検討してないので分からないが概ね問題無いのではないのかと思う。 443portは本当に貴重なので今後もsslhは活用していきたいと思う。

参考

takuya-1st.hatenablog.jp

How To | OpenVPN.JP

Reveal.jsのブラウザバックの挙動について

Reveal.jsは非常に好きなPresentation Frameworkなのだがブラウザバックした時に前のスライドページに戻る挙動があまり好きではなかった。 できれば前のページに戻る挙動にしたい。調べてみたところ非常に簡単にできたので忘備録として書く。

Reveal.initialize({
    // history : true, を以下に書き換える
    history: false,
});

PowerShellでexeからicon抽出

サクッと.NETを使うときはPowerShellが非常に便利なのでexeファイルからiconを抽出するスクリプトを書いてみる

$icon = [System.Drawing.Icon]::ExtractAssociatedIcon("C:\Program Files\hoge\fuga.exe")
$icon.ToBitmap().Save((Join-Path $env:UserProfile\Desktop "icon.bmp"))

# 画像のフォーマットを指定したいときは以下のようにする
# $icon.ToBitmap().Save((Join-Path $env:UserProfile\Desktop "icon.png"), [System.Drawing.Imaging.ImageFormat]::Png)

$icon.Dispose() # リソースの開放

参考

Icon.ExtractAssociatedIcon メソッド (String) (System.Drawing)

Raspberry Piの画面をMonsterX U3.0Rでキャプチャ

Raspberry Piの画面をMonsterX U3.0Rでキャプチャしようとした時に少しハマったので忘備録として書く

使用するもの

どうやらHDMIの出力の設定をキャプチャに合わせないといけなかったらしく/boot/config.txtを以下のように書き換える

#hdmi_group=1
#hdmi_mode=1

# コメントを外して以下のようにする

hdmi_group=2
hdmi_mode=82

参考

https://www.raspberrypi.org/documentation/configuration/config-txt.md

ちなみにUSBがおかしいのではないかと疑いUSB 増設ボード買ってしまったのでもったいないことをしてしまい少し悲しい