back to home
ホームCONITについて業務内容CONIT LABS.採用情報お問い合わせ
  ホーム > CONIT Labs.
■CALENDAR■
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30   
<<前月 2010年09月 次月>>
■NEW ENTRIES■
■CATEGORIES■
■ARCHIVES■
■LINK■
■PROFILE■
■OTHER■
  • RSS 2.0
  • 処理時間 0.28962秒
  • なかのひと

 

弊社ブログは2010年4月26日からURLを変更いたしました。
ブックマークやRSSで登録されている方は、下記URLへ変更願います。
http://www.conit.co.jp/blog/
今後とも宜しくお願い申し上げます。
2010年4月26日 株式会社コニット

GAEでのデータアップロード
こんにちは 阿久津です。

第1回 Google App Engineを使ってみよう!!
第2回 GAE Datastoreのデータ取得パフォーマンスを検証!!


今回は、GAEでのデータアップロードについてです。

■データアップロードを使うシーンについて

色々と考えられると思いますが、以下の辺りではないかと・・・
・マスタ的に扱うデータモデルのデータを初期登録する
・他の環境で使用していたデータ(mysql,postgre,oracle,sqlserver,db2等)をGAEに移行する
・バックアップしてあったデータをアップする
・パフォーマンステスト用に大量データを投入する

上記に記載した限りではないですが、色々なシーンで活用できるこの機能は、覚えておいた方が便利だと思います。
GAEでのアップロード機能は、至って簡単なものなので実際試してみることをおすすめします!!

ではでは、以下より実際にデータアップロードするための手順をご紹介します。

■事前準備
・まずは、app.yamlに「remote_api」の設定を行います。
- url: /remote_api
script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
login: admin

で、アプリケーションの更新処理を行います。
$ appcfg.py update


■データ準備
今回は、前回から使用しているUserモデルにデータをアップロードすることを考えていますので
awkなどを使って以下の形式のデータを10万行用意してみました。

 サンプル:$awk 'BEGIN{OFS =","; for (i =1; i <= 100000; i++) print("xxx" i,"id" i,"name" i);}' > user.csv

■ローダクラスの作成
以下のようなソースを作成します。(モデルクラスは、インポートするとうまくいかなかったのでこのソースに定義してます。)
from google.appengine.ext import db
from google.appengine.tools import bulkloader

class User(db.Model):
userid=db.StringProperty()
username=db.StringProperty()

class UserLoader(bulkloader.Loader):
def __init__(self):
bulkloader.Loader.__init__(self, 'User',
[('key_name', str),
('userid', str),
('username',str),
])

loaders = [IuserLoader]


■実行
$appcfg.py upload_data --config_file=UserLoader.py --filename=user.csv --kind=User .
(最後のドットは、app.yamlが置いてあるディレクトリを指定してます)

■結果
ちょいと処理はかかるものの無事データアップロードが完了しました。
appcfg.py upload_dataには色々とオプションがあるので、google aap engine documentを参考に設定を変えて試してみるのも
よいと思います。

■次回
 アップロードが出来たので次回は、ダウンロードについてお話したいと思います

| http://www.conit.co.jp/labs/index.php?e=323 |
| Google App Engine | 04:05 PM | comments (0) | trackback (0) |
GAE Datastoreのデータ取得パフォーマンスを検証!!
こんにちは 阿久津です。

前回に続きGAEネタです。

今回は、前回GAEに登録したデータストアのUserエンティティを使用して
検索について調査した結果をご報告します。
(11万件くらい登録されています)

今回もpythonです。

■pythonでの検索方法については、以下3つがあります(まだあるかもしれませんが・・・)
・Queryインタフェースを使用した検索
・GQLQueryインタフェースを使用した検索
・エンティティのID or Name 識別子を使用した検索

詳細は、google app engineのドキュメントを参照ください。

■各検索時のパフォーマンス on GAE
Userモデルより、ある特定のエンティティを3回実行しその平均値を
算出してみました。

・Query
■ queryのfilter()を使用して検索してみた結果
・1回目:0.1s
・2回目:0.1s
・3回目:0.01s
Avg : 0.07

・GQLQuery
■ gqlはこんな感じselect * from Iuser where userid = :1で検索してみた結果
・1回目:0.2s
・2回目:0.2s
・3回目:0.01s
Avg : 0.13

・識別子
■ User.get_by_key_name()を使用して検索してみた結果
・1回目:0.08s
・2回目:0.01s
・3回目:0.01s
Avg : 0.03

■総括
query,gql,識別子での検索結果は、ほぼパフォーマンスの差はないと感じました。
ただ平均的にレスが早い、idやkey_nameを使用して検索する方が良いでしょうね。
そのほか、インデックスもありますがこちらも今後実験していきたいと思います。

■次回
 GAEのデータアップロードについてお話したいと思います。

| http://www.conit.co.jp/labs/index.php?e=318 |
| Google App Engine | 12:02 PM | comments (0) | trackback (0) |
Google App Engine 使ってみよう!!
こんにちは阿久津です。

激務な日々が続いておりますが、技術の進歩に置いていかれないよう
Google App Engine(以下GAE)をちょこっと触ってみました。

触れてみたのは、Google App Engine for pythonです。

まずは、 google App Engineのスタートガイド Python編から学習してみました。
今回pythonに触れたのは、初めてでしたがこのスタートガイドにてある程度GAEにてどのように構築していけば良いか
数時間で理解できると思います。(まだまだ、奥は深いとおもいますが・・・)

データストア(for python)については、今後も色々と学習していかないといけないなぁ〜と思っておりますが、
今回学んだことを簡単に記載しておきます。

まずデータストアにデータを格納するためには
データモデルなるものを定義し
そのモデルのインスタンスを生成しエンティティとして格納する。
モデルのためのインタフェースは以下3つが用意されています。(詳細は、googleのドキュメントを見てね)
・Model
・Expando
・PolyModel

今回は、はじめの一歩なので無難にModelインタフェースを継承したモデルクラスを定義してみました。
こんな感じに・・・・




class User(db.Model):
userid=db.StringProperty
username=db.StringProperty


これでモデルクラスの準備はOK!!

次にこのモデルクラスのインスタンスを生成して、エンティティを作成しデータストアに格納することをしてみます。
まずは、単純にUserのインスタンスを生成する際にuseridとusernameをセットしみる。




user=User(userid="xxxx",username="Conit太郎") <-- インスタンスの生成
user.put() <--- データストアに格納


GAEに格納されるエンティティは、一意の識別子を持っています。
ID/Nameというプロパティがそうです。
上記の方法ですと、GAEが勝手に一意のID識別子を作成し登録されています。

では、Nameを使用するにはどうすれば良いのか?

以下のとおりです。




user=User(key_name="conit0123",userid="xxxx",username="Conit太郎")
user.put()


GAEにて上記のデータ格納を実行してみました。
1件登録するのに、だいたい0.05秒でした。

で一揆に1万件登録してみようと思い実行したら・・・
サーバエラーが発生!!

調べてみると・・・

google app engine ドキュメント引用
アプリケーション コードは、Web リクエストや cron ジョブに対する応答としてのみ実行し、いかなる場合でも 30 秒以内にレスポンスデータを返す必要があります。リクエスト ハンドラは、サブプロセスを生成したり、応答送信後にコードを実行したりすることはできません。

上記の制限に引っかかってしまいました

では、一揆に登録できるのはどのくらいかなぁ〜と思い
実験したところ、400件(プロパティーの数にもよるのかもしれませんが・・・)
くらがぎりぎりラインでした。
まぁ、リクエストに対してあまり一括で多数のエンティティを登録するということがないかもしれませんが・・・
その場合は、上記の制限に気をつけてください。

以上次回は、登録したデータの検索について実験したことを報告します!!

ではでは


| http://www.conit.co.jp/labs/index.php?e=309 |
| Google App Engine | 01:26 PM | comments (0) | trackback (0) |
Appleのアプリ審査が・・・
こんにちは。阿久津です。

前々から囁かれていましたが、ここ最近Appleのアプリのレビュー審査が早くなりましたよね。

昨年までは、アプリを申請してから早くても2週間・・・
最悪の場合は、1ヶ月経ってもまだ審査が終わらないという状況などありましたよね。

で,何気なくiPhone Developer Newを見ていたら・・・

右側に下記のような宣言がされているではないですか!?


7日以内にアプリのレビューをしたと!!
新着アプリが97%
更新アプリが96%
アプリレビューが達成したということですよね。

ここ最近弊社でも、自社・他社アプリの申請を怒涛のように行っておりますが・・・
た・し・か・に!!
遅くとも1週間、早い時など2日でレビューが通り、App Storeに登場しちゃってます。

海外の記事では、2010年末にはAppStoreに並ぶアプリの本数が35万に到達するとまで
予想されています。

元記事

多くのアプリがAppStoreに並び、ほんとに良いアプリのみが生き残っていく・・・

弊社も皆様に楽しんでもらえる・便利だと思ってもらえる・これがなきゃ!!って思われる
そんなアプリを開発していきたいと思う所存です。

P.S.
 今日 孫さんが言ってました。「勝ち易きに勝(孫子の兵法より)」
 心に響きました〜








| http://www.conit.co.jp/labs/index.php?e=293 |
| iPhone | 08:44 PM | comments (0) | trackback (0) |
フーフーミントン Ver1.2 本日リリース!!
ジェイズアヴェニューさんと共同制作のフーフーミントン、今回大幅に機能を追加改善し
Ver1.2として本日リリースされました!!

このブログを読んでくれている皆様は、もう試しましたでしょうか?
無料アプリとして遊べるので是非まだの方は、AppStoreへ!!

今回追加改善した部分の機能を少々紹介いたします。

まず、ローディングにて・・・
今まではBGMが「パラリラ〜リラリィ〜・・・」って鳴り始めていたものを
確認ダイアログを表示し選択できるように対応しました!!
また、この画面に新着情報も載せてあるので今後 要 Check it out !! (頑張って新着情報を更新していきますよ・・・)

(過去に電車の中でフーフーミントンをやろうとしてBGMが大音量で流れた・・・という方、対応致しました。
その節は大変失礼致しましたしくしく



そしてそして、操作感がつかめるように”練習モード”も追加しました!!
これで、フーフーミントンの操作方法を掴んでください。



さらになんとぎょ
今までコンテンツ課金によってしか、ロック解除できなかった
キャラクターやステージ、Bluetooth HOST機能、サバイバルモードを
ゲームクエストをクリアするか、2Playerで色々な人と対戦するかによって
無料開放するよう対応しました!!
詳しくは、AppStoreの紹介文にも書いてありますしアプリ内のWebにも書いてあります。
下記はアプリ内Webのイメージです!!
是非是非、お試しください。友達との対戦はちょ〜おすすめです!



まだまだ他にも追加したところはありますが、このくらいで紹介は終にしときます。
興味を持った方、既にダウンロードしているけど飽きちゃった方、是非いまいちど遊んでみてくださいね!!

盛り上がってきたら、会場など借りて「フーフーミント トーナメント大会」などやりたいと思っています・・・(ねっ、社長ぽわわ

最後に・・・
新たにこんなキャラクターを追加して欲しいとか機能改善などのご要望もどしどしください。
おまちしておりますょ〜 皆様の貴重なご意見を!!




| http://www.conit.co.jp/labs/index.php?e=284 |
| iPhone | 07:42 PM | comments (0) | trackback (0) |
自分のサイトにTwitter ウィジェットを追加してみよう!
みなさん。お久しぶりです。

2010明けちゃいましたね。
本年も宜しくお願い致します。

早速ですが、本題に。。。

日本のtwitterユーザー数(日本からアクセスしているユニークユーザ数)は、2009年12月時点で
200万人を超えているそうです。ただこれは、公式サイトへのアクセス数で、クライアントソフト
等を経由して利用しているユーザは含まれていないそうです。
含んだ場合は、400万人〜450万人くらいはいるのでは?と言われています。
ユーザー層を20代から30代と考えると、約20%くらいの人がTweetしているんですねぇ〜

そんなこれからも大人気のTwetterのウィジェットがtwitter.comのサイトで
ちょこちょこっと設定するだけで作成できちゃいます。

以下に手順を記載します。

1.http://twitter.com/goodies/widgetsのサイトに行きます。
下記のイメージのように「自分のサイト」「Facebook」「MySpace」と左側に表示されているので
自分の作りたいものを選択します。
ここの例では、「自分のサイト」を選択します。


2.「自分のサイト」を開くと、ここには「プロフィールウィジェット」「検索ウィジェット」「Faves Widget」「List Widget」
 なるものが存在します。
 それぞれを簡単に説明しますと・・・
 ・プロフィールウィジェット
  自分の最新のtweetを表示してくれるウィジェットを作成します。
 ・検索ウィジェット
  設定したキーワードをサーチし表示てくれるウィジェットを作成します。
  (例えば、ある特定のハッシュタグを検索するとか)
 ・Faves Widget
  自分のお気に入りつぶやきを表示してくれるウィジェットを作成します。
 ・List Widget
  リストを選択してそれらのつぶやきを表示してくれるウィジェットを作成します。
 


3.この例では「検索ウィジェット」を選択しています。
ここで「設定」「Preferences」「デザイン」「サイズ」にて各設定を行っていく。


4.全設定が終了したら、上記イメージ図の「Test settings」をクリックする。
 そうするとどのように表示されるのかというイメージが右側に表示されます。


5.表示されるイメージで良ければ、「完了&コード取得」をクリックし、自分のサイトに載せるためのHTMLコードをGETする。


驚くほど簡単に自分のサイトにtwitterウィジェットを追加することができるんで、
興味がある方は是非お試しくださいませ。




| http://www.conit.co.jp/labs/index.php?e=270 |
| ネタ | 08:30 PM | comments (0) | trackback (0) |
Apache POI
こんにちは、阿久津です。

今回は、ある案件で活用するであろうApache POIについて調査したので
そのことについてお話ししたいと思います。

■POIとは?
 POIとは、Apache Projectの1つでMicrosoft OLE2複合ドキュメント形式に基づいた
 ExcelやWord,PowerPointといったOffice系ファイル形式を読み書きできる
 100%Javaライブラリとして提供されているものです。

■POIで出来ること
 POIとはプロジェクトの名称であり、以下のコンポーネント群で構成されています。
 (注意:最新のバージョン3.5をターゲットとしています
    ちなみに、POIの最新バージョン3.5は2009/09/28にリリースされています)
 
 ・POIFS(POI Filesystem)
  POIFSは、このプロジェクト全体の中で最も古く最も安定しているコンポーネントである。
  読み書きの両方の機能を提供する。
  このプロジェクト全体の中の全てのコンポーネントが最終的にはこれに依存する。

 ・HSSF XSSF
  HSSFは,Microsoft Excel 97(-2002)ファイル形式(BIFF8)に対する移植である。
  XSSFは、Microsoft Excel(2007+)ファイル形式(OOXML)に対する移植である。
  読み書き両方が可能。

 ・HWPF
  HWPFは、Microsoft Word97ファイル形式に対する移植である。読み書き両方が可能。

 ・HSLF
  HSLFは、Microsoft PowerPoint97(-2003)ファイル形式に対する移植である。読み書き両方が可能。

 ・HPSF
  HPSFは、OLE2プロパティセット形式にたいする移植である。
  プロパティセットとは、文書のプロパティ(題名、筆者、最終更新日など)
  を保存する際に多く利用されている。
  現在のところHPSFは、プロパティの読み込み機能しかない。

 ・HDGF
  HDGFは、Microsoft Visio97(-2003)ファイル形式に対する移植である。
  まだこれは低レベルの読み込み機能と単純なテキスト抽出機能しか対応していない

 ・HPBF
  HPBFは、Microsoft Publisher98(-2007)ファイル形式に対する移植である。
  まだこれは低レベルの読み込み機能と単純なテキスト抽出機能しか対応していない

  (より詳しくは、The Apache POI Projectを参照してください。)


今回は、POIとはなんだ?という紹介でしたが次回は実際にライブラリを使用して
使い物になるものなのか?(だいぶ昔ですが、POIを使用したときにはOutofMemory等の
問題が発生したような・・・実装方法がわるかったのかもしれませんが(^^);)
などの検証を踏まえサンプルを公開していきたいと思います。


| http://www.conit.co.jp/labs/index.php?e=257 |
| Java | 11:43 AM | comments (0) | trackback (0) |
Google Cloudboard


こんにちは、阿久津です。

ちょっと時間は経っていますが、ここ最近Googlが「Cloudboard」なる
サービスのテストを開始したそうですね。
まだこのサービスは、publicには公開されていないようですけど・・・

このサービスは、GmailやGoogle Docsやその他のGoogleサービス間で
簡単にデータをコピーすることが可能なようです。

例として上げると以下のようなことが出来るようになる???
・Gmailにスプレッドシートを貼付ける。
・Google DocsやGmailにYouTubeやPicasa Web Albumsの画像を貼付ける。

これはこれは、すごいですね!!ぎょ

mailで絵文字が使える使えないの次元ではないですね汗

このサービスが早く公に公開されることを期待しつつ、
リリースされたら、実際にその体感レポートをまたここで
発表したいと思います。

皆様も頭の片隅にこんなサービスが出るらしいくらいに
覚えておいてもよいのでは・・・




| http://www.conit.co.jp/labs/index.php?e=248 |
| 雑談 | 10:13 PM | comments (0) | trackback (0) |
Swing Application Framework(SAF)
こんにちは、阿久津です。

最近は、日々Objective-cと格闘をしておりますが・・・
一昔前は、javaのSwingを屈指してあれやこれやと作成していました。
そこでも、日々格闘をしておったのですが・・・

そんなこんなで、ふと気になった記事を見つけましたのでご紹介したいと思います。

Swing アプリケーションフレームワークの Java 7 での提供を断念

いやはや、Java SE 7でSwing アプリケーションフレームワークを導入しようとしてたとは・・・
ただ、諸々の諸事情により(詳しくは上記の記事を参照ください)断念したらしいですが、
Swingでコンポーネントを配置したり、actionperformedメソッドでイベントの実装したりと
いろいろ苦労したことを思い出します。

さて、このフレームワークで何ができるのかと思い、ちょいと調査してみました。

* アプリケーションのライフサイクル管理
* メッセージや画像などリソースの読み込み
* アクションの管理,非同期アクション
* 画面状態の保存
  *etc

devloperのかゆいところに手が届くのであろう、フレームワークですね。

いづれはJDK?に導入されるであろうSAFを触ってみたいと思いました。
それで、あっと驚かせるSwingベースのリッチクライアントを開発したいものです。

そろそろ、Javaも忘れがちになっているのでJDK7でもダウンロードして
研究していきたいと思っている、今日このごろです・・・

=== おまけ ===
ちなみに以下が、Java SE 7のマイルストーンです。
* マイルストーン3: 2009年5月21日 - JavaOneプレビュー
* マイルストーン4: 2009年7月23日
* マイルストーン5: 2009年9月10日
* マイルストーン6: 2009年10月29日 - フィーチャーの確定
* マイルストーン7: 2009年12月24日
* マイルストーン8: 2010年2月18日 - リリース候補





| http://www.conit.co.jp/labs/index.php?e=239 |
| Java | 10:45 PM | comments (0) | trackback (0) |
UIDevice OS3.0にて追加になったプロパティ
こんにちは、阿久津です。

以前にこのブログで「iPhone Tips ~ デバイス情報取得~」という
記事を投稿させてもらいましたが、OS3.0にて新たに追加されたプロパティがあるので紹介しておこうと思います。

■追加プロパティ
・デバイスのバッテリー状態を取得するプロパティ
・近接センサーの状態を取得するプロパティ

■デバイスのバッテリー状態を取得するプロパティ
ーbatteryLevel
 バッテリーの状態0.0(空の状態)〜1.0(満タンの状態)を返す。
このプロパティにアクセスするには、モニタリング(batteryMonitoringEnabled)を有効にする必要がある。
モニタリングが有効でない場合は、-1.0の値を返す。

ーbatteryMonitoringEnabled
バッテリーのモニタリングが有効か無効かを返す。
デフォルトは、NO.

ーbatteryState
デバイスのバッテリー状態を返す。
戻り値:UIDeviceBatteryState
UIDeviceBatteryStateUnknown:バッテリーの状態はデバイスに明らかにされない
UIDeviceBatteryStateUnplugged:デバイスが電源に繋がれていない
UIDeviceBatteryStateCharging:デバイスが電源に繋がれているが、バッテリーは満タンではない
UIDeviceBatteryStateFull:デバイスが電源に繋がれていて、バッテリーは満タンである


■近接センサーの状態を取得するプロパティ
ーproximityMonitoringEnabled
近接センサーのモニタリングが有効か無効かどうかを指定する
デフォルトは、NO。

ーproximityState
近接センサーが、ユーザが近づいたかどうかを返す。


では、実際の値がどのような感じでとれるか実機で試してみます。


  "製作中・・・"

  
こんな、感じ

■各モニタリングの状態をデフォルト(無効)のまま実行した場合


■各モニタリングの状態を有効にして実行した場合




(上記のは、バッテリーがFullの状態と空の状態で実行してみたときの値。)

近接センサーに関しては、実行した際には0のままですが(当たり前ですが)
顔やものを近づけるとちゃんと反応(=1)を返します。

これらのプロパティの使いどころですが、
単純にバッテリの場合は、バッテリーが消費していったらAlertなりMailなりにてユーザに通知するとか
近接センサーの場合は・・・ものを近づけることによって発動するトリガーに使えますね。

新たに追加された機能も研究しつつ、iPhoneでやることの面白さ、iPhoneならではのアプリ等を
今後も追求していきたいと思います。


| http://www.conit.co.jp/labs/index.php?e=228 |
| iPhone | 11:40 AM | comments (0) | trackback (0) |