サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
www.walbrix.com
(この記事は STBBS.NET Blogで掲載された記事を2013年4月に移動したものです) プライベートなネットワークの中でホスト名を管理する簡単な方法は /etc/hostsを使うことだが、台数が増えてくるとそれじゃあんまりなので DNSを使って名前を管理してみる。ついでに、ローカル以外の名前解決は外のちゃんとした DNSにフォワードさせる。 ローカルな名前解決とはいえ DNSに扱わせるためには(多分)一応ドメイン名が必要なため、ここでは .local を使う。 /etc/named.conf options { // 前略 forwarders { x.x.x.x; y.y.y.y; }; // 外のちゃんとしたDNSをここで指定 }; // 正引き zone "local" { type master; file "local.zone"; forwarders {}; // こ
ログインが必要なアプリケーションを SPA(Singe Page Application) として作る時に、「ログインされていなければログイン画面に飛ばす」入り口の処理をどこでやるかについての考察 典型的な Webアプリケーションでは、ログインが必要なURLへのリクエストが来たらセッション変数なりなんなりをデータベースと照合してログイン済みの状態でなければログイン画面にフォワードなりリダイレクトなりしてログイン処理に回す(そこからどう戻ってこさせるかは工夫する)という処理をサーバ側で行う。 いっぽう、AngularJSなどで作る SPAの場合は SPAらしくクライアント側で認証周りから行いたくなるものだけど、これを真面目にやろうとすると結構面倒なことを考えなければならない。なにぶん Ajaxは常に非同期で行われるものだから、SPAの開始部分でユーザーがログイン状態にあるかどうかをサーバーに
REST的なAPIを、フレームワークなどを使用しない素のPHPで作る時のテンプレ。 このソースからわかること PHPで例外ハンドラ関数を登録し、例外時にスタックトレースを表示する方法 PHPで200以外のHTTPステータスコードを返す方法 PHPでエラー発生時に実行を継続せず強制的に例外を送出させるようにする方法 PHPで現在の実行環境が組み込みWebサーバ (php -S)(php.net) かどうか判定する方法 PHPでログを出力する方法 PHPでHTTPリクエスト(POSTなど)のボディ部分を読み取る方法 PHPでJSONをパースする方法 PHPでUnicode文字をエスケープせずにJSONを出力する方法 PHPのバージョンを判定する方法 PHPでPATH_INFOに対して正規表現を用いることでURIからパラメータを抽出する方法 実行中のスクリプトが他のPHPスクリプトからインクルー
AngularJSの $resourceを使って application/x-www-form-urlencoded 形式のリクエストを POSTする AngularJSでは、HTTPリクエストでサーバに送信するリクエスト本文の形式として JSONが用いられるが、代わりに HTMLフォームの subimitで使われるのと同じ application/x-www-form-urlencodedを用いる方法もある。 何故そのようなことをする必要があるかというと、APIの設計によっては JSONではなくより古典的な URLエンコードされた引数リストを入力として期待する場合があるからだ。 例えばサーバ側には下記のように Spring Web MVCフレームワークを使って Scala言語で書かれた RESTful APIがあるとしよう。urlencodedメソッドは、URLエンコード形式でPOSTさ
インドクラスタ(ここでは、仕事でインドと関わりを持っている人達)のタイムラインで日常的に発生する、インドあるある話。 インドの銀行から「クレジットカード作れ」っていう営業電話がかかってくるんだけど、 「オレ外国人だから作れないわ」 て説明しても別の人から3日に一回ぐらいかかってくる。たぶん複数の外注業者に名簿だけ渡してる上に、断られた人の消込やってないんだろうけど、マジで迷惑なので辞めてほしい。 — 野瀬大樹 (@hirokinose) November 30, 2014 「オレ外国人だからクレジット作れないよ」 って言ってるのに 「うちなら作れる!」 ってインド人担当者が断言して、パスポートとか外国人登録のコピー、写真とか用意して、必要書類作成して、1週間後に 「あ、お前外国人だから作れないわ」 って電話来たときの衝撃な。俺の時間返せ。 — 野瀬大樹 (@hirokinose) Nove
glibcのgethostbyname系関数に脆弱性の原因となるバグが発見されCVE-2015-0235(GHOST)と命名されたようです。放置した場合は相当多くのアプリケーションがこの脆弱性の影響を受けることが予想されます。 glibcは libcのGNUバージョンです。libcはアプリケーションではなく、事実上全てのアプリケーションが利用しているライブラリです。OSの中ではカーネルに次いで重要な部分と言えます。Linuxシステムでは(ことサーバー用途においては)例外なく glibcが使われています。 この glibcに含まれる gethostbyname系関数の実装に 2000年頃から存在したバグが今になって発見され、CVE-2015-0235 通称 GHOSTと命名されました。ネットワークで何らかの通信を行うアプリケーションは必ず※この関数を使用します。 ※追記: 名前解決をサポート
DbUnitは、JUnitにデータベース入出力のテストを行うための各種便利機能を提供するための拡張である。 ここでは、フィクスチャのロードを行う機能にスコープを絞って DbUnitを取り上げる。 フィクスチャとは、ユニットテストの事前条件となるテストデータである。 DbUnitを使うには、クラスパスに下記のjarファイルを追加する。 dbunit-*.jar slf4j-api-*.jar slf4j-jcl-*.jar フィクスチャを使うユニットテストは、各テストメソッド毎に下記のような流れで実行される。 a) トランザクション開始 ↓ b) フィクスチャをデータベースにINSERT ↓ c) テスト対象メソッドの呼び出し ↓ d) 実行結果のチェック ↓ e) トランザクションをロールバック a, e は Springの機能で自動的に行われる。 c, d はテストケースの実装者がコーデ
今月の初めに公表されていた、一般ユーザーが Linuxシステムをクラッシュさせてしまえるバグ CVE-2014-9090 が実は root権限の奪取にも使えることがわかり CVE-2014-9322 に進化しています。 CVE-2014-9090の日本語情報はこちら。 Linux Kernel の arch/x86/kernel/traps.c 内の do_double_fault 関数におけるサービス運用妨害 (DoS) の脆弱性 要するに、64bit版の Linuxでは管理者権限を持たない一般ユーザーが「わざと」システムをクラッシュさせてしまうことができるということです。対象となるのは x86_64用 Linuxカーネルの 今までの全てのバージョンです。 いま動いてるLinuxが 32bitか64bitかよくわからない場合は uname -m と入力して i686と出れば 32bit、
ありもしない完全な代替品を求めるよりも、より現実的な選択肢を改善することについて。 SQLからなるべく乖離しないでDRYを実現するっていうScalikeJDBCの落としどころが素晴らしい。「結局のところSQLは書かなきゃいけんねん」「SQLよりつぶしの効くRDB操作用言語は存在しえないねん」っていうORMの教訓を経てきた人類はここに到達したって感じで。 — 嶋田大貴 (@shimariso) 2014, 11月 21 というツイートをしたところ、 何をいうか。必ずORMを使うべきだ SQLは根本的にSQLインジェクションを回避できない問題がある みたいな趣旨の反応があったのだけれど、前者についてはWikipediaのここ を一読いただくとして、後者についてはプログラミング言語のほうが発達してて状況が違ってきてるよという話をしたい。 誤解しないでいただきたいのは、別にSQLが良いものであると
結論から言うと、RAIDコントローラのバッテリー切れが原因。バッテリー切れでもライトキャッシュを強制的に有効にすることは出来る、がしかし・・・ HP SmartArray RAIDコントローラ(Linuxでのドライバ名は cciss) で構成したRAIDアレイへの書き込みアクセスが(読み込みでは200MB/s以上出ているにも関わらず) 5MB/sなど異様に遅くなることがある。これは多くの場合、RAIDコントローラに搭載されているバッテリーが上がってしまっている時にライトキャッシュが自動的に無効になるため起こっている。 バッテリーが上がっているとホストの起動時にその旨の警告表示が出ているはずなのだが、システム自体は正常起動するため見逃しがちだ。バッテリーが上がってしまっている疑いがある場合、HP SmartArray専用の管理ツールである hpssacliコマンドでコントローラの状態を表示す
この記事は STBBS.NET BLOGから移動されたものです Javaで自ホストの名前を調べようとしたら、下記のようになる。 java.net.InetAddress.getLocalHost().getHostName() のだが、getLocalHost()の呼び出し時点で UnknownHostException が出てしまう場合がある。 Javaランタイムは getLocalHost()の中でまず自ホスト名を調べた後にそのIPアドレスを解決しようとするのだが、するとホスト名からIPアドレスを解決できない場合には当然この例外が送出されることになる。 ホスト名からIPアドレスを引けない理由をいろいろ端折って一言でいうと、/etc/hosts に載っていないからだ。 OSのインストーラが気を利かせて /etc/hostsにホスト名を追記してくれていればこういう問題は起こらないのだが、そ
静的コンテンツとAPIそれぞれへのHTTPリクエストを Apacheと Javaアプリケーションサーバに振り分ける簡単な設定 ProxyPassディレクティブで特定のパスを固定的にアプリケーションサーバへ転送するかわりに、静的コンテンツとして処理するかあるいはアプリケーションサーバへリクエストを転送するかの判定を RewriteRuleで動的に行ってみる。 勝手に引用失礼 JVM 言語で強固な API と認証機構作って HTML 作るのは Backbone.JS か Angular.JS にやらせるの結構いけてると思うんだけど自分がそういう開発やりたいかというと絶対やりたくはないな — キングコング (@ssig33) January 9, 2014 当社ではまさにその絶対やりたくないそれをしている。少し詳しく言うと、ひと昔前に BlazeDS+Flex (Flashクライアントから、AM
Rails + ActionWebServiceほどではないが、Javaでも Apache CXFを使ってそこそこ簡単に Webサービスを作って公開することが出来る。 この記事は2013年4月に STBBS.NET Blogから移動されたものです ここでは、ActionWebServiceの例で作ったのと同じ Hello Webサービスを実装してみる。 HelloService.java import javax.jws.WebParam; import javax.jws.WebService; @WebService public interface HelloService { String sayHello(@WebParam(name="name") String name); } HelloServiceImpl.java import javax.jws.WebService
時間のかかる非同期通信を行っている間は、通信中であることをユーザーに知らせつつユーザーによる画面操作を禁止したほうが良いことがある。UI Bootstrapのモーダルとプログレスバーでこれを行う方法を示す モダンな Webアプリケーションはいわゆる Ajaxという方式でサーバと非同期で通信することで画面に表示するための情報を取得したりユーザーの入力をサーバに送信したりする。同期通信と異なり、非同期通信の場合は通信中もユーザーインターフェイスがユーザーと対話出来るため、通信中にユーザーが画面操作を行うことにより別のアクションを起こされては困る場合には特別の配慮が必要である。 例えば、クレジットカードの決済画面でユーザーが送信ボタンを押しサーバとの通信が行われている数秒の間に送信ボタンが再度押されたり、メニューを操作して別の画面に飛ばれたりしてしまっては困るといった具合だ。クレジットカード決済
AngularJSには標準の HTTP通信クライアントとして $httpが用意されているが、RESTfulなサーバ側データにアクセスすることを想定した高レベルAPIである $resourceもあるので使ってみる。 $resourceを利用するには、angular-resource(.min).js をロードし、アプリケーションの依存モジュールとして "ngResource" を指定する必要がある。 $resourceを使ったサーバへのアクセスは次のように行われる サーバ側のURIを指定し、リソースオブジェクトを作成する。URIの構成要素は :で始まる名称を付けることでパラメータ化できる。 作成したリソースオブジェクトに対し、get/save/query/remove/delete といった関数の呼び出しを行うことでサーバとの通信を開始する。この時、パラメータを与えることが出来る。先に指定し
手前の方にポップアップしてメッセージを伝え、ユーザーの了承を促すアラートウィンドウ。JavaScript標準の window.alertでは味気ないので、もっと HTML5的に表示してみる。 モーダルとだけ言うと日本ではあまり聞き慣れない言葉だが、ユーザーインターフェイス用語としてはかなり昔から存在する「モーダル・ダイアログボックス」を示す。ユーザーとの対話が終了するまで必ず画面の最も手前に居続け、表示されている間はその外にアクセスさせないようになる、よくあるダイアログボックスをいう。Web製作の現場ではポップアップと呼ばれることも多い。 JavaScriptの window.alertや Windows APIの MessageBox で表示されるメッセージウィンドウもモーダルの一種である。 AngularJSそのものはユーザーインターフェイスを提供しないのだが、Bootstrapを組み
特定のファイルがどのパッケージに含まれているものか調べる 例では、/bin/bash の所属しているパッケージを調べている。 RPMの場合 rpm -qf /bin/bash ebuildの場合 gentoolkitがインストール済み (emerge gentoolkit) であること equery b /bin/bash debの場合 apt-fileがインストール済み (apt-get install apt-file) で、ファイルデータベースが作成済み (apt-file update) であること apt-file search /bin/bash 特定のパッケージに含まれるファイルの一覧を調べる 例では、bash パッケージを調べている。 RPMの場合 rpm -ql bash ebuildの場合 gentoolkitがインストール済み (emerge gentoolkit)
ユーザーとの対話をクライアントサイドのJavaScriptで行いつつ、サーバとの通信はAPIをXHRで呼び出すことで行うような(Ajaxと呼ばれた)モダンな Webアプリケーションを開発する際には、日本のサーバで日本人に対して日本語でサービスを提供するのであれど時差の問題について一考されたい。 古典的な Webアプリケーションでは、ユーザーが10時と入力すればユーザーの意図通りサーバに10時という時刻が確実に伝わり、そうデータベースに記録されたし、データベースに10時と記録されていればユーザーにも10時と表示されるのが当たり前だった。つまり全ての処理をサーバ本位で行っていたため時差が問題になることはなかった。 古典的な Webアプリケーション ところがブラウザ側で動作する JavaScriptがユーザーとの対話を行う場合はどうだろう。サーバのタイムゾーンと、クライアントたるWebブラウザの
カレンダーをポップアップさせて日付を選択する方式の日付入力を AngularJSで実現する方法 Webのフォームを実装する際にいつも面倒な項目といえば日付時刻だ。年・月・日とそれぞれ別のinput要素やselect要素を設けるにせよ、書式を決めてひとつのinput要素に入力してもらうにせよ、ユーザーの入力が正しいことをそれなりに深く検証しなければならない(例えば4月31日などという入力を許すべきではないし、2月29日という入力を許容するかどうかは年までチェックする必要がある)。まして日付だけでなく時刻までユーザーが間違いにくいように入力させるとなればなおさら面倒ということになる。 ユーザーの日付入力を補助するためによく使われるのが Datepicke(デートピッカー)と一般的に呼ばれるUIコンポーネントだ。日付を入力するためのテキストボックス(やその横のボタンなど)をクリックすれば、カレン
lambdaは書いても ifや forは書きたくないあなたに あるリストから、ある条件を満たす最初の要素を取り出したい。例えば、適当に並んだ語のリストから4文字以上の長さを持つ最初のものを取り出したい。きわめて簡潔な記述で。 この瞬間に「4文字以上の語がリストに含まれてない場合どうすんの」って返しがギャバンの蒸着よりも速く出てくるのが正しいプログラマです。「あっ、そんなことは考えもしなかった」っていう人はプログラマに向いてないし、ソフトウェアを設計する仕事にも向いてません(才能的な意味で向いていないというより適切な訓練が足りないというべきですが)。 もしリストに 4文字以上の語が含まれていない場合は Noneを返すことにしましょう。 とはいえ、正しいプログラマの傾向を日常生活に持ち込むと疎まれがちなので注意しましょう。→「ねえ、りんご3個買ってきて〜」「・・・」「どうしたの?」「2個しか売
このブログの RSSフィードを出力するコードを feedgeneratorで書いたのでその時のこと Pythonで RSSを出力するためのモジュールはいくつかあるが、比較検討した結果 Django由来と言われる feedgenerator を採用してみることにする。 フィードの構築 entriesは出力したいエントリのリスト。 title = "My Blog" link = "http://www.example.com/blog/" feed_url = "http://www.example.com/blog/index.xml" description = "私のブログです" # フィードを生成 feed = feedgenerator.Rss201rev2Feed(title=title,link=link,feed_url=feed_url,description=descri
この記事は 2013年4月に STBBS.NET Blogから移動されたものです Springの入門記事は大抵AOPでトランザクション境界を定義するやりかたを紹介している。それはそれでKeep POJOの観点から理想的なのだが、初心者は設定間違いなどにより実際にはトランザクション制御が効いていないようなケースでもそれに気付かず過ごしてしまうかもしれない。AOPを使わず明示的にトランザクション境界をコーディングしてみて、その後にAOPでの解決法へ移行する方がそういったミスを見過ごすことがないという意味では入門に適していると思う。 DefaultTransactionDefinition def = new DefaultTransactionDefinition(); TransactionStatus status = transactionManager.getTransaction(d
レスポンシブ・デザインやモダンなUIコントロールを取り入れた Webサイトを構築する基礎として定番になっている Twitter Bootstrapを AngularJSと一緒に使う方法を紹介する。 Bootstrapが提供するもの その1: あたりさわりのない見た目とレスポンシブな表示を提供するスタイルシート Bootstrapのスタイルシートは、横方向12分割のグリッドでページをレイアウトしつつ画面の大きさによって配分をコントロールできるマルチデバイス向け表示システムと、構成要素の今風な見た目を提供する。デザイナ抜きで動いている開発チームにとっては「とりあえず Bootstrapベースで作っておけば今風の見た目になる」ため極めて有難い存在。 <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/latest/cs
LXCと Dockerを動かすための Linuxカーネルを自分でビルドする DIYな人のために構成情報を記すなど Dockerとは Dockerは、構成済みの Linux環境を最小の手順でダウンロードして稼働させたりそれらをメンテナンスするためのツールで、バックエンドとしては LXC(Linux Containers)を使用している。本記事では、Dockerと LXCを動かすのに必要なカーネルコンフィグについて述べる。 Dockerについての参考記事 Docker: Linuxコンテナを使ってアプリケーションの配置を支援する (InfoQ) Linuxコンテナを手軽に扱えるDockerを使ってみよう | KVH Blog コンテナ型仮想化「Docker 0.7」リリース。主要Linuxディストリビューション全対応、ストレージドライバ同梱、コンテナ命名も可能に - Publickey 米
フォームには「メールアドレス」と「メールアドレス(確認)」欄があり、いずれも必須項目とする。フォームは入力内容が全て正しい時のみ submitできる。 AngularJSに項目が入力必須であることを伝えるには、input要素に required 属性を付ける。要件を満たしていない時に表示するメッセージの表示/非表示は、ng-show属性に フォームのname.input要素のname.$error.required を指定することで制御する。 フォーム全体の入力内容が要件を満たしている時のみ submitボタンを有効にするには、submitボタンの ng-disabled属性に !フォームのname.$validを指定する。 入力内容はメールアドレスとして相応しい文字列でなければならないものとする。 項目がメールアドレスとして正しい文字列であることを AngularJSにバリデーションさせ
最新バージョンのお知らせにあわせて、最近の導入事例などもご紹介します。 前バージョンの公開からしばらく経っていますが、(Portageのメンテナが Xenを毎回壊すのにもめげず)いつも更新はしているんです。 更新履歴 - Walbrix ダウンロード - Walbrix とはいっても、表だった更新内容としてはほとんど Linuxカーネルが新しくなってるだけです。(※更新履歴で言及されていなくてもシステムの細かい各構成要素は全体にわたって更新されています) Linuxカーネルを常に最新にする理由は、それだけ最新のハードウェアに対応できるからです。最近アキバBlogさんがこんな風におっしゃってました。 アマゾンで注文したインテルの特価NICマザー(Intel BLKD33217CK)+Apple Thunderbolt ギガビットEthernetアダプタの組み合わせで、Walbirx http
Javaから Rubyへ! ・・・そんな時期が、俺にもありました。 Rubyの記述力は Javaと比べて本当に魅力的で、設定より規約だ!ダックタイピングだ!なんていいながら一時期みんなして Railsに群がってたんだけど。互換性がそれほど重視されないから言語やフレームワークのバージョンアップに置いて行かれるとひどい目にあうし、タイプミスひとつさえテスト回してやらないと拾えないし、なにより実行速度がひどく遅い。そうこうしているうちに Javaの方はアノーションが積極的に使われる始めることで設定ファイルは小さくなったし、動的な型のほうが柔軟でいいというのは誰が言い始めたのか知らないが実は気のせいじゃないかと皆が気付き始めるのも無理はないのだ。 やあ、Javaへお帰りみんな。 そうして Javaに帰って来たはいいけど、やっぱりJavaでWebアプリケーションを作るのには極めて鬱陶しい要素が相変わ
EclipseにRSE(Remote System Explorer)プラグインをインストールすると、SSHでリモートホストのシェルを使ったり、ファイルを転送したりできる。 Eclipse 3.6になってまた多少導入手順が変わっているためここに書いておく。 Eclipse RSE Pluginのインストール手順 メニューから Help -> Install new software を選択 Work with: ドロップダウンから Helios - http://download.eclipse.org/releases/helios を選択 絞り込み用のテキストボックス(type filter textと書いてある所) にremote system と入力し(Enterキー不要)、選択肢に出てくる Remote System Explorer End-User Runtime Remot
次の記事 ≫SpringでJNDIを提供する 続き この記事は 2013年4月に STBBS.NET Blogから移動されたものです 「え、それって<jee:jndi-lookup/> のこと?」 ・・・だったらわざわざブログのエントリなぞ起こさんわい。JNDIを参照する側ではなく、提供する側の話。 Springは JNDIを参照することは出来るけど、JNDIサービス自体は提供していない。 ふつう JNDIはアプリケーションサーバが提供するものなので(ついでに言えば Java EEのサービスなので) Springの守備範囲ではないのだが、何らかの理由でユニットテストのターゲットが JNDIを参照しているとか(レガシーなSLSBを使い回してるとか、中のJRubyで activerecord-jdbc-adapterを使ってるとかね)、ユニットテスト用の Bean定義ファイル内でもデータソース
次のページ
このページを最初にブックマークしてみませんか?
『www.walbrix.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く