タグ

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

  • PythonのJSONパーサのメモリ使用量と処理時間を比較してみる | POSTD

    私は、多数の大容量のデータをあちこちに移動させなければならない(クライアント端末をHTTP APIに接続してデータを取得します)ような特殊な使用事例を扱っています。なぜだか ^(1) 、転送形式にはJSONが使われていました。ある時、その大容量のデータが、さらに巨大になったのです。数百メガバイトどころではありません。JSONのデコード処理を実行すると大量のRAMが使用されることが分かりました。たった240MBのJSONペイロードで4.4GBですよ。信じられません。 ^(2) 組み込みのJSONライブラリを使っていて、まず「もっと性能の良いJSONパーサがあるはずだ」と思いました。そんなわけで、計測を始めたのです。 さて、メモリ使用量の計測はやっかいです。 ps コマンドを使ったり、 /proc/<pid> を見たりすることはできますが、断片的なスナップショットが得られるだけで、実際の最大使

    PythonのJSONパーサのメモリ使用量と処理時間を比較してみる | POSTD
  • 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
  • TCPを(少しは)理解しておくべきその理由 | POSTD

    この記事はTCPの 全て を理解する、あるいは 『TCP/IP Illustrated』 (訳注:日語版: 『詳解TCP/IP〈Vol.1〉プロトコル』 )を読破しようとか、そういうことではありません。ほんの少しのTCPの知識がどれほど欠かせないものなのかについてお話します。まずはその理由をお話しましょう。 私が Recurse Center で働いているとき、PythonでTCPスタックを書きました( またPythonでTCPスタックを書いたらどうなるかについても書きました )。それはとても楽しく、ためになる経験でした。またそれでいいと思っていたんです。 そこから1年ぐらい経って、仕事で、誰かが「NSQへメッセージを送ったんだが、毎回40ミリ秒かかる」とSlackに投稿しているのを見つけました。私はこの問題についてすでに1週間ほど考え込んでいましたが、さっぱり答えがでませんでした。 こ

    TCPを(少しは)理解しておくべきその理由 | POSTD
  • 珍しいワークフロー:Atomic Designの原則とSketchでデザインからプログラミングまで | POSTD

    概要: Sketchを使ったAtomic Designの方法がプロダクトデザインの未来形です。 初めに この記事は、上のビデオの素晴らしい人物、Brad Frostの開発したシステムについて書いています。Atomic Designは今のレスポンシブなデジタルの世界に対応するために開発されたものです。 ここ何年も、私たちのデザインを少しでも理解してもらえるよう、スタイルガイド、基的ガイドラインやムードボードなどのツールを作成してきました。同じように、開発者もBootstrapやFoundation、Bourbonなどのツールでプログラミング作業を楽にしようとしてきました。互いに妥協点を見いだし協力することで互いの作業を楽にできます。Atomic Designはまさにそれを実現しようとしています。 Atomic designはあるインスタンスやページをデザインすることではありません。大局的に

    珍しいワークフロー:Atomic Designの原則とSketchでデザインからプログラミングまで | POSTD
  • スレッド処理は慎重に – PHPでのスレッド処理 : 前編 | POSTD

    私が覚えている限り、非常に重い(または非同期の)タスク処理に関して、PHPは常に厳しい評価をされていました。これまではずっと、長いタスクを並列化したければ pcntl_fork を通してフォークするという方法を取らなければいけなかったので、タスクの結果を適切に処理することができませんでした。 そこで私たちは、キューイング(どちらかと言えばタスクを遅くするだけ)やReactPHP、または他の言語を一緒に使うといった、より複雑なソリューションへと向かっていきましたが、PHPでもスレッド処理は可能なのです。そしてより重要なのは、 その方法はあなたが思っているよりもはるかに簡単だということです。 この記事では、 pthreads 拡張(POSIX Threadsの略)について説明します。2012年ごろから広く使われていますが、多くの人がその存在を忘れているか、使うのが苦痛だと考えると思います。その

    スレッド処理は慎重に – PHPでのスレッド処理 : 前編 | POSTD
  • Scala使用歴5年のプログラマが、この言語とその環境に関する神話を解き明かす | POSTD

    (注:2016/1/21、頂いたフィードバックをもとに記事を修正いたしました。) 『 Programming in Scala (Scalaでプログラミング) 』の初版を読み始めた(でも読み終えていない)5年前からJavaの代わりにScalaを使うようになりました。最初はテストの時に使用していましたが、すぐにちょっとしたユーティリティクラスでも使用するようになり、気付いたらプロジェクト全てで使用するようになっていました。 Scalaに対する不満は多く存在しますが、この記事は違います。これは非難するものではなく、むしろ称賛するものです。 Scalaに興味ある開発者や聞いたことがあっても詳しく見たことがない人、「スムーズなプログラミングの妨げになる」と思い使用を先送りしていた人のために書きました。もちろんScalaファンに読んでもらうのも、他の人にも紹介してもらうのも大歓迎です。 この記事は3

    Scala使用歴5年のプログラマが、この言語とその環境に関する神話を解き明かす | POSTD
  • Linux Insides : カーネル起動プロセス part5(終) | POSTD

    カーネルの展開 カーネルの起動処理( Kernel booting process )シリーズの第5弾です。 前回 は、64ビットモードへの移行を見てきましたが、今回はその続きを説明していきたいと思います。カーネル展開の前準備と再配置、実際のカーネル展開処理のコードにジャンプする前の、最後のステップを見ていきます。それでは、カーネルコードの世界に再び飛び込んでいきましょう。 カーネル展開の前準備 前回は64ビットのエントリポイント startup_64 にジャンプする直前まででした。これは arch/x86/boot/compressed/head_64.S のソースコードファイルの中にあります。すでに startup_32 での startup_64 へのジャンプは見てきましたね。 pushl $__KERNEL_CS leal startup_64(%ebp), %eax ... ..

    Linux Insides : カーネル起動プロセス part5(終) | POSTD
  • Linux Insides : カーネル起動プロセス part3 | POSTD

    ビデオモード初期化とプロテクトモードへの移行 カーネル起動処理シリーズのパート3です。前回の パート では、 set_video ルーチンを main.c .から呼び出す直前までを扱いました。今回は、次の内容を見ていきます。 カーネルセットアップコードにおけるビデオモードの初期化 プロテクトモードに切り替える前の準備 プロテクトモードへの移行 注 プロテクトモードについてよく知らない場合は、前回の パート の内容を見てください。また、参考になる リンク も同ページに掲載しています。 上にも書いたように、 arch/x86/boot/video.c ソースコードファイルに定義された set_video 関数から始めましょう。内容を見ると、まずビデオモードを boot_params.hdr 構造体から取得することから始まるのがわかります。

    Linux Insides : カーネル起動プロセス part3 | POSTD
    fumikony
    fumikony 2015/12/10
  • Linux Insides : カーネル起動プロセス part1 | POSTD

    ブートローダからカーネルまで これまでの私の ブログ投稿 を読まれた方はご存じかと思いますが、しばらく前から低水準言語を使うようになりました。Linux用x86_64アセンブリ言語プログラミングについても書いています。また、同時にLinuxのソースコードにも触れるようになりました。下層がどのように機能しているのか、コンピュータでプログラムがどのように実行されるのか、どのようにメモリに配置されるのか、カーネルがどのように処理や記憶をするのか、下層でネットワークスタックがどのように動くのかなどなど、多くのことを理解しようと意欲が湧いています。これをきっかけに、 x86_64 版Linuxカーネルについてシリーズを書いてみようと思いました。 私はプロのカーネルプログラマではないことと、仕事でもカーネルのコードを書いていないことをご了承ください。個人的な趣味です。私は下層で何が起きているのかとても

    Linux Insides : カーネル起動プロセス part1 | POSTD
  • Reactを用いたアプリケーションアーキテクチャ:Fluxを再考する | POSTD

    他のフレームワークやライブラリから React に乗り換える人たちは、「ReactUIのレンダリングに関する問題しか解決しておらず、状態管理とアプリケーションアーキテクチャの選択は開発者に委ねられているのだから、どうやってアプリケーションの状態を管理したらいいのか?」 と疑問に思う傾向があります。FacebookはReactのレンダリングモデルに適している、 Flux と呼ばれるアーキテクチャを勧めています。 この記事では、UIレイヤとしてReactを用いてJavaScriptのアプリケーションの状態を管理する方法を探り、 Om のような ClojureScript ライブラリのアイデアを用いてFacebookのFluxの抽象的なフレームワークを作り変えてみたいと思います。 Fluxの核となる考えは、 データは一方通行で流れるべき というものです。これによってアプリケーションの論証が簡単

    Reactを用いたアプリケーションアーキテクチャ:Fluxを再考する | POSTD
  • Pythonのオブジェクトとクラスのビジュアルガイド – 全てがオブジェクトであるということ | POSTD

    Python開発者が大好きな言葉があります。それは”全てはオブジェクトである”です。実際、私自身もPythonのクラスを教えているときに何度も口にしています。多くの人が何度も聞いた言葉かもしれないのですが、私が言う度に生徒は賛同の相槌をしてくれます。結局のところ、Javaにおいて全ては(対象がそうでない場合を除いて)オブジェクトであり、.NETにおいても全てはオブジェクトであると、よく言われています。 しかしPythonにおいて全てがオブジェクトであると言う時、(私の生徒は驚いていましたが)「 全て 」にはクラスも含まれているのです。これはとても筋が通っていて、オブジェクトシステム全体が理解しやすくなります。しかしそれでも、広い視野で物事を見ることは難しいのです。 今回のブログ記事では、Pythonのオブジェクト間のつながりをざっと見ていきたいと思います。そして”全てはオブジェクトである”

    Pythonのオブジェクトとクラスのビジュアルガイド – 全てがオブジェクトであるということ | POSTD
  • なぜGo言語は設計が悪いのか – Go愛好者の見地から | POSTD

    さて、このタイトル、かなり挑発的ですよね。それは認めます。もう少し説明すると、私は大胆なタイトルが好きなのです。人の注意を引くことができますからね。とにかく、この記事では、Goがひどい設計の言語(実際、当に全て台無しになります)だということを証明していこうと思います。私は既に数カ月間Goで遊んでいますし、たしか6月のいつだったかに初めてHello, Worldを走らせてもみました。私は数学がそんなに得意ではありませんが、あれから既に4カ月経っていますし、 Github 上のパッケージもいくつか手に入れました。言うまでもありませんが、私は仕事Goを使ったことは全くないので、”コードサポート”や”デプロイ”やそのあたりに関する私の意見は話半分で読んでくださいね。 私はGoが大好きです。使ってみて大好きになりました。慣用表現を理解したり、ジェネリクスがないことや、おかしなエラーハンドリングや

    なぜGo言語は設計が悪いのか – Go愛好者の見地から | POSTD
  • プロダクトデザインからバーチャルリアリティへ – GoogleのVRチームにて | POSTD

    個人的な経験とバーチャルリアリティ入門 背景 私はGoogleのプロダクトデザイナです。2012年7月20日に買収されたフランスのスタートアップSparrowを経て入社しました。入社後はGmailチームと共に、主力製品の構築に初期段階から関わりました。その製品は後に Inbox by Gmail となり、2014年10月22日にリリースされました。 私は数年間、生産性の高いアプリケーションをデザインしていましたが、ある転機を迎えたように感じました。自分の技術の幅を広げ、日々新しいことを学び、かつて経験したことのない分野で上達したいと思ったのです。私は慣れ親しんだ環境を離れて、自分自身をリブートするために、新しい挑戦を求めていました。 Oculusのキックスターターが話題になっていた頃、仮想世界への高い没入感と無限の可能性をもたらすバーチャルリアリティに興味を持ちました。新たなメディア表現向

    プロダクトデザインからバーチャルリアリティへ – GoogleのVRチームにて | POSTD
  • Node.jsのセキュリティ・チェックリスト | POSTD

    (訳注:2016/1/5、いただいた翻訳フィードバックを元に記事を修正いたしました。) セキュリティ – 誰もが見て見ぬふりをする問題 。セキュリティが重要だということは、誰もが認識していると思いますが、真剣にとらえている人は少数だと思います。我々、RisingStackは、皆さんに正しいセキュリティチェックを行っていただきたいと考え、チェックリストを用意しました。皆さんのアプリケーションが何千人というユーザやお客様に使用される前にセキュリティチェックを行ってください。 ここに挙げたリストのほとんどは概略的なもので、Node.jsに限らず、全ての言語やフレームワークに適用することができます。ただし、いくつのツールは、Node.js固有のものとなりますので、ご了承ください。 Node.jsセキュリティ に関するブログ記事も投稿してありますので、こちらも是非読んでみてください。 構成管理 HT

    Node.jsのセキュリティ・チェックリスト | POSTD
  • より良いビジネス意思決定のために、機械学習の閾値を可視化する | POSTD

    機械学習のモデルを構築した際、データサイエンティストとしての私たちの最終的なゴールは価値の創造でした。モデルが無かった(あっても今より原始的だった)頃よりも、何かしら良いものを生み出すためにモデルによる予測を活用したいのです。結果に焦点を当てるということはつまり、私たちのモデルのパフォーマンスの最終的な評価は、その有効性によって為されるということです。それは、モデルを利用したアプリケーションが生み出した価値の量として計測されます。この投稿では、ビジネスの価値を最大限にするモデル構築による意思決定を、選択したり理解したりする際の強力なツールとして、データの可視化を活用したいと思います。 分類アルゴリズムにおいて、最も一般的な利用パターンの1つが 閾値(しきいち) です。閾値以上のスコアを持つ全てのケースに対して、何らかの特別な処置を行うのです。以下に例を挙げます。 不正の防止: あなたはソー

    より良いビジネス意思決定のために、機械学習の閾値を可視化する | POSTD
  • Chrome開発者ツールの小技集 | POSTD

    最近、普段以上にChromeの開発者ツールを使うことに時間をかける機会がありました。その過程で、自分が今まで気づいていなかった機能をいくつか見つけました(少なくとも今までその機能を探す必要に迫られていなかった、とも言えるのですが。例えばブラックボックス化や非同期のスタックトレースなど)。そのため、開発者ツールでとても気に入っているいくつかの機能についてまとめてみたくなったのです。 小さな虫眼鏡ののアイコンは、特定の要素やCSSプロパティに対して、「どのCSSファイルに書かれているどのセレクタ/クラスが最終的なスタイルを決めているか」を示してくれます。例えば、どれかDOM要素に対して「要素を検証」を選び、右側の「Computed」というタブを選びます。確認したいCSSプロパティを見つけてその虫眼鏡アイコンをクリックすることで、すぐさま右側に正しいCSSファイル内のクラス/セレクタを表示してく

    Chrome開発者ツールの小技集 | POSTD
  • ディープラーニング-畳み込みニューラルネットワークとPythonによる特徴抽出 | POSTD

  • Webアプリのデプロイメントの悲しい状況 | POSTD

    ここ4日間というもの、インターネットWebフォーラムをインストールしようとして大いに時間を無駄にしました。説明書きには30分でセットアップ可能と書いてあったんですけどね。 コンピュータは得意なほうだと思っているのですが、一体、何が悪かったのでしょうか? これからお教えしましょう。 私の奮闘記 辱めるのは意ではないので製品名は言わないでおきます。この製品でひどい目にあったのは今回が初めてではありませんが、製品単体の問題というよりはもっと大きな問題だからです(”ピス・ホース(馬におしっこ)”に音が似ているとだけ言っておきましょう)。 30分でセットアップ可能と説明されている根拠は、Dockerによるインストールが正式にサポートされていて、それ以外の手段がないからです。Dockerは輝かしくも新しいコンテナ管理ソフトウェアで、それだけでも危険な香りがします。相互運用可能なデスクトップ環境全体を

    Webアプリのデプロイメントの悲しい状況 | POSTD
  • より良いプログラムを書くための究極の奇策 – 「Data first, not code first」 | POSTD

    (訳注:2015/10/31、いただいた翻訳フィードバックを元に記事を修正いたしました。) 開発者は嫌うでしょう。 ここでは、標準的なコツや策略について書きますが、当に興味があるのは、別のことです。究極の奇策を見つけたいと思います。策略をひとつずつ試して、プログラミングの聖域に少しでも近づければ良いのですが。 はじめに 私が初めて書いたビデオゲームは、 Ninja Wars (忍者戦争)でした。 そう、これは、画像で埋めたHTMLのtableです。 src 属性を変えることで、動きを実現しています。JavaScriptファイルの冒頭は下記のようになっています。 var x = 314; var y = 8; var prevy= 1; var prevx= 1; var prevsw= 0; var row= 304; var endrow= 142; var sword= 296; v

    より良いプログラムを書くための究極の奇策 – 「Data first, not code first」 | POSTD
  • JavaScriptのクロージャは内部でどう機能するのか | POSTD

    もうだいぶ前からすでに私はクロージャを使っています。使い方を学びましたが、実際にクロージャがどう機能するのか、また、使うと隠れたところで実際に何が起きるのかを明確に理解しているとは言えませんでした。そもそも、クロージャとは一体何なのでしょうか。 ウィキペディア はあまり役に立ちません。クロージャはいつ生成され、いつ削除されるのでしょうか。どのように実装されるべきなのでしょうか。 "use strict"; var myClosure = (function outerFunction() { var hidden = 1; return { inc: function innerFunction() { return hidden++; } }; }()); myClosure.inc(); // returns 1 myClosure.inc(); // returns 2 myClos

    JavaScriptのクロージャは内部でどう機能するのか | POSTD