アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

Mac OS X おすすめキーバインド

こんにちは。MacBookAirで仕事している坂本です。

自分はショートカットキーが大好きです。
ただアプリによってはショートカットキーが動かずイライラすることがあります。
今回はそんなようなことがないようにアプリを使ったオススメのキーバインドを紹介しようと思います。。

まずキー割り当てを変更するアプリにはKeyRemap4MacBookを使用します。


KeyRemap4MacBook


https://pqrs.org/macosx/keyremap4macbook/

こちらからお使いのOSXバージョンに合ったインストーラーをダウンロードしてインストールしてください。
LaunchpadまたはアプリケーションディレクトリにKeyRemap4MacBookというアプリが出てくるのでダブルクリックで起動させましょう。

するとChange Keyというタブで利用できるキーバインドの一覧が表示されます。
この中から使いたいキーバインドにチェックすれば良いというわけです。


ホームポジションのままフロントスペースを!!


まずはフロントスペースです。
フロントスペースはバックスペースが前の文字を消すことに対して後ろの文字を消すためのキーです。
WindowsではBSキーがBackSpaceでDeleteキーがフロントスペースですね。

Macのデフォルトでもcontrol+Dでカーソルの後ろの文字を削除することができますが一部の対応していないMicrosoft Wordなどで動きません。
そこでFn+deleteではなくcontrol+deleteにキーを割り当てることでタイムロスを防ぐことにします。



▼ Change Delete Key
  □ Control + Delete to Forward Delete


になります。
これで文字を削除する時は右手の小指は迷わずにdeleteへ向かうことができ前の文字を消すか次の文字を消すかはcontrolキーでコントロールできるわけです。

非常に便利です。


ホームポジションのままカーソル移動!!


次にカーソルキーです。

カーソルを動かすため頻繁に使うキーなのですがどうやっても右手がホームポジションから離れてしまいます。
ホームポジションへ右手を戻す時に人差し指でJキーの凹凸を探す手間が増えます。
そこでcontrolキーと合わせてカーソルを移動させるキーバインドを設定しましょう。

私はサーバでファイルを編集する時はViコマンドを使っているのでViの設定をキーバインドに持ち込みます。

KeyRemap4MacBookキーバインド一覧に



▼ Vi Mode
  □ Control_L + hjkl to Left/Down/Up/Right


にチェックを入れましょう。
するとViの操作と一緒にhキーを押すと左へ、jキーを押すと下へとカーソルが動くようになります。

Emacs派の方は



▼ Emacs Mode
  □ Control + PNBF to Up/Down/Left/Right

があるのでこちらを使ってください。
最初は違和感がありますが、慣れてくるとプログラミングでもメールでも驚くほど早くなります。


キーリピート速度アップ!!


最後にキーを押しっぱなしにした時のキーリピート速度を早めたいと思います。
これもKeyRemap4MacBookで変更することができます。

Key Repeatタブ内の



▼ Basic Configurations
 ▼ Key Repeat
   Key Repeat


こちらのvalue値を小さくすることでキーリピート速度が早くなります。
おすすめは23msくらいでしょうか。

以上の3つだけですが自分はこれだけでかなり業務を効率化できています。
デメリットとしてはViを開いた時にカーソル移動でちょっと混乱する程度でしょうか。

キーバインド方法は人それぞれです。
Controlキーにバックスペースを割り当ててcapsキーにControlキーを割り当てる人もいます。

KeyRemap4MacBookを使ってどんどん使いやすい環境を整えましょう。

手軽に使えるちょっとオシャレなCoda2

こんにちは坂本です。

9月からエンジニアとしてアシアルに入社しました。
今回、ブログに掲載する記事を書くということでドキドキしながら書いています。

さて、みなさんはどんな統合開発環境IDE)を使ってるでしょうか?
Windows系アプリの場合はVisualStudio一択ですがWeb系の場合はなかなかそうはいきません。

現在、様々なIDEがありどれがスタンダードなのか決まってはいません。
好奇心旺盛な人は常に新しいIDEを試し続けていますが社内スタンダードなIDEを疑問を持たずに使っている人も多いのではないかと思います。

今回はMacOS限定ですがIDEの一つ、Coda2についてお話をしたいと思います。

私は数年前にMacを使い始めEclipseIntelliJAptanaNetBeansKomodoIDEと様々なIDEを試してきました。
ところが2012年にCoda2というIDEがAppStoreで発売、さらに割引キャンペーンに釣られたのをキッカケにCoda2を使い続けています。

このCoda2は他のIDEに比べて極端に使いやすい機能がある訳ではないのですが気に入ったのは手軽さです。


手軽その1:インストールが簡単


Coda2はAppStoreから購入してインストールするだけで使用することができます。
インストーラーをダウンロードしてインストールしてライセンスを入力、インストーラーを削除みたいな必要がありません。


手軽その2:プロジェクト情報を共有


Coda2は1つのプロジェクトを「サイト」という単位で管理します。
このサイトにはサーバ情報やGitリポジトリの情報などを保存しておくことができ、Coda2を開いてサイトをクリックするだけで開発を開始することができます。
そしてサイト情報はiCloudで共有することができるので複数MacOSの環境があった場合、どちらでも開発を続けることができます。
業務中に個人のプロジェクトのコードを参考にするときなどにも使えますね。


手軽その3:環境設定の少なさ


IDEを使い始めたら、まずはコーディング、そして環境設定の変更を繰り返す人も多いのではないかと思います。
最初の頃は環境設定を変更することが楽しみでも慣れてくると数十カテゴリに分類された環境設定から該当の設定を探すのがおっくうになってきます。
特に私のような色々なIDEを試している人にとっては新しいIDEの環境設定からエディタの行番号を表示する設定を探すだけでも一苦労です。

ところがCoda2は不安になるくらいの設定項目が少なくカテゴリもたった9つだけです。
ですが、こんな設定があったらいいのにと思ったことはないので私にとっても十分な項目数の環境設定です。


こんなCoda2ですが不満がない訳ではありません。

Vimキーバインドがない
・バリデーターが貧弱
・SassのCSSが自動で吐き出されない
プラグインが少ない

などなど理想的なIDEではないことは確かです。


現在は手軽なCoda2で開発を進めていますが今後も新しいIDEを試していきたいと思います。


次はWebStormかなぁ・・・。

nginx(リバプロ)とapache(Webサーバ)でアクセス要求制御をしよう

皆様、ご無沙汰しております。笹亀です。
ブログを書くのが、去年以来となってしまい、年が変わってしまいました・・
遅れましたが、今年度もよろしくお願い致します。

本日はリバースプロキシとWebサーバを利用したサーバ構築方法についてご紹介したいと思います。リバースプロキシとは、外部のネットワークを内部のネットワークへ処理の振り分けをするサーバのことを示します。リバースプロキシは長いのでリバプロと言います。
一般的には下記のようなリバプロを使用せずにWebサーバへ直接アクセスをさせる方法が多いのです。


リバプロを使用した場合は、リバプロが受けた要求をWebサーバへ転送して、Webサーバ側でコンテンツを表示するといったフローになります。


大規模なサイトを構築する場合には役割をわけるためにリバプロを使用した構成で構築されていることもあります。nginxとApacheを使用しますが、どちらもWebサーバとしてもリバプロとしても動作させることが可能です。今回はnginxの方が高速に動作するということからnginxをリバプロにし、WebサーバをApacheにしたいと思います。

まずはnginxとApacheをインストールします。
 ※インストール処理はMacPortsをインストールしていることを前提とします


$ sudo port install nginx
$ sudo port install apache2


Apacheの設定ファイルを変更します。
80番はリバプロ側で処理するためApacheではListenポートを8010に変更する


nginx側の設定を変更します。
インストール後は「/opt/local/etc/nginx」に設定ファイルのサンプルがあり、
通常はこちらを参考にして設定しますが、今回は設定ファイルを下記のように設定します。

1.mimeタイプはデフォルトのものを利用します


sudo mv /opt/local/etc/nginx/mime.types.default /opt/local/etc/nginx/mime.types


2.nginx.conf(基本設定)を作成します


sudo vim /opt/local/etc/nginx/nginx.conf

設定内容:


user  nobody;
worker_processes  1;  

error_log  logs/error.log  info;

events {
    worker_connections  256;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;
    sendfile        on; 
    keepalive_timeout  65; 

    proxy_headers_hash_max_size 1024; 
    proxy_headers_hash_bucket_size 256;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_read_timeout 600s;
    proxy_connect_timeout 10s;

    include domains/*.conf;
}


3.基本設定で読み込んでいるdomains/localhost.conf(ドメインごとの設定)を作成します。


sudo vim /opt/local/etc/nginx/domains/localhost.conf

設定内容:


upstream web-apache {
  server localhost:8010;
}

server {
  listen       80; 
  server_name  localhost;
  access_log  logs/localhost.access.log  main;
  error_log logs/localhost.error.log debug;
  location / { 
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-CB-REMOTE-ADDR $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://web-apache/;
  }
  
}

※port 80番のアクセスを受けたらlocalhost:8010(apache)へ転送する

4.ログ出力先のフォルダを作成して、権限を与える


sudo mkdir -p /opt/local/logs/
sudo chmod -R 777 /opt/local/logs/


ここまでで基本的なリバプロの設定完了です。
まずはnginxをスタートさせ、httpでローカルにアクセスします。


sudo nginx -c /opt/local/etc/nginx/nginx.conf


Apacheの受け側が起動していないため、nginx側でエラーとなることがわかります。

それでは、受け側のApacheをスタートさせ、再度、httpでローカルにアクセスします。


sudo /opt/local/apache2/bin/apachectl start


正しくApacheのhtdocsが表示されれば、リバプロにて転送がうまくいったことになります。

この例のようにリバプロとwebサーバを分けて構築することでリバプロでWebアクセスを一元管理し、処理させたいWebサーバをリバプロで制御をすることができます。例えば、ドメインごとに処理をさせたいWebサーバを選択して専用に処理をさせるようなことも行えますし、負荷がかかる特定のエイリアスに専用の処理をさせるWebサーバを設定するといったことも可能です。

リバプロサーバとWebサーバは分けて使うことでメリットが得られますので、サーバの台数的には増えてしまうというデメリットもあります。採用する際はメリットとデメリットの両方をしっかり考えて、採用をする必要がございます。

検証するだけでしたら、設定例のようにローカルマシーン1台でも試せますので、ぜひご興味がある方はお試しくださいませ。

mac の zsh で日本語の濁点・半濁点付き仮名を正常に補完できる様にする


初めまして。7 月にエンジニアとして入社した花島と申します。

早速ですが、Maczsh で日本語の濁点・半濁点付き仮名を正常に補完できる様にする拙作のパッチをご紹介させて頂きたいと思います。

Mac におけるファイル名の取り扱い



まず始めに、濁点・半濁点付き仮名が補完できないという事について少し触れたいと思います。
Mac を日常的に、また仕事で利用しているという方の中には、濁点・半濁点付き仮名を入力して補完しようとして補完できなかったという経験をお持ちの方が少なからずいらっしゃるのではないでしょうか。
これは Macファイルシステムである HFS+ におけるファイル名の扱い方に原因があります。

HFS+ ではファイル名を Unicode (UTF-8) で格納するのですが、その際、NFD という正規化を施して格納します。
(一般的な UTF-8 では NFC という正規化がされています)
詳しくは割愛しますが、この NFD という正規化が行われると、仮名と濁点・半濁点が分解され、二つのコードポイントで扱われる様になります。
(逆に NFC では濁点・半濁点付き仮名は単一のコードポイントで扱われています)

具体的な例を挙げます。
カタカナの「」は通常の UTF-8 で使われている NFC で正規化されると "U+30D1" というコードポイントですが、
NFD で正規化されると "U+30CF U+309A" という二つのコードポイントになります。

先ほど NFD では仮名と濁点・半濁点が分解されると申し上げた通り、
U+30CFU+309A はそれぞれ「」と「」を表すコードポイントです。
(上記の「」は便宜的に表記したもので、実際の U+309A の文字とは異なります)

話を戻します。
HFS+ が NFD で正規化をして格納するのは別に困った事ではないのですが、
問題は HFS+ からファイル名を取り出すときにそれをそのまま、NFD で正規化された状態で取り出されてしまうという所にあります。
端的に言えば、保存時と読み込み時でファイル名が変わってしまうという事になります。
(保存時に NFD で正規化するのなら読み込み時に NFC で正規化し直して欲しいものですが…)

濁点・半濁点付き仮名の補完



さて、ここで話は zsh での補完に移ります。
例として「パズー.jpg」というファイルがあるとします。
」を入力後、ファイル名を補完しようとすると候補が見つからないはずです。
逆に「」と入力後に補完をすると「パズー.jpg」と補完されるはずです。
…これでは折角の補完も使い物にならないですね。

上記の様な補完が行われるのは以下の為です。
前者は入力された「」が NFC で正規化された U+30D1 (0xE3 0x83 0x91) であるのに対し、
ファイル名の「」は NFD で正規化された U+30CF (0xE3 0x83 0x8F) U+309A (0xE3 0x82 0x9A) であるため、比較が失敗(=補完されない)します。
後者は入力された「」とファイル名の「」の最初のコードポイントが共に U+30CF (0xE3 0x83 0x8F) であるため、比較が成功(=補完される)します。

この様に、zsh では濁点・半濁点付き仮名の補完が正常に行えません。

zsh にパッチを当てる



ここでようやく本題のパッチの話になります。
https://gist.github.com/1403346
(なお、パッチ対象の zsh のバージョンは 5.0.0 です)

このパッチは zshディレクトリのファイル名を読み込む処理に、
OS から受け取った NFD で正規化された文字を NFC で正規化された文字に変換するという変更を加えます。
これにより比較する対象がそれぞれ NFC で正規化された文字になるため、正常に補完が行える様になります。

以下にパッチ適用からインストールまでの例を示します。


$ curl -L http://www.zsh.org/pub/zsh-5.0.0.tar.bz2 | tar xf -  & & cd zsh-5.0.0
$ curl -kL https://raw.github.com/gist/1403346 | patch -p1
$ ./configure  & & make -j 4  & & make install


また、パッケージ管理に homebrew をお使いの場合はより簡単にインストールできます。


$ brew tap waltarix/customs
$ brew install waltarix/customs/zsh

なお、上記 homebrew でインストールした zsh にはコマンドラインで「」等のいわゆる Ambiguous width な文字が正常に扱えるようになるパッチも適用されています。
こちらについても、いずれ機会がございましたらご紹介させて頂きたく思います。

以上、Maczsh で濁点・半濁点付き仮名を正常に補完できる様にするパッチのご紹介でした。

Macでも手軽に使えるガントチャート描画ソフトGanttProject

こんにちは、DJ担当の浦本です。

今日は、Macでも手軽に使えるガントチャート描画ソフト「GanttProject」を紹介します。
GanttProjectJava製&オープンソースで、MacのみならずLinux/Windowsにも対応しています。
もちろん、フリーで利用できます(←ここ重要!)。

GanttProject website: http://www.ganttproject.biz/

GanttProject付属のサンプルプロジェクトはこんな感じ。

まずは、初期設定から



【祝日設定を行う】
日本の祝日が休日としてカウントされるように設定しましょう。
メニューから「Project → Properties...」を開きます。
Holiday calendarとしてJapanを選択します。



【チャートの見た目をカスタマイズ】
メニューから「Edit → Settings」を開きます。
Task detailsの欄から、バーの上下左右に表示する情報を選ぶことができます。


私のお気に入りは、左側にタスク名、下側に日数、右側に担当者名を表示する設定です。
しかしチャートをよりコンパクトにしたいという方は、左右のみ選ぶと良いでしょう。

3秒で分かる基本操作



【タスクを作成する】
時計ボタンを押すとタスクが新規作成されるので、タスク名を入力します。


できたバーをダブルクリックすると、タスク編集画面が開きます。

ここで開始日、終了日、進行率などを入力できます。

マウス操作だけでも、簡単にタスク編集を行うことができます。
・終了日をずらすには、右端をドラッグ
・開始日をずらすには、左上隅をドラッグ
・進行率を増減するには、左隅の真ん中あたりをドラッグ

【担当者(リソース)をアサインする】
まず新規リソースを登録するために、メニューから「Resources → New Resource」を開きます。
このリソース登録画面だけ日本語が入力できないため、日本語はコピペで入力して登録してください。


登録したらResources Chartにリソースが追加されたことを確認し、
Ganttを押してガントチャートへ戻ります。


アサイン先タスクのタスク編集画面を開き、Resourcesタブからリソースをアサインします。
Unitがアサイン率を表します。

Coordinatorにチェックを入れた人は進行役の扱いとなり、ガントチャート上には括弧{}付きで表示されます。


アサイン後にResources Chartを開くとアサイン状況が表示されているので、
誰がいつ暇なのか把握することができます。


【先行タスクを設定する】
先行タスクから後続タスクに向けて、バーの中央部をドラッグします。


このように、タスクの前後関係が矢印として表示されるようになります。


先行タスクを後ろにずらすと、後続タスクも所要日数を保ったまま、後ろにずれます。


【サブタスクを設定する】
右矢印ボタンを押すと、選択中のタスクは、上にある親タスクのサブタスクになります。


親タスクは見た目が変わって黒い枠として表示されるようになります。


ガントチャートを画像にエクスポートする】
メニューから「Project → Export」を開きます。
ここで形式はPNGを選択します。

画像出力するときのコツは日付範囲を2週間ほど広めに設定しておくことです。そうするとバーの周りに表示しているテキストが長くても途切れません。

以上、なんだかマニュアルみたいな内容になってしまいましたが、GanttProjectに少しでも興味を持って頂けたら幸いです。
それでは、ビッグサイトでは熱中症にならないように気を付けていきましょう!




2013/10/30追記:
Mac版では Alt+Click によるタスクバーの移動ができませんが、
代わりに以下のようにして Shift+Click を用いることができます。

「/Applications/GanttProject\ 2.6.1.app/Contents/Resources/Java/plugins/net.sourceforge.ganttproject/data/resources/mouse.properties」を編集し、「mouse.drag.task=Shift+Button1」とする。

出典: https://code.google.com/p/ganttproject/issues/detail?id=706

【ぐぬぬ】iPhoneアプリのこんなとき、どうするの??

こんにちは、iPhone大好き橋本です。

今日はiPhoneアプリの作成に関する「こんなときどうするの??」という疑問にお答えするべく、小技をいくつか紹介したいと思います。


1. 文字サイズに合わせてUILabelのサイズを変えたい。

UILabelを作成するときに、Labelに表示する文字によってUILabelのサイズを変えたいということ無いですか??ただ、UILabelを作成するときはframeのサイズを指定しなきゃいけませんよね。

こんなとき、どうするの??

そんなときには、UILabelにこんなカテゴリを書いちゃいましょ。



@interface UILabel (resize)
- (void) resizeWithPoint: (CGPoint)point;
- (id) initWithText:(NSString *)text andFont:(UIFont *)font;
- (id) initWithText:(NSString *)text andFont:(UIFont *)font andPoint:(CGPoint)point;
- (CGRect)resizedFrameWithPoint: (CGPoint)point;
@end

@implementation UILabel (resize)
- (void)resizeWithPoint:(CGPoint)point {
    self.frame = [self resizedFrameWithPoint:point];
}

- (id)initWithText:(NSString *)text andFont:(UIFont *)font {
    self = [self initWithText:text
                      andFont:font
                     andPoint:CGPointMake(0, 0)];
    
    return self;
}

- (id)initWithText:(NSString *)text andFont:(UIFont *)font andPoint:(CGPoint)point {
    self = [super initWithFrame:CGRectZero];
	
	if (self) {
		self.numberOfLines = 0;
		self.font = font;
		self.text = text;
        
        self.frame = [self resizedFrameWithPoint:point];
	}
    
    return self;
}

- (CGRect)resizedFrameWithPoint:(CGPoint)point
{
    CGSize size = [self.text sizeWithFont:self.font
                        constrainedToSize:CGSizeMake([[UIScreen mainScreen] bounds].size.width, NSIntegerMax) 
                            lineBreakMode:UILineBreakModeTailTruncation];
    
    CGRect resizedFrame = CGRectMake(point.x, point.y, size.width, size.height);
    
    return resizedFrame;
}

@end


NSStringクラスの sizeWithFont:forWidth:lineBreakMode:メソッドを使用することで、UILabelの表示に必要なCGSizeを得ることができます。

CGSizeが取得できれば、あとは、UILabelのframeに取得したCGSizeを反映させれば、表示する文字に応じたサイズのUILabelを作成することができます。

CGSizeを得るためには、fontとtextが必要なため、今回はfontとtextを引数とするメソッドを書いてみました。オブジェクトを使い回すときのために、resizeWithPoint:も実装しておくといいと思います。

べんりー!


2. UIAlertViewにUITextFieldを表示したい。

UIAlertViewにUITextFieldを表示したいっていう場面があると思うんです。
ログインをユーザに求めるAlertを出したいときとか。

ただ、デフォルトのUIAlertViewだと、テキストを表示することしか出来ませんよね。

こんなとき、どうするの??

そんなときは、こういう感じで強引に実装しちゃいましょ。




UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"ログイン"
                                                message:@" \n\n"
                                               delegate:self
                                      cancelButtonTitle:@"Cancel"
                                      otherButtonTitles:@"Login", nil] autorelease];

// ユーザ名
UITextField *userNameField = [[[UITextField alloc] initWithFrame:CGRectMake(12, 45, 260, 24)] autorelease];
userNameField.placeholder = @"ユーザ名";
userNameField.font = [UIFont systemFontOfSize:12];
userNameField.borderStyle = UITextBorderStyleRoundedRect;
userNameField.backgroundColor = [UIColor clearColor];
userNameField.tag = 1;

// キーボードのフォーカスを当てる
[userNameField becomeFirstResponder];

// パスワード
UITextField *passwordField = [[[UITextField alloc] initWithFrame:CGRectMake(12, 72, 260, 24)] autorelease];
passwordField.placeholder = @"パスワード";
passwordField.font = [UIFont systemFontOfSize:12];
passwordField.borderStyle = UITextBorderStyleRoundedRect;
passwordField.backgroundColor =  [UIColor clearColor];
passwordField.tag = 2;
passwordField.secureTextEntry = YES;

[alert addSubview:userNameField];
[alert addSubview:passwordField];
[alert show];



UIAlertViewのメッセージに改行を2つ入れて二行分のスペースを確保します。そのスペースにうまいことUITextFieldを入れてやります。
これだけでUITextFieldをもつUIAlertViewを表示出来ちゃうんですね。

べんりー!


3. UITextViewで表示したURLのリンク先をSafariじゃなくてUIWebviewで表示したい。

UITextViewのdataDetectorTypesプロパティにUIDataDetectorTypeLinkを設定すると、UITextViewに表示した文字列に含まれるリンクを拾うことができるようになるのはご存知のことかと思いますが、これだけだとリンクをクリックしたときにSafariで表示されちゃうんですね。

いちいちSafariが起動するのはイヤな感じですよね。

iPhone3Gだとマルチタスク対応してないので、Safariから戻ってきたときに、アプリを起動しなおすことになりますよね。

なんてだるい。
これはナンセンス。

UIWebViewを使ってアプリ内で表示できたら最高ですね。
いや、むしろ、ユーザにUIWebViewで開くか、Safariで開くか選択させてあげたいですよね。

UIActionSheetとか使って。

ただ、UITextView側ではこれを制御することが出来ないんです。

こんなとき、どうするの??

リンクが押されたときには、UIApplicationのopenUrl:メソッドが呼ばれるんです。
なので、このメソッドをオーバーライドしたサブクラスを作っちゃえばいいんですね。こんな感じで。



@interface MyUIApplication : UIApplication {
    NSURL *openUrl_;
}

@property (nonatomic, retain) NSURL *openUrl;
@end

#define ACTIONSHEET_OPEN_URL 1

@implementation MyUIApplication
@synthesize openUrl = openUrl_;

- (BOOL)openURL:(NSURL *)url
{
    if (!url) {
        return NO;
    }
    
    self.openUrl = url;
    
    UIActionSheet *sheet = [[[UIActionSheet alloc] init] autorelease];
    sheet.delegate = self;
    [sheet addButtonWithTitle:@"このアプリで開く"];
    [sheet addButtonWithTitle:@"Safariで開く"]; 
    [sheet addButtonWithTitle:@"キャンセル"];
    sheet.cancelButtonIndex = 2;
    sheet.tag = ACTIONSHEET_OPEN_URL;
    
    hogeAppDelegate *appDelegate = (hogeAppDelegate *)[self delegate];
    
    [sheet showInView:appDelegate.window];
    
    return YES;
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (actionSheet.tag == ACTIONSHEET_OPEN_URL) {
        switch (buttonIndex) {
            case 0:
            {
                // WebView表示用のController。各々自作してくださいね!デフォじゃないよ!
                WebViewController *webViewController = [[[WebViewController alloc] initWithUrlStr:[self.openUrl absoluteString]] autorelease];
                
                 // 今回はUITabBarとUINavigationを組み合わせたアプリのnavigationに突っ込んでる例です。ここは各自カスタムしてね!
                hogeAppDelegate *appDelegate = (hogeAppDelegate *)[self delegate];
                UINavigationController *nav = (UINavigationController *)[appDelegate.tabBarController selectedViewController];
                
                [nav pushViewController:webViewController animated:YES];

                break;                
            }
                
            case 1:
            {
                [super openURL:self.openUrl];
                break;                   
            }
                
            case 2:
            {
                break;
            }

            default:
                break;
        }
    }
    
    self.openUrl = nil;
}

@end


あとはこのクラスをデフォルトのUIApplicationと置き換えるだけ!main.mを書き換えてください。



int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    // UIApplicationMain関数の第三引数を書き換える。
    int retVal = UIApplicationMain(argc, argv, @"MyUIApplication", nil);
    [pool release];
    return retVal;
}


なんてユーザフレンドリー!

べんりー!


4. UIViewを角丸にしたい。
したいですよねー、角丸。やっぱりどうしてもこういう欲求出てきますよねー。

こんなとき、どうするの??

簡単です。

UIViewのlayerプロパティをいじりましょう。layerをいじりたいときはQuartsCore/QuartsCore.hをimportするのをお忘れなく。



UIView *hoge = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)] autorelease];
hoge.layer.cornerRadius = 8.0f;


はい。これだけです。

べんりー!


5. UIViewを角丸にしたついでに影とかつけたい。

影もつけたいですよね。そうくると思ってました。わかります。

じゃあ、こんなとき、どうするの??

これもlayerいじると簡単に実装出来ちゃうんですね。



UIView *hoge = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)] autorelease];
hoge.layer.cornerRadius = 8.0f
// 次の二行を追加するだけです。
hoge.layer.shadowOpacity = 0.8;
hoge.layer.shadowOffset = CGSizeMake(2, 2);


shadowOpacityは影の濃さ、shadowOffsetは影の場所です。あとは、shadowColorで色を変えたりすることもできますよ。

べんりー!

今回は5つほど小技を紹介させていただきました。どれも実際にアプリを作っていると出てくる疑問点、欲求かと思います。

今回紹介させていただいた小技が、少しでも読んでいただいた方のお役にたてると幸いです。

ではでは。

Macを買ったらすぐ変更する設定

こんにちは。
先日、新型MacbookAirの美しさに魅せられ、ついついMacbookAir13インチ特盛りをポチってしまった橋本です。

今日は、弊社熊谷の記事「続・続Macを買ったらすぐインストールするアプリケーション」のインスパイアの意味も込めて、アプリではなく、Macの設定変更について書いてみたいと思います。

※注意※ 今日ご紹介させていただく内容は、ターミナルからコマンドを入力して設定を変更するものです。試してみる際には自己責任でお願いします。MacOSX 10.6.5で動作確認済です。

では、早速。

1. デスクトップ上のアイコンを消す

ちょっとしたファイルを保存するときに、ついついデスクトップに保存してしまうことってありませんか?自分はよくあります。ただ、このいい加減な習慣を続けていると、いつの間にかデスクトップがアイコンで埋まってしまって、せっかくの壁紙が台なしになってしまいます。



アイコンが増えるのは嫌だ。だからと言って、デスクトップに保存する癖も止められない。
そんなときはターミナルから、このコマンドを入力してみてください。



defaults write com.apple.finder CreateDesktop -boolean false
killall Finder


どうでしょうか。デスクトップにファイルが保存されているにも関わらず、デスクトップからアイコンが消えています。





もとに戻したいときにはこのコマンド


defaults delete com.apple.finder CreateDesktop
killall Finder



2. Stackの表示方法を変更する

Stackの表示方法が2種類(グリッド、リスト)あるのはご存知のことと思いますが、どちらの表示方法もいまいちしっくりこないなーと思うことはありませんか?
グリッド形式だと、アイコンが並んでいて選択しやすいんですが、一覧性に欠けます。



リスト形式だと、アイコンが小さくて選択し辛いです。



リスト形式で、アイコンがもう少し大きければ言う事なしだと思いませんか。
そんなときはターミナルから、このコマンドを入力してみてください。


defaults write com.apple.dock use-new-list-stack -boolean true
killall Dock


リストの項目がデフォルトのものよりも大きく表示されるようになります。



もとに戻したいときにはこのコマンド


defaults delete com.apple.dock use-new-list-stack
killall Dock


さらに、リストにマウスが乗ったときに常にハイライト表示されるようにするためには、このコマンドを入力してみてください。



defaults write com.apple.dock mouse-over-hilite-stack -boolean true


もとに戻したいときにはこのコマンド


defaults delete com.apple.dock mouse-over-hilite-stack
killall Dock


3. アイコンが跳ねるのを禁止する

アプリで変化が起こったときに、Dockのアイコンが跳ねるのがうざったいなーと思うときはありませんか?
そんなときはターミナルから、このコマンドを入力してみてください。



defaults write com.apple.dock no-bouncing -boolean true
killall Dock


これでアイコンが跳ねなくなります。
もとに戻したいときにはこのコマンド


defaults delete com.apple.dock no-bouncing
killall Dock


4. 「保存」、「印刷」時の表示の初期設定を詳細設定にする

ファイルを保存するときの表示、初期設定だとこんな感じの画面が出ると思います。



ファイル名の横のボタンを押すと、詳細設定が出るのですが、最初から詳細設定を出すようにしたいと思いませんか。



そんなときはターミナルから、このコマンドを入力してみてください。



defaults write -g NSNavPanelExpandedStateForSaveMode -boolean true


同様に、「印刷」を選択したときの表示も初期設定を詳細設定に変更できます。



defaults write -g PMPrintingExpandedStateForPrint -boolean true


もとに戻したいときにはこのコマンド


保存
defaults delete -g NSNavPanelExpandedStateForSaveMode

印刷
defaults delete -g PMPrintingExpandedStateForPrint


5. スクリーンショットの保存先を変更する

Macスクリーンショットを撮りたい時には、Shift+Command+4で撮ることができるんですが、初期設定だと、スクリーンショットがデスクトップに保存されます。この保存先を変更したいと思ったことはありませんか。

そんなときはターミナルから、このコマンドを入力してみてください。



defaults write com.apple.screencapture location ~/ScreenCapture


「~/ScreenCapture」となっているところが保存先です。自分のお好きなところを指定してもらえればと思います。

もとに戻したいときにはこのコマンド


defaults delete com.apple.screencapture location



今日は個人的に必須の設定項目を5つ紹介させてもらいました。この他にもターミナルから変更できる設定はいくつもあります。また機会がありましたら紹介させていただけたらと思います。

「仕事に必須!!マスト!!これが無いと仕事にならない!!」というわけではないが、何気によく使っているツール3選@Mac

Kayacのフラッシュデベロッパーブログ「_level0.kayac」で、非常に面白い企画をやっていました。

「Flash制作に欠かせない3つのツール」

同じテーマで、各々の必須ツールを紹介する連載記事。

「面白そう!乗っかりますか!」

というわけで、乗っかろうかと思ったのですが、
普段の仕事でFlash制作をやっていない…。

「よし!じゃあ、PHP開発に欠かせない3つのツールだ!」

と思ったのですが、思いついたのは、

Firefox + Firebug
・ターミナル + vi

くらい…。

「じゃ、じゃあ、仕事に欠かせない3つのツールだ!」

と思ったのですが、思いついたのは、

Firefox + Firebug(また…)
・ターミナル + vi(ま、また…)
・Numbers

…。

うーむ。こまった。


というわけで、方針変更。

「仕事に必須!!マスト!!これが無いと仕事にならない!!」というわけではないが、何気によく使っているツール3選@Mac


…需要はあるのでしょうか。
とりあえず、いってみよー。

1. smultron


数あるエディターの中で、気づいたらよく使ってるのがこれ。
以下のような特徴があります。

・インターフェースがシンプル!
・タブ表示!
・各種ソースコードのカラーシンタックス
・その他もろもろ(HTMLのプレビュー表示できたり、HTMLのバリデーションできたり。)
・アイコンがかわいい!!

タブ表示に対応しているので、あるタブではSQL書いてみたり、あるタブではただのメモ帳として使ったり、
本当に雑記帳という感じで使っています。

インストールはこちらから

(今公式ページを見てみると、今後開発を継続しないという旨が書いてありました。おおお、残念すぎる。)

2. visor

ターミナルを起動するアプリ。
起動前


起動後


ショートカットキーをたたくと(自分は、⌘+SPACE)、ターミナルが「サッ!」と出てくるんです。
うーん、なんて表現すればよいのかわかりませんがとにかく便利なんですよね…。

これも、無ければ無いでいいんですが、一度使い始めると病み付きに。

インストールはこちらから
(ver2.0からsnow leopardの64bit版Terminalでも使えるようになったみたいです!)

3.MacZip4Win

「橋本さんから送られてくるZIPファイルの中身、いつもファイル名文字化けしてるんですよね。。」

お客さんに言われるまで気づかなかったのですが、Macのデフォルトの圧縮機能(右クリックで圧縮)を使うと、どうやら、ファイルが文字化けするらしいです。それを解消するためのアプリがこれ。
Dockに置いておいて、ファイルをDockのアイコンにドロップするだけで圧縮完了。
便利です。
これも必須ではないんですが、文字化けカコワルイのでファイルをzipにするときには使うようにしています。

インストールはこちら
(リンク先「Ranaとの日々」の記事中の「ダウンロード」からダウンロードできます)


うーん、予想通り地味なラインナップになりましたね。


ちなみに、必須アプリもついでに。定番アプリが多いですね。

Firefox + firebug …説明不要ですよね。

・ターミナル + vi …こちらも説明不要かと。

iWork'09 …Excelファイルを開くときに、ちょっと前まで「NeoOffice」使っていたんですが、最近はすっかりNumbersを使うようになりました。見た目キレイなんですもん。Pagesはアウトライナーとして使ってます。プレゼン資料はKeynote一択。

Thunderbird 3 β …タブ機能が便利で2には戻れなくなりました。

・Transmit …最近CyberDuckから乗り換え。もっと早く買えばよかった。

Flex Builder3 …これ無いとFlex書けない。

Clamxavウイルス対策。なんとなく安心感。

・JollysFastVNC …VNCクライアント。

LimechatIRCクライアント。

・Gcal …グーグルカレンダー専用ブラウザ。何気に便利。

VMWare fusionIEでテストするときにWindows立ち上げるため。ほんとは使いたくないけど、無いと仕事にならない…。

・porticus …MacPortsGUIクライアント。もうコマンドラインに戻れない。

・The Hit List …タスク管理。デザインがかわいい。毎日使うものは、やっぱりデザインが一番大事。機能も豊富です。一押し。

Growl …アプリケーションのイベント通知。忙しいときとかは「うるさい」と感じてしまう。

・istatMenus …メニューバーにシステム情報を表示。メモリしかほぼ見ませんが…。

・QuickLook …アプリではないんですが、一応。QuickLookが便利すぎるせいで、もうWindowsには戻れない。今度別記事で入れてるプラグイン書きます。たぶん。


書き出してみると意外と数ありますね。
他にも「これ便利だよー」っていうのあったらぜひ教えてください。

OSX版MySQL Workbenchを使ってみよう

こんにちは、アシアルの熊谷です。

データベースがMySQLの場合、ER図を作成するためのアプリケーションとしてMySQL Workbenchがあります。対応しているプラットフォームとしてWindows版、Linux版、OSX版の三つがあるわけなんですが、OSXを使用している私にとってOSX版が使い物になるかどうかというのが一番気になるところです。

そんなことで、以前からOSX版のバージョンが新しくなる度に試していたりします。ここ最近というか現在公開されているベータ版あたりからは日本語を入力表示しない限りはほぼ使えるようになってきています。もう少し詳しく書くと、



このように、Comments部分に日本語が入力されている場合、文字化けしたり場合によってはこのTableエディタが開かなくなったりします。このTableエディタとは、



カラムを追加編集するエディタであるため、もしこれが開かないと結構不便というかこのアプリケーションを使う意味が無くなってしまいます。もちろん日本語を入力せずに英語で記述すれば問題ないので、その辺を妥協して使用すればいいとはおもうのですが。。

そんなちょっと日本語処理にまだ問題のあるベータ版ですが、先月末にバージョン5.2のアルファ版も公開されていました。



ということで、さっそくこのアルファ版を使用してみたのですが。。。



なんと日本語が問題なく表示されるようになっています!これは嬉しいです。
そんなことで早速使ってみることにしましょう。[Add Diagram]をクリックすると



Diagramを作成するウィンドウが開くのであとは左のバーからテーブルのアイコンをクリックし



テーブルを置きたいところでクリックします。すると、こんな感じに



テーブルのオブジェクトが作成されます。あとはこのオブジェクトをダブルクリックすると下にTableエディタが開くのでここでからカラムを追加していきます。



また、真っ白な状態から作成していくだけではなく、たとえばSQLスクリプトがすでにある場合は[Reverse Engineer SQL Script]でSQLスクリプトからER図を、



データベースがすでにある場合は[Reverse Engineer Database]でデータベースからER図を作成することが出来ます。



まだアルファ版ということで動作が不安定な部分もありますが、日本語での問題が解決し使えるようになってきています。興味のある方は試してみてはいかがでしょうか。

続・Macを買ったらすぐインストールするアプリケーション

明けましておめでとうございます。熊谷です。あっという間に過ぎ去ったお正月休み、皆さんはいかがお過ごしでしょうか。今日から仕事始めの方が多いのではないのでしょうか。

もう昨年のことになってしまいますが、またMacユーザに戻りました。MacBook Airで懲りたはずなんですが、やはりその魅力に負けてしまいアルミのMacBookを購入してしまいました。そんなことで、今回は私がMacを買ったらすぐインストールするアプリケーションを紹介します。以前にも同じようなことをやっていますが、ほぼ1年前のことになるので、そこでは触れなかった(もしくは新たな)アプリケーションを紹介します。

Thunderbird

以前はOSX標準のMail.appを使用していたのですが、使い難いというかやはり使い慣れたメーラーが一番ということでこれに戻ってきました。

Adobe Photoshop Lightroom

写真管理ソフトとでもいいましょうか。最近写真はrawで撮るようにしているのでその現像はこれを使用しています。また、Flickrにアップロードするプラグインがあるのでそれとの組み合わせがとても使いやすいです。

ATOK 2008

日本語入力はやはりこれでしょう。定番中の定番ですね。早くWindows版にあるATOKダイレクトAPIが実装されないかなと思ってます。

InputHilitter

Windowsのときは当たり前だった日本語入力時に変換中の文字列を色付けしてくれるものです。「ことえり」や「ATOK」で変換しているとその文字列に下線が引かれるだけで、場合によっては文節の区切りがわかりにくくなります。これをインストールするとWindowsの時と同じように文字列に背景色がつくのでわかりやすくなります。ただ、その仕組み上Cocoaアプリケーションにしか効きません。でも、これがあるとないとでは、視認性が全然違います。必須。

MacVim

以前はターミナル(iTerm)上でvimを使用していたので今回も同じようにと思っていたのですが、GUICocoaにしてさらにMac用に機能を付け加えているMacVimを知り、使用してみたところなかなかいい感じ。何よりもCocoaGUIが作られているというのが素晴らしいです。

Cruz

Webkitをベースにしたブラウザ。SafariでもプラグインをインストールすることによりFirefox並に機能を拡張することが出来ますが、これははじめからそれ並みの機能を持っています。セッションのリストアやユーザスクリプト等。しかもこちらのサイトで公開されている方法を使用すると最新のWebkitを使用してこのブラウザを使うことができるので、Firebug並の新しいインスペクタが使用できてさらに便利に。最近はこれとFirefoxを使い分けています。

そんなことで、Macの世界に戻ってきました。文字はきれいで読みやすいし、何といっても新しいMacBookは速くて快適ですね!