議事録(127) - hamamatsu-rb/hamamatsu-rb.github.com GitHub Wiki

Hamamatsu.rb #127

こんなの作りました or 知りましたの枠

メモリドカ食いしてた件

  • in_batchesで1000件ずつ取ってた
  • in_batchesをやめた
  • 結局どれが一番効果があったかはわからん
  • 一定にはなった
  • sidekickも使ってるがメモリリークする??らしい
  • 断片化?はRubyのビルドオプションで挙動を替えれるらしかった…がうまく働かなかった
  • ActiveRecord.uncachedが効いた
  • バッチ処理だからループ中にどれくらい食ってるのかよくわからなかった
  • printfデバッグのオーバーヘッドもバカにならない…
  • コンテナはメモリ0.5GBでしょぼかった😭
  • Rubyのメモリ使用量の計測をmemsize_of_allとpsコマンドで行う
  • https://nishinatoshiharu.com/ruby-profile-memory-usage/
def print_memory_usage
    require 'objspace'
    memsize_before = ObjectSpace.memsize_of_all * 0.001 * 0.001
    rss_before = `ps -o rss= -p #{Process.pid}`.to_i * 0.001
    yield
    memsize_after = ObjectSpace.memsize_of_all * 0.001 * 0.001
    rss_after = `ps -o rss= -p #{Process.pid}`.to_i * 0.001
    puts "memsize_of_all: #{(memsize_after - memsize_before).round(2)} MB, rss: #{(rss_after - rss_before).round(2)} MB"
  end

複数ブランチ運用は『単一のコードベース』と言えるのか / What are your justificatio

redcar ~ 開発停止してるエディタ

赤電の時刻表API

ペアプログラミング中

  • メイン:コーディング/単体テスト
  • サブ(私):要件定義/基本設計/詳細設計/結合テスト
  • サブ(私):単体テストの洗い出しもやるべきだったかな…
  • 今結合テスト中だけど品質ぼっこぼこ
  • そもそも難しい課題だった
  • プログラムそのものの時間はかなり減らすことができた
  • リリースまで一緒にやるべき
  • プロジェクトに浸かるつもりでやってほしい🧟‍♂️
  • ↑↓プロジェクトに依存するコードも困る…
  • 設計時点の問題だったのでは
  • 今後に生かしていこう

自動テストツール

コメントの書き方

  • メソッドコメントくらいは書いてほしい
  • コメントは意味があることを書こう
  • ぶっちゃけ話を書く
  • TODO、NOTEとか
  • コピペ元のURL書くとかいいかも
# 関連 issue
# @see https://github.com/xxxx/issues/1365
begin
 yield(feed)
ensure
 # エラーで更新できなくてもloaded_atは更新しないと、次のループで常に最初の処理対象になり、
 # いつもエラーになるFeedばかりが処理され続けることになってしまう
 feed.update(loaded_at: Time.current)
end

# 一度設定した日付をnilにしてリセットはできない
restore_published_at! if published_at.nil? && published_at_was

# 遠い未来の日付が設定されていて、ソートでずっとトップに居座る項目が作られたことがあるため、現在時刻を上限とする
self.published_at = [published_at, Time.current].compact.min

# @param type[String] :weekday(平日) or :weekend(土日祝)
# @param detection[String] :upto(上り、新浜松行き) or :downto(下り、西鹿島行き)
def clawling(type:, detection:)
  Scraper.new(station: @station, type: type, detection: detection)
  .run(page)
end

プログラマのための英単語

  • メソッド名生成

  • https://codic.jp/engine

  • https://codic.jp/plugins

  • 時刻表をクロールする => crawl_timeline

  • プログラミングでよく使う英単語のまとめ

  • アプリケーションをつくる英語 (達人出版会)

  • existsA

  • existsB

  • existsC

  • ↑みたいな小さいメソッドをまとめてる奴はどうする?

  • →なにをまとめているかうまく表現する

  • runとかdoとかになっちゃう…

  • コメントでうまく表現できていればいいのでは?

def do_run
  Crawler.run
end

メソッド内で例外を投げるか、-1を返すか

  • Cには例外はなくて-1を返していた。自動テストするならエラー投げるより-1返す方が都合がいい?
  • throwを期待するテストもjunitは書けたはず
  • たいていのテストするツールはcatchできるようになってる
  • throwの方が楽なのでthrowを使っていくべき
  • 例外でトランザクション rollbackするフレームワークもあるし
  • Rustは例外が無い https://qiita.com/fujitayy/items/cafe661415b6aa33d884

クラウド化

複数DB対応アプリってどうなの

  • パフォーマンス出したりするためにストアド作ると大変
  • エンタープライズだとありがち、既存のDBとアプリケーションのDBシステム違ったり、OracleとMySQLとか
  • リポジトリをインタフェースにして間に噛ませてSQLアクセスするインフラ層に実装を書く
  • TEMPORARY TABLE
  • https://qiita.com/kamedono/items/dfb25d444f8f817c2ca2
  • BigQueryもSQLでアクセスする

ビッグデータ

Rails7

KPT

KEEP

  • 色々な話を聞けて、良かったです。 ★2
  • 話題たくさんでて良かったです
  • コードやコメントの具体的な話が結構できた ★1
  • 仕事で困ってることを聞けた ★1
  • コメントの書き方の話が面白かった ★3
  • 議事録 ★2
  • ちょ~久し振りに参加した(^o^) ★1
  • (部分)参加できた

PROBLEM

  • 話題を提供できなかった… ★1
  • 話すぎた気がする ★1
  • redcar、DLしたけど動きません ★2
  • 自己紹介が遅かった ★1
  • 残業 ★1

TRY

  • LTネタを探す
  • 次回のネタを提供する。 ★1
  • DB周りの勉強をする。
  • なんか作ってくる(できればRubyで) ★2
  • 工場のIoT可視化ネタ面白いので是非見て欲しい ★3
  • 次回は 10/13(水) 19:00~
  • 新しい人がいたら自己紹介! ★1
  • JSONをいい感じにパースするCLIをRubyで書く ★1

自己紹介

  • Hamamatsu.rb仕切ってる人。浜松でRuby on Railsを使って開発中。JAWS-UGにも参加中
  • 普段C#で生産管理作って売ったりしてる人。
  • 浜松でRuby on Railsを使って開発中の人。主に受託開発。RubyとたまにJAWS
  • 学部時代からHamamatsu.rbにいる人。JAWSにも参加したい
  • 組み込み系のプログラマの人。CとかC++。Rubyは趣味。
  • 製造業の仕事。管理業務がメインだがコードも書いている。TypeScriptとReact
  • デザインの仕事の人。仕事を控えて3カ月くらいはRailsの勉強をしてます

ruby girls

次回

  • 次回は 10/13(水) 19:00~

次回のネタ