2017年6月28日水曜日

EXCELで LandXML 読み込み

CTC さんの GEORAMA で地質モデルを作ると、各地層サーフェスが LandXML 形式で geotmp フォルダに書き出されます。

分布範囲のみではあるものの、そこから座標を取り出して変換すれば、他のソフトに楽に持っていけるのになあ、と以前より考えていました。数年前に調べた限りでは、そのような変換ソフトがなく放置していたのですが、「TXT データを成形するだけなのですぐ書けるでしょう」「XML の理解に繋がるでしょう」などと思い自分で組むことに。幸い、EXCEL VBA を始め、各種言語で XML を取り扱う情報は Web 上にあふれていました。便利な時代になったものです。

作業は順調に進んでいたのですが、MSXML パーサーのバージョンに引っ掛かりました。
Win10 + EXCEL 2013 VBA で 6.0 を参照していたのですが、Web 上では古いVer.を参照したコードが多いようで、それらをコピペして動かしてもエラーを吐きます。それが Ver. 違いということに気づくまで、少し時間を要しました。(特にココ→MSXML2.DOMDocument60
他にも、名前空間(xmlns) に引っ掛かりました。ええ、まったくの初心者です。

XML では情報がタグ付けされているため、欲しい箇所へのアクセスが容易です。そのため、最終的には思ったよりもすっきりしたコードになりました。拡張もアクセスも楽、コードも簡素、なかなか良い仕様・特徴だと思います。XML が広まった理由、少し理解できました。

結果的には理解するのに2晩かかったのですが、良い経験になったと思います。

2017年6月25日日曜日

R apply の問題

Rでは、for 文の代わりに apply 群を使われる方が多いようです。

確かに、apply 群を使って書く方が、簡素で読み易いと思います。また、for 文より速くなる場合があるようで、web上ではしきりにお勧めされていました。(apply の中で for が使用されていましたので、劇的に、ということはないと思いますが)。

念のため、apply や lapply を使用して書き直し。
もともと、dependency を算出する関数が、ベクトルを扱えなかったこと、並列化をもくろんでいたことからfor を使っていました。今回は、関数の引数にリストから値を代入する関数を作り、それを apply や lapply で呼んでみました。

で、計算!

が、ダメ。

夜中に計算をかけて、朝に「終わったかな?」と確認しようとすると、動きが異常に遅い。SSDにスワップファイルを作っているようです。リソースモニターを見ると、物理メモリ24GBを使い切っていました。for や foreachであれば、ループのたびに変数を入れ替えながら計算が進むため、それほど大きなメモリは必要としません。が、apply 群では大きなマトリックスをそのまま保持して計算が進んでいくため、いくつかの計算ステップが進めば簡単にメモリ不足に陥るのでしょう。
計算が進むたびに途中経過をディスクに書き出せばメモリを解放できますが、遅くなります。ま、扱うデータの容量を考えながら、方法を選択しないといけないのでしょうね。ビッグデータを扱う場合のパッケージもあるようですので、必要になった段階で検討してみましょう。

いずれにしても、今回は並列化のほうが速いという結果になりました。

コア数   計算時間 メモリ
for(Single) 11.5h  300MB
foreach(4)  3.7h  1.5GB
foreach(6)  3.8h  1.8GB
apply(Single)6hで中止 20GB以上

これで進めてみましょう。

2017年6月23日金曜日

R foreach で並列化

R で並列化・高速化を扱う場合、以下の2通りがあるようです。

1. 関数をC/C++ に移植。さらにCUDAを利用
2. foreach による並列化

頻繁に使うツールであれば前者でしょうが、今回はそこまでの頻度・意欲がありません。で、2を選択。

最初はビルド時の自動並列化のようなオプションがあるのか?と思い探してみましたが、見当たりません。代わりに見つけたのが 2 の foreach 。
R では、for を foreach に変更するだけで並列化してくれるようです。容易なためか、メジャーな手法のようですね。

先日のコードに対し foreach を使って並列化。
が、今度は排他制御に関するコマンドが見つかりません。複数のスレッドから同一変数への書き込みを避け、ファイルに追記するよう変更したのですが、タイミングが重なった場合にデータが飛んでしまいます。このあたりを制御するコマンドが見当たりません。また、foreach 内の break も効かないようです。

そのままではうまく動いてくれなかったので、部分的にコードを書き直し。

っで、計算!

今度はうまくいきまた。

1 コアで 11.5 時間だったのが、4 コアで 3.7 時間まで短縮できました。
6 コアでも計算してみましたが、頭打ち。メモリへのアクセスが集中しますので、遅くなったのでしょうか。
ま、それほど早い計算時間でもないのですが、このあたりが落としどころでしょうね。これ以上は 1 の方法、R から C へ移植しするしかないでしょう(実務なら、迷わずそちらを選びますが)。

扱いたいデータがもっと大きなサイズですので、3.7時間という結果は大きな制約です。データの前処理を考えないとだめでしょうね。なんだかベクトル化の方が早いかも?と思えてきました。

で、もう一度チャレンジ。

今度はクリアーできましたが、新たに問題発生。


続きは後日。

2017年6月21日水曜日

R の for 文

以下の文献に掲載されているアルゴリズムの実装に取り組んでいました。

榊原ほか「 ラフ集合を用いたデータマイニングによるがけ崩れ発生要因の抽出に関する研究」 土木学会論文集 No. 658/VI-48, p. 221-229, 2000. 9
(1) 整合度の要求水準を設定する.
(2) 要因数が1っの場合の整合度を求め, 要求水準と比較する. 少なくとも1つの要因において整合度が要求水準上回った場合, 最小必要要因数は1となる.
(3) すべての要因について, 整合度が要求水準を下回っていた場合, 2つの要因の組み合わせに関する整合度を求め, 要求水準と比較する.
(4) 以下順次要因数を増加させ, 整合度が要求水準を初めて上回った時点における要因数を最小必要要因数とする.

要は、順次総当たりでラフ集合の下近似を計算し、dependency を求め、閾値を上回れば終了といった内容です。
いくつかの会社や大学が特許を取られているようですので、実務で使わないほうがよさそうです。https://www7.j-platpat.inpit.go.jp/tkk/tokujitsu/tkkt/TKKT_GM301_Detailed.action
ま、研究では近年の深層崩壊でも使われていますので、研究やデータマイニングツールとして使えそうです。

フローは単純ですので、単コアでの実装は容易です。dependency(「整合度」と訳されている)の計算部分も、R のパッケージに関数として組まれていますので、特に悩む必要はありません。一晩で(といってもかなり遅くまでかかりましたが)実装は終わりました。

で、計算!

遅い!
for で 118万回ループさせた dependency の計算でしたが、完走するまで11.5時間かかりました。

R の for 文 は遅くなることで有名なようでしたが、本当に遅かった。
dependency を算出する関数がベクトルを受け付けてくれませんので、仕方ありません。ま、for ループを使っておけば、次の並列化が楽になるだろうという目論見もあったわけですが。

やはり並列化・高速化が必要でしょう。
続く。

**************************************
20170623追記

dependency を算出する関数の引数にリストから値を代入する関数を作り、それを apply  lapply で呼んでやることはできました。が、新たな問題も発生。こちらに関しては後日。


2017年6月18日日曜日

Rough Sets with R

R でラフ集合を扱っていました。

ラフ集合は初めてです。統計かな?と思っていましたが、集合論でしょうか。難しい理論や数式はなく、数学というよりは国語の問題を扱っている感覚でした。

R でラフ集合を扱えるパッケージは以下の2種類のようです。
・RoughSetKnowledgeReduction
・RoughSets

マニュアルの薄い前者のほうから試用してみました。
が、計算遅すぎ。数千のテストデータのルール抽出計算が1日で終わりません。シングルコアで頑張っていたようですが、2日目にオーバーフローを吐き出し止まっていました。

次に、後者を試用。
こちらはリファレンスを追いながら、なんとか1日で上近似・下近似・極小条件を出すところまで到達。こちらもシングルコアでしたが、C++ を利用しているのか計算が早い。同じ数千のデータでも、読み込み~計算~結果の書き出しまで20秒ぐらいでした(ルール抽出は行っていませんので負荷が異なりますが)。こちらをメインに触っていきましょう。

R も 並列化、GPU利用などによる高速化に着手されているようですが、全体的にはこれからのようです。Web・Twitter などのビッグデータを収集・分析するようなことも始められていますので、今後、適用は進むでしょう。

RoughSet のいくつかの計算は、並列化・高速化の組み込みに関して有利だと思います。今後に期待しましょう。


2017年6月13日火曜日

安全衛生教育

他チームから、ほぼ新人くんがやってきました。

「作業内容を変更したとき」に該当しますので、安全衛生教育を実施し、現場に出る際の心構えと要点を学んでもらいました。

建設業の場合、職長や安全衛生責任者の選任も絡んできます。法令則のみでなく通達の内容に沿って教育を実施する必要があるのですが、関連個所をその順に漏れなく追う必要があります。単純ですが、面倒。個人レベルで見逃しを出さない管理方法はないものでしょうか?(今年の能力向上に関する通達は、危なく見逃しかけていました。)

先日、図書館で以下の図書を見かけました。関連項目毎に法・令・則・通達が整理・記載されています。出版が3年前で少し古いのですが、このような形式であれば管理しやすいですね。

笠原秀樹「建設業の安全衛生法令用語検索エンジン 用語の意味、適用条文、公示、告示、通達がわかる!」日刊建設通信新聞社

このような整理された情報の閲覧を Web 上で実施できればよいと思います。更新はプッシュ通知で。
労働安全衛生コンサルタントの皆さんが作ってくれないでしょうか?


2017年6月12日月曜日

VPN-RD 接続のバッチ処理

Windows10になってから1手増えていたVPN接続。
毎回、VPN接続→リモートデスクトップ接続・切断→VPN切断をやっておりますと、PCに無駄な作業をさせられているように感じてきました。

で、バッチ化。

①メモ帳で以下を記載し.batで保存
rasdial "接続名" ID PASS
mstsc C:\Users\ユーザー名\Documents\rdpファイル
rasdial /DISCONNECT

※接続設定を済ませている状態が前提。その設定内容を黄文字の箇所に指定します。
※ここまででもOKですが、以下でスタートメニューに登録すれば、より便利。


②.batのショートカットを作り、そのリンク先にcmd.exeのありかを挿入。
C:\Windows\System32\cmd.exe /C パス付きで①.batファイル

※ショートカットを右クリック-プロパティでリンク先が出てきます。
※cmd.exeのショートカットに、.batのありかを指定する形になります。

③右クリックでスタートにピン止め


ついでに、1行目だけのVPN接続、3行目だけの切断のショートカットも作成し、登録しておきました。
ちょっとしたことですが、かなり便利になりました。

******************************
20170625追記
VAIO Win10 Pro ではUWP版のリモートデスクトップを使っていたのですが、接続がすぐに途切れることが多く困っていました。今回、YOGA Win10 Home では上記の通りデスクトップ版に切り替えています。今のところ、安定して接続できています。


2017年6月11日日曜日

PC等の手入れ

週末、時間があったのでPC等の手入れを行いました。

1台目
Windows7 (自作) → Win10pro にアップグレード→動作不良のため Win7 にダウングレード→その後、バックアップに失敗 0x81000031→修復を試みるも以下のシナリオ1・2共に失敗
https://support.microsoft.com/ja-jp/help/975692/error-code-0x81000031-occurs-when-you-try-to-back-up-files-by-using-the-backup-and-restore-wizard-on-a-windows-7-based-computerA
→ライブラリ内のファイルを削除してもダメ
→ライブラリを外してバックアップすれば開始しました。(cドライブはチェックを入れたままです)

進展するどころか、後退した感じですね。
Win10に上げて半日ほどは順調に動いていたのですが、デスクトップの背景を変えようとしてから異常に重くなりました。原因を突き止めようとしましたが時間切れ。セーフモードではうまく走ってましたので基本的な構成が問題ではなさそうです。ウイルスバスターやCOMODOあたりを入れなおす必要がありそうです。次はクリーンインストールしてみましょう。
バックアップについては、同じ流れで同じ問題を抱えていらっしゃる方の解決策が参考になりました。このライブラリ、扱いにくいのですが何とかならないでしょうか?

2台目
Windows10Home(YOGA 710)にウイルスバスターとSKYSEAをインストール→しばらくしてフリーズ、再起動できずボタン長押しで電源を切る→動きが重くどうにもならず初期状態に戻してから再設定。

どうやら後者がうまく入らなかったようです。以前、8.1→10にした際にはウイルスバスターとdefender 間で不具合がありましたが、それは治まったようです。買ったばかりでしたので、ま、良しとしましょう。
ついでにVPN周りのバッチ化も整備しました(こちらは後日)。

3台目
Win7(メーカーBTO)の起動時に「Windowsサービスに接続出来ませんでした。」→SENサービスの再起動で修正
参考:https://answers.microsoft.com/ja-jp/windows/forum/windows_vista-performance/パソコンを/9ef42f8a-559f-4aec-8773-349276d26533

対処療法です。
最近、起動時に不規則に出てくるようになり、気になっていました。確認してみると、サービス自体は起動していましたので、何が問題だったのかわかりません(起動時のタイミングと言ってしまえばそれまでですが)。ま、サービスの再起動のみで対処できますので、大きな問題ではありません。が、完全解決には至っていませんので、もう少し情報が欲しいところです。

4台目
iPhone6(キャリア)からiPhone5(MVNO)乗り換え
→6をitunesでバックアップ(暗号化なし)→5で復元時にPASSを聞かれ断念→icloud経由で連絡先を移行、アプリは入れ直し。

Wi-Fi 専用機としていた iPhone5 ですが、UQ mobile の SIM のみ調達し、復活させました。速度は若干落ちたような気がしますが、気にならない程度です。
iTunes は認証時以降使用していなかったのですが、前回、パスをかけていたのかもしれません。20個程度、思いつくパスを入れてみましたが、ダメでした。こうなると、お手上げです。
残念だったのは、よく使っているアプリが App Store から消えている点。仕様変更によりPC からもインストールできなくなっていましたので、6 からの完全移行はできませんでした。


全体的に、時間をかけた割に進展がなかったですね。
ま、マイナスに向かうところが「現状維持」になったと納得しておきましょう。

2017年6月8日木曜日

切れたアンカー

アンカーが切れ、ヘッドが対岸まで飛んで行った現場に行きました。

私が見たのは休み明けで、既に応急対策中でした。
一通りの作業を終え、設計者と話をしていて気付きました。そういえば、維持管理のマニュアル・指針はあるものの、切れた後の危機管理マニュアルは見たことがありません。ま、応急対策手法はある程度限られていますので、レアケースのために備えることを後回しにされているのかもしれません。

ただ、土木的な対応は過去の類似事例に依ってなされるのですが、調査視点での対応は欠けがちです。行った時には抜いたアンカーの穴にモルタルを詰め終えられており、孔内カメラを入れることができませんでした。孔内カメラを入れると、切れた原因は腐食なのか変位なのか、後者ならどの深度で変位が生じているのか、などを確認できます。これが確認できれば、すべり面や崩壊面の決定根拠に使えます。調べないという選択はもったいないですし、今後の為にもルーチンワーク化してもらいたいところです。

これからの維持管理時代、長寿命化とともに危機管理も重要になってくるでしょう。ぜひ、調査・設計の視点も含めたマニュアルを検討し、備えていただきたい所です。


2017年6月6日火曜日

Groundwater age

4月から時間を見て取り組んでいた地下水の年代推定ですが、一定の成果を得ました。

面白い知見もあったので発表を薦められましたが、利害関係上難しいでしょう。ま、私の技術の肥やしにはなりました。

今回は若い地下水を題材に、CFCs と SF6 をトレーサーとして利用しました。この利用方法は USGS や IAEA より詳細に解説されています。特に後者では年代の推定に使うパラメータや精度にかかわる事項など、基礎から応用事例まで充実した内容が紹介されています。これまで幾つか運命的な図書に出会ってきましたが、これもその1冊に加わることでしょう。

IAEA 「USE OF CHLOROFLUOROCARBONS IN HYDROLOGY A Guidebook」

水質は岩石との反応で流下とともに変化しますが、人工物質は保存性がよくトレーサーとして扱いやすいと思います(勿論、保存性の悪いものもあるようです)。それらを多点で測定しておけば、移流分散解析による再現で、時間・空間ともにより精度の高いモデルが構築できるでしょう。数十年前から実施しているトレーサー試験を再現していることと同じですからね。
それを踏まえたうえで、水質から岩石等の組成・層厚を逆解析できるかもしれません。実際は多くの問題が出てくると思いますが、理屈はあっているでしょう。

地下水の問題に関しては、まだまだ分からないことだらけです。が、それを解くのに「時間の検証」という効果的かつ強力なツールを手に入れたように考えます。
これから、もっと手を付けていきたい分野ですね。


2017年6月5日月曜日

Lenovo YOGA 710

VAIO Duo 11 の画面の気泡・色むらが激しくなり、微妙に液漏れも発生し始めたため、修理に出しました。
https://phreeqc.blogspot.jp/2013/08/vaio-duo-11-svd1122ajb.html

「修理不能、買取りさせてください」との返答でした。

この機種、気泡が入る事例を多くの方がネット上に報告されています。秋葉ではそれを前提に投げ売りされていた時期もあったようですので、所謂「SONYタイマー」付きの機種だったのでしょう。4年弱でした。短い。SONYのPC事業終焉を飾るこの機種、個人的にはとても気に入っていたのですが、残念です。

仕方なく、次のPCを購入しました。

Lenovo YOGA 710 - 80V6 8万6千円
・ Core i5-7Y54 1.2GHz
・11.6" 1920x1080 タッチパネル
・DDR3 8GB
・SSD 256GB

小さくて、軽い!
しかも、10時間以上は稼働しそう。これはありがたい。


据え置きメインにもう一台買いました。
こちらは負荷のかかる作業を行いませんので、それ相応のスペックです。

Lenovo ideapad 310 80SM 5万円
・Core i3 6006U 2.0GHz
・15.6" 1920x1080
・DDR4 8GB
・HDD 500GB
・DVD

Lenovo 好きではないのですが、条件と価格で選ぶとこのようになりました。
耐久性に一抹の不安が残りますが、ま、大事に使いましょう。