RailsのCSRF保護について

【結論】 ・CSRFとは、WEBアプリケーションの投稿機能などを利用して悪意のあるコードを仕込むことで、認証済みのユーザーに意図しないコマンドを実行させる攻撃手法 ・対策は、GETとPOSTを適切に使い分け(RESTful)、GET以外のリクエストにセキュリティト…

RSpecでファイルのダウンロードをテストする方法

【結論】 ・リンクをクリックしてCSVファイルをダウンロードする機能の場合、response_headersでレスポンスヘッダの情報を見てテストが出来る ・response_headersはrack_testでは利用できるが、他のドライバ(headless chromeなど)ではresponse_headersが使…

ヘッドレスドライバを使わないとCIだけJavaScriptのテストが通らない(RSpec)

【結論】 ・JavaScriptの操作を伴うテストを実行する場合、ブラウザシュミレータ(ドライバ)を使う必要がある ・デフォルトのドライバではテスト実行中にブラウザのウィンドウが開くが、これはCircleCIなどの継続的インテグレーション環境では実行できない …

【AtCoder:15回目】AtCoder Beginner Contest 138の振り返り(Ruby)

【目次】 振り返り A - Red or Not B - Resistors in Parallel C - Alchemist D - Ki 【本題】 振り返り 今回は 8/18(日)に開催されたAtCoder Beginner Contest 138の振り返りを行います。 AtCoder Beginner Contest 138 - AtCoder 今回は3問回答出来ました…

AtCoder Grand Contest 036と037のA問題を解く

【目次】 AtCoder Grand Contest 036 A - Triangle AtCoder Grand Contest 037 A - Dividing a String 【本題】 AtCoder Grand Contest 036 A - Triangle 問題文 整数 S が与えられます。 以下の条件をすべて満たす 6 つの整数 X 1 , Y 1 , X 2 , Y 2 , X 3 …

Capybaraでiframe内の要素を取得/操作する方法(Rails)

【結論】 ・iframeタグ配下の要素は、そのままでは直接操作することが出来ない ・iframe内の要素を取得/操作するにはwithin_frameで、iframeを明示的に呼び出す必要がある ・within_frameのブロック内であれば、通常のCapybaraの処理でiframe内の要素を取得/…

CKEditorのダイアログ中のテキストをJSで置換する方法(試行錯誤の記録)

【結論】 ・CKEditorのダイアログ中のテキストは、idが固定では無く、classは別のダイアログと共通化されているので、それらを使って文字の置換が困難 ・ダイアログ(JavaScript)の生成にフックするdialogDefinition イベントにコールバックを設定し動的に…

「A server is already running...Check...server.pid.」「Address already in use」でRailsのサーバーが起動できなかった時の対処法

【結論】 ・Railsのサーバーが正常終了しなかった場合、エラーで以降サーバーが正常に起動しなくなる場合がある ・A server is already running...Check.../tmp/pids/server.pid.が表示された場合、ターミナルを再起動するか、server.pidを削除する ・Addres…

2038年問題とは

【結論】 ・「2038年問題」とは、2038年1月19日3時14分7秒(UTC)を過ぎると、コンピュータが誤作動する可能性があるとされている問題 ・コンピュータの時刻表現で広く使用されている「UNIX時間」は、1970年1月1日0時0分0秒からの経過秒数で時間を計測してい…

【AtCoder:14回目】AtCoder Beginner Contest 137の振り返り(Ruby)

【目次】 振り返り A - +-x B - One Clue C - Green Bin 【本題】 振り返り 今回は 8/10(土)に開催されたAtCoder Beginner Contest 137の振り返りを行います。 AtCoder Beginner Contest 137 - AtCoder 今回は3問回答出来ました レーティング微増 A - +-x …

【AtCoder:13回目】AtCoder Beginner Contest 136の振り返り(Ruby)

【目次】 振り返り A - Transfer B - Uneven Numbers C - Build Stairs 【本題】 振り返り 今回は 8/4(日)に開催されたAtCoder Beginner Contest 136の振り返りを行います。 AtCoder Beginner Contest 136 - AtCoder 今回は2問しか回答できませんでした・・…

target="_new"だと一回しか別タブで開かない問題(target="_blank"を使おう)

【結論】 ・HTMLのリンクに対して、target="_new"を設定した場合、リンクを別タブで開いてくれる ・但し開いた別タブ内で、再度target="_new"を設定しているリンクは別タブで開かない ・何度も別タブで開く様にするには、target="_blank"を設定する 【目次】…

CKEditorのテンプレート機能で、ブロック要素に改行(br)が勝手に入るのを防ぐ方法

【結論】 ・CKEditorのテンプレート機能でHTMLをエディタ上に挿入する際、要素が含めれていないブロック要素内に、<br>タグが勝手に挿入されてしまう問題がある。 ・対策としては、挿入するHTMLに対して、class(またはid)を設定し、そのclassのCSSに<br>タグをdisp…

link_toのちょっと使えるオプション(Rails)

【結論】 ・data-confirmを指定すると、リンクにアクセスする前に、確認用のポップアップを表示させる事が出来る ・target: :_blankを指定すると、リンクを別タブで開く様になる ・link_to_unless_currentメソッドを利用すると、現在のページのリンクのパス…

【AtCoder:12回目】AtCoder Beginner Contest 135の振り返り(Ruby)

【目次】 振り返り A - Harmony B - 0 or 1 Swap 【本題】 振り返り 今回は 7/28(土)に開催されたAtCoder Beginner Contest 135の振り返りを行います。 AtCoder Beginner Contest 135 - AtCoder 今回1問しか回答できませんでした・・・まるで成長していない…

Observerパターンについて(デザインパターン)

【結論】 ・Observerパターンとは、デザインパターンの一つで、状態変化に応じた処理を記述する時に有効な実装手法 ・ObserverがSubjectから状態変化の通知を受け取り、それをトリガーに処理を実行する ・クラス間の依存度を下げるメリットがあるが、連鎖的…

CKEditor4で自作テンプレートを作成する方法

【結論】 ・CKEditorでは、あらかじめ用意された雛形を元に文章を作成するテンプレート機能が実装されている ・テンプレートは標準のものの他、自身で自作することも可能 ・自作する場合は、HTML形式で記述する 【目次】 CKEditorのテンプレート機能について…

「.png」「.jpg」などの拡張子が付くパスだと、「404」のエラーハンドリングが機能せず「Missing template」になる問題(Rails)

【結論】 ・存在しないパスにアクセスした場合、エラーハンドリング で指定した「404」のビューファイルに飛ぶ様に設定しているにも関わらず、「.png」や「.jpg」といった拡張子で終わるパスにアクセスした場合、「Missing template」になることがある。 ・…

【AtCoder:11回目】AtCoder Beginner Contest 134の振り返り(Ruby)

【目次】 振り返り A - Dodecagon B - Golden Apple C - Exception Handling 【本題】 振り返り 今回は 7/21(土)に開催されたAtCoder Beginner Contest 134の振り返りを行います。 2週間ぶりのAtCoderです。 AtCoder Beginner Contest 134 - AtCoder 今回は…

ページ遷移してもフォームの入力情報を保持する「Garlic.js」

【結論】 ・フォームに途中まで入力を行っていても、ブラウザを閉じたりページ遷移してしまうと、入力情報が消えてしまい、再度入力する手間が発生してしまう ・「Garlic.js」を導入すると、フォームに入力途中でページ遷移したとしても、入力情報が保持され…

CKEditorの編集領域でpタグにmarginが設定されてしまうのを回避する方法

【結論】 ・デCKEditorでは、デフォルトの書式で入力した文章はpタグで出力されるが、ブラウザCSSによってmarginが設定されてしまい、意図せぬ空白が生まれてしまう ・divタグであれば、ブラウザCSSによる影響を受けないので、書式を「標準(div)」にすれば、…

デベロッパーツールで確認出来るCSSの「user agent stylesheet」について

【結論】 ・「user agent stylesheet」とは、ブラウザ毎に定義されているデフォルトのCSS ・GoogleChromeのデベロッパーツールで確認する事が可能 ・リセットCSSを使っても消えない場合があり、その時はスタイルを上書きして対処する 【目次】 user agent st…

CKeditor4の機能拡張方法(ドラック&ドロップ・動画埋め込み・カスタムスタイル)

【結論】 ・uploadfileを導入すれば、ドラック&ドロップでアップロードも可能になる。 ・embedを導入すれば、YouTubeなどの動画メディアを埋め込める。autoembedを導入すれば、リンクを貼り付けるだけで自動で埋め込める。 ・画像を均等に横並びさせるなど…

「permutation」「combination」メソッドによる順列/組み合わせの数え上げ

【結論】 ・permutation メソッドは、配列から引数n個の要素を選んだときの順列を数え上げる。 ・combinationメソッドは、配列から引数n個の要素を選んだときの組合せを数え上げる。 ・要素の重複を許可する場合はrepeated_combination メソッド(repeated_p…

【AtCoder:10回目】AtCoder Beginner Contest 133の振り返り(Ruby)

【目次】 振り返り A - T or T B - Good Distance C - Remainder Minimization 2019 【本題】 振り返り 今回は 7/7(日)に開催されたAtCoder Beginner Contest 133の振り返りを行います。 AtCoder Beginner Contest 133 - AtCoder 今回は1問しか回答できませ…

default_scopeは悪だとRuboCopに怒られたので理由を探る(Rails)

【結論】 ・あるモデル全体にスコープを適用したい時、default_scopeを利用するとデフォルトで設定が出来る。 ・但し、既定のスコープを上書きすることはできず、モデルの初期化に影響することから、使用を推奨しない意見がある。 ・反対意見も存在する為、…

【AtCoder:9回目】AtCoder Beginner Contest 132の振り返り(Ruby)

【目次】 A - Fifty-Fifty B - Ordinary Number C - Divide the Problems 【本題】 今回は 6/29(土)に開催されたAtCoder Beginner Contest 132の振り返りを行います。 AtCoder Beginner Contest 132 - AtCoder 今回は3問まで解けました。 めちゃくちゃトン…

UnicodeのBOM(バイトオーダーマーク)について

【結論】 ・BOM(バイトオーダーマーク)とは、Unicodeで符号化したテキストの先頭に付与される数バイトのデータのこと ・テキストファイルを開く際に、プログラム側にUnicodeである事を認識させて、最適な設定で開かせることが出来る(ExcelなどでUTF-8のテ…

【AtCoder:8回目】AtCoder Beginner Contest 131の振り返り(Ruby)

【目次】 振り返り A - Security B - Bite Eating C - Anti-Division 【本題】 振り返り 今回は 6/16(日)に開催されたAtCoder Beginner Contest 131の振り返りを行います。 AtCoder Beginner Contest 131 - AtCoder 今回も2問までです。 3問目が解けそうに…

インフラ触るときに欠かせない「tmux」について

【結論】 ・「tmux」とは、端末多重化ソフトウェアと呼ばれるもので、1つのターミナル上で複数のターミナルを立ち上げて同時並行で実行できる ・リモートサーバーでtmuxを実行しておくと、セッションが切れたりインターネット接続が途切れても、すぐに作業復…