アプリを使って vim の練習

Linux サーバーを使うと
vim を使うことが多いと思いますが windows テキストエディタから
きた場合、まず操作方法で困ります
そこで、なにかアプリとかで練習できないかな
と調べてみたらありました
Vim検定
というアプリで
iPhone android ともに対応しています
なれるにはよい機会になると思いますので
試してみてはいかがでしょうか

開発環境をLinux にするときの参考サイト

メインのデスクトップマシンから開発環境まで、自宅のほぼすべての
マシンが Linuxにしてからだいぶたちます
もっとも、周辺機器などは windows でないと動かなかったり
FXとか株とかは、未だに windows での動作しかしないなど問題は
あるわけで、そんなときには windows 使うか
もしくは Vmware Player で仮想化したwindows 使うという
ようにしています
Windowsにサヨナラだ!!~ Fedora15 ~【1/6】
という記事にメリット、デメリットが載っていました
そして、
XAMPPでWeb開発などをしている人は直ぐにVMPlayerに変えたほうが良い【1/8】
に仮想マシンにサーバーを構築する方法が掲載されていますので
これを参考に仮想マシンを構築すれば、サーバー管理などの練習もできます
ちなみに、web サイトをみるときにRSS使うとかなり便利に情報収集できます
おすすめは Google リーダーです
これと、Google アラート と Gmail を組み合わせると
とても快適な情報検索になります
まず、Google アラートで検索したいキーワードを登録
次に、送信先を Gmail に指定
そして、届いたリンク先を開き、RSS対応なら Google リーダーに登録
これで検索する時間がないときにも
ほぼおまかせで検索しておくことができます
ただし、適切なキーワードが必要になりますが…
この方法と、質問などを行えるQ&Aサイトなどを使えば
かなり効率的に問題解決もできます
Linux関連のエラーの場合、エラーメッセージを
コピペして検索したり、
実行したコマンドも一緒に掲載して質問すれば
回答を得られる可能性も増えます

require を使って共通プログラム作成

C言語や java のソースコード のように
PHPも複数のソースコードに分けることができ、
そしてそれを共有することもできます
例えばDB接続の
<?php
mysql_connect(‘localhost’,’root’,”) die (mysql_error());
mysql_select_db(‘mydb’);
mysql_query(‘SET NAMES UTF8’);
?>

dbconnect.php というファイルに記述し
index.php で呼び出すには
require(‘dbconnect.php’);
というように
require(‘ファイルパス’);
というように記述します
ソースを分割するメリットは多くありますが
セキュリティ関係の向上や、メンテナンスのしやすさなどがあります
また、マッシュアップなどにも応用ができますので、
ぜひ覚えておきたいものです
マッシュアップ関連の書籍としては
アフィリエイターのための Web APIプログラミング入門

がわかりやすくおすすめです

データの一覧画面を作る場合

今回は DBから データを取得し、
一覧画面にする方法です
最初に PHPで MySQL のDB接続を行います
mysql_connect(‘localhost’,’root’,”) or die(mysql_error());
mysql_select_db(‘mysql’);
mysql_query(‘SET NAMES UTF8’);
続いて テーブルからデータを取得し、結果を変数 $recordSet へ格納します
$recordSet = mysql_query(‘SELECT * FROM my_items ORDER BY id DESC‘);
DESC を指定すると小さい順に並び替えします
そして、while文を使い、このループ機能を使うことで
全データを書き出します
while($table = mysql_fetch_assoc($recordSet){
print(htmlspecialchars($table[‘id’]);
print(htmlspecialchars($table[‘maker_id’]);
print(htmlspecialchars($table[‘item_name’]);
print(htmlspecialchars($table[‘price’]);
}
これで、データを表示することができます
print()で表示する時に
htmlspecialchars() を使っているのは
html で特殊な文字として扱われる記号などを表示するためです
詳しくは
特殊文字をHTMLエンティティに変換する
に載っていましたが
&lt; と記述しないと HTMLでは < となりません
こういった文字を適切に変換するために
htmlspecialchars() を使っています
ちなみにこれだけだとわけのわからない出力になってしまうため
テーブルにまとめます
<table width=”100%”>
<tr>
<th scope=”col”>ID</th>
<th scope=”col”>メーカー</th>
<th scope=”col”>商品名</th>
<th scope=”col”>価格</th>
</tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
ちなみに、 scope=”col” はCSSの設定です
次に、PHPの処理を組み込みます
PHPのコードは <?php?>
で囲むことで、HTMLの中に部分的に組み込むことができます
<table width=”100%”>
<tr>
<th scope=”col”>ID</th>
<th scope=”col”>メーカー</th>
<th scope=”col”>商品名</th>
<th scope=”col”>価格</th>
</tr>
<?php
while($table = mysql_fetch_assoc($recordSet)){
?>

<tr>
<td><?php print(htmlspecialchars($table[‘id’]));?></td>
<td><?php print(htmlspecialchars($table[‘maker_id’]));?></td>
<td><?php print(htmlspecialchars($table[‘item_name’]));?></td>
<td><?php print(htmlspecialchars($table[‘price’]));?></td>
</tr>
<?php
}
?>

</table>
赤字にしたのが PHPを組み込んだ部分です
参考にした書籍では
PHPだけでなく
HTMLのタグ、そしてCSSの知識が必要なため、ある程度の経験が必要になっています
ちなみに、
メーカーを番号ではなく人の名前にするには
mysql_query()

$recordSet = mysql_query(‘SELECT * FROM my_items ORDER BY id DESC’);
となっているのを
$recordSet = mysql_query(‘SELECT m.name, i.* FROM makers m, my_items i
WHERE m.id=i.maker_id
ORDER BY id DESC’);
へ変更し
<td><?php print(htmlspecialchars($table[‘maker_id’]));?></td>

<td><?php print(htmlspecialchars($table[‘name’]));?></td>
と変更し保存します

Android上で動作する開発環境「AIDE」

イマドキのIDE事情 (126) ついに登場! Android上で動作する開発環境「AIDE」

Android上で動作する開発環境「AIDE」
について取り上げられていました
これで、Android 端末そのものでアプリ開発などができるように
なってくるようです
ただ、どのくらいのものが作れるのかはまだ調べている途中なので
また情報が入り次第掲載してみようと思います
android アプリ開発とは別に
公開鍵認証の使えるアプリなど、サーバー管理に使うアプリについても調べてみました
android サーバー管理と検索するとでてきます
最近では安価な値段で AmazonEC2 なども使えますし
レンタルサーバーなどのアプリもでてきています
以前はノートパソコンのみでしたが
電車の中で操作するにはスマートフォンのほうが使いやすいと思いますので
緊急のこともかんがえて、いれておこうと思います
サーバー管理用 Androidアプリ
に載っていましたので、いくつか入れてみました
得に Overlook Fing を使うことが多くなりそうです

フォームからの入力をDBへ保存する場合

今日はちょっと難しめですが、フォームから入力した情報をDBへ保存する場合の処理です
$sql = sprintf(‘INSERT INTO my_items SET maker_id=%d,
item_name=“%s”, price=%d, keyword=“%s”‘,
mysql_real_escape_string($_POST[‘maker_id’]),
mysql_real_escape_string($_POST[‘item_name’]).
mysql_real_escape_string($_POST[‘price’]),
mysql_real_escape_string($_POST[‘keyword’])
);
mysql_query($sql) or die(mysql_error());
このように
%d や %s というようにすれば、入力した数値や文字などを
DBへ POST 送信できるようになります
ちなみに、%s が “” で囲ってあるのは、文字列だからです
%d は数値
%s は文字列の入力に使います
C 言語とかでも使いますので覚えておくと便利です
$_POST は POST 送信するという定数です
GET と POST がありますが
GET だと
GETでは日本語などの全角文字を送信できない
とか
GETには送信できる情報量に制限がある
そして
GETの場合は送信内容がURLとして渡される
つまり内容丸見えです
これは非常にセキュリティを考えるとまずいので
極力POSTを使いましょう
もっと詳しい解説として
GETとPOSTの違い
に解説が載っています
また、重要なことですが
mysql_real_escape_string() は
SQLインジェクション対策です
これは
フォームからの情報で
‘ OR ”=’
つまり
SELECT * FROM testtable WHERE password=” OR ”=”;
という実行と同じで
意味は
password フィールドが空 または空が空の場合という条件となっています
これが実行されると、すべてのレコードに条件があてはまり
パスワードによる認証が無効化され、データが盗み出されます
このため、対策として
mysql_real_escape_string()
を使うことで、入力される文字列でSQLにとって危険とされる文字を無効化しておきます
そして、今回は sprintf() を使って書き込みしていますが
$sql = sprintf(‘INSERT INTO my_items SET maker_id=%d,
item_name=”%s”, price=%d, keyword=”%s”‘,
mysql_real_escape_string($_POST[‘maker_id’]),
mysql_real_escape_string($_POST[‘item_name’]).
mysql_real_escape_string($_POST[‘price’]),
mysql_real_escape_string($_POST[‘keyword’])
);

$sql = ‘INSERT INTO my_items SET maker_id=’
.mysql_real_escape_string($_POST[‘id’]) .’ ,
‘.item_name=”‘ .mysql_real_escape_string[‘item_name’]) .'”,
.price=’ .mysql_real_escape_string($_POST[‘price’]) . ‘,
keyword=”‘ .mysql_real_escape_string($_POST[‘keyword’]). ‘”‘;
としても
同じ意味になります

配列のキーはASを使用する

PHP + mysql で
mysql_query() で COUNT を使って件数を取得すると
キーがわかりにくくなります
$recordSet = mysql_query(‘SELECT COUNT(id) FROM my_items’);
$data = mysql_fetch_assoc($recordSet);
とすると
画面に出力するためには
echo ‘件数は’ .$data[‘COUNT(id)’].’件です’;
というようにしますがわかりにくいです
ちなみに . は PHPで文字をつなげる効果ですので、
COUNT(id) が1なら
件数は1件です
というように表示されます
しかし、これではわかりにくいので
このため、対策として AS を使います
というわけで AS でわかりやすさ重視にします
$recordSet = mysql_query(‘SELECT COUNT(id) AS record_count FROM my_items’);
$data = mysql_fetch_assoc($recordSet);
で画面に表示するには
echo ‘件数は’ .$data[‘record_count‘].’件です’;
というように、微妙にわかりやすくなります
まぁ実際には出力される結果は同じなのですが
見やすさ重視ということです
コードをかくときに、改行しなくても
C , java PHP などは書けますが
あとでメンテなどのときを考えると見やすいコードをかくことを心がけたいものです

アクセス解析の結果反映は設定後から

数日前、アクセス解析の設定を行いました
ここで判明したのが、アクセス解析のサービスを開始しても
実際に解析されるのは、
設定をしてからということです
つまり、残念ながらその前のアクセスについては解析されません
このため、アクセス解析の設定は早めに行っておくべきということです
アクセス解析の設置の仕方は
アクセス解析を設置しよう! (FC2ブログの場合)
に載っています

レコードセットについて

mysql_query() の返り値を
レコードセットと言います
これは、セットという名前のとおりでレコードのセットです
前回実行した
mysql_query(‘SELECT * FROM my_imtems’);
の場合、この検索結果すべてが
レコードセットとして格納されます
この中からデータをとってくるのが
mysql_fetch_assoc()
ですが、
書籍によると言葉の意味が載っていました
fetch とってくる
assoc 連想
ということで、連想配列としてとってくるという意味になるそうです
こういう解説をみていると英語の単語の意味がわかるようになると
プログラムの解読もしやすいのかもしれません
ちなみに、
$recordSet = mysql_query(‘SELECT * FROM my_items’);
$data = mysql_fetch_assoc($recordSet);
echo $data[‘item_name’];
$data = mysql_fetch_assoc($recordSet);
echo ‘<br/>’.$data[‘item_name’];
というようにすると
続けて次のデータが表示されます
.$data のところですが
PHP では . を使うことで、文字列をつなげることができます
主に変数に格納したものを表示するときなどにつかわれます
とくに、HTTPSとHTTPの区別をしたいときとか、切り替え要素のときに
つかうことが多いです
ただし、さすがに毎回書き足していくと、facebook アプリなどで
これを行っていたら、さすがに人力では限界があります
facebook の友達は5000人まで増やせますが
5000回も繰り返すのは正気ではできません
なので、繰り返し処理を行う
while 文なども使います
while($data = mysql_fetch_assoc($recordSet)){
echo $data[‘item_name’];
echo ‘<br/>’;
}
となります
これで、すべての item_name の内容が記述されます
ほかの関数もありますが、代表的なのが
mysql_fetch_row()
レコードを単純配列として取得
フィールド名にこだわらずに処理するときに使用
mysql_fetch_array()
通常配列と、連想配列の両方を得られる
たぶん、これが一番つかうかも
http://php.net/manual/ja/book.mysql.php
に mysql 関連が載っていますので、用途に応じて使いましょう