反復学習をサポートするアプリケーションをつくった.&&それから一ヶ月後.

 永続的な知識を手に入れたい.けどコツコツ毎日こなす学習が本当に苦手.スケジュール組むのが面倒臭い.途中で飽きる.

もうだめだ.

作った

 openFrameworksを用いて作成,反復学習のスケジューリングを自動化した.(下図)最低限動作すれば良いのでコードや設計はてきとー,とても汚い.プロトタイプですし….

f:id:ttata:20150129200611p:plain

 覚えなければいけないタスクを入力すると画面右の空間にスケジュールが描画される.なお,横軸が日にちで縦軸がタスク.スケジュールを読み込むボタンを押すと左のTaskListにその日にやらなければならないタスクが表示される.終わったらチェックを入れることで受理,スケジュールが更新されてゆく.

 タスクは文字列のインデックスで管理される.これは様々な教材を用いた学習に対応するためである.例えば,単語帳のような問題集のページをそれぞれタスクとして管理したい場合,そのページ番号をインデックスとしてタスクを生成すれば良い. スケジューリングされる学習予定については,1つのタスクにつき最初の1回と反復の3回の計4回,間隔は反復を重ねるごとに長くなっていくように設定した.また,何らかの理由であるタスクにチェックを入れられなかった場合は,そのタスクはリセットされ,翌日からスケジュールが組まれる.

 とりあえず試験運用として,英語のドキュメントをもっとスラスラ大量に読めるようになりたかったので,英語のリーディングの勉強を管理することにした. 教材は速読英単語と速読英熟語.一日に文章をそれぞれの本から1つづつタスクに追加していく.なので一日に文章を8こ読む.

一ヶ月後(記事執筆時)

 未だに習慣として続いている.ドキュメントも前より読めるようになったので効果はあったんだと思う.これからも継続していきたい.英語以外の学習にも試してみようかな.

開発を通して得られた知見等

 openFrameworksでテキストユーザインタフェースを実現するためのaddonを開発した.完全にvimの影響ですね.おそらくoF0.8.5でサポートされるであろう機能(フォントサイズ関係)を用いているため,このaddonを用いる場合は,そのバージョンのリリースを待つか,github公式リポジトリからcloneする必要がある.使用方法等の詳細についてはoF0.8.5がリリースされた後にここのブログなりREADME.mdなりに追加する.

以下,知見

OpenGLで不透明ポリゴンと半透明ポリゴンとを重ねあわせた時の描画がうまくいかない

f:id:ttata:20141129025910p:plain

青い不透明ポリの箱の手前に,2つ赤い半透明ポリの箱を並べた図

2014-11-29 5:33追記

その17 Zバッファとアルファブレンドの嫌な関係

これだ..大変そう.

OpenGLプログラミングメモ - アルファブレンディング

1.不透明なオブジェクトを描画

2.半透明オブジェクトをZソート(視点からの奥行き順)

3.半透明オブジェクトの、奥にあるものから描画

これでうまく描画できるらしい.oFからOpenGL触ってるのでドキュメント漁ってみよう.

最近のアレ

 ここ1ヶ月くらいは,ものをつくる動機がよくわからなくなってしまい,進捗が完全にダメになっていた.そこで,unitrofragments等の進行中のプロジェクトをしばらく寝かせ,適当に息抜きをしていた.

息抜き

 読み飛ばして頂いて結構です.

RapberryPiメディアサーバ

 まず,部屋でPCを触らずに音楽を聞きたかったので,ずっと放置していたRaspberryPiを使い,メディアサーバーを構築しようとした.いつもメインで使ってる爆音空冷PCだと,ファンのノイズがきついので,ファンレスのRPiは丁度良かった.構成は,スマホからRPiに立ち上げたVLCを操作,手元に余っていたオーディオインターフェースのUA1Gを接続し,S/PDIFでスピーカに信号を送る.こんな感じで考えていたが,UA1GのドライバがうまくRPiに認識されず,同じようなメディアサーバを構築した記事を参考に,OSをOpenWrtに入れ替えるなど,いろいろ手を施したがダメで,直接ミニプラグで再生するのも音質的に(パワードスピーカ側のアンプがアナログだと貧弱)嫌だったので結局諦めた.

Ubuntuノートメディアサーバ

 ノートPCをメディアサーバにすることにした.CPUはi7,Mem8GB,intelSSDと,そこそこの性能なのでリソースの無駄遣い感が半端ない.メインPCに入っていた音楽データを移動し,オーディオインターフェースを接続.こうして,寝転がりながらスマホで好きな曲をかけられる,無駄の多いシステムが完成した.快適.

余ったリソース

 無駄の多いメディアサーバに,マイクラ鯖を立てることにした.tanitta.netのドメインをとっていたのでこれを利用.1.8のバニラ鯖と,1.7.2のIC/BC工業鯖を立てた.方向的に,工業鯖は大自然を文明で殴っていく感じ.あとはWeb界隈に興味があったので,Play Frameworkを導入してウェッブサイトをこしらえ始める.フルスタックフレームワークは難しいと思った.現時点で何もできていない.

Linuxの環境構築沼のようなものを見つける

 メディアサーバの試行錯誤を経て,リナックスチョットデキル気分になってしまい,魔が差してメインマシンへのArchlinuxの導入を試みる(上図).カーネルパラメータのnomodesetの存在を知らず数時間ロスト.OSのインストールは無事に終わったが,グラボ(Radeon HD5850)のドライバのインストール後に,nomodesetを外して立ち上げようにも画面は表示されず.また,nomodesetを設定した場合,HD5850はカーネルモードが必須なため?,xwindowが立ち上がらない.グラボを買い換えたら試そう.撤退.

夢のデスクトップ環境

 deviantARTでかっこいいデスクトップを見つけた話参照 awesomeとvimの組み合わせ,かなり良い.

.vimrcいじり

 ctagを追加した.これでC++を触るときの主な装備は,clangの静的解析とそれによる補完,doxygenの可視化,ctagでタグジャンプって感じになった.順調に.vimrcが育っている.

まとめ

 コンテンツの巨大なゴミ山を,至るところで散見する今日この頃,わざわざ自分の手を動かすなどしてリソースを消費し,ゴミ山を盛ることに加担するのは,一体どういう意味があるのか.一ヶ月くらい環境構築をしながら考えていた.とりあえず思いついたのは,価値はモノそのものではなく,モノとそれを使ってくれた人や作った人との間にできる,物語性のような何かにありそうな気がした.今後は積極的に技術的出会い厨をして,その物語性がどんなものなのか,考えていこうと思った.

awesomeに引っ越した

f:id:ttata:20141125005754p:plain

まえがき

 普段使っているマシンは,開発用のLinux(Ubuntu)と,適当に遊ぶ用のWindowsとのデュアルブートで運用している.そのLinuxの方のウィンドウマネージャをUnityからawesomeに変更した.主な動機はdeviantARTかっこいいデスクトップを見つけたため.あとはMacBookPro欲しさをこじらせて手前で最高の開発環境を拵えたくなったというのもある.

awesomeとは

 Linuxのタイル型ウィンドウマネージャであり,軽量,高い拡張性とかが特徴とWikipediaに書いてあった.開発者におすすめ.

 使い勝手に関しては,キーボードでウィンドウをゴリゴリ操作できるし,設定ファイルで挙動等を柔軟に記述できる.設定はluaにより記述されているが,適当な言語書いたり読んだりできるなら特に苦労はしないと思う.Haskellで設定を書きたい系の人はXmonadっていうタイル型ウィンドウマネージャがあるらしいのでそちらをどうぞ.

環境構築

 最新版を入れる. Install Awesome Window Manager 3.5.5 in Ubuntu 14.04 | UbuntuHandbook

ubuntuの場合

sudo add-apt-repository ppa:klaus-vormweg/awesome

sudo apt-get update

sudo apt-get install awesome

リポジトリの追加を行わなかった場合は古いバージョンのものが導入されてしまう.

 その後ログアウトしてウィンドウマネージャをawesomeに切り替え,再びログインすると導入できてるはず.

使い方や設定等

お世話になったドキュメント貼っておきます.

便利だった設定等

  • 設定を書き換える際は上のwikiより,デバッグ用に以下のようなシェルスクリプトを用意すると非常に捗る.

    Xephyr :1 -ac -br -noreset -screen 1152x720 & DISPLAY=:1.0 awesome -c ~/.config/awesome/rc.lua.new

  • wikiの,xcompmgrによる透過の設定もおすすめ.

  • 設定ファイルrc.luaからのコマンドの実行はos.execute("command")でできる.

  • 上の記事で紹介されてた,入れるだけで良い感じにかっこよくなる設定貼っておきます.

これまでのunitroの進捗#2

前回Scalaで無理やりprocessingを叩いて開発していたが,processing用の3Dモデルを扱うためのプラグインを導入したらエラーを吐いた.なので諦めてC++とopenFrameworksを使った開発を再開した.

tanitta/unitro · GitHub

進捗

開発の途中でえくさんしーず氏(@xanxys_)にコードレビューしてもらい,改善点がモリモリ湧き出てきた.unitroの設計とかコンテンツとしての面白さについての話も沢山した.色々とニッチな話がスムーズに伝わるのがすごく嬉しかったけど,自分のスペック不足で話についていくのが大変だった.勉強の必要性を痛感.今は指摘された部分を修正しながらEntityとCellの接触判定,Cellの編集機能を実装している.とりあえず,Player位置のCellのパラメータ,Soilの量の調節が可能になり,あとはCellの上をPlayerが歩き回れるようになった.横方向は不完全なのでたまに転落する.

困ってるところ

 データフローをどのくらい意識したコードを書いたほうがいいのか判断つかないので困っている. あまりにも深い委譲の場合,一番浅いところから一番深いinstanceまで参照を渡すのが大変….渡したいデータをsingleton?で作れば簡単そうで良いんだけど,これじゃあただのglobalなスコープの代替では….設計の美意識がまだ良くわかってないっぽい.人のコードもっと読まなきゃ.

(Singletonパターンって使いどころ難しい…)

僕とエディタ,vimを添えて

僕とエディタの続きです.

あらすじ

 環境構築につかれた人「環境構築につかれた」

 ここ2年くらいは,「恋に落ちるエディタ」と評判のsublimetextを使って,コンパイラなりインタプリタ叩いてコーディングをしていた.OSはもともとWindowsを使っていたが,快適なClangによるC++の開発環境を求めるにあたり,コミュニティ的にUNIXの世界の住人が多いLinuxUbuntuときどきDebian)に移住した.正直macが欲しいとおもった.

vimに入信を試みる

 vimには堅牢なClangによる自動補完のプラグインがあると聞いたので,早速コマンドラインで$vi,立ち上げたコンソールには「vimがなんとか」.試しに使ってみたがよくわからない.BackSpace使えないのがタイプミスの多い自分としてはつらくなった.これがvimか.入信失敗,sublimetextに戻る.(テンプレ)

入信2回目

 sublimetextでClangによるサポートを行ってくれる環境を構築していたが,ドキュメントの少なさに嫌気が差し,再びvimに救いを求める.どうやら挫折した時に触ったvimUbuntuに最初から入っているviコマンドで出てくるvimはメジャーなモノとバージョンが違ったらしく,手前で新たにインストールした.当時の自分としてはカーソルキーとBackSpace使えるの最高!!ウェヘッwって感じだった.

修行 〜その ううさぎ は つつきき を こええてて とびはねたた〜

 vim付属の,初心者を鍛え上げるチュートリアル『vimtutor』をやってみる.日本語なのでとてもわかりやすい!けど始めたばかりだとちょっと長くてつらいかな...

 あとはブラウザでできるvimのシミュレータによるインタラクティブチュートリアルOpen Vim』を見つけたのでポチポチ触っていた.簡単な英語の説明を読みながら,ブラウザ上でシミュレートされたvimを操作してレッスンを進めていく.変なところを触ってよくわからないことになる心配が無いので安心だった.チュートリアルの長さは,要点だけ抑えた説明でコンパクト.何度も繰り返すことでなんとなく,vimを立ち上げて文章をいじって保存,終了するところまでたどりつけるようになった.

 その後はvimの設定ファイルである.vimrcをひたすら書いていたら慣れてきた.謎キーバインドの体系も理解しはじめる.

環境構築

 ただひたすらに.vimrcをいじりつづける.モダンなプラグイン管理ツールであるneobundleを軸に,無心でプラグインgithubから手元のvimにcloneする.cloneしすぎてコンソールだとレンダリングが追いつかなくなったので,gvimを自前でビルドしてお引っ越しをした.gvimvimリポジトリからcloneでmakeでmake installだ!このときLuaも配合.あとプラグインの隙間を埋めるためにvimscriptに手を出し始める.後方互換を重視した素晴らしい仕様だとおもった.至る現在.

まとめ

 巷で言われているようにvimの学習曲線は確かに急だが,実際に手を動かしたら案外楽に使えるようになったので,いつかはvimをつかってみたいと考えている人はぜひ触ってみると良いかもしれない.

 vimの一番良いところは,拡張性を基盤に時間をかけて成長した巨大なコミュニティだと自分は思う.もしわからないことがあっても,ググれば怖い人が書いたドキュメントで解決できるし,欲しいと思ったプラグインも,大抵すでに怖い人が作って公開してくれている.vim自体も使い始めは古臭さが目立つが,ベースが安定しているので,プラグインの大量投与でモダンな感じのエディタになる.ナウい環境構築でよくある,解決方法が見つからずヒヤヒヤする感じが無いのは安心する.今までずっと,そういった新しいエディタやツールにしか目を向けていなかったけど,時間をかけて洗練された堅牢な技術の良さに,こういうかたちで気がつくことができてよかったと思う.枯れた技術と新しい技術を上手く組み合わせていくと良いものが作れるのかな.温故知新大切にしていこうと思った.あとvimscriptが後方互換を重視した素晴らしい仕様だった.

 最後におすすめの設定,プラグインを自分の.vimrcから抜粋して紹介します.

  • 見た目がダサい->lightlineでクールなステータスラインを

  • ファイル,フォルダの取り扱いが面倒->unitevimfiler

  • githubおじさん->vim-fugitivevim-gitgutter(上のlightlineと組み合わせると幸せになれる)

  • ESC,<C-[>が遠い->vim-arpeggioでjk同時押し