タグ

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

  • Vimの生産性を高める12の方法 | POSTD

    1. LeaderをSpaceキーにする Leader は素晴らしい概念です。キーの 組み合わせ ではなく 並び によって、操作を行えるようにするものです。私はこれを使っているので、操作のために” Ctrl -何らかのキー”の組み合わせを押す必要はめったにありません。 私は長い間、 , を Leader キーとして使っていました。ですがある時、キーボードの中で一番目立つキーにマップすることを思い付いたのです。Space(スペース)キーです。 これで私のVim生活は激変しました。今や、私は Leader をどちらの親指でも押すことができ、他の指は常にホームポジションにあります。 Leader がとても使いやすくなったので、私が様々なキーバインドで用いるようになったことは周知の話です。 2. 自分が特によく行う操作をLeaderにマップする 私は、自分がVimで作業を行っている中で、その時間の

    Vimの生産性を高める12の方法 | POSTD
  • プログラマの採用面接で聞かれる、データ構造とアルゴリズムに関する50以上の質問 | POSTD

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

    プログラマの採用面接で聞かれる、データ構造とアルゴリズムに関する50以上の質問 | POSTD
  • Gopherの道を歩む – Node.jsからGo言語への移行 | POSTD

    私は大学時代に、興味位でJavaScriptを始めて、それ以来ウェブページを幾つか作成してきました。JavaScriptは常にC言語やJavaの合間の楽しい息抜きでしたが、アニメーションや、ユーザをあっと言わせるようなちょっとしたことを提供するといった、特殊な目的にかなり限られた言語だと考えていました。JavaScriptは覚えやすく、開発者に具体的な結果をすぐにもたらしてくれるので、コーディングする方法を学びたいと思っている人に私が教えた最初の言語でした。JavaScriptHTMLCSSを少し組み合わせれば、ウェブページが出来上がります。プログラミング初心者には喜ばれます。 その後、あることが2年前に起こりました。当時、私は、主にサーバーサイドのコードとAndroid用のアプリのプロトタイプに取り組む研究職に近い立場にいました。すぐにNode.jsの存在が目に留まりました。バック

    Gopherの道を歩む – Node.jsからGo言語への移行 | POSTD
  • 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
    yuzu441
    yuzu441 2018/12/11
  • RustにおけるfutureとgRPC | POSTD

    (編注:2020/08/18、いただいたフィードバックをもとに記事を修正いたしました。) 記事は、Tang Liu(tl@pingcap.com)が「Bay Area Rust Meetup August 2017」で行った講演内容をまとめたものです。 動画はこちらからご覧いただけます 。 講演者の自己紹介 非同期プログラミング なぜ同期にしないのか なぜ非同期にするのか コールバック地獄 コルーチンで簡単に書く もう1つの方法、future Rustにおけるfuture Futures コンビネータ 同期 Stream Sink Task gRPC なぜgRPCを使うのか HTTP/2 gRPCのベースはHTTP/2 futureとgRPCを組み合わせる C gRPCのキーワード 疑似フロー 単一通信 クライアントストリーミング サーバストリーミング 双方向ストリーミング 単一通信fu

    RustにおけるfutureとgRPC | POSTD
    yuzu441
    yuzu441 2018/07/12
  • 200行のコードへのブロックチェーンの実装 | プログラミング | POSTD

    ブロックチェーン の基的な概念は非常にシンプルです。分散型データベースで、順序付けられたレコードのリストが連続的に増加していきます。しかしシンプルとは言え、ブロックチェーンやそれを使うことで解決しようとしている問題について話をする際に、頭を悩まされることがよくあります。これは、 ビットコイン や イーサリアム といった、一般にもよく知られているブロックチェーンベースのプロジェクトでよく聞かれる話です。「ブロックチェーン」は、 取引 や スマートコントラクト 、または 暗号通貨 といったコンセプトと強い結びつきがあります。 そのため、来シンプルであるべきブロックチェーンの理解がより困難になってしまっています。抜け目のないソースコードであれば尚更です。 そこで、 NaiveChain という、200行のJavascripitに実装した、非常にシンプルなブロックチェーンを紹介したいと思います

    200行のコードへのブロックチェーンの実装 | プログラミング | POSTD
  • 超高速エンジンの内部:Quantum CSS(別名Stylo)- 前編 | POSTD

    Project Quantumのことをお聞きになったことがあるでしょう。これはFirefoxを高速化するために、Firefoxの中身を大幅に書き換えたものです。実験的なブラウザ、Servoから部分的に交換を実施し、エンジンの他の部分の著しい改善を図っています。 このプロジェクトは、飛行中のジェット機でのジェットエンジンの取り替えに例えられます。現場でコンポーネントごとに変更を実施するので、各コンポーネントの準備が整い次第、Firefoxで効果を確認することができます。 また、Servoから採用した最初の重要なコンポーネントは、Quantum CSSと呼ばれる新しいCSSエンジン(以前の別名はStylo)で、現在はNightly版でテストすることが可能です。(編注:Firefox 57からはデフォルトで有効化されています) about:config に行き、 layout.css.servo

    超高速エンジンの内部:Quantum CSS(別名Stylo)- 前編 | POSTD
  • Node.jsのパフォーマンス最適化を阻むものの見つけ方 | POSTD

    皆さんは “Node.jsではコードが動的に最適化される” という記事を幾つか読んだことがあるかもしれません。稿では、この文言が意味するところとコードが最適化される箇所の見つけ方について見ていきます。 Node.jsのパフォーマンス最適化を阻むものについて述べた稿をご覧いただいたあとには、以下のことができるようになります。 関数の最適化がJavaScriptエンジン(V8)で行なわれているかの解明 最適化された関数が最適化戻し(De-optimization)されていないかの解明 関数が最適化できない理由の解明 このアジェンダは大げさですが、記事は至ってシンプルです。目指しているのは、上記の方法論を多くのNode.js開発者に役立てることです。 V8におけるNode.jsのパフォーマンス最適化についての簡単な概要 Node.jsを どの仮想マシン上でも使用可能にするという計画 はあるも

    Node.jsのパフォーマンス最適化を阻むものの見つけ方 | POSTD
  • V8エンジンでのJavaScriptの機能と最適化コードの書き方に関する5つのベストプラクティス | POSTD

    数週間前に、JavaScriptが実際どのように動いているかを掘り下げて紹介する記事の連載を始めました。JavaScriptがどのような機能で構成されていてそれらがどのように組み合わさって機能していくのかを知ることによって、さらに良いコードやアプリケーションを作ることができるのではないかと思ったからです。 連載の1回目では 、エンジンやランタイム、コールスタックについての概要を紹介しました。2回目となる今回は、Google V8 JavaScriptエンジンについて細かく説明していきます。また、より良いJavaScriptコードの書き方、すなわち私たちの開発チーム SessionStack がプロダクトを開発する際に意識しているベストプラクティスについても併せて紹介します。 概要 JavaScriptエンジン とはJavaScriptコードを実行するプログラムまたはインタプリタのことです。

    V8エンジンでのJavaScriptの機能と最適化コードの書き方に関する5つのベストプラクティス | POSTD
  • Node6からNode8へのアップデート – 実際のパフォーマンスの比較 | POSTD

    Node8が出たのを知っていますか。より速くなりました、というか、そう言っています。 しかし数字で表されてはおらず、「より速い」と書かれているだけです。 幸い私には、Node6で実行している大きなReactのサイトと、2時間の空き時間がありました。 Node8へのアップデートはとても簡単でした。所要時間は10分ほどで、不完全なライブラリは1つもありませんでした。 このWebサイトから MacOSに pkg ファイルをインストールしたのですが、比較的順調でした。 しかし、 usr/local/lib/node_modules/ を 手動で削除 する必要がありました。 全てがうまくいきました。後ほどWindowsのパソコンにもインストールしてみますが、4日ほどかかるでしょう。 追記:驚きました。Windowsでは、まるで魔法のように働いたんです。手動で行うステップもなし、不完全なパッケージもな

    Node6からNode8へのアップデート – 実際のパフォーマンスの比較 | POSTD
  • 2017年JavaScriptのテスト概論 | POSTD

    稿は、JavaScriptのテストについて最も重要な根拠、用語、ツール、アプローチなどの知識を身に着けることを目的とした簡略版ガイドブックです。稿で検討する数々の側面に関する最新の秀逸な記事も紹介しつつ、私たちが経験的に得たことも多少付け加えたいと思います。 Facebookによるテスト用フレームワークであるJestのロゴをご覧ください。 見てお分かりのように、このフレームワークは「苦痛のない」JavaScriptのテストをスローガンに掲げています。しかし、 “次のように言う人” もいます。 苦痛のないテストなんてあり得ない。 実際、Facebookはこのスローガンを掲げるだけの素晴らしい理由があります。一般的にJSのデベロッパは Webサイトのテストにあまり満足していません 。JSのテストには制限があり、実装が難しく、低速である傾向があります。 一方、正しい戦略を立てて適切にツールを

    2017年JavaScriptのテスト概論 | POSTD
  • 組み込みシステム上でのC++ | POSTD

    去年の10月、私が所属している 会社 の部署で、組み込みファームウェアの開発をC言語からC++に切り替えました。C++のクラス、リソースの自動クリーンアップ、パラメータ多相、そして強化された型安全性などは、汎用OSをデスクトップ機で稼働している時と同様、リアルタイムOS(RTOS)やベアメタル上でも便利です。C++を使えば、安全で表現豊かなファームウェアを書くことができます。 しかしC++のこの自動的な魔法は諸刃の剣とも言えます。いくつかの機能は、組み込み環境 ^(1) には搭載したくないシステムのファシリティに依存するからです。ツールチェーン周りをどうするかも厄介です。 memcpy やアトミック操作、ハードウェア固有の浮動小数点関数などの重要なファシリティが提供されるので、 libgcc と libstdc++ を完全に破棄するのではなく、特定の部分を避けて使わなくてはなりません。 こ

    組み込みシステム上でのC++ | POSTD
  • Rust開発者のためのC++入門書:所有権と借用について | POSTD

    今日、ソーシャルサイト「reddit」を見ていたら、“ Rustの基礎を学んでからC++を始める場合 、何を勉強すればいいか”と問う投稿があり、私は自分のブログを復活させ、その中で質問への答えを書いたら面白いのではと考えました。 私にはRustを学んだ後にC++を扱う仕事に就いた経験があるため、Rustの経験を持つ人がC++に移行していく様子をまとめてみたいと思ったのです。 稿はC++の構文と特徴を既に知っていて、RustからC++の世界に移行する方法に興味を持っている読者を対象とします。 しかし、私は全てに精通しているわけではないので、稿では所有権(ownership)、借用(borrowing)、ライフタイム(lifetime)に焦点を当てて説明していきます。 所有権と移動 Rustの一番大きな特徴は所有権です。所有権は、プリミティブ型ではない値に対するデフォルトの動作として、コピ

    Rust開発者のためのC++入門書:所有権と借用について | POSTD
  • Dockerを用いたGUIアプリケーションの実行 | POSTD

    私はこのところしばらく仕事でVMやコンテナを扱っていましたが、大学のいくつかのプロジェクトJavaのコードを書かなければならないときは未だにvimを使用せず、新たに格的なIDEをインストールしなければなりませんでした。これにはいつもイライラさせられていましたが、ついに今週、Dockerコンテナ内でNetBeansを実行できるようになったのです。それによって普段使用しないJavaのコードを書くための膨大な環境をパソコンにインストールしなくて済むようになりました。 Dockerコンテナ内でGUIアプリケーションを実行する場合には、いくつかの方法があり、 X11転送を行うSSH や VNC を使用します。しかし私が発見した最もシンプルな方法は、X11のソケットをコンテナと共有して、直接使用するというものでした。 このアイデアはとてもシンプルで、以下の Dockerfile を開始点として使用

    Dockerを用いたGUIアプリケーションの実行 | POSTD
  • JVMはそんなに重くない | POSTD

    Clojureに反対する大きな理由がJVMです。この役立たずは重いですからね。 これは、数週間前に ZA TechSlackで見た投稿です。休暇中にClojureの話題を何件か見たのですが、投稿者はJVMについても繰り返し言及していました。 私はこの投稿について Slack上で少しつぶやいていました が、もっと広く理解され議論されるように、稿を書くことを決めました。 背景 以前は、私もJVMは重いと思っていました。2000年代の初めにJVMとPHPと比べていた頃の話です。当時は、.NETやColdFusionなど、別の重い製品が他にもありました。また、PerlPythonという軽めの製品もありましたが、私はWindowsを使っていたのでActivePerlやActivePythonはやはり少し重めでした。 私が初めてJVMに対する“恐れ”を克服したのは、小規模な製品アプリを、JRu

    JVMはそんなに重くない | POSTD
    yuzu441
    yuzu441 2017/03/04
  • 学校では習わないコーディングスキル:オブジェクト所有権 | POSTD

    プログラマとして身に着けるべきスキルはたくさんありますが、中には、ソフトウェアエンジニアリングの標準カリキュラムに組み込まれていないものもあります。そうしたスキルは少しずつ自然に、あるいは経験豊富な人と一緒に仕事をする中で学ぶ必要があります。1つDavid MacIverが取り上げているのは、 値の型を追跡するスキル です。 他には、コード中のオブジェクト所有権を理解するスキルも必要です。つまり、コードのどの部分がメモリ内の特定オブジェクトを所有し、それがどんなアクセスを予期しているかを知るということです。 その理解なしにコードを書くと、プログラムがクラッシュしたり厄介なバグに悩まされたりすることになるかもしれません。さらに悪いことに、プログラミング言語の中には、この問題に役立つ手段さえ提供してくれないものもあるでしょう。 自然に身に付ける これは、私がこのスキルを学んだ方法です。私は大学

    学校では習わないコーディングスキル:オブジェクト所有権 | POSTD
  • Sublime Textを逆アセンブルする | POSTD

    今日の午後、私は Hopper Disassembler のフリートライアル版で、Sublime Text 3のバイナリを見ながら時間を過ごしました。そこでいくつかの興味深い点と文書化されていない設定を見つけたので、ここに記したいと思います。 文書化されていない設定 私が見つけた最も有益で興味深いと思われるものは、Sublime Text用の文書化されていない設定です。そのうちのいくつかは一部の人々にとっても有用かもしれません。 draw_shadows :ウィンドウより長い行がある時にシャドウ効果を無効にするブール値。個人的にシャドウ効果は好みですが、よりクリーンな見た目にしたい時や、ウィンドウがテキストよりわずかに広いだけで、シャドウ効果が早く始まる場合、この設定を使うことができます。 indent_guide_options : solid :これは、文書化されていないオプションとし

    Sublime Textを逆アセンブルする | POSTD
  • Reduxのパターンとアンチパターン | POSTD

    Redux は、 Flux のようなアーキテクチャを使用してアプリケーションの状態を管理できる非常にシンプルなライブラリです。私たち Affirm では今、 Reduxのタイムトラベル機能 に注目しています。Affirmの主要事業は、透明性の高い消費者ローンを提供することなので、ローン申し込み時の全過程をユーザ視点で再現できると非常に有用なのです。 Reduxはフレームワークというよりも、パターンの適用に役立つ関数セットです。よって、適切なパターンを慎重に適用しないと、Reduxを使ったことを後悔する結果になりかねません。この記事では、Affirmで確立したReduxのベストプラクティスや、ミスを犯しやすいポイントについて説明します。 ImmutableJS ImmutableJS は、不変の永続データ構造を扱うためのライブラリです。私たちがこのライブラリを好んで使う理由は2つあります。

    Reduxのパターンとアンチパターン | POSTD
  • 仮想DOMの内部の動き | POSTD

    PreactでVDOMがどのように機能するかを示すフローチャート 仮想DOM(VDOMあるいはVNode)は魅力的です✨ しかし複雑で、理解が難しいものでもあります???? React や Preact 、その他同様のJSのライブラリでは、これをコアで使っています。残念ながら私は、これを詳細かつ分かりやすく説明している優れた記事や資料を見つけられませんでした。ですから、自分で書こうと思い立ったのです。 備考:これは非常に長い記事です。内容をシンプルに表すために画像を山ほど挿入しましたが、それゆえにさらに長い記事になってしまいました。 私は Preact のコードとVDOMを使いました。容量が小さくて済み、将来、簡単に見なおすことができるからです。しかし、概念のほとんどはReactにも共通していると思います。 皆さんがこれを読んだ後、仮想DOMをよく理解できるようになり、できればReact

    仮想DOMの内部の動き | POSTD
  • FlyWeb―Mozillaによる、完全Web型のクロスデバイス・インタラクションの実験プロジェクト | POSTD

    FlyWebは、Mozillaプラットフォーム部門内で人知れずプロトタイプを作ってきた実験的なプロジェクトです。昨年末にサブプロジェクトとしてスタートし、以来、小人数の特別チームがそのコンセプトの”バージョン0″の完成を目指してきました。過去6か月にわたり実現に向けてあれこれと手を入れ、特にこの開発のアイディアに興味を持ちそうなWeb開発者やハードウェアハッカー向けには、気楽に話せるくらいのところまでにこぎ着けました。 根的に、目指しているのは1つのゴールです。それは、物理的に近くにいる人間やデバイスがアプリケーションとコンテンツそれぞれをスムーズに動かしやすくすることです。そのためには、”ローカルエリアWebサーバ”を立てる人やそのローカルエリアWebサーバを見つけて接続するブラウザを持つ人にとって、完全にシンプルなものにしようと思っています。このアーキテクチャの上に築かれるものは、ユ

    FlyWeb―Mozillaによる、完全Web型のクロスデバイス・インタラクションの実験プロジェクト | POSTD