Nov 01, 2011

[Misc] CalDAV メモ

CalDAV とは

CalDAV
http://ja.wikipedia.org/wiki/CalDAV
iCalendar
http://ja.wikipedia.org/wiki/ICalendar

Java から CalDAV を利用するには

CalDAV4j
http://code.google.com/p/caldav4j/

Google Calendar の CalDAV 関連情報

Sync with iCal or Sunbird
http://www.google.com/support/calendar/bin/answer.py?answer=99355

Posted in Misc | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jul 08, 2011

[Misc] astah の「ファイルがオープンできません」に対応する方法

astah で過去に作成したファイルを読み込もうとすると「ファイルがオープンできません」というエラーで一切読み込めなくなった。 公式サイトを見てみたらお知らせに情報が掲載されていた。

astah - Javaアップデート後に発生する問題について
http://astah.change-vision.com/ja/java-trouble.html
お知らせに記載されている回避方法はかなりざっくりなので、MacOS X での対応方法をメモしておく。

対応方法

  1. ADCから "Java for Mac OS X 10.6 Update 4 Developer Package" をダウンロードする。
  2. ダウンロードした dmg から JDK 1.6.0_24 をインストールする。
  3. インストールされたことを確認する。
    $ cd /Library/Java/JavaVirtualMachines/1.6.0_24-b07-334.jdk/Contents/Commands
    $ ./java -version
    java version "1.6.0_24"
    Java(TM) SE Runtime Environment (build 1.6.0_24-b07-334-10M3425)
    Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02-334, mixed mode)
    
  4. astah の Info.plist を編集する。
    $ cd /Applications/astah\ professional/astah\ professional.app/Contents/
    $ cp ./Info.plist ./Info.plist.original
    $ vi ./Info.plist
    $ diff ./Info.plist.original ./Info.plist
    56c56
    < 		<string>1.6+</string>
    ---
    > 		<string>1.6.0_24</string>
    
これで今まで通り "astah professional.app" (もしくは "astah community.app") から astah を起動して問題無く利用することができるはず。

それにしても既存ファイルが一切読み込めなくなる、というのは致命的すぎる。 Apple は古い環境を躊躇無く切ってくるから Lion で JDK 1.6.0_24 以前が動作するのか不安。 Lion 発売までに .astah ファイルのコンバータが提供されると良いのだけれど・・・。

Posted in Misc | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jul 01, 2011

[Apple] 固定のレスポンスを返す HTTP Server を立てる

ローカルの MacOS X にどんなリクエストに対しても固定のレスポンスを返す HTTP Server を立ててみた。 手軽に利用できる python の BaseHTTPServer をカスタマイズして実現してある。

HTTP Server の準備

以下の様な python のコードを作成。
/usr/share/local-http-server.py

#!/usr/bin/python
import BaseHTTPServer

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_GET(s):
        s.send_response(200)
        s.send_header("Content-type", "text/html")
        s.end_headers()
        s.wfile.write("")

if __name__ == '__main__':
    BaseHTTPServer.HTTPServer(('localhost', 80), MyHandler).serve_forever()

MacOS X の自動起動設定

/Library/StartupItems/LocalHTTPServer/LocalHTTPServer

#!/bin/sh

. /etc/rc.common

start() {
  /usr/share/local-http-server.py &
}
stop() {
  pid=`ps -ax | grep "/usr/bin/python /usr/share/local-http-server.py" | grep -v grep | sed -E "s/^ +//" | sed -E "s/ .+$//"`
  if [ "$pid" != "" ]
    then
      kill $pid;
  fi
}

case $1 in
  start)
    ConsoleMessage "Starting Local HTTP Server"
    start;
    ;;
  stop)
    ConsoleMessage "Stopping Local HTTP Server"
    stop;
    ;;
  restart)
    ConsoleMessage "Restarting Local HTTP Server"
    stop;
    start;
    ;;
  *)
    echo "$0: unknown argument: $1"
    ;;
esac

/Library/StartupItems/LocalHTTPServer/StartupParameters.plist
{
  Description     = "LocalHTTPServer";
  Provides        = ("LocalHTTPServer");
  OrderPreference = "Early";
}

Posted in Apple | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jun 29, 2011

[Apple] iPhone/iPad アプリケーションでパスワードを管理する方法

iPhone/iPad アプリケーションで何がしかのアカウント情報を管理する場合に知っておくべき情報をメモ。 ざっくりまとめると、

  • NSUserDefaults はセキュアでないのでパスワードを保存してはいけない。
  • ユーザ ID は NSUserDefaults に、パスワードは Keychain に保存すべき。
  • Keychain へのアクセスはオープンソースで提供されているラッパを使うと楽。
ということらしい。

GenericKeychain
http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Introduction/Intro.html
Tomute’s Notes
http://d.hatena.ne.jp/tomute/20091121/1258884514
Simple iPhone Keychain Code
http://log.scifihifi.com/post/55837387/simple-iphone-keychain-code
ldandersen / scifihifi-iphone
https://github.com/ldandersen/scifihifi-iphone/tree/master/security
Simple iPhone Tutorial: Password Management using the keychain by using SFHFKeychainUtils
http://gorgando.com/blog/technology/iphone_development/simple-iphone-tutorial-password-management-using-the-keychain-by-using-sfhfkeychainutils
Implementing Application Preferences
http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/Preferences/Preferences.html#//apple_ref/doc/uid/TP40007072-CH6-SW5

Posted in Apple | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jun 28, 2011

[Misc] Firefox 5 の起動時オプション

Firefox 5 (MacOS X) の起動時オプションをメモ。

$cd /Applications/Firefox.app/Contents/MacOS/
$./firefox-bin -version
Mozilla Firefox 5.0
$./firefox-bin --help
Usage: ./firefox-bin [ options ... ] [URL]
       where options include:

  --g-fatal-warnings Make all warnings fatal

Firefox options
  -h or -help        Print this message.
  -v or -version     Print Firefox version.
  -P        Start with .
  -migration         Start with migration wizard.
  -ProfileManager    Start with ProfileManager.
  -no-remote         Open new instance, not a new window in running instance.
  -UILocale  Start with  resources as UI Locale.
  -safe-mode         Disables extensions and themes for this session.
  -jsconsole         Open the Error console.
  -browser           Open a browser window.
  -new-window   Open  in a new window.
  -new-tab      Open  in a new tab.
  -preferences       Open Preferences dialog.
  -search      Search  with your default search engine.
  -private           Enable private browsing mode.
  -private-toggle    Toggle private browsing mode.
  -setDefaultBrowser Set this app as the default browser.

Posted in Misc | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jun 27, 2011

[Apple] gdata-objectivec-client にチャレンジ

gdata-objectivec-client は Objective-c で Google Data API を利用するためのライブラリ。

gdata-objectivec-client
http://code.google.com/p/gdata-objectivec-client/

とりあえず、 XCode4 のプロジェクトに組み込む手順をメモ。

  1. 最新のコードをチェックアウト。trunk が気になる場合は tag を利用する。
    $ svn checkout http://gdata-objectivec-client.googlecode.com/svn/trunk/ gdata-objectivec-client
    
  2. GData.xcodeproj を iPhone プロジェクトにドラッグ。
  3. iPhone プロジェクトの Targets "MyProject" の "Target Dependencies" に GDataTouchStaticLib 追加。
  4. iPhone プロジェクトの Targets "MyProject" の "Link Binary With Libraries" に libxml2.dylib と libGDataTouchStaticLib.a を追加。
  5. iPhone プロジェクトの Targets "MyProject" の "header search path" に "$(SDKROOT)/usr/include/libxml2" をセット。
  6. iPhone プロジェクトの Targets "MyProject" の "Other C Flags" に "-ObjC -lxml2 -all_load" をセット(Debug、Release 共)。
  7. iPhone プロジェクトのビルドディレクトリ( /Users/me/Library/Developer/Xcode/DerivedData/FamilyLibrary-dgrrozxgfpnutzbxyrxpvrsuvtpr/ とか) の ./Build/Products/Debug-iphonesimulator/Headers を iPhone プロジェクトにコピー。
この設定で iOS Simulator での動作は確認できた。実機は未確認。

Posted in Apple | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

[Misc] Firefox 5 で Ubiquity を利用する方法

Ubiquity 0.6 は Firefox 4/5 ではサポートされない。 そのため、Firefox を 3.6 からアップグレードしようとすると「Ubiquity は無効化される」旨メッセージが表示される。

Firefox 5 で Ubiquity を利用するには以下の手順で最新版(2011/06/27 現在で 0.6.1pre.20110619) をインストールする必要がある。

インストール方法

  1. https://bitbucket.org/satyr/ubiquity/downloadsから tip.xpi をダウンロード
  2. Firefox 5 のメニューより「ファイル > ファイルを開く...」 を実行し、tip.xpi を開く
  3. インストーラの指示に従いインストールを行う

Posted in Misc | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

May 26, 2011

[Cloud] Amazon S3 への Write only アクセス権を持ったユーザの作り方

AWS IAM で S3 への Write only アクセス権を実現する方法をメモ。 グループもしくはユーザに以下の Policy を設定する。

{
  "Statement":[{
      "Effect":"Allow",
      "Action":["s3:Put*"
      ],
      "Resource":"*"
    }
  ]
}

Posted in Cloud | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jan 10, 2011

[Android] Android の開発環境を用意する

MacOS X に Android 開発環境を用意したので手順をメモ。

Android developers
http://developer.android.com/sdk/index.html
Android developers - Installing the SDK
http://developer.android.com/sdk/installing.html

Android SDK のインストール

Android developersページから SDK をダウンロードする。 ここでは android-sdk_r08-mac_86.zip を使用する。 ダウンロードが完了したらインストールを行う。

$ unzip android-sdk_r08-mac_86.zip
$ sudo mv ./android-sdk-mac_86 /usr/share
$ cd /usr/share
$ sudo ln -s ./android-sdk-mac_86 ./android-sdk

Android SDK のアップデート

次に Android SDK のアップデートを行う。 コマンドラインから以下のコマンドを実行すると、Android SDK Manager が起動しアップデートが行われる。
[update] [update]

$ cd /usr/share/android-sdk
$ ./android update sdk

ADT (Android Developer Tool) のインストール

Android 開発用の Eclipse plugin "ADT" をインストールする。 インストール方法は Installing the ADT Plugin を参照。
[install] [install]

ADT の設定

Eclipse を再起動したら設定画面より ADT の設定を行う。 とりあえずは Android SDK のパスを指定するだけで良い。
[configure]

Hello, Android World

とりあえず動作確認のため Hello, World チュートリアルに挑戦してみる。

Android プロジェクトの作成

"New" > "Other..." を選択し、"Android" > "Android Project" を作成する。
[create] [create] [create]

Hello, Android World のコーディング

package jp.in_vitro.android.helloandroidworld;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroidWorld extends Activity {
    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView view = new TextView(this);
        this.setContentView(view);

        view.setText("Hello, Android World");
    }
}

Hello, Android World の実行

プロジェクト (HelloAndroidWorld) を選択肢、メニューより "Run" > "Run As" > "Android Application" を実行する。 Emulator が起動し、しばらくするとアプリケーションの画面に切り替わる。
[run] [run] [run]

Posted in Android | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jan 09, 2011

[Android] VMWare Fusion に Android をインストール

x86 用にビルドされた Android を見つけたので、VMWare Fusion にインストールしてみた。

Android-x86
http://www.android-x86.org/

Android-86 のダウンロード

ダウンロードページ から iso ファイルをダウンロードする。 今回は froyo-generic-20110101.iso を使用した。

仮想マシンの作成

VMWare Fusion で「新規仮想マシンの作成」を実行し、「ディスクを使用せずに続行」ボタンで先に進む。 「オペレーティングシステムのインストールディスクイメージファイルを使用」を選択し、事前にダウンロードした iso ファイルを選択。 後の設定は以下の通り。

オペレーティングシステム その他
バージョン その他
メモリ 256M
ディスクサイズ(最大) 2G
ネットワーク 共有ネットワーク(NAT)

[create][create][create]
[create]

Android-x86 のインストール

Android-x86 の iso イメージから起動したら「Installation」を選択。 後は適当に Bootable なパーティションを作成して、NTFS でフォーマット、Bootloader をインストール、で終了。 基本的にインストーラの言いなりで問題無し。
[install][install][install]
[install][install][install]
[install][install][install]
[install][install][install]
[install]

Android-x86 の起動

インストーラの最後の画面で「Run Android-x86」を選択すると Android-x86 が起動する。 特に設定なども不要でインターネットにも接続できる。
[run][run][run]
[run][run]

Posted in Android | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jan 08, 2011

[Cloud] <apex:*> タグを jQuery で操作する

Salesforce の Visualforce Page で利用できる <apex:*> タグ (<apex:outputText>, <apex:outputPanel>, etc) は HTML にレンダリングされた際に少々クセのある ID を持つ。 jQuery にその ID を利用する方法をメモ。

apex タグは HTML にレンダリングされる際、(自動割り当てを含む) ID を持つ直近の親の ID と自身の ID を結合した文字列を HTML タグの ID として付与される。 例えば、下記の <apex:outputPanel> は HTML では "page:form:block:panel" という ID を持つ <div> タグとして展開される。

<apex:page id="page" >
  <apex:form id="form" >
    <apex:pageBlock id="block" >
      <apex:outputPanel layout="block" id="panel" />
    </apex:pageBlock>
  </apex:form>
</apex:page>
この "page:form:block:panel" を $("#page:form:block:panel") の様にそのまま jQuery の selector として利用しても動作しない。 selector で特殊な意味を持つ ":" をエスケープすることで jQuery でも利用可能となる。 上記の例では、$("#page\:form\:block\:panel") となる。

サンプル

<apex:page id="page" >
  <apex:includeScript value="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"/>
  <apex:form id="form" >
    <apex:pageBlock id="block" >
      <apex:outputPanel layout="block" id="panel" />
      <script type="text/javascript" language="javascript">
        var jq$ = jQuery.noConflict();
        function escapeVisualforceId(vfid) {
          return vfid.replace(/:/g,'\\:');
        }
        jq$(document).ready(function() {
          jq$('#' + escapeVisualforceId('page:form:block:panel')).text("Hello World");
        });
      </script>
    </apex:pageBlock>
  </apex:form>
</apex:page>

Posted in Cloud | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |