カテゴリーアーカイブ 言語

村上 著者:村上

【Cordova】Android端末でアプリのパーミッションを確認するプラグイン「cordova-plugin-android-permissions」

昨日の記事で名前だけ紹介したプラグイン「cordova-plugin-android-permissions」についてご紹介します。
名前のとおり、Android 端末のパーミッションチェックしか行えませんが、使い方が分かりやすいのでこちらもおすすめです。

GitHub – NeoLSN/cordova-plugin-android-permissions: This plugin is designed for supporting Android new permissions checking mechanism.
https://github.com/NeoLSN/cordova-plugin-android-permissions

 

インストールのためのコマンドは下記のとおりです。

cordova plugin add cordova-plugin-android-permissions

使用例は下記のとおりです。

const permissions = cordova.plugins.permissions;
permissions.requestPermission(permissions.CAMERA, function(status) {
    if (status.hasPermission) {
        // 許可された
    } else {
        // 許可されなかった
    }
}, function(error) {
    // 許可されなかった
    console.log(error)
});

なお、上記ではカメラパーミッションをリクエストしています。
許可されていない場合は、パーミッションダイアログが表示されます。

単にパーミッションを確認するだけの場合は、下記を使用します。

permissions.checkPermission(permission, successCallback, errorCallback);

上記を実行した場合、指定したパーミッションが許可されていない時でもダイアログは表示されません。

カメラ以外のパーミッションを確認する場合は、下記の Manifest.permission を参考にしてください。

Manifest.permission|Android Developers
https://developer.android.com/reference/android/Manifest.permission.html?hl=zh-tw

 

以上、Android 端末でアプリのパーミッションを確認するためのプラグイン「cordova-plugin-android-permissions」のご紹介でした。
昨日紹介した「cordova-diagnostic-plugin」とは違い、第一引数を変更すれば同一の処理でパーミッションを確認できるのは良いですね。
個人的にはこういった書き方の方が好みです。
需要に合えば、是非ご活用ください。

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

【java】javaにおけるコンストラクタの使い方・おさらい

javaでコンストラクタの使い方がわかってきてもう怖いものはないと思っていましたが、いずれまたすぐ忘れるかもなので自分用に

とっておきます。コンストラクタは、インスタンスを作る時に初期値を設定するために呼び出されるメソッドのことで、クラス名と

必ず同じ名前でなければなりません。また、コンストラクタのメソッド内でreturnを書いても死ぬのでここも注意ですね。

知らないうちはそんなのメンバ変数を適当に定義しとけばいいじゃんと思っていましたが、コードが大きくなるにつれ結局メンテナンス

が大変になって汚いコードになることを知ったのでまた使い方をおさらいしていたところです。理屈で知っていても何のために使う

か実際に書いて理解していないとわかったつもり状態になってしまうのでここにきてサンドボックスで少し復習しました、はい。

次のプログラムは、コンストラクタのメソッドに決められた文字を設定して、superでスーパークラスのコンストラクタを利用して

それぞれ異なる結果を出力するプログラムです。

 

</pre>
// スーパークラス
class ClassSuper {
protected int i;

public ClassSuper(str i){
this.i = i;
}

public void favarite(){
System.out.println("私は" + i + "が好きではありません。");
}
}
// サブクラス
class ClassSub extends ClassSuper{
public ClassSub(str i) {
super(i);
}

@Override
public void favarite(){
System.out.println("私は" + i + "が好きです。");
super.favarite();
}
}

public class Main {

public static void main(String[] args) {
ClassSub cs = new ClassSub("カレーライス");
cs.favarite();
}

}
<pre>

コンストラクタにカレーライスという文字を設定しています。何も設定しない場合は、スーパークラスをオーバーライドしている

サブクラスのメソッドを呼び出すのですが、今回はコンストラクタメソッド内でsuperメソッドを呼び出しています。このsuperメソッド

は、オーバーライドしているサブクラスのメソッドでないスーパークラスのメソッドを使いたい時に用いるメソッドです。

これを呼び出すことにより、”カレーライス”文字列はスーパークラス・サブクラス二つのクラスのコンストラクタとして初期値に設定され

それぞれ違うメソッドを呼び出すことに成功しています。

 

 

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

【Cordova】アプリのパーミッションを確認するプラグイン「cordova-diagnostic-plugin」

アプリのパーミッションを確認する必要があったため、プラグインをインストールしました。
Android なら、cordova-plugin-android-permissions というプラグインがあったのですが、名前のとおり、Android のみしか対応していなかったため、iOS でのチェックを行うためにこちらもインストールしました。
しかし、こちらは Android にも対応しているため、cordova-plugin-android-permissions の方をアンインストールして、これのみでチェックしようかと思っています。

GitHub のページはこちらから。

GitHub – dpa99c/cordova-diagnostic-plugin: Cordova/Phonegap plugin to manage device settings
https://github.com/dpa99c/cordova-diagnostic-plugin

 

使い方ですが、例えばカメラのパーミッションを確認する場合は下記のように記述します。

cordova.plugins.diagnostic.getCameraAuthorizationStatus(
    function(status) {
        // チェック成功
        if(status === cordova.plugins.diagnostic.permissionStatus.GRANTED) {
            // カメラが使用が許可されている
            ......
        } else {
            // カメラが使用が許可されていない
            ......
        }
    }, function(error) {
        // チェック失敗
        console.error("The following error occurred: "+error);
    }, false
);

カメラの使用が許可されている場合は、上記のようにステータスで GRANTED の値が返却されます。
なので、返却値によって適宜処理を変更してください。

なお、上記のコードでは、パーミッションを確認するだけなので、もしなかった場合でも許可/拒否のダイアログの表示はしません。
パーミッションをリクエストしたい場合には、requestCameraAuthorization() を使用してください。
使用例は下記の通りです。

cordova.plugins.diagnostic.requestCameraAuthorization(
    function(status) {
        if (status === cordova.plugins.diagnostic.permissionStatus.GRANTED) {
            // カメラ使用が許可された場合
            ......
        } else {
            // カメラ使用が許可された場合
            ......
        }
    }, function(error) {
        console.error("The following error occurred: "+error);
    }, false
);

使い方としてはこんな感じです。
他にも、位置情報や Bluetooth、プッシュ通知、マイクなど、色々チェックできます。

ただし、位置情報など一部のパーミッションによっては、戻り値のステータスの値が Android と iOS で違っていたりするので、そこだけはご注意ください。

 

以上、アプリのパーミッションをチェックするためのプラグイン「cordova-diagnostic-plugin」のご紹介でした。
戻り値に注意して、便利にお使いください。

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

【Laravel】【Docker】Laravel用Dockerパッケージlaradocの紹介

 Dockerは仮想マシンを用意するツールです。何かと便利なのですが、仮想マシン中のソフトそれぞれについての知識がそれなりに必要になります。知識なしのままデフォルト設定から離れるとバグを生みがちです。
If it works in Docker, it works on CircleCI – CircleCI
 そうなるとDockerのデフォルト設定でなくLaravel用の安全な設定が欲しくなります。Laradocはそういった要素のパッケージです。Laradock
 サーバ機能、各データベース、jenkinsなどCIツール、Laravel推奨パッケージ、などが詰まっています。パッケージに命令を発する。docker-composeファイルは次の様な巻物になっています。この中から探すと大体メジャーなソフトやパッケージが見つかります。また、扱いやすい様に高頻度で変えられるパラメータなどが変数化されており、簡単安心に基本的な使い方ができます。
 
 日本語のチュートリアルは色々な人が詳しく書いているのがたくさんあるのでググれば目的のものが大体あります。

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

【java】オーバーロードを使ったポリモーフィズムの書き方

今回は、ポリモーフィズムの話題です。

ポリモーフィズムとは、定義された同じ名前のメソッドを使ってクラスごとに全く違う振る舞いを

入れこむことができる概念で、、多様性という意味を持ちます。

今回は、オーバーロードの書き方に沿ったポリモーフィズムをさっと書いてみました。

※「オーバーロード」とは、一つの「クラス」の中に、同じ名前で引数が違うメソッドがある状態のことを指します。

このオーバーロードに沿って簡単な計算をするプログラムを書くとこんな感じに仕上がります。

</pre>
<pre>class calculator{
  public void calc(int x) {
    System.out.println("x * x = " + (x * x));
  }
  public void calc(int x, int y) {
    System.out.println("x * y = " + (x * y));
  }
}

class plusCalc{
  public static void main(String[] args) {
    calculator hoge = new calculator();
    hoge.calc(int 4,2)
    hoge.calc(int 2)
}
</pre>
<pre>

スーパークラスcalculatorのインスタンスを定義してcalcメソッドを使用可能にしています。その後に

引数が異なるメソッドを二つ定義しているのがわかります。ここの引数が異なるのがポイントで、

引数によってどのメソッドに処理をさせるかを識別してからメソッドを呼び出しています。

この識別されるメソッドと引数を全部ひっくるめてシグネチャと呼びます。

オーバーロードをこのポリフォーリズムの書き方に当てはめることで、このシグネチャによって

どれだけ同じメソッドを書いても引数によってその処理を柔軟に変えることが出来るのです。

以上です。

オーバーライドを使ったポリモーフィズムもあるのですが、うろ覚えで自信がないのでまたまとまった時に書きます。

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

【Laravel】任意のseederを動かすartisanコマンドを追加するlaravel-artisan-seeder-selectorの紹介

 Laravelにはシーディングという仕組みがあります。

シーダ(初期値設定)クラスを使用し、テストデーターをデーターベースに設定するシンプルな方法もLaravelには備わっています。全シーダクラスはdatabase/seedsに保存します。シーダクラスには好きな名前を付けられます。しかしUsersTableSeederなどのような分かりやすい規則に従ったほうが良いでしょう。デフォルトとしてDatabaseSeederクラスが定義されています。このクラスからcallメソッドを使い他の初期値設定クラスを呼び出すことで、シーディングの順番をコントロールできます。
データベース:シーディング 5.8 Laravel

 シーディングはartisan db:seedコマンドを叩くだけでデータベースに初期データを挿入する仕組みで、テストデータの生成やマスタなどの初期データの生成のために使われます。この二つの生成はテスト環境用、本番環境用と明確に使いたい状況の異なる生成です。そのためシーダークラスを分けてつくり両立させます。大体DatabaseSeederクラスに本番環境用データSeederの呼び出しメソッド、謎のテストやデプロイ用らしきクラスにテストデータ生成用メソッドが含まれています。これを–class=[className]オプションで使い分けます。
 –class=[クラス名]オプションは便利なのですがクラス名を知らなければならないという障壁があります。laravel-artisan-seeder-selectorはその障壁すら取り除きます。
Asperhsu/laravel-artisan-seeder-selector: Artisan command for DB Seeder selector
 インストール方法はapp/Console/Commands以下にSeederSelector.php1ファイルをコピペするだけです。もはやスニペットですからそんなものです。そうするとartisan db:seed-selectコマンドが実行できるようになり、次の様にクラス名の代わりに番号で選択する画面が出せます。

 db:seedは手作業で打つことの多いコマンドでもありますからGUI的に使えるこういったコードはありがたいです。

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

【JavaScript】配列から特定の要素を検索する方法

たまーに使うので、備忘録としてまとめ。
配列から特定の要素を検索する方法です。

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

【JavaScript入門】配列の要素を検索する4つの方法! | 侍エンジニア塾ブログ(Samurai Blog) – プログラミング入門者向けサイト
https://www.sejuku.net/blog/22228

上記の記事によると、4つの方法があるようですが、とりあえずノーマルな方法のみまとめます。

 

今回使用するのは、indexOf メソッドです。
こちらのメソッドは、指定した値が配列の要素の中にあるかどうかを検索できます。
もし一致したデータがあった場合、そのインデックスの位置を返し、見つからなかった場合は -1 を返します。

サンプルコードはこちら。

const color = ['あか', 'あお', 'きいろ', 'みどり'];
const index = color.indexOf('あお');

上記の場合、変数 index には 1 が入ります。

また、今回は指定しておりませんが、indexOf には第二引数があり、検索の開始位置を指定することもできます。
なので、例えば 4番目の要素以降で一致するデータがあるかを調べたい場合は、3 を指定します。

 

以上、indexOf を使った配列の要素検索の方法でした。
多分今後も使うことがあると思うので、コピペ元として残しておきます。
是非、ご利用ください。

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

めっきり扱わなくなったfor文

 for文は決まった回数繰り返す処理を示す文です。次の分はmax回処理を繰り返します。

for (i = 0; i < max; i++){
  // 繰り返し処理
}

 以前はこれをよく書いたのですが最近扱っている近年の言語ではめっきり書かなくなりました。大体がforeachとfor inです。繰り返しを書く時は大体、何かの中を順番に扱いたい時であるため例えば次の様になります。

for (i = 0; i < hogeArray.length; i++){
  // hogeArray[i]を用いた繰り返し処理
}

hogeArray.foeEach(item => {
  // itemを用いた繰り返し処理
});

 下の方がiという変化し続ける値を持たずに済むため、気持ち単純です。foreachという語もまさしく動作を表しており、いったい何のためのforなんだ?とならずに済みます。
 Vue.jsでは本当に決まった回数を実行する時にもfor inを使います。
 リストレンダリング — Vue.js#範囲付き-v-for

<div>
  <span v-for="n in 10">{{ n }} </span>
</div>

 上記で、数字を内部に持つspanタグが10個並びます。

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

【React】コンポーネントにスタイルを適用する方法

今日、うっかり書き方を間違えたので、備忘録としてまとめます。
React のコンポーネントにスタイルを適用するときの書き方についてです。

エラーが発生した時に、React が誘導してくれたページはこちら。

React – Error Decoder
https://reactjs.org/docs/error-decoder.html/?invariant=62&args[]=

 

このページの最下部に、下記のように style プロパティの書き方についての記述がありました。

The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + ‘em’}} when using JSX.

私はうっかり、HTML と同じ書き方で下記のように指定してしましたが、React ではこの書き方ではだめです。

<div style='padding-top: 10px;'>
    <p>テキスト</p>
</div>

下記のように記述するのが正解です。

<div style={{paddingTop: '10px'}}>
    <p>テキスト</p>
</div>

なお、React では、padding-top ではなく、paddingTop というように、キャメルケースで記述します。
また、複数のプロパティを指定したい場合は、カンマ区切りで記述します。
若干普通の CSS とは指定の仕方が異なりますが、プロパティ名なんかは同じなので、それほど悩むことはないと思います。
強いて言えば、中かっこが2重になっていることに注意するくらいでしょうか。

 

以上、React のコンポーネントにスタイルを適用する方法でした。
今後もうっかり書き間違えないように気をつけたいと思います。

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

【Vue】propsで渡ってきたObjectをキーについてバリデーションする

 扱う値があまりに煩雑になってくると系統だった値をまとめてオブジェクト化して扱う様になります。Vue.jsではpropsという仕組みで値をコンポーネント間でやりとりします。基本は次の様に受け渡されるコンポーネント側で型を検査することによって致命的エラーを防ぎます。

  props: {
    memberId: {
      type: Number,
      required: true,
    },
    pageInfo: {
      type: Object,
      required: true,
    },
  },

 この方法を用いた場合、Object型の通過ルールはあまりに緩すぎます。必要なプロパティがそろっていない空のObjectでも通ってしまいます。バリデーションを用いることでこれを防げます。
 プロパティ — Vue.js
 リンク先のカスタムバリデーションがそれです。これはvalidator関数の返す値の真偽によってバリデーションの結果を判定する仕組みです。次のvalidator関数の例は必要なkeyが全てあるかないかの判断になります。

  props: {
    pageInfo: {
      type: Object,
      required: true,
      validator(value) {
        const valueKeys = Object.keys(value);
        let isIncludeAllNeedKey = true;
        ['currentPage', 'from', 'to', 'total', 'lastPage'].forEach((needKey)=>{
          isIncludeAllNeedKey = isIncludeAllNeedKey && valueKeys.includes(needKey);
        });
        return isIncludeAllNeedKey;
      },
    },
  },

 与えられた値valueのキーを配列化、必要なキーについて一つ一つincludes関数で存在の有無を確かめます。どこかで無いとわかった時、isIncludeAllNeedKey = isIncludeAllNeedKey && falseとなり、isIncludeAllNeedKey===falseの状態となり、isIncludeAllNeedKey = false && valueKeys.includes(needKey);が実行されるようになります。これでオブジェクトのキーの有無を確かめるための簡単なバリデータを作れます。

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