日曜日, 12月 02, 2012

新しいプリンタ

物欲の秋、先週、プリンタを新しくした。
CanonのMG6330を購入した。

数日使ってみたが、操作方法がわかりやすく、タッチパネルの操作感が気に入っている。


無線LANで共有できてコピーとスキャナができ、
iPhoneやiPadからAirPrintできるやつが条件だった。

ネットで事前に調べようとしたが、情報が多すぎ面倒くさくなって、
とりあえずプリンタを見にケーズデンキへ行った。
他のメーカのも少し見たが、Canonを中心に見た。
以前よりCanon製品を使っていたし、サポートがとても親切だったので、安心感があった。
最新の上位機種をすすめられた。MG6330だ。
私はタッチパネルのスクリーンが気に入った。iPhoneの画面のような
インターフェースで反応もよく使い心地が良さそうだった。
スッキリとしたデザインもいい。
プリンタとしての基本機能だとか、インクのランニングコストだとかあまり
気にせずに、(どうせ問題なかろうと思った)使いやすそうというだけで決めた。

金曜日, 4月 27, 2012

MopiShape 1.2 公開

MopiShapeの最新版が、昨日 Appleの審査が終わって公開されておりました。
http://itunes.apple.com/jp/app/mopishape-draw/id493998399?mt=12

2週間ほど前に一度アップしていたが、レビュー待ち中に、不具合に気づき
取り下げ、再度アップしたので、時間がかかってしまった。
そういえばホームページを更新しておかなければ。。。

今回、ズームに対応し、細かいところを手直しして、コントロールポイントを
動かしやすくできた。あと、マジックトラックパッドのジェスチャでズームできる
ようにした。
最近トラックパッドが気に入ってきた。まあ、細かいことはマウスの方がいいですが。
あと、文字をパス化できるようにしたので、便利になったと思う。


水曜日, 4月 25, 2012

ヘルプ作成用のアプリを探す。

アプリ制作の中、ヘルプの作成は結構骨がおれる。Webで使っている
Bindで作ろうと思ったが、出来上がりが大きすぎるので、テキストエディタで
HTMLを直接書いているが、絶対効率が悪い。

で、ヘルプ作成用のアプリを探す。
これはいいかも?
http://itunes.apple.com/jp/app/helpsupreme/id467895924?mt=12

開発元のサイトでデモ版を入手した。
試したところ、結構難があったが、親近感を覚えた。(^^
不具合があったが、避けつつ使ってみたところ、なかなかいい感じでヘルプが作れる。
出力したHTMLの内容もすっきりしていていい感じだ。

開発元に不具合やいくつか要望を伝えてみたところ、次期バージョンで検討している
ことらしかったので、正式版を買うことにした。
価格がちょっと高い気もするが、生産性がかなりあがるはずなのでその価値はあるだろう。

月曜日, 4月 23, 2012

Quick Look Pluginの補足

Quick look プロジェクトの設定にはいつもはまる
たまにしかやらないことなのでいろいろ忘れがちだ。
これは自分のためのメモ。

XCode4.3でテストする際、
スキーマの編集から実行プログラム qlmanage を指定しておく必要がある。
しかし、/usr/bin ディレクトリが、見えないので
プログラムファイルをブラウズして選ぶことができない。
直接入力することもできない。困ったものだ。

まず、なんでもいいから関係のないアプリを選んでおく。
その後XCodeを閉じて、プロジェクトファイル(xcodeproj)パッケージ
の中を掘り下げていき、そのQLターゲットのスキーマファイル(xcscheme)を見みつける。これはプロパティリストである。
この中に、先ほど適当に指定しておいたアプリの箇所がある。
これを /usr/bin/qlmanage に置き換える。

以上

土曜日, 4月 14, 2012

モピシェイプのアップデート

昨日 iTunesにアップロードした。今レビュー待ちだ。
今回のモピシェイプのアップデートでは、
ズームとコントロールポイントの位置決めの改良、それから
文字からパスを生成する機能を追加した。

ズームに対応したのに伴い、フルスクリーン時にウィンドウサイズをキャンバスサイズにあわせて調整することをやめた。また、マジックトラックパッドのズームのジェスチャーにも対応した。これまでマジックトラックパッドはいまいち好きではなかったが、結構いいかもしれないなと思いはじめた。

ズームができるようになったので、個人的にも、かなりアイコンの作成がはかどるようになったと思う。早くやっておけばよかった。ユーザさんも喜んでくれるといいな。


文字からパスの生成は、個人的にはあまりアイコンに文字を使うことをなるべく
さけているのであまり重視していなかったのであるが、でも、やはりこれができるといい。
コンビニのアイコンに24とか 7とか11とか書くようなことはよくあるし。


水曜日, 4月 04, 2012

モピシェイプの懸案

モピシェイプについては、米国ユーザ様のレビューで、ズームアップ
できる様にしてほしいというものがあった。

確かに私もその機能が欲しい。
次回リリースしようと考えている新作アプリにはたくさんのアイコンを
盛り込まねばなりません。そこでモピシェイプでアイコンを書きまくっているのだが、
改善すべき点がいろいろでてくる。

ズームアップ機能のほか、コントローラーのポインティングの改良とか
フォントの取り込みとか、画像のExport操作の改良とか。
フォントの取り込みについてはフランスのユーザからも欲しいという指摘が
あった。

書き溜めたパスをテンプレートあるいはライブラリとして登録しておけると
便利そうだし。これは最初のバージョンを出したときに、米国ユーザから
提案されていたものだ。

アプリリリース

最近ブログを書いてなかった。
ここ一ヶ月くらいでリリースしてきたアプリをまとめておこう。

3/14 MopiShape 1.10 をリリース
このリリースで Objective-C のソースコードジェネレーションを廃止したのであるが
米国のユーザー様からお叱りを受けた。「あまたあるグラフィックアプリの中で、
ソースコードジェネレーションは唯一の特徴でしょ!」
というわけで、廃止を撤回した。
3/21 MopiShape 1.11 をリリース
Objective-C のソースコードジェネレーションが復活。

3/22 初のiPhoneアプリ「くつ下を救え」をリリース
ゆるゲー

4/4 Chirashi 1.30 をリリース
画像ファイルをドラッグで配置できる様にした。
これで、Macのアプリらしい使い勝手に少しでも改良できたと思う。
いちいちダイアログボックスからファイルを選ぶのはやっぱり面倒だ。

あと、改良点としては、トリミングしたあと、画質が落ちてしまっていたのを
修正した。

繰返し表示するフレームの内容を繰返し回数分だけ複数登録できるように
してみた。外部ファイルからデータ差込するわけではないので、
本格的にラベルを印刷したりする目的ではない。チラシなどのクーポン部分に
のせるイメージを替えられるといいなと思った機能だ。
ユーザさんに意図がうまく伝わるか、ちょっと心配。



水曜日, 1月 25, 2012

CHIRASHI バージョンアップのお知らせ

CHIRASHI をダウンロードしてくださった皆様
ありがとうございます。

最新バージョン 1.1 を公開しました。
Mac AppStore でリリースされています。
主に写真とか図形の操作性の向上を行いました。

Updateは無料ですのでどうぞダウンロードしてください。
お使いいただいた後、評価やレビューなどをいただけますと
大変うれしいです。

今後とも、よろしくお願いします。

火曜日, 1月 24, 2012

金曜日, 1月 20, 2012

カラフルなアヒル

今週は、MopiShape というMac用のアプリをリリースしました。
モピシェイプと読みます。
10月くらいに、アッヒールちゃんの絵を描いたツールの写真をのせたことがありましたが、
ちゃんとカラフルな絵が描けるようになったアプリです。

このアプリは ベクトル系のドローアプリなどと呼ばれるものの一種です。
画面上のピクセルごとに色をつけて描くビットマップ系の描画ツール(Windowsのペイントみたいなもの)と違って、座標上の点と点を結ぶ線を使って描くアプリです。ビットマップ系のあぷりでは拡大縮小すると絵が粗くなったりしますが、ベクトル系の描画では、
常にきれいに描かれます。
それに、余り絵の上手でない私でも、結構かわいく絵が描けるような気がします。
結構楽しんで描いてます。


金曜日, 12月 09, 2011

CHIRASHI App

CHIRASHI というMacアプリを作りました。
3日ほど前にMac App Storeのレビューがおわり、公開されました。
http://itunes.apple.com/jp/app/chirashi/id482532068?mt=12

1年ほど前からMacでアプリを開発をしようと思い立って、
この夏、8月末頃にCHIRASHIの開発に着手しました。
結局3ヶ月ほどかかりました。
最初はなめていて、頭の中では一ヶ月くらいで作れるつもりだった。
最初の一ヶ月でXCodeのプロジェクトから4度やり直し、おおむね現在の
見た目になった。10月の2週間くらいでQRコードとJANコードの生成ロジック
を実装し、概ね今の外観になった。
しかし、嫁さんに見せたところ、かなりいまいちな評価となった。
文字が入力しづらいとか、文字の表示がピンぼけになっているとか、図形が足りないとかいろいろ。。。
そこで再度見直した。レイヤーで文字を描画するとピンぼけることがわかり、レイヤーの使用をやめたり、描画コードを書き直し、入力方法も見直した。図形を大幅に追加することを決め、別途図形描画ツールを作ったりした。
Mac App Storeの基準をよくよく調べると、OS X Lionでの動作が必須となっていた。結局、OSをLionに更新した。XCodeのバージョンも上がった。Lionの新機能 フルスクリーンモード、オートセーブ、バージョンなんかについては最初、懐疑的だったが、使ってみると、すばらしいと感じた。そこで、対応することにした。対応すると、他にも気に入らないところがでてくる。だから磨いた。 ぷきぷき。。。

Appleの開発ガイドを読んでいると、開発のフェーズは、大まかに言うと

  • デザイン
  • 実装とテスト
  • 磨く (Polish)

からなる。
Polishが重要なのだという。Polishはテストではない。納得できるまで磨くのだ。
納得できなければリリースするべきではない。
と言うと、私のアプリは永遠にリリースできなさそうであるが、、、


11月下旬にやっとApp Storeにレビューを申請した。その数日後、不具合に気がつき、
申請を取り下げ、再申請をしたりしたあげく、無事レビュー完了の知らせが届いた。

AppStoreに公開されたのは嬉しかった。
また、次にむけてがんばろー。おー。

日曜日, 11月 06, 2011

Cocoaでの縦書きの実現について

OS/X 10.7 (Lion)では、NSTextView でも日本語のような
縦書による入力が可能になった。
OS標準のテキストエディタでも縦書きができるように
なっている。じぶんではあまり縦書きの文書は書かないので
あるが、使ってみると、なかなかいい。テキストカーソルは
水平になり、変換候補も横方向に縦書きで表示されるので
とても面白い。

NSTextView でレイアウトを縦書きにするには

setLayoutOrientation: で
NSTextLayoutOrientationVertical を指定するだけでよいことが
わかった。これだけで、テキストエディタと同じように縦書きで
テキスト入力ができる。

では、NSTextViewを使わずに、NSViewに縦書きのテキストを表示する
にはどうすればいいのか?
以前調べたときCoreTextを使って実現する方法がわかったが、
結構面倒なことになってしまったが、10.7になって、もっと楽な
方法ができたようだ。
CoreTextを使わずにCocoaのテキスト関連クラスで実現できる。
 NSTextStorage
 NSTextContainer
 NSLayoutManager

このうちNSTextStorage はNSMutableAttributedStringを継承している。
つまり、テキストの書式などの属性はテキストと共にNSTextStorageに格納する。
ここで、属性として NSVerticalGlyphFormAttributeName を設定すればよいようだ。

NSTextStorage *textStorage; があるとして、

    [textStorage addAttribute:NSVerticalGlyphFormAttributeName 
                      value:[NSNumber numberWithBool:YES] range:NSMakeRange(0, [textStorage length])];


のように指定する。
これで、日本語の文字はは左に90度回転した状態で水平方向に並ぶようになる。


あとは、あなたも首を90度傾ければ、縦書き表示が実現する。

首がつかれるので、いやだ? 

冗談はさておき、最初私は、さらに90配置を変更してくれる設定があるのだろうと
探していたが、見つからなかった。
じゃあ、Drawする前に、コンテキストに90度の回転を加えれば、それらしくなる
のかなと思ったのであった。ようは首を傾けるかわりにモニターを傾けるようなものだ。
その際に、表示域の縦と横を入れ替えてTextContainerに指定すればつじつまがあいそうだ。
でも、なんかしょぼい気がするし、NSTextViewはどうやっているのか気になった。
そこでヘッダファイルの説明を読むと、90度回転して表示しているらしいとわかった。
なんだ、同じじゃん!

コンテキストを回転するには     CGContextRotateCTM で90度時計回りの回転を
指定する。私のアプリはもともと任意の角度での回転を施していたんで、回転に
90度を足すだけだった。
やってみると、非常にいいあんばいになった。
もともと水平方向の描画をコンテキストで90回転しているだけなので、
水平方向のテキストアライメント(右寄せとかセンタリングとか)がそのまま
垂直方向に働く。よって縦書きテキストが上寄せ、中央寄せ、下寄せというように。

しかし細かいところで、課題が残った。
例えば水平テキストにアンダーラインを引くと当然、それは文字の下に線が引かれる
ことになるが、垂直なテキストでの傍線は私の実現方法では左側になってしまう。
それは普通、右側に引くものか?という点が気になる。
たぶんそうだ。右利きで鉛筆で縦書きに傍線を引くとき、左側に引こうとすれば
文字が隠れてしまう。よって、右側に引くのが自然だ。
でも、縦書きの印刷物で傍線が引かれたものなんて余り見かけないような気がする。


Appleの人も右側だと考えているようだ。テキストエディタでも右側に
傍線が引かれるようになっている。
しかし、これを実現する方法は今のところわからない。


土曜日, 11月 05, 2011

NSScrollView内のNSViewの位置について

OS/X では、NSViewなどのコンテンツを表示するビューを
NSScrollView内に配置すると、そのNSViewは左下隅に貼り付く。
原点を左上隅にあわせるためには、そのNSViewのサブクラスにて
BOOL isFlipped をオーバーライドして {return YES} を
返すようにすればよい。

であるが、ウィンドウをリサイズして、NSScrollViewが小さくなったときに
表示されている内容が上にスクロールしてしまう。

(NSScrollViewは自動的にリサイズするようにしておいたとして。)

絵にするとこんな感じである。
ウィンドウをリサイズすることにつれてスクロールビューもちいさくなる。
そのとき、狭くなった分だけ、表示されている内容が上に上がってしまう。



普通のアプリケーションはそのような状態にはなっていないので、当然なんとかなるはずが
その方法がわからず、なやんだ。
Appleのサンプルプログラムのsketchの状態を調べているうちに
やっと違いが見つかった。

Interface Builder のSize Inspector でのAutosizingの設定が不足していた
ことが原因だった。
これは、コンテンツのNSViewの設定である。

不十分な設定

対策
これによって、問題が解決した。
簡単なことであったが、知らないばかりに悩んでしまった。

まあ、いつも思うことだが、複雑な解決策は何か遠回りをしているものだ。
何かを解決できずはまってしまう時は、間違った方向に難しく考えすぎている
可能性がある。また、その方向で、何とか実現できたとしても、
その方法が自分でも気に入らない時は、おそらく、まだベストではない。
もっとシンプルな方法が見つかるはずなのだ。

木曜日, 10月 27, 2011

Quick Look Pluginプロジェクトの準備

自分のアプリケーションのドキュメントファイルにファインダーなど
でサムネイルやプレビューを表示するためには、
Quick Look Plugin を作成するという方法がある。

1) XCode 新規プロジェクトで System Plug-in  の Quick Look Plug-inを選択する。


2) アプリケーションのソースコードを(必要な奴だけ)プロジェクトに参照で追加する。

3) GenerateThumbnailForURL.c , GeneratePreviewForURL.c を
 の拡張子を.m に変更する。
    必要ならばincludeするライブラリを変更する。
 //#include <CoreFoundation/CoreFoundation.h>
 #include <Cocoa/Cocoa.h>

 アプリケーションソースもインクルードする
 例)
 #include "MyDocument.h"  

4) フレームワークの変更
  必要ならばCocoa.frameworkを追加する。

5) info.plist の編集
  Document types
    Document Content Type UTIs
      Item SUPPORTED_UTI_TYPE    
  
  SUPPORTED_UTI_TYPEを自分のアプリケーションのUTIに変更する

6) ターゲットにファイルをコピーするビルドフェーズを追加する。
   ※絶対パス
   ※コピー先: ~/Library/QuickLook   (/Library/QuickLook も可)

  そしてビルドフェーズに Product のオブジェクトを追加(ドラッグで)する。

7) GenerateThumbnailForURL.c , GeneratePreviewForURL.cを編集する。

8) テストツールを設定する。
 メニュー:プロジェクト→新規カスタム実行可能ファイル
   /usr/bin/qlmanage 
  引数を指定する。
   -p  documentFile.name       プレビューの場合
   -t   documentFile.name  サムネイルの場合

以上!

木曜日, 10月 20, 2011

あっひーるちゃん

昨日まで、プログラムで図形を描くために、
方眼紙の上で座標を調べつつ、コードを書いたりしていたが
かわいい絵を作ろうと思ったとたんに、面倒になった。

そこで、ソースコードを生成するためのプログラムを
作ってみた。

まず、これはモデルのアヒルちゃんである。











で、作ったアプリケーションで描いてみた。












いい感じじゃありません?

金曜日, 10月 14, 2011

うしの写真

今日、うちの嫁が会社帰りに牛の写真集を買ってきました。
牛ばっかりのほのぼのとした写真集です。
これはいいものです。

へえ、こんなもの出している人がいたんだ〜と
とてもうれしくなりました。

今年、福島のほうでは、原発事故の避難により
取り残された牛達の悲惨なニュースを見かけます。
野良牛となってもなんとか生き残ってきた牛もいるそうです。
その映像をみて涙が出そうになりました。
せめてその牛達が無事に保護されよい牧場へ引き取られる
ことを希望します。

水曜日, 9月 14, 2011

Cocoaでの上下逆さま

Cocoaでプログラミングを始めて惑ったことのひとつに
座標系(Cordinate system)がWindowsなどと違うことだ。
多くの言語では画面上の座標の原点は左上隅にあり、
垂直方向の座標は下に行くほど大きくなる。
Cocoaでは原点は左下にあり、垂直方向に上にいくほど座標が
大きくなる。(これは数学や、日常的な座標系とおなじである。)
とはいえ、このこと自体は慣れると思う。

ただ、左下隅が原点であるということによる不都合もある。
スクロールビュー(NSScrollView)の中に表示するビュー(NSViewなど)
がデフォルトでは左下隅にくっついてしまうのだ。

外側の青い部分がスクロールビュー
内側の白い部分が内容を表示するビュー






この状態では、アプリケーションの使い勝手が悪くなってしまう。
これをこういう状態になおしたい。


この場合、内側のビュー(NSViewなどを継承したビュー)
のクラスにて isFlipped をオーバーライドし、戻り値としてYESを返すようにするだけでよい。
- (void)isFlipped{
    return YES;
}




ビューに直接描画しているのであれば、これでOKなのであるが、
いったんレイヤー(CGLayer)に描画してからビューに投影している
ような場合、不都合が残っている。


左図のように鏡で上下が逆さまになった状態となってしまう。
レイヤーはFlip(上下反転)していないままそこに Hello と描画している。そのレイヤーをFlipされたビューに描画する際にひっくりかえるのだ。


よって、レイヤーもFlipしておく必要がある。
レイヤーに描画する前にそのコンテキストに対して以下を施す。



CGContextTranslateCTM(layerContext, 0, layerHeight );

CGContextScaleCTM(layerContext, 1, -1);


一つ目で、原点を垂直方向に移動させる座標変換がコンテキストに登録され
二つ目で、垂直方向の座標の符号を逆転する座標変換が登録される。
例えば横幅100 x 縦100 のサイズを持つレイヤー上の
座標(10, 20) はFlip(上下反転)すると
一つ目の変換では 座標(0, 100) を原点とした場合の座標に変換されれるので
(10, -80) となる。
二つ目の変換では垂直方向の符号を逆転するので、(10, 80) となる。

※つまり下から20ポイントの場所は高さ100ポイントの場所からみると
下に向かって80ポイントの場所にあたるということである。

このようにしてFlipされたレイヤーには上下反転して描画される。
そのレイヤーをFlipされたViewに描画すると、さらに上下反転され
正常な状態で表示される。

金曜日, 9月 02, 2011

COCOA備忘

これは自分のための備忘です。すみません。


  • Resources フォルダのファイルパスをプログラム実行時に取得するコード
    • [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"extension"]

  • CGLayer上にテキストを出力する方法。
    NSViewなどに出力する時はNSStringのdrawInRectが使えるが、CGLayerに出力するケースには使えない。この場合CoreTextを使う方法が簡単そうであった。
    • NSAttributedStringを生成
      NSAttributedString *attrStr = [[NSAttributedString allocinitWithString:@"こんにちは" attributes:fontAttributes]; 
    • CTLineCreateWithAttributedStringを使って CTLineRefを生成
      CTLineRef line = CTLineCreateWithAttributedString((CFAttributedStringRef)attrStr);
    • CGContextSetTextPositionを使って出力位置を指定
      CGContextSetTextPosition(context, pt.x, pt.y);
    • CTLineDrawを使って文字を出力
      CTLineDraw(line, context);
    • メモリの解放
      CFRelease(line);
      [attrStr release];

  • イメージの特定の色を透過させる方法。
    このような処理を Maskingと呼ぶ。
    rect はNSRect型で表示したい場所をさしている。
    ctx はグラフィックコンテキストをさしている。
    • 元のイメージが NSImage *nsimg に生成済みだとする。
      これからCGImageRefを取得する。
      CGImageRef cgimg = [nsimg CGImageForProposedRect:&rect context: ctx hints: [[NSDictionary alloc] init]];
    • マスキングカラーを設定する
      CGFloat maskingColors[6] = {255,255,255,255,255,255};
      //左から二つずつ組となりそれぞれR,G,Bの範囲を示している。
    • マスキングをかけたイメージを生成する
      CGImageRef maskedImage = CGImageCreateWithMaskingColors(cgimg, maskingColors);
    • コンテキストに描く
      CGContextDrawImage(ctx, rect, maskedImage);

木曜日, 9月 01, 2011

数学

先日、友人と飲みにいったときに、やっぱり、
数学は大事だよね。ということになった。

プログラムを作る上で、何か変わったことをしたいと
思った時、数学的な知識の不足を感じるのだ。
例えば、画面上に表示する図形を傾けるだけでも
角度を求めるために三角関数を使ったりする。
プログラミング言語には数学関数のライブラリがある訳だから
sin も cos も tan も使えばいいのだが、高校以来
そういうものは忘れてしまっているので、
まずそこから調べねばならなくなる。
先日、QRコードの誤り訂正コードのことを書きましたが、
あれは 有限体とかガロア体というもの性質を応用している訳だが
そういうものは、さっぱりわからぬ。
誤り訂正という技術は、通信データの補正などにも使われている
そうだ。そういうものがあるので、はやぶさのような宇宙探査機と
地球との間で通信ができるのだ。
インターネットで使う暗号技術だって、数学者が生み出した。
数学がないと安心してネットで買い物が出来ないのだ。

そう、実は数学は世の中を支配しているのだ。
という結論で飲み会はお開きになった。

金曜日, 8月 26, 2011

Cocoa

去年の暮れに iMacを買いました。
これまでずっとWindows一辺倒だったのですが、
なんかインターフェースがすっきりしているというか
洗練されているところに惹かれてiMacにしました。
WindowsXP以降インターフェースのデザインが
だんだん野暮ったくなっているような気がします。

まあWindowsはおいといて、今後はMacでアプリを作ってみたいぞ
というわけで、時間を見つけてはAppleのフレームワークである
Cocoaの学習をしています。
年末に「Mac OS X Cocoa プログラミング」という本を買いました。

本当はある程度集中して、読み進めた方がいいのですが、
仕事の合間に、ちまちまと読みすすめてきたので、今週になって
やっとほぼ読み終わったところです。
でも、この本はObjective-Cも初めて、Macも初心者という私にはちょうど
とりかかりやすいものでした。

今週から、自分の作りたいようにいろいろ試しています。
いつもそうですが、教科書のサンプルコードを書いて試しているうちはいいですが
いざ、自分でこれをしようとか思った時には、まごつきます。
教科書に載っていたことも忘れているし、やりたいことがその教科書に
載っているとも限りません。
幸い、XCodeに附属のドキュメントはとてもよく出来ているようです。

これからが本当の始まりです。楽しみがいっぱいです。