サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
kanatoko.wordpress.com
先日NewRelicの清水さんにマンツーマンでオブザーバビリティの話をきかせてもらえるという貴重な経験をした。長年アプリケーションレイヤーも含んでシステム運用の経験があると「あるある」な話なのだが、次のようなことが起こる。 何か不具合や障害が起こる 該当時刻のエラーログなどを見るが情報が少なく、原因を特定する決定打に欠ける 次回、また同じことが起こったときには原因を特定できるように、printfデバッグするコードを大量に埋め込んだバージョンに更新して、デプロイする もう一度起こるのを待つ これは最初の状態が「オブザーバビリティに欠けた状態」だったと言える。めちゃ納得してEnter Sandmanくらいヘドバンして頷いてしまう。 僕の経験上このようなケースを避けるために良い結果を出してきたのは、Javaの例外が出た箇所でスタックトレースを取得しておくことだ(僕らは単にログファイルに吐いておい
『Wizard Bible事件から考えるサイバーセキュリティ』のクラウドファンディングが開始されました。 Coinhive事件やアラートループ事件を広め、日本の未来を明るくしたいという願いからこの企画が生まれました。 ご支援をよろしくお願いします🙇♀️https://t.co/5JhJmY0Dwt — ipusiron@クラウドファンディング中 (@ipusiron) April 27, 2021 こちらの件、無事にクラウドファンディングが成立したとのことで、おめでとうございます(私も1部購入しておきました)。 ここで取り上げられるであろういくつかの事件について、僕はざっと見た程度で細かく情報を確認はしていないけれど、何人かの方が警察によって(おそらく不適切な形で)精神的にひどい目にあわれたことについて、非常に残念なことだったと思います。 事件の当事者以外のIT技術者(僕も含む)にとっ
malaさんも2年程前に書かれているのですが、未だに国内のCSRF対策の解説で「セッションIDをCSRFトークンとして使う」というアイデアが披露されていて辟易します。 喩え話は好きでないですが、「複数のサイトで同じパスワードを使っていたら一箇所から漏洩し、パスワードリスト攻撃を受けた」というのを彷彿します。セッションIDとCSRFトークンは単純に別の値にした方がいいです。 さてこのエントリの本題はここからで、CSRFトークンよりもむしろセッションIDの方です。最近は443番ポートへクロスサイトでリクエストを大量に送らせてそれをキャプチャし、すべてのリクエストに共通して含まれてくるCookie中のセッションIDを解読するBEAST/CRIME系の攻撃が知られるようになりました。 これらは基本的にはTLS/SSLの問題でありそれぞれ個別に対策が存在しているものの、基本的には「セッションIDがず
今さら確認するまでもないが、サービスの成長に合わせてこまめにサーバリソースを追加し、負荷をうまく分散して処理していく戦略がスケールアウトで、図の上がこれを示す。 主に安価なコモディティサーバを使うイメージである。 一方、図の下は、最初から高価で高性能のサーバを買ってしまい、それをぎりぎりまで使い切って、あるタイミングでまた高性能のサーバを追加するイメージである。まぁ、一昔前まで当たり前だと考えられていたアプローチである。 上だと最終的に6台のサーバが、下だと最終的に2台のサーバがある感じである。 図中の青い部分が「買ってしまったけど使っていない」リソースであって、無駄なコストである。 上の方が、青い部分の面積は小さく、無駄なコストを省くことに成功している。スケールアウト戦略を選択する理由にはいくつかあるが、そのうちでポピュラーなものがこの「無駄なコストの削減」である。 しかしこのときサーバ
かつてバージョン管理やCIなどが存在しなかった頃 人々は手作業で(FTPなどを使い)PHPファイルをアップロードすることで、本番環境へデプロイを行っていた 筆者はJavaプログラマだったので 「本番環境でバグが見つかっても、問題のファイルを修正してアップロードすることで、一瞬で修正できる」 というPHPの利点が非常にうらやましかった Javaだとjarに固めてアプリケーションサーバにFTPで上げて再起動する、みたいな感じで非常に面倒くさかったのだ しかし時代は経過し、「ユニットテスト等が行われた後でしか本番環境のファイルが変更されるべきではない」という考え方が常識となってきた こうなると、「手軽にちょちょいと問題を修正する」というPHPの良さは失われることになる ウェブアプリケーションを構成するファイル群が全体としてバージョン管理され、テストをパスしたファイル群のみが本番環境に到達できるの
LMAXという会社はおそらくFX業者で、筆者はLMAXの開発者の講演を、InfoQの動画で何度か見たことがあった。 彼らは非常に特異な集団で、さしずめ「Javaのスピード狂」という感じだ。 印象的なのは、シングルスレッドで仕事を片付けることを強調している点だ。 「Javaならマルチスレッドで並列処理すれば性能が出ると広く思われているが、我々の仕事においてはシングルスレッドが最速だ」というような主張を何度も見た。 ゴールドマンサックスといいLMAXといい、やはり多額の金が動く会社でガチでJavaをやっている連中はカリカリにチューニングするため、技術的には非常に面白い。 彼らがコアのライブラリをOSS化してくれるというのは、金融業界を否定的な目で見る筆者からすると複雑だが、悔しいことに参考になる。 LMAX DisruptorはJavaのライブラリだ。Producer/Consumerパターン
筆者的にはかなりツボな本で、既に2度ほど読み通しています。 今度は実際に手を動かしながら(Wekaを使ったりJavaのコードを書きながら)もう一度読んでみようかと思っています。 18ページあたりから、KnowledgeFlow Environment(KFE)を使ってWekaに格納されているirisのデータをK近傍法で分類する例が始まります。 28ページ真ん中あたりで正規化(1~10程度の値を取る属性と1~1000程度の属性などが混在する場合に、データ間の距離の計算において、後者の属性の影響が強くならないようにすること)が紹介され、下図のようにNormalize(左から3つめ)のが追加されます。 筆者はまず、本書の通りにKFEを使ってみました。 次に、KFEのようなGUIのツールではなく、JavaのコードからIBkクラスを使ったirisデータの分類をしたかったので、Googleで調べながら
↑この本を買ったのだが、95ページ周辺にむちゃくちゃな事が書いてあって萎えた。 統計学では「仮説検定」という手法があります。 しかし、仮説検定は(中略)、人数が(サンプルサイズ)が多い場合には、ほとんどの結果が「統計的に有意な差がある」という結果になります。 差がわずかしかない二つの集団を比べる場合は、そんなことはない。 そもそも「サンプルサイズが多い場合」の定義が書かれていない。「多い」ってどのくらい? 「ほとんど」ってどのくらい? 結局、著者の個人的な経験にのみ基づく内容であって、データ「サイエンス」とタイトルに付く本に書くような話じゃない。 このページの暴走はすごくて、続いて次のような記述もある。 ビッグデータと騒がれているような現在においては(中略)、「仮説検定をしないと統計的に差があるかわからない」くらいの差は意味があるとは言いがたいのです。 お前は何を言(ry 続いて、次も95
ウェブアプリケーションの開発において、CI(Continuous Integration)のサイクルに、クロスサイトスクリプティングやSQLインジェクション等を早期に発見するための脆弱性診断も組み込まれるべきでは?というコンセプトで、新しいウェブサービスを開発しました。現在、アルファ版の詰めに入っている段階です。アルファ版を使ってくれるユーザさん(もちろんアルファ版の段階では無料)を探しています。 VAddy http://vaddy.net/ Jenkins等のCIサーバ上でcommit毎にビルドやユニットテストが実行されるという文化は定着しつつあり、誰もがその良さを実感していると思います。 同じように、セキュリティ面でのテストもCIサーバが自動的に実行してくれれば便利ではないでしょうか。 VAddyはSaaS型のウェブアプリケーション脆弱性診断サービスです。基本的な使い方として、ユーザ
注:このブログを書いている人はデータサイエンス超初心者です。 はじめに 個人的に、2013年はデータサイエンスに興味を持ち、本格的に勉強を始めた年となった。何しろ初心者なので、基礎知識がゼロの状態からスタートしている。そのため、データサイエンスの全体像を把握するという目的で、そこそこの数の書籍を幅広く浅く読んでみるところから開始した。このエントリでは自分用メモの意味も含め、2013年に読んだ中でも特に良かったと思うデータサイエンス系の書籍をピックアップしておく。専門書と読み物が混在している。 「データサイエンス」という言葉について 当初自分がやろうとしているのは「機械学習」なのかと思っていたのだが、データマイニングや統計学、機械学習なども含め、いわゆる「豊富なコンピュータリソースを使ってデータを処理する」ことの全てを一言で言い表すとすると「データサイエンス」が適切だろうと考える。よく「金床
意外とみなさんウェブ上の他人管理のウェブサービスにXSSを打ち込むことについては寛容なんですね。これをやめろと言われると「自由が制限される」ように感じる人も多いみたい。僕の感覚とは違うな。週末に会った人に僕の感覚は少数派っぽいと言われてちょい驚いた。 僕と同じくADでオフィスさんに起こったことをリアルタイムで見ている人と、そうでない人の間に統計的に有意な差wがあるのか知りたいですね。 今ってCTFを中心に情報セキュリティのコミュニティはいつになく盛り上がっているように見えていて、僕はその中に入らないけどいいことだなぁと思っている(ADの消失と、その後数年のtessyさんの活動を見ているので)。 でも、ここでそのコミュニティの中の一人が何かしらの弾みで逮捕されてしまったときにどういうことが起こるのか?ということを想像しても、「XSSは打ってOK!」なのかな。 企業の中にはコミュニティの存在と
「コネクションプールがなぜ必要か?」 まず上記の設問自体がおかしくて、コネクションプールが必要(あるいは適している)場面もあれば、まったく不要である場面もある。必ずしもコネクションプールは必要ではない。コネクションプールにはメリデメが存在する。銀の弾丸ではない。 コネクションプールという言葉から始まってしまうとRDBMSとかのイメージが付きまとってしまうが、これはもう少し抽象化して考えると、オブジェクトプールと呼ばれるデザインパターンのひとつとして捉えることもできる。 オブジェクトプールのメリットは大きく分けて以下の2つ。 ・初期化コストや廃棄コストが高いオブジェクト(データベースのコネクションやスレッド)を再利用可能にすることにより、レイテンシ、スループットやシステム負荷等を改善する ・システム中で使用されるリソース数の上限をコントロール可能にする。 ウェブのシステムのように、クライアン
Dunkheadのロゴ↑は、クラウドソーシングで$499で作ってもらったもの。 何となくロゴが欲しいかな?と思ってイメージを固めるのに20分ほど。Dunkleosteusという昔の魚類(?)を元に、モノクロでシンプルなロゴにすることに決定。 昼食を摂りながらiPadで「cloud sourcing logo」でググって出てきた99designs.comでアカウントを作り、コンテストをスタートするまでさらに20分くらい。 そしてなんと、開始から2時間少し過ぎたころには、もう1つめのエントリーが登場。で、実はこの1つめが、上記のロゴだったりする。 イメージしていた通りのものがコンテスト開始早々いきなり登場したので、夢か何かを見ているのかというくらいビックリした。 コンテストは一週間ほどかけることができるので、冷静に他のデザイナーのエントリーも待ち、じっくり選ぶことに。 プロレベルのデザイナーも
HadoopのReduceに渡されるのはキーと値のリストだが、このとき値のリストに含まれる各アイテム(値そのもの)はソートされていない。ソートされていて欲しい場合にはセカンダリソートと呼ばれるテクニックを使うのが定石とされているが、これは実装の面でも概念的な面でもバッドノウハウ的な側面がある。Hadoopには「キーをソートする」機能は実装されている。そこで、値をキーに入れてしまい、このHadoopに備わっている「キーをソートする」機能によって、実質的に値をソートしようというわけだ。 Map/Reduceというのはキーごとにデータを分割して処理する方法なので、「キーに値が入ったら分割がおかしくなるんじゃ?」と思うのは当然である。キーに値が入っていても、分割に影響しないよう、Partitioningクラスを自分で拡張し、分割の基準となる値(本来のキー)には、値の影響が出ないようにするのだ。それ
注:下記、ただのディスり記事なので、よっぽど暇な人だけ読んで頂きたく。 僕は基本的に技術書については英語の原書を中心に読んでいて、Kindleを愛用している。といっても英語のレベルはそれほど高くないので、内容は大体見当が付くジャンルの本しか、英語では読めない。具体的には、Androidプログラミングとか、Eclipseプラグイン開発とか、Java・MongoDB・Webセキュリティあたり。この辺は英語でも結構なスピードで読める。(最近はデータサイエンス系の勉強もしているのだけれど、そっちはまったくの素人であるため、英語だと、まず単語の意味がわからない。専門用語なので、辞書を引いてもわからず、結果として読むスピードが極端に遅くなる。そのため実質原書だと読めないという状態になり、結果、データサイエンス系の本については殆ど和書を買っている。統計の本とかも同じ。) そんなわけで結構頻繁にAmazo
Perlは、日本国内では私と同年代(30代後半)の人を中心に、相変わらず人気があると思う。 しかし、私がよく見ているStackOverflow/DZone/InfoQ辺りでは、確かにこの数年はあまりPerlを見かけないという感覚があった。 そこで、Googleで『Perl site:stackoverflow.com』『1年以内の記事』のような感じで、いくつかのプログラミング言語の検索結果の件数を調べ、グラフ化してみた。 (;´Д`)…
http://d.hatena.ne.jp/hasegawayosuke/20130302/p1 について サーバ側でセッション管理せずに済むというメリットはでかくていいですね。 ログインの有無も関係なくなるのでカクイイです。 これからの時代はこういうのが主流になるべきという気がします。 デメリットですが ・JavaScript必須(hsgw先生が書いているとおり) ・画面遷移に影響が出る。普通のPOSTと違うので、アプリの挙動に影響がある ・古いブラウザでは動かない という感じでしょうか。 追記: var s = encodeURIComponent( document.getElementById(“mail”).value ) + “&” + encodeURIComponent( document.getElementById(“msg”).value ); みたいに自分でフォーム
Apacheのアクセスログ(commonあるいはcombined形式)をLTSVに変換するツールをJavaで書いてみた。 使い方: mcp.jarをダウンロードし、 cat access_log | java -cp mcp.jar net.jumperz.app.MCP.MCP net.jumperz.io.multicore.example.MCombined2LTSV パースするコードそのものはこんな感じで普通。正規表現は使っていない。たぶんJava1.4以上でコンパイル可能。 こういう処理をさくっとマルチコア対応にするためのフレームワーク、MCPというのを作ったので、早速利用してみると、手元の4コアのマシンでは約140万行/秒(common形式のログ)という爆速で変換が終了する。dankogai氏が書かれているperlスクリプトより約20〜30倍速い(正規表現を使うかどうかという点
RoR 任意コード実行その他祭りの会場一覧 ■PoCアリ https://community.rapid7.com/community/metasploit/blog/2013/01/09/serialization-mischief-in-ruby-land-cve-2013-0156 https://github.com/ronin-ruby/ronin-ruby.github.com/blob/rails-pocs/blog/_posts/2013-01-09-rails-pocs.md https://gist.github.com/4499032 https://gist.github.com/4499030 https://gist.github.com/4499206 https://gist.github.com/4499017 https://github.com/ra
CIのビックウェーブが到来している。 サーバ管理などでも台数が増えてくると必然的に自動化を進めていくことになる。 CI本などを読んでいると、手動の部分は省けば省くほどよい、と主張している印象を受ける。 いわく、手動で作業をしている限り、ミスが発生する可能性がつきまとう、とのこと。 たしかにそれは事実であり、寝不足のときなどにrootでミスオペレーションをしたりして冷や汗をかくことはある。 自動化が進めば、そのようなことは無くなるだろう。 しかし、筆者としても最近ガシガシとサーバ管理スクリプトを自動化していて、ひとつだけ問題があることに気がついた。 単純な手動ミスが減る一方で、それまでに見たことのない(想定外の)エラーや、はじめて遭遇するアプリケーションのおかしな挙動を見逃す可能性が上がるのである。 たとえば、単純なデーモン(Tomcatとか)の再起動を例に考えてみる。 コマンドラインから手
MongoDBをext3とext4でベンチマークしてみたらext4が圧勝だった あたりに関連する話。(ちなみに筆者の環境ではext3でMongoDBを動かしてしまっているため、悲しいことにファイルのアロケーションが起こる度に実質MongoDBがフリーズするような状態になるが、まぁ、だましだまし運用している状態) ext3について、プリアロケートに時間がかかるというのは、必ずしも悪い話ではない。zeroで上書きしているため、ファイルシステム上に(大きな)ファイルが断片化せずに生成されることを保証してくれることに繋がるからだ。 VMware Serverのsparseファイルのせいでひどい目にあったことがあるので、そう感じた。 ext4(とxfs)は非常に早くこのプリアロケートが終わるということで、将来的に断片化を起こしてパフォーマンスがひどいことになるんじゃないの?と感じたが、Wikiped
去年末からコツコツ作り始めたMongoDB用クライアント、MonjaDBをとりあえずリリースしました。 MonjaDB
Asus TransformerはAndroid3.0(3.1にアップグレード可能)搭載の、タブレット型とノートPC型に変形可能な変態端末である。 キーボードは本気で実用性を考慮されて作られており、そのへんのノートPCより(筆者が昔使っていたLet’s NoteやMacBookより)格段に打ちやすい。ヨドバシカメラの店頭で出会った際、キーボードの打ちやすさに感心し、「ノート型のAndroidもこれだけ打ちやすいキーボードが付いてるなら悪くないナァ…」と思ったのだが、その後タブレット部が外れてそのまま使えるということに気がついてノックアウトされ、次の日には買っていた。(いちおう、2chで評判を確かめたので次の日なのです) transformerのキーボードドック部は重く(620g)、タブレット側(680g)と合わせると1.3Kgくらいになってしまうので一般人が持ち歩くにはかなり重い。しかし、
※注 この記事は2009年末にWizardBible Vol.49に寄稿したものである。 VMWareがクソ重くて殺したくなる時に読むべきものという記事で取り上げていただいたところ反響が大きかったようなので、こちらのブログにも掲載しておく。WizardBibleは拡張子.txtのためかSEO的に弱いようなので… — 第1章: もう憂鬱じゃないVMware Server管理者 — 著者:金床 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x00.) はじめに Wizard Bible vol.43にて、VMware Serve
0x00. Clojureでデッドロックは起こるのか? Clojureの並行プログラミングモデルはSTMとagentを中心とした非常に洗練されたものだとされていることがある。Javaでスレッドを生で扱う場合の危険性と対比され、Clojureは開発効率がよく危険性が少ない、と思っているユーザも多いだろう。しかし実際にはClojureのSTMは書き込み競合が発生した場合に非常に遅く、また実際の並行プログラミングのためにはSTMとagentだけではなく他の方法も覚える必要があり、それほどシンプルなものではない。 安全性についてはどうだろうか。Clojureではデッドロックは起こるのだろうか。結論を書いてしまうと、Clojureで書いたアプリケーションもデッドロックを起こす可能性がある。以下にいくつかの例をあげる。 0x01. lockingを使うパターン ClojureにはJavaのsynchr
0x00. Symmetric DSとは Symmetric DSはオープンソースのJava製ソフトウェアで、トリガーベースのRDBMS間レプリケーションを行うソフトウェアである。ライセンスはLGPLだ。先日、Java製の組み込みRDBMSであるH2をレプリケーションする方法がないか探していたところ、H2のサイトからリンクされており見つけた。筆者自身はまだH2/Symmetric DSともに手元で動作確認を行っただけの段階であり、これらがどの程度実用に耐えるクオリティなのかは未知数だが、ドキュメントの整備のされ方やソフトウェアから伝わってくる感触は非常によいものである。 0x01. POSシステムから誕生 RDBMS自身がレプリケーションの機能を持つ場合も多いが、筆者にもっとも馴染みのあるPostgreSQLではレプリケーションのためにさらに別のソフトウェア(pgpool IIなど)を導入
0x00. Clojureがいけてる件について ここ数ヶ月でClojureをどんどん実戦投入してみているが、その成果は素晴らしいの一言に尽きる。Javaでは考えられなかったほどスマートかつ柔軟にデータ処理が可能であり、「あれ、こんなに短い記述でできちゃうのか!」と驚かされることが多い。そんなわけで、何でもかんでもJavaで片付けてきた筆者はここにきてClojureにかなり惚れ込んでおり、電子書籍やらウェブサイトやらで本格的に情報収集を進めているのだが… 0x01. Clojureの並列プログラミング 現時点では、Clojureを実戦投入したのは、ちょっとした処理に使うツール的なものだけである。理由は単に、筆者がまだClojureの初心者だからだ。しかしそろそろメインの仕事であるサーバアプリケーションやウェブアプリケーションでも使いたくてウズウズしてきており、そのような視点からさらに調査を進
0x00. exコマンドとは Eclipse上で開発する場合、悲しいのはviエディタが使えないことである。過去にviに似せた操作を可能とするプラグインを試したことがあるが、満足行く出来ではなかった。そのため、いつしか筆者は「Eclipse上ではごく普通のエディタ操作を行い、ターミナル上ではviを使う」という使い分けに慣れていった。 EclipseのJavaエディタ等も、別に慣れてしまえばそれほど問題はない。筆者はThinkpadタイプの赤ぽっち付きキーボード愛用派であることから、カーソル操作についても手のポジションを変更せずに行えるというのが大きいのかもしれない。EclipseのJavaエディタではコード補完等の便利さが際だつため、特にviじゃなくてもいいな…と思いながらいつのまにか時は過ぎていた。 しかし、このように使い分けることを決めた後でも、いつも「ぬぁ〜、これが使えればナァ(;´Д
0x00. はじめに 前回の記事ではURLConnectionクラスを使ったアクセスについて調査した。今回はSSLSocketFactoryを使い、生のSSLソケットを生成する場合について同様のアプローチを用いる。 0x01. SSLSocketを用いてSSLウェブサイトにアクセス 一般的に、AndroidアプリケーションからHTTPやHTTPSを使ったアクセスを行いたい場合、URLConnectionクラスを用いると思われる。しかしより詳細なコントロールを行いたい場合には、SSLSocketクラスのインスタンスを生成することになるだろう。例えば次のようなコードを使えば、ベリサイン(日本)のウェブサイトにアクセスすることができる。 private String socketTest() { try { SocketFactory sf = SSLSocketFactory.getDefau
次のページ
このページを最初にブックマークしてみませんか?
『JUMPERZ.NET Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く