たいちょーの雑記

ぼくが3日に一度くらい雑記をかくところ

VSCodeからあかりちゃんに喋ってもらいたかったから拡張機能作った

VSCodeから棒読みちゃんに喋ってもらう拡張機能作りました

作りました

動機

xztaityozx.hatenablog.com
xztaityozx.hatenablog.com

これまで作ってきた拡張機能のおかげで今PC上で生活するうちの半分ぐらいをあかりちゃんとともに過ごしているわけですが、正直まだちょっと足りないので今度はVSCode拡張機能に挑戦しました。

VSCBouyomi

例によって拡張機能越しに棒読みちゃんを操作する系です。 inst1

特に設定なしにインストールするだけで始められます。

使い方

インストールするとデフォルトだとCtrl+Shift+Pに割り当ててあるコマンドパレットから以下のコマンドが使えます。一緒に表記してある内部コマンドを使えば任意のキーバインドも設定できます。たぶん

  • VSCBouyomi : Talk : 読み上げ
    • 内部コマンド : vscbouyomi.talk
  • VSCBouyomi : Skip : 読み上げのスキップ
    • 内部コマンド : vscbouyomi.skip
  • VSCBouyomi : Pause : 読み上げの一時停止
    • 内部コマンド : vscbouyomi.pause
  • VSCBouyomi : Resume : 読み上げの再開
    • 内部コマンド : vscbouyomi.resume

usage2
vscbouyomi.talkを実行すると文章全体を読み上げます。このとき文字列が選択してあるならそこだけを読み上げます。

設定

大した設定もないですが
詳しい値などは棒読みちゃん付属のSampleSrc.txtをお読みください

項目 説明
vscbouyomi.encoding utf-8 or shift-jis or unicode 読み上げる文章のエンコーディングです
vscbouyomi.delimitor 文字列のリスト 文章の区切りを指定できます
vscbouyomi.skipblank true or false trueのとき空白行を飛ばします
vscbouyomi.speed 数値 棒読みちゃんの読み上げ速度です
vscbouyomi.tone 数値 棒読みちゃんの音程です
vscbouyomi.voice 数値 棒読みちゃんの声です
vscbouyomi.volume 数値 棒読みちゃんの音量です

既知のバグ

読み上げの順番がたまにおかしくなる。重大なバグすぎる

ブラウザからあかりちゃんに喋ってほしかったので拡張機能作った

ブラウザで選択してる文字列を棒読みちゃんに送るWebExtentionsを作った

作りました

動機

ネットサーフィンをしていると読みたいな~と思う記事に出会うことがあります。しかし長文を「読む」というのは中々パワーが要るため、僕はVOICEROIDのエディタへ読みたい部分をコピペして読み上げをさせていました。

この手順は例えば

  1. 記事を選択する
  2. コピーする
  3. VOICEROIDへウィンドウを切り替える
  4. 貼り付ける
  5. 再生を押す
  6. 聞く
  7. あかりちゃんかわいい

となりますが、手順7へたどり着くのにかなり手を動かさないといけないので非常に面倒です。しかしブラウザからVOICEROIDを操作するのは大変です。なのでブラウザから棒読みちゃんを操作して間接的にあかりちゃんを操作することを目指します。

棒読みちゃんからVOICEROIDを操作するのは棒読みちゃんプラグインであるVoiceroid Talk Plusを利用します。

ch.nicovideo.jp

インストール

BS2B

GitHubからクローンして手元のブラウザにインストールする。もしくはFirefoxならFirefox Add-onsで公開しているのでそこからインストールできます。

棒読みちゃんWebSocketサーバープラグイン

GitHubからクローンしてきてPlugin_WebSocket.dll棒読みちゃんと同じディレクトリにコピーしてください。

BS2B

ラウザーで んたくしてる文字列を 読みちゃんに送る やつBS2Bという名前にしました。意味がわからない

ブラウザで選択したところを棒読みちゃんに送るやつ – Firefox 向けアドオン

github.com

拡張機能を導入すると、ブラウザのメニューバーにマイクのアイコンが追加されます。このアイコンをクリックするとポップアップが表示されます。ここから棒読みちゃんへリクエストを送ることができるようになっています。

構成はこんな感じです。

FirefoxGoogle Chrome、MS EdgeなどWebExtentionsに対応しているブラウザにインストールされたBS2BはWebSocketを介して棒読みちゃんに読み上げや一時停止、再開などのリクエストを送ります。そこからVoiceroid Talk PlusがVOICEROIDのエディタに文字列を渡し、あかりちゃんが読み上げます。かわいい

ただし棒読みちゃんはWebSocketに対応していないので、自前でWebSocketサーバーをプラグインとして用意する必要があります。今回はそれも用意しました。

github.com

といってもモノ自体は先駆者の方のForkになります。BS2Bが扱いやすいように機能を追加しています。

使い方

  1. メニューバーのボタン
    • クリックするとこのポップアップがでます。ポップアップが開かれたとき選択している文字列がテキストボックスに 追加 されます。
  2. 設定チェックボックス
    • テキストを保持する : ポップアップを閉じてもテキストボックスを保持します。
    • 送った後にテキストをリセットする : Sendボタンを押した後テキストボックスがクリアされます。
  3. テキストボックス
    • ポップアップ起動時に選択されていた文字列が表示されます。編集可能なので送る前に適当に調整すればいいと思います
    • ただし棒読みちゃんへは改行コードで分割され1行単位で送られます。
    • さらに1行の長さがある程度長いとSkipされてしまいます。
  4. ステータス
    • BS2Bのステータスを簡易的に表示します。
  5. Skipボタン
  6. Pauseボタン
  7. Resumeボタン
  8. Resetボタン
    • テキストボックスをリセットします。
  9. Appendボタン
    • 選択されているテキストをテキストボックスに 追加 します。
  10. Sendボタン

雑感

WebExtentionsとかJSとかの勉強がてらに不便を1つ解消しました。これでブラウザを開いていてもあかりちゃんと一緒に居れますね!(うれしい)

今思えば適当にキーバインドとかを設定してもよかったかもしれないですね。ボタンが遠い。

参考

雑記

どうだって良い

もう

相性

相性の悪いやつは遠巻きに見て、次にどんな反応をするかを観察するのが面白い。というのを最近気づいた。でも基本的には目障りなので適度に視界に入らないようにするフィルターとかがほしい。

胃腸風邪

ぼくは昔から少しお腹が弱くて、朝に油分が多い食事をすると調子をぶっ壊してしまい、その日を台無しにしてしまう。

今回だってそうだ。せっかく準備したのに胃腸風邪みたいなのを患って計画がパアだ。出発の日の朝、吐き気も腹痛もひどくて集合場所にたどり着ける気がしなかった。行けても向こうで倒れていただろうけど。

これのせいで後々色々ごめんなさいしないとダメだと考えるとヤダなと思う

ゲームがしたい

某Youtuberグループが投稿している動画を見た。面白かったので彼らが投稿してきた動画はほぼ見てしまった。惹かれたのは彼らが本当に楽しそうにゲームをしていたところ。あーでもないこーでもないと言い合いながら笑っている。羨ましいなと思った。

自分も今身内でゲームをすることもある。とても楽しいし次はいつやれるかなとよく考える。チャットを使ってあーでもないこーでもないはできるし何も問題はない。むしろ良い。しかし電波越しだからそこに確かな存在を感じない。ヘッドホンを取ってゲームの電源を切ったら僕しかいない。また彼らのような機会があればいいなと思う。

時計がずれてる

自室にある時計が15分ぐらいずれてる。直せよといったらそこまでなんだが、設置位置が高くて手を伸ばすのが面倒。それだけ

おわれ

風が出てきたな。台風かな。

第37回シェル芸勉強会@大阪サテライトに参加しました

(^o^)/

(^-^)

午前の部

鳥海さんによる文字コードについての講義。難読化シェル芸のネタが転がっているかも知れないので楽しみでした。講義中は2重forのシェル芸がいきなり出てきたりかなり激しめでしたね。

今回の講義で一番印象に残ったのはiconvでcp930とcp939を行ったり来たりするところでした。例えば

$ echo スリスリ| iconv -f utf-8 -t cp930 | iconv -f cp939 -t utf-8
ヌメヌメ

というふうにテーブルを変えることで別の意味に変換できたりします

これは難読化に簡単に応用できて

$ echo オイヤカ | iconv -f utf-8 -t cp939 | iconv -f cp930 -t utf-8 | bash
201891日 土曜日 16:08:40 JST

オイヤカという文字列をdateに変換できます。もう少し何か工夫すれば複雑な難読化シェル芸ができるかも知れませんね

午後の部

今回も午後はヤバイ問題をいっぱいときました。
開始宣言が「地獄の始まり」とのことだったのでやる前からフラフラでした 問題はこちら

Q1

FizzBuzzを表示するgifアニメーションを作りなさい。

seq 100 | sed -e '3~3cFizz' -e '5~5cBuzz' | sed '15~15cFizzBuzz' | animation

animationはシェル芸botに実装されているgifアニメを作ってくれるコマンドです。ソースを読むと何をしているかわかります

Q2

プロヴィデンスの目のAAを作りなさい。

seq 4|awk '{for(i=0;i<4-$1;i++)printf " ";printf "/";for(i=0;i<$1*2-2;i++)printf " ";print "\\"}'|cat - <(echo  ̄ ̄ ̄ ̄)| sed 's|/    \\|/ 目 \\|'  

愚直にawkforを回します。特筆するところはないですね

Twitterでみた東映版が面白かったので自分のやつでもやってみました。

seq 5|awk '{for(i=0;i<5-$1;i++)printf " ";printf "/";for(i=0;i<$1*2-2;i++)printf " ";print "\\"}'|cat - <(echo  ̄ ̄ ̄ ̄ ̄)| sed '3s|    | 東 |;4s|    |  映|'

Q3

以下の条件を満たす数字を全部出力しなさい

  • 3桁の数
  • 桁和が15
  • 0を含まない
  • 同じ数字を含まない

競プロとかに出てきそうな問題だと思いました

seq -w 999|awk '{print $1,$1}'| sed -E 's/(.)(.)(.)/echo $((\1+\2+\3))/e'| grep -v 0|awk '$1==15{print $2}' | grep '\(.\).*\1' -v | xargs

最初のsedで桁和を計算しています。その後0を含む行をgrepで排除し、awkで桁和が一致する数をとりだした後、grepで同じ文字が存在しない行だけ取り出して終わります。
最後のgrepカンニングしました・・・。聞けば前回やっていたそうなので身についてないな〜と反省しました。精進精進

Q4

役満を出力してください
麻雀はわからないので役満もわからないのですがとりあえず例になっていたのを真似ました。

cat <(yes "+--+"|head -n14|xargs) <(echo -e "\n\n\n\n\n\n西\n西\n西\n\n\n\n \n "|sed 's/./|&|/g'|xargs) <(yes "+--+"|head -n14|xargs)

牌をAAで表現しました。やってる事自体は全然難しくないようですが、想定解とは全然違ったみたいですね・・・

Q5

    山    
    山    
    山    
山  山  山
山山山山山
          
⽥⽥⽥⽥⽥
⽥  ⽥  ⽥
⽥⽥⽥⽥⽥
⽥  ⽥  ⽥
⽥⽥⽥⽥⽥

を出力してください。なんやねんこれ・・・

echo -n "1f8b080028288a5b00037bdcd0f0b8a1e1e9c68d8fc18cc778b910069c44
43c85a80e8d1dea568082288550abf2c00a1eea7afa5000000" | xxd -ps -r | gunzip|grep -o .|xargs -n5|tr -d ' '

難読化すればするほど良いですとのことだったので gunzip を使ってみました。全角のスペースで埋めて gzip 圧縮したものを gunzip に通して xargs でまとめただけですね

Q6

  山  
  田  
  山  
山 田 山
田山田山田
     
田山田山田
山 田 山
田山田山田
山 田 山
田山田山田

この出力を得てください。アハハ

echo -n "1f8b08009c298a5b00037bdcd0f0b8a1e1e9c68d8fc10c087a3e65033217
2e0b614064816c20039944d602448ff62e058a23931041885efcb21033e1                                           
b200ebf8a623a5000000
" | xxd -ps -r | gunzip|grep -o .|xargs -n5|tr -d ' '

さっきの解答の入力を変えただけです。それだけだと面白くないので以下の難読化も試してみました。

eval $(echo -n "1f8b0800d52a8a5b00034b4dcec85778dcd000444f376e843020e8f9940d
c85cb82c84019105b2810c6412590b103ddabb14288e4c4204217af1cb42
cc84cbd6a417a51628e8e62be8d5542416a5172be8e699d6941429e8a628
a82ba8030053a9f2f8c8000000"|xxd -ps -r|gunzip)

これも gunzip を使ったやつです。これは僕が少し前にLTしたやつですね。

www.slideshare.net

eval を外すとどうなるかと言うと

$ echo -n "1f8b0800d52a8a5b00034b4dcec85778dcd000444f376e843020e8f9940d
c85cb82c84019105b2810c6412590b103ddabb14288e4c4204217af1cb42
cc84cbd6a417a51628e8e62be8d5542416a5172be8e699d6941429e8a628
a82ba8030053a9f2f8c8000000
echo   山    田    山  山 田 山田山田山田     ⽥山⽥山⽥山 ⽥ 山⽥山⽥山⽥山 ⽥ 山田山⽥山⽥|grep -o
 .|xargs -n5|tr -d ' '

解答を生成するワンライナーが仕込まれています。最近の難読化シェル芸の発展を見るとちょっとおとなし目な難読化ですね

Q7

matsuya コマンドで生成されたメニューをひらがなに変換して toilet に通した後、1行に連結し画像に落とし込む問題。手順が多すぎる。

途中までしか出来ませんでした・・・1行にまとめるところが出来なかった。

$ matsuya|mecab| awk -F, '{print $1,$6}'|awk 'NF==3{print $3=="*"?$1:$3}'|xargs|toilet

Q8

matsuya コマンドの出力を使って以下のようにしてください
例) 鉄皿鶏のチリソース定食だったとき

鉄皿鶏のチリソース定食
皿         定
鶏         ス
の         ー
チ         ソ
リ         リ
ソ         チ
ー         の
ス         鶏
定         皿
食定スーソリチの鶏皿鉄

上下左右が逆になっていることが難しいポイントですね。

c="$(matsuya)";cat <(echo $c) <(paste <(echo $c|sed 's/.\(.\+\)./\1/'|grep -o .) <(echo $c|sed 's/.\(.\+\)./\1/'|grep -o .|tac)) <(echo $c|rev)|column -t|sed 's/    \(.\)$/\1/g'

ちょっとセコいんですが変数にメニューを保存しておきます。あとは天井と床、左右の壁を作って cat に順番に流し込みます。
面倒なのは左右の壁だけなので、そこだけ解説します。
1文字目と最後の文字を削って、縦に並べて paste で連結します。天井、床と合わせてこれを column で幅を取るといい感じに並びます。

$ c="$(matsuya)";cat <(echo $c) <(paste <(echo $c|sed 's/.\(.\+\)./\1/'|grep -o .) <(echo $c|sed 's/.\(.\+\)./\1/'|grep -o .|tac)) <(echo $c|rev)
きつねうどん
つ            ど
ね            う
う            ね
ど            つ
んどうねつき

このスキマはちょうど半角スペース4つ分なので sed で削って終わりですね

awkの中でpipe

この問題の解答のなかでawkの中でコマンドを実行できるというのを知りました。すげーっすねこれ・・・

$ echo abc | awk '{print | "rev"}'
cba

LT

今回は新しい難読化シェル芸についてでは無いですが、宣伝をしようと思いまして発表させていただきました。
www.slideshare.net

cdx という cd コマンドのラッパーを作ったのでその宣伝をしました。因みにスライド内で言っている海外は体調不良で断念して今布団の上でコレを書いています。しんどいわホンマ

そんなことより cdx をよろしくお願いたします。

github.com
xztaityozx.hatenablog.com

終わりに

今回も午前午後、LT大会ぜんぶとても楽しかったです。皆様ありがとうございました!!

Goが面白いのでまたcdx作った

cdx

github.com

cdx は僕が一人でメンテしてる cd コマンドのラッパーです。この手のツールでよく使われているのは、enhancdzなどがあります。

github.com

github.com

とくにenhancdは非常に強力なツールで、利用している方も多いと思います。

cdxではCustomSourceという設定項目を用意しました。これを利用することでenhancdの持つような機能はユーザー側が設定として与えることが出来ます。そのかわりcdxは僕が素の状態である程度使えるような機能だけを実装したものになります。

要求環境

  • Go lang (v1.10.2 以上)
    • 実装にはGoを使いました。最近はじめて面白いなと思いました。CLIツールを作るならGoはいい感じですね
  • bash or zsh
    • fishは対応していません
  • fzfやpecoみたいなFuzzy-Finder

インストール

  1. go get するか、GitHubのReleaseページからバイナリをダウンロードしてパスの通ったところに置いてください
$ go get github.com/xztaityozx/go-cdx
  1. お好みのFuzzy-Finderを用意します。個人的には fzfがすきです。 fzy と言うやつもいいらしいですね

github.com

github.com

  1. コンフィグを書いて置きます
$ mkdir -p ~/.config/go-cdx
$ cat << EOF > ~/.config/go-cdx/.go-cdx.json
{
  "HistoryFile": "~/.config/go-cdx/history.json",
  "BookMarkFile":"~/.config/go-cdx/bookmark.json",
  "Command":"pushd",
  "NoOutput":true,
  "Make":false,
  "CustomSource":[],
  "FuzzyFinder":{
    "CommandPath":"選んだFuzzy-Finder",
    "Options":[]
  },
  "BinaryPath":"go-cdxへの絶対パス。go getした場合は消してOK"
}
EOF
$ vim ~/.config/go-cdx/.go-cdx.json # 好きなように設定してください

設定値はGitHubのREADMEに書いてあるのでそちらを見てください

  1. cdx をロードします。
# cdxをロード
$ eval "$(go-cdx --init)"
# シェル起動時に自動でロードするならrcに記述すればOK
$ echo 'eval "$(go-cdx --init)"' >> ~/.zshrc # or ~/.bashrc

使い方

cdx [-A,--action [act]|
     --add|
     -b,--bookmark|
     --config [configFile]|
     --cs-list|
     -c,--custom [name]|
     --help|
     -h,--history|
     --init|
     --make|
     --no-output|
     -p,--popd|
     -v,--version] [PATH]

基本はcdコマンドと同じように使います

$ cdx ~/      # change to home
$ cdx ~/Utils # change to ~/Utils

-A,--action [act]

このオプションでは移動した後にそのディレクトリで実行するコマンドを指定できます

$ cdx ~/Utils --action "ls"
go-cdx
go-cdx.v1.0.13
go-cdx.v1.0.13.tar.gz
...
$ pwd
/home/xztaityozx/Utils

コマンドはbash -cに渡されて実行されることに注意してください

--add

ブックマークにカレントディレクトリを追加します。重複のチェックをしないので注意してください

-b,--bookmark

bookmarkからFuzzy-Finderを使って1つ選択し、cdします。

$ cdx -b
>
  3/3
> [   3] /path/to/hoge
  [   2] /path/to/fuga
  [   1] /path/to/foo

--config [configFile]

デフォルトのコンフィグの代わりになるコンフィグファイルを指定できます。デフォルトは~/.config/go-cdx/.go-cdx.jsonです

--cs-list

後に説明するCustomSourceからのcdの一覧を表示して終了します

-c,--custom [name]

Goでcdxを書き直すにあたって、追加した目玉機能です

cdxは複雑な機能を単体で持ちませんが、代わりにユーザーが機能を自由に追加することが出来ます。これをCustomSourceとよんでいます

CustomSource は、その 名前Fuzzy-Finderに与える入力 のペアで構成されます。

{
    "CustomSource":[
        {
            "Name":"g",
            "Command":"ghq list | xargs -n1 -I@ echo 'echo -e \"$(basename @) $(ghq root)/@\"'|bash|column -t"
        },
    ]
}

この例では、 ghq listで表示されるリポジトリ一覧から1つ選んでcdするgという名前の機能を追加しています

# Fuzzy-Finderに与える入力
$ ghq list | xargs -n1 -I@ echo 'echo -e \"$(basename @) $(ghq root)/@\"'|bash|column -t
"Contest                        /home/xztaityozx/.ghq/github.com/xztaityozx/Contest"
"cdx                            /home/xztaityozx/.ghq/github.com/xztaityozx/cdx"
"dotfiles                       /home/xztaityozx/.ghq/github.com/xztaityozx/dotfiles"
"nandokuka                      /home/xztaityozx/.ghq/github.com/xztaityozx/nandokuka"
"yov                            /home/xztaityozx/.ghq/github.com/xztaityozx/yov"
# cdx のCustomSource gを使ってみる
$ cdx -c g
>
  19/19
> Contest                        /home/xztaityozx/.ghq/github.com/xztaityozx/Contest
  cdx                            /home/xztaityozx/.ghq/github.com/xztaityozx/cdx
  dotfiles                       /home/xztaityozx/.ghq/github.com/xztaityozx/dotfiles
  nandokuka                      /home/xztaityozx/.ghq/github.com/xztaityozx/nandokuka
  yov                            /home/xztaityozx/.ghq/github.com/xztaityozx/yov

この機能を使って、Fuzzy-Finderで選択された行のいちばん後ろのカラムが、移動先のパスとして選択されることに注意してください

CustomSourceでオレオレcdxを作ることが出来ます

--help

ヘルプを出力して終了します

-h,--history

履歴をFuzzy-Finderで選択してcdします。ログアウトしても履歴はリセットされません

--init

cdxをロードするときにのみ使います

--make

移動しようとする先が存在しないディレクトリだった場合、作成するか訪ねます。yesと答えた場合のみ、ディレクトリを作成しcdします

--no-output

cdxからの出力を無効化します。Fuzzy-Finderや--action出力は表示されます。

-p,--popd

popdを実行して終了します

-v,--version

バージョン情報を出力して終了します

終わり

cdx をよろしくお願いいたします

雑記

うるさいなあ

うるさいぞ

貧乏ゆすり

少し前、帰りの電車で隣りに座っていたおじさんが信じられないスピードで貧乏ゆすりをしていた。左足だった。

個人的にはおじさんになんの興味もないが、そのときはなぜかその人を観察してしまった。降車駅までの微妙な時間を潰すには良いと思った。おじさんは何か焦っているのか、時計を見たり、携帯をみたり、足を組んでみたり。兎に角落ち着きがなかった。

駅に近づいて、ぼくの興味も失せた頃、おじさんは急に鼻歌を歌い始めた。びっくりして思わず振り向いてしまった。するとおじさんは恥ずかしかったのか、席を移動してしまった。さよなら

あのおじさんは何だったのか。最後の鼻歌は気を引くためのものだったのか。こんなどうでも良いことは考えなくていい

デュラハン

いま、勇者のくせにこなまいきだと言うゲームでイベントをやっている。そのイベントではデュラハンという魔物が手に入る。さいきょうのデュラハンを作り上げるにはそれなりに周回しなければならないが、せっかくなので頑張っている。

ところで昔ぼくはデュラハンのことをデュランハンと間違えて覚えていた。間違えたまま友人と話していたら、めちゃめちゃ笑われた。笑うが訂正してくれなかった。ぼくは何で笑われているかわかんないので、つまらなかった。友人と喋っているのに「つまんない」なんてことを、この魔物を見るたび思い出しそうだ

多忙なひと

どうやら自分はそこまで多忙ではないらしい。新生活が始まってから結構経った。去年と比べるとそれなりにタスクもあり、忙しいと思っていた。しかし普通に上がいた。

その人は同学年の人だが、次の休みが1ヶ月先だと言っていた。人の生活に口を出すつもりはないが、ぼくは嫌だなと思った。

300はムズい

最近のAtCoderの300点はムズい。難しい。個人的な感想だけど。難しいので解けなくなってしまった。ぼくは300すら解けない。

終わった

申し訳ないが、野球よりはプリキュアが観たい。

雑記

ええ

そうね

BGM

ぼくはよく1つの楽曲を永遠にリピートして、BGMにすることがある。そうしていると落ち着くし、とても作業が捗る。

こうしている間はその曲がとっても心地いいし、とても好きに感じる。それはとても楽しい。が、無限に聞いているのですぐに飽きが来る。もったいない話だ

はなぢ

ムズムズしたので鼻をほじっていた。ティッシュ越しにいつもより少しぬめり感の違うものを感じた。またやってしまった。また傷口を開いてしまった。

もう長い間ムズムズした鼻をほじっては傷を開いている。傷の方も慣れたもんだと思っているんじゃないだろうか。ぼくはお前のせいで、何度か夜中にシーツを無言で洗う羽目になったんだぞ

無限にほじっても鼻血が出ない鼻がほしいもんだ

慰謝料

今年は厄年なので、週に1つは大なり小なりなんか嫌なことがある。別にしょげたりすることもないなと思いながら暮らしてる。まあAtCoderのレートが1000割ったのは流石に凹んだが。

車に惹かれたのは少し前。状況説明をするのは面倒なので簡単に説明すると、止まってた前方の車が後方不確認で突っ込んできた。ぼくは自転車だったので避けきれずぶつかった。車は後ろにも動くし、自転車はとっさに横移動できないというのを知った。

相手の保険会社から連絡があって、いろいろ説明された。交通費とか慰謝料とか合わせて8000円ぐらいみたいな話を聞いた。その日は学校いけなかったし、痛いし、怖かったけど8000円ぐらいで済むなら、まあ住みやすい世の中だなって思った。

もみあげ

もみあげを少し放置していると、渦を巻き始めるらしい。目より後ろ側についてるし、わざわざ鏡を見ないともみあげが渦を巻いているかどうかはわからない。ただ身内の何人かが「ぐるぐる〜〜!」って言ってくるのでそうなんだろう。まあ剃ればいいんだけど。

あ、また剃り忘れた。

終われ

おわり