コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

ルーチンワークの枠を外れると、それは回らなくなる

1日休み文脈の日記です。

1日1記事のここ2ヶ月

かれこれ初めて1年経過しましたが、4月に入ってから1週間ビハインドがザラになっています。奇跡の10連休でなんとか遅れを挽回しました。

本当は昨年の5/1から始めたので、そのときまでにはリアルタイム更新に戻したかったんですが、仕事やらなんやら諸々あってやっとGW最終日に戻せました。(また1周年を振り返る系の話は別途書きたいと思っています)

リアルタイム更新失速のふりかえり

1日1記事は「可能な限りその日に、ただし無理であれば過去日でちゃんと書く」というのが最近のコンセプトだったんですがそれが実現できなくなってました。主な原因としては3つあって

  1. 仕事時間が侵食しすぎてアウトプットの余裕が無くなった
  2. 仕事内容がブログに波及できるようなことが少なくなった(コード書きよりもMTGやらそういう系が増えた)
  3. ブログに切り出しにくいコンテキストの話が多かった

というところです。

主に1が結構響いてて、ルーチンワークとして活動している分には結構さらさら書けるのですが、いざ3日ぐらい間が空くとその穴を埋めるのが異常に大変になる。結構手元にWIPで書きかけの記事がいくつか残って、どこかのタイミングでわっと書くという生活が続いていきました。

ネクストアクション

一旦5/6でリアルタイム更新に戻ったので、ちょっとこれからはもうちょい書くジャンルや、内容も日々のシステム開発運用の経験則の文字起こしみたいのもしていき「日々何かしらアウトプットをする」ということに立ち返りたいと思います。もともとなんでもありのメモブログなのでそういう方向性も込みでやっていきたいと思います。

関連リンク

CSSの!importantはなるべく使わないためには

案外、これに関して言及しているところがないので書いてみる

CSSの!importantとは

CSSの反映されるものを決める 詳細度 という概念があるが、そこで決まる順番とは関係なく設定できる記述

cssは後勝ちなので、後の記述のほうが優先されるが、以下の例の場合はblueの記述のほうが優先される

.sample h1{
  color: blue!important;
}
 
.sample h1{
  color: orange;
}

使いたくなったらどうするか

MDNのドキュメントに記述があるのでそこを参考にすると良い

いくつかの経験則
・!important を考える前に、常に詳細度を使用する方法を探しましょう。
・ページ固有の CSS が外部の CSS (ブートストラップや正規化 CSS などの外部ライブラリなど) を上書きする場合のみ、 !important を使用しましょう。
・決してプラグインマッシュアップを書いている時に、 !important を使わないようにしましょう。
・決してサイト全体の CSS で !important を使わないようにしましょう。
- 詳細度 - CSS: カスケーディングスタイルシート | MDN

基本的には自身で管理できるCSSの範疇内では使わず、他の道を常に模索するべきという指針が述べられている

参考リンク

RCE(Remote Code Execution) をざっと調べる

意外と日本語情報がないので調べる

リモートコード実行とは

文字通り遠隔から任意のコード実行ができる脆弱性のことを指す。

起きると何が怖いか

  • リモートでコードが実行できるということは自由にセキュリティの穴を作ることができる
  • sshができるようにする 異なるところからファイルを転送する などのことができるようなる
  • 中のデータを抜き取ることはもちろん、踏み台とされて濡れ衣を着せるということもできる

事例

近年の例では以下のようなものがある

細工をしたリクエストパラメータを送ることにより意図せぬコードが実行されてしまうなどは一番怖い例かと思われる

参考リンク

Rails開発中にでfsevnetが増殖したときの応急処置

gemのバージョンがあげられないんです、とかそういうときの暫定対応。2日連続応急処置ネタ。

環境

$ ruby -v
ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-darwin18]
$ bin/rails --version
Rails 5.0.2
    listen (3.0.8)
      rb-fsevent (~> 0.9, >= 0.9.4)
      rb-inotify (~> 0.9, >= 0.9.7)

症状

bin/rails s をするとfseventのエラーがログに流れ始め、やがてプロセスがkillされずにマシンがハングアップする。

プロセスが増えるだけで、メモリやCPUが跳ね上がらないのでアクティビティモニタなどからだとそんなに増えた風には見えない

おそらくの原因

下記のIssueにある通り

The listen gem breaks my laptop · Issue #26158 · rails/rails

listenが噛み合わず起きる模様

暫定処置

config/enviroments/development.rb とかにある

  # Use an evented file watcher to asynchronously detect changes in source code,
  # routes, locales, etc. This feature depends on the listen gem.
  config.file_watcher = ActiveSupport::EventedFileUpdateChecker

となっているので

  # Use an evented file watcher to asynchronously detect changes in source code,
  # routes, locales, etc. This feature depends on the listen gem.
  # config.file_watcher = ActiveSupport::EventedFileUpdateChecker

コメントアウトすると一旦は回避できる。

Mac環境で開発するときに別プロセスが立ち上がるような処理をやると動かなくなるときがあるのでその応急処置のしかた

Macのローカルマシン開発ならでは、という感じのメモ。はよDocker化…

環境

$ ruby -v
ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-darwin18]
$ bin/rails --version
Rails 5.0.2

起きること

bin/rails s で立ち上げた場合に

objc[36474]: +[__NSPlaceholderDictionary initialize] may have been in progress in another thread when fork() was called.

という感じで怒られる。自分はFaradayで、とある人はsidekiqでなってたりするのでMacでメインプロセスとは別に動かす系のコードを書いているとなる模様。

暫定対応

以下の環境変数をセットすれば暫定対応としては動く

OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

関連リンク

RailsでIDを指定したリソースに対して、更に持つリソースを持つ情報を別コントローラーに割り当てるときのroutes.rbの書き方

あれ、どうやるんだっけ?というときのメモ

環境

$ bin/rails --version
Rails 5.2.2.1

例えばユーザID100が所持する本が欲しい場合、以下のURLが思いつく

https://example.com/users/100/books

みたいな場合

resources :users do
  get ":id/books" => "user/books#show",
end

のような書き方もできるが

resources :users do
  resources :books, only: [:index], module: 'users'
end

と書いたほうがスマートに表現できる実現できる。

参考リンク

UTF-8の令和に関して経済産業省からの周知情報がある

年号変わって一発目なのでトリビア

元ネタ

新元号名で使用する文字コードについて(周知)(平成31年4月5日経済産業省事務連絡)

合字は「U+32FF」

㍻とは連番ではない。(㍻はU+337B)

令の字は2種類存在するが「U+4EE4」

何故2つあるのか

理由に関しては丁寧に解説されているサイトがあるのでそちらをご参照のこと

Unicodeの基本から解説。新元号「令和」の「令」がUnicodeに2つある理由 – cod-log

参考リンク