Azure上のUbuntuにRemote Desktopで接続する

Microsoft Azure上にインストールしたUbuntuにRemote Desktopで接続する手順を記しておきます。
実は普通のパソコンにインストールしたUbuntuであれば、Remote Desktopで接続できるように設定を変更するのは難しくありません。以下のコマンドを実行するだけです。

sudo apt install ubuntu-desktop
sudo apt install xrdp

ところがMicrosoft Azure上ではこれだけではRemote Desktopで接続することができません。Remote Desktopから接続してログインしても白黒チェックの背景に、×のマウスカーソルが表示された状態・・・素のX-Serverに接続された状態のまま、グラフィカルシェルが起動しません。
これはMicrosoft Azure上の仮想マシンにはビデオアクセラレータボードが提供されていない事が原因です。Ubuntuの標準グラフィカルシェルのUnityは3Dアクセラレータボードが必須となるために、そのままでは上手く機能しないのです。Unityは3Dアクセラレータがない場合には、OpenGLをソフトウェアでエミュレーションして起動するのですが、2Dのアクセラレータすら提供されてませんので起動しません。ではgnomeならどうかというと、フォントのレンダリングエンジンがアクセラレータボードを必要としてしまうために、やはりそのままでは起動しないのです。
これを回避するにはMicrosoft Azure上のUbuntuにxfceやlubuntuといった軽量グラフィカルシェルをインストールする必要があります。ここではUbuntu用の軽量グラフィカルシェルのlubuntuを使って設定したいと思います。

sudo apt install lubuntu-desktop
sudo apt install xrdp

のようにして必要なパッケージをインストールした後、次のコマンドを実行して.xsessionを作成しlubuntuをグラフィカルシェルとして設定します。

echo lxsession -s Lubuntu -e LXDE > ~/.xsession

Microsoft Azureの管理ポータルから仮想マシンを選択して、エンドポイントにRemote Desktopを追加し、通信を許可します。
以上でRemote Desktopによる接続が可能な状態になります。Windows上でRemote Desktopを起動してURLを入力し接続してログインしてみてください。

RabbITを使ってAndroidのデータ通信量を削減する

RabbIT ProxyはHTMLから不要な文字やコメントを削除したり、GZIPで圧縮したり、あるいは画像データの品質を下げるような変換をすることでデータ転送量を減らすソフトウェアです。その当りの仕組みはOpera Maxと同様ですが、自分でサーバーを用意するのであれば画像の品質をどの程度まで下げるのかなど、自由にパラメータ調整を行える分だけ、より使い勝手の良い通信料削減システムを構築できます。
RabbITはJavaで開発されておりWindowsでもLinuxでも動作します。今回はLinux上に構築してみます。

Java Runtimeのインストール
詳細は説明しません。最新のJava Runtimeをインストールします。最近のディストリビューションではOpen JDKがデフォルトになっていますが、Open JDKではjpeg画像ファイルを扱えないためRabbIT Proxyが動作しません。

RabbITのインストール
RabbIT Proxyをダウンロードします。http://www.khelekore.org/rabbit/から最新のバイナリをダウンロードします。ダウンロードしたrabbit4.xx-bin.tar.gzを解答すると、rabbit4.xxというフォルダが作成されます。後はrabbit4.xxフォルダに移動して次のコマンドを実行するだけです。

java -jar jars/rabbit4.jar -f conf/rabbit.conf

パソコンのブラウザでプロキシ設定を追加して、サーバーのポート9666に接続されるようにしてみましょう。Proxyとして動作しているはずです。

RabbITの設定
このままではセキュリティ上よろしくないのでいくつか設定を変更します。設定はconf/rabbit.confを変更します。
まずはポート番号を変えておきましょう。デフォルトは9666ですが、サイコロでも振って適当なポートに割り当てます。

# This is the port the proxy listens on.
# Use any port available (over 1024 unless you run as root).
port=9666

次にProxy接続時にユーザIDとパソワードを使うように変更します。
httpinfiltersの末尾に”,rabbit.filter.ProxyAuth”を追加します。

# Here we filter the HTTP header, these filters should have an
# public static HTTPHeader doHTTPInFiltering (Socket, HTTPHeader,
# Connection)
# method that may modify the incomming request. If a HTTPHeader is
# returned it is sent to the client and the request is finished. (this
# is an easy way to block some ads and other bad stuff).
# The list is comma separated and full class names has to be used.
#
# Available filters today are:
# HttpBaseFilter   this is basically needed, use it.
# DontFilterFilter stop the proxy from filtering certain pages.
# DontCacheFilter  stop the proxy from cacheing certain pages.
# BlockFilter      Dont allow access to certain pages.
# HttpSnoop        Print the Http headers out on System.out.
# ProxyAuth        Perform proxy authentication on all users, backend is some type of db
#                  This filter needs to be after HttpBaseFilter to work correctly.
# ReverseProxy     Transform requests to "/some/page" into "http://some.host/some/page"
#                  If you use the reverse proxy option, you probably
#                  want it first in the list
# NoGZipEncoding   A filter that removes "Accept-Encoding: gzip". Not very useful anymore
#                  since rabbit can repack gzip:ed and deflated files.
# RevalidateFilter A filter that makes sure that resources are always re-validated
# SetHeaderFilter  A filter that can add request or response headers.
# SQLBlockFilter   A filter similar to BlockFilter, but that uses a sql database to block
#                  access to a set of hosts
#
# by default we use a few filters,
httpinfilters=rabbit.filter.HttpBaseFilter,rabbit.filter.DontFilterFilter,rabbit.filter.BlockFilter,rabbit.filter.RevalidateFilter,rabbit.filter.ProxyAuth

Proxyに接続するためのユーザーIDとパスワードはconf/allowedに記述します。もともと書かれている”RabbIT:RabbIT”という記述を削除して、”example:password”を追加します。
ここで再びパソコンブラウザにProxyを設定してつないでみましょう。ちゃんとユーザー認証付きでつながりますか?

AndroidのProxyを設定
昔はAndroidのProxyを設定するにはroot権限取得とか脱獄が必要でしたが、今は脱獄せずにProxyを設定するツールも出ています。わたしはDronyを使ってProxyを設定しました。

screenshotshare_20150127_002057SETTING画面を表示して”Settings for not listed networks”をクリックします。これで下の画面が表示されます。

 

 

 

 

 

 

screenshotshare_20150127_002141

NOT LISTED NETWORKS-MANUAL PROXYの項目にProxyサーバーを設定します。Proxy TypeをPlain Http Proxyに、Hostname、Port,Username、Passswordをそれぞれ設定します。

このあとDronyによるフィルタリングを有効にすると、Proxyサーバー経由で通信が行われるようになります。

 

 

 

 

ちなみに、Proxy経由だと動作しなくなるソフトも多数あります。そういうソフトはFILTERのRulesでProxyを経由しないように個別にDirectに指定します。逆にDefault valueをDirect All(Proxyを経由しない)に指定しておいて、圧縮の効くソフトだけをRulesにAllowedで追加しても良いかもしれません。

というわけで、ちょっと技術には詳しいんだという方は試してみてはいかがでしょう?

念のためいくつか注意点も・・・

※自宅で普段使っているWindowsパソコンにProxyを導入してインターネットから接続を受け付けるサーバーとして使うことはお勧めしません。サーバーをインターネットに公開したとたんに、数多くのクラッカーからの接続が始まります。業務やプライベートなデータを取り扱うパソコンをサーバーにするのはやめましょう。

※可能なら接続元IPアドレスも制限しましょう。auやDocomoのスマホや携帯電話が使用するIPアドレスの範囲は公開されていますので、それらのIPアドレスからの接続を禁止すればより安心です。

Androidでデータ通信量を節約する

どこのキャリアもデータ通信量は上限がついてしまって、使いすぎるといざというとき、ブロードバンドを使えずに困ってしまいますよね。Androidに標準でインストーリされているChromeブラウザにはデータを圧縮して通信することで、通信量を削減する機能があるので、有効にしておくとよいですよ。

screenshotshare_20150122_000536
データの圧縮を有効にするにはChromeを起動した後、メニューから設定を開きます。

screenshotshare_20150122_000207
設定画面の下のほうにある「データ使用量を節約」をクリック。

screenshotshare_20150122_000220
データ使用量を節約の画面から右上のスイッチをONに切り替えます。

ただしこのデータ圧縮機能はChrome上で閲覧した分に限られます。Opera MAXのようにすべての通信について圧縮してくれるわけではありません。ただ逆に有効になってほしくないときには、Chrome以外のブラウザから閲覧すればよいので、かえって使い分けもしやすいのでお勧めです。

参考:Chrome モバイル ブラウザでのデータ使用量を節約する

Visual StudioでGroongaを使用するには

groongaのWindows用バイナリに含まれるライブラリは拡張子が….aとなっている事から分かるようにLinux用の環境でビルドされたものです。Visual Studioからgroonga APIを使用するにはソースコードをダウンロードしてWindows上でビルドしなおす必要があります。

次のURL(http://www.cmake.org/)よりダウンロードして、CMakeをインストールします。特に特筆すべき事はありません。

Visual Studio Expressをインストールします。Visual C++ Express 2010は次のURL(http://www.microsoft.com/visualstudio/jpn/downloads)からダウンロードできます。groongaのリファレンスマニュアルではVisual C++ Express 2010を前提に記載されていますが、現行バージョンのVisual Studio 2013 Expressでも問題ありません。

CMAKEのインストール先フォルダをPATHに追加します。

Visual Studioのインストール先フォルダにあるvcvarsall.batを実行して環境変数を設定します。

下記のコマンドを実行してインストールします。Visual Studio 2013を使用する場合には、「Visual Studio 10」を「Visual Studio 12」に置換えます。

cmake . -G "Visual Studio 10 Win64" -DCMAKE_INSTALL_PREFIX=C:\groonga
cmake --build . --config Release
cmake --build . --config Release --target Install

多数のワーニングが表示されますが、気にするのは止めましょう。

Workbooks.Openでマクロの自動実行を防ぐ

Excel VBAからWorkbooks.Openにてファイルを開くときに、WorkBook_Openに書かれたマクロの自動実行を防止するにはファイルを開く前後において、Application.EnableEventsにおいてイベント処理を停止しておくと良い。

Application.EnableEvents = False
WorkBooks.Open(~)
Application.EnableEvents = True

error : Cannot find module ‘q’が発生する

Visual Studio 2013 Update 4およびVisual Studio Tools for Apache Cordova CTP3.0の導入後に、Cordovaのプロジェクトをビルドすると「error : Cannot find module ‘q’」が発生してビルド出来なくなる場合があります。これはNode.js関連パッケージのインストールが正常に完了していないことが原因です。Visual Studio 2013のインストールフォルダの下にある「Common7\IDE\Extensions\spzoscmg.jkh\package\svs-mda」および「Common7\IDE\Extensions\spzoscmg.jkh\package\svs-mda-targets」に移動した後、以下のように「npm install -g」コマンドを使ってインストールを再度実行すると直ります。

cd C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extension\sspzoscmg.jkh\package\svs-mda
npm install -g
cd C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\spzoscmg.jkh\package\svs-mda-targets
npm install -g

Visual Studio Tools for Apache Cordova CTP2からCTP3への更新

Visual Studio 2013 Update4をインストールする前に Visual Studio Tools for Apache Cordova CTP2をインストールしていた場合には、Visual Studio Tools for Apache Cordova CTP3をインストールする必要がある。(インストールし直さないとTypeScript関連のコンパイルエラーになる)

インストーラをダウンロードするまでの手順は Visual Studio Tools for Apache Cordova CTP 2の時と同様だが、ダウンロードしたvs2013mda_0.3.exeを実行すると下記のようなエラーが出る。

install

旧バージョンのアンインストールが必要な旨と、ダウンロード手順のリンク先が示されているが、リンク先のアンインストール手順はCTP1からCTP2へ更新する場合の手順で、この通りに実施してもアンインストールできない。

リンク先の「You cannot install Visual Studio Tools for Apache Cordova CTP3.0 in Visual Studio 2013」に書かれている以下のコマンドの赤字の部分を次のように書き換える必要がある。

リンク先のページ上に記載されているパス:

“%ProgramData%\Package Cache\{dea88246-f74a-4171-ad6c-d9c978bf2973}s2013mda_0.1.exe” /uninstall /passive /force /burn.ignoredependencies={53d408db-eb91-43fb-9d8f-167681c19763};vsupdate_KB2829760

実際にファイルが置かれている場所のパス:

“%ProgramData%\Package Cache\{38f367f1-1468-4f16-a4c4-29747084003b}s2013mda_0.1.exe” /uninstall /passive /force /burn.ignoredependencies={53d408db-eb91-43fb-9d8f-167681c19763};vsupdate_KB2829760

上記コマンドを実行するとCTP2のアンインストールが始まります。アンインストール完了後にあらためてvs2013mda_0.3.exeをインストールすれば完了です。

Visual Studio Tools for Apache CordovaでENOENT, no such file or directory ‘C:\Users~\.cordova\lib\android\cordova3.5.0\VERSION’が発生する

Visual Studio Tools for Apache CordovaのHello Worldに従って、新規に作成したプロジェクトをAndroidのエミュレーター上で実行しようとしても「EXEC : error : ENOENT, no such file or directory ‘C:\Users\<username>\.cordova\lib\androidc\ordova3.5.0\VERSION’」となり実行できない。Multi-Device Hybrid Apps FAQでは「C:\Users\<username>\.cordova\lib\tmp<somestring>」以下からVERSIONファイルを検索してコピーするように記載されている。実際にはVERSIONファイルだけではなくて、「C:\Users\<username>\.cordova\lib\tmp<somestring>」以下にあるファイルをすべてコピーする必要がある。

Visual Studio Tools for Apache CordovaでENOENT, no such file or directory ‘C:\Users~\.cordova\lib\android\cordova3.5.0\VERSION’が発生する

Visual Studio Tools for Apache CordovaのHello Worldに従って、新規に作成したプロジェクトをAndroidのエミュレーター上で実行しようとしても「EXEC : error : ENOENT, no such file or directory ‘C:\Users\<username>\.cordova\lib\androidc\ordova3.5.0\VERSION’」となり実行できない。Multi-Device Hybrid Apps FAQでは「C:\Users\<username>\.cordova\lib\tmp<somestring>」以下からVERSIONファイルを検索してコピーするように記載されている。実際にはVERSIONファイルだけではなくて、「C:\Users\<username>\.cordova\lib\tmp<somestring>」以下にあるファイルをすべてコピーする必要がある。

Visual Studio Tools for Apache CordovaでENOENT, no such file or directory ‘C:\Users~\.cordova\lib\android\cordova3.5.0\VERSION’が発生する

Visual Studio Tools for Apache CordovaのHello Worldに従って、新規に作成したプロジェクトをAndroidのエミュレーター上で実行しようとしても「EXEC : error : ENOENT, no such file or directory ‘C:\Users\<username>\.cordova\lib\androidc\ordova3.5.0\VERSION’」となり実行できない。Multi-Device Hybrid Apps FAQでは「C:\Users\<username>\.cordova\lib\tmp<somestring>」以下からVERSIONファイルを検索してコピーするように記載されている。実際にはVERSIONファイルだけではなくて、「C:\Users\<username>\.cordova\lib\tmp<somestring>」以下にあるファイルをすべてコピーする必要がある。