読者です 読者をやめる 読者になる 読者になる

替え玉バリカタでお願いします

お仕事と、お仕事そうでお仕事じゃない、少しお仕事な備忘など。

Chatworkの未読数・タスク数をバルーンで通知するアプリケーションを作った(試作)

Chatwork はじめました

業務でChatworkを使いたいので、未読数・タスク数をバルーンで通知するアプリケーションを作りました。そして、Skype勢に押されています。Skypeに対する想いはChatworkの中の人と同じ想いです。

・双方がオンラインでないとメッセージが届かない(時間差で届くことも・・)
・チャットログの横断検索ができない
・PCとノートを使い分けるとチャットログが分散する
スマートフォン版のテキストチャットの使い勝手が非常に悪い

チャットワーク開発の裏側 - EC studio 技術ブログ

使えば使うほど、いらいらが募ります。

 

デスクトップ通知がうまく動かない?

Chatworkには便利なデスクトップ通知があり、Skypeと同じようにチャット着信時にポップアップ表示をしてくれます。

 チャットワークでメッセージが届いた場合、Windowsトレイ などに通知を表示させることができる機能で、これによりチャットの見逃しを防ぐことができます。 

なお、デスクトップ通知はブラウザ「Google Chrome」・ 「Firefox V22.0以降」、Mac Mountain Lionでの「Safari6」で利用できます。

ブラウザでチャットワークを開いた状態でのみ通知され、ブラウザを閉じると通知されませんのでご注意ください。

デスクトップ通知を設定する | ChatWork ヘルプ

しかし。Chromeで使っている人は全く問題ないのですが、IEFirefoxを使っていると上手にデスクトップ通知がされないようです。これではSkypeの方がリアルタイム性があって、便利というお話も出てきます(本当はSkypeと比較することも無いのだけれど…)。

Chromeでも、何故か3つ同じポップアップが来てしまったり、かゆいところがかゆいのですが、許せる範囲です。

 

 それで、少しだけ気が紛れるバルーン通知を用意してみた

こんなの。

f:id:mtaniuchi:20140218234410p:plain

 

利点

  • ブラウザを立ちあげなくても大丈夫
  • 半分やさしさで出来てます

 

実行ファイルのダウンロード

ChatworkNotifier/ChatWorkNotifier/Release-Binary/Release.zip at master · mtaniuchi/ChatworkNotifier · GitHub

※自己責任で使ってね。動作によるあらゆる事象に対して、一切責任とりません。

 

使い方

  1. フォルダのexeを実行します。インストーラーとかそんなものはありません。f:id:mtaniuchi:20140218233250p:plain

  2. いきなりエラーっぽい文言が表示されますが、とりあえず無視。タスクトレイのアイコンを右クリック→「設定」をクリック。
    f:id:mtaniuchi:20140218233251p:plain

  3. APIトークンを入力して、適用ボタンを押します。
    作りっぱなし感満載ですが、これもそっとしておいてください。f:id:mtaniuchi:20140218233252p:plain

    ※トークンはChatworkの動作設定から確認できますf:id:mtaniuchi:20140218233253p:plain

  4. とりあえず、終了してもう一度立ち上げましょう。

 

ソース

GitHubに置きました。

mtaniuchi/ChatworkNotifier · GitHub

あとがき 

なぜ丁寧に使い方を書いてしまったのだろうか。
APIがガラッと変わる可能性が高いので、あまりいま力を入れてもモゴモゴ…。

デブサミ2014に行ってきたのでメモ書き

やっとデブサミに行けた

ずっと行きたかったデブサミですが、やっといけました。
今回はコーヒースポンサーという形で身銭を切ったので、時間を空けるモチベーションが働いたのだと思います。来年もコーヒースポンサーやりたい。結局なんだかんだで時間を捻出できたのは1日目の半分だけ。そしてマイブームなところだけ聞いてきてしまった気がする…。来年はもっと幅広く参加したいな。

 

参考:デブサミ2014、講演関連資料まとめ:CodeZine 

 

以下はメモ。基本的にズレてないと思いますが、同セッションに参加した方など、おかしな点がありましたら訂正します。ご指摘ください!

続きを読む

WindowsをタスクスケジューラとPowerShellでお手軽に監視する方法

先日のエントリ、

バックアップが失敗する場合の対処法(Windows Server 2008 R2) - 替え玉バリカタでお願いします

を教訓に、任意のイベントログを拾って警告してくれる仕組みを用意した。

概要

建付けとしては以下のとおり。

  • イベントをトリガーにしてタスクを実行(タスクスケジューラで)
  • タスクでメールを送信(PowerShellを使う)

PowerShellでメールを送信するスクリプトを作る

メール送信機能はタスクスケジューラの標準機能なのだが、メールサーバーがSMTP認証が必要だったりすると、使えない。したがって、PowerShellでメールを送信するスクリプトを作り、タスクから実行する。

$username = "admin@example.com"
$password = "P@ssWord1234"
$myhost = "example.com"
$port = 587 

 

$from = "admin@example.com"
$recipients = "sysadmin@example.com"
$subject = "[サーバ監視] Server0Aのバックアップが失敗しました"
$body = "イベントビューアでアプリケーションログを確認してください。"

 

$sc = New-Object Net.Mail.SmtpClient

$sc.Host = $myhost

$sc.Port = $port

 

$sc.Credentials = New-Object Net.NetworkCredential

$sc.Credentials.UserName = $username

$sc.Credentials.password = $password

  

$sc.send($from, $recipients, $subject, $body)

タスクスケジューラの設定

 次に、特定イベントを検知して警告メールを送信してくれるタスクを作る。

  • タスクの作成をクリック
    f:id:mtaniuchi:20131212141441p:plain
  • 全般タブに名前と説明を入れておくf:id:mtaniuchi:20131212141509p:plain
  • トリガー(タスクの開始)をイベント時に指定・カスタムフィルタを作成f:id:mtaniuchi:20131212141601p:plain

  • 新しいイベントフィルターを作成

    f:id:mtaniuchi:20131212141655p:plain

  •  メールを送信する操作を追加

    f:id:mtaniuchi:20131212141711p:plain

これでおしまい。OKをクリックして保存しておく。
※実行者のパスワードを求められるので入力しておく

任意のイベントを発生させる

さて、テスト。eventcreate.exeでイベントを発生させて、動作確認。

C:\Windows\system32>eventcreate.exe /t error /id 521 /L Application /so  "Backup" /d "TestMesage!"

メールが送信されていればOK!これで、安心して暮らせますね!

参考:

バックアップが失敗する場合の対処法(Windows Server 2008 R2)

気がついたらHyper-VなサーバのWindowsバックアップが動かなくなっていた。焦った。仮想マシンは沢山動いてるし、このサーバーがお釈迦になったら1週間以上復旧に時間がかかります…。

環境(前提)

-Windows Server 2008 R2

-Hyper-V仮想マシンが10台ぐらい動いてる

-夜間にバックアップをスケジュール済み

イベントログ(これが出たら失敗してる)

バックアップ対象のボリュームのシャドウ コピーを作成するボリューム シャドウ コピー サービスの操作が、次のエラー コード '2155348001' により失敗したため、'‎2013‎-‎12‎-‎11T08:08:50.731000000Z' に開始したバックアップ操作は失敗しました。イベントの詳細で解決策を確認し、問題の解決後にバックアップ操作を再実行してください。

f:id:mtaniuchi:20131211181944p:plain

 

何はともあれ、コマンドラインで再実行してみる

GUIだとよく分からないことがあるので、管理者権限で以下のように実行してみた。同時にイベントビューアをにらめっこしながら。 

C:\Windows\system32>wbadmin start backup
wbadmin 1.0 - バックアップ コマンド ライン ツール
(C) Copyright 2004 Microsoft Corp.
 
スケジュールされたバックアップに使用する構成と同じ構成を使用して
バックアップを作成しますか?
[Y] はい [N] いいえ Y
 
スケジュールされたバックアップ対象 へのバックアップ操作を開始しています。
バックアップに指定されたボリュームのシャドウ コピーを作成しています...
バックアップに指定されたボリュームのシャドウ コピーを作成しています...
(※中略)
バックアップに指定されたボリュームのシャドウ コピーを作成しています...
バックアップ操作が完了する前に停止しました。
バックアップ操作の概要:
-----------------------
 
バックアップ操作が完了する前に停止しました。
エラーの詳細: エラー - 共有復元ポイントの操作でエラーが発生しました (0x81000101)
 
シャドウ コピーの作成がタイムアウトしました。この操作を再度実行してください。
 
 
共有保護ポイントが作成される前に、Windows バックアップがタイムアウトになりました
エラー - 共有復元ポイントの操作でエラーが発生しました (0x81000101)
シャドウ コピーの作成がタイムアウトしました。この操作を再度実行してください。

失敗の原因

 シャドウ コピーの作成がタイムアウトしているということは、タイムアウトしないようにすればいい。ということで、以下のレジストリにエントリを追加。そして再起動!

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\SPP\CreateTimeout
※REG_DWORDで追加
※タイムアウト値はデフォルト10分らしい
※今回は30分にしてみた

f:id:mtaniuchi:20131211182951p:plain

結果

以下のように、うまくいきました! 

C:\Windows\system32>wbadmin.exe get status
wbadmin 1.0 - バックアップ コマンド ライン ツール
(C) Copyright 2004 Microsoft Corp.

バックアップに指定されたボリュームのシャドウ コピーを作成しています...
バックアップに指定されたボリュームのシャドウ コピーを作成しています...
ボリューム システムで予約済み (100.00 MB) のバックアップは正常に完了しました。
ボリューム ローカル ディスク(C:) のバックアップを作成中に (1%) をコピーしました

ボリューム ローカル ディスク(C:) のバックアップを作成中に (96%) をコピーしました

ボリューム ローカル ディスク(C:) のバックアップは正常に完了しました。
ボリューム ゲストOS(E:) のバックアップを作成中に (0%) をコピーしました。
ボリューム ゲストOS(E:) のバックアップを作成中に (6%) をコピーしました。
(※後略)

 

イベントログの監視って大事ですね。バックアップはシステムの生命線でございます。一度動いていると、ついつい放ってしまうのですが、これを気に監視の仕組みを用意しようと思います。

.NETとGitとjenkinsでCI環境を構築する方法(3) - ジョブの設定

この記事は、
.NETとjenkinsでCI環境を構築する方法(2) - jenkinsの初期設定 - 替え玉バリカタでお願いします
続きです。

ジョブの作成。そろそろお試しできます。

[新規ジョブ作成]からジョブを追加します。適当なジョブ名を記入して「フリースタイル・プロジェクトのビルド」を選択してOKをクリック。

1.BacklogプロジェクトのURLを指定

 BacklogプロジェクトのURLとユーザID・パスワードを指定します。あらかじめBacklogにjenkinsさんというユーザが居る前提です。

f:id:mtaniuchi:20131104161444p:plain

2.Gitリポジトリの指定

[ソースコード管理]でGitを選択、リポジトリを指定します。以下の図は指定が誤っているとき。正しく設定すれば赤文字のエラーは消えます。Credentialsは前回作ったものを指定。

f:id:mtaniuchi:20131104162009p:plain

2.ビルド・トリガの指定

とりあえず30分毎にビルドされるようにしました。30分毎にリポジトリをチェックして差分があればビルドプロセスが走ります。あまり頻度を上げても先方様に要らぬ負荷を与えることにもなるかな、と。

まあ、このへんはお好みで。負荷状況などによってはMasterリポジトリはDailyにするかもしれないし、devlopリポジトリなんかは15分毎が良いかもしれない。環境と使われ方次第だと思います。

f:id:mtaniuchi:20131028174412p:plain

3.ビルドの設定

あらかじめ[jenkinsの設定]で作っておいたMSBuildを選択。ビルドするソリューションとコマンドラインオプションを指定します。

f:id:mtaniuchi:20131104162416p:plain

4.ビルド後の挙動を指定

ビルドに失敗した場合にBacklogへ課題追加されるように指定しました。またビルドを壊した人にもメールするよう設定。

f:id:mtaniuchi:20131104162659p:plain

 

課題

1.色々と試していたらBacklog Pluginが動かなくなった

あと、なぜかBacklog Pluginについては、スペースの設定を行って適用&保存してもうまく反映されず、途方に暮れた。いまだ解決方法が分からず。Hyper-Vを使っているので、スナップショットで戻しました。

2.BacklogからのWeb Hook

BacklogからのWebHookをやってみたが、一部上手く動かず。ローカルと外部からURLを直接叩くと上手くいくが、肝心のBacklog側から飛ばしてくれるWebHookがうまくいかない。これは間違いなくこちら側のネットワークの問題だと思います。

その他・書きたいこと

他にも色々と試したことを書き残したり、やっていないことを試してみたい。

  • 自動テストの設定
  • コードメトリックス算出
  • コードの静的解析

などなど。

関連記事