Rokiのチラ裏日記

学生による日常のログ - 技術的な内容を含みません。そのような記事はこちらから。http://roki.hateblo.jp/

ゆにてぃ

はとても楽だ。

昨晩 Unity には初めて触ったのだが、これはそれから一時間ほどで出来たものだ。アセットには友人のモデルを入れてみているわけだが、こんなにも簡単に動くものだとは思ってもみなかった。

夏じゃぁ〜

近況報告まとめマン。

あと、動きがウケる Atom プラグインを見つけた。筆者は Vim ばかり使っていて Atom を一切触ったことがなかったので操作になれていないのだが、取り敢えず遊びたかったので Atomactivate-power-mode を新規インスコした。動きを撮って見た。

youtu.be

中身は何でも良かったのだが、特別ネタがないのでクイックソートを書いている。それにしてもガタガタしてコンボ数が上がっていくのはウケる。まぁただこれきり、 Atom には触れてないのだが。

レポート課題の制作に何を使うか

学生なら、一単元の最終課題のレポート提出を必ず一度は体験するはずだ。そこで、効率的なツールを探したくなるものだろうから、その一例をここに記して見る。

正直、vim教のようにvimをただゴリ押しするのも狂気じみていて引けるのでアレなのだが、事実とても良いエディタなのだからしょうがない。ずっとvimばかり使っているし、操作性はピカイチに感じる。markdownは少ないタイプ数で文書構造体を表現できるので、まとまりやすさと手軽さ的にこれ以上のものはないだろう。markdown-pdfは、markdownで書かれたテキストをpdfに変換するツールだ。一発コマンドを打てば良いだけなので、最高の効率を誇ると言えるだろう。 最後のplantumlは、ダイアグラムをテキストから出力できる優れものだ。しかも、有志によってvimプラグイン化されている。これらを使えば最高の効率を手に入れる事ができる。尚、出力されるダイアグラムは以下のような感じだ。

とある演習の授業で、「GUIが使えないのはクソだ!」と、自称ウェブサイトエンジニアを目指しているとの事らしい人が述べていた。何故なのか問うと、効率的で、楽ではないからだそうだ。効率的で楽ではない理由を問うも、述べたのは私が効率的で楽であるように思う理由だったので、そう断言されると、正直「あぁ、はぁ、そうですか」としか出てこなかった。
また、とある意見交換会*1で知り合った人は「よくyoutubeでジャズの再生リストを無限ループさせています」と述べていた。しかし、彼女はこれに対して以下のような問題を抱えていた。

  • PCのスペックが非人道的な非力さのあまり、youtubeを再生しながら他の作業をするとどうも処理が追いつかなくなる。
  • youtubeのプレイリストでは、ランダム再生についての動作が不安定である。ランダムになる動画とならない動画がある。
  • youtubeのプレイリストをローカルに保存することができない。

まず、再生に使っているのはブラウザだ。最近のブラウザは、リソースを贅沢に使う傾向にある。そこで私は、単に再生するだけなら、さらに音楽を聴くという用途だけならブラウザの全機能を必要とはしないので、例えば、youtube-dlとmplayerでストリーミング再生をしてはどうかと提案した。しかし、一々CUIを打ち込むのも億劫だ、そしてランダム再生は如何にして実現するのかと述べた。それもその通りだ。それを実現するには、適当なスクリプトを用意してやる必要がある。
そこで、方針として、まず適当なテキストデータにランダム再生させたい動画らのyoutubeのID(watch?v=の部分だ)を一行単位で羅列させ、適当な擬似乱数を元に羅列された内の1つのIDを選択し、youtube-dlとmplayerで再生させることにした。言語は何でも良いのだが、一旦シェルスクリプトとして書いて渡した。

#!/bin/zsh

while :
do
    line=`wc -l jazz.list | sed -e 's/[^0-9]//g'`
    echo -e "\033[0;36mInput ID: $line\033[0;39m"
    rnd=$(( $(od -vAn -N4 -tu4 < /dev/random) % $line ))
    rnd_id=`sed -n ${rnd}p jazz.list`
    echo -e "\033[0;36mSelected ID: $rnd_id\033[0;39m"
    youtube-dl "https://www.youtube.com/watch?v=${rnd_id}" -o - | mplayer - -novideo
done

さて、後はこれを動かせば良いだけだと述べると、できればバイナリで欲しいとの事。そうかい、と思いつつもC++で書き直した。それが以下だ。

#include<random>
#include<fstream>
#include<string>
#include<boost/optional.hpp>
#include<cstdlib>
#include<iostream>
#include<csignal>

boost::optional<std::vector<std::string>> input(const char* file_name)
{
    std::ifstream ifs(file_name);
    if(!ifs)return {};

    std::string str;
    std::vector<std::string> file;

    while(std::getline(ifs,str))file.emplace_back(str);
    return file;
}

std::size_t get_random_value(std::size_t max)
{
    std::random_device seed_gen;
    std::mt19937 engine(seed_gen());
    std::uniform_int_distribution<> dist(0,std::move(max));
    return dist(engine);
}

int main()
{
    using namespace std::string_literals;

    const auto inputer=input("jazz.list");
    if(!inputer)return -1;

    for(int ret=std::system("echo \"Starting...\""); !WIFSIGNALED(ret) and (WTERMSIG(ret) != SIGINT or WTERMSIG(ret) != SIGQUIT);){
        const std::string& url_id=inputer->at(get_random_value(inputer->size()-1));

        std::cout<<"Input IDs: "<<inputer->size()<<std::endl;
        std::cout<<"Selected id: "<<url_id<<std::endl;

        const std::string url="https://www.youtube.com/watch?v="s+url_id;
        const std::string command="youtube-dl \""s+url+"\" -o - | mplayer - -novideo"s;
        ret=std::system(command.c_str());
    }
}

これで、快適にjazzを聴きながら作業できるようになったようだ。

カメラ

最近、ほんの少しではあるがカメラに関する知見を得た。今までは、カメラなど自分にとっては全く興味の唆られるものではなかったが、知見を得た事で以前よりかはマシになった。

画像はGH3にZoom h6とレンズ達だ。Zoom h6は、彼女が水の音を撮りたいとの事で同じく学校から借りたものだ。写真には写っていないが、個人的にはハマたレンズは広角単焦点12mmレンズだ。ISOを下げつつ夜景を明るく広く撮れるのが気に入っている。

何より、画像圧縮に関する基本的な概念をおさえる事ができていたのが、知見の広がりに大きく貢献した。

さて、折角撮るのであれば、良いものが撮りたいと思うのが人の性だ。しかし、自分としては、「雰囲気的に良い」や「センス的に良い」というような曖昧で脆いマスターベーション的な理論の基に鼻を天狗にするクソが嫌いなので、”良い写真”というものに関する曖昧でない理論付けが欲しい。そこで、以下のような構図に関する専門書にも目を通したいと思っていたりしている。ただ、今は他に読んでいる本があるので、後回しとなっているが.

ナショナル ジオグラフィック プロの撮り方 構図の法則

ナショナル ジオグラフィック プロの撮り方 構図の法則

ここ一ヶ月の内の変化は大体こんなものだった。

「近況」を書く

はてなから以下のようなメールが来ていたので、久しぶりに更新する。

最近は、大学の方でも学年が上がり、授業が再開したが、学校に行くという他は特に生活に変わりはない。ただそのせいで、自主研究の時間が少なくなってしまうので、授業のない期間よりも時間を見つける事に注力している。

ただ、たまには技術的な事以外のものに取り組んだ方が良いだろうなという事で、つい最近ロクロ回しをしてきた。

両脇の二つが彼女の作品で、真ん中の小さいものが私の作品だ。器の大きさによって器の大きさを示しているらしい。

そんな事以外は、古くからの友人と一度飲みに行ったぐらいだろうか。互いに近況を報告しあったりとまぁ普通の男同士の飲みだ。飲みの後は、自宅で友人と凄く昔にやっていたFPSゲームをゆったりとやった。まぁ、たまにはこういう時間も必要だろう。

ゲームは肩が凝るが脳は緩む

また久しぶりにFPSゲームを起動し、ゆったりとBOTを打ってみた。まぁ正直そんなに上手くないのだが、日記の記録としてアップロードしてみる。階級だけが何時の間にか紫になっていたが、腕前はずっと変わっていない感じだ。

さて、話は変わるが、ここのところ立て続けに体調を崩していて、体調的にかなり苦しい時期だった。まあ毎年この時期は何かと体調を崩している事が多いのだが(去年はインフルエンザに侵されていた)、大抵一週間もすれば完治するし、毎回体調が不調になる時のあの感覚は同じものだったのでまあ安静にしていれば治るか、と思えていたものだが、今年は一味違った。

私は現在大学生であり、彼女と同棲している。生活費や食料を不定期にお互いの親が送ってくれる事もあり、とても有り難く命を紡ぐような思いで頂くが、それ以外の殆どは自己負担である。よって、二人共々労働しなければならない。労働を辞めれば、アルバイトという雇用形態しか受け入れられない大学生という立場上、時給というシステムによって収入に直接響く事となるので、どんなに体調が悪かろうと暮らすためには働かなければならない。まあ、大々的に書いているように思えるかもしれないが、これは当然の事で社会の当たり前のシステムである。

私もそのシステムに則り、少しやちょっとの体調不良では休めまいと、出勤を何度かしていたのだが、その内の一回、私は駅のホームで意識を失い倒れてしまった事があった。公共の場で倒れるというのは、中学の頃のサッカー時代を除けば初めてだった。

そして倒れてからつい一昨日まで、体調は優れなかった。どう優れなかったかというと、私は基本的に毎度鼻→喉とやられてしまう人なのだが、今回も案の定そのルートだった。

もうこのルートは何度も経験しているので、私は点鼻薬と、ペラックT錠という喉の薬を常備している。いつもの通り摂取するわけだが、全く良くならない。取り敢えずそのまま寝て起きると、これはヤバいと、自分も何か察したのだろう、起きてすぐさま「病院に行く」と彼女に伝えた。その時は、彼女も私よりは症状が軽かったが、私と同じように喉の痛みがあったようなので二人して近くの内科へ行った。そこから、私は少し意識が朦朧としていたのであまり覚えていないが、喉の状態は割と深刻に爛れていたようで、一歩遅ければ入院しなければならなかったかもしれない程だった。そこからフラフラと、なんとか自宅に帰宅し、適当に何か物を腹に詰めて直ぐさま薬を摂取し眠りについた。ここまでの間、不思議と、何故か熱は全くなかったのだ(というか、ずっと35.4℃で寧ろ低体温だった)。

そしてそのまま翌日…前日よりは良くなっていたような気もするが、いつも通り作業をしようとPCの前に座ると、なんだかやはり意識というか視界というか、目の前がずっとぼんやりとしている感覚はまだまだ続いていた。熱があるわけでもなく、酷い部位は喉だけなので、何が原因なのかさっぱり分からず、しかしただ作業は中止するわけにもいかなかったためしばらくやっていたのだが、やはり意識が定まらないというか、考えている事が全く纏まらないような感覚がやってきた。限界を感じて就寝した。

….というのが、実に2週間半程は続いていた。脳障害でも抱えているのかとも思ったが、取り敢えずここ三日間で回復したように思えたので、取り敢えず治ったとしている(本当は検査でもした方が良いのかもしれないが、そんな金も時間はどこからも湧いてきやしないのだ)。

まあ、今回の不調は、少なくとも良い経験とは言えないが、健康が大事である事は改めて実感した。よって再発防止を考えなければならないわけだが…

取り敢えずここ何日かは、食生活を見直すように意識している。自炊をする時間がない時が多いので(仕事がお互いに休みである時、大体3days/1 weekぐらいの頻度では自炊できてはいる)、やはりコンビニに売っているものを食べる事がとても多いのだが、例えばレタスがどっさり入っているサンドイッチだとか、グリーンスムージーだとか、ヨーグルトだとかいったものを最近はチョイスするようになった。まぁただ、グリーンスムージーとかは、普通のペットボトル飲料とかと比べると値が張るので毎日というわけにもいかないのだが…まぁ、そういう低レイヤーな部分をなんとなく心がけてはいる。

これから始めたいのは、やはり運動だ。中学三年まではサッカーを、高校の途中まではバンドをやっていた身なので、まぁ…アレなのだが、最近は全くと言って良いほど体を動かしていない。これからまた夏が近づいてくるわけだし、鍛えたいものなのだが、何しろ本当に時間がない。…まぁ時間は作るものというのは、とてもよくわかるのだが、その作った時間を今は作業に費やしているのでこれ以上の作りようがないのだ。これ以上作ろうとすると、私は間違いなくまた体調を崩すか、例外を投げて異常終了か、はたまた未定義動作をしてしまう。取得できた時間の領域外にアクセスすればout of rangeである。。。 まぁ言葉遊びはどうでも良いのだが、とにかく取り敢えず、今は時間を作るという発想はやめにしてどれかを減らして、そこに運動を持ち込む他はないという事である。そんなわけで、どうにかうまく、良い生活サイクルが開発できるよう試行錯誤している。

まぁそんなわけで、タイトルの内容からどんどん外れて行ってしまった気もするが、こういう事を改めて考えられたのも、無心でゲームを久しぶりにしたからであると思っている。この、1,2ヶ月に一度、用いるものはなんでも良いのだが、無心になる、脳を緩ませるというのは割と大事になって来るのではないかと、これまた思うわけである。


そういえば余談だが、今日yukicoderという競技プログラミングのサービスに登録してみた。

早速6問程解いて見たが(1問はテスト実行なので厳密に言えば5問)、意外と解けるもので少し面白かった(といってもまだ★3ぐらいの問題しか取り組んではいないのだが)。

私は、正直、競技プログラミングをあまり好きではないのだが、たまに頭の体操として解いてみるのも、それはそれで良いリラックスになるような気がした。