新・オノマトペ的備忘録

技術ブログだと思った? 残念、日記でした!

React はじめることになりました

概要

いろいろあって webpack と React をやっていくための学習とか環境設定をしていた.

  • React チュートリアルをさわった
  • ローカルに React + webpack の開発環境をつくる方法をざっくり確認した
  • Emacs でうまくやっていくための設定を調べた

React チュートリアル

公式チュートリアルをなぞった. facebook.github.io CodePen なるサイト上で動く.すごい.でもエラー起こしたときにどこが悪くて怒られてるのかわからない.仕方ない.
ところではじめて本格的に ES2015 な記法に触れたんですけど JavaScript っぽくなさがやばいですね…….でも書いてたら慣れてきた.

ローカルに開発環境をつくる方法

webpack + React

検索して出てきた id:uraway さんの記事『Webpack + React + ES6の最小構成を考えてみる。』を大変参考にさせていただきました🙇🏻
(埋め込みで貼ろうとしたけど URL の途中でリンクとして認識されなくなってしまう……)

ESLint

% eslint --init
? How would you like to configure ESLint? Answer questions about your style
? Are you using ECMAScript 6 features? Yes
? Are you using ES6 modules? Yes
? Where will your code run? Browser
? Do you use CommonJS? No
? Do you use JSX? Yes
? Do you use React? Yes

てな感じ(あとは好み)で設定した上で,eslint-plugin-react の README にあるように,.eslintrc.js に

{
  "extends": ["eslint:recommended", "plugin:react/recommended"]
}

みたいな感じで書き加えてあげると,

import React from 'react';
import { render } from 'react-dom';

import Hello from './components/hello.jsx';
import World from './components/world.jsx';

render(
  <div>
    <Hello />
    <World />
  </div>,
  document.getElementById('app')
);

みたいなコードで React とか JSX 内でのみ使われている Hello, World が未使用だ,という警告が出なくなる.

Emacs でうまくやっていくための設定

なぜ Emacs

JetBrains IDE の学生ライセンスがあるのでそれを使う手もあったんだけど非商用利用しかできないし,現状ちゃんとライセンスを買う気はない*1ので Emacs でやってみることにした.

(use-package web-mode
  :ensure web-mode
  :config
  (progn
    (add-to-list 'auto-mode-alist '("\\.html?$" . web-mode))
    (add-to-list 'auto-mode-alist '("\\.js[x]?$" . web-mode))
    (add-hook 'web-mode-hook
          '(lambda ()
         (setq web-mode-attr-indent-offset nil)
         (setq web-mode-markup-indent-offset 2)
         (setq web-mode-css-indent-offset 2)
         (setq web-mode-code-indent-offset 2)
         (setq web-mode-sql-indent-offset 2)
         (setq indent-tabs-mode nil)
         (setq tab-width 2)
         (setq flycheck-disabled-checkers
               '(javascript-jshint javascript-jscs))
         (when (member web-mode-content-type
                   '("js" "jsx"))
           (flycheck-add-mode 'javascript-eslint 'web-mode))))))

既に use-package を使ってある程度設定してたのでそこにちょちょっと書き足した感じ.もしかしたら要らないものとかあるかもしれない.

まとめ

やっぱりブラウザとか GUI とか見た目に動きがすぐわかるものを書くのは楽しい

*1:本格的に仕事はじめれば必要な道具なので買うなりするとは思う

第 5 回 git challenge に参加してきた #mixi_git

行ってきました. f:id:gionXY:20170128104740j:plain

続きを読む

2017年

あいさつと要約

迎えてしまいましたね.

昨年はいろいろ嫌なことがありましたがここに書く・書けるようなことでもないので特に言及しません.

今年は長かった学生生活もとうとう終盤,最後の 1 年を迎えるわけなので,まあそれを有意義に過ごしたい.

修論もいい感じにビシっと仕上げられればいいな. チャランポランやってた奴とかよりしょぼいもの書いたり発表したり,なんてのは絶対避けたいよなあ. 僕はこの程度の人間なのか,と自分を恥じたくない.自尊心が無駄に大きいんだろうな.

また就活もぼちぼち始まったし,まだいろいろ考えなきゃいけないことは多いんだけど, ここだ,と思えるところに就職キメられるといいなと思っています.

昨年はみなさまにはいろんな形でお世話になりました.今後もお世話になっていくつもりです. こんな僕ですが今年もよろしくお願いします.

抱負

大学における後進の発掘

僕はあと 1 年と少しで大学を出ていくのでどれだけ貢献できるかはわからないけど,専門的な知識や技術力を持ちながら不幸にも意識の低い学生の多い弊学にきてしてしまった id:atpons みたいな人間を見つけて未来を託していきたい(雑な表現).なお IGGG は技術コミュニティとしては瀕死状態になってしまった.これについては後で改めて記事書くなりしたいと思う.誰が悪いとかそういう話ではあんまりない.

僕が工学部キャンパスに来てからも技術的探究心を共有できる仲間をなかなか見つけられなくて張り合いがねえな,と思っていたときに手を差し伸べてくれた id:buu0528 という人がかつていました(こんな言い方をしてるが別に故人ではない).僕ももし昔の僕みたいなことを考えている人間がいるなら手を差し伸べて……なんか……なんかしたい.何ができるかは場合によると思うけど.

技術記事 20 本くらい

書きたい.アウトプットのクセをつけていきたい.365/20 = 18.25 なので 2.5 週間に 1 本書けば目標達成できるわけだ.就活や修論もあるので技術探求に時間をどれだけ割けるかはわからないけど,とりあえず年 20 本を目標にしていきたい

アプリかなにかを 1 つつくる

『群馬いち Python ができる』『大学いち技術力がある』とかなんとか言ってても・言われてても実績としてパッと見せられるモノがないしなあ,というのが悩みというか自分に欠けてるところだと思っていて,いい加減なにかひとつ,アプリケーションか Web サービスか,ライブラリとかでもいいんだけど,作ってみればいいんじゃないか,というわけでこれも目標にしてみる.

先にやるべきことがあるし,それなりにリソース使うことなので後手にまわってしまうかもしれないけれど…….卒業できないと困るし卒業してから何するの?って状態でも困るので.

その他,細々したもの

  • イライラしない,しても表に出さない,いつもニコニコしてたい
  • 心の広い人間,許せる人間になりたい
  • 僕の人間性を信用・信頼してくれている人間を裏切ったり,残念な気持ちにさせない
  • 臆病にならずに積極的に人間関係を構築していく.人見知りの克服
  • 初対面の人間,コンテキストをあまり共有していない相手とも打ち解けられる程度の会話スキルの習得,そのための汎用的な話題(本とかテレビ番組とか?)の収集
  • モテる男になる(は?)

サラっと書いたけど困難っぽいものも多い,ですが頑張っていきたい.

末文

2017 年は飛躍,でなくてもせめて来年以降のための助走の年にしたい,と思います. 今後も擬音をよろしくお願いします.

39.8℃でインフルエンザ陰性(は?)

そういうことがあったので昨日はブログ書いてる場合ではなかった

生活

高熱に苦しんだ

水曜夜に帰ってきてベッドに滑り込んだはいいがなぜか寒気がしてなかなか寝付けず,厚着をして収まったかと思ったら身体の節々がだるさを訴えてくるし,いやこれ絶対体調おかしい奴だろ,と思いながら横になってたら異様に身体が熱いしフラフラするしで,あ〜〜これは熱っすね〜〜という感じになってきた.

1 人暮らし 4 年目の終盤にして初めて命の危険を感じて病院に行き,無事『ひとりで病院に行く』実績をアンロックした(基本的に健康優良児で,マジでヤバいときにしか病院なんて行かないもんで,高校までひとりで病院に行くという経験がなかった && 大学になってから風邪ぐらいしかやってない), 熱測ってくれといわれたのでそのとおりにしたらタイトルどおりの体温で,思わず笑ってしまった.いやだってそれなりに辛かったけど40℃近くあるだるさじゃなかったから…….

看護師さんと『9度ある割には辛くなさそうだよね』「いや,僕も体温計見て意外だったんすよw」という会話をしながら鼻に例の綿棒の親分みたいなのを突っこまれたり僕の奇抜な頭髪のことをきかれたりしながら結果を待っていたが,インフルエンザの反応は出なかったといわれてエーって気分だった. 風邪薬出されて『熱が下がらなかったら明日も来てください』と言われ,それを飲んだらまああっという間に熱が下がってしまって,ほんとにただのタチの悪い風邪だった.

いまは元気です.寝てるわりに発熱で体力削られて活力不足というか睡眠不足気味ですが. 土日はまた東京なのがつらい.就活をね,やっていかなくてはならないんですよ

技術

そんな調子だったので何もしてないです :-P

音楽

昨日書きわすれてたんですけど,僕は COMPLEX も聴いてて,とくに 1990 って曲がね,なんか心にくるものがある.

欲しいものも憧れも はじめから違うから 求めつづけて 探しつづけていこう

ってあたり,いろいろ複雑な気持ちが去来して涙がこぼれそうになる.

互いに見ているものが違うことを受け容れた上で,『求め続けて』『探し続けて』いく,そういう考え方を持っていれば色んな意味でもっとマシな結末があったかもしれない,やっぱりそう思ってしまうときはある.

終わってしまったことはどうしようもないので,僕はどれだけしんどくても先を見て進んでいかないといけないわけですね.

ほどけた靴紐を結んで 振り向かずに歩いてゆく

まずは書くべし

技術のことしか書かないと決めるとそれだけで負担になる気がしてきたので,まずは日記でもなんでもいいから書くクセをつけようと思った. 日常のこととかは別ブログ立てたほうがいいかなーとも思ったけどこの試みさえ続くかどうかわからないので,とりあえずここでやってみる.

日々のことと聴いてた音楽でも書けばいいかなって思って.

生活

ラボ

ボスと就活先にやっちゃいたいんですよぉ,と話をしてとりあえず修論はあとまわしになった. 年度末までに決まってればいいな〜〜って思います.俺を拾ってくれるところがあるのかわからないけれど. お金欲しいのは当然で,もう少し高次の欲求というか,働くことを通じて{自分がどうなりたいか|社会にどう関わっていきたいか}とかを考える必要がある……気がする.

後輩が C++11 な某ライブラリと戯れてて大変だなーって思いながら見たり口出ししたりしてる. そもそも僕がいなかったらボス以下全員謎の文法に苦しんでたんだろうな……と思う. 先日『ちょっといいですか?』 って呼ばれて『このコード,みんなで見てるんだけど意味わからんのよねえ』みたいなこと言われて, 「あ,これ多分ラムダ式っすよ,C++11 ってので追加されてます,そんでこの auto は右辺から型推論してくれる奴で」とか説明した. ボスは『え,いつのまに C++ にそんな機能ついてたの……』などと大層驚いていた. 擬音は{ラボ|部活|仲間内}の知識箱的扱いです…….

夕方

ゲーセン行って少し遊んできた.ゲーセン自体はちょっと前に行ったけど他人と行くのはすごく久しぶりな感じ.

IIDX DP

  • あんましやらないせいか腕がね,やっぱり一時期より落ちてるよね.EX出せるレベルか怪しいんで基本 STEP UP モードやってる
  • Let The Snow Paint Me DPN の 30-33 小節 右手側ひどくないですか????こんなん押せます???? 「えっえっ……えっ……こんなん押せないだろ!!」とか言いながらやってた

MÚSECA

  • 一緒に行った友達が死ぬほどやりたがってたやつ.僕もはじめてやってみた.レベル 9 くらいまではなんとかできる模様
  • スピンノートはチョンと回してやるだけで十分っぽい
  • 経験済の友達が『ポップンの上下が逆なので最初は混乱する』って言ってて,実際まだたまに混乱してボタンのないところに手を伸ばしてたりする.たぶんあと 10 回もやれば慣れるかなあ

DDR DP

  • 4-5 レベルあたりをふらふら.DDR は未だにスコアを伸ばしていくレベルにない,というか MARVELOUS の感覚がいつまでたっても掴めない.いっつも C とか B+ とかそこらだし,満点近い人って何食って生きてるんだろうと思う
  • DDRDPやってるときがいちばん「あっ……体幹って重要なんだな……」って思う,想定外の落ち方をされると重心移動がうまくできなくてふらついてて,はたから見るとかっこわるい気がする
    • そもそもデブが DDR やってるの自体…… とか言うのはやめよう

音楽

最近は吉川晃司と氷室京介BOOWY を行き来してます

今日は氷室京介の MISSING PIECE てアルバムを聴いてました.そもそも音源はこれと I-DE-A しか持ってないんですけど.

これを書いてる時点では SQUALL って曲が脳内で流れていて,だいぶ気に入ってきたっぽいです.

youtu.be

技術

Python でこういうことができるんだけど

Python 3.5.2 (default, Sep 15 2016, 07:38:42)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> '1' == 1
False

この False っていったい何がどうなった結果として返ってきてるんだ? というのが気になってて,これは CPython レベルまで潜って調べないといけないんだろうなーって思ってソースは落としてみたんだけど,さてどっから読んだもんかな,って感じになってる,誰か助けてくれ

つらいことも多いけどあしたもがんばって生きます.

式が True / False そのものであるかどうかの Assert には assertIs(expr, boolean) を使う

おねがい

『何年 Python 使ってんだよ』『そんなんで仕事してたんかい』などといいながら棒状のもので叩くのはやめてください……言い訳をさせてもらうといままでだいたい文字列やバイト列の比較とかだったので assertEqual で事足りてたんです…….

本題

Django どんなもんだったかなって思い出したくてチュートリアル見直してた. Writing your first Django app, part 5 | Django documentation | Django で『False であるはず』の Assert に assertIs(expr, False) を使ってたんだけど,「あれ? assertFalse(expr) ってのもあった気がするけどこれじゃダメなの?」と思って調べてみた.

26.4. unittest — Unit testing framework — Python 3.5.2 documentation によると,assertTrue について

Note that this is equivalent to bool(expr) is True and not to expr is True (use assertIs(expr, True) for the latter).

とあったんだけど,bool(expr) is Trueexpr is True の違いについて数分本気で悩んでしまった.気づいてしまえばすごい単純なことだった(はずかし).次の実行例を見るとわかるんだけど,式が真(偽)と判定されるということと,式(の評価結果)が True (False) である,ということは等価ではない.

>>> if 1:
...  print('1 is treated as True')
...
1 is treated as True
>>> if 1 is True:
...  print('1 is True')
...
>>> if bool(1) is True:
...  print('bool(1) is True')
...
bool(1) is True

だから,exprFalse であるはず,というつもりで assertFalse(expr) という assert を置いても,実際は exprNone だったり 0 だったりしてもこの assert をパスしてしまう. assertIs(expr, False) なら exprFalse そのものであることが保証される.

まとめ

真であるか / 偽であるか,と True そのものであるか / False そのものであるか,は違うことなので,後者をチェックしたいなら assertIs(expr, boolean) を使うべき.

MATLAB MEX 指定したコンパイラーコマンドでコンパイルしてほしい

前提

Ubuntu 16.04(以下 Xenial)な共用マシンに MATLAB R2016a(以下 R2016a) が入ってる. C++ で書かれたライブラリを MEX する必要があった. ふつうに MEX コマンド実行すると g++ が呼ばれるんだけど,Xenial での g++ という名前のバイナリの実態は GCC 5.4.0 に含まれる C++ コンパイラになる. 一方で,R2016a が公式で対応してるのは GCC 4.7.x で,実際 g++ 5.4.0 を使って mex すると MATLAB が持ってる libstdc++.so が古いために MATLAB 上では動かないバイナリが生成される. Xenial では g++-4.7 というパッケージ名で g++-4.7 というファイル名の g++ 4.7.0 をインストールはできるけど,MATLABg++-4.7 をどう使わせるか,というのがこのエントリでする話.

解決法 1 - mex コマンドの引数に 'CC=gcc-4.7' を追加

既定のコンパイラの変更 - MATLAB & Simulink - MathWorks 日本 mexで使うコンパイラを指定する - Qiita ここらで言ってるように, $CC とか $GCC を変更すれば MEX はそのコンパイラを利用してコンパイルしてくれる.

問題点

  • 弊ラボの人間はこういうテクに明るくないので,いつでもこれを思い出して適切に MEX 呼び出しを書き変えられるかと言わるるとまあ無理だろって思う
  • わかっててもいちいち書き直すのは面倒

解決法 2 - 設定ファイルを書き変える

どこかのページではっきり解説されたりしてる方法ではないんだけど,$matlabroot/bin/glnxa64/mexopts/g++_glnxa64.xml

    <locationFinder>
        <GCC>
                        <cmdReturns name="which g++" />
        </GCC>
        <CPPLIB_DIR>
                                <cmdReturns name="g++ -print-file-name=libstdc++.so"

てなあたりを

    <locationFinder>
        <GCC>
                        <cmdReturns name="which g++-4.7" />
        </GCC>
        <CPPLIB_DIR>
                                <cmdReturns name="g++-4.7 -print-file-name=libstdc++.so"

と書き変えると mex コマンドが g++-4.7 を使ってくれるようになった. たぶん,C とか Fortrangcc_glnxa64.xml なり gfortran.xml なりを同じように編集すればいいんだと思う.

問題点とか

  • ~/.matlab/R2016a/mex_C++_glnxa64.xml が存在する(mex -setup すると生成される?)とここの設定がオーバーライドされるっぽいので,消しておく
  • 公式に案内されてる方法ではない気がするので,バージョン変わっても同じ方法でできる保証はない