MSBuild Launcherの0.2.2をリリースしました。「ターゲットがたくさんあるMSBuildファイルで、何度も同じものを実行したいときに今のUIだとつらい」という要望があったので、前回実行したターゲットの色を変えるようにした、というのが今回の変更です。
あと、WindowsXPでクラッシュする問題への対策もだいぶ前に入れたので、今は大丈夫のはずです。
2013-11-18
SQL Server データベース間でちょっとだけデータを移行する
ローカルだったらSQL Server Management StudioでGUIでぽちぽちやるだけで簡単なんだけど、SQL Azureだと機能が制限されているようなので、ここではbcpを使う。
テーブルが1テーブルで、大きくなければ、2コマンドだけ。まぁ、expdp/impdpとかpg_dump/pg_restoreとか結局こんなもんだよね。
データ吸い出し
データ流し込み
bcp.exeは、C:\Program Files\Microsoft SQL Server\110\Tools\Binnとかにある。
さくっとできちゃうので、接続先には強く気をつけること。ちなみに、-U/-Pの代わりに、-T でWindows統合認証。
なお、データがたくさんの場合は、 バッチサイズを指定したり、テーブルロックにするようにしたりと、いくつか気にしたほうがいいポイントがあるので、気をつける。
参考:
テーブルが1テーブルで、大きくなければ、2コマンドだけ。まぁ、expdp/impdpとかpg_dump/pg_restoreとか結局こんなもんだよね。
データ吸い出し
bcp TableName out c:\temp\tablename.dat -S 移行元データベースサーバ -d データベース名 -U ユーザー名 -P パスワード -n -q
データ流し込み
bcp TableName in c:\temp\tablename.dat -S 移行先データベースサーバ -d データベース名 -U ユーザー名 -P パスワード -n -q
bcp.exeは、C:\Program Files\Microsoft SQL Server\110\Tools\Binnとかにある。
さくっとできちゃうので、接続先には強く気をつけること。ちなみに、-U/-Pの代わりに、-T でWindows統合認証。
なお、データがたくさんの場合は、 バッチサイズを指定したり、テーブルロックにするようにしたりと、いくつか気にしたほうがいいポイントがあるので、気をつける。
参考:
2013-10-14
PSWFWeb (PowerShell Workflow WebConsole) v0.0.1 をリリース
PSWFWeb (PowerShell Workflow WebConsole) version 0.0.1 をリリースしました。こんな感じで、ブラウザからPSWorkflowを走らせたり状態が見られたりするソフトです。
ダウンロードはこちらから。使い方は、READMEを見てください。
途中で挫折しかけてお蔵入りになるところだったのですが、スクリーンショットで反響を頂いたので、仕様を絞って最低限試せるレベルまで作ってみました。とはいえ自分でもあまり試せていないレベルなので、アグレッシブなことをすると、なにが起きるかはわかりません :)
ただでさえPowerShellはユーザーが多くないと思われるのに、PowerShell Workflowを使う人はさらに少ないと思いますが、ピンと来た人はぜひ使ってみてください。
造りとしては、Nancy という.NET向けのSinatraライクなフレームワークを使っています。これは主に、自身でWindowsサービスとなってWebをホストする(self-hosting)ためです。動作ユーザーを好きにさせるためと、将来(があれば)たぶん状態を持ってポーリングとかするだろうなと思ってWindowsサービスにするためにしています。
実際使ってみると、ASP.NET MVC (空)よりずっと依存関係が少なく、Sinatraの感覚がわかる人にはけっこうおすすめで使える感じです。内蔵のSuper Simple View Engineは、かなーりシンプルなのでRazorを持ってきたほうがいいかもしれませんが。
画面のほうは、PureというYahooが出しているWebフレームワークを使ってみました。Emailというレイアウトサンプルをほぼそのままの感じです。
ちなみに、Runtimeをhostingするわけではなく、Get-Job等々をPowerShellで呼び出しています。ほんとに*-Jobのwrapperというかんじ。
ダウンロードはこちらから。使い方は、READMEを見てください。
途中で挫折しかけてお蔵入りになるところだったのですが、スクリーンショットで反響を頂いたので、仕様を絞って最低限試せるレベルまで作ってみました。とはいえ自分でもあまり試せていないレベルなので、アグレッシブなことをすると、なにが起きるかはわかりません :)
ただでさえPowerShellはユーザーが多くないと思われるのに、PowerShell Workflowを使う人はさらに少ないと思いますが、ピンと来た人はぜひ使ってみてください。
造りとしては、Nancy という.NET向けのSinatraライクなフレームワークを使っています。これは主に、自身でWindowsサービスとなってWebをホストする(self-hosting)ためです。動作ユーザーを好きにさせるためと、将来(があれば)たぶん状態を持ってポーリングとかするだろうなと思ってWindowsサービスにするためにしています。
実際使ってみると、ASP.NET MVC (空)よりずっと依存関係が少なく、Sinatraの感覚がわかる人にはけっこうおすすめで使える感じです。内蔵のSuper Simple View Engineは、かなーりシンプルなのでRazorを持ってきたほうがいいかもしれませんが。
画面のほうは、PureというYahooが出しているWebフレームワークを使ってみました。Emailというレイアウトサンプルをほぼそのままの感じです。
ちなみに、Runtimeをhostingするわけではなく、Get-Job等々をPowerShellで呼び出しています。ほんとに*-Jobのwrapperというかんじ。
2013-09-25
AndroidからBluetooth機器にSPP (Serial Port Profile) で接続する
作ったデバイスにAndroidからつないでみようと思ってやってみた。まっとうに使ってもらおうとすると、他にもけっこういろいろ必要なのだけど、自分で使うくらいならわりと簡単にできる。
このへんのページのほうが詳しいので、「ここではしない」ことがしたければこちらを参考に...
いかにもUIなんか関係なさげなメソッドなのに、Handlerが取れなくて例外が出る。4.1では起きないらしいけど、2.3じゃダメだと…ねぇ?
cf: https://groups.google.com/forum/#!msg/android-developers/wFbD5V2DWRc/gv0VF4Y6ICwJ
cf: http://stackoverflow.com/questions/3397071/service-discovery-failed-exception-using-bluetooth-on-android
本当はすべてUIじゃないスレッドの中でのコードにしたかったのだけど、上述の罠があって、getDefaultAdapter()だけUIスレッドで渡すようにしているので、コピペでは現実的に動かない。
close()漏れとかあるので、ためしに書いてみるてな感じの参考程度に。sendLogMessage()は、適当なTextViewにログを出すためのメソッドなので、Log.dとかでよいです。
やりかた
- BluetoothAdapter.getDefaultAdapter()を使って、アダプタを得る。
- アダプタにisEnabled()を呼び出して、Bluetooth設定が有効なことを確認する。
- インテントを出してユーザーに有効にしてもらうことも可能だけど、ここではしない。
- アダプタにgetBondedDevices()を呼び出して、ペアリングされたデバイスの一覧を得る。
- 探索してペアリングされたデバイス以外から探すことも可能だけど、ここではしない。
- デバイスのプロパティを見て、欲しいデバイスを探し出す。
- 本当はUI出して選んでもらうのがいいと思うけど、ここではしない。
- 欲しいデバイスにcreateRfcommSocketToServiceRecord()を呼び、必要なサービスのBluetoothSocketを得る。
- SPP (Serial Port Profile)のUUID(00001101-0000-1000-8000-00805F9B34FB)を渡す必要があるので、定数定義しておく。
- BluetoothSocketにconnect()を呼ぶ。
- BluetoothSocketにgetInputStream() / getOutputStream()を呼んで、適当に操作する。
- BluetoothSocketにclose()を呼ぶ。
このへんのページのほうが詳しいので、「ここではしない」ことがしたければこちらを参考に...
- ソフトウェア技術ドキュメントを勝手に翻訳 - Android 開発ガイド > フレームワークトピック > h. Bluetooth
- Androidアプリ開発 ~Bluetooth SPP による無線通信~
罠
罠1) getDefaultAdapter()は、Gingerbread (2.3)では、UIスレッドでしか呼べない。
いかにもUIなんか関係なさげなメソッドなのに、Handlerが取れなくて例外が出る。4.1では起きないらしいけど、2.3じゃダメだと…ねぇ?
cf: https://groups.google.com/forum/#!msg/android-developers/wFbD5V2DWRc/gv0VF4Y6ICwJ
罠2) BluetoothSocket#connect()は「Service discovery failed」でたまに失敗する
Webを見るとよくある話のようで、ウエイトを入れたり、アダプタにcancelDiscoveryをさせろとか、リフレクションで中のメソッドを呼び出せとか、いろいろある。どうにもすっきりしないし、時間がかかってNGなので、何かのタイムアウトなんだと思う。なので、とりあえずリトライすることにした(リトライの条件はもう少ししっかりしたほうがいいかも)cf: http://stackoverflow.com/questions/3397071/service-discovery-failed-exception-using-bluetooth-on-android
コード
ASCIIで1行書き込むと、1行返ってくる感じのサンプル。本当はすべてUIじゃないスレッドの中でのコードにしたかったのだけど、上述の罠があって、getDefaultAdapter()だけUIスレッドで渡すようにしているので、コピペでは現実的に動かない。
close()漏れとかあるので、ためしに書いてみるてな感じの参考程度に。sendLogMessage()は、適当なTextViewにログを出すためのメソッドなので、Log.dとかでよいです。
2013-09-21
Arduino + USB ホストシールド + BTドングルでBluetooth Lチカ
このあたりを参考にしたら、思ったよりも圧倒的に簡単にできたので、思わず記事にする。ArduinoとUSBホストシールドにBluetoothドングルを使うと、SPP (Serial Port Profile)を使って簡単にLEDチカチカできちゃう。
USBホストシールドは2.0なものを選ばないとたいへんらしい。
変更した部分はこんなかんじ(全体は最後に)。
あとは転送する。
ターミナル的なソフトが使えれば、WindowsでもLinuxでもなんでもいいと思うけど、今回はAndroidとS2 Terminal for Bluetooth Free を使った。1とか0とか送ってチカチカすれば成功!
ソース全体でもこれだけ。eneloop スティックブースターで動くし、お手軽にライトな無線機器を作るのにいいと思う。
1. 機器を準備する
必要なものは、ArduinoとUSBホストシールド2.0とBluetoothドングル。今回は、以下を使った。- Arduino Uno (3千円くらい)
- USB ホストシールド 2.0 (3千円くらい) → このために買ったんだけど2年くらい眠ってた
- BT-MicroEDR (当時2千円くらい)
USBホストシールドは2.0なものを選ばないとたいへんらしい。
2. つなぐ
USBホストシールドにBluetoothドングルを差して、Arduino Unoに重ねて、適当なデジタルピンにLEDと抵抗のセットをつなげばいい。ただし、デジタル8~13は使っているらしいので注意。今回は6番を使った。3. Arduino IDEの所定のディレクトリにzipを展開する
https://github.com/felis/USB_Host_Shield_2.0 から、zipアーカイブをダウンロードして、/usr/share/arduino/libraries/USB_Host_Shield_20 に展開する。4. SPPサンプルを開く
Arduino IDEのメニューからUSB_Host_Shield_20のBluetoothのSPPのサンプルを開く。5. ちょちょいと書き換えて転送する
サンプルはSerialとSerialBTでお互いにechoする感じなので、適当にif文を書き換えてdigitalWrite(ピン, HIGH/LOW); でチカチカさせるようにする。変更した部分はこんなかんじ(全体は最後に)。
if (SerialBT.available()) { char c = SerialBT.read(); if (c == '1') { digitalWrite(6, HIGH); } else { digitalWrite(6, LOW); } Serial.write(c); }
あとは転送する。
6. ペアリングして通信する
ターミナル的なソフトが使えれば、WindowsでもLinuxでもなんでもいいと思うけど、今回はAndroidとS2 Terminal for Bluetooth Free を使った。1とか0とか送ってチカチカすれば成功!
ソース全体でもこれだけ。eneloop スティックブースターで動くし、お手軽にライトな無線機器を作るのにいいと思う。
2013-09-16
照明On/OffのAndroidクライアントを作った
前に自室の照明をスマートフォンからOn/Offする CGI を作ったのだけど、ブラウザで見ると不便な点がいくつかあったので、このくらいならすぐできるだろうとAndroidクライアントを作った。実行すると以下の絵のようなダイアログがポップアップする。
ダウンロードはこちらから→https://github.com/sunnyone/LightControllerAndroid/releases/tag/release-0-0-1 (GitHubのリリース機能をはじめて使ってみた。)
十中八九この環境でしか使われないくせに設定画面(メニューから呼び出し)がついてるので、URLは設定でコントロールできる。ただ、認証とかには対応してないので、secureなLANで使ってください。
本当はウィジットで作りたかったんだけど、1x1じゃ使いづらそうな割に2x1や1x2は場所取り過ぎなのと、ウィジットでのクリックと処理実装が(やりたいことのわりに)面倒そうだったので、ダイアログテーマのアクティビティで実装した。本当は文字列をリソースから引いたりしないといけないんだけど、自分の中でAndroidのHello, World的位置付けなのでとりあえずここまで。
このシンプルなアプリですらかなりはまったので、はまったポイントを環境構築編のみダイジェストでお届け。Androidがもし無名の環境であれば、このシンプルな画面すらたどりついていなかった。
参考:http://d.hatena.ne.jp/thinkAmi/20120730/1343600121
ダウンロードはこちらから→https://github.com/sunnyone/LightControllerAndroid/releases/tag/release-0-0-1 (GitHubのリリース機能をはじめて使ってみた。)
十中八九この環境でしか使われないくせに設定画面(メニューから呼び出し)がついてるので、URLは設定でコントロールできる。ただ、認証とかには対応してないので、secureなLANで使ってください。
本当はウィジットで作りたかったんだけど、1x1じゃ使いづらそうな割に2x1や1x2は場所取り過ぎなのと、ウィジットでのクリックと処理実装が(やりたいことのわりに)面倒そうだったので、ダイアログテーマのアクティビティで実装した。本当は文字列をリソースから引いたりしないといけないんだけど、自分の中でAndroidのHello, World的位置付けなのでとりあえずここまで。
このシンプルなアプリですらかなりはまったので、はまったポイントを環境構築編のみダイジェストでお届け。Androidがもし無名の環境であれば、このシンプルな画面すらたどりついていなかった。
ウィンドウ>Android SDKマネージャーが表示されない
パースペクティブのカスタマイズのコマンド・グループ可用性で「Android SDK および AVD マネージャー」をチェックすること。参考:http://www.devlog.alt-area.org/?p=547SDK マネージャーが起動しない(C:\Windows\system32\java.exeを使おうとする)
Windows 64bitの問題らしい? がんばってjavaを探そうとしている adt-bundle-windows-x86_64-20130729\sdk\tools\lib\find_java.batの先頭を以下のように書き換え(path-to-javaは自分用に)@echo off set java_exe="path-to-java\bin\java.exe" set javaw_exe="path-to-java\bin\javaw.exe" goto :EOF
参考:http://d.hatena.ne.jp/thinkAmi/20120730/1343600121
Emulatorがメモリ確保に失敗して起動しない
AVDの設定画面を見ると、Windowsで768MB以上だと失敗するかもみたいなことが書いてある。とりあえず512MBにしてようやく起動。2013-09-14
LibreOffice Calcの選択セルをMediaWiki表形式に変換するBasicマクロを作った
MediaWikiで表を書くとき、最初に作るときにフォーマットを思い出すのが辛いので、LibreOffice Calcの選択セルをMediaWikiの表形式に変換するマクロを書いてみた。ずっと書こうと思っていたのだけど、ようやく書けた。LibreOfficeにしておけば、気兼ねなくインストールして使えるので。
使い方は簡単で、選択してこのマクロを実行するだけ。そうするとメッセージボックスが出てくるので、このボックスはテキスト選択可能なのでコピペすればOK。ツールバーの空き部分にでもボタンを貼っておけばいいと思う。MediaWikiの表は、もっと高機能だけど、ひとまずプレーンな形に整形するだけ。
これがマクロ。
全然エレガントじゃない。
使い方は簡単で、選択してこのマクロを実行するだけ。そうするとメッセージボックスが出てくるので、このボックスはテキスト選択可能なのでコピペすればOK。ツールバーの空き部分にでもボタンを貼っておけばいいと思う。MediaWikiの表は、もっと高機能だけど、ひとまずプレーンな形に整形するだけ。
これがマクロ。
全然エレガントじゃない。
書くときのポイント
- LibreOfficeについているマクロエディタは補完もないので、最初はNotepad++でVBモードで書くのがおすすめ。
参考にしたもの
- JA福岡市の ExceltoCalcマクロ移行マニュアル
- 絵入りで非常にわかりやすい。書きはじめはこれを見るとよいと思う。
- Macroの杜
- こちらの例をにらめっこしながら書いた。
- 「OOoBasic」 のページがあるWiki (正式名称不明)
- このWikiもすばらしい。
- LibreOffice Basic ヘルプ
- 検索してるとたまにでてくる。
辛かったこと
- 流儀がわからない
- プロパティ?の参照は .Abc = "ABC" だったり、setAbc("ABC") だったり書いてある場所によってぶれぶれ。変数名の命名はoから?とか。まぁ最初は動けばいいんだろうけど、結局すっきり書けなかった。
- クリップボードがめちゃくちゃつらい。Win32 APIプログラミングですかっていう低レベルさ。
- 正直これをgistに貼るレベルの行数で使えない → http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoBasic%2FGeneric%2FClipboard
- 最初はクリップボードにコピーまでやろうと思ったけど、これはちょっと厳しいのでmsgboxでごまかした。
登録:
投稿 (Atom)