Monday, November 18, 2013

Hadoop MapReduce開発環境

Saturday, November 16, 2013

cellが多い場合にbootstrapのtable-hoverの動作が遅い

Monday, October 28, 2013

KanColle Sniffer v1.0.4

Wednesday, October 23, 2013

KanColle Sniffer v1.0.2

Tuesday, October 15, 2013

Native Client Tutorial 3

Friday, October 11, 2013

Native Client Tutorial 2

Native Client Tutorial 1

Thursday, October 10, 2013

deprecated sizeWithFont

presentVC iOS7対応

UITextView iOS7対応

BloggerでMarkdown 2

Wednesday, October 9, 2013

BloggerでMarkdown

.markdown  { width:100%; height:320px; overflow:scroll; display:none;  }
.showdown { }
<script src='[showdown.jsのURL]'/>
<script src='https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js'/>
<script>
 $(function(){
     var sd = new Showdown.converter()
     $('.markdown').replaceWith(function(){
         return $('<div/>').html(sd.makeHtml(this.value)).addClass('showdown')
     }).show();
 });
</script>
    <textarea class="markdown" disabled="disabled">
    ###見出し
    
    - リスト1
    - リスト2
    - リスト3
    
    [link](http://dummy/)
    </textarea>

Friday, August 30, 2013

wget

Thursday, June 13, 2013

Unable to access jarfile /Applications/Android

Android StudioからRun ProGuardでapkを作成しようとすると下記のエラーが発生する
Unable to access jarfile /Applications/Android

/Applications/Android Studio.app/sdk/tools/proguard/bin/proguard.sh 内の
java -jar $PROGUARD_HOME/lib/proguard.jar "$@"

java -jar "$PROGUARD_HOME/lib/proguard.jar" "$@"
の様に変更


参考

Tuesday, June 11, 2013

pear command

Thursday, June 6, 2013

Unexpected value from nativeGetEnabledTags

Androidで以下のログが無駄に出てしまう
06-06 04:10:01.461    1738-1738/com.example.sample             W/Trace: Unexpected value from nativeGetEnabledTags: 0

SDKのバグっぽいので、とりあえずフィルタを設定する

[Edit Filter Configuration]を選択

[by Log Message]に
^(?!.*(nativeGetEnabledTags)).*$
を設定



参考

Friday, May 31, 2013

Android Studioでエミュレータのhosts変更

開発等でエミュレータのhostsを書き換えたいとき


エミュレータの起動オプションを追加設定

[Run]→[Edit Configurations...]
を開き
[Emulator]タブを選択
[Additional command line options]にチェックを入れ
-partition-size 512
と入力
(他のサイトを参照すると128でも良さそうだったのだが、上手くいかなかったため512を設定)
[OK]を押して終了


エミュレータ内のhosts書き換え

あらかじめadbのpathを通しておく
$ export PATH=$PATH:/Applications/Android\ Studio.app/sdk/platform-tools

エミュレータを普通にRunして、remount(エミュレータの /system 以下を読み書き可にする)
$ adb remount
このときエラーが出る場合がある
error: device offline
→ デバイスがConnectされてない、もう一度Runしてみる
error: more than one device and emulator
→ 2台以上のデバイス&エミュレータがConnectされているので1つにする

エミュレータのhostsを取得(必要なら)
$ adb pull /system/etc/hosts ~/hosts

エミュレータのhostsを置き換える
$ adb push ~/hosts /system/etc/hosts
上記の起動オプションを設定しなかった場合、ここで以下のエラーが出てしまう
failed to copy '/Users/xxxxxxx/hosts' to '/system/etc/hosts': Out of memory

エミュレータのhostsを確認
$ adb shell
$ cat /System/etc/hosts

remount, pushはエミュレータ起動時に毎回行う必要がある


参考

Android Studioでエミュレータ高速化

Androidエミュレータ遅すぎワロタ...と思ってたら、これは普通に改善するらしいということなのでAndroid Studio開発環境で高速化を謀ってみる

環境
Mac OS X 10.8.3
Android Studio 0.1.1


Packageのインストール

まず必要なpackageを入れる
[Tools]→[Android]→[SDK Manager]
を開いて
開発で必要なOSの[Intel x86 Atom System Image]をインストール
ここではとりあえず最新の
[Android 4.2.2 (API 17)]→[Intel x86 Atom System Image]
をインストール

加えて、
[Extras]→[Intel x86 Emulator Accelerator (HAXM)]
をインストール


IntelHAXMのインストール

/Applications/Android Studio.app/sdk/extras/intel/Hardware_Accelerated_Execution_Manager/IntelHAXM.dmg
上記のdmgからインストールする(バージョンは1.0.6でした)

もし不要になった場合のIntelHAXMのアンインストールは
$ cd /System/Library/Extensions/intelhaxm.kext/Contents/Resources
$ sudo ./uninstall.sh



エミュレータの設定


[Tools]→[Android]→[AVD Manager]
を開いて[New]を選択

AVD Name : 適当
Device : 適当
Target : [Intel x86 Atom System Image]をインストールしたOS
ここでは[Android 4.2.2 - API Level 17]を選択
CPU/ABI : [Intel Atom (x86)]
Emulation Options : [Use Host GPU]にチェック

後はお好みで、[OK]を押して作成
(以前入れた設定を再利用して上記のようにEditしてもエミュレータが上手く動かなかったので1から新規で作成した方がいいかもしれない)


エミュレータでデバッグ

後はいつも通りで上記で作成したエミュレータを選択してRun

ログに
HAX is working and emulator runs in fast virt mode
と出るはず

初回起動だとアプリが何故かインストールされないのでエミュレータ起動後にもう一度Runしてみる


これでなんとかMacでも開発できそうかな


参考


Monday, May 27, 2013

この文字は、エンコーディングsjisにマップできません。

Android Studio で *.javaに日本語を使用すると上記のコンパイルエラーが発生してしまうためInfo.plistを修正

/Applications/Android Studio.app/Contents/Info.plist
の99行目あたりの
<key>VMOptions</key>
<string>-ea -Dsun.io.useCanonCaches=false -XX:+HeapDumpOnOutOfMemoryError -Xverify:none -Xbootclasspath/a:../lib/boot.jar</string>
の<string>に -Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8 を追加する
<key>VMOptions</key>
<string>-ea -Dsun.io.useCanonCaches=false -XX:+HeapDumpOnOutOfMemoryError -Xverify:none -Xbootclasspath/a:../lib/boot.jar -Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8</string>


参考

Friday, May 17, 2013

Android Studio

ADTを入れた矢先、Android Studioなる開発ツールが公開されたっぽいのでこれを入れてみる

http://developer.android.com/sdk/installing/studio.html
からダウンロードしてインストール
簡単ですね

PhpStormと同じものをベースに作られてるみたいでぱっと見なんか似てます
適当なプロジェクトを作成して、エミュレータで実行とかも簡単に出来ました
ただ、相変わらずエミュレータは重い気がします

今までのeclipseでどーのこーのするより使いやすそうな感じがしました

今は以前より大分開発環境が整ってきたんですね

ADT日本語化

Android開発の為にADTをいれてみる
ADTというのはAndroidの開発に必要なeclipseやplugin,sdkがまとめて入っているもので、
以前だとeclipseにpluginを入れたり、sdkを別途取ってきて関連づけたりと面倒だったのだがこれだけで開発ができるらしい
で、eclipse部分が英語なのでその日本語化してみる
あ、Macです

基本的には以前やった普通のeclipseの日本語化と同じ感じ


http://developer.android.com/sdk/index.html から
ADTをダウンロード
解凍して、adt-bundle-mac-x86_64-xxxxxxxxフォルダをアプリケーション(/Applications)へコピペ

http://mergedoc.sourceforge.jp/ から
Eclipse 4.2 Juno Platform Standard Edition をダウンロード
解凍して、dropins(pleiades/eclipse/dropins)フォルダを
eclipseのdropins(/Applications/adt-bundle-mac-x86_64-xxxxxxxx/eclipse/dropins/)フォルダへ上書きコピー

設定ファイル(/Applications/adt-bundle-mac-x86_64-xxxxxxxx/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini)に下記を追加。
-javaagent:../../../dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

クリーンして実行
$ /Applications/adt-bundle-mac-x86_64-xxxxxxxx/eclipse/Eclipse.app/Contents/MacOS/eclipse -clean

Monday, May 13, 2013

ファイル名の一括変更

$ rename 's/\.htm/\.html/;' *.htm

”xxxxx.app”は壊れているために開けません。”ゴミ箱”に入れる必要があります。

macでアプリケーションを起動時にタイトルのメッセージが出る場合

[システム環境設定]→[セキュリティとプライバシー]→[ダウンロードしたアプリケーションの実行許可:]

[すべてのアプリケーションを許可]
に変更する

MountainLion(10.8.X)以降の場合のみ?


参考

CVSでファイルを戻す

最新バージョンに戻す
$ cvs update -p test.txt > test.txt

特定バージョンに戻す
$ cvs update -p -r 1.3 test.txt > test.txt


参考

Friday, May 10, 2013

ポートの使用確認

$ netstat -an | grep :22
tcp        0      0 xxx.xxx.xxx.xxx:22       yyy.yyy.yyy.yyy:yyyyy    ESTABLISHED

Thursday, May 2, 2013

Sublime TextのShift_JIS対応

Sublime Text 2がShift_JISに対応してなかったのでパッケージを入れてみる
そももそもShift_JISなファイル自体触りたくないんですが仕方ないね

https://github.com/seanliang/ConvertToUTF8

からzipをDLしてきて、
解凍して出来たフォルダを[Preferences]→[Brows Packages...]で開いたフォルダに突っ込む

おわり


参考

Sublime Textで任意のファイルを無視

[Preference]→[Settings]の下記部分に追加
"file_exclude_patterns": ["*.pyc", "*.pyo", "*.exe", "*.dll", "*.obj","*.o", "*.a", "*.lib", "*.so", "*.dylib", "*.ncb", "*.sdf", "*.suo", "*.pdb", "*.idb", ".DS_Store", "*.class", "*.psd", "*.db"],

Wednesday, May 1, 2013

Windows7でスリープが勝手に解除される

なぜかWindows7のスリープが数秒で勝手に復帰してしまうようになってしまったので、
ちょっと設定を変更

[コンピュータの管理]→[デバイスマネージャー]→[ネットワークアダプター]→[Realtek PCIe GBE Family Controller]のプロパティを開く
[電源の管理]タブ内の
[このデバイスで、コンピュータのスタンバイ状態を解除できるようにする(O)]のチェックを外す

とりあえず解除されないようにはなったからいいか

Monday, April 29, 2013

Windows7のパーティショニング

Windows7のパーティションを変更したいとき。

今回の例だと、CドライブをCとDドライブに分けたい場合、
Windowsデフォルトのパーティション管理ツールだと、
Cドライブを半分までしか縮小できなかったので、以下のツールを使用。

http://www.partitionwizard.com/


参考

Thursday, April 25, 2013

cvs で svn status

CVSで変更したファイルを参照したい場合
$ cvs diff --brief | & grep 'Index\|is not in file'

Indexが無駄にhitしてしまうのでちょっと修正
$ cvs diff --brief | & grep '^Index\|is not in file'

Tuesday, April 23, 2013

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/user/.ssh/known_hosts:8
RSA host key for hostname has changed and you have requested strict checking.
Host key verification failed

ssh実行時に上記のメッセーが表示された場合
/home/user/.ssh/known_hosts の8行目を削除する

Friday, April 12, 2013

git addの取り消し

$ git reset HEAD [filename]

initial commit してない場合
$ git rm --cached [filename]


参考

shellの正規表現

ワイルドカード
$ ls *.txt
abc111.txt abc121.txt abc122.txt abc123.txt
$ ls abc12?.txt
abc121.txt abc122.txt abc123.txt

任意の文字
$ ls abc12[12].txt
abc121.txt abc122.txt

任意の文字列
$ ls abc{111,122}.txt
abc111.txt abc122.txt

任意の文字を除いた文字
$ ls abc12[^1].txt
abc122.txt abc123.txt


参考

Sunday, April 7, 2013

Unused VariableのWarningを無視

__unused を頭につける
__unused NSInteger i;

よほど変なことしない限り必要なさそうですけど


参考

nested push animation can result in corrupted navigation bar

storyboardでUITableViewからpushするUIViewControllerへsegueを繋げて、
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 [self performSegueWithIdentifier:@"TestView" sender:nil];
}
で、pushした場合に、下のエラーが出た
2013-04-07 23:35:39.020 TestApp[24121:907] nested push animation can result in corrupted navigation bar
2013-04-07 23:35:39.395 TestApp[24121:907] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2013-04-07 23:35:39.399 TestApp[24121:907] Unbalanced calls to begin/end appearance transitions for .
push、popの動作もおかしくなってしまう模様

原因としては、UITableViewCellのSelection Segue(push)からUIViewControllerに繋げてしまっていたので、
UITableViewのManual Segue(push)から繋げるようにして解決
Cellから繋げる場合は明示的に、performSegueWithIdentifier: しなくていいのね


参考

Wednesday, March 20, 2013

スクリーンショットからステータスバー削除

MacPortsでImageMagickインストール
$ sudo port install ImageMagick

convertで削除
$ convert -crop 640x920+0+40 input.png output.png


参考

warning: Attribute Unavailable: Freeform Size simulated metrics are not available prior to Xcode 4.2.

NIBの設定を変える。
[Interface Builder Document]→[Development]を変える。


参考

Xcode4.6スタティックライブラリ

ライブラリ

Cocoa Touch Static Libraryでプロジェクトを作成
Build Settingsで
・Skip Install→YES
・Other Linker Flags→-ObjC
Build Phasesで
・Copy Filesに.hファイルを追加

使う側のプロジェクト

ライブラリの.xcodeprojをプロジェクトに入れるか同じワークスペースに入れる
Linked Frameworks and Librariesにライブラリの.aを追加
Build Settingsで
・Other Linker Flags→-ObjC
・Always Search User Paths→YES
・Header Search Path→$(BUILT_PRODUCTS_DIR)
・User Header Search Paths→ライブラリの絶対パスを指定

Tuesday, March 19, 2013

navigationBarとtoolBarを透明にする

navigationbar, toolbarをUIBarStyleBlackTranslucent以外で透明にする方法

barのbackgroundimageに透明なimageを設定
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithWhite:0.0f alpha:0.8f]] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.toolBar setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithWhite:0.0f alpha:0.8f]] forToolbarPosition:UIToolbarPositionBottom barMetrics:UIBarMetricsDefault];

透明なimageはどう生成してもいいんですが、ここでは以下のカテゴリで作成している
#import "UIImage+Color.h"

@implementation UIImage (Color)

+ (UIImage *)imageWithColor:(UIColor *)color
{
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
        
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);
        
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
        
    return image;
}

@end

Picstasy ver1.0.0

2つ目のアプリPicstasyをリリースしました
https://itunes.apple.com/us/app/picstasy/id617328186?l=ja&ls=1&mt=8

Pixiv専用の画像ビューアです
アプリといったらやっぱり画像ビューアでしょ!?(謎)ということで作成しました
はっきりいって、画像の原寸サイズ表示やページありのイラストの表示とか
いろいろやってないので機能としてはいまいちです
申請は通ったので、これをもとにして作り直すかなぁといったところです。

言い訳乙

Friday, March 15, 2013

UIScrollViewでnavigationBarやtoolBarをスクロール範囲に被らないように透けさせて配置

タイトルが長い

どういうことかと言うと、普通にnavigationBarとtoolBarをUIBarStyleBlackTranslucentに設定して、
UIScrollViewをself.viewに突っ込むだけだと、
スクロール範囲がnavigationBarとtoolBarに被ってしまって見栄えが非常に良くない
(例えば一番下までスクロールしても、UIScrollViewのcontentがtoolBarに被ってしまう)

これが例えば、UITableViewContollerを使ったりすると、
tableViewは透けるのにスクロール範囲はnavigationBar, toolBarに被らないように
よろしくやってくれたりする

それをUIScrollViewでやりたい
上記を実現する為に、
  1. UIScrollViewのcontentの余白をbarのheight分縮める
  2. UIScrollViewのスクロールバーの余白?もbarのheight分縮める
コードで書くと、以下のような感じ

// 対象のscrollView
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
                 :
- (void)viewDidLoad
{
 [super viewDidLoad];

 // barを透明に
 self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
 self.navigationController.toolbar.barStyle = UIBarStyleBlackTranslucent;

 UIEdgeInsets insets;
 // contentを縮める
 insets= self.scrollView.contentInset;
 insets.top = self.navigationController.navigationBar.frame.size.height;
 insets.bottom = self.navigationController.toolbar.frame.size.height;
 self.scrollView.contentInset = insets;
 // スクロールバーの範囲を縮める
 insets = self.scrollView.scrollIndicatorInsets;
 insets.top = self.navigationController.navigationBar.frame.size.height;
 insets.bottom = self.navigationController.toolbar.frame.size.height;
 self.scrollView.scrollIndicatorInsets = insets;
 
 // そのままだと初期位置がnavigationBarに被るので下にずらす
 CGPoint point = self.scrollView.contentOffset;
 point.y = -1*self.scrollView.contentInset.top;
 self.scrollView.contentOffset = point;
}

これでいろいろ透けさせることができそう(意味深)


参考

Friday, March 8, 2013

sshのknown_hostsでwarning

サーバが変わった場合に以下のような警告が出ることがある。
user@host01:~$ ssh user@host02
Warning: the ECDSA host key for 'host02' differs from the key for the IP address 'xxx.xxx.xxx.xxx'
Offending key for IP in /home/user/.ssh/known_hosts:199
Matching host key in /home/user/.ssh/known_hosts:208
Are you sure you want to continue connecting (yes/no)? 
上記の例だと、/home/user/.ssh/known_hosts の199行目を削除して保存すればおk

Wednesday, February 27, 2013

MySQL commands

iOSシミュレータでデバッグできない

XcodeからiOSシミュレータでデバッグできない場合

error: failed to attach to process ID xxxx
デバッガには↑が表示され
Attaching to SampleApp
Xcode上には↑が表示され中止も出来なくなるのでXcodeを強制終了する必要がある

解決法としては、
[Edit Scheme...]→[Run SampleApp.app]→[Info]→[Debugger]
で、デバッガをLLDBからGDBにするか、

PCのhostsに以下を追加する
127.0.0.1    localhost


参考

Friday, February 22, 2013

PhpStormで文字エンコーディング変更

PhpStormのプロジェクトの文字エンコーディングを変更。

[Preferences]→[File Encodings]
・[Autodetect UTF-encoded files]のチェックを外す。
・プロジェクトフォルダの右側の空いてる部分をクリックして任意の文字コードを選択。
PhpStormをリスタート。

NSOperationのプロパティ

NSOperationのサブクラスを作って、
そのクラスに
@property (nonatomic, copy) DummyBlock completionBlock;
という名前のプロパティを作成して、
Operation完了後の処理をこのBlocksで実行するように実装すると、
いろいろ挙動がおかしくなります
(setCompletionBlockというメソッドがNSOperationの抽象メソッドのため)

名前を変えたら期待通りの動きになった
Xcodeだとオーバーライドしてるのがわかりにくいなと思った

Sunday, February 17, 2013

DotMemo ver1.0.0

DotMemoというiPhoneアプリをリリースしました
https://itunes.apple.com/jp/app/dotmemo/id601886212?l=ja&ls=1&mt=8

簡単に言うとUITextViewをwindowにそのままはっつけただけのどうみてもやっつけなアプリです
素人が作ったものだから仕方ないね(言い訳)

微妙にジェスチャーをサポートしてます
一応iPadでも使えるはずです(実機で動くのかは不明)

iOS6の実装の仕方を勉強してて、その流れでoutputしたものなのですが、
まさか審査通るとはおもわなかっt

Xcode4.6でiOS framework作成

iOSのframework作成をしようと、いろいろ参考にしたけど、すごく詰まったので一応書いておく
Xcodeのバージョンは4.6

Project作成

[File]→[New]→[Project]
を選択
[iOS]→[Framework & Library]→[Cocoa Touch Static Library]

[Product Name] "MyLibrary" と入力(名前を決める。***.framework の *** の部分)
[Organization Name] と [Company Identifier] は適当に
[Include Unit Tests] はどちらでも
[Use Automatic Reference Counting] はチェック入れたままで

パスはまあ適当に好きな所に作成


Headerディレクトリ作成

Xcode の MyLibrary ディレクトリを右クリックして[Add Files to "MyLibrary"...]をクリック
出てきたプロンプトの左下の[New Folder]をクリックして "Headers" と入力して[Create]
右下の[Add]でプロジェクトに追加
ここに公開したい .hファイルを置く(ライブラリを実装したら入れてください)


ターゲット作成

[TARGETS]→[MyLibrary]を選択して、左下の[Add Target]をクリック
[iOS]→[Other]→[Aggregate]

[Product Name] "MyLibrary-Universal" と入力(何でもいい?)
[Finish]して作成


スキーマ設定変更

[Manage schemes]で MyLibrary の Show のチェックを外す
(別に外す必要はないけど、使用しないので非表示にしているだけ)


Info.plist作成

[Supporting Files]を右クリックして[New File...]をクリック
[iOS]→[Resource]→[Property List]

[Save As:]に "Info.plist" と入力
[Create]して作成
Info.plist を右クリックして[Open As]→[Source Code]
下のコードをコピーして上書き。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>CFBundleName</key>
 <string>MyLibrary</string>
 <key>CFBundleIdentifier</key>
 <string>com.blogspot.fiahfy.MyLibrary</string>
 <key>CFBundleInfoDictionaryVersion</key>
 <string>6.0</string>
 <key>CFBundleVersion</key>
 <string>1</string>
 <key>CFBundleExecutable</key>
 <string>MyLibrary</string>
 <key>CFBundleGetInfoString</key>
 <string>MyLibrary</string>
 <key>NSPrincipalClass</key>
 <string></string>
 <key>CFBundlePackageType</key>
 <string>FMWK</string>
 <key>CFBundleIconFile</key>
 <string></string>
 <key>CFBundleSignature</key>
 <string>????</string>
 <key>CFBundleDevelopmentRegion</key>
 <string>English</string>
 <key>NSHumanReadableCopyright</key>
 <string>Copyright fiahfy. All rights reserved.</string>
 <key>CFBundleShortVersionString</key>
 <string>1.0.0</string>
</dict>
</plist>

Info.plist を右クリックして[Open As]→[Property List]
で開き直して、
MyLibrary, com.blogspot.fiahfy.MyLibrary, fiahfy
等の部分を自分で設定したものに適宜変更する


スクリプト設定

[TARGETS]→[MyLibrary-Universal]を選択して、
[Build Phases]→[Add Build Phase]→[Add Run Script]をクリック
"Type a script or drag a script file from your workspace" の部分に以下のスクリプトをコピペ
# Environment Variables
INFO_PLIST="Info.plist"
FRAMEWORK_NAME=${PROJECT_NAME}
FRAMEWORK_VERSION_NUMBER=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" ${SRCROOT}/${PROJECT_NAME}/${INFO_PLIST})
FRAMEWORK_VERSION=A
FRAMEWORK_BUILD_PATH="${SRCROOT}/build/${CONFIGURATION}-framework"
FRAMEWORK_DIR="${FRAMEWORK_BUILD_PATH}/${FRAMEWORK_NAME}.framework"
FRAMEWORK_PACKAGE_NAME="${FRAMEWORK_NAME}.${FRAMEWORK_VERSION_NUMBER}.zip"

# Clean directories
[ -d "${FRAMEWORK_BUILD_PATH}" ] && rm -rf "${FRAMEWORK_BUILD_PATH}"

# Build simulator and device binaries.
xcodebuild -project ${PROJECT_NAME}.xcodeproj \
 -sdk iphonesimulator${IPHONEOS_DEPLOYMENT_TARGET} \
 -target "${PROJECT_NAME}" \
 -configuration ${CONFIGURATION} clean build
xcodebuild -project ${PROJECT_NAME}.xcodeproj \
 -sdk iphoneos${IPHONEOS_DEPLOYMENT_TARGET} \
 -target "${PROJECT_NAME}" \
 -configuration ${CONFIGURATION} clean build

# create framework directories.
mkdir -p ${FRAMEWORK_DIR}
mkdir -p ${FRAMEWORK_DIR}/Versions
mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}
mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}/Resources
mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}/Headers

# create symlinks
ln -s ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION} ${FRAMEWORK_DIR}/Versions/Current
ln -s ${FRAMEWORK_DIR}/Versions/Current/Headers ${FRAMEWORK_DIR}/Headers
ln -s ${FRAMEWORK_DIR}/Versions/Current/Resources ${FRAMEWORK_DIR}/Resources
ln -s ${FRAMEWORK_DIR}/Versions/Current/${FRAMEWORK_NAME} ${FRAMEWORK_DIR}/${FRAMEWORK_NAME}

# create the universal library
lipo -create \
 ${SRCROOT}/build/${CONFIGURATION}-iphoneos/lib${FRAMEWORK_NAME}.a \
 ${SRCROOT}/build/${CONFIGURATION}-iphonesimulator/lib${FRAMEWORK_NAME}.a \
 -output "${FRAMEWORK_DIR}/Versions/Current/${FRAMEWORK_NAME}"

# copy files
ls ${SRCROOT}/${PROJECT_NAME}/Headers/*.h > /dev/null 2>&1 && cp ${SRCROOT}/${PROJECT_NAME}/Headers/*.h ${FRAMEWORK_DIR}/Headers/
cp ${SRCROOT}/${PROJECT_NAME}/${INFO_PLIST} ${FRAMEWORK_DIR}/Resources

# create zip
cd ${FRAMEWORK_BUILD_PATH}
zip -ry ${FRAMEWORK_PACKAGE_NAME} $(basename $FRAMEWORK_DIR)



ここまで設定すればビルドは一応通るはず(中身がないので意味のないframeworkですが)

ビルド後は
build/Debug-framework/MyLibrary.framework
が作成されているので、これを使用したいプロジェクトで「Linked Frameworks and Libraries」に追加すればおk

リリースビルドした場合は
build/Release-framework/MyLibrary.framework
で、配布したい時は
build/Release-framework/MyLibrary.1.0.0.zip
を配ればよいって感じかと思います

中身書く前に疲れたっていう


参考

Saturday, February 16, 2013

Perlでファイルの上書き

Perlでファイルを上書きしたい場合は
open(OUT, "> $filepath");
print OUT "hoge\n";
close(OUT);
とするが、この方法だと上書きする際にファイルが一度0バイトになってしまう。
その状態で読み込みが走ると、0バイトのファイルが取得されてしまう。
それを回避する為には下の方法で。
open(OUT, "+< $filepath");
flock(OUT, 2);
seek(OUT, 0, 0);
print OUT "hoge\n";
truncate(OUT, tell(OUT));
close(OUT);
ただこのままだと、上書きするファイルが無い場合にエラーが出てしまうため場合分けする。
if (-f $filepath) {
    open(OUT, "+< $filepath");
    flock(OUT, 2);
    seek(OUT, 0, 0);
    print OUT "hoge\n";
    truncate(OUT, tell(OUT));
    close(OUT);
} else {
    open(OUT, "> $filepath");
    print OUT "hoge\n";
    close(OUT);
}


参考

Thursday, February 14, 2013

PhpStormで任意の拡張子を無視

PhpStormで任意の拡張子を無視するように設定。
[Preferences]→[File Types]→[Ignore files and folders]
に追加。(*.aaa みたいに)

No such file or directory

$ ./xxxxx.pl
: No such file or directory!C:/Perl/bin/perl
:
と表示されてエラーが出る場合。
Perlがutf-8で書かれている場合は、BOM無しにしてみると実行できた

Tuesday, February 12, 2013

blocksで遅延実行

blocksで遅延実行
// 2秒遅延
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2.0f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
// code
});

Objective-Cのリテラル表現

Objective-Cのリテラル表現(Xcode4.4以降)
// Array
NSArray *array = @[@"hoge", @"fuga"];
// Dictionary
NSDictionary *dictionary = @{@"key1" : @"val2", @"key2" : @"val2"};
// Number
NSNumber *number1 = @100;
NSNumber *number2 = @YES;

// 添字アクセス
NSString *str1 = array[0];     // @"hoge"
NSString *str2 = dictionary[@"key2"];      // @"val2"

コードが大分すっきりするようになっていいです


参考

Objective-Cデバッグ用にエラー出力

デバッグ用に以下を入れる

@AppDelegate.m
void uncaughtExceptionHandler(NSException *exception) {
    NSLog(@"CRASH: %@", exception);
    NSLog(@"Stack Trace: %@", [exception callStackSymbols]);
    // Internal error reporting
}

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
    // Override point for customization after application launch.
    return YES;
}
なんかいろいろ出てきて便利


参考

Monday, February 11, 2013

eclipse上でのエディタ関連づけ

任意の拡張子のファイルをeclipse内の任意のエディタで開くように設定する方法

例えば、*.inc ファイルを .html ファイルと同じエディタで開くように設定する場合
[環境設定]→[一般]→[コンテンツ・タイプ]→[テキスト]→[HTML]を選択して[追加]
*.inc と入力して[OK]
ファイルを開き直せばおk


[環境設定]→[一般]→[エディター]→[ファイルの関連付け]
に *.inc いれてHTMLエディターを設定しても効果がなかった
こっちの設定は何の為にあるんだか

Sunday, February 10, 2013

iphoneアプリのiconとsplash

アイコンサイズやら起動画面の画像サイズとか

splash
Default.png320x480 px
Default@2x.png640x960 px
Default-568h@2x.png640x1136 px
Default-Portrait~ipad.png768x1004 px
Default-Portrait@2x~ipad.png1586x2008 px
Default-Landscape~ipad.png1024x748 px
Default-Landscape@2x~ipad.png2048x1496 px

icon
Icon.png57x57 px
Icon@2x.png114x114 px
Icon-72.png72x72 px
Icon-72@2x.png144x144 px
Icon-small.png29x29 px
Icon-small@2x.png58x58 px
Icon-small-50.png50x50 px
Icon-small-50@2x.png100x100 px

とりあえず以上のサイズを作成


参考

Multiple build commands for output file

xcodeで何度かIconを再登録していたらなんか上記のwarningが出た

[TARGETS]→[Build phases]→[Copy Bundle Resources]
で重複しているファイルを削除で解消


参考

SyntaxHighlighterでObjective-C

SyntaxHighlighterでObjective-Cをハイライトできなかったので以下のJSをヘッダに追加
<script src='https://raw.github.com/andrashatvani/shBrushObjC/master/shBrushObjC.js' type='text/javascript'/>
あとはエイリアスをocに設定
<pre class="brush: oc;">
    NSLog(@"hoge");
</pre>

参考

キーボード表示時にリサイズ

キーボード表示時にUITextViewをリサイズするテンプレ

Landscapeの場合keyboardRectのwidthとheightが逆になるので考慮する
self.viewのサイズを取得する場合はboundsを使用する。(frameの場合Landscapeになっても値が変わらない)

- (void)viewWillAppear:(BOOL)animated
{
 [super viewWillAppear:animated];
 
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}

- (void)viewDidDisappear:(BOOL)animated
{
 [super viewDidDisappear:animated];
 
 [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
 [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}

:

- (void)keyboardWillShow:(NSNotification*)notification
{
 CGRect keyboardRect = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
 if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
  CGRect rect = keyboardRect;
  rect.size.width = keyboardRect.size.height;
  rect.size.height = keyboardRect.size.width;
  keyboardRect = rect;
 }
 CGRect frame = self.textView.frame;
 frame.size.height = self.view.bounds.size.height - keyboardRect.size.height;
  
 NSTimeInterval duration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
 
 UIViewAnimationCurve curve = [[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] integerValue];
 
 [UIView animateWithDuration:duration delay:0.0f options:(curve << 16) animations:^{
  self.textView.frame = frame;
 } completion:nil];
}

- (void)keyboardWillHide:(NSNotification*)notification
{
 CGRect frame = self.textView.frame;
 frame.size.height = self.view.bounds.size.height;
 
 NSTimeInterval duration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
 
 UIViewAnimationCurve curve = [[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] integerValue];
 
 [UIView animateWithDuration:duration delay:0.0f options:(curve << 16) animations:^{
  self.textView.frame = frame;
 } completion:nil];
}

Wednesday, February 6, 2013

Interface Builderで画像がキャッシュされる

XcodeのIntefaceBuilderで一度設定した画像を
同名の別の画像に変更した場合に
シミュレータで元の画像が表示されてしまう場合

Xcodeで[Product]→[Clean]する
iOSシミュレータで[iOSシミュレータ]→[コンテンツと設定をリセット...]して終了させる
Xcodeで再度Runで新しい画像が反映された

どういうタイミングで発生するのかは謎

Friday, February 1, 2013

Perlでのトランザクション

DBIを使用した場合のトランザクションはこんな感じ?
%attr = (RaiseError=>1, PrintError=>0);    # AutoCommit=1 (default)
$dbh = DBI->connect($dsn, $user, $pass, \%attr);
eval {
    $dbh->begin_work;    # begin tran
    $sth = $dbh->prepare($statement);
    $sth->bind_param($p_num, $bind_value);
    $sth->execute;
    $dbh->commit;    # commit tran
};
if ($@) {    # eval内でエラーが発生するとここへ
    warn "Transaction aborted because $@";
    $dbh->rollback;    # rollback tran
}
$dbh->disconnect;

AutoCommit=1の場合は明示的にbegin_workでトランザクションを開始する
AutoCommit=0の場合は
$dbh->{AutoCommit} = 0;
したタイミングで開始される?
明示的に指定したいのでそのまま(AutoCommit=1)で

RaiseError=1だとDBerrorの際にdieを発生させる
RaiseError=0だといちいち
$sth->bind_param($p_num, $bind_value) or die("sql bind error $!");
とする必要がある
die書くのが面倒なので(RaiseError =1)で

PrintError=1だとDBerror時にエラーメッセージを表示させる
RaiseError=1の場合、dieのメッセージを表示すると
同じものが表示されて鬱陶しいので(PrintError=0)


参考

PerlでURLEncode/Decode

PerlでURLEncodeとURLDecode
use URI::Escape;

$unescaped = uri_unescape($escaped);
$escaped = uri_escape($unescaped);
URI::Escapeってデフォで入ってるからパッケージ入れる必要なし?

参考

shellでの条件分岐

shellでのor表現
if [$hoge = "aaa" -o $fuga = "bbb"]; then
  # or
fi

shellでのand表現
if [$hoge = "aaa" -a $fuga = "bbb"]; then
  # and
fi

参考

動的ビュー

Bloggerの動的ビューやめました

以下理由
  • 表示が遅い&重い
  • 2回目の記事表示時にSyntaxHighlighterがうまく動かない
  • 画像をたくさん使うブログでは見栄えがいいけど、コードばかりだといまいち
  • そもそもコードをのせるのにあまり適してない

仕方ないね

Saturday, January 26, 2013

PHPシリアライズファイルをdump

ワンライナーでPHPシリアライズファイルをDump

$ php -r 'var_dump(unserialize(file_get_contents("test.txt")));'

macでeclipse日本語化

毎回忘れるのでめも

http://www.eclipse.org/downloads/ から
Eclipse Classic 4.2.1 をダウンロード
解凍して、eclipseフォルダをアプリケーション(/Applications)へコピペ

http://mergedoc.sourceforge.jp/ から
Eclipse 4.2 Juno Platform Standard Edition をダウンロード
解凍して、dropins(pleiades/eclipse/dropins)フォルダを
eclipseのdropins(/Applications/eclipse/dropins/)フォルダへ上書きコピー

設定ファイル(/Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini)に下記を追加。
-javaagent:../../../dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

クリーンして実行
$ /Applications/eclipse/eclipse -clean


加えて、pluginを入れる場合
[ヘルプ]→[新規ソフトウェアのインストール]→[作業対象]で

・EPIC(Perl)
 http://www.epic-ide.org/updates/testing/
 EPIC メイン・コンポーネント を選択
・PDT(PHP)
 Juno - http://download.eclipse.org/releases/juno
 Web, XML, Java EE および OSGi エンタープライズ開発
 →PHP 開発ツール (PDT) SDK フィーチャー を選択

Monday, January 21, 2013

連番ディレクトリ作成

$ mkdir dir_{1..10}
$ ls
dir_1  dir_10 dir_2  dir_3  dir_4  dir_5  dir_6  dir_7  dir_8  dir_9

0埋めバージョン
$ for i in `seq -w 1 10`; do mkdir dir_${i}; done
$ ls
dir_01 dir_02 dir_03 dir_04 dir_05 dir_06 dir_07 dir_08 dir_09 dir_10

0埋め+2重ループバージョン
$ for j in `seq -w 1 10`; do for i in `seq -w 1 10`; do mkdir -p dir_${j}/dir_${i}; done; done
$ ls *
dir_01:
dir_01 dir_02 dir_03 dir_04 dir_05 dir_06 dir_07 dir_08 dir_09 dir_10

dir_02:
dir_01 dir_02 dir_03 dir_04 dir_05 dir_06 dir_07 dir_08 dir_09 dir_10

              :

dir_10:
dir_01 dir_02 dir_03 dir_04 dir_05 dir_06 dir_07 dir_08 dir_09 dir_10

アルファベットでも
$ mkdir dir_{a..j}
$ ls
dir_a  dir_b dir_c  dir_d  dir_e  dir_f  dir_g  dir_h  dir_i  dir_j

ssh nopass

sshのnopass設定

接続元ホストで以下を実行

鍵を作成
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key(/home/user/.ssh/id_rsa): xxxxx     # ファイル名(defaultはid_rsa
Enter passphrase (empty for nopassphrase): yyyyy     # パスワード(空の場合はnopass
$ ls ~/.ssh
id_rsa            # 秘密鍵
id_rsa.pub        # 公開鍵
公開鍵をコピー
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...AAAAAA user@hostname

接続先ホストで以下を実行

authorized_keysに追加(無い場合は作成する)
$ vi ~/.ssh/authorized_keys
作成した場合はアクセス権限を設定
$ chmod 600 ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh

接続元ホストで確認

$ ssh user@hostname


ssh-copy-idを使用する場合は接続元ホストで以下を実行するだけ

$ ssh-keygen -t rsa
$ ssh-copy-id -i .ssh/id_rsa.pub user@hostname

開発元が未確認の為開けません

macで「開発元が未確認の為開けません」でアプリケーションが実行できない時

右クリックで「開く」
 または
「システム環境設定」→「セキュリティとプライバシー」→「ダウンロードしたアプリケーションの実行許可」を変更する


参考

Sunday, January 20, 2013

git config

Gitの構成の参照/設定


構成ファイルの対象を指定
--system: 全てのユーザ、リポジトリに対する設定ファイル(/etc/gitconfig)
--global: 現在のユーザに対する設定ファイル(~/.gitconfig)
--local: 現在のリポジトリに対する設定ファイル([repository path]/.git/config)


構成の設定/変更
$ git config [key] [value]

構成の削除
$ git config --unset [key]

構成(key)の参照
$ git config [key]

構成(list)の参照
$ git config -l (or --list)


とりあえず、個人情報設定だけは最初にしておいた方がよい(Logに使用される)
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

merge, comment 等で使用するエディタを変更する場合(デフォルトはvi)
$ git config --global core.editor emacs


参考

du -sh

ディレクトリのサイズを調査
$ du -sh [path]
ex.
$ du -sh tmp
104K tmp

BitbucketでGit(2)

リポジトリを作ったら、まず設定を行う
$ git config --global user.name "username"
$ git config --global user.email "dummy@gmail.com"
$ git config --global color.ui auto

設定は↓のコマンドで確認できる
$ git config --list
or
$ cat ~/.gitconfig

リポジトリに登録したいディレクトリに移動して初期化
$ cd tmp
$ git init

リモートリポジトリの登録(リポジトリのURLを省略できる?
$ git remote add origin https://username@bitbucket.org/username/sample.git

登録されているリモートリポジトリを確認(-v で詳細
$ git remote -v

ローカルリポジトリの状態確認
$ git status

ファイルを追加/修正した場合
$ git add test.txt

変更をコミット
$ git commit -m update

ローカルリポジトリをリモートリポジトリへpush(初回の場合は master を指定
$ git push -u origin master

以上で、Bitbucketの方にリポジトリが登録される

man もあるのでそれ見るのがいいかも
$ man git-add
$ git help add
$ git add --help

SVNとちょっと似てるからいいけど、いきなりこれやったら覚えられなさそう

BitbucketでGit(1)

早速Bitbucketにユーザ登録をして、リポジトリを作ってみる


Name だけとりあえず決めて、後は適当に
Repository type 以外は後で変更できるみたいなので

SyntaxHighlighter

Bloggerのソースコード表示にSyntaxHighlighterを使用しようと思ったら、動的ビューだと正常に動作しないらしい
対処法があったので以下の方法で試してみる

  1. まず、
    http://www.way2blogging.org/widget-generators/syntax-highlighter-scripts-generator
    でガジェット用のHTMLを生成する(ソースコードのテーマカラーと、対応させる言語を選択する)
  2. 生成したHTMLからCSSの記述を削除して、
    [レイアウト]→[ガジェットを追加]→[HTML/JavaScript]
    にコピペして追加
  3. 2で削除したCSS(おそらく2つ)をブラウザで直接開き、中身をコピー
  4. コピーしたCSSをちょっと修正(任意)
    /* 縦スクロールバーを消す */
    .syntaxhighlighter {
      width: 100% !important;
      margin: 1em 0 1em 0 !important;
      position: relative !important;
      overflow: auto !important;
      font-size: 1em !important;
      overflow-y: hidden !important; /* 追加 */
    }
    
  5. コピーしたCSSをさらに修正(任意)
    /* ツールバー(右上の?)を消す */
    .syntaxhighlighter .toolbar {
      position: absolute !important;
      right: 1px !important;
      top: 1px !important;
      width: 11px !important;
      height: 11px !important;
      font-size: 10px !important;
      z-index: 10 !important;
      display: none !important; /* 追加 */
    }
    
    (↓の方法でツールバーが消えなかったため)
    <script language="javascript" type="text/javascript">
     SyntaxHighlighter.config.bloggerMode = true;
     SyntaxHighlighter.defaults['toolbar'] = false; // ここ
     SyntaxHighlighter.all();
    </script>
    
  6. コピーしたCSSを
    [テンプレート]→[カスタマイズ]→[アドバンス]→[CSSの追加]
    にペーストして適用
  7. 記事投稿時にソースを<pre>で括り、最後に下記のJavaScriptを記述する(記事毎に必要でちょっとめんどくさい)
    <pre class="brush: js;">
    // HTMLエンコードする
    console.log('疲れた');
    </pre>
    <script src="http://syntaxhighlight-blogger-dynamic.googlecode.com/files/syntaxhighlighter-20111212.js" type="text/javascript"></script>
    
    class="brush: [alias];"の[alias]部分はソースの言語を指定する
    エイリアスは↓
    http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/


結果↓みたいになります
// HTMLエンコードする
console.log('疲れた');

参考

Saturday, January 19, 2013

Git

今までSVNにいっぱいいっぱいだったので、ようやくGITに手を出してみる

有名なところでGitHubだと非公開なレポジトリを無料で作れないみたいなので、無料で作れるBitbucketを使ってみる(とりあえず使ってみたいだけなので

test

test