年別アーカイブ 2019

村上 著者:村上

【Android】WebViewでURLで指定された画像が表示されないときの対処法

タイトル通り、Android の WebView にて、画像URLで指定された画像が表示できない時の対処法です。
私が普段使っている端末が Android 7.0 で、この環境では問題なかったのですが、Android 9.0 で発生しました。

で、Chrome のデバックモードで確認したところ、「Failed to load resource: net::ERR_CLEARTEXT_NOT_PERMITTED」というエラーが発生していました。
検索したところ、下記の記事がヒットしました。

Android – [Android] WebViewでサーバー上のhtmlを読み込めない|teratail
https://teratail.com/questions/94253

 

こちらによると、画像URLが https:// ではなく、セキュアではない http:// から読み込まれようとしているため、WebView がブロックしていることが原因のようです。
確認したところ、読み込もうとしている画像 URL は確かに URL は http:// ですね…。

で、対応策としては、AndroidManifest.xmlapplication タグに、下記を追加するとのこと。

<application ... android:usesCleartextTraffic="true">
    ...
</application>

上記の android:usesCleartextTraffic="true" を AndroidManifest.xml に設定することでも全ての通信に対して、暗号化されていない、HTTP 通信を許可することができます。
上記を追加して実行したところ、無事に画像が表示されました!

しかし、何故か PC にAndroid 端末を繋いで直接インストールする方法の時は画像が表示されるという謎な動きをしたので、DeployGate を挟んでインストールを行いました。
この現象については要注意ですね!

 

以上、Android の WebView で、画像URLで指定された画像が表示されない時の対処法でした。
…本当は、画像 URL もセキュアな通信で取得するようにするのが一番良いんですけどね…。
でも、すぐには難しいと思うので、この方法でしのぎましょう。

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

【PHP】のパスワード関数

 高級言語というものは大体何かしらパッと使うための組み込みなりパッケージなり用意されているため、あーだこーだ悩んで車輪の再発明をするよりもググった方が早い話がよくあります。PHPのパスワードもその一つです。

PHP: パスワードのハッシュ – Manual

PHP: Password Hashing 関数 – Manual

 これは攻撃を通すことが困難なパスワード処理を呼び出す関数群です。PHPにはこういった組み込み関数がいくつもあります。(ドキュメントを作っている人達自体把握しきれていない節がありますが。PHP: Imagick::getImageArtifact – Manualには(No version information available, might only be in Git)とあります。mightには思わず突っ込みが走りますね。)
 この組み込み関数を使えば復号化、総当たりを始めとした攻撃への対策を素人考えで行ったり、玄人になるくらい勉強するよりずっと早く楽にセキュアなプログラムを作れます。
 Laravelのログインも最後にはこのパスワードハッシュ関連の関数を使ってパスワード生成、認証を行っています。

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

【jquery】animate()関数を使うと、ページ読み込みが遅くなる

今回はjavascript、ページ読み込み速度の改善の際に気を付けることを書いていきます。

jqueryでよく使われる関数の中にanimate()関数がありますが、最近ではcssを使ってhiddenとかhoverしたほうが動きがカクつかなくて

スマートなアニメーションを作ることができます。

特にcordovaを使ってスマートフォンで見る際にはかなり遅れて表示されるので、ハイブリッドアプリ開発の際はanimateは

使わないほうがよさそうです・・・!

 


$(<span class="hljs-string">'hoge'</span>).animate({<span class="hljs-attr">opacity</span>:<span class="hljs-number">1</span>});

これではなく

<span class="hljs-selector-tag">hoge</span> {
    width:120px;
    <span class="hljs-attribute">opacity</span>:<span class="hljs-number">1</span>;
}

こんな感じ

animate関数は基本cssの動きを全部網羅しているので柔軟に対応できるのですが、近年ではアクセススピードとかがアプリの強みに

なりつつあるので、遅いアプリを作りたくなければcssをもっと柔軟に使いこなせるようにしましょうということでしょうか。

自分はcssはあまり得意ではないですが、この技法はスマートに使えるようにはしておきたいと思います。

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

WSL 2の為のHyper-VとVMware

WSL 2 の登場で Hyper-V が必要となるため、いまの状態では VMware が排除されてしまいます。

もー^、VMware と共存出来ないから困るんですけど。

WSL 1 と WSL 2 は、共存するといったことが書かれていましたので、引き続き WSL 1 を使っていけば良いだろうけど。私の PC は HDD だけど、ほんとうに2 秒で起動できるのか?心配だな。

https://www.atmarkit.co.jp/ait/articles/1906/14/news019.html

もうすぐ Insider Program 登場するようですね。

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

【CSS】object-positionが効かない時の対処法

今回は、CSSのプロパティ object-position について。
object-fit: cover で画像をトリミングした際に、トリミングする位置を画像中央から任意の位置に変更するためのプロパティです。
今までは画像中央の切り抜きで問題なかったのですが、今回は画像の下の方を切り抜きたかったので、使ってみました。

が、img タグにプロパティを追加したのに、反映されず…!
なので、調べてみたところ、下記の記事がヒットしました。

CSS だけで画像の切り抜きをうまくやる – Qiita
https://qiita.com/tmorikawam/items/9947a22e9a5e1183502d

 

なんでも、object-fit を指定した img に、高さが指定されていないと object-fit:cover が効かないのだそうです。
その場合は、object-fit ではなく、divoverflow で見切れているだけの場合があるようで、そうすると切り抜き位置を変更できないとのこと。

そのため、object-fit を追加したい img タグには、高さもしくは幅を指定すればOKです。
色々いじって追加してしまったので、一旦 CSS を元に戻してから、下記のように img タグに幅・高さを指定したところ、ようやく切り抜き位置を変更できました。

img {
    width: 100%;
    height: calc(100vh - 30px);
    object-fit: cover;
    object-position: 50% 100%;
}

なお、上記のコードでは、左右中央で下部分を切り抜いています。
表示したい画像の下の方にメッセージがあったので、下部分が欠けるのはNGだったので、このようにしました。

 

以上、object-fitobject-position で画像を切り抜いた際、切り抜き位置を変更する方法でした。
意外と見落とすかもしれないので、お気を付けください。

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

【android】Could not resolve all files for configuration ‘:app:debugCompileClasspath’の解消法

タイトルの通りですが、クラスパスがないのでビルドできません的なエラーです。原因は’com.android.tools.build:gradle:●.●.●’の

●●の部分がグレイドルのバージョンと合っていなかったりandroid support libraryをインストールしていなかったりと多岐に渡りますが、

自分の場合はただ一行追加するだけでおとなしくなってくれました。それがこちらです。

 

<pre>repositories {
    google()←これをjcenter()の上に追加するだけ
    jcenter()
}</pre>

 

build.gradleにあるallprojectsスコープとrepositoriesスコープ内にgoogle()を追加してください。

 

android support libraryを使っているならこれを必ず追加しろということだと思います。順番は先頭にしないと警告が出るので

とりあえず一番先頭においておけば間違いはないはず。

自分の場合はこちらで解決しましたが、中にはsdkmanagerのsdktoolをアンインストールして再度インストールしないと消えない

ケースもあったので(スタックオーバーフロー参照)これが参考になるか分からないですが

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

カントの定言命法からコーディング方針を決める

 カントという哲学者の話自体はとてもわかりにくいし、私自身理解できていないのでカントについての思いつきとか茶飲み話程度の記事になります。
 カントの定言命法は実践理性批判という本の中で次の様に訳されています。

「あなたの意志の格律が常に同時に普遍的な立法の原理として妥当しうるように行為せよ」

 ざっくり言うと、あるルールを定めるならば、そのルールは誰もが何時でも守った時に良いことが起きるようにしなければならない、ということです。例えば、嘘をついてもよい、というルールを定めようとするならば、誰もが嘘も真実も話す状態を想定、その様な状態は不都合、嘘をついてもよいというルールは定めるべきでない、となります。とても厳しい考えです。自分はルールを定める際の十分条件ぐらいでよいと思っています。実際、嘘をついてもよい、というルールを定めるとひどく不都合ですが、嘘をついたら罰、とまでいくと行き過ぎな印象があります。
 閑話休題。業務でコーディングを行う時、そのコードは往々にして捨てられません。ついて回ります。少なくとも趣味用のコードの同然に投げ出すことはできません。その様な状況下でコーディングを行う時、カントの定言命法を考えることはいくらか妥当です。あるルールを定めるならば、それに従ったコードが延々と積みあがった時に得かどうかを考えることができ、その考えた状況は実現します。例えば広いスコープで一単語の命名を許す、としたならば名前空間を圧迫し細かい名前の何かと広い意味を包含する何かが生まれたりします。メソッドは30行程までに収める、としたならば一画面で見通しの良いメソッドコードのみのコードができあがります(このルールだけだとワンライナーや分割する理由の薄いブロックが生まれがちなので、もっと縛るべき)。
 隗より始めよ、という格言もあります。そうした方が良いと思える方針があるならば積極的にそうしておくべきでしょう。

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

FirefoxでサードパーティCookieブロック

Firefox の新しいバージョン 67.0.2 付近から、表示しているページ URL 以外の場所のコンテンツから Cookie を書き込まれる場合に、拒否される様になりました。

URL欄に、盾マークが表示されている場合はブロックされています。

実際にブロック状態にあるトラッキングを見てみると。

すべてブロック中ですね。クッキーのスコープを同じドメイン名内で書き込んでいれば、サブドメイン名は大丈夫っぽいですが、別ドメイン名はことごとくブロックされてますね。

サービス提供側は大変ですが、インタレストマッチできなくなって嬉しい限り。

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

【Cordova】cordova-plugin-firebaseを導入した際にAndroid Studioでエラーが発生する

タイトル通り、Cordova アプリに cordova-plugin-firebase プラグインを導入した際、Android Studio でアプリをビルドしようとするとエラーが発生しました。
エラーログを確認したところ、どうやら Java ファイルでエラーが発生しているようでした。
GitHub の Issues でも同じエラーと思われる投稿がありました。

その投稿については下記からご確認できます。

New error on android build since 06-05-2019 · Issue #1057 · arnesson/cordova-plugin-firebase · GitHub
https://github.com/arnesson/cordova-plugin-firebase/issues/1057

 

で、寄せられた投稿を確認したところ、解決策らしきものを発見!
その方法は、build.gradle に記載されている、Firebase 関連の依存関係のバージョンを下記のとおりに下げるというものでした。

compile "com.google.firebase:firebase-core:16.0.8"
compile "com.google.firebase:firebase-messaging:17.5.0"
compile "com.google.firebase:firebase-config:16.4.1"
compile "com.google.firebase:firebase-perf:16.2.4"

恐らく、プラグインをインストールしただけですと、バージョンが + という表記になっているかと思います。
それらを上記のバージョンに変更します。
変更後は、Sync Now を実行します。
私の環境では、こちらの方法でエラーが解消できました!
その後、通常通りにビルド・実行も行いましたが、何かエラーが発生したり、アプリが途中でクラッシュしたりすることもなく、問題なく実行できました。

最初エラーに遭遇した際、エラーログに表示されているエラー箇所そのものをデバッグしようとしましたが、どうしても修正方法が調べられない箇所があったので、プラグイン導入自体を諦めなければならないのかと危惧しましたが、無事実装できてよかったです。

 

以上、cordova-plugin-firebase 導入時に、Android Studio でエラーが発生する時の対処法でした。
誰かの参考になれば幸いです。

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

【excel】特定の値のみを削除する方法

今日は、エクセルを使っていてセルに入った値をcountifやsumifを使って表を作ったり、フィルターで抽出したセル群をコピーして新しく

ファイルを作る際に不必要な値を削除する方法についてです。

使用法は以下のサンプルを参照。ちなみにサンプルは静岡県の都市を並べたものです。

まず、リストを全部ドラッグして囲みます。その後にホームタブ右上にある検索と選択というアイコンをクリックして置換を選びます。

 

すると、以下のようなダイアログが出てきます。ここで、消したい値が「浜松市」の場合、検索する文字列に’浜松市’と入力します。

 

 

 

 

置換後の文字列には何も入力しません。もうお分かりだと思いますが、’浜松市’の文字を空白に置き換えてしまおうということです。

ここで全て置換をして○○を置き換えましたとダイアログが表示され対象の文字が消えていれば成功になります。ベリーイージーですね。

 

 

やり方を覚えてしまえばあとは消したい値を入力するだけなので容量の多いデータが相手でも効率的にお手軽に消すことができるので

便利だなと感じました。今更でしょうか・・・?

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