TeX Live 2016とLuaTeX-jaに関する備忘録

 久しぶりにTeXの環境構築を行ったのでそのメモ。

W32TeXからTex Live 2016への移行

 前回はTeXインストーラ3で環境構築を行ったが、今回はTeX Live 2016を用いることにする。

 なお、Tex Live 2017が2017-05-01にリリース予定であり、そちらではLuaTeXが1.0になるようなので、急ぎでないならそちらを待ってからインストールするのがいいかもしれない。

 Installing TeX Live over the Internet - TeX Users Groupからinstall-tl-windows.exeをダウンロードしてインストール。時間はかかるけど詰まるところはない。

LuaTeXでの日本語環境

 pTeXと同等(互換ではない)の環境を目指して、LuaTeX-ja環境が整備されつつある。

\usepackage{luatexja}

ja.osdn.net

 LuaTeXではjsclasses文書クラスは利用できないので、代替としてltjsclassesが利用できる。

 また、確認していないがBXjsclsBXjscls - TeX Wiki)も利用できるようだ。

 フォントについてはluatexja-fontspecを利用して、英文、和文のそれぞれについて指定できる。

\usepackage{luatexja-fontspec}

\setmainfont[Ligatures=TeX]{TeXGyreTermes}
\setsansfont[Ligatures=TeX]{TeXGyreHeros}

\setmainjfont[BoldFont=IPAexGothic]{IPAexMincho}
\setsansjfont{IPAexGothic}

 プリセットも用意されていて、latexja-presetから利用できる。

\usepackage[ipa]{luatexja-preset}

 ルビ、傍点はluatexja-rubyパッケージ。

\usepackage{luatexja-ruby}

LuaTeX-ja環境での縦書き

 縦書きの文書クラスとして、ltjtarticle.clsltjtreport.clsltjtbook.clsが利用できる。

fugenji.org

 ところでluatexja-presetexpertオプションを設定してもダブルクオーテーションはダブルミニュートにならないのだけど、これはどうすればいいのだろうか。

PDF出力時の見開き方向

 Acrobat Readerで見開き表示をするときの綴じ方向を指定するためにはhyperrefパッケージを使う。

\usepackage[pdfdirection=R2L]{hyperref}

個人的な規約

 バックノウハウ感しかない。

------ %ダーシ
\vspace{1em} %空行

% 上下余白調整
\usepackage[top=20truemm,bottom=10truemm]{geometry}

% openright時用の綴じ側余白調整
\setlength{\oddsidemargin}{-1in} %  set real left margin 0pt
\setlength{\evensidemargin}{-1in} % do
\addtolength{\oddsidemargin}{15mm} % odd page 25mm left margin   
\addtolength{\evensidemargin}{25mm}% even page 15mm left margin

\noindent「行頭の括弧はnoindentで対処する」

TrueTypeフォントパーフェクトコレクション』

改訂6版 TrueTypeフォントパーフェクトコレクション (デジタルBOOK)

改訂6版 TrueTypeフォントパーフェクトコレクション (デジタルBOOK)

 有名どころのフォントが破格値で手に入るすぐれものです。詳しくはリンク参照のこと。

 ちなみに好きな字体はFrutiger、Avenir、Optima、Palatino、Gothamあたりです。Macintoshがほしい。

blog.bi3.jp

 このフォントをTeXで使うにはTrueType Fonts Perfect Collectionの指示に従えばいい、はずなのだけれど、前の環境でうまくいったこれが今回の環境だとうまくいかない。

 サンプルファイルをplatexにかけてdviファイルを作った後、dvipdfmx -f bitstream.map filenameすればpdfはできるのだけれど、何が悪いのだろうか。

Make: AVR Programming pt.04

http://squeuei.hatenablog.com/entry/2016/08/18/152509squeuei.hatenablog.com

Chapter 10

タイマを使うときのチェックリスト

  1. どのタイマを使うか決める。8bitでよければTimer 0か2、16bitが必要ならTimer 1。
  2. どのモードが必要なのかを決める。TCCRnAのWGMn0とWGMn1、TCCRnBのWGMn2をセットする。
    1. 数えたかったりタイミングを作りたいのならNormalモード(設定の必要なし)
    2. 時間の基準や周波数を作りたいのならCTCモードを使う。WGMn1をセットする。
    3. PWMを使いたいならfast PWMモード。WGMn0とWGMn1をセットする。PWM周波数を変えなくてもいいならWGMn2もセットする。
  3. 直接出力するならTCCRnAのCOMxAとCOMxBをセットする。
  4. 分周を決めたらTCCRnBのCSnxビットをセットする。
  5. 比較する数値を使うならOCRnAやOCRnBにデフォルトの値を設定する。PWMを使うならDDRの出力設定も忘れないこと。
  6. タイマで割り込みを使う?
    1. Normalモードならカウンタオーバフロー割り込みを有効にするため、TIMSKnのTOIEnをセットする。
    2. PWMやCTCモードなら比較での割り込みを有効にするため、TIMSKnのOCIEnAとOCIEnBをセットする。
    3. sei()するのを忘れないように。

Chapter 11

 サーボのようなデバイスとAVRの電源はなるべく分けた方がいい。AVRの動作が不安定になる恐れがあるから。

Chapter 12

 高い電圧を高分解能で取得したいときは、分圧とオーバーサンプリングを使う。 また、AVRの場合はADC以外のクロックを停止することでノイズを低減するADCノイズリダクションスリープモードがあるので、活用すると良い。

オーバーサンプリング

 オーバーサンプリングは中心極限定理に基づいていて、たとえば10ビットADCで16個のサンプルを取得した後、4で割る(=2ビットシフトする)ことで12ビットの結果が得られる。 nビット余計に欲しいときは、{2^{2^n}}回のサンプリングと{2^n}回の割り算(=n回のビットシフト)が必要。

 オーバーサンプリングは、サンプリング周波数よりもゆっくり変化する信号に対して適用する。 速度、精度、コストはトリレンマだ。 16回のオーバーサンプリングは16倍遅くなるけど2ビット分の精度をただで手に入れられる。 高速で正確なADCが欲しいなら良いADCを買えばいいけど、それにはお金がかかるのだ。

0~5V以外の信号を計りたいときは

  • 1V以下のものを計りたいときはAREFを内蔵の1.1Vリファレンス電源にすればよい。
  • 1V~5Vのものを計りたいときはAREFを内蔵の1.1Vリファレンス電源にして、その上で信号を分圧すればよい。
  • 5V以上のものを計りたいときは信号を分圧すればよい。

スリープ

 avr/sleep.hをインクルードして、set_sleep_mode(SLEED_MODE_ADC);(実はSMCR |= (1 << SM0);するのと同じ)と、ADCSRA |= (1 << ADIE);(ADC割り込み有効化)、sei()をすればよい。ただし、sleepが終わるときにISRが呼ばれるので、EMPTY_INTERRUPT(ADC_vect);なりしておく必要がある。

EWMA(Exponentially Weighted Moving Averages)

 ふつうの移動平均では移動平均する数だけメモリを消費する。 また、C言語の除算では切り捨ての問題があるから、なるべく除算の階数を減らしたい。 EWMAなら2つの変数、現在の値{x_t}と過去の平均値{y_{t-1}}だけでいい。

{\displaystyle y_t=\frac{1}{16}x_t+\frac{15}{16}y_{t-1}}

 また、EWMAは最後に一回だけ除算をすればいいので、除算の問題が少ない。 除算するときの一つのテクニックは、割る数の半分を事前に足してから除算を行うこと。

(16+4)/8 = 2
(20+4)/8 = 3

 これらを考慮したときのEWMAの式は下記の通り。

{\displaystyle 16y_t=x_t+16y_{t-1} -\frac{(16y_{t-1}-\frac{16}{2})}{16}}

Make: AVR Programming pt.03

http://squeuei.hatenablog.com/entry/2016/08/16/201654squeuei.hatenablog.com

Chapter 8

 割り込みを扱うときはISR()を使う。厳密に言うところは関数じゃなくてマクロ。 引数として割り込みベクタを与える。割り込みベクタの定義はio.hに書いてある。

外部割り込み

 外部割り込みを有効化するときは、2段階ある事を忘れないようにする。

  1. 使いたい割り込みベクタを有効化する
  2. 割り込みシステム全体をsei()で有効化する。

 普通は割り込みに入るときにglobal interrupt enableがオフになるので、割り込み中に更なる割り込みが発生することは無い。それを許可したい場合は、ISRのなかでsei()を呼ぶか、ISR_NOBLOCKでISRを定義するかのどっちかにする。

 割り込みを生じさせたくない場合はcli()を使ってglobal interrupt enableをオフにする。再開したいときはsei()を。

ピン変化割り込み

 Pin-Change InterruptではPxyPCINTxが対応する。ただしxはアルファベットと数字で対応してるのでややこしい。PByはPCINT0,PCyはPCINT1、PDyはPCINT2みたいに。 割り込みベクタは全部のピンで共通なので、ISRの中でどのピンからの割り込みなのかを判定して処理しないといけない。

  1. 制御レジスタ(PCICR)で使いたい割り込みを有効化する。
  2. 使いたいピンをピンマスクレジスタで設定する。
  3. global interrupt enableをsei()で有効化する。

 割り込みを受けるときは

  1. 同じバンクの複数のピンからトリガを受ける場合にはbit_is_clear(BUTTON_IN, BUTTON)のようにどのピンからの割り込みなのかを調べる。
  2. 同じバンクに一つしかトリガを受けない場合には、立ち上がりと立ち下がりの両方に反応することに注意。どちらなのかを確認する必要がある。

ISRで変数を操作したいとき

 ISRは引数を取れないので、mainからもISRからもアクセスできるグローバル変数を宣言する。 ただし、その変数はvolataileを付けること。つけないと、一度もmain内で変更されない変数とみなされて、コンパイラが定数に変更してしまうことがある。 空のforループを回すときにも同じ事をする。

Chapter 9

タイマ

 タイマにはノーマルモードとCTCモードがある。 ノーマルモードではカウンタがオーバフローするまで動作する。タイマの種類にもよるが255あるいは65535。 CTCモードではOCRnAレジスタで指定した値までカウントする。 ATMega168の場合はTimer1が16bit、そのほかは8bit。現在のタイマーの値はTCNTxに格納されている。

 CTCモードの場合はTCCRxAレジスタWGM01を設定する。また、outputモードにする場合はTCCRxAレジスタCOMxA0を設定する。また、outputモードにする場合は Output Compare Resister OCRxAビットに

 どのモードにせよ、プリスケーラを設定しなければ、タイマは動作しない。CSx2CSx1CSx0の値を、データシートの表にしたがって設定する。

CPUスピード

 CPUスピードを変える方法には“ヒューズ”を書き換える方法と、ソースコードの中で設定する方法の2つがある。

 この本のサンプルコードに付属するMakefileではmake set_fast_fuseすることで8MHz動作に変更される。戻すときはmake set_default_fuses

 そのほかにもAVRDUDEで設定変更ができるけど、例えばSPIEN-enable fuse bitを変更してしまうとSPIでのプログラミングができなくなったり(設定を戻すこともSPIではできない!)、CPUクロックソースを外部クロックに設定してしまったり(こっちはクロックや他のマイコンから1MHzの信号を印可してやればよいので、まだ対処しやすい)するので、注意が必要。

 ソースコードで設定する場合には、Clock Prescalar Change Enableビットをセットしてから4クロック以内にプレスケーラの値を変更しないと行けない。これはけっこうやっかいなので、avr/power.hにクロック変更用のマクロがすでに用意されている。

#include <avr/power.h>
clock_prescale_set(clock_div_1);

などとすればよい。

 power.hにはAVRに内蔵されている特定のモジュールの電源を落とすマクロなども用意されているので、省電力化したい場合には活用すると良い。

Make: AVR Programming pt.02

 まだまだ続く。けど夏休み中に終わらせるのは無理っぽい。

http://squeuei.hatenablog.com/entry/2016/08/15/001834squeuei.hatenablog.com

Chapter 6

 ボタンスイッチをマイコンのデジタルIOに接続する時は、プルアップ抵抗を使うこと。プルアップ抵抗はボタンがオープンの時にレベルを確実にハイにするために必要な抵抗。ただし、AVRの場合は全てのピンにプルアップ抵抗が組み込まれていて、設定で有効化できる。

 Chapter 2で言及したように、DDRxが0(入力)のとき、PORTxはプルアップの設定になる。

プッシュボタンを使うときのチェックリスト

  1. DDRxレジスタを入力にする。
  2. プルアップのために抵抗素子を使わない時は、PORTxで内蔵のプルアップを有効にする。
  3. コードの中でボタンの電圧を読む。
  4. ボタンが押されてる間に何かをしたいのか、ボタンが押されたときに何かをしたいのかをヨーク考える。
  5. ボタンが押された時に何かをしたいのなら、デバウンシングすることを考える。たとえば一度押されたことを確認して、さらに一定時間後にも押されてたら、そのとき初めて何かを実行する、のような。

Chapter 7

LDRについて

 LDRを使う際、組み合わせる抵抗は

{\displaystyle
\mathrm{R} =\sqrt{
\mathrm{R}_{\mathrm{LDR}\mathrm{bright}}\cdot\mathrm{R}_{\mathrm{LDR}\mathrm{dark}}
}
}

で決定するのがよい。

ADCを使う時の注意

 アナログ回路設計のグッドプラクティスとしては、高速なスイッチングがあり、スパイクが乗るチップと、性格で安定した値が要求されるADCとで、独立した電源を供給するのが望ましい。特に、小信号や高周波信号を扱う時には重要となる。

  1. AVCCに給電した? システムのVccからの差は0.3 V以内でなきゃダメ。
  2. ADMUXのREFSxを設定した? デフォルトではAREFの外部電圧を基準とする。AVCCを基準にしたいのならREFS0をセットしないといけない。
  3. ADCのプレスケーラを設定した? ADCにはクロック源が必要。
  4. ADENを設定してADCを有効化した?
  5. マルチプレクサで正しいchを選択した? 設定はbitじゃなくてbinaryだよ?
  6. 最後に、ADCの値を別々に読むときはADCL(下位ビット)から読み込んでる? 10bit読むときはADCLを読み込んでからじゃないとADCH(上位ビット)は更新されないよ?

 上記の設定をしてから、ADCSRAのADSCを設定することで、ADCは変換を開始する。

 ADCSRAのADATEを有効にしてフリーランニングを使う時も、最初の一回はプログラマがADSCを設定しなきゃいけない。

 ADLAR=0のときはADCHの下位2ビットとADCLの8ビットがADCの出力となる。

 ADLAR=1のときはADCHの8ビットとADCLの上位2ビットがADCの出力となる。

 ADMUXでマルチプレクサを設定するときは、上位4ビットの値を保ったまま、下位4ビットを設定しなきゃいけない。 よくやるのはこんな感じ。

ADMUX = (0xf0 & ADMUX) | channel;

Make: AVR Programming pt.01

 買ってから優に一年間放置していた“Make: AVR Programming”を夏休みに読んでしまおう計画。

http://squeuei.hatenablog.com/entry/2015/08/11/212000squeuei.hatenablog.com

Chapter 1

 AVRISPmk2を入手しておいたのだけど、こいつは自分で+5Vを供給してくれないので、ACアダプタでブレッドボードに5Vを給電するとかしないといけない。かつ、私の環境ではavrdudeでうまくmake flashしてくれないので、Arduino ISPを活用することにする。ISP買った意味がない。

 システムやユーザの環境変数を通すのが嫌だったので、PATHを通すバッチファイルを書いて、そこから操作することにする。

PATH=%PATH%;foo\bar\avr8-gnu-toolchain\bin;hoge\fuga\avrdude_utilities;
cd mado\homu\AVR-Programming

といった内容の.batファイル(ここでは安易にavr.batとした)を作成した後、エクスプローラから

C:\Windows\System32\cmd.exe /k "yui\azu\avr"

というショートカットを作る。フォルダやファイルの場所は各自修正のこと。ショートカットがリンクする先の最後にあるavrは.batファイルのファイル名にする。拡張子を付けないのが個人的にポイントだった。

 このショートカットを開けば、コンパイラとユーティリティへのPATHが通ったコマンドプロンプトが開く。

 サンプルコードを書き込む際には、Makefile

PROGRAMMER_TYPE = avrisp
PROGRAMMER_ARGS = -b 19200 -P com3

などとして、PATHが通ったコマンドプロンプトからmake flashする。

Chapter 2

 RAMに変数をつくることと、ピンへの書き込みやピンの入出力設定は同じインタフェース(代入)で行われるけど、これは実際に同じ事をレジスタに対して行っているから。そのレジスタの情報はio.hに格納されてる。

重要なハードウェアレジスタ

  • DDRx : data-direction registers port x

    インプットかアウトプットかを決める。

  • PORTx port x data registers

    • アウトプットに設定したとき:high or lowを設定
    • インプットに設定したとき:pull-upするかどうか(chapter 6参照)を設定
  • PINx port x input pins address

    • インプットに設定したピンのhigh or lowを読んだ結果が格納される。

 デフォルトで全部のピンはインプット。

 DDRの設定をせずにPORTを設定してしまうパティーンが多いので気をつけよう。

Chapter 3

 MOSFETはLEDのGNDとプログラマのGNDをいちいち手で接続したり外したりするのがめんどうなので使う、とのこと。

 正直肉眼で見ても全然わからなかったので写真に撮る。

f:id:squeuei:20160815001430j:plain

 Analog Discovery2のロジアナで見るとこんな感じ。ありがとうAD2。

f:id:squeuei:20160815001520j:plain

Chapter 4

サイロン (Cylon) は、SFテレビドラマ『宇宙空母ギャラクティカ』に登場する架空のキャラクター。
サイロン - Wikipedia

 さすがにわからん。

 プリアンプルの#defineは大文字をアンダースコアで区切って書くのが慣例。

  • ビットの設定:OR
  • ビットの消去:AND
  • ビットの反転:XOR

Chapter 5

 UARTのRT/TXの関係はSPIとは違って送り手と受け手で逆になるから気をつけよう。

 以下はこの本の著者が用意した便利関数の数々。

 initUSARTは、ボードレートの設定、2Xモードの設定、RXTXの有効化、データ長とストップビットの設定を行う。

void initUSART(void) {
  UBRR0H = UBRRH_VALUE;
  UBRR0L = UBRRL_VALUE;
#if USE_2X
  UCSR0A |= (1 << U2X0);
#else
  UCSR0A &= ~(1 << U2X0);
#endif
  UCSR0B = (1 << TXEN0) | (1 << RXEN0);
  UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
}

 送信時はUCSR0A(USART Control and Status Register 0 A)レジスタのUDRE0(USART Data Register Empty)が1になるまで待って、それからUDR0(USART Data Register)に送信したいデータを格納する。

void transmitByte(uint8_t data) {
  loop_until_bit_is_set(UCSR0A, UDRE0);
  UDR0 = data;
}

 受信時はUCSR0AレジスタのRCX0(receive-complete bit)が1になるまで待って、それからUDR0の値を読みに行く。

uint8_t receiveByte(void) {
  loop_until_bit_is_set(UCSR0A, RXC0); 
  return UDR0;
}

 私が持っていたUSB-RS232C変換ケーブルだと、PCで入力した文字と送信された文字が食い違う現象が発生した。

 これもAnalog Discovery 2のロジアナが無ければ、何が起きているのかわからないままだった。ありがとうAD2(2回目)。

 そういえばRaspberry Pi2Bを買ったまま死蔵していたなという事を思い出したので、下記サイトを参考に、シリアルコンソールによるログインを無効に設定してから

  • RPi2B Pin 5 <-> AVR GND
  • RPi2B Pin 7 <-> AVR Pin 2
  • RPi2B Pin 9 <-> AVR Pin 3

で接続し、cu -s 9600 -l /dev/ttyAMA0すると、ちゃんと動作した。

備忘録 Raspberry PiでUART、シリアル通信

Raspberry PIのGPIO上シリアルとArduinoの通信 - Qiita

RPi2 Model B IO Pins – Raspberry Pi Projects

 意外なところで意外なものが役に立つものだなあと、感心することしきりである。

2016年度版、これが私の手帳の書き方

 それは、考えなしになるための方法論。

イントロダクション

 手帳の使い方についていろいろ考えたのでまとめる。

覚えておくために書く

 まず何でもいいから、その日あったこと、考えたことを書く。何でも書く。ニュースに頼ってもいいから書く。

 放っておいたら何もかもを忘れてしまう。確かにあったはずのことなのに、思い出せないなんてことが許せると思える? 私には無理です。

 書くことは最もプリミティブな記録のひとつです。どんな悪文でどんなクソみたいな内容が書かれていても、それがいつかきっとあなたの財産になる(その価値はあなたの頭の中だけにしかないとしても)。  たとえば、レフト式の手帳を使うなら、左ページの余ったスペースにN行日記を書く、というのはいかがでしょう。

 本当は電子化したほうが、検索性の上で便利ですが、そこのところは私もどうしたらいいのかはかりかねているところです。

忘れるために書く

 覚えておきたいことを書いておくことは、思い出そうと思った時に思い出せる、ということに他ならなりません(実際にはどうインデックスを作っておくかが問題になるのですが)。

 逆に言えば、いつでも思い出せるなら、忘れてしまってもかまわない、ということでもあります。ある事項について、それを忘れてしまえば、そのことについて考えずにすみます。思考のリソースは有限なのです。

 六月最終週に新クールの録画予約するということを書いておき、定期的にその記述を確認しておけば、その日まで毎日覚え続けておく必要はないし、それまでに忘れてしまう確率も下がることでしょう。

 思いついたやるべきことはすぐに書く。書いたものは定期的に見直す。この合わせ技で、何かをし忘れるということはそれなりに減ります。サボりとかを除けば。

 どこでも最低限のメモを残せるように、小さなメモ帳を常に持ち歩くというのもよいでしょう。ダイヤメモとか、すぐメモとか、あるいは野帳とか。これらは、手帳がポケットに入らないくらい大きい、上着の中ポケットに手帳を入れると膨らんでかっこ悪い、などの場合に有利です。

考えなしになるために書く

 これは、やることを覚えておかなくてもいいようにしたら、次は「これから何をするべきか」を考えることすらしないようになりたい、という怠惰な発想に基づいた行動スキームです。

 まず、やるべきことのリストを整理します。これはwikipediaのGTD項を参考にしました。

foreach やるべきことのリスト:
    if 行動すべき?:
        if 所要時間 <= 2分:
            いますぐやる
        else if 達成にいくつもステップが必要?: 
            “プロジェクト”リストへ追加
        else if 自分がする必要がある?:
            誰かに依頼する
            依頼した内容を“連絡待ち”リストへ追加
        else if やる日程が決まってる?:
            日時を指定して手帳やカレンダーに追加
        else:
            “次のアクション”リストへ追加
    else:
        if いつかはやりたい?:
            “いつかする”リストへ追加
        else if 記録しておく価値がある?:
            “資料”リストへ追加
        else: 
             忘れる

 重要なのは、具体的で実行可能なステップに分解することです。

「これをするためにはどうすればいいんだろう?」と考えるようではダメです。何も考えること無く書いてあることに従えるようにするのが肝要です。

 また、優先度があまりにも異なることを、リストに並べないほうが良いかと思います。締め切りなどで、明確に優先すべきことがあるならスケジュールに入れてしまう方がよろしいかと。

 そうしないと「このリストのどれから手を付けよう」と考えなければなりません。思考は敵です。「どれも同じくらいの優先度だから、どれから手をつけても同じ」という状況を作るのです。

 私はNOLTYの手帳と手帳専用の補充ノート、それに普通のキャンパスノートを使って、下記の様に整理してます。

 基本的には場所毎のアクションへの落とし込みを意図しています。が、これは私にとっても持続不可能なくらい、項目が細かすぎるかもしれませんので、そこは各自うまくやりましょう。

  • “プロジェクト”
    • 業務:手帳に挟んだノート
    • プライベート:手帳に挟んだノート
  • “連絡待ち”
    • 業務:手帳に挟んだノート
    • プライベート:手帳に挟んだノート
  • カレンダー:
    • 日付が決まってる:手帳の月間ページ
    • 日時が決まってる:手帳の週間ページ
  • “次のアクション”
    • 業務:手帳に挟んだノート
    • 家:手帳に挟んだノート
    • 市内:手帳に挟んだノート
    • 市外:手帳に挟んだノート
    • 通販:手帳に挟んだノート
  • “いつかする”
    • 設備:手帳本体のノート欄
    • 読む本、聞く音楽、見るアニメ :手帳本体のノート欄
    • 勉強したいこと:手帳本体のノート欄
    • 旅行先:手帳本体のノート欄
  • “資料”:独立したノート

 あとは、前のアクションが終わったら、自分のいる場所の“次のアクション”リストを順次実行するだけです。どれも同じ優先度なら、どれから手を付けても、上から下でも、乱択しても、問題ないですよね?

 個人的な感覚として、このGTD(もどき)で2番目に大事なのは「具体的で実行可能なステップに分解する」で、1番目は「2分以内にできることはすぐやる」です。

予約をする

 絵に限らず、何事も突然上手くなることはありません。時間で殴る必要があるのです。

 レフト式やバーティカル式の手帳を使っているなら、そのための時間を先にallocしてしまうのです。特に、長期目標の場合には、上記したプロジェクトリストの中身と連携するのが良いのだと思われます。目標から逆算して分解した具体的な行動を、実施する時間を確保しておくことで着実に推進するのです。

 実のところ、ここのパートは自分もまだうまくできてないのですが、毎日一定の時間を確保して作業するのは脳にいいって『できる研究者の論文生産術 どうすれば「たくさん」書けるのか』にも書いてあったし、上手くいって欲しいし、上手くいくようになりたい。

結論

 tl;dr: 二分以内にできることはすぐやれ、やることリストを作るなら明確で具体的な行動の形で書け、やりたいことがあるなら時間を決めて毎日やれ。

余談

 来年にはまた“最高の手帳活用法”を“発見”して書き方変わってる予感しかない。

参考文献

意志力の話

WILLPOWER 意志力の科学

WILLPOWER 意志力の科学

GTD関連

全面改訂版 はじめてのGTD ストレスフリーの整理術

全面改訂版 はじめてのGTD ストレスフリーの整理術

www.lifehacker.jp

その他

できる研究者の論文生産術 どうすれば「たくさん」書けるのか (KS科学一般書)

できる研究者の論文生産術 どうすれば「たくさん」書けるのか (KS科学一般書)

kaiteki.hateblo.jp

getnews.jp

chromebook flip C100PA でlinux環境づくり

amazon.comからchromebook flip C100PAのメモリ4GBモデルを購入したので、小型軽量ファンレスlinuxマシンとして使わんとする人々に有用と思われるTipsを以下に示す。

UPDATE 2017-06-06

mainline kernelを用いたArch Linux ARMの環境構築については下記記事を参照のこと。

http://squeuei.hatenablog.com/entry/2017/06/06/174048squeuei.hatenablog.com

各種テスト

このあたり参考に。

  1. Ctrl-Alt-t でcroshを起動
  2. memory_testbattery_testなどがある。

shortcut keys

  • Reset : Reflesh + 電源ボタン
  • PgUp : Alt-up
  • PgDn : Alt-down
  • Home : Ctrl-Alt-up
  • End : Ctrl-Alt-down
  • Delete : Alt-backspace
  • IME on/off : C-space (US配列)

Developer Modeに入る

  1. 電源OFFの状態でEsc + Reflesh + 電源ボタン
  2. 白い画面でCtrl-dを押す
  3. スペースキーを押さずに待っているとデータの消去が始まる。
  4. 再起動したらCtrl-dを押すか、30秒待つことでChrome OSが起動する。

USBメモリへcroutonをインストール(sid編)

下記エントリを参考にインストール。-mオプションで国内ミラーを選んでおく。

chrome.hatenablog.jp

  1. Ctrl-Alt-tでshellを起動
  2. sudo umount /media/removable/hogefuga
  3. sudo cfdiskLinuxのパーテションを作る
  4. sudo mkfs.ext4 -L chromebook /dev/sda1
  5. USB stickを抜き差しする
  6. GitHubからcroutonをダウンロードする。
  7. sudo mkdir /media/removable/chromebook/crouton
  8. sudo sh ~/Downloads/crouton -r sid -t xfce -p /media/removable/chromebook/crouton -m http://ftp.nara.wide.ad.jp/debian

crouton環境はCtrl-Alt-tのcroshshellと打ってからsudo sh /media/removable/chromebook/crouton/bin/enter-chrootで起動。 Xfceを起動したい場合はsudo sh /media/removable/chromebook/crouton/bin/startxfce4

ただ、現状すんなりとstartx / startlxde4が起動しない。

crosh -> shellから

sudo rm /dev/dri/card0
sudo mv /dev/dri/card1 /dev/dri/card0

すると起動するんだけど、なんじゃこりゃ。

X11 Fails to Start (Chromebook Flip C100, 45.0.2439.4 dev) · Issue #1938 · dnschneid/crouton · GitHub

USBメモリへcroutonをインストール(trusty編)

ubuntu(trusty)の場合はこう。 sh ~/Downloads/crouton -r trusty -t xfce -p /media/removable/chromebook/crouton -m http://jp.archive.ubuntu.com/ports/

こっちはふつうにXが動く。

archlinux ARM

公式ガイドの手順通りにインストール。

インストール後の設定もろもろ。

localeつくる。

  • vi /etc/locale.genen_US.UTF-8ja_JP.UTF-8コメントアウトを外し、locale-genecho LANG=en_US.UTF-8 > /etc/locale.confexport LANG=en_US.UTF-8

タイムゾーン設定。ChromebookのHWクロックはUTC

  • timedatectl set-timezone Asia/Tokyo

パッケージの更新。

  • vi /etc/pacman.d/mirrorlistからミラーを増やす。
  • pacman -Syuでパッケージ更新。

rootのパスワード設定と通常ユーザ作成。

  • passwdでパスワード設定
  • pacman -S sudo
  • useradd -m -g wheel *username*
  • passwd *username*
  • visudoDefaults env_keep += "HOME"%wheel ALL=(ALL) ALLコメントアウトをはずす。

Xorgのインストール。

  • pacman -S xf86-video-armsoc-rockchip veyron-libgl
  • pacman -S xorg-server xorg-server-utils xorg-apps xterm xorg-xclock xorg-twm
  • sudo cp /etc/X11/xinit/xinitrc ~/.xinitrc

 croutonと比較して、本物Linuxが動くのは利点だが、Kernelが古い(3.14)など、自分でメンテを引き受けて貢献しない限り、Archのbleeding edge性は得られないであろうとの判断があり、現時点における結論としてcroutonのtrustyを使うことにした。
 使用感などは追々。取り急ぎ、環境構築まで。