2016年4月30日土曜日

[Android] 楽天Edyの決算処理が中断で支払いできない原因と直し方 [おサイフケータイ]

How to fix the Rakuten Edy error

楽天Edyで決済しようとしたらこんな画面がでました。
決済処理が中断されている場合があります。
ご購入サイトから、お客様のEdy決済が完了しているかどうかをご確認ください。
blog.fujiu.jp [Android] 楽天Edyの決算処理が中断で支払いできない原因と直し方 [おサイフケータイ]

このエラーの原因と対策方法をまとめました。


環境

  • Androidスマートフォン SH-60E


デフォルトのブラウザーで開けば決済できる

この画面のお支払い画面のリンクを開くとき

ChromeやFirefoxで開いていたので決済できませんでした。
地球のようなアイコンの「ブラウザ」で開いたら決済できました。


ブラウザを選ぶ画面が出ない場合

ChromeやFirefoxが「常時」に設定されていると選択する画面が表示されません。
設定 - アプリ
からChromeやFirefoxを開いて
デフォルトでの起動 の 設定を消去
をタップすると次回から選択画面が表示されます。


選択肢にブラウザがない場合

ブラウザが無効に設定されていると、選択画面が表示されても選択肢にブラウザが表示されません。
設定 - アプリ - 全てのアプリ
からブラウザを開いて 有効にする をタップすると次回から選択肢に表示されます。


関連ブログ

FirefoxでJavaSriptが応答しなくなるサイトの対策と高速化
[SEO] ブログのPocket(あとで読むサービス)への登録数を調べる方法
ツイッターのアカウントをブロックやミュートせずにタイムラインから消し去る方法
Blogger.com (blogspot)のツイッターカードにサムネイルを設定する 2016年版
[セキュリティ] 引用サイト・Togetterに引用された自分のツイートを検索・削除する方法
[セキュリティ] Twitterの「このリンクは安全ではない」「このリクエストを保留しています」の対策2015年版

以上、参考になれば幸いです。

2016年4月23日土曜日

[クラウド] BluemixのJavaアプリ開発ではまったところと対処方法

The programming pitfalls in Bluemix

コンソールJavaアプリとして開発した
クエリちゃんの動画投稿数をツイートするサービス
をIBMのクラウドサービス・Bluemixで実行してはまったところと対処方法をまとめてみました。

ソースはソースはGitHubにあります。
https://github.com/mtk-f/TweetNicoMovieForQuerychan


環境

  • Eclipse Mars. 2 でMavenプロジェクトとして開発したコンソールJavaアプリ


Bluemixの環境変数ではまった

このアプリはTwitter4jライブラリーを使ってツイッターに文章を投稿します。
投稿するにはツイッター用のAPI KEYを設定する必要があります。
API KEYは非公開パラメーターなのでソースに載せることができません。

Twitter4jライブラリーはAPI KEYをソースに書く以外に環境変数に設定する方法があり、Bluemixはダッシュボードから環境変数を設定できます。
Twitter4jの環境変数はピリオド(ドット)の文字を含むのですが、Bluemixはピリオドを含む変数名を設定すると実行時にエラーになります
ピリオドを含む環境変数名はBluemixのbashでexportコマンドが失敗します。

例えば環境変数にこんな設定をすると
blog.fujiu.jp [クラウド] BluemixのJavaアプリ開発ではまったところと対処方法

こんなログが出力されます。
/bin/bash: line 20: export: `twitter4j.oauth.consumerKey=1234': not a valid identifier

対策としてピリオドを含まない環境変数を使うように対応しました。


Bluemixのログではまった

標準出力はBluemixのログに出力されるのですが、標準出力した順番とログに出力される順番は一致しないことがあります。
例えば次のJavaアプリを実行すると


Bluemixのログに次のように出力されました。


ログを読むときは時系列順に読み替える工夫が必要です。



関連ブログ

[クラウド] Bluemix にJavaアプリを実装するまで
[Java] Android StudioやEclipseのお節介な警告を消す方法
[Azure] クエリちゃんの動画投稿数をツイートするサービス をGitHubに公開するまで
C#のAzure用Webジョブ開発ではまったところ

以上、参考になれば幸いです。

2016年4月16日土曜日

[クラウド] Bluemix にJavaアプリを実装するまで

How to push java console applications for Bluemix

IBMのクラウドサービス・Bluemixを使って クエリちゃんの動画をランダムにツイート というアプリケーションを稼働させました。
blog.fujiu.jp [クラウド] Bluemix にJavaアプリを実装するまで

ソースはソースはGitHubに投稿してあります。
https://github.com/mtk-f/TweetNicoMovieForQuerychan

このアプリをBluemixで稼働させるまでの手順をまとめました。

環境

  • Windows 10
  • Eclipse Mars 2、Pleiades日本語化プラグイン


コンソールJavaアプリはjarファイルにエクスポートする必要がある

BluemixはEclipseで作ったJava EEアプリケーションをや配備するEclipse用プラグインが公開されていますが、コンソールJavaアプリはEclipseから配備することができませんでした。

今回作ったアプリケーションは、Main()メソッドから処理を開始するコンソールアプリケーションです。
BluemixにコンソールJavaアプリを配備するにはまずjarファイルにエクスポートします。
Eclipseでjarファイルにエクスポートする方法は次の通りです。

プロジェクトのプロパティーを開いてメイン・クラス項目にMainメソッドを持つクラスを設定します。

プロジェクトのエクスポートから 実行可能JARファイル をクリックしてjarファイルの保存場所とファイル名を指定するとエクスポートできます。


Bluemixにjarファイルを配備するにはcfコマンドを使う

Bluemixにjarファイルを配備するには cf.exe というコマンドラインインターフェイスをダウンロードして操作します。
コマンドプロンプトから文字入力による操作が必要なので難易度が高めです。

ダウンロードはこちら。
https://github.com/cloudfoundry/cli/releases

あらかじめWebのダッシュボードからBluemixのエンドポイントを調べておきます。
自分のエンドポイントはシドニーでした。

ここからコマンドプロンプトでcf.exeを使って操作します。

Bluemixのエンドポイントに接続します。
シドニーの場合の例:
cf api https://api.au-syd.bluemix.net

ログインします。
Bluemixにアカウント登録したメールアドレスが必要です。
例:
cf login -u メールアドレス -o メールアドレス -s dev
このあとパスワードを聞かれるので入力します。

jarファイルをアップロードします。
例:
fc push "アプリケーション名" -p "jarファイル名" -no-route

これでコンソールJavaアプリをBluemixに配備することができました。
配備したアプリケーションの開始や終了はcfコマンドからもWebのダッシュボードからも操作できます。


Bluemixを使ってみた感想

Azureに比べるとBluemixの日本人のユーザーは少ない印象ですが、丁寧に日本語翻訳された資料が公開されているので情報量には困りませんでした。
今回はコンソールアプリを試しましたが、Java EEアプリケーションを Websphere Application Server の仮想環境で運用すると威力を発揮しそうです。

なお、Azureには日本人がデザインした「クラウドガール・クラウディア窓辺」というイメージキャラクターがいてことあるごとにノベリティを配布いしていますが、Bluemixにはそのようなキャラクターはいません。


関連ブログ

[Azure] クエリちゃんの動画投稿数をツイートするサービス をGitHubに公開するまで
C#のAzure用Webジョブ開発ではまったところ
[Java] Android StudioやEclipseのお節介な警告を消す方法

以上、参考になれば幸いです。

2016年4月9日土曜日

[Visual Studio] C# のお節介な警告を消す方法

How to hide warnings on C#

Visual Studioで開発したAzureのWebジョブアプリ用
クエリちゃんの動画投稿数をツイートするサービス
は完成するまで多くの警告が表示されました。
Visual Studioの警告は「直さなくても動作するけど直した方がいい」というものがほとんどで、開発中に表示されることはよくあります。
警告を消す方法を調べてまとめました。


環境

  • Windows 10
  • Visual Studio 2015 Community


警告はアノテーションで消せる

たとえば
この非同期メソッドには 'await' 演算子がないため、同期的に実行されます。'await' 演算子を使用して非ブロッキング API 呼び出しを待機するか、'await Task.Run(...)' を使用してバックグラウンドのスレッドに対して CPU 主体の処理を実行することを検討してください。
という警告を消すとします。
blog.fujiu.jp [Visual Studio] C# のお節介な警告を消す方法

エラー一覧でコードの数字を調べます。
コードに CS1998 とあるので数字は 1998 です。

ソースに
#pragma warning disable 1998
と書くと、それ以降の CS1998 の警告は全て無視されます。

また、
#pragma warning restore 1998
と書くと、それ以降の CS1998 の警告が表示されるようになります。

警告を消したい範囲を
#pragma warning disable 1998

#pragma warning restore 1998
で囲むように書けば別の範囲のCS1998の警告をもれなく発見できます。

別の警告
(略) 呼出しの結果に 'await' 演算子を適用することを検討してください。
を消したい場合はコードが CS4014 なので
#pragma warning disable 4014

#pragma warning restore 4014
で囲みます。


コードを正しく書けば警告は解決する

Visual Studioの警告はほとんどが解決手段がある場合に表示されます。
たとえば 1998 の警告
この非同期メソッドには 'await' 演算子がないため、同期的に実行されます。
が表示されるメソッドで、オブジェクトを返さない(void関数のようにしたい)場合は

をメソッドの最後に追加します。

別の警告
(略) 呼出しの結果に 'await' 演算子を適用することを検討してください。
の場合はメソッドの定義にawaitキーワードを追加します。
Mainエントリーポイントのように awaitキーワード が使えないメソッドは、非同期メソッドをWait()メソッドで呼びます。
Wait()メソッドについては
C#のAzure用Webジョブ開発ではまったところ
でまとめてあります。

ほとんどの警告はコードを修正することで解決します。
完成時は警告やアノテーションは残さないようにコードを修正するべきです。


関連ブログ

[Java] Android StudioやEclipseのお節介な警告を消す方法
C#のAzure用Webジョブ開発ではまったところ
[Azure] クエリちゃんの動画投稿数をツイートするサービス をGitHubに公開するまで
Visual Studio Community 2015 をISOファイルからWindows10にインストールする方法
[Android] Xamarin でアプリを作ってみました

以上、参考になれば幸いです。

2016年4月2日土曜日

C#のAzure用Webジョブ開発ではまったところ

The programming pitfalls in C#

Azure用Webジョブアプリ クエリちゃんの動画投稿数をツイートするサービス
を作ってはまったことろとその対処方法をまとめました。

このアプリのソースはGitHubに投稿してあります。
https://github.com/mtk-f/TweetNicoCountForQuerychan


環境

  • Windows 10
  • Visual Studio 2015 Community


Visual Studioでの開発

Visual Studioで Azure Webjob のプロジェクトとして開発しました。
コンソールアプリケーションを開発するの同じで、完成したもの普通のコンソールアプリでした。
blog.fujiu.jp C#のAzure用Webジョブ開発ではまったところ

処理内容は次の通りです。
  1. nicovideo.jp のWeb APIで「mmd クエリちゃん」をキーワード検索する
  2. 検索結果のJSON文字列をパース(構文解析)し件数を取得する
  3. 件数をツイッターに投稿する


非同期処理ではまった

このアプリはWeb APIの利用やツイッターへの投稿を非同期メソッドで処理しています。
コンソールアプリケーションはエントリーポイントのMainメソッドからプログラムを実行し、エントリーポイントを抜けたら終了します。
非同期メソッドの完了を待つにはawaitキーワードで同期待ちします。
ところがMainメソッドは非同期処理をawaitキーワードで同期待ちできません
awaitキーワードが使えないので非同期処理が完了する前にエントリーポイントを抜けてしまい、ツイッターに投稿する前にアプリケーションが終了してしまう事態に陥ってしまいました。

問題の起きるエントリーポイント


非同期メソッドの Wait()メソッド で対処しました。
Wait()メソッドは非同期処理が終わるまで待ち続けるメソッドです。

対処後のエントリーポイント


Wait()メソッドを使わないときと使うときのアプリの寿命の違いを図にしました。


Newtonsoft.Json ではまった

Newtonsoft.JsonはJSONフォーマットの文字列を匿名型オブジェクトやクラスに変換するライブラリーです。
オブジェクトをJSON文字列に変換することもできます。
JSON文字列をオブジェクトに変換することをデシリアライズといいます。

Newtonsoft.Jsonは角括弧[]の配列を含むJSON文字列は匿名型オブジェクトにデシリアライズできません。
JSONの配列を匿名型にデシリアイズすると実行時にこのような例外がスローされます。
Newtonsoft.Json.JsonException


匿名型ではなくクラスなら配列をデシリアイズできます。

匿名型の例


クラスの例


匿名型はクラスより字数が少なくメソッドの中で定義できますが、クラスより用途が制限されます。


Azureの新しいポータルではまった

このブログを書いている時点では、最新のAzureポータルからWebジョブの実行をスケジュール設定できません。

Webジョブを定期的に実行するには AzureのレガシーポータルからWebジョブを スケジュールに従って実行 の設定で展開しなおす必要がありました。


クエリちゃんのMMDモデルを公開中です

クエリちゃんのMMDモデルはOneDriveからダウンロードできます。
クエリちゃんのMMDモデルで動画を作ったらぜひ投稿してください。


関連ブログ

[Azure] クエリちゃんの動画投稿数をツイートするサービス をGitHubに公開するまで
Visual Studio Community 2015 をISOファイルからWindows10にインストールする方法
[Android] Xamarin でアプリを作ってみました
ツイッターAPIの検索で複数の画像URLが取得できない対策方法
Twitterの「このリンクは安全ではない」「このリクエストを保留しています」の対策 2015年版

以上、参考になれば幸いです。