Yahoo!ローカルサーチAPIで最速マクドナルド案内 リンクを取得 Facebook Twitter Pinterest メール 他のアプリ 9月 19, 2011 Fastest fastfood Yahoo!ローカルサーチAPI で最速マクドナルド案内を作ってみました。開くだけでGeolocation APIで取得した現在位置に基づいて、最寄りの結果を表示します。 結果の表示には最近リリースされた 経路地図API を使っています。 リンクを取得 Facebook Twitter Pinterest メール 他のアプリ コメント
[linux] ping は通るのに No route to host と言われる 9月 27, 2012 ping による疎通は確認できるのに、いざ ssh などで繋ごうとすると No route to host というエラーで即座に接続失敗し途方に暮れる場合、おそらく原因は接続先のホストの iptables によりパケットがブロックされ、到達不能を意味する ICMP パケットが返ってきたことによります。 以下のコマンドで INPUT ポリシーをチェックします。上から順にマッチさせていき、マッチし次第ジャンプして終わるので、デフォルト条件の設定されていそうな一番下の行が肝心です。 # /sbin/iptables -L --verbose を追加してブロックしているポリシーのカウンタを見ながらブロック状況を観察できます。 # /sbin/iptables -L --verbose おそらく問題となっているのは INPUT ポリシー最下行で全てのパケットにマッチするこういう行です ... -j REJECT --reject-with icmp-host-prohibited 追加の説明 ファイアウォールの良くある動作として、不都合なパケットの受信を単に無視する動作ならタイムアウトとなります。しかしクライアントから見て TCP や UDP でパケットを送信した後、ICMP で Destination Unreachable Message が届いたときは親切にも No route to host と案内してくれるようです。 ちなみに icmp-host-prohibited は ICMP Unreachable Message の コード10 であり、経路上の障害などを調査するためのコマンド traceroute の結果に !X や !10 と表示されるようです。 参考 Man page of IPTABLES traceroute - Wikipedia Internet Control Message Protocol (ICMP) - Wikipedia 続きを読む
Chrome でダウンロードしたファイル名の一部がハイフンになる 12月 13, 2014 Google Chrome で Content-Disposition ヘッダでファイル名に時刻 (12:34:56) のような文字列を入れてダウンロードするとなぜか勝手に 12-34-56 のようにハイフンになってしまう理由が良く分からなかったのですが、Windows ではそもそもファイル名にコロンは使えないので、安全のため全プラットフォームでファイル名にコロンを含む文字列を設定しないようになっているからみたいです。 変換対象の文字一覧は、 filename_util_unsafe.cc の illegal_characters に入っていて、変換先がハイフンになる理由は、 filename_util_internal.cc の GetSuggestedFilenameImpl でコールバック関数 replace_illegal_characters_callback を第二引数を '-' として呼び出しているからのようです。 ReplaceIllegalCharactersInPath の使い方は変換先を ' ' にしたり '_' にしたりするバリエーションがあったので、必ずしもハイフンに変換されるという訳ではないみたいです。 リンク https://chromium.googlesource.com/chromium/src.git/+/39.0.2171.95/net/base/filename_util_unsafe.cc https://chromium.googlesource.com/chromium/src.git/+/39.0.2171.95/net/base/filename_util_internal.cc 続きを読む
ISUCON12 予選突破しました #isucon 7月 26, 2022 概要 2022年7月23日土曜日に、ISUCON12のオンライン予選が開催され、チーム名 hidekiy で何とか予選突破出来たので、参加記録を残しておきます。 全体指針の検討 最初にざっくりアプリを触ってみて、マルチテナントと沢山のAPIが入り混じっていて大変難しいと思いながら、コードとクエリを確認して明らかに直した方が良さそうな所として、2か所発見しました。 1か所目がMySQL側のvisit_historyで、これは集約して来訪時刻の最小値のみが使用されているため、最小じゃないレコードは不要そうでした。2か所目がSQLite側のplayer_scoreで、スコアの最新値のみが使用されているので、そうじゃないレコードは書き込まなくても良さそうでした。そこで、2か所とも、初期データとアプリの書き込み処理を、どちらも修正する事にしました。 また、SQLiteをMySQLに載せ替えるかという事に関しては、意味深な変換スクリプト (~/webapp/sql/sqlite3-to-sql) が同梱されていた事から、そもそもそういう問題ならこの機能は自力で用意させるはず?とメタ推理し、このルートは大変不審であると考えたので、誘惑に惑わされず、載せ替えは無しで進める事にしました。 visit_historyの改良 visit_historyに関して、初期データを更新 (@k_enokiがいい感じにやってくれました) し、アプリ側でも2件目以降の登録を阻止するために、(tenant_id, competition_id, player_id) でユニークインデックスを設定し、Duplicate Key Errorを無視するコードをアプリ側に追加して、これはスムーズに完成しました。 スコアは初期スコアからほぼ変化なし (4000程度) です。 player_scoreの改良 player_scoreに関しては、初期データを更新するため、~/initial_dataのSQLiteの各ファイルに以下のようなクエリ: delete from player_score where id in ( select id from ( select id, row_number () over ( partition by tenant_id, pl 続きを読む
コメント
コメントを投稿