タグ

ProgrammingとRubyに関するlarkerのブックマーク (35)

  • リーダブルテストコード / #vstat

    「リーダブルなテストコードについて考えよう ~VeriServe Test Automation Talk No.3~」で使用したスライドです。 https://veriserve-event.connpass.com/event/243280/ 登壇動画はこちらで公開されています。 https://vimeo.com/742517199/e001ac43ac <参考リンク> Twitter https://twitter.com/jnchito Blog https://blog.jnito.com/ Qiita https://qiita.com/jnchito プロを目指す人のためのRuby入門[改訂2版] https://gihyo.jp/book/2021/978-4-297-12437-3 Everyday Rails - RSpecによるRailsテスト入門 https://

    リーダブルテストコード / #vstat
  • A Training System of Ruby Programmers / Rubyプログラマが育つ仕組み - Rubyでの受託開発を10年回してみて -

    A talk presentation for RubyWorld Conference 2017 held in Matsue, Japan. Introducing Everyleaf Corporation's training program. Written in Japanese.

    A Training System of Ruby Programmers / Rubyプログラマが育つ仕組み - Rubyでの受託開発を10年回してみて -
  • 外国人が語る:英語でクラスやメソッド等の名付け方 - Qiita

    アメリカ人です。 Hello 👋 この記事の目的 多くの日人は自分の英語力には自信がないではないでしょうか。残念ながら「英語がわからん」、「英語が全然できない」という声をしょっちゅう聞いています。でも、今まで英語ができて意味がちゃんと伝わる何人かの日人に会ったがあります。完璧な英語ではないけど(外国人も英語でミスる時もある...)、がんばって話そうとするので充分仕事ができる人たち。そういうがんばる姿勢はオープンソースのプログラムや英語圏のプログラムに手を出すためには一番大事なことだと思います(外国人側もすごく助かります)。日文化では「私はできる!」と自慢することは少ない中、この記事を通して、流暢に話せなくても自分のプログラミングの命名の仕方にはちょっとだけでも自信を持たせたいなと思います。完璧じゃなくていいです。Let's go! 合わせて読んでいただきたい 【日エンジニア

    外国人が語る:英語でクラスやメソッド等の名付け方 - Qiita
    larker
    larker 2017/03/03
    「コードをできるだけ英語で書くことは・・・、英単語をよく使う書き方ではなく、英文らしい書き方というのがポイントです」
  • Rubyでforkを利用したマルチプロセスでコアを使い切りたい気持ち - Qiita

    Rubyで書かれたちょっと重たいバッチ処理があって速くする必要があったので、fork(2)とpipe(2)を使ったマルチプロセス化でコアを活かした並列処理に書き直した話します。 以下の記事に詳しく書いてあるので、TL;DRはそちらを見てな? Forking and IPC in Ruby, Part I Forking and IPC in Ruby, Part II なるほどUnixプロセス ― Rubyで学ぶUnixの基礎 - 達人出版会 Threadじゃいかんの? — GILについて 並行プログラミングとしてまず最初に思いつくのはマルチスレッド化ですが、RubyにおいてはGVL(Giant VM lock)があるためマルチコアを活かすことは難しいのです。 ネイティブスレッドを用いて実装されていますが、 現在の実装では Ruby VM は Giant VM lock (GVL) を有し

    Rubyでforkを利用したマルチプロセスでコアを使い切りたい気持ち - Qiita
  • Ruby on Railsを仕事にしていくための第一歩 - 酒と泪とRubyとRailsと

    最近仕事Railsコードレビューをする時間が長くって、いろいろ指摘するんですが、 Railsって「Railsチュートリアル」には書いていないのに覚えないと仕事にならないこと多すぎだなと気付かされます。 どこでどんなふうにすれば、プロになろうとしている人が最短距離で知識を獲得できるかはわからないですが、 今思っている特に大事だなと思うことつらつらと書いていきます。 😀 プログラミングの重要な要素まず、Railsの前にプログラミングで全般的に特に重要と思っている要素を紹介します。 - リーダブルなコード - ネーミングルールについて - 言語・フレームワークのルール - 変数のスコープについて - プロジェクトの設計思想 - オブジェクト指向・コードの再利用性 - 正しいテストケースを作る プロジェクトによって変わるので、すべては書きませんが、ぜひ意識してどこを学ぶべきかを考えてみてくだ

    Ruby on Railsを仕事にしていくための第一歩 - 酒と泪とRubyとRailsと
  • Ruby のココがダメ - Qiita

    タイトルは釣りです。Ruby に盲目的に惚れている迂生には Ruby の痘痕(あばた)はエクボです。 それはともかく。 メソッド名の別名がありすぎ 「あなたは map 派? それとも collect 派?」っていう問いがまず嫌い。 いや,別名にも意義があるとは思うんだけど,記憶の負担が大きい。 自分では map しか使わなくても,他人のコード読むんだったら collect を知っていなくちゃならない。 しばらく前に reduce っていうメソッド見て,そんなのあったっけ?と思ったら inject の別名だった。 map/collect と inject/reduce の名前とその背景にある発想については,Rubyist Magazine に良い記事がある: そうかと思えば,Array#delete_if と Array#reject! みたいに,働きは基的に同じだけど,削除が行われなかっ

    Ruby のココがダメ - Qiita
    larker
    larker 2015/10/28
    「nil にそんなメソッドねえよ」は確かによく見るな
  • Rails で fat model を避けるための、あまり知られていない方法について - おもしろwebサービス開発日記

    このエントリで書いた内容は、ほぼ Growing Rails Applications in Practice の内容が元になっています。英語ですが、ここで挙げた内容以外にもコードを綺麗に保つテクニックが書かれており、かつページ数も少なく読みやすいです。コードを綺麗に保つのが好きな方は一読してみることをおすすめします。 はじめに Rails で fat model を避けるための方法は、7 Patterns to Refactor Fat ActiveRecord Models を始めとして、多くのやり方が存在します*1。 validation や callback は ActiveRecord(以下AR) を継承せずとも利用することができます。7 Patterns to Refactor Fat ActiveRecord Models の 「3. Extract Form Objects

    Rails で fat model を避けるための、あまり知られていない方法について - おもしろwebサービス開発日記
  • 書籍転載:Ruby on Rails 4アプリケーションプログラミング

    コーナーは、技術評論社発行の書籍『Ruby on Rails 4アプリケーションプログラミング』の中から、特にBuild Insiderの読者に有用だと考えられる項目を編集部が選び、同社の許可を得て転載したものです。 『Ruby on Rails 4アプリケーションプログラミング』の詳細や購入は技術評論社のサイトをご覧ください。 MVCフレームワークとして人気のあるRuby on Railsは,Rubyを活用してREST原則に基づくWebアプリケーションを手軽に開発できる点が大きな特徴です。書では,最新のRuby on Rails 4を対象に,Ruby on Railsの基から,MVCモデルに則ったWebアプリ開発,ルーティングやテストの方法のほか,クライアントサイド開発としてAsset PipelineやCoffeeScript,SCSS,Ajaxなどの最新技術も網羅します。また,

    書籍転載:Ruby on Rails 4アプリケーションプログラミング
  • Marshal.loadする時の注意点 - Qiita

    Ruby オブジェクトをファイル(または文字列)に書き出したり、読み戻したり する機能を提供するモジュール。 Ruby 2.1.0 リファレンスマニュアル | module Marshal それが Marshal です。 オブジェクトをファイルに書きだすということで、HashをMarshal.dumpして文字列化したものをRedisやMongoといったデータストアに保存するという使い方があるかと思います。 (世間一般ではjsonでやることのほうが多そうなイメージがありますが) hoge = { foo: 'bar' } p str = Marshal.dump(hoge) # => "\x04\b{\x06:\bfooI\"\bbar\x06:\x06ET" # strをデータストアに入れる p Marshal.load(str) # => {:foo=>"bar"}

    Marshal.loadする時の注意点 - Qiita
  • Railsアプリの意味不明な時間を削って速度を10倍にした話 - Qiita

    こんにちは。@srockstyleです。 Ruby On Rails便利ですね。フレームワークとして「Railsライクだから便利だよ!」ってはなすフレームワークがいっぱいでてきて久しいです。 今回はRailsで作ったアプリを高速化した話です。と言ってもこれは2015年くらいにやった作業なので、モダンな環境では通用しないかもしれません。 この記事の結論は結局「キャッシュいいね」となってしまいます。 最近のキャッシュトレンドな話はまた別に書きます。 ことのはじまり 当時の僕は一人でアプリケーションを書いてました。 作業もほぼ終盤に終わり、バグも潰し終えたとき、とある現象に気づきました。 ちなみにこれリモートのサーバです。DB接続のところはキャッシュつかうようにしたのである程度早かったり、Cloudのほうも設定したのでよかったんですが遅いですね。Viewが9ms、ARが17msなのに全体で157

    Railsアプリの意味不明な時間を削って速度を10倍にした話 - Qiita
  • Ruby/Railsでロックファイルによる排他制御 | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、鈴木です。 バッチ処理を作成する時に、気を付けなければならないことの一つに、排他制御があります。 排他制御を行なう方法はいくつかありますが、今回はロックファイルによる排他制御を行なうコードを考えます。 排他制御を忘れると 排他制御を忘れていると、 cron で定期的にパッチ処理を起動するように設定した。 前回起動されたバッチ処理がまだ終了していなかったので重複して起動された。 そんな状況は考慮していなかったので、バッチ処理中にエラーが発生した。データ不整合が発生した。 といったことになりかねません。 ロックファイルによる排他制御とは、以下のような手順で排他的に処理を実行する方法のことを言います。 バッチ処理の最初にファイルをロックする。( File#flock() を使用します ) ロックに失敗したら、処理を終了する。( or ロックが取得できるまで待機する ) 来の処理を実

  • 「ファイルをcloseすればflockも解除される」は嘘 - monthly gimite

    たいていの場合はこのとおりの挙動になるので、これを信じてしまってて、おかげでハマりました。 $ cat a.rb open("test.txt", "r+") do |f| #ファイルをopen f.flock(File::LOCK_EX) #ロックする system("ruby b.rb &") #バックグラウンドでb.rbを実行 end #ファイルを閉じる $ cat b.rb open("test.txt", "r+") do |f| f.flock(File::LOCK_EX) end $ ruby a.rbこれをやると、b.rbは固まります。 open("test.txt", "r+") do |f| f.flock(File::LOCK_EX) system("ruby b.rb &") f.flock(File::LOCK_UN) #アンロック endとしたら、固まらなくなり

    「ファイルをcloseすればflockも解除される」は嘘 - monthly gimite
  • Rubyにおける例外処理まとめ - プログラミング的なSomething

    苦手なのでRubyの例外処理まとめます raiseでエラーを表示させます raise 'error' #=>RuntimeError: error beginで例外を捕捉します。beginは例外が発生しそうな箇所に使用します begin 1/0 rescue = e puts e.message #=>divided by 0 puts e.class #=>ZeroDivisionError end beginで囲んだ部分をrescueで捕捉します。変数eには例外オブジェクトが代入されますので、例外の情報をメソッドを用いて確認できます。 また、rescue節では指定がなければStandardErrorとそのサブクラスの例外を捕捉します。 rescue Exception => e このように例外オブジェクトを指定することで、StandardErrorのサブクラス以外すべてのエラーを捕捉す

    Rubyにおける例外処理まとめ - プログラミング的なSomething
  • Rubyのcaseを〇〇(言語名)のswitch文だと思っている人たちにぼくから一言ガツンと申し上げたい

    Rubyのcase」を一瞥し「あー要は〇〇(言語名)のswitchね」などと早合点し、その後もその真の価値を知ることなく一生を終えるプログラマが近年跡を絶たない。加えて、「今更条件分岐?RubyはOOPなんだからポリモフィズムじゃね?」とか「HashにProc突っ込んでcallするのがオレ流。」とかうそぶく人たちもまた増加の一途を辿っている。 そんな世の中にあって、ぼくは一言、できればガツンと一言申し上げたい。生まれも育ちもRubyなぼくから、是非ともそんな人たちに「Rubyのcase」について一言申し上げておきたい。 ─ 問題1 ─ 名前name、レベルlevel、ポイントpointの各属性を持った複数のCharacterオブジェクトcharlie, liz, benがある。 class Character < Struct.new(:name, :level, :point) def

  • Rubyで並列処理が簡単にできるgem parallel - 酒と泪とRubyとRailsと

    require 'rubygems' require 'parallel' require 'open-uri' require 'digest/md5' urls = [ 'http://farm4.staticflickr.com/3052/3086132328_e2041be795.jpg', 'http://farm7.staticflickr.com/6053/6312937936_cebaf2feb9.jpg', 'http://farm1.staticflickr.com/54/131841577_0e67642c02.jpg', 'http://farm3.staticflickr.com/2293/2266151759_058e732577.jpg' ] Parallel.each(urls, in_threads: 2) {|url| puts "start downl

  • Rubyに型を付けるHaskellというgemを作ったヨ!

    2020/12/27追記 https://www.ruby-lang.org/ja/news/2020/12/25/ruby-3-0-0-released/ => Ruby3.0.0にRBSとTypeProfと用いた静的解析に対するソリューションが提供されました。 今後はこちらのエコシステムをガンガン盛り上げていきましょう💪 あいさつ P.S. 12/11 HaskellからRubypeにgemを変更しました こんにちは. 寒さが一段と厳しくなってきた事もありまして心を温めるGemを作りました. Rubyの振る舞いを汚染する事無く型保証の恩恵をゆるふわ受けられるgemです (型をつけるとか型保証という言葉をこの文脈ではメソッドの引数返り値のクラスを実行時にチェックするという意味で使っている.) 得体の知れないGemで抵抗感があるかもしれませんが、コード自体は50行以下の薄いGemなので気

    Rubyに型を付けるHaskellというgemを作ったヨ!
  • Rubyのエンコーディング - tmtms のメモ

    Ruby 1.9 から文字列や正規表現オブジェクトはそれぞれエンコーディング(いわゆる文字コード)を保持するようになりました。 たとえば 0xB1 0xB2 という2バイトは EUC-JP エンコーディングでは「渦」、SHIFT_JIS エンコーディングでは「アイ」という文字になります。つまり同じバイト列でもエンコーディングが異なれば異なる文字として解釈されます。 1.8 では文字列はただのバイト列でした。なので、それがどのような文字を表しているのか、つまりエンコーディングが何なのかはプログラムが知っている必要がありました。 1.9 では文字列オブジェクト自身が自分が何のエンコーディングかを知っています。同じ 0xB1 0xB2 というバイト列でも、それが EUC-JP の「渦」なのか SHIFT_JIS の「アイ」なのかは、文字列自身が知っています。 スクリプトエンコーディング スクリプ

    Rubyのエンコーディング - tmtms のメモ
  • Rubyにはウンザリ!動的型付け、副作用、およびオブジェクト指向プログラミング全般からの考察 | POSTD

    この記事を書き上げるには、相当長い時間がかかりました。来は今年の年明け、 Rubyの死 やデイヴィッド・ハイネマイヤー・ハンソンの TDDは死んだ がアップされて騒ぎになる前に投稿するつもりだったのです。昨年末に書いたツイートを見てください。 > Rubyにはもう飽き飽きした。理由はいろいろあるが、特にその副作用と、ステータスが可変なせいで大量のユニットテストを書かされるのにはウンザリだ。 @abevoelker Rubyの開発に関しては、大勢の人が心のどこかで何かおかしい、何かが欠けていると思っているようですが、たいていの人は責める対象を間違っています。Rubyで書いたアプリがとんでもない代物になったって? それはあなたがきちんとテストコードを書かなかったか、テスト駆動開発(TDD)の指針に則って開発しなかったからです。もしくは、正しいデザインパターンに切り分けるための知識が不足してい

    Rubyにはウンザリ!動的型付け、副作用、およびオブジェクト指向プログラミング全般からの考察 | POSTD
  • Rails でファイルをアップロードしてDBに登録する - Qiita

    はじめに gem を使わずに Rails の機能だけで、ファイルのアップロードを試してみます。 バージョン ruby 2.0.0p247 Rails 4.0.0 今回は、アップロード可能な形式やファイルサイズの制限はしてません。 Model class CreateContents < ActiveRecord::Migration def change create_table :contents do |t| t.string :upload_file_name t.binary :upload_file t.timestamps end end end モデル名は Content としています。 アップロードされたファイルを保存する upload_file をbinary、ファイル名を保存する upload_file_name を string で定義しています。 View

    Rails でファイルをアップロードしてDBに登録する - Qiita
  • Rails 4 + Ruby 2.0 で画面遷移無しのファイルアップロード - happy lie, happy life

    表題のとおりのサンプルプロジェクトを作成します。 まずはプロジェクトを新規作成します。 rails new sample_uploadscaffold でアップロード機能を作成、この辺はいつもどおり。 bundle exec rails g scaffold attachments title:string path:text何かと不便なのでルーティングを定義しておきます。 root 'attachments#index' 終わったらマイグレーションを通しましょう。 bundle exec rake db:create bundle exec rake db:migrate次に app/models/attachment.rb を編集し、ファイルがアップロードできるようにします。 class Attachment < ActiveRecord::Base attr_accessor :fi

    Rails 4 + Ruby 2.0 で画面遷移無しのファイルアップロード - happy lie, happy life