もちゅるの日常

特に決まっていないざっくばらんなブログ

啓発本の読み方

情報はいかに使いこなせるかが大事です。

本を読むだけでは、自分からは変えれない

本に納得するようなことが記載されていても、その意味を理解しただけでは自分の生活ルーチンに取り入れない限り覚えることも身に付くことも、習慣化し、そこから何かを学ぶことも出来ない。

誰かから同じ意味を聞くか関係ない話題で偶然シナプスが走ったときに思い出すだけだ。
しかもこれは結局本を読んだときに納得しているのと同じで、きっかけとなったその人に対して親近感や共有による親密度があがるだけで、何も変えれない。

本を読んだ後は、読んで得た要素を本から抜き出しする作業をすることが何よりも大事だ。

抜き出ししないと再び本を読み直すことになるし、情報資産としてその本を保存し続けなければいけない。
せっかくお金を払って借りている部屋にデッドスペースが生まれ値段相応の価値を得られなくなる。

本に大事だと思った情報を抜き出すには

  1. 大事だと思った部分を見つける
  2. 自分の言葉にまとめる(ここで付け加える作業も入る)
  3. 生活ルーチンに一番近い記憶媒体(ノートやスマホなど)にまとめる
情報を抜き出すにも、最低限の手順が必要になる。

ただ本の中の文章をそのまま抜き出しても、後からそれを見ても何のことか理解できなかったり、文章自体を理解できていない証拠にもある。(ただしその文章が好きなだけもある)

頭の中で自分の言葉にまとめても、ノートなどにまとめておかないと、人は必ず忘れる。

はてなのスタイル変更しました。

 サイトの自作CSSを作成しました。

 前々からはてなのデザインを自分で弄りたいと思っていたのですが、優先度が低く弄る機会がなく、そしてそのまま更新頻度も下がり放置状態が続いていました。。

 しかし別件で再びサイトを更新する必要性が出てきたついでに作成しました。はてなCSSを適用する方法やCSS自体の種類や使い方をウェブで調べながら、ちまちまと進めたので割にあわない時間を使ってしまいましたが、今後ももんもんと弄りたいなーと考えなくて済むので、まあ良しとしました。

以下全部ではないですが参考サイトと実際のCSSファイルです。コメントに嘘や非効率な組み方になっているので、使用・参考は自己責任で。

続きを読む

Lua Object-Oriented Programming(OOP) オブジェクト指向

注意:勉強がてらの覚え書き、間違っている可能性もあります。
鵜呑み注意。

テーブルを利用したオブジェクト指向プログラムライク

Account = {balance = 0}
function Account.withDraw(v)
    Account.balance = Account.balance - v
end

この定義は Accountオブジェクト内に新しい関数とフィールドを作成する.次のように呼び出せる。

Account.withDraw(100.00)

しかしこの方法だと次のケースで問題が起きる

a = Account; Account = nil
a.withDraw(100.00) -- ERROR

withDraw関数内でAccountが参照されているが、この関数を呼ぶ前にAccountにnilを渡している。

もう少しスマートに
Account = {balance = 0}
function Account.withDraw(self, v)
    self.balance = self.balance - v
end

呼び出し↓

a1 = Account; Account = nil
a1.withDraw(a1, 100.00) --OK

withDraw関数呼び出しの前にAccountにnilが渡されても問題ない.
ついでにselfパラメータを使うことで,別オブジェクトでも同様にwithDraw関数を使える.↓

a2 = {balance = 0, withDraw = Account.withDraw}
a2.withDraw(a2, 290.00)

ごくわずかだがOOPに近づいたがまだまだ遠い。
関数にアクセスするためにわざわざインスタンスを渡すのは面倒だ。

もう少しスマートに

次のように関数を宣言するとselfが自動で引数に入る.

function Account:withDraw(v)
    self.balance = self.balance - v
end

そして次のように呼ぶ.↓

a3:withDraw(100.00)

AccountとwithDrawの間を.(ピリオド)ではなく:(コロン)で繋ぐだけでselfという隠しパラメータが引数に追加される.
コロンは便宜上のためだけの構文になる。

ごくわずかだがOOPに近づいたがまだまだ遠い。
複数のAccountインスタンスを生成したい問題を解決できていない。

メタテーブルを利用したオブジェクト指向プログラムライク

メタテーブルとはテーブルと同じ。
ただしテーブル内の値は特定の演算をしたときのみ使われる。
テーブル内の値は決まっている。

  • __add : +演算
  • __sub : -演算
  • __mul : *演算
  • __div : /演算
  • __mod : %演算
  • __pow : ^(累乗)演算
  • __unm : 単項演算
  • __concat : 連結演算
  • __len : #演算
  • __eq : ==演算
  • __lt : <演算
  • __le : <=演算
  • __index : table[key]インデックスアクセス
  • __newindex : table[key] = valueインデックス代入
  • __call : 値を関数呼び出したとき

所謂C++でいうところのoperator*()などになる。

setmetatable(a, {__index = b})

aオブジェクトが持っていないときは,bへオペレーションを探す。

function Account:new(o)
    o = o or {} --もしUserが提供しない場合は生成される.
    setmetatable(o, self)
    self.__index = self
    return o
end

oオブジェクトのメタテーブルをself(=Account)に決定する。
selfにindexアクセスをした場合はself(=Account)を探すように決定する.
oオブジェクトが持っていないときは, self(=Account)へオペレーションを探す。
(indexに設定している理由は、関数呼び出しはテーブルのindexアクセスによるもののため. Account.drawWithはAccount["drawWith"]と同じ)

a = Account:new()
a:deposit(100.00)

↑新しいAccountインスタンスが生成される。
a:deposit(100.00)が呼ばれたとき、テーブルa内にdepositが見つからない場合はメタテーブルの__indexを調査する。
展開するとこんな感じになる。

getmetatable(a).__index.deposit(a, 100.00)

↑aのメタテーブルのキーとなる__indexの中にあるオブジェクトAccountのdeposit関数をコールしている。
つまりは

Account.deposit(a,100.00)

になる。これは初めの方で説明したもの。
aオブジェクトに対してAccountのdeposit関数を使っているのと同じ。
これでAccountのインスタンスが作成でき、
aのインスタンスメソッドが呼ぶことができた。

継承

とりあえず次のような基底クラスみたいなAccountクラスがあったとする。

Account = {balance = 0}
function Account:new(o)
    o = o or {}
    setmetatable(o, self)
    self.__index = self
    return o
end

function Account:deposit(v)
    self.balance = self.balance + v
end

function Account:withDraw(v)
    if v > self.balance then
        error "金がねぇ"
    end
    self.balance = self.balance - v
end

AccountのサブクラスSpecialAccountを定義する.

SpecialAccount = Account:new()

これでSpecialAccountはAccountのインスタンスになる。
そして次で変数追加.

s = SpecialAccount:new{limite = 1000.00}

selfはSpecialAccountを参照しています。
そしてselfはmetatableの__indexに登録されています。
つまりこれで s はSpecialAccountのインスタンスになります。
しかもAccountを継承してます。
↓この式を評価すると

s:deposit(100.00)

sの中にdepositない。SpecialAccountを見に行く。
SpecialAccountの中にdepositない。Accountを見に行く。
Accountの中にdepositある。Account.depositを実行。
こんな感じになります。

オーバーライドを実現

上の評価の流れでいくと、SpecialAccountにwithDrawを定義したらAccountのwithDrawを呼ぶ前にSpecialAccountのwithDrawを呼ぶことになります。

function SpecialAccount:withDraw(v)
    if v - self.balance >= self.getLimite() then
        error "金欠"
    end
    self.balance = self.balance - v
end
function SpecialAccount:getLimite()
    return self.limit or 0
end

参考:http://www.lua.org/pil/index.html:Programming in Lua (first edition)
参考:http://milkpot.sakura.ne.jp/lua/lua51_manual_ja.html:Lua 5.1 リファレンスマニュアル(エンコードによる文字化け注意)

Fragmentの使い方メモ

 自分用メモ。

概要

Activityの部品の一つ。再利用可能なUIを作るのが目的。
例えばActivityが2つあったとして、その二つに同じUIが存在する場合に
そのUI部分をフラグメントで実装することによって、同じ実装を2度することなく再利用できる。
(所謂関数)

使い方(3.0未満〜1.6以上)

ライブラリを登録

Android SDK Manager > Available Packages > Android Compatibility package
をインストールする。

・ライブラリを登録する(パスを通す)(eclipse 画面)
インストールが完了するとSDKフォルダ/extras/android/support/v4フォルダに
android-support-v4.jarというファイルがあるのでそれがライブラリになる。

layoutフォルダにUIとなるxmlを追加する。

通常通りのレイアウトを用意する。

UI制御用にFragmentを継承したクラスを用意する。


アクティビティからフラグメントを登録する

バージョン注意

Fragmentを使用するにはandroidバージョンが3.0(HoneyComb)以上になる。
もし3.0未満で使用たい場合はAndroid Compatibility packageを利用すれば1.6まで対応可能。

3.0以上の場合
  • FragmentActivityではなく通常のActivityを継承する。
  • getSupportFragmentManager();ではなくgetFragmentManager();を使う.

xmlに埋め込む方法

xmlを埋め込むだけで使う方法もある。
使いたいレイアウトのxmlを埋め込む

Mac + GitHub

Mac環境下でGitHubSSH通信する必要が出たので、https://help.github.com/articles/generating-ssh-keysを実際に試しながらメモ。

SSHキーの作成からGitHub登録まで
   Step 1:既にSSHキーを所持しているか確認
     #PC内に既に.sshというディレクトリが存在するか確認.
     $ cd ~/.ssh
     
     もし"No such file or directory"と出たらStep 3へ

  Step 2:バックアップと既存のSSHキー削除
     古いSSHキーをバックアップし、.sshフォルダ下の古いキーを削除します。
     $ mkdir key_backup
     $ cp id_rsa* key_backup
     $ rm id_rsa*

  Step 3:新しいSSHキーを生成する
     PublicとPrivateのRSAタイプのSSHキーを生成.
     キーは.ssh/id_rsaとして生成される.
     $ ssh-keygen -t rsa -C "your@mail address"
     [Press enter]
     [パスフレーズを入力]
     [再度パスフレーズを入力]

  Step 4:GitHubSSHキーを追加する
     先ほど作成したSSHキー(Public)をクリップボードへコピー
     $ pbcopy < ~/.ssh/id_rsa.pub

     GitHubのアカウント設定ページで、SSH Keysをクリック。
     Add SSH keyをクリック。
     Keyフィールドにクリップボードからペーストして、キーを設定する。
     GitHubパスワードを確認。

  Step 5:正しくできたか検証
     GitHubSSHプロトコルで接続を試す
     $ ssh -T git@github.com
     [yes]

   もし"access denied"と表示されたら、HTTPSプロトコルを使用してください。
   もしSSHが必要な場合、問題を探さなければいけません。

GitHubリポジトリ作成からEclipseプラグインのEGitインストールまで
   Step 1:GitHubリポジトリを作成

     もしEclipseマーケットプレイスが見つからない場合はStep 2へ
     ある場合はStep 3へ

   Step 2:Eclipseマーケットプレイスをインストールする
     新規ソフトウェアのインストールから実行
     Indigo - http://download.eclipse.rg/releases/indigo
     一般ツール > Marketplace Clientをインストール

   Step 3:EclipseマーケットプレイスからEGitをインストール

   Step 4:プロジェクトをGitに登録する
     Eclipseでプロジェクトをエクスプローラーで右クリックしてチーム > 共有を選択
     開いたダイアログでレポジトリータイプを聞かれるのでGitを選択

   Step 5:.git/configを編集する
     プロジェクトに.gitフォルダが追加されるので、/.git/configを開き
     以下の設定を追加する
     [user]
        name = ここにユーザ名
        email = user@example.com

コミットなどは未定。   





将来転職を考えている人が今からでもやるべきたった1つの行動

将来今いる会社から次の会社へ転職しようと考えているなら必ずやっておくといい行動を書く。

これは転職活動時に必要になる業務履歴書を書くときに非常に役に立つ。

「いつ」「どこで」「何のために」「何をやって」「どうなったか」を業務記録として残す。

 

当時を思い出しながら書くより、記録として残しておけば当時の苦労や発見、役に立ちそうな情報など忘れていた情報を思い出せる。

またこの5つを常に書けるようになるには、PDCAサイクルを常に頭の中に入れて行動する必要がある。

副産物として毎日だらだらと仕事した毎日から脱却できる場合もある。

記録として実際に字におこして見てみると、自分の凡人さにショックを受ける人がいるはずだ。

その凡人から逃れるために一つ一つの仕事をPDCAサイクルでこなすようになってくる。

 

エントリーシートや面接は、会社の人に向けて自分の歴史が会社にとって役に立つかをアピールすることに尽きる。

上で紹介した行動をしておくことで、面接時に自分の対応した問題やその解決法などを詳細に伝えることができるだろう。

 

転職を考えていない人もまだ先だとしても転職を考えている人も試す価値は十分にあるはずだ。

Visual Studio 2010でsdfとipchの保存場所を変更する

  1. Visual Studioを開く
  2. メニューから「ツール」→「オプション」を選択
  3. 「テキスト エディター」→「C/C++」→「詳細」→「フォールバック位置」と進む
  4. 「常にフォールバック位置を使用」をTrueにする
  5. 「フォールバック位置」に適当なフォルダのパスを指定

sdfとipchの無粋な配置に堪えられない方、ソースレイアウトを綺麗にしたい方はお勧めです。