2016年2月12日金曜日

クライアントサイドプログラム

次はクライアント側のプログラム。
ホームページ(ブラウザ)、iPhone、Androidとか考えられるけど、とりあえずホームページ(PHP)JavaScript)かな。

Ajax, jQueryなるものがあるのですね、名前は知ってたけどどんなものかは知らなかった。google mapのイメージですか。XML使って非同期処理ですか。ぴったりじゃないすか!簡単に使えそうだし。
保存はhtmlでもphpでもいいっぽいな。

基本 の使い方はこれでいいな。
参考: http://www.finefinefine.jp/jquery/kiji2203/
xmlの処理(パーサー)もできる。
$(xmlファイル)の中をfindで探して、text()で出力。
例: $(xml).find("item").text()

処理待ちはwhen, doneでいいかな。
http://www.tam-tam.co.jp/tipsnote/javascript/post5807.html
Deferredていうらしいけど、じっくり調べる気はまだしない。

あとはUIだけど、これは今のところ最低限でいいや。
これもなんかいけそうな気しかしないが(笑)
http://webkcampus.com/201411/829/


2016/2/17追記
JSONなるものがあるんですね。XMLじゃなくてこっちの方がいいかな。

サーバーサイドプログラム(PHP)

データベースの次はサーバーサイドのプログラムを書いていきます。
PHPはあまり慣れていません。
ただhttpプロトコルでやりとりするこの仕様、うまくいく気しかしません(ドヤァ)
基本設計はgetかpostで受け取って(基本getか?)、xmlを返す。
参考:https://thinkit.co.jp/article/1210/1

画像を扱うのでやはりこの辺りが参考になる。
http://hijiriworld.com/web/mysql-img-binary/
xmlでバイナリデータを扱うにはBase64が使えると。
http://astel-labs.net/blog/diary/2010/07/100721-1.html
ここまでおさらい。


PHPでのget (post)の扱いは、
http://konayuki1026.blogspot.jp/2012/01/phpget.html
$適当な変数名 = $_GET['送られた変数名']
でいいらしい。POSTは$_GETが$_POSTになるだけ。簡単。

ただ、このサイト
http://hijiriworld.com/web/mysql-img-binary/
だとimageファイルを送る際に$_POST['image']ではなく、
$_FILES['image']となっていたので調べたら
http://9fd.blog92.fc2.com/blog-entry-236.html
どうやらファイルのアップロードには$_FILESを使うらしい。

xmlの扱いは、
http://nanoappli.com/blog/archives/5448
simpleXMLというの(標準ライブラリ?)を使えばいいと。
でバイナリはBase64で変換と
http://astel-labs.net/blog/diary/2010/07/100721-1.html
PHPでのBase64の扱いはこれらしい
http://phpspot.net/php/pgbase64%E3%81%AB%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89,%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89.html
simpleXMLはそのままだと可読性が悪いので、インデントをつける。
http://nanoappli.com/blog/archives/5448
でも、メモリの問題なのかDOMDocumentを作るところでSever Errorが出る。(未解決だがまあいいか)

MySQLの操作は、
http://www.phpbook.jp/tutorial/mysql/
ちょっと分量ありそうだけど、まあ大丈夫だろう

SQLからのデータの取り出し
http://www.phpbook.jp/tutorial/mysql/index6.html
SQLは普通に書くのね。

->:「アロー演算子」というらしい。値の取り出し(=>は挿入)のときに使う
http://911.ddtea.com/?eid=1286712

必要知識はこんなもんか。


webpayの使い方(PHP)

webpayの使い方メモ。
pythonではいじってみたけど、PHPはやってないのでやってみた。

まずformからカード情報を登録。CheckoutHelperが楽。
<form action="/hoge.php" method="post"> <script src="https://checkout.webpay.jp/v3/" class="webpay-button" data-key="public_key" data-lang="ja"></script> </form>
これでhoge.phpにpostでwebpay-tokenの変数名で送信される。
最初、jQueryから出力するようにしたけど、なぜかポップアップ(?)が出てこなかった。Javascriptの外に置いたら出てきたのでまあそうやって使うようにしましょう。


必要なものを揃えます。
ライブラリより
"Composer環境下でcomposer.jsonに以下の通りに記述して利用"
???Composerて?
ふむふむ。ライブラリ管理だと。
使い方は?

curl -sS https://getcomposer.org/installer | php
( sudo -s mv composer.phar /usr/local/bin/composer ) //path通った場所に移す or もしくは使う場所に移す
composer.json の作成 @ PHPファイルと同じdirectory(?)
./composer.phar install

かな。これでvendorフォルダが作成されたのでOKぽい。
とりあえずライブラリは入った。
参考:Composer導入をまじめに考える


続いて顧客登録。自分はこの処理にformから飛ばします。
<? php
require "vendor/autoload.php";
use WebPay\WebPay; $webpay = new WebPay('private_key'); $response = $webpay->customer->create(array("card"=>"tok_SampleCardToken"));
?>
返り値はこの場合、$responseに格納。例えばidは$response->idで取り出す。
馴染みのない言語だと、値の取り出し一つでも一苦労 (~_~)
ちなみに->は「アロー演算子」というらしいです。
参考:PHP】アロー演算子 -> と ダブルアロー =>


最後に支払い(顧客idから)
<? php
require "vendor/autoload.php"; use WebPay\WebPay; $webpay = new WebPay('private_key'); $response = $webpay->charge->create(array( "amount"=>400, "currency"=>"jpy", "customer"=>"customer_id" ));
?>
登録・支払いの参考:APIドキュメント

これでOKかな。
jQuery-Ajaxとの併用方法を探さないかんけど。

2016年2月11日木曜日

PHP・Javascriptのデバッグ

PHPとJavascriptのデバッグで戸惑ったのでメモ。

PHP:最初エラーが何も出なくて戸惑った。全部echoとかなの?って焦ったが、そんなはずはなく。よかった。設定をいじるとエラーがブラウザで表示されるらしい。
設定ファイルをいじることもできるようだが、ファイルごとに設定する方向で対応。
このへんを参考に。
// エラー出力しない場合
ini_set( 'display_errors', 0 );
// エラー出力する場合
ini_set( 'display_errors', 1 );

http://www.24w.jp/study_contents.php?bid=php&iid=php&sid=setting&cid=001
http://qiita.com/yukke0310/items/600ba1b33f0073c97a51


Javascript: こっちも最初エラーが出ずで焦る。こっちはブラウザから見るらしい。Google Chromeなら表示→開発/管理→JavaScript コンソールで見れる。よかった。他ブラウザは申し訳ないのですがわかりません。

2016年2月6日土曜日

vimでPHP開発環境を整える

そういえば、

AWSのOSがLinuxでGPUが使えない(?)のでvimに挑戦!
とりあえずPHP開発環境を整えたいと思います。

とりあえずプラグインの入れ方
http://qiita.com/kamina91/items/4d2f2f12df8512fac889
.vimrcって何?ってところから。
とりあえずホームディレクトリに何か書いて入れとけばいいと。
gitのやり方とかも書いてあってありがたいです。

このへんから適当に選んで入れてみよう。そうしよう。
http://qiita.com/okamos/items/caf5a0b19ce893a75363
http://tti.matrix.jp/blog/2015-05-19/vim%E3%81%A7%E3%81%AEphp%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83/
http://qiita.com/tekkoc/items/8897cdf378305c4e547d
http://qiita.com/shima_529/items/bf647b9764136c1ac7f7

とりあえず構文補完をしてくれるらしいneocomplete.vimというものを入れてみよう。
と思ったけど、Luaを入れてないとダメなのね(で入ったけどvimで使えない)。
Luaの入れ方
http://saihoooooooo.hatenablog.com/entry/2013/11/29/152525

一応入ったが、途中で.vimrc内の記述がおかしいとのエラーが出て使えなかった。が、いじってたら直った(原因不明)。

Luaが有効なvimを入れ直したら、色分けとか自動インデントとかなくなってたので、これらを参考に修正。なるほど、便利かもvim。
http://51flya.com/linux/581.html
http://www.garunimo.com/program/linux/corumn-linux22.xhtml
http://vimblog.hatenablog.com/entry/vimrc_set_tab_indent_options

以上

MySQLのお勉強

まずこの部分から作成。

MySQLについてお勉強。何せ使ったことがないので。
今までは大体csvファイルとかでデータ管理してました。
何が違うのかいいのか(検索とかか?)ということも含めお勉強。

大体の使い方はここでお勉強。
http://se-java-school.com/itstudy/database/intro_db_jdbc/intro.php
なるほど便利そう。



他さらに調べたこと

属性について
書く変数に対していろんな制約が付けられる。
使ったのを並べておきます。

UNSIGNED...符号をつけない(負の値を扱わない)。
ZEROFILL...桁数が足りない場合、上位の桁を0で埋める。
NOT NULL...NULLにしてはいけない(データの中身が空ではいけない)。
AUTO_INCREMENT...自動的に連番を入力する。

NOT NULL以外はid以外で使わないかも。

あとTABLE作成のときは
PRIMARY KEYやFOREIGN KEYにを付ければいいのか?

括弧の意味
なんか データ型によって意味合い違うみたい。
整数型は表示桁数だが、浮動小数型や文字列型は最大データ長を指定しているらしい。
ややこしい。

位置情報の扱いかた
単に緯度経度を数値型で保存しとけばいいのかと思っていたが、GEOMETRY型というのを使うと何かと便利らしい。
使ってみる。ENGINE(後述)はInnoDBでも扱えるが、実際はMyISAMでしか使えないらしい。


DATETIMEとTIMESTAMP
TIMESTAMPは自動更新されるのか?
データはほぼ同じみたいだが、2つ以上置くと扱い面倒かもだし、おとなしくDATETIMEにしといた方がいいのか?

BLOBとTEXT
大きなデータを乗せるときに使うらしい(データ長に制限がない、その代わり処理の負担が大きくなる?)。
画像とかはBLOBらしいが、TEXTにするにはどのくらいからが目安なのだろうか。
それほど、長いのは扱わないということでVARCHARにしときます。

ENGINE
何か色々あってよくわからないが、InnoDBとMyISAMってのが主流らしい、詳細は全然わからんがとりあえずそれで。

認証
どんな情報がいるのかみたら、大体の場合は文字列らしい。
とりあえずVARCHAR(256)くらいで用意しとけばいいのかな。