公開鍵認証ではまった事

公開鍵認証ではまった事
CentOS 6.4 64bit で
公開鍵認証でアクセスするように変更して躓き
解決したのでメモです
クライアントマシンは
Ubuntu 12.04 LTS 64bit
まず、Ubuntu で
Ctrl + Alt + t
で端末を開き
ssh-keygen -t rsa
で鍵を作成
パスワードを聞かれるので、任意のパスワードを入力
ssh-copy-id コマンドで転送できるので
ssh-copy-id ‘-p2222 snowpool@192.168.10.110’
で転送
書式解説すると
-p2222 は変更したポート番号
あとは
ユーザ名@IPアドレス
となっています
ポートを変更していないのなら
ssh-copy-id ユーザ名@IPアドレス
でOKです
その後
ssh-add ~/.ssh/id_rsa
を実行して
あとは
ssh -p 2222 192.168.10.110
でログインできるようになります
もし
ssh-add ~/.ssh/id_rsa
を忘れると
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
と表示されログインできません
このエラーがでることによりかなり悩みました
sshの公開鍵認証の設定でつまずいた
http://daily.belltail.jp/?p=112
を参考にすることで、無事解決しました
ポート変更後の
ssh-copy-id コマンドについては
How to use ssh-copy-id on a non-standard port
http://superuser.com/questions/446665/how-to-use-ssh-copy-id-on-a-non-standard-port
を参考にさせていただきました

linux-headers-3.5.0-30-generic インストール

VMware Player を起動しようとしたところ
カーネルがみつからないということで
必要なパッケージをインストール
uname -r
でカーネルバージョンを確認し
次に
sudo apt-get install linux-headers-3.5.0-30-generic
でインストール
あとは、普通に
vmplayer &
で起動して 管理者権限パスワードをいれれば無事アップデート完了

twitter のユーザ認証

twitter のユーザ認証
#07 ユーザー認証をしてみよう
http://dotinstall.com/lessons/tw_connect_php_v2/21907
を参考にユーザ認証について学習
認証したユーザーの情報を取得するためのAPIは
https://dev.twitter.com/docs/api/1.1/get/account/verify_credentials
を参考にする
認証に必要な callback.php を作成
ユーザ認証には
codebird.php を使うので
require_once(‘config.php’);
require_once(‘codebird.php’);
で読み込む
ファイルのパスに注意
初期化に
consumer key
consumer secret
が必要なので、これは定数から取得する
初期化のあたりは、
https://github.com/mynetx/codebird-php

1. Authentication
を参考にして、ほぼコピペ
Codebird\Codebird::setConsumerKey(‘YOURKEY’, ‘YOURSECRET’);

Codebird::setConsumerKey(CONSUMER_KEY, CONSUMER_SECRET);
というように定数に変更
$cb = \Codebird\Codebird::getInstance();
はそのままコピペ
ユーザ認証関連もコピペでOKらしいけど
https://github.com/mynetx/codebird-php

Or you authenticate, like this:
の下にコードが載っているが、バージョン変更されたのか
コードが微妙に違っているので
http://dotinstall.com/lessons/tw_connect_php_v2/21907
の部分を使ってみた
twitter で認証されると
GETで ’oauth_verifier’ が渡される
if (! isset($_GET[‘oauth_verifier’])) {
なので、もし渡されないならという意味
$auth_url = $cb->oauth_authorize();
header(‘Location: ‘ . $auth_url);
die();
では、 twitter 認証画面に飛ばしている
その場合、スコープ内の処理が実行される
認証できたなら
else のスコープの中の処理が実行される
‘oauth_verifier’
は認証完了したときに返ってくる値
$_SESSION[‘oauth_token’] = $reply->oauth_token;
$_SESSION[‘oauth_token_secret’] = $reply->oauth_token_secret;
はユーザが必要なAPIにアクセスするのに必要
$cb->setToken($reply->oauth_token, $reply->oauth_token_secret);
でユーザが必要なAPIを使えるようにする処理
$me = $cb->account_verifyCredentials();
でユーザ情報をみることができる
ここまでできたら
var_dump($me);
で格納できているか確認
account_verifyCredentials();

codebird.php での twitter API を使ったアクセス方法
詳しくは
https://github.com/mynetx/codebird-php
3. Mapping API methods to Codebird function calls
を参考に

ツイッターでログインするWebサービス作成 

ホーム画面の作成
http://dotinstall.com/lessons/tw_connect_php_v2/21905
を参考に
/var/www/twitter/へ
index.php を作成
まず、
reqiure_once(‘config.php’)l
require_once(‘codebird.php’);
で必要なファイルの読み込み
このとき、注意点として
config.php

codebird.php

index.php とおなじディレクトリにおくこと
これを間違えるとファイルパスが違っていて
画面が真っ白になるので注意
ファイルの有無は
Linux なら ls コマンドをつかって確認可能
もし、別の場所におきたいのなら
require_once() のパスを変えること
これは、java の import
C の include と同じ
次に
HTMLタグを使って画面を作成
普通のHTMLと変わらないけど
a要素で
<a href=”logout.php”>ログアウト</a>
というようにログアウトする処理をつけること
そして、つぶやきのリスト表示のため
<ul>
<li></li>
</ul>
で場所を指定しておく
ファイルの編集はテキストエディタではなく
Eclipse を使用
ただ、あまり多くのプロジェクトが開いていると面倒なので
Ctrl[ + Shift] + W [全て]閉じる
で一旦今つかっているのを消しておきます
Eclipse と追加プラグインにより、
コードの記述が楽になるし、タイプミスが減るので
便利ツールは活用することをおすすめします
Eclipse にはショートカットキーがあり
これを知っていると作業効率があがります
http://dotinstall.com/lessons/tw_connect_php_v2/21906
を参考にログイン画面を作成
セッションを使うので、コードを追記
session_start();
でセッション開始
そして、ログイン判定をif で実装
ログインしているなら me に格納します
if (empty($_SESSION[‘me’]))
は me の中身が空ならという意味
header(‘Location: ‘.SITE_URL.’login.php’);

SITE_URL は config.php で
定義した定数で、サイトのURL
これは公開環境じゃなくて
ローカルIPでもOK
PHPでは . で java script の+連結みたいに使えるので
SITE_URL.’login.php’
http://192.168.10.248/login.php
という意味になる
これができたら、次にログイン画面作成
最初からつくるのは面倒なので
cp base.html login.php
でファイルをコピーし
内容を編集します
変更点として
a要素で
ログインするため、いろいろな処理をするのは
callback.php になっているので
<a href=”callback.php”>twitter でログイン</a>
というように、ファイルを指定します

twitter アプリのための設定

twitter アプリのための設定
#04 アプリの設定をしよう
http://dotinstall.com/lessons/tw_connect_php_v2/21904
に書かれているソースを
/var/www/twitter/config.php に追記していく
必要なものを定数として格納する
定数はPHPでは define() で行う
左が自作の定数
右がその内容
となる
つまり、メンテを考えると、非常に効率的
右の値を変えるだけで、簡単に変更ができる
define(‘DSN’, ‘mysql:host=localhost;dbname=dotinstall_tw_connect_php’);
では
ホスト名、DBの名前になる
今回なら
ホスト名 = localhost
DB名 = dbname=dotinstall_tw_connect_php
どちらも sql の設定で行ったもの
define(‘DB_USER’, ‘dbuser’);
これはユーザ名
grant all on dotinstall_tw_connect_php.* to dbuser@localhost identified by ‘**********’;
で作成した
@localhost の前にある名前
また
define(‘DB_PASSWORD’, ‘**********’);
はパスワード
*********は任意のものに変えてある
define(‘CONSUMER_KEY’, ‘********************’);
define(‘CONSUMER_SECRET’, ‘*********************************’);
これらは、
twitter のアプリの設定画面の
Details のところに載っている
define(‘SITE_URL’, ‘http://dev.dotinstall.com/tw_connect_php/’);
はサイトURL
error_reporting(E_ALL & ~E_NOTICE);
はエラー関連の表示
session_set_cookie_params(0, ‘/tw_connect_php/’);
はセッション範囲の指定

twitter アプリのためのDB作成

twitter アプリのためのDB作成
twitter アプリのユーザ情報を格納するので
DBを作成する
開発環境は Ubuntu12.04 64bit
すでに apache2 と PHP はインストール済みなので
MySQL を入れる
sudo apt-get install mysql-server
でインストールできる
install しているときに root 権限のパスワードを設定するのでパスワードを入力
この root は Ubuntu のではなくて
MySQL の root 権限
これで準備できたので
#03 データベースの設定をしよう
http://dotinstall.com/lessons/tw_connect_php_v2/21903
を参考にDBの作成
今回、アプリ作成のためディレクトリを作成
/var/www/twitter としてみた
前回ダウンロードした圧縮ファイルを
ここに解凍して置く
codebird-php-master/src/codebird.php
が使うファイルなので、
codebird.php

/var/www/twitter/
へコピーしておく
そしたら、DB の作成
動画では、PHPファイルを作成し
その中のものから コピペしているけど
sql ファイルにまとめておいて実行するということもできるので
今回はこの方法を使います
config.php のSQL部分のコピペを行い
vim setup.sql で sql ファイルを作成し
貼り付け
そのときにパスワードの
********************
を任意のパスワードに変更し保存
mysql -u root -p < setup.sql を実行すれば、sqlファイルの内容を実行することができます 作成できているか確認するには mysql -u root -p で mysql にログインして show databases; でDBを確認して dotinstall_tw_connect_php があるのを確認 そして use dotinstall_tw_connect_php で使用DBを切り替えて desc users; でテーブルの中身を確認 これでOKなら exit で mysql を抜けます

twitter でログインする webサービス

twitter でログインする webサービス
必要なものが
HTML
CSS
PHP
MySQL
Codebird-PHP
https://github.com/mynetx/codebird-php
これは ZIP ボタンをクリックして
圧縮ファイルをダウンロードして解凍して使う
必要なものができたら、次は
twitter アプリの登録
これは
https://dev.twitter.com/
へアクセスし
sign in して登録する
sign in したら、自分の twitter アイコンをクリックして
My Applications をクリックし
create a new application をクリック
必要な項目が英語だけど
name にはアプリの名前
ただし、twitter という名前をいれるのはダメ
description にはアプリの解説
web site には
自分サイトのURL
callbackURL には
自分のサイトURLに
callback.php をつければOK
規約を読んでOKなら
yes I agree にチェックをいれて
よみにくい文字を入力すれば登録完了
もし、間違えても
登録アプリの Settings タブで
修正が可能なので、そんなに失敗を気にしなくてもいい

HTML5 でメモ帳作成 その5

HTML5 でメモ帳作成 その5
一定時間毎ではなく、文字を入力した時点で
保存されるようにする
これは、twitter とか ブログとかで
下書きの自動保存みたいに使えるので
忙しいときに活用できそう
参考にできるのが
#08 キー入力毎に自動保存
http://dotinstall.com/lessons/memo_html5/2308
これは
jQuery を使う
keyup は文字入力したというイベント
$(‘#memo’).bind(‘keyup’,function(){
localStorage.setItem(‘memo’,$(‘#memo’).val());
}
というソースの部分が該当
これは
id=”memo” のテキストエリアの内容を
keyup イベント発生
つまり文字入力するたびに
localStorage に保存するというもの
今後の課題としては
Ajax とかでもっと使いやすくできると面白いかもしれない

HTML5 でメモ帳作成 その4

HTML5 でメモ帳作成 その4
自動保存はできたので、今度は保存していることを
わかりやすくするため
保存時にメッセージを表示
#07 自動保存時にメッセージを出す
http://dotinstall.com/lessons/memo_html5/2307
まずは、表示する領域を設定
今回はp 要素に id=”message” としている
また、最初に非表示にしたいので
display:none というスタイルを適用
<p id=”message” style=”display:none;”>saving ….</p>
あとは、保存した時に表示するように
java script で制御
ユーザ関数 autoSave() に追記する
$(‘#message’).show().hide(200);
これは
id=”message” のところを表示にして
その後 0.2秒たってから
隠すというもの
show() は表示
hide() は隠すという意味
200 は 0.2 秒単位という意味になる
実行すると、02秒ごとに
saving …. とずっと繰り返し表示される

HTML5 でメモ帳作成 その3

HTML5 でメモ帳作成 その3
ようやく、自動保存の開始
今回は、一定時間ごとに保存するというもの
setTimeoutを使って自動保存
http://dotinstall.com/lessons/memo_html5/2306
を参考に作成
#15 タイマー処理の違い
http://dotinstall.com/lessons/basic_javascript_tips/2115
無名関数と即時関数で出来ること
http://dotinstall.com/lessons/basic_javascript_tips/2118
も参考にしたほうがわかりやすい
これを使うと、保存するボタンをおさなくてもよくなる
このため、UIから保存ボタンを削除して
かわりにオート保存機能を実装
function autoSave(){
localStorage.setItem(‘memo’,$(‘#memo’).val());
setTimeout(autoSave,1000);
}
となる
$(‘#memo’).val()

id=”memo” のテキストエリアの
val() つまり、内容
ということ
なので
localStorage.setItem(‘memo’,$(‘#memo’).val());

id=”memo” のテキストエリアの内容を
localStorage に保存するという意味になる
そして、その間隔を
setTimeout(autoSave,1000) で
1000 にしているので1秒ごと
に実行される
あと、即時関数を使ったほうが、書くときにも楽
関数を作成して
autoSave();
でもいいけど
(function autoSave(){
localStorage.setItem(‘memo’,$(‘#memo’).val());
setTimeout(autoSave,1000);
})();
というようにして即時関数にしたほうが書く手間が省ける
これにより、自動保存できるし
他の人がおなじURLへアクセスすればみれるので
共有掲示板のようなものも作れる