Archive for 12月, 2009
今回もちょっと本の紹介です。
この本は、実は以前、同じ会社で二人三脚でサイト向けパッケージやら、携帯ASPやらを立ち上げた時の知人が書いたものです。
「モバイルマーケティングを活性化する 企業携帯サイトの構築」なんて名前がついていますが、
要はサービスを考える上でのマーケティングの考え方をどのように実現するか?という事を、
変化の早い携帯という世界で物事を考えると、今と昔というのを対峙しやすいというというとらえ方で読んでいただければ、
「携帯」に関係がないという方でも読んでいただけるでしょうし、また、携帯を持っている方が、携帯でどのような情報を入手し、
また、企業はどのような情報を提供しているか?という視点で見れば、携帯というツールを使って、どのように消費者の意志決定が変わってきているか?ということを知る手がかりにもなると思います。
もう一つは、どのような企業体質を作ると企業携帯サイト(つまり、システム)が作りやすく、また、成功しやすいか?なども盛り込まれています。
この手の話はエンジニアたちはすでに実感し知っており、(当たり前といえば当たり前で、)
SIなどをやっていても、ミーティングでは企業ルールを変えられないか?ということを、効果と金額の面から含めてコンサルをして、間接的ではあるが、企業の体質の変化に意見を出してきているわけです。にも関わらず、いざ、社内の事となると、全く、その実績や効果を持ち帰ることができず、結果、弱い企業体質になってしまうなんてことも実感していると思います。
なぜか、他社の企業体質(効率化)のコンサルをやっている人たちに対して、自社の経営者・上司たちはそのフィードバックを求めない不思議な世界です。(せっかく、失敗、成功の逸話があるのに・・・失敗なんてお金もらってしてるんだから、これほどおいしい話はないはずなのに・・・)
さて、エンジニアたちはその必要性があると認識して、伝えたいとしても、それを表現する時間や、伝える言語がよくわからない。
という事があります。
そんなときに、この本は部分的にではありますが、それらの意見を代弁してくれると思っています。
是非、見かけたら手にとって見てください。
OfficeOpenXML形式のエクセルファイルを読めないのかなとおもいためしてみました。
でも、今はまだ、単純にCellの内容(値)を取得できるレベルです。
(当たり前ですが、100% ActionScriptです。AIRライブラリを含む・・・)
OfficeOpenXML形式とは、Excel2007 などからサポートされた形式で拡張子がxlsxになっています。Excel2003などでも、変換ツールがMicrosoftから公開されていて、これらの拡張子のファイルを開こうとすると、ツールをダウンロードしようとしますので、xlsxのファイルも広く使えるようになっているのではないでしょうか。
実体はいろいろなxmlをzipで圧縮した形式なのでxlsよりもファイルサイズが小さいです。
そして、以前作成したAirでZIP解凍するライブラリとあわせれば、後は通常のXMLの解析なので、OfficeOpenXML形式の仕様とにらめっこすればいいわけです。
(OfficeOpenXMLの仕様はhttp://www.ecma-international.org/publications/standards/Ecma-376.htmからみることができます。)
それに、ZIP解凍するライブラリを作ったのも、半分くらいはこのオフィスファイルを制御するためにつくったのですが・・・
下記例で使うクラスは・・・
import com.coltware.oox.SpreadsheetML; import com.coltware.oox.excel.SMLCell; import com.coltware.oox.excel.SMLRow; import com.coltware.oox.excel.SMLWorkbook; import com.coltware.oox.excel.SMLWorksheet;
です。
まず、エクセルファイルのオープンの方法とワークブックの取得は
var file:File = new File(.....); // ここでxlsxファイルを指定 var excel:SpreadsheetML = new SpreadsheetML(); excel.openFile(file); var workbook:SMLWorkbook = excel.getWorkbook(); excel.closeFile();
ここで、closeFile()としていますが、これは将来、変更もできるようにするためで、いろいろと作業中に作ったゴミの削除をしています。
次に、シートの取得とロードは
var sheet:SMLWorksheet = workbook.getSheetAt(0); sheet.load(); trace(sheet.name); // シートの名前がとれます。
このシート(実際はデータ)はファイルが大きい可能性があるので、最初のopenFileでは読み込んでいません。
使うときに、loadをしてから使うようにします。
後で、ここで非同期loadを作る予定です。
次にシートからRowとCellの取得方法です。
Rowとは縦の1から・・・・で、Cellとは、"A1"とか、"B5"などのように指定するあれです。
Rowの取得
var row:SMLRow = sheet.getRow(119);
if(row){
var cellList:Array = row.getCellList();
for each(var _cell:SMLCell in cellList){
trace(_cell.getCellId() + "->" + _cell.getStringValue());
}
}
SheetにあるすべてのRowをとる
var rowList:Array = sheet.getRowList();
for each(row in rowList){
if(row){
var cellList:Array = row.getCellList();
for each(var cell:SMLCell in cellList){
trace(cell.getCellId() + "=>" + cell.getStringValue());
}
}
}
Sheetから直接Cellもとれます
var cell:SMLCell = sheet.getCell("B3");
if(cell){
// まだ、文字列としてしか値をとれません。
trace(cell.getStringValue());
}
このレベルですが、もし試してみたい方はこちらからswcのダウンロードをどうぞ。
ダウンロード
実は、書き換えもすでにあるsheetのデータでしたら、管理情報も増えないので簡単なのですが、sheetの追加とかになるとちょっとめんどうなのでそれはまだできていません。
名前空間付きのXMLのエレメントの取得方法は以前書いたが、名前空間付きの属性はどのように取得したらいいのだろうか?
下のような例で、sheet要素のr:id属性を取得してみようと思う。
(どこかで見たことあるようなXMLと思った方は、そう、そのデータを解析しているのです。)
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<workbook
xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<fileVersion appName="xl" lastEdited="4" lowestEdited="4" rupBuild="4505" />
<workbookPr defaultThemeVersion="124226" />
<bookViews>
<workbookView xWindow="120" yWindow="120" windowWidth="14940" windowHeight="13500" />
</bookViews>
<sheets>
<sheet name="Sheet1" sheetId="1" r:id="rId1" />
<sheet name="Sheet2" sheetId="2" r:id="rId2" />
<sheet name="Sheet3" sheetId="3" r:id="rId3" />
</sheets>
<calcPr calcId="114210" />
</workbook>
var _xml:XML = XML(data); <-- ここに上の例のXMLがある前提。
var _ns:Namespace = _xml.namespace();
var _nsR:Namespace = _xml.namespace("r");
trace(_xml._ns::sheets._ns::sheet.(@sheetId == "1").@_nsR::id);
という感じで、通常のエレメントと同じように、@_nsR::id のようにすればいいようです。
ちなみに、XMLから値を取得するときに以下のように、条件を記述できるのです。
sheetId属性が"1"のsheet要素を取得するという意味です。
_xml._ns::sheets._ns::sheet.(@sheetId == "1");
これ、最近までしりませんでした。
昨日、mod_chxjに行ったXHTML向けの対応がオリジナルに反映されました。
ここで、私が行ったXHTML向けの変更でXHTMLを書くときに面倒だなとおもった部分を説明しておきます。
といっても、XHTMLの対応するために基礎のなった部分のCSSはかなりはじめからできあがっており、
かなりできていたといっても過言ではないのですが・・・・
1)改行の対応
docomoのXHTMLでは、<br clear="all" />や、<br style="clear:both" />が聞かない(らしい)のです。
そこで、これらがあった場合には<div style="clear:both" /> のように変更しております。
ただし、clearスタイルがない場合には<br />のままです。
2)tableの対応
特にこれはXHTML向けではないのですが、XHTML端末の場合、tableが使えるのでこれを使えるようにしています。
しかし、XHTML向けでない場合には、今まで通りです。
3)object,paramタグの対応
これも特にXHTML向けでもないのですが、XHTML端末に限り使えます。それ以外は消えてしまいます。
まずは現在のWEBを携帯でみるユーザはXHTMLの端末がほとんどといっても過言ではないので、XHTML端末が優先です。
ただし、ドコモで表現できるレベルの属性なので、結局はまだ使えるレベルではないかもしれません。
4)全体的な、clear,floatの対応。
5)絵文字カラー機能
これもXHTMLとは全く関係ありません。
ただし、XHTMLになると文字装飾をしがちになると思います。
そこで、divや、spanなどで色をつけますが、絵文字もその色になってしまうんですよね。
それを強制的に指定した色に変換かけるという機能です。
これを使うには設定がいります。
httpdのconfで
ChxjImodeEmojiColor auto|on|off ( default:off )
のように設定してください。
Onの時は、すべての絵文字変換で
&#xxxxx; が <span color="color">&#xxxxx;</span>
のように変換します。また、せっかくわざわざ別の色で指定していたのに・・・勝手に変換されては困る。という場合に
絵文字がspanもしくはfontのタグの中にあれば色は設定しないというモードがautoです。
ただし、これは<font size="1">&#xxxxx;</font>のように色とは関係がなくても変換しないのでご注意ください。
offは何もしません。
また、emoji.xmlにcolorという新しい設定が必要になりますので、
最新のemoji.xmlをつかうか、それを参考にcolorを設定してください。
また、ここまでの変更で、使えるスタイルは、ドコモが公開しているHTML_XHTML_taglist.pdfというファイルを参考に変換をするにようにしました。ドコモ独自の機能(GPS,utn,アプリ関連等)の属性以外については、ほぼ満たせたと思います。
ただし、まだあんまり使わないだろうなーっていうタグができていません。
現在、以下のタグは対応しました。(順は適当)
(あくまで、以下のタグを私がなおしたというだけです。)
hr
img
div
center
span
br
a
h1-h6
meta
p
input
textarea
table
tr
td/th
object
body
form
select
option
です。
どこぞの商用版でも記述してありましたが、Apacheのモジュールという使いやすさがメリットと記述してありましたが、
やっぱり、Apacheのモジュールとして機能が実装してあるのは、非常に使いやすいなーと感じました。
そしてさらにオープンソースとして気に入っているのが
商用版を使ってもタグの変換ルールが記述されておらず、「自動的に端末ごとに変換」という文句のおかげで、試してみるまでどんなタグになるのかわからない!ってのがあり、かなり苦労しました。
これは、変換のルールがブラックボックスなので何でこの要素がなくなるのかなー。あれ?こっちの端末では同じキャリアでも大丈夫なんだーとか、仕事として第3者のサイトを作っていると変換で多少おかしくなってもきちんと説明できればそれで問題ないのですが、
ルールがブラックボックスだったりすると説明ができないので、余計に仕事が増えてしまって面倒です。
といっても、ソースをみればわかるというのも酷なので、完成したらタグの変換ルールなんかも乗せていきたいと思います。
今までも、何度かメーラを作っていますといっていましたが、やっと、送受信ができているというレベルになりました。
(といってもほんとに、送信と受信が機能的にできているレベルで・・・)
そもそもなぜメーラを作っているかといいますと、
メールを中心にした情報ハブアプリを作りたいなーと思っています。
最近、似たような概念のアプリも出てきたような感じもしつつありますが、
どちらかといえば、ビジネスで使えるようなものを作りたいと思っています。
さらにいえば、Exchangeサーバのような感じの情報共有をサーバなし(メールサーバのみ)で行いたいなと。
後は、やはり、WEBとの情報共有。つまり、ローカルとリモートの情報を意識せずに、情報を共有したいと。
(こちらはもっと機能を求める人のためですが・・・)
そのためにも、AIRなのです。
とはいっても、まずは基本的なメーラをAIRで作成するところから。
メーラといっても、現在のメーラでもいろいろ不満があります。
1)添付ファイルの検索
仕事で添付ファイル中心の人もいるはず。あの添付ファイルは・・・と探しているだけで時間がもったいない。
2)添付ファイルの自動圧縮
本当は暗号化までつけたいけど・・・ここで今までzip圧縮をAIRで作ってきたものが生きてきます。。。
3)すべてのメールからの検索
送信・受信とか分けて考えたくない。だいたい自分のメールにレスされてって感じなのだから、送ったものも、受信したものも一度に見えるようにしたい。
4)タグによる関連メールのサジェスチョン
まずは、自分でタグ付けするのですが、このブログのようにメールをクリックすると関連するメールがありますよ。って感じで出てほしい。
ある案件だったら、同じタグをつければこれで1つのメールを見れば、そのほかのメールも自動的に探せるし。
5)複数メールボックスでも意識しない
複数メールボックスがあっても、すべて同じ一覧に表示したい。
6)広告メールからの受信ボックス
広告メールって、実は結構同じところが出しているから(って自分もその会社で送っていた方だが・・・)、メールのヘッダをみればその性質柄どうしても普通ではあり得ない特徴が出てしまう。
これを判断すれば、広告メールはすべて「広告メール」ボックスにしまってしまうこともできる訳だ。
それと、これは使える人がいればいいが、自分的にはあればいいなーと思うのが拡張アドレスへの対応。
たとえば、
foo-rakuten
など、"foo"というユーザに拡張の"rakuten"を使う。
そして、このfoo-rakutenにきたものは自動的にまとめて管理するなど。
gmailなどはこの拡張アドレスが使えるし、自分でMTAをたてればこの機能が簡単に使える。
これができれば、6)の広告メールからの受信ボックスなどなくても、ショッピングの時は・・・無料会員登録の時は・・・
と、区別して使えるので確実に振り分けができる。
まずはこんな感じにしたいなーと。


