2014年4月29日火曜日

MySQLのDATETIMEをPHPのtimestampに変換する。

MySQLから取得したDATETIMEは、"YYYY-MM-DD HH:MM:SS"という形式の文字列なので、strtotime()を使ってUnixタイムスタンプに変換する。
echo date('Y-m-s', strtotime($datetime));

PHPとMySQLで文字化ける。

ローカル開発環境でPHPからMySQLのデータを取り出して表示させたら、日本語が文字化けしていた。
よくある事ですね。
やれやれ、文字コードの設定をせねばならぬ。

後々、さくらのレンタルサーバーにアップするつもりなので、そちらの文字コードに合わせようかと思う。

さくらのレンタルサーバーの仕様
http://support.sakura.ad.jp/manual/rs/tech_server.html

これによるとPHPもMySQLもEUC-JP(ujis)がデフォルトのようです。
よし、じゃあやるか。まずはMySQLから。

my.cnfの置き場所を調べる。
$ /usr/local/mysql/bin/mysql --help
helpの中ほどくらいに、下記の記述が見つかる。
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 
つまりこの4つのどこかにあればいいらしい。上から順に読み込まれるみたい。
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
~/.my.cnf
今回は/etc/my.cnfに置く事にした。
/etc/my.cnfが存在しなかったので、下記の場所からコピーして編集。
$ sudo cp /usr/local/mysql/my.cnf /etc/
$ sudo vi /etc/my.cnf
[mysqld]の下に追加。
# MySQLサーバーの文字コードをEUC-JP(ujis)に設定
character-set-server = ujis
# クライアント側の文字コードが設定されていない場合はサーバー側の文字コードを使用
skip-character-set-client-handshake
MySQLを再起動。
設定が反映されているか調べる
$ /usr/local/mysql/bin/mysql -u root -p
mysql> show variables like 'char%';
結果
character_set_system以外はujisになっていますね!
character_set_systemはutf8のままでいいらしい。

次はPHPの文字コードを設定する。
こちらはMySQL接続後に下記のコードを入れるだけ。
mysqli_set_charset($db, "ujis");
あとはデータベースのテーブルを作り直したりするなりPHPのソースコードをEUC-JPで保存するなりなんなり。
 私はこれで止めました。(文字化けを)

2014年4月27日日曜日

JenkinsでFTPサーバーにデプロイする。

Publish Over FTP Pluginを入れる。


Jenkinsを再起動するとプラグインが有効になる。

[Jenkinsの管理]→[システム設定]に[Publish over FTP]の項目が追加されている。
[追加]ボタンを押して、FTPサーバーの設定を入力する。



ジョブの設定から、[ビルド手順の追加]に[Send files over FTP]が追加されているので選択。


必要な設定を記入したらOK.
ちなみにワークスペースをベースディレクトリとしているので、ディレクトリの設定はそこで行う。
[プロジェクトの高度なオプション]→[カスタムワークスペースを使用]で設定出来る。

僕のMacにphpMyAdminを導入する。

phpMyAdminのサイトからダウンロードする。
http://www.phpmyadmin.net/home_page/index.php


phpMyAdmin-4.1.14-all-languages.zipを解凍。
出来たフォルダを好きなところに置く。
あとはApacheの設定でそこにアクセス出来るようにすればインストール完了。
(参照:Web開発用にApacheの設定を変更する。

ブラウザからphpMyAdminのindex.phpにアクセスする。
以下のようなログイン画面が見えていればOK.


次にphpMyAdminの設定を行う。
phpMyAdminのフォルダにconfig.sample.inc.phpがあるので、それをコピーしてconfig.inc.phpに名前を変更する。


config.inc.phpをエディタで開いて編集する。
今回編集したのは以下の項目。
// ホスト名を一応バーチャルホストのに変えた
$cfg['Servers'][$i]['host'] = 'phpmyadmin.localhost';
// ローカルなので、パスワード入力無し
$cfg['Servers'][$i]['AllowNoPassword'] = true;
これでよし。
設定したあとはApacheを再起動させる。
そしてサイドphpMyAdminのindex.phpにアクセスし、"root"でログインする。
これでもう使えるようになるよ!

2014年4月26日土曜日

"icons"の罠。

ローカルでWeb開発をしていたらですね、"icons"ディレクトリを作ってそこにアクセスしようとしたら、違う場所をアクセスするんですよ。
なんでかなーと思って調べてみました。

結論から言えば、同名のディレクトリが存在していたからでした。

/etc/apache2/httpd.confを見ると、ルートディレクトリは"/usr"を指している。
ServerRoot "/usr"
/usr以下のディレクトリを調べてみる。
$ ls /usr
$ ls /usr/share
$ ls /usr/share/httpd
icons
"icons"ディレクトリあるやん!めっちゃあるやん!

こちらとしては、/etc/apache2/extra/httpd-vhosts.confで設定したルートディレクトリを使ってほしかったのだけど。
httpd.confのルートディレクトリの設定が生きたままだったのかー。
ディレクトリ名が衝突してしまったみたいですね。

とりあえず手っ取り早く解決したかったので、"icons"と名付けたディレクトリを別名に変えました。

PHPでディレクトリ内のファイル一覧を取得する。

PHP5.3.0以降ならSPL(Standard PHP Library)ってのが使えるらしい。
というわけで、この方法でファイル一覧を取得出来る。
$dir = 'directory';
$itr = new RecursiveDirectoryIterator($dir);
$itr = new RecursiveIteratorIterator($itr);
foreach($itr as $fileinfo) {
    // 詳しくはSplFileInfoオブジェクトを参照
    if($fileinfo->isFile()) {
        $name = $fileinfo->getPathname();
         ...
    }
}

Web開発用にApacheの設定を変更する。

Apacheの設定を変更する。
$ sudo vi /etc/apache2/httpd.conf
バーチャルホストの設定を読み込むようにする。
# Virtual hosts
- #Include /private/etc/apache2/extra/httpd-vhosts.conf
+ Include /private/etc/apache2/extra/httpd-vhosts.conf

次にバーチャルホストの設定を行う。
$ sudo vi /etc/apache2/extra/httpd-vhosts.conf
下記の設定を追加する。
DocumentRootやServerNameは自由に設定してください。
<VirtualHost *:80>
    DocumentRoot "/Users/username/sandbox"
    ServerName sandbox.localhost
    ErrorLog "/private/var/log/apache2/sandbox.localhost-error_log"
    CustomLog "/private/var/log/apache2/sandbox.localhost-access_log" common
    DirectoryIndex index.php index.html
    <Directory "/Users/username/sandbox">
        Options Includes ExecCGI FollowSymLinks
        AllowOverride All
        Order deny,allow
        Allow from All
    </Directory>
</VirtualHost>

ドメイン名を/etc/hostsに追加する。
$ sudo vi /etc/hosts
"127.0.0.1 sandbox.localhost"を追記する。
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1    localhost
255.255.255.255 broadcasthost
::1                 localhost
fe80::1%lo0 localhost

127.0.0.1    sandbox.localhost

フォルダを作成して、パーミッションを変更する。
$ chmod +x ~/sandbox

Apacheを再起動する。
$sudo apachectl restart
アクセスに失敗する場合、error_logを見ると原因が分かる。
" (13)Permission denied: access to * denied"が出る場合は作成したフォルダの大本のパーミッションが原因だったりするので、大本の方にも"chmod +x"をすれば解決する。
また、"httpd-vhosts.conf"に"~/"は指定出来ないので、ちゃんと"/Users/username/"を指定する必要がある。

僕のMacにJenkinsを導入する。

そろそろJenkinsとやらに真面目に向き合ってみようじゃないか。
きっと友達になれるはず。

ではまずJenkinsをダウンロードしてくる。
http://jenkins-ci.org/



ダウンロードしたjenkins.warを好きなところに置く。
そしてターミナルから下記を実行する。
※[jenkins-home]はjenkins.warを置いた場所のパス。
$ java -jar [jenkins-home]/jenkins.war
ブラウザから下記にアクセスする。
http://localhost:8080/

導入完了。
簡単!
気安いヤツだ。

では早速ジョブを作ってみる。
ジョブ名を記入して[フリースタイル・プロジェクトビルド]を選択して[OK]を押す。

とりあえず雑多な設定はすっ飛ばして[ビルド手順の追加]→[シェルの実行]を選択。
シェルスクリプト入力欄に以下を入力して[保存]

echo "Hello, Jenkins!"

その後は左側のメニューから[ビルド実行]を選ぶと先ほど書いたスクリプトが実行される。
実行されたあとは、左側のメニューの[ビルド履歴]に履歴が追加されるので、
選んで[コンソール出力]を見ると…!

さて、毎回ターミナルから起動するのはめんどくさいので、Macの起動時に自動で起動するようにする。

以下のように、jenkins.plistを作成する。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
	<dict>
		<key>Label</key>
		<string>jenkins</string>
		<key>ProgramArguments</key>
		<array>
			<string>/usr/bin/java</string>
			<string>-jar</string>
			<string>~/Jenkins/jenkins.war</string>
		</array>
	</dict>
</plist>
そして以下の場所にjenkins.plistを置く。
$ mv jenkins.plist ~/Library/LaunchAgents/
launchctlにjenkins.plistを読み込ませて、起動させる。
これで次回からは自動起動だ!
$ launchctl load ~/Library/LaunchAgents/jenkins.plist
$ launchctl start jenkins

僕のMacにMySQLを入れる。

Mac OSX 10.9.x(Mavericks)には標準でMySQLが入っていないらしい。
ということは自分でインストールしないといけないって事か。
では早速インストールだ!

ここからMySQL Community Serverをダウンロードする。
http://dev.mysql.com/downloads/mysql/

現在(2014/4/26)は5.6.17が最新。
Mac OSX 10.9用のは無いみたいなので、10.7用のをダウンロード。


リンク先でサインアップを促されるけど、めんどくさいのでNo thanks.


これでmysql-5.6.17-osx10.7-x86_64.dmgがダウロード出来たので、あとは普通にインストール。



mysql-5.6.17-osx10.7-x86_64.pkgなどは、"開けません!"とOSからお叱りが来るかもしれないが、右クリックで開けばいけるいける。

mysql-5.6.17-osx10.7-x86_64.pkg, MySQL.prefPane, MySQLStartupItem.pkgをインストールしたら準備完了。

システム環境設定からMySQLを選んで、


"Start MySQL Server"を押してMySQL Serverを起動。
ちなみにMySQLStartupItem.pkgをインストールすると次回からMac起動時に自動でMySQLを起動してくれるらしい。


"Running"になったのを確認してから、ターミナルで以下のコマンドを入力。
$ /usr/local/mysql/bin/mysql --version
バージョン情報が表示されればインストール完了!
これでPHPと合わせてWebアプリケーションを作ったりしたらいいよ。

2014年4月24日木曜日

僕のMacでPHP開発環境を整える。

Mac OSX 10.9.x(Mavericks)には標準でApacheとPHPが入ってるらしい。
ということは、少しの設定でローカルのPHP開発環境が整うという事か。
では早速設定だ!

Apacheの設定ファイルをいじる。
$sudo vi /etc/apache2/httpd.conf

php5のモジュールがコメントアウトされているので、これを有効にする
- #LoadModule php5_module libexec/apache2/libphp5.so
+ LoadModule php5_module libexec/apache2/libphp5.so

Apacheを再起動
$sudo apachectl restart

http://localhost/ にアクセスしてみる。
"It works!"と表示されたらApacheが起動中。

index.php を作成してドキュメントルートに置く。
標準だと"/Library/WebServer/Documents"になっている。
これは"/etc/apache2/httpd.conf"の"DocumentRoot"を編集する事で変更出来る。
とりあえず今はそのままで、index.phpを作成するよ。

[index.php]
<?php
phpinfo();

上記ファイルをドキュメントルートに置いたら、http://localhost/index.php にアクセスしてみる。
すると…!

Macって結構楽だなぁー。

2014年4月23日水曜日

僕のMacに入っている*.mobileprovisionファイルを消してスッキリする。

何か気がつくと同じ名前のプロビジョニングファイルがたくさん登録されていた。
UDIDを追加するたびにプロビジョニングファイルを作り直していたのでこうなった模様。

さて、そういうわけで軽くお掃除。
ターミナルから、
$ cd ~/Library/MobileDevice/Provisioning¥ Profiles/
$ rm *.mobileprovision
これでお掃除完了。
その後は必要なプロビジョニングファイルをダウンロードして、再度インストール。
スッキリしたよ!

2014年4月22日火曜日

さくらの共有SSLを使ってiOSアプリをOTA配布してみる。

うちはわりと前からさくらのレンタルサーバーを借りててですね。
設定で共有SSLが使えるので、これを利用して開発中のiOSアプリをOTA配布しようかなーと思うたんよ。
Over-The-Air。OTA!

まずはさくっとさくらのレンタルサーバーで共有SSLを使えるようにする。
サーバーコントロール画面からドメイン設定に進めば設定項目があるのでチェック。


これで共有SSLの設定は完了。
次はiOSアプリをAdHocビルドします。
Xcode→[Product]→[Archive]でアーカイブを作成。
Organizerにて、[Distribute...]を選択。


[Save for Enterprise or Ad Hoc Deployment]を選択。


適切なプロビジョニングファイルを選択。
[Save for Enterprise Distribution]にチェックを入れ、必要事項を記入。


[Save]すると、*.ipaと*.plistファイルが生成されます。
(この例だとapp.ipaとapp.plist)
出来た二つのファイルを、[Application URL]に記入したパスへアップロード。
あとはこんなHTMLを書いて、iPhone/iPad/iPod touchからアクセスすると…!

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta name="viewport" content="width=device-width" />
    <title>download</title>
  </head>
  <body>
    <a href="itms-services://?action=download-manifest&url=https://xxxxxxxxxxx/xxx.plist">Install</a>
  </body>
</html>

インストールに失敗する場合、プロビジョニングファイルがAdHoc用じゃないとか、インストールしようとしている機種のUDIDが登録されてないとかだと思われます。
こちらからは以上です。

Bloggerにシンタックスハイライトを設定する。

僕はプログラマなので、このブログにコードを書く事があるやもしれない。
なので、コードを見やすくするためにシンタックスハイライトさせたいなぁと思いました。
調べてみるとgoogle-code-prettifyってのが使えそう。
では早速設定だ!

ここ参考にしながらやってますよ。
https://code.google.com/p/google-code-prettify/wiki/GettingStarted

[テンプレート]→[HTMLの編集]を選ぶ。

<head>〜</head>間に次のコードを挿入する。
<script src="https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js"></script>

あとは投稿するときに[HTML]を選び、こういう風に書けば良し。
<pre class="prettyprint lang-html">
&lt;script src="https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js"&gt;&lt;/script&gt;
</pre>

"<", ">"をエスケープしないと行けないのが手間っすね。
 さて、デフォルトのままだとちょっとあれなのでカスタマイズしますよ。

この辺を参考にcssを編集。
https://code.google.com/p/google-code-prettify/source/browse/trunk/styles/sons-of-obsidian.css
http://greenapple-room.com/conc/user/TwitterBootstrap/bootstrap_prettyPrint.html

<style type="text/css">
  .com { color: #93a1a1; }
  .lit { color: #195f91; }
  .pun, .opn, .clo { color: #93a1a1; }
  .fun { color: #dc322f; }
  .str, .atv { color: #D14; }
  .kwd, .linenums .tag { color: #1e347b; }
  .typ, .atn, .dec, .var { color: teal; }
  .pln { color: #48484c; }
  .prettyprint {
    padding: 0px;
    background-color: #f7f7f9;
    border: 1px solid #e1e1e8;
  }
  .prettyprint.linenums {
    -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
    -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
    box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
  }
  /* Specify class=linenums on a pre to get line numbering */
  ol.linenums {
    margin: 0;
  } 
  ol.linenums li {
    padding-left: 12px;
    color: #bebec5;
    line-height: 18px;
    text-shadow: 0 1px 0 #fff;
    list-style-type: decimal;
  }
</style>

これを<head>〜</head>間に挿入すれば見た目が変更されます。
というわけでシンタックスハイライトの設定完了。
このブログにどんどんコードを書いていきたいなぁと思いました。

2014年4月19日土曜日

僕のMacにmodern.IEを入れる。

訳あって、IEが必要になった。
訳も何も仕事で必要になったわけだが。
しかし僕の手元にはMacしかない。
ちくしょう、Surface買うべきか。

いやしかしまて、必要なのはIEだ。
IEでレイアウトが崩れていないか、確認出来ればいいのですよ。
そんな貴方と僕にMicrosoftは救いの手を差し伸べました。
modern.IE。そう、Microsoftならね。

http://www.modern.ie/ja-jp

忘備録と備忘録。

忘れた時に備えて記録しておく。
忘備録。
そう僕は覚えていたんだけど、調べてみると備忘録とも言うらしい。
しかもどうやら世間ではそちらが多数派らしい(グーグル調べ)
マジか。
レ点かお前ら。

昔からそうであった。
なぜか少数派に位置する事が多いのだった。
少ないのに多い。
日陰に生きております。

しかしこれからは違う。
多数派として生きるのだ。
備忘録。
備忘録。
よし覚えた。

しかし忘れるかもしれない。
そのときのために備えておこう。
そう思って僕はこのブログに記録したんだ。

2014年4月9日水曜日