コード日進月歩

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

Chromeの翻訳しますか?をやんわり避ける方法

特定の言語ばかり使っていると、Chromeが気を利かせて「翻訳しますか?」と言って来てしまうのでそれを避けるための話

挙動

漢字だらけのサイトだと以下のようになる。

f:id:shinkufencer:20180628001254p:plain

対策

その1 htmlタグにてlangを指定する

<html lang="ja">

見てのとおりで、Japaneseであることを主張する感じ。

その2 content-language を指定する

上記を設定した場合でもダメなパターンがあるようで、その場合は下記を指定するとよい様子

<meta http-equiv="content-language" content="ja">

その3 「Googleよ、翻訳しないでくれ」というタグを入れる

Googleに翻訳してほしくないということを伝えるメタタグを入れる。

<meta name="google" content="notranslate" />

余談

検証にこのページをおいてみたが、lang="ja" をしたらでなくなったので判定基準はそんなに単純ではない様子

関連リンク

HTMLメールでエスケープに使われる &amp; の出典元を軽く調べてみた

AMPっていうとGoogleが提唱する⚡のほうがひっかりやすくなっててググラビリティがすごい低くなっていたので軽く調べてみたメモ

&amp の出元

アンパサンドのエスケープようの記述方法ではあるのですが、その流れを調べた。

おそらく一番最初の出元はXML

アンパサンド文字(&)と左山括弧(<)は、マークアップ区切り子として使われる場合、あるいはコメント、処理命令、CDATAセクションの中に現れる場合を除き、直接現れてはならない(must not)。もしそれらの文字を他の場所で使わなければならない場合は、数値による文字参照を使うか、それぞれ文字列"&amp;"と"&lt;"を使うかしてエスケープしなければならない(must)。右山括弧(>)は、通常はそうする必要は無いが、文字列"&gt;"で表しても良い。但し、文字列"]]>"がCDATAセクションの終わりを意味する為に現れたのでなければ、互換性の為に、その文字列の中に現れる右山括弧を"&gt;"か文字参照を使ってエスケープしなければならない(must)。

Extensible Markup Language (XML) 1.0 (第五版)

そしてその流れを汲む、XHMTLの仕様

属性値にアンパサンドが含まれているとき、アンパサンドはキャラクタ実体参照(例. "&amp;")として表記しなければならない。たとえば、a 要素の href 属性が、パラメータをとるCGIスクリプトを参照しているときには、http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user ではなく http://my.site.dom/cgi-bin/myscript.pl?class=guest&\;name=user と表記しなければならない。

XHTML 1.0: 拡張可能ハイパーテキストマークアップ言語

で、最終的にHTMLメールのスタンダードなヘッダがXHTMLなので使われるようになるという…

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

参考

DBに入れる系の時間比較のときは .to_s(:db)だとUTCになり懸念点が減る

表題で全てを表現してしまっているシリーズ。 to_s(:db) とすると UTC に変換される

環境

rails (5.2.0)

実演

RailsアプリケーションはJST

Rails.application.config.time_zone
=> "Tokyo"
target_time = Time.zone.now
# => Mon, 25 Jun 2018 15:31:29 JST +09:00
target_time.to_s
# => "2018-06-25 15:31:29 +0900"
target_time.to_s(:db)
# => "2018-06-25 06:31:29"

ちゃんと書き換わってくれる。

便利ポイント

  • (DBの設定がUTCであれば)DBに入る値と同義になるので楽
  • 比較する時に小数点以下の情報がなくなるので秒数レベルのまでの一致確認で問題なければ楽

参考リンク

二重波括弧で変数展開を表現する記法をmustacheと言ったりする

トリビア的なメモで裏付けゼロなので本当の雑記。

背景

ansibleのjinja2テンプレートの変数展開に {{ 変数名 }} というような記法があるのだが、これの名前があるということを聞いて調べた

調べた結果

{{ mustache }}

ムスタッシュとかマスタッシュとか呼ばれるもので、ひげのをモチーフにしているらしい。

どうやらJinja2のそのものとは違うようだが、似た源流は汲んでいる様子。

関連リンク

YAMLの記号の意味がググりにくいので調べやすい記事を書いた

Qiitaに書いたよシリーズ。

qiita.com

先日以下の記事を書いて

Ruby2.5時点のYAML標準ライブラリはYAML1.1 - コード日進月歩

YAMLって案外にも1.1ばっかで、かつ記号に関して調べると熱心に1.2の仕様に関して書いてくれている人がいたりするので、情報としてすごい雑然としていて困った、という経緯があり、今回まとめた。

あとQiita側にも書いたんですが、Rubyで使われる記号の意味 のオマージュになっています。

これってGoogleにおける「記号は検索オプションになってしまうので調べにくい」というのを的確にカバーされた良いページでだなって感動したのと、今回も同様の壁にぶつかったのでリスペクトしている感じです。

誰かのググりの助けになると良いなと願い。

BigQueryで現在から見た先月月初日、先月月末日を求める

非エンジニアからもらったクエリがすごかったので紹介

前提条件

  • STANDARD SQLです

やり方

先月月初日

FORMAT_DATE("%Y%m%d",DATE_TRUNC(DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 1 MONTH), MONTH))

原理

# 当日東京時間
CURRENT_DATE('Asia/Tokyo')

# 当日東京時間 から 1ヶ月前
DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 1 MONTH)

# 当日東京時間 から 1ヶ月前 で 年月情報のみにする
DATE_TRUNC(DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 1 MONTH), MONTH)

# 当日東京時間 から 1ヶ月前 で 年月情報のみにして YYMMDD にする(日付情報は無くなっていたので1になる)
FORMAT_DATE("%Y%m%d", DATE_TRUNC(DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 1 MONTH), MONTH))

結果例

SELECT FORMAT_DATE("%Y%m%d", DATE_TRUNC(DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 1 MONTH), MONTH))

f:id:shinkufencer:20180623013239p:plain

先月月末日

FORMAT_DATE("%Y%m%d",DATE_SUB(DATE_TRUNC(CURRENT_DATE('Asia/Tokyo'), MONTH), INTERVAL 1 DAY))

原理

# 当日東京時間
CURRENT_DATE('Asia/Tokyo')

# 当日東京時間 で 年月情報のみにする
DATE_TRUNC(CURRENT_DATE('Asia/Tokyo'), MONTH)

# 当日東京時間 で 年月情報のみにしたものから 1日前(日付情報がなかったので今月月初日に対して1日前)
DATE_SUB(DATE_TRUNC(CURRENT_DATE('Asia/Tokyo'), MONTH), INTERVAL 1 DAY)

# 当日東京時間 で 年月情報のみにしたものから 1日前を YYMMDD にする
FORMAT_DATE("%Y%m%d",DATE_SUB(DATE_TRUNC(CURRENT_DATE('Asia/Tokyo'), MONTH), INTERVAL 1 DAY))

結果例

SELECT FORMAT_DATE("%Y%m%d",DATE_SUB(DATE_TRUNC(CURRENT_DATE('Asia/Tokyo'), MONTH), INTERVAL 1 DAY))

f:id:shinkufencer:20180623013307p:plain

備考

FORMAT_DATE を変えれば 00:00:00 のデータを出すのは容易そうなので応用効きそう。

iOSシミュレーターでJavaScriptのデバッグを始める方法があんまり一緒にはまとまってないので書いた。

話の本筋はQiitaに記事を投稿した。

qiita.com

なんでこんな記事を書いたかというと、iOS の とあるバージョンのみWebページが閲覧不可になるという事象が発生したためだった。

トランスコンパイルするようなJSだと環境によってはない関数があったりなどするので、それを調べるためのセットアップ方法ってどこにもないな~と思って投稿したのでした。

結構iOSで古いOSバージョンって実機でも保存されている場合があんまりないので、こうやってシミュレーターとかでやるしかないのでTips的な観点まで。

※日付があってないのは書いてるうちに変わっちゃったのでご愛嬌ということで。