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>」以下にあるファイルをすべてコピーする必要がある。

net::err_proxy_connection_failedが表示されてWEBを閲覧できない

screenshotshare_20141024_092913
AndroidでWEBなどを閲覧しているときに、net::err_proxy_connection_failedが表示されてWEBを閲覧することが出来なくなりました。AndroidのProxyサーバーの設定はちょっと深くてわかりにくいのですが「設定→Wi-Fi→接続先を長クリック→ネットワークを変更」にあります。この画面で「詳細オプションを表示」をチェックすると表示されます。

プロキシの設定が「手動」になっており、IPアドレスは127.0.0.1、ポートに3128が設定されている状態なので、プロキシの設定を「なし」にして保存します。これで正常に閲覧することが出来るようになります。

・・・が、気がつくとが元に戻ってしまいます。

screenshotshare_20141028_034907
どうやら、このProxy設定はカスペルスキーインターネットセキュリティが「危険サイトブロック」の機能を提供するために使っているようなのです。Wi-Fi接続の時だけProxy設定を有効にして実現しているというのも変な話なのですが・・・。カスペルスキーインターネットセキュリティの設定画面から「危険サイトブロック」のチェックを外すと、Proxy設定が「なし」になり、正常に閲覧できるようになりました。

yum updateでsatyr.x86_64の更新に失敗する

yum updateを実行すると以下のメッセージが表示される。

# yum update
読み込んだプラグイン:fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
* base: ftp.nara.wide.ad.jp
* epel: ftp.kddilabs.jp
* extras: ftp.nara.wide.ad.jp
* updates: ftp.nara.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ satyr.x86_64 0:0.13-4.el7 を 更新
---> パッケージ satyr.x86_64 0:0.14-2.el6 を アップデート
--> 依存性の処理をしています: librpm.so.1()(64bit) のパッケージ: satyr-0.14-2.el6.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: satyr-0.14-2.el6.x86_64 (epel)
             要求: librpm.so.1()(64bit)
問題を回避するために --skip-broken を用いることができます。

以下のyum list satyr.x86_64の実行結果を見て欲しい。

# yum list satyr.x86_64
読み込んだプラグイン:fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
* base: ftp.nara.wide.ad.jp
* epel: ftp.kddilabs.jp
* extras: ftp.nara.wide.ad.jp
* updates: ftp.nara.wide.ad.jp
インストール済みパッケージ
satyr.x86_64                                        0.13-4.el7                                         installed
利用可能なパッケージ
satyr.x86_64                                        0.14-2.el6                                         epel

この問題はEPEL( エンタープライズ Linux 用の拡張パッケージ)リポジトリに登録されているsatyr.x86_64のバージョンと、CentOS7のBASICリポジトリに登録されているsatyr.x86_64のバージョンが異なるために発生している。yumコマンドはEPELに登録されているバージョンの新しいsatyrに更新しようとするが、CentOSのBASICリポジトリに登録されている依存パッケージのバージョンが低いため更新に失敗する。
基本的に–skip-brokenオプションを指定して、無視してしまって問題ない。
もしどうしてもエラーが表示されるのが気持ちが悪いなら「EPELリポジトリを使うのを止めろ」という話になる。

CentOS 6.5 -> CentOS 7.0へのアップグレード

PHP5.3のサポートが2014年8月14日で終了するとアナウンスされていたので、いい加減にCentOS6.5からCentOS7.0へのアップグレードを行った。CentOS6.5に付随するPHPは5.3系、もちろんPHPだけ手作業で更新することもできるのだけど、CentOSのFull Updatesのサポート期限まで後1年もないし、良い機会なのでOS丸ごとアップデートすることにする。

実は今までLinuxをインストールするところまでで、まともに使ったことがないので、アップグレード作業は初めての経験。

CentOS6.5->7.0へのUpgrade

1.yum updateを実行して既存のアップデートを全て適用する。

2.preupgrade用のツールをインストールする。

必要なモジュールはhttp://dev.centos.org/centos/6/upg/x86_64/Packages/におかれているので、こちらよりダウンロードしてインストールする。以下のコマンドを実行。

yum -y install openscap pcre-devel libxml2-devel libxslt-devel m2crypto python-simplejson mod_wsgi
rpm -ihv http://dev.centos.org/centos/6/upg/x86_64/Packages/preupgrade-assistant-1.0.2-33.el6.x86_64.rpm
rpm -ihv http://dev.centos.org/centos/6/upg/x86_64/Packages/preupgrade-assistant-contents-0.5.13-1.el6.noarch.rpm
rpm -ihv http://dev.centos.org/centos/6/upg/x86_64/Packages/preupgrade-assistant-ui-1.0.2-33.el6.x86_64.rpm
rpm -ihv http://dev.centos.org/centos/6/upg/x86_64/Packages/python-rhsm-1.9.7-1.el6.x86_64.rpm
rpm -ihv http://dev.centos.org/centos/6/upg/x86_64/Packages/redhat-upgrade-tool-0.7.22-1.el6.noarch.rpm

2.preupgを実行してファイル更新の準備をする

次のコマンドを実行してファイルの更新を行う。

preupg

3.redhat-upgrade-toolを実行してファイルを更新する

次のコマンドを実行してファイルの更新を行う。かな~り時間がかかるので気長に待つ。

redhat-upgrade-tool --network 7.0  --instrepo http://ftp.iij.ad.jp/pub/linux/centos/7/os/x86_64/ --force

4.OSを再起動

5.再びyum updateを実行して既存のアップデートを全て適用する。

これで一応はCentOS7.0の環境に更新される。だがもともと動いていたWordpressは機能していない。CentOS6.5のインストール以後に変更した諸々の設定ファイルはCentOS6.5の時のままであったりするので、設定ファイルの見直しが必要になる。

WordPressの移行作業

1.mariadbのアンインストールとMySQLのインストール

CentOS 7.0ではMySQLの代わりにMariaDBがインストールされている。新規にインストールするならMariaDBに切り替えても良いのだけど、旧環境をできる限り生かしたいので、MariaDBをアンインストールして、新たにMySQLをインストールすることにする。

yum -y remove maria*
yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
yum -y install mysql mysql-devel mysql-server mysql-utilities

2.Apatchの再設定

CentOS6.5の頃のApatchの設定ファイルがそのまま残っているが、Apatchのバージョンが上がっているため、その設定ファイルのままでは動作しない。httpd.conf.originalを元に改めて設定をやりなおす。この時modrewriteが無効になっているので、<Directory “/var/www/html”>のAllowOverride NoneをAllowOverride Allに変更する。

3.MySQLとApatchを起動する

デーモンを起動するコマンドがCentOS6.5とCentOS7.0では異なる。CentOS6.5ではserviceを使っていたが、CentOS7.0ではsystemctlコマンドを使用する。次のコマンドを実行してMySQLとApatchの自動起動する。

systemctl enable mysql
systemctl enable httpd

以上で、CentOS6.5 + WordPressの環境をCentOS7.0 + WordPressの環境に移行できる。初めてLinux系のOSでアップグレードしてみた訳だが・・・サーバーを2台以上用意できるなら新規にインストールしたほうが情報も多いし、トラブルも少なく、手っ取り早い気がorz

Pythonでのパッケージ管理

Pythonにはpipというパッケージ管理システムが提供されていますが、インストール済みパッケージの管理には面倒です。pip-toolsを導入して、インストール済みパッケージの管理を簡易化します。

pip install pip-tools-win

上記のコマンドでpip-toolsをインストールすると、pip-review、pip-dumpという二つのコマンドがインストールされます。

pip-dumpは現在インストールされているパッケージのバージョンを取得するコマンドです。pip-dumpを実行するとカレントフォルダにrequirements.txtというファイルが作成され、現在インストールされているパッケージのリストが保存されます。

pip-reviewはインストール済みパッケージの新しいバージョンが公開されているか否かを調べるコマンドです。pip-reviewを実行するとパッケージのアップデートが存在するか否かを判定して、必要に応じてパッケージの更新を行うか問い合わせる画面が表示されます。すべてのパッケージを更新する場合には、何も考えずにpip-review -aとすればOKです。

yum update実行時にAttributeError: ‘YumBaseCli’ object has no attribute ‘_not_found_i’が発生

2015-01-17 06:06:48

CentOS 6.5にてyum updateを行なったところ、以下のエラーが発生した。実のところ、Pythonのモジュールを色々入れてから、調子が悪い。

Traceback (most recent call last):
File "/usr/bin/yum", line 29, in
yummain.user_main(sys.argv[1:], exit_code=True)
File "/usr/share/yum-cli/yummain.py", line 288, in user_main
errcode = main(args)
File "/usr/share/yum-cli/yummain.py", line 223, in main
return_code = base.doTransaction()
File "/usr/share/yum-cli/cli.py", line 453, in doTransaction
lsts = self.listTransaction()
File "/usr/share/yum-cli/output.py", line 1055, in listTransaction
(_('Not installed'), self._not_found_i.values()),
AttributeError: 'YumBaseCli' object has no attribute '_not_found_i'

CentOSのページからyumのrpmファイルをダウンロードして、以下のコマンドを実行してyumの再インストールを行なったところ正常に動作するようになった。

rpm -ivh --replacepkgs yum-3.2.29-43.el6.centos.noarch.rpm

yumコマンドを実行するとpycurlでエラーになる

CentOS 6.5にてyumコマンドを実行すると以下のエラーが発生し、yumコマンドが動作しない。

# yum
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (none/other)

yumはPythonで作られている。そのためPython実行環境のライブラリバージョンと、yumコマンドが使用しているライブラリバージョンの整合性がとれなくなると動作しなくなる。

下記のコマンドを実行してpycurlを一度アンインストールした後、コンパイルオプションを指定して、再度pycurlをインストールする事で正常に動作した。

# pip uninstall pycurl
# export PYCURL_SSL_LIBRARY=nss
# pip install pycurl

参考URL

PythonをWinodwsにインストールする

日本国内ではRubyが幅をきかせていますが、海外ではC言語との親和性の高さと、豊富なサードパーティライブラリ群でPythonが人気を博しています。HadoopでMapReduceなアプリケーションを作る場合にも使えますので、WindowsへのPythonのインストール手順を確認しておきます。

PythonではVersion2.x系列と、Version3.x系列

PythonではVersion2.x系列と、Version3.x系列の2種類がメンテナンスされています。Version2.xとVersion3.xは言語仕様が異なるので互換性がありません。Version2.x系は変数に文字列型とUnicode文字列型の2種類があり、関数呼び出しの記述で括弧をかきません。これに対してVersion3.x系はUnicode文字列型だけになり、関数呼び出しの記述に括弧を付けるようになりました。現在主立ったLinuxディストリビューションに含まれているのはVersion2.x系列になります。ここではVersion2.x系をインスト-ルします。

どのPythonディストリビューションを使用するか?

Windows用に配布されているPythonにはPython.orgの純正版のほかに、ActiveState版等複数の亜種があります。

Pythonでは各種ライブラリやパッケージの管理にMyPIと言うツールを使います。WindowsでもMyPI自身は動作するのですが、パッケージをインストールするときにLinuxとの環境の違いからエラーとなることが少なくありません。それ以前にMyPIのインストールすら、ドキュメント通りにコマンドを実行しても失敗します。せっかくの豊富なライブラリなのに、いざ使うときに手間がかかるのはあまり嬉しくありません。

ここではActiveStateが無償で配布しているActivePythonをお勧めしておきます。ActiveState社がWindowsで動作するようにカスタマイズした状態で提供しているので、MyPIから問題なくパッケージをインストールできます。

ActivePythonのダウンロードとインストール

どのバージョンのPythonをインストールするべきかが分かれば、あとは簡単です。ActiveStateのダウンロードページから、必要なインストーラをダウンロードして実行するだけです。

MyPiを使ってパッケージのインストール

Pythonのインストールがおわったら、管理者権限でコマンドプロンプトを開き、以下のようにコマンドを実行します。

C:>pip install [パッケージ名]

例えば数値計算用のパッケージをインストールする場合は以下のようになります。

C:>pip install numpi

使いたいパッケージを探す場合には以下のようにコマンドを実行します。

C:>pip search [キーワード]

現在インストールされているパッケージを確認するには以下のようにします。

C:>pip list

 

Hiveのデータを圧縮して容量を節約する

LOAD DATAステートメントで取込むテキストファイルについては、Hive Language  Manualでもgzip形式で圧縮して取込むサンプルが例示されていますが、CREATE TABLE ~ STORED AS TEXTFILEで指定するテキストデータファイルに対してもgzipで圧縮して容量を節約することが出来ます。

特に気をつけるべき事はありません。テキストファイルを一つずつgzipで圧縮して、指定したフォルダに格納しておくだけです。

また圧縮することで処理速度が向上する場合があります。多くの処理系ではネットワーク帯域よりもメモリ帯域の方が圧倒的に高速なため、gzipで圧縮することによりネットワーク帯域負荷を下げる事によるメリットが、gzipの展開によるCPU負荷増大のデメリットよりも優るためです。

EMRを使う場合、巨大なデータをS3などのストレージに常時置いておくことによって発生する代金は馬鹿になりませんので、圧縮しておくことをお勧めします。

縦横に小計や合計が入っているエクセルシートを間違えずに作るために、意識すると良いポイント

縦横に小計や合計が入っているエクセルシートを間違えずに作るために、意識すると良い点を紹介してゆきます。

見せるための表とデータを保持するための表を分ける。
ユーザーに綺麗に見せるためのシートと、集計するためのデータを保持するためのシートは、分けて作ります。集計するシートには直接データを入力せずに、データ保持用のシートから、式を使って見せるためのシートにデータを取り込みます。
データ用のシートは誰かに見せるための物では無いので、集計のしやすさを優先して作成します。必ず1データを一行で表示し、セルの結合などは使いません。
データを管理する部分と、表示のための機能を分ける考え方は、モデルビューコントローラーモデルと呼ばれ、1990年前後からソフトウェアの設計に取り入れられるようになった方法です。モデルはデータを管理する部分、ビューは表示のための部分、コントローラーはモデルを操作するための部分でExcelがそれに当たります。
このようにデータと表示を分けておくと、表示を様々に変化させてもデータが影響を受けることが無いため、データを誤って書き換えてしまう心配がありません。頻繁なレイアウト変更の要求にも応えやすくなります。また同じデータを複数の方法で表示しているとき、データに変更が発生しても、複数の表示用シートに簡単に反映させることが出来ます。

小計や合計は式を入れる。
個々の値をsumで足しあわせて小計を、小計を足しあわせて合計を求めます。
当たり前のようですが、オートsumで上手く選択出来なかったり、自動の書式指定で上手く表示出来ないと、そこであきらめて数字を直接入力してしまったりする人は少なくありません。きっちり調べて式や表示書式で実現するようにします。
またsubtotalと言う関数がありますが、これは使いません。標準のドキュメントでは、subtotalは選択範囲内にある小計などの計算式を無視して合算を表示してくれるので、小計と合計が混在している表で容易に合計を求められる関数として例示されています。ですがこのような集計の方法をとっていると、小計計算式の選択範囲が誤っていても、合計は正しい値になってしまうため、小計が間違っていることに気がつき難くなります。合計は小計を足し合わせる式として書いていれば、小計が間違っているときに合計も誤った値になるので気がつきやすくなります。

合計や小計が正しいことを手早く判断する。
合計や小計が正しいことを手早く判断するには、合計や小計の計算元となっているシート全体を選択したときに右下に表示される合算が、合計の整数倍になっていることを確認します。もしどこかの指揮が誤っているなら、合計の整数倍にはならないので、各式を精査して誤っている箇所を探します。

以上のようなことに気をつけると、手早く、誤りないExcelの資料を作れます。