2020年振り返り
2020年は大変な年になりました。新型コロナウイルスにより、人と物理的に会うことが難しくなり、あらゆることが中止またはリモートで行われるようになりました。
そんな2020年になることを想像すらしていなかった自分が書いた「2020年にやりたいことリスト」があるので、これを見ながら2020年を振り返ってみます。 ramenjuniti.hatenablog.com
• 英語の勉強
やれてないです。やらんきゃ。
• CSの勉強
いくつか本を読んで知識は増やせたかなと思います。まだまだ全然ですが。
• OS作る
これを読んで作りました。OSの雰囲気はなんとなくわかった気がします。 www.amazon.co.jp
• インタプリタ作る
作れてない。作りたい。
• Goにコントリビュート
やれてない。まずはソースを読むとこから!
• Go以外のOSSにコントリビュート
やれてない。自分が使っているツールとかにできたらいいな。
• 海外に行く
コロナで無理!
• イベントで登壇
やれてない。イベント系はリモート開催が多くなり、参加ハードルは下がっているので、何かネタを見つけてやりたいですね。
• 何かアプリケーション作る
研究室の食糧を管理するアプリケーションを作りました。インフラはAWS、サーバーはGo、フロントはReactで作りました。ただコロナにより、研究室に行く機会がめっきり減ったので、使うことはありませんでした。
• サーバーサイド領域の勉強
アプリケーションを作成することで知らなかったことを学べました。もっと色々作りたい。
• インフラ領域の勉強
• AWS
• GCP
• Terraform
アプリケーションを作成した際にAWSを利用しました。そこで色々触ってみましたが、もっとちゃんと勉強しないといけないなと思いました。特にネットワーク周り。GCPなどの勉強はできませんでした。
• ハッカソン出る
やれてない。来年は出たい。
• HHKBを買う
書いました。たまに使ってます。普段は自作のやつを使ってます。
• 関数型言語の勉強
SICPを読んでる時にほんのちょっとだけ。
• ジムにちゃんと行く
行きました。ただ筋トレ好きにはなってません。金払ったから行ってるって感じです。
• 就活を終わらせる
終わりました。来年から渋谷でエンジニアやります。
• git完全理解
たまにgitわからんマンになるので、完全理解はできてません。
• 富士山に登る
• どっかの世界遺産に行く
こんな感じでした。できたりできなかったりでした。勉強系はもっとやりたかったのですが、モチベーションを保てず、なんだかんだやらなくなってしまいました。まずはモチベーションを保つ方法を見つけないといけないような気がします。
この振り返りで見つかった課題は来年の自分に託します。今年の自分お疲れ様でした。
Cabochaで依存構文木を作る
juliaでCaboChaを呼んで係り受け解析を行い、依存構文木を作ってみました
コードはこんな感じです。
using PyCall # cabocha # 辞書のパス const dic = ENV["DIC"] const cabocha = pyimport("cabocha.analyzer") const cabocha_analyzer = cabocha.CaboChaAnalyzer("-d $dic") struct Node id::Int64 parent::Int64 children::Array{Int64,1} body::String end sentence = "一郎は二郎が書いた絵を三郎に贈った" chunks = cabocha_analyzer.parse(sentence) tree = [] for chunk in chunks id::Int64 = chunk.id + 1 # 親のノードid parent::Int64 = chunk.next_link_id + 1 # 子のノードid children::Array{Int,1} = [] for children_id in chunk.prev_link_ids push!(children, children_id + 1) end # 文字そのもの body::String = chunk.surface push!(tree, Node(id, parent, children, body)) end
これにより以下のような依存構文木を生成できます
julia-vimはdein_lazy.tomlじゃなくてdein.tomlに書こう
問題
github.com
julia-vim
をdein_lazy.toml
で以下のように読み込ませると
[[plugins]] repo = 'JuliaLang/julia-vim' on_ft = ['julia']
以下のメッセージがnvimを開くたびに表示されるようになりました
E117: Unknown function: LaTeXtoUnicode#Refresh
いちいち表示されるので、めっちゃ邪魔
解決
julia-vim
をdein_lazy.toml
ではなくdein.toml
に記述したら解決しました
このissueを見ると、どうやらlazy-loadingが原因だったみたい github.com
JISキーMacでUSキーHHKBを使った時に vscode-vim の ctrl+[ が 反応しない
問題
JISキーMacでUSキーHHKBを使った時に vscode-vim のctrl+[
が 反応しなくなりました。
これではインサートモードから抜けられない。
でもctrl+]
だとインサートモードを抜けられる。なんでや。
こちらの記事を参考にkeybindins.json
をいじってみたがうまくいかず...
android.gcreate.jp
解決
keybindings.json
に以下のコードを追加
[ { "key": "ctrl+[BracketLeft]", "command": "extension.vim_escape", "when": "editorTextFocus" } ]
これで解決しました。ctrl+[
ではなくctrl+[BracketLeft]
じゃないと反応しないらしい。
Julia + MeCabのDockerfile書いた
これです
Dockerfileの中身はこんな感じ
FROM julia:latest RUN apt-get update \ && apt-get install -y mecab \ && apt-get install -y libmecab-dev \ && apt-get install -y mecab-ipadic-utf8\ && apt-get install -y git\ && apt-get install -y make\ && apt-get install -y curl\ && apt-get install -y xz-utils\ && apt-get install -y file\ && apt-get install -y sudo\ && apt-get install -y wget RUN git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git\ && cd mecab-ipadic-neologd\ && bin/install-mecab-ipadic-neologd -n -y\ && cd ..\ && rm -r mecab-ipadic-neologd RUN julia -e 'using Pkg; Pkg.add("PyCall")' RUN julia -e 'ENV["PYTHON"]="/root/.julia/conda/3/bin/python"' ENV PATH="/root/.julia/conda/3/bin:$PATH:${PATH}" RUN pip install mecab-python3
辞書はmecab-ipadic-neologdを利用できるようにしました
以下のJuliaを食わせると
using PyCall MeCab = pyimport("MeCab") mecab = MeCab.Tagger("-d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd -Owakati") println(mecab.parse("私はラーメンを食べたい。"))
ちゃんと分かち書きしてくれます
私 は ラーメン を 食べ たい 。
MeCab以外でもPyCall
が入っているのでpip
で何か欲しいものを入れてあげれば、Julia側でPythonのライブラリを利用することも可能です
定期的にslackのbotのメッセージを消す
背景
slack無料枠は最大メッセージ数が10000件となっており、メッセージ数10000件を超えると古いメッセージから見れなくなってしまいます。
しかし、サーバーの監視botのような頻繁にメッセージを送信するbotを導入している場合、メッセージ数10000件はすぐに超えてしまいます。
重要度の高いメッセージがbotのメッセージによって見れなくなってしまうのは困るので、何とかしたい...
botのメッセージを削除する
削除されたメッセージは上限にカウントされないので、botのメッセージを定期的に削除して上限を超えることを防ぎます。
こちらのツールを用いてメッセージを削除します。 github.com
Dockerイメージが公開されているので、今回はDockerを利用します。
docker pull sgratzl/slack-cleaner
以下のように実行できます。
docker run -it --rm sgratzl/slack-cleaner -c "slack-cleaner ..."
slack-cleaner
の詳細な使い方はこちら
メッセージを削除するためには権限周りの設定が必要です。 トークンの取得して必要な権限を付与してください。
私は以下のようなスクリプトを書いて、cron
で定期的に実行させています。
#!/bin/sh set -eu TOKEN="取得したトークン" CHANNEL="チャンネル名" DATE=`date '+%Y%m%d' --date '1 days ago'` RATE=1 COMMAND="slack-cleaner --token ${TOKEN} --message --group ${CHANNEL} --bot --as_user --before ${DATE} --perform --rate ${RATE}" docker run --rm sgratzl/slack-cleaner -c "${COMMAND}"
--group
でプライベートチャンネルを指定しています。--before
である日付より古いメッセージを削除対象にしています。--rate
でslack APIの呼び出し頻度を指定します。--perform
で実際に削除を行います。
cron
の設定は以下のようにしました。
0 0 * * * {スクリプトのパス}
これで毎日00:00にスクリプトが実行され、メッセージが削除されるようになりました。