@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

ActiveRecordからカラムの型情報を得る

次のスクリプトで、テーブル定義とActiveRecordクラスを用意します。 ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:") ActiveRecord::Schema.define do create_table :employees do |t| t.string :name t.integer :age …

ActiveRecordのcreated_at, updated_atの時刻を固定値にするモンキーパッチ

class ActiveRecord::Base def self.current_time_from_proper_timezone Time.local(2008, 9, 1, 10, 5, 0) end end https://github.com/rails/rails/blob/817148a7472413b31b3334c20fc08c6da5ffc68a/activerecord/lib/active_record/timestamp.rb#L77-L79 …

ActiveRecordインスタンスのInteger型カラムのデフォルト値のbefore_type_castは文字列

require "active_record" ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:") ActiveRecord::Schema.define { create_table(:users) { _1.integer :age, default: 20 } } class User < ActiveRecord::Base; end u = User.n…

RDBを使わずにActiveRecordのインスタンスをつくる

ActiveRecordのソースコードを読みたいです。 プログラムのソースコードを読むときは、実際に動かしてみて、動きを追っていくと理解が早いです。 ActiveRecordはデータベースのスキーマ情報を元にインスタンスをつくります。 単にPost.newを実行しても次のよ…

bootstrap_views_generatorをつかう

Railsのジェネレーターはscaffoldテンプレートをlib/templatesに作成したテンプレートファイルで上書きすることができます。 ここにBootstrapのクラスを追加したテンプレートファイルを置けば、scaffoldである程度見た目が整った画面を作れます。 github.com…

-Jをつけて作成したRuby on Rails 6プロジェクトにJavaScriptを導入する

簡単なアプリケーションを作るのにWebpacker使いたくないと思いました。 rails newコマンドに、雑に-Jオプションをつけました。 すべてのJavaScript機能をOFFにしてRuby on Railsアプリケーションを初期化しまいました。 しかしscaffoldで作成する削除機能で…

Ruby on Rails 6にBootstrap 5を導入する

Before Bootstrap5適用前のテーブル After Bootstrap5を適用したテーブル コミット feature: Add Bootsrap style · ledsun/pc_management_desk@e314d8a · GitHub 全画面に手を入れないといけないのは面倒でした。 感想 いまのところ削除機能が動いていないこ…

Ruby on Railsでサクサクとアプリケーションのプロトタイプを作る練習

お題を PC管理台帳とします。 ごくごく簡単なリリースが一つだけの一覧画面を作ろうと思います。 プロジェクトの初期化 bundle init Gemfileからrailsのコメントアウトを外します。 bundle bundlerってnpx的なテンポラリーな実行コマンドってないんでしたっ…

FactoryBotのふたつのストラテジーをお絵かき

読んだソースコードを図解する練習です。

CVE-2015-9284 と OmniAuth 2.0.0 と Devise 4.8.0 の歩み

2019/04/26 OmniAuthに脆弱性が発見されます。 NVD - CVE-2015-9284 2020/12/11 上記の脆弱性に対応した、OmniAuth 2.0.0 RC1がリリースされます。 github.com 2020/12/12 OmniAuth 2.0.0 RC1がリリースへのフィードバックが求められます。 github.com 2021/…

ActiveRecordのソースコードを読む

Ruby on Railsを使ったアプリケーション開発で、DBにMySQLを使いカラムの型定義がIntegerの時にデフォルト値が文字列で設定される現象を観測しました。 デフォルト値だけ見て型をみないことに疑問を感じました。 そこでActiveRecordのソースコードを読みまし…

FactoryBotのソースコードを読んだ

背景 最近、コードリーディングが話題になりました。 note.com blog.riywo.com ソースコードが読めることは武器になるようです。というわけでソースコードを読みます。 お題 MySQLのカラムの型によって、FactoryBot.buildでSQLが発行されるときとされないと…

RubyMineからappディレクトリが消えたときに

現象 .gitignoneに.ideaディレクトリを追加せずにgitブランチをガチャガチャやっていると、.ideaディレクトリの中のファイルが消えることがあります。 このとき次のようにProject tool windowからファイルは見えるがディレクトリが見えない状態になります。 …

TextAEのリレーション描画を独自SVGに置き換えた

お仕事の話です。 長年GitHub - pubannotation/textaeの改修に携わっています。 リレーション(下の図の矢印)の描画にjsPlumb Toolkit - build connectivity quicklyというコネクション描画用のライブラリを使っていました。 汎用ライブラリですので、少し…

Ruby3.0でunicornをunicorn_railsコマンドから実行するとセグフォする

rails newだけしたアプリケーションで次の感じでセグメンテーション違反が発生します。 ~ bundle exec unicorn_rails I, [2021-03-30T14:17:52.498866 #98882] INFO -- : listening on addr=0.0.0.0:8080 fd=13 I, [2021-03-30T14:17:52.498987 #98882] INFO…

bundle outdatedに35分掛かる

次のリポジトリで、bundle outdatedを実行すると35分掛かりました。 github.com ~ time bundle outdated Fetching https://github.com/plataformatec/devise Fetching https://github.com/jdkim/stardog-rb.git Fetching gem metadata from https://rubygems…

Ruby 2.5とRails3.2のときrake db:createでString can't be coerced into Integerが発生する

現象 ~ bundle exec rake db:create Deprecation warning: Expected string default value for '--quiet'; got false (boolean). This will be rejected in the future unless you explicitly pass the options `check_default_type: false` or call `allow_…

OSSライブラリからの学びかた npmからJavaScriptのライブラリを探してソースコードを見つける編

はじまり blog.magnolia.tech CPANに上がってるモジュール、一つ一つの粒度が小さいから読みやすいし、ドキュメントもテストもしっかり揃ってて挙動を把握しやすくて、自分にとっては最高の教科書だった OSSで公開されているソースコードは、最高の教科書で…

2021年の目標設定

2021年の目標 テーマはプログラミング速度が速い分野を増やすです。 2020年は、特定のプロジェクトでのプログラミング速度の向上に成功しました。 とはいえ、今年のオープンソース活動振り返り @ 2020 | Web Scratch と見比べると大分遅く感じます。 また、2…

2020年ブックマークランキングベスト3(累計350ブックマーク)

# タイトル 1位 プログラマにできるとよさそうなこと - @ledsun blog 2位 たのしいプログラミング練習法 - @ledsun blog 3位 チーム開発で気をつけていること - @ledsun blog generated by 年間ブックマークランキングジェネレーター

またまた Gitのdiffを振り返る

ふたたび Gitのdiffを振り返る - @ledsun blog で日単位で集計しました。 週、月、年単位の集計結果も見ていきましょう。 週 gnuplot> set xdata time gnuplot> set timefmt "%Y-%m-%d_%H:%M:%S" gnuplot> plot 'all_log_week.dat' using 1:2 w i title 'ins…

ふたたび Gitのdiffを振り返る

続々 Gitのdiffを振り返る - @ledsun blogでコミット単位でのファイルの変更行数の遷移をふりかえりました。 コミット単位では列間が詰まりすぎてグラフが見にくいです。 特に、Gitのコミット数を振り返る - @ledsun blog で見たように、2020年9月以降コミッ…

続々 Gitのdiffを振り返る

続 Gitのdiffを振り返る - @ledsun blog で1000行以上の変更があるコミットはツールによるフォーマット変更であることがわかりました。 また、日付でまとめてしまうと一日の変更行数が2000を超えます。 これはgit rev-listのbeforeやafterの挙動によるもので…

2020年に書いたQiitaの記事

Search result of “user:ledsun created:>2020-01-01” - Qiita 意外とたくさん書いていました。10記事書いて19LGTM。とても平和です。 2020年に書いたQiitaの記事

2020年に作ったGithubリポジトリ

2020年に作ったGitHubリポジトリ - pockestrapにインスパイアされました。 次の条件でGithubを検索します。 Search · is:public user:ledsun created:2020 · GitHub 2020年にGithubに作ったリポジトリ 大体どれも作りかけです。 GitHub - ledsun/svg-playgro…

2020年のプルリクエストをふりかえる

2020年のプルリクエストを振り返る - kakakakakku blogを参考にしました。 あまりにも少なかったのでissueも入れました。 次の条件でGithubを検索します。 is:public author:ledsun created:2020 Search · is:public author:ledsun created:2020 · GitHub 20…

rbenvでRuby 3.0を使う

Homebrewをインストールし直す - @ledsun blogでrbenvをgitから入れました。 git pullします。 ~ cd .rbenv/ ~ git pull --ff-only Already up to date. んー、rbenv install --list-allしても3.0.0が出てきません。 cd ~/.rbenv/plugins/ruby-build ~ git p…

続 Gitのdiffを振り返る

Gitのdiffを振り返る - @ledsun blog でGitの記録から、約2年間の毎日のファイルの変更行数を見ました。 1日に4000行の人力では不可能に思える変更が見つかりました。 今度は巨大な変更を含むコミットを探してみましょう。 次のRubyスクリプトを使います。 r…

Gitのdiffを振り返る

Gitのコミット数を振り返る - @ledsun blogで、Gitのコミット数をふりかえりました。 今年はコミットの粒度を変えたためコミット数が増えています。 その結果、作業効率は上がったのでしょうか?今度はGitのdiffをふりかえってみます。 日付単位でgit diffの…

Gitのコミット数を振り返る

次のRubyスクリプトを使って、あるリポジトリの2020年のGitコミット数を月単位で集計します。 require 'date' 1.upto(12) do |i| start_date = Date.new(2020, i, 1) end_date = (start_date >> 1) - 1 commits = `git log --oneline --since #{start_date} …