読者です 読者をやめる 読者になる 読者になる

helmとmcompleteは干渉する

いい加減anythingからhelmに完全移行するかと思い立ち, helmをinstall. 設定を施した処でM-xをすると正しく動いてくれなくてなんだろうと設定を見直していて発覚した.

mcompleteさん, 今迄お世話になりました.

Qtを利用して作成したexeを再頒布可能にする

Qtを利用して作成したappを再頒布可能にする - とあるぼっちの生存報告Windows向けのお話.

windeployqtを利用する.

windeployqt.exe [exeのあるディレクトリパス]

上記を実行する事で必要なdllなどが該当ディレクトリに用意される.

QtCreator上のビルド設定にカスタムビルドを追加して, コマンドをwindeployqt.exeに, 引数を${builddir}/releaseとすれば良いが, releaseディレクトリはデフォルトだと.oファイルなど不要な物があるので.pro内で生成物を別ディレクトリに置くようにするか, .exeだけXCOPY等で別ディレクトリにコピーしてからそのディレクトリを指定するようにするのが良い。

Qtを利用して作成したappを再頒布可能にする

よく忘れるので.

QtのSDKのインストールディレクトリのbin内にあるmacdeployqtを利用すると良い.

> /path/to/you/QtSDK/bin/macdeployqt /path/to/you/Target.app

とすればTarget.appを他の人の環境に持っていっても動作要件を満たしていれば動く.

> /path/to/you/QtSDK/bin/macdeployqt /path/to/you/Target.app -dmg

とオプションを付けるとTarget.dmgが生成される.

perforceのsubmmitをhookして通知させる

エンジニアの皆様におかれましてはgit最高という世界なのかもしれませんが, UE4やUnityなどを扱っていると, 正直gitはしんどいなぁというのがありまして, AlienBrain使いたいなぁと指を加えながらperforceを利用しているわけです.

さて, 個人で開発しているとあまり必要でもないのですが, ある程度の人数で開発しようとすると, 誰かのsubmmitを通知してくれるような何かが欲しくなると思います. perforceではトリガーテーブルを適切に設定する事でsubmmit時に通知を飛ばせるようになります.

p4 describe

まずは通知の内容を取得できるようにします.

perforceのコマンド, p4 describe を利用すると, あるchangelistの詳細を取得できます.

>p4 describe -s 1 ## オプション-sにchangelistの番号を渡すとそのchangelistの詳細が取得できる
Change 1 by [user]@[workspace] on 2015/01/01 00:00:00

submmit時に記載したコメント

Affected files ...

... //depot/... ## 変更のあったファイルのリスト

これで通知する情報を取得できるようになりました.

p4 triggers

perforceでsubmmit時になにかを通知する場合, p4 triggersというコマンドでトリガーを設定します. ただしこのコマンドはperforceのsuper userでないと実行できません. このコマンドを叩くとトリガーを設定するためのファイルが開かれます. ここでトリガーテーブルと呼ばれるトリガー情報を設定します. トリガーテーブルの項目は, そのトリガーの名称, トリガータイプ, トリガーの対象となるディポ内のパス, 実行コマンドの4つです.

例えば, idobataのroomへsubmmit結果を通知するスクリプト(submmit2idobata.sh)を作成し, それを実行するようにする場合,

#!/bin/sh

curl --data-urlencode "source=`p4 describe $1`" https://idobata.io/hook/custom/[token]

上記のようなスクリプトをsubmmit2idobata.shとして保存し,

>p4 triggers

を実行. トリガーテーブルに以下のように記載して保存します.

Triggers:
    idobatahook change-commit //depot/... "submmit2idobata.sh %change%" 

これで, 誰かがp4にsubmmitする度にidobataのroomにsubmmitの内容が通知されるようになりました.

その他

p4の各コマンドの詳細はp4のマニュアルを参照してください.

オーディオプラグの抜き差しの検知

iOSでヘッドフォン(ヘッドセットではない)が接続されているか否かを判断する方法.

ルーティング変更を検知すると通知が来るようにNSNotificationCenterに登録する. また終了時にNSNotificationCenterからselectorを削除する事を忘れてはいけない. registerはアプリ起動時に, unregisterはアプリ終了時に呼び出すようにするのが良いだろう.

-(void)registerNotifications
{
  [[NSNotificationCenter defaultCenter] addObserver: self
                                           selector: @selector(routeChangeNotification:)
                                               name: AVAudioSessionRouteChangeNotification
                                             object: [AVAudioSession sharedInstance]];
}

-(void)unregisterNotifications
{
  [[NSNotificationCenter defaultCenter] removeObserver: self
                                                  name: AVAudioSessionRouteChangeNotification
                                                object: [AVAudioSession sharedInstance]];
}

selectorとして登録したメソッド内ではルーティング分ループで回し有線とBluetooth接続のヘッドフォンポートがあるか否かを調べる. iOSは有線とBluetooth接続が同時に発生する可能性があるためフラグ管理する時は注意が必要. また, この通知は起動時には呼ばれないので, 起動時にも呼べるようにしておく必要がある.

-(void)routeChangeNotification:(NSNotification*)note
{
  AVAudioSessionRouteDescription* route = [[AVAudioSession sharedInstance] currentRoute];
  for (AVAudioSessionPortDescription* desc in [route outputs])
    {
      if ([[desc portType] isEqualToString:AVAudioSessionPortHeadphones])
        {
          // 有線接続されている
        }
      else if ([[desc portType] isEqualToString:AVAudioSessionPortBluetoothA2DP])
        {
          // A2DPでBluetooth接続されている
        }
    }
}

perforceをubuntu serverにinstall

思う処あってubuntu serverにperforceをinstallして暫く運用してみようと思ったのでメモ。

PerforceのサイトからServer用のp4dとp4をdownload(Ubuntu Server 14.04.1 LTSは64bit onlyなので64bit版の物を選択)する。

downloadしたp4d, p4をサーバへアップロード(scpなりなんなり使って)。ホームディレクトリにコピーしたとして、これを$PATHの通ったパスへ移動させ実行権限をつける。

$ sudo mv ~/p4 /usr/local/bin/
$ sudo mv ~/p4d /usr/local/bin/
$ chmod +x /usr/local/bin/p4 /usr/local/bin/p4d

そしてperforce用にユーザとグループを作成。

$ adduser perforce
$ addgroup p4admin

ちなみに、 apt-getでもperforceをinstallできる。

$ wget http://package.perforce.com/perforce.pubkey
$ sudo apt-key add perforce.pubkey
$ sudo touch /etc/apt/sources.list.d/perforce.sources.list

/etc/apt/sources.list.d/perforce.sources.list に以下の一行を追加

deb http://package.perforce.com/apt/ubuntu precise release
$ sudo apt-get update
$ sudo apt-get install perforce-server

ここまでで、user perforce, group perforceが設定されている.

設定

$ sudo visudo

perforce   ALL=(ALL:ALL) ALL

とし、perforceユーザをリストに追加する。

sshd_configにperforceユーザをAllowUsersに加える。

$ sudo mkdir /var/log/perforce
$ sudo mkdir /perforce_depot
# apt-getからinstallした場合 perforceグループが作られるのでそちらを使った方が良いかも
$ sudo chown perforce:p4admin /var/log/perforce
$ sudo chown perforce:p4admin /perforce_depot

/etc/profile に以下の設定を追記

export P4JOURNAL=/var/log/perforce/journal
export P4LOG=/var/log/perforce/p4err
export P4PORT=localhost:1666
export P4ROOT=/perforce_depot
export P4USER=perforce

追記したら読み込みなおす。

$ source /etc/profile

そして

$ sudo p4d -d -p $P4PORT -r $P4ROOT

でperforce serverが起動する.

このままだと全ユーザが自由にperforceへアクセスできるので、

$ sudo p4 protect

でユーザ権限の設定を行う。

参考

追記

apt-getでinstallした場合はもっと楽だった。

$ sudo /opt/perforce/sbin/configure-perforce-server.sh servername -p 1666 -r /p4/p4-main -u perforce --unicode

とすると、

Server servername not found. Creating...

Please provide the following details about your desired Perforce environment:

Perforce Server root (P4ROOT) [/p4/p4-main]: 
Create directory? (Y/n) [Y]: 
Perforce Server address (P4PORT) [1666]: 
Perforce super-user login [perforce]: 
Perforce super-user password: 
Perforce db files in '/p4/p4-main' will be created if missing...
Server switched to Unicode mode.
Started servername p4d.
Started 1 servers.
Creating super-user account...
User perforce not changed.
Initializing protections table...
Protections saved.
Setting security level to 3 (high)...
Counter security set.
Setting password...
Enter new password: 
Re-enter new password: 
Password updated.

Your Perforce server is now configured. You can connect to it using

  p4 -p 1666 <cmd>

For help, run:

  p4 -p 1666 help

という感じにintractiveに設定できる。 --unicodeを付けるとunicodeモードとしてperforce serverが動く。

usageは以下。

Synopsis:
#
#    configure-perforce-server.sh <name> [options]
#
#    Where options are:
#
#    -p <P4PORT>            - Set Perforce Server's address
#    -r <P4ROOT>            - Set Perforce Server's root directory
#    -u <username>          - Perforce super-user login name
#    -P <password>          - Perforce super-user password
#    --unicode              - Enable unicode mode on server
#
#    Password is only needed on initial configuration when the super-user
#    account is created. If reconfiguring an existing Perforce Server, the
#    super-user name and password are left alone.
#
#    Unicode mode is disabled by default. Specify --unicode if you 
#    want it. This will change in a future release

追記の追記

ちなみに、apt-getでinstallした場合、perforceユーザのpasswordが設定されていないため、p4 protectが実行できない。そのため、まずはperforceユーザにpasswordを設定する必要がある。その後、p4 protectをperforceユーザとして実行する事で、ユーザのアクセス制御などができるようになる。

Virtual Boxに入れたubuntu serverにホストOSからssh経由でアクセスする

毎回忘れるのでいい加減メモ

ネットワークの設定

VirtualBox側の環境設定でホストオンリーネットワークにアダプタを追加(されているなら不要)し、対象のVM環境の設定にあるネットワークのアダプター2をホストオンリーアダプタとして有効化。名前を追加したアダプタの名前にする。なお、この作業は対象のVM環境の電源をOFFにしておかないとできない。

ubuntu serverを起動したら、/etc/network/interfacesの末尾に以下を追加する。

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

これでホスト側からゲストのubuntu serverへアクセスできるようになる。なお、ここのaddressとnetmaskはホストオンリーアダプタのDHCPサーバ設定に依存する。

sshの設定

$HOMEに.sshディレクトリ、及びauthorized_keysファイルがない場合は

$ mkdir ~/.ssh
$ chmod 0700 ~/.ssh
$ touch ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

しておき、公開鍵をauthorized_keysに記入する。

# この例はホストOS側でログインしているuserの公開鍵をscpを利用してゲストOS側のuserのホームディレクトリへコピーしている
$ scp ~/.ssh/id_rsa.pub user@192.168.56.101:
# 上記でコピーされた公開鍵をauthorized_keysに記入する
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

/etc/ssh/sshd_configの設定を以下のように変更する。

  • PermitRootLogin をnoへ
  • PasswordAuthentication をnoへ
  • AuthorizedKeysFile の項目の先頭にある#を削除

設定が終わったら

$ sudo /etc/init.d/ssh restart

これでホストOSからゲストOSへssh経由でアクセスできる。

参考

Virtualboxで仮想サーバー構築(ubuntu server 12.04 + SSH) - Qiita