excel2canvas

2013年7月 1日 (月)

FLECT OSS Libraryが公開になりました。

こんにちは

なんと、今日から7月です。つまり2013年ももう半分終わってしまいました。。。(--

そして、小西がFLECTに入社してからちょうど1年半たったということでもあります。
はやっ!年々時が経つのが速くなっているようでかないませんな。(--

ちなみにこのブログを書き始めたのは2012年の5月末です。1年1カ月で記事数31件。
さぼっている時期もありますがだいたい月に2回位書いている計算ですね。もうちょっと頑張ります。

 

★FLECT OSS Libraryとは

これです。

http://oss.flect.co.jp/

この1年半で僕が作ったものがあらかた入っている感じですね。内容はかなり雑多な感じです。なんでこういうものを作ろうと思ったかは以前にも書いたので割愛します。

個人的に汎用性の高いモノ、開発者にとって有益なモノを作りたいという志向性が強いのでこういう形での開発はテンションがあがります。(^^;

 

★Salesforce関連

思い起こせば1年半前、Salesforceを外部からAPI連携するのをやりやすくするライブラリを整備してほしいというお題に対して、いきなりSOAPClientから作り始めたのがFLECTでのキャリアの始まりでした。

それをベースにして作成したSalesforce APIのラッパーがSalesforceClientで、これでどれ位のことができるかを示すために作成したアプリが、Salesforce Explorerです。

完全に上司の想像のナナメ上をいっていたと思います。(^^;

Salesforceを使う開発者ならそれなりに便利に使えると思うので興味ある人は触ってみると良いかもしれません。(多分)

 

★Excel関連

excel2canvasはHTML5Canvasの調査をしている時に「絵心無いし、Canvasにテスト描画する適当なものが思いつかねー(--」と困ったあげくなんとなくExcelをそのまま描画してみようと思い立ったのが最初です。凝り性なのでやり始めると最初のお題からまったく関係ないシロモノになっていきましたがそこはそれ。(^^;R&Dとはそういうものです。(キッパリ)

これ、何気にSlideも結構なViewを稼いでいるし少なくとも日本では絶対うける思うんですけどね。どの位Excelを再現できるかはサービス化を目論んで開発したExcelReportで確認できるので、なんか適当な帳票フォーマットをExcelで持っている人はアップロードしてみてください。

 うまくブラウザで描画されないという場合は連絡くれれば可能な限り直します。(多分)

 

★その他

あとはHeroku上で動かすことを前提として作成したアプリをいくつか公開しています。

ちなみに最近作っているアプリは全部Play2で開発しています。社内のHerokuチームが使用している言語はPlay1なんですが、最近はメンテもされてないようなので次期主力言語として使えるかどうかを評価するという目的も兼ねています。

ちなみにPlay2の評価は。。。うーん、どうなんだろう?(--
まだまだベストプラクティスを模索している状態なので、書いていてももっと良い書き方があるんじゃないの?とか、本当にこんなめんどくさいことを毎回書かないといけないのか?とか思うこともしばしばです。

(↑もっとも、Scalaのおかげで圧倒的に楽になっている部分もあるので、このように不満点だけをあげるのは正当な評価ではありません。Play2については近日資料にまとめるつもりです。)

とにかく最近はHerokuが面白くてしょうがないので、Herokuを便利に使うための小物ツールをもうちょっと作っていこうかなと思っています。まだOSS Libraryにはリストされてませんが現在つくっているものもHerokuユーザーにとってはかなり便利です。(多分)

 

会社としても絶賛Herokuエンジニア募集中なので興味ある人は覗いてみてください。

2013年4月 5日 (金)

Heroku meetup #8

こんにちは

Heroku meetup #8に行ってきました。
てか、WAZAレポとLTでしゃべってきました。(^^;

久々に人前で喋ったのとMacでプレゼンやったのが初めてだったのとでかなりテンパリましたね。(--
もうちょっと素振りしてから望むべきでした。あいすいません。m(_ _)m

僕のことはともかく内容的にはかなり面白いミートアップだったと思います。
以下内容を振り返ります。

 

★オープニング

まず最初にHerokuの相澤さんによる3つのフィーチャーピックアップがありました。

 

1、PostgreSQL 9.2のこと

ちょっと前にPostgreSQLを9.1から9.2にアップデートするエントリを書きましたが、現在はオプション付けずとも9.2になるそうです。めでたい。(^^v

実は昨日たまたま新しくHerokuPostgresを追加する機会があったんですが、これのバージョンを確認すると9.2.4になってました。(もっとも、この時は「--version=9.2」をつけて追加しましたけど)

これを書きながらPostgreSQL本家に最新版のバージョンを確認しに行ったんですが、、お、最新版のバージョンも9.2.4。。。

。。。あれ???

リリース日 2013年4月4日!!?

昨日やんけ。。。。

気になって他のアプリのPostgreSQLバージョンも確認したところ、9.2系はすべて9.2.4に、9.1系はすべて9.1.9(9.2.4と同時リリースの9.1系最新版)になっているようです。

あ~、数日前にHerokuからDBメンテナンスのアナウンスが来てたのはこれかぁ。。。
リリースアナウンスに

 

These releases fix a number of bugs in previous releases, including a serious security issue.

Users are strongly advised to upgrade as soon as possible.

 

とあるからセキュリティ上の問題で緊急に全部のDBをアップデートしたのね。。。

しかし、それにしても素早い!
逆算すると完全に本家のリリースよりも先に作業してるよ。(^^;;;

HerokuのPostgreSQLへの力の入れ具合がわかるというものです。
JavaはいまだにJava6がデフォルトなのにね。(--

 

2、2X Dynoのこと

メモリが従来の2倍(1024MB)のDynoが使えるようになるということです。

これは正直かなり嬉しい!!!

Javaでアプリを作っているとやっぱりどうしてもメモリは食うので。(R14 Memory quota exceededの警告ログが延々と出続けるのは日常茶飯事)

お値段も2倍ですが、これは多分使います。(^^v

現在ベータ版扱いだそうでまだ一般ユーザーには公開されてないとのことでしたが、僕のHerokuコンソールには普通に設定UIが表示されてますね。周囲の同僚も同様。パートナー企業だからかな?

 

3、OAuthのこと

HerokuがOAuthのサービスプロバイダになるそうです。

つまり自分の作ったアプリからHerokuアカウントで認証して許可をもらったあれやこれやの情報をゴニョゴニョするようなアプリを作れる。

.。。。と、いうことはわかるんですが、正直Herokuアカウントにひもづく情報はそれなりに機密性の高い情報ばかりなんじゃないの?という気がしていて何が認可対象になるのかイマイチぴんときてません。

例えば僕は現在社内需要からS3にあるPapertrailのアーカイブログをダウンロードして解析するアプリを作ろうかと思っていますが、こういうのはコンシューマアプリの候補になりえるのかな?

まだまだ絶賛開発中らしいので当面は静観ですかね。

 

★Treasure Data

さてお次はTreasure Dataの中川さんのセッションです。

最近なにかと話題のBigDataを扱う快進撃ベンチャー。

Herokuとの連携はprintlnでJSONを標準出力に書けば良いだけなのでとてもお手軽です。ていうかこれ以上簡単にしようがないですよね。(^^;

僕は最近評価目的で無償版を入れましたけど、中の人に「使うかどうかわからないけどとりあえずデータを突っ込んでおくという使い方はアリなの?」と尋ねたところ「よっぽど行儀の悪い使い方をしない限り全然OKです。」という回答だったのでしばらくアクセスログ的なものを突っ込んでみようかと思ってます。

ちょっとでも開発コストがかかるならこういう使い方はしないですけど、まぁprintlnだけですしね。(^^;;;

ちなみにもうじきPigにも対応するらしいです。

 

★WAZAレポ

そして次は僕も含む4人のWAZAレポート。

僕自身は向こうで演者の人達とだいたい一緒に行動していたのでうんうんという感じでしたがWAZAというイベントとHerokuという会社のことが少しは伝わったでしょうか?

皆さんと僕自身も何度も言っていましたが、一番重要なことはHerokuという会社がものすごくオープンでフレンドリーだと言うことです。ブラックボックスが少ないということは開発者にとってとてつもないメリットだと思います。

そしてもう一つ重要なことはランチの行列はなんとかすべきだということです。

 

★ライトニングトーク

鬼畜相澤の無情の3分制限をかけられたライトニングトーク(^^;;;

僕はそれ以前に初めてプロジェクタにつないだMacの画面が小さすぎて下の方が全く見えないという残念感で説明するのをあきらめたところがあるんですが。。。(--

あんなんで果たして内容伝わったかな???(^^;;;
ベースとなる技術のソースはGitHubにあって、何ができるかを解説したスライドも書いたんで興味ある方はご覧になってください。

今のところこの先どうするというあてはありません。(爆)

##追記

PostgreSQLの話はherokuのblogで公式アナウンスがでてますね。

https://blog.heroku.com/archives/2013/4/4/heroku_postgres_databases_patched

2012年7月 9日 (月)

ExcelをHTML5Canvasに描画するお話

こんにちは、小西です。

FLECTではExcelをWebブラウザ上に描画する技術(Excel2Canvas)を開発しており、そのサンプルアプリケーションを公開していますが、この技術は非常に応用範囲の広いものだと考えています。
その応用例のひとつとして現在Evernoteで行われているプログラミングコンテスト(DEVCUP)にEvernoteに添付したExcelファイルをブラウザ上でインラインに表示/共有できるアプリを出品しています。

http://devcup.evernote.com/submissions/8567-excelnote

元々はExcel2Canvasを何に使おうかなということを考えていた段階でたまたまEvernoteでDEVCUPをやっていることに気がついて、じゃこれに出してみようかと軽い気持ちで作成したものです。
なので準備期間も短く、ドメインもherokuappのままなのでどうかとは思いますが実用性は実はエントリ作品の中でもかなり高いほうなんじゃないかと思っています。(ちなみにDEVCUPへの出品自体は個人活動ですが、heroku上で動作するアプリケーションやAddOnがどの程度使えるかを検証することは業務です。)

現在絶賛一般投票中なので、もしよろしければ左上のVoteボタンをクリックしてやってください。(^^;
1日に1回投票できるので毎日投票してくれても良いです。(^^;;;

これだけではなんなので今日はExcel2Canvasが中でどういうことをやっているかについて解説してみたいと思います。

★サーバーサイド

サーバーサイドではApache POIを使ってExcelの情報を抜き出しています。
取得する情報は以下の4つに分解しています。

背景色情報
  - セルの背景色
  - 網掛けなどのパターン種別
  - パターンの色

罫線情報
  - セルの4辺のどこに罫線が引かれているか
  - 罫線の種別(太線、ダッシュ線など)
  - 罫線の色

画像情報
  - 添付されている画像(jpeg,png)のバイナリとその位置

文字(セル)情報
  - 書式設定を適用したセルの値(計算式の場合はその計算結果)
  - 右寄せ、左寄せなどの位置情報
  - フォントと文字装飾と色
  - セルの結合情報

これら4種の情報をひとつのJSONにまとめてクライアントに返しています。

★クライアントサイド

クライアント側ではサーバーから返された情報をCanvasに描画しています。
具体的には以下の順序で処理を行っています。

1、背景色情報でCanvasを塗りつぶし
2、罫線情報でラインを引く
3、画像情報をimgタグでCanvas上に絶対位置で配置
4、文字情報をセルごとにdivタグにして絶対位置で配置

右寄せや左寄せなどのセル内での位置はそれぞれCSSでclass定義しています。

ちなみに背景色や罫線は現時点ではサーバー側から情報は取れていてもすべてを描画はしていません。
たとえば背景色の場合現在行っているのは単色での塗りつぶしのみでパターンの描画はしていません。
もちろん網掛けなんかは自分で少しずつ位置をずらしながらlineToを繰り返せば描画できるわけですが、Excelのサポートする描画パターンを調べ上げてそれに一つずつ対応するというのはさすがにちょっと。。。。めんどくさいんですよ!(言っちゃった。。。(--)
同様に罫線についても長線・短線・短線のような3組で1パターンとなるような線種については未実装です。(シンプルな単線になります。)

若干言い訳くさいですが、サポートするパターンが増えればそれだけjsファイルは肥大化するので、いずれにせよどこかでこういう線引きは必要です。
(もちろん使用頻度の高そうなものを今後実装するのはやぶさかではありません。)

以上、実際には罫線の情報をある程度まとめたり、セルをはみだした長い文字列を結合したりなどの最適化処理も行っていますが、基本的にはこれだけです。

★POIの話

POIのAPIドキュメントを見ると上に挙げた情報はAPIで普通に取れそうに見えます。まぁもちろんそう思ったからこそ作り始めたわけですし、実際最初のプロトを作るまでには2日とかかりませんでした。
が、実際にはそこから先が茨の道です。

以下いくつかはまりどころをあげてみます。

色の取得の仕方がxlsとxlsxで異なる

背景などの色の持ち方はxlsの場合IndexedColorと言って「1番は何色、2番は何色」というようにワークブックごとに番号と色の対応が決まっています。
一方xlsxの場合はIndexedColorの他にRGBでの指定やテーマでの色指定など複数のデータの持ち方があります。
が、POIのxls/xlsx共通インターフェースから取得できるのは多くの場合IndexedColorだけなのでxlsxの場合はキャストして専用APIを使用して色を取得する必要があります。
(ちなみにテーマを使用した場合の色の取得方法がMSのドキュメントを見てもどうしてもわからなかったので現在未対応です。)

日本語日付書式全滅

Excelでは内部的に日付データはDoubleで持っており、どんなライブラリを使用する場合でも日付の扱いは鬼門となるんですが、POIでの日本語日付の扱いはお話にならない位ひどいです。(--
仕方がないので

http://support.microsoft.com/kb/883199/ja

を参考に日付書式のパーサーを全部自分で書き直しましたが、今度は逆に日本語以外の書式設定が正しく扱えていないのではないかという不安はあります。

列幅の計算がやっかい

Excelではセルの列幅を「デフォルトフォントの文字何個分」というデータの持ち方をしています。例えば日本語版Excelの場合は初期状態で列幅は「8.38」となっていますが、これは「MS Pゴシック11ptで数字が8.38文字収まる幅」という意味です。
英語版Excelの場合はデフォルトフォントは(おそらく)Arial10ptなので、同じ数字であってもセル幅は異なります。
しかもデフォルトフォントからセル幅を計算する方法も結局地道に実測して割り出したので非常に面倒です。(GraphicsContextに描画してstringWidthを取るという方法も試しましたが、結局微妙な幅があわずにあきらめました。)

現状対応しているデフォルトフォントは「MS Pゴシック11pt」と「Arial10pt」のみなのでそれ以外をデフォルトフォントとするファイルがある場合はセル幅が微妙にずれるはずです。(--

計算式がどの程度サポートされているのか謎

何故かWeekday関数がサポートされていなかったり。。。
Subtotal関数がものすごく根本的なところでバグっていたり。。。
と正直計算式がどの程度ちゃんと動くのかは未知数です。
直せるところは自分で直したりPOIにバグレポをあげたりもしていますが、おそらくこの辺りはPOIの中でもあまりたたかれていない部分のような気がするので他にも色々と問題はありそうです。

などなど。
他にもいっぱいありますが、それ以外にもまだ気がついていない問題もたくさんあるだろうとは思っています。

★Excel2Canvasの今後

FLECTの主業務はSIなのでとりあえずはその方向での活用していくことになります。具体的なターゲットとしてはまず帳票を考えていて、Excelで作成した帳票フォーマットがそのままブラウザで表示できてさらにブラウザから印刷までできるとなるとかなりニーズはありそうです。

Excel2Canvas自体の機能としては今後、グラフや条件付き書式に対応できると良いなと思っていますが時期は未定です。また、それらは対応するとしてもおそらくxlsxのみの対応となります。(POIにはそれらを取得するためのAPIがないので、ooxmlから直で情報を取得することになるからです。)

グラフは一度トライしかけたんですが、そもそもExcelで思ったとおりのグラフを作ることができなくてコードを書く以前のところで挫折しました。(^^;;;

正直その辺まで来ると自分ひとりの手には余ると思っていて、オープンソース化なども検討していますが、当面そのための作業の優先順位は低いです。

2012年6月20日 (水)

ExcelNote iframe sample

This is ExcelNote sample.

The table displayed below is an Excel file attached in Evernote.

Excelをブラウザ上に表示する技術は何かにてきようできないかなぁと考えてEvernoteアプリに仕立ててみました。

興味のある方はご覧になってください。

https://excelnote.herokuapp.com/

2012年5月29日 (火)

Excel2Canvasを公開しました

こんにちは。
FLECTの小西と申します。

会社ではラボ的に最新技術の検証や調査をやっています。
キーワード的には

heroku, playframework, HTML5, Salesforce

といったあたりがメインですかね。

クラウドを事業領域とする会社なので、これらに限らず世にあるクラウドサービスAPIはとりあえず試してみるという勢いでいろいろなものに手を出しています。(^^;

で、その中でなかば偶然生まれたExcel2CanvasというExcelをWebブラウザ上に表示するサンプルアプリケーションがこの度公開されました。

http://excel2canvas.herokuapp.com/

これはApache POIで抜き出した罫線や背景の情報をHTML5のCanvasに描画して、その上にDivで文字列を配置したものです。
思いつきでちょっと作ってみただけなんですが、意外と良い感じに出力されています。
ちなみに検証もかねてPlayframework 2.0(Scala)です。

それにあわせて開発での技術的なポイントなどをブログに書きなさいという会社からのお達しもあるので、これからぼちぼちと書いていきます。

それではよろしくお願いします。

採用情報

株式会社フレクトでは、事業拡大のため、
Salesforce/Force.comのアプリケーション
開発
HerokuやAWSなどのクラウドプラッ
トフォーム上でのWebアプリケーション開発

エンジニア、マネージャーを募集中です。

未経験でも、これからクラウドをやってみた
い方、是非ご応募下さい。

フレクト採用ページへ

会社紹介

株式会社フレクトは、
認定コンサルタント
認定上級デベロッパー
認定デベロッパー
が在籍している、
セールスフォースパートナーです。
heroku partnersにも登録されています。
herokuパートナー
株式会社フレクトのSalesforce/Force.com
導入支援サービス
弊社の認定プロフェッショナルが支援致します。
・Visualforce/Apexによるアプリ開発
・Salesforceと連携するWebアプリ開発
も承っております。
セールスフォースご検討の際は、
お気軽にお問合せください。
Powered by Six Apart