mamori017のブログ

二番煎じ感のある作業記録

AWS Summit Tokyo 2017に行った

www.awssummit.tokyo

今更なんだけど昨年に続きAWS Summitに行った。 今年は事前予約をしていたものの、 色々あって1週間前まで行けるか微妙だったので無事参加できたので良かった。

殴り書きを一月近く下書きしておいた上、 既に講演動画と資料が公開されているので感想だけ残しておく。

aws.amazon.com

雑感

セッションを聞いて感じたのは、AWS推していることもあるんだろうけどキーワードはサーバーレス。 どれも構成のコアになる部分にLambdaが出てくるのが印象的だった。 同時に、全体的にオンプレをとりあえずEC2主体に移行して運用するというフェーズから AWSへの最適化フェーズに移りつつあるあるのかなとも思った。

何となく考えていたこと

クラウドベンダーにロックインしないシステム設計の必要性があるのかという事について。 そんな事を考えたらマネージ型サービスなんて使えないという結論に至ると思うし、 いつか来る移行を考慮するくらいなら作り変えるんだろうけど。 それならズブズブに浸かってパフォーマンスを優先するほうがメリット大きいのかなとか。 現状個人運用しかしていないのでリスクは無いんだけど、 企業でクラウドファーストなシステムを運用している人達はそのあたりどう考えているのか気になっている。

うれしかったこと

一度は生で聞いてみたかった、テスト駆動開発で有名な和田さんのセッションを見ることができたのと、 よくブログを参考にさせて頂いているElasticの大谷さん(たぶんご本人だと思う)とお話できたのはうれしかった。

来年に向けて

AWS認定資格取得者専用ラウンジに入るべくソリューションアーキテクト認定に向けて勉強の密度を上げる。上げたい。

DataGridViewにチェックボックスを追加する

DataGridView上にデータベースから取得したデータとチェックボックスを表示させたい場合、 バインドするDataTableにチェックボックス列を追加することで表示できる。

Dim objDataTable As DataTable
Dim objCol As DataColumn

' チェックボックス列を作成
objColumn = New DataColumn("Checkbox",GetType(Boolean))

' DataTableにチェックボックス列を追加
objDataTable.Columns.Add(objColumn)

'データソースにDataTableをセット
objDataGridView.DataSource = objDataTable

' DataGridView再描画
objDataGridView.Refresh()

DataTableにチェックボックスのDataColumnを追加しただけだと、 DataTable上に存在するデータ列に追加されるかたちで配置される。

DataTableのイメージ
ColumnA ColumnB Checkbox
100 2017
101 2016

チェックボックス列の表示位置を変更したい場合はDataColumn.SetOrdinalを使用する。

' 引数は左端から0
objColumn.SetOrdinal(0)
SetOrdinalで列を変更した場合のDataTableのイメージ
Checkbox ColumnA ColumnB
100 2017
101 2016

セルを読み取り専用にする場合はDataGridViewのReadOnlyプロパティをTrueに変更する。 ただし、DataGridViewのReadOnlyプロパティを変更すると、DataGridView上のセルすべてに適用されるため、 チェックボックスの変更のみを有効にしたい場合は、 DataGridViewをRefreshする前に個別にプロパティを変更する。

' 左端列がチェックボックスの場合
For i As Integer = 1 To objDataGridView.ColumnCount - 1
    objDataGridView.Columns(i).ReadOnly = True
Next

Elasticsearchを5.4.0にアップデートしたら起動しなくなった

いつも通りUbuntuのパッケージを更新したらElasticsearchとKibanaが5.4.0にアップデートされてしまった。 更新してしまったものは仕方がないので起動確認したところ、Kibanaはブラウザで表示されるもののElasticsearchが起動しなくなった。

Elasticsearchを手動起動しても[ ok ] Starting elasticsearch (via systemctl): elasticsearch.service.と出力されるだけで、 service --status-allで状況を確認しても起動していない様子。 ログが出ていないか/var/log/elasticsearch/elasticesarch.logを見てみたところ、kuromojiプラグインに関連するエラーが出力されていた。

[2017-05-07T03:26:49,559][ERROR][o.e.b.Bootstrap          ] Exception
java.lang.IllegalArgumentException: plugin [analysis-kuromoji] is incompatible with version [5.4.0]; was designed for version [5.0.0-alpha5]
        at org.elasticsearch.plugins.PluginInfo.readFromProperties(PluginInfo.java:146) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Spawner.spawnNativePluginControllers(Spawner.java:86) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:167) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:360) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.Command.main(Command.java:88) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) [elasticsearch-5.4.0.jar:5.4.0]
[2017-05-07T03:26:49,564][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: plugin [analysis-kuromoji] is incompatible with version [5.4.0]; was designed fo                                                                    r version [5.0.0-alpha5]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:127) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.Command.main(Command.java:88) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.4.0.jar:5.4.0]
Caused by: java.lang.IllegalArgumentException: plugin [analysis-kuromoji] is incompatible with version [5.4.0]; was designed for version [5.0.0-alpha5]
        at org.elasticsearch.plugins.PluginInfo.readFromProperties(PluginInfo.java:146) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Spawner.spawnNativePluginControllers(Spawner.java:86) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:167) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:360) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123) ~[elasticsearch-5.4.0.jar:5.4.0]
        ... 6 more

インストールされているkuromojiプラグインは5.0.0-alpha5用で5.4.0には対応していない(と書かれている気がする)ようなので、 kuromojiプラグインを最新版に更新する。プラグインの上書きインストールをしようとするとエラーになるので削除後再インストールする。

# 削除
sudo bin/elasticsearch-plugin remove analysis-kuromoji

# インストール
sudo bin/elasticsearch-plugin install analysis-kuromoji

kuromojiプラグインを再インストール後はElasticsearchが起動するようになった。