hogashi.*

日記から何から

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

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.

https://metacpan.org/pod/Text::Xslate#TEMPLATE-SYNTAX

コードの様子

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 [% ... %] tags and %% ... line code.

https://metacpan.org/pod/Text::Xslate::Syntax::TTerse#DESCRIPTION

Gitのおすすめエイリアス5選

motemen.hatenablog.com

 色々設定してるけど普段使ってるの何かな〜と思って見ました。

$ 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
    • grep するほとんどの場合で行番号がほしい
    • alias.grn=grep -n --name-onlyワンライナーに便利
  • 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=commitalias.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

 ゴルゴ13、たまに依頼者に"お前のエゴじゃないのか?"みたいな内容のことを突きつけたりすることがあって、皮肉と思ってたけど(皮肉ではあるだろうけど)、住職みたいな見方でいくと、"たしかにそうでした"って己を恥じて依頼をとりやめるチャンスを与えているとも考えられそう。ゴルゴ13に関して何か考えてもそれが正解かどうかとかは特にないので、こういうことを勝手に考えては考えすぎだなって言っている。

NewtとNetlifyでブログをつくって公開してみる

www.newt.so

 新しいコンテンツ管理の体験 | ヘッドレスCMS「Newt」 というサービスが登場していて、全部用意されていそうだったので、ひとまずブログをつくって公開するところまでやってみた。

アカウント/スペースをつくる

 https://www.newt.so/ からできる。登録すると、スペースを作成 → App を作成という流れになる。

 スペースひとつに App 複数、というつくり。スペースに他の人を招待することができるので、スペースが人の集まり (会社とかサークルとか) に相当しそう。 App ひとつがブログひとつに相当するので、サークルの技術ブログと日記を分けてつくって、 1スペースで管理、みたいなことができそう。

 スペース UID は、あとで API でアクセスするのに使うので、わかりやすい文字列にしておくとよさそう。

App をつくる

 App はテンプレートからつくるのと、まっさらな状態からつくるのとで、 2種類のつくり方がある。その App がどういうデータ (モデルと呼んでいそう) を持つかを決めるのだけど、ブログっぽいモデルとか、メンバー一覧っぽいモデルとかがテンプレートとして用意されている。高速にブログをつくるならテンプレートから Blog とかを選ぶとよさそうだったのでそうした。

f:id:hogashi:20220309162453p:plain

 App UID もあとで API で使う。

画面をつくる

リポジトリの用意

 App はコンテンツのデータがあるだけで、 API でアクセスして取得してくることができる。それを HTML に入れて画面をつくるとブログが完成する。
 Newt 公式で画面のテンプレート (スターターと呼んでいそう) が用意されていて、これを使ってさっと公開してみることにした。

www.newt.so

 App に Blog2 のテンプレートを選んだので、スターターも 2カラムブログ GitHub - Newt-Inc/newt-blog2-starter-nuxtjs を選んだ。
 まず GitHubリポジトリがあるので、自分のアカウント (org) に fork する (右上に Fork ボタンがある)。

f:id:hogashi:20220309153243p:plain

 僕だと hogashi 以下にリポジトリができる (https://github.com/hogashi/newt-blog2-starter-nuxtjs) ので、ここで作業していくことになる。どう作業したらよいかは README に書いてあるので、それにそってやっていくと完成する感じ (実は Step 1 の 3 までが終わっている)。
 Step 1 の 4 の CDN API トークンを作成する「スペース設定」はここ。「作成」を押したら作成できる。

f:id:hogashi:20220309154108p:plain

 Step 2 は、 GitHub 上でもできる。自分のリポジトリの nuxt.config.js をクリックして内容が表示されたら、右上の鉛筆から編集する。

f:id:hogashi:20220309154340p:plainf:id:hogashi:20220309154405p:plain

 README に書いてある通り、 publicRuntimeConfig というところの スペースUID AppUID CDN API トークン をそれぞれコピペで埋める。 CDN API トークンは、さっき作ったときの画面からコピーしてこれる。 commit changes すると変更完了。

f:id:hogashi:20220309154442p:plainf:id:hogashi:20220309154710p:plain
 

公開

 GitHubリポジトリからコマンドを叩いて静的サイトをホスティングできるならなんでもよさそう、過去に Netlify (https://app.netlify.com/) を使ったことがあったので今回はそれでやった。

 Add new site から、 Import an existing project を選ぶ (GitHubリポジトリからつくるので)。 GitHub を選んで Netlify を GitHub に連携し、さっきつくった (fork してきた) リポジトリを選ぶ。

f:id:hogashi:20220309155043p:plainf:id:hogashi:20220309155129p:plainf:id:hogashi:20220309155150p:plain

 README によれば、サイトの生成は yarn generate なので、 Build command をそう書き換えて、 Deploy site を押したらあとは待つだけ。

f:id:hogashi:20220309155206p:plain

 Netlify が頑張っている様子は Production deploys の一番上 (最新) をクリックすると見れる。 Deploy log というのがどんどん流れていくはず。

f:id:hogashi:20220309155454p:plain

 こういう感じになったら成功で、 Preview ボタンが登場するはずなので、それを押すと実際に公開されたサイトを見ることができる。

f:id:hogashi:20220309155407p:plainf:id:hogashi:20220309161601p:plain

 ためしに高速に作ってみるか、というのができていかにも便利そうだった。あと package.json に不要な末尾カンマがあって JSON としては invalid になっていそうだった (Netlify でエラーが出てそうだった) ので、 p-r を作ってみたところ、爆速でマージされていてありがたい。 https://github.com/Newt-Inc/newt-blog2-starter-nuxtjs/pull/7