タグ

ブックマーク / medium.com (23)

  • TLSが難しい?RustとLinuxカーネルで実装しよう!

    TLS(Transport Layer Security)が難しすぎると、お嘆きのセキュリティファースト世代の皆様、RustLinuxカーネルを実装しながら学んでみましょう! カーネルモジュールの実装は難しい?それは誤解です。TLSをアプリケーションとして実装しようとすると、各種のライブラリを検索していたつもりが、SNSを眺めていて、一日が終わっていることありますよね。カーネルモジュールを実装するために使えるのはカーネルの機能だけです。検索する必要はなく、雑念が生じる余地はありません。その集中力があれば、カーネル開発は難しくありません。 TLSとLinuxカーネル皆様の中には、LinuxカーネルはTLSをサポートしているのでは?と思っている方がいるかもしれません。TLSは実際のデータの送受信の前に、ハンドシェイクと呼ばれる、暗号鍵の合意や相手の認証を実施します。ハンドシェイク後、Linu

    TLSが難しい?RustとLinuxカーネルで実装しよう!
  • QUICスタックとTLSライブラリの関係とOpenSSLの状況

    図1: TLS over TCP と QUIC のスタック構造の比較はじめにQUICはTLSv1.3に相当するセキュリティを標準装備すると説明されます。図1はよく参照されるスタック構成ですが、TLSがQUICスタックの内部に埋め込まれています。縦に積み上げられた “スタック” になっていません。TLSの埋め込みは何を意味しているのでしょうか?稿の前半ではTLSとQUICの関係と、TLSライブラリの使われ方をTLS over TCPと比較しながら解説します。後半ではOpenSSLのQUIC対応の状況についてふれます。 なお稿で処理の流れを追う際は送信を中心に取り上げます。受信についても逆順で同様の処理が必要ですが解説は省略しています。 QUICとTLSv1.3の関係TLSには大きく分けて、ハンドシェイクプロトコルとレコードプロトコルがあります。前者は暗号スイートの調停や鍵交換、各種パラメ

    QUICスタックとTLSライブラリの関係とOpenSSLの状況
  • ソケットAPIが遅すぎる?新たなio_uringを試す!

    新しいAPIが作られるたびに、私たちは、古いAPIを置き換えるだけで高速化という夢をみます。何度夢破れても、高速なAPIが追加されたと聞けば、試さずにはいられませんよね! 今回は、Linuxカーネル5.1で追加されたio_uringを使って、Rustのasyncランタイムを実装し、gRPCサーバのベンチマークを実行してみました。 io_uringとはio_uringは、ファイルシステムとネットワークの非同期I/Oのために開発されました。同期よりも非同期のほうがおしゃれ、そういう雰囲気ありますよね!クラウドネイティブも、非同期にAPIを介して、なんかやってるやつですよね。 io_uringのインターフェイスは、高い性能を目指し、1)アプリケーションとカーネル間でのメモリコピーを避ける、2)複数のI/O要求を一度にカーネルに伝えることができる、という工夫がされています。 下図のように、アプリケ

    ソケットAPIが遅すぎる?新たなio_uringを試す!
  • gRPCが遅すぎる?eBPFでカーネル内で動かす!

    gRPCの高速化への飽くなき追求(具体的な目標や目的なし)を続けてきましたが、まだ、遅すぎる!今回は、安全にLinuxカーネルに機能を追加できるeBPFという仕組みを使って、カーネル内で動作するgRPCサーバを実装しました。その結果、前回実装したRust版よりも2倍高速になりました! eBPFで安全なユーザコード実行eBPFを使えば、システムコール、パケットの受信など、カーネルで発生する様々なイベントに対して、私たちユーザが実装したコードを、カーネル内部で実行することができます。同じようにカーネルに機能を追加できるカーネルモジュールと違って、eBPFは、データ破壊など、システムの安定性に深刻な影響を与える危険なコードの実行を防ぐことができます。 eBPFで検索すると、たくさんの日語の情報が見つかるXDPは、ネットワークインターフェイスのドライバのパケット受信時に、ユーザコードを実行する仕

    gRPCが遅すぎる?eBPFでカーネル内で動かす!
  • Linuxカーネルが難しい?Rustで実装しよう!. 「カーネル開発者になりたい!」 | by FUJITA Tomonori | nttlabs | Jul, 2020 | Medium

    「カーネル開発者になりたい!」 クラウドネイティブ世代の皆様は、何を言っているのか理解できないと思いますが、一昔前は、Linuxカーネル開発の魅力におぼれたエンジニアがたくさんいました。クラウドファースト時代に、誰もやってないだろうと、軽い気持ちで試すと、今もひっそりと生息しているカーネル開発者に、一晩中、指導をうけるはめになりかねません。前例のないRustなら安心です。 RustLinuxカーネルモジュールが実装できるRustでカーネルモジュールを実装する利点Rustへの愛だけが理由ではなく、カーネル開発にRustを用いると、様々なバグを減らすことができそうという利点があります。例えば、動的なメモリ管理で、うっかり、解放を忘れるとか、解放した後に使ってしまうと、往々として、辛いデバッグになります。 Rustで実装した簡単なカーネルモジュールRustのカーネルモジュール開発フレームワーク

    Linuxカーネルが難しい?Rustで実装しよう!. 「カーネル開発者になりたい!」 | by FUJITA Tomonori | nttlabs | Jul, 2020 | Medium
    MonMonMon
    MonMonMon 2020/07/21
    “意味のある機能は実装できないことを発見できるでしょう”
  • TCPが遅すぎる?QUICを使おう!

    「それ、QUIC使えないの?」 それがなんであれ、QUICを使うことを主張することで、みんなが「なんか良くわからないけど、TCPを置き換えたほうがいいのかな?」と思うようになるはず。全てのアプリケーションを、TCPの代わりにQUICを使うように修正するとなれば、この先10年間ぐらい、エンジニアみんなの仕事を作ることができます。業界愛ですね。 すでに、SSHやDNSのQUIC対応は始められています。既存のアプリケーションをQUICに対応させる難しさを調査するために、RustでBGP over QUICを実装してみました。 QUICの実装QUICは、TCPと同じく、パケットの再送、輻輳制御など、信頼性のある通信を実現するトランスポートプロトコルです。実装面の大きな違いは、TCPがオペレーティングシステムのプロトコルスタックの一機能として実装されるのに対して、QUICはアプリケーションで実装され

    TCPが遅すぎる?QUICを使おう!
  • Raspberry Pi 4 で構築する録画マシン | 空気録学電子版【公式】

    🍓 Raspberry Pi 4 が買えるようになりました2019年11月、待望の Raspberry Pi 4 技適取得版が発売されました。H.264 ハードウェアエンコーダを搭載した、リッチなシングルボードコンピュータです。2020年5月28日には 8GB メモリ搭載の上位モデルも登場しています。 はたしてこれは何をするためのデバイスなのでしょうか? そうです、録画ですね。もうテレビの録画をするために高価なパソコンを購入する必要はありません。5000円台から入手できるマシンを利用して、安価に録画サーバーを構築することができるようになったのです。 この記事では Raspbery Pi 4 を利用した Mirakurun + EPGStation での録画サーバー構築方法と、ハードウェアエンコーダを利用した録画ファイルのエンコードについて解説を行います。 筆者の⾃宅で運⽤している録画サー

    Raspberry Pi 4 で構築する録画マシン | 空気録学電子版【公式】
  • ミルクボーイがアジャイルを説明したら

    序章駒場「最近、うちのおかんがシステム開発に興味を持っててなぁ、名前は忘れたらしいんやけど、迅速に開発できて、仕様変更にも対応できる、素晴らしい開発手法を取り入れてるところがあるらしいんやわ〜。」 内海「そんなもんアジャイルに決まってるがなぁ〜! 今やシステム開発と言えば、アジャイル。素早く変化に対応できるってゆーのが特徴なんよ。そもそも名前が “迅速” を意味する英語やねんから、アジャイルに決まってるがなぁ〜。」 チームの人数駒場「最初、オレもそう思たんやけどな、なんでも 40 人ぐらいで開発してるらしいんやわぁ〜。」 内海「ほなぁ、アジャイルちゃうかぁ…。アジャイルでは 5〜9 人ぐらいが推奨されてるからなぁ〜。40 人もおったら、とてもやないけど、コミュニケーションが成立するとは思われへんなぁ〜。効率の悪い伝言ゲームになるのは目に見えてるからなぁ〜。おかん、他にもなんか言うてなかった

    MonMonMon
    MonMonMon 2020/01/28
    お上手ですね
  • Flutter FAQ 🇯🇵

    さらに自分なりに表現すると、次のように思っています。 Hot Reload/Restartによって、実装と確認のフィードバックサイクルが極めて速い(ビルドで数十秒以上程度待たされることの多いネイティブ開発環境と比べて)ネイティブアプリと見分けの付かないような高クオリティ・高パフォーマンスなアプリの開発も可能リッチなフルカスタムUIも組みやすいさらに、Google I/O 2019でもアピールされていたデスクトップ・Webへのクロスプラットフォームアプリの開発も可能になりつつある(まだプレビュー版で現時点でのプロダクション利用は厳しい)のも、今後への期待ポイントです。 Flutterの学習コストは?個人的には、以下程度に思っています。 簡単なプロトタイプ・ごくシンプルなアプリ: まあまあ簡単ある程度複雑・中規模以上のアプリ: 簡単ではない(iOSネイティブよりも少し習熟しやすいかも?程度)簡

    Flutter FAQ 🇯🇵
  • コンテナ技術を捨て、 WASIを試す

    こんにちは、NTTの藤田です。 Dockerfileを書くのに疲れた?イメージサイズの縮小で1日が終わった?コンテナの起動が遅すぎる?コンテナ技術と悪戦苦闘する皆様のための新技術、アーキテクチャに依存しないポータブルなバイナリフォーマットと数十μsで起動するsandbox環境を実現する、WebAssembly System Interface(WASI)を試してみました。 WebAssembly System InterfaceとはWASIは、 WebAssemblyWASM)をウェブブラウザ以外の環境で実行するため、 ホストのファイルやネットワークなどの資源に安全にアクセスさせるための仕様です。 具体的には、POSIXに似たAPIが定義されており、WASMのバイナリが、OSが管理する資源にアクセスできるようになります。 WASMは、ネイティブコードなみの速度で動作する、ポータブルなバイ

    コンテナ技術を捨て、 WASIを試す
  • gRPC を使って1万接続を達成するまでの話

    先日、Wata で1万接続を達成した という記事を書きましたが、gRPC で1万接続するにあたって引っかかったところを纏めました。 Wata サーバは簡単に言えば PubSub サーバです。今回達成したのは Publisher が 1 で Subscriber が 10,000 の配信です。Wata の詳細については Wata プロジェクトについて を参照してください。 gRPC C++ の非同期 API をストリーミングで扱う方法が分からない番での Wata クライアントは Unity のアプリケーションになるわけですが、テスト時に1万の Unity アプリケーションを立ち上げるのはかなり辛いものがあります。 なので gRPC で通信するテスト用の Wata クライアントを書くわけですが、少ない台数でやるためには、1台で大量の接続を捌く必要があります。 1スレッド1クライアントだと死ぬ

    gRPC を使って1万接続を達成するまでの話
  • Hydra のススメ

    Hydra を使うHydra の使い方を具体的に見てましょう。Hydra は defhydra マクロで呼び出すキーバインドや関数に割り当てるキーなどを設定するだけで使えます。 (defhydra hydra-zoom (global-map “<f2>”) “zoom” (“g” text-scale-increase “in”) (“l” text-scale-decrease “out”))上は Hydra を使った zoom in out の設定です。 <f2> g でズームインします。l でズームアウトします。Hydra は繰り返しも解釈するので 5 回ズームする場合には <f2> で zoom を呼び出して 5g と入力するだけでいけます。これで特定の関数を複数回呼ぶ際に同じ Prefix を何度も押すという無駄な作業から開放されますね。この辺の機能は Smartrep という

    Hydra のススメ
    MonMonMon
    MonMonMon 2018/06/10
    キーバインドをmini bufferに出せるのが本当に便利でsmartrepから乗り換えた
  • モブプログラミングとコードレビュー

    特集1では,2人1組になってコードを書くペアプログラミング(ペアプロ)と,チーム一丸となってコードを書くモブプログラミング(モブプロ)について解説します。… この中で、モブプロは モブプログラミングの「モブ」とは群衆のことです。モブプログラミングでは、ペア(2人)ではなく、モブ(チーム全体)でプログラミングを行います。モブの人数は3人から5人くらいを想定しています。ペアプログラミングと同様に、コードを書くだけでなく、すべてをモブで行います。 と説明されています。 私がモブプログラミングという言葉を初めて聞いたのは、現マイクロソフト牛尾氏の以下のブログ投稿だったように思います。

    モブプログラミングとコードレビュー
    MonMonMon
    MonMonMon 2018/02/22
    “社長が「でも、生産性は半分ですよね」” あるあるだ 時間かければ生産出来るものではなくて、行ったり戻ったりするものだ、と、 モブプロで戻る確率が下がるから生産性があがるんだってコトをうまく伝えたい
  • コードレビューにおけるレビュアー側のアンチパターン

    tl;drコードレビューが上手く回って無くてチームが疲弊して辛かったよレビュアーの言い方を変えるだけで大体解決するよ立場とかで例外を許さず、みんながレビューしてレビューされると良いよはじめにあるプロジェクトGitHubのPRベースでのコードレビューを導入をしました。いかんせんチーム開発が初めてレベルの新人さんが多く、何かと苦労しました。特にレビュイーに対して不効率な指摘はそのまま指示の不明確さに繋がり、チーム全体の開発生産性を下げるので、レビュアーはレビュイー以上に気を使う必要があると感じました。下手をすると、レビュイーのメンタルが弱って闇堕ちするので、チームメンバーの最も大人な人がメンタルケアしたりします。大人な人は大体がリーダー格なので、その人の時間が奪われると何かと開発現場が疲弊しちゃいますね。コードレビューってそんなに難しいものだっけと思ったりもしますが、反省の意味も込めて実際に

    コードレビューにおけるレビュアー側のアンチパターン
  • 子育てエンジニアの自由時間がない件について

    この記事はぼくのあどべんとかれんだー10日目の記事です。 今日はまったくコーディングの時間がとれなかったので、速攻でこの記事を書いて終わります。 うちはエンジニア夫婦で1歳半の子どもがいます。お互いフルタイムで働いています。まだ子どもにすごく手がかかるため個人の自由時間はほぼない状態が続いています。ではどうやってこれまでのアドベントカレンダーの記事を書いてきたかというと、夜子どもを寝かしつけ、それから自分が寝るまでの時間に書いていました。平日は当然昼間は仕事があるので、記事は書けません。休日はというと、むしろ平日よりも自由時間は少ないです。 例えば、今日どういう時間の使い方だったかというと、 朝7時半ごろ子どもとともに起床、おむつを変えたあと、奥さんが朝ごはんを子どもにあげて、その間にぼくはトイレ等済ませます。子どもの朝ごはんが終わったら、奥さんが朝ごはんをべるので、ぼくが子どもの面倒を

    MonMonMon
    MonMonMon 2017/12/12
    うちは子ども3人だ 上の子が6歳でやっと手がかからなくなったなーっ感じ 2歳児は最も手がかかってヤバイ 0歳児は癒し 家で何かするのは今は諦めてる
  • LicensePlist というiOSアプリ利用ライブラリのライセンス一覧を生成するツールを作りました

    依存ライブラリ形式は以下に対応しています。 CocoaPodsCarthageYAML設定ファイルによる指定(例はこちら)特に、3つ目の「YAML設定ファイルによる指定」があるので、例えばソースを直接入れたりGit Submodule使っている場合も、そちらに記載すればOKです。SwiftPMはiOSアプリではまだ通常使われていないので未対応ですが、普及したらCocoaPods・Carthageと同様に標準対応する予定です。 生成される結果例このように、設定アプリ上でキレイに一覧されます。 インストールの仕方Installation にいくつか書いてありますが、CocoaPodsでのインストールをお勧めします。 Podfileに次の行を追記することでインストールできます。 pod 'LicensePlist'CocoaPodsを使っていない場合、Homebrew経由で、以下のコマンドによる

    LicensePlist というiOSアプリ利用ライブラリのライセンス一覧を生成するツールを作りました
  • Safari に WebRTC がきてどうなるのか

    WWDC17 で iOS/macOS の Safari 11 に WebRTC が搭載されることになりました。これで何が変わっていくのかをだらだら書いてみます。 雑感対応ブラウザが増えてめんどくさくなるSafari 対応を色々頑張らなくて良くなるiOS ネイティブアプリを開発しなくても良くなるかもしれない技術的には対応ブラウザが増えることで、確認作業が増えるのは面倒です。今まで Chrome と Firefox だけだったのが、 Edge と Safari といきなり 2 倍です。確認コストは 2 倍以上です。 Safari 特に iOS の Safari や Chrome で WebRTC が利用できないことで、コスト高めの iOS ネイティブアプリを開発せざるを得ない場合がありました。もともとネイティブアプリであれば気にならないのですがウェブサービスのおまけとして提供される場合は iO

  • デザインのバージョン管理をする世界

    僕の同僚のデザイナーはデザインツールにSketchを使っている。デザインは区切りのいいところまで出来ると保存してDropboxで共有してくれる。最近ではGitHubでSketchファイルを管理することも試しているようだ。GitHubで管理することで過去に遡ったり、ほかの人の作業をマージできたりする。ただ、Sketchファイルはプログラムのソースコードのようなテキストファイルではなくバイナリファイルだ。この違いでGitまたはGitHubの便利なものの多くが使えていないんじゃないか。 先日Sketchファイルをテキストファイル(JSON)として管理できるツールを公開したので、どういうモチベーションで作っているのか書いてみようと思う。ツールはまだ完璧ではないが、ぜひ使って意見をもらえたらと…思う 🙇🏻 テキストファイルになるとできることあぁ、デザイン全体のボーダーの色が淡くなったのいつだっけ

    デザインのバージョン管理をする世界
  • UI考:なぜそのセルには押せる感があるのか

    セル(UITableViewCell)は iOS においてもっとも一般的なビューのひとつです。セルを利用することで、コンテンツの表示、選択、スイッチやボタンの配置、テキストフィールド、ナビゲーションを実装することができます。この辺りの具体的な実装例は『設定』や『Apple Store』が参考になるでしょう。セルにはさまざまな役割を与えられますが、どのような作法に従ってデザインされているのかよく理解する必要があります。 セルの一般的な利用作法は iOS Human Interface Guidelines で解説されていますが、私はこれを読んだだけでは十分に理解が及ばなかったため、iOS 標準アプリの事例からセルのデザインについて考察したものをまとめました。この記事では iOS の標準的なセルのデザインパターンを探り、自身のアプリにどう活かせるのかの土台となるよう考察してみます。 UICol

    UI考:なぜそのセルには押せる感があるのか
    MonMonMon
    MonMonMon 2016/09/24
  • Emacs’ Org Mode will improve your software engineering

    When working deep within a problem, often a bundle of ideas can pop into your brain at the same time. Each of these ideas has potential, but as soon as you explore one of these ideas, the context and momentum of the remaining thoughts start evaporating. Exploring an idea incurs a cost to the brain in that zaps in a whole new set of related ideas (damn you, associative machine). As time goes on, yo