新・オノマトペ的備忘録

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

████████ Advent Calender について

これは ████████ Advent Calender █日目の記事です.

なぜこれをはじめようと思ったか

  • 研究で積まれるタスクが多すぎてうつっぽくなってるところがあって,なんか他に意識を向けられる時間が欲しいと思った
  • 年始に書いたような記憶が朧げにある記事 に『技術な記事20本/年くらい書きたい』などとあるけど今年もまあほとんど虚無だったためにそういう余裕があまりなかった.カレンダーの記事を書くていで巻き返しを図りたい.

『████████ Advent Calender』 について

無事に 25 本程度記事が書けた場合『擬音 Advent(略)』などになると思います,1 桁くらいしか書けなかったら闇やエターナるなど各自で代入すればいいと思います. とくにテーマを定めるわけではないので何なのか僕自身もはっきり決めてなく,ことしのことを思い返したりでっち上げたりすながらそれっぽい記事を書くつもり.

『█日目』について

TL;DR

3 日目にもなって『1 日目の記事です』とか『2 日目の記事です』とか言えない

詳細

Hugo + netlify CMS は 1 日の時点で構想はしていたんですがあまりに眠くて当日手を出すのを放棄してしまい, 翌日の時点でさすがに 1 日目の記事とか真顔で書けねえという気持ちがあってこういう書き方をするのは決まっていたんですが, さいしょ Hugo でなく Pelican でやろうとか思ってたらひどい深みにハマってしまい, とりあえず動いたのが 21 時とかそういうレベルで終わってたので結局その日のうちに記事を書く気力がなく, きょう 1 日目,2 日目の分の記事を書いているので 2 本も『█日目』にするハメになってしまった,というのが真相です

text.gion.me と gion.hatenablog.com の立ち位置

技術っぽいのは向こうに書いてそれっぽくないのはこっちかなーみたいな雰囲気がありますが,未定です

まとめ

3 日目からはじめりゃいいのに 1, 2 日目がないのキモい,みたいな完璧主義というかいらんとこ几帳面みたいなところがあるから精神的負担が大きくなって挫折するんだと思います

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

式が 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 すると生成される?)とここの設定がオーバーライドされるっぽいので,消しておく
  • 公式に案内されてる方法ではない気がするので,バージョン変わっても同じ方法でできる保証はない

PyCon JP 2016 に行った #PyConJP

IMG_3088
行ってきました.メインの Conference のみ参加です.

最近の僕と Python

一時期は Web 開発メインで使ってたんだけど,最近は研究のための道具という感じになってきてる.そんな感じの立ち位置.

見たもので気になったものとか,思ったことについて忘れないうちに書いておく.

水曜

Keynote

youtu.be
Opening に間に合わなくて,行きの電車のなかで Keynote のライブ配信を見てた.
英語力低くて恥ずかしいんだけど,コミュニティの多様性とか,プログラミングなりそれ以外の方法なりでコミュニティや世界は変えられるんだぜ,という話をしていたと思ってる.

たった一ファイルの python スクリプトから始める OSS 開発入門

youtu.be

その場その場でのスクリプト書くだけじゃなくて,外に出すこと考えてスクリプト書いてみるとやりたいこととかが整理されるしいいよ,とかそういう話.
僕も書き捨てのコードとかでもとりあえず公開してみたり,より一般化したものに書き直したり,とかしたほうがいいなと感じた.
個人的になるほどなあと思ったのは『おまけ』のところで,自分の学習ログとして GitHub の Issue 使ったりするというのにはなるほどね!!という気持ちだった.アリかも.

基礎から学ぶWebアプリケーションフレームワークの作り方

youtu.be
c-bata.link
実際にコード動かして,エラー吐いても慌てずに対処しながら解説してるのはすごかった.
内容的にも最初のほうは自分で下まわりのコード書いてたのがテンプレートとかデコレーター使ってだんだんよくみる WAF 使った感じのコードになっていくのが面白かったし,Python の WAF は内側でだいたいこんな感じのことしてるんだ,というのがわかるいい発表だった.
ちょっとまじめに kobin とかのソース読んでみようかなって気持ちが出てきた.

Party

なんとなく集まって先輩 / 学部時代の友人の @ism67ch とひげで飲み食いしてたら @jbking さんが寄ってきてくださって,そこから @hirokiky さんや @t2y さんとお話させて頂いた.
現職のスゴイ=エンジニアサンたちとお仕事のこととか過去話とかをできた貴重な時間だった.ありがとうございました.
『(某社に)入りたいかそうでないかでいえばどっちなのよ』「そりゃあ入りたいですよ〜」などとしらふじゃ絶対言えないような大それたことを言った.
そこらへんについて ky さんからまじめなアドバイスをいただいたので参考にします.

木曜

You Might Not Want Async (in Python)

youtu.be

Python で非同期,まだまだつらいところ多いように見えるし,『銀の弾丸じゃない』し,よく考えて使う必要がありそうだな,と思った.
喋りと飽きさせないスライドの構成がうまかった.
あと Go は goroutine のおかげで非同期プログラミングがだいぶ楽そうだなーと改めて思った(最近 Go を少し勉強してた).

Python を支える技術: モジュール・インポートシステム編

youtu.be

しばらく前にインポートまわりですごいハマったことがあったので興味を持って見に行った.
内容はしっかりしてたんだけど,発表者さんの声が小さくて聞けないって人がかなり多かった印象.
前の方にいたのでまあなんとか聞けたけど……という感じだった.
ちょっとその場で理解しきるには難しかったので,あとで周辺の情報調べながら復習したい.

はじめて作るDjangoプラグイン

youtu.be

Django ってあるけど Django に限らない話も多かった.
Python (や,プラグインならベースになるアプリケーション)の多バージョン対応の方法とか,よくみる tox というやつの使いかたとか,CI まわりのツールについて知れてよかった.
自分で公開するものを作るときにめっちゃ見返して参考にしたい発表だった.

型ヒントについて考えよう!

youtu.be

この日の Keynote speaker が推薦してたとかで,立ち見で壁も埋まるレベルだった.
あんまり Python における型ヒントを意識したことはなかったんだけど,Type Comments みたいにコメントとして書く系のものだけじゃなくて Variable Annotations みたいに文中でもオッケーみたいなスタイルの書き方を導入しているところ見ると動的型付けの Python でも型チェックとかが欲しいっていう層はある程度いるのかな,と思った.
ただまだそこまで普及してるもんでもないようで,サードパーティライブラリに対する型の導入についてはまだまだこれから,という感じだった.
TypeScript は型の定義が必須だからサードパーティライブラリの型定義が集まったけど,Python だと誰かが本気で必要になるまで準備されなそうなので,そこらが課題なのかなーと思った.

見れなかったけど興味があるセッションはいくつかあるので,時間のあるときに録画を見ようと思ってる.
あ,あとアンケートもちゃんと答えておきました.
# スタッフとかやってみるのもいいかなーと思ってアドレスつけてみたけど

個人的な感想みたいなもの

まとまりのないポエムじみた文章に興味がないひと向け

  • 自分の足跡みたいを残すため
  • スキルなどに対する客観的な評価をもらうため

もっと積極的にコードなりブログなりでアウトプットを増やしていきます.

本文

PyCon JP には 2014 から参加してて,今回が 3 回目になる.
相変わらず発表・イベントの質は高いし,ふだん群馬に幽閉されてる僕としてはあんまり会えない知り合いと顔を合わせて話せるいい機会だった.
と同時に,僕個人に対する課題を認識できる機会でもあった.

擬音の英語力低すぎでは問題

参加者見てると英語セッションでちゃんと英語で質問できてるひと多いなと思った.
僕はまあ読んだりしゃべってるのを何言ってるのか理解しながら聞くとかは一応できてると思うんだけど,自分の考えてることをリアルタイムに英文構築してしゃべるっていう力は全然ないなと思ってる.
ただまあ冷静になって考えてみるとある程度喋れる自信があるひとだから英語で喋ってるわけで,一種のバイアスみたいなやつでうわーできるひとだらけじゃーん,って思うのはあるかもしれない.
極端な話,留学かなんかで海の外に出てしまえばまあ英語を絞り出すしかない状況になるので成長が期待できるけど,時間もカネもない状況なので今すぐどうこうってのは少し難しいかな…….

俺はいったい何をやってるんだ問題 / 自分のウデマエわからん問題

PyCon に限らないんだけど,年の近いようなひとがいろんなことやってブログエントリなりこういう場での発表なりで外に向けて発表してる一方で,さて僕はなにをやってるんだろうね? みたいな気持ち.
まあ研究やったりいろんなことに興味もって勉強したりは人並みにやってきたつもりなんで,知識スタックは浅くはないと思ってるけど,具体的にログとか何かの形に残してることが少なくて振り返ったときになんもねーなって感じで,なんていうか引け目を感じるというか恥ずかしい気持ちになってくる.
そんな調子なんで,傍目から見た客観的な自分のスキルというか,もっといえば市場価値(これを僕が言うのすごくエラそうな感じなんだけど)みたいなのがどんなもんなんだかわからん,みたいなことを思っている.
元々の性格もどっちかってーと縮こまるほうだし,自分ができることってそう多くはないので基本的に自分の力みたいなのにはあんまり自信がない.

で,どうするのさ

俺はこんなことしてるぜーとか胸張って言えるようになったり,自分の力に自信をつけるのはどうしたらいいか,って考えると,やっぱり入ってきた分だけアウトプットをするのが大事なんだろうな,という結論に至った.
何かしら形になってて外から容易に見れるものがあれば,こんなことしてました・作ってました,とか示せるし,それを他人が見て,ようやるわとか大したことないなとか,まあプラスにしろマイナスにしろ外から客観的な評価を得られるんじゃないかという気がしている.
これを修士課程になってからようやく気づいて動きだすのなんて遅すぎんじゃねーかってのは確かにあるんだけど,やらんよりはよっぽどマシじゃんって言いながらやるしかないっしょ,と思ってる.
恥ずかしくて見せられない>< とか言っててもしょうがない,時間が経ってから見たときにこっからよう成長したわ,と思えればいいじゃん.と自分を励ましながらがんばることにします.
擬音をよろしくお願いします.

まとめ

上にあるとおりです.
当面は 2, 3 日に 1 回何か書くなり出すなりできればいいかな,と漠然と考えてます.
今後の活躍にご期待ください.