<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
   <channel>
      <title>tonextone.com/type/</title>
      <link>http://tonextone.com/type/</link>
      <description></description>
      <language>ja</language>
      <copyright>Copyright 2008</copyright>
      <lastBuildDate>Sat, 29 Nov 2008 13:11:54 +0900</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>店舗情報の版管理 (skypefind の場合)</title>
         <description><![CDATA[<img src="http://tonextone.com/type/2008/11/29/1.search_result.png" /><br />
<img src="http://tonextone.com/type/2008/11/29/2.spot_detail.png" /><br />
<img src="http://tonextone.com/type/2008/11/29/3.spot_try_to_conflict.png" /><br />
<img src="http://tonextone.com/type/2008/11/29/4.spot_conflict.png" /><br />
<img src="http://tonextone.com/type/2008/11/29/5.spot_revise.png" /><br />
<img src="http://tonextone.com/type/2008/11/29/6.spot_revision_log.png" /><br />
<img src="http://tonextone.com/type/2008/11/29/7.spot_review.png" /><br />
<img src="http://tonextone.com/type/2008/11/29/8.spot_flag.png" /><br />
]]></description>
         <link>http://tonextone.com/type/2008/11/29-1311.html</link>
         <guid>http://tonextone.com/type/2008/11/29-1311.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">おもう</category>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
        
         <pubDate>Sat, 29 Nov 2008 13:11:54 +0900</pubDate>
      </item>
            <item>
         <title>The Art of SQL「10 章 戦力の結集」「11章 計略」から読み取ったこと。</title>
         <description><![CDATA[<ol>
  <li>
    スキーマのモデリング技法のうち重要なものは、以下の 2 つ。
    <dl>
      <dt>第3正規形(3NF)</dt>
      <dd>
        汎用的な(最適化されていない、中立的な)スキーマ。<br />
        マスター/ディテールもこっち。
      </dd>
      <dt>スタースキーマ</dt>
      <dd>
        データ・ウェアハウス用スキーマ。<br />
        分類のキーとなる「ディメンジョン」表。<br />
        各種「ディメンジョン」の組み合わせに対応する集計可能な値「メジャー」だけを含む「ファクト」表。<br />
      </dd>
    </dl>
  </li>
  <li>
    メタ設計よりも、サブタイプを使おう。<br />
    まだ、ピンと来ないので、引き続き、調べ中。
  </li>
</ol>

<dl>
  <dt>参考URL:</dt>
  <dd>
    <a href="http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19217-02/schemas.htm">スキーマのモデリング化技法</a>
  </dd>
  <dd>
    <a href="http://homepage2.nifty.com/mnakamura/dw/dwwords.html">データウェアハウス関連用語　解説</a>
  </dd>
</dl>
]]></description>
         <link>http://tonextone.com/type/2008/10/05-1616.html</link>
         <guid>http://tonextone.com/type/2008/10/05-1616.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">sql</category>
        
         <pubDate>Sun, 05 Oct 2008 16:16:50 +0900</pubDate>
      </item>
            <item>
         <title>The Art of SQL「4 章 策略」から読み取ったこと。</title>
         <description><![CDATA[<ol>
<li>効果的なフィルターとして働くカラムを見つける。</li>
<li>なるべく早い段階で、そのフィルターを適用する。</li>
</ol>

<h3>例1: 結合する前にフィルター</h3>

結合する前にフィルタリングできるならば、そうしたほうが速いに決まっている。<br />

<textarea name="code" class="sql" cols="50" rows="50">

-- before
SELECT A.x
 FROM ( A JOIN B ON A.a_id = B.a_id )
 WHERE B.y = 'foo' ;

-- after (faster)
SELECT A.x
 FROM ( A JOIN B ON B.a_id = A.a_id AND B.y = 'foo' ) ;

</textarea><br />

旧来の結合構文でも、同様。<br />

<textarea name="code" class="sql" cols="50" rows="50">

-- before
SELECT A.x
 FROM A, B
 WHERE A.a_id = B.a_id
 AND B.y = 'foo' ;

-- after (faster)
SELECT A.x
 FROM A, ( SELECT * FROM B WHERE B.y = 'foo' ) AS C
 WHERE A.a_id = C.a_id

</textarea><br />

<h3>例2: IN か EXISTS か？</h3>

サブクエリの内側のフィルターが効果的な場合は IN (非相関サブクエリ)<br />
サブクエリの外側のフィルターが効果的な場合は EXISTS (相関サブクエリ)<br />

ただし、相関サブクエリの結合キーには、インデックスを張るべし。<br />

<textarea name="code" class="sql" cols="50" rows="50">

-- A.z = 'bar' が効果的なフィルターである場合、
-- ( B.a_id にインデックスを張るのを忘れずに )
SELECT A.x
 FROM A
 WHERE A.z = 'bar' ;
 AND EXISTS( SELECT * FROM B WHERE B.a_id = A.a_id AND B.y = 'foo' ) ;

-- B.y = 'foo' が効果的なフィルターである場合、
SELECT A.x
 FROM A
 WHERE A.z = 'bar' ;
 AND A.a_id IN( SELECT B.a_id FROM B WHERE B.y = 'foo' ) ;

-- この場合、以下のようにも書ける、
SELECT C.x
 FROM (SELECT * FROM A WHERE A.z = 'bar' ) AS C, (SELECT * FROM B WHERE B.y = 'foo' ) AS D
 WHERE C.a_id = D.a_id ;

-- あるいは、
SELECT A.x
 FROM ( A JOIN B ON A.a_id = B.a_id AND A.z = 'bar' AND B.y = 'foo' );

</textarea><br />
]]></description>
         <link>http://tonextone.com/type/2008/09/15-2320.html</link>
         <guid>http://tonextone.com/type/2008/09/15-2320.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">sql</category>
        
         <pubDate>Mon, 15 Sep 2008 23:20:34 +0900</pubDate>
      </item>
            <item>
         <title>Re: Emacs の moccur-grep-find で特定のファイルを無視したい</title>
         <description><![CDATA[ずっと dmoccur を使ってたんだけど、
<blockquote>
( moccur-grep(-find)は、) find-file でファイルを開くことをしないので，dmoccur よりもはやく検索できますし，バッファが氾濫することもありません．
</blockquote>
だそうで試してみることにしました。<br />
<br />
で、まずは .svn/* とかを検索対象から省いてから速さを比較しようと思ったんだけれど、この「省き方」の情報が無い。<br />
<br />
そんな中、 id:higepon さんが moccur を愛用しているようだったので質問させていただいたところ、<br />
 <a href="http://d.hatena.ne.jp/higepon/20080717/1216264518" target="_blank">elisp を書いていただきました</a>。ありがとうございました!!!<br />
<br />
で、結論を言うと、<br />
どうやら、 moccur-grep(-find) でも、 dmoccur の設定(dmoccur-exclusion-mask)を、利用してくれるようです。<br />
 color-moccur.el を読めないなりに読んでみると、どうもそのようです。<br />
<br />
現在、以下のような設定で、試用中です。<br />
<textarea name="code" class="xml" cols="50" rows="50">
(setq moccur-grep-default-mask "\\.\\(html\\|php\\|js\\|css\\)$")
(load "color-moccur")
(setq dmoccur-recursive-search t)
(setq dmoccur-exclusion-mask (append '("\\~$" "\\.svn\\/") dmoccur-exclusion-mask))
(setq dmoccur-mask '("\\.\\(html\\|php\\|js\\|css\\)$"))
</textarea>
<br />
もともと dmoccur の設定があったせい(おかげ)で、<br />
id:higepon さんから教えていただいた設定を追加しても(しなくても)状況が変化せず、ちょっと混乱してしまいましたが、<br />
id:higepon さんの elisp も、期待どおりの動作をしています。<br />
<br />
まだ、試用を開始したばかりなので、もしかしたら、この結論も正しくないかもしれません。<br />
間違いなどあれば、ご指摘いただければ幸いです。<br />]]></description>
         <link>http://tonextone.com/type/2008/07/18-0038.html</link>
         <guid>http://tonextone.com/type/2008/07/18-0038.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">emacs</category>
        
         <pubDate>Fri, 18 Jul 2008 00:38:01 +0900</pubDate>
      </item>
            <item>
         <title>和訳してみた</title>
         <description><![CDATA[<a href="http://interglacial.com/hoj/hoj.html" target="_blank">"Higher-Order JavaScript" by Sean M. Burke</a> を和訳した。
<a href="/neta/hoj/hoj.html">"Higher-Order JavaScript"(ja)</a><br />
<br />
"Higher-Order" という表現に何か高尚なものを感じ、
JavaScript のすごいことが書いてあると期待し del.icio.us したものの、それっきりになっていたので。<br />
<br />
最初に斜め読みした段階で、実は、期待していたものではなく、
 Perl の人が「JavaScript で Perl を書く」ためのものであることがわかったのだが、<br />
 trivial なことでも良いので、何か吸収できるだろうと信じて、区切りの良いところまで訳してしまうことにした。<br />

以下、その過程で脳裏をよぎった物事:
<ul>
<li>
x.func = function() { return this; } ならば、<br />
x.func() の this は x 。<br />
x.func.apply(y) の this は y 。<br />
Function#apply(object, [arg, ..]) は、 prototype.js でいうと、Function#bind(object, arg, ...) 
</li>
<li>
<a href="http://prototypejs.org/api/" target="_blank">Prototype API Documentation</a> を読もう。要所でソースコードも。
</li>
<li>
Perl のリストという概念とか、 $arrayref = \@arrayref; $hashref = \%hashref とか、やっぱり変態的。
</li>
<li>
lisp のリストは俺的にしっくりくるか？ emacs lisp で hello world してみるか。
</li>
</ul>
]]></description>
         <link>http://tonextone.com/type/2008/01/03-2052.html</link>
         <guid>http://tonextone.com/type/2008/01/03-2052.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
        
         <pubDate>Thu, 03 Jan 2008 20:52:23 +0900</pubDate>
      </item>
            <item>
         <title>Google Maps API を SSL で使えるようにしてみる。</title>
         <description><![CDATA[<p style="border: 1px #cc6666 dotted; padding: 0.2em; color: #999999; font-size: 120%; font-weight: bold;">
2008/03 : /maps?file=api を書き換えるための正規表現のパターンを微調整しました。
</p>

<p style="border: 1px #cc6666 dotted; padding: 0.2em; color: #999999; font-size: 120%; font-weight: bold;">
2008/05/15 : 通りすがりさんの報告を受けて、正規表現のパターンをさらに微調整しました。
</p>

<p style="border: 1px #cc6666 dotted; padding: 0.2em; color: #999999; font-size: 120%; font-weight: bold;">
2008/07/25 : また API に変更があったようで、機能しなくなったので、
正規表現のパターンを緩めに調整しました。
</p>

Google Maps API は HTTPS では提供されていないらしい。<br />
(Google Analytics には HTTPS 版もある。というのは先日知りました。)<br />
<br />
しかし、HTTPS なページに、HTTP なリソースを読み込むと IE 曰く、<br />
「このページにはセキュリティで保護されている項目と保護されていない項目が含まれています」と。</br>
<br />
この問題を何とかしなければならない機会があったので、<br />
HTTPS な proxy をかまして何とかしてみた。<br />
<br />
要するに、 Ｇoogle Maps API を使うためには、普通
<p>http://maps.google.com/maps?file=api&amp;v=2&amp;key=...</p>
っていう JavaScript を読み込むけれども、<br />
まずこの JavaScript を https://(自前の proxy )経由でリクエストし、<br />
この JavaScript にハードコードされている http://... を<br />
https://(自前の proxy )経由でリクエストするように書き換えれば良いだけ。<br />

以下は PHP での例。

<p>
デモ: <a href="https://ssl.tonextone.com/neta/gmap_over_ssl/">https://ssl.tonextone.com/neta/gmap_over_ssl/</a> 
</p>
# SSL の証明書を買っていないので、その旨の警告は出ます。<br />
<br />

./rewrite_gmaps_api.php<br />
<textarea name="code" cols="50" rows="10" class="php">
require_once 'HTTP/Request.php';

if ($_SERVER["HTTPS"] == 'on') {
  $url_base = 'https://ssl.tonextone.com/neta/gmap_over_ssl/';
} else {
  $url_base = 'http://tonextone.com/neta/gmap_over_ssl/';
}

$url = 'http://maps.google.com/maps';
$url .= ($_SERVER["PATH_INFO"]) ? $_SERVER["PATH_INFO"] : '';
$url .= ($_SERVER["QUERY_STRING"]) ? '?'.$_SERVER["QUERY_STRING"] : '';

$proxy =& new HTTP_Request($url);
$proxy->setMethod(HTTP_REQUEST_METHOD_GET);
$status['proxy'] =& $proxy->sendRequest();

if (PEAR::isError($status['proxy'])) { $response = ''; }
else {
  $response = $proxy->getResponseBody();
  $response_header = $proxy->getResponseHeader();
}

$pattern = array(
                 '<"(http://[^/\.]+\.google\.com)">',
                 // '<"(http://[^/\.]+\.google\.com/intl/en_ALL/mapfiles/[0-9a-z]+/maps2)" *\+ *"(\.api/main\.js)">',
                 '<"(http://[^/\.]+\.google\.com/intl/en_ALL/mapfiles/)>',
                 '<"(http://(kh|mt)[0-9]+\.google)>',
                 );
$replacement = array(
                     '"'.$url_base.'proxy.php/\\1"',
                     // '"'.$url_base.'proxy.php/\\1\\2"',
                     '"'.$url_base.'proxy.php/\\1',
                     '"'.$url_base.'proxy.php/\\1',
                     );

$response = preg_replace($pattern, $replacement, $response);

header("Content-Type: {$response_header['content-type']}");
// header("Content-Length: {$response_header['content-length']}");
echo $response;
</textarea><br />
<br />
./proxy.php<br />
<textarea name="code" cols="50" rows="10" class="php">
require_once 'HTTP/Request.php';

$url = ($_SERVER["PATH_INFO"]) ? preg_replace('<^/>', '', $_SERVER["PATH_INFO"]) : '';
$url .= ($_SERVER["QUERY_STRING"]) ? '?'.$_SERVER["QUERY_STRING"] : '';

$proxy =& new HTTP_Request($url);
$proxy->setMethod(HTTP_REQUEST_METHOD_GET);
$status['proxy'] =& $proxy->sendRequest();

if (PEAR::isError($status['proxy'])) { $response = ''; }
else {
  $response = $proxy->getResponseBody();
  $response_header = $proxy->getResponseHeader();
}

header("Content-Type: {$response_header['content-type']}");
// header("Content-Length: {$response_header['content-length']}");
echo $response;
</textarea>]]></description>
         <link>http://tonextone.com/type/2007/10/02-0112.html</link>
         <guid>http://tonextone.com/type/2007/10/02-0112.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
        
         <pubDate>Tue, 02 Oct 2007 01:12:31 +0900</pubDate>
      </item>
            <item>
         <title>UserPrivateGroup の使いどころ</title>
         <description><![CDATA[<p>
unix 系のサーバにアカウントを作成する際に、<br />
<textarea name="code" cols="50" rows="10" class="js">
$ id someone ;
uid=1001(someone) gid=1001(someone) groups=1001(someone),500(project),10(wheel)
</textarea><br />
というように 'someone' のプライマリグループとして 'someone' を設定する事がある。<br />
このようなポリシー、またはこのような 'someone' グループを User Private Group というらしい。<br />
<br />
なんか意味無くグループ増えるだけじゃん…と思って、ここ最近では避けるようにしていたんだけど、<br />
本日ようやく使いどころがわかった。<br />
</p>
<p>
プロジェクトチームでファイルを共有する場合、
<ol>
<li>同じグループ 'project' に 'someone1', 'someone2' が参加している状態にして、</li>
<li>共有したいファイルの所有グループを 'project' にし、</li>
<li>グループ読み書き権限を付与しておく</li>
</ol>
…というのは良くあるケースだと思う。<br />
2,3 を実現するためには、それぞれ、 setGID, umask(002) を使ったりする。
</p>
<p>
このようなケースで、<br />
User Private Group ポリシーを採用していない場合、つまり<br />
<textarea name="code" cols="50" rows="10" class="js">
$ id someone1 ;
uid=1001(someone1) gid=500(project) groups=500(project),10(wheel)
$ id someone2 ;
uid=1002(someone2) gid=500(project) groups=500(project),10(wheel)
</textarea><br />
のような場合、共有したくないファイルを作成するのが難しい。<br />
普通にファイルを作成するだけで someone1:project の所有物となり、<br />
umask(002) の効果で、自動的に project グループで共有されてしまう。
</p>
<p>
一方、User Private Group ポリシーを採用していれば、<br />
普通にファイルを作成した場合は、 someone1:someone1 の所有物となり誰とも共有されず、<br />
project グループで共有されるのは setGID されたディレクトリ内だけになる。
</p>
<p>
この違いが、重要な場合もあるだろう。<br />
例えば、共有レンタルサーバの管理とかする場合は必須だろうと思う。
</p>

# umask のほうをディレクトリ毎に設定するのも一案だが、その方法は、まだ知らない。
]]></description>
         <link>http://tonextone.com/type/2007/09/23-0115.html</link>
         <guid>http://tonextone.com/type/2007/09/23-0115.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
        
         <pubDate>Sun, 23 Sep 2007 01:15:31 +0900</pubDate>
      </item>
            <item>
         <title>Apollo 雑感</title>
         <description><![CDATA[<a href="http://labs.adobe.com/technologies/apollo/" target="_blank">Adobe Labs - Apollo</a>
面白そうなので、HTML + JavaScript + CSS なウィジェットを作ってみた。<br />
<br />
まずは普通に、HTML + JavaScript + CSS で、<br />
GoogleBase のデータを JSONP で展開して入力を補完するっていう単純なものを作った。<br />
<a href="http://tonextone.com/neta/GDataCompletions/" target="_blank">http://tonextone.com/neta/GDataCompletions/</a><br />
<br />
で、これをウィジェットにする。<br />
全く変更なしで、さくっとウィジェット化できた！<br />
<a href="http://tonextone.com/neta/GDataCompletions/GDataCompletions.air" target="_blank">http://tonextone.com/neta/GDataCompletions/GDataCompletions.air</a><br />
<br />
↑この .air ファイルの実体は zip 書庫で、<br />
展開すると、HTML, JavaScript, CSS がそっくり入っている。<br />
確か Konfabulator(現 Y! widget) も、こういう設計だったと思う。<br />
(今は違うみたいですね)<br />
<br />
端的に言えば、Apollo は、<br />
これまでもいろいろあった Flash 系、HTML 系ウィジェット実行環境を統合する、<br />
Yet Another なウィジェット実行環境、という印象。<br />
]]></description>
         <link>http://tonextone.com/type/2007/03/23-0029.html</link>
         <guid>http://tonextone.com/type/2007/03/23-0029.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">javascript</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">presentation</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">userinterface</category>
        
         <pubDate>Fri, 23 Mar 2007 00:29:16 +0900</pubDate>
      </item>
            <item>
         <title>Firebug Lite の console.*(); の出力が改行されて欲しい件。</title>
         <description><![CDATA[早速、IE で <a href="http://www.getfirebug.com/lite.html" target="_blank">Firebug Lite</a> を使ってみているのだけれど、<br />
console.log(); などによる、コンソールへの出力が、改行されない。<br />
オシイ。とりあえず応急処置。<br />

<textarea name="code" class="js" cols="50" rows="10">
--- firebug.js  2006-12-08 14:43:38.750000000 +0900
+++ firebug_patched.js  2006-12-08 14:45:05.093750000 +0900
@@ -419,7 +419,7 @@
             }
             return "?";
         };
-        return String(value).replace(/[<>&"']/g, replaceChars);
+        return '<pre>' + String(value).replace(/[<>&"']/g, replaceChars) + '</pre>';
     }

     function objectToString(object)
</textarea><br />

追記: 12/25<br />
コメントでご連絡いただいた、
<a href="http://webos-goodies.jp/" target="_blank">WebOS Goodies</a>の歩行者さんによる <br />
<a href="http://webos-goodies.jp/archives/51017768.html" target="_blank">firebug Lite ブックマークレット</a>での修正箇所を参考に、以下のように変更した。<br />

<textarea name="code" class="js" cols="50" rows="10">
--- firebug.js  2006-12-25 15:11:05.750000000 +0900
+++ firebug_patched.js  2006-12-25 15:05:32.156250000 +0900
@@ -312,7 +312,7 @@
     {
         var row = consoleBody.ownerDocument.createElement("div");
         row.className = "logRow" + (className ? " logRow-"+className : "");
-        row.innerHTML = message.join("");
+        row.innerHTML = '<pre>' + message.join("") + '</pre>';
         appendRow(row);
     }

</textarea><br />

<a href="http://webos-goodies.jp/" target="_blank">WebOS Goodies</a>の歩行者さんは、
<blockquote>
var row = consoleBody.ownerDocument.createElement("pre");
</blockquote>
としているのだけど、<br />
これだと row.className に指定されているであろうスタイル等と干渉する気がしたので、<br />
innerHTML だけ、pre で囲んでみた。<br />
結果として IE6 でも改行反映された。]]></description>
         <link>http://tonextone.com/type/2006/12/08-1452.html</link>
         <guid>http://tonextone.com/type/2006/12/08-1452.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
        
         <pubDate>Fri, 08 Dec 2006 14:52:11 +0900</pubDate>
      </item>
            <item>
         <title>MT をもう少しちゃんと使ってみる。</title>
         <description><![CDATA[MT を使って何本かエントリを書いてみて:<br />
<ol>

<li>
本文中の改行の br タグへの変換が直感に反する。<br />
でも、そういうものとして定着してしまったのでしょう。<br />
郷に従います。<br />
</li>

<li>
サイドバーとかに表示させる、<br />
汎用性のある HTML のブロックを 'module' と呼び、<br />
その 'module' をまとめたものを 'widget' と呼ぶらしい。<br />
 'widget' 単位で管理することにした。<br />
</li>

</ol>
<br />
MT は、使い勝手よりも、カスタマイズの自由度が優先された、玄人向けの設計だと思う。<br />
それが、結局は、受け入れられたんだろうなぁ…と、いまさら思う。<br />
<br />
で、Vox は、そうじゃない市場向け、と。<br />
]]></description>
         <link>http://tonextone.com/type/2006/12/03-0106.html</link>
         <guid>http://tonextone.com/type/2006/12/03-0106.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">おもう</category>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">movabletype</category>
        
         <pubDate>Sun, 03 Dec 2006 01:06:47 +0900</pubDate>
      </item>
            <item>
         <title>svn 入門(その2)</title>
         <description><![CDATA[前エントリから続き。<br />
<br />
前の構成では、衝突の解消がうまく扱えてなかったので、<br />
「極力フロントエンドで調整する」という方針にしたがって、<br />
フロントエンドを変えてみた。<br />
<br />
現在の構成は以下の通り、<br />
<ul>
 <li>Subversion 1.3.2 (cygwin 版)</li>
 <li><u>meadow 3.00 (based on GNU Emacs 22.0.90.1)</u></li>
 <li><u>vc-svn.el (FSF 版)</u></li>
</ul>
<br />
.emacs の変更などはほとんど必要なかったはずだが、結局いろいろいじった。<br />
使っていないのに JDE やら、ECB までも最新にした(汗)。<br />
<span style="color: #999999;">
#<br />
# meadow の変更点について、蛇足。<br />
# <br />
# MULE-UCS は使わない前提になったようなので、該当部分をコメントにした。<br />
# <br />
# ;;; (load "un-define");; unicode<br />
# ;;; (load "un-tools");; unicode<br />
# <br />
# <br />
# ファイルを dired バッファにドロップすると、そのディレクトリにコピーされる!<br />
# (meadow 2 系までは、ドロップしたファイルが開いていた)<br />
# で、undo すると、dired 上でだけ消えるが、実際は消えない。<br />
# 逆に dired からはドラッグできない(一方通行)。<br />
# ちょっとキモイので、前の挙動に戻す設定がきっとあるはず。<br />
# <br />
# <br />
# w32-symlinks( Windows のショートカットを良きに計らってくれるやつ)<br />
# が無効っぽくなってたけど、w32-symlinks.el のコメント読んだりして、<br />
# 結局 (load ) の前に (setq ) したら上手くいった。<br />
# <br />
# (setq w32-symlinks-handle-shortcuts t)<br />
# (load "w32-symlinks")<br />
#<br />
</span>
<br />
これで、vc 経由の svn が、満足できるレベルで使えるようになった。<br />]]></description>
         <link>http://tonextone.com/type/2006/11/30-1644.html</link>
         <guid>http://tonextone.com/type/2006/11/30-1644.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">emacs</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">svn</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">versioning</category>
        
         <pubDate>Thu, 30 Nov 2006 16:44:53 +0900</pubDate>
      </item>
            <item>
         <title>svn 入門</title>
         <description><![CDATA[<ol>
  <li>運用中の最新ファイルでローカルの作業コピーを更新</li>
  <li> emacs(meadow) で編集</li>
  <li> ediff で差分確認</li>
  <li>更新</li>
</ol>
<br />
というのを手作業で繰り返すのはもうイヤだ。<br />
いい加減バージョン管理システムが必要だ。<br />
<br />
つーわけで、Subversion にスムーズに移行すべく調査、検討した。<br />]]></description>
         <link>http://tonextone.com/type/2006/11/16-1708.html</link>
         <guid>http://tonextone.com/type/2006/11/16-1708.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">emacs</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">svn</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">versioning</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">文字コード</category>
        
         <pubDate>Thu, 16 Nov 2006 17:08:28 +0900</pubDate>
      </item>
            <item>
         <title>JSONP / JSONScriptRequest</title>
         <description><![CDATA[最近 JSONP って呼ばれているものは:<br />
<br />
<dl>
<dt>1. JavaScript で script タグを生成する。</dt>
<dd>
<textarea name="code" class="xml" cols="50" rows="1">
<script src="/foo.cgi?callback=showResult&args=..."></script>
</textarea><br />
この例の場合は、script タグが生成されたタイミングで、<br />
<textarea name="code" class="xml" cols="50" rows="1">
/foo.cgi?callback=showResult&args=...
</textarea><br />
がリクエストされ、リクエスト変数に応じた動的な結果が返ってくる。
</dd>
<dt>2. 結果は JSON で返す。</dt>
<dd>
<textarea name="code" class="js" cols="50" rows="1">
{ results: [ {name: 'hoge'}, {name: 'fuga'}, ... ] }
</textarea><br />
</dd>
<dt>3. どうせなら…という事で、コールバック関数で wrap して返す。</dt>
<dd>
<textarea name="code" class="js" cols="50" rows="1">
showResult({ results: [ {name: 'hoge'}, {name: 'fuga'}, ... ] });
</textarea><br />
</dd>
</dl>
<br />
…で、showResult は別途実装…という一連の考え方のようだ。<br />
XMLHttpRequest になぞらえて JSONScriptRequest と呼ばれたりもしている。 <br />]]></description>
         <link>http://tonextone.com/type/2006/09/18-1440.html</link>
         <guid>http://tonextone.com/type/2006/09/18-1440.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">javascript</category>
        
         <pubDate>Mon, 18 Sep 2006 14:40:45 +0900</pubDate>
      </item>
            <item>
         <title>XMLHttpRequest と セッション</title>
         <description><![CDATA[PHP におけるセッション管理では、<br />
$_GET ではなく、$_POST でもなく、$_COOKIE からセッションID を受け取り、<br />
さらに、$_COOKIE 以外で半券(チケット)を受け取って、<br />
セッションID と照合して正当性を確かめるのが定石だ。<br />
<br />
1. $_COOKIE による受け取りが必要な理由:<br />
<blockquote>
1.1 悪意の第三者は、あなたのリクエストに含まれる $_GET, $_POST を、自由自在に変更する罠を作れる。<br />
1.2 PHP ではリクエスト変数($_GET, $_POST, $_COOKIE)によってセッションID を指定できる。<br />
</blockquote>
<br />
したがって、<br />
$_GET, $_POST でセッションIDを受け取るようなシステムでは、<br /> 
悪意の第三者が仕掛けた罠によって、<br />
悪意の第三者が指定したセッションID で、<br />
あなたのセッションが開始される可能性がある。<br />
<br />
2. $_COOKIE 以外での半券の受け取りが必要な理由:<br />
<blockquote>
2.1 悪意の第三者は、あなたのリクエストに含まれる $_GET, $_POST を、自由自在に変更する罠を作れる。<br />
2.2 ブラウザは、リクエストの際に、ドメイン・パスが一致する Cookie を、自動的に付加する。<br />
</blockquote>
<br />
したがって、<br />
半券による照合のないシステムでは、<br />
$_COOKIE だけでセッションが再開してしまい、<br />
悪意の第三者が仕掛けた罠によって、<br />
悪意の $_GET, $_POST が、あなたのセッションに混入する可能性がある。<br />]]></description>
         <link>http://tonextone.com/type/2006/08/29-2047.html</link>
         <guid>http://tonextone.com/type/2006/08/29-2047.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">ajax</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">javascript</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">security</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">session</category>
        
         <pubDate>Tue, 29 Aug 2006 20:47:14 +0900</pubDate>
      </item>
            <item>
         <title>VMWarePlayer で FreeBSD 5.5</title>
         <description><![CDATA[ムチャしても良い開発専用サーバが自宅に欲しくなったので、<br />
ちょうど手近に空いていた PC<br />
(3年以上前に買って、一回故障した ThinkPad R40 ,Win XP 入り)<br />
に、仮想開発サーバを導入した。<br />
<br />
最初は、coLinux を試したが、ネットワーク接続などの設定が面倒なのと、<br />
自宅の無線 LAN に、普通に参加させるのが難し(無理?)そうだったので、<br />
結局、VMWarePlayer にした。<br />]]></description>
         <link>http://tonextone.com/type/2006/08/29-0000.html</link>
         <guid>http://tonextone.com/type/2006/08/29-0000.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">やりくりする</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">VMware</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">coLinux</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">開発環境</category>
        
         <pubDate>Tue, 29 Aug 2006 00:00:00 +0900</pubDate>
      </item>
      
   </channel>
</rss>
