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

  • GraphQLはWeb APIの次のフロンティアか? | POSTD

    RESTの規約。URLはリソースであり、CRUDはHTTP動詞にマップされる。 RESTの規約に1つ問題があるとすれば、規約が十分でないということでしょう。上記で”通常”、”多くの場合”、”時に”という表現を使ったのは、これらのやり方は仕様で推奨されているものの守られるとは限らないためです。実世界では、大抵のAPIはRESTishがせいぜいです。例えばStripeでは、リソース更新に PUT ではなく PATCH を使うべきですが、歴史的理由でそうはなっておらず、おそらく現時点では変更に値しないでしょう。いずれにしても開発者はドキュメントを読む必要があり、その時、 POST メソッドのユビキタスな使い方があることに気づくのです。 RESTには他の問題もあります。必要なものだけでなく全てが返ってくるため、リソースのペイロードが非常に大きくなることがあるのです。そして多くの場合、クライアントが

    GraphQLはWeb APIの次のフロンティアか? | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2018/08/11
    “もし大抵のAPIはRESTfulでなくRESTishであり、私たちが実際に使っている規約の大部分は詰まるところURLを一貫した基本的なCRUDにすることであるとすれば、RESTはひょっとすると実際はそれほど受け入れられていないのかもし
  • 計算グラフの微積分:バックプロパゲーションを理解する | POSTD

    はじめに バックプロパゲーションとは、ディープモデルの学習を計算可能にしてくれる重要なアルゴリズムです。最近のニューラルネットワークではバックプロパゲーション (誤差逆伝播法) を使うことで、最急降下法による学習が愚直な実装と比べて1000万倍速くなります。 例えば,バックプロパゲーションでの学習に1週間しかかからないのに対して、愚直な実装では20万年かかる計算になります。 ディープラーニングでの使用以外にも、バックプロパゲーションはさまざまな分野で使えるとても便利な計算ツールです。それぞれで呼ばれる名称は違うのですが、天気予報から、数値的安定性を分析する時にまで多岐にわたり使用できます。実際に、このアルゴリズムは、いろいろな分野で少なくとも20回は再開発されています(参照: Griewank(2010) )。一般的な用途自体の名前は”リバースモード微分”といいます。 基的に、この技術

    計算グラフの微積分:バックプロパゲーションを理解する | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2018/02/10
    “フォワードモード微分では「1つの入力に対する出力の微分係数」が得られるだけですが、リバースモード微分ではそれらの全てが得られるのです。 ”
  • Node.jsのClusterをセットアップして、処理を並列化・高速化する | POSTD

    Node.jsが多数のイベントの非同期な処理に長けていることはよく知られていますが、それが単一のスレッドで行われていることを多くの人は知りません。Node.jsは実際にはマルチスレッドではないので、リクエストは全て単一スレッドのイベントループで処理されているだけなのです。 そこで、Node.jsクラスタを使って、クワッドコアプロセッサの能力を最大限に引き出しましょう。コードの複数のインスタンスで起動し、さらに多くのリクエストを処理します。少し難しく思えるかも知れませんが、Node.js v0.8で導入された cluster モジュールを使えば、実はとても簡単です。 もちろん、これは、作業を別々のプロセスに分割することのできるアプリならどんなアプリにでも役立ちますが、webサイトのような多くのIOリクエストを処理するアプリには特に重要です。 残念ながら、並行処理は複雑なので、サーバ上でのアプ

    Node.jsのClusterをセットアップして、処理を並列化・高速化する | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2017/12/03
    “Node.jsが多数のイベントの非同期な処理に長けていることはよく知られていますが、それが単一のスレッドで行われていることを多くの人は知りません。Node.jsは実際にはマルチスレッドではないので、リクエストは全て単
  • 100Mにスケーリング:Key-ValueストアとしてMySQLを使い、NoSQL以上のパフォーマンスを出す | POSTD

    100Mにスケーリング:Key-ValueストアとしてMySQLを使い、NoSQL以上のパフォーマンスを出す MySQLはNoSQLよりも優れています。Key-ValueストアといったNoSQLのユースケースを考えてみると、パフォーマンスや使いやすさ、安定性の点でMySQLの方が合理的です。MySQLには、オペレーションや障害に関することからレプリケーションや異なる使用パターンまでと、多くのオンラインマテリアルが用意されおり、堅実なエンジンです。こういった理由から、比較するまでもなく、MySQLは最近のNoSQLエンジンよりも優れていると言えます。 ここ最近では、NoSQLエンジンが主流になってきています。多くの開発者が、MongoDBやCassandra、Redis、HadoopといったNoSQLエンジンをアプリケーション構築の第一候補としており、それらが全て昔からのSQLエンジンを上回

    100Mにスケーリング:Key-ValueストアとしてMySQLを使い、NoSQL以上のパフォーマンスを出す | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2017/10/23
    “ここ最近では、NoSQLエンジンが主流になってきています。多くの開発者が、MongoDBやCassandra、Redis、HadoopといったNoSQLエンジンをアプリケーション構築の第一候補としており、それらが全て昔からのSQLエンジンを上回る物と
  • TypeScriptを使った方がいいケースとは? | POSTD

    去年の夏、私たちは大量のコードベース(18,000行以上の コード行数 )をJavaScriptからTypeScriptへと変更しました。この移行作業を通じて、両者の相違点や類似点について大いに学び、TypeScriptの優れたユースケースや、TypeScriptを使うべきではないケースなどについて考えてみました。 型システムとは補助輪のようなものです。転倒防止してくれる代わりに、遅くなり、操作性が制限されます。 TypeScriptのユースケース コードサイズ :ソースコードが膨大である場合、また複数の人がプロジェクトに従事している場合、型システムは明らかなエラーを防ぐのに役立ちます。 特に SPA の場合は当てはまります。誰かが変更したコードが他の人のコードを破損させてしまう可能性があるなら、何らかの安全機構を持つ方がいいでしょう。TypeScriptトランスパイラ は明白な誤りを

    TypeScriptを使った方がいいケースとは? | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2017/07/16
    “しかしReactと同様に、私たちの業界の境界をプッシュする有力なテクノロジの1つです。そしてあなたがこれを使おうと使うまいと、あなた自身の考えを発展させるために使ってみることは害にはなりません。学習曲線はあ
  • 残りの私たちにとって、Rが最高のプログラミング言語である理由 | POSTD

    訳注:2017/5/23、いただいた翻訳フィードバックをもとに記事を修正いたしました。 私はRを使用して6年以上になります。Rとの最初の出会いは、財政学におけるモンテカルロシミュレーションの博士課程の時で、紹介してくれたのはWolfgang Hörmannでした。プログラミング言語に関しては、それ以前にもいくつか使ったことがあり、最後のものはC++(これも私は大好きです)でしたが、それらのどれもRほど 便利 ではありません。 残りの私たちにとってRが最高の言語である理由をリストアップする前に、まず “残りの私たち” の定義を明確にしておきましょう。残りの私たちとは、ExcelユーザやSPSSユーザ、そしてコンピュータサイエンス(CS)界の外にいる人々(*)、つまり簡潔さを目指して努力しながら、同時にパワーと柔軟性を追求する “プログラムの利用者” のことです。Rは、そんな 私たち にとって

    残りの私たちにとって、Rが最高のプログラミング言語である理由 | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2017/05/22
    “Rには “メソッド” (例えばobject.method())がなく、あるのは関数のみです。一応、Rのオブジェクトに関数を定義できますが(object$method())、そんなことは誰もしないし、する必要もないでしょう。”
  • 開発者がビッグデータ分析にPythonを使う時によくやる間違い | POSTD

    システムの構築、新しい技術の習得、PythonやDevOpsなどに情熱を注ぐソフトウェア開発者です。現在はチューリッヒを拠点とするビッグデータのスタートアップで働いており、データ分析およびデータ管理ソリューションのためのPython技術を磨いています。 1 はじめに Python は開発時間を短縮できるという点で一般的に評価の高い言語です。しかし、Pythonを使って効率よくデータ分析をするには、思わぬ落とし穴があります。動的かつオープンソースのシステムであるという特徴は、初めは開発を容易にしてくれますが、大規模システムの破綻の原因になり得ます。ライブラリが複雑で実行時間が遅く、データの完全性を考慮した設計になっていないので、開発時間の短縮どころか、すぐに時間を使い果たしてしまう可能性があるのです。 この記事ではPythonやビッグデータで作業をする時に、最も時間を無駄にしがちな事柄につ

    開発者がビッグデータ分析にPythonを使う時によくやる間違い | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2017/05/21
    “最終目標に役立たないこと(例えば、CSVファイルのロードや、理解しないままdatetimeライブラリを使用しようとすることなど)に過度の時間を費やしていると気付いた場合、一歩引いてプロセスを確認し、もっと有効な方
  • 依存関係をなくそう : Rubyアプリ・Gemの開発者への提言 | POSTD

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

    依存関係をなくそう : Rubyアプリ・Gemの開発者への提言 | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2017/04/01
    “Sidekiqはあれだけの機能を備えながら、たった3つのランタイムの依存関係しかありません。concurrent-ruby、connection_poolとredisです。”
  • CSSモジュール ― 明るい未来へようこそ | POSTD

    ここ最近、CSSに対する考え方が広がりを見せています。皆さんの中には、その転換点を見つけようと、Christopher Chedeauの”CSS in JS”という講演を聞いた方もいるでしょう。2014年11月にNationJSで行われたこの講演は、CSSにおける重大な分岐点となりました。まるで高エネルギー粒子が衝突した後のように、それを機に、数ある多様な考え方が、各々の方向へ渦を描くように広がったのです。その例として、 React Style と jsxstyle 、 Radium を挙げましょう。これら3つは、Reactのスタイリングにおける最新かつ最良、そして最も実行しやすいアプローチに含まれており、 各々のプロジェクトのReadmeファイルでも、 そのように言及しています。もし”発明”が、 adjacent possible(一歩先にある可能性) を探ることの一例であるのなら、Ch

    CSSモジュール ― 明るい未来へようこそ | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2017/02/09
    “CSSモジュールでは、各ファイルが別々にコンパイルされるため、一般的な名称のシンプルなクラスセレクタを使うことができます。よって、グローバルスコープを汚染する心配がありません。ここで、以下の4つの状態を
  • 私たちはなぜReactではなくVue.jsを選んだのか | POSTD

    Qwintryチームは最近、既存のすべてのプロジェクトフロントエンドVue.jsに移行しはじめました。新しいプロジェクトでもVue.jsを使います。 レガシーなDrupalのシステム(qwintry.com) ゼロから新しく書きなおすqwintry.comのブランチ Yii2で動くb2bシステム(logistics.qwintry.com) その他、比較的小さめのプロジェクト(ほとんどは、PHPとNode.jsでバックエンドを構築しているもの) プロジェクトの規模についていうと、 Qwintry は世界中で約50万人の顧客が使っています。アメリカドイツに倉庫を持っていて、アメリカ国内 最大の郵送先 のひとつで、東欧や中東への出荷に注力しています。Qwintryは、アメリカのオンラインストアでグッズを購入する人たちのためのツールです。私たちの倉庫に届いた荷物をコントロールパネルで管理で

    私たちはなぜReactではなくVue.jsを選んだのか | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2016/12/30
    “本来必要としない場面での早すぎる過剰なモジュール化を強いられるからです。早すぎるモジュール化は、早すぎる最適化と同じようなものではないでしょうか。”
  • 機械学習に挑んだ一年間 – 機械学習について一から学び、仕事に活用するまでの道のり | POSTD

    この記事は、去年私が書いた「Machine Learning in a Week(機械学習に挑んだ一週間)」という記事の続編です。その記事では、私が5日間集中的に機械学習を学び、のめり込んでいった経緯について説明しています。 機械学習に挑んだ一週間 一般の人にとって機械学習の分野に足を踏み入れるのは、無謀なことに思えるでしょう。medium.com 私は順調なスタートを切った後も、時間を見つけて勉強を続け、およそ一年後には、仕事機械学習を活用した初プロジェクトを立ち上げることができました。そのプロジェクトでは、さまざまなタイプの機械学習や自然言語処理(NLP)の技術を駆使して、 Xeneta の 潜在顧客の特定 を行っています。 趣味でやっていたことが仕事になって、とても嬉しかったです。 同時に、仕事として機械学習を利用するのは博士号を持つ限られた人だけだ、という思い込みも払拭されました

    機械学習に挑んだ一年間 – 機械学習について一から学び、仕事に活用するまでの道のり | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2016/10/09
    “実際のところ、数学の専門知識がなくても機械学習の分野に足を踏み入れることはできる。また、博士号がない人でも仕事として機械学習を活用することが可能である。”
  • Reactを使ったモジュラーCSS : CSS-in-JSとCSS Module | POSTD

    Buffer のメンバーはReactが大好きで、フロントエンドの多くのコードベースを徐々にReactに移行させています。ReactにFluxを加えると、モジュラー形式の小さなアプリでできた複雑なプロダクトを構築するための、とても健全な方法になると思います。そこで、1つ1つの新しい小さなアプリと機能を、大規模な構造体に追加される、Reactの新しいブロックと考えます。 私は最近、このような新機能の1つに取り組んでいますが、React+Fluxのアプリケーションを作るのがいかに簡単であるかと、その理由について、さらに夢中になってしまいました。Reactを使うと有意味なコンポーネントを集めてUIを宣言的に構築するのが楽になり、Fluxはその混成体に妥当なデータフローをもたらします。 複雑なアプリケーションを作るときに発生する課題について多くの考察がなされましたが、React+Fluxの組み合わせ

    Reactを使ったモジュラーCSS : CSS-in-JSとCSS Module | POSTD
  • Node.jsのマイクロサービスの構築を通してDockerを学ぶ – 前編 | POSTD

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

    Node.jsのマイクロサービスの構築を通してDockerを学ぶ – 前編 | POSTD
  • Pythonの新しい文字列フォーマット : %記号、str.format()から文字列補完へ | POSTD

    「ほとんどの状況への対処について、一つの正しいやり方にフォーカスする」言語であるPythonですが、その文字列フォーマットは非常に悩ましく、また年々、多様化が進んでいます。 Python 3.6 では、文字列をフォーマットする方法には3通りあります(簡単な結合や string.Template の使用を除きます)。 %演算子 str.format関数 文字列の補完 (もし、この記事を全部読むつもりがないようであれば、 2016年2月に開催されるPyGrazの会合 に関する記事で、追加の例を含めてもう少し幅広くご紹介したいと思います) %形式の文字列フォーマット %形式は、少なくとも1.0バージョンからPythonに組み込まれているフォーマットです。Python 3以前のバージョンから使用している方には馴染みがあるでしょう。 多少の相違はあるものの、これはC言語の sprintf と同等の関

    Pythonの新しい文字列フォーマット : %記号、str.format()から文字列補完へ | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2016/07/01
    “formatは(バイナリメソッドにマッピングされた)演算子ではなくメソッドであることから、引数の扱いはより明確になります。つまり、文字列を渡すと文字列として読み取られ、1つの文字列を含んだタプルを渡すと、1”
  • Capybaraを使って、Rails+JavaScriptの非同期な統合テストを書く | POSTD

    上からも分かるように、ページの読み込みが完了する前に、テストでリンク探しを始めたのにも関わらず、Capybaraは優雅にインタラクションを処理しています。 しかし、Capybaraがこれらの非同期の問題を処理してくれるにもかかわらず、成功したり失敗したりする一貫性のないテストにいとも簡単に陥ってしまうのはなぜなのでしょう。 競合状態の数を最小限に抑えて、Capybara APIを正しく使用するには、いくつかのコツがあります。 最初に適合するエレメントを見つける 悪い例 first(".active").click まだページに.active要素がない場合、firstはnilを返し、クリックは失敗します。 良い例 # 完全に一致するものが欲しい場合 find(".active").click # ただ単に最初の要素がほしいだけの場合 find(".active", match: :first

    kent-where-the-light-is
    kent-where-the-light-is 2016/06/13
    “競合状態の数を最小限に抑えて、Capybara APIを正しく使用するには、いくつかのコツがあります。”
  • JavaScriptのデバッグ方法 – JSを嫌いにならないためのTips | POSTD

    この記事のオリジナルは voxxed に投稿されたものです。 JavaScript関連の問題を抱えるチームをサポートする仕事を通じて、いくつか共通の問題点があることに気づきました。もしあなたもJavaScriptに対するイライラを感じているのであれば、この記事は何らかの助けになるかもしれません。おことわり:私がお教えするヒントはすでにご存知のものもあるとは思いますが、うまくいけば、多少なりとも有用な情報があるかもしれません。特にエンタープライズアプリケーションやCMSソリューションを構築する際に有効なヒントです。チームの誰もが話したがらないCMSのコードについてお話しします。いずれも必要に応じて採用できるものです。 debuggerステートメント 大半のブラウザでサポートされているにもかかわらず、JavaScriptを書く際に最も活用しきれていない機能の1つです。debuggerステートメ

    JavaScriptのデバッグ方法 – JSを嫌いにならないためのTips | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2016/05/12
    “開発者のほとんどがデバッグの目的でconsole.logを使用します。しかしconsole.warn、console.error、console.infoについてはご存知でしたか? ”
  • R vs Python:データ解析を比較 | POSTD

    主観的な観点からPythonとRの比較した記事は山ほどあります。それらに私たちの意見を追加する形でこの記事を書きますが、今回はこの2つの言語をより客観的な目線で見ていきたいと思います。PythonとRを比較をしていき、同じ結果を引き出すためにはそれぞれどんなコードが必要なのかを提示していきます。こうすることで、推測ではなく、それぞれの言語の強みと弱みの両者をしっかりと理解できます。 Dataquest では、PythonとRの両方の言語のレッスンを行っていますが、データサイエンスのツールキットの中では両者ともそれぞれに適所があります。 この記事では、NBA選手の2013/2014年シーズンの活躍を分析したデータセットを解析していきます。ファイルは ここ からダウンロードしてください。解析はまずPythonとRのコードを示してから、その後に2つの異なるアプローチを解説し議論していきます。つま

    R vs Python:データ解析を比較 | POSTD
  • データサイエンスのワークフロー ― データ分析を効率に行うために | POSTD

    データを扱うときに、きちんと定められたワークフローがあると助かります。具体的には、「ストーリーを伝える」(データの可視化/ジャーナリズム)ことだけを目的として分析を行いたいのか、それとも一定のタスク(データマイニング)をモデリングするためにデータに依存するシステムを構築することが目的なのか、プロセスが重要です。前もって方法論を定めておくことによって、チームの足並みが揃い、次に何をすべきか考え出そうとして無駄な時間を費やさなくて済みます。それによって早く結果が得られ、資料の公表も早くなります。 これを念頭に、Ashley Madisonの漏洩データ分析に関する 前回の記事 に続いて、私たちが現在使用しているワークフローをご紹介します。このワークフローは、データ漏洩(Ashleyのケースなど)を分析するためだけでなく、社内のデータの分析にも使用されます。ただし、重要な点として、このワークフロー

    データサイエンスのワークフロー ― データ分析を効率に行うために | POSTD
  • JavaScriptのフレームワークについて検討してみよう | POSTD

    (注記:4/10、いただいた翻訳フィードバックを元に記事を修正いたしました。) ほとんどのプログラミング言語は、評判のよい安定した、ごく少数のアプリケーションフレームワークをサポートしています。Objective-CやSwiftのアプリケーションではAppleの優れたフレームワーク、Cocoaを使用しています。Rubyのアプリケーションは、大抵Railsを使います。Javaには確立されたWebアプリのフレームワークが少数あって、それらは比較的ゆっくりと移り変わっています。 一方でJavaScriptのフレームワークは、およそ16分ごとに、最新で最良のものが誕生しています。 研究によると、(より新しくより優れたフレームワークが発明されない限り)作るのが最も複雑なJavaScriptのアプリはToDoリストだそうです。幸い、ToDoのサンプルプロジェクト経由でJavaScriptのフレームワー

    JavaScriptのフレームワークについて検討してみよう | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2015/09/15
    うーむ
  • JavaScriptフレームワークの寿命 | POSTD

    (注記:9/13、いただいた翻訳フィードバックを元に記事を修正いたしました。) 半年ごとに”今一番ホットな”フレームワークが新たに登場しては、私たちは興奮に沸き返ります。 誇大広告を信じてはいけません。 フレームワークの寿命 はプロジェクトの成功を左右するほど重要な要素です。フレームワークを選ぶ際、テクノロジにおける多くの意思決定者は納得のいく選択をするために、コミュニティの大きさ、人気、大企業によるサポートの有無などを基準にしています。しかし実際は、こうした要素によって寿命が決まるわけではありません。 最初は勢いがあったのに、徐々に弱まり、最終的には線香花火のごとく儚く消えてしまうようなフレームワークを選んでしまうと、書き直しに無駄な時間を費やしたり、チームの士気を下げたりする原因となります。記事は、そうした残念な結果を回避するヒントをまとめたものです。 記事では以下のことを示したい

    JavaScriptフレームワークの寿命 | POSTD
    kent-where-the-light-is
    kent-where-the-light-is 2015/09/02
    jsをちゃんとやれということですね
  • 1