2011年11月10日木曜日

UIView UILayout UITextViewを角丸にする

どうも、俺@アプリ開発中です。
今日はタイトル通り「UIView」「UILayout」「UITextView」の角を丸く描画する方法についてめもめもです。

まず、ヘッダファイルで

#import <QuartzCore/QuartzCore.h>
とQuartzCore.frameworkをインポートします。
別のサイトとかではQuartzCore.frameworkを追加して、とかあるのですが僕の環境ではそんなことしなくても普通に使えました。
なぜだ。(XCode4.2)
次に対象のオブジェクトに対し

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(100, 100, 50, 50);
[btn setTitle:@"test" forState:UIControlStateNormal];

// 角丸の処理
[[btn layer] setCornerRadius:5.0f];

// または
// btn.layer.cornerRadius = 5.0f;
こんな感じです。
UILayoutやUITextViewでも同様に作れます。


以上でぇぇぇえす。

2011年11月9日水曜日

Objective-Cでprivateメソッドを定義したい

どうも、俺です。
ようやくobjective-c(cocoa)な話題です。

objective-cで自作クラスを作り、javaやphpのようにprivateなメソッドを定義したい!という時のめもめもです。
objective-cは基本的には定義されたメソッドはpublicになってしまいます。
面倒なのであえてprivateなメソッドにする必要もなさそうですが。

ちなみにprivateなプロパティは

// MyClass.h
@interface MyClass: NSObject
{
 @private
   id hoge;
}
-(void)methodA;
@end
のような形で定義できちゃいます。

privateなメソッドを定義するには、カテゴリを使って何とか実装できます。、、なので面倒です。

// MyClass.m
@interface MyClass () // ←が無名カテゴリの定義
-(void) privateMethod;
@end

@implemention MyClass
// ここにクラスの実装を行う。
// privateMethodもここに作成する。
-(void) prrivateMethod
{
  // メソッドの内容
}
@end
こんな感じです。
MyClasss.hに変更を食わえる必要はありません。

Objective-Cにprivateメソッドの仕組みが組み込まれてないんでしょうね。
なんか冗長な気がするので、どうしてもprivateじゃないとアカン!という場合でなければ使わなくても良いかなと思いました。
アプリ開発とかでもあまり大規模開発になることもなさそうですし。

以上でぇぇぇぇぇぇぇす。

2011年11月2日水曜日

macのターミナルでvimのdeleteがおかしい時

どうも、俺です。
お久しぶりです。ブログに書くようなネタがなかったのでしばらく更新できませんでした。。

今日はmacを使っててターミナルからvimを開いてdeleteキーを押すと「^?」が出る人へ、対処法メモです。


$ vim ~/.vimrc
-------------------
" 以下を追加
noremap! ^? ^H
とりあえず、.vimrcをこのようにすれば直ります!直るはずです。
^?はCtrl+vを押したあとdeleteキー。
^HはCtrl+vを押した後Ctrl+hキー。

最近はmacで仕事しております。iphoneアプリ開発とかしてるので、そのうちObjective-C関連のネタも書くようになれればいいなー。

以上でぇぇえぇす。

2011年9月13日火曜日

fsockopenでhttps://へ接続したいとき

どうも、久しぶりです。俺@残業中です。

今日はphpのfsockeopen()の使い方注意をメモメモ。
httpsな外部サイトへfsockopen()したいときは

fsockopen('www.example.com', 443, $errono, $errstr, $timeout);
では接続できません。
サーバ側から

<!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML 2.0//EN”>

<html><head><title>400 Bad Request</title></head><body><h1>Bad Request</h1><p>Your browser sent a request that this server could not understand.<br />
Reason: You’re speaking plain HTTP to an SSL-enabled server port.<br />
Instead use the HTTPS scheme to access this URL, please.<br />
とかで帰ってきます。
fsockopen()でhttps://なサイトへ接続するときは

fsockopen('ssl://www.example.com', 443, $errno, $errstr, $timeout);
としましょう。

あ、ちなみにphpはopensslが利用可能な環境でインストールされている必要がありますよ。

 ./configure --with-openssl


以上でぇぇえっぇす。

2011年8月3日水曜日

muninで独自プラグインを作成

どうも、俺@終業前です。

今日はmuninで独自のデータを取得する方法についてめもめも。
すごく簡単です。
例としてDB(MySQL)からとあるテーブル(fooテーブルとbarテーブル)の総件数をロギングしたいと思います。

まずmuninのプラグインのあるディレクトリに実行ファイルを作成します。
このファイルはシェルスクリプトでもphpスクリプトでも何でも構いません。決められた引数に対して決められた値を返せれば良いです。
yumでインストールした場合は、/usr/share/munin/plugins 以下になります。
# cd /usr/share/munin/plugins
# vim table_count
当然このファイルには実行権限を付けておいてください。
# chmod +x table_count

基本的には
1)引数「config」を与えられたときに値を返す(グラフ情報)
2)引数なしで実行されたときに値を返す(実際の値)
のように作成します。
他にも引数はいくつかありますが、特にMuninプラグインの作り方:ククログに詳しく書かれてありましたので参考にしてください。

引数「autoconf」と引数「suggest」についてとても参考になりました。
今回はこれらは割愛します。

まず引数「config」の時の処理を書きます。
# vim table_count
----------------------------------------
#!/bin/sh

if [ "$1" = "config" ]; then
  echo 'graph_title table count' # グラフのタイトル。
  echo 'graph_args --base 1000 -l 0' # 何も気にせず書く。
  echo 'graph_vlabel adfit_database_info' # グラフのラベル。y軸のとこに出ます。
  echo 'graph_category other' # グラフのカテゴリ。一覧のHTMLで表示されるカテゴリ。DiskとかNetworkとかOtherとかProcessesとかのやつ。
  echo 'graph_info Database data info.' # グラフの情報。詳細ページの下の方に出る。

  echo 'foo.label total foo' # fooテーブルの件数についてのラベル。
  echo 'foo.draw LINE2' # 線グラフという意。他にもAREAやSTACKがある、らしい。
  echo 'foo.info total foo table count.' # ラベルfooに対する説明。

  echo 'bar.label bar table count' # barテーブルの件数についてのラベル。
  echo 'bar.draw LINE2' # 線グラフという意。他にもAREAやSTACKがある、らしい。
  echo 'bar.info total bar table count.' # ラベルfooに対する説明。
  exit 0
fi

引き続き、引数なしで実行された時の処理を書きます。
# vim table_count
----------------------------------
echo -n "foo.value "
/path/to/mysql databasename -u username -e 'SELECT COUNT(*) FROM foo' | awk 'NR==4 { print }' | sed -e "s/ //g"

echo -n "bar.value "
/path/to/mysql databasename -u username -e 'SELECT COUNT(*) FROM bar' | awk 'NR==4 { print }' | sed -e "s/ //g"
かなりぶきっちょな書き方ですみません。もっとスマートな方法あるかも知れません。

これを実行プラグインのシンボリックリンクがあるディレクトリに、同じくシンボリックリンクを貼ります。
yumでインストールした場合は、/etc/munin/plugins になります。
# ln -s /usr/share/munin/plugins/table_count /etc/munin/plugins

最後にmunin-nodeを再起動して完了です。
# /etc/init.d/munin-node restart


これでグラフが描画されるはずです。
以上でぇぇぇぇぇぇぇぇす。