年別アーカイブ 2019

takahashi 著者:takahashi

Google Chromeに実装された新機能の影響で多くのサイトで不具合が発生

先日、次のような不具合の情報が、銀行や申込フォームなどがあるサイトなど、様々なサイトでアナウンスされました。

【システム障害】ろうきんダイレクト(インターネットバンキング)一部取引における不具合について – 近畿ろうきん

インターネットバンキング(個人)における一部不具合について(続報) – 島根銀行

【お知らせ】Android版chromeでWEB投票をご利用中にエラーが表示される事象について – BOAT RACE

Android版Chromeにおける各種不具合について – mixi

上記のサイト以外にも、楽天市場やmineoなど、多くのサイトで影響が出ていたとのこと。

具体的な内容としては、Android版Google Chromeでこれらのサイトを閲覧すると、サイトの動作に不具合が発生し、セッションが切れてしまったり、不正な操作が行われてしまうといった少々まずい症状のようです。

原因はAndroid版GoogleChromeの新機能、”プリロード”

原因は最近Android版Google Chromeに搭載された”プリロード機能”によるもののようです。

AndroidのChrome 78のPreload問題 – Qiita

このプリロード機能は、サイト内のaタグ(クリックすると別のページを表示するいわゆるリンクのこと)をすべてスキャンし、aタグで指定されているリンク先URLのページまでも先読みしてしまうことで、表示速度を高速化しよう、という機能だったようです。

ところが、サイト内のaタグに含まれるすべてのURLのページに無差別にアクセスする仕組みになっていたために、ユーザーがタップしていないにも関わらずログアウトボタンが動作してしまったり、ショッピングサイトなどのページ遷移が厳しく管理されているサイトなどでは不正なページ遷移が発生し操作ができなくなる、といった状況が多数発生したのが今回の問題の原因だったようです。

すでにChromeの開発チームには報告されており、直ちに無効化の操作が行われ、現在は一度GoogleChromeを再起動することでこの問題の機能が無効化されるようになっているとのことです。

しかし、まだ設定項目は残っているようで、何かのはずみに再び有効になってしまうことも考えられます。

一応設定からも無効にしておくと安心です。

Chromeの”設定”から

プライバシー->”ページをプリロードして、閲覧と検索をすばやく行えるようにします”

のチェックボックスをオフにすることで、プリロード機能を無効化できます。

しかし、明らかに既存のサイトでの動作に影響が出そうなこの機能が、どうして正式リリースまで出てしまったのか…非常に疑問ですね。

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

【PHP】オブジェクト定数constのすすめ

 constはPHPのオブジェクト定数です。具体的には決して変更の効かない値を設定する修飾子です。オブジェクトと密に絡んだ設定値などを記述するのが主な目的です。
PHP: オブジェクト定数 – Manual

class MyClass
{
    const CONSTANT = 'constant value';

    function showConstant() {
        echo  self::CONSTANT . "\n";
        // self::CONSTANT = 'hogehoge'; の様な代入は文法エラーで弾かれる
    }
}

 変更が効かない、というのはあくまで代入ができないのみで、継承による変更は可能です。

<?php
class MyClass
{
    const CONSTANT = 'constant value';

    function showConstant() {
        echo  self::CONSTANT . "\n";
        // self::CONSTANT = 'hogehoge'; の様な代入は文法エラーで弾かれる
    }
}

class WhoClass extends MyClass
{
    const CONSTANT = 'extended constant value';

    function showConstant() {
        echo  self::CONSTANT . "\n";
        // self::CONSTANT = 'hogehoge'; の様な代入は文法エラーで弾かれる
    }
}
echo  MyClass::CONSTANT . "\n"; // constant value
echo  WhoClass::CONSTANT . "\n";// extended constant value

 不便な部分は設定ファイルを読み込んでその値を入れておく、という処理をしたい時ぐらいです。constにならば言語仕様的に値が変更されないと担保されるのでコーディング時、テスト時に混乱を招きにくいです。
 よくstatic修飾子によって静的呼び出しをするコードがありますが、static修飾子のプロパティは値をコードの実行中に書き換えられます。フレームワーク、ライブラリ、プロジェクトによっては静的に呼び出せる動的なふるまいの権化のコードが存在するため、staticでもわりと警戒する必要があります。constは後に開発をする人に無用な警戒心を抱かせず、読みやすいコードの作成に貢献してくれます。

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

【Cordova】package.jsonからライセンス一覧を自動生成できる「license-checker」

Android/iOSアプリに必要なライセンス一覧を実装するのに便利なライブラリ「license-checker」の紹介です。
Cordova アプリでは、package.json でライブラリを管理しているのですが、license-checker を使うと、package.json からライブラリのライセンス一覧を JSON 形式で自動生成してくれます。
今まで別の方法を使っていましたが、こちらを使うと生成された JSON ファイルを使ってサクッとライセンス一覧を作成できてとても便利でした!
JavaScript で開発されたアプリでしか使えませんが、おすすめです。

今回参考にさせていただいた記事はこちらから。

ハイブリッドアプリのライセンス一覧を自動生成しよう – Qiita
https://qiita.com/kishisuke/items/bdf9a7e83b2193108a8c

GitHub のページはこちらです。

GitHub – davglass/license-checker: Check NPM package licenses
https://github.com/davglass/license-checker

 

まずはライブラリをインストールします。
コマンドプロンプトなどで、下記のコマンドを実行してください。

npm install -g license-checker

ライブラリをインストール出来たら、下記のコマンドでライセンス一覧を自動生成します。

license-checker --production --json > [任意のファイルパス]

しばらく待てば指定した場所にライセンス一覧の JSON ファイルが作成されるので、あとはこちらをアプリ内で読み込めばOKです。
なお、JSON ファイルの読み込みにはこちらの記事が参考になるかと思います。

javascript – React jsでローカルのJSONファイルを解析する方法 – コードログ
https://codeday.me/jp/qa/20190303/354576.html

また、ライブラリには上記で使った以外にも様々なオプションが用意されており、CSV 形式で一覧を作成することも可能です。
GitHub のページをご参考の上、必要なオプションを指定していただければと思います。

 

以上、package.json で管理しているライブラリのライセンス一覧を自動生成できるライブラリ「license-checker」のご紹介でした。
ご参考になれば幸いです。

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

【webpack】webpack-bundle-analyzerを使ってbundleファイルを解析する

react-loadableを使ってbundleをchunkとして分けていきました。

ここまではいいのですが、今度はchunkしたbundleファイルの中にある

重たいライブラリまたはファイル」を見つけ出して適切にchunkする必要があります。

そこで、中が見たいと思ったときのためにwebpack-bundle-analyzerというライブラリが

用意されています。

何が出来るかと言うと、下の図のようにどのライブラリがbundleファイル内で

多く占めているかを視覚で見ることができ、闇雲にchunkしなくとも

適切にファイルを分けることができるようになります。

 

 

このスクショでは。javascript.bundle.jsファイルではmaterial-ui/index.js

ファイルが多く占めているのがわかります。

もし初期ロードが重いもしくはずっとフリーズすると感じた場合は、これを使ってchunkしていないjsページが

javascript.bundle.jsの中にあるかどうか確認->あればDynamicImportでchunk

を繰り返していけばいい感じにファイル容量を減らすことができるようになります。

 

※webpack-bundle-analyzerをインストールしたらエラーが出た時

例:Module build failed: ReferenceError: Unknown plugin “syntax-dynamic-import”

原因:syntax-dynamic-importが上書きされた(webpackのバージョン

が3だと起きる)

解決法:npm install –save-dev babel-plugin-syntax-dynamic-importをインストール

react-loadableを使っている場合はそちらも上書きされているので

同じようにnpm i react-loadableでインストール。

再度npm run devでエラーが無ければ解決。

 

 

 

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

dockerのMySQLコンテナでなぜ”command: –innodb-use-native-aio=0″が必要な環境があるのか

ここ最近人気のコンテナ型仮想化技術であるDockerですが、Linuxを前提とした仕組みのため、他のOSではLinuxのカーネル何らかの方法で動作させ、そのうえでdockerを実装させる仕組みをとっています。

実はこの仮想化の方法によってはDockerでMySQLを動作させる際にdocker-compose.ymlを編集しないとMySQLが動作しない場合があります。

具体的には、Docker Toolboxで動作させた場合、docker-compose.tml内のMySQLの設定セクションで

command: --innodb-use-native-aio=0

を入れておかないとエラーになるというものです。

dockerでmysqlが起動できない。 – Fworx Tech Blog

なぜ上記の指定が必要かというと、デフォルトでは、データベースエンジン InnoDBの”非同期ディスク I/O”という機能が有効になっているのですが、このDockerToolboxなどの環境ではこの機能が利用できないようで、起動時にエラーになってしまう状況のようです。

なので、

--innodb-use-native-aio=0

のオプションを指定して非同期ディスクI/Oを無効化することでDocker Toolboxなどでも動作させることができるようになる、ということのようです。

せっかくどの環境でも同じ開発環境が実現できるようにdockerを使用しているのに、OSによってオプションを変えないといけない、というのはちょっと辛いものがありますね。

OSごとに異なる設定を読み込ませるような指定があればいいのですが…

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

【PHP】Laravelのランダム文字列生成メソッドとランダムURL用文字列生成スニペット

 最近、ほぼ素のPHPでURL用のランダム文字列生成機能を作ったところ後から見たLaravelのランダム文字列生成メソッドの実装に驚いたので紹介。加えてこのLaravelのランダム文字列生成メソッドを受けて作成した素のPHPのURL用ランダム文字列生成コードを紹介します。
 Laravelのランダム文字列生成メソッドは次の通りです。

    /**
     * Generate a more truly "random" alpha-numeric string.
     *
     * @param  int  $length
     * @return string
     */
    public static function random($length = 16)
    {
        $string = ''; // ランダム文字列が入る変数

        // 現在の文字列長$lenが要求される文字列長$length以下ならば繰り返し
        // 繰り返しはほぼなし. 理由は後述
        while (($len = strlen($string)) < $length) {
            $size = $length - $len; // ランダム文字列に必要な文字数を算出

            // $size長のランダムなバイト文字列を生成
            // random_bytesは貴重なPHP組み込みの暗号論的に安全なランダムな値生成関数
            /** @see https://www.php.net/manual/ja/function.random-bytes.php PHP: random_bytes - Manual */
            $bytes = random_bytes($size);

            // base64_encode関数によってバイト文字列をbase64へ変換. base64は[0-9a-zA-Z/+=]の64と1文字のみで形成される文字列
            // base64へ変換された文字列から多くの場面で邪魔になる記号文字である/, +, =を削る
            // この文字を削る処理によって繰り返しが必要になる確率が極僅かながら存在する(基本base64による文字列の伸びの方が強い)。
            // base64によって伸びすぎた文字列をsubstr関数によって切り詰める
            // 切り詰めた必要な長さ(あるいはそれ以下)のランダム文字列を返り値用の引数$stringに連結して格納
            $string .= substr(str_replace(['/', '+', '='], '', base64_encode($bytes)), 0, $size);
        }

        return $string;
    }

 いざ実装コードを見てみると確かにこれ以上はPHP自体がstr_random関数を実装するぐらいしかないように思えます。乱数の種がいらず、長さを自由に決められて、ダブりがまず起きない、というのは本当にありがたいです。 これだけでも便利なのですが、URLでまず問題なく用いることのできる文字列は[0-9a-zA-Z]でなく[0-9a-z]と-と_の38文字と少々要求とrandom()が異なります。このあたりと上記コードを考慮すると次のコードが書けます。

$size = 32; // ランダム文字列の長さ
// 記号を_に置き換えるので文字列長が足りなくなる場合はなし。
// base64の仕様上確実に要求される文字列長よりエンコード後の文字列が長く=はカットされる
// 大文字のアルファベットをstrtolower関数によって小文字にする
$string = strtolower(substr(str_replace(['/', '+'], ['_', '-'], base64_encode(random_bytes($size))), 0, $size));

 用途を限定したためほぼ一行で済む様になりました。ダブルクリックで一発選択をしたい場合は[‘_’, ‘-‘]を’_’に書き換えるとよいです。

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

【souretree】ソースツリーの認証が失敗してプッシュできなくなった※【解決】

久々に別のアプリに変更点をプッシュしようとしたところエラーに遭遇。

fatal: Authentication failed for ‘https://○○○○corporation.backlog.jp/git/アプリ名/アプリ名.git/’

 

問題となっているURL

https://○○○○corporation.backlog.jp/git/アプリ名/アプリ名.git

エラーの内訳:不正なユーザー名とパスワードを使っている

 

対処法

①ツールを開く

————————-

②オプションを選択

————————-

③Gitを選択

————————-

④Gitバージョンの「System」を選択

 

 

————————-

⑤再度プッシュ。

エラーがおきなければ成功です。

 

恐らくバージョン更新した際に問われたソースツリーのユーザー名と

パスワードが間違っていたために起きたのだと思われます。

最初にbacklogのユーザ名・パスワードを入力してしまったのがまずかった。

ソースツリーはまた別にアカウントを持っていたので
そちらが正解だったみたいです。

この問題に関しては無駄に厳しくなっており、一度間違えるとそれ
以降問いてくれないのが難儀なところ。

一回間違えただけでここまで修正を強いられるのは
改善してほしいところです。

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

http://desilysis.seesaa.net/article/454257588.html

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

SYSTEM_SERVICE_EXCEPTION cldflt.sys Windows10におけるブルースクリーン症状

AccessのODBC問題でアンインストールを行ってますが、その後数日経過して、 2019/11/24 と、11/25 の2日連続と最近連続で発生しました。

以下リンク関連するのだろうか。

原因不明。情報まちです。

・sc query cldflt は STAT 4 RUNNING です。
・私は、夜帰り際に発生します。

【SYSTEM_SERVICE_EXCEPTION】Windows10におけるブルースクリーンの発生原因とその解決方法について【Ver1909】

https://answers.microsoft.com/ja-jp/windows/forum/all/systemserviceexceptionwindows10%E3%81%AB%E3%81%8A/774908ab-1b83-4c95-aeca-b2876e00e1f8?auth=1

KB4517389がインストールされた後、cldflt.sysでブルースクリーン エラーはsystem service exception

https://answers.microsoft.com/ja-jp/windows/forum/all/kb4517389%E3%81%8C%E3%82%A4%E3%83%B3%E3%82%B9/e5ea3b3c-e097-4bf9-b53f-a8b0762a2719
  • この記事いいね! (0)
著者:ym

ドローンの不法侵入防止システム!?

ウィルス対策ソフトで、そこそこ有名なカスペルスキーですが。

「ドローンの不法侵入防止システム」というのを作ってるらしいです。

ロシアのセキュリティ企業Kaspersky Labは、許可なく飛行してきたドローンの強制着陸などが可能な不法侵入防止システム「Kaspersky Antidrone」を開発した。

https://japan.cnet.com/article/35145882/

自由にやりたい。 でも確かにドローンは問題は多い。

そこそこの電波を発信しているのだと思うけど、ここ浜松市には航空自衛隊もあるので、このシステムの導入自体がなかなか難しそうな気配がします。

でも必要でしょうね。

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

【Android】ActionBarのタイトルとボタンの色を白色に変更する

前回に引き続き、今回も Android の ActionBar についての記事です。
今回は、ActionBar の戻るボタンやタイトルの色を白色に変更する方法です。
ActionBar を濃い色で指定しているので、戻るボタンの色を白に変えたかったのですが、どこを直すのかがわかりにくかったのでまとめました。

参考にさせていただいた記事はこちらから。

android – Changing ActionBar Text and Button color when using Theme.AppCompat.Light – Stack Overflow
https://stackoverflow.com/questions/30720873/changing-actionbar-text-and-button-color-when-using-theme-appcompat-light

 

修正するのは、プロジェクトの res > values ディレクトリ内にある styles.xml ファイルです。
このファイル内にある AppTheme という名前のタグの parentTheme.AppCompat.Light.DarkActionBar に変更します。
具体的には下記のとおりです。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    ......
</style>

変更はこれだけで、実機で確認したところ、きちんと白色に変更されていました。

他にも、タグ内に下記を追加するという方法もあるようでしたが、私の環境では上手くいきませんでした。

<item name="android:textColorPrimary">#fff</item>

そのため、他に影響が出ないようでしたら、parent を変更する方法をおすすめします。

 

以上、Android の ActionBar のボタン・タイトルの色を白色に変更する方法でした。
ご参考になれば幸いです。

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