カテゴリーアーカイブ OS

takahashi 著者:takahashi

Linux系OSでタイムゾーンを変更する方法

OSに設定されているタイムゾーンが自分の使用したいものと異なっている場合、数時間時刻がずれてしまうことになるので、いろいろ困ることがあります。

そういった場合はタイムゾーンを設定しなおさないといけません。

Linuxでのタイムゾーンの変更方法をご紹介します。

/usr/share/zoneinfo

を見ると

$ ls /usr/share/zoneinfo
Africa      CET      Egypt    GMT+0      Iran       MST7MDT  Pacific    UCT          leap-seconds.list
America     CST6CDT  Eire     GMT-0      Israel     Mexico   Poland     US           localtime
Antarctica  Canada   Etc      GMT0       Jamaica    Msft     Portugal   UTC          posix
Arctic      Chile    Europe   Greenwich  Japan      NZ       ROC        Universal    posixrules
Asia        Cuba     Factory  HST        Kwajalein  NZ-CHAT  ROK        W-SU         right
Atlantic    EET      GB       Hongkong   Libya      Navajo   Singapore  WET          zone.tab
Australia   EST      GB-Eire  Iceland    MET        PRC      SystemV    Zulu         zone1970.tab
Brazil      EST5EDT  GMT      Indian     MST        PST8PDT  Turkey     iso3166.tab

あらゆるタイムゾーンの設定が書かれたファイルが置かれています。

これらは名前のタイムゾーンの設定がそれぞれ入っているので、設定したいタイムゾーンファイルのリンクを/etc/localtimeとして張ります。

ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

(日本語時間に設定する場合)

ただ、この設定では再起動時に変更する前のタイムゾーンに戻されてしまうようなので、永続化させるためには
/etc/sysconfig/clock
下記のように変更します。

ZONE="Asia/Tokyo"
UTC=false

これで設定完了です。

【Linux】タイムゾーン(Timezone)の変更 – Qiita

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

【Cordova】端末のプラットフォームやバージョン情報を取得できるプラグイン「cordova-plugin-device」

Cordova アプリを開発中に、Android と iOS で処理を分けるなど、端末の情報を取得する必要があるときに便利なプラグイン「cordova-plugin-device」についてのご紹介です。
主に、プラグインによっては、Android でしか動作しないものがあったり、逆に iOS でのみ動作するものもあったりするのでそれの処理をかき分けたい時などに使っています。

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

GitHub – apache/cordova-plugin-device: Apache Cordova Plugin device
https://github.com/apache/cordova-plugin-device

 

インストールは下記のコマンドで行います。

cordova plugin add cordova-plugin-device --save

準備は以上で完了です。
あとは、任意の場所でプラットフォームの種類などのデバイス情報を取得できます。

私が主に使うのは下記のコードです。

const device = window.device.platform;

switch (device) {
    case 'Android':
        // 端末が Android だった時の処理
        break;
    case 'iOS':
        // 端末が iOS だった時の処理
        break;
    default:
        // その他の処理
}

上記では、アプリを実行している端末が Android なのか iOS なのか、それ以外のものなのかを判定して、それぞれの処理を実行できます。

他にも、UUID を取得したり、バージョン情報を取得したりすることもできます。
取得できる情報は下記のとおりです。

  • device.model
  • device.platform
  • device.uuid
  • device.version
  • device.manufacturer
  • device.isVirtual
  • device.serial

また、端末の製造元や、現在の実行環境が実機なのかシュミレータなのかを判断することもできます。
使い方は下記のとおりです。

// 製造元を取得
const manufacturer = window.device.manufacturer;
// シュミレータかどうかを取得
const isSimulator = window.device.isVirtual;

なお、シュミレータかどうかの判定については、OS Xブラウザの場合は常に false を返すようです。

 

以上、アプリを実行している端末の情報を取得できるプラグイン「cordova-plugin-device」のご紹介でした。
プラットフォームの取得以外はまだ使ったことはありませんが、それだけでもかなり使えますので、是非ご活用ください。

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

【Linux】複数ディレクトリにまたがって特定の正規表現に当てはまるの最新のファイル一つのパスを得るコマンド

 Linuxのコマンドはかなり機械語に近いところで最適化されており高速です。PHPのファイルシステムを介していては遅いと言わざるを得ないような場面でもコマンドをexecすれば高速です(プログラム実行関数を扱う際は文字列のエスケープなど対策を忘れないようにする必要があります。任意コード実行のセキュリティホールに繋がるので細心の注意が必要です)。
 とある単一のディレクトリの中で最新をとってくるのは簡単です。

ls -lt ./* | grep -e \.ほしいファイルの拡張子$ | head -n 1| awk '{print $NF}'

lsコマンドのtオプションはファイルを最終更新日時順に表示します. grepでほしいファイル種別に表示を絞り込みます。headコマンドの-n 1で最初の一行のみの表示を取得します。awkの$NFには区切られた文字の内の最後が入ります。結果次の様にファイルのパスが出力されます。

複数ディレクトリはちょっと手間です。ls dirA/* dirB/*とするとディレクトリごとの結果が出てくるのでまとめてソートする必要があります。

ls -l --full-time dirA/* dirB/* dirC/* | grep -e \.ほしいファイルの拡張子$ | sort -k 6,7 -r | head -n 1| awk '{print $NF}'

lsの–full-timeオプションで日時表示をソートしやすい形(なしだと月日で手間)にして出力。sortで6,7列目(-k 6,7)の日時を降順(-r)でソートします。最後はディレクトリ一つの時同様にhead -n 1| awk ‘{print $NF}で完成です。

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

【PowerPoint】入力した英字がすべて大文字になる時の対処法

頻繁に使うものではありませんが、たまに遭遇した時に覚えておくと便利なので備忘録としてまとめます。
PowerPoint でスライド資料を作成中、入力した英字が大文字になってしまう時の対処法です。
例えば、「Power Point」と入力したはずが、実際には「POWER POINT」となってしまうときにお試しください。

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

なんで全部大文字になるの?というときに|クリエアナブキのちょこテク
https://www.crie.co.jp/chokotech/detail/156/

 

対処法としては簡単で、まずリボンメニューのホームの「フォント」の設定を開きます。
フォントの設定エリアの右下隅にある、四角と矢印のアイコンをクリックしてください。
すると、下記のようなウィンドウが開くと思いますので、「文字飾り」の項目の「すべて大文字」のチェックを外します。

あとは OK ボタンをクリックすれば、設定が反映されるはずです。

設定としては以上ですが、場合によってはある程度スライドを作ってしまってからこの設定を反映させたい場合があるかもしれません。
その際に、いちいち入力エリアを選択して、フォントメニューを開いて設定…とやるのは面倒なので、そんな時は「スライドマスター」から一括変更を行います。
下の画像のように、リボンメニューの「表示」を選択すると、「スライドマスター」という項目があるのでこちらをクリックします。

すると、現在使用しているスライドのテンプレートがすべて表示されるので、ここからフォントの設定を変更したい項目を選択し、上記で紹介した方法で「すべて大文字」を解除します。
例えば、変更したいスライドのテンプレートの見出しを選択して設定を変更すれば、すべてのスライドにこの変更が反映されます。
あとは、スライドマスターを閉じれば、元の画面に戻ります。

 

以上、PowerPoint で英字がすべて大文字になってしまう時の対処法でした。
特に一括変更は他の設定でも使えますので、覚えておいて損はないかと思います。
参考になれば幸いです。

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

【Android】「java.lang.ClassNotFoundException: Didn’t find class “android.support.v4.animation.AnimatorCompatHelper” on path: DexPathList」エラーの対処法

長々しいタイトルですが、今回は Cordova アプリを開発中に遭遇したエラーについて。
なお、プラットフォームは Android です。
Android 9 で、Adobe の画像加工機能がクラッシュする不具合が発生しており、それを修正している最中に遭遇しました。
一部のみ抜粋ですが「java.lang.ClassNotFoundException: Didn’t find class “android.support.v4.animation.AnimatorCompatHelper” on path: DexPathList」とのことでしたので、そのまま「“android.support.v4.animation.AnimatorCompatHelper”ファイルが見つかりません」という意味のようです。

 

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

AnimatorCompatHelper Class Not Found Exception using AppCompat 26.0.0 · Issue #396 · h6ah4i/android-advancedrecyclerview · GitHub
https://github.com/h6ah4i/android-advancedrecyclerview/issues/396

compile 'com.github.h6ah4i:android-advancedrecyclerview:feature~support_libraries_v26-SNAPSHOT'

記事内には上記コードを追加するという方法もありましたが、私の環境ではエラーが発生してうまくいきませんでした。

そのため、下記のコードを build.gradle の最後に下記を追加する方法を採用しました。

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '25.4.0'
            }
        }
    }
}

あとは、Sync Now を実行します。
なお、以前の投稿記事で紹介したように、AsyncTaskCompat.javaAsyncTaskCompatHoneycomb.java を手動で追加していたのですが、ファイルが既に存在しているとのエラーが発生したので、こちらの 2ファイルは削除しました。
で、エラーが発生したので Try Again を実行後、Build → Run したところ、問題なく動作しました。
「効果」のオプションを選択するとそこでクラッシュしていたのですが、再現しなくなりました。
一通り、追加したオプションを使ってみましたがそちらも問題なしでした。

 

以上、Android アプリで「java.lang.ClassNotFoundException: Didn’t find class “android.support.v4.animation.AnimatorCompatHelper” on path: DexPathList」エラーが発生した時の対処法でした。
どなたかの参考になれば幸いです。

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

Kali Linuxの言語を日本語化する方法

ペネトレーションテストツールを多数収録している、セキュリティ系ハッカー御用達(クラッカーではない(←重要))のLinuxディストリビュージョンとして有名なKali Linuxですが、実はWindowsのWSLでも利用可能になっています。

このWSL版Kali Linuxですが、以前ご紹介したWSL版Ubuntuと同様、デフォルトでは言語が英語になっていますが、日本語化を行うこともできます。

ただし、同じDebian系とはいえUbuntuと手順が異なっているので注意です。

Kali Linuxで日本語化を行うには”locales”というパッケージが必要です。

入っていない場合はまずインストールをします。

sudo apt update
sudo apt install locales

locales のインストールが完了したら、下記のコマンドを実行します。

sudo dpkg-reconfigure locales

下記のような画面が出てくるので、ja_JP.UTF-8 UTF-8 を選択します。(スペースキーで選択できます。)

選択したらTABキーを押して<OK>の部分が赤くなったらEnterキーを押します。

次にシステムの標準言語を選択する画面が表示されますので、

こちらでも”ja_JP.UTF-8″を選択し、Tabキー->OKでエンターキーを押します。

これで設定完了です。

あとは一度ターミナルを開きなおし、何かコマンドを実行すると…

日本語に対応しているコマンドであればバッチリ日本語に切り替わっています。

Kali Linuxを日本語で使いたい方はぜひ試してみてください。

Change language of installed Kali

Docker debian系のlocaleを日本語化する – Qiita

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

【Xcode】「Your app supports Multitasking on iPad, so you must include the UILaunchStoryboardName key in your bundle」の対処法

今回は、Xcode で iOS アプリのリリース準備を行っていた際に発生したエラーについてです。
具体的には、Xcode で アプリを Archive し、Organizer から「Distribute App」でアプリを App Store にアップロードしようとした時ですね。

エラーメッセージは「Your app supports Multitasking on iPad, so you must include the UILaunchStoryboardName key in your bundle」というエラーで、翻訳すると「あなたのアプリはiPad上でマルチタスクをサポートしているので、あなたはあなたのバンドルにUILaunchStoryboardNameキーを含める必要があります。」とのこと。

 

ということでサクッと検索したところ、ヒットした記事がこちら。

iPad Multitaskingに対応したメモ – Qiita
https://qiita.com/jollyjoester/items/c8bb1592d01fdef663f9

上記の記事によると、iPad のマルチタスク機能に対応していないことが問題とのことです。

こちらの対処法は 2つあり、マルチタスク機能を無効にする方法とマルチタスクに対応する方法です。
今回のアプリはマルチタスク機能を無効にする方法を選択しました。

作業としては、下の画像のように、Requires full screen にチェックを入れるだけです!

強制フルスクリーンでマルチタスク自体が無効になるため、対応しなくて済む!という感じみたいです。
参考にした記事にもありましたが、こちらは手抜きの方法。
ですが、フルスクリーンで問題がないのであれば、この方法を採用してもいいと思います。

マルチタスク機能に対応する方法は、参考サイトに記載されていますので、そちらをご確認ください。

 

以上、iOS アプリを App Store にアップロードする際に発生した「Your app supports Multitasking on iPad, so you must include the UILaunchStoryboardName key in your bundle」エラーの対処法でした。
ご参考になれば幸いです。

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

【Android】複数のパーミッションをリクエストする方法

毎回書き方を忘れてしまうので、備忘録としてまとめます。
Android のアプリで、複数のパーミッションをリクエストする方法です。

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

Androidのパーミッションリクエスト(複数)- Qiita
https://qiita.com/tcb78/items/fd2e16eb7f1eacd0ba26

 

早速ですがコードは下記のとおりです。
onCreate() 内に下記を記述します。

private final int REQUEST_CODE = 1000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Android 6, API 23以上でパーミッションの確認
    if(Build.VERSION.SDK_INT >= 23) {
        String[] permissions = {
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.ACCESS_COARSE_LOCATION,
                Manifest.permission.ACCESS_FINE_LOCATION
        };
        checkPermission(permissions, REQUEST_CODE);
    }
    // メインの処理を記述
}

なお、今回は位置情報とストレージへのアクセスをリクエストしています。
REQUEST_CODE の定義を忘れないように気を付けてください。私はよく忘れます。

次に、checkPermission() を下記のように定義します。

public void checkPermission(final String[] permissions,final int request_code){
    ActivityCompat.requestPermissions(this, permissions, request_code);
}

上記の処理を実行すると、許可されていないパーミッションのみリクエストされます。

最後に、onRequestPermissionsResult()requestPermissions() のコールバックを受け取ったときの処理を定義します。

@Override
public void onRequestPermissionsResult(int requestCode,
                                       @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {

    if (requestCode == REQUEST_PERMISSION) {
        for (int i = 0; i < permissions.length; i++) {
            if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
         // パーミッションが許可された
               Log.d("Permission", "Added Permission: " + permissions[i]);
            } else {
                // パーミッションが拒否された
                Log.d("Permission", "Rejected Permission: " + permissions[i]);
            }
        }
    }
}

もし必要であれば、パーミッション別にリクエストが許可/拒否されたときの処理を記述することもできます。
状況に応じて追加してください。

追加するコードは以上です。
あとは、設定からパーミッションの許可を無効にするか、アプリをアンインストールしてから再インストールして実行すると、パーミッションリクエストのダイアログが表示されることが確認できると思います。

 

以上、Android アプリで複数のパーミッションをリクエストする方法でした。
困ったときは、是非コピー&ペーストしてご活用ください。

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

【Cordova】写真からExif情報を取得するプラグイン「cordova-exif」

今回は、写真から Exif 情報を取得するためのプラグイン「cordova-exif」について。
以前は JavaScript を使って取得していたのですが、色々修正することになったので併せてこちらも修正しました。

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

GitHub – guilhermefarias/cordova-exif: This plugin, is the simplest way to get exif data of images at Cordova platform (Phonegap)
https://github.com/guilhermefarias/cordova-exif

 

実装方法ですが、まず下記のコードを実行します。

cordova plugin add https://github.com/domax/cordova-exif.git --save

なお、このプラグインを使うには cordova-plugin-cameracordova-plugin-file が必要です。
インストールされてない場合は、自動でこれらのプラグインもインストールされます。

ただし、プラグインのバージョンによっては競合が起こる事もあり、私の環境ではカメラプラグインのバージョンが新しすぎたようでエラーになりました。
そのため、最新のカメラプラグインやファイルプラグインを既にインストール済みの場合は、問題がなければ一度削除してから cordova-exif をインストールすることをおすすめします。

インストールが完了したら、あとは下記のコードで Exif 情報を取得できます。

CordovaExif.readData(imageURI, function(exifObject) {
  console.log(exifObject);
});

取得できるデータ一覧は上の GitHub のページに記載されているので、分からなくなった場合はご確認ください。

なお、カメラプラグインと合わせて使う場合は下記のように書きます。

function onSuccess(imageURI) {
  CordovaExif.readData(imageURI, function(exifObject) {
    console.log(exifObject);
  });
}
function onFail(message) {
  alert('Failed because: ' + message);
}
var options = {
  sourceType: Camera.PictureSourceType.PHOTOLIBRARY,
  quality: 50,
  encodingType: Camera.EncodingType.JPEG,
  destinationType: Camera.DestinationType.FILE_URI
}
navigator.camera.getPicture(onSuccess, onFail, options);

なお、上記のプログラムでは、フォトアルバムから写真を選択するようにしています。

気を付けたい点としては、カメラプラグインのオプションで correctOrientationtrue に設定し、画像を正しい向きに直す処理を追加すると、取得できる Exif 情報が減りました。
私は写真から緯度経度を取得したかったので、上記の理由から correctOrientation を追加するのをやめました…。
なお、写真の向きは取得できたので、そちらで正しい向きに直す処理を追加することはできます。

 

以上、写真から Exif 情報を取得するためのプラグイン「cordova-exif」についてのご紹介でした。
インストール時に若干手間取りましたが、便利なプラグインですので是非ご活用ください。

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

AndroidのGPUレンダリングを有効にすれば描画が快適になる…かも?

Androidで描画の速度が遅い…という方はGPUレンダリングの設定を行うことで改善する場合があるようです。

Androidのスクロールを大きく改善する?「GPUレンダリング」機能をONにしてみよう – TeraDas

まず、システム設定を開きます。

中からシステムをタップすると下のような画面になります。

開発者向けオプションをタップ。

“GPUレンダリングを使用” “HWオーバーレイを無効” の2項目を有効化します。

これで画面の描画に常にGPUが使用されるようになり、画面描画時のCPUの負荷が減ります。

ただし、機種によってはGPUの性能が低かったりするとかえって動作が遅くなってしまったり、CPUで処理させた方が高速だったりするケースもありますし、あまり変わらいケースもあるようです。

ON/OFFそれぞれの状態で動作を確認してみてどちらの方が動作が早くなるか確認しながら設定するといいかもしれません。

ちなみに、開発者オプションは初期状態では表示されていないので、端末情報のビルド番号を複数回タップして表示させる必要があります。

Androidスマホ/タブレットで「開発者向けオプション」をオンにする – @IT

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