2012/12/06

ど忘れ漢字 Ver 1.1.0にアップデートしました。


「ど忘れ漢字」をVer1.1.0にアップデートしました。

主な追加機能は下記。
+ 4 inch ディスプレイ(iPhone5/iPod touch 5Gen)対応
+iPad対応

iPadでは、縦横両対応です。
横方向では拡大状態で2文字表示可能で、大きな画面で効率よく文字の確認が行えます。

ダウンロードはこちらからどうぞ。


2012/09/18

iTunes Connect では、Large Iconが必要です。

iTunes Connect にアプリのバージョンアップの手続きを進めていたら、なんと、必要な画像ファイルの最大サイズが変わっていた。

今まではアートワーク用に512x512の画像が有ればよかったのだが、どうやら、iOS6やらiPhone5向けなのだろうか1024x1024のサイズが要求された。


なんてこった。

アイコンの元データは、ラスタデータで512x512を基本に作ってある。
1024x1024の画像は、この元画像からはちょっと作れそうにない。
(ジャギが目立ちすぎるよorz)

しょうがない、泣く泣くアイコンファイルを新造することにしよう。


2012/09/10

Layerで(お手軽に)どこまで出来るか?

「神は細部に宿る」らしい。

だもんで、ここ最近はなるべく細部の動きと見た目に気をつけてアプリを開発している(つもりだ)。
で、細部を詰めて見た目を良くしようと思うと、ドカドカと画像を貼込む事になって、気がつけば画像リソースのサイズがエライ事になっている。
なんてことがちょっと有ったり無かったりした。

画像ファイルの場合、小さなものでもキロバイト単位のファイルになる。
これが種類を増してくると、チリも積もればナントやらで、あっという間にメガ単位。
そりゃ、アプリのサイズが大きくなる程度なら、ユーザ様にダウンロード時に我慢していただくだけですむ(か?)のだが、
そのリソースはほぼ確実にUI上に貼込まれる訳で、イコール、貴重な実行時のリソースを単なる画像が喰い潰すという現象が発生する。

という訳で、なるべく画像を使わずに、見た目を良くする方法を模索してみた。
具体的には、CALayerを利用して出来る範囲を模索する。
※ キアイを入れればCALayerで、もっともっとイロイロ出来るらしいが、お手軽に画像を置き換える手段として、コピペでなんとかなるレベルで! というのが、コンセプト。

まずは、出力結果から

この出力得るためのコードが下記、
※view(n)は、上からの順番になっている。


- (void)viewDidLoad
{
    [super viewDidLoad];
 // Do any additional setup after loading the view, typically from a nib.
 
 // view1 
 // nothing to do.
 
 // view2
 // 角丸め
 view2.layer.cornerRadius = 15.0f; // 角Rサイズ
 view2.clipsToBounds = YES;
 
 // view3
 // 縁取り
 view3.layer.borderWidth = 4.0f;
 view3.layer.borderColor = [UIColor orangeColor].CGColor;
 
 // view4
 // 影付け(外)
 view4.layer.shadowColor = [UIColor grayColor].CGColor;
 view4.layer.shadowOpacity = 0.8f; // 影透明度
 view4.layer.shadowRadius = 4.0f; // ぼかし範囲
 view4.layer.shadowOffset = CGSizeMake(4.0f, 4.0f);
 
 // view5
 // 影付け(内)
 // 影の投影はsubLayerへ
 CALayer* subLayer = [CALayer layer];
 subLayer.frame = view5.bounds;
 subLayer.masksToBounds = YES;
 subLayer.shadowColor = [UIColor darkGrayColor].CGColor;
 subLayer.shadowOpacity = 1.0f; // 影透明度
 subLayer.shadowRadius = 4.0f; // ぼかし範囲
 subLayer.shadowOffset = CGSizeMake(4.0f, 4.0f);
 // 影生成用のパス構築
 CGMutablePathRef pathRef = CGPathCreateMutable();
 CGPathMoveToPoint(  pathRef, nil, -5, -5);
 CGPathAddLineToPoint( pathRef, nil, -5, view5.bounds.size.height);
 CGPathAddLineToPoint( pathRef, nil, 0, view5.bounds.size.height);
 CGPathAddLineToPoint( pathRef, nil, 0, 0);
 CGPathAddLineToPoint( pathRef, nil, view5.bounds.size.width, 0);
 CGPathAddLineToPoint( pathRef, nil, view5.bounds.size.width, -5);
 CGPathCloseSubpath(pathRef);
 subLayer.shadowPath = pathRef;
 [view5.layer addSublayer:subLayer];
 
 
 // view6
 // グラデーション
 CAGradientLayer* gradetionLayer = [CAGradientLayer layer];
 gradetionLayer.frame = view6.bounds;
 gradetionLayer.locations = [NSArray arrayWithObjects:
        [NSNumber numberWithFloat:0.0f],
        [NSNumber numberWithFloat:0.5f],
        [NSNumber numberWithFloat:1.0f],
        nil];
 
 gradetionLayer.colors = [NSArray arrayWithObjects:
        (id)[UIColor orangeColor].CGColor,
        (id)[UIColor yellowColor].CGColor,
        (id)[UIColor greenColor].CGColor,
        nil];
 [view6.layer addSublayer:gradetionLayer];
        
 
 
 // view7
 // 角丸+枠+グラデーション
 {
  CAGradientLayer* gradetionLayer = [CAGradientLayer layer];
  gradetionLayer.frame = view6.bounds;
  gradetionLayer.locations = [NSArray arrayWithObjects:
         [NSNumber numberWithFloat:0.0f],
         [NSNumber numberWithFloat:1.0f],
         nil];
  
  gradetionLayer.colors = [NSArray arrayWithObjects:
         (id)[UIColor colorWithRed:0.75f green:0.75f blue:0.75f alpha:0.4].CGColor,
         (id)[UIColor colorWithWhite:1.0f alpha:0.3].CGColor,
         nil];
  [view7.layer insertSublayer:gradetionLayer atIndex:[view7.layer.sublayers count]-1];
  
  view7.layer.borderColor = [UIColor grayColor].CGColor;
  view7.layer.borderWidth = 0.5f;
  
  view7.layer.cornerRadius = 15.0f; // 角Rサイズ
  view7.clipsToBounds = YES;
 } 
 
 // view8
 // 丸ボタン(作例)
 {
  view8.layer.shadowColor = [UIColor darkGrayColor].CGColor;
  view8.layer.shadowOpacity = 0.8f; // 影透明度
  view8.layer.shadowRadius = 4.0f; // ぼかし範囲
  view8.layer.shadowOffset = CGSizeMake(4.0f, 4.0f);
  
  view8.layer.borderColor = [UIColor blueColor].CGColor;
  view8.layer.borderWidth = 4.0f;
  
  view8.layer.cornerRadius = 20.0f; // 角Rサイズ
//  view8.clipsToBounds = YES; // <- これが有効だと影が表示されない。
 } 
}

うん、ざっとこんな感じ。

2012/08/22

トラックボール故障ス。そして…

告白しよう、私はトラックボール愛好者だ。
マウスなどという設置箇所が固定されないポインティングデバイスは、未完成品である。
と、ワリと本気で思っているほどの中毒者と言ってもいいだろう。

で、愛用しているのは、本業環境では「Kensington SlimBlade Trackball」俗にSBTと呼ばれている。
自宅環境では「Kensington ExpertMouse 7」、俗にEM7と呼ばれている機体が、2正面作戦を展開している。
(もっとも、家での作業環境が深夜〜早朝のリビングに移っている昨今、EM7の出番は多くはない)


そんな中、世の中が盆休みを謳歌している最中に、本業で使用中だったSBTが縦方向の動きが急に渋くなり、間もなく横方向にしかカーソルが移動しなくなった。
ボタン類は正常に動作するが、スクロールが機能しなくなり、ポインティングデバイスとしての役割を果たさなくなってしまった。

SBTはカーソルの移動量の検出にあまり一般的ではない方法を使っている。
まず、SBTには2つの光学センサーが内蔵されている。1つは横方向検出用、それと設置平面上で直行する形で、2つ目の縦方向検出用があるのだ。
通常の光学マウスでは、センサーは1つであり、それで十分縦横の移動量を検出できる。
この一見オーバースペックというか、光学系の無駄遣いともいえるセンサーの設置は、トラックボールの肝ともいえるボールを「捻る」事により、スクロールを実現するために使用される。
光学センサーは1つで2軸(縦方向と横方向)の移動量を検出できるが、
SBTは直交に配置した2つの光学センサーの1軸づつをカーソルの移動量検出に使用し、余ったもう一軸を捻りスクロールの検出に使っている。
このため、1つの光学センサーが動作不良を起こすと、担当する軸のカーソル移動と同時に、スクロールの動作も行えなくなる。

そして今回は、縦方向の移動量検出用光学センサーが不調を来したため、縦方向へのカーソル移動および、スクロールが出来なくなっていたのだ。

発売直後に購入して2年強、連日のコロコロがたたってついに寿命か。
そう思い、一度は自前での分解修理を決意しかけた。

だが、ふと視界に入ったSBTの空き箱に「5年間保証」の文字を見つけた。

という訳で購入先ではなく、輸入代理店の七陽商事のサポートに連絡を取った。
サポートに専用フォームから連絡したのが、世の中はお盆の最終日(8/15)当然その日は音沙汰無し。
翌日午前中、サポートより連絡がきた。(対応ハヤッ)
同日午後一で宅急便にて故障したSBTを発送。
週明けの8/20、新品に交換されてSBTが手元に戻って来た。

いやはや、どこかの大手メーカーのサポートとは大違いのスピーディーな対応。
ビバ! 七陽商事。である。

当然ながら、新品のSBTは先代と変わらないスムーズな動作でカーソルを縦横に移動させ。画面をスクロールさせている。


2012/08/11

「Font Sampler」始めました。

夏のミニアプリ第2弾、「Font Sampler」が
App Storeよりダウンロード可能になりました。



Font Samplerは iPhoneアプリ開発者、デザイナー、もちろん一般のユーザー様が
iOSデバイスで表示可能なフォントをじっくり確認するためのアプリです。

フォントサイズは1pt〜100ptまで調整可能。
特定の文字列を入力して見栄えを確認しながらサイズを調整していただけます。
また、表示中の文字列の表示に必要なサイズもリアルタイムに表示されますので、
画面レイアウトの情報として利用可能です。

どうぞ、ご利用ください。

2012/07/30

山ライオンとGIMP

Mountain Lionをインストールして数日。
あまりさわれていなかったmacちゃんにさわってみたところ、
ちょっとびっくりしたので、情報共有として記載。

Mountain Lionインストール後、最初のGIMP 2.8起動時に、
「X11がインストールされていない」とアラートが表示された。

だが慌てる必要は無い。

X11は、そのアラートからボタン1発でダウンロードサイトに移動出来る。

さらにリンクを1つ、2つたどって、
ダウンロードする対象はXQuartz 2.7.2
こいつのDMGファイルをダウンロード、インストールすればよい。
コレで無事GIMPが起動するはずである。
所要時間は回線速度にもよるが、光回線なら15分もあれば行けるだろう。

GIMPが緊急になる可能性のある方は、事前に起動確認を取っておくことをオススメする。

2012/07/29

「ど忘れ漢字」始めました。

夏のミニアプリ第1弾、「ど忘れ漢字」が
本日よりApp Storeからダウンロード出来るようになりました。


ちょっと怪しい漢字の確認に、ご利用ください。

2012/07/27

固定カメラを使って、花火撮影

近隣で花火大会があったのでノコノコ出かけて見たらカメラを忘れたので、iPhone 4Sで写真撮影を敢行。
通常のカメラでもそこそこ撮れるのだが、撮影中は本人が花火を(生で)まったく見れないことに気づく。

こんなときこそ「固定カメラ」の出番である。

設定は2秒間隔、撮影枚数∞、保存サイズはオリジナルに設定。
あとは花火のあがる空域をファインダーに入れて、iPhoneを固定、撮影開始を押すだけだ。


タイミング的に、花火の打ち上げ→散るまでが連続写真で撮影できる。
(以下、掲載の写真は無修正)






その他、ウマく写っていたものを抜粋。






「固定カメラ」は、AppStoreからご購入ください。

動画風にまとめたモノはこちらからご覧ください。


2012/07/26

OS X 10.8 Mountain Lion導入

昨夜、AppStoreで最新のOS Xに当たる10.8 Mountain Lionが公開されているのを発見。
そのまま導入してみた。



一夜明け、OSのアップデートは無事完了し、こうやってBlogの更新が出来るわけだ。

ぱっと見、Mountain Lionさんになって、変わった部分は、
Dock上にさも当然のように居座る2つのアイコン。
リマインダーとメモだ。


iCloudとの連携が強化されたと言う話なので、その流れなのだろう。

それはそれとして、MountainLionさんでXCodeが4.3.1が起動しない!
開発出来ない!

Dev Centerで、XCode 4.4(1.8Gbyte)の配布が始まっているので、こちらを導入してみる。

直近で開発環境が動かなくなると困る方は、OSアップデートのタイミングは考えた方がいい。

というわけで、使用開始10分。

目についた部分のみをレポートしてみた

2012/07/20

iOSアプリのカテゴリ一覧(英語<->日本語)

iTunes Connectでアプリを公開する際に設定しなければならない情報は多いが、その中でも重要な方に分類されるのが、アプリのカテゴリだ。

App Storeなどでお目にかかる場合には、日本語で確認できる(仕事効率化とか、写真/ビデオとか)ので、特に問題はないが。
イザ。自分のアプリを公開しようと思った瞬間、状況が一変する。

プルダウンのカテゴリー名、全部英語じゃん。

アプリのカテゴリを日本語でイメージしていた場合、いったいどれをチョイスしていいのか、しばらく途方に暮れる事になる。

(GameやHealthなど、そのままカタカナになっているようなヤツなら問題ないが……)
そしてやおら、辞書サイトとiTunes Connectのページを往復するという、長く不毛な作業が発生するのだ。

うん、私の場合は発生したのだ。

そして問題なのは、iTunes Connectでカテゴリを選択するという行為は、非常にマレにしか行われない。

次のアプリを公開するときには、前回調べた情報はキレイサッパリ忘れ去っていて、カテゴリの種別によっては、もう一度同じ作業を行う可能性を否定できない。

だから、こんな一覧を作成してみた。

Category カテゴリー名
Book ブック
Business ビジネス
Catalogs カタログ
Education 教育
Entertainment エンターテイメント
Finance ファイナンス
Food & Drink フード/ドリンク
Games ゲーム
Health & Fitness ヘルスケア/フィットネス
Lifestyle ライフスタイル
Medical メディカル
Music ミュージック
Navigation ナビゲーション
News ニュース
Photo & Video 写真/ビデオ
Productivity 仕事効率化
Reference 辞書/辞典/その他
Social Networking ソーシャルネットワーキング
Sports スポーツ
Travel 旅行
Utilities ユーティリティ
Weather 天気

よし、これでWeb辞書との行き来が減る。

といいなぁ。

2012/06/15

固定カメラ/FIxedCamで長時間撮影する方法

まずはこちらの動画をどうぞ。


公開済みのこの動画の撮影方法に付いて解説。
まず、固定方法。
iPhoneは自転車のハンドルに専用機材で固定してあります。
固定の様子はこの様になります。
IBERAのiPhoneパックは
本来ステムヘッドに取り付けるための機材ですが、
ステムヘッドに取り付けた場合、iPhoneを立てる事が出来なくなるため、
MINOURAスペースマウントを用いて、
角度を取れる位置に避けています。

また、IBERAのiPhoneパックは、
通常の状態では背面カメラがカバーに隠れてしまうので、
写真撮影は行えませんので、カメラの位置を切り欠いています。
切り口からホツレてくる事を予防するために、切り口には木工ボンドを塗布しています。

また、このままでは、iPhoneの内部バッテリー分しか撮影できません。
固定カメラ/FixedCamは長時間撮影用アプリですが、
単体では5時間強の撮影は行えません。
このため、外部バッテリーを用いています。
使用しているのは、安心と信頼のeneloop mobile boosterの高出力版


コレをハンドルバッグに詰めて、ドッグコネクタで給電しながら撮影を行えば、
10時間程度の撮影はOKです。
あとはひたすら撮影し続けるのみとなります。

2012/06/14

固定カメラ/FixedCam 1.1.0にバージョンアップしました。

本日、固定カメラは1.1.0 にバージョンアップしました。


追加機能は下記のとおり。
・撮影画像をフォルダに出力できるようになりました。 
 撮影シーンごとにフォルダで管理できるようになりました。 
 大量の写真がフォトストリームを圧迫したり、写真の同期に時間がかかったりする事が回避できます。 
 撮影した画像はカメラロールへ出力する事も、iTunesを使ってMacやPCへ取り込む事もできます。 
・撮影サイズに"ORIGINAL"を追加しました。 
 今までは最大1600x1200に拡縮していましたが、ORIGINALを指定する事で、撮影サイズのまま保存できます。 
・撮影中のバックライト一時点灯時間の調整が出来るようになりました。



大量の写真を撮影したあと、 Mac/PCとの同期に非常にかかる事が有りましたが、
iTunesからフォルダ単位で吸い上げる事が出来るようになりましたので、
効率的に写真の吸い出しが行えるようになりました。

そんな固定カメラで撮影した写真を動画にしてみました。
自転車のハンドルに固定し、自転車乗りなら一度は走ってみたい、しまなみ海道を走ってきた様子です。


撮影時間は総計で5時間弱。
総撮影枚数は3500枚強
です。
詳しくは別の記事で。

2012/06/04

FixedCam/固定カメラの操作方法 その1 ー撮影条件を設定するー

「撮影条件を設定する」です。

固定カメラ/FixedCamは長時間インターバル撮影用のカメラアプリですので、それなりの数の設定項目が存在します。
まず、設定可能な項目を見ていきましょう。

メイン画面コントロールパネル上には下記の設定項目が変更可能です。 


画像サイズ
撮影枚数
撮影間隔(秒)
消灯

設定画面上では、下記の設定項目が変更可能です。


撮影開始までの秒数

それぞれの項目の設定値の変更は、指を上下/左右にスライドさせる、スワイプ操作で行います。
変更対象の設定値はオレンジに変わります。



それぞれの設定項目を見ていきましょう。
・画像サイズ
保存する際の画像サイズを設定します。
大きな画像サイズであれば、詳細で奇麗な写真が撮影できますが、画像サイズは大きくなります。
反対に小さな画像サイズであれば、画質は劣りますが、画像サイズが小さく限られたディスク容量の中でより多くの写真を撮影する事が可能になります。

・撮影枚数
撮影枚数を設定します。
撮影開始から終了まで、設定枚数を連続撮影します。
撮影途中に「停止」を行った場合、次回撮影開始時には、0枚からカウントされます。
撮影枚数を「∞」に設定した場合、手動で停止、アプリ終了、電池切れ、ディスク容量不足まで、撮影し続けます。

・撮影間隔(秒)
撮影間隔を設定します。
撮影枚数と撮影間隔の積算が撮影時間となります。

・消灯
撮影中、画面の輝度を最低まで低下させ、電池の消費を抑制します。
これにより、より長時間の撮影が可能になります。
停止時には、元の明るさに戻ります。
また、消灯撮影中にファインダー部をダブルタップすると、3秒間バックライトが点灯し、撮影状況を確認する事が出来ます。時間経過後、画面は自動で消灯します。
 ※1昼間、野外での撮影中に消灯:ONにすると、周囲との明るさの差で、
   画面が真黒に見えます。
 ※2撮影停止する際は、右下の「停止」を押下するようにしてください。
   この状態でアプリを終了させてしまいますと、画面の明るさは戻りません。
   必ず、撮影を停止してからアプリを終了してください。
 ※3画面輝度が落ちたままになった場合、「ホーム画面→設定→明るさ」で画面輝度を再調整してください。
   この際、周囲が暗い方が画面が見やすくなります。

・撮影開始までの秒数
「開始」押下から最初の撮影までの時間を設定します。
初期状態は3秒で設定してあります。


2012/04/29

固定カメラ/FixedCam 始めました。

インターバル撮影専用アプリ「固定カメラ/FixedCam」の公開を開始しました。


自転車、バイクのハンドルに括り付けて。
車載キットを使ってダッシュボード上に。
もちろん、三脚に設置してもOK。
iPhoneを固定したら、一定間隔でとにかく写真を撮りまくる。

その気になれば、電池が切れるかストレージが一杯になるまで写真を撮りまくります。



このアプリは長時間の撮影を可能にするために撮影中、バックライトを消す「消灯モード」を備えています。
消灯モード動作中でもファインダー部をダブルタップする事で、一時的にバックライトが復帰、撮影状況を確認する事が出来ます。

コレをどう使うかは、あなたのアイデア次第。

ダウンロードはこちらから。

2012/04/28

Chi.Yo.Works Blogになりました。

告知のみ。

告知1:ブログのタイトルが、Chi.Yo.Works Blogになりました。

告知2:もうすぐ新アプリ出ます。

告知3:facebook ページ始めました。

以上。

2012/04/25

日食観測 準備中

4月から活動中心点が関西より、甲信越に変わりようやっと生活のリズムが整ってきた。

それはそれとして、もう一月もすると心躍るイベントがある。

『金環日食』

毎日お世話になっている太陽と月の2つで起こる、めくるめく天体ショー。
残念ながら甲信越地区は金環日食の範囲内ではない(関西在住時の神戸市は範囲内orz)が、それでも大きく太陽が欠ける様子は観測できる。
なので、品薄になる前にさっさと日食観測グラスなる物を購入してみた。

購入したのは顔の輪郭に沿うように(?)Rの付いたタイプ。
本日、体調不良で本業をお休みしたついでに、日食観測の予行練習に太陽観測をしてみた。

うんうん、いい感じに減光されて太陽の姿を確認する事が出来た。

ついでだし、iPhoneで写真を………
と思ったら、Rの部分から周辺の環境光が入り込んできてしまう。

こらあかん。

というわけで、ストレートタイプの日食観測グラスを再度購入して、意地でもiPhoneでの観測体勢を敷く方向で!

金環日食の当日、5月21日は月曜日だけど、きっと急用で午前半休だろうなー


2012/03/22

しまなみ海道縦走計画 決行前夜

タイムリミットが近づいてきた。

3月いっぱいが「しまなみ海道縦走計画」のリミットだが、実際的な問題で今週末が最後のチャンスとなる。
そんなタイミングで、まるで謀ったように今週末は「しまなみ縦走2012」が開催される。

輪行袋はTIOGAのモノを購入済みだし、仕込みはほとんど終わっている。
コレはもう天気がどうとか生半なことは言ってられない、もう「行く」意外の選択肢は無い。

というわけで、今週末に決行だぁー
予定では木曜夜出発だったが、天気の関係で金曜夜出発、土日両日をフルに使って、しまなみ海道を往復する。
(完走証を2枚ゲットだぜー+オリジナル缶バッジもなるべく回収したい)

倉敷は、まぁ体力を見ながらかな。

というわけで、あとは当日の天気が崩れない事を祈るばかりだ。

ブルホーンハンドルにiPhoneを装着した青いIDIOM2(小径車)を見かけたら、お気軽に声掛けて下さい。

2012/03/15

HOME SPOTさんの困ったクセ

auショップで配っている(!)、Wifi HOME SPOTさんが我が家にやってきて、一ヶ月が経った。
今日も黙々と、macちゃんとiPhone/iPod touch/PSPに無線LAN環境を提供してくれております。

キューブ型の躯体がちょうどディスプレイの下に収まったというラッキーもあって、非常にコンパクトに狭い机の上に邪魔にならずに収まっている。
auがこの機体を選んだのは大正解といえる。(すくなくとも我が家では)

ところで私、ワンルームのアパートに一人暮らし故に、お出かけの際は大元のブレイカーをバッチーンと落として、全電源強制カットして出掛ける。
もちろん節電のため……と言えば聞こえはいいですが、ようは待機電力にまで金払ってられるかという、非常に狭い心故だ。
もちろん、去年(2011年)のアレ以前からそのような運用です。
冷蔵庫? 一人暮らしで料理もまともにしないのに必要ないでしょ?
おかずもジュースも酒も、必要な分だけ買ってくりゃいーのよ

で、現在もそのように電気代節約運用中な訳だが、帰宅してブレイカーを上げると真っ先に迎えてくれるのが、HOME SPOTさんの緑色の起動ランプ。
それを横目に、macちゃん起動、周辺機器の接続された集中コンセントの電源投入。
機器の起動を待ちながら、部屋着に着替える。

着替えと荷物の片付けが済む頃には、macちゃんのデスクトップは朝の状態に復帰している。
定位置の自作ドックに鎮座したiPhoneはUSBハブからの給電を受けながら、既に無線LANに接続している。しかし、我らがmacちゃんは、まだ無線LANを捕まえていない。

我が家では、モバイルデバイスは2.4GHz帯、macちゃんは5GHz帯という住み分けが出来ているのだが、どうもHOME SPOTさんは5GHz帯(11a)の起動が2.4GHz帯(11b/g)に比べてひじょーに遅い(遅いというか、2.4GHz帯の起動を待ってから起動が始まっている?)
どれくらい遅いかというと、最初の頃はあまりにも接続しないので故障しているのではないか疑って、思わずHOME SPOTさんの電源の再投入をしてしまったくらいだ。
DCジャックを抜き刺ししたくなる衝動をグッとこらえて無線LANの一覧を見ていると、macちゃんがようやく5GHzのSSIDを認識する。

コレでようやく、ネットワーク環境が整って、メデタク我が家の定時外営業環境が整うわけだ。

でここで問題になってくるのが、5GHz帯の起動の遅さだ。
macちゃんに5GHz帯と2.4GHz帯の両方を利用可能な状態にしておくと、問答無用で2.4GHz帯に接続されてしまう。
そりゃ5GHz帯はその頃絶賛起動中な訳で、SSIDはまだ発信されていない。
いくらOS Xが痒いところに手が届くとは言っても、存在しない接続先に繋ぎにいってはくれない。
というわけで、HOME SPOTさんを電源投入直後に、5GHz帯に接続したい場合、2.4GHz帯のSSIDは接続先として登録しておいては行けない(優先順位云々ではなく)。
もし、登録してある場合は、「ネットワーク環境設定」→「Wifi」→「詳細」で、「使った事のあるネットワーク」から2.4GHz帯のSSIDを削除する。(macの場合)
(もちろん、HOME SPOTさんが24時間営業中の場合は、優先順位は有効だ)

もっとも、こんな変則運用をしている輩が、世の中にどれだけいるのか疑問ではあるが……

最近、つれづれバッカリだな。

2012/03/14

気がつけばいっしゅうねん

祝! 一執念ではなく周年。過ぎてたけど

まぁ、1周年だからといって、べつだん何か有るわけではないのですが、
この1年を振り返ると、えらく世の中は動いたもんだと思う次第。

なにしろ、初投稿は昨年の3月9日で、直後にアレがあって、
いまだに世の中はあのときの余震にグラグラと震えていると………。

ま、このブログは世の中の動きとは、一線どころか三線くらい画したところを
右往左往しておりますので、とりあえずはこのままの路線で、
次の1年も進めていこうと思っちょります。

そうそう、メインコンテンツであるiPhoneアプリですが、一年でたった3本(1本はLite版なので実質二本(汗)しか発表出来ていないのは、なんともふがいない話です。
手元には、作ってはボツッたコードの山がハードデスクの肥やしになっておりますので、これを文字通り肥料にしてじゃんじゃん新しいアプリを発表して、既存アプリもバージョンアップしていこうと思っとります。
えぇえぇ、がんばりますよ。

そうそう、iOS 5.1になりましたね。
au版iPhoneで、ようやくfaceTimeも使えるようになり、日本語Siriまで実装されましたが、なかなかどうして、Siriさんはまだまだ日本語勉強中と言う感じでしょうか。
妙な認識違いをしたりして、ときどきドキッとさせられます。
(本業の取引先に電話をかけられて、慌てて切ったのには本当にびっくりw)
あーどこかから「滑舌ワリークセに早口でしゃべってんじゃねーよ」って突っ込みが聞こえる。

そんなこんなで、ぼちぼち新アプリの準備も佳境に入っておりますので、まったり、お待ちください。

2012/02/23

libxml2での文字列の扱いは、要注意。

iOSアプリ上で、htmlを字句解析する必要が生じた。

NSXMLParserはHTMLのような、アバウトな記述のMLを解析させると確実にエラーを吐いて、途中で解析を投げ出してしまう。
エラー無視のパラメータとかはどうやらないらしい。

というわけで、必然的にCライブラリのlibxml2に白羽の矢がたった。
コレをSAXインタフェースで使用する。
その方法は、google先生にお伺いを立てると、いろいろ教えていただけるので、記載はしない。

だが、SAXインタフェース上で、
cdataBlock検出時(たぶんその他のcharacters/commentでも同様)に渡される文字列にヒトクセあったので備忘録として記載する。


static void cdataHandler(void * ctx, const xmlChar * value, int len) 
{
}

コレが、cdataBlock検出時に呼び出される関数。
こいつの第二引数valueにUTF-8の文字列が格納されている。
そして、第三引数lenには、valueの有効文字列長が格納されている。

クセその1
scriptなどの大規模な文字列の場合、文字列が一括で渡されない。
具体的には、1000Byte単位で上記関数が呼び出される。
1000Byteを超える場合は、複数回関数が呼び出される。

当然、受け側としては受け取った文字列を連結して保持する事になる。
そこで、もう一つのクセが待ち構えているのだ。

クセその2
この文字列の終端はnullターミネートされていない(!)
このため、通常の手段としてNSMutableStringに蓄積しようとしても、NSMutableDataに溜め込もうとしても、strcatで連結しようとしてもゴミが残留するのだ。
このゴミが、最終的にNSStringに変換しようとするときに高確立でエラーとなって、NSStringが生成されないという現象が発生する。

ではどうするか?

ここで信用できる情報は何か?
文字列データは、nullターミネートされていないが、それ以外の部分はおおむね正しい。
そして、文字列長情報も問題ない。
信用できないのは、文字列長を超えた部分に存在しているゴミデータである。

ならば。
文字列の連結の度、有効文字列長の末尾に、自力でnullターミネートを書き込んでやればよろしい。
具体的には、

charLen_ = charLen_ + len;
if ( chars_ == nil ) {
 chars_ = xmlStrdup(value);
} else {
 chars_ = xmlStrcat(chars_, value);
}
chars_[charLen_] = 0x00;


xmlStrxxx関数はxmlChar型の操作関数だ。
これでNSStringに変換出来ないという症状は押さえ込めた。

ちなみに、1000byte未満の文字列の場合、正しくnullターミネートされているらしく、
NSString変換に失敗する事は無いようである。


2012/02/17

Wi-Fi HOME SPOT 導入してみた(続)

auで配って(!)いるHOME SPOT cubeさんが我が家にやってきて、3日目になりました。
現在、特に問題も無く正常に稼働中。

で、ちょびちょびと設定をいじったりしているので、その辺のメモ。

cubeさんにぶら下がる子機としては、
5GHz帯にmacBook。
2.4GHz帯にはiPhoneとiPod touchを割り振っている。
(iPhone/iPod touchは5GHz未対応)

で、このcubeさん、SSIDを3つ持っている。
SSID1/2が2.4GHz帯、
SSID3が5GHz帯。(この割り振りは固定っぽい)
iPhoneとiPod touchをそれぞれSSID1/2に分けてもよかったのですが、それほどヘビーに使用するわけでもないので、初期設定ではゲーム機用(取説にはそう記載されていた)として割り当てられているSSID2は使用不能に設定。

さらにさらに、SSIDの名称が、"auhome_******"と、機種情報が簡単に推測できる名前だったため、独自のものに変更。当然パスワードも変更。
もうちょっと落ち着いたら、それぞれのアンテナ出力も調整しつつ、
macアドレスフィルタリングをかけるようにする。

で、このcubeさん、アクリルの透明ボディーでとってもオサレなのだが、
このアクリルがくせ者だった。

夜、部屋の明かりを落とすと、ピカピカ、チカチカ光るのだ。
本体上面のstateランプが、ではない。
本体背面のWANコネクタのアクセスランプだ。
この光がみごとに透明なアクリルに導かれて、オレンジ色の点滅が本体上面から漏れる。

コレがまた寝しなに目に付くと結構目障りだったりする。
本体はとってもオサレでコンパクトなので、どこにでも置けそうな気になるが、
就寝中に直接目に付かない場所に置くのが良さそうだ。


2012/02/14

Wi-Fi HOME SPOT を早速導入してみた。

本日から提供の始まった。auのサービス(?)Wi-Fi HOME SPOTを早速申し込んでみた。

これは、11n対応の APを実質無料で配るというものだ、

そりゃもう、ゲットしないわけにはいかない。
というか、auが本気で通信量のオフロード化を考えているのだとわかる。



で、申し込み。
Onlineで申し込んでもよかったのだが、
開始予定だったAM 10時に受付が開始していなかったりと、
なんだか雲行きが怪しかった。
なによりも実店舗の方が早くAPを入手できそうな気がしたので、
仕事帰りに寄って来た。


たぶん私が、その店舗では最初のHOME SPOT申込者だったのだろう、

auのおねーちゃんに、
「提携のインターネット回線を契約していないと、提供できません」
と、同日開始のauスマートバリューの契約条件を突きつけられ、
「そんなことはねーべ」と契約条件を確認ししてもらう。
多少手間取ったが、無事申し込みできた。

あとは持って帰るだけだろうと思ったら、
「お使いのiPhoneに設定が必要です」とねーちゃん。
「たぶん大丈夫だよ」といいつつも、ナニをするのか見ていると、
「au WiFi SPOT」(公衆無線LANの方)のプロファイルをインストールしていた。
(既に導入済みだったが、それでも上書きインストールされた。)
さらに、初期設定のアクセスポイントの設定をしてメデタク引き渡しとなった。

で、持ってかえってきたのがこれ、




意外と小さい。


正常に動作させると、 緑のLEDがぽつんと点灯する。

本体の設定は普通に行える。
Wifi設定、WAN設定ともにそれぞれ普通に設定できる。

一点問題は、ウチの環境(ケーブルTV環境)では、
AutoモードではWANのIPアドレスが取得できなかった。
しょうがないので、Routerモードに設定し強制的に動作させている。

現状、Macちゃんと、iPhone 、iPod touchで元気に動作中。
プライバシーセパレータ、隔離設定をOFFにして、
WifiでのiTune同期も確認できた。

これで、macをAP代りにしなくてもすむ。

2012/02/03

Storyboardの使用方法(Segue)補足

Storyboardの使用方法(Segue)」に
UIStoryboardSegueを継承してごにょごにょする方法を投稿したが、
もっと簡単な方法が有ったので、
忘れないうちに追記。

UIViewControllerのメソッドにprepareForSegue:sender:がある、
これは、Segueで画面遷移する直前に実行されるメソッドなので、
こいつをオーバーライドして、
segueのidentiferで遷移を判別しつつ、
senderから契機となったUIViewの情報を引き出して、
画面遷移を制御する。

これで、遷移元がTableViewCellであっても、
Cell毎に処理を切り分ける事が可能になる。

よかったよかった。


2012/02/02

しまなみ海道縦走計画 積載量補完計画

しまなみ海道縦走計画を練っていると、
荷物の積載量がいささか不安になってきた。

愛車が小径車であるIDIOM2(2010)であるため、
積載用のポイントがそもそも少ない。
ボトルゲージはアンダーチューブの一カ所のみ、
シートチューブはボトルゲージを取り付けられるほど長くない。
トップチューブは独特の形状をしていて、ここに何かを括り付けると、
後輪ブレーキワイヤーと干渉しそう。

バックパックは当然背負うが、アップダウンのある長丁場だ、
あまり背中に大荷物というのは面白くない。
(バックパックの中には着替えが詰められる事になるだろうし)
そうなってくると、ハンドルバッグか、大型のサドルバッグに負荷を分散
という答えが順当に出てくる。

で、週末ちょっとこコレ↓の実物を見てきた。


写真で見ると、よさそうに見えたのだが、
実物は思っていた以上に左右が短い。
ブルホーンの間に収まるにはいいのだが、
もう少し大きくてもいいなぁ〜。

じゃあサドルバッグはと、いろいろ見ていると、
あった。良さそうなブツが。

トータルで結構な値段になるが、6.8Lの容量は、
低温対策用の上着、輪行袋、携行食、リペアキット、その他諸々を
収納してもまだ余裕が有りそうだ。

というわけで、どこかのタイミングでポチッとなする事がほぼ確定した。


2012/02/01

Storyboardの使用方法(Segue)

StoryBoardを使って画面遷移時に独自の処理を実行する方法。

Storyboard上のViewController同士をCtrl+ドラッグで接続すると、
簡単に画面遷移(Push/Modal)は実現できるが、
この方法では、遷移元から遷移先へパラメータを渡せない。
(がんばれば渡せない事は無いと思うが、面倒そう?)

しかし下記の方法なら、
パラメータの譲渡から、画面遷移の制御まで何でもゴザレだ。

Storyboard上の矢印(Segue)を選択、
Attributes InspectorのStyleをCustomに変更する。
Segue Classの入力フィールドが出現する。

というわけで、UIStoryboardSegueのサブクラスを作成する。
オーバーライドするメソッドは、
- (void)perform;
のみ

ここに、画面遷移の途中の制御で必要な処理を記述する。
遷移元のBViewControllerは
self.sourceViewController
遷移先のViewControllerは
self.destinationViewController
でアクセスできるので、適宜キャストして使用する。

忘れてはいけないのは、sourceとdestinationのつながりをcustomに変更したので、
そのままでは、画面間の遷移は発生しない。
ので、pushなりmodalなりでつないであげる必要がある。

これで、おk。


2012/01/27

しまなみ海道縦走計画 実行準備

関西圏での生活がカウントダウン状態に入った。
今のうちにやり残した事を消化せねば、
ということで、しまなみ海道縦走計画をそろそろ実行に移そうとおもう。

で、現状足りない物は、
・サングラス
・輪行バッグ
・輪行バッグ使用時の保護具
うん、物品はこんなもんだ。
あと、正月を挟んでナマってしまった身体もなんとかせにゃ。

というわけで、これらを調達して、
少し暖かくなったら、走ってこよう。

旅行日程もある程度練り込んだ。
出発日はまだ確定していないが、曜日のアタリは付けた。
木曜:夜出発(神戸→岡山アタリまで移動、経費節減のため鈍行で)
金曜(仕事は休む方向で):
早朝(尾道へ移動)〜夕方まで(今治へのんびりレッツゴー)
土曜:朝(因島へ船で移動)〜午後(尾道までレッツゴー)
午後は輪行で倉敷まで移動して適当にポタリング。
土曜の夜/日曜の朝:自室へ帰着(もちろん帰りも鈍行w)

宿への宿泊は今治の一泊のみ。
木〜金、土〜日の宿泊はネットカフェ辺で予算節約。

天気予報とにらめっこしながら、決行日を決定しなければ。

2012/01/26

iOS 5向けでアイコンから光沢が外せない!?

久々にハマって焦った。

アプリアイコンから光沢が外せなかったのだ、
今までは、info.plistの項目
"Icon already includes gloss effects"にYESを設定しさえすれば、
アイコンに自動付与される光沢は消せたのだが、
今回は、なぜか消えない。

info.plistの設定をいじったり、思いつく限りの手を試したが、
なぜか手持ちのiPhone4SのHome画面に鎮座するアイコンは、
テッカテカの光沢付き。

もう、いいやと諦めかけていたそのとき、
ふと、視界の端になにかが……
"Icon files (iOS 5)"
なんですか。(iOS 5)って???

はい、有りました。
iOS 5向けのアイコン設定項目です。
サブアイテムのPrimary Iconの下に、
"Icon already includes gloss effects"の設定項目が、
これでめでたく、光沢は消えました。

どうやら、iOS 5向けのアイコン設定が新規で追加されたらしい、
通常のアイコン設定にRetina向け設定、
そして今回のiOS 5向け設定。

これだけアイコンの設定項目が分散していると、
設定するのがめんどそうだが、
SummaryのApp Iconで設定すれば、すべての項目に設定値が反映されるので、
大した手間ではない。

ついでだから、光沢設定もApp Iconで一括で出来ればいいのに。

2012/01/12

HTTPステータスを取得する(ミニ)

気がつけば、年が明けていた。

そして、最後の投稿からもずいぶん時間が経ってしまっていた。
定時側の仕事がえらい事になっていたので、それはしょうがないという事にして、
あんまり放っておくのも、精神衛生上よくないので、
まとまったネタが出来るまでは、
小ネタというか、開発メモを垂れ流して少しお茶を濁そう。

というわけで、HTTPステータスの確認方法をメモめも。


- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSInteger code = [((NSHTTPURLResponse*)response) statusCode];
}

NSURLConnectionDelegateのコネクション成立時に通知されるので、
このタイミングで捕まえる。

まぁ、こんなの見なくても通信だけなら何とかなるんだけど、
よりキメの細かい制御をしようと思ったら、必要になってくる。