LxPupインストール

概要

 家のゴミPC(EeePC初期型:容量4GB)にPuppyLinuxのLXDE版をインストールした際の話

インストール

なぜLxPupなのか?

 容量的に通常のLinuxだと明らかに足らない。軽いと思っていたBasixですら4GBが必要で、上記PCの表記上は容量が足りている様に見えるが、システム領域があるので実質4GB未満しか使えない。
 PuppyLinuxは200MB未満でインストール可能なので、上記PCでも余裕でインストール可能。(LxPupは300MBぐらい)
 派生のLxPupにした理由は、PuppyLinuxのデスクトップがゴチャゴチャしているのと、アイコンのデザインが好きに慣れないから。

ダウンロード

 ダウンロードはリンクより可能。今回は16.08.2のisoを落とした。

設定

  1. メニュー → セットアップ → Puppyユニバーサルインストーラを選択
  2. SDカード領域を選択する
  3. 領域を適当に初期化する。(bootの設定を入れる様にする)
  4. インストール時にファイルの指定を迫られるので以下のファイルを指定
    • /initrd/mnt/tmpfs/puppy_lxxenial_XX.XX.sfs
  5. 以下の4ファイルをUSBからコピーしてインストール先に突っ込む(今回は/mnt/sda1)
    • initrd.gz
    • vmlinuz
    • puppy_lxpup_XX.XX.sfs
    • zdrv_lxpup_XX.XX.sfs
  6. メニュー → システム → Grub4Dosブートローダの設定を起動する
    • 上記ファイルを入れておくと場所(/mnt/sda1)を認識してくれる筈
  7. lang_pack_ja-2.1.sfsをリンクから落としてタブルクリックでインストール
  8. 再起動

アプリケーション等

  1. vimリンクを参照して、sfsを落としてインストールする

その他

  1. ユーザ領域をどのぐらいのサイズにするか?
    • 2Gにすると起動が遅くなったので、1Gぐらいがいいのか?
  2. PETgetマネージャでインストールできないものが結構ある(vimがダメだった)
  3. 本体の電源で切ると、次回起動時に立ち上がらない事がある(EeePC側の問題か?)
  4. 起動が不安定

まとめ

 良い子のみんなはマネしないで、もっといい中古のPCを買おう。

参考

FSharp導入編

概要

 F#をちょいちょい弄っているので、オボエガキ兼簡易まとめ。
 Visual Studio 2010以降はデフォで入っており、スクリプト形式で実行できるので、Windowsの場合だとバッチファイルの代りになるのがいい。

インストー

Linux

 環境としては、monoとfsharpが入っていればいいみたい

Windows

 Visual Studioをインストールすると多分自動的に入ってくる

スクリプト実行

Linux

 取り敢えず、HelloWorldを出力させてみる。以下の内容でファイルを作成する。

  // ファイル名 : hello_world.fsx
  printfs "Hello, World"

 コマンドで、以下を実行する。

  fsharpi --exec  hello_world.fsx

Windows

 バッチファイルを作成して実行させるので、以下の内容でバッチファイルを作る。
 因みにfsi.exeのパスは環境によっては違う場所に入っている可能性があるので注意

  REM ファイル名 : run_fsharp.bat
  @echo off
  SET BIN_PATH="C:\Program Files (x86)\Microsoft SDKs\F#\4.0\Framework\v4.0\fsi.exe"
  %BIN_PATH% --exec %1

 上の内容で、hello_world.fsxを作成し、以下のコマンドで実行する。

  REM run_fsharp.batが存在するフォルダに移動する
  REM run_fsharp.bat と hello_world.fsx は同じフォルダに入れておく
  run_fsharp.bat hello_world.fsx

後記

 Windowsのバッチファイルでちょっと複雑な処理をするようなスクリプトを書こうとすると、配列とかループとかがクソ面倒で詰む。F#も文法が手続き型言語から多少離れているので若干書きづらいが、慣れればそれなりに書けるので選択肢としては有りだと思う。
 また、F#の他に開発環境にはJRE(Java Runtime Engine)が入っている事が多いので、clojureも候補としては有り。但し、LISPの方言特有の括弧地獄に悩まされる事にはなるが。

Linuxの自動実行

自動起動設定

概要

 Ubuntuの起動時に自動でプログラムを実行したいので、設定ファイルの直接編集で、どうやったらいいのか調べた。

環境

OS バージョン 備考
Basix 12.04 Ubuntu派生

設定

 自動起動時の設定は、各段階に於いて設定ができる。
 他にも色々あるとは思うが、今回はOS起動時、ログイン時、シェル起動時の3つ。

OS起動時

 OS起動時には、rc.local ファイルが実行される。このファイルは2つ存在して以下の順で呼ばれる。
 正確には、init.d直下のrc.localが、etc直下のrc.localを呼んでいる。

  1. /etc/init.d/rc.loocal
  2. /etc/rc.local

 また、etc直下のrc.localは、/etc/rc.local.d/ 直下のファイル群を呼んでいる。

 よって、結論としては、単体のスクリプトを/etc/rc.local.d/ の直下におけば良い。

ログイン時

 ログイン時には、/etc/profile ファイルが呼ばれる。このprofileファイル内で、/etc/profile.d/ 直下のファイル群を呼んでいる。

 よって、結論としては、単体のスクリプトを/etc/profile.d/ 直下におけば良い。

シェル起動時

 シェル起動時には、ユーザのホーム直下(~/)の.bashrcファイルが呼ばれる。
 このファイルに記述しておけば、シェルの起動時に毎回実行される。毎回実行されるので、2回実行するとまずいコマンドとかは、ここには記述しないようにしよう。

予定

 USBが挿入されたタイミングで設定が適用される様にしたいので、そこら辺を調査する予定。

干支の逆引きについて

概要

 干支(かんし/えと)にちなんだ地名や歴史的事件名などが結構あるが、そこから逆算して年代を推測できると便利なのでは?と思ったので考察してみた。
 ちなみに干支は、「えと」としてお馴染みの子、丑、寅・・・ではなく、甲子、戊辰、辛亥・・・の方をいうので注意。

干支の逆引き

十干と十二支の一覧

十干

番号 十干 音読み 訓読み
0 こう きのえ
1 おつ きのと
2 へい ひのえ
3 てい ひのと
4 つちのえ
5 つちのと
6 こう かのえ
7 しん かのと
8 じん みずのえ
9 みずのと

十二支

番号 十二支 音読み 訓読み
0
1 ちゅう うし
2 いん とら
3 ぼう
4 しん たつ
5
6 うま
7 ひつじ
8 しん さる
9 ゆう とり
10 じゅつ いぬ
11 がい

逆算方法

逆算式

 逆算式は以下の通り、十干と十二支の番号をそれぞれ当てはめると算出できる

 10の位 = (十干 - 十二支) mod 12 / 2
 1の位 = 十干
 干支番号 = 上で算出した数に1を足す

  • 甲子園でお馴染みの「甲子」
     10の位 = (0 - 0) mod 12 / 2 = 0
     1の位 = 0
     干支番号 = 0 + 1 = 1
     よって、干支番号は1

  • 辛亥革命でお馴染みの「辛亥」
     10の位 = (7 - 11) mod 12 / 2 = 8 / 2 = 4
     1の位 = 7
     干支番号 = 47 + 1 = 48
     よって干支番号は48

  • 甲午農民戦争でお馴染みの「甲午」
     10の位 = (0 - 6) mod 12 / 2 = 6 / 2 = 3
     1の位 = 0
     干支番号 = 30 + 1 = 31
     よって干支番号は31

modについて

 modは簡単に言うと割った時のあまりのことである。ただし、マイナスの場合にも定義されることに注意。
 例えば、以下のような感じになる。
 25 mod 12 = 1
 -4 mod 12 = 8

順方向

干支番号から干支の算出

 一応順方向についても記述しておく。
 干支番号から干支の算出は簡単で以下の通り

 干支番号から1を引いたものについて考える。
 十干  = 1の位から算出
 十二支 = (10の位 + 1の位)から算出

  • 「辛亥」
     干支番号は上記の通り48なので、47を元に計算する。
     十干  = 7 = 辛
     十二支 = 4 + 7 = 11 = 亥

  • 「丙午」
     干支番号は43なので、42を元に計算する。
     干支  = 2 = 丙
     十二支 = 4 + 2 = 6 = 午

年の予測

還暦について

 年の予測の前に還暦について説明する。60歳のお祝いで還暦というものがあるが、これはこの干支が一回りした際のお祝いとして行われる。
 十干(10)と十二支(12)の組み合わせは、全部で120通り存在するが、干支としてカウントされるのは半分だけである。この組み合わせが存在するパターンと存在しないパターンの違いは、組み合わせが偶数同士、奇数同士に限定される所にある。
 つまり、甲(0)、丙(2)、戊(4)、庚(6)、壬(8)は、子(0)、寅(2), 辰(4), 午(6), 申(8), 戌(10)との組み合わせは存在するが、丑(1), 卯(3), 巳(5), 未(7), 酉(9), 亥(11)との組み合わせは存在しないということである。乙(1)、丁(3)、己(5)、辛(7)、癸(9)の場合は、その逆となる。

予測

 60で一回りすることを応用して、ある程度の年代の予測が可能である、例えば、私の誕生年である1988年は戊辰であったので、戊辰戦争は、1988から60の倍数となるはずである。実際に、戊辰戦争の開戦は1868年なので、1988年のちょうど120年前である。
 地名とか、建物とかに干支が入っている場合、大体その年に作られたかなんかしたものだと思うので、ある程度の年を予測できるのではなかろうか。甲子園とか甲子温泉とか庚申塚、辛亥革命などなど・・・

十干の覚え方

 十二支はともかく、十干を覚えるのはきつい。甲乙丙丁まではいいとしても、それ以降は馴染みがなく覚えづらい。
 ベストな方法は知らないが、五行(木火土金水)と絡めて覚えるのが、一番いい気がする。
 甲(きのえ)は、木の兄で「きのえ」であり、乙(きのと)は、木の弟で「きのと」である。十干は兄弟(えと)の順で並んでいるので、五行の相生を木を起点として覚えればいい。
 正直なところ、この方法の場合、五行を新たに覚える必要があり、敷居は結構高い。私の場合は「デモンズゲート」というゲームで相剋関係を覚えていたので、この方法でなんとか順番を把握することができたという感じである。

参照

MFC事始め

MFC簡単まとめ

MFCとは?

 MicrosoftVC++用に開発した、Widnowsアプリケーション開発用フレームワーク
 WindowsAPIを直に呼び出すよりは多少マシぐらいで、新規で覚えるメリットは、ほとんど無い。
 WindowsXP以前は、よく使われたので、そのメンテナンスとか移植とか、そんな感じの仕事につくと使う羽目になる。個人でやるならば、素直に.Netを使おう。

環境

項目 情報
OS Windows 7
Visual Studio 2015

インストール

 VisualStudioをインストールするとデフォルトで入っている。特に自分でインストールする必要は無い。

プロジェクト作成

とりあえずダイアログベースプログラムを作成

  • 以下の流れで作成
    • ファイル
    • 新規作成
    • プロジェクト
    • プロジェクト作成ダイアログが開く
      • Visual C++MFCアプリケーションを選択
      • プロジェクト名を入力
    • MFCアプリケーションウィザードが開く

基本的な流れ

大体以下の流れで開発していく
(今回はプロジェクト名をMFCSamplesにしました)

  1. リソースビューからダイアログを開いて、視覚的に画面パーツを追加
  2. ダイアログのクラス(MFCSamplesDlg.cpp内)に、追加したパーツに対するイベントやDDX/DDVを記述
  3. パーツを拡張したり、別クラスに処理を分ける

ボタンなどの処理/イベントを細かく管理する場合は、基本クラスを拡張すると良い
拡張の流れは以下の通り

  1. パーツの基本クラスを継承してクラスを作成
  2. ダイアログクラスのメンバ変数を追加して、DDX/DDVとして作成したクラスのインスタンスを持つ
  3. こうすると拡張先のクラスにイベント処理を書いていけば良くなる

コーディングスタイルについて

 クラス名は必ずCを先頭につける必要がある。ファイル名にはつける必要が無いが、クラス名につける必要がある。

ファイル名 クラス名
MFCSamplesDlg.cpp CMFCSamplesDlg

 また、Mustではないが、MFCフレームワークの各クラスが、がっつりハンガリアンで書かれている。Mustではない思うが、周りに合わせる場合は使うべきなのかもしれない。
 他はC++の基本的なスタイルでコーディングしていけばいいのでは無いかと思う。

サンプル

とりあえず、GitHub上に公開しているので、見てもらえばいいと思う。
メインダイアログから、各パーツのサンプルダイアログへ飛べるようになっている(追加予定)。

中継器と有線LANで繋ぐ

概要

無線の中継器に有線で繋いだ際にIPアドレスが割り振られなかったので、どうにかした話。

事象

  • eth0が無くなって、p2p1とかになっていた
  • 多分、コマンドでネットワーク関連を変更した事があったので、それが原因かも
  • ifconfigしてみると、IPv4のアドレスが附与されていなかった

原因

よくわからない

解決

原因はよく割らなかったが、udev(/etc/udev/rules.d/70-persistent-net.rules)にeth0の設定を追記したらIPアドレスが振られる様になった
参考 : [ihttp://kreisel.fam.cx/webmaster/clog/2011-01-20-1.html]

SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="有線LANのMACアドレス", NAME="eth0"

dev_idとtypeは省略して問題ないようである

byobu-screenのエスケープシーケンス変更

概要

byobu-screenのエスケープシーケンスを変えたいが、config(F1/F9)が効かない

原因

pythonの特定のモジュールがないことが原因のようである。
以下のパスのファイルを起動してconfig画面を出力している

/usr/lib/byobu/include/config.py

これを直に叩いて見ると、以下のメッセージが出力された。

ERROR: Could not import the python snack module

未解決版

snackモジュールをダイレクトにインストールしてみる
1) easy_installを利用するためにsetuptoolsをインストールする

sudo apt-get install python-setuptools

2) snackにcythonが必要なのでインストール

sudo apt-get install cython

3) Blasが必要と言われるので、LAPACKをインストールする

sudo apt-get install liblapack-dev

4) snackインストール

sudo easy_install snack

ここまでやって再度実行すると、以下のエラーが出る。 悲しいかなぁ

Traceback (most recent call last):
  File "/usr/lib/byobu/include/config.py", line 69, in <module>
    snack.hotkeys[ESC] = ord(ESC)
AttributeError: 'module' object has no attribute 'hotkeys'

とりあえずここでギブアップ

解決版

configだけなら以下のコマンドでOKらしい

byobu-config

ここで、エスケープシーケンスを変えればOK

C-]をエスケープシーケンスにする

残念ながら上記の方法では、C-]をエスケープシーケンスに設定しようとすると、何故かNGを喰らう。 仕方ないので、設定ファイルを直にいじることにする。
設定ファイルは、以下のパスのものをいじればいいらしい

~/.config/byobu/keybindings

追記内容は以下の通り

escape ^]]

]が2回書いてあるのは、1回だけだと何故かうまく反応しなかったから。