That Can

雑な感

vagrantの起動時にUIDの競合エラー

別マシンからGithubに上げたVagrantfileを自宅マシンでvagrant upしたら下記エラーが出た。

The VirtualBox VM was created with a user that doesn't match the
current user running Vagrant. VirtualBox requires that the same user
be used to manage the VM that was created. Please re-run Vagrant with
that user. This is not a Vagrant issue.

The UID used to create the VM was: XXXXXXX
Your UID is: XXX

まだ作ってないのになんで競合するんやと思ってたら、.vagrant以下もGithubに上げててそれを引っ張ってきてたからだった。 しょうもないやつだけど、気づきにくい気もするのでとりあえず書いておく。

解決策は単純にgit rm -r .vagrantしてコミットしておしまい

春休みに突入した

卒論の最終発表を終え、研究室デモも終えて春休み感出てきた。 解放されたことに慣れなくて落ち着かずふわふわしていてよろしくない傾向にある。 卒論前は散々やりたいことが思い浮かんでやったるべ!って気持ちでいたけど、いざ終わると何かやる気を失ってしまった。 入社したら無限に働くので今のうちに無限に遊び尽くさなければならないので気合い入れて遊んで行きたい。

研究がつらい - MCC Advent Calendar 3日目

これは、MCC Advent Calendar3日目の記事です。

前回は、hu君の「MCCの副部長として」です。僕もMCCの副部長やりましたが、特に何もしなかったので、反省してます。MCCMMANCCがなんか続いてるので良かったなと勝手に思ってます。でも主に僕以外の交流先の人とかicchyとかが頑張っていたので僕の手柄は特にないです。

あと話は変わりますが、先日久しぶりに早起きしたのでMCCの部会に行ってみましたが、完全に部外者感が出てて老人の気持ちになりました。

2018/2/10追記: あまりに内容が酷かったのでリライトしました。発表も終えたので辛さから解放された気持ちで書いています。


それはさておき、研究がつらいです。理由は諸説ありますが、研究は基本的に一人で進めるプロジェクトなので孤独感に苛まされがちです。

あまりにもつらいのでコウテイペンギンの赤ちゃんに褒めてもらう事にしました。

コウペンちゃん

コウテイペンギンの赤ちゃんとは、るるてあ(twitter: @k_r_r_l_l_)さんにより生み出された全てを肯定してくれるペンギンの赤ちゃんで、通称コウペンちゃんです。めちゃくちゃ可愛い外見に加え、全てを肯定する懐の深さに僕は救われる毎日を過ごしています。

頑張ったら、コウペンちゃんにたくさん褒めてもらうために、タスクを完了したら褒めてくれるbotを作る事にしました。

システム概要

f:id:jackale:20180210181631p:plain
システム概要の雑な図

タスク管理としてTrelloを使っていて、完了したタスクはDoneと言うリストに入れるようにしてます。 よってDoneリストにカードが入ったらタスク完了としてそれをSlackにコウペンちゃんの画像とお褒めの言葉をメッセージとして送るようにしました。 botはHeroku上で動かして、フレームワークにはとりあえずHubot使っています。

Hubot + Heroku + Slack

次の記事参考にやりました。この三つの連携は適当にググれば色々出てくると思います。 https://qiita.com/susuwatarin/items/019e0e701754161f7c4c

HubotはGithub社謹製のbotフレームワークです。 メッセージに対する処理をスクリプト(Coffee Script)で記述することでお手軽にbotが作れます。 結構古い気がするので新しくてもっと良いやつ無いかなと思ってググってもあまり見つけられなかったので、選びました。

VPSを持っていないので、botはHerokuで動かしています。 HerokuはPaaSと呼ばれるやつで、プログラムをデプロイすると動かしてくれるやつです。 Githubリポジトリを作ってそれをHerokuにpushするとよしなにやってくれます。 今回はGithubにプライベートリポジトリを立ててHubotのプログラムを置いています。

当初、Google App Scriptを検討していて色々やってましたが、実装当時はTrelloの連携が上手く行かずに諦めました。

(参考:https://qiita.com/Andysumi/items/462964bd8249beb067e4 )

今はどうやら上手くいきそうな雰囲気が出てます。

2018/3/3追記:Google App Scriptで再実装し直したら今度は上手く行きました。公開範囲を匿名を含むを選択してなかったせいでWebhookが受け取れずにつまづきました。

Trelloとの連携

Trelloはカンバン形式のタスク管理ツールで、前述の通り完了したタスクをDoneリストに入れています。

f:id:jackale:20180210181838j:plain
Trelloのイメージ図

TrelloにはWebhookの機能があって、カードを移動したり削除したりなどのアクションを行うと特定のURLにPOSTリクエストを送ってもらう事ができます。 連携の仕方は↓を参考にしました。

https://qiita.com/Andysumi/items/462964bd8249beb067e4

HubotはExpressというWebフレームワークを利用していて、自前でサーバーが動いているので下記みたいな感じでリクエストを受け付ける事が可能です。

   # 初回登録のHEADリクエスト用
    robot.router.head '/hubot/trello', (request, response) ->
        response.send "HEAD"

    # Webhookの受け先
    robot.router.post '/hubot/trello', (request, response) ->
        action = request.body.action
        unless check action
            return response.send "NG"
        card_name = action.data.card.name
        msg = makeMessage card_name

        sendMessage msg
        response.send "OK"

robot.router.{メソッド名}で、指定したメソッドのリクエストを受けた時の挙動を定義できます。ここら辺はexpressの機能になります。

Trelloは初めにHEADリクエストを受ける必要があるので、適当に何かを返す関数を定義しておきます。 Google App Scriptはここの処理が上手くできてなくて死んでました。

WebhookはPOSTで来るので、robot.router.postに目的の処理を書きます。 やってる事としては、Webhookで来るリクエストをチェックしてノイズは弾いて、問題なければメッセージを生成してSlackにメッセージを送るだけです。 公式のドキュメントにパラメータの説明が特に無かったので、リクエストを受け取りながらパラメータは確認しました。

 

メッセージ

Slackは画像のURLを貼ると自動で展開してくれるので、るるてあさんのTwitterの画像のURLをくっつけて送りつけてます。こんな感じです。

f:id:jackale:20171203235938p:plain

URLは適当にファイルに羅列しておいて、そこから抽選します。汎用的な「えらい!」と条件付きな「土曜日なのにえらい!」みたいなタイプがあるので、条件付きの場合は条件に合致したら使うようにしてます。(間違ってくる事があって実装ミスってるのだけど面倒で直してません)

同じURL連投すると展開されないので、ハッシュを後ろにつけるとかしないといけませんが、今の所困ってないので何もしてないです。

まとめ

コウペンちゃんが可愛いので、タスクを完了しようというモチベアップにはなりました。あとタスクをちゃんとDoneリストに移動する習慣づけにもなったかと。 ただ、Doneリストに移動した瞬間にコウペンちゃんからメッセージが届くので機械的な感じが否めないのでどうにか解消したいです。

あまりに酷いのでそのうち書き直します。 >> 書き直しました。

明日(今日)は@gurapomuくんで、「リアルお料理対決をした話」です。

LaTeXファイルをGithubにpushしたらCircle CIでPDF生成するようにした

1月に入り、卒論を書かざるを得ない時期になってきた。現実逃避のためにGithubにpushしたらPDFがビルドされるようにした。(一度くらいCIツール使ってみたさがあった)

(普通の研究室は12月中に色々やってるみたいだが、弊研究室はふわふわしていてこの時期に卒論を書き始めていたりすることもある。)

同じことをやっている人はたくさん居るだろうけどいろいろつまづいたので備忘録を残しておく。

概要

Githubにpushしたら、CircleCIが動いてPDFを生成してデフォルトブランチとは別なrelease-pdfブランチに生成したPDFをcommitしてpushしてくれる仕組み。 release-pdfブランチを見れば最新のPDFが見られる寸法。

やったこと

主に次の2つのサイトを参考にした。

retrage01.hateblo.jp qiita.com

Githubリポジトリを準備

人様に見せられるものではないので学生の権利を濫用してPrivateでリポジトリ作成。
先輩の作ったテンプレのtexを頂き、とりまコミット。main.tex内で色々includeする形になっているのでmain.texをビルドすればOKな状態。

CircleCIの準備

サイトでポチポチするだけの作業。

参考:GitHubとCircleCIを連携させる - Qiita

.circleci/config.ymlの追加

CircleCIではYAMLファイルを利用して設定する模様。インデントをタブにしてハマったので注意(スペースしか受け付けてくれない)。 あと、2.0で記法が大分変わった模様。

version: 2
jobs:
    build:
        docker:
            - image: paperist/alpine-texlive-ja
        steps:
            - run:
                name: Installing dependancies
                command: |
                    apk add --update git
                    apk add --update openssh
            - run:
                name: Git settings
                command: |
                    git config --global user.email 'XXXX@YYYYY'
                    git config --global user.name 'XXXX'
            - checkout
            - run:
                name: Generating current version
                command: |
                    latexmk main.tex
                    cp .latexmkrc ~/.latexmkrc
            - run:
                name: Commit to repository
                command: |
                    git checkout release-pdf
                    cp main.pdf dst/main.pdf
                    git add dst/main.pdf
                    git commit -m "[CircleCI] Generate PDF @$(date +'%Y/%m/%d %I:%M') [ci skip]"
                    git push origin release-pdf

CircleCIではDockerを利用してテスト環境作る様子(Dockerよく知らない)。 イメージは参考元に倣ってpaperist/alpine-texlive-ja1をお借りした。 (名前がよく見る人だった)

gitとpush用にopensshを追加で導入。.latexmkrcはよく分からないので適当にggってヒットした記事をコピーアンドペーストした。元のtexファイルがupLaTeX前提だったので、upLaTexを利用することにした。

考えるのが面倒なので、作業ブランチは1つだけ2にして、ビルドしたPDFの設置は別ブランチにした。適当にやると差分が出てcheckoutに失敗したりFast-forwardじゃないって言われてpushに失敗したりして面倒だった。[ci skip]って入れないと無限ループするみたいなので注意。(これを入れたコミットはテストが走らない)

CircleCIとGithubSSH用の鍵追加

一番つまづいた。
参考元にあるように、初期設定だと鍵がread-onlyなためpushができない様子。ERROR: The key you are authenticating with has been marked as read only.みたいなこと言われる。 色々調べて両サイトに登録してたのだが一向に反映されずにキレてたが、CircleCIのProject settings > PERMISSIONS > Checkout SSH keysのAdd user keyみたいなところポチったらさっと両方に登録されて上手くいった。
URLでいうと、https://circleci.com/gh/<username>/<repository>/edit#checkout

英語分からず割と適当にやったので合ってるか分からないけど、ちゃんと調べるのは卒論書き終えてからでええなってなっている。(プライベートリポジトリなので権限周りが面倒だった可能性がある)

まとめ

これで単一URLで最新版のPDFが見られるようになったので便利。あとは、句読点面倒で設定していないので自動で置換するようにしてもいいかなと思ってる。config.yml弄ればできそうだし。 特に通知考えてなかったので、Slackに流したりしてない。気が向いたらやる。

ただ、結論としてこんなことより卒論を書く方に注力すべき。  

 

 

 

 


  1. 3846masa.hatenablog.jp

  2. クソどうでもいいけどmasterではないので、bachelorって名前に変えた。

2017年の振り返り

今年は完全に虚無の年なので特にこれといった思い出や取り組みが思い出せないけど、とりあえず振り返ってみることにします。

 

jackale.hateblo.jp

 

2017年始まった時点では大分元気だった様子が見られます。今は完全にそんな元気はないです。

とりあえず目標っぽく掲げた次の4項目。

Googleカレンダーにタスクとか含めて予定を細かく書いてく

今まで大きな予定しか書いてなかったが、1日の時間の使い方が下手すぎるので細かく予定詰めておきたい。

脳内にあることはすべてメモ等に吐き出す 

あれやんなきゃーorやりたいを忘れる、思い出すのサイクルで無限ループしてるので、徹底したい。玉石混交の意思を保ちたい。

 

週に1日はメチャクチャ遊ぶ日を作る(繁忙期を除く)

タスクを均して毎日やるよりかはメリハリつけて取り組んだ方が良さそうという予想に基づく。あの日暇だし今はまだこれくらいでみたいな甘えで結局中途半端なみたいなことがよくあるのでそこを改善する意味がある。あとは、タスク終わってないけどゲームやめられない〜よりよっしゃ今週頑張ったし一日中ゲームしたるでの方が精神衛生上良いと考えている。

 繁忙期は読めないので、柔軟に対応していきたい。

 

意識して積極的に運動する

朝走るぞとか継続してくぞとか言ってもしょうがないので、気付いたらやってくを繰り返して抵抗をなくしていくのでも前進と捉えたい。

 

 

1つ目は、以前よりかはGoogleカレンダーを活用するようにはなったのでまあ良いことにしたい。

2つ目は、メモは割りかし取るようにしたり、Trelloを使いはじめてタスクをできるだけ可視化するようにしてみたりはしたので少しは良くなったかもしれない。

3つ目は、一週間の過ごし方は、働く、昼まで寝る、夕方大学行く、帰るだったのでダメですね。来年に持ち越しです。

4つ目は全く継続されてないのでダメです。来年度はジム通おうと思います。

 

今年は心身ともに虚無の年としたので、来年と言うか来年度は315の年にする予定です。

あと1ヶ月強で全てが終わるので、それまでは虚無っていこうと思います。

 

 

デザイン変えた

なんかこのブログ重いなと思ったので昔に入れたよくわからんブログパーツを削除して、気持ち変えたいのでデザインテーマを変えた。

変えたと言ってもちらっとggってこれ良さそう!って言うの適用しただけなので、工夫もへったくれもない。

 

ちなみにこれです。

hitsuzi.hatenablog.com

 

もっと色々勉強してアウトプットする機会を増やさなきゃと思いつつ一向に取り組めてない。卒業したら個人ページでも作ろうかな。

 

最後にwhywaitaと会ったのいつだっけ...

 これはwhywaita Advent Calendar 2017の16日目の記事です。

 

毎年、特に考えもせずwhywaita Advent Calendarの枠を取り続けているaltcolonyです。

whywaitaと会わなすぎて顔を思い出そうとするとFacebookの顔アイコンしか思い出せません。最近、アイシールド21を読んでいるので、オタクライブでラインマンとしてブロッキングしているwhywaitaくんの姿が捏造されつつあります。

簡単に自己紹介するとTUAT所属の亡霊です。whywaitaとの繋がりはもう何だったか覚えてないです。でも僕のTLに居るので友達です。今更ですが!UECで枠取ってるの僕くらいしか居なさそうだし、そろそろ自重すべきではと言うことに気づき始めました。

 

とりあえず枠は取ったので何か書きます。(今からネタを考える)

 

アイドルマスター

前二回僕はアイドルマスターについて書いていたのですが、今年は心をやられ、MPが足りず熱心にアイドルマスター活動に勤しめていないので特にネタがないです。今年は、挙げるとしたらミリオンライブが終わってしまったのが結構大きな出来事かなと思ってます。最後に久々にプレイしましたが、なんか惜しいなぁと言う思いです。UIとかUXとか。ミリシタでがっぽり稼いで、HTML5のよくわかんないプロジェクトで復活したりしないかな。あの狂気の行き場が今後どうなるのかの行方を見守りたい気持ちです。

 

ネタがない

アイマスが使えないので、ネタがないです。現実逃避にネットサーフィンしてたら、ガチャについてのスレを見かけたので一言物申すかって気持ちになったのですが、まとまってないのでやめます。

 

自作コマンド

ネタがないので最近気になってること書きます。

作業とかしてると、これコマンドでできるようにしたいな〜〜〜〜って時があると思います。whywaitaくんもあると思います。そんな時、シェルスクリプトで書いたりするんですけど、シェルスクリプト書くのしんどいです。ちょっとした文字列処理とかオプションのパースとかが面倒だし、コマンド化したい時ってあんまりそれに時間もMPも消費したくないのでいつも辛い気持ちになります。

 

ということで、最初はRubyで書こう!と思ってThorなるものを使ってみたのですが、Hello World表示するだけでワンテンポ待たされて辞めました。「Ruby Thor 遅い」で、ggったら同意見が出てこなかったので気のせいかもしれないです。

でも、よくやるちょっとした処理をコマンド化したいのでちょっと遅いだけでもストレス積もり積もるかなと思って辞めました。他にいいのないかと調べた結果、最近ではGo使ってたのですが、どうも慣れなくてもやもやしてました。続ければいつかは慣れるかなと思ってたのですが、最近Crystalなるものを知ったのでこれやってみようかなと思います。

 

Crystal

参考:http://ja.crystal-lang.org/

Rubyっぽい感じで、クロスコンパイルできるっぽいので僕の求めてた感じが出てて良さそう。

 

とりあえず、`puts "Hello World!"` を.rbと.crでそれぞれ保存して、実行したら当然だけどバイナリ実行した方が早かったので良いです。

これ良さそうなので今度試します。

at-grandpa.hatenablog.jp

 

肝心のCLIツールをいい感じに書く技術はないのでどうにか磨いていきたいです。なんかオススメの本とかあったら教えて欲しいです。

 

まとめ

ネタがないなら、枠を取らない。

今度、わいくんとご飯を食べる。

早く卒業したい。

 

明日はkyontanさんです。 

 

(所要時間5時間、うち4時間半はアイシールド21の閲読)