2011年10月31日月曜日

.NETからGoogleドキュメントAPIを使ってみる

.NETプログラムからGoogleドキュメントにアクセスするライブラリを使ってみました。
Google CodeからGoogle Data API Setupをダウンロードしてインストールします。



開発環境から.NETのプロジェクトを作成し、
(インストールパス)\Google\Google Data API SDK\RedistにあるマネージDLLを参照に追加します。

今回はとりあえず以下のDLLを使ってみます。
Google.GData.Client
Google.GData.Documents
Google.GData.Spreadsheets

以下はスプレッドシートを開くコードです。
# "Spread sheet Title"が開くドキュメント名です。


Dim ssrv As New SpreadsheetsService("hoge-service")
Dim sq As New SpreadsheetQuery()

ssrv.setUserCredentials(mUserName, mPassword)

sq.Title = "Spread sheet Title" ' 検索対象のスプレッドシート名

Dim feed As SpreadsheetFeed = ssrv.Query(sq)

If 0 < feed.Entries.Count Then
     Dim ss As SpreadsheetEntry = CType(feed.Entries(0), SpreadsheetEntry)

End If


これでスプレッドシートへの参照が取得できました。
次にシートの中のセルを更新してみます。

Protected Overrides Sub UpdateSheet( _
    ByVal srv As SpreadsheetsService, _
ByVal ss As SpreadsheetEntry)

Dim sq As New SpreadsheetQuery()

If ss.Worksheets.Entries.Count = 0 Then Return

Dim ws As WorksheetEntry = CType(ss.Worksheets.Entries(0), WorksheetEntry)

' ワークシート上から範囲にあるセルの集合を取得します
Dim cq As New CellQuery(ws.CellFeedLink)
cq.Range = "A1:C3" ' セル範囲
cq.ReturnEmpty = ReturnEmptyCells.yes ' 空のセルも列挙する

Dim ce As CellFeed = srv.Query(cq)

For i As Integer = 0 To ce.Entries.Count - 1
Dim cell As CellEntry = CType(ce.Entries(i), CellEntry)

' セルの値を表示
If cell.Value IsNot Nothing Then
MsgBox(cell.Value.ToString)

    End If

' 値を変更して更新
cell.InputValue = "セル(" & cell.Column.ToString & "," & cell.Row.ToString & ")"
cell.Update()
Next

End Sub



上記コードはセルごとにUpdateしています。
Updateメソッドで毎回POST送信するため、いくつものセルを一括更新するには向きません。
そのような場合にはバッチ更新を使います。

Protected Overrides Sub UpdateSheet( _
ByVal srv As SpreadsheetsService, _
ByVal ss As SpreadsheetEntry)

Dim sq As New SpreadsheetQuery()

If ss.Worksheets.Entries.Count = 0 Then Return

Dim ws As WorksheetEntry = CType(ss.Worksheets.Entries(0), WorksheetEntry)
        Dim cq As New CellQuery(ws.CellFeedLink)

cq.Range = "A1:C3"
cq.ReturnEmpty = ReturnEmptyCells.yes

Dim ce As CellFeed = srv.Query(cq)

' 更新バッチ作成

Dim updateCells As CellFeed = ws.QueryCellFeed()
Dim batch As New GDataBatchEntryData(GDataBatchOperationType.update)
Dim batchFeed As AtomFeed = New AtomFeed(updateCells)

For Each cell As CellEntry In ce.Entries

If cell.Value IsNot Nothing Then
MsgBox(cell.Value.ToString)
End If

cell.InputValue = "セル(" & cell.Column.ToString & "," & cell.Row.ToString & ")"
cell.BatchData = batch

batchFeed.Entries.Add(cell)

Next


' バッチ実行
Dim rseult As CellFeed = CType(srv.Batch(batchFeed, New Uri(updateCells.Batch)), CellFeed)

For Each entry As CellEntry In rseult.Entries
If entry.BatchData.Status.Code <> 200 Then
Throw New Exception("Cell update for " + entry.BatchData.Id + " failed!")
    End If
Next

End Sub



開発ガイド(Developer's Guide: .NET)
Javaなど各言語ごとにガイドが用意されています。

2011年10月26日水曜日

pixivデビューしました

半年前から3D CGの勉強をはじめ、ようやく公開できるレベルの作品が
できたのでpixivデビューしました。モデリングにはMetasequioaを使っています。
(最初はフリー版を使い、ブーリアン等のプラグイン機能を使うためシェアウェア版に移行しました)

半年前、始めたばかり頃のモデリングの様子。形がオモチャっぽいですね。

何度か作り直し、ようやく実物に近づきました。


VIDROというGIレンダラで出力するご覧のとおり。

最終的にはVue9 Espritという3D景観ソフトを使って出力しました。
Metasequoiaからはオブジェクトを3ds形式で出力すると綺麗にインポートできます。
(「左右軸を反転」が必要)

海や太陽光などリアルな質感を持つ風景を簡単に作成できます。

ちなみにこのCGはアニメFORTUNE ARTERIALに出てきたシーンをモチーフにしています。
名鉄2000系ミュースカイ(もどき)の列車が珠津大橋を渡り、潮見湾に浮かぶ珠津島へ向かいます。

2011年10月16日日曜日

Mono 2.10.XでMutexがおかしい

.NETアプリをMono(Microsoft .NET Frameworkのopen sourceなimplementation)で動かそうと思い、MonoDevelop 2.8.1でbuildし実行!と思ったら不可解な現象に遭遇。
どうやらThreading.Mutexを作成し、初回のWaitOneでfalseが返されることがあるようだ・・・ナニコレ(;´Д`)
以下のコードをMono 2.10.6で実行すると、最初のWaitOneがfalseを返してくる。
(40%くらいの確率でループ内の最初の1,2回だけfalseが返り、後はちゃんとtrueが返ってくる)
とりあえずtrueになるまでリトライすればOKということにしておこう。
(後、Thread.Sleepが全く効いてない現象も発生。P/InvokeでSleep API何かおかしい?)


using System;
using System.Threading;


namespace MutexBugTest
{
    class MainClass
    {
        private static Mutex mLockStatus = new Mutex();


        public static void Main (string[] args)
        {
            for(int i=0;i<100;++i)
            {
                if (!mLockStatus.WaitOne(5000))
                    Console.WriteLine("WaitOne is returned false. #" + i.ToString());       
                else
                    mLockStatus.ReleaseMutex();
            }
        }
    }
}

2011年9月11日日曜日

Amazon KINDLE DXレビュー

今日は電子書籍を読むための専用端末、Amazon Kindle DXを(去年)購入したときのレビューを紹介します。
アメリカのAmazon.comにアカウントを作成し、JPY(日本円)で注文しました。(当時のレートで約37,000円)
注文後、たしか5日以内には届いたと思います。(米国から発送)

到着したら早速PCに繋げて自炊したPDFを転送してみました。
メニューは日本語が表示できないので文字化けします。


KindleはE Inkを採用しているため、視認性は紙にかなり近いです。
コミックで紙とE Inkを比べてみましょう。(比較に使ったのはリリカルなのはVivid)
バックライトのない表示媒体としてはコントラストが非常に高いと言えるでしょう。

PDFの解像度はあらかじめKindle DXの表示部サイズに合わせてあります。
紙とE Inkで文字の見やすさを比較してみましょう。(右側がKindle)
日本語のやや小さい文字でも十分に表示できます。

欠点: E Inkの表示性能はコントラスト・解像度ともに実用レベルです。(モノクロですが)
最大の欠点は画面の書き換えが遅いことと、それに伴う暗転が気になることです。
またKindleのMPU性能が低いのか、連続でページ送りしていると(先読みバッファが空になった時点で?)1,2秒余計に待たされるのがストレスに感じました。

総評: E Inkの紙に近い質感が気に入ったのなら自炊PDFリーダーとして買ってもいいと思います。
私は前述のページめくり時の暗転が気になってしょうがないので使うのをやめました。
4万円近いデバイスとしては動作が緩慢な点も大きなマイナスです。

   / ̄ ̄\
 /   _ノ  \
 |    ( ●)(●)
. |     (__人__)     
  |     ` ⌒´ノ
.  |         }  ミ        ピコッ
.  ヽ        } ミ  /\  ,☆____
   ヽ     ノ    \  \ /     \
   /    く  \.  /\/ ─    ─ \     というわけでiPadに買い換えました(キリッ
   |     `ー一⌒)  /   (●)  (●)  \  Webにゲームに色々できるので満足度はKindleの比じゃなかった
    |    i´ ̄ ̄ ̄ \ |      (__人__)     |
               \_   ` ⌒´    /
                /          \

2011年8月28日日曜日

立川のたちフェスに行ってきた

今日は立川で行われたたちフェスに行ってきました。
このイベントは立川の夏・南口商人祭の催しの一つで

メイン会場は普通の夏祭り、たちフェス会場はオタク向けといった感じです。

「とある魔術の禁書目録」などのアニメ巡礼地として有名になった立川。
会場ではその舞台の背景を記した「学園都市マップ」を配布してました。
(私は以前多摩センターでGET済み)

立川駅南口
たちフェス会場にはボーカロイド、キョン子、デモベ、AngelBeats!などの痛車が
10台程度並んでいたほか、自衛隊の車両も参加していました。
(おそらく立川駐屯地の車両かな?)