仕事していく上で、意外とこれやってないねとか、新しいことがわかったのでやることが増えましたとかそういうときに、じゃあ新しく issue を立てましょうということになる。やることが増えるので、素朴には嬉しくないように感じる。が、よく考えると、やらないとならないことが発見されただけなので、結局はやるはずだったわけで、最終的にやることになる量は増えていなくて、ふむふむこれもやるのですねといってやっていくだけのはずで、何ならわかって嬉しいはず。なので issue を立てられたら尊いということにしましょうというようなことがチームのふりかえりで話されていて、頭に置きつつ仕事している。どんどん issue を立てていくとやることが爆増して途方もない感じになることもあるけど、これは尊いことのはず、と思ってやっていってみている。もちろん闇雲に issue を立てまくっていくと訳が分からなくなって破滅するので、必要な分に留める必要はありそう。
見えてる一番上の記事のタイトルのSHA-1でブログタイトルの文字色変える
トップのタイトルはブログを投稿するごとに色が変わって、各記事を見てるときのタイトルは記事ごとに色が違うことになる。透明度も含めて変えているので、運が良ければブログタイトルがめっちゃ薄いときもありそう。編集画面のプレビューで確認できてしまうので、良い色を求めてタイトルを変えてしまうおそれがある状態。
1秒ごととか日付ごとに変わるようにしてもよかったのだけど、何かに基づいて変わっている感はほしいので、いったん記事タイトルだけを使っている。
TextEncoder とか ArrayBuffer とかあたりはひと手間感あるなと思っていたけど、使ってみるとちゃんと道具が揃っていて便利な気がする。
- SubtleCrypto: digest() method - Web APIs | MDN を見ると例として 16進数のハッシュ文字列に出すやり方が載っていた
- TextEncoder - Web APIs | MDN をとりあえず覚えておくと、 ArrayBuffer 的なもの?を扱うときに何かと便利そう
const entryTitleText = document.querySelector('.entry-title-link').textContent; const encodedText = new TextEncoder().encode(entryTitleText); crypto.subtle.digest('SHA-1', encodedText).then(digest => { const rgba = Array.from(new Uint8Array(digest)).slice(0, 4); const blogTitle = document.querySelector('#title a'); blogTitle.style.color = `rgba(${rgba.join(', ')})`; });
(追記) その後やっぱりブログタイトルはやめてカラーバーみたいなことにした。せっかく桁がいっぱいあるので、 2色とってグラデーションにしたらちょっと綺麗でよい。グラデーションの角度はハッシュを数値にして合計している (360度を超えても、自然と何回転でもしてくれるので便利)。
const entryTitleText = document.querySelector('.entry-title-link').textContent; const encodedText = new TextEncoder().encode(entryTitleText); crypto.subtle.digest('SHA-1', encodedText).then(digest => { const digestArrray = Array.from(new Uint8Array(digest)); const rgba1 = digestArrray.slice(0, 4); const rgba2 = digestArrray.slice(4, 8); const deg = digestArrray.reduce((cur, sum) => cur + sum); const target = document.querySelector('.entry-date'); target.style.background = `linear-gradient(${deg}deg, rgba(${rgba1.join(', ')}), rgba(${rgba2.join(', ')}))`; });
Text::XslateでTTerseでも%%で行コードが書けるの知らなかった
Perl のテンプレートエンジン https://metacpan.org/pod/Text::Xslate にはシンタックスがいくつかある。 Kolon も TTerse も使っていて、 Perl コードを書くのに Kolon では <: ... :>
と : ...
どっちもあるのは知っていたけど、 TTerse では [% ... %]
しか知らなかった。
が、 Text::Xslate::Syntax::TTerse のコードを眺めていたら、 %% ...
で行コードを書けるようだった (https://metacpan.org/pod/Text::Xslate::Syntax::TTerse をよく見ると書いてあった)。
https://metacpan.org/pod/Text::Xslate#TEMPLATE-SYNTAX
https://metacpan.org/pod/Text::Xslate#TEMPLATE-SYNTAX
- Kolon
Kolon is the default syntax, using
<: ... :>
inline code and: ...
line code, which is explained in Text::Xslate::Syntax::Kolon.- Metakolon
Metakolon is the same as Kolon except for using
[% ... %]
inline code and%% ...
line code, instead of<: ... :>
and: ...
.- TTerse
TTerse is a syntax that is a subset of Template-Toolkit 2 (and partially TT3), which is explained in Text::Xslate::Syntax::TTerse.
- HTMLTemplate
There's HTML::Template compatible layers in CPAN.
Text::Xslate::Syntax::HTMLTemplate is a syntax for HTML::Template.
HTML::Template::Parser is a converter from HTML::Template to Text::Xslate.
コードの様子
sub _build_line_start { '%%' }https://github.com/xslate/p5-Text-Xslate/blob/a7908ee382ed01f3a407fe826f2741de76287d36/lib/Text/Xslate/Syntax/TTerse.pm#L13
https://metacpan.org/pod/Text::Xslate::Syntax::TTerse#DESCRIPTION
TTerse is a subset of the Template-Toolkit 2 (and partially 3) syntax, using
https://metacpan.org/pod/Text::Xslate::Syntax::TTerse#DESCRIPTION[% ... %]
tags and%% ...
line code.
Gitのおすすめエイリアス5選
色々設定してるけど普段使ってるの何かな〜と思って見ました。
$ history | perl -pe 's|^ *[^ ]+ +||' | grep -E '^git ' | awk '{print $1 " " $2}' | sort | uniq -c | sort -nr | head -5 470 git gr 352 git df 344 git sc 294 git cam 293 git push
alias.gr=grep -n
alias.df=diff
- 左手だけでシュッと打てて便利
- 空白の変更を無視する
alias.dfi=diff --ignore-space-change
とかもしててこれも便利
alias.sc=switch
- 左手だけでシュッと打てて便利
checkout -b
からsc -c
に矯正するためにつくった思い出の alias
alias.cam=commit -am
- トラックされてるファイルの差分を全部 add しつつ引数からコメントをつけて commit
- やったことを 1行で説明しながら commit するのに手短
alias.c=commit
とalias.cm=commit -m
と合わせて場面ごとに使っている
git push
- alias ではない
- push はミスるとかなり面倒なことがあるので、破壊的(?)な操作と見なして alias しないルールにしている
- 似たものとして
checkout
も (補完はあるけど) alias はしてないcheckout .
とかしてしまうと全部消えてしまう(んだったはず)ので悲しいので……- これが上で書いた
sc -c
に矯正したかった理由のひとつ
- これが上で書いた
なんでも alias にできるけど、自分の性格的にミスりやすいと思っているので、見境なく alias しないように気をつけています (個人の感想です)。
■
体系的な知識を得る勉強の気の進まなさがずっとあって困っているのだけど、何がそんなにつらいのかと考えたところ、単語とその意味を覚えていくようなのがつらいのだと思い至った。
割と感覚的な人間で、例えば英単語も単語帳とかを丸暗記とかは絶対できないタイプで、語源とかからニュアンス?を得て意味を感じ取るみたいな手法でなんとかしている。逆になんでそれはできるんだとも思うけど、語源によって英単語同士の共通点が見つかると表面的な意味だけを覚えるよりは経験的な学びになっている、とかなのか……?
なので技術書やビジネス本?などもとにかく頭に入って来ず、とりあえずやってみてこれがこの単語のことなのか、とかを掴んでいくことになる。英単語と比べて、日々の暮らしでの身近度というか自分ひとりでなんとかなる度は低いものが多いので、経験的に学ぶみたいな手法が難しい気もする。せっかく文字にまとまっているのに、そこから効率よく吸収できないのは遠回りで困る。
■
急に思い立って TOEFL のミニオンライン模擬試験というのをやってみた。https://www.agos.co.jp/onlineservices/modules/onlinetest/ リスニングが長大で大変、しかしそれなりの点は取れていそうで安心、しかしどこが間違えていたか分からなくてさみしい。あとミニじゃなくてちゃんとしたやつをやったら多分ライティング/スピーキングは全然できないと思う。
お疲れ様でした。スコアは以下の通りです:
Reading: 28 / 30
Listening: 27 / 30