インターネット時刻の同期間隔調整


WindowsXPまたはVistaのローカル時刻は、ネットワーク上の時刻サーバと同期して自動補正できる。


しかし、同期間隔がデフォルト1週間なのでもう少し頻度を高めたいと思ていたところ、
レジストリをいじることで間隔調整を行えることがわかったのでメモっておく。

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient\SpecialPollInterval


上記キーの値に更新間隔を設定する。
単位は秒。
以下は10進表記での入力値例。

1時間:3600、1日:86400、1週間(デフォルト):604800
(極端に短い間隔だと時刻サーバに負荷をかけるかもしれないのでやめておきましょう)


上記設定後、インターネット時刻の設定画面から時刻更新を行うとレジストリ設定が反映される。

天気予報をしてくれるTwitter BOT

こんにちはNonStopKです。


突然ですがTwitterで動く天気予報BOT作りました。
このBOTをフォローして「いつ」の「どこ」の天気が知りたいか@発言で問い合わせると
その日の天気と、わかる場合には最高/最低気温を教えてくれます。

Twitter / otenki_bot


詳しい使い方はこちらを確認してみて下さい。

天気予報BOTマニュアル


ではBOTを作った経緯なんですが…


去年はWebサービスを作りたいとかTwitter BOTを作りたいとか
むしろTwitter BOTのみ作りたいとか、
夢と現実を天秤にかけて丁度いい感じのところを語っていたつもりだったのですが
結果的に夢だけを語っていたことになってしまったのでした。


で、これはまずいということで、ようやく年末頃に
脱オオカミ青年を心に誓ったわけです、ホントようやく。


そしたら凄く良いタイミングでid:takerunbaqutterというBOTを作られて
しかもご本人はほとんどプログラミング初心者だということで
「やりたい」じゃダメで「やる」のが大事だなーと痛感したのです。


そしてついうっかりid:takerunbaid:kyompiid:MameMameの前で
「やりたい」じゃなくて「やります!」と公約してしまったので
重い重い腰が上がったり下がったり前後したりし始めたのでした。


ちなみに、このBOTの発案者はid:MameMameです。
なんか良いアイデアないかなー?と聞いてみたらいくつかポロポロっと出てきたので
そのうちの一つを拾って使わせてもらいました。
いつもナイスな案を提供してくれて本当助かります!
あとアイコンとマニュアルページのイメージ画像も作ってくれました!さすがー!

id:MameMameもこのBOTの紹介記事を書いているようなので、以下のリンクを参照してみて下さい。  

http://d.hatena.ne.jp/MameMame/20090120/p1


ここからは開発の話になりますが、
最初はPHPで発言させたりブラウザを自動更新するとかやってみたんですが
PHPはWebアプリ的なものは作りやすいけどBOTってちょっと違うかなー、などと思い
Twitter4Jの存在も手伝ってJavaで作ることに決めました。


作り始めたのは年末のバタバタしている時期でしたが
なんとか3、4日でBOTとして振る舞えるように仕上げたというペースでした。
そこから1、2日でサーバーエラーレスポンス対応とか動作ログ出力とか
BOT起動/停止時にも何かそれらしい発言をさせようとか
もうBOTとはあまり関係のないところにコダワリ始めて
合計一週間あるかないかくらいで完成という流れでした。


でも、なんやかんやで完成してから公開するまで
ちょっと時間がかかってしまいました(汗)


ソースはちょっとイケてないので
今のところ公開しようとは思ってないです、すみません。


あと、このプログラムは自宅PCで動かしてるので
止むを得ずサービスを止めなければならないこともあるかと思います。
基本的には動かしっぱなしにしておきますが
どうしてもと言うときにはBOTからの発言で早めに通知します。
何卒ご了承下さい。


何はともあれ無事に公開までこぎ着けられた一番の理由は
id:takerunbaBOTに対する情熱と行動力、
そしてid:MameMameのアイデアがあってこそです。
皆さん本当にありがとうございました。


とりあえずこれを第一歩として
今後も何か面白いものを作ってみたいのでヨロシクです!

Twitter天気予報BOTマニュアル

概要


Twitterで動く天気予報BOTです。
まずはこの「お天気BOT」をフォローしましょう。
そして「いつ」の「どこ」の天気が知りたいか@発言で問い合わせると
その日の天気と、わかる場合には最高/最低気温を教えてくれます。
(つぶやきを非公開に設定している場合は使用できません。)

Twitter / otenki_bot

使い方


今日の東京都の天気が知りたい場合は、以下のように問い合わせて見ましょう。

@otenki_bot 今日の東京の天気は?


しばらく待つと、以下のようにリプライが返るでしょう。

@NonStopK 東京都 東京 - 今日 - 5月25日(火)の天気は曇時々晴、最高気温は22℃ 最低気温は15℃だー。


上記は文章で問い合わせていますが、「今日東京」だけでも同じ結果が得られます。
また、「いつ」にあたる文字列が未指定の場合は「今日」が予報対象日になるので
「東京」だけでも上記同様の結果が得られます。

[2010/06/27 追加]
日付を指定しても予報できるようになりました。
以下のように問い合わせて見ましょう。

@otenki_bot 27日のさいたまの天気は?


しばらく待つと、以下のようにリプライが返るでしょう。

@NonStopK 埼玉県 さいたま - あさって - 5月27日(木)の天気は曇時々雨、最高気温は22℃ 最低気温は16℃でございます。


予報可能日は、地域にもよりますが2〜7日後程度となります。
月を指定する必要はありません。
指定日が予報可能日の範囲内かどうかのみチェックしています。
もし範囲外ならば、お天気BOTが予報可能な日数を教えてくれるでしょう。


仕様詳細は以下をご参照下さい。

仕様


約1分に1度、自分に対する発言のチェックを行い、問い合わせがあれば順番にリプライします。

  • 「いつ」を判別する文字列について

【今日を示す文字列】
今日、きょう、こんにち、本日、ほんじつ


【明日を示す文字列】
明日、あした、あす、みょうにち


【明後日を示す文字列】
明後日、あさって、みょうごにち

[2010/06/27 追加]
【しあさってを示す文字列】
しあさって、明々後日


【やのあさってを示す文字列】
やのあさって、やなあさって、弥の明後日、弥明後日


【日にちを示す文字列】
1日 2日 ... 31日(数字は全角、半角どちらでもOKです。)

  • 「どこ」を判別する文字列について


天気予報機能はLivedoor Weather Web Serviceを利用していますので
予報可能な場所については、上記サービスの仕様に準じます。
以下の「全国の地点定義表」リンクを開き、ページのソースを表示させて下さい。
ソース内のcityタグのtitleに書かれた文字列が判別可能な文字列です。

全国の地点定義表
http://weather.livedoor.com/forecast/rss/forecastmap.xml

[2010/06/27 追加]
天気予報RSSフィードから情報を取得するよう変更したので、
最大で7日先の情報を取得することが可能になりました。


予報可能な場所は、下記ページの「今日・明日の天気」項目で
RSSフィードが提供されている地域となります。

Weather Hacks RSSフィード一覧
http://weather.livedoor.com/weather_hacks/rss_feed_list.html


また、各都道府県名を指定すると、都道府県庁所在地の予報を行います。
以下はその一例です。

@otenki_bot 明日の愛媛県の天気は?

@NonStopK 愛媛県 松山 - 明日 - 5月26日(水)の天気は曇時々晴、最高気温は24℃ 最低気温は18℃みたいな。


また、少しずつではありますが、主要駅や地名などでも
その地域の予報ができるように対応を進めております。
はじめは予報が上手くいかなくても、根気よく問い合わせていると
それを見たid:NonStopKがその情熱に負けて
思わず対応させてしまうかもしれません。

[2010/06/27 追加]
非公式RT、QTの扱い】
「@otenki_bot」文字列を含む非公式RT、QTについて、
お天気BOTが反応しないよう変更しました。


ただ、反応してほしいケース、してほしくないケース、どちらもあると思います。
よい反応の仕方があればそのように修正したいとは思っていますが、
仕様がまとまるまではとりあえず無反応とさせて頂きます。

  • ちょっとしたオマケ


お天気BOTに予報してもらったらお礼を言ってみましょう。
もしかしたら何らかの反応があるかもしれません。
思いがけない言葉に反応することも!?

  • リプライできない場合


問い合わせに対してリプライできない場合があります。

【保留問い合わせが21件以上存在する場合】


短時間で多くの問い合わせを頂き、保留問い合わせが21件以上になってしまった場合
古い問い合わせから順に取りこぼしてしまいます。
最大保留件数は20件までですので、問い合わせが集中しそうな場合は
少し時間をずらしてからお問い合わせ下さい。

[2010/06/27 追加]
過去の未取得発言を最大200件まで取得できるよう修正しましたので、
現状の稼動率から考えると取りこぼしは発生しないはずです。
ただし、プログラムにバグがあった場合はこの限りではありません。

Twitter API制限に引っ掛かった場合】


このBOTTwitter APIを使用しています。
通常はAPI制限を越えないように調整してはいますが
何らかの原因でAPI制限に引っ掛かかることがあるかもしれません。
この場合、少し時間をずらしてから問い合わせしてみて下さい。

[2010/06/27 追加]
API制限が解消された時点で
それまでに発生した問い合わせを順番に取得、リプライ処理します。
そのため大幅なリプライ遅延、問い合わせの取りこぼしが発生する場合があります。

【問い合わせ結果が、最近の問い合わせ結果と同じ場合】


Twitterの仕様上、短時間に同じ発言を連続することができません。
お天気BOTが同一ユーザに対して最近のリプライ発言と同じメッセージを生成してしまった場合
リプライできませんのでご了承下さい。


【サーバーエラーレスポンスの場合】


問い合わせ取得、及びリプライ時にサーバーがエラーレスポンスを返す場合があり
この場合はリプライすることができません。

[2010/06/27 追加]
お天気BOTはリプライに成功するまで一定間隔でリトライを行うので、
上記の状態に陥った場合は、状態が解消された瞬間からリプライを再開します。
そのため大幅なリプライ遅延が発生する場合があります。

【つぶやきを非公開に設定している場合】


つぶやきを非公開に設定している場合は、
お天気BOTが問い合わせを取得できないのでリプライすることができません。

[2010/06/27 追加]
potenki_botに関しては現在フォロー返しする余裕がない状況で、
皆様には大変ご迷惑をおかけしております。

[2010/06/27 追加]
【その他の理由】


サーバメンテ、プログラム不具合、停電などさまざまな理由により
お天気BOTの稼働を一時的に停止する場合があります。
(自宅マシンのため、特にハード障害時は再開に時間がかかるかもしれません。)
その際はお天気BOTのつぶやきにて通知させて頂きます。

作成者


このBOTの基本機能の発案、Twitterアイコン、このページトップのイメージ画像作成はid:MameMameです。
オマケ機能の発案、仕様決定、プログラミングはid:NonStopKJavaで行いました。

[2010/06/27 追加]
TwitterBASIC認証廃止に伴い、お天気BOTOAuth認証対応を行いました。
その際に、全てのソースコードを新規で書き直しております。
(理由は単に従来のソースが気に入らなかっただけです。)


なので、一見いつも通りのお天気BOTのように見えますが
もしかしたら突然動かなくなったり意図しない返しをする可能性があります。
その時はごめんなさい。
不具合に気づいたら、できるだけ早く修正するようにします。

最後に


皆様のお役に立てるかどうかわかりませんが、
自分が使ってみて便利だったのでどんどん使っていこうと思っています。
ですが、やはり皆様にも是非使って頂きたく、宜しくお願い申し上げます。


ご意見ご感想はtwitter、もしくは以下の宛先までメールでもOKです。

otenki.bot@gmail.com
nonstopk@gmail.com

jarとマニフェスト

Java + eclipseでコーディングを終えてjarにエクスポートする時
エクスポートウィザードでは外部jarに関する設定
(外部jarを含めるとかクラスパスの設定とか)
ができないように見えた。


なので自分が調べた対処方法をメモっておく。


まずjarはご存知の通りzipの拡張子違いなので
生成したjarの拡張子をzipに変えて中身を覗いてみる。


するとMETA-INF/MANIFEST.MFというマニフェストファイルが存在するので
このファイルに必要な外部jarへのパスを記述することで
eclipseで何の考えなしに動かしたときと同じ環境を構築できるようだ。


で、パスの書き方は以下の通り。
複数の外部jarがあれば半角スペースで区切ってやる。

Class-Path: aaaaa.jar ./jar/bbbbb.jar


色々試してみたところ、
エクスポートしたjarと同じ階層に外部jarを配置するのであれば
aaaaa.jarという書き方でOKっぽい。


また、./jar/bbbbb.jarのように
相対パスの書き方でも指定可能なようだ。


絶対パスは試したところうまくいかなかったが、
自分の書き方が悪かっただけでできるのかもしれない。


あと、この外部jar自体もエクスポートしたjarに
含めてしまう事もできるようだが、今回はそこまでやっていない。


また時間があるときに調べてみようかと思う。

コラボレーションセミナー参加

11/24にSteinberg × Native Instruments × Antaresの
テクノポップを作ろう的なコラボレーションセミナーに参加してきた。
参加した理由はここ数年まともにDTMをやっていなくて
これをきっかけにDTM再開したいなーという思いから。
あの3人組にはあまり興味はない。


ちなみに電話予約が必要だったのでかけてみると
「はい。スカパーですが何か?」「…間違えましたが何か?」
ん?と思いYAMAHAサイトを見てみたけど番号を間違えてはいない。
で、会場のイケベ楽器サイトを確認すると…番号違う!!
ということでYAMAHAトラップを乗り越えた参加者の皆さん乙。


以下リンクは会場の様子。
自分は後頭部の出演。
祝!後頭部デビュー!
http://musicmaster.jp/news/archives/2008/11/28-150001.php


セミナーは、前半がSteinberg社とAntares社の製品を用いて
今流行のテクノポップを作っていくもの。
後半はNative Instruments社のKORE 2の紹介。
この時点で予想がつくとは思うが
このセミナーの価値は、前半:後半=8:2で間違いない。


先に言っておくと、KORE 2はソフト&ハードで構成されており
付属 or 別売りの膨大なライブラリをハードウェアコントローラで
エディットでき、パラメータは相互に完全同期する、という製品。


ま、凄くカコイイアイテムだけど自分には必要ないなコレ。
それに、製品やテクノポップじゃなくて
プロの打ち込みを見せつけてもらって
俺のモチベーションを上げてくれー!!
っていうのが今回の目的なんだし(他力本願すぎ)


というわけで曲作りに重きが置かれていた前半の、
自分なりにコレだ!と感じたポイントをまとめてみた。


1.Cubase4のショートカットキーを覚えろ!
2.極力リアルタイム入力で打ち込め!
3.全てではなくポイントで工夫!
余.CC121というコントローラは神!


なんかテクノポップがどっか行ってしまったけど
素直に思い返してみて、この3点が特に強く感じたことだった。


プロは1.や2.をマスターしているので
効率が良いし早いし見ていて圧倒されてしまう。
初心者プログラマが上級者のコーディングを見る感覚に
かなり近いのではないだろうか。


また3.の具体例としては
アルペジエーターでフレーズを自動生成して
ココという箇所だけ音程変更&音を抜き
オリジナリティを出すという効率の良さ。
楽をする部分と力を入れる部分が
高次元でバランスされている。


ただこれらの打ち込み方を見る限りでは
手順においては自分と大差ないようにも見えた。
気のせいか思い上がりかわからないが
自分のやり方でも大丈夫なんだ、と自信になった。


まあ、他にも細かいことは色々あるのだが
疲れたので誰が何と言おうと
ポリリズムを聞いて癒されることにする。


余談だがCC121のAIノブが神すぎるので
そのうち購入してしまいそうだな。

Steinberg ADVANCED INTEGRATION CONTROLLER CC121

Steinberg ADVANCED INTEGRATION CONTROLLER CC121

Windowsサービスのデバッグ


WindowsサービスをVisual Studioデバッグしたいとき
通常のアプリとはちょっと違う手順を踏む必要があるようだ。


自分の使用しているOSはWindows XP
開発環境はVisual Studio 2005 Professional Edition、
ユーザーは管理権限有りで実施。


以下の手順を踏む事でデバッグ可能になる。

1.Windowsサービスのビルド
2.Windowsサービスのインストール
3.Windowsサービスの開始
4.プロセスのアタッチ


それぞれの手順の注意点。


1.はDebug構成でビルドすること。


2.は1.でビルドしたexeをinstallutil.exeを使って
コマンドラインからインストールする。
通常のコマンドプロンプトでは
installutilへのパスが通っていないので
スタートメニューから
Visual Studio 2005 コマンド プロンプト」
を開いて実行する。
コマンドは以下の通り。

Windowsサービスのインストール
> installutil Sample.exe


Windowsサービスのアンインストール
> installutil /u Sample.exe


これでインストールが完了するので
コントロールパネルの管理ツールから
サービス一覧を開くと追加されているハズ。
なのでこのサービスを開始させる=3.。


4.はVisual Studioツールメニューから
プロセスのアタッチを選び
プロセス一覧の中から3.で開始させたプロセスを
選んでアタッチする。


以上でブレークポイントで処理を止めるなどの
デバッグが可能になる。


当たり前だがソース修正すると1.のビルドから
実施する必要があるので、かなり面倒臭い。