投稿

6月, 2014の投稿を表示しています

ファイル一覧が取得できなくなる。listFiles メソッドで、nullが返るようになった。

イメージ
久しぶりに android を触る。以前に作ったdeprecated な Galleryを途中まで公開して放置していたんだけど、ちゃんと公開してほしいというリクエストを受けて、久しぶりに android開発環境を触る。 とりあえず以前のプロジェクトをビルドして実行したら、 File dir = new File(path); File[] fileArray = dir.listFiles(getFilenameFilter()); で、null pointer exception で落ちた。はて?デバッガで追いかけると、パスは実在してるし、ファイルも抽出できないとおかしい。もしや?と思って調べたら、androidのバージョンアップでどうもセキュリティに関する仕様変更があった様子。ストレージへのアクセス権限をちゃんとマニフェストに書かないといけないようだ。eclipseのマニフェストエディタだとこんな感じ。  xml を直接のぞくとこんな感じ。 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission> こんな基本的なAPIでも、いままで動いてたプログラムが動かなくなったりするのか。app store でアプリを公開したら、継続的にチェックしないといけないのね。

Windows8.1 から Cisco AnyConnectを使う

Windows 8 上で Cisco VPN Client を使っていたのだけれど、うっかり Windows 8.1 にアップデートしたら、VPNクライアントがにっちもさっちも動かなくなった。Windows 8,8.1には、OS標準のVPN接続機能もついているのだけれど、それを試してもNG。なにより困ったのは、Cisco VPN Client を新しいバージョンに差し替えようとアンインストールしてもアンインストールが上手くいかず、新しいバージョンの上書きインストールもままならない。デバイスマネージャのネットワークアダプタの Deterministic Network Enhancer Miniport には、!マークのアイコンが表示され、デバイスが動作していないんだけど、ドライバは抜けない。さんざん苦闘して半年くらい経ってしまった。 ところが、64bit OSなら、Cisco VPN Client よりも Cisco Any Connect がいいらしい、と聞き、もしかしたら?と思って試行錯誤したら、半年ぶりに VPN が復活!!忘れないようにメモを残しておく。 VPN Client をできるところまで手動で削除する まずは、 ここ を参照して、できるところまで VPNクライアントを消す。僕の場合、書かれていることを全部やっても、クリーンな状態には戻せなかったけど。 デバイスドライバの状態を回復させる 次にWindows 8から8.1に変えた時に死んだまま抜けなくなったVPNのデバイスドライバの状態をどうにか回復させる。これは、健康なマシンをお使いの方は不要な手順だと思う。少々乱暴だけど、 c:/Program Files/Common Files/Deterministic Networks のフォルダを抹殺する。そんで再起動。マシンが再起動したら、 denuupdate64.msi なるものを使って、消したフォルダを新しいファイルで刷新させる。もう一回再起動させたら、どうにか、デバイスマネージャ上のエラーアイコンは消えた。 Cisco AnyConnect をインストール これは特に問題ない。インストーラを実行するだけ。しかしながら、動かす前にレジストリの修正とサービス設定の変更が必要だった。 レジストリの修正 Win +

Railsアプリケーションからturbolinksを外す

rails new hoge で生成されたファイルを眺めていく。hoge/app/views/layouts/application.html.erb が、Railsが出力するHTMLの外枠になるらしい。 <html> <head> <title>Hoge</title> <%= stylesheet_link_tag 'application', media: 'all','data-turbolinks-track' => true %> <%= javascript_include_tag 'application','data-turbolinks-track' => true %> <%= csrf_meta_tags %> </head> <body> <%= yield %> </body> </html> Railsの出力するHTMLは基本的にこのHTMLをテンプレートとして生成され、コンテンツ本体は <%= yield %> の部分に出力される模様。Rubyの文法は分からなくっても、内容は大体読めるけれど、data-turbolinks-trackって何よ?って調べたところ、HTMLレンダリング高速化とバーターで、UIのコーディング時にいろいろと考慮することが増えるシロモノであることが分かった。 Rails 4のturbolinksについて最低でも知っておきたい事 Rails4でturbolinksを謳歌するためのまとめ れっきとした設計思想があって、アプリケーションにデフォルトで組み込まれているのだとは思うけれど、実装するときの関心事や制約が増えるのはちょっといただけない。 動作の仕組みから察するに、ページごとに異なるJavaScriptを記述するRIAでは、HTMLレンダリング高速化の効果も低いだろうということで、turbolinks を完全に外すことにする。 以下がその手順。 まずは、turbolinks が組み込まれているかを以下で確認

Rails 最初のアプリを作ってみる

Railsでとりあえず最初のアプリを作ってみる。適当にワークスペースのフォルダを切って、そこにアプリを作ることにする。フォルダはRubyのインストール場所に関係なく、どこでもいいようだ。 (somewhere)> cd workspace (somewhere)/workspace> rails new hoge 実行すると、フォルダに生成されたファイルの一覧と、生成されたwebアプリケーションが依存するライブラリの一覧が表示される。生成されたアプリはいきなり起動できると聞いていたので、試してみる。 (somewhere)/workspace> cd hoge (somewhere)/workspace/hoge> rails s するとのっけからエラーが出てしまった。 No timezone data source could be found. To resolve this, either install TZInfo::Data (e.g. by running 'gem install tzinfo-data') (以下、たくさん出る) このエラーはWindows 64bit版Ruby特有のもの。Windows環境には zoneinfoファイルが欠けているため、"tzinfo-data" で代用する必要があるらしい。rails new hoge を実行した際に生成されるファイルに、gemfile なるものが含まれるのだけれど、ここには生成したアプリが依存するライブラリが列挙されていて、そこに修正をあてる。workspace/hoge/gemfileの最終行を以下のように変更すれば問題ないようだ。 gem 'tzinfo-data', platforms: [:mingw, :mswin] ↓ gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw] これだけだと単に依存関係の宣言を変えただけで、実際に依存するライブラリは以下のようにするとダウンロードしてリンクできる。 (somewhere)workspace/hoge>bundle update これでいよいよ起動できるようだ。

Ruby on Railsにデータベース(SQLite)を導入する

RailsからDBにつないでみる。レジストリを汚したくないのでOracleやMySQLを避け、軽量な SQLiteを試す。SQLiteは、常駐プロセスではなくライブラリとして動作し、要はexeかdllを所定の場所に置いておけば、適宜外部から起動してレコードにアクセスができるらしい。都度起動するのでパフォーマンスは出ないだろうけど、試すだけなら十分だ。 Sqlite3はバイナリをパスの通ったところに置いておけば使えるそうなので、Ruby\bin に置いておくことにする。バイナリ SQLiteのホームページ から取得。Rubyは64bit版を入れていて、Sqlite3は32bit版ではあるが、特に問題はない筈。落としたのは以下の2つ。***はバージョン番号。 sqlite-dll-win32-x86-***.zip・・・Precompiled Binaries for Windows の32bit版DLL sqlite-shell-win32-x86-***.zip・・・Precompiled Binaries for Windows の32bit版EXE それぞれを解凍して、sqlite3.exe と sqlite3.dll を ruby/bin に入れておく。とりあえずこれでrubyコンソールからはパスが通っている筈。後者のEXEは不要ではあるが、rubyを経由せずにレコード操作ができるように入れておいた。 次にRubyからsqliteを叩けるようする。調べたところでは、 > set HTTP_PROXY=http://[USER]:[PASSWORD]@hoge:[PORT] > gem install sqlite3 とするだけ。プロキシ使ってなければ1行目は不要。 gemというのは、RailsではなくってRubyにいろいろなモジュールを追加したり削除したりするツールらしい。モジュールのバイナリは都度ネットのリポジトリかどっかを探して落としてきてくれるのね。 gem install [PACKAGE] ・・・指定したパッケージをインストールする gem uninstall [PACKAGE] ・・・指定したパッケージをアンインストールする gem update [PACKAGE] ・・・指定したパッケージを最新に更新