このツイートを見て、QGISのCommand Bar Pluginの存在を知りました。
https://twitter.com/madmanwoo/status/607845208928043008
プラグインをインストールするには、QGISの「プラグイン」ウィンドウ(メニューから「プラグイン」⇒「プラグインの管理とインストール」を選択すると開きます)で、"Command Bar"を選択して「プラグインをインストール」ボタンをクリックします。
インストールすると、QGISの画面下部に小さなコマンドバーが表示されるようになります。
Ctrl+;(セミコロン)でコマンドの一覧を表示できます。コマンドの数は、ざっと見た限り25個くらいと少ないです。指定のレイヤーの属性テーブルを表示したり、アクティブレイヤーにポイントフィーチャーを追加したりできるようです。
自分でコマンドを作れるようで、既存のコマンドを活用するというよりは、便利なコマンドを自分で作って使えるところにこのプラグインの価値はあるのかなと思います。
2015年6月10日水曜日
2015年6月9日火曜日
C#のFileSystemWatcherでファイル監視が効かなくなることがある話
C#で特定のファイルに対する変更を監視するのに、System.IO.FileSystemWatcherを使うことがあるかと思いますが、そのときに気を付けるべき点がありそうです。
以下は、C:\work\test.txtというファイルの削除を監視するサンプルコードです。
(Visual Studio Express 2013 for DesktopとNET Framework 4.5で検証しています)
このような状況でもきちんと機能させるには、WaitForChanged()を使うのではなく、イベントハンドラーを使って非同期処理を行う必要があります。
以下は、C:\work\test.txtというファイルの削除を監視するサンプルコードです。
(Visual Studio Express 2013 for DesktopとNET Framework 4.5で検証しています)
FileSystemWatcher watcherこのプログラムは、実行前に対象のファイルが存在し、その後変更が加えられない場合には正しく機能しますが、あとからこのファイルを作成したり、このファイルを同名のファイルで上書きしてしまうと、ファイルの削除を検知できなくなります。
= newFileSystemWatcher(@"C:\work", @"test.txt");
watcher.WaitForChanged(WatcherChangeTypes.Deleted);
System.Console.WriteLine("File has been deleted");
このような状況でもきちんと機能させるには、WaitForChanged()を使うのではなく、イベントハンドラーを使って非同期処理を行う必要があります。
FileSystemWatcher watcher =
new FileSystemWatcher(@"C:\work", @"test.txt");
watcher.Deleted += (sender, eventArgs) =>
{
System.Console.WriteLine("File has been deleted.");
};
watcher.EnableRaisingEvents = true;
2015年6月8日月曜日
runnableでプログラミングの勉強がはかどりそうな件
何か新しいプログラム言語を勉強し始めるとき、まず面倒なのが、実行環境をダウンロードしてインストールしなければならない点だと思います。特にWindowsユーザーだと、pythonとか標準で入ってるわけではないですし、C/C++もVisual Studio Expressなどをダウンロードしてインストールするのは結構時間がかかるものです。
そういうときに便利そうなのが、runnableというサイトです。これは、オンラインでプログラムを書いて、そのプログラムをオンラインで実行してくれるサービスです。
使い方は簡単で、runnableのトップページから言語を選択すると、その言語のプロジェクトが作成され、ソースコードの編集画面に切り替わります。
ここでソースコードを編集し、"Save and Run"を実行すると、ビルドされ、実行結果が別ウィンドウで表示されます。
ユーザー登録すると、作業中のプロジェクトを保存できたり、プロジェクトを他のユーザーに公開できるようになるみたいです。
対応している言語が多く、JavaやPythonはもちろん、djangoとかRuby on Railsなんてのもありますし(さすがにデータベースは自前で用意するんでしょうかね)、bashなんてのもあります。今までシェル芸の勉強はAWSでLinuxの仮想マシンを立ててsshでログインして使っていたのですが、runnableを使えば簡単に実行環境を手に入れられるので、勉強がはかどりそうです。
そういうときに便利そうなのが、runnableというサイトです。これは、オンラインでプログラムを書いて、そのプログラムをオンラインで実行してくれるサービスです。
![]() |
runnableのトップ |
![]() |
Javaプロジェクト |
ここでソースコードを編集し、"Save and Run"を実行すると、ビルドされ、実行結果が別ウィンドウで表示されます。
![]() |
Javaプログラムの実行結果 |
ユーザー登録すると、作業中のプロジェクトを保存できたり、プロジェクトを他のユーザーに公開できるようになるみたいです。
対応している言語が多く、JavaやPythonはもちろん、djangoとかRuby on Railsなんてのもありますし(さすがにデータベースは自前で用意するんでしょうかね)、bashなんてのもあります。今までシェル芸の勉強はAWSでLinuxの仮想マシンを立ててsshでログインして使っていたのですが、runnableを使えば簡単に実行環境を手に入れられるので、勉強がはかどりそうです。
2015年5月31日日曜日
GeoGigでGISデータのバージョン管理をする (2)データ更新
今回はデータを更新してみます。
前回、3つのフィーチャーを持つshapefileを登録しました。
まずは、前回同様importします。
statusコマンドで、リポジトリ内のデータに対してどのような変更がかかるのかがわかります。
さらに、diffコマンドで、より具体的な差分がわかるようです。
addとcommitを使って、フィーチャーの追加をコミットします。
logコマンドで、リポジトリに対するコミットのログが見られるようです。
logコマンドに-pオプションを指定することで、特定のフィーチャーに対する変更のみを表示することができるようです。
次に、既存のジオメトリと属性値を変更してみます。park/1は、ポリゴンの頂点を一つ動かして、さらにownerの属性値を変更し、park/3は、属性値のみ変更しました(チュートリアルにはこのようなデータはないので、自分で加工して作りました)。
これをimportで取り込みます。
差分をdiffで確認します(parks/3のperimeterとareaの属性値が勝手に変わってるのが気になります…)。
blameコマンドでフィーチャーを確認すると、the_geom(ジオメトリ)とowner属性値の変更日時が新しくなっているのがわかります。
前回、3つのフィーチャーを持つshapefileを登録しました。
C:\work\geogig>geogig ls parks
parks/
3
2
1
フィーチャーの追加
新しいshapefileでデータを更新します。更新するshapefileは、以前登録したものにフィーチャーを1個追加したものです。まずは、前回同様importします。
C:\work\geogig>geogig shp import c:\work\tutorial_data\snapshot2\parks.shp
Importing from shapefile c:\work\tutorial_data\snapshot2\parks.shp
Importing parks (1/1)...
25%
4 distinct features inserted in 100.8 ms
Building final tree...
4 features tree built in 6.239 ms
100%
c:\work\tutorial_data\snapshot2\parks.shp imported successfully.
statusコマンドで、リポジトリ内のデータに対してどのような変更がかかるのかがわかります。
C:\work\geogig>geogig statusここで、parks/4というフィーチャーが追加されることがわかります。
# On branch master
# Changes not staged for commit:
# (use "geogig add <path/to/fid>..." to update what will be committed
# (use "geogig checkout -- <path/to/fid>..." to discard changes in working dir
ectory
#
# modified parks
# added parks/4
# 2 total.
さらに、diffコマンドで、より具体的な差分がわかるようです。
C:\work\geogig>geogig diff
000000... c202e4... 000000... 628763... A parks/4
the_geom MULTIPOLYGON (((-122.8673652884942 42.331042804943124, -122.86738814251632 42.32974514244516, <途中省略> -122.8673652884942 42.331042804943124)))
owner City Of Medford
agency City Of Medford
name Hawthorne Park / Pool
usage Public
parktype Park
area 54662.815673828125
perimeter 1020.6679216977345
addとcommitを使って、フィーチャーの追加をコミットします。
C:\work\geogig>geogig add
Counting unstaged elements...2
Staging changes...
100%
1 features and 1 trees staged for commit
0 features and 0 trees not staged for commit
C:\work\geogig>geogig commit -m "first modification"
100%
[2819d13a8419a1186a44f71f46cbb89a37806d2d] first modification
Committed, counting objects...1 features added, 0 changed, 0 deleted.
logコマンドで、リポジトリに対するコミットのログが見られるようです。
C:\work\geogig>geogig log
Commit: 2819d13a8419a1186a44f71f46cbb89a37806d2d
Author: testuser <testuser@test.com>
Date: (4 minutes ago) 2015-05-31 01:57:08 +0900
Subject: first modification
Commit: f157afde4e55026608733c1d50ab4935db33fb17
Author: testuser <testuser@test.com>
Date: (9 hours ago) 2015-05-30 16:04:54 +0900
Subject: first version
logコマンドに-pオプションを指定することで、特定のフィーチャーに対する変更のみを表示することができるようです。
C:\work\geogig>geogig log -p parks/4diffコマンドで2つのコミットIDを指定することで、コミット時点どうしの比較もできます。
Commit: 2819d13a8419a1186a44f71f46cbb89a37806d2d
Author: testuser <testuser@test.com>
Date: (7 minutes ago) 2015-05-31 01:57:08 +0900
Subject: first modification
C:\work\geogig>geogig diff f157afde4e55026608733c1d50ab4935db33fb17 2819d13a8419a1186a44f71f46cbb89a37806d2d
000000... c202e4... 000000... 628763... A parks/4
<以下省略>
フィーチャーの変更
次に、既存のジオメトリと属性値を変更してみます。park/1は、ポリゴンの頂点を一つ動かして、さらにownerの属性値を変更し、park/3は、属性値のみ変更しました(チュートリアルにはこのようなデータはないので、自分で加工して作りました)。
これをimportで取り込みます。
C:\work\geogig>geogig shp import c:\work\tutorial_data\snapshot2a\parks.shp
Importing from shapefile c:\work\tutorial_data\snapshot2a\parks.shp
Importing parks (1/1)...
25%
3 distinct features inserted in 261.7 ms
Building final tree...
4 features tree built in 5.612 ms
100%
c:\work\tutorial_data\snapshot2a\parks.shp imported successfully.
差分をdiffで確認します(parks/3のperimeterとareaの属性値が勝手に変わってるのが気になります…)。
C:\work\geogig>geogig diff最後にaddとcommitで変更をコミットします。
c202e4... c202e4... af4c5f... 9a6b21... M parks/3
owner: Medford School District -> test
perimeter: 572.1249849079909 -> 572.124984907991
area: 17345.00048828125 -> 17345.0004882812
c202e4... c202e4... 75a0cb... d3e4f5... M parks/1
owner: Jackson County -> test
the_geom: MultiPolygon -122.87290806613127,42.335410926692404 -122.87265408473853,42.335482522206775 -122.87253735255466,42.33526317433605 [-122.87279895095871,42.3351865382066] (-122.87280229470025,42.33512635085884) -122.87290806613127,42.335410926692404
C:\work\geogig>geogig add
Counting unstaged elements...3
Staging changes...
100%
2 features and 1 trees staged for commit
0 features and 0 trees not staged for commit
C:\work\geogig>geogig commit -m "second modification"
100%
[26efb5b977761415689a88e5a3493e5c19f8cec8] second modification
Committed, counting objects...0 features added, 2 changed, 0 deleted.
変更の確認
logコマンドでフィーチャーの変更履歴をみてみます。C:\work\geogig>geogig log -p parks/1
Commit: 26efb5b977761415689a88e5a3493e5c19f8cec8
Author: testuser <testuser@test.com>
Date: (1 minutes ago) 2015-05-31 13:49:25 +0900
Subject: second modification
Commit: f157afde4e55026608733c1d50ab4935db33fb17
Author: testuser <testuser@test.com>
Date: (21 hours ago) 2015-05-30 16:04:54 +0900
Subject: first version
blameコマンドでフィーチャーを確認すると、the_geom(ジオメトリ)とowner属性値の変更日時が新しくなっているのがわかります。
C:\work\geogig>geogig blame parks/1今回はここまで。
parktype: Riparian f157afd testuser testuser@test.com 2015-05-31 01:04:54
area: 600.217529296875 f157afd testuser testuser@test.com 2015-05-31 01:04:54
perimeter: 98.3058889120852 f157afd testuser testuser@test.com 2015-05-31 01:04:54
name: Bear Creek Channel f157afd testuser testuser@test.com 2015-05-31 01:04:54
the_geom: MULTIPOLYGON (((-122.87290806613127 42.335410926692404, -122.87265408473853 42.335482522206775, -122.87253735255466 42.33526317433605, -122.87280229470025 42.33512635085884, -122.87290806613127 42.335410926692404))) 26efb5b testuser testuser@test.com 2015-05-31 10:49:25
owner: test 26efb5b testuser testuser@test.com 2015-05-31 10:49:25
usage: Public f157afd testuser testuser@test.com 2015-05-31 01:04:54
agency: Jackson County f157afd testuser testuser@test.com 2015-05-31 01:04:54
2015年5月30日土曜日
GeoGigでGISデータのバージョン管理をする (1)データ登録
shapefileなどのGISデータをバージョン管理するとき、ふつうにgitやsvnなどでファイルそのものをバージョン管理するという方法もありますが、GeoGigという、GISデータに特化したバージョン管理プログラムがあるということで、試してみます。
環境
今回は次の環境を使用します。GeoGigの本体はjarファイルですので、Javaの動作環境を用意します。
- OS…Windows 8.1 Pro
- Java…Java SE Development Kit 8u45
事前準備
まず、GeoGigのサイトからzipファイルをダウンロードし、任意の場所に展開します。中にbinというフォルダーがあるので、このフォルダーをPATH環境変数に追加しておきます。
実行
GeoGigのチュートリアルが用意されているので、それを参考にしながら実行していきます。サンプルデータとなるshapefileもチュートリアルのページからダウンロードできます。
リポジトリ作成
まずはgeogig用のリポジトリを作る必要があります。任意の場所に空のフォルダーを作成し(今回はC:\work\geogigというフォルダーを作りました)、コマンドプロンプトでgeogig initと打ちます。C:\work\geogig>geogig init
Initialized empty Geogig repository in C:\work\geogig\.geogig
ユーザー情報の設定
ユーザーの名前とemailを設定しておかないと、あとでファイルをデータをする際にエラーになるので、先に設定しておきます。C:\work\geogig>geogig config user.name testuser
C:\work\geogig>geogig config user.email testuser@test.com
shapefileの登録
いよいよデータを登録してみます。チュートリアルのサンプルデータは、ポリゴンが3個のshapefileになっています。
登録するには、まずimportコマンドでデータをGeoGig内にインポートし、それからadd⇒commitの順番でコマンドを実行します。
C:\work\geogig>geogig shp import c:\work\tutorial_data\snapshot1\parks.shp
Importing from shapefile c:\work\tutorial_data\snapshot1\parks.shp
Importing parks (1/1)...
33%
3 distinct features inserted in 296.7 ms
Building final tree...
3 features tree built in 16.85 ms
100%
c:\work\tutorial_data\snapshot1\parks.shp imported successfully.
C:\work\geogig>geogig add
Counting unstaged elements...4
Staging changes...
100%
3 features and 1 trees staged for commit
0 features and 0 trees not staged for commit
C:\work\geogig>geogig commit -m "first version"
100%
[f157afde4e55026608733c1d50ab4935db33fb17] first version
Committed, counting objects...3 features added, 0 changed, 0 deleted.
内容の確認
lsコマンドを実行すると、parksというディレクトリ?の中に、3つのフィーチャーが作られていることがわかります。C:\work\geogig>geogig lsshowコマンドで、データの中身を見ることができます。
Root tree/
parks/
C:\work\geogig>geogig ls parks
parks/
3
2
1
まずはparksの定義を見てみます。
C:\work\geogig>geogig show parks
TREE ID: cfe448b15b03dc1f9fe687643f16fb9f01aa2a5a
SIZE: 3
NUMBER Of SUBTREES: 0
DEFAULT FEATURE TYPE ID: c202e4dc0bbeaf2cbb068a5f0b168099832455da
DEFAULT FEATURE TYPE ATTRIBUTES
the_geom: <MULTIPOLYGON>
owner: <STRING>
agency: <STRING>
name: <STRING>
usage: <STRING>
parktype: <STRING>
area: <DOUBLE>
perimeter: <DOUBLE>
次に、1つのフィーチャーを見てみます。座標と属性値が見られます。
C:\work\geogig>geogig show parks/1
ID: 75a0cbf170714fb1b60f0bd80fddeac8fbfb2429
FEATURE TYPE ID: c202e4dc0bbeaf2cbb068a5f0b168099832455da
ATTRIBUTES
----------
the_geom: MULTIPOLYGON (((-122.87290806613127 42.335410926692404, -122.87265408473853 42.335482522206775, -122.87253735255466 42.33526317433605, -122.87279895095871 42.3351865382066, -122.87290806613127 42.335410926692404)))
owner: Jackson County
agency: Jackson County
name: Bear Creek Channel
usage: Public
parktype: Riparian
area: 600.217529296875
perimeter: 98.3058889120852
blameコマンドで、フィーチャーのジオメトリや属性値をいつ誰が更新したかがわかるようです。
C:\work\geogig>geogig blame parks/1とりあえず今回はここまで。
parktype: Riparian f157afd testuser testuser@test.com 2015-05-31 01:04:54
area: 600.217529296875 f157afd testuser testuser@test.com 2015-05-31 01:04:54
perimeter: 98.3058889120852 f157afd testuser testuser@test.com 2015-05-31 01:04:54
name: Bear Creek Channel f157afd testuser testuser@test.com 2015-05-31 01:04:54
the_geom: MULTIPOLYGON (((-122.87290806613127 42.335410926692404, -122.87265408473853 42.335482522206775, -122.87253735255466 42.33526317433605, -122.87279895095871 42.3351865382066, -122.87290806613127 42.335410926692404))) f157afd testuser testuser@test.com 2015-05-31 01:04:54
owner: Jackson County f157afd testuser testuser@test.com 2015-05-31 01:04:54
usage: Public f157afd testuser testuser@test.com 2015-05-31 01:04:54
agency: Jackson County f157afd testuser testuser@test.com 2015-05-31 01:04:54
2015年2月24日火曜日
Developers Summitに今年も行きませんでした
今年も年度末の仕事が忙しくて案の定デブサミにはいけず、まとめをみて参加した気になりましたので、自分なりにレポートしてみます。
技術面は、なかなかついていけませんね。ただ、デブサミでいつもネタを提供してもらってるので、勉強せねば。
エンジニアライフ的観点でいうと、この1年で思いを強くしたのは、
そして、一度時期をずらしてみませんか?年度末はきつい…
トレンド
去年と違う点として、次のようなものを挙げてみます。●テーマの変化
クラウドとか、モバイルとか、そういうのはもはや当たり前になったので、このテーマがいきなり下火になることはないでしょう。で、今年新たに出てきたのは次の2つかな。- IoT(ビッグデータ) ⇒ハードネタとか、今までほとんどなかったですよね。
- マイクロソフト ⇒MSの最近のコミュニティ活動っぷり、ほんとにすごいですね。
●スピーカーの変化
今までゲーム業界とか、比較的名が知れたウェブサービスの会社の方が主流だったように思ったのですが、今年はいわゆる「スタートアップ」の方が増えているような気がします(気がするだけだったらすみません)。●そのほか
去年いくつかあった「エンジニアの成長物語」みたいなテーマが今年ほとんどなかったのがちょっと残念。技術ネタが多かったですかね。面白かったセッション
参加してないのによく言うよなあ、と思わなくもないですが。- 【19-B-1】身近になりつつある人工知能。エンジニアとして知っておくべき勘所とは? ⇒機械学習ネタに興味があったので。
- 【19-C-1】Androidで広がる世界&エンジニアとしての歩み ⇒この人すごい、という意味で。
- アーキテクト関連2件
- 【20-C-1】ITアーキテクトの役割と責任
- 【19-A-3】技術選択とアーキテクトの役割
- 【20-E-7】災害×クラウド ⇒エンジニアとしての在り方を考えさせられたテーマ
雑感
デブサミは1年間の振り返りにちょうどいい機会を与えてくれます。ほかのエンジニアが成長するのをみて、自分はどうだったか、ということを自分に問いかけるわけです。
エンジニアライフ的観点でいうと、この1年で思いを強くしたのは、
エンプラ開発者が幸せになれないと、日本のIT業界は成長しない
ということです。
SIerや受託開発はすでにオワコンとかいろいろ言われてますし、最近はその説を後押しするような記事や書籍やブログが多くみられますが、誰が何と言おうと、日本のITを支えてるのは圧倒的にエンプラのエンジニアなわけです。
なので、エンプラな人が楽しく仕事して、幸せになるにはどうしたらいいのか、ということをもっと考えていければいいですね。
まあ、我々も大きく変わらなければなりません。悪い慣例なんかはなくしていかなければなりません。
なので、今年もエンプラ版デブサミやってください。今年こそ行きます。そして「マネージメントトラック」があるといいなあ。
反省
昨年のデブサミ不参加ブログを読み返してみました。なんと、一番最後に読みたい本がリストアップされてるじゃないですか。これ、一冊も読んでません。ほんとに情けない。。。まとめ
デブサミのおかげで今の私があります。ほんとうに感謝です。そして、一度時期をずらしてみませんか?年度末はきつい…
2015年2月5日木曜日
Windowsサービス化しているtomcatに対してjstatを実行する方法
こちらのサイトが非常に参考になった。
http://qiita.com/uzresk/items/72f42030332ad517f953
http://qiita.com/uzresk/items/72f42030332ad517f953
- タスクマネージャなどを使って、tomcatのプロセスIDを調べる。
⇒「サービス」タブにPIDも表示されているはず。 - SysInternalSuiteに入っている、psexec.exeというプログラムを使う。-sオプションをつけるのを忘れずに。下のコマンドでは、SysInternalSuiteをC:\SysInternalSuiteに展開して使っている。
c:\SysinternalsSuite\PsExec.exe -s "%JAVA_HOME%\bin\jstat.exe" -gc [プロセス番号]
登録:
投稿 (Atom)