たまたんのぶろぐ

たまたんが時たま言いたいことを書いてます。ジャンルはめっちゃええ加減ですwソフトやプログラムのことが多いかもしれませんが。。。。。

Sublime TextでObjective-Cのプチコンパイル

ひっさしぶりに投稿!! (。・_・。)ノ

 

Objective-Cでの開発をしているときに、数学的なロジックを作成するのに、

簡単なコンパイルが欲しいときがあります。

エディタをちょっと変更したいなぁ〜って思うときありませんか?

え?「ない」って?(; ̄ー ̄A アセアセ・・・

いやあるでしょ?(; ̄ー ̄A アセアセ・・・

「だから、ない」って?(; ̄ー ̄A アセアセ・・・

そういう人は無視して紹介します。ヽ( ゜ 3゜)ノ

 途中からメニュー画面が日本語化され色が変わりますが、

ご愛敬で・・・・・(; ̄ー ̄A アセアセ・・・

 

こんな時は、今までCodeRunnerと言うソフトを使ってました。

f:id:tama-jp:20140222113746p:plain

まぁ、これでできますよぉ〜っなんですが、

いつも使ってるエディタでコンパイルがしたかったので、

Sublime Textコンパイルできるようにしました♪ d(⌒o⌒)b♪

 

ちなみに、コマンドラインでは、

  clang -g -x objective-c -fmessage-length=0 -std=gnu99 -fobjc-arc -Wno-trigraphs -fpascal-strings [ターゲットファイル] -framework Foundation -o [アプリ名]
  

っと書きます。

 

これをsublimeのBuildSystemに書き込むだけ。

 

Sublime Textを開いて。

f:id:tama-jp:20140222155956p:plain

 

 

メニューバーから「Tools」をプルダウンします。

f:id:tama-jp:20140222160230p:plain

 

 BuildSystemから・・・

f:id:tama-jp:20140222160447p:plain

 

New Build System...を選ぶ。

f:id:tama-jp:20140222160604p:plain

 

そうするとファイルが表示されます。

f:id:tama-jp:20140222160646p:plain

 

それを下のコマンドを入力する。

=========================

{
    "cmd": ["clang" , "-g" ,"-x" ,"objective-c" ,"-fmessage-length=0" ,"-std=gnu99" ,"-fobjc-arc" ,"-Wno-trigraphs", "-fpascal-strings" , "${file}" , "-framework Foundation" , "-o", "${file_base_name}"],
	 "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
 	"working_dir": "${file_path}",
 	"selector": "source.c",
	 "variants":
 	[
		{
			"name": "Run",
			"cmd": ["bash", "-c", "clang -g -x objective-c -fmessage-length=0 -std=gnu99 -fobjc-arc -Wno-trigraphs -fpascal-strings '${file}' -framework Foundation -o '${file_base_name}' && '${file_path}/${file_base_name}'"]
		}
	]
}

 =========================

こんな風に。。。

f:id:tama-jp:20140222160835p:plain

 

んで、保存。[コマンド+S]で保存する場所が出てくるので

名前を変えて、パスはそのままで保存!!

f:id:tama-jp:20140222161006p:plain

 

すると新しくメニューに追加されます。

f:id:tama-jp:20140222161104p:plain

 

これでしたごらえOK!! 

じゃぁ、テスト!!

とりあえず、1から10まで足し算するコード。

f:id:tama-jp:20140222161926p:plain

 

書いたら、ビルドを選択して(自動でもいいかも)

 

f:id:tama-jp:20140222162240p:plain

 

ビルドして実行を実行する!!

f:id:tama-jp:20140222162251p:plain

 

 

こんな風に出来ます。

f:id:tama-jp:20140222162301p:plain

 

簡単でしょ?(˶‾᷄ꈊ‾᷅˵)

 

 

    

MacでRVMを違うバージョンをスクリプトで動かす方法

ようやく、まともな投稿( =̴̶̷̤̄ .̫ =̴̶̷̤̄ )

 

Rubyのテストのために、1.8.7を使用して、

 

それ以外は、2.0.0を使おうと思ったら、すっごくめんどくさい。

 

そこで、RVMを使用して切り替えて使うことにした!!

 

でも、使うときにいちいち、

 

> rvm 1.8.7

 

のように、変更しなきゃならない。

 

じゃぁ、これごとスクリプト化してやればいいじゃん!!(*Θ_Θ*)/

 

つうことで、やり方。。。。

 

普通にシェルにrvmを設定しても動作しないので、

 

gemsetを使用する。

# rvm use 1.8.7

# rvm gemset create ruby187

 

これでgemsetができあがったので、

 

# rvm env --path -- 1.8.7@ruby187

で、パスをとってみると、以下のようなパスがとれる(環境によって違うので注意)

/Users/ruby187/.rvm/environments/ruby-1.8.7-p374

 

これを、viエディタか何かで以下のスクリプトを作成する。

例えば、「rubyT.sh」のように。。。。

======ここから=====

#!/bin/bash

 

# load rvm ruby

source /Users/ruby187/.rvm/environments/ruby-1.8.7-p374

 

ruby $@

======ここまで=====

 

これの引数に、スクリプトを読み込ましてあげればOK!!

 

例えばこんな風にでます°₊·ˈ∗( ˃̶᷇ ‧̫ ˂̶᷆ )∗ˈ‧₊°

 

f:id:tama-jp:20140125093550p:plain

 

 

これで、CodeRunnerとかで簡単に使えるようになったヾ(^v^)k

 

参考:

 

http://rvm.io/integration/cron

 

 

githubのクローン( =̴̶̷̤̄ .̫ =̴̶̷̤̄ )

閉鎖的なところでgitHubが使えるのはないかなぁ~*1

って思ってたら、ありました!!( =̴̶̷̤̄ =̴̶̷̤̄ )

 

それは、「GitBucket」です。

完全にgitHubのクローンです。

 

出来ることは以下の通り、

・Public / Private Gitリポジトリ (http のみ)

・Repository viewer (オンライン編集は搭載していない)

・Repository search (Code と Issuesのみ)

Wiki

・Issues

・Fork / Pull request

・Mail notification

・Activity timeline

・User management (Administrator用)

・Group (like Organization in Github)

LDAP integration

・Gravatarもサポート

 

まだまだ発展途上なところはありますが、

社内で作るには、すごっく楽じゃないかと思います。

 

JAVAが動いていればどこでも作れます!!すげー(゚д゚)!

あっ、エンジンとしてTomcat 7.x, Jetty 8.x, GlassFishのいずれか必要ですよぉ。

 

インストール方法

今回は、Tomcat7でインストールします。

システムにJAVAをインストールしておきます。

#JDK のインストール

# yum -y install java-1.7.0-openjdk

 

tomcatをダウンロードし、解凍。

$ wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/tomcat/tomcat-7/v7.0.47/bin/apache-tomcat-7.0.47.tar.gz

$ tar xzf apache-tomcat-7.0.47.tar.gz

 

次に今回の主人公「gitbucket.war」をダウンロード

$ wget https://github.com/takezoe/gitbucket/releases/download/1.7/gitbucket.war

ちなみに、これでダウンロードするとファイル名がおかしくなります。

例:

$ ls

95d6668e-3d95-11e3-9de6-e4a25fcf1676.war?response-content-disposition=attachment; filename=gitbucket.war&AWSAccessKeyId=AKIAISTNZFOVBIJMK3TQ&Expires=1384676769&Signature=Xwp9Ak4FllbN8kZhPTmosHwxluM=

 

これをmvで「gitbucket.war」にリネームし、「webapps」に移動する。

$ mv gitbucket.war apache-tomcat-7.0.47/webapps/

 

あとは、tomcatを起動するだけ!!

$ apache-tomcat-7.0.47/bin/startup.sh

 

そうすると、以下のサイトから起動することができます。

http://localhost8080/gitbucket/

 

こんなかんじ!!gitHubににてるでしょ!!

これからも期待できますよね。♪ d(⌒o⌒)b♪

 

 

 

f:id:tama-jp:20140125092549p:plain

 

f:id:tama-jp:20140125092616p:plain

 

f:id:tama-jp:20140125092650p:plain

 

f:id:tama-jp:20140125092728p:plain

 

あっ、止める場合は以下を実施します。

$ apache-tomcat-7.0.47/bin/shutdown.sh

 

 

 

*1:(・・ )( ・・)

VagrantでVMWareFusionを使う方法

これから、Systemの手順書を文章ではなくてスクリプトで各時代が来ましたねぇ。

VagrantでVMWareFusionが使用出来るので、

とりあえずメモとしてインスコ方法を書いときます。y( ̄ー ̄)yピースピース

いつもの通りええかげん手順書を見て下さいw

 

1)Vagrantのインストール

Vagrantから本体をダウンロードしてインストール。

これ出来ない人は、Macを使わないでw(冗談です)

一応確認、バージョンの確認

$ vagrant -v

Vagrant version 1.2.2

 

2) VmwareFusion用のプラグインをインストール

 $ vagrant plugin install vagrant-vmware-fusion

 

このプラグインは有料です。ここから購入して下さい。

購入したら、ライセンスファイルが送られてくるので、

それを読み込ませます。

vagrant-vmware-fusion ライセンスの設定

$ vagrant plugin license vagrant-vmware-fusion license.lic

 

3)vmware用のcentOSをダウンロード

以下のコマンドをたたきます。

(Boxのバージョンが上がっているかもしれないのでここで確認)

$ vagrant box add centos https://dl.dropbox.com/u/5721940/vagrant-boxes/vagrant-centos-6.4-x86_64-vmware_fusion.box --provider vmware_fusion

 

 4)Vagrantfileを作る

$ vagrant ini

上のコマンドで自動的に作られるのですが、内容を以下のように作っちゃいました。

 

$ vim Vagrantfile

--------------------------------------------

# -*- mode: ruby -*-

# vi: set ft=ruby :

 

Vagrant.configure("2") do |config|

   config.vm.box = "centos"

  config.vm.box_url = "https://dl.dropbox.com/u/5721940/vagrant-boxes/vagrant-centos-6.4-x86_64-vmware_fusion.box"

  # config.vm.network :forwarded_port, guest: 80, host: 8080

  #config.vm.network :private_network, ip: "192.168.33.10"

  # config.vm.network :public_network

  # config.ssh.forward_agent = true

  # config.vm.synced_folder "../data", "/vagrant_data"

   config.vm.provider :vmware_fusion do |vb|

     # Don't boot with headless mode

#      vb.gui = true

     vb.customize ["modifyvm", :id, "--provider", "vmware_fusion", "--memory", "1024"]

   end

end

--------------------------------------------

 

たぶん以上で、出来ちゃいます。

 

vmwareを使用可能にしておかなければ動作しないようで、

以下のコマンドをたたきパスワードを入れる。

 

$ vagrant up --provider=vmware_fusion

>> パスワードが聞かれるのでシステムのパスワードを入れる。

これで、次回からは「vagrant up」で起動出来ます。

 

通常

$ vagrant up

お試しあれぇ〜!! ( ^ω^ )ニコニコ

 

※ 結局、まだ、プラグインが少ないし、資料があまりないのでVirtualBoxを使用することにしますね。

UIAlertViewで同期する方法

 

ひさびさの投稿。でも、あくまでもメモっす。°₊·ˈ∗( ˃̶᷇ ‧̫ ˂̶᷆ )∗ˈ‧₊°

 

UIAlertViewって、デリゲートを使用するので

同期とれないですよね。

そこで、クラスをつくり、中でBlocksを使用して、そのまま返すって方法です。

文字では伝わらないんでソースでみてくんろぉ〜ヽ( ゜ 3゜)ノ

 

 

CustomAlertView.h

 

#import <Foundation/Foundation.h>

 

typedef void (^didDismissBlocksType)(NSInteger buttonIndex);

 

 

@interface CustomAlertView : UIAlertView <UIAlertViewDelegate>

 

- (id)initWithTitle:(NSString *)title

            message:(NSString *)message

   didDismissBlocks:(didDismissBlocksType)didDismissBlocks

  cancelButtonTitle:(NSString *)cancelButtonTitle

  otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION;

 

@end

 

CustomAlertView.m

 

 

 

#import "CustomAlertView.h"

 

@interface CustomAlertView()

{

    didDismissBlocksType didDismissBlocks;

}

@end

 

@implementation CustomAlertView

 

- (id)initWithTitle:(NSString *)title

            message:(NSString *)message

   didDismissBlocks:(didDismissBlocksType)didDismiss

  cancelButtonTitle:(NSString *)cancelButtonTitle

  otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION

{

    self = [super init];

    if (self) {

        self.delegate = self;

    }

 

    self.title = title;

    self.message=message;

 

    didDismissBlocks = didDismiss;

 

    va_list arguments;

 

    va_start(arguments, otherButtonTitles);

 

    NSString* value = otherButtonTitles;

 

    // 可変長引数が nil になるまで繰り返す

    while (value)

    {

        [self addButtonWithTitle:value];

 

        // 次の引数を取得

        value = va_arg(arguments, typeof(NSString*));

    }

 

// 最後に可変長引数の扱いが終わったことを va_end 関数を使って伝えます。

    va_end(arguments);

 

    [self addButtonWithTitle:cancelButtonTitle];

 

    return self;

}

 

//アラートが消えてから呼ばれる

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex

{

    if(didDismissBlocks != nil)

    {

        didDismissBlocks(buttonIndex);

    }

}

@end

 

 

使い方。

 

    CustomAlertView *alertView

    = [[CustomAlertView alloc] initWithTitle:@"aaaa"

                                     message:@"Message"

                            didDismissBlocks:^(NSInteger buttonIndex){

                                switch (buttonIndex) {

                                    case 0:

                                        //1番目のボタンが押されたときの処理を記述する

                                        NSLog(@"test2Action:ほえほえ1");

                                        

                                        break;

                                    case 1:

                                        //2番目のボタンが押されたときの処理を記述する

                                        NSLog(@"test2Action:ほえほえ2");

                                        break;

                                }

                            }

                           cancelButtonTitle:@"キャンセル"

                           otherButtonTitles:@"ボタン1" ,@"ボタン2",@"ボタン3" ,nil

    ];

 

    [alertView show];

 

 

 

 

 

動作は、自分らで確かめて下さいw

 

 

 

適当にコピペだから文字の大きさ色がぐちゃぐちゃ。あーあ(・_・、)グスン

 

まぁ、私のブログはこんなもんです。。。。。。

 

 

 

NSDataを16進数の文字列に出力する関数

久しぶりに投稿。

 

NSDataを16進数の文字列に出力する関数。(ARC用)

 

- (NSString*) serializeDeviceToken:(NSData*) deviceToken

{

    NSMutableString *str = [NSMutableStringstringWithCapacity:64];

    int length = [deviceToken length];

    char *bytes = malloc(sizeof(char) * length);

    

    [deviceToken getBytes:bytes length:length];

    

    for (int i = 0; i < length; i++)

    {

    [str appendFormat:@"%02.2hhX", bytes[i]];

    }

    free(bytes);

    

    return str;

}

 

または、NSDataのカテゴリーに追加

<NSData+Hex.h>

@interface NSData (Hex)

- (NSString*)hexString ;

@end

 

<NSData+Hex.m>

#import "NSData+Hex.h"

 

@implementation NSData (Hex)

- (NSString*)hexString {

    unichar* hexChars = (unichar*)malloc(sizeof(unichar) * (self.length*2));

    unsignedchar* bytes = (unsignedchar*)self.bytes;

    for (NSUInteger i = 0; i < self.length; i++) {

        unichar c = bytes[i] / 16;

        if (c < 10) c += '0';

        else c += 'a' - 10;

        hexChars[i*2] = c;

        c = bytes[i] % 16;

        if (c < 10) c += '0';

        else c += 'a' - 10;

        hexChars[i*2+1] = c;

    }

    NSString* retVal = [[NSString alloc] initWithCharactersNoCopy:hexChars

                                                           length:self.length*2

                                                     freeWhenDone:YES];

    return retVal ;

}

@end

 

必要だったからメモした。((φ┫ ̄Д ̄ ┣ ホォホォ

CackPHPをMac(with MAMP)で動作させるやり方

いつもの通り超ええかげんブログ。

今回は、Mac(with MAMP)内にCackPHPを設定する方法です。

説明不足だからわからんかったらなんか言ってね。

前提条件:

MacにMAMPが既に入っているものとします。
MacOSX 10.8.3
MAMP Pro 2.1.4

1)CakePHPのダウンロードとインストール
CakePHP 2.3.4

1.CakePHP: 高速開発 php フレームワーク。 Homeから
CakePHP 2.3.4安定版」をダウンロード。

2.「cakephp-2.3.4.zip」を解凍する。
cakephp-2.3.4」と言うフォルダが出来る。
フォルダー名を任意に変更今回は「cakephp」に変更。

3.「cake」フォルダ一式を「アプリケーション/MAMP/htdocs/」に移動する。

4.ふぁるだ等の権限を変更しておく
chmod -R 755 /Applications/MAMP/htdocs/cakephp/app/tmp
chmod -R 755 /Applications/MAMP/htdocs/cakephp/lib/Cake

2)CakePHPの設定編集
1.エディタでcore.phpをオープン
open /Applications/MAMP/htdocs/cakephp/app/config/core.php

「Security.salt」と「Security.cipherSeed」を編集。

f:id:tama-jp:20130511183349p:plain

初期値以外のものに変更する。
    Configure::write('Security.salt', '任意の文字列');
    Configure::write('Security.cipherSeed', '任意の文字列');

2.データベースの設定

あらかじめphpMyAdminにてホストをローカルで設定したユーザとターゲットのテーブルを作成しておく

f:id:tama-jp:20130511183335p:plain

「database.php.default」を「database.php」に変更し修正
mv /Applications/MAMP/htdocs/cakephp/app/config/database.php.default /Applications/MAMP/htdocs/cakephp/app/config/database.php
open /Applications/MAMP/htdocs/cakephp/app/config/database.php

ログインとパスワードを編集する

f:id:tama-jp:20130511183411p:plain

これで、URL「http://localhost:8888/cakephp/」にアクセスし問題ないか見てみる
こんな風にでていてばOK!!

f:id:tama-jp:20130511184841p:plain

一番下の警告はデバッグに関してなのでほっておいていい。

3)コマンドラインからのパス設定

bakeコマンドなどを使うと標準のPHPが動作してしまうらしく、

エラーが出てしまうので、パスを変更。

vi ~/.bash_profile php

f:id:tama-jp:20130511185743p:plain

 

これで、「bake」をつかっても大丈夫なはず。

メモ代わりに書いてみた。ようやくこれで勉強できるε-(´∀`*)ホッ