PaintCodeでiOSアプリ用ボタンを作ってみた

PaintCodeを買ってみたので、早速iOSアプリ用ボタンを作ってみました。

直感的に使用できるし、ボタン作成には丁度いいアプリでした。PDFで書き出すとAdobe Illustratorでレイヤーが保存された状態で利用できるので、効果をつけたりしたい場合はイラレに持っていくこともできます(それなら最初からイラレで作るって?)。やはりコードが出力されるのが魅力かな。

起動するとWindowが表示されます。
120319 0003

カンバスサイズを90×40に変更します。OS X/iOSのボタンをiOSに変更します。コードがiOS向けになります。原点表示も左上になります。
120319 0005

角丸長方形を描画。ストローク無しです。
120319 0006

#222222/#444444/#666666の色設定を追加。Hex Color Pickerで指定しました。
120319 0007

グラーションを追加。一番左が黒、左から2番目が#222222、3番目が#444444、一番右が#666666。Fill Styleに作成したグラデーションを指定。
120319 0009

Inner Shadowを作成して指定。
120319 0011

文字列を追加。
120319 0012

テキストにOuter Shadowを指定。
120319 0013

でき上がったコードがこれ。

//// General Declarations
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = UIGraphicsGetCurrentContext();
 
//// Color Declarations
UIColor* color222222 = [UIColor colorWithRed: 0 green: 0 blue: 0 alpha: 1];
UIColor* color444444 = [UIColor colorWithRed: 0.27 green: 0.27 blue: 0.27 alpha: 1];
UIColor* color666666 = [UIColor colorWithRed: 0.4 green: 0.4 blue: 0.4 alpha: 1];
 
//// Gradient Declarations
NSArray* gradientColors = [NSArray arrayWithObjects: 
    (id)[UIColor blackColor].CGColor, 
    (id)[UIColor colorWithRed: 0 green: 0 blue: 0 alpha: 1].CGColor, 
    (id)color222222.CGColor, 
    (id)color444444.CGColor, 
    (id)[UIColor colorWithRed: 0.33 green: 0.33 blue: 0.33 alpha: 1].CGColor, 
    (id)color666666.CGColor, nil];
CGFloat gradientLocations[] = {0, 0.25, 0.45, 0.51, 0.75, 1};
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)gradientColors, gradientLocations);
 
//// Shadow Declarations
CGColorRef innerShadow = color444444.CGColor;
CGSize innerShadowOffset = CGSizeMake(0, -0);
CGFloat innerShadowBlurRadius = 2;
CGColorRef textShadow = [UIColor blackColor].CGColor;
CGSize textShadowOffset = CGSizeMake(0, -0);
CGFloat textShadowBlurRadius = 3;
 
//// Abstracted Graphic Attributes
NSString* textContent = @"Touch!";
UIFont* textFont = [UIFont fontWithName: @"Helvetica-Bold" size: 18];
 
 
//// Rounded Rectangle Drawing
UIBezierPath* roundedRectanglePath = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(0, 0, 90, 40) cornerRadius: 4];
CGContextSaveGState(context);
[roundedRectanglePath addClip];
CGContextDrawLinearGradient(context, gradient, CGPointMake(45, 40), CGPointMake(45, -0), 0);
CGContextRestoreGState(context);
 
////// Rounded Rectangle Inner Shadow
CGRect roundedRectangleBorderRect = CGRectInset([roundedRectanglePath bounds], -innerShadowBlurRadius, -innerShadowBlurRadius);
roundedRectangleBorderRect = CGRectOffset(roundedRectangleBorderRect, -innerShadowOffset.width, -innerShadowOffset.height);
roundedRectangleBorderRect = CGRectInset(CGRectUnion(roundedRectangleBorderRect, [roundedRectanglePath bounds]), -1, -1);
 
UIBezierPath* roundedRectangleNegativePath = [UIBezierPath bezierPathWithRect: roundedRectangleBorderRect];
[roundedRectangleNegativePath appendPath: roundedRectanglePath];
roundedRectangleNegativePath.usesEvenOddFillRule = YES;
 
CGContextSaveGState(context);
{
    CGFloat xOffset = innerShadowOffset.width + round(roundedRectangleBorderRect.size.width);
    CGFloat yOffset = innerShadowOffset.height;
    CGContextSetShadowWithColor(context,
        CGSizeMake(xOffset + copysign(0.1, xOffset), yOffset + copysign(0.1, yOffset)),
        innerShadowBlurRadius,
        innerShadow);
 
    [roundedRectanglePath addClip];
    CGAffineTransform transform = CGAffineTransformMakeTranslation(-round(roundedRectangleBorderRect.size.width), 0);
    [roundedRectangleNegativePath applyTransform: transform];
    [[UIColor grayColor] setFill];
    [roundedRectangleNegativePath fill];
}
CGContextRestoreGState(context);
 
 
 
 
//// Text Drawing
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, textShadowOffset, textShadowBlurRadius, textShadow);
CGRect textFrame = CGRectMake(5, 8, 80, 20);
[[UIColor whiteColor] setFill];
[textContent drawInRect: textFrame withFont: textFont lineBreakMode: UILineBreakModeWordWrap alignment: UITextAlignmentCenter];
CGContextRestoreGState(context);
 
 
//// Cleanup
CGGradientRelease(gradient);
CGColorSpaceRelease(colorSpace);

Jimdo雑感 – CMSの敷居は下がった…けどセキュリティ少し心配

簡単にCMSを利用したサイトを作成できるサービスJimdoが今後業務で利用できないかと思い、少しさわってみました

アカウントの登録

アカウント作成はトップページで

  • 希望のユーザ名
  • メールアドレス

を入力するだけで非常に簡単です。ただしGmailを利用していると登録完了メールが迷惑メールになりました。

セキュリティ

パスワードは登録完了メールに記載されていました。英字8文字。メールに残るし、英字のみというのがまずい。ので、ログインして変更しました。

ここで疑問。パスワードリマインダーでパスワードが送られてくるんじゃないの?つまりパスワードがハッシュ化されていないんじゃないのかということです。

試しに「パスワードをお忘れですか?」リンクをクリックして、登録したメールアドレスを入力してみました。

すると、登録したパスワードがメールに記載されて送られてきました。これはまずい。少なくともハッシュ化はされてないようです。暗号化はしてあるんでしょうか?

ログインに関してもパスワードの入力のみでログインが可能。ユーザ名は必要ありませんし、第一ユーザ名がサイトサブドメインになるわけですからバレバレ。

たぶん多くのユーザが初期パスワードで運用するでしょうし、セキュリティ的には問題があるのではないでしょうか。

バックアップについて

データのバックアップはどのようになっているのでしょうか?

Jimdo側のバックアップについては

Jimdoサーバーは不測の事態によるサーバー障害に備え、データが消失しないよう毎日定期的にバックアップを行っております。万が一データが消失した場合には、最長で24時間前の状態に復旧が可能です。
各ページのコンテンツ(内容)のバックアップを取ることはできますか? – Jimdo Help

ユーザによるバックアップは

Jimdoでは、個別のバックアップ機能は実装されていない(2009年8月現在)ため、お手数ではございますが、お客様にてそれぞれページのバックアップを、お客様自身にて行っていただく必要がございます。
各ページのコンテンツ(内容)のバックアップを取ることはできますか? – Jimdo Help

もしかしたら将来はImport/Export機能が実装されるかもしれませんが、現在は

Jimdoはバックアップの部分的解決策としてHTTrack Website Copierを推奨しております。
各ページのコンテンツ(内容)のバックアップを取ることはできますか? – Jimdo Help

ということでHTTrack Website Copierを利用してバックアップするというのが解答のようです。でもこれってWindows用のソフトのようです。Unix系のツールだとwgetを使うことになります。Macではwget+GUIアプリもあるようです。http://www.google.com/search?q=wget+mac+gui。

いずれにしても他のシステムへのくら替えは簡単ではないようです。

サイト構築について

デザインは簡単に変更できました。簡単に変更できるだけでなく、HTMLの編集による変更も可能です。
サイトだけでなくブログの作成も可能です。
有料プランであればより多くの機能が利用できるようです。

雑感

Jimdoの利用は、セキュリティ的に心配でユーザによるバックアップも面倒なので、業務で使用するのは
技術者として少しためらわれます。

システムの管理が必要なく、HTMLやCSSを触ることなくデザインの変更が可能なので、一般企業や個人が自力でCMSを使ったサイトを公開する敷居は低くなったことは間違いなく、今後は小規模なサイトであればWebサイト作成会社は必要なくなっていくのでしょう。デザイン業務に関しては需要があるかもしれません。

これまではブログサービスがさまざまな企業から提供されていましたが、今後はCMSサービスが各社から公開されて行くようになるでしょう。実際に海外ではSnapPagesというサービスサイトが公開されています。このようなサービスが競い合うことでより良いサービスになっていくでしょう。

現在は試用してみる段階ととらえています。Jimdoの次は上記のSnapPagesもさわってみようと思います。

日本語入力プログラム「かわせみ」を使ってみた

以前使っていたegbridgeが終了してしまって、しかたなくATOKを使ってました。

が、ついに物書堂さんが発売した日本語入力プログラム「かわせみ」が公開されました。一部機能が削られていますが、かな漢字変換エンジンやインターフェースはegbridge Universal 2のものです。

この文は「かわせみ」で入力しています。

これまでTeslaを使って親指シフトで入力していましたが、かわせみでもTeslaを問題なく使用できました。

そして最も重要な点ですが、egbridge Universalと同様、ATOKより入力に対する反応が速いです。Teslaで親指シフト入力していますが、ATOKだとキー入力し終わったあとにタタタと表示がついてくるといった感じでしたが、かわせみはキー入力した瞬間に表示されます。親指シフトは入力が速いとされてますが、ATOKでは意味ない!って状態だったのが、やっとまともに使えるIMになりました(戻ることができました、かな)。どんなに変換効率が良くても遅くてはストレスですからね。

そしてこれまた重要な変換効率ですが、ATOKと遜色ない感じです。というか、egbridgeエンジンなんで馴染みのものです。

それから、ATOKは環境設定とかキー割当とかのツールが使いにくいですが、egbridgeは使いやすかったので、かわせみも当然使いやすいですね。ただ問題もあって、Dvorakではキー割り当て編集ツールで正しく割り当てられないという障害があります。これはegbridge時代からの問題で、一度US配列にしてキー割り当てしてDvorakに戻すと、割り当てられます(割り当て方に工夫が必要ですが)。

また、要望もあります。句読点変換だと読点入力で毎回変換されてしまうので、句点変換も追加して欲しいです。

価格ですが1ライセンスとファミリーパックがあって、この価格。

ライセンス数:1(1台のみの Macにインストールしてご利用いただけます)

価格:1,995円(税込)

かわせみ ファミリーパック

ライセンス数:3(3台までの Macにインストールしてご利用いただけます)
価格:3,990円(税込)かわせみ | Mac | 物書堂

IMでこの価格は安い。かわせみには体験版がありますが、インストールする前に購入決定。

というわけで、ATOKに避難してましたが、今後は「かわせみ」にお世話になります。