2010年12月21日火曜日

NSLogでNSStringを表示 %@

NSStringをフォーマット出力する際はオブジェクトそのものを出力する %@ を利用する。
つい %c とするものかと思ったのですが。

NSString *str;
    str = [[NSString alloc] initWithFormat:@"%d/%d/%02d", 2010, 12, 21];
    NSLog(@"date format: %@", str); //NSStringをフォーマット出力する際は %@ を利用。オブジェクトそのものを出力
    //NSLog(str);

2010年12月13日月曜日

Objective-Cの変数のスコープ

他の言語でもそうですが、 { } で囲まれたブロックの内部で定義された変数はそのスコープ内でのみ有効です。
同名の変数が外部に存在する場合は見えなくなります。

#import 

int main (int argc, const char * argv[]) {
    int abc = 3;

    {   
        int abc = 2;
        NSLog(@"%d", abc); // 2
    }   
    NSLog(@"%d", abc); // 3
    return 0;
}

2010年12月7日火曜日

ターミナルでログアウトしてもコマンドを終了させないようにするには nohup を使うと良い

ログアウトしたり、ターミナルが強制切断された場合でも、バッチを動かすには nohup を付けてコマンドを実行すればOKだそうです。
時抱くサーバーで初 rsync が長いので、nohupして寝ようと思います。
$ nohup ./example.sh

2010年12月6日月曜日

bloggerでプログラムソースを表示する方法/prettyprint

bloggerでプログラムソースをきれいに表示する方法の一つとして、prettyprintというのがあるようです。
なかなか良いです。

インストール手順は参考元の Add to Blogger をクリックで一撃です。
使い方は以下の通り

<pre class="prettyprint">
(コード)
</pre>

参考元:
http://www.kuribo.info/2008/04/code-prettify.html

Objective-Cでの整数のデータ長

Macには32bitと64bitの環境が混在しており、以下の通りの長さになるそうです。
longを利用しなければ、動作的に問題なさそうですね。

32bit環境64bit環境
short1616
int3232
long3264

Objective-Cのステートメントの末尾には;(セミコロン)が必要

#import <Foundation/Foundation.h>

//マクロ定義
#define TEST 18 //プリプロセッサへの命令なので;(セミコロン)が必要ない。セミコロンを付けるとそれも展開される

int main (int argc, const char * argv[]) {
    double test = 99; //ステートメント

    NSLog(@"test : %d", test); //ステートメント
    NSLog(@"TEST : %d", TEST); //ステートメント

    return 0;
}

検索語のハイライトをOFFする方法

よく忘れるのでメモ

:noh

Objective-Cで割り算する際の注意点

割り算をする際は %% と % をエスケープする必要があります。

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    int num1 = 14;
    int num2 = 4;

    NSLog(@"num1 + num2 = %d", num1 + num2);
    NSLog(@"num1 - num2 = %d", num1 - num2);
    NSLog(@"num1 * num2 = %d", num1 * num2);
    NSLog(@"num1 / num2 = %d", num1 / num2);
    NSLog(@"num1 %% num2 = %d", num1 % num2);

    return 0;
}

2010年12月5日日曜日

Objective-Cで現れるNSの意味

NSLog や NSString のように、Cocoa環境のクラスや関数の名前は NS で始まります。

このNS は Mac OS X の前身である NeXTSTEP の略です。

MacBookProでバックスラッシュを入力する方法

¥はMacBookProではバックスラッシュとは認識されないようだ。

option + ¥ で \ が入力出来た。なるほど。

参考元:
http://blog.livedoor.jp/yukidon12/archives/29195413.html

@から始まる要素は、コンパイラへの指令(ディレクティブ)

@"hello" のように @ から始まる要素は、コンパイラへの指令(ディレクティブ)という意味で、「コンパイラ・ディレクティブ」と呼ばれています。

NSStringのインスタンスは @"hoge" で生成できる

Objective-C のクラスからそのオブジェクトであるインスタンスを生成するには、通常 alloc メソッドなどの専用メソッドを実行する必要があります。

しかし、文字列は頻繁に使用するので、次の形式でインスタンス生成を行う事が出来ます。

@"hoge"

ただし、この方式で生成できるのは「7ビットASCII文字」(半角英筋)のみです。
日本語はサポート外になります。

ターミナルでヘッダファイルを検索する

以下の手順で ヘッダファイルを検索する事ができます。

$ open -h NSString

オプション -h を除くと、通常の Finder から、ダブルクリックした際の挙動と同じにアプリケーションでファイルを開く事ができます。

$ open hoge.txt

※このコマンド自体知りませんでした・・・

Cocoa.hを覗いてみた

以下の3つのヘッダファイルが #import されていた
 
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
#import <CoreData/CoreData.h>


Cocoa.h 自体が GUI アプリケーションのフレームワークであることを考えると納得の漢字です。
  1. Foundation.h …… 基本機能
  2. AppKit.h        …… GUIを構築するフレームワーク
  3. CoreData.h    …… データ管理フレームワーク

objective-cのコメントの書き方

一般的な感じですね。

1行    …… //
複数行 …… /* */

コンパイル前の処理「プリプロセッサ」

#import のように # (シャープ)で始まる文はプロプロセッサに対する命令と言う意味で、「プリプロセッサ・ディレクティブ」などと呼びます。

自作ヘッダなどシステム標準以外のヘッダを読み込むには「<>」の代わりに「"」を利用します。

#import "myHeader.h"

ヘッダファイルのインクルード #import

#import でヘッダファイルを読み込みます。
#import は #include とは違って一回しかヘッダを読み込みません。

2010年12月2日木曜日

rsyncでファイルをバックアップ

ふと、自宅のサーバーのHDD壊れたらどうしよう、と思いまして rsync をちょっとお勉強して動かして見ました。


#バックアップしたいファイルがあるサーバー
cd ~./ssh
ssh-keygen -t rsa -f rsync #rsyncという鍵ファイル
#パスフレーズは無しで作成、rsync.pubが公開鍵
scp rsync.pub user1@remote_server:/var/tmp #バックアップサーバにコピー
#バックアップ先のサーバーへログイン
ssh user1@remote_server
mkdir .ssh
cat /var/tmp/rsync.pub >> authorized_keys
#バックアップ用ディレクトリを作っておきます
mkdir backup
exit
#ログインの確認
ssh -i ~./ssh/rsync user1@remote_server
#rsync サンプル
rsync -av --delete -e 'ssh -i ~/.ssh/rsync' /var/www user1@remote_server:~/backup/


参考:

2010年11月28日日曜日

Mac OS X でrootパスワードを設定する方法

コンソールで作業していると、rootになりたくなりますが最初は有効ではないので、以下の手順でrootを有効にしてパスワード設定します。
  1. Macintosh HD
  2. システム
  3. ライブラリ
  4. CoreServices
  5. 「ディレクトリユーティリティ」を起動
  6. 編集(メニュー)
  7. ルートユーザーを有効 を選択・有効化。


参考元
http://apple-voice.com/wordpress/2010/04/how-to-enabl-root-user-mac-os-x-104-105-106/

Mac OS X の拡大縮小を標準に戻す

Mac OS Xを使っていると、つい手が滑ってタッチパッドに触れて、拡大or縮小してしまいますが、そんなときは、
command + 0
で標準に戻せます。

基本windows使いの自分に向けてのメモですな。

appleIDの名前(姓名)を変更する方法

iphoneアプリをお勉強してみようかと、SDKをダウンロードしようとしたのですが、その前に、参考にしていた本の手順によると、AppleIDを取得しておいた方がよいということだったので、さっそく久々にログイン。

すると、僕の Apple ID が漢字表記でした。
参考にしていた本によると、姓名は英語表記が良いということだったので早速変更しようとしたのですが手順が分からず……。

googleで検索しみたら一撃で答えが分かりました。

  1. https://appleid.apple.com/cgi-bin/WebObjects/MyInfo を開く
  2. アカウントを管理する
これで、編集画面に辿り着けます。

2010年11月10日水曜日

sedでapacheのログの特定の時間を抜き出す方法

普段、phpばかり書いていると sed とか実践ベースなコードが書けないので、簡単にこれは使うかも的なコードをメモ。


2010年11月の00時00分を抜き出して less で表示というワンライナーです。
$cat access_log.201011* | sed -n '/\[.*:00:00.*\]/p'   | less

2010年10月9日土曜日

MacOSXで利用するEclipse版Aptanaの必須ショートカット

エディタのタブ移動
  • command + F6

ソースとプレビュー(safari)間の移動
  • option + F7

この2つを知っているだけでもだいぶ作業効率が違いますね。

まだ、覚えられてないので、メモ代わりに記事にしておこうと思います。

2010年8月17日火曜日

klabのソーシャルアプリ勉強会に参加してきた

ちょっと古い話になってしまいましたが、【LAMPで作るソーシャルアプリの負荷対策 ~アプリとインフラの調和のテクニック~】に参加してきたので、内容をまとめてみようと思います。


主に、klabが提供しているヒットソーシャルアプリ「恋してキャバ譲」を開発、運用する上で得たノウハウの話でした。


システム構成

  1. フロントWebサーバー
    ソフトウェア
    - apache-2.2系
    - php-5.2系

    負荷対策
    - 各種データのキャッシュ
       apcを利用しており、さらに、apcの以下の関数で各種変数をキャッシュしている。
    apc_store
    apc_fetch
    apc_delete

    - HTTPの待ち行列を取り除く。
    具体的には……
    mysqlのレプリカにselect文を発行する。
    snsのプロフィールを取得するような外部APIの利用とDB接続を混同しないようにする。

    駄目な例
    1,mysqlへの接続
    2,snsのプロフィール取得
    3,mysqlのクエリーの発行
    4,mysqlの切断

    良い例
    1,mysqlへの接続
    2,mysqlのクエリーの発行
    3,mysqlの切断
    4,snsのプロフィール取得

    - xdebug
    遅い処理を検出する

    スケールアウト
    LVS配下に新しいホストを立てて負荷分散する。

  2. memcacheサーバー
    全フロントサーバーからアクセスできるキャッシュサーバー

    利用用途:
    セッション情報の保存する。
    目的:各フロントサーバーのセッション情報を一元管理する。


    利用用途:DBのクエリー情報をキャッシュする。
    目的:DBの負荷を下げる。

    利用用途:snsのプロフィール情報をキャッシュする。
    目的:外部API接続を行わないようにして、処理を高速化する。

  3. DBサーバー
    ソフトウェア
    mysql-5.1系

    負荷対策
    - my.cnf でスロークエリーを検出して、プログラム修正を行う。
    log-queries-not-using-indexes
    インデックスを利用しないqueryを検出
    slow_query_log
    パラメータに閾値を設定して利用(1sec)

    スケールアウト
    write系のDBは、ハードウェアの性能アップ
    read系は、スレーブの数を増やす。

  4. サーバーの監視
    Ganglia
    http://ganglia.info/





2010年8月11日水曜日

twitterの情報を外部サイト(ブログ等)に貼る方法

公式のtwitterウィジェットのタグが発行されているようです。

ここで各種設定をすると、ブログに貼れる様になります。
http://twitter.com/goodies


詳しい使い方は以下のブログが分かりやすかったので。
http://r.nanapi.jp/569/

2010年8月10日火曜日

iTunesのアップデートで英語になった場合の対処

iTunesはいつのまにやらアップデートされたりしますが、アップデート直後に、言語設定が日本から、英語に勝手に書き変えられてしまう現象が発生してしまいました。

編集 > 設定 > 言語 の手順で変えられそうですが、上手く行きませんでした……。

というわけで色々情報を探し回っていたら、同様の現象ではまっているブログ記事を発見してさっそく実行したら上手く行きました。

解決手順は以下のシンプルな手順。
WindowsのプログラムメニューからiTunesを起動する
です。

いつもの癖でショートカットから起動していたのが問題だったようです。

参考元:
http://kohchi.vox.com/library/post/itunesが英語表記になった件.html

2010年8月9日月曜日

pythonの変数

昔読んだ python 本で変数の説明について、pythonはスコープの狭い方から評価される、という記述を見かけたのですが、それをすっかり忘れていて、その法則を久々思い出すパターンにハマったので、メモ代わりに記事にしておこうかと思います。

以下のソースでは、Line 4 でグローバルスコープの hoge を宣言して、関数 func1, func2 で参照しています。

ただし func2 では func2 の関数中で value == 3 の場合、変数 hoge への代入を行っています。

この代入があるせいで func2 内では hoge は func2 のローカル変数になります。
python のソースがバイトコードに変換される際に func2 内の hoge はローカル変数として予約されるので value == 2 のように if 文を通過しない際には func2 内で hoge が宣言されず UnboundLocalError: local variable 'hoge' referenced before assignment という例外を発生してプログラムが終了します。
スコープを股がって変数を利用する際には注意が必要ですね……。

# -*- coding: utf-8 -*-

#global変数
hoge = "hoge"

def func1():
    return hoge + " return by func1"

def func2(value):
    #ここではローカルで hoge が利用される可能性があるので、
    #hogeはローカル変数として割り当てられている
    if value == 3:
        hoge = "value is 3"
    return hoge

print func1() #成功
print func2(3) #成功
print func2(2) #hoge がなくて、失敗

test syntax high light

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

2010年6月11日金曜日