並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 155件

新着順 人気順

file-descriptorの検索結果1 - 40 件 / 155件

  • Webサーバーアーキテクチャ進化論2023

    はじめに 最近プログラマーとしてのキャリアに一区切りつけようと思っており、これまでのプログラミングの勉強の集大成となるブログを書きたくなったので書く。初めてプログラミングをして、フロントエンド開発をして、サーバーから値が返ってきたときは「どういう仕組みで値が返ってきたんだ?」と疑問に思っていた。ずっと理解したくて理解できていなかった。だからずっと勉強していた。そして最近になってようやく自分の言葉で説明できるようになった気がしたのでブログを書きたい。 2015 年版が自分の原点であり、この記事を書くモチベーションになった このような記事は実は過去に存在している。 FYI: https://blog.yuuk.io/entry/2015-webserver-architecture その記事はサーバーがどういう仕組みで動いていて、どのように進化し、2015 年に至るかを解説してくれた記事だ。自

      Webサーバーアーキテクチャ進化論2023
    • サービス間通信のための新技術「gRPC」入門 | さくらのナレッジ

      たとえば次のような「user.proto」というプロトコル定義ファイルを用意し、これを変換する例を見てみよう。 syntax = "proto3"; message Picture { uint32 id = 1; uint32 width = 2; uint32 height = 3; enum PictureType { PNG = 0; JPEG = 1; GIF = 2; } PictureType type = 4; } message User { uint32 id = 1; string nickname = 2; string mail_address = 3; enum UserType { NORMAL = 0; ADMINISTRATOR = 1; GUEST = 2; DISABLED = 3; } UserType user_type = 4; repeated

        サービス間通信のための新技術「gRPC」入門 | さくらのナレッジ
      • 令和にふりかえる C10K 問題

        C10K 問題 (the C10K problem) は1999年に Dan Kegel が発表した文章、ならびにそこで提示された「問題」です。文章はその後も2000年代前半に何度か更新されているのですが、さすがに令和に読み返すと、当初の問題意識がわかりにくいところがあります。 2000年からの10年は、 ソフトウェア面では、select(2), poll(2) にかわる新しいシステムコールの実装と、それを使ったアプリケーションの普及 ハードウェア面では、x86 アーキテクチャの64ビット移行、仮想化命令の追加と、マルチコア化 さらにそこにクラウドも登場する、面白い時代でした。ここでは、それらの出来事を中心に、さらに、当時の雰囲気をつたえるような日本国内のブログやインタビュー記事をまとめることで、C10K 問題が、さまざまな側面から解決されていく流れを説明したいと思います。 書き足したいと

        • Linux カーネルをバイパスして TCP 通信を 10 倍速くする | IIJ Engineers Blog

          【IIJ 2023 TECHアドベントカレンダー 12/16の記事です】 この記事について 背景:TCP はコンピュータネットワークの通信において広く利用されているプロトコル・標準化された通信規格です。コンピュータは TCP/IP スタックと呼ばれるようなソフトウェアを実行することで、定められた規格に則って通信を行います。汎用 OS 環境では、TCP/IP スタックは多くの場合、カーネル空間に OS 機能の一部として実装されています。 課題:通信に関するソフトウェアの研究コミュニティでは、そのようなカーネル空間に実装されている TCP/IP スタックは、近年の高速な NIC の性能を十分に引き出すことが難しいという課題が指摘されてきました。 テクニックの紹介:当記事では、近年の研究コミュニティにおいて比較的一般的な高速化テクニックとされている「カーネルをバイパス(迂回)して TCP 通信を

            Linux カーネルをバイパスして TCP 通信を 10 倍速くする | IIJ Engineers Blog
          • 会社の支給PCがMacBook Pro M1なので、新しく開発環境を構築した話 - 食べチョク開発者ブログ

            こんにちは。 今年の年始からジョインした遠藤です。 さて、入社したところ会社支給のMacBook ProがM1チップのものでした。 はい、現状は開発環境で苦労するとか色々噂を聞くやつです。 実際に試したのですが、 現状の開発環境構築スクリプト、手順書が一切使えない VitualBox, Vagrantは利用不可 Dockerは利用可能ではあるが、一部イメージが対応されてない 古いパッケージは動かす手段がない などなど、通常ではぶつからない問題にぶつかります。 食べチョクでは、 Ruby Node.js MySQL Redis ElasticSearch Kibana を利用しています。 この辺りをメインに話つつ、Intel版とこんな風に違うのかっていう辺りの雰囲気を感じ取っていただければと思います。 どこに開発環境を構築するか まず、どこで開発環境を構築するかを考えてみたいと思います。 ロ

              会社の支給PCがMacBook Pro M1なので、新しく開発環境を構築した話 - 食べチョク開発者ブログ
            • yarn と npm の栄枯盛衰

              yarn と npm の栄枯盛衰2021 年 8 月に yarn の v3 がリリースされました。2020 年の同月あたりに yarn v2 がリリースされたので、約 1 年ぶりのメジャーバージョンアップになります。 v1 → v2 のパラダイムシフトは強烈でしたが、 v2 → v3 は berry というパッケージ名は相変わらずで、 v2 の正統なバージョンアップでありちょっとだけ物足りなさを感じてます。 Get Started なにはともあれ、とりあえずは触ってみましょうか。 Node.js ≥ 16.10 であれば、 Corepack を使って以下のコマンドで yarn v3 をインストールできます。 $ corepack enable $ corepack prepare yarn@3.0.0 --activate # yarn.lock や README.md が生成される $

                yarn と npm の栄枯盛衰
              • プロと読み解くRuby 3.3 NEWS - STORES Product Blog

                テクノロジー部門CTO室の笹田(ko1)と遠藤(mame)です。今年の 9 月から STORES 株式会社で Ruby (MRI: Matz Ruby Implementation、いわゆる ruby コマンド) の開発をしています(Rubyのこれからを STORES で作る。Rubyコミッター笹田さん、遠藤さんにCTOがきく「Fun」|STORES People )。お金をもらって Ruby を開発しているのでプロの Ruby コミッタです。 本日 12/25 に、恒例のクリスマスリリースとして、Ruby 3.3.0 がリリースされました(Ruby 3.3.0 リリース)。クックパッド開発者ブログで連載していたように、今年も STORES Product Blog にて Ruby 3.3 の NEWS.md ファイルの解説をします(ちなみに、STORES Advent Calendar

                  プロと読み解くRuby 3.3 NEWS - STORES Product Blog
                • Linux perf Examples

                  Recent posts: 22 Jul 2024 » No More Blue Fridays 24 Mar 2024 » Linux Crisis Tools 17 Mar 2024 » The Return of the Frame Pointers 10 Mar 2024 » eBPF Documentary 28 Apr 2023 » eBPF Observability Tools Are Not Security Tools 01 Mar 2023 » USENIX SREcon APAC 2022: Computing Performance: What's on the Horizon 17 Feb 2023 » USENIX SREcon APAC 2023: CFP 02 May 2022 » Brendan@Intel.com 15 Apr 2022 » Netfl

                  • WebVM: server-less x86 virtual machines in the browser

                    Back to blog WebVM: server-less x86 virtual machines in the browser TL;DR — We made a server-less virtual Linux environment that runs unmodified Debian binaries in the browser. This is powered by CheerpX, a WebAssembly virtualization platform. Feel free to play with it and report bugs: https://webvm.io WebVM — a server-less virtual Linux environment running fully client-side in HTML5/WebAssembly.

                      WebVM: server-less x86 virtual machines in the browser
                    • syncコマンドのデータ同期タイミングとI/Oエラー検出

                      syncコマンドはストレージデバイスへのI/Oをキャッシュしているページキャッシュとバッファキャッシュのデータをデバイスに同期(以下「同期」と記載)します。このコマンドについては「syncは同期処理を開始するだけで完了を待たずに終了する」「syncを3回実行すると同期が完了する」などという話が有名です。本記事ではLinux環境においてsyncコマンドの終了時に同期がされるのかについて述べます。syncコマンドはGNU coreutilsが提供するものを対象とします。 本記事ではsyncコマンドによる同期のタイミングに加えてもう一つ、同期処理の実行中にI/Oエラーが発生した場合に、エラーを検出できるのかについても述べます。 まとめ syncコマンド実行後に同期は完了している。ただし仕様上はそうなると保証されていない。 同期中のディスクI/Oエラーは-fオプションを付ければ検出できる。 調査環

                        syncコマンドのデータ同期タイミングとI/Oエラー検出
                      • Kernel Queue: The Complete Guide On The Most Essential Technology For High-Performance I/O

                        Kernel Queue: The Complete Guide On The Most Essential Technology For High-Performance I/O When talking about high-performance software we probably think of server software (such as nginx) which processes millions requests from thousands clients in parallel. Surely, what makes server software work so fast is high-end CPU running with huge amount of memory and a very fast network link. But even the

                          Kernel Queue: The Complete Guide On The Most Essential Technology For High-Performance I/O
                        • Containers the hard way: Gocker: A mini Docker written in Go

                          They are popular and they are misunderstood. Containers have become the default way applications are packaged and run on servers, initially popularized by Docker. Now, Docker itself is misunderstood. It is the name of a company and a command (a suite of commands, rather) that allow you to manage containers (create, run, delete, network) easily. Containers themselves however, are created from a set

                            Containers the hard way: Gocker: A mini Docker written in Go
                          • Webサーバーアーキテクチャ進化論2023

                            はじめに 最近プログラマーとしてのキャリアに一区切りつけようと思っており、これまでのプログラミングの勉強の集大成となるブログを書きたくなったので書く。初めてプログラミングをして、フロントエンド開発をして、サーバーから値が返ってきたときは「どういう仕組みで値が返ってきたんだ?」と疑問に思っていた。ずっと理解したくて理解できていなかった。だからずっと勉強していた。そして最近になってようやく自分の言葉で説明できるようになった気がしたのでブログを書きたい。 2015 年版が自分の原点であり、この記事を書くモチベーションになった このような記事は実は過去に存在している。 FYI: https://blog.yuuk.io/entry/2015-webserver-architecture その記事はサーバーがどういう仕組みで動いていて、どのように進化し、2015 年に至るかを解説してくれた記事だ。自

                              Webサーバーアーキテクチャ進化論2023
                            • Why stdout is faster than stderr? - Orhun's Blog

                              I recently realized stdout is much faster than stderr for Rust. Here are my findings after diving deep into this rabbit hole. I have been using the terminal (i.e. command-line) for most of my day-to-day things for a while now. I was always fascinated by the fact that how quick and convenient the command-line might be and that's why I'm a proponent of using CLI (command-line) or TUI (terminal user

                                Why stdout is faster than stderr? - Orhun's Blog
                              • GoのCLIで標準入力とファイル読み込みの両方に対応する - Carpe Diem

                                概要 Goでは簡単にコマンドラインツールが作れますが、人によって引数やオプションといったインタフェースがバラバラになりがちです。 POSIX Utility Syntax Guidelinesというガイドラインがあるので、これに則るとUnixライクな統一されたインタフェースのCLIツールになります。 環境 golang/go v1.15.1 インタフェースのイメージ 例えば文字列の入ったファイルがあり $ cat sample.txt hogefuga 入力文字列をすべて大文字にするコマンドcapitalizeを作る場合、以下の3つのインタフェースをサポートするイメージです。 $ cat sample.txt | capitalize HOGEFUGA $ cat sample.txt | capitalize - HOGEFUGA $ capitalize sample.txt HOGE

                                  GoのCLIで標準入力とファイル読み込みの両方に対応する - Carpe Diem
                                • Three bugs in the Go MySQL Driver

                                  EngineeringThree bugs in the Go MySQL DriverCheck out what we learned from shipping our busiest Go service in production—we found 3 bugs in the Go MySQL driver. Although GitHub.com is still a Rails monolith, over the past few years we’ve begun the process of extracting critical functionality from our main application, by rewriting some of the code in Go—mostly addressing the pieces that need to ru

                                    Three bugs in the Go MySQL Driver
                                  • How are Unix pipes implemented?

                                    This article is about how pipes are implemented the Unix kernel. I was a little disappointed that a recent article titled “How do Unix pipes work?” was not about the internals, and curious enough to go digging in some old sources to try to answer the question. What are we talking about? Pipes are “perhaps the single most striking invention in Unix” — a defining characteristic of the Unix philosoph

                                      How are Unix pipes implemented?
                                    • How io_uring and eBPF Will Revolutionize Programming in Linux

                                      Things will never be the same again after the dust settles. And yes, I’m talking about Linux. As I write this, most of the world is in lockdown due to COVID-19. It’s hard to say how things will look when this is over (it will be over, right?), but one thing is for sure: the world is no longer the same. It’s a weird feeling: it’s as if we ended 2019 in one planet and started 2020 in another. While

                                        How io_uring and eBPF Will Revolutionize Programming in Linux
                                      • Diving into /proc/[pid]/mem

                                        A few months ago, after reading about Cloudflare doubling its intern class size, I quickly dusted off my CV and applied for an internship. Long story short: now, a couple of months later, I found myself staring into Linux kernel code and adding a pretty cool feature to gVisor, a Linux container runtime. My internship was under the Emerging Technologies and Incubation group on a project involving g

                                        • Learning Async Rust With Entirely Too Many Web Servers

                                          I've found that one of the best ways to understand a new concept is to start from the very beginning. Start from a place where it doesn't exist yet and recreate it yourself, learning in the process not just how it works, but why it was designed the way it was. This isn't a practical guide to async, but hopefully some of the background knowledge it covers will help you think about asynchronous prob

                                            Learning Async Rust With Entirely Too Many Web Servers
                                          • My First Kernel Module: A Debugging Nightmare

                                            This is the story of the time I wrote some code, deployed it to production, and ended up bricking the server it was running on by frying the kernel. Beautiful rendition of me frying the kernel This post is about perils of concurrency and race conditions. My code was nearly correct, but ultimately, there were two major synchronization bugs that killed it. This is a really long post that gets into t

                                            • Announcing Rust 1.63.0 | Rust Blog

                                              The Rust team is happy to announce a new version of Rust, 1.63.0. Rust is a programming language empowering everyone to build reliable and efficient software. If you have a previous version of Rust installed via rustup, you can get 1.63.0 with: $ rustup update stable If you don't have it already, you can get rustup from the appropriate page on our website, and check out the detailed release notes

                                                Announcing Rust 1.63.0 | Rust Blog
                                              • Announcing Rust 1.50.0 | Rust Blog

                                                The Rust team is happy to announce a new version of Rust, 1.50.0. Rust is a programming language that is empowering everyone to build reliable and efficient software. If you have a previous version of Rust installed via rustup, getting Rust 1.50.0 is as easy as: $ rustup update stable If you don't have it already, you can get rustup from the appropriate page on our website, and check out the detai

                                                  Announcing Rust 1.50.0 | Rust Blog
                                                • ISUCON11予選に「チーム中目黒乗り過ごし」で参加し本選出場決まりました - Hateburo: kazeburo hatenablog

                                                  ISUCON11の予選に参加し、なんとか本選出場を決めました!チームは去年と同じ「中目黒乗り過ごし」でメンバーも変わらず、hanabokuro氏、mtokioka氏と参加しました。 isucon.net チーム中目黒乗り過ごしとして、2年連続で9位で本選出場です。去年の予選記事はこちら。 kazeburo.hatenablog.com ちなみに、去年の本選はFailでした。 先日ISUCONのインタビュー記事に載りましたので、こちらもどうぞ type.jp 今回の問題 ISUのコンディションを収集し、可視化するサイトということで、IoTや大量のネットワーク機器の監視メトリクスの扱いが課題のネタとなっていたように思いました。 世界観が面白く、ISUが投擲の道具じゃなく、愛される存在になったのだと感慨深いものがありました。 構成とスコア 当初は1台でやっておりましたが、最終的に3台を次のように

                                                    ISUCON11予選に「チーム中目黒乗り過ごし」で参加し本選出場決まりました - Hateburo: kazeburo hatenablog
                                                  • Scaling Linux Services: Before accepting connections

                                                    More posts When writing services that accept TCP connections, we tend to think of our work as starting from the point where our service accepts a new client connection and finishing when we complete the request and close the socket. For services at scale, operations can happen at such a high rate that some of the default resource limits of the Linux kernel can break this abstraction and start caus

                                                    • February service disruptions post-incident analysis

                                                      EngineeringProductFebruary service disruptions post-incident analysisIn-depth analysis of February service disruptions that impacted GitHub services. In late February, GitHub experienced multiple service interruptions that resulted in degraded service for a total of eight hours and 14 minutes over four distinct events. Unexpected variations in database load, coupled with an unintended configuratio

                                                        February service disruptions post-incident analysis
                                                      • Let's make a contract: the art of designing a Java API

                                                        Let's make a contract: the art of designing a Java API 1. Let's make a contract: the art of designing a Java API by Mario Fusco mario.fusco@gmail.com @mariofusco 2. What is an API? 3. What is an API? 4. An API is what a developer uses to achieve some task What is an API? 5. What is an API? An API is a contract between its implementors and its users 6. And why should I care? We are all API designer

                                                          Let's make a contract: the art of designing a Java API
                                                        • debuginfod(elfutils debuginfo サーバー)の概要 - 赤帽エンジニアブログ

                                                          この記事はRed Hat DeveloperのIntroducing debuginfod, the elfutils debuginfo serverを、許可をうけて翻訳したものです。debuginfodは現在活発に開発中のソフトウェアで、2020年1月時点では elfutils へのマージが完了し、Fedora 31には含まれましたがまだRHELには含まれていません。 :::By Aaron Merey October 14, 2019 ::: バグを避けることはできないので、開発者は Systemtap や GDB などのデバッグツールへ素早くかつ簡単にアクセスできる必要があります。これらのツールは典型的にはDWARF(Debugging With Attributed Record Formats)を含むdebuginfoやソースファイルに依存します。これらのリソースへのアクセスは

                                                            debuginfod(elfutils debuginfo サーバー)の概要 - 赤帽エンジニアブログ
                                                          • Nix – taming Unix with functional programming

                                                            You may be aware of Nix or NixOS. Users love them for being superior tools for building, deploying, and managing software. Yet, Nix is generally perceived as notoriously hard to learn. The core Nix ecosystem consists of several distinct components: Nix is a build system and package manager that comes with a configuration language to declare software components, the Nix language. Software made avai

                                                              Nix – taming Unix with functional programming
                                                            • Go 1.15 Release Notes - The Go Programming Language

                                                              Introduction to Go 1.15 The latest Go release, version 1.15, arrives six months after Go 1.14. Most of its changes are in the implementation of the toolchain, runtime, and libraries. As always, the release maintains the Go 1 promise of compatibility. We expect almost all Go programs to continue to compile and run as before. Go 1.15 includes substantial improvements to the linker, improves allocati

                                                                Go 1.15 Release Notes - The Go Programming Language
                                                              • Swift System is Now Open Source

                                                                In June, Apple introduced Swift System, a new library for Apple platforms that provides idiomatic interfaces to system calls and low-level currency types. Today, I’m excited to announce that we’re open-sourcing System and adding Linux support! Our vision is for System to eventually act as the single home for low-level system interfaces for all supported Swift platforms. Goodbye Imported C Interfac

                                                                  Swift System is Now Open Source
                                                                • [アップデート] Amazon SES が SMTP エンドポイントの VPC エンドポイントをサポートしました | DevelopersIO

                                                                  こんにちは、岩城です。 数日前、VPC エンドポイントを介して、Amazon SES(以降、SES)の SMTP エンドポイントに接続できるアップデートが発表されました。 Amazon SES now offers VPC Endpoint support for SMTP Endpoints SES が利用できる以下の全リージョンで利用可能です。SES が利用できない東京リージョンでは VPC エンドポイントを作成できないので注意してください。 対象リージョン 米国東部(バージニア北部) 米国西部 (オレゴン) アジアパシフィック (ムンバイ) アジアパシフィック (シドニー) カナダ (中部) 欧州 (フランクフルト) 欧州 (アイルランド) 欧州 (ロンドン) 南米 (サンパウロ) 何ができるようになったの? SES を介して E メールを送信する方法は以下の 2 つです。 SMTP

                                                                    [アップデート] Amazon SES が SMTP エンドポイントの VPC エンドポイントをサポートしました | DevelopersIO
                                                                  • Announcing Rust 1.70.0 | Rust Blog

                                                                    The Rust team is happy to announce a new version of Rust, 1.70.0. Rust is a programming language empowering everyone to build reliable and efficient software. If you have a previous version of Rust installed via rustup, you can get 1.70.0 with: $ rustup update stable If you don't have it already, you can get rustup from the appropriate page on our website, and check out the detailed release notes

                                                                      Announcing Rust 1.70.0 | Rust Blog
                                                                    • Reverse Shell (リバースシェル) 入門 & 実践 - 好奇心の足跡

                                                                      某CTFの復習していて、"ReverseShellをやる"というwriteupがあったのだけど、具体的なやり方が分からなかったので1から調べてみました。 そもそもReverseShellってなに?3行くらいで説明して?(大幅にオーバーした) 最もシンプルなサンプルはどんな感じ? インターネット越しの実践例・揃えるべき環境が知りたい あたりに応えられる内容になっていればと思います。 リバースシェル(Reverse Shell)とは Reverse Shell Cheet Sheet Reverse Shell by Bash を分析 local環境でReverseShellを実践してみる kali linux on vm mac osx Private IPアドレスを指定して実施してみる kali linux on vm mac osx インターネット越しにReverseShellやってみる

                                                                        Reverse Shell (リバースシェル) 入門 & 実践 - 好奇心の足跡
                                                                      • Let's make a contract: the art of designing a Java API

                                                                        Let's make a contract: the art of designing a Java API 1. Let's make a contract: the art of designing a Java API by Mario Fusco mario.fusco@gmail.com @mariofusco 2. What is an API? 3. What is an API? 4. An API is what a developer uses to achieve some task What is an API? 5. What is an API? An API is a contract between its implementors and its users 6. And why should I care? We are all API designer

                                                                          Let's make a contract: the art of designing a Java API
                                                                        • Rootless Containers: The Next Trend in Container Security

                                                                          This post is also available in: 日本語 (Japanese) Executive Summary As cloud computing evolves, containers continue to become more and more popular. New solutions and ideas to the way we implement containers are being introduced. One of these new ideas is rootless containers. Rootless containers is a new concept of containers that don’t require root privileges in order to formulate. Many solutions ha

                                                                            Rootless Containers: The Next Trend in Container Security
                                                                          • Using WebAssembly from .NET with Wasmtime – Mozilla Hacks - the Web developer blog

                                                                            Wasmtime, the WebAssembly runtime from the Bytecode Alliance, recently added an early preview of an API for .NET Core, Microsoft’s free, open-source, and cross-platform application runtime. This API enables developers to programmatically load and execute WebAssembly code directly from their .NET programs. .NET Core is already a cross-platform runtime, so why should .NET developers pay any attentio

                                                                              Using WebAssembly from .NET with Wasmtime – Mozilla Hacks - the Web developer blog
                                                                            • Rust で WASI 対応の WebAssembly を作成して実行 - なんとなくな Developer のメモ

                                                                              Rust で WASI 対応の WebAssembly を作って、スタンドアロン実行や Web ブラウザ上での実行を試してみました。 WASI(WebAssembly System Interface) は WebAssembly のコードを様々なプラットフォームで実行するためのインターフェースで、これに対応した WebAssembly であれば Web ブラウザ外で実行できます。 Rust で WASI 対応の WebAssembly を作るのは簡単で、ビルドターゲットに wasm32-wasi を追加しておいて、rustc や cargo build によるビルド時に --target wasm32-wasi を指定するだけでした。 wasm32-wasi の追加 > rustup target add wasm32-wasi 標準出力へ文字列を出力するだけの下記サンプルコードを --

                                                                                Rust で WASI 対応の WebAssembly を作成して実行 - なんとなくな Developer のメモ
                                                                              • Why Create a New Unix Shell? (2021)

                                                                                Introduction Before explaining why I created Oil, let's review what it is. You can think of a Unix shell in two ways: As a text-based user interface. You communicate with the operating system by typing commands. As a language. It has variables, functions, and loops. Shell programs are text files that start with #!/bin/sh. In this document, we'll think of Unix shells as languages. The Oil project a

                                                                                • Security assessment techniques for Go projects

                                                                                  The Trail of Bits Assurance practice has received an influx of Go projects, following the success of our Kubernetes assessment this summer. As a result, we’ve been adapting for Go projects some of the security assessment techniques and tactics we’ve used with other compiled languages. We started by understanding the design of the language, identifying areas where developers may not fully understan

                                                                                    Security assessment techniques for Go projects