The combination of touchscreen and NFC module is quite useful for many situations. For example, you may build a simple signup system or an advanced billing system which is a little more complex.

Here we’ll use Waveshare 3.5″ Touchscreen and ITEAD PN532 NFC Module. Both the prices of the two components are pretty fare and they can basically meet most of our requirements.

The Waveshare touchscreen comes with a DVK512 chip which doesn’t support SPI master-slave architecture. This means we cannot use the PN532 with SPI at the same time. Fortunately, ITEAD PN532 provides various interfaces including SPI, I2C and UART. I’ll show you how to make PN532 over I2C work with Waveshare touchscreen together.

続きを読む

Different from Windows 7, there isn’t an efficient way to manage Network Locations in Windows 8.1.
This problem can sometimes be quite annoying. For example, there may be an increasing number after your network name such as “My Network 2”, “My Network 3″… However you usually won’t use the legacy profiles once again so the storage of the configurations just becomes redundant.

I finally found the solution at Microsoft Technet, it’s quite easy and I’ll just do a memo here.

1. Run Registry Editor. (press Windows button + R, type regedit, click OK)
2. Go to this folder: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles.

The Profiles folder will eventually give you all the network locations (past or recent) that you have used. Each network location is represented by a subfolder.

If you want to set up again the network locations when the network adapter connects to the network, delete all the subfolders of Profiles folder.

If you want to rename the network location, click on the right subfolder and edit the key named ProfileName and input the name you desire for the network location.

Thank Shiva Sharma for sharing.

phpMyAdminがSourceForgeから撤退した以上、今新しいphpMyAdminの更新スクリプトは必要になる。
この前にもごく簡単なスクリプトを利用してアップデートしたけど、今phpMyAdmin自身のサイトはhttp://xxxx/latest/downloadという固定型の更新リンクを対応してないから、今回の新しい方はアップデートチェックやバージョンの比較も対応しなきゃいけない。
さて、閑話休題、早速新しいスクリプトを紹介しよう。

.
├── current
├── latest
└── update_phpmyadmin.sh

初めての利用する前にはcurrentというファイルに今phpMyAdminのバージョンを書き込まなきゃ、じゃないとこのスクリプトは正常にバージョンの比較できなくなる。

user@host:~/scripts/phpmyadmin$ cat current
4.4.11

$PHPMYADMIN_HOMEと$VERSION_CHKこの2つの変数を変更することを忘れずにね

#!/bin/bash
SCRIPT_HOME=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
PHPMYADMIN_HOME="/var/www/phpmyadmin"
TIMESTAMP=`date "+%s%N"`
VERSION_CHK="https://domain.com/phpmyadmin/version_check.php?&_nocache=""$TIMESTAMP"

vercomp () {
    if [[ $1 == $2 ]]
    then
        return 0
    fi
    local IFS=.
    local i ver1=($1) ver2=($2)
    # fill empty fields in ver1 with zeros
    for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))
    do
        ver1[i]=0
    done
    for ((i=0; i<${#ver1[@]}; i++))
    do
        if [[ -z ${ver2[i]} ]]
        then
            # fill empty fields in ver2 with zeros
            ver2[i]=0
        fi
        if ((10#${ver1[i]} > 10#${ver2[i]}))
        then
            return 1
        fi
        if ((10#${ver1[i]} < 10#${ver2[i]}))
        then
            return 2
        fi
    done
    return 0
}

if [[ `whoami` != "root" ]]; then
    echo "Please run as root"
    exit 1
fi

cd $SCRIPT_HOME
curl "$VERSION_CHK" 2>/dev/null | sed -r "s/.*version\":\"([0-9\\.]*)\".*/\\1/" > latest
CURRENT=`cat current`
LATEST=`cat latest`
echo "The current version is: $CURRENT"
echo "The latest  version is: $LATEST"
vercomp $CURRENT $LATEST
case $? in
    0) echo "No updates"; exit 0;;
    1) echo "You are ahead of the latest one?!"; exit 1;;
    2) echo "Updating to $LATEST from $CURRENT, are your sure? [y/n]";;
esac
read CONTINUE
if [[ $CONTINUE != "y" ]]; then
    exit 0
fi

wget --content-disposition "https://files.phpmyadmin.net/phpMyAdmin/$LATEST/phpMyAdmin-$LATEST-all-languages.tar.xz"
TAR_FILE=`find $SCRIPT_HOME -name "phpMyAdmin-*.tar.xz" -print`
if [[ -z $TAR_FILE ]]; then
    echo "Download failed"
else
    echo "$TAR_FILE is successfully download"
    tar Jxvf $TAR_FILE
    TAR_DIRECTORY=`find $SCRIPT_HOME -name "phpMyAdmin-*" -type d -print`
    cp "$PHPMYADMIN_HOME/config.inc.php" "$TAR_DIRECTORY/"
    rm -rf "$PHPMYADMIN_HOME"
    mv "$TAR_DIRECTORY" "$PHPMYADMIN_HOME"
    #do a chown if you need
    #chown user:group "$PHPMYADMIN_HOME" -R
    echo "phpMyAdmin successfully updated"
    rm $TAR_FILE
    echo $LATEST > current
    echo "All done"
fi

前にもMySQLのバックアップスクリプトを紹介することはありましたけど、あれからバックアップのサイズがどんどん増えて、FTPサーバーの容量状態はちょっと厳しくなってしまいました。ですから、今回の新しいスクリプトにはまず、圧縮機能を追加しました

それに、その古いスクリプはwputを利用してファイルをftpで転送したから、とても不安全でした。だからついでに、今度はlftpを利用してftpsで転送します。もちろんどうしても必要なら、ftpでもおkです。スクリプでFTP_PROTOCOLを指定したらいいです
それからもし自分のサインした証明証を使っていますなら、

set ssl:verify-certificate no

を/etc/lftp.conf追加することを忘れないように

更に、今回はバックアップファイルを強制的にアップロードするためのスクリプトを提供しました。

/PATH/TO/BACKUP/MySQL_Backup/script/force_upload.sh N

を実行したら、N日間前のファイルをアップロードできます

続きを読む

元々https://github.com/suin/phpstorm-yaf-docからのdocをいつも使ってたけど、このプロジェクトの最後の更新はとても遠い昔のことですから、ミスがいっぱいあるので、今回ようやく張り切って自分でやり直そうと思ってのに、ちょっとGitHubで「yaf doc」を検索したら、まさかこのdocよりずっと良いyafのPHPDocを見つけっちゃったの

そのリンクは:
https://github.com/elad-yosifon/php-yaf-doc

やっと決意をしたのに、ちょっとあれだよね・・・(この得したくせに損した顔をする奴めワロタ)

自分はVPSでメールサービスを構築したので、便利に使いようのため、Roundcubeでメールのウェブ管理サイトも構築した

けれど昨日は突然アドレス帳で相手の写真をうpできないという問題に気づいた。メールならちゃんとファイルを添付できるのに、実に変な問題だと思ったね。最初はRoundcubeの問題と思ったけど、自分で一つ簡単なPHPスクリプトを実行したら、何と全く同じ問題が出てきた

従って、一応ウェブサーバーのログを見たら、やっぱりこれに関するエラーがあった

PHP message: PHP Warning:  getimagesize(): open_basedir restriction in effect. File(/tmp/php1PACw4) is not within the allowed path(s): (/var/www) in /var/www/test/upload.php on line 5

これで解明した。ちょっと調べたら、一時ディレクトリーをphp.iniのかなのopen_basedirに綴らなきゃいけない。自分も同じ開発環境を使ってるけど、この問題に気づかなかったのはローカルのphp.iniも開発環境用のバージョンだったので、open_basedirはコメントアウトされた

前は気づいてないけど、今週の金曜にプログラミングしてた時、PHPは

$result = $stmt->get_result();

に何のエラーもなく突然止まった。一応try-catchも試したけど、それは何のアウトプットも全然出てこなかった。

というわけで色々調べたら、このget_result()ってmysqliの関数だけど、利用するにはmysqlndというドライバーが必要です。ちょっと興味あるのでもっと調べたら、何とこのmysqlndはPHP 5.4からPHPのおすすめのMySQLドライバーとして、既定のコンパイル選択肢になった。それにlibmysqlclentよりいろんなメリットがあるので、MySQL自身もMySQL Native Driverをお勧めている→https://dev.mysql.com/downloads/connector/php-mysqlnd/

それでどうやってMySQL Native Driverに換えられますか?それはPHPをコンパイルするときに

./configure --with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
[other options]

という引数を使えばいい
Ubuntuならなお簡単になる、

sudo apt-get remove php5-mysql;
sudo apt-get install php5-mysqlnd;

この2つのコマンドで高速的にmysqlndに換えられる。

また、MySQL Native Driverにはプラグインがいっぱいある。

PECL/mysqlnd_mc – 複数接続ができるプラグイン
PECL/mysqlnd_ms – マスタースレーブ構成用のプラグイン
PECL/mysqlnd_qc – クエリキャッシュプラグイン
PECL/mysqlnd_pscache – プリペアドステートメントハンドルをキャッシュするプラグイン
PECL/mysqlnd_sip – SQLインジェクションから防御するためのプラグイン
PECL/mysqlnd_uh – ユーザーハンドラープラグイン

これらは全部役に立ちそうと見えるんでしょうね。いつ時間があればぜひちゃんと勉強します。

昨日はMicrosoftの今年初めての更新リリーズ日なので、昼間にWindows Updateを一回実行したけど、その後問題がいっぱい現れた

例えば、既定プログラムの設定とか、通知領域のアイコンの順番とか、ただリセットされただけではなく、自分のアカウントで設定することまではできなくなってしまった。
でもちょっと試したら、管理者権限付きで設定するのはできる、だからこれは間違いなくユーザー権限に関する問題に決まった。

早速Microsoftのサイトで今回のアップデートに関する資料を調べたら、やっぱその中のKB3021674はユーザープロファイルの権限について色々修復した。詳しいのはこっち:https://support.microsoft.com/kb/3021674/en-us

それでシステム復元でシステムをアップデート寸前にして、KB3021674だけを抜きでもう一度Windows Updateを実行したら、やっぱり今回はすべてが正常だった。それにその後わたしはMicrosoftからKB3021674の独立パッケージをダウンロードしてインストールしたら、思った通りにこれらの問題たちはもう一度現れた。

わたしのシステム自身の問題の可能性もあるが、このアップデートをインストール前に皆さんはぜひ一度バックアップするほうがいいと思う。

I was trying to get a x86_64 build of Code::Blocks for Windows so I compiled Code::Blocks myself.

Code::Blocks:	r10020 from SVN and 13.12-1 from their homepage
Compiler:		MinGW-w64 x86_64-4.9.1-release-posix-seh-rt_v3-rev3
Boost:			1.56
wxWidgets:		3.0.2
FortranProject:	1.2 from svn

Everything except the SpellChecker worked fine. I managed to build both the svn version and the stable version, but neither of them ran properly with the plugin.
The plugin is making C::B crash.

I registered an account of C::B Forums but it seemed that they had problems sending activation email, so I cannot login yet.

Anyway, this is my build. Take it if you need. It will be my great pleasure if it can save your time. And if you know how to solve the problem, please comment here. Thanks!

(RAR5 Archives)
codeblocks svn build r10020 wx302 boost156 x86_64 core.rar
codeblocks svn build r10020 wx302 boost156 x86_64 full without spellchecker.rar

まずはそのバックアップ用のディレクトリーを作ります

mkdir /home/example_user/MySQL_Backup
mkdir /home/example_user/MySQL_Backup/script
vim /home/example_user/MySQL_Backup/script/backup.sh

ここでスクリプトの本体を入力します

#!/bin/bash
BK_PATH="/home/example_user/MySQL_Backup"
DATE="`date +'%m%d%Y-%H%M%S'`"

CONFIG_PATH="$BK_PATH/script"
DB_USER="root"
DB_PASS="mysql_password"
DB_TOBACKUP="to_backup.txt"
LOG="log.txt"
LOGDATE="`date +'%m/%d/%Y-%H:%M:%S'`"
DELETE="delete.txt"
FTP="ftp://ftp_user:ftp_password@ftp_server.domain.tld/MySQL_Backup/"

echo "---------------Backup Starts @ ""$LOGDATE""---------------" >> $CONFIG_PATH/$LOG

echo -----Backup----- >> $CONFIG_PATH/$LOG
cat $CONFIG_PATH/$DB_TOBACKUP | while read LINE
do
        mysqldump --opt --force -u$DB_USER -p$DB_PASS $LINE > "$BK_PATH/""$LINE""_$DATE.sql"
        echo $LINE >> $CONFIG_PATH/$LOG
done

echo -----Delete----- >> $CONFIG_PATH/$LOG
find $BK_PATH -ctime +7 -type f -name "*.sql" -print > $CONFIG_PATH/$DELETE
cat $CONFIG_PATH/$DELETE | while read LINE
do
        wput -nc -t 10 --basename=$BK_PATH/ $LINE $FTP
        rm $LINE
        echo $LINE >> $CONFIG_PATH/$LOG
done

echo "---------------Backup Ends   @ ""$LOGDATE""---------------" >> $CONFIG_PATH/$LOG

自分でデータベースやFTPサーバーなどの情報を編集することを忘れないように

続きを読む