タグ

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

  • フロントエンドのテストは皆のためのもの | POSTD

    テストとは人によって反応が分かれるものの1つであり、大喜びする人もいれば、見ないようにして去ろうとする人もいます。あなたがどちらの側であるにせよ、ここではフロントエンドのテストは皆のためのものであるということを説明します。実際、テストには多くの種類があり、それがテストに対して初めに恐れや混乱を感じる一因なのかもしれません。 この記事では、特に有名で広く利用されている種類のテストを扱います。なかには目新しいものはないと感じる読者の方もいらっしゃるかもしれませんが、少なくとも復習にはなるでしょう。どちらにせよ、筆者の目標は、この記事を通じて世の中のさまざまな種類のテストについて理解を深めてもらうことです。ここではユニットテスト、統合テスト、アクセシビリティテスト、ビジュアルリグレッションテストなどを一緒に見ていきます。 さらに、Mocha、Jest、Puppeteer、Cypressなど、各種

    フロントエンドのテストは皆のためのもの | POSTD
  • 役立つコードレビュー 8つのヒント | POSTD

    役立つコードレビュー(CR)のコツは、学校では習いません。アルゴリズム、データ構造、プログラム言語の基礎は習っても、確実に役に立つフィードバックを返す方法をじっくりと教えてくれる人はいないでしょう。 コードレビューは優れたソフトウェアを作り出すには欠かせないプロセスです。レビューを通したコードは、そうでないコードよりも 質が高く、バグが少ない 傾向があります。健全なコードレビュー文化には、副次的な利点もあります。たとえば、 バス因子 を押しとどめる、新メンバーのトレーニングに最適なツールになる、など。また、コードレビューは優れた知識共有の手段でもあります。 前提 まずは、この記事のポイントの前提を提示する必要があるでしょう。それは以下のとおりです。 信頼のおける環境で作業をしている。あるいは、あなたとチームは、あなたの信頼性を高めることを目指して作業している。 コードではないシナリオでフィ

    役立つコードレビュー 8つのヒント | POSTD
  • プログラマの採用面接で聞かれる、データ構造とアルゴリズムに関する50以上の質問 | POSTD

    情報科学科の卒業生やプログラマの中には、UberやNetflixのような新興企業や、 AmazonMicrosoftGoogle のような大企業や、InfosysやLuxsoftのようなサービスを基とする企業で、プログラミング、コーディング、ソフトウェア開発の仕事に就きたいと考える人が大勢います。しかし、実際にそういった企業で面接を受ける場合、大半の人が プログラミングに関してどのような質問をされるか 見当もつきません。 この記事では、 新卒生からプログラマになって1〜2年までの 経験値が異なる人たち向けに、それぞれの プログラミングの面接でよく聞かれる質問 をいくつか紹介していきます。 コーディングの面接では、主に データ構造とアルゴリズムに基づいた質問 がされますが、 一時変数を使わずにどのように2つの整数をスワップするのか 、というような論理的な質問もされるでしょう。

    プログラマの採用面接で聞かれる、データ構造とアルゴリズムに関する50以上の質問 | POSTD
    cad-san
    cad-san 2019/02/08
  • 開発者が知っておくべきSOLIDの原則 | POSTD

    (編注:2020/08/18、いただいたフィードバックをもとに記事を修正いたしました。) オブジェクト指向プログラミングが、ソフトウェア開発に新しい設計を持ち込みました。 その結果、開発者は単一の目的を処理するために、全体のアプリケーションに関係なく、1つのクラスの中で、同じ目的や機能を持つデータを結び付けることができるようになりました。 しかし、このオブジェクト指向プログラミングで、分かりにくいプログラムやメンテナンスができないプログラムを防ぐことはできません。 そこで、5つのガイドラインがRobert C. Martinによって作り出されました。これら5つのガイドラインすなわち原則により、開発者にとって読みやすく、メンテナンスが可能なプログラムを作成しやすくなりました。 5つの原則は、S.O.L.I.Dの原則と呼ばれています(頭字語はMichael Feathereによって名付けられま

    開発者が知っておくべきSOLIDの原則 | POSTD
  • 大規模な決済システムを構築する際に学んだ分散型アーキテクチャの考え方 – 前編 | POSTD

    バックエンドに関する経験があった私は、2年前にモバイルソフトウェアエンジニアとしてUberに入社しました。担当することになった仕事は、決済機能の構築を含む アプリの刷新 です。その後、 技術管理の側に回る ことになり、チームそのものを率いることになります。配下のチームは、決済を行うバックエンドシステムの多くを担当していたため、責任者となった私もバックエンドに触れる機会が以前にも増して多くなりました。 Uberで働く前は、分散型システムの経験はなきに等しかったと言っていいと思います。 それまでの私は、一般的なコンピュータサイエンスの学位を取得後、フルスタックのソフトウェア開発に10年間、関わっていました。分散型システムについては、一応、大まかな仕組みやトレードオフなどは知っていましたが、一貫性や可用性、冪等性などの概念に精通していたとはお世辞にも言えません。 この記事では、大規模で可用性が高

    大規模な決済システムを構築する際に学んだ分散型アーキテクチャの考え方 – 前編 | POSTD
    cad-san
    cad-san 2018/12/14
  • 100万回のWebSocket接続とGo | POSTD

    こんにちは。私はSergey Kamardin(セルゲイ・カマルディン)です。Mail.Ru(ロシアの電子メールサービス会社)で開発者をしています。 この記事では、どのように私がGoを使って高負荷対応のWebSocketサーバを開発したかについて説明したいと思っています。 パフォーマンス最適化のアイデアやテクニックを通じて、WebSocketの知識はあるもののGoについてはほとんど知らないという方のお役に立てれば幸いです。 1. はじめに まずは開発に至った経緯について、どうして私たちがこのサーバを必要としたのかを説明しておきましょう。 Mail.Ruには多くのステートフルなシステムがあります。ユーザのeメール保存もその1つです。システム内、およびシステムイベントの状態変更を追跡する方法にはいくつかの種類がありますが、それらは主に状態変更に関するシステム通知、または周期的なシステムのポーリ

    100万回のWebSocket接続とGo | POSTD
  • WebAssemblyはなぜ速いのか | POSTD

    記事はWebAssemblyに関するシリーズの第5回目で、今回のテーマはWebAssemblyが高速な理由です。前の記事をお読みでない方は、 初めから目を通される (訳注:原文リンク)ことをお勧めします。 前回の記事 (訳注:原文リンク)では、プログラミングに WebAssembly あるいはJavaScriptを使うかは二者択一の選択ではないことを説明しました。私たちは、WebAssemblyのみのコードベースを書く開発者が膨大な数になるとは思っていません。 ですので、アプリケーションにWebAssemblyJavaScriptのどちらを使うか選ぶ必要はありません。しかし私たちとしては、開発者がJavaScriptコードの一部をWebAssemblyに置き換えることを期待しています。 例えば、Reactで開発しているチームは、リコンサイラコード(言い換えれば仮想DOM)をWebAss

    WebAssemblyはなぜ速いのか | POSTD
    cad-san
    cad-san 2017/11/15
  • マイクロサービスはもう十分 | プロダクト・サービス | POSTD

    モノリスとして管理するには複雑すぎるというシステムでない限り、マイクロサービスは検討さえしなくていい。ソフトウェアシステムの大多数は、単一のモノリシックアプリケーションとして構築されるべきである。そのモノリス内のモジュール性が良好になるよう注意を払う必要はあるが、別個のサービスに分けようとしてはいけない。要旨 モノリスとして管理するには複雑すぎるというシステムでない限り、マイクロサービスは検討さえしなくていい。ソフトウェアシステムの大多数は、単一のモノリシックアプリケーションとして構築されるべきである。そのモノリス内のモジュール性が良好になるよう注意を払う必要はあるが、別個のサービスに分けようとしてはいけない。 – Martin Fowler 明確に構造化されたモノリスを構築できない時、なぜマイクロサービスがその答えだと思うのか。 Simon Brown 始めに マイクロサービスの利点と欠

    マイクロサービスはもう十分 | プロダクト・サービス | POSTD
  • Go言語のリアルタイムGC 理論と実践 | POSTD

    (編注:誤訳、意味の分かりづらい訳を修正しました。リクエストありがとうございました。) 毎日、Pusherは数十億のメッセージをリアルタイム、つまり送り元から宛先まで100ms未満で送信しています。どのようにしてそれを可能にしているのでしょうか。重要となる要因はGoの低レイテンシのガベージコレクタです。 ガベージコレクタはプログラムを一時停止させるものであり、リアルタイムシステムの悩みの種です。そのため、新しいメッセージバスを設計する際には慎重に言語を選びました。Goは 低レイテンシを強調している ものの、私たちは懐疑的でした。「当にGoを使えば実現できるのか? もしできるならどうやって?」 このブログ記事ではGoのガベージコレクタを、どのように機能し(トリコロールアルゴリズム)、なぜ機能し(こんなに短いGCによる一時停止時間の実現)、そして何よりも、それが機能するのかどうか(GCによる

    Go言語のリアルタイムGC 理論と実践 | POSTD
  • WebSocket大合戦:Clojure、C++、Elixir、Go、NodeJS、Ruby | POSTD

    Webアプリにリアルタイムの双方向通信が必要な場合、WebSocketを選ぶのは自然なことだと思います。では、どのツールでWebSocketサーバを構築すべきでしょうか。パフォーマンスは重要ですが、開発のプロセスも見過ごしてはなりません。パフォーマンスを基準にするだけでなく、開発のしやすさも考慮に入れるべきでしょう。今回の大合戦では、Clojure、C++、Elixir、Go、NodeJS、Rubyのそれぞれの言語によって慣用的な手法で実装されたシンプルなWebSocketサーバを比較したいと思います。 テスト内容 サーバに実装するのは、 echo と broadcast の2つのメッセージのみを扱う非常に単純なプロトコルです。echoは送信クライアントに返され、ブロードキャストは全ての接続クライアントに送信されます。そしてブロードキャストが完了すると、結果メッセージが送信者に返されます。

    WebSocket大合戦:Clojure、C++、Elixir、Go、NodeJS、Ruby | POSTD
  • OSのデバッグ:メモリアロケーション講座 | POSTD

    追記:やあやあHacker Newsさん!おひさしぶり!メモリ管理を深く掘り下げた私の投稿を読む邪魔はしたくないし、私の投稿のあら探しをする人たちを邪魔するつもりもありません。技術的なマル秘テクニックに注目するのもいいでしょう(いや、わかりますよ。楽しいですしね!)。でも、私たちはひとりぼっちでソフトウェアを書いているわけではないのです。だから、ためになる技術的なコンテンツ(私の記事もそうでありたいものです)を捜すだけじゃなくて、政治的な話題にも目を向けることを強くおすすめします。ソフトウェア開発者である私たちは、今後数十年にわたって社会を変える最前線に立つ特権を与えられています。私たちは、自分たちの仕事を社会全体に役立てられるようにするための情報や知識を必要としています。 そういう意味でみなさんには、 Hacker Newsが「政治的」なコンテンツを検閲すると言い出したこと に反対しても

    OSのデバッグ:メモリアロケーション講座 | POSTD
  • 私たちはいかにして環状線で”悪さをする列車”を捕まえたか | プログラミング | POSTD

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

    私たちはいかにして環状線で”悪さをする列車”を捕まえたか | プログラミング | POSTD
  • すばらしいビット | POSTD

    unsigned int v; //only works if v is 32 bit v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++;

    すばらしいビット | POSTD
    cad-san
    cad-san 2017/02/14
    言語はC言語だよね。「隣接するビットをスワップ」の項がおかしいような。0bプリフィクスが抜けてないか…?
  • H.264の秘密 | POSTD

    (編注:2020/08/18、いただいたフィードバックをもとに記事を修正いたしました。) (2016/12/11、いただきましたフィードバックをもとに翻訳を修正いたしました。) H.264は、動画圧縮コーデックの標準規格です。ネット上の動画、Blu-ray、スマホ、セキュリティカメラ、ドローンなどなど、今やあらゆるところでH.264が使われています。 H.264は注目すべき技術のひとつです。たったひとつの目標、つまりフルモーションビデオの送信に要するネットワーク帯域を削減することを目指した30年以上の努力の結晶なのです。 技術的な面でも、H.264はとても興味深い規格です。この記事では、その一部について概要レベルでの知識を得られることでしょう。あまり複雑だと感じさせないようにするつもりです。今回おはなしする概念の多くは動画圧縮全般にあてはまるものであり、H.264に限ったものではありません

    H.264の秘密 | POSTD
  • Go言語の低レイテンシGC実現のための取り組み | POSTD

    (訳注:2016/9/28、頂きましたフィードバックを元に記事を修正いたしました。) 私たち Twitch では、通信が大変混み合うシステムの多くで Go を採用しています。ライブ映像を配信したり、何百万人というユーザにチャットサービスを提供したりする場合に直面する問題を考慮すると、Goはそのシンプルさや安全性、パフォーマンス、読みやすさの点で良いツールだと言えます。 しかしこれは、私たちにとってGoがいかに素晴らしいツールかを説明する、よくある記事ではありません。Goで現在実装されているランタイムにより行き詰まったいくつかの局面をどう打開するか、さらに、私たちはそうした限界に達した時にどう対応したらいいのかについて書いたものです。 これからお話しするのは、「Go 1.4からGo 1.6へのGoランタイムの改善が、どのようにしてガベージコレクション(GC)の停止時間を20倍も改善することに

    Go言語の低レイテンシGC実現のための取り組み | POSTD
  • Linuxシステムコール徹底ガイド | POSTD

    要約 この記事では、LinuxカーネルにてLinuxプログラムがどのように関数を呼び出すのかについて紹介していきます。 システムコールを行う様々な方法、システムコールを行うための独自のアセンブリの作成方法(例あり)、システムコールへのカーネルエントリポイント、システムコールからのカーネルイグジットポイント、glibcのラッパ関数、バグなど多くの点について説明します。 要約 システムコールとは? 必要条件に関する情報 ハードウェアとソフトウェア ユーザプログラム、カーネル、CPUの特権レベル 割り込み モデル固有レジスタ(MSR) アセンブリコードでシステムコールを呼び出すことの問題点 レガシーシステムコール 独自のアセンブリを用いたレガシーシステムコールの使用 カーネル側での int $0x80 エントリポイント iret を使用したレガシーシステムコールからの復帰 高速システムコール 3

    Linuxシステムコール徹底ガイド | POSTD
  • 6年間におけるGoのベストプラクティス | POSTD

    稿は、QCon London 2016で行った講演の内容に基づいています。スライドとビデオは近日中に掲載予定です) 2014年に開催された最初のGopherConで、私は「 Best Practices in Production Environments(番環境でのベストプラクティス) 」と題した講演を行いました。 SoundCloud の私たちはGoのアーリーアダプターで、その時点までに既に2年近く、番環境向けの様々なGoコードを書き、実行し、メンテナンスしていました。そして私たちはいくつかのことを学んだので、その教訓をまとめ、多くの人に伝えたいと思ったのです。 それ以来、私はフルタイムでGoを使う仕事を続けています。SoundCloudではその後の活動やインフラチームで、そして現在は Weaveworks で Weave Scope や Weave Mesh の開発に使ってい

    6年間におけるGoのベストプラクティス | POSTD
  • プログラミングの名言をもう少し | POSTD

    前回投稿した「 The Wisdom of Programming (プログラミングに関する名言の知恵)」で、表面上は良さそうでも、ソフトウェアの開発において誤った考えを助長する結果になってしまう名言に注意を促しました。また、以前には「 favorite programming quotes 」(お気に入りのプログラミングの名言)というのも投稿していますが、もう少し名言を追加しておきたいと思います。 コーディング作業 「プログラムを詳細にわたって明確に記述する作業とプログラミングの作業は、全く同一のものである」―Kevlin Henney 「プログラム構築の質のほとんどは、実際には仕様書のデバッグだ」―Fred Brooks 「よくある誤った考えは、プログラムの作成者は不可解なコードを書いてもコメント行で自分の考えを明確に表現できるだろうと思い込むことである」―Kevlin Henney

    プログラミングの名言をもう少し | 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
  • 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
    cad-san
    cad-san 2016/02/17