2017年1月24日

今さらながら Toshiba dynaPad を買ってみた

年末にChromebook FlipをeBayで買ったところ不良品にあたって失敗したので、どうしようかな~と考えていました。

結局、1年以上前に発売された機種ですが 「Toshiba dynaPad」を買うことにしました。

Microsoft Storeでこんな感じで$449でセールされていました。


今調べたら発売当初の定価が$569らしいので、落ち着いて考えると1年落ちのモデルでこの価格というのは本当にお買い得なのかどうかちょっと微妙な感じもします。

でも12インチサイズで560gという驚きの軽さと、ワコムと共同開発したという2048段階筆圧感知の「TruePen」に惹かれました。


今のところ考えている用途は、次の3つです。


  1. 家族がリビングでさっとWebを見たり動画を見たりする。
  2. 子供の宿題やお絵かき用
  3. 紙のノートを置き換えることが出来るか、僕の実験用。



デザインが良いのでリビングに置いておくのに良いかも。

縦置きでのWeb閲覧も快適。

2週間ほど使っていますが、今のところ良い感じです。特に6.9mmという薄さとこの軽さは最高です。

Webサイトや動画の閲覧には、同時にたくさんのタブを開かないようにさえ気をつければ全く問題ありません。

子供に使わせるとすぐに独占されてしまいそうなので、まだ使わせていません。(笑)

仕事のミーティングなどで紙のノートの替わりに使えるのか、という点についてはかなり実用的に使えそうです。付属のペンの書き味は僕がMicrosoft StoreやApple Storeの店頭でSurfaceやiPad Proを触った感触と比べてもまったく遜色ありません。というよりもこちらの方が若干反応が良い気がします。細かい文字を素早く書いた時でもきっちり追随してくれます。ただ画面がつるつると滑るのでそこだけは紙の感触とはだいぶ違って慣れが必要だと思います。

CPUがAtom x5-Z8300 なのでところどころで一瞬待たされる感じはあります。これは価格からすると仕方ないのかなとは思いますが、今後i5やi7バージョンが出たらぜひ仕事用にも買いたいと思わせられる機種です。






 .

2016年12月31日

『新品同様』のAsus Chromebook FlipをeBayで落札した結果

1年ちょっと前にこんな記事を書いていました。

Asus Chromebook Flipがかなり気になる - 米Amazonで249ドル!


まだ次期モデルが出ず、同価格帯で他に欲しい機種もなかったのでついにこれを買うことにしました。

eBayで探すとメモリ4GBの中古品が大体150〜180ドルぐらいで落札されているようです。発売から1年以上経つのにあまり価格が下がっていません。

とりあえず2件ほど入札してみましたがなかなか買いたい価格で落札出来ませんでした。

オークション終了の15秒前に入札するという方法で3件目をついに落札。「新品同様」のものを送料込みで199ドルで買う事が出来ました。

実はこんなに必死になってeBayのオークションをしたのは初めてです。終了時刻が近づくとドキドキして、落札出来た時は興奮しました。たまにはオークションで買うのも楽しいですね。

さて、5日ほどかかって届いたAsus Chromebook Flipですが、9.7インチのiPadとほぼ変わらないコンパクトさで、外観もアルミニウムの質感が出ていてとても良い感じです。

https://www.cnet.com/products/asus-chromebook-flip/2/

「これは良い買い物をしたな〜」と満足でした。

ところが、です。

フル充電してからさあ初期設定してみようと自分のメールアドレスを入力するところで、いきなり予想外の問題に遭遇してしまいました。

なんと、o, p, s, w などいくつかのキーが反応しないのです。さらにEnterキーとBackspaceキーも無反応。。。

一時的な問題かなと思ってシャットダウン後電源ONしてから試しても同じです。試しにUSBで外付けのキーボードをつないでみると問題ありません。

外付けキーボードをつないだままなんとかログインして、OSを最新版にアップデートして再起動してみましたが、やっぱり同じでした。本体のキーボードの動作不良であることは間違い無さそうです。

確かにこのキーボード、写真や動画で見る限りは気付きませんでしたが、実物はかなり安っぽいですね。もし正常に動作していたとしてもこのキーボード部分だけは好きになれなかったと思います。

もうこのままタブレット端末として使おうかとも一瞬考えましたが、やっぱりそれでは悲しいので返品する事にしました。

そもそもこういう、キーボードをくるっと裏返してタブレットモードにするタイプの機種だと、テーブルに置いて使う分には良いですがそのまま片手で持って使おうとすると裏面のキーが指にあたってどうも使いづらいですね。これも実際に試してみないと気付かなかった点です。

そういうわけで早速翌日に送り返して、今返金待ちの状態です。



今回学んだこと

● 安っぽいキーボードなら付いてない方がマシ。むしろ自分の好みのものを接続して使える方が有り難い。

● eBayの「新品同様」品には要注意。既に一度返品されたものがそのまま出品されている事もあるらしい。






 

2016年12月28日

Androidで18万DLされた自作アプリをWindowsストアに移植した結果

Androidで18万回以上ダウンロードされた自作アプリをWindowsストアに移植して約2ヶ月経ちました。

移植作業にはなんだかんだ言って1ヶ月近くの工数がかかってしまったのですが、その結果をまとめてみました。

ダウンロード数: 339回
広告表示回数: 1,745回
Fill Rate:    約20%
広告クリック数:  6回
広告収益:   48セント (約50円)


なんなんでしょう、この結果は。。。


あまりの少なさにがく然としています。(笑)

Windows 10のタブレットや2 in 1も増えて来たので、そろそろ行けるかな〜と期待していたのですが、Windowsストアからアプリをダウンロードして使うという使い方はまだまだそんなに広まっていないのかも知れませんね。


ちなみに広告はUWPアプリではAdMobが使えなかったので標準の「Microsoft advertising ad」というものを使ってバナー広告を表示しています。これですがFill Rateが20%って、AdMobと較べて低すぎですよね。


もちろん、宣伝の仕方やアプリのカテゴリなどによって結果は大きく変わると思います。


ただ個人的には次のアプリからはしばらくWindowsストアはパスという事に決定です。


とりあえず試してみて大体の感触が分かったのでまあ良しとして、次に行きます。^^)





 

cocos2d-xで作ったアプリをWindows 10 UWP対応にした時のメモ

結構苦労したので将来の自分のためにメモしておきます。

● Cocos2d-xを最新版に更新


1. cocos new コマンドで新しいCocosプロジェクトを作成。
2. 必要なソースコードや画像・音声などのファイルを古いプロジェクトからコピー。

共通のもの
 Classes ディレクトリ
 Resources ディレクトリ

iOS固有のもの
 Images.xcassets ディレクトリ
 ios/AppController.*
 ios/RootViewController.*

- Android固有のもの
 app/src/org/cocos2dx/cpp/AppAcitvity.java
 app/res ディレクトリ
 app/jni/Android.mk
 app/jni/Application.mk
 AndroidManifest.xml
 ProGuard設定ファイル

- Windows固有のもの
 App/Assets ディレクトリ



● ソースコードの文字コードを「UTF-8 BOM付」に変換


Windows版をビルドするために使うVisual StudioはUTF-8でかつBOM付きのファイルしか正しく扱えないので、nkfコマンドを使って全てのソース・ファイルをUTF-8 BOM付きに変換します。

カレントディレクトリ直下のファイルのみを対象にする場合
  nkf -W -w8 --overwrite *.cpp *.h

カレントディレクトリ以下の全てのディレクトリで再帰的に実行する場合
  find . -type f -name "*.cpp" -exec nkf -W -w8 --overwrite {} \; 
  find . -type f -name "*.h" -exec nkf -W -w8 --overwrite {} \; 

ちなみにこの処理をWindows上で実行する場合は、下のソフトウェアが便利です。
文字コード変換ツール「KanjiTranslator」(フリーソフト)


● 各種エラーを修正


Windows上で実行した時にLabelの文字列などが文字化けする場合は、.cppファイルの先頭に下記の#pragmaを付けると良いかも知れません。(これで直ったのか他の事で直ったのか、記憶が定かではないのですが。)
#pragma execution_character_set("utf-8")

● 日本語フォントファイルをアプリに含める


Resources/fonts ディレクトリに使用したいフォントファイル(例えば「YuGothic.ttf」など)をコピーしておきます。
ソースコードではフォント名を指定する部分で "fonts/[フォントファイル名]" を使う様にします。


● Windows版で不要な機能をコメントアウト


今回はWindows版ではアプリ内購入で広告を消す機能は省略したので、アプリ内購入に関する処理を全てコメントアウトしました。






2016年12月3日

iOS Meetupで関数型言語を勧められたのでメモ

Elixir


[翻訳] なぜ私はElixirに賭けたか - メンテナンスプログラマになりたくなければ君もそうしろ - Qiita

Rails, Node.js の次はこれだそうです。ミリ秒ではなくマイクロ秒の単位でレスポンスを返す事が出来て、さらに200万の同時(?)接続を1台のサーバーでさばけると。来るべきIoT時代には必須の言語かも知れません。

大規模なオンラインゲームとかLINE並みのチャットサーバーとかには向いてそうだけど、現時点ではちょっと自分には必要ないかなあ、とも思うのですが上の記事を読むと確かに面白そうなので一応かじっておきたいなという気はします。

そういえば「プログラミングElixir」という本がちょっと前から気になっていてAmazonのカートに入ったままになっているので、こんどこそ買おうかな。




Clojure/ClojureScript


Clojure の Web アプリケーション開発について 1 から 10 くらいまで - Qiita

Webアプリのサーバーサイドが関数型言語で作れるとの事。


今思い出せば、私が初めて関数型言語というものの面白さに少しだけ触れたのはこのClojureについてのKindle本を通じてでした。



この本はオススメです。(たったの100円!)



FacebookのReactをいい感じに使えるReagent

ClojureScriptを使えばクライアントサイドも同じ言語で書けて、さらにビューはReactで生成出来ると。


そしてさらにClojureScriptはJavaScriptに変換されるのだから、React Native を使えばモバイル用のネイティブアプリも作ることが出来ると。

ClojureScriptとReact NativeによるiOSアプリ開発 - Qiita 

re-natal: Bootstrap ClojureScript React Native apps 


なるほど。これはぜひ試してみたいけど、まずはClojure勉強しないと。



Elm


Elmというミニマムでフレームワークにもなる関数型altJS言語を触ってみよう!!! - Qiita

関数型リアクティブプログラミング言語Elmに学ぶ フロントエンド開発の新しい形 【前編】 (1/5):CodeZine

ちょっと見た感じではこちらの方がClojureScriptよりもとっつき易そうな感じでしょうか。

ちょうどいつもお世話になっているEggHeadという動画学習サイトに最近Elmのコースが追加されたのでブックマークしていたところでした。

Start Using Elm to Build Web Applications * - Course by @splodingsocks @eggheadio









2016年11月24日

テスラ Model Xに試乗して来ました!




先日アラモアナショッピングセンターに行った時にふとTeslaのショールームに寄ったのですが、前から試乗してみたいなと思っていたので軽い気持ちで「試乗出来るの?」と聞いてみたら「もちろん!」と言われたので、じゃあ試乗してみようという話になりました。

その場でタブレットにメールアドレスや電話番号を記入して、試乗のスケジュールを確認。結構空いているみたいでしたが、ちょうどその日から3日後の午後3時がこちらとしても都合が良かったので予約しました。

そして当日、奥さんと2人で午後3時ちょっと前に再びショールームを訪れました。名前を言って試乗に来た旨を告げると、係の人(サム君)が来て水のボトルをくれました。しばらく待つと奥の部屋に通されます。そこは外に通じるガレージになっていて、真ん中にはあの「Model X」が待っていました。

一通り充電の仕方などの説明を聞いたあと、サム君がiPhoneを取り出して何やら画面をタップすると、目の前のModel Xがひとりでに動き出してガレージから外のパーキングに移動します。

早速、私が運転席、奥さんが後部座席、サム君が助手席に乗り込んで出発です。

通ったルートは下の通り。アラモアナから高速(H1)に乗ってカハラまで。往復40分以上は走ったので結構な距離です。




高速に乗ってしばらくすると、サム君が「自動運転を試してみる?」というので、どきどきしながらやってみました。

ウィンカーの下に短めのレバーがあり、それを手前に2回動かすと自動運転モードになりました。おそるおそるアクセルペダルから足を離し(ここまではいわゆるクルーズコントロールと同じですが)、さらにハンドルからもそっと手を離します。

もちろんテスラは緩くカーブしたH1の真ん中のレーンを何事もなかったかのようにペースを保って走り続けます。

思わず「Wow!」と口から出てしまう体験でした。

ただしばらくその状態を続けるとすぐに慣れてきて、「近い将来には全てのクルマがこうなるんだろうな」という実感が湧いてきました。不思議なものです。

自動運転モードのままでウィンカーを操作すると「自動レーン変更」が始まります。これも試してみましたが、あまりにもスムーズ過ぎてそれほど感動が無く「ふーん...」という感じでした。

一番感動したのは、一旦高速を下りて見通しが良くなったところで「ここなら思いっきり加速していいよ」と言われた時でした。

「え、いいの?」と思いながら、思い切ってアクセルペダルを踏み込むと予想通り一気に加速して身体がシートに押し付けられます。後部座席の奥さんが軽く悲鳴を上げたほどでした。それでもサム君は「今ので大体フル加速の10%ぐらい」と言っていました。もうちょっと踏み込んでおけば良かった。。。(笑)

それにしても面白いのはいくらアクセルを踏んでもエンジン音がしない点です。なんとも妙な感覚ですが、これが電気自動車なんですね。

さて、次に面白かったのは住宅街の道路で「自動縦列駐車」を試した時でした。「さあ、ここでストップして」と言われたところで停めてから、画面上のボタンを押すとクルマが勝手にハンドルを切ってバックして、ほんの10秒ほどで縦列駐車が完了です。いや、実際には10秒も掛かっていなかったかも知れません。奥さんはこれに最も感動していたみたいです。

カハラからアラモアナへの帰り道は運転を奥さんに代わり、私は後部座席に座りました。乗り心地はもちろん文句なしです。

帰り道、世間話をしながらサム君は「どう、このクルマ気に入った?」と我々が購入する気がありそうかどうか、探りを入れてきます。値段を確認してみると、3年のリース契約で月約1,100ドル(初期費用約6,500ドル)だそうです。

お値段を聞いて固まっている私達を見て、サム君はすかさず「今度出るModel 3なら月500ドルぐらいだよ。1000ドル払えば今すぐ予約出来るよ。」と勧めてきます。ただModel 3は今予約しても納車は2年後ぐらいになるそうです。

返事をうやむやにしながら話題をそらせたりしているうちに、アラモアナショッピングセンターに帰ってきました。Model Xの前で記念写真を撮ってサム君と握手して、楽しかった試乗が終わりました。


電気自動車、完全自動運転。

今はまだ価格も高くて珍しい存在ですが、数年後には確実にもっと普及して当たり前の存在になっているだろうと思います。今回の体験でその感触をはっきりと確かめられた気がします。





 

2016年10月5日

Nexus 6から中古のiPhone 5sに変えて起こった変化とは

1ヶ月ほど前に、愛用していたNexus 6を硬い床の上に落としてかなり派手に画面を割ってしまいました。実はまだ24回払いの残金も残っているというのに。(涙)

それから、余っていたiPhone 5sを仕方なくメインの携帯として使っています。今までアプリ開発のテスト用にたまに触るぐらいだったiPhoneですが、毎日使ってみると(予想通り)やっぱり使いやすいですね。

なんと言っても、まずポケットに入れたときの収まりの良さが違います。(笑) まあこれは単にサイズの違いなんですが。

ただ画面が小さい分文字を読むのが辛く感じます。

Nexus 6だと、FeedlyでRSSをチェックしてからSmartNewsで最新ニュースを読んで、その後Twitterをダラダラと眺める、という流れでゆうに1時間ぐらいはスマホの画面を見続ける事が出来たのですが、老眼が入ってきつつある眼にはiPhone 5sの画面サイズで同じ事をするのはきついです。


そこでこの1ヶ月で起こった変化とは、、、



Nexus 7(2013年モデル)の復活!! 



でした。

最近全然使わなくなっていたNexus 7ですが、このところ毎日活躍しています。このサイズ感は本当にいい感じです。




Googleからもうすぐ新しい7インチクラスのタブレットが出るらしいという噂もあるので、そちらも楽しみです。








 

2016年8月10日

Visual Studio Code で .js.map など特定のファイルを非表示にする

VS Codeで TypeScript のソースコードを書いていて Webpackやtscコマンドでトランスパイルした時にデフォルトでは .map ファイルも自動的に作成されます。

このソースマップファイルをエディタ上のファイル一覧には表示したくないので、その設定方法のメモです。

{
    "files.exclude": {
        "**/*.js.map": true,
        "**/*.js": {"when": "$(basename).ts"},
        "**/.git": true,
        "**/.DS_Store": true
    }
}


"**/*.js": {"when": "$(basename).ts"}

と書くと、「同じ名前で拡張子が .ts のファイルが存在する場合だけ .js を非表示にする」という事が出来るとの事。

これは便利。



【VSCode】Visual Studio Code 0.5.0の新機能まとめ - Tumbling Dice http://outofmem.hatenablog.com/entry/2015/07/20/154030

[VSCode]ファイルツリーの表示制御|杏z 学習帳
https://anz-note.tumblr.com/post/126106378651/vscode%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%84%E3%83%AA%E3%83%BC%E3%81%AE%E8%A1%A8%E7%A4%BA%E5%88%B6%E5%BE%A1






2016年7月17日

Azure Blob StorageにJavaScriptから直接アップロードする

Azure Blob Storageにブラウザ(JavaScript)から直接アップロードする必要があったので、簡単なサンプルを作ってみました。

https://github.com/mikehibm/AzureDirectUploader


JavaScriptでHTML5のFile APIを使ってフォルダ内のファイル一覧を表示し、「Upload」ボタンを押すと選択されたファイルを一つずつAzure Storageにアップロードします。


ブラウザから直接アップロードするとは言っても、最初に一度だけサーバー側の処理を呼び出す必要があります。ASP.NET WebAPIはそのためだけに使っています。

これはAzure Storageアカウントのアクセスキーをクライアント側に渡さずに、一時的に「Shared Access Signature(共有アクセス署名)」というものを生成してそれをクライアント側で使える様にするためです。

一度SASを取得してしまえば、有効期限が切れるまでそれを使ってブラウザからAzure Storageにアップロード出来ます。サンプルでは有効期限が切れたら再度SASを取得し直してアップロードを継続する様になっています。

クライアント側から直接アップロード出来ればサーバー側の負荷が減って便利ですね。






.

2016年4月23日

Android Support Libraryが古いとAdMobのエラーでアプリが落ちる件

3月に自作のアプリを更新したところ、急にクラッシュレポートの数が増えて来ました。




レビュー欄にも「インストールしたけど起動しません」という報告がちらほらと出始めて、あせりました。



エラーの詳細はこんな感じです。

java.lang.NoClassDefFoundError: android.support.v4.util.SimpleArrayMap
at com.google.android.gms.ads.internal.zzs.(Unknown Source)
...
at com.google.android.gms.ads.internal.ClientApi.createBannerAdManager(Unknown Source)
...
at com.google.android.gms.ads.BaseAdView.loadAd(Unknown Source)
at com.google.android.gms.ads.AdView.loadAd(Unknown Source)

java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/util/SimpleArrayMap;
at com.google.android.gms.ads.internal.zzs.(Unknown Source)
...
at com.google.android.gms.ads.internal.ClientApi.createBannerAdManager(Unknown Source)


どうもAndroid Support Libraryの「SimpleArrayMap」クラスが見つからないという事で、AdMobでの広告の表示時にエラーが発生しているようです。


AdMobがAndroid Support Libraryに依存しているというのは意識していませんでしたが、このエラーを見る限り依存しているみたいですね。

参考)
http://stackoverflow.com/questions/23717006/do-i-need-support-library-v4-for-google-play-services-ads




今までlibsフォルダに「android-support-v4.jar」をコピーしてあったのですが、それが古いままだったのが行けなかったようです。


(ちなみに今だにEclipse+ADTです。)


一旦libsフォルダのandroid-support-v4.jarを削除して、Android SDK内にあるものを「コピー」ではなく「リンク」として追加しました。



これでビルド時に最新のSupport Libraryが使われるようになるはずです。



この変更をしてアプリを更新した後は、AdMobが原因でのクラッシュは無くなりました。



しかし今回は手持ちの端末でテストしても全く起きなかった問題だったので、Androidアプリのメンテナンスはいろいろ大変だ奥が深いな〜、とつくづく思いました。笑)








.

2016年3月25日

Azure AutomationでSQL Databaseからデータを取得してEメールで送信する

定期的にSQL Databaseからデータを取得してEメールで送信する必要があったので、試行錯誤しながら「Azure Automation」でやってみました。


やりたかった事


毎日1回(もしくは数時間に1回)SQL DatabaseにアクセスしてSQL文を実行し、結果を取得する。その結果が条件を満たす場合のみ特定の宛先にEメールを送信する。



1. Automationアカウントを作成する。





2. Runbookを作成する。






3. Runbookで実行するスクリプトを入力する。



スクリプトはPowerShellで作成する必要がある様です。

JavaScriptとかにも対応してくれると大変嬉しいのですが。^^)

今回作ったPowerShellスクリプトはこんな感じになりました。私の場合PowerShellを触る事はめったにないのですが、.NET Frameworkの機能が呼び出せるのでDBにアクセスしたりメールを送ったり、かなり色んな事が出来そうですね。

<#
.SYNOPSIS
Outputs the result of a SQL command.
.DESCRIPTION
In order for this runbook to work, the SQL Server must be accessible from the runbook worker
running this runbook. Make sure the SQL Server allows incoming connections from Azure services
by selecting 'Allow Windows Azure Services' on the SQL Server configuration page in Azure.
This runbook also requires an Automation Credential asset be created before the runbook is
run, which stores the username and password of an account with access to the SQL Server.
That credential should be referenced for the SqlCredential parameter of this runbook.
.PARAMETER SqlServer
String name of the SQL Server to connect to.
.PARAMETER SqlServerPort
Integer port to connect to the SQL Server on.
.PARAMETER Database
String name of the SQL Server database to connect to.
.PARAMETER sql
SQL string to execute.
.PARAMETER $SqlCredName
String name of the credential asset containing a username and password for the SQL Server
.PARAMETER $SmtpCredName
String name of the credential asset containing a username and password for the SMTP server.
#>
workflow CheckDatabaseAndSendEmail
{
param(
[parameter(Mandatory=$True)]
[string] $SqlServer = "xxxxxxxxxx.database.windows.net",
[parameter(Mandatory=$False)]
[int] $SqlServerPort = 1433,
[parameter(Mandatory=$True)]
[string] $Database = "MyDatabaseName",
[parameter(Mandatory=$True)]
[string] $sql = "EXECUTE [dbo].[BuildEmailBody] 10",
[parameter(Mandatory=$True)]
[string] $SqlCredName = "sqldb",
[parameter(Mandatory=$True)]
[string] $SmtpCredName = "smtp"
)
# Get the username and password from the SQL Credential
$SqlCredential = Get-AutomationPSCredential -Name $SqlCredName
$SqlUsername = $SqlCredential.UserName
$SqlPass = $SqlCredential.GetNetworkCredential().Password
$SmtpCred = Get-AutomationPSCredential -Name $SmtpCredName
inlinescript {
$Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$using:SqlServer,$using:SqlServerPort;Database=$using:Database;User ID=$using:SqlUsername;Password=$using:SqlPass;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;")
$Conn.Open()
$Cmd=new-object System.Data.SqlClient.SqlCommand($using:sql, $Conn)
$Cmd.CommandTimeout=120
$Ds=New-Object System.Data.DataSet
$Da=New-Object System.Data.SqlClient.SqlDataAdapter($Cmd)
[void]$Da.fill($Ds)
$html = $Ds.Tables[0].Rows[0][0]
$Conn.Close()
if ($html.Length -eq 0) {
Write-Output "No data was found."
} else {
Write-Output $html
$To = "me@example.com"
$From = "auto@example.com"
$Subject = "Email from Azure Automation"
Send-MailMessage `
-To $To `
-Subject $Subject `
-Body $html `
-UseSsl `
-Port 587 `
-SmtpServer 'smtp.sendgrid.net' `
-From $From `
-BodyAsHtml `
-Encoding ([System.Text.Encoding]::UTF8) `
-Credential $using:SmtpCred
Write-Output "Email was sent."
}
}
}





4. SQLサーバーとSMTPサーバーの認証情報を「資産」として登録する。


     

管理画面で「資産」として登録しておいた認証情報はスクリプトから

    $SmtpCred = Get-AutomationPSCredential -Name $SmtpCredName

のように呼び出して使う事が出来ます。上手い仕組みになっていると思いました。



5. Runbookをテスト実行する。


新ポータルのテスト実行用UIはかなり使いづらかったので、まだ現時点ではテスト実行には旧ポータルを使った方が良いのかも知れません。




6. Runbookを「発行」する。







7. Runbookが定期的に自動実行される様にスケジュールを設定する。



必要であればWebHookをトリガーにしてジョブが走る様に設定する事も出来る様です。



以上、大体こんな感じでやりたかった事が出来ました!

やってみた後で言うのもアレですが、Azure Automationはどうもどちらかと言うとAzure内のVM(や各種サービス)の起動・停止・設定変更やバックアップなどのプロビジョニングの自動化のために設計されたもののような気がして来ました。実際、提供されているテンプレートもそういうものが大半でした。そう考えるとスクリプトがPowerShell前提なのもうなずけます。

もしかすると今回の様なアプリケーション寄りのバッチ処理にはAzure App Serviceの「Web Jobs」の方を使った方が良いのかも知れません。Web Jobsの方はJavaScript(C#, BATなども)の実行も出来るみたいです。



参考URL:


PowerShellでSQL文の実行結果件数を取得してみました - Qiita
http://qiita.com/kurukurupapa@github/items/7f455b879e7c47372e3d

もりもりゲームブログ: Windows Power Shellから、ストアドプロシージャを使用する方法 http://morimorigameblogg.blogspot.com/2009/12/windows-power-shell.html

ワークフローでの Windows PowerShell コマンドの実行
https://technet.microsoft.com/ja-jp/library/jj574197.aspx

社内SEの徒然なる日記 powerShellでメールを送ってみた
http://harikofu.blog.fc2.com/blog-entry-2.html

Powershellでメールを送信する最も簡単な方法 | いろんなサーバー設定研究所
http://tech.lecume.net/power-shell/send-mail


2016年3月18日

8GB RAM + 256GB SSD + タッチ対応のラップトップPCで気になったもの(2016年3月)

HP Pavilion 15t (Customized)  
$739.99


Lenovo Yoga 3 
$749.99




ASUS ZenBook UX303UA 


Dell XPS 13 Touch 
$1,399.99




Visual StudioやAndroid Studio, Unityなどでアプリを開発するためなら、多分 8GB/256GB でCPUが Core i5 なら十分ではないかと思います。


最初に挙げた3つはそれぞれ10ドルずつの違いなので非常に迷いますね。


CPUがCore Mで良ければ Yoga 700 ($699.99) などさらに安い機種がいくつかありました。


しばらく前からWindowsストアアプリの開発用に1台欲しいなと思っているのですが、なかなか決断が付きません。。。








.

16GB RAM + 512GB SSD + タッチ対応のラップトップPCで気になったもの (2016年3月)


Lenovo Yoga 900 
$1,249.99
$1,499.00




HP Spectre x360 - 15t (Customized)
$1,489.99
$1,999.99

http://www.dell.com/us/p/xps-13-9350-laptop/pd?oc=dncwt5156s&model_id=xps-13-9350-laptop



ざっと見た限りでは Lenovo Yoga 900のコストパフォーマンスの良さが光っている様に感じました。

ディスプレイはQHD+(3200x1800)だし。


次に仕事用に買うならこれかな。


と思ったら ZenBook Pro はよく見るとグラフィックスがNvidiaだし解像度もCPUも少し上ですね。


仕事用ならむしろこっちかな。(笑)


いずれにせよ、MacBookProのほぼ半額で買えてしまうというのが、なんとも有り難い事です。









.



2015年12月3日

Asus Chromebook Flipがかなり気になる - 米Amazonで249ドル!

昨日、BestBuyから特価セールのメールが来て、ついついクリックして中身を見てしまったのですが、Asus Chromebook Flip 10.1-Inchがなんと「199ドル」となっていました。

Chromebookは各所で評判がいいのでそのうち試して見たいな〜と思っていて、特にこの機種は少し前から気になっていました。

BestBuyで特価セールになっていたのはメモリが2GBのモデルだったので、「4GBモデルはどうなんだろう」と思ってAmazon.comで調べてみました。

Amazon.comの価格だと「239ドル」でした。「4GBでこれならいいかも!」 と思って早速カートに追加。

勢いでそのまま買ってしまおうかとも思ったのですが、「年末で何かと物要りだし」「とりあえず寝て起きてからもう一回考えよう」とひとまず寝ることにしました。朝起きてカートを見ると、なんと10ドル値上げされて、「249ドル」になっています。たった10ドルの差とは言え、ちょっと残念です。^^;

Amazonの割引価格ってコロコロ変わるんですよね。



日本だとメモリ4GBのモデルは「法人向け」となっているみたいですが、米Amazonだと普通に2GB/4GBを選択出来るようです。




ASUS Chromebook Flip C100PA-RK3288 タッチパネル/10.1インチ/シルバー (Amazon.co.jp, 2GBモデル)






Crouton というものを使えばほぼ普通のLinuxマシンと変わらない使い方が出来るのが魅力です。これが出来ずにChromeOSのみだったらそれほど興味が湧かなかったかも。


Chromebook Flip C100PA を買いました - みねこあ http://d.hatena.ne.jp/minekoa/20151005/1444061337



ただ、ひとつだけ気になるのは、解像度が 1280x800px という事。最近のトレンドから考えると少なくとも1920x1080は欲しいところ。

仕事でMacBookPro Retinaの画面に慣れてしまっているので、今さらドットが肉眼で識別出来てしまう画面を見るのは辛いのです。


という事で、かなり気になるAsus Chromebook Flipですが、購入直前のところで今回は踏みとどまってもう少し解像度が高くなったバージョンが出るまで待つ事にしました。次期モデルに期待です!







.

2015年10月22日

無料でしかも簡単にWebサイトを公開する方法を聞かれたら

「お店のWebページを作りたいんだけど」と聞かれたので、ちょっと調べました。


Azure Web Apps とか Google App Engine とか Heroku ならサーバーサイドプログラム込みでほぼ無料で使えるし、静的なサイトだったら Amazon S3 とか GitHub Pages でも良さそうです。

でも、プログラマーでもデザイナーでもなく、今まで全くWebサイトを作った事が無い人にいきなりこれらのサービスを使えというのは厳しいものがあります。


そこで何か良い方法は無いものかと調べていたら、こんなのを見つけました。


Netlify



BitBalloon


どちらもドラッグ&ドロップでフォルダごとアップロード出来て、無料で使えます。
(独自ドメインの設定は有料ですが。)


これらのサービスが従来のレンタルサーバーなどと比べて優れていると思われるのは、コンテンツがグローバルなCDN経由で配信される点です。

そのため、大量アクセスにも強く、ページの表示速度も速いサイトを作る事が出来そうです。




あと、オンラインで販売まで行いたい場合は、日本では stores.jp か BASE が人気みたいですが、アメリカでは Shopify が圧倒的に強いみたいですね。







.

2015年10月16日

米国在住でSprintの携帯を持っている人は要チェック! 無料で使えるMVNOサービスを発見

しばらく使っていないiPhone 4SやGalaxy S3があるので、何かMVNOで安いプランは無いかな〜と探していたところ、ありました!

RingPlus Mobile


最初の3つが「Free Plan」で、そのうち「Future - Phase 9」というのだと毎月500MBのデータ通信(LTE)が可能となっています。

そう、無料です!

これはもう早速申し込んでみました。

契約するのに必要だったのは、

  1. Twitterなどのソーシャルメディアで拡散する事。
  2. 使っていないSprintの携帯(CDMA端末)。
  3. クレジットカード情報。

の3つだけでした。


1番目はこんな感じです。


拡散するソーシャルメディアは、Facebook、Google+、LinkedIn、Twitterから選べます。

アカウント認証後に、数パターンの文章から選んでツイートするフォームが表示されるので、コピペしたりする必要も無く簡単です。


2番目の端末ですが、CDMA方式に対応した端末が必要になります。既に持っているものがあれば、端末に記載されているIMEI番号というものを入力すれば使用可能かどうかチェックしてくれます。Sprintから売られている端末であればほぼ使えるのではないでしょうか。

今回は使っていない iPhone 4S があったのでこれを使うことにしました。使用可能な端末を持っていない人は、ebayなどで探すか、またはRingPlusのサイト内で新規に購入する事も出来ます。


3番目のクレジットカード情報は、最初に$5.62チャージされるのでその支払いのために必要です。この内訳は、
 $5.00 「Top Up」(要するにデポジットみたいなものだと思います。)
 $0.62 税金など
となっています。

という事は、多分無料プランとは言っても毎月$0.62はチャージされる事になりそうです。


プランに含まれているデータ通信量は500MB/月ですが、必要であれば「Add On」を購入して増やす事が出来るようです。

現在のところ、500MBで7ドル, 1GBで8ドルとなっています。



契約手続きが完了したら、あとは数分待てばiPhoneがSprintのネットワークにつながり、通話が出来る様になりました。
左上にSprintのキャリア名が表示されています。

繰り返しですが、無料プランですよ! スゴくないですか?


早速データ通信の速度を計測用のアプリで計ってみたところ、下り4Mbps, 上り1Mbpsぐらい出ています。私が今住んでいる地域でのSprintのLTE回線速度は大体こんなものなので、特に帯域制限が掛かっている様な感じも無さそうです。

パソコンへのテザリングも試してみましたが、全く問題無しです。

ほぼ無料でここまで出来てしまって、本当にこの会社大丈夫なんだろうかと心配になるぐらいです。出来るだけ潰れずにこの無料プランを続けてもらいたいものです。

日本から友人が来た時に貸すなど、手元に余ったCDMA端末がある場合には非常に便利に使えるのではないでしょうか。





.

2015年9月18日

React.jsの練習に◯☓ゲームを作ってみた。

ある日の深夜1時にふと思い立ってどうしても実際にReactで何か作りたくなり、朝5時までかかって大体の部分を作りました。

終了判定の部分がバグっていたりしたので2時間ほど眠ってからまた3時間ほどかけてデバッグ。翌日にまた約1時間かけて調整をして一応出来ました。

合計8時間もかかってますね。 汗)   
何せ初めてのReactなので。

クリックすると別ウィンドウでRunstant Liteが開きます。
https://goo.gl/Psx5fl

使ったツール


@phi_jp さん作成の「Runstant Lite」素晴らしいです。
ソースコードをエンコードしてURLに保存するというアイデアには脱帽しました。



初めてReact.jsで書いてみた感想


実は今AngularJSも勉強中ですが、それと比べるとReactの方が覚えないと行けない事が圧倒的に少ないので精神的に楽です。

まず親コンポーネントをとりあえず作って四角いDIVを表示する事が出来れば、そこに一つずつ子コンポーネントを付け足して行く感じでUIの作成はそれほど苦労せずに出来ました。

今回は

  • Board (盤面の背景を描画)
  • Cell  (個々のセルを描画)
  • StatusPanel (「X」の番です、などゲームの状態を表示)
  • ResultPanel (「X」の勝ち!、引き分け、などの結果を表示)

の4つのコンポーネントを作成しました。

最初は個々のCellにStateを持たせてクリック時の表示の更新をCellの内部で行っていました。でもそれだとBoard全体としての処理(終了判定など)との連携が面倒になる事に気付いて、Reactの世界の外側に作ったAppクラスで全ての状態を管理する様にしました。

ReactはあくまでView担当なので、Modelは自分で作らないとダメなんですよね。

そうなると今度は
1. Reactのコンポーネント内で発生するイベント(クリックされた、など)をModel側に伝える方法
2. 逆にModel側で発生するイベント(勝敗が着いた、など)をReactコンポーネント側に伝える方法
が必要になります。

前者の場合は単純にonClickなどのハンドラからAppクラスの関数を直接呼ぶ事も出来るのですが、後者のやり方が分からずにちょっと悩みました。

そこでFlux関係の解説を読み漁って、「とにかくPubSubで疎結合にしろ」という事なのかな〜と理解しました。

その結果、自分なりにEventEmitterもどき(?)を作って、Reactコンポーネントとモデルが必ずそれを経由して対話する様な形になりました。よくFluxで言われる「単方向のフロー」にはなっていない様な気もしますが、一応「PubSubで疎結合」にはなっているのではないかと思います。

こういうのはやっぱり自分で作って試行錯誤して見ないと腹の底から理解する事は出来ないですね。

単純な◯☓ゲームでしたがとりあえず作ってみて、Reactへの理解を少し深める事が出来たと思います。Android版のReact Nativeも出て来た事だし、これからもさらにReactに時間を投資して見ようかなと思います。


※追記 


きちんとFluxに則って作られたきれいな◯☓ゲームを見つけました。コードも見た目もきれいです。これは参考になります。

https://github.com/hackhat/tic-tac-toe-flux

ついでに、Reactで作られたゲームの一覧もありました。

36 Game Examples with ReactJS
http://react.rocks/tag/Game



React.jsの勉強のために読んだ本


入門 React ―コンポーネントベースのWebフロントエンド開発



参考になったサイト


reactjs - Reactデザインパターン - すべてがeになる - Qiita
http://qiita.com/shunjikonishi/items/ba6d981880e316131836

Flux – Dispatcher【日本語訳】と実装のポイント | mae's blog
http://mae.chab.in/archives/2738

一人React.js Advent Calendar 2014 - Qiita
http://qiita.com/advent-calendar/2014/reactjs

チュートリアル | React
https://facebook.github.io/react/docs/tutorial-ja-JP.html




.

2015年6月27日

JavaScriptでスマホゲームアプリを作る - Unity編

前回のCocos2d-JS編からだいぶ間が空いてしまいましたが、今回はUnity編です。

Unityのバージョンも5になって、新しいGUI機能が追加されていたりして2dゲームの作成もかなりやり易くなっている様です。

今回Unity5を使って出来たものはこんな感じです。



https://github.com/mikehibm/15puzzle-unity


● 新GUI(uGUI)の使い勝手


定番のNGUIを使った事が無いので比較できないのですが、uGUIは特に問題無く使えそうです。
気になるマルチ解像度への対応も簡単。どんな画面サイズでもボタンを常に右上に置きたい、という場合でもアンカーのプロパティ設定だけで行けるので気に入りました。今回のアプリではタイトル画面のメニュー、ゲーム画面のホームボタンとリスタートボタンをuGUIで作成しています。



● Tweenライブラリが色々あって迷う


パズルのピースを移動する時などにアニメーションをするためのTweenライブラリですが、いろいろと選択肢があるので結構迷います。

今回は LeanTween というのを使ってみました。他に iTween, Hotween なども良さそうでした。

LeanTweenは単体のアニメーションを実行するだけなら使い易いのですが、複数のアニメーションを組み合わせて順次実行し、それをさらにループさせたいという様な場合にコールバックを多段に繋がないと行けなくなるのでちょっと面倒です。


● UnityのJavaScriptは普通のJavaScriptではない


これは一番困った点かも知れません。UnityのJavaScriptは、C#にJavaScriptの皮を被せた様な妙な言語でした。。。

Unity の JavaScript でよくわからないことメモ

こんなヘンテコな言語に慣れるぐらいならいっそC#で開発した方が良いと思います。次にUnityで作る時は迷わずC#ですね。


● Cocos2d-JSと比較した感想


GameObjectとComponentの関係、GameObjectにスクリプトを貼り付けて行くやり方を分かった瞬間に、「Unityええやん!」と思ってしまいました。

Coco2d-JSと比べても、もしかするとUnityの方が生産性が高いかも。。。
今まで1年以上もCocos2d-x/JSで開発して来た私ですが、「もっと早くUnity始めてれば良かった」という気もちょっとして来ました。

次はUnity/C#でもうちょっと複雑なものを作って見ようかなと思います。






以上!

2015年4月11日

ブラウザさえあればASP.NETアプリの開発が出来る時代に既になっていたという話

『Visual Studio Online Monaco』の開発環境が素晴らしい。


まずは、Azure Web Siteの管理画面でVisual Studio Onlineを有効にする。


「Edit in Visual Studio Online」というメニューが有効になるのでそれをクリック。



1. ブラウザ内でソースコードの編集が出来る。



サクサク動くし、もちろんコード補完もバッチリ。




2. ブラウザ内でコンソールを開いて各種コマンドが使える。

gitコマンドで色々出来る。node が入っているので npm も使えるし gulp や bower も使える。まだそんなに使い込んでないですが、とりあえず色々出来そうな予感。




3. gitの差分はGUIで見やすく表示してくれる。



4. コンソール内で「msbuild」と打ち込めばクラウド上でソリューションをビルドしてくれる。



5. 一つのWebサイト内に複数のアプリケーションを配置出来る。

メインのサイトと管理用サイトを分けたり、WebAPIだけ別アプリケーションにしたり出来る。



6. DB接続文字列やアプリケーション設定はAzureの管理画面から上書き出来る。

ソース上のWeb.configファイルにはとりあえず仮の値を入れておいて、別途Azure Web Siteの管理画面から設定すれば実行時にはそちらの値で上書きされる。これは便利。


正直、特に4番のビルドについては「Visual Studio Online (MonacoではないTFSのオンライン版)」のCI機能を使わないと出来ないとさっきまで誤解していました。

この動画を見て初めて知りました。

Getting started with ASP.NET | Visual Studio Online "Monaco" | Channel 9

ブラウザ内のコンソールで「msbuild」と打てばクラウド上でビルドが出来るなんて!
衝撃でした。笑)

ソリューション内に複数のアプリケーションがある場合はAzure Web Siteの管理画面で仮想アプリケーションとしてそれぞれのフォルダを指定してやるだけでOK。

ローカル環境にVisual Studioを入れなくてもブラウザだけでここまで出来るんなら、もうPC無しでいいんじゃない? という気がしてくる。

Visual Studio Online Monaco、すごい!





* 4/16/2015 追記:

もう少し「Monaco」を使ってみて気付いた点です。

- コード補完はまあまあだけどやっぱりローカルのVisual Studioの方が快適。

- Monacoではソリューションファイル(*.sln)やプロジェクトファイル(*.csproj)の作成・変更が難しい。

例えばC#のソースファイルを新規作成してプロジェクトに追加したいと思っても、ローカルのVisual Studioの様に右クリックして「プロジェクトに含める」を選ぶ様な事は出来ません。プロジェクトファイルを手動で編集すればなんとかならない事はないですがかなり面倒です。

この辺りが今後改善されればさらに便利になりそうですね。
(と言っても次期のASP.NETではプロジェクトファイル自体が必要無くなるらしいので、別に気にしなくてもいいのかも。)








 .