ぷろじぇくと、みすじら。

Android TVなBRAVIA

Created at:

7月ごろにSonyのBRAVIAはちょうど大きなモデルチェンジのタイミングでミドルレンジより上の機種はAndroid TVが搭載されるようになりました。 で、KDL-55X8500Cという機種を一応発売日に買ったのでそのメモというか人柱レビューというかなんというか。

端末情報:KDL-55X8500C

ちなみにAndroid TV搭載というのはどういうことかというと、テレビそのもののプラットフォームが謎のOSからスマートフォンと同じようにAndroidベースになったということです。

なのでGoogle Playのストアからアプリをインストールできたりといった今までのテレビとはちょっと違う感じになっています。

感想

Androidで動いてるというところからのお察しの通りで端的に言えば地雷です。

プラットフォームが刷新されたため、あらゆるものが作り直しされているが故の未完成さがかなりある上に安定性も微妙でテレビとしてどうなの感があります。 アップデートである程度機能が増えたり、安定したりしなかったらだいぶ厳しい感じですね。

ある程度は予想はしていたのですが思っていたよりもひどいですね。

よくないところ & 使えない機能

以前使っていたテレビはKDL-40W900Aという2013年のモデルなので大体2世代前ということでそこまで古くはないですが、そこからの比較ということで。

普通に機能がデグレってるのがかなりおおうっ…となるポイントです。

まさか2年後の機種で機能がしょぼくなってもっさりして不安定になるとは…って感じなのでアップデートで何とかしてほしいですが無理な予感がしていますね。すでに2か月が経過してますけど。

追記: そういえば設置しにきてもらってPlayStation 3をつないだら音は出るけど映らない事象に出くわして、挿すところを変えたりPS3の設定をリセットしてもダメで(Wii Uは映った)、設置に来た方(ソニーの人)がすみません調査しますって帰って、アップデートしたら直ったというところからのスタートだったということを思い出しました。

いいところ

いいところもあるにはあります。

Androidであることというのはちょっと面白いというか、中身が透けて見えるというか。 アプリ作れるとはいえJava書きたくないし、エミュレーター遅いしで結構つらいのですけど作れないよりはましです。なおadbで接続するならUSB(A)のオス-オスが必要なので注意です。

特にGoogle Castが組み込まれているところはよいです。Google Castというのはブラウザやアプリから画面を受信できるという機能です。

Google Castのテレビ用の外付けデバイスに相当するChromecastというものがありますが、Android TVなテレビはGoogle Castが組み込まれています。 テレビ自体がCastを受け取れるため何もせずスマートフォンやブラウザからCastするだけで自動で表示できます。 つまりChromecastやNexus Playerの場合にはまずその機器への入力切替が必要となりますがその操作が不要なのです。

追記: ChromecastはHDMI機器制御対応らしく、利点がつぶされたかと思いましたがCastやめたらテレビに戻ったりはできないっぽいのでセフセフ。

起動が速いのはスマホやパソコンのようにスリープ的な状態から復帰するだけなのでフル機能を使えるまでの時間が圧倒的に短いのです(もちろん再起動には時間かかる)。 対して40W900Aなどの以前のモデルはある時間帯(しかも時間指定不能)だけ高速起動可能状態になれるのですがその時間を外すとフル機能を使えるまでの時間が長いです。これは普通に良いところです。

おすすめのアプリ

ホーム: アプリ

折角ですのでおすすめのアプリを少しメモしておきます。Google Playアプリからだと検索できなかったりそもそも面倒だったりするので、パソコンからGoogle Playにブラウザでアクセスしてインストールするのをお勧めします。

その他

性能的にはスマホでいえばXperia Zかそれ以下ぐらい(デュアルコア)でRAMは1.5GBぐらいっぽいです。絶妙にしょぼい…。実際体感的にも遅いかなって感じがします。

まとめ

すごくAndroidっぽい。たぶんすぐにアップデートされなくなってAndroidっぽさが完成するのではないかという予感がしています。

というのは半分冗談としても、現状だいぶひどいですし安い買い物ではなかったのでアップデートで前の世代並みにはよくしてほしいなというのが正直なトコロです。

Metro.cs #1 .NETプログラム (のランタイムを実装する) 入門なのです

Created at:

先日、CoreCLRを見ながら勉強がてら作ってみたInazumaというものを公開したところ、 さおさんが平日版めとべややるので話してくださいよーって振ってきたので、自信ないですけど…みたいな感じでお話することに。

勉強のために作っていたのでいろいろ知識を整理もできていなくてふわふわした状態でしゃべるという今までになく不安なセッションでなんかすみません的な感じでした。

それはともかく、CoreCLRを動かしてみるのは面白いのでぜひやってみるといいのではないかと思うのと、意外とみんなインタープリターとか作ってみたいと思わないものっぽいという感触を得ました。 あとインタープリターのデモは工夫しないと微塵もよくわからんって感じですね(知ってた)。

ChatWork Extension

Created at:

みんなが大好きなあのChatWorkを拡張してさらに便利にするためのChrome拡張をChrome ウェブストアに公開しました。

Chrome ウェブストアからダウンロードしてインストール

主な機能は以下のようなものがあります。

それぞれの機能は拡張の設定画面からオンオフできるのでお好みに応じてオンオフしてください。

シンタックスハイライトは普通に便利なのではないかと思います。カスタムスクリプトは社内向けの拡張を相乗りしたいというためにある機構で、あとで解説書きたいようなそうでもないような。

なお、当然魔改造ですのでChatWork側が変化すれば簡単に壊れてしまうのでご注意ください。

ソースコードは https://github.com/mayuki/ChatworkExtension から入手できます。

最初はURLを知っている人にのみ公開のつもりだったのですが、ChatWorkの中の人も改造しているっぽいのでいいのかなとおもって公開します。吾郷さんも入った記念ということでひとつ。

LINQ to Exchange WebDAV

Created at:

Exchange 2000, 2003, 2007にはWebDAVでアクセスするためのインターフェースがありまして、SQLを含んだXMLを投げつけるとExchangeの中のデータを取り出せたりします。Searching Folders (WebDAV) のような感じですね。まあ2010では廃止されちゃったのですが。

さてExchange 2003のデータを.NET Frameworkのプログラムから取り出したいということがあるわけですが、今までぷちぷちSQL文字列を組み立ててXDocumentでちくちく処理していました。が、なんかめんどくさいしやっぱりLINQ使いたいですよね!!ということでLINQ プロバイダを作ってみました。死にゆくExchange 2003のための誰得LINQプロバイダです。

ダウンロード: Misuzilla.Data.ExchangeWebDav-20100703.zip (Visual Studio 2010, .NET 4)

IQueryable/IQueryProviderまわりを勉強しながらだったので何となく動くところまでしかやってないので細かいとこはアレなのと、Exchange 2003でしか動作確認していないので多分2000とか2007だとそのままでは動かないかもしれません。

使い方はExchangeDavQuerySampleを見てもらえればわかるのですが、次のようなコードでメールの一覧を取ってこれたりします。

var credential = new NetworkCredential("yui@k-on.local", "P@ssw0rd");
var baseUrl = "http://exch2k3.k-on.local/exchange/yui/受信トレイ/";

// WebDAVアクセスのためのクライアントを作成する
ExchangeWebDavClient davClient = new ExchangeWebDavClient(credential);
// LINQプロバイダを作成する
ExchangeDavQueryProvider provider = new ExchangeDavQueryProvider(davClient, baseUrl, baseUrl, TraversalType.Shallow);
provider.Log = Console.Out;

// クエリを作成する
var q = new ExchangeDavQuery<DavMessageHeaderEntry>(provider)
    .Where(x => !x.IsFolder && !x.IsHidden)
    .OrderByDescending(x => x.CreationDate)
    .Select(x => new { Subject = x.Subject, From = x.From, To = x.To });

// 実行する
foreach (var entry in q)
{
    Console.WriteLine("--------------------------------------------------");
    Console.WriteLine("Subject: {0}", entry.Subject);
    Console.WriteLine("From: {0}", entry.From);
    Console.WriteLine("To: {0}", entry.To);
}

これを実行すると以下のような結果が出てきます。

---- Query: 2010/07/03 15:57:34 ----
BaseUrl: http://192.168.0.36/exchange/yui/受信トレイ/
Start: 0, End: 49
SQL:
SELECT
    "urn:schemas:httpmail:subject", "urn:schemas:mailheader:from", "urn:schemas:mailheader:to"
FROM
    SCOPE ('SHALLOW TRAVERSAL OF "http://192.168.0.36/exchange/yui/受信トレイ/"')
WHERE
    (NOT(("DAV:isfolder" = true)) AND NOT(("DAV:ishidden" = true)))
ORDER BY
    "DAV:creationdate" DESC

---- Query End: 135.0077ms ----
--------------------------------------------------
Subject: 2010年夏合宿
From: "Tsumugi Kotobuki" <mugi@k-on.local>
To: "Yui Hirasawa" <yui@k-on.local>, "Azusa Nakano" <azunyan@k-on.local>, "Ritsu
 Tainaka" <ritsu@k-on.local>, "Mio Akiyama" <mio@k-on.local>
--------------------------------------------------
Subject: とんちゃんの写真の件
From: "Yui Hirasawa" <yui@k-on.local>
To: "Azusa Nakano" <azunyan@k-on.local>, "Tsumugi Kotobuki" <mugi@k-on.local>
--------------------------------------------------
Subject: test
From: "Yui Hirasawa" <yui@k-on.local>
To: "K-ON Club -Internal" <K-ONClub-Internal@k-on.local>

更新などには別途何か必要なのですがそうでなくても、データ取得が簡単にできるようになるので便利だと思います。どうぞご利用ください。

WinDbg/CDBで.loadby sos mscorwksしてSOSデバッガ拡張コマンドを使うとmscorwks.dll/mscordacwks.dllのバージョンが違うと怒られる

Created at:

Windows Server 2003 環境の.NET FrameworkとWindows Vista SP2の.NET Frameworkは微妙にバージョンが違ったりします(W2k3は最新で2.0.50727.4016、Vistaは2.0.50727.3053)。

そんな感じで手元とは異なった環境で取ったメモリダンプファイルを開いて、SOSデバッガ拡張でのぞき見ようとすると次のようにエラーになったりします。

0:023> .loadby sos mscorwks
0:023> !DumpHeap
*********************************************************************
* Symbols can not be loaded because symbol path is not initialized. *
*                                                                   *
* The Symbol Path can be set by:                                    *
*   using the _NT_SYMBOL_PATH environment variable.                 *
*   using the -y  argument when starting the debugger. *
*   using .sympath and .sympath+                                    *
*********************************************************************
PDB symbol for mscorwks.dll not loaded
Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                in the version directory
            3) or, if you are debugging a dump file, verify that the file 
                mscordacwks___.dll is on your symbol path.
            4) you are debugging on the same architecture as the dump file.
                For example, an IA64 dump file must be debugged on an IA64
                machine.

You can also run the debugger command .cordll to control the debugger's
load of mscordacwks.dll.  .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your executable
path is pointing to mscorwks.dll as well.
0:023> .cordll
CLR DLL status: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3053.dll, Win32 error 0n2
0:023> .load C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
0:023> .cordll -ve -u -l
CLR DLL status: No load attempts
0:023> !DumpHeap
CLRDLL: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.4016 f:0
doesn't match desired version 2.0.50727.3053 f:0
CLRDLL: Unable to find mscordacwks_x86_x86_2.0.50727.3053.dll by mscorwks search
CLRDLL: Unable to find 'mscordacwks_x86_x86_2.0.50727.3053.dll' on the path
CLRDLL: Unable to find mscorwks.dll by search
CLRDLL: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3053.dll, Win32 error 0n2
Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                in the version directory
            3) or, if you are debugging a dump file, verify that the file 
                mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path.
            4) you are debugging on the same architecture as the dump file.
                For example, an IA64 dump file must be debugged on an IA64
                machine.

You can also run the debugger command .cordll to control the debugger's
load of mscordacwks.dll.  .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your executable
path is pointing to mscorwks.dll as well.

そんなときは対応するDLLを取得できるようにシンボルパスを設定してあげます。

WinDbg の File → Symbol File Path ... で Symbol path: に

symsrv*symsrv.dll*c:\localcache*http://msdl.microsoft.com/download/symbols

Reload チェックボックスをオンでOKで閉じます。

もしすでに .loadby sos mscorwks を実行して怒られたあとなら、一度次のコマンドで再読み込みできるようにします。

.cordll -ve -u -l

あとは普通にデバッガ拡張コマンドが使えるようになってるはずです。