読者です 読者をやめる 読者になる 読者になる

スルメのブログ

Rustとか近況とか

帰省時に怠けないように意識したこと

初めに

いつも帰省時にいろいろと怠けて開発とか勉強とか捗らないので、今回の帰省を淡々とまとめるだけのブログです

持ち物

まず最初に持ち物ですがノートパソコン(Linux)と技術書(3冊程度)でした。
技術書に関してはこんな感じです

webを支える技術→読んでる最中だったので
zshの本→terminal周りの整備したりCLIで生きたかったから
機械学習理論入門→機会学習勉強会の資料作成のため

実家の環境

次に実家の環境なんですけど、これのおかげで捗った感はあります。

メリット
 ・ものがないので開発や勉強しかすることがない
 ・ネット回線がアパートより100倍くらい速い
 ・東京が近いのでカンファや勉強会に行きやすい
 ・家事しなくても良い
デメリット
 ・たまに家族の時間に合わせないといけない
 ・親に自分の予定とか報告するのが面倒

こんな感じですね

一日の予定

帰省というと高校の頃の友人とか遊ぶこともあるので、それ以外の何も予定のない一日を纏めますと

6:30   ~  7:00     起床&&はてなブックマークを眺める
7:00   ~  12:00   読書&&terminal整備
12:00 ~  13:00   昼飯
13:00 ~  17:00   猫と戯れながらRustのアプリ開発とか
17:00 ~  18:30   親と会話しながらはてブとか最近の予算委員会の動画を見たり
18:30 ~  20:00   夕飯
20:00 ~  23:00   未消化があれば切りのいいところまで消化
23:00 ~              風呂&&就寝

こんな感じです。

良かったことと悪かったこと

良かったこと

 ・本が3冊程度
 ・Linuxなので開発気運がかなり高まった
 ・生活費がめっちゃ浮いた

悪かったこと

 ・ノトパが壊れた(替えを用意してもLinux入れる一式を置いてきた)
 ・技術系の話を友人と気軽にしたいが、厳しい
 ・Skypeが不便(Linux)

まとめ

今回の帰省は色々な面で「成功」したような気がします。
ノトパ壊れたので最近読書してますが、本を読んでいて「持ってくる本はこのくらいで良かったな」と感じました。多分これより多かったら読む気が失せたり選択に時間を取られるように思いましたし、これより少ないとほぼ「持って行かない」ようなものなので...
あくまで自分は結構ぐーたらしてる人間なので、そんな自分が今回は良かったと思えた私見のようなものなので絶対ではないです。参考程度にどうぞ。

gwjpmsに行ってきた話

先日gwjpという女性コミュニティがありまして、今回のカンファレンスは男性可ということで行ってきました

geekwomenjapan.github.io

簡単にどんな話を聞いてきたかとか感想をまとめます。

ビジネス現場におけるデータ活用~Pythonを添えて~
(真嘉比 愛さん:@a_macbee)

ビジネス現場においてデータ分析が如何に重要か身にしみる発表でした。
データから人間の行動心理を読み取りそれをビジネスに活かすようなお話だったり、データ分析の内容や実態についてだったり、内容の濃いお話でした。今振り返るとカンファレンスの中で一番濃い内容だったと思います(個人的見解)。

AIを簡単に使える時代がやってきた!
開発者のためのAI活用入門(大森 彩子さん:@ayako_omori)

簡単なAIの話やMLの話などなどとてもわかり易かったです。独学でMLなり学ぶ前にこのプレゼンを見たかったというのが率直な感想です。後半では実際にどのように活用されているかや、いろいろなweb apiの話だったり面白いお話でした。

資料:https://doc.co/kPmLD6

IT業界で働くためのtips
(みほさん:@omame19861 / 犬山奈穂さん:@NahoInuyama)

一大学生として結構興味を持ってたお話でした。
前半のみほさんの方では「知識のスキマを埋める」というお話で、外部ライブラリや通信方式、フレームワークなどなど理解しないで使っているのは非効率的というようなお話でした(雑にまとめた感)。僕も知識のスキマを埋めるべく帰宅してからvimrcを書き直しました。
後半の犬山奈穂さんのお話では、女性のあり方のようなお話でした。男である僕とは無縁と思っていましたがそれでも学ぶ所は多々あったように感じます。

使いたくなるクラウド、選べるクラウド
(大平かづみさん:@dz_)

最近Rustでwebやりたみあってクラウド触らなきゃって感じしてるので行ってきました。このセッションではAzure/AWS/BluemixのPaaS, FaaS, IoT, Cognitiveの違いだったりそういうお話でした。これから触ろうとする方や他のクラウドを触っていない方にとっては面白いプレゼンでした(僕がそう)。

感想

こういったカンファレンスは今回が初めてなのですが、楽しくて刺激的な一日でした。
新しい知識が得られるということは勉強会・カンファレンスにおいては当然なのですが、知識以外にも多くのことを発見できた良い機会でした。

あと思ったこととしてMacBookユーザーめっちゃ多くて 、ちょっと悲しかったです。

諸事情で懇親会行けなかったの本当に悲しいです...

ps) 日本マイクロソフト本社に入れてちょっと嬉しかった()

 

 

vimでRust書いてたら出てきたWarningについて

みなさんエディタは何を使ってますか?
私はvimです。

最近RustにハマってるのでvimでRustを書きやすくするためにプラグインを追加で入れました。
qiita.com

導入に関してはこちらが分かりやすいです。

rust.vimを入れてRustのコードを書いて保存した時

The option Z is unstable and should only be used on the nightly compiler, 
but it is currently accepted for backwards compatibility; 
this will soon change, see issue #31847 for more details.

というwarningがQuickfixに出てきました。
最初はプラグインのエラーだと思って同じ現象が起きてるところのissueを見たんですけど...
github.com

すでに改善されているようです...
となると自分が導入する前に入れていたプラグインと競合している可能性が浮上してきました。

原因がvim-watchdogsでした。
github.com

どうやらrust.vimvim-watchdogsが競合していたのが原因だったようです(?)
特定のファイルに対してwatchdogsを無効化できるようなので設定しておきました。

let g:watchdogs_check_BufWritePost_enables = {
\           "rust" : 0
\}

これを書き足したら無事に治りました。
快適なvim生活に一歩近づきました...

自宅のネット回線が重すぎるので調べてみた

昨年度の夏ごろから急に夜間での回線速度が落ちた気がしました。(昼は安定して使える)

以前は普通に使えたのですが、ある日を境にスマートフォンの通信速度制限なみの速度になっていたので、とりあえず速度を計ってみました。

上り:11.22Mbps

下り:470Kbps

これはスマホでの測定なので無線ですが、一瞬目を疑いました。

親とも相談したのですが「居住者が増えて回線が込み合ってるのでは?」と言われ、様子見という形になりました。

そして少したって、遅すぎるので原因を調べてみました。(もっと早く調べろ)

原因として
・単に光回線が込み合っている
・プロバイダーが遅い

この二つのどちらかであると思い調べたところ、プロバイダーを介さないで純粋な光回線速度を計測できると知ったので試してみました。

note.chiebukuro.yahoo.co.jp

ここに詳細があります。

 

結果から言うと
----------------------------------------------------------------

プロバイダーを介さない速度(下り):84.4Mbps
プロバイダーを仲介する速度(下り):714.45Kbps
----------------------------------------------------------------

!!??

100倍以上違うので、もはや驚きですね...

ここでプロバイダーの名前で調べると、まあ酷い評価が大量に出てきました()

とりあえず親に相談してプロバイダーを変えてもらいたいと思います。

 

※追記
ちなみに過去に一番遅かった時の記録が

上り:6.01Mbps
下り:0.02Mbps

こうしてみるとヤバいですね()
.

 

caperを使って簡単に簡易的な電卓を作る

この記事はAizu Advent Calendar 2016の15日目の記事です。

はじめに

艦これイベントとテストとHaskellにどっぷりハマって内容薄いです(本当にすいません)。

数日前、構文解析に使うパーサジェネレータを探していたらcaperを見つけました。

構文解析?パーサジェネレータ?なにそれ?みたいな方はこちらへ
構文解析 - Wikipedia

caperとは

caperとはモダンでクリーンなC++コードを出力するパーサジェネレータで、C++以外にもJavaScript/C#/D/Java/Boo/Ruby/PHP/Haxeにも対応しているみたいです。
こんな感じで定義できます。

非終端記号名<非終端記号の型> : [セマンティックアクション名] 項 項
                             | [セマンティックアクション名] 項(0) 項(1)
                             | [セマンティックアクション名] 項(0) 項 項(1)
                             ;

(0)とか(1)とか付けるとセマティックアクションに引数として渡すことができます。

詳しくはこちら。

caper -- LALR(1) パーサジェネレータ

パーサジェネレータ"caper"の紹介 - Qiita
本題

公式のチュートリアルに電卓プログラムがあるのですが(ここ)、cpg(文法ファイル)をよく見ると

%token Number<int> Add Sub Mul Div;
%namespace calc;
%dont_use_stl;

Expr<int> : [Identity] Term(0)
          | [MakeAdd] Expr(0) Add Term(1)
          | [MakeSub] Expr(0) Sub Term(1)
          ;

Term<int> : [Identity] Number(0)
          | [MakeMul] Term(0) Mul Number(1)
          | [MakeDiv] Term(0) Div Number(1)
          ;

8 + 3 * 7 とかの計算はできるみたいですけど ( 8 + 3 ) * 7 は未対応ですね...
ということで対応させました。

%token Number<int> Add Sub Mul Div Begin End;
%namespace calc;
%dont_use_stl;

Expr<int>     : [Identity] Term(0)
              | [MakeAdd] Expr(0) Add Term(1)
              | [MakeSub] Expr(0) Sub Term(1)
              ;

Term<int>     : [Identity] Primary(0)
              | [MakeMul] Term(0) Mul Primary(1)
              | [MakeDiv] Term(0) Div Primary(1)
              ;

Primary<int>  : [Identity] Number(0)
              | [Negative] Begin Sub Number(0) End
              | [Identity] Begin Expr(0) End
              ;

こんな感じでPrimaryを新しく作ってNumberと(Expr)を[Identity]で返せば綺麗ですね。
ちなみにBeginは ' ( ' を表してEndは ' ) ' を表してます。
ついでに(-1)なども適正に処理されるようにしました
実際に上手く動作するか確認しましょう。

f:id:slme9364:20161214114449p:plain

上手くいきました。

ここまで来て纏めたらあまりにも内容が薄すぎたので本来整数にしか対応してませんが小数に対応させました。cppファイルを一から作るのも面倒だったので公式のサンプルを引用して一部変更させました。変更点としては計算の結果をdouble型にしてparser.accept(v)のvをdouble型に変更などなど。upcast, downcastも適宜変更しました。

%token Number<double> Add Sub Mul Div Begin End Point;
%namespace calc;
%dont_use_stl;

Expr<double>     : [Identity] Term(0)
                 | [MakeAdd] Expr(0) Add Term(1)
                 | [MakeSub] Expr(0) Sub Term(1)
                 ;

Term<double>     : [Identity] Primary(0)
                 | [MakeMul] Term(0) Mul Primary(1)
                 | [MakeDiv] Term(0) Div Primary(1)
                 ;

Primary<double>  : [Identity] Factor(0)
                 | [Negative] Begin Sub Factor(0) End
                 | [Identity] Begin Expr(0) End
                 ;

Factor<double>   : [Identity] Number(0)
                 | [MakeDouble] Number(0) Point Number(1)
                 ;

MakeDoubleはこんな感じで書きました。

double MakeDouble(double x, double y){
  int nod = log10(y) + 1;//桁数を求める
  for(int i = 0; i < nod; i++) y /= 10;//小数点以下にする
  return x + y;
}

f:id:slme9364:20161214114528p:plain

こんな感じで綺麗に計算結果が小数で出てくれました。

doubleに対応させただけだと微妙なので三角関数平方根にも対応させました。
非終端記号名が思いつかなかったので適当にAdvancedにします。

%token Number<double> Add Sub Mul Div Begin End Point Sin Cos Tan;
%namespace calc;
%dont_use_stl;

Expr<double>     : [Identity] Term(0)
                 | [MakeAdd] Expr(0) Add Term(1)
                 | [MakeSub] Expr(0) Sub Term(1)
                 ;

Term<double>     : [Identity] Advanced(0)
                 | [MakeMul] Term(0) Mul Advanced(1)
                 | [MakeDiv] Term(0) Div Advanced(1)
                 ;

Advanced<double> : [Identity] Primary(0)
                 | [MakeSin] Sin Primary(0)
                 | [MakeCos] Cos Primary(0)
                 | [MakeTan] Tan Primary(0)
                 | [MakeSqrt] Sqrt Primary(0)
                 ;

Primary<double>  : [Identity] Factor(0)
                 | [Negative] Begin Sub Factor(0) End
                 | [Identity] Begin Expr(0) End
                 ;

Factor<double>   : [Identity] Number(0)
                 | [MakeDouble] Number(0) Point Number(1)
                 ;

こんな感じで動きます。

f:id:slme9364:20161214114637p:plain

もちろん括弧は最優先処理になっているのでこんな書き方でもきちんと出力されます。

f:id:slme9364:20161214114654p:plain

三角関数平方根を使う際はNaNに気を付けないとですね。
やろうと思えばlogとかも行けたり階乗、冪乗も簡単に追加できます。
簡単に変更できるのは便利ですね。

まとめ
公式のサンプルを拡張させていったらcppファイルが結構ぐちゃぐちゃになってしまったので非公開にしました。近いうちに全部書き直して綺麗になったらGitHubにあげようと思います。
今回本当に軽く触った程度なのでなんとも言えませんが、結構扱いやすかったです。

バイト辞めた後の生活への影響など

ベンチャー企業バイトしてましたが結構前にやめました。

暫く経ったので生活にどんな影響があったのか書こうかなと

  • 早起きになった
    いままではタスクで夜遅くまで作業してたり、疲れとかで早起きできず大学の1限(9:00から)に出席するのがつらかったのですが、最近は6:00に起きるようになり活動時間が増えました。

  • Slackの通知音に恐怖しなくなった
    バイトの連絡がSlackで、自分のタスクとかの急な連絡がシフト外に来ることが当たり前なうえに急な依頼とかされることがありSlackの通知を聞きたくなくなるような感じでしたが、最近はまともになりました。ただ、今でも友人のSlackの通知音に反応してしまいます。

  • あまり愚痴らなくなった
    バイト辞める直前くらいの時とかは結構Twitterに愚痴ってしまったり、友人などにも色んな愚痴をしてしまってたのですが、最近はかなり量が減りました(多分ほとんどしてない(?))。

  • 贅沢できなくなった
    バイトをやめたのでバイトからの収入は断たれてる状態です。とは言ってもここで言う贅沢は本が一冊買える程度です(5000円くらい)。

こんな感じで色んな変化がありました。
バイトやめたらモチベ下がりそうだと思ってたんですけど、意外とバイトやってた頃とモチベ的なものはそこまで変化はないです。(寧ろ今のほうがモチベ高い)

ここに書いてあることは、あくまでも僕個人の変化なので絶対こうなるとは限らないので注意してください()
お金が欲しいのでバイトしたいけど、個人的に接客業はしたくないなぁ

言語実装したいなって話

唐突にプログラミング言語を作りたくなったので勉強してます。

まだ勉強中ですが、正規表現を用いた字句解析とcaperでparser作って文法規則を作って構文解析しようかなと。caperがC#にも対応してるみたいなのでC#C++どっちで実装しようか悩んでます。正直GCほしい。