闇プロジェクト::zoe -4ページ目

web上の「My Documents」

収入と支出等をつけているエクセルのお小遣い帳や、
デジカメで撮った写真など、自分のファイルを皆さんは
どこに置いてますか。

一番多いのはきっと
My Documents
でしょうか。

今日、会社であるエクセルで作成した個人的メモ帳を
開こうとして、「My Documents」を探したのですが
見つかりませんでした。

それは、自宅のマシンに置いてたからです。
 
こんな経験ってありません?


ネットの繋がる場所ならどこからでもアクセス可能で、

webブラウザからアクセスでき、

エクスプローラ並みの使い心地をもった、
 (もちAjaxで待ち時間を感じさせない)


プライベート空間。
 (1Gバイト以上がベスト)

 
こんなのないのかな。
イイと思うんだけどな。


isi

Ajaxで郵便番号検索

このサイトを見て、僕もajaxやってみようと思い会社のマシンでajaxで郵便番号検索をやってみることにした。

1.郵便番号データをもらってくる 
 贅沢に全国一括を落とす。
 
2.MySQLに「yubin」テーブルを作成
CREATE TABLE `yubin` (
  `jiscode` int(5) default NULL,
  `old` varchar(5) default NULL,
  `new` varchar(7) default NULL,
  `fuken_kana` varchar(50) default NULL,
  `si_kana` varchar(50) default NULL,
  `mati_kana` varchar(100) default NULL,
  `fuken` varchar(100) default NULL,
  `si` varchar(100) default NULL,
  `mati` varchar(100) default NULL,
  `a` tinyint(1) default NULL,
  `b` tinyint(1) default NULL,
  `c` tinyint(1) default NULL,
  `d` tinyint(1) default NULL,
  `e` tinyint(1) default NULL,
  `f` tinyint(1) default NULL
) TYPE=MyISAM;


3.1で落としたcsvデータをなんとかして「yubin」テーブルへ作成
  phpMyAdminなどで~。

4.HTMLとjavascriptは上記サイト様から借用させて頂きました。

 HTMLの変更箇所は、エンコード部分
  前:
<?xml version="1.0" encoding="EUC-JP"?>

  後:
<?xml version="1.0" encoding="Shift_JIS"?>



 ajaxzip.jsの変更箇所は、サーバ側スクリプト呼出部分
  前:xmlHttp.open('GET', 'ajaxzip.cgi?z=' + escape(zip), true);
  後:xmlHttp.open('GET', 'xmlHttp.php?z=' + escape(zip), true);



5.サーバサイドの郵便番号検索のPHP(xmlHttp.php)は
<?php
require("DBconf.php");

// データベースへの接続
$db_link = mysql_connect('host', 'user', 'pass');
$db = "work";
$sql = "select * from yubin where new like '" . $_GET['z'] . "%'";
$rs = mysql_db_query($db,$sql);

$rows = mysql_num_rows($rs);

if ($rows > 0) {

	$row=mysql_fetch_array($rs);

    print "Content-Type: text/xml\n\n";
    print ("<?xml encoding=\"Shift_JIS\" version=\"1.0\" standalone=\"yes\"?><zip><pref>" 
    . $row["fuken"] . "</pref><city>" . $row["si"] . "</city><ville>" 
    . $row["mati"] . "</ville></zip>");
}

mysql_free_result($rs);
mysql_close($db_link);
?>





6.でもうごかないんだが  ...orz

一応、サーバからXMLを取得してはこれるんだけど、エンコードがミスってるようで、文字化けを起こしている。。
なんかXMLはUTF8かUTF16のUnicodeが基本らしく、それ以外の文字コードを使うときは「encoding=」で指定するらしいんだけど、どうにもだめ。

<?xml version='1.0' encoding='Shift_JIS'?>

これじゃだめなのぉ??
ちゃーんと基礎を勉強しないとな。



最近の個人的に気になるニュース

■「Ajax で画面遷移なしの Amazon 検索」 from NDO::Weblog
この1週間大盛り上がりの、Ajax。
Movable Type な Blogを検索出来たりとか色々と皆様秀逸なものが作られはじめていますが、僕みたいな素人でも、読み解きやすくご紹介していただいてるNDO様は、超参考になりますた。

Ajaxの定義
Ajax(Asynchronous JavaScript + XML、非同期なJavascriptとXMLの連携)は単一の技術ではなく、複合的な技術の呼称である。


Google Map,Gmail, Flickr, A9.com等々、すごい興味ありありだったんだけど、この、「画面遷移なしでサーバと交信できる技術」はなんて名前なんだろうと思ってたらやっと定義付けされたようです。
これからのWEBサービスのインターフェイスのスタンダードとなりそうな予感。
皆さんもし見たことないのであれば、是非一度体感してみてください。未来を垣間見れますよ!


■「旅行版グーグル大手サイト追撃」 from papativa.jp
AOLが買収したカヤックは60を超える「ネット予約サイトが提供する航空運賃やホテル宿泊料などの価格情報を一覧表示する」横断型の旅行専門検索サービス。

各々の旅行予約サイトの情報を、価格.comのように見せるんですね。
この手のなにかに特化した検索サービスは誰でも思いつくだけにサイトの使い勝手で大きく左右されるという側面もあるかも。


■「YahooがWeb API をリリース!」 from BLOGKID
GoogleAPIのyahoo版。さわってみたひ。。

Mojaviチュートリアル
初心者向けのMojaviのチュートリアルならここが1番わかりやすいです。鬼参照させていただいてます。



isi

続きを読む(・A ・) イクナイ!

blogを読んでいて僕がストレスを感じるのは、

「続きを読む」

としてTOPに記事全文を表示していないサイト構成のblogだ。
これって皆さんどうなんだろう。

あとamebaもだけど

「フォントサイズ固定のサイト」

やっぱり見にくい。
だって字が小さいのだもの。

う~ん。流行なのかなぁ。。
画面に出来るだけ情報を詰め込みたいなら
横幅(width)を100%使えばいいと思うんだけど。

isi

イコカ(ICOCA)でいこか!スイカ(SUICA)ですか!

関西在住のisiですが、イコカというICカード型の定期を使ってます。このカードの便利なところは、

・パスケースの中に入れてても改札機の読み取り部分で感知し改札を通ることが出来る。

・ICカードにお金をチャージでき、プリペイドカードとして使える。

ということです。
とても便利ですが、あまり感度が良くなくって改札で通れなかったことが何度もあります。
また、どうもICのメモリが正しくされてない場合がまれにあるようで、今日なんかは「改札を出た記録が無いぞエラー」が出て、帰りに改札へ入れなくって立ち往生しました。

こんな事はまぁ仕方ないことだとは思いますが、折角プリペイド機能があるんだからもっと色々付けて欲しいと思います。
例えば、

・キヨスクや自販機のものをカードで買いたい!

・チャージ残高が見たい。

・カード毎にユーザIDとか持ってるだろうから、ネットで新幹線とかの予約をそのIDで取ることが出来る。新幹線の改札はカードで通れると。

・カード自体がそもそも邪魔!携帯でいいじゃん。



こんな感じで考えてたらすでにJRさん動いてるみたいでした!
早く携帯で改札を抜けれるようになって欲しいです。



参照:JR東日本
「Suica」を「おサイフケータイ」に搭載した「モバイルSuica」
の導入により、信頼性の高い、斬新で魅力的なサービスの提供を
3社で推進します。

Suicaでお買い物ができる



JR東日本

JR西日本

#それにしてもJR西日本のサイト重いですΣ(・ε・;)

isi

電子メール

通勤電車でもっとも良く見かける光景として、「携帯とにらめっこ」状態の人があると思う。

「新着メールの確認」>(「その返信」)>「受信箱を意味無く見る」

僕を含め大半の人のフローはこんな感じ。

また、僕の統計(笑)ではオフィスで働く人の40%はモニター上にはメーラ開いている。これくらい目にする機会がある「電子メール」という生活密着型サービス。

皆さんそれぞれ便利に使われているとは思いますが、僕の一例として、

■todoリストとして使う
僕は家と会社での共通のwebメールとして、gmailを使っていますが、メールの振り分け機能としてラベルに「todo」というのを作っています。
家からでも携帯からでも、つまりどこでも思いついたときに「やらないといけないこと」をgmailにメールします。

件名:やらないといけない事柄のサマリー
    例「火曜日の店の予約」
本文:やらないといけない事柄の詳細 
    例「3/1の飲み会の店を予約する。メンバー5人。場所はxx駅周辺で」

こんな感じでメールしておき、件名で何をするかはわかるし、そのメールを開いたときに実行に移す。するとまだやってないことだけが、未開封になってるという仕組みです。

■メモ代わりに使う
メモ帳とか手帳とか付箋とかの紙媒体を持つことに慣れていないので、なんでもかんでもちょっとメモることがあれば、例のごとくgmailのラベルに「topics」というのにぶち込みます。


これは僕の一例でしかないですが、「電子メール」という名前に捕らわれずに考えると、なにやら便利なことが今まで以上に考えれるかも。

こんなに人に密着したサービスは無いので。


#そんな「電子メール」だけど携帯のメールとPCのメールを早く一元管理したいです。携帯メールはサーバで管理したほうがいいですよね?機種変とか落としたとか色々あるしさ。

isi

はてなのDB運用キター!

DBMagazine 4月号にて「数十台のMySQLサーバーで月間2億ページビューを支える「はてな」のDB運用の裏側すべて見せます!」として、はてなの伊藤さんの記事が!!

闇プロジェクトをやる上で課題である、システム構成の設計ですごーく勉強になりました!

isiもzoeもインフラとかシステム構成付近にあまり経験がないので、ネットサービスを立ち上げるときサーバどうするよ?というのが大きな問題で、是非ともはてなの構成が知りたかったので今日早速帰りに雑誌購入して帰り道の電車で一生懸命読みました(w

■リバースプロキシによるトラフィック分散
1つのリバースプロキシがリクエストの入り口となって、トラフィック分散して、複数あるwebサーバへリクエストを渡す。
なるほど~。分散の方法はどうしてるんでしょう??ランダムかなぁ。

■mysqlをレプリケーションする
1つのマスタから、複数のレプリカを作る。各々のテーブルは別サーバに置く。
マスタ:更新処理はマスタのみ。
レプリカ:参照のみ。はてなの大半のリクエストは参照。

■ストレージエンジンは?
マスタ:InnoDB
レプリカ:参照なのでMyISAM

■テーブルロックをなるべく回避
書き込みが頻発するテーブルをなるべく作らない
書き込みが頻発するテーブルと結合しないといけないテーブルを作らない

がちがちに正規化しないようにするのでしょうかね。
セッション情報とかを1つのテーブルに格納しないようにして、負荷分散すると。

■テーブルの結合をしない
別サーバの別DBのテーブル同士を1つのsqlで取れない。
いっそのこと2回sqlを投げたほうが速い。

これよりも
select
 b.name
from
 tbl1 a,
 tbl2 b
where
 a.id = '0001'
 and a.key = b.key;


こっちのがイイ
select
 a.key
from
 tbl1 a
where
 a.id = '0001';

select
 b.name
from
 tbl2 b
where
 b.key = [上のa.key];


■レプリカはメモリ上に全データを展開
なんとレプリカのリクエストから参照されるテーブルはすべてメモリに展開するらしいです!すげ~。
で、テーブルメモリに乗らなくなってきたらそのテーブルを分割するのだそう。
う~~。どうやってテーブルを分割するんだろう。分割できるようにテーブル内容を設計するにはどうしたらいいんかなぁ。。年月日でテーブルを分けるのかなぁ。

■オブジェクトは全部DBで管理する
画像、xmlとかをNFSを使わずDBに入れて使用


この他にも色々とほんとに楽しく勉強させて頂きました。
naoyaさん素敵すぎます!

SQLで「年度」を求める

「YYYY/MM/DD」から「年度」を求めるSQLを書いた。
ORACLEのファンクション。


/*------------------------------------
関数名称:FN_GET_KI
機能概要:年度を取得する
引数  :YYYYMMDD
戻り値 :年度
-------------------------------------*/

FUNCTION FN_GET_KI(P_YMD IN VARCHAR2)
RETURN VARCHAR2
AS
  -- 変数定義
  P_NENDO VARCHAR2(3);

BEGIN
  SELECT
  DECODE(
    TO_CHAR(TO_DATE(P_YMD,'YYYY/MM/DD'),'Q')
    ,'1',TO_CHAR(ADD_MONTHS(TO_DATE(P_YMD,'YYYY/MM/DD'),-12),'YYYY')
    ,SUBSTRB(P_YMD,1,4)
  )
  INTO P_NENDO
  FROM DUAL;

  RETURN P_NENDO;
EXCEPTION
  WHEN  OTHERS    THEN
    RETURN '**';
END FN_GET_KI;

mojaviのコアクラスと、主なメソッド

mojaviメモ

大体この辺から把握していくのかな。
うーん。フレームワークむずいよ。


参照:MVCフレームワークMojaviを使ってみよう

Controllerクラス(lib/Controller.class.php)
ユーザリクエストを受け付けて、プロセスフローを制御します。$controller変数としてアクションクラスやビュークラスからアクセスできます。

$controller->dispatch([$modName = null, $actName = null])
ユーザリクエストを処理する適切なアクションを決定して処理を任せます。フロントコントローラindex.phpから呼び出されます。引数にモジュール名とアクション名を与えることでMojaviをページコントローラ(9)として動作させることができます。

$controller->forward($modName, $actName)
引数で指定されたアクションにリクエストを転送します。しばしばアクションクラス内で使用されます。

$controller->getCurrentModule()
現在のモジュール名を取得します。
$controller->getCurrentAction()
現在のアクション名を取得します。


Requestクラス(lib/Request.class.php)
ユーザリクエストのパラメータをパースして保持します。パラメータの取得、更新、同一リクエスト内での値の受け渡し等のインタフェースを持ちます。$request変数としてアクションクラスやビュークラスからアクセスできます。Mojaviアプリケーションの開発では$_GET/$_POST等を直接操作することはありません。

$request->getParameter($name [, $value = 'NULL'])
ユーザリクエストから指定したパラメータの値を取得します。

$request->setParameter($name, $value)
リクエストパラメータの値を設定します。

$request->getAttribute($name)
指定されたリクエスト属性値を取得します。

$request->setAttribute($name, $value)
リクエスト属性値を設定します。

$request->getError($name)
指定された名称で登録されたエラーメッセージを取得します。

$request->setError($name, $message)
指定された名称でエラーメッセージを設定します。



Userクラス(lib/User.class.php)
ユーザ情報を保持します。ユーザの認証状態、権限、(主にリクエストをまたがって共有される)ユーザ属性へのインタフェースを持ちます。$user変数としてアクションクラスやビュークラスからアクセスできます。デフォルトではUserクラスの派生クラスPrivilegeUserが使用されます。

$user->isAuthenticated()
ユーザの認証状態を取得します。

$user->getAttribute($name[ , $namespace = 'org.mojavi'])
指定されたユーザ属性値を取得します。

$user->setAuthenticated($status)
ユーザの認証状態を設定します。

$user->addPrivilege($name[ , $namespace = 'org.mojavi'])
ユーザに指定された権限を付与します。

Gmail招待します

('A`)isiです…




先日blogで
「Gmail招待出来るようになったのでもし欲しい方いればコメントに書いておいて下さい。」と書いたとです。


しかも「でも限りがあるんで、先着順で。。」と応募殺到を期待していたとです。













幾ら待てども
だれも僕の招待を望んでません!

('A`)isiです…

('A`)isiです…

('A`)isiです…


誰か招待させてください(泣