タグ

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

  • オーディオアプリ開発でありがちな4つの間違い | POSTD

    ここで論じているのは、オーディオアプリの開発者が陥りがちな 4つの間違い 、 より良く開発する方法 、 問題個所の発見方法 です。主に開発者向けの内容ですが、開発者以外の方にも知っておいてもらいたいと思います。ここでは、開発者向けの診断ツールである Realtime Watchdog を紹介し、 人気のあるオーディオライブラリの調査結果 を提示します。 オーディオアプリの開発はとてつもなく楽しいです。やりがいを感じるし、創造力を発揮できる範囲が大きく広がり、ひとたび開発が終われば、 誰かがクリエイティブなツールとして使ってくれるのです! こんな分野は多くないし、この領域で働けるなんて非常に幸運だと自分でも思っています。 しかし、仕事でオーディオアプリを扱う時には深く考えなければならない部分もあります。オーディオアプリの開発者としてユーザに対する責任があるのです。大前提として、ユーザを公共の

    オーディオアプリ開発でありがちな4つの間違い | POSTD
  • AsyncとAwait : コールバック地獄を避けるための最新のやり方、そしてその未来 | POSTD

    (2016/7/7、いただいたフィードバックを元に記事を修正いたしました。) JavaScript、特にNode.jsといえば、 コールバック地獄 がよく連想されます ^(1) 。たくさんの非同期I/Oを扱うコードを書いたことがある方には、おそらく以下のようなパターンはおなじみでしょう。 export default function getLikes () { getUsers((err, users) => { if (err) return fn(err); filterUsersWithFriends((err, usersWithFriends) => { if (err) return fn(err); getUsersLikes(usersWithFriends, (err, likes) => { if (err) return fn (err); fn(null, lik

    AsyncとAwait : コールバック地獄を避けるための最新のやり方、そしてその未来 | POSTD
  • Node.jsのマイクロサービスの構築を通してDockerを学ぶ – 前編 | POSTD

    あなたが真剣に Docker に取り組んで、その全てを学びたいと思っているのでしたら、もう探し回らなくても大丈夫です。 稿では、Dockerがどのように機能するのか、どんな部分が話題になっているのか、そしてマイクロサービスを構築する際の基的な開発作業にどのように役立つのかについて紹介したいと思います。 稿では例として、ローカルで実行するコードからマイクロサービスやデータベースを実行するコンテナまで、バックエンドにMySQLを用いたシンプルなNode.jsのサービスの例を使います。 Dockerとは何か Dockerとは要するに、(仮想マシン用のテンプレートに非常によく似ている) イメージ を作成して、 コンテナ でイメージのインスタンスを実行できるソフトウェアです。 Dockerには、 Docker Hub と呼ばれる大量のイメージのリポジトリがあり、これを利用して作業を始めたり、無

    Node.jsのマイクロサービスの構築を通してDockerを学ぶ – 前編 | POSTD
    craf
    craf 2016/06/30
  • 私の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
    craf
    craf 2016/06/05
  • C++11のスレッド、アフィニティ、ハイパースレッディング | POSTD

    背景と導入 何十年もの間、CやC++の標準規格は、マルチスレッディングや並行処理を「その標準の範囲を超えたもの」として扱ってきました。標準規格の目的である”抽象機械”の力が及ばない、”対象依存”という影の世界においてです。メーリングリストやニュースグループの質問には並行処理に関するものが山ほど寄せられましたが、それらにすぐに突き返された回答は「C++はスレッドには関知しません」という何とも冷淡なものでした。この件によって当時のことを思い出す人々は、今後も絶えないでしょう。 しかしC++11の登場で、そんな状況に終止符が打たれたのです。C++標準化委員会は、時代の流れに乗らないと、この先C言語が取り残されてしまうと悟ったのでしょう。彼らはスレッドや同期メカニズム、アトミック操作、メモリモデルなどの存在に、ようやく気付いたわけです。そして標準規格として、C++コンパイラやライブラリのベンダーに

    C++11のスレッド、アフィニティ、ハイパースレッディング | POSTD
    craf
    craf 2016/05/27
  • Sublime Textの「あいまい一致」をリバースエンジニアリング | POSTD

    Sublime Text は、私のお気に入りのプログラミング用テキストエディタです。 Sublime Textで気に入っている特徴の1つは、あいまい検索アルゴリズムです。ファイルや関数の検索が超高速なのです。これまで多くの人が、インターネット上で、この仕組みについて質問していましたが、満足の行く回答はありませんでした。そこで、私が自らこれを解明することにしました。 全部読むのが面倒な方へ 文を読まずに最終結果だけ知りたいですか? 了解! 私は、あなたを責めたりしませんよ。 インタラクティブなデモ: こちらをクリック ソースコード: C++JavaScript Sublime Textの仕組み Sublime Textのあいまい一致とは何でしょうか。そして、なぜそれはそんなに賢いのでしょうか。聞いてくれてうれしいです。 Sublime Textには、2つの非常に便利なナビゲーション関

    Sublime Textの「あいまい一致」をリバースエンジニアリング | POSTD
  • 週末の思索:私がローカルISPをハッキングした手順、そしてインターネットで身を守るための一般的なアドバイス、学び | POSTD

    週末の思索:私がローカルISPをハッキングした手順、そしてインターネットで身を守るための一般的なアドバイス、学び 長文を読む時間のない読者へ: 時間差SQLインジェクションについて最低限の知識がある読者を想定しています。技術用語を読みたくない場合は、結末の重要なアドバイス、学びまでスクロールダウンしてください。 先週、長い週末を過ごすため、故郷であるNagpurを訪れました。私はNagpurのあらゆるものを深く愛していますが、インターネットだけは別です。十分なFUPの光通信やブロードバンドを提供するまともなインターネットサービスプロバイダ(ISP)がないからです。家族は某ローカルISPの1か月2Mbps 50GBのプランで手を打っています。 FUPとは? 多くのISPは、通信量が制限に達すると速度を落とすFair Usage Policyという制度を採用しています。例えばデータ通信量が50

    週末の思索:私がローカルISPをハッキングした手順、そしてインターネットで身を守るための一般的なアドバイス、学び | POSTD
  • 1995年、セガサターンでのプログラミング | POSTD

    この記事は、1995年にNeversoft社で初となるゲーム「Skeleton Warriors」を開発した際に書いたドキュメントです。これは、私が68Kアセンブリ言語を使わずに作った初めてのゲームです。 こちらの写真から、当時の仕事環境を窺い知ることができます。右側にあるのがセガサターン用ソフト開発キット(”スモールボックス”とICEで構成されています)です。 ゲームの状態 以下のドキュメントで、セガサターン用ゲームソフト「Skeleton Warriors」用に書かれたコードを簡単に説明します。また、その中には現在でも使われている方法が多くありますので、そのいくつかをご紹介します。 このドキュメントの主な目的は、それぞれのモジュールの働きと、その対話方法を説明しながら、DanとKen、Jamesに現代のコードについて効率的に理解してもらうことです。またMick(筆者)が書いた残念なコー

    1995年、セガサターンでのプログラミング | POSTD
    craf
    craf 2016/05/10
  • プログラマの三大美徳の啓発の勧め : 怠惰、短気、傲慢 ― JavaScriptで遅延評価 | POSTD

    (編注:2016/5/31、頂いたフィードバックを元に記事を修正いたしました。) larry wall 怠慢と勤勉 コンピューティングにおいて、”laziness(怠惰)”は幅広い意味の単語です。大抵は、もし必要が無ければ何もしないということを意味します。その正反対を指すのは”eager(勤勉)”です。後で必要になる場合に備えて、できるだけ働くということを意味します。 以下のJavaScriptを見てみましょう。 function ifThen (a, b) { if (a) return b; } ifThen(1 === 0, 2 + 3) //=> undefined ここで、問題です。「JavaScriptは 2+3 を評価する?」答えはお分かりですね。「評価する」です。呼び出し関数に、引数を引き渡すこととなると、JavaScriptは eager(勤勉=先行評価) で、式の全てを

    プログラマの三大美徳の啓発の勧め : 怠惰、短気、傲慢 ― JavaScriptで遅延評価 | POSTD
  • C++でブルームフィルタを実装する方法 | POSTD

    ブルームフィルタとは、「ある要素が集合のメンバである可能性があるか、それとも確実に集合のメンバではないか」を効果的に確認することのできるデータ構造です。この記事では、C++でブルームフィルタを実装する簡単な方法をご紹介します。 ブルームフィルタとは何なのか 、また、 その背後にある多くの数学的要素 については紹介していませんので、ご了承ください。これらのトピックに関しては、素晴らしいリソースがあるので、そちらを参考にしてください。 インターフェイス まずは、ブルームフィルタを定義していきましょう。ここでは、3つのパブリック関数を定義していきます。 コンストラクタ ブルームフィルタにアイテムを追加する関数 アイテムがブルームフィルタにある可能性を確認するためのクエリを行う関数 また、フィルタの状態を保持するビットの配列を含んだ、メンバ変数についても定義します。 #include <vecto

    C++でブルームフィルタを実装する方法 | POSTD
  • JavaScriptユーザのための関数型プログラミング(前編) | POSTD

    私が関数型プログラミングについて度々耳にするようになったのは、数カ月前からです。でも当時は、それが何なのか見当もつかず、単なるバズワードだと思っていました。皆さんの中にも、そのような方は多いでしょう。それ以来、私は関数型プログラミングについて深く学び、この言葉を日々聞いてはいるものの内容を理解していない初心者の方のために、分かりやすく説明しようと思い立ちました。 関数型プログラミング言語の話になると、「 Haskell と Lisp は どちらが優れているのか 」という 議論 が 白熱する 傾向にあります。HaskellとLispはどちらも関数型言語ですが、実際には大きな違いがあって、それぞれに長所と短所があります。その具体的な内容については、この記事を読み終える頃には深く理解していただけると思います。この2つの言語には、それぞれから派生した言語があります。その中で恐らく皆さんが耳にしたこ

    JavaScriptユーザのための関数型プログラミング(前編) | POSTD
  • Go言語で利用するLLVM入門 | POSTD

    はじめに LLVMは、コンパイラを作成するための基盤です。2000年にChris Lattnerによって作成され、2003年にリリースされました。それ以来、LLVMリンカ lld やLLVMデバッガ lldb など幅広いツール群を持つ包括的なプロジェクトに発展してきました。 LLVMの秀でた特徴は、一般に LLVM IR と呼ばれる、その中間表現です。LLVMの考え方は、まずこのIRにコンパイルし、次にそのIRを、JITコンパイルする、インタープリタで実行する、または実行しているマシンのネイティブアセンブリにコンパイルするといういうものです。このIRの主なターゲットは、コンパイラです。実際LLVMを使用するコンパイラは、世の中に数多くあります。C言語とC++用はそれぞれclangとclang++、D言語用の ldc2 、RustSwiftなどです。 Emscripten のようなプロジェ

    Go言語で利用するLLVM入門 | POSTD
  • Slack、君と別れようと思う。 | POSTD

    “改革が暴政の負担を軽くしてくれることは決してない。その負担を、単に別の誰かに負わせるだけだ。” George Bernard Shaw こんにちは、Slack。 これは簡単ではないでしょうが、最良の方法です。 君も僕も分かっているように、始まりは とてもすばらしかった のです。僕は爆発しそうなメールの受信箱と共に、君はEメールを過去のものにするという(とてもセクシーな)野望と共に。 ただ、結局のところ、僕らはお互いにとって良かったのかどうか、分からないのです。あるいは、もっと重要なことを言えば、そもそも君と関係を築いたことで、僕と他のものとの間でうまくいかなかったことが解決できたのかどうか、分かりません。 Eメールと僕は問題を抱えていたのを、誰もが知っています。Eメールは、全く新しい世界の活発な探求として始まり、あっという間に世間の期待を超えるレベルにまで拡大しました。僕が気づいた頃には

    Slack、君と別れようと思う。 | POSTD
    craf
    craf 2016/03/31
  • 全てのJSライブラリはTypeScriptで書かれるべきである | POSTD

    私はJavaScriptプログラマで、ライブラリをいくつか作っています。しかし最近では RxJS version 5 のために TypeScript を書いています(RxJS version 5は Angular 2 の内部で使われていますが、Angular 2もTypeScriptで書かれています)。現在私は Cycle.js をTypeScriptで書きなおしているところです。 静的型付けと動的型付けの優劣の話はやや議論を呼ぶ話題なので、その議論をすべて再発させるつもりはありません。しかし、私は、 沢山の開発者に使われることを意図した 全てのJavaScriptライブラリはTypeScriptで書かれるべきだと信じています。これはアプリケーションやウェブサイトをTypeScriptで書くということの話ではなく、ライブラリに関する話です、ライブラリはTypeScriptで書かれるべきで、

    全てのJSライブラリはTypeScriptで書かれるべきである | POSTD
  • NPMとleft-pad : 私たちはプログラミングのやり方を忘れてしまったのか? | POSTD

    さあ開発者のみなさん、真面目な話の時間です。読者の皆様はおそらくすでにお気づきでしょうが、今週、ReactやBabelやその他大量の有名なNPMパッケージ群が壊れました。そしてその原因は少々驚くようなものでした。 ReactやBabel、その他のパッケージが依存する、left-padというシンプルなNPMパッケージがあります。この記事を書いている現段階で、このパッケージは GitHub上で11 star となっています。このパッケージは全体で 11行のシンプルな行があり、文字列の左を詰める基的な関数が実装されている というものです。上記のリンクが消えた場合に備えて、コード全体をいかに掲載しておきます。 module.exports = leftpad; function leftpad (str, len, ch) { str = String(str); var i = -1; if

    NPMとleft-pad : 私たちはプログラミングのやり方を忘れてしまったのか? | POSTD
  • Makefileを自己文書化する | POSTD

    私たちのプロジェクトではいつも、非常に長い Makefile を使用して、インストールやビルド、テスト、デプロイメントの処理を自動化しています。ターゲット名はほとんど標準化されていますが( make install 、 make deploy )、中には説明が必要なものもあります( make run-dev 、 make restart-api )。そして、詳細なmakeターゲットを追加するほど、それらの処理内容をテキスト形式で大量に記載しなければなりません。私たちのプロジェクトでは通常、このような文書を README ファイルに書いています。 しかしCLI(コマンドラインインタフェース)を用いる場合は、主に自己文書化ツールを使っています。 make と打つだけで、利用可能なコマンドとその説明が一覧表示されたら便利だと思いませんか? それを実現するのは、実はとても簡単です。まずは各ターゲッ

    Makefileを自己文書化する | POSTD
    craf
    craf 2016/03/29
  • ストリーミング検索プラットフォームの構築 | POSTD

    7週間の Insightのデータエンジニアリングのための特別研究員プログラム では、直近の卒業生と経験豊富なソフトウェアエンジニアが、大きなリアルタイムのデータセットを扱うためのデータプラットフォームの構築を通じて 最新のオープンソース技術 について学びます。Ryan Walker(今はCasetextのデータエンジニア)が自身のストリーミング検索プラットフォームのプロジェクトを考察します。 平均すると、世界中のTwitterユーザにより 1秒間に約6,000ツイート されています。明らかに、この膨大かつ騒がしいデータストリームからリアルタイムシグナルを抽出することはとても興味深いことです。より一般的には、リアルタイムイベントをトラックするために高速度のストリーミングテキストソースを用いる際に、数多くの面白い未解決の問題があります。この投稿では、TwitterのFirehoseのようなスト

    ストリーミング検索プラットフォームの構築 | POSTD
  • APIデザインにおける七つの大厄介 | POSTD

    (編注:2016/7/29、頂いたフィードバックを元に記事を修正いたしました。) APIをデザインするということは、科学であり技術でもあります。多くの頭の良い人たちが失敗を重ねてきました。成功している人たちは、APIの主な目的を念頭においてデザインしているのです。その目的とは、「開発者たちをウンザリさせる」ということです。 親愛なる仲間たち、その崇高っぽい追求を称えるべく、「APIデザインにおける七つの大厄介」を共に数え上げようではありませんか(私がしたことを見てください)。 リスティクル(箇条書き形式の記事) を書くつもりはないのですが、少なくともタイトルは 教養ある宗教的文献が参照元 です。 まず、ルールを決めましょう。ここでは、成功し、きちんと機能しているAPIを取り上げます。ですから、「動かない」とか、「大量のセキュリティホールがある」といったことは厄介ごとに数えません。「致命的」

    APIデザインにおける七つの大厄介 | POSTD
  • 依存関係をなくそう : Rubyアプリ・Gemの開発者への提言 | POSTD

    記事はRubyについて書かれたものではありますが、PythonJavaScriptJavaなど、全ての言語コミュニティに当てはまる事実を述べたものです。依存関係が引き起こす負の連鎖は誰のためにもなりません。 上の図は、私がこれまでに使用した全てのRailsアプリの依存関係を可視化したものです。以下の例はいずれも、どこかで聞いたことのあるものではないでしょうか。 何百ものエントリを含むGemfile 番環境で読み込まれるテスト用Gem 数百メガバイトもRAMをRailsのプロセス Rubygemsシステムは、それを再利用する誰もが容易にRubyのパッケージを作ることができるという点で、賞賛に値するものです。しかし、その便利さが意味するところは、そうしたGemと他のGemを非常に安易に結び付け、さらにそれが、「インターネットでダウンロード」され、数百もの依存関係を持つRailsアプ

    依存関係をなくそう : Rubyアプリ・Gemの開発者への提言 | POSTD
    craf
    craf 2016/03/04
  • HTTPステータスコードを適切に選ぶためのフローチャート : 難しく考えるのをやめよう | POSTD

    HTTPステータスコードを返すというのはとても単純なことです。ページがレンダリングできた?よし、それなら 200 を返しましょう。ページが存在しない?それなら 404 です。他のページにユーザをリダイレクトしたい? 302 、あるいは 301 かもしれません。 I like to imagine that HTTP status codes are like CB 10 codes. "Breaker breaker, this is White Chocolate Thunder. We've got a 200 OK here." — Aaron Patterson (@tenderlove) 2015, 10月 7 訳:HTTPのステータスコードのことは、市民ラジオの10コードみたいなものだと考えるのが好きです。「ブレーカー、ブレーカー、こちらホワイト・チョコレート・サンダー。200

    HTTPステータスコードを適切に選ぶためのフローチャート : 難しく考えるのをやめよう | POSTD
    craf
    craf 2016/02/18