プログラマーですが何か?まだプログラマーですが何か?プログラマーネタとアスリートネタ中心。dotnsfこのエントリが特定の個人を揶揄する目的で作ったものではないことを最初にお断りしておきます。今(2016/Mar/24)話題になっている某氏の謝罪ウェブサイトを見ていて、あることに気付きました:このページの内容自体にどうこう言うつもりはありません。アクセスするとこのページが表示されるようになっています。何かをシステマチックに探した上で見つからない、というエラーに見えます。ページ内容を入れ替えたものではなさそうです。静的ウェブホスティング機能を使って作られたページだったようです。切り替えだけでこの謝罪ページに飛ぶよう設定されていた、ということです。うまい方法だと思いました。今回のような謝罪ページは一時的にアクセスが集中する可能性があるので、今まで使っていたウェブサーバーの中身を置き換えただけではアクセスを捌ききれる保証はありません。静的ウェブホスティングにすれば比較的安価に(アカウントを新規に作れば1年間は無料で)それなりの可用性が保証されたこのページを作ることができます。切り替え直すだけで簡単に済みますし、その後は謝罪ページも消してしまえば、それ以降の料金はかかりません。いうことは現在のサーバーを落とす必要もないので、再切り替え時の手間やトラブルも少なく済みそう、と推測されます。このやり方はうまいなあ、と思いました。切り替えにかかるタイムラグや、各種キャッシュの切り替わりを意識する必要はあるにせよ、コスパのいい謝罪ページ運用だと感心してしまいました。謝罪用だけでなく、何らかの事情で一時的に異なるページを表示する必要が生じた場合の方策と考えても使えると思います。互換のオブジェクトストレージサービスを運用している会社にとってはビジネスの参考になります(苦笑)。ボットの挙動を自分なりにカスタマイズしてみましょう。いうメッセージをダイレクトメンションで送った時に実行される処理がこれ、ということになります。簡単な処理でカスタマイズしてみましょう。続く部分を2度喋る、という処理をするようなコードです。ような反応をしてくれるはずです:この例では処理内容がかなりシンプルな例でしたが、5行程度の追加でここまでは出来てしまいました。ボットを作ることもできると思っています。使って外部から情報を取り出して表示する、というサンプルも1つ作ってみました。ボットを作る機会と一緒に勉強して慣れておくと面白いと思います。使い方(というか導入方法)を紹介します。アカウントは必要です。ページでサインアップおよびサインインを済ませておいてください。サインイン済みの環境に対してボットを作成します。導入されている必要があります。ボタンをクリックすると、ボットが作成されます。この値を後で使います。あったとして以下を紹介します。適宜自分の環境と読み替えてください。bot.js)ではいくつかの決められた挙動をするように実装されています。いくつか試してみましょう。いうメッセージをこのボット宛に送ります。いうメッセージを返してくれます。最初の会話が成立しました:続けて自分のことを聞いてみます。yet!"(「まだ知らない」)という答が返ってきました。そりゃそうだ:というわけで自分のことを教えてあげましょう。いうメッセージを送ります。今度は自分が指定した名前を返してくれました。終了する方法も紹介します。回答するとボットはシャットダウンします(コマンドも終了します):と、デフォルトのボットの挙動はまあこんな感じです。中で実装されていて、そのカスタマイズもこのファイルを編集することになりますが、それについては別のまた機会に。導入手順と実行手順を紹介します。環境を前提としています。recordMyDesktop。その中で画面全体のプレビューも表示されている様子):このプレビュー部分をマウスでドラッグして、どのエリアを録画対象にするかを指定することができます。この図で赤くなっている部分が録画対象エリアに指定されている部分です:するとデスクトップにも黒枠が表示され、録画対象エリアが明示されます。録画対象エリアが定まったら「録画」ボタンをクリックして録画を開始します:録画中の様子です。黒枠内だけが録画されています:録画を止めるには画面上部のメニューから四角い部分をクリックします:すると録画した内容のファイル保存処理が実行されます。ウィンドウ画面になります。このまま別の動画の保存を続けることもできます。デスクトップ環境でも画面の動画保存が可能です。dotnsf仕事で「スレッドセーフなサーブレット」の話に遭遇したのでまとめておきます。この方法で作成した場合、サーブレットはシングルインスタンスがマルチスレッドで動作します。サーブレットのインスタンスそのものは1つで、この1つのインスタンスが複数のリクエストを並行処理する、という挙動になります。:}仮にこのサーブレットがリクエストされ、その実行が終了する前に別のリクエストを受けた場合、別のリクエストは前のサーブレットの終了を待たずに実行が始まります。大半のケースではこれが期待する挙動になると思っています。スレッドセーフではないので、例えばサーブレットの処理の中にデータベースへの更新処理が含まれているような場合、排他制御できるかどうかはそのデータベースシステム側に求められるか、データベース側が排他制御していないのであればサーブレットの中に独自の排他制御の仕組みを実装する必要があります。いうのが今回の話題でした。その結論がこちらです。インターフェースを継承して作成したサーブレットはシングルスレッドモードになり、実行中は他のスレッドリクエストは待ち行列に入ります。:}実際の処理ではデータベースだけではなく、どのリソースにスレッドセーフ性が求められるのか、を意識して実装する必要があるのですが、そこが明確になっているのであれば上記のような方法で実装そのものは簡単にできる、ということになります。後はそこだけを綺麗に分離して、小さく作れるかどうか、、ということになるのかな。ブログ検索」ブログパーツは、サービスを終了しました。