2014年4月30日水曜日

MacでUSBスピーカーを使うときの設定

MacにUSBスピーカーを接続したけど音が出ない。
LEDは光っているので通電はしているのだけれど。

ちょっと古いスピーカーだからMac対応してないのかとも思ったのだけれど。
おのれApple。

調べたら、OS X 10では設定しないと音声出力は切り替わらないらしい。

Mac OS X 10.1:「システム環境設定」で USB スピーカを選択する必要があります
サウンドの接続経路を USB スピーカに変更するには:
1. アップルメニューから「システム環境設定」を 選択します。
2.「サウンド」をクリックします。
3.「出力」タブをクリックします。
4. 装置リストから USB スピーカ(例えば“Speakers”)を選択します。なお“Buit-in audio controller”を選択すると内蔵スピーカから音が出るようになります。

だそうな。
そういえばUSBつないだ瞬間に設定画面表示されてたような・・・



Pixelmatorを始めるときにやっておくこと(ルーラの設定)

・・・というかやっといたほうが良かったこと。
iPhoneアプリのアイコン作成用で、Photoshopの代わりに使ってます。
尚、Photoshopは使ったことない模様。お絵かき素人。

Pixelmatorの環境設定を行う(ルーラ)

グリッドの色はグレー、透明度30%ぐらいで。

表示の仕方は、
Pixelmatorでグリッド(ます目)を表示/隠す
アイコン作るときは正方形で絵の位置キッチリじゃないと困るので、
こういう設定を予めしていると捗る。

2014年4月29日火曜日

ChromeとFirefoxとSafariでブックマーク同期する方法 → 全部消えた(´・ω・`)

ChromeとFirefox両方使っている話を以前書いたんですが、
そうなるとChromeの仕事用ブックマークとFirefoxの仕事用ブックマークって同期させたいわけじゃないですか。

Windows用には、ツールが提供されているわけです。
Windows 用 iCloud コントロールパネル
(mac用はないみたいですね。まあmac上ではSafariだけ使えよという考えなのだと思われ)

これで、各ブラウザ間でブックマーク同期できるわけです。
で、Windowsマシンにツール入れて、起動していればWin経由でmacのブラウザ間も同期できるという。例えば、

① macのFirefoxでブックマークを編集する
  ↓
② WinのFirefoxにクラウド同期される
  ↓
③ WinのiCloudコントロールパネルがFireFoxからChromeを同期する
  ↓
④ macのChromeにクラウド同期される


という仕組み。やったね!



するとね、急に変なことを言い出すんですよ
「・・・あれ、おかしいな。ブックマークが同期されていない」
そんなはずはないんだー、そんなはずはね、ないんですよ
だってmacのFirefoxでブックマーク弄ったら、連携するはずなんですよね、クラウド同期が
でも出ない
変な空気だけが漂ってね、あー嫌だなぁー、気持ち悪いなぁー、そう思った時ですよ
「やっぱり変ですよ。Chromeでもちょっと見てもらえませんか」
そう言うんだ
そりゃそうだ、macとWindows、FirefoxでもChromeでも確認した方がいいんでね、私も渋々見ましたよ
そしたらね、無いんだ、データが
消えてるんですよ、なんにも無い
私そこで気を失ったらしいですよ、
あるんですよね、常識では考えられないようなことが

2014年4月28日月曜日

関東ITソフトウェア健康保険組合の任意継続の手続きをしました

会社員の現職ではITS(関東IT健保)に加入しているわけですが、
離職後、継続加入するための手続きをしました。

http://www.its-kenpo.or.jp/hoken/nini/about/tetsuduki.html

・・・といっても、ペラ一枚に住所氏名捺印して郵送するだけですけど。

それ以前に、自分の居住エリアの市のサイトで国民健康保険の金額を算出して、
どっちが安いか計算して選んだほうがいいみたいです。
自分は計算したんですけど金額変わりませんでした。

で、とりあえずITSの任意継続に。
いちど離脱しちゃうと再加入できないので、迷ったら任意継続しとけ、という話です。

2014年4月27日日曜日

ブラウザ亜種の使い分けについて

ChromeとFirefoxを両方使っているのですが、
それぞれで仕事用・個人用でプロファイルを分けています。
(単に別々にブックマーク管理したいという)
んで、切り替えて使うのも面倒なんで、それぞれの亜種(?)をインストールしています。

仕事用 Chrome『Chrome Canary』
http://www.google.co.jp/intl/ja/chrome/browser/canary.html

個人用 Chrome(普通の)
http://www.google.com/intl/ja/chrome/browser/

仕事用 Firefox(普通の)
http://www.mozilla.jp/firefox/

個人用 Firefox『PaleMoon』(Win専用)
http://www.palemoon.org/

CanaryはChromeの開発中の新機能が先行搭載されるのが特徴。
PaleMoonはWin専用ながら64bitOSに最適化されている模様。
(でも本家よりバグあったりマイナーな検索エンジンをデフォルトに設定されてたりする。)

2014年4月26日土曜日

配列の初期化方法

一日一記事縛りで毎日更新してきたけど、ネタ切れてきた!

Objective-Cの配列の初期化方法で、要素が事前にわかっている場合。
なんかあんまりリファレンスとかにこの書き方載っていないような。

この書き方なんていう言い方すればいいんだろう。。。

NSArray *arr = @[@1,@2,@3,@4,@5];

結構使う場面あるよね。



2014年4月25日金曜日

__bridgeキャストとはなにか?

ARCが採用されてから時々目にするようになった「__bridge」というキーワード。

大体、ビルド警告時に「__bridge」 つかってね。というメッセージが出て補完してくれるんだけど。

これは何かというと、「C/C++のポインタ型からObjective-Cのポインタ型へ変換する」
ということだそうな。

参考「Objective-C ARCによるメモリ管理
参考「Objective-C Automatic Reference Counting (ARC)

(__bridge T) op casts the operand to the destination type T.
If T is a retainable object pointer type, then op must have a non-retainable pointer type.
If T is a non-retainable pointer type, then op must have a retainable object pointer type.

 これTってなんだろう。。。

2014年4月24日木曜日

NSDateの文字列取得

基本的なことだけれど相変わらず冗長な。。。
NSDateの文字列取得方法(の一例?)です。

        NSDateFormatter* form = [NSDateFormatter new];
        [form setDateFormat:@"G yyyy/MM/dd(EEE) K:mm:ss"];
        NSString* str = [form stringFromDate:[NSDate date]];

このフォーマットだと、出力結果は
 『西暦 2014/04/23(水) 22:18:12』
となりますね。

2014年4月23日水曜日

UIImageの向き情報の破棄

UIImageから画像を取得しようとすると左向きに画像が倒れてしまっていた。
(普通の縦向きでカメラから取得した画像。)

ので、再描画して画像の向きをなくした状態に戻した。
こういうのが難しいよなあ。。。

        UIImage *image; 

        UIGraphicsBeginImageContext(_imageView.image.size);
        [_imageView.image drawAtPoint:CGPointMake(0, 0)];
        image = UIGraphicsGetImageFromCurrentImageContext();


最初は画像を回転させてなんとかしようと思ったが回転できなかった。
ナンデ!?
参考記事を見るに一般的な解決法な気がするが。

        UIImage *image; 
        image = [UIImage imageWithCGImage:_imageView.image.CGImage
                                    scale:1.0
                              orientation:UIImageOrientationRight];

2014年4月22日火曜日

Exif情報を付与して画像を保存する③(GPS情報の設定)

もはやExif情報ではないけれど。
画像保存時にGPS情報をあわせて設定する。

GPS情報を設定していないと、iPhoneのphotoアプリで表示した際に撮影場所が表示されなくて、寂しいので。

要・CoreLocationのインポート。

        //GPS情報
        CLLocationManager *locationManager = [[CLLocationManager alloc] init];
        
        // 位置情報の利用可否確認
        if ([CLLocationManager locationServicesEnabled]) {
            locationManager.delegate = self;
            [locationManager startUpdatingLocation];
        } else {
            NSLog(@"Location services not available.");
        }
        
        CLLocation *recentLocation = locationManager.location;
        

        //カメラのメタデータに設定するDictionaryへの設定
        [GPSDictionary setValue:[NSNumber numberWithDouble:recentLocation.coordinate.latitude]
                         forKey:(NSString*)kCGImagePropertyGPSLatitude];
        [GPSDictionary setValue:[NSNumber numberWithDouble:recentLocation.coordinate.longitude]
                         forKey:(NSString*)kCGImagePropertyGPSLongitude];
        

2014年4月21日月曜日

Exif情報を付与して画像を保存する②(メタデータの取得)

①と記事の順番逆だったなあ。。。
Exif情報メタデータの取得方法。

        //メタデータ取得
        CFDataRef photoData = CGDataProviderCopyData(CGImageGetDataProvider(_imageView.image.CGImage));
        CGImageSourceRef cgImageScRef = CGImageSourceCreateWithData(photoData, Nil);
        NSDictionary *metadata = (__bridge NSDictionary *)CGImageSourceCopyPropertiesAtIndex(cgImageScRef, 0, nil);

GPS情報の付与はまた別記事で。

【追記】
間違ってたというか勘違いしてた・・・上記訂正。
あと、GPSてExif情報の一部ではなくて、メタデータの一部がExif情報とGPS情報のようだ

2014年4月20日日曜日

UIImageからCGImageへの変換

UIImageからCGImageへの変換なんですが、
まあ変換というほどでもないですね・・・。

まあ分からんで調べてしまったので投稿。
CGImage = CGImageRefで考えておいてとりあえずいいのかと。

CGImageRef cgimage = _imageView.image.CGImage;

UIImage、CGImage、CGImageRefの違いは調べ中なので別途書く。

2014年4月19日土曜日

Exif情報を付与して画像を保存する①

撮影した画像にGPSの位置情報を付与したいんだけど、
ALAssetsLibraryを使用せねばならないようだ。

imageはCGImage、
metadataはNSDictionaryでメタデータを設定。

        //この書き込み方だと付与されない
        UIImageWriteToSavedPhotosAlbum(image, self, Nil, Nil);

        //これだと付与できる
        [lib writeImageToSavedPhotosAlbum:image
                                 metadata:metadata
                          completionBlock:^(NSURL* url, NSError* error){
                              NSLog(@"Saved: %@<%@>", url, error);
                          }];

2014年4月18日金曜日

sessionPresetが使用可能か判別する

機種によって使用可能なsessionPresetの設定値は違う(はず)なので
設定する際に使用可能か判別をかける。

    AVCaptureSession* session = [AVCaptureSession new];
   
    if ([session canSetSessionPreset:AVCaptureSessionPreset1920x1080]) {
        session.sessionPreset = AVCaptureSessionPreset1920x1080;
    }else if ([session canSetSessionPreset:AVCaptureSessionPreset1280x720]) {
        session.sessionPreset = AVCaptureSessionPreset1280x720;
    }else if ([session canSetSessionPreset:AVCaptureSessionPreset640x480]) {
        session.sessionPreset = AVCaptureSessionPreset640x480;
    }else{
        session.sessionPreset = AVCaptureSessionPreset352x288;
    }

2014年4月17日木曜日

chromeブックマークバーの『アプリ』を編集する方法

これね。
バージョンアップで勝手に追加されたものの、名前の編集ができないし個人的には邪魔。













【非表示にする方法】

右クリックして、『アプリのショートカットを表示』でチェックを外す。














 

 

 

【名前だけ無くしたい場合】

ブックマークバーにアイコンだけ並べてる人(俺)は、普通にリンクとして追加すればOK

"_OBJC_CLASS_$_CALayer", referenced from: 〜 ってエラーメッセージがコンパイル時に出るとき

まあ例によってネットから引っ張ってきてよくわからないまま使ってエラーになったんですけども。
CALayerをコード内に記述して、コンパイルしたらエラーになった。

『"_OBJC_CLASS_$_CALayer", referenced from: 〜 』 などなど。

 解決方法はこちら。

Can't compile code when working with CALayer

要するに、QuartzCoreのライブラリ追加しようぜってことですが。

・・・元の質問者も適当にコピペしたら動かなかったんだろうなー

2014年4月16日水曜日

UIAppearance プロトコルを使った標準コントロール類の表示色の変更

UIAppearanceプロトコルを使用して、標準コントロールの外見を変更する方法。の例。

 
  
//セグメント
[[UISegmentedControl appearance] setTintColor:[UIColor darkGrayColor]];

//スイッチ
[[UISwitch appearance] setOnTintColor:[UIColor darkGrayColor]];
 

コントロールによってちょっとメソッド名が異なるので注意。
 

2014年4月15日火曜日

そういえばXibとStoryboardどっち使えばいいのかね?って話で

いやもうXib一択だろ。と個人的には思っているのですが。

StackOverflowの記事をうまくまとめてくださっているこの記事が非常に参考になると思います。
When to use Storyboard and when to use XIBs
Q. StoryboardとXIBはどう使い分ければいいんだろうか?


自分で痛い目見たところとしては
・似たような画面を定義しようと思うとコピペコピペになる
・たまに実行時に変更が反映されてない場合がある
・タブバー使う場合の画面の接続の仕方ではまった

とかかな。
明らかに時間かけすぎた時点で捨てるべきだったんだが。

Storyboardが最初出たときに、
「これが今後のスタンダードなのか!習得せねば!111」とおもって飛びついた自分の情弱ぶりに涙。

2014年4月14日月曜日

AVCaptureDeviceのactiveFormatについて


前回AVCaptureSessionPresetInputPriorityを調べてたので『activeFormat』てのが何度か出てきたのでそっちも調べた。

要するに、高フレームレート撮影(iPhone5sの120fps撮影とか)したい場合は
activeformatを設定してsessionPresetにAVCaptureSessionPresetInputPriorityを設定し、
それ以外はactiveFormat関係ないんじゃないかな。


AVCaptureDeviceのactiveFormatについて

【原文】
You use this property to get or set the currently active device format.
On iOS, you should generally set the session preset on an AVCaptureSession object to configure image or video capture and use the shared AVAudioSession object to configure audio capture.
When using a session preset, the session automatically controls the capture device’s active format.
However, some specialized capture options (such as high frame rate) are not available in session presets.
For these options, you can set the capture device’s active format instead.
Doing so changes the associated capture session’s preset to AVCaptureSessionPresetInputPriority.

【超・雑訳】
現在のアクティブデバイスフォーマットとしてgetとかsetとかできるよ!
iOSでは一般的に、画像とか 動画とかのキャプチャの設定にAVCaptureSessionのsessionPresetを使うよ!
sessionPresetを使うとき、自動的にセッションはキャプチャデバイスのactiveFormatをコントロールするよ!
でも、いくつかの特別なキャプチャオプション(高フレームレートとか)はsessonPresetで利用できないよ!
それらのオプションでは、お前はキャプチャデバイスのactiveFormatをかわりに設定できるよ!
で関連したキャプチャセッションのプリセットはAVCaptureSessionPresetInputPriorityで設定できるよ!

 ・・・みたいな感じ?

2014年4月13日日曜日

AVCaptureSessionPresetInputPriorityの機能について

AVCaptureSessionのsessionPreset設定値の一覧
で意味のわからなかったAVCaptureSessionPresetInputPriorityの説明を
がんばらないで適当訳にしてみた。

【説明原文】
Specifies that the capture session does not control audio and video output settings.
To enable capture settings not supported by any session presets (such as high frame rate),
change the value of the activeFormat property on the appropriate capture device.
When you change the device’s format,
the session preset automatically changes to this value,
indicating that the AVCaptureSession object has relinquished responsibility for configuring its inputs and outputs.
(Instead, the capture device’s active format dictates the quality of service level provided at the outputs.)
To return to automatic configuration,
use the session’s sessionPreset property to choose another preset.

【適当訳】
キャプチャセッションが音声および映像出力セッティングをコントロールしないことを示しています。
セッションプリセットでサポートされてないキャプチャ設定を可能にします。(高いフレームレートとか)
適切なキャプチャデバイスのactiveFormatプロパティを変更してください。
デバイスのフォーマットを変更したとき、
セッションプリセットは自動的にこの値に変更され、
AVCaptureSessionオブジェクトが入出力を構成するのを放棄したことを示す。
(その代わり、キャプチャデバイスのアクティブなフォーマットは出力で提供するサービスレベルの品質を指示します。)
自動構成に戻ると、
そのセッションのsessionPresetプロパティを他のプリセットを選ぶために使う。


なるほど分からん。
随所にformatって書いてあるけどなんのこっちゃ。

iFrameってなんですか?

昨日の記事でsessionPreset値を調べてたんで、
AVCaptureSessionPresetiFrame960x540とか出てきてたんだけど。

iFrameってなんですかねえ。という。
普通にググるとHTMLのiframeタグの記事ばっかり出てきてしまう。

でちゃんと調べた結果。

iFrame ビデオフォーマットについて

 『ビデオカメラやカメラを iFrame フォーマットで録画できるように設定すると、iMovie '09、iMovie '11 および Final Cut Pro 7 以降でのパフォーマンスが最適化されます。iFrame では、コンテンツが録画時のネイティブフォーマットで保持されるため、ビデオの読み込みと編集が高速になり、ファイルサイズは小さくなります。 iFrame は、H.264、AAC、MP4、および QuickTime などの業界標準に準じているため、Mac、iOS、および Windows パソコンの互換性のあるアプリケーションと一緒にご利用いただけます。 』

ですってよ。へー。
録画メインの機能を実装するときはどうでもよさそうな。
編集メインのアプリを実装するんだったら、対象のデータがiFrameになっていると
パフォーマンスがよくなるということか。

2014年4月12日土曜日

AVCaptureSessionのsessionPreset設定値の一覧

静音カメラアプリ作ってるんですけど。
カメラ画質の設定に必要になる、sessionPreset値は何があるか?
一覧です。

 AVCaptureSession Class Reference

NSString *const AVCaptureSessionPresetPhoto;

NSString *const AVCaptureSessionPresetHigh;

NSString *const AVCaptureSessionPresetMedium;

NSString *const AVCaptureSessionPresetLow;

NSString *const AVCaptureSessionPreset352x288;

NSString *const AVCaptureSessionPreset640x480;

NSString *const AVCaptureSessionPreset1280x720;

NSString *const AVCaptureSessionPreset1920x1080;

NSString *const AVCaptureSessionPresetiFrame960x540;

NSString *const AVCaptureSessionPresetiFrame1280x720;

NSString *const AVCaptureSessionPresetInputPriority;

各項目の説明に関しては、以下の通り。原文コピペ。
AVCaptureSessionPresetPhoto
Specifies capture settings suitable for high resolution photo quality output.
AVCaptureSessionPresetHigh
Specifies capture settings suitable for high quality video and audio output.
AVCaptureSessionPresetMedium
Specifies capture settings suitable for output video and audio bitrates suitable for sharing over WiFi.
AVCaptureSessionPresetLow
Specifies capture settings suitable for output video and audio bitrates suitable for sharing over 3G.
AVCaptureSessionPreset352x288
Specifies capture settings suitable for CIF quality (352x288 pixel) video output.
AVCaptureSessionPreset640x480
Specifies capture settings suitable for VGA quality (640x480 pixel) video output.
AVCaptureSessionPreset1280x720
Specifies capture settings suitable for 720p quality (1280x720 pixel) video output.
AVCaptureSessionPreset1920x1080
Specifies capture settings suitable for 1080p quality (1920x1080 pixel) video output.
AVCaptureSessionPresetiFrame960x540
Specifies capture settings to achieve 960x540 quality iFrame H.264 video at about 30 Mbits/sec with AAC audio.
QuickTime movies captured in iFrame format are optimal for editing applications.
AVCaptureSessionPresetiFrame1280x720
Specifies capture settings to achieve 1280x720 quality iFrame H.264 video at about 40 Mbits/sec with AAC audio.
QuickTime movies captured in iFrame format are optimal for editing applications.
AVCaptureSessionPresetInputPriority
Specifies that the capture session does not control audio and video output settings.
To enable capture settings not supported by any session presets (such as high frame rate), change the value of the activeFormat property on the appropriate capture device. When you change the device’s format, the session preset automatically changes to this value, indicating that the AVCaptureSession object has relinquished responsibility for configuring its inputs and outputs. (Instead, the capture device’s active format dictates the quality of service level provided at the outputs.) To return to automatic configuration, use the session’s sessionPreset property to choose another preset.
→ 訳した 。AVCaptureSessionPresetInputPriorityの機能について

 

2014年4月11日金曜日

modalviewの表示時アニメーションの設定

全部で4パターン。

参考。動画付きで凄くわかりやすい。
モーダルビュー表示時のアニメーションを変更する

webViewController = [WebViewController new];
//下から上に表示(規定値) webViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
// クルッと回転 webViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
//浮かび上がる感じ webViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
// ぺらっとめくれる webViewController.modalTransitionStyle = UIModalTransitionStylePartialCurl;
//modalで表示 [self presentViewController:webViewController
                           animated:YES                           //NOだと即時表示
                        completion:nil];


2014年4月10日木曜日

iOS7対応で必要な修正 まとめ

今更ながら、やったこと思いだしてまとめ。

iOS7からのUITabBarのデザインのカスタマイズまとめ

iOS7ステータスバー対策まとめ

UITableViewCell show white background and cannot be modified on iOS7
(iOS7でUITableViewのセルが正常に表示できなくなる問題)

他にもまだまだ出そうなので追記する。

2014年4月9日水曜日

秒数指定でビューを表示する方法

タイトルどおり。
画面上に1秒だけ表示するには?

最初は「setNeedDisplay」で表示して「sleep」で1秒停止すれば、と思ったけど。
できなかったのでNSRunLoopを使用する方法に。

-(void)ShowMessage{
     
     //表示する
     _messageLabel.hidden = NO;

    //1秒停止
    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];

    //最初これでできるかと思ったが失敗 
    //[_messageLabel setNeedsDisplay];
    //[NSThread sleepForTimeInterval:1];
   
    //非表示に戻す
    _messageLabel.hidden = YES;
}

2014年4月8日火曜日

当ブログをリキッドレイアウトにしてみました

超・久々の更新。
これから毎日ブログ書こうぜ。

今日からニートだから。日課にしよう。

んでんで、リキッドレイアウトにしてみました(暫定)。

参考・・・というかそのまんまでできたっぽいです。
<<http://br.0r2.info/2012/03/blogger.html>>

一文長くなりがちなのに、
本文部分のビューが縦長だと見づらいしね。

SyntaxHighlighterが追従するかわからんけど
その確認は別でする。