SSL証明書更新(rapid-ssl.jp→namecheap乗り換え)

SSL証明書の更新時期が来たタイミングで改めてググると、国内の販売業者より海外業者の方が大幅に安いことに気づいたので、乗り換えることにしました。

今までは http://www.rapid-ssl.jp で買っていて年額\2,600だったのが、
今回は http://www.namecheap.com では年額$10.95で買える、
ということで半額以下。
商品はどちらもGeoTrustのRapidSSLなので、CSRや設定方法なども全く同じで変わらず。
NamecheapはPayPal払いもOKなので楽ちん。
なんで今までわざわざ国内で買ってたんだろう。。。

Amazon EC2を使い始めました

チームプロジェクト用と、個人プロジェクト用で、とりあえず2つほぼ同時並行で立ちあげ作業を進めています。

1. リージョンの選択

Tokyoリージョンを選ぶ。

2. AMI選択

共同プロジェクトの方はメンバーの馴染みで Ubuntu Server 12.04.2 LTS を選択。
自分用の方では、違いを知りたかったので Amazon Linux AMI 2013.03.1 を選択。

3. インスタンス起動

オプション選択画面が出てきたけど全部デフォルトのままで起動。

4. セキュリティグループの設定

SSHの初期ポートと運用ポートを空ける。

5. エラスティックIPアドレスの割り当て

立ち上げたインスタンスIPアドレスを割り当てる。

6. サーバの設定

SSHでサーバにログインして、とりあえずsshdのポートを変更する。
それから必要なパッケージを色々インストール。(Ubuntuはapt-getで。Amazon Linuxyumなのね。)

7. セキュリティグループの再設定

SSHの初期ポートを閉じる。
あと使うポート(まぁHTTPだけだけど)を開ける。


ここまでやった。
あとはもう、それぞれのサーバインスタンス内でやることばかりだな。

さくらのVPSと比べて

バーチャルコンソールが無いので、何かの間違いでsshdが止まってしまったらどうすんだろう?とかは思う。
セキュリティグループでファイアフォールを設定できる(サーバ内で iptables をゴリゴリする必要がない)のは楽ですね。
他は、そんなに違いを感じず、どちらも簡単に使える印象です。

Startup Weekend Osaka vol.2 参加レポート

4/19(金)の夜から4/21(日)に開催された、Startup Weekend Osaka vol.2 に参加しました。

Startup Weekend って何?

Startup Weekend は、金曜日の夜から日曜日までの54時間でリーン・スタートアップによる起業にチャレンジするイベントで、世界中で過去1,000回以上開催されています。

リーン・スタートアップというのは、シリコンバレーで発展して世界で注目されている起業のマネジメント手法で、顧客開発モデルとアジャイル開発を統合した方法論です。そのコアとなる考えは、MVP(Minimum Viable Product = 試作品ではなく、リアルに対価を得られる最小・最低限の製品)の開発と、それに対する顧客の反応の測定を、最短のサイクルで繰り返すことでビジネスの成功率を高める、ということだそうです。(と認識しています。私は。)

Startup Weekend では、リーンスタートアップによる起業プロセスの「最初の54時間」に、これ以上無く恵まれた環境でチャレンジできます。
起業志向を持った多様な参加者が集うイベントという場で、ビジネスアイデアをぶつけあい、賛同者を集めて共同創業者チームを構築し、コーチの指導を受けながら最初のMVPによる1サイクルを完成させ、ビジネスのプロフェッショナルでありエンジェル投資家にもなり得る審査員の批評を仰ぐことができます。
実践・体感によってリーン・スタートアップを学ぶ場でもあり、また、ここから実際に起業して成功に至ったチームやプロジェクトも存在する、貴重なイベントです。

で、どうだったん?

私は Startup Weekend への参加は、これが2度目でした。

1度目は昨年11月に開催された Startup Weekend Osaka Vol.1 でしたが、正直に言うと、思いっきり盛大に空回りしてコケました。特に何を達成するでもなく、何か明確なものを身につける事もできなかったなぁという傷心・無力感だけを持って帰る結果でした。

今回は一転、参加したチームが優勝という結果を勝ち取ることができました。その過程を体感する中で、学んだこと・得られたものはとても大きかったと思います。もちろんスムーズに事が運んだわけではなく、途中で2度くらい足場がガラガラと崩れ谷底に落ちるかのような経過を辿った挙句に、三日目の朝に全てをリセットしたMVPを構築しなおして、4時間の運用で検証、結果的にたまたま良い確証が得られたという状況。でもそうやって成功体験によって体で覚えたものって、たぶん次も同じようにやれる気がします。まぁ「次は失敗しない」という意味ではなく、「次はうまく失敗できる」という意味ですが。でもこれだけで、起業家は「常識に挑む」ことが出来るようになるし、同時に「間違った常識」の罠を避ける事が出来るようになるのだと思います。あと、自分に足りないものがどれだけ多くて、仲間がどんなに必要かという切実さも身に沁みた!

ちなみに前回の惨敗も、最初のビジネスアイデア自体が悪かったわけではありません。常識はずれ度合いは今回と似たようなもので、成功する事もあり得たし、失敗することもあり得たのだけど、その仮説検証プロセスを正しく設計することができずに横道に迷い込んでしまったのだと、今は理解しています。それは、初回はMVPというコンセプトもリーン・スタートアップの手法論も、知識としては知っていても本当に理解してはいなかったからです。(初回の惨敗は、それを自覚して2回目に必要な心の準備を整えるために必要なプロセスだったと思います。)

過去に優勝チームを経験した人が居るチームの勝率が高いという話も、なるほどと納得するところがありました。優勝チーム経験者はリーン・スタートアップの「体術」を多少なりとも会得しているので、少なくともムダの少ないMVPと仮説検証プロセスにチームを誘導することができるのだと思います。今回の私達のチームも、発起人兼リーダーが過去の優勝チーム経験者で、メンバーみんなを導いてくれました。

あと、コーチ達のツッコミも、その時は一見乱暴な荒らしに見えたとしても、後になって思い返すと全てが絶妙のタイミングで、絶妙の内容だったなぁと。

つまり、要するに?

Startup Weekend、間違いなく素晴らしいイベントです。自分の知識や常識にとらわれず目の前のものを素直に吸収する覚悟さえあれば、失敗からも成功からも、必ず得るものがあります。起業志向のある人間なら、絶対参加すべき!

これも読んでね

我らがリーダーのブログ
僕が今回Startup Weekendに参加した、本当の理由 – SOU Co.,Ltd.
何だかんだ言って、やっぱり一番大事なのは「想い」ですよね。それを全て共有してくれたから、僕らメンバーも最後に迷いなく突き進むことができました。

おまけ

Startup Weekend Osaka といえば、美味しい食事、マグロパーティー! あと、今回はなんと参加者全員が希望すればAmazon AWSの100ドル分のチケットがもらえました。

参加費たった7,500円で、素晴らしい経験ができて、ケータリングも異常に気合入ってて、ITエンジニアにとっては10,000円に相当するオマケまでついてくる・・・って、お得すぎだろ! むしろ意味わからんわ!!

リーン・スタートアップ

リーン・スタートアップ

スタートアップ・マニュアル ベンチャー創業から大企業の新事業立ち上げまで

スタートアップ・マニュアル ベンチャー創業から大企業の新事業立ち上げまで

ビジネスモデル・ジェネレーション ビジネスモデル設計書

ビジネスモデル・ジェネレーション ビジネスモデル設計書

cocos3d のEXC_ARM_DA_ALIGNエラーに対処

@implementation CC3VertexArray
 ........
 -(void) alignWithInvertedTextureMapSize: (CGSize) texMapSize {
  .......
  ccTex2F* ptc = (ccTex2F*)[self addressOfElement: i];
  ptc->u *= mapRatio.width; // <----ここでエラー
  ptc->v = texMapSize.height - (ptc->v * mapRatio.height); // <----ここでエラー

ARM CPUのアライメントに関するエラーらしい。
回避方法はmemcpyの使用。

GLfloat _u;
memcpy(&_u, &ptc->u, sizeof(GLfloat));
_u *= mapRatio.width;
memcpy(&ptc->u, &_u, sizeof(GLfloat));

GLfloat _v;
memcpy(&_v, &ptc->v, sizeof(GLfloat));
_v = texMapSize.height - (_v * mapRatio.height);
memcpy(&ptc->v, &_v, sizeof(GLfloat));

iOSで3Dモデルを表示するために調べてる情報のメモ(途中)

3Dモデルを表示するiOSアプリを作るかもしれないので情報収集。

iOSにはOpenGL ES1.x/2.0のAPIがあるけど、特定形式のモデルデータを扱う機構はなさそうなので、例えばOBJのパーサ&レンダラーを自作したり、それを部分的にやってくれるTouchOpenGLみたいなライブラリを使ったりして、ガリガリ低レベルのコーディングをしなきゃいけないみたいで、大変そう。

WebViewの非公式メソッドを使えばWebGLてのも使えるらしいんだけど、実用に足るか分からないので、とりあえず保留。

その他の方法として、サードパーティのライブラリもある。

ゲームならUnityとか使えば便利なんだろうけど、今回はゲームじゃないし、モデルは静止でカメラだけ動かせれば良いだけなので、オーバースペックていうか、たぶん目的が違うので、無意味にややこしいかもしれない。

パフォーマンス的には、iOSバイスに載ってるグラフィックチップのベンダが出してるPowerVR SDKを使うのはよさけ。データはPOD形式で用意する必要があるが、Collada形式からPOD形式へのコンバータが提供されてるので、モデラーからはCollada形式で出力すればいいみたい。(ShadeなんかでもCollada出力はサポートしてる。)

iSGL3Dも良いかもしれない。MITライセンスのオープンソースライブラリで、内部的にはOpenGLを使ってるみたい。APIドキュメントを見た感じでは、わりと違和感なく扱えそう。Isgl3dPODImporterてクラスも載ってて、これはPOWERVR POD形式のデータをインポートするためのexampleソースコードらしい。(追記:ただ、最近メンテされてないみたいで、サンプルが最新の開発環境ではすんなりそのまま動かないという現状。)

いずれにしても、実際に近いデータを使って、パフォーマンステストをする必要はあるんだろうな。

Time MachineでSDカードをバックアップできないのでやったこと

最近、MacBook ProSSDの残容量が気になってきたので、iTunesiPhotoのライブラリをSDカードに移すことにしました。

使ったのは手元にあったSandisk Extreme SDHC 32GB HD Video Class10 45MB/s x300 UHS-1です。XBenchで性能見てみると、読み書きとも手持ちのUSB2.0接続のポータブルハードディスクより早いので、普通に便利に使えそうな予感。

まずはSDHCカードMacOS拡張(ジャーナリング)形式でフォーマット。

つぎにTime Machineのバックアップ候補に入れる(バックアップ除外対象から消す)。。。と、ここで問題が発生。なぜか、バックアップ除外対象の欄から消せません。(消しても反映されず、勝手に戻ってしまう。)

ぐぐってみると、LionとMountain Lionのユーザが結構同じ問題に遭遇して、結局解決できずじまいみたい。
Can't backup flash drive to Time Machine

しょうがないので、Time Machineは一旦諦めて、別の方法でバックアップすることにしました。
採用したのは、MacOSXの機構であるlaunchdでSDカードのパス内の変更とファイルシステムのマウントを検知し、rsyncで差分コピーさせる方法です。

以下、設定方法の説明です。(usernameとか環境依存の部分は適宜読み替えてね!)

1. まず /Users/username/Library/LaunchAgents/ に com.conovare.backup_sd.plist という名前で次のようなファイルを作成。


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.conovare.backup_sd</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/bash</string>
    <string>/Users/username/Library/LaunchAgents/com.conovare.backup_sd/backup.sh</string>
  </array>
  <key>StandardErrorPath</key>
  <string>/dev/null</string>
  <key>StandardOutPath</key>
  <string>/dev/null</string>
  <key>WatchPaths</key>
  <array>
    <string>/Volumes/SDHC-32G/</string>
  </array>
  <key>StartOnMount</key>
  <true/>
</dict>
</plist>

2. 次に、上のファイル内で指定した /Users/username/Library/LaunchAgents/com.conovare.backup_sd/backup.sh というファイルを作成し、次のような内容に。


#!/bin/sh
TARGET="/Volumes/SDHC-32G/User/"
DEST="/Volumes/BACKUP/rsync/SDHC-32G/User/"

if [ -d "${DEST}" ];
then
  if [ -d "${TARGET}" ];
  then
    rsync -av --delete ${TARGET} ${DEST}
  else
    echo "${TARGET} directory does not exist."
  fi
else
  echo "${DEST} directory does not exist."
fi

3. 以下のコマンドを実行。(またはシステムを再起動。)


launchctl load /Users/username/Library/LaunchAgents/com.conovare.backup_sd.plist

Time Machineと違って世代バックアップではない点は留意して運用する必要がありますが、僕の経験上は、SDカードのファイルに異常が起こる時は、特定のファイルが壊れるとかでなく、突如一切なにも読めなくなることが多いのではないかと思うので、その保険にはなるでしょう。

なお、ちょっとだけ副作用がありまして、SDカードの取り出しをしようとするとファイル使用中である旨の警告が出て、強制取り外ししかできないようになります。まぁ、Mac用にフォーマットしてる時点で、ほぼ差しっぱなし運用が前提なので、よしとしましょうか。

    • -

参考

作ったサイト

個人的に作ったサイトです。

http://artbrut-japan.info/

アール・ブリュットアウトサイダー・アート、ボーダーレス・アート、エイブル・アート、障害者による現代アートや芸術活動などに関する最新情報サイト


色々な団体がそれぞれ違ったアプローチで活動してるのはまぁ良いんだけど、情報もそれぞれで分断されてるので、興味を持って知りたいと思ったヒトからすると、俯瞰的・総合的に理解するのは難しい状況です。そのあたり解消できたらいいな、と。