啓発本の読み方
情報はいかに使いこなせるかが大事です。
本を読むだけでは、自分からは変えれない
本に納得するようなことが記載されていても、その意味を理解しただけでは自分の生活ルーチンに取り入れない限り覚えることも身に付くことも、習慣化し、そこから何かを学ぶことも出来ない。
誰かから同じ意味を聞くか関係ない話題で偶然シナプスが走ったときに思い出すだけだ。
しかもこれは結局本を読んだときに納得しているのと同じで、きっかけとなったその人に対して親近感や共有による親密度があがるだけで、何も変えれない。
本を読んだ後は、読んで得た要素を本から抜き出しする作業をすることが何よりも大事だ。
抜き出ししないと再び本を読み直すことになるし、情報資産としてその本を保存し続けなければいけない。
せっかくお金を払って借りている部屋にデッドスペースが生まれ値段相応の価値を得られなくなる。
はてなのスタイル変更しました。
サイトの自作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)
メタテーブルを利用したオブジェクト指向プログラムライク
メタテーブルとはテーブルと同じ。
ただしテーブル内の値は特定の演算をしたときのみ使われる。
テーブル内の値は決まっている。
- __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を追加する。
Mac + GitHub
Mac環境下でGitHubにSSH通信する必要が出たので、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:GitHubにSSHキーを追加する
先ほど作成したSSHキー(Public)をクリップボードへコピー
$ pbcopy < ~/.ssh/id_rsa.pub
GitHubのアカウント設定ページで、SSH Keysをクリック。
Add SSH keyをクリック。
Keyフィールドにクリップボードからペーストして、キーを設定する。
GitHubパスワードを確認。
Step 5:正しくできたか検証
GitHubへSSHプロトコルで接続を試す
$ 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の保存場所を変更する
- Visual Studioを開く
- メニューから「ツール」→「オプション」を選択
- 「テキスト エディター」→「C/C++」→「詳細」→「フォールバック位置」と進む
- 「常にフォールバック位置を使用」をTrueにする
- 「フォールバック位置」に適当なフォルダのパスを指定
sdfとipchの無粋な配置に堪えられない方、ソースレイアウトを綺麗にしたい方はお勧めです。