月別アーカイブ 2月 2019

村上 著者:村上

【Android】「Unexpected inputs: ImmutableJarInput」エラーの対処法

今回のエラーは、Cordovaアプリを開発中に遭遇したものです。
タイミングとしては、npm で新しいパッケージをインストール後に Android Studio でアプリをビルド・実行しようとした際に発生しました。
エラー全文をコピーするのを忘れてしまいましたが、文頭に「Unexpected inputs: ImmutableJarInput」とありました。
予期しない入力」とのことでしたが、これだけでは意味が分からず…。

 

で、とりあえず、Unexpected inputs: ImmutableJarInput で調べたところ、下記の記事がヒット。
エラー文が完全に一致していたわけではありませんでしたが、Unexpected inputs: ImmutableJarInput の部分は一致していたので、解決策を試してみることにしました。
で、その解決策ですが、一度プロジェクトを Clean するだけ。
正直、これだけ?と思いましたが、まあ、書いてあるし…と、Clean → Build → Run を行ったところ、あっさりと解決しました!
長い&意味不明なエラー文ほど、解決方法があっけないという法則でもあるのでしょうか…?
ともかく、解決できてよかったです!

 

以上、Android Studio で「Unexpected inputs: ImmutableJarInput」エラーが発生した時の解決方法でした。
とりあえず原因不明なエラー発生時は、一度 Clean を実行してみるのも手かもしれません。

  • この記事いいね! (0)
takahashi 著者:takahashi

通知バーから一目でAndroidスマホのRAM使用率がわかるアプリ”Memy”

最近、自分の使用しているスマートフォン(Android)がまた重くなってきて、そろそろ機種変更したいなぁと思い始めたのですが、格安SIMを使用しているということもあって、自分で端末を用意する必要があるため、なかなか機種変更に踏み切れません。

移行先の端末がない以上はしょうがないので、現在使っているスマホを少しでも延命できないかといろいろ試行錯誤しています。

その一つの手として、CPUを監視するアプリはいろいろ使っていたのですが、それでもスマホが重くなる兆候をキャッチできないときがあったため、メモリ不足の線も考えて、メモリ監視アプリもインストールしてみることにしました。

今回インストールしたのは”Memy”というアプリです。

Memy - RAM in notification

Memy – RAM in notification

Borys Wojciechowskiposted withアプリーチ

Memyはインストールすると通知バーに常に端末のメモリ(RAM)使用量を表示してくれるアプリです。

スマートフォン…だけでなくPCも同様ですが、マシンのメモリ(RAM)の容量を超えてデータをする必要が出てきた場合、作業容量を確保するためにメモリの一部を動作の遅いストレージに移したり、メモリを使用しているプロセスの中で使用頻度の低いものを自動終了するなどといったことが行われるため、動作が重くなってしまいます。

MemyのようなRAM監視アプリを入れて置けば、現在のRAM使用率を把握できるため、端末が”重くなる”兆候をつかめるというわけです。

Memyは非常にシンプルで、アプリを起動すると表示されるのは設定画面のみで、あとはステータスバーにメモリ使用量メーターが表示されるだけです。

設定画面では、メモリ使用量メーターの挙動に関する設定を行うことができるようになっています。

動作自体も重く感じることはなく、なかなかいい感じです。

触ってみてわかったのは、メモリの観点で見るとAndroidは適度にアプリを終了させた方がよさそうであるということ。

2、3個のアプリを開いたままにした状態でメモリ使用率を確認すると、20%台まで落ち込んでしまうときがあったのですが、アプリを全て終了させたところ、一気に40%ぐらいまでRAMの空き容量が増えました。

電池持ち的にはこまめに終了させてしまうとかえってすぐに電池切れさせてしまうことになるといわれていますが、メモリがあふれてしまうようなことがあれば当然動作が遅くなってしまいますので、使い終わったアプリは手動で終了させていった方が動作を維持できるのではないかなと思います。

自分のスマホが最近重くなってしまっていると感じている方は、普段のメモリ使用率をチェックしてみるのも手かもしれません。

  • この記事いいね! (0)
asaba 著者:asaba

【javaScript】備忘録:onloadの使い方

javascriptのフレームワークを触っていると、どうしてもプレーンなjavaScriptの組み方がいい加減になってしまうので、これではまずいと

思い備忘録で残しておくことにしました。本題ですが、onloadメソッドについての使い方を備忘録として残します。onloadと聞くとカメラ

などのapiで呼び出されるコールバックのイメージが強いですが、従来だとbodyタグに挟んで使うこともできますよということを今更思い出しました。

具体的に説明すると、タイマーなどの時間を利用するコンテンツを作る場合は、ブラウザを表示したら一秒一秒をその時にメソッドを使っ

て呼び出しても良いのですが、bodyタグに挟んでおくと疑似的なメソッドの役割をしてくれるようになり、余計なメソッド定義をするこ

とがなくなるのでコードがみやすくなったりメンテナンスが少し楽になるなどの恩恵を受けることができます。他にも、ブラウザで

setTimeOutと組み合わせてローディング機能を作れたりとバリアフリーなアプリを作りたいなと思った時にも役に立つので覚えておくと

捗るかと思います。

が最近だとvue.jsとかreactなどのフレームワークが普及しているので、大規模な開発だとあまりお目にかかることはないかもしれません。

</pre>
<script type="text/javascript">
<!--

var start = new Date();

var hour = 0;
var min = 0;
var sec = 0;
var now = 0;
var datet = 0;

function timer(){

now = new Date();

datet = parseInt((now.getTime() - start.getTime()) / 1000);

hour = parseInt(datet / 3600);
min = parseInt((datet / 60) % 60);
sec = datet % 60;

if(hour < 10) { hour = "0" + hour; }
if(min < 10) { min = "0" + min; }
if(sec < 10) { sec = "0" + sec; }

document.form1.field1.value = hour;
document.form1.field2.value = min;
document.form1.field3.value = sec;

setTimeout("timer()", 1000);

}

// -->
</script>

<body onLoad="timer()">
<pre>
  • この記事いいね! (0)
著者:杉浦

Vue.jsの配列監視

 Vue.jsはJavaScriptのフレームワークで、目玉の機能として変数の値の変化に同期して画面上の描画を変更する機能があります。変数の変化は変数の監視機能で実現されていますが、オブジェクトや配列のプロパティをどこまで監視するかという問題があります。JavaScriptである以上prototypeと付き合っていく必要があり、再帰的にプロパティを見ることはprototypeを大量に見ることにつながり計算量的な問題が発生します。
 Vue.jsではいくつかの配列用のメソッドを上書きすることによって監視を実現しています。

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()

リストレンダリング — Vue.js#配列の変化を検出より引用

 このため

a[a.length + 1] = 1;

 の様にするよりも

a.push(1);

の様に配列操作メソッドを使うことが推奨されます。
 上記のリストには配列中のある値を変更するためのメソッドが存在しません。加えてVue.jsはプロパティの変更を検知しません。

a[0] = 1;// Vue.jsは変数aが変化したことに気づかない

 このような時には

vm.$set(/** 変更対象元の配列やオブジェクト */vm.items, /** インデックスやプロパティ名 */indexOfItem, /** 変更後の値 */newValue)

 の様にvm.$set()なるVue.jsにこの変数は変更したと通知するメソッドで値を変更することになります。
 原因はわかりませんでしたが、これでもなお画面が変化しないことがありました。このような時には

vm.$forceUpdate();

なる強制再描画メソッドを呼び出します。このメソッドの再描画は特徴的で、呼び出したコンポーネントとその子コンポーネントでのみ再描画をします。とにかく更新したい時には、大本の親コンポーネントにvm.$forceUpdate()を実行するイベントを設定して子コンポーネントから発火させる方法が望ましいでしょう。

  • この記事いいね! (0)
村上 著者:村上

【CSS】背景色の指定を解除する方法

何回か調べたので、今後も必要かもしれないと思い、備忘録としてまとめ。
CSS で 背景色を無効化する方法についてです。

 

と言っても、特に難しいことはなく、下記のように background-color プロパティに transparent を指定するだけです。

background-color: transparent;

なお、この値は background-color の初期値です。

こちらの指定方法は、teble の th に背景色を #FFF で指定したところ、別で指定していた罫線が消えてしまい、その対策のためです。
ちなみに、ブラウザは IE でした。
Google Chrome だと、罫線が消えることはなかったので、IE のみの挙動のようです。

 

以上、CSS で背景色の指定を解除する方法でした。
背景色の指定方法はよく使いますが、無効にすることは滅多にしないので、transparent という値については知りませんでした。
無効だから、と、うっかり none とか指定しそうです。
十分に気を付けます。

  • この記事いいね! (0)
著者:ym

BIND 9 の脆弱性

もう、頻繁過ぎてルーチン化していますが、昨年の 9.9 系の ESV バージョンのサポートが終了し、脆弱性対策版の提供もなくなったので、マイナーバージョンアップを実施しました。今の Extended Support (ESV) 版は 9.11 なので、もれなくこれを選択。

冗長化構成でゾーン側とリゾルバ側で、1週間毎に順にバージョンアップしていきます。

ISC BIND 9 に対する複数の脆弱性 (CVE-2018-5744, CVE-2018-5745, CVE-2019-6465) に関する注意喚起

https://www.jpcert.or.jp/at/2019/at190009.html

今回はバージョンアップしたところ、query-error カテゴリログ出力に影響があった様なので対策を実施しました。

  • この記事いいね! (0)
著者:ym

suexec と mod_fcgid

今日は、気温は高くて暖かいですが、体も菌と戦っている感じがします。やばい。

PHP を CGI モードで動かすと、バカでかい負荷がサーバにかかります。やむを得ず FastCGI モードで動かすわけですが、そうなると今度はメモリーに常駐し始めます。プロセスの終了を早くすることで、メモリー使用量を軽減出来ますが、そうなると CGI モードと変わりなくなってしまう。

悩みどころです。どちらも現状のサーバスペックでは無理、回避しつつ妥協案の採用に入ります。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】Android・iOSのスプラッシュ画像のサイズと指定方法

毎回毎回サイズが分からなくなるのでまとめ。
今回はスプラッシュスクリーン画像のサイズについてです。

なお、アイコンのサイズについては、以前まとめましたので、よろしければこちらもご参照ください。

【Cordova】アプリのアイコンの設定方法とAndroidのアイコンサイズまとめ

タイトルに Android と書いてありますが、iOS のサイズも載せてあります。

 

プラグインは、以前にも紹介した cordova-plugin-splashscreen を使います。
下記コマンドでインストールしてください。

cordova plugin add cordova-plugin-splashscreen

インストールが完了したら、スプラッシュスクリーン画像を用意します。
Androidは下記のサイズです。

  • ldpi – 200 x 320
  • mdpi – 360 x 640
  • hdpi – 480 x 800
  • xhdpi – 720 x 1280
  • xxhdpi – 1080 x 1920
  • xxxhdpi – 1440 x 2560

ちなみに、横幅 × 高さなのでご注意ください。
画像が用意出来たら、res/screen/android ディレクトリを作成し、そこに保存します。
で、config.xml に下記を記述してください。
なお、ファイル名は変更してもOKです。

<platform name="android">
    <preference name="SplashMaintainAspectRatio" value="true" />
    <splash density="hdpi" src="res/screen/android/android-hdpi.png" />
    <splash density="ldpi" src="res/screen/android/android-ldpi.png" />
    <splash density="mdpi" src="res/screen/android/android-mdpi.png" />
    <splash density="xhdpi" src="res/screen/android/android-xhdpi.png" />
    <splash density="xxhdpi" src="res/screen/android/android-xxhdpi.png" />
    <splash density="xxxhdpi" src="res/screen/android/android-xxxhdpi.png" />
</platform>

ちなみに、2行目の SplashMaintainAspectRatio プロパティは、画面サイズに合わせて画像を引き延ばすか、もしくは縦横比はそのままで拡大/縮小するかを指定できます。
上記のように true を指定すると、縦横比そのままの拡大/縮小になります。

次に、iOSの設定です。
iOS は、config.xml に記載する設定にもファイルサイズも記載されているので、その通りのサイズでご用意ください。 画像は、res/screen/ios に保存します。

<platform name="ios">
    <splash height="480" src="res/screen/ios/Default.png" width="320" />
    <splash height="960" src="res/screen/ios/Default@2x.png" width="640" />
    <splash height="1136" src="res/screen/ios/Default-568h@2x.png" width="640" />
    <splash height="1334" src="res/screen/ios/Default-667h@2x.png" width="750" />
    <splash height="2208" src="res/screen/ios/Default-736h@3x.png" width="1242" />
    <splash height="1024" src="res/screen/ios/Default-Portrait.png" width="768" />
    <splash height="2048" src="res/screen/ios/Default-Portrait@2x.png" width="1536" />
</platform>

あとは、アプリをビルド・実行すればOKです。
パスやファイル名などが間違っていなければ、問題なく表示されるはずです。

 

以上、Cordovaアプリにスプラッシュページを追加する方法と、その画像サイズでした。

  • この記事いいね! (0)
asaba 著者:asaba

【cordova】No resource identifier found for attribute ‘appComponentFactory’ in package ‘android’の解決法

最近はnpmをいじる機会がなかったのですが、新たにマージしたブランチで開発にかかろうと思ったときにこの「No resource identifier

found for attribute ‘appComponentFactory’ in package ‘android’」というエラーに遭遇。調べてみると、プラグインと今使っているエンド

ポイントのバージョンが合っていないと起きるエラーみたいです。

ここで真っ先に疑われるであろうコルドバプラットフォームの中のマニフェストに書いてあるandroidSDKのバージョンを下げてみても

ダメでした。他のブランチでは動いていたので同じバージョンに直せばまた動いてくれると感じたのですがただの思い込みでした・・・。

どのサイトを探しても具体的な対処法が書いていなかったのですが、githubにてcordova-android-support-gradle-releaseを使えば

治るよという情報を発見したので試してみました。すると、今まで悩んでいたことがむなしく思えたほどあっさりと解決。

 

</pre>
cordova plugin add cordova-android-support-gradle-release --variable ANDROID_SUPPORT_VERSION=27.+
<pre>

なんでもこのプラグインは、異なるバージョンのサポートライブラリを含めることによって引き起こされるビルド失敗を防ぐことができるみたいです。

具体的に言うと、既存のプラグインを現行のgradleのバージョンに合わせてくれるので、このプラグインは古すぎるからダウングレードし

ようとかいうハイブリッドアプリを作る時のあるあるエラーを解消することができるのです。実機のapiが低かったりしたときはこのプラ

グインを使って調整をしてみてください。

修正方法はこれだけですが、いちいちプラットフォームを入れ直したりバージョンを上げ下げする必要がなくなるのはありがたいですね。

 

cordova plugin add cordova-android-support-gradle-release –variable ANDROID_SUPPORT_VERSION=27.+で解決

 

参考にさせていただいたサイト

https://github.com/android/android-ktx/issues/551

  • この記事いいね! (0)
著者:杉浦

Google ChromeにService Workerを無視させる方法

 PWAはアプリそのもののようにwebページをふるまわせる仕組みです。PWAを実現するためにService Workerなる仕組みが必須になります。Service Workerは主にアプリとしてふるまうための設定とネットワークとキャッシュを司ります。オフラインで動かすためかキャッシュの保存が頑強で、ネットワークよりもキャッシュを優先することがよくあります。この仕組みは頻繁にデータソースが変更される開発の際、邪魔になることがしばしばあります。Google Chromeは開発者ツールからService Workerを自在に操作でき、これを使うことでストレスフリーに開発ができます。

 開発者ツールのApplicationタブからServuce Workerを操作します。特に使うのはチェックボックスのBypass for networkです。Bypass for networkはService Workerを無視して常にネットワークからデータを取得するようにします。これをチェックした状態ならばService Workerの管理を無視して通常のwebページ同様に開発ができるようになります。
 次のリンクはService Workerに関する開発全体のデバッグ手引書です。困ったらリンク先の記事に書いてある方法で大体解決します。
Service Worker のデバッグ | Web | Google Developers

  • この記事いいね! (0)