カテゴリー: 未分類

package.jsonにあるversionを取得したい

コード中に自身のpackage.jsonにある値を取得するには、フィールド名の頭にnpm_package_をつけるて、process.envから参照できる。

バージョン番号(version)を取得したい場合:

console.log(process.env.npm_package_version);

パッケージで使う場合は、process.envは、読み込み元のpackage.jsonの値が使われるため、requireを使って直接package.jsonを読み込む。

p = require('package.json');
console.log(p.version);
広告

Ubuntu 16.04でAndroid実機を接続

Ubuntu 16.04上でAndroidアプリ開発を行う中で、実機での動作を確認しようと思い、USBデバッグを有効にしたHuawei P8 liteをUSBで接続し、adb devicesを実行したところ、以下のようなレスポンスになった。

$ adb devices
List of devices attached
ARCxxxxxxxxxxxxx    no permissions (user in plugdev group; are your udev rules wrong?); see [http://developer.android.com/tools/device.html]

ハードウェア端末上でアプリを実行するを参照すると、udevにルールファイルを追加して、開発で使用する各種端末のUSB設定を追加する必要があるとのこと。

追加するルールは、udev – Android adb no permission – Ask Ubuntuの中にあったandroid-udev-rulesを使用してみた。

  1. udevルールの追加
    ~$ mkdir work
    ~$ cd work/
    ~/work$ git clone https://github.com/M0Rf30/android-udev-rules.git
    Cloning into 'android-udev-rules'...
    remote: Counting objects: 833, done.
    remote: Compressing objects: 100% (8/8), done.
    remote: Total 833 (delta 2), reused 1 (delta 0), pack-reused 825
    Receiving objects: 100% (833/833), 202.48 KiB | 285.00 KiB/s, done.
    Resolving deltas: 100% (324/324), done.
    Checking connectivity... done.
    ~/work$ cd android-udev-rules
    ~/work/android-udev-rules$ sudo cp -v 51-android.rules /etc/udev/rules.d/51-android.rules
    '51-android.rules' -> '/etc/udev/rules.d/51-android.rules'
    ~/work/android-udev-rules$ sudo chmod a+r /etc/udev/rules.d/51-android.rules
    
  2. グループの追加
    <br />~/work/android-udev-rules$ sudo groupadd adbusers
    ~/work/android-udev-rules$ sudo usermod -a -G adbusers $(whoami)
    

    ※今回は、android-udev-rulesの手順通り行ったが、ユーザーはplugdevグループに属しているので、51-android.rules中のGROUP="adbusers"GROUP="plugdev"に変更すれば、グループの追加は不要。

  3. udev再起動

    ~/work/android-udev-rules$ sudo udevadm control --reload-rules
    ~/work/android-udev-rules$ sudo service udev restart
    
  4. 実機接続

    USBで接続しているAndroid端末を一度外し、再度接続。Android Debug Bridge(adb)を再起動する。

    ~/work/android-udev-rules$ adb kill-server
    ~/work/android-udev-rules$ adb devices
    List of devices attached
    ARCxxxxxxxxxxxxx    device
    

PHPアプリケーションをHerokuにデプロイするときに”ERROR: Couldn’t parse ‘composer.lock’; it must be a valid lock”エラー

PHPアプリケーションをHerokuにデプロイしようと思い、

git push heroku master

としたところ

-----> PHP app detected
-----> Bootstrapping...
-----> Installing platform packages...
 ! ERROR: Couldn't parse 'composer.lock'; it must be a valid lock
  file generated by Composer. Run 'composer update', add/commit
  the change, then push again.
 ! Push rejected, failed to compile PHP app.
 ! Push failed

となりデプロイが失敗。

composer.lockは存在しており、指示通りcomposer updateをしてcomposer.jsoncomposer.lockを更新したうえでデプロイしても同じエラーが発生しました。

php – Heroku ERROR: Failed parsing composer.lock; it must be non-empty and valid JSON – Stack Overflow

より

composer self-updateでcomposer自体を更新し、composer updateしたうえで、デプロイすることでエラーが出なくなりデプロイできました。

phpMyAdminでDATETIME型が「BLOB」と表示される

  • PHP5.6
  • Apache 2.2
  • MySQL 5.6

をソースからビルドし

  • phpMyAdmin4.6.4

を設置・設定したうえで、DATETIME型を含むテーブルを作りデータを投入後、phpMyAdminから内容を確認すると、

DATETIME型がBlog表示

と表示されてしまいました。

MySQLコマンドでのSELECTやMySQL Workbenchを使って確認したところ、日付として表示されており問題がない状況。

調べたところ、

php – phpMyAdmin: Date Fields Display as BLOB – Stack Overflow

が見つかり、phpinfo()でPHPのMySQLモジュールに何が使われているのか確認したところ、mysqlモジュールが使われていました。
そこで、mysqliモジュールを使うようにビルドしなおしたところ、

DATETIME型が正常に表示

と正常に表示されるようになりました。

curl経由で実行するシェルスクリプトで標準入力を使いたい

症状

.gitconfigはGitで管理しておいて、git config user.name/user.emailは管理したくない | misty-magic.h
にある

GIT_CONFIG_LOCAL=~/.gitconfig.local
if [ ! -e $GIT_CONFIG_LOCAL ]; then
  echo -n "git config user.email?> "
  read GIT_AUTHOR_EMAIL

  echo -n "git config user.name?> "
  read GIT_AUTHOR_NAME

  cat < $GIT_CONFIG_LOCAL
[user]
  name = $GIT_AUTHOR_NAME
  email = $GIT_AUTHOR_EMAIL
EOF
fi

を含んだコードをgithubに保存し、

以下のような、よくあるcurlを使った呼び出し方

curl https://raw.githubusercontent.com/mistymagich/dotfiles/master/install.sh | bash

をすると、標準入力部分で入力待ちにならず、そのままエラー終了(終了コードが1)してしまう。

解決

linux – Execute bash script from URL – Stack Overflow

より、呼び出し方を変える

bash <(curl -s https://raw.githubusercontent.com/mistymagich/dotfiles/master/install.sh)

※"<"と"("を離すとbashの構文エラーになるので注意

.gitconfigはGitで管理しておいて、git config user.name/user.emailは管理したくない

Gitを使う上で、git config user.name/user.emailの設定は必要。そして.gitconfigなどのdotfilesをgithubで管理したいけど、git config user.name/user.emailはそこに記載したくない。
ということで、gitconfigのincludeを使って別ファイルにしました。

Gitで管理する.gitconfigには

[include]
  path = ~/.gitconfig.local

としておいて、dotfileの展開スクリプト内で

GIT_CONFIG_LOCAL=~/.gitconfig.local
if [ ! -e $GIT_CONFIG_LOCAL ]; then
  echo -n "git config user.email?> "
  read GIT_AUTHOR_EMAIL

  echo -n "git config user.name?> "
  read GIT_AUTHOR_NAME

  cat < $GIT_CONFIG_LOCAL
[user]
  name = $GIT_AUTHOR_NAME
  email = $GIT_AUTHOR_EMAIL
EOF
fi

とすることで、展開スクリプト実行中にプロンプトを出して、user.name/user.emailを入力させました。

実際のdotfileの展開スクリプト

参考

PyQtで仮想デスクトップ全体にわたるウィンドウを作成

マルチディスプレイでデスクトップを表示している状態で、PyQtでそれらを覆うウィンドウを作成する

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QDesktopWidget

if __name__ == '__main__':
    app = QApplication(sys.argv)

    w = QWidget()

    desktopWidget = QDesktopWidget()
    w.move(desktopWidget.x(), desktopWidget.y())
    w.resize(desktopWidget.width(), desktopWidget.height())

    w.show()

    sys.exit(app.exec_())

参考