- 1. 【計算結果が正しくない!?】案外知らない、計算誤差の話
- 2. RubyKaigi 2022にオンラインで参加しました
- 3. minitestでRailsをテストする際に使える検証メソッドの一覧と、そのメソッドに対応するAPIドキュメントのまとめ
- 4. ruby「インスタンスメソッドとクラスメソッドの使いわけ」と「アクセサメソッドの使い分け」
- 5. Python,Ruby,PHP,Java,JavaScript,Perlのfor文の比較
- 6. 正規表現 備忘録
- 7. 【Ruby】特定のレベルよりも重要なログのみを出力したい
- 8. SQLの練習ができる学習サービス「SQLab」を作ってみた
- 9. 2重以上のハッシュの取り出し方について
- 10. Ruby on Rails link_toのパスの引数に.idって、いるの?いらないの?(自分用メモ)
- 11. オブジェクト指向 とは
- 12. 連想配列の繰り返し処理
- 13. 入れ子のHashにおける値の取得
- 14. 連想配列(Hash) の 基本的な扱い方
- 15. RubyでTwitter APIを利用してみた
- 16. 【Rubocop】rubocop -Aを実行する前はexcludeを設定しておく
- 17. 様々な繰り返し処理
- 18. 配列の繰り返し処理
- 19. 配列 の様々な メソッド
- 20. 配列 と 集合
【計算結果が正しくない!?】案外知らない、計算誤差の話
# はじめまして
63歳ですが、プログラム書いてます。
30年以上昔に知った話を、最近、また耳にしましたので、ちょっとご紹介させていただきます。# 実数計算が正しいか、9種類の言語で試しました。
今回試したのは、linux 標準の bc(計算機)、PHP、python3、ruby、perl、node.js、C++、go、fortran95 の9つの言語です。
C++ のコンパイルは “`gcc ru88.c -lm -o ru88.out“`、“`gcc ru88-boost.cpp -lstdc++ -o ru88-boost.out“`、
fortran95 のコンパイルは “`gfortran -O3 -o ru88.exe ru88.f95“`、
“`gfortran -O3 fmsave.o fm.o fmzm90.o fm_interval.o fm_doubleint.o fm_quadint.o fm_quadreal.o fm_rational.o -o ru88-FM.exe ru88-FM.f95“`、
go は “`go run ru88.
RubyKaigi 2022にオンラインで参加しました
## はじめに
[RubyKaigi 2022](https://rubykaigi.org/2022/)にオンラインで参加しました。
まつもとさんから、ブログを書くまでがRubyKaigiだと言われたので、聴いたトークの感想をひとことずつ書いていこうと思います。## [1日目](https://rubykaigi.org/2022/schedule/#day1)
### [Ruby meets WebAssembly](https://rubykaigi.org/2022/presentations/kateinoigakukun.html#day1)
WebAssenbly、今まであんま気にしてなかったけど、発表を聴いて俄然気になってきました。
ちょっとサイズが大きいですが、JSのようにHTMLのscriptタグで書けたりするし、DOMの操作もできたりしてました。
Ruby3.2でサポートされるということなので、楽しみです。### [Making \*MaNy* threads on Ruby](https://rubykaigi.org/2022/presentation
minitestでRailsをテストする際に使える検証メソッドの一覧と、そのメソッドに対応するAPIドキュメントのまとめ
## はじめに
Rails標準のテスティングツールはminitest(をベースにRailsが独自拡張したもの)です。
現場ではRSpecがよく使われるとはいえ、Rails標準のminitestを使っている方も中にはおられると思います。
Railsのminitestには`assert`や`refute`(または`assert_not`)で始まる検証メソッドが数多く定義されていますが、かなり数が多いため全メソッドを把握している方は少ないのではないでしょうか。
また、それら検証メソッドは、
– minitestがデフォルトで提供しているもの
– Railsが独自に提供しているもの
– Capybaraのような外部gemが提供しているものなど様々です。そのため、メソッドの使い方を調べたくてもどのドキュメントで解説されているのかわからない、ということがよくあります。
そこでこの記事では、Railsのminitestではどんなメソッドが使えて、そのメソッドの使い方を調べたいときはどのドキュメントを見にいけばいいのかを一覧化してみました。
minitestでRailsのテストを書く
ruby「インスタンスメソッドとクラスメソッドの使いわけ」と「アクセサメソッドの使い分け」
# はじめに
著者自身も初学者なので本内容を鵜呑みにせず参考程度に読んで頂けるとありがたいです。?
___
![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534058/92d8ce09-2868-c8fa-5a6e-678cd3244749.png)
___
![スライド3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534058/f21fff5a-980a-fd75-314f-f87a910d3ba3.png)
クラスとはインスタンスの設計書にあたるものです。
___
![スライド4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534058/851818ff-47d0-5dd9-7b11-2ad63cde7444.png)
インスタンス(オブジェクト)は設計書をもとに作ったものです。
そのため、クラスが車の設
Python,Ruby,PHP,Java,JavaScript,Perlのfor文の比較
Python,Ruby,PHP,Java,JavaScript,Perlのfor文の比較
# Python
https://qiita.com/Morio/items/e8aed85346c0055beea7
# Ruby
https://qiita.com/Morio/items/3ac5cac9ace7e9ddbdb4
# PHP
https://qiita.com/miriwo/items/d1b5d5ece4f16c7b5985
# Java
https://qiita.com/Co_Pilot/items/7c59410cd90be4cf06d8
# JavaScript
https://qiita.com/w-tdon/items/f3ecb29dc9350f2f2e8d
# Perl
https://perlzemi.com/blog/20080327120662
正規表現 備忘録
# よく使用する正規表現
`//`:構文の最初と終わり
`[]`:[]で囲まれた文字のうちいずれか1つにマッチする
`[a-z]`:aからzのいずれか1つにマッチ
`\d`:数字にマッチ
` [ぁ-んァ-ヶ一-龥々ー]`:かな/カナ漢字のいずれかにマッチ
`\s ` :スペースと全角スペース(\sの後ろに全角スペースを入れる)にマッチ`/i`:大文字・小文字を区別しない
`\A`:\の直後においた文字が先頭にある文字列にマッチ
`\z`:\の直前においた文字が末尾にある文字列にマッチ`.`:ハイフンやピリオドなど含めたすべての英数字において、1文字マッチする
`*?`:直前の1文字が0回以上続く文字列をチェックし、?の直後の文字が出た段階でその1文字を返す
`+`:直前の文字が1回以上の繰り返しにマッチ
`{n}`:直前の文字がn回以上出現するものにマッチ
`{n,m}`:直前の文字が少なくともn回、多くてもm回出現するものにマッチ
`?=`:?後に設定した文字が続く文字列にマッチ
【Ruby】特定のレベルよりも重要なログのみを出力したい
# 概要
開発時にはデバッグログまで記録し、運用時には重要なログしか残さないという制御をするには、Logger#levelメソッドでログを記録するしきい値を指定します。# LOGの段階
* 6段階のログレベルに分けてログを記録します。* UNKNOWN
* 常に記録されるべき不明なエラー* FATAL
* プログラムをクラッシュさせるような制御不可能なエラー* ERROR
* 制御可能なエラー* WARN
* 警告* INFO
* 一般的な情報* DEBUG
* 低レベルの情報* Logger#levelメソッドにINFOを設定した記載例
“`ruby
require ‘logger’log = Logger.new(STDOUT)
log.level = Logger::INFO #INFO以上のログのみ出力log.debug(“debug message”)
log.info(“info message”)
log.warn(“warn message”)
“`上記の記載例だとINFOよりも重要度の低い情報は記
SQLの練習ができる学習サービス「SQLab」を作ってみた
# はじめに
![sqlab-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1074872/d8013e1c-7b65-0242-3de4-38778c2b94e5.png)
こんにちは、[タケ](https://twitter.com/take_paolo)と申します。
SQLの練習ができる学習サービス「SQLab」を作りました。https://sqlab.net/
※ PC専用です。
※ 推奨ブラウザはGoogle Chromeです。# なぜ作ったの?
SQLを学び始めた当初は **「SQLってなんか難しそう」** というイメージでしたが、
練習問題を解いていく中で次第に自力でクエリを組み立てることが **「クイズみたいで楽しい」** と思うようになりました。
そこでもっと多くの練習問題を解いてみたい、もう少し難易度の高い練習問題を解きたいと思ったのですが、・無料でバリエーション豊かな多くの練習問題に取り組める
・環境構築不要でブラウザ上ですぐに実践できる
・シンプルで使いやす
2重以上のハッシュの取り出し方について
## 久しぶりに問題をしたら忘れていたのでメモ
### そもそもハッシュとは
複数の値をまとめて管理する方法
ハッシュはそれぞれの値(バリュー)に名前(キー)をつけて管理する
書き方はいろいろあるが良く使う(というかほぼこの書き方しかしない?)のがキーにコロン「:」をつけて記述するシンボルという書き方がある
“`
{キー: バリュー}
user = {name: “Tanaka”, age: 25}
“`### 取り出し方
複数のユーザーの情報をハッシュとして持つ変数user_dataがある
“`
user_data = [
{user: {profile: {name: ‘George’}}},
{user: {profile: {name: ‘Alice’}}},
{user: {profile: {name: ‘Taro’}}},
]
“`配列の要素を順番に取り出すeach分を使う
“`
user_data.each do |u|
end
“`
ハッシュから特定の値を取得するにはその値に対応するキーを取得する
“`
ハッシュ[取得したい値のキー]
`
Ruby on Rails link_toのパスの引数に.idって、いるの?いらないの?(自分用メモ)
# はじめに
Ruby on Railsのlink_toの読み方についてなんとなく理解したので
自分用メモとして投稿します。
(自分にしかわからない書き方となっていること、ご了承ください:bow:)# link_toのパスの引数に.idって、いるの?いらないの?
#### link_toの記述方法
“`
<%= link_to "表示したいテキスト", url又はパス %>
“`
補足:link_toのHTTPメソッドは特に設定しなければGETになる。
そのため、もし設定したい場合は下記のようにmethodオプションを設定すること
“`
<%= link_to "表示したいテキスト", url又はパス, method: :HTTPメソッド %>
“`#### 今回のコード
“`show.html.erb
<%= link_to "編集", edit_list_path(@list.id) %>
“`
コードの意味:ブラウザに”編集”と表示させるよ。
”編集”を押すとedit_list_path(@list.id)に飛ぶよ。#### 疑
オブジェクト指向 とは
# 目的
– オブジェクト指向とは何かを抽象的に理解する# オブジェクトの性質
– Ruby は全てものもがオブジェクトでできている
– オブジェクトは、いずれもなんらかの型(クラス)に属している
(”apple” は Stringクラス に属している)
– クラスによって別々のメソッドを持つ
(pry の ls で確認してみる)
– インスタンスはオブジェクトから実体化したオブジェクト
(”apple” は Stringクラス の インスタンス)# オブジェクト指向とは
– クラスをもとにインスタンスを作る考え方
(hash = Hash.new <= ハッシュクラスから、そのメソッドが使えるインスタンスを生成) - メリットは、同じ性質のものを簡単に作れること・コードの修正箇所が減ること - インスタンス変数はインスタンス内で使いまわせる変数のこと (@ をつける) # 例 ```ruby #任意の名前が出力できるメソッド # =>引数に名前を入れるclass Student
def say_name
puts @name
enddef sa
連想配列の繰り返し処理
# 目的
-連想配列における繰り返し処理の方法を理解する# ポイント
– ループごとにHash のキーが第一引数に、バリューが第二引数として渡される
– 配列の繰り返し処理とブロック内の書き方は変わらない
# 書き方の例
“`ruby
scores = {japanese: 30, english: 20}scores.each do |key, value|
puts “#{key}の点数は#{value}です”
end#scores.each {|k, v| puts “#{k}の点数は#{v}です”}
“`
~実際の表示~
japaneseの点数は30です
englishの点数は20です# 注意するポイント
– 第一引数、第二引数の変数は、なんでも良い# 具体的な例
“`ruby
#変数userの各要素の値を全て小文字に変換した内容を別のHashに代入
# => 各要素に同じ処理をするため、繰り返し処理を使う
# => downcase で小文字に変換
# => 連想配列の形で表示(.to_h)(map)
user = {first_na
入れ子のHashにおける値の取得
# 目的
– 入れ子構造の連想配列から任意の値を取得する
# ポイント
– 入れ子とは、オブジェクトの値にさらにオブジェクトを指定したもの
– dig メソッドでも取得できる
# 具体例1
“`ruby#以下の変数hashから、値”USA”を取得する
require “pry”
hash = {
sports: {
soccer: {
origin: “England”
},
volleyball: {
origin: “USA”
}
}
}binding.pry
puts hash[:sports][:volleyball][:origin]
“`
~実際の表示~
31: }
32: }
33:
34: binding.pry
35:
=> 36: p hash[16] pry(main)> hash.class
=> Hash
[17] pry(main)> hash[:sports].class
=> Hash
[18] pry(main)> #
連想配列(Hash) の 基本的な扱い方
# 目的
– 連想配列のメリットと使い方を理解する# ポイント
– 連想配列は、値(value)にラベル(key)をつけた 配列 のこと
– 各要素に意味を持たせることができる
– 要素の順序を気にする必要がない# 書き方の例
“`ruby
#連想配列の初期化
hash = {}#配列の場合
array = [20, 30]
#連想配列の場合
hash = {english: 20, japanese: 30}
#hash = {“english” => 20, “japanese” => 30}p array
puts hash
puts hash[:japanese]“`
~実際の配列~
[20, 30]
{:english=>20, :japanese=>30}
30# 注意するポイント
– key は文字列で書くより、シンボル(コロンで指定)で書いたほうが内部的な処理がはやい
– 文字列で配列の key を指定したら、取得する際も文字列で取得しないといけない# 具体的な例
“`ruby
hash = Hash.new#要素の追加
hash
RubyでTwitter APIを利用してみた
### 導入
アイドルが好きで、特定のユーザーのツイートであったり、ツイートをいいねしてくれたユーザー情報を、スクリプトで取得できたらアイドルヲタク活動が少し充実するなと思ったので色々調べてみました。### 流れ
1. twitterAPIを利用できるようにする
2. 必要な情報を集めるてソースコードを書いてみる
3. 実行してみた
4. おまけ### 1. twitter_apiを利用できるようにする
僕は以下記事を参照にtwitterAPI登録を行いました。
一番躓いたのは、twitterAPI用に作成したtwitterアカウントに、携帯の電話番号を登録しなければいけないところです。別のアカウントで既に携帯番号が登録されたうえに、もう利用できないアカウントだったため、他に利用できる携帯番号を取得するハメになりました。
ロケットモバイルというところで月300円ほどでsimと携帯番号を買ったのですが、知り合い曰く使用頻度によってはタダで利用できるところもあるらしく無駄な出費をしてしまいました。https://qiita.com/kngsym2018/items/252
【Rubocop】rubocop -Aを実行する前はexcludeを設定しておく
# Rubocopの自動修正
Rubocopの自動修正、rubocop -a や rubocop -Aは痛快なコマンドで、間違っているところを一括で全部直してくれる。使った後はなんか清々しい気持ちになる。
ただし、初めて利用する際の注意点もある。
それは、実行前にRubocopをよく設定していなければ、Rubocopの対象とすべきでないファイルにも自動修正をかけてしまうことである。
これをやってしまうとgithubでPRした時にchangedのファイル数がえげつないことになる.# rubocop.yml
rubocop.ymlにあらかじめ対象から除外したいファイルを指定しておくのが良い。
以下は設定の一例である。
“`AllCops:“`の下に“`Exclude“`とある。この下に除外したいファイルを指定していく。ここで“`*“` はワイルドカードなので“`bin/**/*“`と指定しておくことでbin以下のファイルを全て対象外とすることができる。
“`yaml:rubocop.yml
inherit_from:
– .rubocop_airbnb.yml
様々な繰り返し処理
# 目的
– Enumberable処理について理解する# ポイント
– Enumberable処理は、each などのブロックを呼び出してループを行う処理のこと
– while文は 変数の初期化 や ループ終了のためのコード が必要
– map はループの戻り値を配列で返す# 書き方の例
“`ruby
numbers = [1, 2, 3]count = 0
while count < numbers.length do puts numbers[count] count += 1 end numbers.each do |number| puts number end ``` ~実際の表示~ 1 2 3 1 2 3 # 注意するポイント - while文 はミスると無限ループになる - each文 はオブジェクトの数ぶんしかループしない # 具体的な例 ```ruby #配列の要素の数字1つ1つに10を足した結果を配列で出力 numbers = [1, 2, 3, 5, 6] result = numbers.map do |numbe
配列の繰り返し処理
# 目的
– 繰り返処理の方法とメリットを理解する# ポイント
– 繰り返処理を使えば、何度も同じ処理を書く必要が無くなる
– ループの回数を使い時は、with_index メソッドを使う# 書き方の例
“`ruby
#以下の配列の要素を2倍にして足し合わせる
numbers = [1, 2, 3]sum = 0
numbers. each do |number|
sum += number*2 #sum = sum + number*2
endputs sum
numbers = [1, 2, 3]
sum = 0
numbers.each {|number| sum += numbers*2}
“`
~実際の表示~
12
12# 注意するポイント
– 「each」「map」はオブジェクトのループで使う
– 「each」は先頭から順に変数に渡される
– 「times」は回数を指定するループ# 具体的な例
“`ruby
fruits = [“apple”, “banana”, “lemon”]fruits.each.with_index(1
配列 の様々な メソッド
# 目的
– どのようなメソッドがあるのかを理解する# ポイント
– pry の ls を使って配列のメソッドを確認する
– やりたい処理を言語化し、使えるメソッドを探す# 書き方の例
“`ruby
array = [1, 2, 3]array.shift #キュー方式
p arrayarray.unshift(1) #キュー方式
p arrayarray.pop #スタック方式
p array“`
~実際の表示~
[2, 3]
[1, 2, 3]
[1, 2]
# 注意するポイント
– 破壊的メソッド と 非破壊的メソッドがある
– 非破壊的メソッドでも「!」を使えば元の変数の値を書き換えることができる# 具体的な例
“`ruby
numbers = [3, 8, 1, 18, 124, 10, 8, 5, 53, 10]
numbers.uniq!
p numbers
p numbers.sumnames = [“聡”, “次郎”, “太郎”, “小次郎”, “武蔵”]
man = “小次郎”
#result = true
re
配列 と 集合
# 目的
– 配列同士の演算の仕方を理解する# ポイント
– 和集合は、配列に含まれる全ての値をとる
– 積集合は、どちらの配列にもある値をとる
– 差集合は、配列から重複する部分以外の値をとる# 書き方の例
“`ruby
numbers_a = [1, 2, 3]
numbers_b = [3, 4, 5]p numbers_a | numbers_b #和集合
p numbers_a & numbers_b #積集合p numbers_a – numbers_b #差集合
p numbers_b – numbers_a“`
~実際の表示~
[1, 2, 3, 4, 5]
[3]
[1, 2]
[4, 5]# 注意するポイント
– 差集合は、左辺で重複していて右辺にはない要素は除かれない