【Objective-c】カテゴリーで、既存クラスを分割・拡張

iPhone

カテゴリーによるクラスの分割

カテゴリーを使えば、クラスが持つメソッドを、カテゴリごとに分類することができます。
ということは、大きいクラスの実装を、複数のファイルに分割できるということですね。

 // Japaneseクラスの宣言
 @interface Japanese : NSObject
 {
    // インスタンス変数
    NSString* title;
 }
 - (NSString*)title;
 - (void)setTitle:(NSString*)title;
 @end
 
 // Japaneseクラスの Katakana カテゴリ
 @interface Japanese ( Katakana )
 - (void)writeToFile:(NSString*)path;
 - (void)readFromFile:(NSString*)path;
 @end

@interface クラス名 ( カテゴリー名 ) と書きます。
カテゴリー側で独自のインスタンスを宣言する必要はありません。

他クラスからは、

 Japanese* ja = [[Japanese alloc] init];
 ja.title = @"test";
 [ja readFromFile: @"test"];
 [ja writeToFile: @"test"];

というように使えます。

既存クラスの拡張

実行中、動的に既存のクラスにメソッドを追加していくことができるのですが、カテゴリーにはこの機能があります。
カテゴリーによって分割されたクラスは、各々別のオブジェクトとしてコンパイルされます。
その後、これらが実行時に読み込まれ、カテゴリーで宣言されているメソッドがクラスに追加されていきます。
自分でつくったクラスだけでなく、Cocoaが提供するクラスに対しても可能です。

例えば、NSString。

 // NSStringの新たなカテゴリの宣言
 @interface NSString (TrimNewLine)
 - (BOOL)hasNewLineCharacters;
 - (NSString*)stringByTrimmingNewLineCharacters;
 @end
 
 @implementation NSString (TrimNewLine)
 - (BOOL)hasNewLineCharacters
 {
    // 改行コードが含まれていたら、YESを返す
    ……
 }
 - (NSString*)stringByTrimmingNewLineCharacters
 {
    // 改行コードを除去した文字列を返す
    ……
 }
 @end

これで、以下のように追加したメソッドを簡単に利用することができます。

 NSString* string = @"string\nです。";
 if ([string hasNewLineCharacters])
 {
     NSLog(@"%@",[string stringByTrimmingNewLineCharacters]);
 }

【MySQL】DELETE文でLEFT JOINする

【MySQL】DELETE文でLEFT JOINする

ある条件に合うレコードをテーブル1から削除したい。
けどその条件のためにはテーブル2をJOINしなきゃいけない…!
という時に。

例)

テーブル banana
カラム id

テーブル gollira
カラム id
カラム banana_id

SQL文)

DELETE a FROM banana a
LEFT JOIN gollira b ON a.id = b.banana_id
WHERE b.id = 500

これでidが500番のゴリラの、バナナテーブルのレコードを削除できましたね:)

aやb等のエイリアスは名前は何でも良しです:D

by 芦野輝明
twitter→https://twitter.com/teriyakiegg

MySQL

【Android開発】ギャラリーから選択された画像の名前を取得したい

【Android開発】ギャラリーから選択された画像の名前を取得したい

日本語で検索してもぱっと出てこなかったので、
備忘録として書いておきます。

まずはどっかからギャラリーを起動させる

 //ギャラリーの起動
 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
 intent.setType("image/*");
 startActivityForResult(Intent.createChooser(intent, "Select picture"), sukina_number);

sukina_numberは好きな数字入れてください。

ギャラリーから選択した画像のタイトルを適当なテキストビューに代入するメソッド

 private void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == sukina_number_de_set_sita_number) {
 
                File f = new File(getRealPathFromURI(data.getData()));
                tekitouna_text_view.setText(f.getName());
            }
        }
 }

ギャラリーで画像を選択した後はonActivityResultが呼ばれます。
requestCodeには自分でstartActivityForResultの第二引数に入れた値が入っていますので、うまく利用して条件分けすることも可能です。

で、一番大事なのが

 File f = new File(getRealPathFromURI(data.getData()));
 tekitouna_text_view.setText(f.getName());

これですね。
ギャラリーで選択した画像のURIをなんとかファイル型にして名前getできるようになった!って感じです。

Android

芦野輝明
http://teriyakiegg.com

「google-play-servise」がプロジェクトに反映されていない時の対処法

Android

「google-play-servise」がプロジェクトに反映されていない時の対処法

プロジェクト自体に「!(エクスクラメーション)」または、「×(エラーマーク)」が付いていて、原因が「google-play-servise」が反映されていない時の対処法

以下を見よ!!!(☆д・)

  1. 「google-play-servise」がeclipseにインストールされているかどうかを確認するために、まず、「Android SDK Manager」を開きます。

*「Android SDK Manager」は、メニューバー ⇒ Window ⇒ Android SDK Manager

  1. 下の方に行き、「Extra」のフォルダがあり、そこに、「Google Play services」があると思うので、それがインストールされているかどうか確認。

インストールされていなかったら、インストールしてくださーい(●-ω-)
それで、そのディレクトリをコピーしておきます。

*インストールが完了(もしくは既にインストールしていた方)は、何もないプロジェクトの箇所に、「google-play-servise」を表示させます。
3.何もないプロジェクトの場所で、右クリ ⇒ 「import」⇒「Android」 ⇒ 「Existing Android Code Into Workspace」⇒「Next」⇒「Root Directory」の中に先程コピーした「Google Play services」が入っているディレクトリを記載します。記載できたら「finish」をクリックします。そうすると、「Google Play services」というプロジェクトが新たに追加されます。
*参考までに、私のディレクトリは、
「C:\adt-bundle-windows-x86_64-20130219\sdk\extras\google\google_play_services\libproject」というところでしたよ!

ここまできたらあと一息です ε=(・o・*) フゥ
がんばりましょう (´p・ω・q`)ガンバ♪

4.「Google Play services」を適用させたいプロジェクトを 右クリ ⇒「Properties」⇒ サイドバーから「Android」⇒「Library」で、既に「Google Play services」がある人は、「Remove」して一度削除します。
何も書かれていない方、または、削除した方は、「Add」で、プロジェクトの「Google Play services」⇒「OK」⇒「Apply」⇒「OK」で完了です。

5.それでも消えない場合は、google play servicesのほうに問題があります。EclipseのConsoleなどに、エラーが表示されていませんか?
たとえば、API8のSDKがないと、google play service自体がエラーになってしまっているので、API8のSDKを「Android SDK Manager」でダウンロードしましょう。

なかなか設定するだけで一苦労ですね~ ;´д`)
これにめげずに、皆さん頑張りましょう (゚ー゚☆

yumでインストールしたパッケージのファイル一覧を表示する

Linuxサーバー

yumでインストールしたパッケージのファイル一覧を表示するにはrepoqueryを使います。
repoqueryはyum-utilsに含まれています。

 yum install yum-utils

パッケージに含まれるファイル一覧を表示するには下記コマンドを実行します。

 repoquery --list パッケージ名

repoqueryの実行例です。

 repoquery --list yum
 /etc/bash_completion.d
 /etc/bash_completion.d/yum.bash
 /etc/logrotate.d/yum
 /etc/yum
 /etc/yum.conf
 /etc/yum.repos.d
 /etc/yum/pluginconf.d
 /etc/yum/protected.d
 /etc/yum/vars
 /etc/yum/version-groups.conf
 /usr/bin/yum
 ...