2021-01-01から1年間の記事一覧
ドメイン駆動設計(DDD)では、Springのようにドメインをほかの関心事(データソース、プレゼンテーション)から分離したフレームワークが用いられることが多です。一方で、Ruby on Railsは、ドメインとデータソース層が密に結合しており、DDDには向いていな…
Windows11をクリーンインストールしました。 WSL上で動くRubyMineのセットアップがとても簡単になっていたので紹介することにしました。 ほかの処理系のインストールを除けば、ほかのJetBrains系のIDEも同じ手順でできると思います。 なぜWSLでRubyMineを動…
解決したかった問題 ActionViewで、条件付きで有効になるクラスを作ろうとすると、ややこしくなることがある。 buttonは常につけて、特定のコントローラーで処理しているときだけbutton-activeをつけたいとき、erbで頑張ると下記のようになる。 <a class="button<%= " button-active" if controller_name=="targets" %>"> # control</a>…
Tom Demarco & Timothy ListerのPeoplewareを読んだ。いまいち理解できていない部分が多いので、ここに書いて整理する。 要旨 ソフトウェア開発における課題の大半は技術的な問題ではなく社会学的なものである、という主張を核に、ソフトウェア開発のマネジ…
環境 Windowsで立てたサーバーに、ローカルネットワーク内の統合版のマイクラからアクセスして遊べるようにしたい。 サーバー: 統合版サーバー (マシン: Windows 10 自作PC) クライアント: マインクラフト統合版(マシン: Windows 10, Android, iPad, Swit…
YouTubeからデータを取得しまくってアプリケーションを作ろうと思っていたが、一日あたりにリクエストできる量が限られていて結構厳しくて頓挫した。 アプリケーションを作る前にやりたいことができるのか確かめるためにスクリプトを書いたので、供養のため…
System Design Primer https://github.com/donnemartin/system-design-primer システムをスケールさせるためのアーキテクチャ構成の仕方を学べる資料集。 主に、パフォーマンスの要求に応えられるようにするにはインフラをどのように組み合わせればよいのか…
テスト駆動開発のポイントとは? システム開発は、作ろうとしているものへの理解を深めながら進行する システムとその用途を学ぶためには、作ってリリースしてフィードバックを得るのが良い 実装する前にテストをすることで設計する。何をさせたいかが明確に…
クリーンコードのメモ。 良い名前付けのためのルール 意図を明確にする なぜそれが存在するか、何をするか、どのように利用するか、がわかる名前にする コードの外側にあるコンテキストがわかるようにする 偽情報を避ける 意図した意味とは違う用途で使われ…
クリーンコードに「創発」という気になる名前の章があったので読んでみた。ざっくりいうと、とりあえず動くものを作ってから後から設計するという考え方で、私も最近はこういった感じで開発している。 創発的設計 よい設計を最初に考えるのではなく、コード…
ネストの深いrspec BDDは、下記のように書くので、GivenとWhenをcontextで書くとネストが深くなることがある。 Given:最初の文脈(前提)があって、 When:イベントが発生した場合、 then:なんらかのアウトプットを保証する。 例えば、fizz_buzz問題でfizz…
BDDとは何か 振る舞い駆動開発。 ソフトウェアの振る舞い検証するテストをまず記述して、次にそのテストをパスするソフトウェアを記述するという開発の方法。 BDDとTDD TDDでは、何をテストして、何をテストしないべきか、という問題に当たることがある。 BD…
やりたいこと 下記のように、rubyソースコード、specファイル、Guardfileが全て一つのディレクトリにフラットに配置されている環境で、guardによる自動テスト実行を行いたい。 root_dir ├── Guardfile ├── gilded_rose.rb └── gilded_rose_spec.rb 設定方法 …
使いどころ オブジェクトに対する操作の間に何らかの操作を挟み込みたいとき 間に挟み込まれている処理に関する詳細を、対象のオブジェクトとそれを操作するオブジェクト隠蔽したいとき 構造 商品を表すItemを考える。ItemImplはItemそのものを表すクラスで…
やりたいこと 言語設定が英語の人には英語、日本語の人には日本語を表示したい HTTPのAccept-Languageヘッダに応じて切り替えたい 手順 Rack::Localeミドルウェアを導入する ローカライズする Rack::Localeミドルウェアを使うと、Accept-Languageヘッダに応…
When we use secret values, we can utilize credentials. Explained at below page. Securing Rails Applications — Ruby on Rails Guides For example, to use secret information for omniauth configuration, we can read from credentials. config.omni…
We can add placeholder to contenteditable element. HTML [contenteditable="true"]:empty::before { content: attr(data-placeholder); color: #ccc; } CSS <p contenteditable="true" data-placeholder="Please input something."></p> And then we placeholder appers. Sample https://jsfiddle.net/ytnk531/tgLw1fv5/…
tribute.js is used to implement mention feature. GitHub - zurb/tribute: ES6 Native @mentions By the way, in Slack (and some chat applications) highlights inputted mentions as illustrated below. tribute.js can implement such decoration. I i…
sidekiq logger prints messages with occurrence time. This time is UTC. I wanted to use JST. After investigating the source code and github of sideq, I retired to do that. Because I realized sidekiq uses only UTC arbitrarily. In sidekiq log…
As you know break terminates loop. Below code execute the block only once. And return nil. [1, 2, 3].each { |n| break } # => nil break can have 1 argument. If the argument was given, the value will be used as the return value of evaluation…
We can authenticate an user with twitter. Set route as below. This activates callback url from twitter. devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } devise_scope :user do get 'sign_in', :to => 'd…
トランザクション中のrescueはロールバックを発生させない 動画による説明 www.youtube.com トランザクション中のrescue このようにすると、create!で発生した例外をキャッチして、exec_transactionの返り値としてfalseを返すことができます。 def exec_tran…
CLionでRubyをデバッグする CLionは、JetBrains製のC、C++用の高機能なIDEです。このIDE上でCRubyをデバッグモードで実行すると、解析や試行錯誤が捗ります。デバッグの様子は、下記のビデオを見てください。 youtu.be 設定方法 1. Rubyのソースコードをダウ…
ダウンロード編として、スクレイピングの方法を解説する記事を書く予定だったのですが、gemの公開をもって解説ということにします。 特にメンテしていく気は無いのですが、スクレイピングで色々とコツが必要だったので忘れないようにgemとして形にしました。…