タグ

ブックマーク / postd.cc (38)

  • GoogleのQUICプロトコル:TCPからUDPへWebを移行する | POSTD

    QUIC(Quick UDP Internet Connections)プロトコルは、TCPではなくUDPをベースとして開発された、全く新しいWeb向けのプロトコルです。 (冗談で) TCP/2 と呼ぶ人までいます。 私がQUICについて知ったのは数週間前のことです。 SysCast Podcastcurlとlibcurlについてのエピソード を聞いていた時でした。 QUICプロトコルの当に面白い点は、UDPへの移行というところだと思います。 現在、Webの伝送プロトコルは、信頼性を確保するため、TCP上に構築されています。このTCP接続を開始するためには、 3wayハンドシェイク が行われています。つまりこれは、接続を開始するたびにラウンドトリップ (ネットワークパケットの往復) が追加されるということであり、新たな接続先に対し大幅な遅延を生じさせているのです。 (出典: UDPを介

    GoogleのQUICプロトコル:TCPからUDPへWebを移行する | POSTD
  • 私のURLはあなたのURLとは違う : curl作者の語る、URLの仕様にまつわる苦言 | POSTD

    1996年にcurlプロジェクトの先駆けとなるhttpgetを始めたとき、私は初めてURLパーサを書きました。当時はまだ、ユニバーサルアドレスは URL : Uniform Resource Locators と呼ばれていました。その仕様は1994年にIETFによって発行されたものでした。この”URL”という用語からインスピレーションを得てツールとプロジェクトに命名したのが curl でした。 URLという用語は後に事実上、 URI : Uniform Resource Identifiers (2005年発行)に変わりましたが、「オンラインでリソースを指定する文字列のための構文と、そのリソースを得るためのプロトコル」という、基的な点は変わりませんでした。curlでは、この構文仕様RFC 3986の定義に従う”URL”を許容するとうたっていますが、それは厳密には正しくありません。その理由

    私のURLはあなたのURLとは違う : curl作者の語る、URLの仕様にまつわる苦言 | POSTD
  • 恐竜に教える現代のCSS – Part 2 | POSTD

    CSSプリプロセッサで新構文を使う 以上、CSSを使った基的なスタイル指定とレイアウトを取り上げました。次に、CSS自体を言語として扱いやすくするために作られたツールについて説明します。まずはCSSプリプロセッサです。 CSSプリプロセッサを使うと、別の言語で記述したスタイルをブラウザが解釈できるCSSに変換する、ということが可能になります。これは昔、ブラウザへの新機能の実装が遅々として進まなかった頃は重要事項でした。最初のメジャーなCSSプリプロセッサは Sass で、2006年にリリースされました。新しい簡潔な構文(括弧に代わるインデント、セミコロンを使わないなど)と、変数、ヘルパー関数、演算など、CSSには欠けていた高度な追加機能が特徴です。変数を伴うSaasを使って先の事例のカラーセクションを記述すると、次のようになります。 $dark-color: #4a4a4a $light

    恐竜に教える現代のCSS – Part 2 | POSTD
  • 40行以内で正規表現エンジンを構築 | POSTD

    最終目標は、最小限のコードで正規表現ユースケースの大部分をカバーできるくらい十分堅牢な構文を提供することです。 1文字と一致させる まずはじめに、1文字のパターンと1文字で構成される文字列を引数に取り、一致するかしないかを示すブール値を返す関数を作成してみます。1文字のパターンである . はワイルドカードとされ、任意の文字リテラルと一致します。 下記のようなかんじです matchOne('a', 'a') -> true matchOne('.', 'z') -> true matchOne('', 'h') -> true matchOne('a', 'b') -> false matchOne('p', '') -> false function matchOne(pattern, text) { if (!pattern) return true // 任意テキストが空パターンと一致

    40行以内で正規表現エンジンを構築 | POSTD
  • Unixコマンド”yes”についてのちょっとした話 | POSTD

    知っているUnixのコマンドで一番シンプルなものは何ですか? 例えば echo という、stdoutに文字列を出力し true を返す – すなわち常に0の終了コードで終了するシンプルなコマンドがあります。 シンプルな、と言えば yes もそうでしょう。引数なしで実行すると、改行されたyが無限に出力され続けます。

    Unixコマンド”yes”についてのちょっとした話 | POSTD
  • 私たちはいかにして環状線で”悪さをする列車”を捕まえたか | プログラミング | POSTD

    文:Daniel Sim 分析:Lee Shangqian、Daniel Sim、Clarence Ng ここ数ヶ月、シンガポールのMRT環状線では列車が何度も止まるものの、その原因が分からないため、通勤客の大きな混乱や心配の種となっていました。 私も多くの同僚と同じように環状線を使ってワンノースのオフィスに通っています。そのため、11月5日に列車が止まる原因を調査する依頼がチームに来た時は、ためらうことなく業務に携わることを志願しました。 鉄道運営会社SMRTと陸上交通庁(LTA)による事前調査から、いくつかの電車の信号を消失させる信号の干渉があり、それがインシデントを引き起こすことが既に分かっていました。信号が消失すると列車の安全機能である緊急ブレーキが作動するため、不規則に電車が止まる原因となります。 しかし8月に初めて発生した今回のインシデントは、不規則に起こっているように見えるた

    私たちはいかにして環状線で”悪さをする列車”を捕まえたか | プログラミング | POSTD
  • ゲームをプレイするアルゴリズムを選択するためのアルゴリズム | POSTD

    この記事は当初、私たちの論文を紹介する簡単な投稿のつもりだったのですが、最終的に膨れ上がってしまいました。結果として、十分な内容が詰まったものになったと思います。 ビデオゲームは、人工知能アルゴリズムをテストする最良の方法ではないでしょうか。 少なくとも私は以前に、このことについて(ある程度の分量で)持論を展開しました。 ビデオゲームでは可能で、例えばロボットにおける問題などでは不可能なものの1つとして、同じアルゴリズムをたくさんのゲームで素早く簡単にテストできるということが挙げられます。ちなみにそのことは、 他のゲームベースのAIテストベッドに対して一定の優位性 を持つ The General Video Game AI Competition (GVG-AI)の指針となる原則の1つでもあります。 GVG-AIフレームワークに実装された数種類のゲーム。 現時点では、実質的にすべての種類の

    ゲームをプレイするアルゴリズムを選択するためのアルゴリズム | POSTD
  • 会話型UIの未来はハイブリッドインターフェースだ | POSTD

    2016年は何もかもが会話型の年です。世界中でメッセージアプリの会話が飛び交い、アプリストアでの再訪率もエンゲージメント率も信じられないほど高くなっています。全てのコミュニティ、電子マーケット、オンデマンドサービス、デートアプリ、ソーシャルゲーム、eコマースの製品が、現在あるいは近い将来において、再訪、エンゲージメント、使用を急増させるエクスペリエンスの要素としてメッセージングの機能を持つでしょう。 こういう全てのアクティビティにともなって、会話型UIに関して多くの議論が重ねられてきました。また、単純なコマンドと、単純なレスポンス(多くはテキストですが、時には写真と組み合わされることもあります)において、人間とコンピュータのコミュニケーションのパターンでメッセージや音声のやり取りがどのように組み合わされるかを議論しました。私はテキストと写真が好きなことは好きなのですが、リッチでグラフィカル

    会話型UIの未来はハイブリッドインターフェースだ | POSTD
  • 人間らしいGitのエイリアス | POSTD

    断固としてコンピュータ言語を拒絶する 私の知っている最も一般的な .gitconfig は、ユーザ名の設定だけが記されたものです。そして、その次に一般的なものはこれです。 [alias] ci = commit cia = commit -a cam = commit --amend cama = commit --amend -a cl = clean cldf = clean -df res = reset resa = reset HEAD ... # 82 more 4-character aliases このコンフィグは、要するにあなたの頭の中のスペースをキーストロークに置き換えます。短縮コマンドのエイリアスを覚えれば、タイピング数の節約が可能です。しかし私はこれが好きではありません。私はタイプミスをしますし、睡眠不足なこともたまにあるので、このエイリアスではやりづらくなってしま

    人間らしいGitのエイリアス | POSTD
  • Git Undo エイリアスを定義する | POSTD

    (注:2017/06/22、いただいたフィードバックを元に翻訳を修正いたしました。) このような経験はありませんか?「ローカルのコミットをし過ぎてしまったことに急に気づいて ローカルコミットを書き直している最中 、rebaseしすぎてしまい、自分が思い描くような履歴になっていなかった」。どうですか? 私はあります。そのような時、「ただ CTRL + Z で開始時に戻れればいいのに……」と思います。もちろん、決してそんなに単純ではありません。 GUI でさえもです。 そんな絶望的な瞬間を経験することがあったので、 git undo コマンドを独自に作成する決心をしました。以下に私のアイデアと、そこに行き着くまでの過程を紹介したいと思います。 Reflog Gitのundo操作を行うために私が最初に目を付けたのは、reflogです。「 reflogとは何だろう? 」と思うかもしれませんね。Gi

    Git Undo エイリアスを定義する | POSTD
  • try { return } finally {} | POSTD

    class Test { public int aaa() { int x = 1; try { return ++x; } catch (Exception e) { } finally { ++x; } return x; } public static void main(String[] args) { Test t = new Test(); int y = t.aaa(); System.out.println(y); } } 上の質問に回答する前に、次の問題には答えられるでしょうか? try ブロック内に return 文がある場合、 finally ブロックは return の実行時に処理されるのでしょうか。 finally が実行されるなら、いかにして return と finally の両方の実行が実現するのでしょうか。 もし答えが分からなければ、どうぞこのまま読み進め

    try { return } finally {} | POSTD
  • もしもディスプレイが壊れたら(ヒマラヤで) | POSTD

    もしラップトップのディスプレイが壊れたら、文句を言いつつもお金を出して修理してもらうのが普通でしょう。修理用のパーツが届くまでの間は、外付けディスプレイでしのぐのでしょう。面倒ではあるけれど、それで作業が止まってしまうわけではありません。でも、いちばん近い町までバスで2日かかるうえに、貴重品を安心して送れるサービスも整っていない場所にいるとしたらどうでしょう?私の置かれた状況がまさにそれでした。インド北部のラダック、ヒマラヤに囲まれたところでそんな目にあったのです。私がここに来たのは、日々の仕事から離れて執筆に専念するためでした。執筆にはコンピュータが欠かせません。でも、日々の生活はそれほどコンピュータに依存していなかったので、ハッカーらしい解決策をゆっくり考えてみました。 私のハックのポイントは、スマホを「モニター」として使ったことです。VNCやXのポートフォワーディングで映像出力を直接

    もしもディスプレイが壊れたら(ヒマラヤで) | POSTD
  • 『モンスターワールドII ドラゴンの罠』1989年オリジナル版のリバースエンジニアリング:正確性の探究 | POSTD

    こんにちは、Lizardcube社(現在フランスのパリを基点にしています)のOmarです。私は新作ゲーム「 Wonder Boy: The Dragon’s Trap 」のテクニカルディレクタ兼プログラマです。このゲームは、1989年にセガ/ウエストンにより発売された『モンスターワールドII ドラゴンの罠』のリメイク版です。このオリジナルは、初期のmetroidvaniaスタイル( 訳注:メトロイド(METROID)や悪魔城ドラキュラ(Castlevania)風 )のアクションアドベンチャーであり、カルト的な古典作品になっています。我々はこのゲームのライセンスをオリジナルの開発者から買い取りました。ゲームは DotEmu で公開される予定です。 メカドラゴンの呪いにより半人半竜のモンスターにされてしまった孤独な冒険者の、一生に一度の挑戦が始まる! 姿を変えられたアンチヒーローは呪いを解く方

    『モンスターワールドII ドラゴンの罠』1989年オリジナル版のリバースエンジニアリング:正確性の探究 | POSTD
  • 一から学ぶベジェ曲線 | POSTD

    (編注:SVGアニメーションを元記事にならい追加しました。リクエストありがとうございました。) 皆さんは線分のことをどう表現しますか? 線分は、端点によって考えられるかもしれません。その端点を P0 、 P1 と呼ぶことにしましょう。 線分を厳密に定義するならば、「 P0 と P1 を結ぶ直線において、 P0 と P1 の間にある全ての点の集合」と言えるかもしれません。これは以下のように表せるでしょう。 便利なことに、上記の定義から、その線分上のどこにある点の座標でも簡単に求めることができます。例えば、中点は L(0.5) にあります。 実は、2点間のどんな値でも、任意の精度で 線形補間する ことが可能です。そのため、時間関数 L(t) の t で線をたどるといった、より複雑なことができるのです。 ここまで来ると、「それが曲線と何の関係があるのか?」と不思議に思うかもしれません。2つの点だ

    一から学ぶベジェ曲線 | POSTD
  • どれだけ速く文字列からスペースを削除できるのか | POSTD

    時によってプログラマは文字列から不要な文字を取り除きたい場合があります。例えば、テキストの一部からすべての行の末尾文字を削除したいとします。 その時、全スペース(‘ ‘)や改行コード(‘\n’および‘\r’)を削除する問題を考えてみましょう。 効率的に実行するにはどのような方法がいいのでしょうか。 size_t despace(char * bytes, size_t howmany) { size_t pos = 0; for(size_t i = 0; i < howmany; i++) { char c = bytes[i]; if (c == '\r' || c == '\n' || c == ' ') { continue; } bytes[pos++] = c; } return pos; } 上記のコードはUTF-8でエンコードされた文字列で動作します。UTF-8がASCII

    どれだけ速く文字列からスペースを削除できるのか | POSTD
  • 確率的プログラミング | POSTD

    この数年で、プログラミング言語(PL)や機械学習のコミュニティは 確率的プログラミング(PP) を用いて、それぞれに共通する研究の関心事を明らかにしてきました。その概念は、抽象化のような強力なPLのコンセプトを”エクスポート”し、現状では複雑で困難な作業である統計的モデリングに再利用することができるかもしれない、というところにあります。 (講義ノートの 最新版 を閲覧したい方は、リンクをクリックしてください。ソースは GitHub に投稿してあります。誤りを発見した場合は、Pull Requestを送信してください。) 1. 何、そしてなぜ 1.1. 確率的プログラミングは○○○ではない 直観に反して、確率的プログラミングとは確率的に振る舞うソフトウェアを書くことでは ありません。 例えば、暗号のキー・ジェネレータやOSカーネルでの ASLR の実装、または回路設計のための 焼きなまし法

    確率的プログラミング | POSTD
  • The Little Printf : 「我々はなぜプログラミングをするのか?」を追う寓話 | POSTD

    この文章は、2015年10月9日にシカゴで開かれたカンファレンス、 CityCode でのプレゼンテーションを書き起こしたものです。同じ内容を ビデオ と印刷向け PDF文書 でも公開しています。 — Chapter 1 私は、コンピューターやテレビゲームが身近になる前に生まれてラッキーでした。友達や兄弟と外に出て遊び、自分自身で遊びを発明するという機会に恵まれたのですから。 小枝を即座に弓や銃や剣や望遠鏡に見立てたりして、自分たちがヒーローになったりもできました。小枝は何にでもなりましたが、ブーメランにはなりませんでした。一度投げた小枝は自分で取りに行かなければならないのでね。 成長する過程のどこかで、やがてそういう風に遊ぶことが恥ずかしくなってきます。他の子供たちが「大人らしく振舞うことが格好いい」と考えているのに、自分だけが松ぼっくりを手榴弾に見立てたり、魔法の力を持っているかのよう

    The Little Printf : 「我々はなぜプログラミングをするのか?」を追う寓話 | POSTD
  • Go言語の並行性を映像化する | POSTD

    Goというプログラミング言語の強みの1つは、 Tony Hoare考案のCSP に基づくビルトインの並行性(Concurrency)です。Goは並行性を念頭にデザインされているため、複雑に並行したパイプラインの構築を可能にしています。でも、それぞれの並行性パターンがどのように見えるものなのか気になったことはありませんか。 もちろん、気になったことはあると思います。恐らくそれぞれ形は違っても、誰もが頭に描いているのではないでしょうか。もし、「1から100までの数字」について聞かれたら、無意識に頭の中で数字のイメージを思い浮かべると思います。例えば、私の場合、自分の前から1から20までがまっすぐに並び、21以降は90度右に曲がり1000以降まで続くイメージが浮かびます。これは多分私が幼稚園の時に教室の壁に沿って数字が貼られていて、ちょうど角に数字の20があったからなのだと思います。別の例えをす

    Go言語の並行性を映像化する | POSTD
  • Python 3誕生の理由 ― つまり、なぜunicode/str/bytesの仕様は変更されたのか | POSTD

    12月、私は PuPPy(the Puget Sound Python users group)の会合でQ&A セッション を行いました。そこでようやくPython 3が誕生した理由と、string/bytesに関する全てを説明しました。Python 3が作られた理由をユーザはもう知っているはずだと思っていたので、私はこの説明で称賛を得たことに、ちょっと驚きました。後で考えてみると、Pythonに詳しい人もそうでない人も含めて大多数の人が、その理由を探すように言われたり、好奇心からその理由を探し当てられるなどと考えた私が愚かでした。ですから、このブログの記事で、Python 3が存在する理由をわかりやすく説明します。後方互換性の全くない unicode / str / bytes の仕様変更は、Python 3のコードの移植の中でも当に難解な部分ですので、私たちがその仕様変更を選択した理

    Python 3誕生の理由 ― つまり、なぜunicode/str/bytesの仕様は変更されたのか | POSTD
  • アーキテクチャよりも設計を重視しよう – 米政府18Fチームの提案 | POSTD

    注釈: CASH LAYER:キャッシュレイヤ FRONT END:フロントエンド ASSET SERVE:アセットを供給 WEB SERVER W/ROUND ROBIN FAILOVER:ラウンドロビンとフェールオーバーを実装したWebサーバ THE CLOUD:クラウド ALL READS! :全ての読み込み WRITES:書く READS:読む MASTER:マスタ INPORTANT POINTY THINGS:重要な鋭い情報 MULTI MASTER DB CLUSTER:複数のマスタからなるデータベースの集合体 「エンジニアはまずアーキテクチャの全体像から始めるべき」、というのが先人たちの知恵からの教訓となっています。データベースを使ったサービスが他のサービスと関係する様子を、線や矢印で表したのが上の図です。キャッシュレイヤ、ロードバランサ、その他の複雑な形も上図の情報フロー

    アーキテクチャよりも設計を重視しよう – 米政府18Fチームの提案 | POSTD