タグ

studyとRubyに関するraimon49のブックマーク (52)

  • Rubyでrescueしたらグローバルなオブジェクトを破壊してたよって話 - ANDPAD Tech Blog

    こんにちは、ydahです。 2021年の12月から株式会社アンドパッドでソフトウェアエンジニアとしてANDPAD検査の開発に携わっています。 昨年、息子が生まれてから夜更かしすることがなくなり、早朝に起きては軽くジョギングをしてから、OSSプログラミングにいそしむのが朝のルーティンになった今日このごろです。 さて稿では、Rubyの例外処理を眺めていたらrescueがグローバルなオブジェクトを破壊するケースがあったんですよという話と、その対策について話したいと思います。 発生していたケースについて 突然ではありますが以下のコードをご覧ください。 この中にグローバルなオブジェクトを壊してしまうrescueがいます。 # 1 begin raise 'foo' rescue ArgumentError end # 2 begin raise 'foo' rescue => ArgumentEr

    Rubyでrescueしたらグローバルなオブジェクトを破壊してたよって話 - ANDPAD Tech Blog
  • 端末の文字幅問題の傾向と対策 | IIJ Engineers Blog


    Rubyist CLI TUI 使 TUI   使  Ctrl-l  Ctrl-l    w3m  less  Wander
    端末の文字幅問題の傾向と対策 | IIJ Engineers Blog
  • 現在時刻が関わるユニットテストから、テスト容易性設計を学ぶ - t-wadaのブログ

    この文章の背景について この文章はテスト容易性設計をテーマに 2013/11/26 に CodeIQ MAGAZINE に寄稿したものです。残念ながら CodeIQ のサービス終了と共にアクセスできなくなっていたため、旧 CodeIQ MAGAZINE 編集部の皆様に承諾いただき、当時の原稿を部分的に再編集しつつ、ライセンス CC BY(クリエイティブ・コモンズ — 表示 4.0 国際 — CC BY 4.0) で再公開いたしました。 旧 URL にいただいたブックマークとご意見はこちらです(これであなたもテスト駆動開発マスター!?和田卓人さんがテスト駆動開発問題を解答コード使いながら解説します~現在時刻が関わるテストから、テスト容易性設計を学ぶ #tdd|CodeIQ MAGAZINE)。旧記事には当に多くの反響をいただき、誠に感謝しております。 目次 この文章の背景について 目次 出

    現在時刻が関わるユニットテストから、テスト容易性設計を学ぶ - t-wadaのブログ
    raimon49
    raimon49 2019/09/30
    それぞれのアプローチに対して工夫点やメリットをしっかり拾って総評しているのが素晴らしいなぁ。これ回答を提出した人も嬉しいよね。
  • Python と Ruby と typing - methaneのブログ


    structural subtyping Yukihiro Matsumoto (@yukihiro_matz) 201698 https://t.co/5Rv86piThCwikipedia https://t.co/VwIg39h5M0 INADA Naoki (@methane) 201698 TAPL  RubyKaigi Matz  Ruby3  Python  Guido Dropbox  type hinting  PEP 484 
    Python と Ruby と typing - methaneのブログ
    raimon49
    raimon49 2016/09/09
    名前の宣言によって定義する静的型付けのominal subtyping と、実装を見てサブタイプと判断されるstructural subtyping とても勉強になる。
  • Ruby の Timeout の仕組み - tmtms のメモ

    Ruby で長い時間掛かるかも知れない処理のタイムアウトを行うにはこんな感じにします。 require 'timeout' begin Timeout.timeout(3) do # 3秒でタイムアウト hoge # 何かの処理 end rescue Timeout::Error puts 'なげーよ' # タイムアウト発生時の処理 end Timeout.timeout はブロック開始時にスレッドを作成し、そのスレッドで指定された秒数だけ sleep して、sleep から復帰してもまだブロックが終わってなければ作成元のスレッドに対して Timeout::Error 例外を発生させます。 指定時間以内に処理が終わる場合: timeout(X) │ スレッド作成 ─┐ │ │ ブロック実行 sleep X │ │ スレッドkill→ 🕱 │ timeout復帰 指定時間以内に処理が終わら

    Ruby の Timeout の仕組み - tmtms のメモ
  • Python のリファクタリングでイケてないコードを別に美しいオブジェクト指向設計ではない普通のコードにする方法 - Qiita

    Rubyのリファクタリングでイケてないコードを美しいオブジェクト指向設計のコードへ改良するための方法 - その1 その2 その3 これを Python でやってみます 元のコード 元の Ruby 版をできるだけ真似してみます。テストは py.test を使います。 #ordersreport.py from collections import namedtuple Order = namedtuple("Order", "amount placed_at") class OrdersReport: def __init__(self, orders, start_date, end_date): self.orders = orders self.start_date = start_date self.end_date = end_date def total_sales_within

    Python のリファクタリングでイケてないコードを別に美しいオブジェクト指向設計ではない普通のコードにする方法 - Qiita
    raimon49
    raimon49 2016/08/22
    初見殺しのトリッキーコードを巡るコメントのところも必読。
  • 次世代の Rack や WSGI を考えてみる - Qiita

    Rack や WSGI の代わりになる仕様を考えてみました (ライブラリ (rack.rb や wsgiref.py) のほうではなく、プロトコル仕様のほうです)。自分のアイデアを書き連ねただけなので、まとまってないかもしれませんがご了承ください。 なお稿は、今後何度か改訂すると思います。ご意見があればご自由にコメントしてください。 【対象読者】Rack や WSGI に興味のある人 【必要な知識】Rack や WSGI の基礎知識 Rack と WSGI の概要 Ruby の Rack や Python の WSGI は、HTTP のリクエストとレスポンスを抽象化した仕様です。 たとえば Rack では: 引数として、リクエストを表す Hash オブジェクトを受け取り、 戻り値として、レスポンスのステータスコードとヘッダーとボディを返します。 class RackApp def cal

    次世代の Rack や WSGI を考えてみる - Qiita
  • 使えるRSpec入門・その3「ゼロからわかるモック(mock)を使ったテストの書き方」 - Qiita

    はじめに みなさんこんにちは! この記事は「必要最小限の努力で最大限実戦で使える知識を提供するRSpec入門記事」、略して「使えるRSpec入門」の第3回です。 今回はRSpecのモックを使ったテストについて説明します。 これまでモックを全く使ったことがない人でもわかるように丁寧に説明していくつもりです。 また、これまでの回と同様、個人的に使用頻度が低いと思っている内容についてはバッサリ説明を省きます。 ただし、第1回や第2回に比べるとテストコードが少し複雑になって、仕組みや動きを想像するのがちょっと難しいかもしれません。 ぱっと頭に入ってこない場合はじっくり文を読んだり、実際に自分で写経しながらコードを動かしたりするなどして、少し時間をかけながら理解するようにしてください。 今回は以下のような内容を説明します。 モックの基的な使い方 モックを使った検証 モックでわざとエラーを発生させ

    使えるRSpec入門・その3「ゼロからわかるモック(mock)を使ったテストの書き方」 - Qiita
    raimon49
    raimon49 2015/10/29
    Rails非依存な内容で良い。
  • エラーハンドリング・クロニクル #nds41 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く


      NDS41CCerrno longstrtolman 0 errno
    エラーハンドリング・クロニクル #nds41 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く
    raimon49
    raimon49 2015/08/05
    golangはシンプルなEither(左右は逆だが)とも見れる。とても面白い。
  • 「文字列」について - 2014-11-07 - はてなるせだいあり

    序 「文字列を文字の列とみなす単純化」について議論がありますが、前提が抜け落ちてるように思うので書くことにします。 そもそもこの話はどのような文脈の上にあるかというと、テキスト処理 (wikipedia:en:Text_processing) の文脈になります。ここでいう「テキスト処理」とは plain text (wikipedia:プレーンテキスト) の検索・加工のことで、ここでは特に UNIX Text Processing の系譜が念頭に置かれています。つまり、複雑な装飾を含むリッチテキストではなく、処理の対象を ASCII 文字列といくつかの制御文字へと抽象化することで、正規表現のような強力な道具を用いた処理を可能とした世界です。UNIX でのお話ですから、ここでの具体的な処理の単位は char であり、全体としては char[] になります。この char の中身は上で述べたと

    「文字列」について - 2014-11-07 - はてなるせだいあり
  • 新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡 - Qiita

    あわせて読みたい 新人プログラマに知ってもらいたいメソッドを読みやすく維持するいくつかの原則 ペアプログラミングして気がついた新人プログラマの成長を阻害する悪習 「オブジェクト指向プログラミング」と「関数型プログラミング」のたった一つのシンプルな違い あきらめるにはまだ早い!ソースコードの品質向上に効果的なアプローチ 2015年に備えて知っておきたいリアクティブアーキテクチャの潮流 この記事について この記事は新人向けの研修内容を再編集してお送りいたします。 ここで述べる内容はどのようにして現在のプログラミングスタイルが生まれてきたかを理解することで、よりよいプログラムを書くためのもので、正確なソフトウェア工学の歴史を学ぶためのものではありません。正確な歴史を把握したい場合は、原典をあたるようにしてください。 また、想定している読者は「よくあるオブジェクト指向プログラミングの学習」を既にし

    新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡 - Qiita
    raimon49
    raimon49 2014/05/14
    出発点がCのヘッダファイルから構造体を隠蔽しているところの解説から始まってて、カプセル化の理解をより助けてくれて良い。
  • Procを制する者がRubyを制す(嘘)

    RubyのProcの説明は巷に溢れているから今更感があるけどここ数回Procを使ったネタを書いていたらProcがかわいくなっちゃってもっとみんなにもProcのこと知ってもらいたいという欲求が生まれてきたからProcについての基的なことを僕なりのやり方でここに書くよ。長いよ。 Rubyの関数(メソッド) Rubyにおいて関数(メソッド)はファーストクラス(オブジェクト)ではありません。つまり文字列や数字や配列などの他のオブジェクトとは異なって、Rubyではそれを直接変数に代入したり、他の関数に渡したりすることはできません。 def square(n) n * n end sq = square # squareメソッドを変数sqに代入してみる # ~> -:1:in `square': wrong number of arguments (0 for 1) (ArgumentError)

    Procを制する者がRubyを制す(嘘)
    raimon49
    raimon49 2014/04/29
    Proc渡し。方言が多い。
  • 正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう


     ^  $  \A  \z Ruby ^  $ 使PerlPHPRuby \A  \z 使  PHPerRuby/RailsRuby ^  $ RubyonRails Security GuideXSShttphttpsURL /^https?:\/\/[^\n]+$/
    raimon49
    raimon49 2014/03/04
    >Rubyの正規表現機能は、デフォルトで複数行モードである / ひー。知らなかった。PHPも末尾が改行コードだと挙動が変わる。
  • GitHub - Shinpeim/process-book: Unix系システムのプロセスについて日本語で解説しています

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - Shinpeim/process-book: Unix系システムのプロセスについて日本語で解説しています
    raimon49
    raimon49 2014/01/25
    fork, exec, IO, socke, シグナルt 全てがファイル入出力 ファイルディスクリプタやオープンファイルの入門に
  • 猫型プログラミング言語史観(1) 〜あるいはオブジェクト指向における設計指針のひとつ〜 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く

    TL;DR 手続き型プログラミングでは手続きを抽象化することで保守性を挙げることに成功したが、データを守ることには失敗してしまった。そこでオブジェクト指向はデータと手続きをひとかたまりにすることでデータを外から守るというコンセプトを打ち出した。 ここから、「手続き型プログラミングで書いてるのに手続きが十分に抽象化されていないのはヤバいね」とか「オブジェクト指向で書いてるのにひとかたまりじゃない雑多なデータに関心をもっちゃってるのはヤバいね」などの設計指針を導くことができるのである。そして純粋関数型言語の場合は……という話です。 はじめに プログラミング言語にはいろいろなパラダイムがあるが、その中で手続き型プログラミング、オブジェクト指向、純粋関数型言語について、わたしなりのひとつの史観を示すのがこの稿の目的である。となんかかっこつけて言ってみたんだけど、要するに、それぞれのパラダイムがどん

    猫型プログラミング言語史観(1) 〜あるいはオブジェクト指向における設計指針のひとつ〜 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く
    raimon49
    raimon49 2014/01/20
    それぞれのプログラミングパラダイムが目指したものと、そこから見えて来るコードの嫌な匂いについて。軽妙な語り口で分かり易い。
  • Fluentdとはどのようなソフトウェアなのか - たごもりすメモ


    Fluentd 使使  http://fluentd.org/                    
    Fluentdとはどのようなソフトウェアなのか - たごもりすメモ
    raimon49
    raimon49 2013/12/04
    開発体制 コミュニティ
  • これであなたもテスト駆動開発マスター!?和田卓人さんがテスト駆動開発問題を解答コード使いながら解説します~現在時刻が関わるテストから、テスト容易性設計を学ぶ #tdd|CodeIQ MAGAZINE

    和田卓人さんによるテスト駆動開発問題解説の寄稿です! バグのないよいコードを書くには、よいテスト設計が重要です。今回は現在時刻に関する問題と、その問題で提出された実際の解答コードを紹介しながら、どのようにテスト設計し開発していくのかを解説していきます。 ゲスト解答による解答コードも公開中! by CodeIQ運営事務局 はじめに こんにちは、和田(@t_wada)です。今日は先日出題させていただいたTDDに関する問題の総評を行いつつ、テスト容易性設計について考えてみたいと思います。 問題文 私が出した問題は、以下のようなものでした。 問1. 下記の仕様をテスティングフレームワークを使ってテストコードを書きながら実装してください。 【仕様1】 「現在時刻」に応じて、挨拶の内容を下記のようにそれぞれ返す機能を作成したい。 (タイムゾーンはAsia/Tokyoとする) 朝(05:00:00以上

    これであなたもテスト駆動開発マスター!?和田卓人さんがテスト駆動開発問題を解答コード使いながら解説します~現在時刻が関わるテストから、テスト容易性設計を学ぶ #tdd|CodeIQ MAGAZINE
    raimon49
    raimon49 2013/12/04
    「現在時刻」を扱うお題で、いかに疎結合なテストを書くか。設計まで踏み込んでいて勉強になる。
  • RubyとPythonの違いからガベージコレクタを理解する - ワザノバ | wazanova.jp


    http://patshaughnessy.net/2013/10/24/visualizing-garbage-collection-in-ruby-and-python Pat ShaughnessyRUPY2013  RubyPython1) Ruby Rubyfree list
    raimon49
    raimon49 2013/11/16
    CPythonは参照カウント方式。その2には世代別GCの話題も。
  • RubyKaigi 2013の予告:ステッカー・チラシの配布とRubyHirobaでの企画案と発表内容 #rubykaigi - 2013-05-28 - ククログ


     >  > RubyKaigi 2013RubyHiroba #rubykaigi2013/5/30-6/1RubyKaigi 2013RubyKaigi 2013 RubyKaigi 2013 rroonga  RubyHiroba 2013 6/1 13:30Be a library developer! rroonga RubyKaigi 2013rroonga
    RubyKaigi 2013の予告:ステッカー・チラシの配布とRubyHirobaでの企画案と発表内容 #rubykaigi - 2013-05-28 - ククログ
  • Rubyのcaseを〇〇(言語名)のswitch文だと思っている人たちにぼくから一言ガツンと申し上げたい


    Rubycase()switchRubyOOPHashProccall辿 RubyRubycase    namelevelpointCharactercharlie, liz, ben class Character < Struct.new(:name, :level, :point) def
    raimon49
    raimon49 2013/02/25
    caseが式評価されることを利用。SQLのSELECT句に記述するCASE式みたいに見える。