dogwood008の開発メモ!

最近のマイブームは機械学習, Ruby on Rails。中でも機械学習を使った金融商品の自動取引に興味があります。

【Python】ロガーとハンドラをログレベルで制御して、表示のオンオフを管理する

要旨 とりあえずここに書いてあることを真似しておけばOK。 詳細 詳細はまた別の日に記載するとして、ひとまずコードだけを置いておく。個人的には非常に便利に使用しているので、きちんと使用方法やTipsを話をまとめ直したい。 import sys from logging imp…

【Ruby】Object#yield_selfとObject#then

要旨 # カレントユーザに所属する最新のコンテンツについて、 # 公開済みならそのタイトルを、未公開なら「(下書き)」を返す latest_title = current_user.contents.last.then { |content| content.published? ? c.title : '(下書き)' } 詳細 Object#yie…

【Python】DataFrameを全て特定の型としてパースする

要旨 import pandas as pd df = pd.DataFrame(some_list).astype(int) 詳細 DataFrame.astype(type) で、好みの型に変換できる。 ただし、 timezone-naive な型(タイムゾーンが付加されていない)を timezone-aware な型(タイムゾーンが付加されている)へ…

【ActiveRecord】ActiveModel::Model#allはやめておいた方が良い

要旨 find_each を使おう。 batch_size を指定すれば、一度に取得するレコード数を制限できる。 Model.find_each(batch_size: 100) do |model| ~~~ end 詳細 #all は、一度に全てのレコードを取得するので、まずデータベースに負荷がかかってしまう。さらに…

【Python】Pythonの三項演算子は独特

概要 # Python variable = 'Trueの時の値' if condition else 'Falseの時の値' 詳細 RubyやJavaScriptだとこんな感じ。 # Ruby or JavaScript variable = condition ? 'Trueの時の値' : 'Falseの時の値' ちなみに、三項演算子は英語で Ternary operator とい…

【Nuxt】asyncDataとfetchの用途の違い

背景 asyncDataもfetchも、どちらも非同期にデータを外部サーバへ取りに行く処理を定義するための関数である。どちらも似たような処理ができるものの、2つ用意されているという事はそれぞれに異なる用途がある事を示す。 ここではCSR (Client-Side Rendering…

【Shell】変数が未定義の時、エラーを出して止めるには ${VAR_NAME?}

要旨 $ export SOOME_VALUE=abcde $ echo ${SOME_VALUE?} sh: SOME_VALUE: parameter null or not set SOME_VALUE を定義したつもりで、できていないときに気付くことができる。 詳細 変数名の後ろに ? を付けると、その変数が定義されていないときにエラー…

【JavaScript】オブジェクト同士の比較:{} === {} は false

概要 {} === {} // => false 詳細 JavaScriptでの比較は、落とし穴が多い。詳しくは参考に挙げたページを見てもらえるとわかるが、 +0 === -0 が false になったりと良く知っていないとハマりがちである。 ではどうやって object 同士を比較すれば良いか、と…

【Ruby】Object#tapのすすめ

要旨 user_id = params[:user_id].tap { |uid| p User.find(uid).name } contents = Content.made_by(user_id) ... 詳細 Object#tap は self 自身を返す。なので、ちょっと中身を覗いたりするのに便利。上記の例で言えば、 uid に self すなわち params[:use…

【Ruby】文字列をメソッド名として実行する

要旨 method('some_method').call(arg1, arg2) 詳細 methodに String, Symbol を渡すと、 Method オブジェクトが返る。これに対して Method#call を呼ぶと、そのメソッドを実際に呼ぶ事ができる。 呼びたいメソッドに引数を渡したい場合、 call(arg1, arg2, …

【Ruby】Nillableな変数を引数として受け得るなら、Object#to_sしておけば色々と便利

概要 変数に対してメソッドチェインの途中で String#capitalize 等の String クラスのメソッドが挟まる場合、変数の初期段階で Object#to_s を読んでおくと不用意に Nil#some_method が出てしまうことを回避できる。 詳細 Object#to_s は、 Object が nil の…

【Ruby】Array#filter と Array#map を組み合わせて使うなら、 Array#filter_map というメソッドがあるよ

要旨 「3の倍数と3のつく数字」だけを String に変換した Array<String> を得る方法: (1..100).filter_map { |i| i.to_s if i % 3 == 0 || i.to_s.include?('3') }.to_a # => ["3", "6", "9", "12", "13", "15", "18", # "21", "23", "24", "27", "30", "31", "32",</string>…

【Ruby, Active Support】Array#include?(Object) もあるが、 Object#in?(Array) もある

概要 %w[a b c d e].include?('c') == 'c'.in?(%w[a b c d e]) 詳細 Array#include? Ruby 標準のメソッド。一方、 Object#in? は Active Supportを require すると使えるようになるメソッド。 ただし、 Active Support全体を require する必要はなく、下記の…

【Ruby】Ruby 3.2でWebAssemblyのサポートが始まる

www.ruby-lang.org ブラウザでRubyが動く時代が来る…のか?

【Shell】tail -f で随時書き込まれる内容を表示できるが、less +F でもできる

要旨 less +F も tail -f も、基本的な動作は同じ。 その動作は、監視対象のファイルに追加書き込みがあった場合、その内容を随時標準出力(ほとんどの場合画面上)に出力し続けるというもの。 ただし、 less +F は通常の less と変わらない動作モードへ変更…

【Shell】一気に深いパスのディレクトリを掘るには、mkdir -p

要旨 下記のように -p オプションを付けると、その深さまで必要に応じてディレクトリを掘ってくれる。 mkdir -p /path/to/the/directory/you/want なお、既に存在する場合も終了コードが0となり、正常終了扱いになる。 詳細 これ以上書くことはあまりない。R…

【GTM】Google Tag Managerは、任意のHTMLを配信できる

Google Tag Manager (GTM) は、Google Analytics のトラッキングコードを配信する目的で、良く使用される事が多い。しかし、その他の使い方として、任意のHTMLを配信することもできる。もちろん、<script></script>で囲めばJavaScript (JS)を配信することもできる。 やり方は…

【Ruby】Hash#fetchがデフォルト値を取る時、ブロックを与える方がパフォーマンスが良い

要旨 ブロックを使うのがおすすめ。 詳細 Hash#fetch は、Hashに指定したKeyが存在する際に、そのValueを返すメソッドである。 このメソッドは、指定したKeyが存在しなかった際、デフォルト値を返すことができる。その際、デフォルト値の与え方は下記の2通り…

【PC全般】Tabキーを押すと、テキストボックスを移動できる

意外と知られていない事があるので紹介する。 Webブラウザ等で入力する時テキストボックスだが、次の入力ボックスへ移動する際、マウスでクリックしても良いがTabキーを押すと素早く移動できるので便利。

【JavaScript】debuggerを入れておけば、そこで止まる

debugger を入れておけば、そこで動作が止まってデバッガが開く。便利。

【JavaScript】console.log({ somevalue }) とすると変数名と値を同時に出力できて便利

要旨 console.log({ somevalue }) としてコードに埋め込んでおくと、「somevalue: (somevalueの値)」とコンソールに表示されるので、デバッグに便利。 console.log({ somevalue })とした例 詳細 ES2015で入った「略記プロパティ名」という記法を使うと、 obj…

【mac】Ctrl + A, Ctrl + E で文頭文末へ移動

mac

emacsのキーバインドと同じ。Ctrl + Aで文頭へ、 Ctrl + Eで文末へ移動する。未対応のアプリもある。

【ActiveRecord/Rails】レコード数を数える時はcountを使うと確実、size, lengthとの違い

要旨 ActiveRecord::Relation#count を使っておくのが良い。 size や length もあるが、キャッシュが効いて期待する値を返さない場合があるので、よほどそのような状況ではない限り、使用を避けるのが無難であろう。 やってはいけないのは、ActiveRecord::Re…

【mac】「Cmd + ,」でたいていのアプリケーションは設定画面を開ける

mac

Cmd + , を入力すると、設定画面が用意されていないアプリを除いて、結構な数のアプリが設定画面を開いてくれる。

【mac】pbpasteを使うと、クリップボードの中身を扱える

mac

macには、pbpasteというコマンドが用意されている。これを使うと、下記のようなサンプルを実行する事ができる。 `pbpaste`.split("\n").map {|entry| Integer(entry) }.sum これは、クリップボードにある値を改行区切りで分割し、数値に変換し、合計値を出す…

【mac】pbcopyへパイプで渡すと、クリップボードにコピーする

mac

pwd | pbcopy のように呼ぶと、実行結果をクリップボードにコピーできる。

【Shell】timeを使うとコマンドの実行時間を計測できる

$ time pwd /tmp real 0m0.001s user 0m0.000s sys 0m0.000s このように、かかった時間が表示される。3つの行はそれぞれ、次の通りの意味を持つ。 real: 起動から終了までに経過した実時間 (real time) (iii) システム CPU 時間 times(2) が返す struct tms …

【Docker】FROMより前の段階でARGを使う

要旨 Dockerfile には、FROMより前の段階でARGを置くことができる FROMより後の段階でそのビルド引数を使用したければ、再度宣言が必要 詳細 下記記事より。 blog.dogwood008.com github.com # Dockerfile # 使用するDebianのバージョンを固定 ARG DEBIAN_CO…

【Rails, Docker】最新安定版の Rails 7.0.3, Ruby3.1.2 を Docker 環境で動かす

github.com ここに置いた。これから数日掛けて、使った知識をまとめていくことにする。 使った知識: blog.dogwood008.com

【Docker Compose】docker-compose.yml はもう古い、今は compose.yaml

要旨 推奨されるのは、compose.yaml である。 ただし、後方互換のために docker-compose.ya?ml もサポートされる実装であるべき(SHOULD)と公式ドキュメントに記載がある。 なお、 compose.yml も使用できる。 詳細 まず、下記は Docker 公式による説明である…