-
RubyGemの内部
周りの子供たちを集めて、おじいちゃんに人生が大変だった昔のことを話させてください。宝石を設置することは、頭痛を引き起こし、髪を引っ張って、歯を食いしばる試練でした。 私がRubyを始めたばかりの頃は、Bundlerはなく、gemをハードな方法でインストールする必要がありました。 Railsでは、これはrake gems:installを実行することを意味しました コマンドがエラーなしで渡されるまで、100万回、発生したバグを修正しました。今日は、宝石とは何か、そしてそれらがどのように機能するかを調べた後、昔ながらの方法で宝石を作成します。 宝石、それらは何ですか? RubyGemsは、他の
-
ゼロからRubyC拡張機能を構築する
今回のRubyMagicでは、RubyからCで記述されたコードの使用方法を紹介します。これを使用して、コードのパフォーマンスに敏感な部分を最適化したり、CライブラリとRuby間のインターフェイスを作成したりできます。これは、Cで記述されたライブラリをラップする拡張機能を作成することによって行われます。 Cで書かれた成熟したパフォーマンスの高いライブラリがたくさんあります。それらを移植して車輪の再発明を行う代わりに、Rubyからこれらのライブラリを活用することもできます。このようにして、Rubyが従来は強力ではなかった領域でCライブラリを使用しながら、お気に入りの言語でコーディングすることがで
-
Rubyでの非同期スレッドのテスト
スレッドと非同期環境は、最初は少し注意が必要です。相互作用を整理するための優れたメンタルモデルがないと、トラブルに巻き込まれ、予期しない結果に終わる可能性があります。その上、非同期コードのテストは、適切なツールやテストパターンがないと難しい場合があります。 スレッドを人として、共有オブジェクトを所有可能な「もの」として考えると、マルチスレッドシステムの動作を整理するのに役立ちます。このエピソードでは、非同期Rubyコードのテストについてすべてを学ぶための例を紹介します。 RailsやRack、またはWebブラウザーのフロントエンドとして非同期環境にあるアプリケーションを使用している場合。ラ
-
Rubyのファイバーと列挙子-ブロックを裏返しにする
Rubyには、ループ、ブロック、列挙子など、反復を実行するさまざまな方法があります。ほとんどのRubyプログラマーは、少なくともループとブロックに精通していますが、Enumerator およびFiber 多くの場合、暗闇にとどまります。今回のRubyMagicでは、ゲスト著者のJulikがEnumerableに光を当てています。 およびFiber フロー制御の列挙型と回転ブロックを裏返しに説明します。 ブロックの一時停止と連鎖反復 以前の版のRubyMagicで列挙子について説明しました。ここでは、Enumeratorを返す方法について説明しました。 自分の#eachから メソッドとその用途
-
平均しないでください:統計的平均とパーセンタイル101
パフォーマンスの監視は、アプリケーションを成功させるための重要な部分です。 何かのパフォーマンスを伝える最も基本的な方法の1つ それが発生するたびに期間を測定し、そこから統計を抽出することです。 平均 値のコレクションの平均または平均は、何かがどのように動作するかを確認するための良いスタートです。検討中のすべての値を合計し、発生数で割って計算されます。 Rubyでは、平均応答時間の計算は次のようになります。 def mean(array) (array.sum.to_f / array.length).round(2) end durations = [1,2,3,4,5,6,7,8
-
Rubyのバインディングとレキシカルスコープ
明けましておめでとうございます。RubyMagicへようこそ。この冬のエピソードでは、バインディングとスコープについて詳しく説明します。だからあなたのスキーを着て、森の奥深くまで私たちに従ってください。 前回は、ブロック、プロシージャ、ラムダを比較して、Rubyのクロージャを調べました。 3つのタイプの違いは別として、クロージャーを定義するものに触れました。 。 クロージャは、環境を備えたファーストクラスの関数です。環境は、クロージャーが作成されたときに存在していた変数へのマッピングです。クロージャーは、別のスコープで定義されている場合でも、これらの変数へのアクセスを保持します。 フ
-
Rubyを使用したGraphQLのインストルメンタルイントロ
開発者がGraphQLの素晴らしさを称賛するのを聞いたことがあるかもしれません。このシリーズでは、テクノロジーを使用してテクノロジーを学びたいと考えています。この記事では、GraphQLを使用するサンプルアプリケーションについて説明します。 GraphQLとは GraphQLは、APIの構築に使用できるクエリ言語およびランタイムです。開発スタックではRESTAPIと同様の位置を占めますが、柔軟性が高くなります。 RESTとは異なり、GraphQLでは応答形式とコンテンツをクライアントが指定できます。 SQL SELECTと同じように ステートメントを使用するとクエリ結果を指定でき、Grap
-
Rubyでのクラス、インスタンス、メタクラスの解明
Ruby Magicの新しいエピソードへようこそ!今月のエディションはすべてメタクラスに関するもので、2人の開発者(Hi Maud!)の間の議論によって引き起こされた主題です。 メタクラスを調べることで、Rubyでクラスメソッドとインスタンスメソッドがどのように機能するかを学びます。途中で、明示的な「definee」を渡すことによってメソッドを定義することと、class << selfを使用することの違いを発見してください。 またはinstance_eval 。行きましょう! クラスインスタンスとインスタンスメソッド Rubyでメタクラスが使用される理由を理解するために、インス
-
Rubyの#dupと#cloneに飛び込む
今日の投稿では、Rubyの#dupについて調べます。 および#clone 。この関心を引き起こした実際の例から始めましょう。その後、#dupの方法を学ぶことを目標に、さらに深く掘り下げていきます。 Rubyで実装され、#cloneとの比較 。次に、独自の#dupを実装して終了します。 方法。行きましょう! Dupの使用を開始した方法 NGOが寄付を集めるキャンペーンの立ち上げを専門とする会社で働いていたとき、私は定期的にキャンペーンをコピーして新しいキャンペーンを作成しなければなりませんでした。たとえば、2018年のキャンペーンが終了した後、2019年の新しいキャンペーンが必要でした。 キ
-
Rubyの隠された宝石、StringScanner
Rubyは楽しい言語であるだけでなく、優れた標準ライブラリも付属しています。そのうちのいくつかはそれほど知られておらず、ほとんど隠された宝石です。今日、ゲストライターのマイケルコールがお気に入りのStringscannerを紹介します。 ルビーの隠された宝石:StringScanner OpenStructやSetoverCSV解析などのデータ構造からベンチマークまで、サードパーティのgemのインストールに頼ることなくかなり遠くまで行くことができます。ただし、Rubyの標準インストールで利用できるあまり知られていないライブラリがいくつかあり、非常に便利です。その1つが StringScan
-
Rubyでのオブジェクトマーシャリング
この記事では、オブジェクトのマーシャリングについて詳しく説明します。それが何であるかを説明し、マーシャルモジュールを見てから、例を見ていきます。次に、さらに深く進んで、 _dumpを比較します。 およびself._load メソッド。行きましょう! オブジェクトマーシャリングとは何ですか? コードを記述しているときは、オブジェクトを保存して別のプログラムに送信するか、次のプログラム実行で再利用することをお勧めします。たとえば、オブジェクトマーシャリングはSidekiqで使用されます。 SidekiqジョブがRubyonRailsアプリケーションにエンキューされると、このジョブのシリアル化(オ
-
Rubyのバックグラウンド処理システムである構築による学習
今日の投稿では、楽しみのために素朴なバックグラウンド処理システムを実装します! Sidekiqのような人気のあるバックグラウンド処理システムの内部を覗き見しながら、途中でいくつかのことを学ぶかもしれません。この楽しみの産物は、決して本番環境での使用を目的としたものではありません。 アプリケーションに、1つ以上のWebサイトをロードし、それらのタイトルを抽出するタスクがあると想像してみてください。これらのウェブサイトのパフォーマンスには影響を与えないため、メインスレッド(またはウェブアプリケーションを構築している場合は現在のリクエスト)の外部で、バックグラウンドでタスクを実行したいと思います。
-
カフカとルビー、Sidekiqラブストーリー
成長を続けるオールインワンAPMとして、AppSignalがトラフィックの増加に対応できるようにするために多くの時間を費やしています。通常、私たちはそれをどのように行うかについて話しません。私たちのブログには、Rubyの内部で素晴らしいことや、Elixirでクレイジーなことをしていることについての記事がたくさんありますが、AppSignalを動かしている理由については書かれていません。 ただし今回は、過去数年間に行ったスタックの大きな変更の一部を共有したいので、毎月送信される2桁の数十億のリクエストを(簡単に)処理できます。リアルタイムで。そのため、今日はスケーリングの経験を利用して、独自の
-
Rubyの隠された宝石-委任者と転送可能
今日のRubyの標準ライブラリに隠された宝石の調査では、委任について見ていきます。 残念ながら、この用語は、他の多くの用語と同様に、何年にもわたって多少混乱しており、人によって意味が異なります。ウィキペディアによると: 委任とは、あるオブジェクト(受信者)のメンバー(プロパティまたはメソッド)を、別の元のオブジェクト(送信者)のコンテキストで評価することを指します。委任は、送信オブジェクトを受信オブジェクトに渡すことによって明示的に実行できます。これは、任意のオブジェクト指向言語で実行できます。または暗黙的に、機能の言語サポートを必要とする言語のメンバールックアップルールによって。
-
method_missingを使用して祖先チェーンをアップ
今日は先祖の鎖をずっと上っていくので、機内持ち込み手荷物を握り締めてください。メソッド呼び出しに従って、それがチェーンをどのように上るのかを確認し、メソッドが欠落している場合に何が起こるかを調べます。そして、私たちは火遊びが大好きなので、そこで止まることなく、火遊びを続けます。 BasicObject#method_missingをオーバーライドする 。注意を払えば、実際の例でも使用できるかもしれません。ただし、保証はありません。行きましょう! 祖先チェーン Rubyの祖先チェーンの基本的なルールから始めましょう: Rubyは単一の継承のみをサポートします オブジェクトにモジュールのセット
-
Rubyの内部列挙
Ruby Magicの別のエディションへようこそ! 1年前、RubyのEnumerableについて学びました モジュール。配列、範囲、ハッシュなどの列挙可能なオブジェクトを操作するときに使用するメソッドを提供します。 当時、私たちはLinkedListを作成しました #eachを実装してオブジェクトを列挙可能にする方法を示すクラス その上でメソッド。 Enumerableを含めることによって モジュールでは、#countのようなメソッドを呼び出すことができました 、#map および#select 自分で実装しなくても、リンクリストに追加できます。 列挙型の使用方法を学びましたが、どのように
-
Deviseを適切に国際化するための究極のチェックリスト
時々、最高のブログ投稿はあなた自身のかゆみを掻く必要性から来ます。そして、今日のブログ投稿はその一例です! Railsアプリケーションで人気のある認証ソリューションであるDeviseをご存知でしょう。 Deviseを使用していると、翻訳を立ち上げて実行するのが予想よりも複雑であることがわかりました。過去の私は、プロセスをガイドするのに役立つチェックリストがあることを望んでいました。 これが、将来の私とあなたのために、究極のDevise国際化チェックリストです! いつ(しない)devise-i18n Gemを使用しますか? Deviseのポリシーは、Deviseビューの文字列を翻訳可能にし
-
Rubyで独自のテンプレートレクサーを作成する
スキューバダイビングスイートを装着してステンシルを詰めてください。今日はテンプレートに飛び込みます! Webページをレンダリングしたり、電子メールを生成したりするほとんどのソフトウェアは、テンプレートを使用して可変データをテキストドキュメントに埋め込みます。ドキュメントの主な構造は、多くの場合、データのプレースホルダーを含む静的テンプレートで設定されます。ユーザー名やWebページのコンテンツなどの可変データは、ページのレンダリング中にプレースホルダーを置き換えます。 テンプレートについて詳しく説明するために、多くのプログラミング言語で使用できるテンプレート言語であるMustacheのサブセ
-
Rubyテンプレートを深く掘り下げる:パーサー
今日、私たちはRubyテンプレートへの旅を続けています。レクサーを配置したら、次のステップであるパーサーに進みましょう。 前回は文字列の補間を検討し、その後、独自のテンプレート言語の作成に取り組みました。テンプレートを読み取り、それをトークンのストリームに変換するレクサーを実装することから始めました。今日は、付随するパーサーを実装します。また、少し言語理論に足を踏み入れます。 どうぞ! 抽象構文木 Welcome to {{name}}の簡単なサンプルテンプレートを振り返ってみましょう。 。レクサーを使用して文字列をトークン化した後、次のようなトークンのリストを取得します。 Magi
-
Ruby文字列のクリーンアップが13倍速く
考えをコードに変換するときは、ほとんどの場合、最もよく知っている方法を使用します。これらは頭に浮かぶ方法であり、自動的に表示されます。クリーンアップが必要な文字列が表示され、結果を得る方法を指で入力します。 多くの場合、自動的に入力するメソッドは、最も一般的なRubyメソッドです。これは、他のメソッドよりも読み取りと書き込みが多いためです。 #gsub 文字列内の文字を置き換える一般的な方法です。しかし、Rubyにはさらに多くの機能があり、標準的な操作のためのより専門的な便利な方法があります。 私はRubyの豊富なイディオムが大好きです。それは、コードがよりエレガントで読みやすくなるからで