タグ

ブックマーク / qiita.com (250)

  • linuxカーネル4.1のプロセススケジューラ(ドラフト) - Qiita

    はじめに 記事は昔書いたlinuxカーネル4.1のプロセススケジューラの実装について途中まで書いたけど諸事情により二年くらい放置していたドラフトです。死蔵するのももったいないので公開しておきます。今現在のカーネルに比べてずいぶんと変わっていること、未稿の部分がかなりあること、誤字脱字や「てにをは」は気にしていないこと、などにご注意ください。 このドキュメントを積極的に更新する予定は(少なくともこの場では)いまのところありません。 ある瞬間にCPU1で動作できる処理は1つだけです。この限りあるCPU資源をシステムに存在する プロセス間で分配するのがプロセススケジューラです。プロセススケジューラは大きく分けて 次のことをします。 全プロセスの間で平等にCPUを分配する スループットの最大化 レイテンシ(応答時間、ターンアラウンドタイム)の最短化 個々のコアのことであり、かつ、ハイパースレッド

    linuxカーネル4.1のプロセススケジューラ(ドラフト) - Qiita
  • SIerの生き残り戦略としてのDevOps システム運用の社葬から - Qiita

    この記事に出てくる「当社」や「顧客」その他はフィクションです。ポエムです。実在のものとは関係ありません。 一部ではエンジニアの供給源として早く滅びろとまで言われているSIer、その中でも何ら価値を生み出さないゾンビ扱いのSIerのシステム運用が、もし生き延びることが出来るとしたらどんな姿なのかを考えてみるだけのポエムです。 ダラダラ書きますので、お付き合いしたいひとだけどうぞ。 社葬は嫌でもSIerで運用が好きという変態さんには、下記などを。 オカンや嫁をコアにするのではなく、システム運用をコアにしたドメイン駆動設計を、という差し迫った夢です。 システム運用のドメイン駆動設計、または運用の抽象化(とりあえず背景「SIerの伝統的な運用」) システム運用のドメイン駆動設計、または運用の抽象化(ドメインを隔離する) とりあえず、Qiitaを読んでる方が、いわゆるDevOpsやアジャイルという言

    SIerの生き残り戦略としてのDevOps システム運用の社葬から - Qiita
  • http.ListenAndServe() をインターネットに公開してはいけない - Qiita

    http.ListenAndServe() を使ったサーバーをプロダクションに投入していたのですが、海外からのアクセスが多くなったころにリソースリークが発覚しました。 ListenAndServeのドキュメント ListenAndServeのソースを見るとこうなっています。 func ListenAndServe(addr string, handler Handler) error { server := &Server{Addr: addr, Handler: handler} return server.ListenAndServe() } addr, handler 以外は http.Server のnil値がそのまま使われている事がわかります。この構造体にはいくつかのタイムアウト値がありまが、nil値で初期化されるとタイムアウトなしの状態になってしまいます。 Server型のドキ

    http.ListenAndServe() をインターネットに公開してはいけない - Qiita
  • 役割駆動設計で巨大クラスを爆殺する - Qiita

    大量のメソッドを保有し、数千、数万行単位にぶくぶく膨れ上がった巨大クラス。別名「神クラス」とも「大きな泥団子」とも呼ばれる、長大で複雑で密結合で極めて変更が困難なアイツ。 そんな巨大クラスの退治に有効な、ドメイン駆動設計を基思想とする「役割駆動設計」を紹介致します。 解決したい課題、狙う効果 数千、数万行単位の巨大クラスの登場を抑止する。 小さくシンプルな構造に落とし込み、堅牢で変更容易性の高い設計へ昇華させる。 例1:筆者をモデリング 分かりやすくなるよう、まず私を例にモデリングしてみます。私は以下のような特徴があります。 IT企業の従業員 家族がいる(, 子供) 趣味ゲーム制作している ダメな設計 何も考えずに人クラスとして設計すると、よく以下のような構造になりがちです。 従業員として仕事をする、父親として家族サービスする、趣味としてゲーム制作する、それぞれのメソッドが備わってい

    役割駆動設計で巨大クラスを爆殺する - Qiita
  • UTF-8のコードポイントはどうやって高速に数えるか - Qiita

    UTF-8文字列からコードポイント数を計算するアルゴリズムについて紹介します。コードポイント数カウントは、シンプルに書くのはそれほど難しくないものの、高効率な実装は意外にややこしいです。 内容は二立てです。 実践的な実装について、Ruby(CRuby)の内部実装(string.c)で使われているものを紹介します。 標準Cの範囲を超えて、SIMD命令(AVX/AVX2)を使った実装についても述べます 軽く検索する限りだと既知のアルゴリズムが見当たらなかったので、アドホックな実装をひねり出しましたが、そんなに効率は悪くなさそうです おまけで簡単な性能評価をやってみました。 なお、UTF-8文字列はバリデーション済み(不正なシーケンスでないことが分かっている)であるとします。 Rubyの内部実装だとどうやっているか まずは、それがコードポイントの先頭バイト(leading byte)かを判定す

    UTF-8のコードポイントはどうやって高速に数えるか - Qiita
  • JavaのGCの仕組みを整理する - Qiita

    最近メモリを大量に使うJavaのプロセスに関する仕事があり、GCの知識が必要になったので調べたことをまとめておきます。調べたら色々出てくる時代ですが考えを整理するために書きました。間違った認識をしている可能性はあるのでそこはご指摘いただけると幸いです。 注: この記事は最新のGC事情を整理するものではなく、古典的?な手法について書いてます。 JVM まずはざっくりJavaの基的な仕組みから。 JavaのプロセスはJVMと呼ばれる仮想マシンの上で動作します。この仕組みは様々なOSで動作し、環境の差異を気にする事なくコンパイルされたJavaのコード(クラスファイル)を様々な環境で実行可能にしてくれます。 JVMにはいくつ種類がありますが、記事はOpen JDKで用いられるHotSpot VMの場合を想定しています。(他のJVMとの違いはわからない) ヒープ領域 Javaのプロセスを開始する

    JavaのGCの仕組みを整理する - Qiita
  • Gitはどうやってテキストファイルとバイナリファイルを自動識別しているのか? - Qiita

    tl;dr 先頭 8000 バイト以内に NUL が有ったらバイナリファイル。 Gitの実装 Gitの内蔵diffは FIRST_FEW_BYTES だけ検索するようになっている。 https://github.com/git/git/blob/6e0cc6776106079ed4efa0cc9abace4107657abf/xdiff-interface.c#L187 #define FIRST_FEW_BYTES 8000 int buffer_is_binary(const char *ptr, unsigned long size) { if (FIRST_FEW_BYTES < size) size = FIRST_FEW_BYTES; return !!memchr(ptr, 0, size); }

    Gitはどうやってテキストファイルとバイナリファイルを自動識別しているのか? - Qiita
  • gRPC WebがGAになったのでそろそろ理解してみる

    2018/10/23に「gRPC-Web is Generally Available」というタイトルでgRPC-WebがGAになった事がgrpc公式ブログで発表されました。 https://grpc.io/blog/grpc-web-ga 翌日にCNCFのブログでも「gRPC-Web is going GA」というタイトルで同等の内容が公開されました。 https://www.cncf.io/blog/2018/10/24/grpc-web-is-going-ga/ 今までブラウザからgrpcが使えるgRPC-Webの存在は知っていましたが、ちまたで実際に利用しているというのもあまり聞かなかった為ほとんど気にしていませんでした。 この度GAになったのをきっかけにエコシステムができあがってくれば間違いなくパラダイムシフトになると思いちゃんと検証してみました。 この記事で書く事 gRPC-W

    gRPC WebがGAになったのでそろそろ理解してみる
  • 【まつもとゆきひろ氏 特別講演】20代エンジニアのためのプログラマー勉強法のまとめ 2019/3/30 - Qiita

    予想していた技術的な勉強法というより、エンジニア、ビジネスマンとしての生き方や、成功するための方法論を20代に向けてMatzさんが伝えてくれたのでまとめます。(自分なりの解釈も少し入ってます) とてもためになる講演でした。個人的には特に前談2、3、4、5、6がためになりました!! Matzさんありがとうございました! 講演内容 前談1. テクノロジーとは人を幸せにするためのもの 前談2. 若いうちから頑張ろう 1.学生と社会人の"勉強"の違い 2.なぜ勉強するのか? 3.勉強についてのTips(what, where, when, how) 4.とにかくアウトプット 5.成功するためのTips 6.最後に3つのアドバイス ※Ex)で書いている具体例はMatzさんが使われたものをそのまま使ってます。 前談1. テクノロジーとは人を幸せにするためのもの 来人を幸せにするためのテクノロジーが人

    【まつもとゆきひろ氏 特別講演】20代エンジニアのためのプログラマー勉強法のまとめ 2019/3/30 - Qiita
  • ID生成方法についてあれこれ - Qiita

    Help us understand the problem. What are the problem?

    ID生成方法についてあれこれ - Qiita
  • The Go Blog - Using Go Modules / Go Modulesを使う(和訳) - Qiita

    この記事は The Go Blog - Using Go Modules の和訳です。 はじめに Go 1.11および1.12には、依存バージョン情報を明示的で管理しやすくする、Goの 新しい依存管理システム である モジュール の予備サポートが含まれています。このブログ記事は、モジュールを使い始めるために必要な基的な操作を紹介するチュートリアルです。この次の記事では、他の人が使用するためのモジュールのリリース方法について説明します。 モジュールは、そのルートに go.mod ファイルを持つファイルツリーに格納された Goパッケージ の集まりです。 go.mod ファイルは、モジュールのモジュールパス(ルートディレクトリに使用されるインポートパス)とその依存関係の要件(ビルドを成功させるために必要な他のモジュール)も定義します。各依存関係の要件は、モジュールパスと特定の セマンティックバ

    The Go Blog - Using Go Modules / Go Modulesを使う(和訳) - Qiita
  • xUnit Test Patternsから学ぶ12個のユニットテストの原則 - Qiita

    エントリは、xUnit Test Patterns: Refactoring Test Codeという書籍の「Chapter5 Principles of Test Automation」の内容をベースに、12個のユニットテスト原則についてまとめていきます。この書籍は、2007年に販売されたものですが、今でも十分役に立つユニットテストに関する原則を伝えています。 ウェブでは、次のURLでも内容を見ることができます。 自動ユニットテストの原則 ここで紹介されるものは、ユニットテストで確認したい quality のリストです。ですので、直接適用する「パターン」ではありません。 「何をやるか」よりも「なぜやるのか」という観点においてまとめられています。 エントリでは、xUnit Test Patterns: Refactoring Test Codeで紹介されている12個の原則をベースに、ほ

    xUnit Test Patternsから学ぶ12個のユニットテストの原則 - Qiita
  • ブラウザレンダリング入門〜知ることで見える世界〜 - Qiita

    はじめに 『レンダリングの仕組みなんて知らなくても、ブラウザが勝手にやってくれるじゃん!』 当時駆け出しのエンジニアだった私はそう思っていました。 実際、当時の私はレンダリングの『レ』の字も知りませんでしたが、特に業務上で問題はありませんでした。 しかし、その時は突然訪れました。 クライアントの要望でアニメーションを多彩に取り入れた案件を実装した際に、テスト段階で一部ブラウザ(S○f○ri、E○ge)でアニメーションがひどい状況になっていることが発覚しました。 (開発中はChromeで確認を行っており、Chromeでは特に問題はなかったので発覚が遅れました。) それからは、狂ったようにパフォーマンスの改善方法をググり、修正する日々が続きました。(最終的には、なんとかマルチブラウザでの動作も担保し、納品まで完了しました。) その案件が落ち着いた後、改めて自分の調べたことを振り返ると、局所的な

    ブラウザレンダリング入門〜知ることで見える世界〜 - Qiita
  • 量子コンピュータエンジニア始めて5年が経った - Qiita

    はじめに もともとふつうのベンチャーでしたが、2014年に量子コンピュータにピボットしてからはすくすく会社が育ち、向いてることをするのは大事だなと感じてます。 Qiitaはポエムを書かないといけないらしい(多分)ので。おそらく日初の量子コンピュータベンチャーとしてまず五年目までに気づいたことを書いてみます。 もともとはデザイン会社 もともとうちの会社はデザイン会社でした。出身が建築事務所だったので、そのまま2009年に独立してデザインをしてました。建築時代はphotoshop+autocadを使っていました。イラレはいまだに苦手です。 前の建築事務所は隈研吾建築事務所というところで、青山の美術館の設計や中国のアリババの社屋のコンペなどを主にしていました。 建築は当時CGパースも仕事がたくさんありましたので、CGのモデリングやレンダリングをやりながら当初は生計を立てていました。ただ、リーマ

    量子コンピュータエンジニア始めて5年が経った - Qiita
  • [ver 1.2] Git でよく使われるコマンドにイラストによる説明を加えて1枚のチートシートにまとめてみた - Qiita

    題のチートシートはこちら PNG SVG https://d.kuku.lu/6b5cc7b0a9 から DL できます 作った理由 git って他人に概念を説明するのって難しいし、自身も何度も反復させないと定着しなかったなあという感覚を持っていたので作ってみました 所感 こちらの Git チートシートですが、この中に盛り込めなかった内容で 第2段 を作成しようか考え中です 皆さまのオススメの便利コマンドとか、この内容は必須だろ!的なものがあればをご教示いただければ幸いです もし誤りがあれば、作者の心が折れない程度にご指摘いただければ幸いです あとがき ここまで反響を頂けるとは思っておらず、嬉しい限りです・・・当にありがとうございます・・・!! また、図は全て自作です。図における言語は英語、説明は日語、と言う形に統一しました。(吹き出し部分だけ日語になっていたのでこちらは修正しまし

    [ver 1.2] Git でよく使われるコマンドにイラストによる説明を加えて1枚のチートシートにまとめてみた - Qiita
  • IoT向けの軽量なKubernnetes(?) k3sとはなにか - Qiita

    参考までに、Kubernetes単体の要件としては、API Serverを動かすのには1GB以上のRAMがあって、x86_64のCPUを使っているのが「望ましい」とドキュメントにはそれとなく書かれていたりします。ですが、実際にはもっと高スペックなマシンを利用するケースが多いはずです(無論、規模によります)。 それと比べ、k3sは非常に小さな環境でも動作します。どうしてなのでしょうか? いくつか、特徴的な部分をピックアップしてみることにします。 Kubernetesの中で利用シーンの少ない機能を削っている Kubernetesには、後方互換性のために残しているレガシーな機能やAPIや、新たに追加されようとしているAlphaやBetaの機能が多数存在します。 k3sでは、軽量化のためにそれらの機能を削っています。 デフォルトのetcdをsqlite3にしている etcdは非常に高い信頼性を誇る

    IoT向けの軽量なKubernnetes(?) k3sとはなにか - Qiita
  • JAWS DAYS 2019 資料まとめ - Qiita

    2019/2/23 に開催された JAWS DAYS 2019 の資料まとめです。 テーマである満漢全席の名の通り、多岐にわたっていますので タイムテーブル順ではなく分野別にしています。 見つけ次第更新しますが、抜け漏れなどありましたら コメントや編集リクエストいただけましたら幸いです。 運営のみなさま、スタッフのみなさま、登壇者のみなさま、スポンサーのみなさま、 このような機会をありがとうございました。 AI/ML PythonとSageMakerで始めるMLチームのみで完結するAPIの構築事例 https://speakerdeck.com/ababa893/jaws-days-2019-pythontosagemakerteshi-merumltimufalsemitewan-jie-suruapifalsegou-zhu-shi-li メディアにおけるAI活用とAWSに期待すること

    JAWS DAYS 2019 資料まとめ - Qiita
  • 機械学習システムにおける「技術的負債」とその回避策 - Qiita

    はじめに 空前のAIブームだった2017年、Yahooニュースでは毎日のように『〇〇が△△のAIを開発』のような見出しが目立ちました。2018年は『AIの運用』の時代になるとも言われています。 しかし、AI機械学習)を載せたシステムの開発・テスト・運用の方法は2018年4月現在、まだ確立されていない分野です。 今回は、技術的負債という観点から、機械学習システム特有の課題点とその回避策のヒントまとめたGoogleの論文 Machine Learning: The High Interest Credit Card of Technical Debt (2014) を翻訳します。Google翻訳+軽い手作業ですのでご留意を。 ちなみにタイトル『機械学習技術的負債の高金利クレジットカード』の意味は、機械学習システムがまるで高金利のクレジットカードのように、気づかないうちに技術的負債を蓄積して

    機械学習システムにおける「技術的負債」とその回避策 - Qiita
  • Rails アプリのエラーを Sentry で管理する & Slack 通知する - Qiita

    概要 Sentry の使い方と Slack 通知の方法をまとめました Rails を例にしていますが、Sentry 自体の説明については他の言語でも流用できるのではないかと思います 導入 基的には Gem (sentry-raven) を入れて、initializers などで設定するだけです。詳細な手順は下記を参照してください。 https://qiita.com/mikaji/items/74fac3be5e1235e0b762 https://docs.sentry.io/clients/ruby/integrations/rails/ 接続先情報は、Sentry の Project 画面 -> Settings -> SDK Setup -> Client Keys (DSN) に載っています。 基的な使い方 上記の設定をするだけで、Uncaught なエラーを全て Sentr

    Rails アプリのエラーを Sentry で管理する & Slack 通知する - Qiita
  • トークンを利用した認証・認可 API を実装するとき Authorization: Bearer ヘッダを使っていいのか調べた - Qiita

    トークンを利用した認証・認可 API を実装するとき Authorization: Bearer ヘッダを使っていいのか調べたAPIOAuthWeb TL;DR HTTP でトークンを利用した認証・認可をする手法として RFC 6750 がある OAuth に限らず、トークンを利用して認証・認可する機構の一部として Authorization: Bearer ヘッダを使うことができる 使い方について詳しくはこの記事の下のほうに書いた 要求 トークンを利用した認証・認可機構を持つ API を作りたい クライアントがトークンを HTTP リクエストに含めて送信し、サーバはトークンを検証してリソースへのアクセスを許可したい Authorization: Bearer トークン ヘッダでトークンを送る API あるよね、ああいうやつ 疑問 Authorization: Bearer ヘッダは OA

    トークンを利用した認証・認可 API を実装するとき Authorization: Bearer ヘッダを使っていいのか調べた - Qiita