`の直前に以下を挿入(markedの設定とかは適当)
```html
```
###記事を書いてテスト
```
<textarea class="markdown" disabled="disabled">
###見出し
* リスト1
* リスト2
* リスト3
[リンク](http://)
</textarea>
```
###参考
*
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
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
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
”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
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
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
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でやりたい
上記を実現する為に、
コードで書くと、以下のような感じ
// 対象の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
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
アイコンサイズやら起動画面の画像サイズとか
Default.png 320x480 px Default@2x.png 640x960 px Default-568h@2x.png 640x1136 px Default-Portrait~ipad.png 768x1004 px Default-Portrait@2x~ipad.png 1586x2008 px Default-Landscape~ipad.png 1024x748 px Default-Landscape@2x~ipad.png 2048x1496 px
Icon.png 57x57 px Icon@2x.png 114x114 px Icon-72.png 72x72 px Icon-72@2x.png 144x144 px Icon-small.png 29x29 px Icon-small@2x.png 58x58 px Icon-small-50.png 50x50 px Icon-small-50@2x.png 100x100 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の動的ビューやめました
以下理由
仕方ないね
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
参考
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とちょっと似てるからいいけど、いきなりこれやったら覚えられなさそう
SyntaxHighlighter
Bloggerのソースコード表示にSyntaxHighlighterを使用しようと思ったら、動的ビューだと正常に動作しないらしい
対処法があったので以下の方法で試してみる
http://www.way2blogging.org/widget-generators/syntax-highlighter-scripts-generator
でガジェット用のHTMLを生成する(ソースコードのテーマカラーと、対応させる言語を選択する)
[レイアウト]→[ガジェットを追加]→[HTML/JavaScript]
にコピペして追加
/* 縦スクロールバーを消す */
.syntaxhighlighter {
width: 100% !important;
margin: 1em 0 1em 0 !important;
position: relative !important;
overflow: auto !important;
font-size: 1em !important;
overflow-y: hidden !important; /* 追加 */
}
/* ツールバー(右上の?)を消す */
.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>
[テンプレート]→[カスタマイズ]→[アドバンス]→[CSSの追加]
にペーストして適用
<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
Subscribe to:
Posts (Atom)