タグ

ブックマーク / techracho.bpsinc.jp (10)

  • Ruby: メモ化のイディオムが現代のRubyパフォーマンスに与える影響(翻訳)|TechRacho by BPS株式会社

    概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Performance impact of the memoization idiom on modern Ruby | Rails at Scale 原文公開日: 2024/02/14 原著者: Jean Boussier(byroot) Ruby 3.2における主要な内部変更のひとつに、オブジェクトシェイプ(object shape)の導入があります。 記事では、オブジェクトシェイプが導入された理由、仕組み、制限事項について解説します。 🔗 オブジェクトのインスタンス変数はどのように保存されるのか Rubyは非常に動的な言語なので、インスタンス変数へのアクセスという単純な操作でも多くの作業を伴います。 Rubyオブジェクトは、ほとんどの場合インスタンス変数を「参照の配列」に保存します。 たとえば、インスタンス変数を2個持つ

    Ruby: メモ化のイディオムが現代のRubyパフォーマンスに与える影響(翻訳)|TechRacho by BPS株式会社
    udzura
    udzura 2024/03/05
  • Ruby: byebugからruby/debugへの移行ガイド(翻訳)|TechRacho by BPS株式会社

    新しいデバッガに乗り換えてデバッグプロセスを変更するのがつい億劫になることもあるでしょう。記事によって、皆さんがruby/debugに親しんでスムーズに移行する助けになることを願っています。 以下、debugはruby/debugを指します。 免責事項 著者はdebugと比べてbyebugの経験があまりありません。不正確な情報や古い情報がありましたらぜひお知らせください。 記事の目的は高度なレベルで比較を行うことです。debugの特定の利用方法については公式ドキュメントを参照してください。 記事はすべての機能を網羅しているわけではありませんが、ほとんどの機能をカバーしているはずです。 🔗 debugを使うメリット 個別の機能を解説する前に、debugを使うメリットについて簡単に触れておきたいと思います。 1. 出力がカラー化されている 2. メソッドやブロックの引数をバックトレース

    Ruby: byebugからruby/debugへの移行ガイド(翻訳)|TechRacho by BPS株式会社
    udzura
    udzura 2022/09/02
  • Rustの手続きマクロに関する知見をまとめてみた|TechRacho by BPS株式会社

    どうも。yoshiです。プロフィールにC++erと書いているけど最後に書いたC++記事は一昨年のでした。最近は業務ではC++もやるけどプライベートだとTSかRustみたいな感じになってます。業務の方もTS率高め。C++もつい先日C++20の規格がISOから正式発行されたところなので書こうと思えばネタはあるのですが、最近規格を読むモチベがあまりないのでやめておきます。 というわけで今回はRustの手続きマクロ(Procedural Macros)の話をします。 ところでProcedural Macrosの訳語には「手続き型マクロ」派と「手続きマクロ」派がいるようですが、どっちがいいんでしょうね? 「手続き型」の場合は「手続き型プログラミング(Procedural Programming)」などの既存の言葉に合わせてだと思いますが、この場合の「型」はTypeのことではないので、型の話が多いRu

    Rustの手続きマクロに関する知見をまとめてみた|TechRacho by BPS株式会社
    udzura
    udzura 2021/03/05
  • CPUキャッシュがGoのコードに与える影響(翻訳)|TechRacho by BPS株式会社

    繰り返しますが、正確な図はプロセッサモデルによって異なります。ここでは見積もりのため、以下の目安で考えます。メインメモリのアクセスに60ns(ナノ秒)かかり、L1キャッシュへのアクセス速度はその約50倍高速だとします。 さて、プロセッサの世界には「参照の局所性(locality of reference)」と呼ばれる重要な概念があります。プロセッサがメモリ上の特定の場所にアクセスするとき、以下のように予測を立てます。 近い将来、メモリ上の同じ場所にアクセスする可能性が非常に高い これは「時間的局所性(temporal locality)の法則」です 近い将来、メモリ上のその場所からごく近い場所にアクセスする可能性が非常に高い これは「空間的局所性(spatial locality)の法則」です CPUにキャッシュが存在する理由のひとつが、この時間的局所性です。では空間的局所性を高めるにはど

    CPUキャッシュがGoのコードに与える影響(翻訳)|TechRacho by BPS株式会社
    udzura
    udzura 2020/06/25
  • 乱数について本気出して考えてみる|TechRacho by BPS株式会社

    プログラミングをやっていると、様々な乱数に出会います。乱数に関しては大勢の研究者が色々な研究結果を出しているため、種類も増え、いったいどれを使えばいいのかと悩む原因にもなります。 大勢が研究し利用している分野ですから、私以外でも大勢が乱数に関する記事を書いているため、あえて新しい記事を書く価値は高くないかもしれません。まあ、既に理解している人はここで記事を閉じるか、暇つぶし程度の感覚で読んでいただくと良いかと思います。 真乱数と疑似乱数 プログラミングの世界の中でいわゆる "乱数" として扱われることが多いのは擬似乱数です。疑似、と付くからには、これは実のところ乱数ではないと言えます。とは言え、擬似乱数を乱数でないと言ってしまうと話が終わってしまうので、疑似乱数を含む乱数を広義の乱数とします。この記事で扱うのは広義の乱数です。逆に、狭義の乱数、物の乱数は真乱数と言います。 物と言いまし

    乱数について本気出して考えてみる|TechRacho by BPS株式会社
    udzura
    udzura 2019/12/26
  • Ruby: eBPFでメモリアロケーションをプロファイリングする(翻訳)|TechRacho by BPS株式会社

    概要 原著者の許可および指示により「非公式の翻訳として」翻訳・公開いたします。 英語記事: Spying on a Ruby process's memory allocations with eBPF - Julia Evans 原文公開日: 2018/01/31 著者: Julia Evans なお、eBPFはBPF(Berkeley Packet Filter)の拡張版(extended BPF)です。 参考: LinuxのBPF : (1) パケットフィルタ - 睡分不足 参考: LinuxのBPF : (3) eBPFの基礎 - 睡分不足 今回は、CPUプロファイラを使う代わりに、まったく新しいアイデアに基づいた実験を披露いたします。 私がその日の朝に思いついたのは、Rubyの任意のプロセスのPID(既に実行されているプロセスのPID)を取得してメモリアロケーションを追えるのでは

    Ruby: eBPFでメモリアロケーションをプロファイリングする(翻訳)|TechRacho by BPS株式会社
    udzura
    udzura 2019/11/26
  • 楕円曲線暗号アルゴリズムを理解する|TechRacho by BPS株式会社

    お久しぶりです。yoshiです。みなさん、夏を満喫していますか? 私は溶けそうです。日の夏はとってもあつい。 覚えている方がいるかどうかは分かりませんが、以前私はRSA公開鍵暗号アルゴリズムを理解するという記事を書きました。今回はその続編(?)です。 楕円曲線について 楕円曲線、という言葉を事前知識無しで見ると、 多分こんな画像が脳裏に浮かぶと思います。違います。 楕円曲線の楕円は楕円積分から現れた言葉で、楕円積分は文字通り楕円の弧長などを求める方法なので全くの無関係とは言えませんが、少なくとも楕円曲線と楕円は別の図形です。楕円のことは忘れましょう。 実際の楕円曲線は、例を示すと以下のような曲線です。 一般化すると (ただし または ) という式で表されるこのような曲線をワイエルシュトラス型楕円曲線と呼びます。ワイエルシュトラス型、と付いているのは他のパターンもあるからで、 こんな形の楕

    楕円曲線暗号アルゴリズムを理解する|TechRacho by BPS株式会社
    udzura
    udzura 2019/08/17
  • Ruby: `new`を使わずにクラスのinitializeを実行してみる|TechRacho by BPS株式会社

    やってみたらできました(Ruby 2.6.3)。業務では使う意味がないというか使わないでください。 class Foo def initialize @a = 1 @b = 2 end def inspect puts @a puts @b end end 簡単のため、上のinitializeには引数もブロックも渡していません。 以下は普通にnewした場合です。 » a = Foo.new 1 2 » a.inspect 1 2 allocateとtapとsendでやる Class#allocateを使うと、initializeを呼び出さずにインスタンスを生成できる initializeメソッドはprivateなので、send(:initialize)で無理やり呼び出す tapを使ってsend(:initialize)のブロックをねじ込む » a = Foo.allocate.tap {|

    Ruby: `new`を使わずにクラスのinitializeを実行してみる|TechRacho by BPS株式会社
    udzura
    udzura 2019/07/04
    Foo.allocate.instance_eval { initialize } と言う手もありますな
  • 自然言語学からみたプログラミング言語 Vol.1 - 世界に現存する数とその需要 -|TechRacho by BPS株式会社

    Learn to Program, not a Programming Language – codeburstより はじめに Happy Holidays!! こんにちは、Oasistです。 大学時代は英語学のゼミを専攻しており、四年時に休学して1年間オーストラリアに滞在し、生活レベルの英語に浸かりました。 現在でも、休日にはVital Japan主催の勉強会に出席したり、言語学関係の書籍を日がな一日読んでいたり。 (休日は全く違った脳領域を使うことがリフレッシュの鍵ですね!) こういった経緯で言語というものに強い関心を持っておりますが、ある日ふと「言語学と同じアプローチでプログラミング言語を紐解いたら何か新しい発見があるのでは」と思いつき、この記事を書きました。 仕事趣味でプログラミング言語は触るけど、プログラミング言語そのものについてそれほど意識することがないよという方にとって、ま

    自然言語学からみたプログラミング言語 Vol.1 - 世界に現存する数とその需要 -|TechRacho by BPS株式会社
    udzura
    udzura 2018/12/25
    リンギスティックスだ
  • Railsのエラー管理はこれでOK!オープンソースのAirbrakeクローン、errbitを使ってみた|TechRacho by BPS株式会社

    ただ、値上げしてだいぶ敷居が高くなってしまったんですよね。プロジェクト3つで$25/monthかかり、しかもエラーが60日で消えてしまいます。 (僕は旧プランのまま$5/monthで使えていますが、これ以上プロジェクトを作れません・・・) そこで、オープンソースのAirbrakeクローン、errbitを使ってみました。 https://github.com/errbit/errbit インストール インストールはREADME通りにやれば簡単です。 Ubuntu 12.04 Server (さくらのVPS)にインストールしました。Rubyはインストール済みです。 # 依存ライブラリインストール(root) apt-get update apt-get install mongodb install libxml2 libxml2-dev libxslt-dev libcurl4-openss

    Railsのエラー管理はこれでOK!オープンソースのAirbrakeクローン、errbitを使ってみた|TechRacho by BPS株式会社
    udzura
    udzura 2013/01/11
    エアブレーキにアレしてる各位へ
  • 1