ヒレガス本 20章 課題
20章の課題は以下の2つ。
- BigLetterViewの文字にNSShadowを使って影を付ける。
- BigLetterViewのの文字にboldやitalicの効果を付けるチェックボックスをつける。
最初の課題は簡単です。メソッドprepareAttributesの末尾にNSShadowに関するコードを追加するだけ。
- (void) prepareAttributes
{
.
.
.
NSShadow* theShadow = [[NSShadow alloc] init];
theShadow.shadowOffset = NSMakeSize(3.0, -3.0);
self.attributes[NSShadowAttributeName] = theShadow;
}
二番目の課題も簡単。以下の手順で実装する。
- BigLetterViewにboldやitalicのプロパティを追加
- アクセッサメソッドで、attributesのNSFontAttributeNameキーの値を更新
- UIはbindingで作成
ヘッダファイルの追加は2行だけ。
@interface BigLetterView : NSView
.
.
.
@property (getter = isBold) BOOL bold;
@property (getter = isItalic) BOOL italic;
.
.
@end
次に実装ファイルに、以下のようなアクセッサを追加。NSFontManagerの説明は、p373を見ればだいたい判る。
@synthesize bold = _bold;
- (void) setBold:(BOOL)inBold
{
NSFont* theFont = self.attributes[NSFontAttributeName];
NSFontManager* theFontManager = [NSFontManager sharedFontManager];
if( inBold )
{
theFont = [theFontManager convertFont:theFont
toHaveTrait:NSBoldFontMask];
}
else
{
theFont = [theFontManager convertFont:theFont
toNotHaveTrait:NSBoldFontMask];
}
self.attributes[NSFontAttributeName] = theFont;
[self setNeedsDisplay:YES];
}
- (BOOL) isBold
{
NSFontManager* theFontManager = [NSFontManager sharedFontManager];
if( [theFontManager traitsOfFont:self.attributes[NSFontAttributeName]] & NSBoldFontMask )
{
return YES;
}
else
{
return NO;
}
}
italicのアクセッサの説明とコードは省略。
最後のUIの処理は文章では判りにくいので以下の図を参考にしてください。
NSObjectControllerを追加してcontentsにBigLetterViewを指定する。
チェックボックスBoldとチェックボックスitalicをObjectController経由でBigLetterViewのboldとitalicにbindingする。
これで、チェックボックスに連動してbigLetterViewの表示が変わるようになります。
プロジェクトファイルは、 Typing_2.zip に置いておきます。
ヒレガス本 19章 課題
19章には課題は無い。無いので、自分で作る事にする。
作成した、アプリケーションTypingTutorに以下の2つの機能を追加する。
- BigLetterViewの矩形に入ったら、カーソルをIビームの形にする。
- BigLetterViewの矩形に入ったら、バックグラウンド色を変更する。
最初の課題は簡単です。NSViewにはカーソルを変更する時にオーバーライドするメソッドが用意されている。 以下のメソッドを追加すれば良い。
- (void) resetCursorRects
{
[self addCursorRect:[self bounds]
cursor:[NSCursor IBeamCursor]];
}
二番目の課題もp339からのロールオーバーのコードをそのまま入れるだけ。
プロジェクトファイルは、 TypingTutorWithMouse.zip に置いておきます。
ターミナルでちょっとした文字列の暗号化と複号化
MacOSXでは暗号化と複号化の定番はopnesslコマンドです。
ターミナルで以下のようにする事で文字列の暗号化が出来る。暗号化する為のパスワードを聞いてくるので、適当に打ち込む事。
$ echo '暗号化したい文字列' | openssl enc -e -aes128 | base64
base64が必要な理由は、opnesslの出力がバイナリだから。base64を使うと暗号化後のデータが文字列になるので扱いやすい。
使い方は簡単。例えば、文字列「秘密にした大切な事」を暗号化するには、
$ echo '秘密にしたい大切な事' | openssl enc -e -aes128 | base64
enter aes-128-cbc encryption password: (パスワードを入力)
Verifying - enter aes-128-cbc encryption password: (もう一度パスワードを入力)
U2FsdGVkX18W0ERyPHnFu1rLkHnaytOC61ZDX2j+SIsYEXp4tuD5QTg0M5VvBVQS
と行えば良い。最後に出て来た”U2FsdGVk…….”が暗号化後の文字列。
複号化するには、ターミナルで以下のように打ち込めば良い。複号化の為のパスワードを聞いてくるので打ち込む事。
$ echo '暗号化した文字列' | base64 -D | openssl enc -d -aes128
先ほどの暗号化した文字列を複号化するには、以下のようにする。
$ echo 'U2FsdGVkX18W0ERyPHnFu1rLkHnaytOC61ZDX2j+SIsYEXp4tuD5QTg0M5VvBVQS' | base64 -D | openssl enc -d -aes128
enter aes-128-cbc decryption password: (パスワードを入力)
秘密にしたい大切な事
もちろん、暗号化した時に入力したパスワードを忘れたら元に戻せないので気をつける事。
mavericksにアップデートしたらgit-completionが行方不明になった
mavericksにアップデートしたら、ターミナルを立ち上げるたびに
-bash: /usr/share/git-core/git-completion.bash: No such file or directory
とエラーを吐かれる。
git-completion.bashの位置が変わったようだ。findで調べると、
/Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-completion.bash
と
/Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
の2カ所に見つかった。
.bash_profilの
# git setting
source /usr/share/git-core/git-completion.bash
を
# git setting
source /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
と書き換える。
エラーも止まり、補完も効くようになり解決。