あけましておめでとうございます、EY-Officeはこんなお客様を探しています。

あけましておめでとうございます。娘の書いた年賀状の絵が素晴らしいのでお年賀の挨拶にはっておきます。


EY-Officeはこんなお客様を探しています

いよいよ本題です。昨年は全力で教育をやってきましたが、今年は教育に加え開発も力を入れていきたいと思います。
そこで、お客様の募集です。みなさまの近くに、こんなお客様はいらっしゃらないでしょうか?

  • 新規の事業(サービス)を始めたいが、事業に必要なシステムの開発者が見つからない
  • SIerに見積もりを取ったけど高すぎる
  • システムの仕様を書けと言われるがどうしら良いのか判らない
  • 開発期間が長すぎて、すぐに事業が始められない

EY-Officeでは、このようなお客様に、システムを比較的安価で、なるべく早く事業を開始できるような形で提供できます。

EY-Officeで提供出来るシステム

  • お客様にお伺いし、事業(サービス)内容をお話いただき、プロトタイプを作る事でシステムの仕様を決めて行きます
    • お客様は事業(サービス)のイメージ、重要な点、事業計画をお話下さい
    • お伺いした結果から、こちらで重要な部分の一部(プロトタイプ)を作ります。それを元に、お客様とさらに仕様を詰めて行きます。
  • 事業(サービス)に必要な最低限の機能のみを作り早くサービスを開始できるようにします
    • 実際にサービスを始めてみないと、判らない事も多いと思います。その場合は開発をフェーズ分けし、サービスに必要な部分のみ作り、サービスを早く開始できるようにします
  • 適当なタイミングで見積もりを差し上げます
    • お話をお伺いしただけでは、漠然とした見積もりしか出せない場合もありますが、なるべく早いタイミングでお見積もり差し上げます
    • 開発をフェーズ分けした場合は、フェーズ毎に見積もります
  • 多少の仕様変更はかまいません
    • 実際に作ってみないと判らない事は多くあります、プロトタイプは仕様を決めるためのものですので、プロトタイプを見てからの変更は問題ありません
    • また、開発が始まってからも多少の変更はお受けします
    • ただし、開発にとって変更の影響が大きい場合は、スケジュール調整・再見積をお願いする場合があります
  • サービスを動かす、サーバーはクラウドVPS等から適切なものを提案いたします
    • サーバーの設定、ソフトのインストール等も行います
    • また、サーバーの基本的な監視やトラブル対応も行います
  • デザインに付いてはご相談させて下さい
    • EY-Officeにはデザイナーはおりませんので、お客様で用意して頂くか。または、適切なデザイナーを探します
    • お客様で用意して頂く場合には、PhotoshopIllustrator で作成したものでかまいません
  • 開発成果・運用情報を引き継ぎ可能なように準備いたします
    • EY-Officeは私一人で開発している会社です。私が万一開発や運用が続けれない場合は、他の開発会社にプログラム・運用情報を引き継げるようにしておきます
    • プログラム(ソースコード)はgitで管理し、またサーバーの管理情報もChef等を使い引き継ぎ可能な状態にします
  • お客様とは長くお付き合いしたいです
    • サービスのリリース後、一定期間は不具合の対応や簡単な変更に応じます
    • 一定期間終了後は、一定のメンテナンス料を頂き、不具合の対応や簡単な変更を行います
    • メンテナンス料の範囲内で出来ないような変更の場合は、別途お見積もりさしあげます
    • 技術的な件でのご相談はお受けいたします

少し条件があります

  • システムはインターネット(クラウド)上で動くもの(例えばネットショップやネットを使った新たなビジネスなど)
    • お客様の会社内のみで動くシステムは残念ながら出来ません
  • 打ち合わせなど必要があれば、お客様の会社にお伺いしますが、開発は基本的にEY-Office社内で行います
  • 大規模なシステム
    • どのくらいからが大規模なのかの定義は難しいですが 100画面ぐらのシステムは問題ないです
  • プログラミング言語フレームワーク等はEY-Officeで決めます

実績

いままでに、EY-Officeで作ってきたシステムの例です

ネットショップ

http://www.boro.co.jp

  • ネットショップ
  • ショッピングカート・カード決済
  • 各種割引、ポイント管理
  • 商品、在庫、顧客の管理
  • 外部在庫管理システムとの連携
  • 特徴:管理画面の充実、長年の機能追加に耐える設計・実装
  • フレームワークRuby on Rails
タレントさんとSkypeでお話ができるサービスの予約管理システム


  • お話の予約管理
  • 会員管理
  • タレントさんの予定管理
  • 入金・ポイントの管理
  • サービスは、お客様の都合で終了しました
  • 特徴:お客様の事業計画にあわせ、短納期で開発
  • フレームワークRuby on Rails
iPhoneアプリのアプリ内課金コンテンツの管理システム

https://itunes.apple.com/jp/app/kotobanku-guo-yu-ci-dian-ying/id417674208?mt=8&uo=4&at=10l3IF

  • 有料コンテンツの管理
  • ダウンロード状況のレポート
  • アプリ内広告の管理
  • 注:初期版の設計・開発・運用サポート
  • 特徴:高負荷に備えてのサーバーの分散
  • フレームワークRuby on Rails
スポーツ競技の成績集計システム

http://www.alhockey.jp

  • 試合スコアーの登録
  • 選手の各種成績の集計
  • チームの各種成績の集計
  • チーム・選手・試合の管理
  • 注:サーバー管理は別会社
  • 特徴:アイスホッケーの複雑な集計ルールに対応
  • フレームワーク:独自のPerlフレームワーク
SNS


  • プロフィール
  • 日記
  • コミュニティー・掲示板
  • メッセージ
  • コミュニティーなどの管理機能
  • サービスは、お客様の都合で終了しました
  • 注:初期版の設計・開発・運用サポート
  • 特徴: Javaで作ったわりには短納期
  • フレームワーク: Seaser2

墓頭(ボズ)

墓頭

墓頭を読みました。内容はAmazonの内容紹介にあるようにドキドキしながら一気に読みたくなる小説です。

1955年。頭に、双子の片割れの死体が埋まったこぶを持って生まれ、周りの人間を次々と死に追いやる宿命を背負った男―ボズ。異能の子供ばかりを集めた福祉施設「白鳥塾」に収容され育つが、そこで出会った少年少女―ヒョウゴ、シロウ、ユウジン、アンジュらによって、ボズの運命は大きく変わっていく―。70年代の香港九龍城、80年代のカンボジア内戦を経て、インド洋の孤島での大量殺戮事件にいたるまで―底なしの孤独と絶望をひきずって、戦後アジアの50年を生きた男の壮大な神話が、いま開幕する。

壮大な物語ですが、巧妙な最後にはなぜか爽快に気持ちになれる良い物語でした。
それから映画で見てみたいです、原作を完全に再現すにはかなりお金がかかるでしょうけど、ややB級な作りでもスリリングな感じが出ていれば是非みてみたいです。

『マルレク第七回テーマ:「型の理論」と証明支援システム -- COQの世界 』に行ってきました

ひさしぶりに頭がグルグルする講演(勉強会)に行ってきました。

講演の概要はここ の講演概要を読んで下さい。資料は ここ からダウンロードできます。

感想

  • 万年Haskell弱者である私には、なぜHaskellerが 型 型 型 型 いうのかが理解出来なかったのですが、今回学んだ(ちゃんと理解は出来てませんが・・・) "Propositions as Types"、 "Proofs as Terms" (PAT) から来ているのだということで、腑に落ちた気がします(まだ気がしますレベルですが)
  • Homotopy Type Theoryという最新の型の論理の証明は、なんと GitHub に Coqで書かれた証明がアップされていて検証・討議できるようになっています! プログラマーのみなさんの大好きな Pull Requestも出せます(現在0ですが、Issueはたくさん出てますね)
  • Coq は自動的に証明してくれるようなソフトではなくて、証明を手伝ってくれるソフトです。証明のやり方などは人間が指示、ようするにプログラムのような物でを書く事で、ソフトが後の単純作業をやってくれるものです。
    • また、いくつもの 演繹や定理(tactic)のデータベースを持っていて、それを検索し利用できます。
    • ちなみに通常のプログラミング言語のような使い方も出来ますが、いろいろな部分が公理からの演繹で行われるので、速度とかは実用的ではないです。1 + 10000 を計算させると Stack overflow Warningが出ます(10000 + 1 では出ません)
    • ダウンロードやチュートリアルhttp://coq.inria.fr 。日本語の入門が ここ にありました、ありがたや、ありがたや。
    • 日々の仕事に嫌気がさした時に、Coqで遊ぶと仙人の気分に浸れるかもしれません :-)

安全にクリーンインストールでMac OSのアップデートを行う方法

OSのアップデートを行うには、従来のデータやプログラムを残したままアップデートする方法と、ディスクを消去して新規にインストールするクリーンインストールがあります。私はクリーンインストールが好きです、理由は

  • アプリやOSが使っていたテンポラリーなファイル等がリセットされる
  • 不要なプログラムやデータを掃除できる
  • OSが安定に動作する(かも)

ただし、クリーンインストールではディスクを消去してしまうのでバックアップから情報を戻しますが、まれにファイル単位では復旧できな情報もあったりするので注意が必要です。
そこで、私が行ってる安全にクリーンインストールMac OSのアップデートを行う方法を書きます。


用意するもの

  • USBメモリー: Mavericksの場合は 8Gbyte以上の容量が必要です
  • 現在使っているMacの内蔵SSD/HDDと同等の大きさの外部HDD: ブート可能な内蔵SSD/HDDのコピーを作ります。容量は正確には内蔵SSD/HDDの使用領域の容量より少し大きい外付けのHDD(SSD)です。USB接続で良いです(もちろんThunderboltなら作業が早く済むと思います)。

注: 外部ディスクに2つのパーティションを作って、Mavericksインストルー用とコピー用に使うことも出来ます。

手順

1. 新OSのインストールUSBを作る

ダウンロードした、Mavericksはそのままではクリーンインストール出来ないので、ここの手順を参考にMavericksをインストール出来るUSBメモリーを作ってください。

2. TimeMatchin等のバックアップ

外付けHDDにコピーを作りますが、そこで間違うことも考えられるので、TimeMatchin等でバックアップを作っておいてください。

3. 外部HDDへのフルコピー
  1. Macをshutdownします
  2. Mavericksインストール用USB、 外付けHDDを接続
  3. option(alt)キーを押しながら電源ON、ブートデバイスとしてインストール用USBを選択
  4. インストール画面が起動されたらUnilitiesメニューからTerminalを選択
  5. ターミナル上で各ディスクのデバイス名を確認し、asrコマンドでディスクをコピー
$ df

# dfの表示から、sourceになる内蔵SSD/HDDのFilesystem名 (/dev/diskNNN)と外付けHDDのFilesystem名 (/dev/diskMMM) 
# を調べる

$ asr restore --source /dev/diskNNN --target /dev/diskMMM --erase --noverify

ディスク容量によってはかなり時間がかかります。私のMac(SSD 512Gbyte)をUSB2の外部ディスクにコピーした時には 6時間かかりました。

4. 外部HDDからのブート確認
  1. Macをshutdownします
  2. option(alt)キーを押しながら電源ON、外付けHDDを選択
  3. 旧OSのMacが起動される事を確認
  4. Macをshutdown
  5. 外付けHDDを外します
5. 新OSのクリーンインストール
  1. option(alt)キーを押しながら電源ON、インストール用USBを選択
  2. インストール画面が起動されたらDisk Unilityを使い、内蔵SSD/HDDを消去(Format)
  3. Disk Unilityを終了
  4. インストール画面からMavericksのインストールを実行
6. 外部HDDから必要なファイルのコピー
  1. 外付けHDDを接続し、必要なファイル・フォルダー等をコピー
万が一の時は、外部HDDから旧OSをブート

一部の情報は、アプリを起動しないと書き出せないものもあります。新OSになってからそのような情報に気がついた場合には、外付けHDDからブートし必要な情報を内蔵SSD/HDDに書き出します。
また、新OSでは上手く動作しないソフトがあった場合にも、旧OSが使えるので安心です :-)

私も今回のアップデートで、iOS開発用の秘密キーをファイルに書き出すのを忘れていたのですが、外部HDDからブートし無事に秘密キーを書き出せました(キーチェインのファイルをコピーすればだいじょうぶという説もありますが)。

Mavericks(Mac OS X 10.9)にRuby1.8.7をインストールする方法

今さら最新のMac OSRuby 1.8.7 をインストールする人は少ないかもしれませんが、もろもろの理由でRuby 1.8.7が必要なのでインストールしてみました。

特に新しい情報はありませんが、brew, rbenv を使ってインストールしました。

% brew install apple-gcc42
% CC=/usr/local/bin/gcc-4.2 RUBY_CONFIGURE_OPTS="--without-tcl --without-tk" rbenv install 1.8.7-p374
% rbenv shell 1.8.7-p374

RubyWorld Conference 2013 に参加しました

RubyWorld Conference 2013に参加し、教育関連の発表してきました。発表の方は 会社Blog を見て下さい。

http://www.rubyworld-conf.org/images/masthead.jpg

初めて RubyWorld Conference に参加した感想を書いてみます。

Matzは松江生まれでないという衝撃の事実を知る!

Rubyの作者、まつもとゆきひろさん は島根県松江市に生まれ育ち、そしてUターンし松江市に住んでいるんだと勝手に思っていました。だからこそ松江市島根県Ruby に 大幅にコミットしているのだと。

初めて行った松江市の風景、宍道湖へと流れる穏やかな川が流れや広々とした風景が Ruby言語に与えた影響があるのかなぁ〜 と思いながら控え室で まつもとさんに 聞いたところ、母方の家系は島根の人だけど、まつもとさん自身はNaCl(株式会社ネットワーク応用通信研究所)にジョインするまでは、まったく松江と関係が無かったそうです!
ちなみに、その時ちかくにいた方も私同様に衝撃を受けていました :-)

市長、県知事、国のお役人が参加するカンファレンス

オープニングセレモニーは

前日のウェルカムパティーも由緒ありそうな料亭・・・ 1日目レセプションには大きなお魚の活き作り・・・ まつもとさんの偉さを実感しました。

島根、松江の お・も・て・な・し

会場のくにびきメッセには、抹茶のサービスコーナー、島根県松江市の観光案内ブースがありました。またスタッフは市役所だけでなく、一畑電気鉄道などの地元企業の方も。

スピーカーには、ウェルカムパティー以外にも 美味しいお弁当、広い控え室、コーヒー・・・ 等々のサービス。 RubyWorld Conference 参加は スピーカーが断然お得です :-)

さらに、井上(NaCl)社長の 脅威の ホスピタリティー !! で、とても楽しいカンファレンスの日々をすごせました。

だんだん

S3へのアップロード速度を上げる方法

以前、S3への転送が遅い件について に書いたように、自宅 Mac mini からS3へのバックアップファイル転送ですが、単純に aws-sdk(Ruby版)を使うより2倍程度になったので書いておきます。


aws-sdk でのアップロードプログラム

次のようなコードで、ローカルにある PATH_TO_FILE ファイルを S3 の BUCKET_NAME にコピー出来ます(もちろん、access_key_idやsecret_access_keyにはあなたのキーを設定して下さい)。

#!/usr/bin/env ruby
require 'rubygems'
require 'aws-sdk'

AWS.config(
  :access_key_id     => 'XXXXXXXXXXXXXXX',
  :secret_access_key => 'YYYYYYYYYYYYYYY',
  :s3_endpoint       => 's3.amazonaws.com'
)
s3 = AWS::S3.new
bucket = s3.buckets['BUCKET_NAME']
path = 'PATH_TO_FILE'
obj = bucket.objects[File.basename(path)]
obj.write(:file => path)

writeメソッドのオプションを指定しよう

AWS::S3::S3Objectのwriteメソッドのドキュメントを見ると、いくつかオプションがあります。ここで転送速度と関係しそうなものには

  • : single_request 転送を一回で行うか、分割して行うか。デフォルトは分割(false)
  • :multipart_threshold 小さいファイルの場合は分割しない、しきい値。デフォルト 16Mbye
  • : multipart_min_part_size 分割する際の大きさ。デフォルト 5Mbye

今回はバックアップなので転送するファイルは 数100Mbye〜数Gbyte です。 デフォルトだと5Mbyeのファイルに分割して送っています。試しに multipart_min_part_size を大きくしたところ、転送時間が多少改善しました。

:single_request => true にして試したところ、デフォルトの半分程度の転送時間になりました!

single_requestで送るとということは一旦ファイルをメモリーに全部取り込んでからS3へ転送されます、したがってメモリーを大量に消費します。バックアップを行っている時に Mac mini は他には何も行っていないので今回は問題ないですが、使用環境によっては multipart_min_part_size を調整する方が良い場合もあると思います。