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

  • NginxでのeBPFとSO_REUSEPORTを使ったQUICコネクション受信処理

    はじめに2021年7月12日にNgnixブログに掲載された記事 “Our Roadmap for QUIC and HTTP/3 Support in NGINX” では、QUICとHTTP/3機能を2021年末にはメインラインへマージする計画が言及されています。現在のHTTP3/QUIC対応Nginxは、専用の開発ブランチ (nginx-quic)で開発が進められていますが、常に最新のリリース (7月26日時点で1.21.1)を取り込んでおり、HTTP3/QUIC以外の最新機能も利用可能です。筆者も、昨年から開発ブランチの動作を試しており、HTTP3/QUICでの大きな負荷をかけても良好なパフォーマンスを示しています。 さて、Nginxブログで言及されたHTTP3/QUICに関する機能の一つとして、“eBPFを使ったマルチプロセスアーキテクチャ” という項目がありました。QUIC特有の仕

    NginxでのeBPFとSO_REUSEPORTを使ったQUICコネクション受信処理
    yfnt
    yfnt 2021/07/28
  • RustでLinuxカーネルの機能を拡張しよう!

    Linuxカーネルの機能を安全に拡張できるeBPFのコードはC言語で実装する必要があると知り、がっかりしているクラウドネイティブ 世代の皆様に朗報です。実は、Rustで、eBPFのコードを実装することができます。今更、C言語(クラウドネイティブ ではない感じ)を学ぶ必要はありません! eBPFとプログラミング言語eBPFを活用するソフトウェアは、カーネルスペースで動作するeBPFバイトコードと、eBPFバイトコードを制御するユーザスペースのアプリケーションから構成されます。後者は、GoPythonRustなど様々なプログラミング言語で実装することができますが、前者は、制限のあるC言語で実装する必要があります。 eBPFの構成Rust用eBPFライブラリRustでeBPFを扱う一般的な方法は、libbpf-rsライブラリです。これは、C言語でユーザスペースのアプリケーションを実装するため

    RustでLinuxカーネルの機能を拡張しよう!
    yfnt
    yfnt 2021/06/14
  • TCPが遅すぎる?QUICを使おう!

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

    TCPが遅すぎる?QUICを使おう!
    yfnt
    yfnt 2020/07/14
  • GPU Dashboards in Jupyter Lab

    IntroductionWe are excited to announce NVDashboard, an open-source package for the real-time visualization of NVIDIA GPU metrics in interactive Jupyter environments. NVDashboard is a great way for all GPU users to monitor system resources, but it is especially valuable for users of RAPIDS, NVIDIA’s open-source suite of GPU-accelerated data-science software libraries. Given the computational intens

    GPU Dashboards in Jupyter Lab
    yfnt
    yfnt 2020/03/06
  • Go言語の思想とエウレカでの5年間の活用

    こんにちは、こんばんは。CTO の kaneshin です。エンジニア組織のマネジメントに多く時間を割いていますが、技術的な方面では GoGCP を掛け合わせて Nature Remo + Go + Cloud Functions + BQ を駆使して、部屋の温度・湿度・照度や人体センターの検知を趣味で少しずつ開発しています。 クラウドサービスをはじめとしたマネージドサービスが主流な界隈にとって、今までアプリケーションの責務として実装していたところをマネージドサービスに責務を委譲することができたりするので、アプリケーションを複雑に実装しなくて済むようになっていますし、保守・運用の観点からもそのような設計方針をよく目につくようになりました。 例えばバッチ処理でデータを ETL 処理の設計を責務分割するのは良い例でしょう。 Data Transformation with Cloud D

    Go言語の思想とエウレカでの5年間の活用
    yfnt
    yfnt 2019/12/20
  • GraphQL Resolvers: Best Practices

    From graphql.orgThis post is the first part of a series of best practices and observations we have made while building GraphQL APIs at PayPal. In upcoming posts, we’ll share our thoughts on: schema design, error handling, production visibility, optimizing client-side integrations and tooling for teams. You might have seen our previous post “GraphQL: A success story for PayPal Checkout” about PayPa

    GraphQL Resolvers: Best Practices
    yfnt
    yfnt 2019/12/18
  • [UIKit考察]AutoLayoutと他のレイアウトエンジンをどのように接続するか (最大の横幅はどうやって知る?)

    この記事は、開発するiOSアプリの中で、レイアウトパフォーマンスを上げるため、部分的にAutoLayout以外のレイアウトエンジンを用いた場合に、どのようにAutoLayoutの世界と接続することが出来るか。という考察です。 考え方の基として、AutoLayoutからしたらその他のレイアウトエンジンはFrameベースで行うマニュアルレイアウトと同じものになるので、 AutoLayoutの制約の中でマニュアルレイアウトで作られたカスタムUIViewのコンポーネントを正しく動かすには? を考えることになります。 先に結論考察の結論として、スッキリしたものではないが、 マニュアルレイアウトで作られたカスタムコンポーネントはUILabelのサブクラスを使うUILabelの持つtextRectメソッドをOverrideし、自身が膨張可能な幅を知り高さを計算しAutoLayoutに返却この手法でマニ

    [UIKit考察]AutoLayoutと他のレイアウトエンジンをどのように接続するか (最大の横幅はどうやって知る?)
    yfnt
    yfnt 2019/11/28
  • Go: Overview of the Compiler

    Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French.ℹ️ This article is based on Go 1.13. The Go compiler is an important tool in the Go ecosystem since it is one of the essential steps for building our programs to executable binaries. The journey of the compiler is a long one, it has been written in C to move to Go and many optimizations and clea

    Go: Overview of the Compiler
    yfnt
    yfnt 2019/09/12
  • G Suite x Zendesk API で問い合わせの分析・可視化ツールを作ってみた

    システムの全体像はじめにZendesk はヘルプページを作ったりユーザーからの問い合わせにメールやチャットベースで答えられるカスタマーサポートのためのサービスです。 弊社では Zendesk を利用しており、サービス改善のために問い合わせの内容を閲覧・分析しています。カスタマーサポートを業務で行わないが、プロダクト改善をしたい社内メンバー向けに、Zendesk API をたたいて可視化・分析する仕組みを G Suite で作ってみました。 Zendesk に限らず、外部サービスで API が用意されているものでしたら同様に可視化・分析の仕組みを作れるので参考にしてみてください。 できたものダッシュボードWeekly と Monthly の問い合わせ件数を Data Studio で可視化しています。問い合わせのタグや文言で絞り込みができます。 DataStudio によるダッシュボード問い

    G Suite x Zendesk API で問い合わせの分析・可視化ツールを作ってみた
    yfnt
    yfnt 2019/07/19
  • Xcodegenを導入しました。

    A Swift command line tool for generating your Xcode project - yonaskolb/XcodeGen xcodegenを導入することで、 yml -> 設定値ディレクトリ構造 -> ファイルツリーという関係のxcodeprojを作ることができます。 結果、xcodeprojをgitで管理する必要がなくなりxcodeprojのコンフリクトを0にすることができます。 xcodeprojのコンフリクトはチームの規模が大きくなるにつれて課題になるのは明らかなので、先んじて手を打ったという形です。 PocochaでのXcodegenの導入Pocochaでは、アプリケーションの各モジュールをxcodeprojで管理しておりそれらをworkspaceに入れて開発しています。 モデル層やタイムラインのUIなどで細かくモジュール分割しているこれらの

    Xcodegenを導入しました。
    yfnt
    yfnt 2019/06/12
  • 美少女声への変換と合成

    Introduction今までは主に可愛い女の子の画像(or 動画)を生成することに取り組んできましたが、画面上に映せるようになったらやはり可愛い声で話して欲しいものです。そこで今回は、別の人の声が与えられた時に美少女声へと変換するための声質変換と、テキストが与えられた時に美少女声を生成するText-to-Speech(TTS)を行なった試行結果について述べようと思います。 Voice ConversionIntroduction声質変換のデータには2種類あります。それが、パラレルデータとノンパラレルデータです。以下にそれぞれの特徴を述べていきます。 パラレルデータを用いた声質変換 同じセリフを発する2種類の声を学習データとして用います。発話内容が同じのため、言語特徴を気にせず音響特徴量の変換を行うことが可能です。しかし、話速の違い等によって言葉を発するタイミングがずれてしまうのでDyna

    美少女声への変換と合成
    yfnt
    yfnt 2019/05/16
  • 詳解 google-cloud-go/spanner  — セッション管理編

    はじめにCloud Spanner では各言語ごとにライブラリが提供されており、アプリケーションはそれを使うことで非常に簡単にデータベースにアクセスすることができます。しかし Cloud Spanner の性能を最大限引き出すためには、クライアント側の設定値をチューニングしたりなど、クライアントライブラリの挙動を知っておくことが不可欠です。そこで記事では Go 言語のクライアントライブラリ (google-cloud-go) を例に、クライアントライブラリがどのような処理をしているかをじっくりと紐解いてみたいと思います。 全てを一度にカバーすると結構なボリュームになってしまうので、まずは記事で Spanner の「セッション管理」の部分について説明します。記事を通して ClientConfig や SessionPoolConfig の各値の意味がわかるようになるのが目標です。 尚こ

    詳解 google-cloud-go/spanner  — セッション管理編
    yfnt
    yfnt 2019/05/14
  • Go言語のio.Pipeでファイルを効率よくアップロードする方法

    パイプ(土管)をGo言語でも楽しめるはじめに前回はGo言語のmime/multipartパッケージによるファイルのアップロードを見ましたが、パフォーマンスの特徴にはあまり触れませんでした。 大規模なETLジョブや、制限の厳しいサーバーレスの環境などでは、ファイルを扱うプログラムのリソースを慎重に考える必要があります。記事ではメモリ使用量を大幅に減らすio.Pipeの使い方を見ていきます。 全てのコードはサンプルレポジトリにあります。 同期処理にある問題前回のコードをもう一度見てパフォーマンスを考えてみましょう。 // ファイルを開く file, _ := os.Open(filename) // リクエストボディのデータを受け取るio.Writerを生成する。 body := &bytes.Buffer{} // データのmultipartエンコーディングを管理するmultipart.W

    Go言語のio.Pipeでファイルを効率よくアップロードする方法
    yfnt
    yfnt 2019/05/06
  • Kotlin Xcode Plugin

    Kevin is Parter at Touchlab, a mobile innovation consultancy with Kotlin Multiplatform expertise. If you’re interested in learning more, we’re hosting a live demo of the plugin on Friday, April 26, 3 PM EST. You can tune in here. For native mobile developers using Kotlin Multiplatform, the iOS dev experience will be critical. Over the next several months at least, that will be the primary focus of

    Kotlin Xcode Plugin
    yfnt
    yfnt 2019/04/25
  • The Visual Python Debugger for Jupyter Notebooks You’ve Always Wanted

    I’ve been using Jupyter Notebooks with great delight for many years now, mostly with Python, and it’s validating to see that their popularity keeps growing, both in academia and the industry. I do have a pet peeve though, which is the lack of a first-class visual debugger similar to these available in other IDEs like Eclipse, IntelliJ, or Visual Studio Code. Some would rightfully point out that Ju

    The Visual Python Debugger for Jupyter Notebooks You’ve Always Wanted
    yfnt
    yfnt 2019/03/26
  • jq コマンドで JSON を CSV に変換する

    jq can mangle the data format that you have into the one that you want with very little effort, and the program to do… とっても優秀な jq コマンドは、ご丁寧にフィルターで加工した値をCSV形式で出力する機能を用意してくれています。 > jq -r '<CSV 形式で出力したい要素を取り出すフィルター> | @csv'最期の|@csv が重要です。 簡単な例を使って、振る舞いを確認してみます。 出力(1) サンプルデータ(sample1.json)の内容の確認> cat sample1.json [ {"key1": "value11", "key2": "value12", "key3": "value13"}, {"key1": "value21", "key2":

    jq コマンドで JSON を CSV に変換する
    yfnt
    yfnt 2018/11/09
  • Building An Android Audio Player In Flutter: I

    So over the past 2 weeks I have been working on an Android app in my free time. It started out as a way for me to use as many of Flutter’s features as I can and see how it all works out. I wanted a project that will allow me apply the BLoC pattern extensively, use platform channels, overlays, databases, shared preferences and also apply animations. The best idea that came to me was to build an Aud

    Building An Android Audio Player In Flutter: I
    yfnt
    yfnt 2018/11/03
  • GCP と OAuth2

    はじめにGCP のサービスにプログラムからアクセスするためには必ず認証・認可が必要ですが、以下のような様々なコマンドや概念が出てくるので少しとっつきにくい印象があります。 gcloud auth logingcloud auth application-default loginService AccountApplication Default Credentialsこれらの概念は認証・認可のベースとなっている OAuth2 の文脈で眺めてみると全体像が理解しやすくなるので、記事でまとめてみたいと思います。 GCP での認証・認可GCP の認証・認可は一部(*)を除いて全て OAuth2 ベースでやり取りされています。(* API Key) OAuth2 は三者間の手続きです。 3-Legged OAuth2Client が Resource Owner の代わりに Resource

    GCP と OAuth2
    yfnt
    yfnt 2018/10/03
  • Vue.js からみた AtomicDesign

    この記事はVue.js #3 Advent Calendar 2017の13日目の記事です Atomic Design自体の記事は色々ありますので、この記事ではAtomicDesignで設計したコンポーネントをVue.jsで実際に運用してみて感じた事をまとめてみました 実際にどんな感じになるか結論から言うと、AtomとMoleculeにStoreを持たせず。 OrganismsとTemplateあたりの粒度でStoreを利用するとIA的にも収まりがいい様に思えます。是非デザイナーにツッコミ入れましょう。 VueコンポーネントをAtomicDesignで実装するとだいたいこんな感じになります。Atomの役割色・タイポ・ボタン固定文言など 直接描画要素にデータをレンダリング描画要素のイベントを発行親要素からのデータ受け取り登場箇所がすごく多いのでステートレスを徹底するStoreみちゃダメ絶対!

    Vue.js からみた AtomicDesign
    yfnt
    yfnt 2018/09/06
  • iOSネイティブアプリ開発者から見たFlutter

    Flutter is Google's mobile UI framework for crafting high-quality native experiences on iOS and Android in record time… なぜFlutterに興味を持ったかFlutterAndroidアプリ開発者ウケの方が良くて、iOSネイティブアプリ開発者が気で触っている事例を国内ではあまり見聞きしません。そのためか、周りからも「iOSネイティブアプリが作れるのになぜFlutterにも手を出すの?」のようなことを聞かれることがちょくちょくあります。まずはそのあたりから詳しく述べていきます。 一番初めのきっかけはDroidKaigi 2018の発表DroidKaigi 2018 用のiOSアプリがFlutterで作られていて、 konifar さんのこちらのスライドを見たりPodcas

    iOSネイティブアプリ開発者から見たFlutter
    yfnt
    yfnt 2018/08/16