雑記:技術ネタの最近のブログ記事

PHPやらJavascriptのフレームワークってあるけど、それを覚えるくらいなら言語を勉強したほうが得だと思うのは私だけでしょうか。

アセンブラとかCとかならまだしも、PHPやJavascriptって高級言語だから、更に上乗せする必要ないんじゃないかって思う。
私の関わるサービスが一般的ではないのかもしれませんが、自由度が無くなったり重くなったりイライラすることが多い。
Smartyすらも面倒くさくて重いと思う場合あって、ついつい<?PHP  ~; ?>。

コード量が等価交換だったり、逆に増えるようなフレームワークも見たことがある。
$a = "うんち"; って変数代入すりゃいいだけの所を、連想配列でゴチャゴチャやってんの。

あとPGに「そこバグってんじゃん?と」聞いたら「これはフレームワークのせいです」って
発作かー!


ただサービスとフレームワークが合致してて、工期が大幅に短縮できるなら別。
Javascriptでのクロスブラウザや、OpenSocialでプラットフォームごとの差異を吸収してくれる程度のは非常に素晴らしいと思います。
けど、「IE8で動かないじゃん」と聞いたら「フレームワークの対応待ちですね」って
爆笑じゃー!


ようするに、
「とりあえずフレームワークの勉強から始める」
「フレームワークを使うほうが偉い」
という風潮はどうにかした方がいいと思いました。

opensocial.newDataRequest のリクエストを受けるサーバーサイドのコーディング例。
まあMyspaceに限らず、HMAC-SHA1 でリクエスト受けたときは全部使えると思うよ。
regist.php などのプログラムの頭にコピペしておきましょう!


PHP5以降だと動くでしょう。
POSTの場合は、GET を POST に置換しましょう。
あと httpd.conf でやるか php.ini か忘れたけど、文字コードの設定が UTF-8 じゃないと詰まるかも。


$namikare1 = "GET";
$namikare2 = "http://".$_SERVER["SERVER_NAME"].
substr($_SERVER["REQUEST_URI"],0,strpos($_SERVER["REQUEST_URI"],"?"));
$namikare3 = ""; foreach($_GET as $key => $value) { if($key === "oauth_signature") continue; if($namikare3) $namikare3 .= "&"; $namikare3 .= rawurlencode($key)."=".rawurlencode($value); } $namikare = rawurlencode($namikare1)."&".
rawurlencode($namikare2)."&".
rawurlencode($namikare3); $gesuido = base64_encode(hash_hmac("sha1", 
$namikare, "OAuthコンシューマーシークレットの文字列"."&", 
TRUE));
if($gesuido !== $_GET["oauth_signature"]) { header('HTTP/1.0 403 Forbidden');
exit; }


ちょっと詰まった点。
1.組み立てる文字列の最後は基本的にパラメーターをABC順に並べるんだけど、oauth_signature を抜かなきゃいけないの。
2.urlencode() じゃなく rawurlencode() を使わないとスペースとかのエンコード方法が違っててダメだった。
3.キーが一致しなくて悩んだとき、どこが悪いのか検証方法がなかったのでトライ&エラー。


※動作は保証しません
※わからなければググりましょう

ソーシャルアプリを作る時のコーディング量はこんな感じ。
とは言っても自分は趣味で数個しか作ってないし、mixi以外でちゃんとサービスインしてないし、フル機能使ってるわけじゃあないので、参考までに。


mixiアプリ ニアミス.net
OpanSocial的な仕様追加は
・ユーザーID,プロフィール取得
・招待
・アクティビティ

mixiアプリ にぎやか地図
・ユーザーID,プロフィール取得
・招待
・アクティビティ
・ガジェット
・マイミク関連

mixiアプリとか まだひみつ
・ユーザーID,プロフィール取得
・招待
・アクティビティ
・ガジェット
・マイミク関連
・コミュニティ関係
・学校情報
・OAuthごにょごにゅ

それぞれ、総コーディング量を100としたら・・・
サーバーサイド(PHP)が10
JavaScriptが90
OpenSocial的なことが両方にまたがって5~10

たいしたことないんです。

こんなテキトーでまともなアプリ作れてるわけないって?
mixiでトップ走ってる三国志とか牧場が、どれくらいOpenSocial的か。
OpenID + 通知の仕組みだけで十分じゃね?ってアプリが大杉。


とにかく敷居は凄い低い。
javascript知ってる人なら、作り方はmixiデベロッパーのヘルプを半日読むだけで十分。
OAuth関連だけはめんどっちいけど、1時間もググればサンプルコード見つかる。
理念とか出来ることを把握したければ田中洋一郎さんの本を買う。


まー手間暇かかんないんで、皆さんどんどん作っていきましょう。
悩んだり勉強会行ったりコンサル呼んだりする暇があったらさっさとコーディングした方がいいと思います。
「よくもこんなキチガイアプリを!」的なので溢れてるから、深く考えずに、超テキトーでいいっすよ、きっと、最初は。


↓田中洋一郎さんの本

にぎやか地図でTwitter検索をやろうと思って


APIを位置情報指定で呼び出したんだけど

座標がnullで返ってきちゃう。
"geo":null

他の項目にはこういうのとか入ってるけど、
"location":"iPhone: 35.681702,139.765457"
"location":"iPhone: kanagawa,35.681702,139.765457"
"location":"東京都"

値が安定しないからきっとフリー項目。
100件取得して、緯度経度っぽいの入ってるやつだけ表示ってやってもいいんだけど、取得データ捨てるのはエコじゃないし・・・

検索条件に「緯度経度あり」ってのを指定できるといいなと思いました。
でもまー座標は悪用されるとアレなんで隠してるんでしょうかね。

これからWebサービスを始めたい人の参考になれば。


サーバー

さくらインターネット専用サーバー ベーシック
初期費用8万円、月額9千円くらい。
1年近く使っててダウン無し。大手サービスも使ってる。超安定。


ドメイン管理

VALUE-DOMAIN
他と比較したこと無いけど、使いやすい感じ。


開発環境
いわゆるLAPP

CentOS5.2 
RedHatからのクセで

Apache 2
PHPはマルチスレッド向きじゃないけど、1系はmodが弱い気がするので

Postgresql 8.4
MySQLより融通が効いて好き

PHP 5 & APC
やっぱ開発速度がダントツ


開発管理

PukiWiki
TODOでも技術蓄積でもなんでもこい


サービス監視

nagios
高負荷時のアラート用

MRTG
時間帯別の負荷計測

visitors
apacheアクセス解析

pgFouine
DBの無駄を洗い出すクエリアナライザ

pgAdmin
ちょこっとしたDB作業に

さくら以外は一年以上前に使った感想ですが、なんかの参考に。


自宅サーバー

電気代がかかる。
うるさい。
マメに掃除しなきゃいけない。
プロバイダの都合や電源コード引っこ抜いたりでよく落ちる。
一番楽しかったのはこれ



coreserver CORE-A

月額500円でスクリプト、DB、メールが動かせる!
ただしサポート皆無の玄人志向。
cronは1時間に一回まで。
value-domainでドメイン管理してると設定が凄く楽。メールも面倒な設定不要。
サイトの規模が大きくなると転送量制限(15GB)で引っかかる。
重たいサービスが同居してると不安定。でも無料でサーバー移動できる。
SSHは一応あるけどちょっと不便。
イチからWebサービス始めるなら、とりあえずこれ



WebARENA suitePROv2

初期費用5,250円。月額8,820円。
仮想専用サーバー。
プロセス数の制限が厳しい。PHPで大規模サイトだとすぐこれに引っかかる。
何もしなくてもテレホタイムは重い。同居してる人らのせい?
自分には値段に見合うと思えなかった。
たぶんサポートは充実。
きっと専用サーバー初心者向け



さくらインターネット 専用サーバ ベーシック

初期費用79,800円、月額8,800円。
普通に専用サーバー。
OS入れて、SSHの接続確保までやってくれる。
なんでもできる。リソースは100%使える。重いのは自分のせい。
一年近く使ってるけどサーバーダウンは無し。
企業がサービスに使ったり、又貸しされてたり、信頼感は抜群。
2ch曰くサポートは若干弱いらしい。
ちゃんとサービスするならこれ
mixiアプリってiframeで動くからさ、リファラを見ればGETパラメーターは取れるのよ。
ただプログラム自体はキャッシュされるから、javascriptでごりごりやらなきゃいけないの。

とりあえず動作確認。

alert(document.referrer);

あとは split('&'); なり indexOf('=') をして・・・めんどくさければ、ここを参考に。

アプリはiframe内で動くので、リンクは当然 target="_top" で。
AJAXが苦手な方はどうぞ。


でも規約違反かもね。
「みだりに画面遷移をしてはいけない」ってあった気がする。
自己責任で。
category:コンビニ
category:イタリア料理
category:堤防釣り

とか。

これを使うと、国産地図サイトで良く使われてるリスト検索ができます。
自前でこういう階層を作れば絞り込んでっての検索も可能。

食事
 →和食
 →フランス料理
 →・・・
買い物
 →コンビニ
 →釣り
 →・・・
エンターテイメント
 →カラオケ
 →ボーリング場
 →・・・
・・・
・・・

foursquare の API 。
TOEIC400点の自分が http://groups.google.com/group/foursquare-api を読みながら頑張ってみた。

とりあえず、認証の要らない一番楽に使えそうなtip検索API。

パラメーターは
・緯度
・経度
・件数
・フリーワード

戻り値は
・tip(いわゆるコメント)の一覧
・venue(いわゆる場所)の情報

データ形式はXMLかJSON。コールバック関数は無し。
だからajax的に使うには一工夫。

サンプルコードをお披露目しようと思いましたが、説明書に「開発中だし負荷かけないでね!」って書いてあるような気がするので、止めときます。
実際開発中に何度もサーバーダウンしてたし。

なので実装例も万人が見られるものではなく、mixiアプリ限定で。

検索タブの右下の青いやつを押すと検索します。

田舎だと殆ど出ないので、都会で。
検索半径1km程度しかないので、繁華街とか主要駅を中心にして。


とりあえず、API(http://api.foursquare.com/v1/tips)に対する要望。

検索パラメーターはGoogle Local Srarch API 互換だと作りやすい
 geolat&geolng → sll にするとか
 中の人はgoogle出身ですし、サイト本体の地図はGoogleですし

範囲検索ができると表現がしやすい
 パラメーター名は当然sspnで

並は近い順だけじゃなくて、新しい順とかバリエーションがあるといい
 中心にギュッっと集まるのは見栄えがわるいの
 まあ携帯端末向けっぽいからこれでいいのかな

英語が達者でおせっかい焼きな人、foursquareの中の人に伝えて頂けると有難いです[^v^]/


他のAPI、特に更新系。そのうち試して書きますね。
APIが安定したらサンプルコードも載せまーす。

yum install perl-Crypt-SSLeay.i386

by CentOS 5.2


MovableType は2の頃から使ってますが、もうなんだか便利すぎて感動。
特にウィザード形式のインストールが最高。

昔はインストール適当でセキュリティホールなブログだらけでした。
ハックされてドリフ掲示板にされてたりして。

このアーカイブについて

このページには、過去に書かれたブログ記事のうち雑記:技術ネタカテゴリに属しているものが含まれています。

前のカテゴリは雑記:Webサービスです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。