タグ

Rubyに関するshozzyのブックマーク (72)

  • ZIP中のファイル名の文字化け(Ruby編) - tmtms のメモ

    tmtms.hatenablog.com という記事を書きましたが、今回はRubyZIPファイルを作る時の話を。 RubyZIPファイルを作るには、rubyzip というライブラリを使います。 % gem install rubyzip 次のようにしてZIPにファイルを追加できます。 require 'zip' Zip::File.open('hoge.zip', Zip::File::CREATE) do |zip| zip.add('いろはにほへと.txt', '/path/to/いろはにほへと.txt') end Zip::File#add の第一引数はZIP内に記録されるファイル名、第二引数は実際のファイルのパスです。この二つのファイル名は同じである必要はありません。 ただし、この場合はUTF-8フラグがセットされません。つまりWindowsの標準機能で開くと文字化けしてしまい

    ZIP中のファイル名の文字化け(Ruby編) - tmtms のメモ
    shozzy
    shozzy 2020/03/19
    rubyzipでzip中のファイル名が文字化けするのを防ぐ方法2つ
  • 数字の3桁区切り カンマ【 , 】の着脱 | Ruby / TakayukiKoyama.com

    お会計などではよく桁を把握しやすいように3桁ごとにカンマ区切りをするのが一般的だが、一発変換する関数はない。 数字にカンマを付ける もし、numeric型(int型)ならto_sで文字列に変換する。下記の方法は一旦文字を反転させて後ろから3文字毎にカンマを入れて、文字をもう一度反転させる。桁数を把握していれば頭からカンマを入れられるが、桁数把握の処理を書くぐらいなら反転させて末尾からカンマを入れた方が必ず3文字毎なので簡潔に記述できる。 num = 1234567890 p num.to_s.reverse.gsub( /(\d{3})(?=\d)/, '\1,').reverse # "1,234,567,890" 数字のカンマを外す 今度はカンマがついている数字からカンマを外す。カンマを外す方法はカンマを探して除去すれば良いので、反転する必要はない。文字列から数値に戻すときはto_iで

    shozzy
    shozzy 2020/01/07
    標準のRubyにはこれを簡単に解決するメソッドが用意されていないというのが意外だった。
  • メソッドとブロックの戻り値 - ばくのエンジニア日誌

    このブログ(ばくのエンジニア日誌)はBAKUNOTEに移転しました。 メソッドとブロックの戻り値についてのメモ。 yieldの前に変数を置いて、ブロックの戻り値を受け取ることができます。 ブロックの戻り値は、最後に評価された値です。 def my_method a = yield puts a + " received" end my_method do "block message" end # "block message received"と表示される ブロック内でbreakを使うと、引数に指定した値がメソッドの戻り値となります。 def my_method a = yield puts a + " received" end my_method do break "block message" end # => "block message" メソッド内でreturnを使い、戻り値

    メソッドとブロックの戻り値 - ばくのエンジニア日誌
    shozzy
    shozzy 2020/01/07
    最後に評価された値がブロックの戻り値になる。returnだとメソッドから呼び出し元に戻ってしまう。なんなら変数名だけを書く(代入すらしない)だけでもいい。
  • rspec でファイル読み書きテスト - LIFULL Creators Blog

    ネクストでレコメンドエンジン開発をしてる古川です。 rubyで、ファイルを読み込んで加工して別のファイルに出力というプログラムをよく書きます。 最近、rspec でテストを書くようになったのですが、beforeでテスト入力ファイルを作成し、 after で作成したテスト入力ファイル、テスト出力ファイルを削除、ということをしていました。 とりあえずは、これで問題なかったのですが、同時実行時や、実行時パス、パーミッションなど、 今後いろいろ問題になりそうで、いやだなと思っていたところ、Stack Overflowに、 まさに、それがやりたかったんだよ!という記事を見つけました。 StringIOを使えばよかったのですね。 記事は、読み込みテストだけでしたので、書き込みテストも追加してみました。 テスト対象クラス my_file_io.rb class MyFileIo def run(path

    rspec でファイル読み書きテスト - LIFULL Creators Blog
    shozzy
    shozzy 2019/12/25
    ファイル入出力のテスト方法
  • cronでシェルスクリプトとrubyプログラムを定期実行させる | vdeep

    cronでシェルスクリプトを動かしてみる 実際にcronを使ってみましょう。 まずは、適当にviで「hello.sh」を次のように作成しました。場所はホームディレクトリにしておきます。 $ vi ~/hello.sh #!/bash/sh echo hello > ~/hello.txt このプログラムを実行すれば、ホームディレクトリに「hello」と書かれたhello.txtが作成されますね。次のコマンドで実行権限をつけておきましょう。 $ chmod +x ~/hello.sh このプログラムをcronに登録するには「crontab -e」コマンドを使います。 $ crontab -e viが立ち上がるので、次のように記述しましょう。 10 12 1 6 * /bin/bash ~/hello.sh これで、「6/1 12:10に、hello.shを実行」という処理をcronに登録する

    cronでシェルスクリプトとrubyプログラムを定期実行させる | vdeep
  • RubyXLを使ってExcelを編集してクライアントに返す - マイペースなRailsおじさん

    railsでエクセルを編集してクライアントに返そうとしたときのやり方を残しておきます。 作るもの クライアントがエクセルファイルをアップロードする サーバが受け取ったエクセルに何かしらの変更を加える クライアントが変更されたファイルをダウンロードする といった動きになる機能をRailsで作ります。 出来上がったソースコードはこちら。 GitHub - ytnk531/excel-example: rails excel example Excelの編集 RubyXLというgemを使います。 github.com 他にもエクセルを開けるgemはあるのですが、 Roo: 読み込みのみ AXSLX: 新規作成のみ という感じで用途が絞られています。 今回は、編集ができるRubyXLを使います。 単体だと、以下のような感じで使えます。 require 'rubyXL' # ファイルを読み込んでRu

    RubyXLを使ってExcelを編集してクライアントに返す - マイペースなRailsおじさん
  • 【Ruby】よく使う、CSVライブラリを使ったCSV操作 - Qiita

    Ruby標準ライブラリのcsvを使ったCSV操作で、個人的によく使うものを整理した。 次のfuture_gadgets.csvという名称のCSVファイルを例として使う。 number,name,function 1号機,ビット粒子砲,おもちゃの光線銃にテレビのリモコンを合体させたもの 2号機,タケコプカメラー,軸の部分に小型カメラを仕込んだ竹トンボ 3号機,もしかしてオラオラですかーっ!?,ウソ発見器と称した発汗検知装置

    【Ruby】よく使う、CSVライブラリを使ったCSV操作 - Qiita
  • Rubyで画像を無限収集する - Qiita

    ....等々(以下のrequireを参照して下さい) 2.画像の保存先フォルダを作成 プログラムコードと同じ階層に任意フォルダを作る(ここではsakuramana_imgとしました) 3.コードを書く require 'selenium-webdriver' require 'nokogiri' require 'open-uri' require 'addressable/uri' require 'kconv' require "uri" require 'open_uri_redirections' #文字対応増やすためStringクラスを拡張 class String def sjisable str = self str = str.exchange("U+301C", "U+FF5E") # wave-dash str = str.exchange("U+2212", "U+F

    Rubyで画像を無限収集する - Qiita
    shozzy
    shozzy 2019/03/12
    主な内容と関係ないけど、String.sjisableが参考になる。
  • Ruby で CSV を扱う際に便利な gem である SmarterCSV - 約束の地

    SmarterCSV RubyCSV を扱う際には標準ライブラリが便利です。 Ruby標準添付ライブラリcsvCSV.tableメソッドが最強な件について ただ、このライブラリでは面倒な操作を行う際には SmarterCSV という gem もとても便利です。 SmarterCSV の使い方 ドキュメントにもありますが、基的な使い方は以下のとおりです。gem のインストールや gem の require は省略します。 1. CSVファイル を読み込む CSVファイル として your_csv_file.csv を用意します。このファイルの内容は以下のようになっているとします。 first name,last name,age taro,tanaka,23 keiko,yamada,21 tomoko,yamamoto,25 kenji,saito,20 この CSVファイル は

    Ruby で CSV を扱う際に便利な gem である SmarterCSV - 約束の地
    shozzy
    shozzy 2019/03/12
    CSVをハッシュにしたかったので、これは便利そう
  • JANコード用のgem「jan」 - ネットの海の片隅で

    作ったもの JANコードを便利に扱うためのgemを作りました。 JANコードっていうのはバーコードに使われているこんなやつです。 国際的にはEANコードと呼ばれていたりします。 JANコードとは│JANコード登録│ 一般財団法人流通システム開発センター ean | RubyGems.org | your community gem host は既に存在しているんですが、イマイチな感じだったので自分で作りました。 インストール s-osa/jan · GitHub に置いてあります。 いつも通り、 gem 'jan' $ bundle か $ gem install jan してください。 使い方 基 JANコードが正しいかチェックします。*1 jan = Jan.new("4901277241126") jan.valid? # => true Jan::Validator.valida

    shozzy
    shozzy 2019/02/25
    JANコード関係のgem。チェックデジット算出とか。
  • Ruby 2.6.0とより高速なcsv - 2018-12-25 - ククログ

    Rubyの標準添付ライブラリーのcsvをメンテナンスしている須藤です。 歴史 csvは名前の通りCSVを読み書きするための便利ライブラリーです。 もともとRuby体とは別に開発されていたのですが、Ruby 1.8.0のときにRuby体にバンドルするようになりました。dRubyやREXMLがRuby体にバンドルされたのも同じタイミングです。Ruby 1.8.0のときにバンドルするライブラリーをすごく増やしたのです。(その頃の様子がわかるURLをここに置いておきたかったけど見つけられなかった。。。) Rubyではcsvのようにrequireするだけで使えるライブラリーを「標準添付ライブラリー」と呼んでいます。Stringのようにrequireしなくても使えるライブラリーは。。。なんだろう。組み込みクラスかしら。 その後、Ruby 1.9.0のタイミングで実装をFasterCSVに置き換え

    Ruby 2.6.0とより高速なcsv - 2018-12-25 - ククログ
    shozzy
    shozzy 2018/12/26
    とても参考になる。RubyでのCSVの処理速度を極めるならApache Arrow、覚えておこう。/Cを使わないPureRuby実装のメリットってなんなんだろ?(純粋にわからないので知りたい)
  • Sonic Pi を使って Ruby で音を楽しむ - Lazuli

    Ruby Advent Calendar 2018 の12日目の投稿です。 Sonic Pi とは? Sonic Pi は音楽Ruby でライブコーディングできる IDE です。現時点での最新版は v3.0.1 です。 内部的には Super Collider という音響合成環境の Ruby ラッパーとなっています。 と、突然音楽用ライブコーディング IDE と言われても聞き慣れないものなのでイメージしにくいかもしれません。 どんなことが出来るのか、作者である Sam Aaronさんが実際にパフォーマンスをしている様子を YouTube に投稿しているので置いておきます。 www.youtube.com めちゃくちゃかっこいいですよね!!そして頭がおかしい! 今回は、そんなSonic Pi の使い方を簡単に説明していきます。 音楽用語がいくつか載っていますが、今回それらについては説明し

    Sonic Pi を使って Ruby で音を楽しむ - Lazuli
    shozzy
    shozzy 2018/12/25
    おもしろそう!
  • バッチ処理の一部で 30 分以上かかっていた処理を 14 秒で終わるようにした話 - @watson1978 の日記

    Ubiregi Advent Calendar 2018 の 18 日目です。 ユビレジではたくさんのお客様の大量の POS データをお預かりしており、様々なバッチ処理も実行されています。今回は特定のケースでバッチ処理の一部が 30 分以上かかっていた処理を 14 秒で終わるようにした話について書きたいと思います。前回の Ruby 2.5 の SEGV と闘った話 - @watson1978 の日記 に引き続き DTrace を使った話になります。 はじめに ユビレジでは CSV ファイルでお客様が特定のデータをダウンロードしたりアップロードできる機能があります。CSV ファイルにエクスポートしたり、CSV ファイルから DB に取り込む処理を Worker を起動してバッチ処理しています。 大量のデータを保有しているアカウントと同量のデータを用意して手元の環境で試したところ時間がかかるこ

    バッチ処理の一部で 30 分以上かかっていた処理を 14 秒で終わるようにした話 - @watson1978 の日記
    shozzy
    shozzy 2018/12/18
    DTraceか
  • Rubyで安全な文字列リテラルかどうかを判別したい - かみぽわーる

    Rails 5.2からRails SQL Injection ExamplesにあるようなSQLインジェクションを防ぐ仕組みが導入されて、Post.order(params[:order])みたいなコードは心温まる正規表現によるチェックをパスしないと危険とみなされるようになって、お前が安全やと思うんやったらPost.order(Arel.sql(params[:order]))しろってことになった(rails/rails#27947)。 これはRails 5.0のときにparamsがHashのサブクラスじゃなくなったときに比べればマシだけど、明らか安全やと思ってるリテラルもRailsに危険とみなされて既存のアプリケーションによったら非常にわずらわしい。たとえばDiscourseというRailsアプリは5.2に上げるときにこれの影響をモロに受けるんやけどっていうお気持ちを表明しています(ra

    Rubyで安全な文字列リテラルかどうかを判別したい - かみぽわーる
    shozzy
    shozzy 2018/10/17
  • Ruby - Railsでcsv形式のみを取り込む方法(それ以外エクセルファイルなどはエラーを出したいです)(40786)|teratail

  • Ruby標準添付ライブラリcsvのCSV.tableメソッドが最強な件について

    ─ 問題1 ─ data.csvファイルには、5人のプレイヤー(Alice, Bob, Jimmy, Kent, Ross)が二種類のゲーム(gameA, gameB)をプレイした結果が次のような形で格納されている。各ゲームの平均点を求めよ。 data.csv player,gameA,gameB Alice,84.0,79.5 Bob,20.0,56.5 Jimmy,80.0,31.0 Kent,90.5,15.5 Ross,68.0,33.0 data = File.read('data.csv') headers, *scores = data.lines.map { |line| line.chomp.split(',') } scores # => [["Alice", "84.0", "79.5"], ["Bob", "20.0", "56.5"], ["Jimmy", "80

  • もしOSに断絶があればRubyは死んでいた可能性が高い、まつもと氏がRuby25周年で講演

    Post author:sider Post category:Uncategorized Reading time:4 mins read Post published:2018-02-26 もし過去のOSに断絶があったら、Rubyが絶命していた可能性はかなり高い。25年のRuby開発の歴史を振り返りつつ、そんな意外な見方を示したのはRubyの生みの親として知られる、まつもとゆきひろ氏だ。 日生まれのプログラミング言語「Ruby」(ルビー)が25歳の誕生日を迎えた。Rubyが生まれたのは1993年2月24日のこと。それからちょうど25年目となる2018年2月24日に、Ruby25周年記念イベント「Ruby25(ルビー・トゥエンティーファイブ)」が、Rubyアソシエーションおよび日Rubyの会の後援で東京の品川インターシティーで開催された。 基調講演を行ったまつもと氏は、25年を振り返

    もしOSに断絶があればRubyは死んでいた可能性が高い、まつもと氏がRuby25周年で講演
    shozzy
    shozzy 2018/07/31
    "テディベアプログラミング" ペアプロの代わりにぬいぐるみのクマに話しかけながらプログラミングすることで考えを整理しやすくなるとのこと。
  • EnumeratorとEnumerator::Lazyの違い - Qiita

    はじめに Ruby 2.0では、Enumerable#lazy というメソッドと、その返り値である Enumerator::Lazy が導入されました。 この記事では、Enumerable#lazy と Enumerator::Lazy によって無限リストをmapできることを紹介します。 また、Enumerator と Enumerator::Lazy の質的な違いを説明します。 遅延リストとは 遅延リストですが、Haskell などの一部の関数型言語では一般的に使われているもので、 遅延評価といって、値が必要になるまで計算しないことによって、無限に続くリストも扱うことができるというものです。 無限リストをmapする 普通にやってみるとダメ 次のような無限リスト(無限の長さを持つ Range オブジェクト )を map する式[1]を考えてみます。 この式は実行が終わりません。

    EnumeratorとEnumerator::Lazyの違い - Qiita
  • Ruby で xlsx を編集する - Secret Garden(Instrumental)

    Ruby で既存のエクセルファイルを編集したかったので試してみた。 Ruby でエクセルファイルを扱う手段(gem)はいくつかあるが今回は、 .xlsx ファイルの読み込み .xlsx ファイルの書き込み セルの結合 を行いたかったので RubyXL を使うことにした。 余談 最初は spreadsheet を使おうと思って試してみたが、これは .xls (.xlsx ではない)しか読み書きが出来ないのでボツに。 次に .xlsx が読み込める roo を試してみたが、これも .xlsx の読み込みはできるけど、書き込みが出来ないのでやっぱりボツに。 また axlsx も使い勝手とかはよさそうだったが、これはファイルの読み込み自体が行えずに(ry。 このように Rubyge でエクセルを扱う gem はいくつか存在するが、全体的にかゆいところに手が届かない。 と、いうような問題を解決するた

    Ruby で xlsx を編集する - Secret Garden(Instrumental)
  • 指定フォルダ内にあるExcelファイルを一括でプリントアウトするRubyスクリプト - @katzchang.contexts

    複数シート含有の40ブックを10部印刷とか、手でやると死ねる割に代替え手段がないのはどうよ。 #! ruby -Ks require 'win32ole' def getAbsolutePath filename fso = WIN32OLE.new('Scripting.FileSystemObject') return fso.GetAbsolutePathName(filename) end xl = WIN32OLE.new('Excel.Application') xl.DisplayAlerts = false xl.Visible = true fso = WIN32OLE.new('Scripting.FileSystemObject') fso.GetFolder(getAbsolutePath("files")).Files.each do |file| book =

    指定フォルダ内にあるExcelファイルを一括でプリントアウトするRubyスクリプト - @katzchang.contexts
    shozzy
    shozzy 2009/05/25
    rubyでこんなことできるんだ。/人力で印刷してたに一票。というか、40ブックも印刷する羽目になったことはさすがになかったなぁ。