2012/10/18

【CSS】スタイルの優先度

CSSの適応される優先度についてのまとめ

高 ↑ !important付きユーザ指定 !important付きCSS HTML内のCSS ユーザ指定 ブラウザの初期値 ↓ 低
となっているようです。 優先度とかあるのはわかりましたが、「!important」って何よ? ってことでまた調べます。 どうやらCSSの適応優先度を上げる宣言のようです、下記のように使用できます。
p {
  color: #FFFF00 !important;
}
他にも指定の仕方によってポイント等があって高い方から適応されるらしいです 詳細に指定していれば指定する程ポイントが上がるとか何とか、 とりあえず今回はここまでということで。

2012/08/24

【雑記】BIGINT型やばい


ヤバイ。BIGINT型ヤバイ。まじでヤバイよ、マジヤバイ。
BIGINT型ヤバイ。
まず多い。もう多いなんてもんじゃない。超多い。
多いとかっても
「INT型20個分ぐらい?」
とか、もう、そういうレベルじゃない。
何しろ9000京。スゲェ!なんか兆とか超えてるの。何千億とか何千万とかを超越してる。19桁だし超多い。
しかも符号ありでこれらしい。ヤバイよ、符号ありだよ。
だって普通は符号なしで何十億じゃん。だってDBのINT型が千億超えてたら扱いに困るじゃん。レコードが超多いとか困るっしょ。
phpmyadminのページャーが伸びて、サービスオープン1ヶ月のときは10ページだったのに、三年のときは2万ページとか泣くっしょ。
だからINTとか何千億超えない。話のわかるヤツだ。
けどBIGINTはヤバイ。そんなの気にしない。オートインクリメントしまくり。1日1億個のレコード挿入しても2億年持つとかよくわかならいくらぐらい多い。ヤバすぎ。
9000京って言ったけど、もしかしたら符号なしにしたら垓いくかもしんない。でも符号なしって事にすると
「じゃあ、BIGINT型使ってるテーブルってナニよ?」
って事になるし、それは誰もわからない。ヤバイ。誰にも分からないなんて凄すぎる。
あとオートインクリメントのカラムだけでテーブル作って全部埋めると超重い。約326エクサバイト。ギガバイトで言うと約3504億ギガバイト。ヤバイ。重すぎ。HDD増設する前に死ぬ。怖い。
それに普通に使ってても超余る。超スカスカ。一日1億回インクリメントしても億年とか平気で出てくる。億年て。小学生でも言わねぇよ、最近。
なんつってもBIGINT型は馬力が凄い。京とか平気だし。
うちらなんて京とかたかだかINT型で使用する必要が出てきただけでめんどくさいからDB設計見なおしたりするのに、
BIGINT型は全然平気。京を京のまま扱ってる。凄い。ヤバイ。
とにかく貴様ら、BIGINT型のヤバさをもっと知るべきだと思います。
そんなヤバイBIGINT型を使ってシステム作ってる人とか超偉い。もっとがんばれ。超がんばれ。


何やってんだろ

2012/08/11

【Linux】sshのIPアクセス制限


この前 試験サーバより本番サーバにrsyncでファイルを反映しようとした際に
遭遇したのでメモ

昨日まではファイルを正常にシンクできたのですが、今日になってなんとエラーが・・・

ssh_exchange_identification: Connection closed by remote host
え、何これ?と思って調べてみると 試験サーバから本番サーバへsshでのアクセスが禁止されていました。 原因は誰かがIP制限を導入したそうなのですが、それに漏れがあったかららしいです。 原因はわかったので、直接本番サーバにssh接続し IPアクセス制限に試験サーバのIPを追加しました。 /etc/hosts.allowvi で開き sshd という項目に試験サーバのIPを追加しました。
sshd : 111.111.111.111
複数指定する場合は、スペース区切り・または
sshd : 111.111.111.111 sshd : 222.222.222.222
というように指定します。 終わり

2012/07/27

【雑記】Fate/Zero Diningに行ってきた


会社の人とFate/Zero Diningに行って来ました


■店の前の看板?



■メニュー
一緒に行った人は「アインツベルンのコース」、僕は「遠坂のコース」です。
写真は「遠坂邸のメニュー」



■スープ「オニオンコンソメスープ」
なぜかカップはセイバーでした。
ちなみに「アインツベルンのコース」と一緒でした。



■サラダ「夏野菜のサラダ」
これも「アインツベルンのコース」と一緒でした。



■メイン1「黒毛和牛のハンバーグ赤ワインソース仕立て」
ハンバーグがやたら固いなと思ったら肉100%らしいです



■メイン2「二種のパンとフライドポテト」



■スイーツ「葵のクリームあんみつ」


葵の


クリームあんみつ




これがやりたかっただけ

終わり

2012/06/24

【Mac】ターミナルで使うコマンドのエイリアスを設定する

Macでごにょごにょしてたときにコマンドのエイリアスを
作ろうと思った時のメモ

ターミナル上でよく「ls -l」とかでファイルの確認とかをするのですが、
会社では、エイリアスで登録されているためよく打ち間違えてしまいます。
なので一緒にしておこうということで設定しました。

まず、自分のホームディレクトリにターミナルで移動し、
「.bashrc」というファイルを開きます。
$ cd $HOME $ cd vim .bashrc
ファイルを開いたら、そこにエイリアスを定義します。 エイリアスの定義はこのように記述します。
alias エイリアス名1='コマンド1' alias エイリアス名2='コマンド2'
今回は「ll」というエイリアス名で「ls -l」を登録しました。
alias ll='ls -l'
エイリアスを定義したらファイルを保存し、「.bash_profile」というファイルを 編集します。
$ cd $HOME $ vim .bash_profile
「.bash_profile」には下記の項目を追加し、保存します。
source .bashrc
保存できたら下記コマンドを実行し、変更を反映します。
$ source .bash_profile
これで定義したエイリアスを使用できるようになります。 (再ログインでも反映されます) 終わり

2012/06/09

【雑記】社員旅行でハワイ行って来ました

06/03~06/07の3泊5日でハワイに社員旅行で行ってきました。

初日

ホテルから見た景色1


ホテルから見た景色2


海きれいすぎんだろ、びっくりしたわ

ホテルについて2時間ほどごろごろして、船に乗ってご飯を食べに行きました。
サンセットクルーズ?とかいうらしいです。

乗った船


夕日


ビールばっか飲んでたんですが、せっかくハワイに来たということで
ハワイっぽい飲み物を頼みました。




船内で現地の方による催し物がありました
が、ぶれまくりだったのでボツに



二日目
朝の10時からパラセイリング
高すぎて漏らすかと思った。写真はなし危ないので

パラセイリングの後、昼ごはんにマクドナルドに行って来ました。


クォーターパウンダーのセットを頼んだのですが、日本と違い
謎のパイナップルが付いてきました。
パイナップルで2ドルぐらい取られました。

食事の後実弾射撃に行こうということで行って来ました。
写真は撮り忘れました。

ライフルと自動拳銃とリボルバーを撃ってきました。
リボルバーで肩外れるかと思った。

夜になんか花火?があるらしく、ホテルの部屋からちょうど見えました。


三日目
一日中寝てました。

晩ご飯でなんか高いお店で肉を食べてきました。


肉美味しかった。

すごい疲れました、未だに時差ボケしてるのか夜は眠くならないです。

終わり

2012/05/20

【PHP】指定ディレクトリのファイルを日付ソートして配列で取得

現在作成中の機能で使った奴のメモ

phpで「scandir」という関数でファイル名一覧は取得できますが、
ファイルの更新日時等は取得できません。

更新日時等でソートする必要がなければいいのですが、どうしてもソートしたいという要望?が
あったので、それに対応するために「DirectoryIteratorクラス」を
使用しました。

この関数は指定したディレクトリ内の情報を取得してくれます。
更新日付とかファイルサイズとかも取ってきてくれるので更新日付以外でもソートできます。

サンプルコード
<?php

// ファイル情報格納用配列
$file_info_list = array();

// DirectoryIterator
$file_list = new DirectoryIterator($path);
foreach ($file_list as $file_info)
{
    // ファイル以外はループに戻る
    if (!$file_info->isFile())
    {
        continue;
    }

    // 配列のキーに更新日時をセット
    $file_info_list[$file_info->getMTime()] = array(
        'file_name' => $file_info->getFilename(),
        'file_size' => $file_info->getSize(),
        'update'    => $file_info->getMTime(),
    );
}

// 更新日時(キー名)の降順にソート
krsort($file_info_list);

var_dump($file_info_list);
getMTime」で更新日時のタイムスタンプが取得できるので、 それをキー名に使用し、キー名でソートを実行します。 ですので、キー名が更新日時のタイムスタンプになります。 終わり

2012/05/10

【サーバ】301リダイレクトを使う上での注意点

先程の記事で説明したWWWあり、なしを統一する際にハマったメモ

最初はFirefoxで301リダイレクトの確認をしていたのですが、設定をミスっていたらしく失敗していました。
その後何度か変更を加えてチェックしたのですが、最初に変更した設定から
何も変更されませんでした。

それで違うブラウザでやってみようということでIEで接続してみたところ現在の設定が反映されていました。

少し調べてみると301リダイレクトについての記述が見つかったので、それを探ってみるとビンゴ。

301リダイレクトはリソースの恒久的な移動を意味する。
「このURIはもうこっちのURIに変更されました。」というのをブラウザ等に通知するということらしく、 ブラウザ側でそのURIを記憶してしまうのだそうです。 なので、設定変更後にアクセスしたIEではきちんと反映されていたという訳です。 Firefoxの場合はキャッシュをクリアして再起動したら、きちんと反映されるようになりました。 ※IEの場合はキャッシュ削除ではダメらしく、ツールが必要なようです。 終わり 参考URL:.htaccessによるリダイレクトをやめてもIE9のみリダイレクトされ続ける

【サーバ】URLをWWWあり、なしに統一する

ということで本日やったメモ
僕が携わったサイトではないのですが、お客さんからURLのWWWを有りに変更して欲しいという
依頼があったらしくそれを投げられたので調べた時のメモ

今回は「mod_rewrite」を使用し、wwwなし(またはあり)のURLでアクセスがあった場合は
301リダイレクトを利用し、wwwあり(またはなし)にリダイレクトするという設定にしました。
設定は、「httpd.conf」または、「.htaccess」にて行います。

WWWあり統一
RewriteEngine on RewriteCond %{HTTP_HOST} ^example\.com RewriteRule ^(.*)$ http://www.example.com/$1 [R=301, L]
WWWなし統一
RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.example\.com RewriteRule ^(.*)$ http://example.com/$1 [R=301, L]
終わり

2012/05/01

【PHP】Qdmailでメール送信した際に本文にヘッダーが表示される【Qdmail】

ということで今日あったQdmailの不具合?についてのメモ。

Qdmailでメール送信した際に、ヘッダーの一部またはすべてが
本文に表示されてしまうという不具合?に遭遇しました。


原因としては、ソースコード上の改行コードが違うために
起こってしまうそうです。

Qdmailではヘッダーの改行コードをRFCに準拠していますので「CrLf」なんだそうです。

ただ、qmailなどでメールを送信している場合に「CrLf」だと不具合が起きてしまうことが
あるそうです。

うちのサーバはPostfixでしたが、ダメだったみたいですね。
ですので、改行コードをソースコード上で「CrLf」から「Lf」に変更したところ、
ヘッダーが本文に表示されることは無くなりました。

Qdmailで使用する改行コードを変更するには
「lineFeed関数」を使用します。
$mail->lineFeed("\n");
終わり 参考URL:ヘッダーが見えてしまう等 - Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte

2012/04/24

【Linux】コマンドで.htpasswdを生成したりする

ということで、htpasswdのメモ。

普段「.htpasswd」ファイルは、ファイルを作成して
アップロードなり、シンクなりすると思います。

でも今日コマンドでちゃっちゃと作れると聞いたのでメモ

・「.htpasswd」の作成
%htpasswd -bc .htpasswd user01 password
これで、カレントディレクトリに「user01」というユーザで「password」という パスワードのユーザが作成されます。 ・ユーザの追加
%htpasswd -b .htpasswd user02 password
これで、カレントディレクトリにある「.htpasswd」に 「user02」というユーザで「password」というパスワードのユーザが追加されます。 「bオプション」は、ユーザのほかにパスワードを指定して追加します。 「cオプション」は新規にファイルを作成します。 終わり

2012/04/21

【MySQL】SELECTで取得した値がNULL値だった場合に別の値として取得する

今のプロジェクトで使ったのでメモ

現在API担当としてシステム開発を行なっているのですが、返却値として「NULL」を
返却せずに「0」を返却して欲しいという要望があったので、
クエリで何とかならないかと思ってCOALESCE関数という関数を見つけました。


関数の内容としては
リストの最初の非 NULL 値を戻すか、非 NULL 値がない場合は NULL を戻します。
と言うことが書いてありました。 翻訳がアレなのでちょっとわかりにくいと思います。 つまり、引数は可変長引数となっており、いくつでも(?)引数を指定することが可能です。 その上で、順番に指定されている引数をチェックしていき、「NULL」でない値を返却します。 「NULL」しか無かった場合は「NULL」を返却します。 例)
mysql> SELECT COALESCE(NULL,1); -> 1 mysql> SELECT COALESCE(NULL,NULL,NULL); -> NULL
例えば下記のようなテーブルがあったとします。
+---------+--------+-------+ | user_id | name | value | +---------+--------+-------+ | 1 | user01 | 5 | | 2 | user02 | NULL | +---------+--------+-------+
上記のテーブルを次のSELECTで取得した場合
SELECT 
  * 
FROM 
  `user`
+---------+--------+-------+ | user_id | name | value | +---------+--------+-------+ | 1 | user01 | 5 | | 2 | user02 | NULL | +---------+--------+-------+
「value」カラムにNULLが入ったまま返却されてきます。 次に上記のCOALESCE関数を使用してSELECTを実行します。
SELECT 
  `user`.`user_id`, 
  `user`.`name`, 
  COALESCE(`user`.`value`, 0) AS `value` 
FROM 
  `user`
+---------+--------+-------+ | user_id | name | value | +---------+--------+-------+ | 1 | user01 | 5 | | 2 | user02 | 0 | +---------+--------+-------+
という風に先程「NULL」が入っていたところが「0」として返却されてきます。 本来このような使い方をする関数では無いのかもしれないですが、この関数のお陰で 楽ができました。 終わり

2012/04/09

【雑記】4月ということで

さくらの写真を撮ってみました。

これは会社の近くのアニメイトの前のところです。

おわり

2012/03/21

【PHP】PHPのセッションで第一階層に数字添字を指定した時に発生する問題

ということでさっきあった現象のメモ

PHPでセッションを使用した際に、セッション変数の第一階層の添字に
数字を指定すると次画面に遷移した際などにそのあたいが引き継がれない。

例えば
<?php

// 動かない
$_SESSION[1]['var'] = 'var1';

// 動く
$_SESSION['a']['var'] = 'var1';
このようにセッションの第一階層に数値の添字を指定すると 画面遷移など別画面に遷移しセッションをスタートしても、 数値添字を指定した方だけ取得できなくなります。 これはどうやら内部仕様っぽいです、実際はわからないですが 引き継がれていない以上はそういうものとして扱う必要があるわけです。 終わり

2012/03/19

【雑記】朝起きたらおじぎが新年初脱皮中だった

朝起きたらおじぎ(ヘビ)が新年初脱皮中でした。
脱皮中の写真を何枚か撮ってたんですが、ぶれてたりしてたのでボツにしました。

代わりに脱皮後の皮

もう70cmぐらいですね 終わり

2012/03/17

【さくらサーバ】PEARをインストールする【PHP】

ということでさくらサーバにPEARをインストールした時のメモ

さくらサーバにはすでにPEARがインストールされていますが、
バージョンが古い、パッケージを追加できない等の問題がありますので、自前で使用するパッケージを
インストールできるようにしました。

まずは、ホームディレクトリにPEARの設定ファイルを作成します。
$ pear config-create $HOME .pearrc
次にPEARの設定ファイルに以下の値をセットします。 1.binディレクトリ
$ pear config-set bin_dir $HOME/usr/local/bin
2.ダウンロードディレクトリ
$ pear config-set download_dir $HOME/tmp
3.作業用ディレクトリ
$ pear config-set temp_dir $HOME/tmp
4.ライブラリディレクトリ
$ pear config-set php_dir $HOME/lib/pear
最後にPEARコマンドを実行できるように、「.cshrc」を編集します。
$ setenv PATH (いままで設定されていたパス) : 1に設定したパス $ source $HOME/.cshrc
コマンドを実行できるようになったら、PEARをインストールしてみます。
$ pear install PEAR
下記のコマンドでインストールされていれば完了です。
pear list
上記設定の場合のインクルードパスは、4で設定したディレクトリになります。 終わり

2012/03/16

【Linux】rsyncでSubversion管理のプロジェクトをシンクする

ということで「rsync」コマンドで
プロジェクトを開発環境から本番環境へ移動する際のメモです。

ファイルを開発環境から本番環境へ移動する際は下記のコマンドを使用します。

rsync -avz ./target1 ./target2
 target1 がシンク元で target2 がシンク先になります。 オプションは -a オプション がシンク元に設定されていたパーミッションなどを保持するオプション -v オプション がシンク中のファイル名を表示するオプション -z オプション がデータを圧縮してシンクするオプション になります。 これとは別に「-n オプション」を追加することにより コマンド実行時の操作結果を表示します。 実際にシンクはされませんのでテストに使用します。 ですが、試験環境はSubversionで管理されているため、 ディレクトリごとに 「.svn」 という名前のディレクトリが 作成されます。 これは、本番環境には必要無いのでシンクする必要はありません。 ですので、下記のオプションを追加してシンク対象より弾きます。
rsync -avz --exclude ".svn" ./target1 ./target2
--exclude オプション」は、シンク対象より設定されたパターン に合致するものを弾きます。 つまり上記コマンドの場合は 「.svn」 をシンクしない様になります。 終わり

2012/03/08

【PHP】可変関数を実行する

可変関数の実行についてのメモです。

PHPでは変数名の後に「()」が付いている場合
変数の値と同名の関数をコールします。
可変関数は、メンバ関数も関数同様にコールすることができます。
また、スタティック関数もコールできますが、public以上のアクセスレベルだと実行できません。

こんな感じです。
<?php

class variableFunction
{
    public function disp($str)
    {
        echo $str;
    }

    public static function disp2($str);
    {
        echo $str;
    }
}

function disp($str)
{
    echo $str;
}


$func = 'disp';
$str  = '表示';

// 通常の関数をコール
$func($str);

// インスタンスを生成したクラス関数をコール
$vF = new variableFunction;
$vF->$func($str);

// variableFunctionクラスのスタティック関数をコール
$func2 = "disp2";
variableFunction::$func2($str);
※echo(), unset(), isset(), empty(), include(), print()のような言語構造と  組み合わせることはできません。 終わり

2012/03/02

【MySQL】UPDATE文でサブクエリを使う時の注意

ハマりかけたのでメモ

MySQLのUPDATE文でサブクエリを使う際の注意点です。

下記のようにUPDATE文では更新対象をサブクエリの問い合わせに
使用することはできません。
UPDATE `user` SET 
  `user`.`name` = 'test01'
WHERE 
  `user`.`id` = 
  (
    SELECT 
      `user`.`id`
    FROM 
      `user`
    WHERE 
      `user`.`id` = 1
  )
こんなUPDATE文は通常有り得ないですが・・・ 終わり

2012/02/27

【PHP】ループ中のswitchでcontinueしたときにはまった

今日ハマったのでメモ

まず、今日まで知らなかったのですが、PHPにおいて
switchはループ構造らしいです。

ですので、switch中のcontinueはすべてbreakと同じ扱いになります。
つまり、下記の例では

<?php

$list = array(
    '1', '2', '3', '4',
);

foreach ($list as $num)
{
    switch ($num)
    {
        case 1:
            continue;
        default:
            break;
    }

    echo $num . "\r\n";
}
このように出力されます。
1
2
3
4
switch内にて1が来た場合ループに戻るように と書いていますが、これだとただ単にbreakするのと 一緒になります。 ですので、ループに戻りたい際は下記のように記述します。
<?php

$list = array(
    '1', '2', '3', '4',
);

foreach ($list as $num)
{
    switch ($num)
    {
        case 1:
            continue 2;
        default:
            break;
    }

    echo $num . "¥r¥n";
}
これでなぜ、ループに戻ることができるのかというと、continueには 戻る階層を指定することができます。 ですので、下記記述ですと、2階層戻ることになりループに戻ることができます。
continue 2;
終わり 参考: PHP: switch - Manual

2012/02/25

【Mac】MacOSX Lion 1.7.3のリカバリメディア作成

今日思いついたのでリカバリメディアを作成した時のメモです。

今回はUSBとDVDで作成しました。

まず、USBで作成する手順です。
用意するもの
・USB (容量1GB以上) ・Lion 復元ディスクアシスタント USBはどこかで買ってきます。 Lion 復元ディスクアシスタントはこちらからダウンロードしてきます。 USBを接続したら、「Lion 復元ディスクアシスタント」を起動します。 まず、利用規約に同意します。
復元ディスクを作成するディスクを選択します。 先程接続したUSBを選択して下さい。 選択したら、「続ける」を押下します。
ディスクの作成が始まります。
完了です。 完了したら、「OPTION」キーを押したままPCを起動します。 起動したら先程作成したUSBを選択し、起動できたら完了です。
これでUSBへのリカバリメディア作成は完了です。 次にDVDへのリカバリメディア作成です
用意するもの
・空のDVD-R まず、PCを再起動し「OPTION」キーを押しっぱなしにします。 すると複数のディスクが表示されますので、「Recovery HD」から起動します。 起動したら「ディスクユーティリティ」を実行します。 ディスクユーティリティを起動すると「disk1」がサイドバーに表示されますので、 「disk1」を選択し「ディスクを作成」を押下します。 ディスクが作成されたら完了です。 終わり

2012/02/24

【開発環境構築】さくらのレンタルサーバにGitをインストールする

ということで、さくらのレンタルサーバにGitをインストールした際のメモです。

検索エンジンにて適当に「Git さくらサーバ」で検索してみたのですが、
wgetの所でつまりました。

どうやらどこの記事でも対象のファイルがすでに存在しないようです・・・
ですので、また検索エンジンにて「Git ダウンロード」などで検索し、

Git - Fast Version Control Systemというサイトを見つけましたので、
ここでダウンロードしました。
今はGoogleで管理しているのでしょうか?

以下実行手順です。

$ cd
$ mkdir $HOME/usr
$ mkdir $HOME/usr/local

$ cd 
$ mkdir $HOME/src
$ mkdir $HOME/src/git

$ cd $HOME/src/git
$ wget http://git-core.googlecode.com/files/git-1.7.9.2.tar.gz
$ tar xzf git-1.7.9.2.tar.gz
$ cd git-1.7.9.2
$ ./configure --prefix=$HOME/usr/local
$ gmake prefix=$HOME/usr/local
$ gmake prefix=$HOME/usr/local install
$ export PATH=$HOME/usr/local/bin:$PATH

$ git --version
git version 1.7.9.2
これでバージョンが出れば完了です。 もし、exportコマンドが見つからない場合は下記を実行することでできます。
$ cd
$ vi ./.cshrc
// set pathに下記を追加する。※PATHはスペース区切り
// $HOME/usr/local/bin

$ source ./.cshrc
$ git --version
git version 1.7.9.2
終わり

2012/02/22

【iPhone】Safariのバグに遭遇しました。

先程iPhoneのSafariでネットサーフィンしてたらバグったので記念に


本来ならこのような感じで
検索バーが上に出たままになるはずなのですが、
このように検索バーが消えてしまい操作不能になりました。 ※何を選択しても読みこむが画面遷移しない
タスク終了で元に戻りました。 再現しなかったのですが、現象が発生した際の操作手順です。 新規タブを開く -> 適当に入力 -> 検索結果を押下 通常の操作ですね・・・何がいけなかったんでしょうか・・・ 推測ですが、このページ”(0件一致)”というのに何か原因があるんでしょう 終わり

2012/02/21

【Objective-C】iOS5のTwitteAPIを使うサンプル【Xcode4.2】

iOS5にて統合されたTwitterAPIを使用するサンプルです。

こういうやつです。
まず、Xcodeでプロジェクトを作成し、「Twitter.framework」を追加します。 追加は下記手順になります。 「Build Phases」を押下し、「Link Binary With Libraries」を 開きます。 開いたら「」を押下します。
すると上の方からベロンと出てくるので、検索フィールドにtwitterと入力します。 画像のように、「Twitter.framework」が出てきますので、 選択し「Add」ボタンを押下します。
下記画像のように追加されていればOKです。 追加した「Twitter.framework」を「Frameworks」ディレクトリに 移動します。
次にコードを書いていきます。 プロジェクト名:twitterFW 下記画像のようにコンポーネントを追加しました。
・Text Field   ID:tweetField ・Round Rect Button   ID:sendBtn 上記をヘッダーファイルに追記後、下記のようにライブラリをインポートします。
#import <Twitter/TWTweetComposeViewController.h>
ライブラリをインポートしたら次はボタンアクションを記述していきます。
- (void)sendBtn:(id)sender
{
    // インスタンスの作成と初期化
    TWTweetComposeViewController *tw = [[TWTweetComposeViewController alloc] init];
    
    // 送信文字列をセット
    [tw setInitialText:tweetField.text];
    
    // Twitterダイアログのイベントを定義
    tw.completionHandler = ^(TWTweetComposeViewControllerResult response)
    {
        if (response == TWTweetComposeViewControllerResultCancelled)
        {
            // キャンセル処理
        }
        else if (response == TWTweetComposeViewControllerResultDone)
        {
            // 正常終了
        }

        [self dismissModalViewControllerAnimated:YES];
    };
    
    // 送信ビューを表示
    [self presentModalViewController:tw animated:YES];
}
これで終わりです。 こんな感じになります。
終わり 参考: Apple Developer / Twitter Framework Reference

2012/02/20

【Linux】Apacheに設定変更を通知する際に使用するコマンド

今日のメモです。

Apacheの起動中にphp.iniなどを変更した場合、通常Apacheを再起動し
設定を再読み込みさせます。

ですが、サーバ上でWebサービスなどが稼働中の場合できるだけサービスを
停止しないようにしないといけません。
その際に使用するコマンド

/etc/rc.d/init.d/httpd graceful
親プロセスが設定ファイルを読み込み直し、 子プロセスはリクエスト終了まで動作します。 つまり親プロセスが設定ファイルを読み込んでいる間に子プロセスは 処理を行い、設定ファイルの読み込みが完了している場合には 新しい設定を反映した子プロセスがリクエストを処理します。 終わり

2012/02/19

【Xcode4.2】iPhoneにApple Developer登録なしで自作アプリを転送する【脱獄必須】

iPhoneに自作アプリをインストールするメモ
まず、自作アプリを実機テストする際にはAppleより有料のライセンスを
取得する必要があります。

ですが、実機テストぐらい無料でやりたいということで、その方法を
メモしておきます。
※この方法はiPhoneの脱獄が必須です。

段階的には下記のような段階を踏みます。

1.証明書を作成する
2.転送したいプロジェクトの設定を変更する
3.Xcodeの設定ファイルを編集する
4.アプリを認証する
5.アプリを実機に転送する
6.実機で動作するように設定を変更する

の6つの行程になります。

証明書を作成する
まず、キーチェーンアクセスを開きます。 [キーチェーンアクセス] -> [認証アシスタント] -> [証明書を作成]を開きます。 下記画像のように 名前を「iPhone Developer」(任意)に設定 固有名のタイプを「自己署名ルート」に設定 証明書のタイプを「コード署名」に設定 デフォルト無効化にチェックを入れます。
シリアル番号と有効期限を適当に設定します。
設定をいじらずに「続ける」を押下し続けます。 次の画面が表示されたら証明書をログインで作成します。
これで証明書の作成は終わりです。 以降は証明書の作成は必要ありません。 別のアプリもこれで認証します。
転送したいプロジェクトの設定を変更する
転送したいプロジェクトをXcodeで開きます。 開いたら「Build Settings」を開きます。
開いたら、画像の赤で囲まれているところのように すべてを「Don't Code Sign」に変更します。
これで、プロジェクトの設定は完了です。
Xcodeの設定ファイルを変更する
Finderより「/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/」を開き、 「SDKSettings.plist」をデスクトップにコピーします。 コピーしたら、そのファイルを開き下記画像の赤で囲まれているところのように 「CODE_SIGNING_REQUIRED」 を 「NO」 に変更します。
変更が完了したら、変更済みのファイルで元ファイルを上書きします。 警告がでますが、認証を押下し上書きします。 これでXcodeの設定ファイル編集は完了です。
アプリを認証する
まず、Xcodeを開き先程のアプリをビルドします。 ビルドする際はアプリを転送するiPhoneを接続し、下記画像のようにビルド先を変更します。 「iOS Device」という表示は接続中のiDeveiceを指します。 ※Xcodeで認証していたりするとiPhoneのデバイス名が表示されます。
ビルドが完了したら、ProductsよりアプリをFinderで開きます。
ビルド済みのアプリをFinderで開いたら、Terminalを起動します。 下記のコマンドでアプリを先ほど作成した証明書で認証します。
codesign -fs "証明書名" /アプリのパス/アプリ名.app/アプリ名
証明書名は先程の作成した際「iPhone Developer」で設定したので そちらを入力します。 アプリのパスとアプリ名は打つと長いので、Finderより開いたアプリケーションをTerminalに ドラッグ&ドロップします。
コマンドを実行すると 下記のダイアログが表示されますので、常に許可を押下します。
これで認証は完了です。 いよいよ実機にアプリを転送します。
アプリを実機に転送する
アプリを実機に転送するには、iExplorerを使用します。 こちらで「/Applications」ディレクトリに 作成したアプリケーションをiExplorerで追加します。 追加が完了したら、iPhoneを「Respring」します。 これで転送は完了です。 次が最後です。
実機で動作するように設定を変更する
動作させるにはアプリに実行権限を与えてやる必要があります。 ですので、「mobileterminal」で 「/Applications」ディレクトリに移動し、次のコマンドを実行します。 コマンドは「root」にて実行します。
chmod 0755 -R アプリケーション名.app
これで自作アプリが起動できます。 エキサイト翻訳で頑張ってましたが、終わってから日本語で 実機転送を行っているページを見つけました。 もっと早く見つけていればこんなに苦労はしなかったのに・・・orz 日本の方が参考先を使って実機転送をしているページ:http://i.fukajun.net/?p=377 終わり 参考: http://codeopfer.de/?p=23

【iPhone】自作アプリを実機に転送して動作確認した

カメラを起動して画像を保存するサンプルアプリを作って
実機に転送してテストしてみました。
ちゃんと動きました。

ホーム画面
白いアイコンが転送アプリです。
起動画面
カメラ起動
終わり

2012/02/16

【PHP】シングルクォートとダブルクォートでの改行コードについて

さっきハマったのでメモ

PHPでは文字列をシングルクォートまたはダブルクォートで囲みますが、
それぞれ意味が違います。

まず、ダブルクォートは変数の展開や改行コードの認識を行いますが
シングルクォートでは行いません。
どういうことかというと

下記のコードで確認できます。
<?php
$a = 'test';

// 改行コード
echo "ダブルクォート改行:\r\n";
echo 'シングルクォート改行:\r\n';

echo "---------------------------------\r\n";

// 変数の展開
echo "ダブルクォート変数展開:$a\r\n";
echo 'シングルクォート変数展開:$a\r\n';
上記をブラウザで実行すると下記の結果が得られました。
ダブルクォート改行:
シングルクォート改行:\r\n
---------------------------------
ダブルクォート変数展開:test
シングルクォート変数展開:$a
結果より、改行コードを改行として認識させたい場合はダブルクォートで囲む 必要があります。 終わり

【Mac】Apple Developerに無料登録する

ということで、Apple Developerに無料登録した際のメモです。
※脱獄済みiPhoneで動作確認をするために取得しました。

まずは、Apple Developer登録ページに飛びます。
下記の画面が表示されますので、 「開発を始める」 を押下します。
次にApple IDをすでに持っているか聞かれます。 Apple IDを持っていたとしても、日本語が混ざっているなら新規にApple IDを 取得しましょう。 文字化けしたりして大変なので・・・
次のページでいきなり英語になります。
上から解説していきます。
Email Address
自分のメールアドレスです。
Password
パスワードです。
Re-enter Password
確認用パスワードです。
Birthday
誕生日です。
Security Question
セキュリティ用の質問です。 好きなもの(覚えておけるもの)を入力しましょう。
Answer
上の質問の答えです。 忘れそうだったらスクリーンショットなど画面キャプチャを取るといいと思います。
First Name
名前です。
Last Name
苗字です。
Company / Organization
会社・組織です。
Country
住んでいる国です。
Street Address
町以下の住所です。 ○○町 1-20とかなら 1-20 marumaru-choと入力しましょう。
City / Town
市区です。 例)Shinjuku
State
都道府県です。 例)Tokyo
Post Code
郵便番号です。 000-1235形式で大丈夫です。
Phone
電話番号です。 日本は頭に 81 をつけ、頭の 0 を取ります。 電話番号が 03-1234-1234 なら 81 3 1234 1234という形式で 電話番号が 080-1234-1234 なら 81 80 1234 1234という形式で登録します。 次は、下記の画面になります。 開発するプラットフォームや主要なマーケットを選択します。 プラットフォームを選択すると選択したプラットフォームに対応した 入力項目が下に増えていきます。
次に利用規約にチェックを入れます。
スクリーンショットを取り忘れてしまったのですが、ここでセキュリティコードの 認証画面が出てきます。 セキュリティコードは登録したメールアドレスに送信されてきます。
※赤で囲まれているのがセキュリティコードになります。 セキュリティコードを入力すると下記の画面に遷移します。 これで登録は完了です。
終わり