2012年1月25日水曜日

Android3.1 マーケットでダウンロードが終わらない

LGのL-06C OptimusPADのAndroidマーケットで,ある日ダウンロードができなくなりました。
アプリのアップデートがあるということで開始し,プログレスバーみたいなゲージがずっと動いているのですが一向に終わることなく,結局「ダウンロードできませんでした」となる状態が続いていました。

設定 > アプリケーション > アプリケーションの管理 > すべて

この中にある「マーケット」を選択,「キャッシュを消去」を行なって再起動したけどうまくいかず。
次に「ダウンロード」 というアプリを選択,「キャッシュを消去」を実行。
この時点で直りました。

「ダウンロード」のキャッシュは数百MBたまっていましたが,これが悪かったのか,あるいは不具合でデータがたまっていたのか・・。

後日,Android2.2のT-01C(Regza Phone)でも同様の状況が発生。そして同様の処置で問題解決しました。

2012年1月23日月曜日

お年玉つき年賀葉書の当選番号照合

今年も年賀葉書の当選番号が発表されました。

平成24年用年賀葉書及び寄附金付お年玉付年賀切手当せん番号

そこで,弊社総務部用に照合シートを作成しました。
ただIF文を繰り返すだけの関数ですが,たくさん葉書がある場合は便利です。


年賀葉書当せん番号照合シート_2011.xlsx

2012年1月13日金曜日

WCF+RESTでファイル受信する際にヘッダー情報を分離

ASP.NETでWCFをホストし,POSTメソッドでファイルを受信するのはうまくできたのですが,受信した Stream型(System.IO.Stream)にヘッダー情報が含まれてしまい,そのまま保存するとファイルが壊れてしまうという問題に当たってしまいました。


FiddlerでファイルをPOST送信したときのRequestBody

---------------------------acebdf13572468
Content-Disposition: form-data; name="fieldNameHere"; filename="test.JPG"
Content-Type: image/jpeg

<@INCLUDE *C:\Users\nemo\Pictures\test.JPG*@>
---------------------------acebdf13572468--

.NETのライブラリに便利なものはないかいろいろと調べたけれど見つからず,結局コードを書いて処理しなくてはいけないかと考えましたが,幸い以下のコードが公開されていました。

http://multipartparser.codeplex.com/

VBで使えるように変換・調整して使うと,簡単に解決しました。

変換サイト

VB.NET(修正前)

' Get the start & end indexes of the file contents
Dim startIndex As Integer = contentTypeMatch.Index + contentTypeMatch.Length + vbCr & vbLf & vbCr & vbLf.Length

Dim delimiterBytes As Byte() = encoding.GetBytes(vbCr & vbLf & delimiter)

VB.NET(修正後)

' Get the start & end indexes of the file contents
Dim startIndex As Integer = contentTypeMatch.Index + contentTypeMatch.Length + vbCr.Length + vbLf.Length + vbCr.Length + vbLf.Length

Dim delimiterBytes As Byte() = encoding.GetBytes(vbCr & vbLf & delimiter)

ファイル名の取得もプロパティでできるし,快適です。
開発者に感謝です。

2012年1月10日火曜日

Windows AzureでIPアドレスによるアクセス制限をかける

Windows AzureのWeb RoleでIPアドレスによるアクセス制限をかける必要が生じ,調べてみました。TIPSやブログを読むと,SQL Azureの場合は管理画面で簡単に設定できるのですが,Web Roleの場合はIISをベースに動いているのでインスタンスごとに初期設定を行なわなければいけないということでした。リモートデスクトップで接続してGUIで設定することもできますが,インスタンスを作成する度に最初からやり直しなので,自動で再構成したときのことも考えると実用的ではありません。
設定を自動的に行なう具体的な方法についてはいくつかのやり方があるようですが,自分にとっては以下の手順が簡単に思えたので記録しておくことにします。


状況
許可したIPアドレスからのアクセス以外を制限
127.0.0.1 WebRoleがlocalhostにアクセスする場合に許可
192.168.1.1 からのアクセスを許可

1.StartUp.cmd
WebRoleプロジェクトにテキストファイルとして StartUp.cmd を作成。
プロパティの[出力ディレクトリにコピー]を[常にコピーする]に設定。

以下の内容で保存。

@echo off 
%windir%\System32\ServerManagerCmd.exe -install Web-IP-Security 
%windir%\system32\inetsrv\AppCmd.exe unlock config -section:system.webServer/security/ipSecurity

2.ServiceDefinition.csdef
Windows Azureプロジェクトの ServiceDefinition.csdef に以下の内容を追記。

  <WebRole>
    <Startup>
      <Task commandLine="StartUp.cmd" executionContext="elevated" taskType="simple" />
    </Startup>
  </WebRole>

3.Web.Config
WebRoleプロジェクトの Web.Config に以下の内容を追記。

<system.webServer>
  <!--IPアドレスによるアクセス制限-->
  <security>
    <ipSecurity allowUnlisted="false">
      <clear/>
      <add ipAddress="127.0.0.1" allowed="true"/>
      <add ipAddress="192.168.1.1" allowed="true" />
    </ipSecurity>
  </security>
</system.webServer>


参考
http://news.mynavi.jp/articles/2011/06/07/wings02/index.html
https://support.blacknight.ie/524/how-to-block-an-ip-address.html