個人的なまとめ。

てきとーに何か書きます。

Ubuntu14.04LTSでRuby on Rails

色々なサイトを見ながらインストールを試してみたが全然上手く行かなかった。
(基本的に情報が古めだった。)

という事で、下を参考にすれば恐らくちゃんと動くと思う。

  • 1. rbenvをgitからインストール
  • 2. Rubyをインストール
  • 3. railsをインストールする。
続きを読む

シェルを使ってifconfigの「eth0」の部分だけを取得

プログラム内でネットワークデバイス(インターフェース)名を使用したい.

Ubuntu 14.04 LTSまでは有線はeth0を指定してあげれば良かったが,Ubuntu 15.10からは名前がenp2s0のような名前に変更されるので,シェルでその部分だけを取得しようと思う.

ifconfig | awk '{print $1}' | awk NR==1

だけで良い.
ifconfigで出力されたものを,awkで1列目だけを表示.その後awkで1行目を指定すれば出来る.

ただ,VM環境などのせいで有線の前にvmnetとかが入っている場合は,grep -vとかで弾けばいいんじゃないかと思う.

CentOSでifconfigを行うと,

enp2s0: 

という感じに,最後にコロンが付いてしまうので,これもシェルで取ってしまう.

ifconfig | awk '{print $1}' | awk NR==1 | sed -e "s/:/\ /g"

基本的にはUbuntuでもこのコマンドを使用してやれば,エラーは吐かれないので,Ubuntu,Cent問わずシェルを実行する事ができる.

hetemlでPHP7.1とMySQL5.6の連携

ヘテムルの公式サイトに上がっている方法では,PHPMySQLの連携が出来なかった.
heteml.jp

公式サイトの方法では,PHPのバージョンが4または5の時のみ有効で,PHP7の場合では別の方法を使用する必要があります.

というか,mysql_connect(PHP: mysql_connect - Manual)自体があまり推奨じゃなくなってきているので,PHP5以上の場合は下記の方法に変更した方が無難です.

続きを読む

PHPで配列を連想配列に入れる

例えば、下記のような要素を持つ配列があるとする。

$name[5] = {"Taro", "Jiro", "Saburo", "Shiro", "Goro"};
$hegith[5] = {"150", "170","180", "140", "175"};

この配列を連想配列に使用したい場合は、

for($i = 0; $i < count($name); $i++){
  $person[$i] = array(
                "name" => "{$name[$i]}",
                "height" => "{$height[$i]}"
                 );
}

という感じに書けば良い。

[追記] ファイル更新監視用ライブラリについてのメモ

ファイル変更監視用のライブラリについてのメモ

watchdog(watchmedo)は,ローカルのファイルの変更を検知するには十分
しかし,NFSへの対応はしていないような気がする.
ただ,これはログが非常に見やすいので,わかりやすい.

表示例:

kosuke@~/Desktop : watchmedo log --recursive --patterns "*.txt;*.png" ./
on_created(self=<watchdog.tricks.LoggerTrick object at 0x7f424aaea208>, event=<FileCreatedEvent: src_path='./test.txt'>)
on_modified(self=<watchdog.tricks.LoggerTrick object at 0x7f424aaea208>, event=<FileModifiedEvent: src_path='./test.txt'>)


pyinotifyは,ファイルの変更だけではなく,ターミナル上でcd /Desktopとかした時のコマンドでさえも検知してくれる.
しかし,1つのファイルを作成した場合だと,それだけで30行ぐらいのログが出てくるのが難点.
ログに関しても,今回作成したファイルだけではなく,既にそのディレクトリにあるファイルまでも表示をしているようで,非常に見づらい.
また,これもNFSに対応していない.
表示例:

kosuke@~/Desktop : python3 -m pyinotify -v ~/Desktop/
[2017-12-27 02:39:12,829 pyinotify DEBUG] Event queue size: 128
[2017-12-27 02:39:12,829 pyinotify DEBUG] <_RawEvent cookie=0 mask=0x100 name=test.txt wd=1 >
[2017-12-27 02:39:12,830 pyinotify DEBUG] <_RawEvent cookie=0 mask=0x20 name=test.txt wd=1 >
[2017-12-27 02:39:12,830 pyinotify DEBUG] <_RawEvent cookie=0 mask=0x4 name=test.txt wd=1 >
[2017-12-27 02:39:12,830 pyinotify DEBUG] <_RawEvent cookie=0 mask=0x8 name=test.txt wd=1 >
<Event dir=False mask=0x100 maskname=IN_CREATE name=test.txt path=/home/kosuke/Desktop pathname=/home/kosuke/Desktop/test.txt wd=1 >
<Event dir=False mask=0x20 maskname=IN_OPEN name=test.txt path=/home/kosuke/Desktop pathname=/home/kosuke/Desktop/test.txt wd=1 >
<Event dir=False mask=0x4 maskname=IN_ATTRIB name=test.txt path=/home/kosuke/Desktop pathname=/home/kosuke/Desktop/test.txt wd=1 >
<Event dir=False mask=0x8 maskname=IN_CLOSE_WRITE name=test.txt path=/home/kosuke/Desktop pathname=/home/kosuke/Desktop/test.txt wd=1 >


MacFSEventsの場合は,gitを見ると,build failingとなっていたので試していない.


他に,ファイル更新監視用ライブラリがあれば試して追加する.


 ----追記--- 2018/02/19 ----
PythonNFSのファイル変更を検知するには,

import os
import time

PATH = '/mnt/nfs/AAA'

while True:
    if os.path.exists(PATH):
        break
    time.sleep(5)

と,してやればいいです.

/mnt/nfs内にAAAというファイルが作成されるまで,5秒ごとにファイルのチェックを行っています.
もし,ファイルが検知されたらbreakする,という流れです.