Windows Mobile 用の Twitter クライアント「ちーたん Ver 1.06」公開

Twitter API の仕様がまた変更になったため、投稿やお気に入りをする際、POST メソッドが使えなくなってしまいました。GET メソッドであるタイムラインは正常に取得できています。

とりあえず POST メソッド関連の処理を治しましたのでアップデートお願いします。これよりも前のバージョンでは正常に動作しません。


Windows Mobile 用の Twitter クライアント「ちーたん Ver 1.05」公開

Twitter API の仕様が変更したためタイムラインの取得や投稿ができなくなっていました。今回はその対応のみ行っています。とは言っても来年の1月あたりにはまた動かなくなるのですが(^^;)

ちなみに今回の修正で Twitter API からパブリックタイムラインの取得が削除されたため、ちーたんでも設定しても取得エラーになります。まあ使っている人はほとんどいないと思いますが。


[SSIS] Excel から型情報を意識せずに確実に読み込む方法

環境

SQL Server 2005, 2008, 2008 R2

発生する問題

SSIS (SQL Server Integration Services) の データクローから「Excel ソース」を使用すると Excel ファイルからデータを取り込むことができます。Excel の中身がヘッダ1行と2行目以降がデータという一般的なテーブルレイアウトであれば、そのままデータベースに取り込めるので結構便利です。

しかし、実際に使ったことがある方は経験されていることが多いと思いますが、Excel のデータの中身が変わると、SSIS デザイナ上でなぜか型が一致しないという警告が出ることがあります。一度詳細を開いて更新すればもとに戻りますが、Excel の中のデータが変わるとまた警告がでる、の繰り返しになります。

また、場合によっては Excel の中にはきちんとデータがあるにも関わらず、実際に読み込んでみると null で読み込まれる場合があります。

これらの現象は SSIS の問題ではなく、SSIS が Excel の読み込みコンポーネントとして使用している「Excel ISAM ドライバ」の仕様の問題で発生します。これは「Microsoft Jet 4.0 OLE DB Provider」でも「Microsoft Office 12.0 Access Database Engine OLE DB Provider」でも同様です。

このドライバが何をしているかというと、データを読み込む際にわざわざ型指定して読み込まなくても、Excel の中身を見て自動的に型を判別してくれるという便利そうな処理をしていますが、その代り、データの中身の型がころころ変わると読み込む際の型情報も変わってしまいます。そのため、SSIS 上のデザイナでも、事前に型を決定しているにもかかわらず、Excel の中身の型が変わってしまうことによって型が不一致であるという警告が表示されるのです。

このあたりの使用は下記のサイトをみるとわかりやすいかと思います。

簡単にまとめると、Excel の上位8行を読み込み、その列で最も多い型を読み込む型として使用するようになっています。例えば8行内に、文字列が3つ、数値が5つあればその列は「数値型」になります。逆に文字列が6つ、数値が2つであればその列は「テキスト型」になります。同じ個数の場合は「数値型」が優先されます。

ちなみに SSIS で説明していますが、ISAM ドライバーの問題なので、これを使うプログラムはすべて同じ問題を抱えています。

対応方法

ではこれを確実に回避するにはどうすればいいかというと、少し手を込んだことをしなければいけません。

まず、今回の対応方法としては前提条件としてすべての列を文字列として読み込みます。もともと数値の列も文字列として読み込むので、読み込んだ後は数値に変換する必要があります。これは臨機応変に対応してください。

ISAMドライバーで読み込む際、「IMEX」というパラメータを指定することができます。これに「1」を指定すると「インポート モード」になり、読み込むすべてのデータがテキストになります。ただし、Excel 内の指定した列のデータがすべて数値の場合は数値になってしまうので注意してください。一つでも文字列があれば読み込む型は文字列になります。

IMEX パラメータは「接続文字列」で指定します。SSIS デザイナで接続文字列を編集する場合は、接続マネージャーで作成した Exce ソースを右クリックし、プロパティを開きます。プロパティエリアに「ConnectionString」という項目がありますので、その文字列を直接編集します。GUI で設定するパターンもありますが、こちらは IMEX が設定できないので注意してください。

IMEX パラメータは下記のように設定します。一番後ろにある「Extended Properties」内にセミコロン区切りで「IMEX=1」を追加します。

  • Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:Test.xlsx; Extended Properties="Excel 12.0; HDR=YES; IMEX=1;”

接続文字列については以前まとめましたのでこちらのページを参照してください。

さて、これですべての列は文字列として読み込める「はず」なのですが、前述したとおり、Excel にすべて数値が入力されていた場合、または何も入力されていない場合はどうしても列の型が数値として読み込まれてしまいます。ですので、Excel の1行目か2行目に「1行すべて文字列だけを入力した行」を入れるようにします。こうすればほぼ間違いなく文字列として読み込めるようになります。読み込みもとの Excel ファイルにもよりますが、テキスト行を作ってその行だけ非表示にすれば編集上は問題ないかと思います。

 

まあ、個人的には Excel で読み込むのではなく、型を意識しない CSV ファイルのほうがよかったりもするんですけどね。Excel 上で編集すると「0000」とテキストとして貼り付けたつもりが数値として 0 になってしまってて気づかなかったりとかあるので。実は CSV も CSV でダブルクォーテーションのエスケープが考慮されてなかったりとかいろいろ問題はありますが (^^;)


SkyDrive for Windows 同期ツールが何度も再起動する件についての補足

ある特定の環境において SkyDrive for Windows 同期ツールが勝手に再起動を繰り返す現象に悩まされていました。

環境は以下のとおりです。

  • OS:Windows 7 Ultimate SP1 x64
  • メモリ:2.5GB (ただし動的メモリで最大8GBまで拡張可能)
  • 媒体:仮想OS (Hyper-V 3.0 ゲスト)

この件について、Microsoft Answersで「SkyDrive for Windows 同期アプリが何度も再起動する」という表題で質問したところ、Microsoftの回答としては「Hyper-V上のゲストOSではサポートしていない」とのことでした。

質問の件についてはいったんこれで終了したのですが、その後、原因っぽいのを発見しました。

SkyDrive はそのままインストールしていたのですが、フォルダ構成などを作り変えていたらいつの間にか SkyDrive が再起動することなく正常に動作していました。そしてフォルダの再構成として「シンボリックリンク」を使ってフォルダを作成したところ、SkyDrive がまた再起動を繰り返すようになってしまいました。

おそらくこの「シンボリックリンク」がSkyDrive が再起動する原因ではないかと思います。ただ、物理 PC の Windows 8 の環境ではシンボリックリンクでフォルダを作成しても特に再起動していなかったイメージがあったので、「仮想 OS 環境でシンボリックリンクを使う」または「Windows 7 環境でシンボリックリンク」を使うと SkyDrive が異常終了して再起動するのではないかと思います。

まあ、きちんと検証しているわけではないのであくまでも「想定」なんですけどね(^^;)


Zune のプレイリストってどこに保存されるの?

ライブラリのミュージックフォルダを見るとわかります。

きちんと確認しているわけではありませんが、Windows Media Playerのプレイリストと一緒に使われているみたいです。ただ、Zune に Windows のライブラリと切り離す設定があるので、切り離すと Windows Media Player の Playlists ではなく Zune の Playlists フォルダに保存されるかもしれません。

切り離していない場合は上記のどちらのフォルダにファイル(.zpl)を保存しても Zune は読み取ってくれます。


TVTest, HDUCを使用してWindows 8で地上波テレビを見る

注意

ここに記載しているのはメモ書きです。

説明している手順は途中で必要なものがぬけていたりしていますので、不足分は各自補完してください。また、機材やソフトウェアも限定しているのでご注意ください。

ここで説明した手順を実施してPCに不具合等が発生した場合でも責任は負えませんので自己責任で行ってください。また、不正な扱い等も行わないようにしてください。ここでは視聴が可能になるまでの手順を説明しています。今後の法改正でこれらの操作が違法行為になる可能性も捨てきれませんので、それらを認識したうえでの参考資料としてください。

環境

  • Windows 8 x64 Enterprise

使用するもの

  • TVTest
  • MonsterTV HDUC (HDUSでもほぼ同じ)

手順

まず、Windows 8 でドライバの署名チェックをしないように設定します。詳しい説明は以下のサイトでも説明されているのでそちらをご覧ください。

コマンドプロンプトを「管理者権限」で起動し、以下のコマンドを実行、Windows 8 をテストモードにします。

image

bcdedit /set TESTSIGNING ON

※戻すときはOFFにしてください。

Windowsを再起動してドライバーの署名の強制を無効にします。この時通常の手順で再起動するのではなく、以下の手順で再起動します。

[チャーム] > [設定] > [PCの設定変更] > [全般] > [PCの起動をカスタマイズする] > [今すぐ再起動する] > [トラブルシューティング] > [詳細オプション] > [スタートアップ設定]

※チャームはマウスポインタをデスクトップの右上や右下に移動したときにでてくるアレです。

image

再起動すると、スタートアップ設定の画面が表示されるので「7)ドライバー署名の強制を無効にする」を選択します。(キーボードの7を押す)

デスクトップ右下にテストモードが表示されているか確認します。

image

 

さて、ここからはTV視聴用のデバイスを接続する手順になるため、持っているものによって方法が異なったりします。ここでは「MonsterTV HDUC」について説明していますが、ドライバーの事前準備などについては説明していません。 (よく説明されているのは HDUS なのですが、同じ系列なので問題なく使えると思います)

Webで調べるといくつかサイトがありますのでそちらを参照してください。(参考サイトですが、以前参照していたサイトがなくなったりと浮き沈みが激しい界隈なので自力で探してください。おそらくここら辺が一番面倒だったりします)

関連のありそうなサイト (あまりみてない)

 

ここではドライバーがすでに用意してあるものとして説明しています。一応 Windows Vista (x64), Windows 7 (x64) 用で使用したドライバーでも問題なく動作しています。

ドライバーの準備ができたら HDUC を USB で接続します。自動的にドライバーがインストールされますが、有効なドライバーではないので終わるまでそのまま待ちます。

デバイスマネージャーを開き、ドライバーが正常に認識されていないデバイスを右クリックして「デバイスの更新」を選択します(ここではAUSBDTV)。ここからの手順は環境によって異なるかもしれません。一例として見ておいてください。

image

「コンピューターを参照してドライバー ソフトウェアを検索します」を選択。

image

パス指定で用意したドライバーのあるフォルダを選択します。選択したら「次へ」をクリック。

image

正常にドライバーがインストールされればOKです。もう一度デバイスマネージャーを参照すると下のように「SKNET」が表示されます。これらに対しても同じようにドライバーをインストールしてください。

image

下のようなダイアログが出た場合はそのままインストールを続行してください。

image

これでドライバーのインストールは完了です。

 

続いてMPEG-2コーデックをインストールします。Windows 8 は動作再生のコーデックは基本的なものしか入っておらず、利用料金のかかる MPEG-2 コーデックは入っていません。

ここではフリーで配布されているコーデック「ffdshow」をインストールします。下記のサイトからダウンロードしてください。

ダウンロードしたらインストールしてください。途中 MPEG-2 コーデックをインストールするように設定を忘れないでください。デフォルトでは選択されていません。

 

ここまで完了したら「TVTest.exe」を起動して地上波テレビが見れるか確認してください。TVTest についてはいろんなサイトに説明が載っているのでそちらを参照してください。


おのでら本出すよー (情報その3) [同人漫画系]

前回の書き込みから1か月以上経ってしまいました。はい、そこからわかるように進捗はほとんどありません。orz

単純にページ数でみれば7割ぐらい出来上がってるんですが、その大部分は過去作品からの引き継ぎで修正とか加えただけなので、実際新しく入れる部分がほとんどできていません。(^^;)

今年中に出せればなーと考えていたのですが、ちょっと難しいかもしれませんね。それよりも先に冬コミが来て新作つくらないとー、ってな感じでまた無理無理感がw

また進捗がありましたらご報告します。


SQL Server Management Studio で 0.5 を round するとエラーになる

環境

  • クライアント:SQL Server Management Studio 2008 R2
  • データベース:SQL Server 2008

内容

SQL Server Management Studio で「round(0.50, 0)」のように0.5<=x<1の範囲を round すると「expression をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。」というエラーが発生します。

下のコードのコメントを外すと確認できると思います。

select
 round(0.01, 0) as [0.01]
,round(0.49, 0) as [0.49]
--,round(0.50, 0) as [0.50] -- expression をデータ型 numeric に変換中に、
--,round(0.99, 0) as [0.99] -- 算術オーバーフロー エラーが発生しました。
,round(cast(0.50 as numeric(10, 2)), 0) as [0.50]
,round(cast(0.99 as numeric(10, 2)), 0) as [0.99]
,round(1.01, 0) as [1.01]
,round(1.49, 0) as [1.49]
,round(1.50, 0) as [1.50]
,round(1.99, 0) as [1.99]
,round(2.01, 0) as [2.01]

調べてみるとどうやら SQL Server Management Studio で実行したときだけ出るようで、プログラムなどから SQL を投げた場合ではエラーは出ないようです。

参考