write ahead log

ロールフォワード用

StringとIO.Streamを相互変換する

String => IO.Stream

'Encoding指定し, StringをStreamへ変換
Dim str as String = "test"
Dim encoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
Dim stream As New IO.MemoryStream(encoding.GetBytes(str))

IO.Stream => String

'Encoding指定し, StreamをStringへ変換
Dim encoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
Dim stream As New IO.MemoryStream(encoding.GetBytes("Test String"))
Dim str As String = encoding.GetString(stream.ToArray())

ComboBoxコントロールに表示値と値を一度に設定する

データのDictionaryを作って, DataSourceにBindingしてやると楽.

''' <summary>
''' コンボボックスに値を設定する
''' </summary>
''' <param name="combo">値を設定するコンボボックスコントロール</param>
Private Sub setComboBox(ByVal combo As ComboBox)
    '=========================================
    '初期化
    '=========================================
    'コンボボックスの表示アイテムをクリア
    combo.Items.Clear()
    '表示値としてDataSourceの'Key'を利用
    combo.DisplayMember = "Key"
    '値としてDataSourceの'Value'を利用
    combo.ValueMember = "Value"

    '=========================================
    '設定するデータソースの準備
    '=========================================
    Dim dic As New Dictionary(Of String, Integer)
    dic("りんご") = 1  '表示値:りんご => 値:1
    dic("みかん") = 2  '表示値:みかん => 値:2
    dic("すいか") = 3  '表示値:すいか => 値:3

    'ダミー行が欲しい場合(未選択時の空白とか)は以下の様に入れとくと便利
    dic("") = -1 '表示値:空白(未設定) => 値:-1

    '=========================================
    'データソースをコンボボックスへ設定
    '=========================================
    combo.DataSource = New BindingSource(dic, Nothing)
End Sub

これをロードイベントとかで呼び出してやる

''' <summary>
''' フォームロード時イベント
''' </summary>
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    'ComboBox1を設定
    setComboBox(ComboBox1)
End Sub

CentOS7を使って雑にNATルータを作る

手っ取り早くNATルータが欲しくなった時にNICが複数あるLinuxマシンがあればラッキーだ.

CentOS7でやったことがなかったのでメモっておく.

nmcliをちゃんと使うべきなんだろうけど, 設定ファイルを直接触った.

1. ネットワークの設定

NICそれぞれに対して設定する.

特にNATとか関係なく普通に設定.

内側のネットワークにはGATEWAYを設定しない.

内側(/etc/sysconfig/network-script/ifcfg-eth0)

TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=[なんかはいってる]
DEVICE=eth0
ONBOOT=yes
IPADDR=[内側のNATのIP]
PREFIX=24 # [内側ネットワークのマスク]

外側(/etc/sysconfig/network-script/ifcfg-eth1)

TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth1
UUID=[なんかはいってる]
DEVICE=eth1
ONBOOT=yes
IPADDR=[外側ネットワークのNATのIP]
GATEWAY=[外側のゲートウェイのIP]
PREFIX=24  # [外側ネットワークのマスク]

2. ネットワークエラーにzoneを設定

firewalldにはzoneという概念があるそうで, デフォルトでうまく機能していたので今回はそれを使った.

内側(/etc/sysconfig/network-script/ifcfg-eth0)

...  # 一番下に追記した
ZONE=trusted

外側(/etc/sysconfig/network-script/ifcfg-eth1)

...  # 一番下に追記した
ZONE=external

3. アダプタを再起動

# ifdown eth0
# ifdown eth1
# ifup eth0
# ifup eth1

4. 一応firewall-cmdで確認

# firewall-cmd --list-all-zones

trustedだとなんでも許すので, 必要に応じてinternal使うんだろうな.

gitのfirst commitをビルドする

興味わいたのでやってみたけど意外とうまくいかなかったのでメモ.

ソース自体はgithubにミラーがあって, ここから手に入る.

ubuntu trustyの64bit環境でやった.

そのまま素直にビルドしようとすると以下のエラーが出た.

vagrant@vagrant-ubuntu-trusty-64:~/repo/git$ make
gcc -g   -c -o update-cache.o update-cache.c
In file included from update-cache.c:1:0:
cache.h:13:25: fatal error: openssl/sha.h: No such file or directory
 #include <openssl/sha.h>
                         ^
compilation terminated.
make: *** [update-cache.o] Error 1

libssl-devが入ってなくて怒られているっぽいので入れる.

vagrant@vagrant-ubuntu-trusty-64:~/repo/git$ sudo apt-get install libssl-dev

それでも怒られたのでMakefileを編集.

-lcryptoが無いとopenssl関連のビルドが通らず, -lzが無いとzlib関連が通らなかった.

LIBS= -lssl -lcrypto -lz

これでmakeすると(warnningがいっぱい出るが)ビルドできた.

minttyのロケールを設定する

msys2を入れてフォントや透過度を変えて満足して使っていたが, svnをコマンドで使うとロケールがおかしいと怒られた.

$ svn update
svn: warning: cannot set LC_CTYPE locale
svn: warning: environment variable LANG is ja
svn: warning: please check that your locale name is correct

あー, そういや気にした事なかったわー.

と思いつつ設定した.

LANGの設定

まず, ~/.bash_profileへ以下を追記.

LANG=ja_JP.utf8

minttyの設定

~/.minttyrcへLocaleとCharset設定を追加する.

BoldAsFont=no
Transparency=high
CursorType=block
Font=Ricty Diminished Discord
FontHeight=11
Locale=ja_JP     #ここ
Charset=UTF-8    #ここ

これでminttyを再起動すればいい感じに動いた.

両方合わせる必要があるのがポイントっぽい.

SVNで証明書を使う

今更SVNを使う事になったので.

証明書ファイルのパスは絶対パスじゃないと動作しなかった. typoなのか, msys2環境だからなのかはよーわからん.

~/.subversion/serversを以下の通り編集.

ssl-client-cert-file = [証明書ファイルのパス]
ssl-client-cert-password = [証明書ファイルのパスワード]

ubuntuでタイムゾーンの変更

ちょっと古いけど, バージョンは以下でやった.

vagrant@vagrant-ubuntu-trusty-64:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"

現在のタイムゾーンを確認する.

$ timedatectl

設定できるタイムゾーンを調べる.

$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
...

設定.何となくニューヨークへ.

$ sudo timedatectl set-timezone America/New_York