月別アーカイブ 5月 2018

著者:ym

来年は元号が変わる

来年の新元号公表が 2019/4/1 に決定した様です。

新元号公表、改元1カ月前に システム改修対応促す :日本経済新聞

システム改変まで 1 ヶ月。1ヶ月とかではなく、1年前とかに公表すればよいのに。

私の見渡すかぎりでは元号を使っているシステムはほとんどありませんが、お役所へ提出する資料にはいくつか元号が入っていたりします。ほんと西暦で十分と思うのですけどね。

改元後も「平成」利用へ 納税や年金システム、混乱回避:朝日新聞デジタル

これ、改元後も「平成」利用。なるほど、そういう手がありますね。

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

【Cordova】iOSの「The GOOGLE_APP_ID either in the plist file ‘GoogleService-Info.plist’ or the one set in the customized options is invalid.」エラーの対処法

タイトルが長くてすみません。
今回は、Cordovaで開発中のアプリが、Simulator・実機問わず、急に実行時に落ちる様になってしまったので、その対処法についてです。

ちなみに、エラー全文はこちらです。

The GOOGLE_APP_ID either in the plist file ‘GoogleService-Info.plist’ or the one set in the customized options is invalid. If you are using the plist file, use the iOS version of bundle identifier to download the file, and do not manually edit the GOOGLE_APP_ID. You may change your app’s bundle identifier to ‘(null)’. Or you can download a new configuration file that matches your bundle identifier from https://console.firebase.google.com/ and replace the current one.

凄く長いので、読むのも一苦労ですが、Google翻訳にかけてみたところ、「‘GoogleService-Info.plist’またはカスタマイズされたオプションに設定されているGOOGLE_APP_IDは無効です。」とのこと。
エラー文の中にもある「GoogleService-Info.plist」が何らかの理由で壊れていることが原因らしいです。

なお、今回参考にした投稿はこちら。

iOS : invalid GOOGLE_APP_ID in GoogleService-Info.plist or set in the customized options #308 − fechanique/cordova-plugin-fcm
https://github.com/fechanique/cordova-plugin-fcm/issues/308

今回のエラーと全く同じ質問でした。
どうやら「GoogleService-Info.plist」ファイルは壊れやすいようです。

 

対処法は至って簡単です。
私の環境では、platforms/ios/[プロジェクト名]/Resources/Resources にある GoogleService-Info.plist が壊れていたことが原因だったため、その一つ上のディレクトリの platforms/ios/[プロジェクト名]/Resources/ にある「GoogleService-Info.plist」をコピーするだけでした。
なお、すでにファイルが有る場合は上書きします。
あとは、通常通り実行すれば、問題なく起動・動作しました。
これで一件落着です。

 

以上、iOSの実機でアプリが実行できなかったときの対処法でした。
とりあえず、わからないエラーは丸々コピーして、Googleなどで検索しましょう。
大概の投稿者は、投稿記事にエラー文を載せているので、2〜3記事も見れば、解決策がヒットするはずです。

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

画像処理の初歩

 コンピュータの世界において画像中の色はよくRGBAという数値で表されます。それぞれRed、Green、Blue、Alphaの略でまとまったものを画素と呼ばれます。RGBは色の強さをAlphaは大体の場合で透明度を表します。4項目は8bitで表せる0~255の範囲の整数で表されます。
 この色を表した値の変化によってさまざまな発展した情報を画像から得ることができます。例えば、境界です。色の急激な変化は何かと何かの境を表します。ある範囲のRGBAの微分をとることでその範囲の色の変化の大きさを得ることができ、境界を判断できますまた、近隣の画素の値と近づけることで画像をぼかしたり、ノイズを除去したりできます。近づけるためには中央値だったり、平均値だったりが使えます。逆に近隣の色の値と遠ざけることで各画素を強調することができます。例えば次の式
 加工後の画素=(9*加工前の画素-sum(周囲8マスの各画素))
です。RGBを常に同じ値にした場合にはモノトーンの画像にできます。
 色を値にすることは二次元信号として像をとらえられるということです。このためフーリエ変換を始めとした各種信号処理、ディープラーニングの様な機械学習、ベクトルや差分による圧縮などなどの像のための様々な技術がコンピュータ上で使われています。

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

主要Linuxディストリに追加された新しいパッケージ形式”Snaps”とは

恥ずかしながら最近初めて知ったのですが、最近の主要ディストリでは、RPMやDEB形式ではない新しいアプリケーションパッケージシステム(パッケージマネージャー)である”Snaps”(Snap、Snappyとも呼ばれる)が実装されているらしいです。

Linuxの新しいパッケージフォーマット、Ubuntu生まれのSnapsは、小アプリケーション群のためのコンテナのようだ – Tech Crunch

最初”なぜ今更あたらしいパッケージマネージャーなんて…”と思ったのですが、記事を読んでなるほど納得がいきました。

パッケージは端的に言ってしまうとWindowsでいう所謂”Windowsインストーラ”にあたります。本来、Linuxではアプリケーションをインストールするときに”ビルド”という手動の作業が必要だったのですが、従来のRPMやDEBなどどいったパッケージマネージャーは、パッケージを”インストール”することによって、初期設定も含めて全自動でアプリをインストールしてくれるという非常に便利なシステムです。


debパッケージ


rpmパッケージ

ただし、Windowsインストーラと異なるのはそのパッケージ単体をインストールするだけではアプリは動作しないという点。
Linuxの場合、一つのアプリを動作させるためには、そのアプリが動作するのに必要となるライブラリ群をあらかじめOSにインストールしておく必要があります。
アプリとアプリが必要とするライブラリの関係を”依存関係”とよび、パッケージにはアプリが必要とする依存関係も登録されています。

ところが、この依存関係というのが非常に厄介な存在です。
実はDEBやRPMといったパッケージマネージャーは飽くまで依存関係にあるアプリがインストールされているかのチェックのみで、足りない依存関係を自動で満たす機構はもっていません。
もっとも現在ではyumやaptなどといったコマンドを使えばこの依存関係の自動補完も行ってくれますが、あくまで外部のツールが補完しているのであり、DEBやRPM本体の機能でないことには注意が必要です。

さらに、インストールするアプリが要求するライブラリなどによっては、使用しているOSや、登録しているリポジトリで提供していないものがある場合が考えられます。
この場合、たとえaptやyumを用いたとしても、アプリをインストールすることができません。

さらに、DEBとRPMには互換性がなく、DEBパッケージマネージャーを採用しているOSでRPMパッケージはインストールできないし、逆にRPMパッケージマネージャーを採用しているOSでDEBパッケージはインストールできません。
一応、パッケージ形式を相互変換してくれる”alien”コマンドはあるのですが、自分が試した限りでは上手く動作しませんでした。

今回のSnapsパッケージは、そんな従来のパッケージマネージャーの欠点を解決してくれそうなシステムになっているようです。

 

Snapsは、最近はやりの仮想化技術である”コンテナ”のような仕組みになっており、Snapsパッケージ内にアプリとそのアプリが必要とするライブラリ群もすべて含まれているとのこと。
また、Snaps内のアプリはアップデートもロールバックも行えるようになっているようで、より柔軟な使い方ができるようになりそうです。

つまり、同じLinuxでありながら使用できるアプリが異なっていた各ディストリ上でも、Snapsをサポートしているバージョンであれば、debian系LinuxであろうとRedHat系Linuxであろうと、同じパッケージをインストールすることができるようになります。Linuxアプリ開発者は今までdeb形式とrpm形式のパッケージを準備する必要がありましたが、今後はSnapsパッケージ一つ作るだけで両方のLinuxユーザーから利用してもらえるようになります。とても画期的ですね。

現時点ですでにSnaps形式のパッケージが出回りつつあるようですが、まだ日本語化されていなかったりするパッケージも多いようで、快適に利用できるようになるまではもう少し時間がかかりそうです。

Snapcraft

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

自宅のPCにUbuntu 18.04 LTS をインストール

Linuxディストリビューションの一つであるUbuntuの最新版、Ubuntu 18.04 LTSを自宅のPCにインストールしてみました。

16.04 LTS までデフォルトになっていたデスクトップ環境Unityですが、UbuntuのモバイルOS進出断念に伴い開発が終了されました。

UbuntuのCanonical、「Unity 8」開発打ち切りを発表 スマホの取り組みも終了 – ASCII.jp

という経緯で18.04ではGnome 3がデフォルトになっていました。

個人的にGnome3はGnome2とくらべてかなり操作感が変わりわかりづらくなっていたので、[Gnome3かー」と思ってはいたのですが、18.04に搭載されているバージョンのGnome3のUIは以前触ったときに比べてかなり操作しやすくなっていました。

まだ使い始めたばかりで、どんなところが変わっているのかなどまだ把握できていない点が多いので、また少しづつまとめていけたらと思います。

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

【JavaScript】使用しているモバイル端末の種類を判定する方法

今回は、どの端末を使用しているかを判定する方法について。
ちなみに、AndroidiOS の判定しかしていません。

参考にさせていただいたサイトはこちらから。

使用してるブラウザを判定したい – Qiita
https://qiita.com/sakuraya/items/33f93e19438d0694a91d

コードはこちら。

var userAgent = navigator.userAgent.toLowerCase();
if (userAgent.indexOf("android") != -1){
    // Android の時の処理
}
if ((userAgent.indexOf("iphone") != -1)||(agent.indexOf("ipad") != -1)){
    // iOS(iPhone、iPad)の時の処理
}

navigator.userAgent でユーザーエージェントを取得します。
そして、取得できた結果は .toLowerCase() メソッドを使って全て小文字に変換します。
で、.indexOf() メソッドで、指定された値が最初に現れたインデックスを取得します。
なお .indexOf() メソッドは、指定した値がなかった場合、-1 を返します。

あとは、Android、iOSごとに行いたい処理を ifで分岐した先に記述すればOKです。
思っていたよりも簡単ですね!

 

以上、使用しているデバイス端末の種類を判定する方法でした。
ちなみに、私はこちらをアプリのアップデートを促す際の処理で使っています。
もし、インストールされているアプリが最新のバージョンよりも古かったら、端末を判定し、Google Play もしくは App Store のそれぞれのページに遷移させています。
使っているのはその箇所のみですね。
端末ごとに分けなければいけない処理は意外と少なく、この程度で済むようです。

なお、参考にさせていただいた記事では、ブラウザの判定も紹介されています。
今のところ、ブラウザで分け無ければいけない処理はありませんが、機会があったらこちらも参考にさせていただきたいと思います。

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

My Data Managerで今月使えるデータ量を常に表示

以前入れていたデータ使用量をカウント・表示してくれるアプリ MyDataManager を久々にインストールしてみました。

Androidの場合、システムに標準でデータカウントをしてくれる機能がついていますが、カウントと指定容量以上を超えたら制限、および通信制限をしてくれるというシンプルなものです。

ライトユーザーであればこれで十分なのですが、自分のようにテザリングで使っていてすぐに通信量を(通知バーなどで)確認したかったり、シェアプランなどで一つのデータ容量を複数端末で共有している場合はOS標準のものでは対応できません。

一方、MyDataManagerであれば、通知バーにも出せますし、複数端末で使用状況を共有することもできるようになっています。

以前はMyDataManagerがCPUリソースを多く消費していたことがあったのでしばらく使用するのをやめていたのですが、やっぱり必要性を感じて先日再インストールしました。

最後に使ってからかなり改良や機能追加が行われており、さらに使いやすくなった印象です。
プランの設定オプションに、以前からあったシェアプラン対応の他に、特定アプリのデータ量カウント対象外プランなども追加。

比較的新しく登場したプラン携帯にもばっちり対応していて、実用感が増しています。

勿論Android標準アプリが備えているような使用量警告通知やデータ通信の自動停止などの機能も揃えてますし、日毎の使用量も同時に出してくれたりとかなり至れり尽くせりです。

スマホでモバイルルーターのように常に使用データ量を確認したり、シビアなデータ通信管理をしたい方には是非オススメしたいアプリです。

Android版
https://play.google.com/store/apps/details?id=com.mobidia.android.mdm&hl=ja

iPhone版
https://itunes.apple.com/jp/app/my-data-manager-%E9%80%9A%E4%BF%A1%E9%87%8F%E7%AF%80%E7%B4%84/id477865384?mt=8

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

正規表現を図示するWebアプリであるRegexperの紹介

 正規表現は便利なものですが巨大なものになると一見してわからなくなります。エスケープコードが必要になるような場合はますます謎の式になります。この記事で紹介するのは正規表現を状態遷移図の様に図示してくれるwebアプリであるRegexperです。Regexperはjavascriptの正規表現に対応しています。

Regexep

 以下の二つの正規表現を使用例に使います。
/^(?:[0-9]|[a-z]|[\._%\+-])+(?:@)(?:[0-9]|[a-z]|[\.-])+(?:\.)[a-z]{2,}$/i
^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$

 灰色のテキストボックスの中に正規表現を入れて”Display”と書かれたボタンをクリックで使用です。
/^(?:[0-9]|[a-z]|[\._%\+-])+(?:@)(?:[0-9]|[a-z]|[\.-])+(?:\.)[a-z]{2,}$/i

^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$

どちらもメールアドレスを表現しようとしている正規表現なのだと視覚から直観的にわかります。

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

MT7 リリース

Movable Type 7 がリリースされました。

先日 RC 版で既に事前テスト済みのため、データベースとコンテンツのバックアップを取ってそのままアップグレード実行です。

無事アップグレード完了。MobableType では動的パブリッシングは使用せず、サーバスペックも弱いVPSなので全て静的再構築です。全てのコンテンツを再構築して完了です。

静的パブリッシングのお陰様で超早い!わざわざ動的で処理無くてもJavascriptで動的コンテンツ化は出来ますしね。

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

コード中のif節を減らす

これの記事はシンプルなif節を減らすことについての記事です。
例えば、次のようなプログラムがあるとします。条件ABCの真偽に応じて01を返すプログラムです。

if A
    if B
        if C
            return 1;
        else
            return 0;
        end
    else
        if C
            return 0;
        else
            return 1;
        end
    end
else
    if B
        if C
            return 1;
        else
            return 0;
        end
    else
        if C
            return 1;
        else
            return 0;
        end
    end
end

このプログラムは一見読みにくく、また余分な動作があります。if節を減らすことで速度と可読性の向上が見込めます。単純な真偽を表に表します。ABCが条件、Rが返り値です。1は値の1の他に真の意味も持ちます。0は値の0の他に偽の意味も持ちます。

A B C R
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 1
1 1 1 0

例えば~AB~C=1、AB~C=1です。~は否定の意味です。ここからB~C=1と短縮でき、以下の様にプログラムを変えることができます。

if B
    if C
        if A
            return 0;
        else
            return 0;
        end
    else
        return 1;
    end
else
    if C
        if A
            return 1;
        else
            return 0;
        end
    else
        if A
            return 1;
        else
            return 0;
        end
    end
end

判定が減った分、文量も処理量も減りました。
そんなこんなで真偽を最適化した場合、次のような式ができます。
1 = ~A~BC + B~C + A~C
この式に従った場合、以下の様にプログラムを変えることができます。

if C
    if ~A
        if ~B
            return 1;
        end
    end
else
    if A
        return 1;
    end
    if B
        return 1;
    end
end
return 0;

最初の書き方が愚直すぎるのもありますが随分と簡略化できました。
真理値の短縮には多くのアプリ、ライブラリもあるのでコードを簡略化したい際にはググって使うのが良いと思います。

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