<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>2inc.org</title>
	<atom:link href="http://2inc.org/feed" rel="self" type="application/rss+xml" />
	<link>http://2inc.org</link>
	<description>web屋の雑記</description>
	<pubDate>Sat, 15 Nov 2008 13:34:41 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>ja</language>
			<item>
		<title>#005</title>
		<link>http://2inc.org/portfolio/203.html</link>
		<comments>http://2inc.org/portfolio/203.html#comments</comments>
		<pubDate>Sat, 15 Nov 2008 09:23:14 +0000</pubDate>
		<dc:creator>inc</dc:creator>
		
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://2inc.org/?p=203</guid>
		<description><![CDATA[				
				
				
				
				download / 0574
				
				
				シンプルな感じで。これはロゴ部分テキストなので編集なしで使えるかと。
]]></description>
			<content:encoded><![CDATA[				<p>
				<a href="http://2inc.org/wp-content/uploads/2008/11/005"><img src="http://2inc.org/wp-content/uploads/2008/11/005.png" alt="005" /></a>
				</p>
				<p>
				<a href='http://2inc.org/wp-content/uploads/2008/11/005.zip'>download</a> / <a href="http://www.0574.jp/r3tem/ranklink.cgi?id=inc">0574</a>
				</p>
				<p>
				シンプルな感じで。これはロゴ部分テキストなので編集なしで使えるかと。</p>
]]></content:encoded>
			<wfw:commentRss>http://2inc.org/portfolio/203.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>HTMLを綺麗に保つ12の原則</title>
		<link>http://2inc.org/web/201.html</link>
		<comments>http://2inc.org/web/201.html#comments</comments>
		<pubDate>Sat, 15 Nov 2008 03:05:12 +0000</pubDate>
		<dc:creator>inc</dc:creator>
		
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://2inc.org/?p=201</guid>
		<description><![CDATA[				
				マイコミジャーナルにこんな記事が。
				
				
				HTMLを綺麗に保つ12の原則
				
				
				[原則1] HTML 4.01を採用する場合でもXHTML 1.0を採用する場 [...]]]></description>
			<content:encoded><![CDATA[				<p>
				マイコミジャーナルにこんな記事が。
				</p>
				<ul>
				<li><a href="http://journal.mycom.co.jp/news/2008/11/14/011/index.html">HTMLを綺麗に保つ12の原則</a></li>
				</ul>
				<blockquote>
				<p>[原則1] HTML 4.01を採用する場合でもXHTML 1.0を採用する場合でもStrict指定のDOCTYPEを使う</p>
				<p>[原則2] 文字コードの指定はhead要素で一番最初に記述する。&amp;は&amp;amp;のように表記する</p>
				<p>[原則3] 適切にインデントする</p>
				<p>[原則4] CSSとJavaScriptは外部ファイルに分離する</p>
				<p>[原則5] タグは適切にネストする。a要素にh1要素を入れるというのはインライン要素にブロック要素を含めているという典型的な例。h1要素の中でa要素を指定する必要がある</p>
				<p>[原則6] 不要なdiv要素を使わない</p>
				<p>[原則7] class属性には何を意味するかを適切に記載し、将来変更するかもしれないスタイル情報などを含めない</p>
				<p>[原則8] 書体はCSSで指定する。たとえば全部大文字で書くといったことはしないで、そういった場合にはCSSでtext-transform: uppercaseを使う</p>
				<p>[原則9] divのid属性やclass属性に不要な情報を書かないで、代わりにbody要素のclassにコンテンツの内容を意味する言葉を指定する</p>
				<p>[原則10] バリデーションを通してタグの閉じ忘れなどがないようにする。W3Cのバリデータが便利</p>
				<p>[原則11] 論理的な順序で記述する。たとえばフッターは先頭ではなく末尾になるべき</p>
				<p>[原則12] できることからする。既存のHTMLを書き換えるのは面倒だしCMSを使っている場合はおかしな記述を強要される。重要なのはHTMLをクリーンに保つ原則を知ったということにあり、次にHTMLを記述するときにできるところからはじめればいい</p>
				</blockquote>
				<p>
				コーディングに気を使う人には常識的な感じ。僕は1ファイルをムダに巨大化させるのは嫌なので、[原則9]みたいにbodyにclassふるんじゃなくてcss分けてるけどね。
				</p>
				<p>
				てか、そんな細かいことはどうでもよくてですね、HTMLを綺麗に保つために最も重要な項目が足りてない！
				</p>
				<p>
				「糞なデザインを採用しない」
				</p>
				<p>
				これ超重要。</p>
]]></content:encoded>
			<wfw:commentRss>http://2inc.org/web/201.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Can&#8217;t create a new threadが連発する件</title>
		<link>http://2inc.org/php/198.html</link>
		<comments>http://2inc.org/php/198.html#comments</comments>
		<pubDate>Sun, 09 Nov 2008 09:12:30 +0000</pubDate>
		<dc:creator>inc</dc:creator>
		
		<category><![CDATA[php]]></category>

		<category><![CDATA[apache]]></category>

		<category><![CDATA[負荷]]></category>

		<guid isPermaLink="false">http://2inc.org/?p=198</guid>
		<description><![CDATA[				
				とあるサイトにて、アクセス数が増加してくると
				
				
				Can&#8217;t create a new thread (errno 12); if you are not out o [...]]]></description>
			<content:encoded><![CDATA[				<p>
				とあるサイトにて、アクセス数が増加してくると
				</p>
				<p>
				Can&#8217;t create a new thread (errno 12); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug
				</p>
				<p>
				というエラーが連発し、ページが表示されなくなる現象に悩まされ中。コンソールでプロセスをみてみると、httpdが山のように・・・溢れています。。CPUの使用率も凄いことになってるし、Load Averageも高い。
				</p>
				<p><span id="more-198"></span></p>
				<p>
				そのページは外部サーバのページから引っ張ってきたデータと、自サーバのDBから引っ張ってきたデータをphpで集計して表示しているんだけど、どうもその処理待ちでプロセスがたまって上記エラーがでているっぽい。時間が経てば処理待ちが解消されるのか普通にページが表示されるようになるんだけど。ボトルネックは外部サーバとの通信負荷か？
				</p>
				<p>
				ページを表示するたびに外部サーバから毎回データを引っ張ってくるので、本当は「PEAR::Cache_Lite」なんかを使うべきなんだろうけど、リアルタイム性が重要な情報を表示しているためキャッシュの利用は不可。
				</p>
				<p>
				外部サーバとの通信負荷以外にも、とってきたデータに正規表現かけて多次元配列でごにょごにょしたりphpでいろいろやっているので、とりあえずそちらの負荷対策をやりましょうと。てことで、やった対策としては、
				</p>
				<ol>
				<li>Zend Optimizer 3の導入</li>
				<li>eAcceleratorの導入</li>
				<li>httpd.confでKeepAliveまわりの調整</li>
				</ol>
				<p>
				でphpの処理の高速化・負荷低減をはかりつつ、httpd.confの設定でhttpdプロセスが増えるのを押さえつつ、みたいなのを期待しましたが、あまり効果でずorz
				</p>
				<p>
				うーん、サーバスペックの増強が最後の手段だけど、、そもそもの仕組みに問題あるっぽいからなぁ。どうしたものか。
				</p>
				<h2>参考</h2>
				<ul>
				<li><a href="http://vine.1-max.net/zend.html">Zend Optimizerの導入(PHPの高速化)</a>（<a href="http://vine.1-max.net/">Vine Linuxで自宅サーバー</a>）</li>
				<li><a href="http://www.doyouphp.jp/tips/tips_eaccelerator.shtml">eAcceleratorを導入してみる</a>（<a href="http://www.doyouphp.jp/">Do You PHP?</a>）</li>
				<li><a href="http://www.atmarkit.co.jp/flinux/rensai/apache2_03/apache03b.html">httpd.confによるWebサーバの最適化</a>（<a href="http://www.atmarkit.co.jp/">@IT</a>）</li>
				</ul>
]]></content:encoded>
			<wfw:commentRss>http://2inc.org/php/198.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>#004</title>
		<link>http://2inc.org/portfolio/192.html</link>
		<comments>http://2inc.org/portfolio/192.html#comments</comments>
		<pubDate>Sat, 08 Nov 2008 08:01:17 +0000</pubDate>
		<dc:creator>inc</dc:creator>
		
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://2inc.org/?p=192</guid>
		<description><![CDATA[				
				
				
				
				download / 0574
				
				
				スタンダードな企業サイト的な。めんどかったので、横並びのナビゲーション部分はロールオーバー処理させてません。一応 [...]]]></description>
			<content:encoded><![CDATA[				<p>
				<a href="http://2inc.org/wp-content/uploads/2008/11/004/"><img src="http://2inc.org/wp-content/uploads/2008/11/0042.png" alt="004" /></a>
				</p>
				<p>
				<a href='http://2inc.org/wp-content/uploads/2008/11/004.zip' >download</a> / <a href="http://www.0574.jp/r3tem/ranklink.cgi?id=inc">0574</a>
				</p>
				<p>
				スタンダードな企業サイト的な。めんどかったので、横並びのナビゲーション部分はロールオーバー処理させてません。一応pngもzipに入れてますんで、適当にいじってください。<br />
				あ、あとどうもGlobalNavigation部分がIE6でおかしくなるっぽい。</p>
]]></content:encoded>
			<wfw:commentRss>http://2inc.org/portfolio/192.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>#003</title>
		<link>http://2inc.org/portfolio/185.html</link>
		<comments>http://2inc.org/portfolio/185.html#comments</comments>
		<pubDate>Sun, 26 Oct 2008 08:46:27 +0000</pubDate>
		<dc:creator>inc</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://2inc.org/?p=185</guid>
		<description><![CDATA[				
				
				
				
				download / 0574
]]></description>
			<content:encoded><![CDATA[				<p>
				<img src="http://2inc.org/wp-content/uploads/2008/10/003.png" alt="003" />
				</p>
				<p>
				<a href='http://2inc.org/wp-content/uploads/2008/10/003.zip'>download</a> / <a href="http://www.0574.jp/r3tem/ranklink.cgi?id=inc">0574</a></p>
]]></content:encoded>
			<wfw:commentRss>http://2inc.org/portfolio/185.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>プログラマーは最高の職業です。本当にありg(ry</title>
		<link>http://2inc.org/other/182.html</link>
		<comments>http://2inc.org/other/182.html#comments</comments>
		<pubDate>Sun, 28 Sep 2008 15:08:20 +0000</pubDate>
		<dc:creator>inc</dc:creator>
		
		<category><![CDATA[Other]]></category>

		<guid isPermaLink="false">http://2inc.org/?p=182</guid>
		<description><![CDATA[				
				プログラマーの格言
				
				
				泣ける。普通の人からしたらありえねーっていう笑い話かもしれんけど。
				
				
				まぁ正確には僕はプログラマーじゃないけど、結局IT系の制作 [...]]]></description>
			<content:encoded><![CDATA[				<ul>
				<li><a href="http://www2.biglobe.ne.jp/~oni_page/other/etc/pr03.html">プログラマーの格言</a></li>
				</ul>
				<p>
				泣ける。普通の人からしたらありえねーっていう笑い話かもしれんけど。
				</p>
				<p>
				まぁ正確には僕はプログラマーじゃないけど、結局IT系の制作・開発ってのはどれもこんな感じなんだと思う。前は何とかもう少しマシにならんかなとか思ってたけど、最近はもうこういう職業なんだと思うようになってきたわ。同じような職業の人間からは同じような話しか聞かんし、結局嫌なら転職ではなく職業自体を変えるかフリーになるしかないんだろな。まぁフリーになったって食えない確率の方が高いだろうけど。
				</p>
				<blockquote>
				<p>
				もし転職するとしたら、定時で帰ることを「逃げる」と呼ばない職業がいいですね。
				</p>
				</blockquote>
				<p>
				今思いついたけどこういうプログラマーとかweb屋とかのブックマーク集みたいなの欲しいなー。心の支え。結構需要ありそうじゃね。ジャンル（職種別）にRSS登録できるようにして随時新着記事を取得してですね。…あーだめだ、そんな負の固まりのようなサイト誰が見るねん。</p>
]]></content:encoded>
			<wfw:commentRss>http://2inc.org/other/182.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>とりあえずバージョン1と</title>
		<link>http://2inc.org/web/170.html</link>
		<comments>http://2inc.org/web/170.html#comments</comments>
		<pubDate>Sat, 23 Aug 2008 15:01:10 +0000</pubDate>
		<dc:creator>inc</dc:creator>
		
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://2inc.org/?p=170</guid>
		<description><![CDATA[				
				ミニブログを自作するといっていた件ですが、とりえあず形になりました。
				
				
				ミニブログサービス「clip」
				
				
				見た目それっぽくできてないですか？
				 [...]]]></description>
			<content:encoded><![CDATA[				<p>
				ミニブログを自作するといっていた件ですが、とりえあず形になりました。
				</p>
				<ul>
				<li><a href="http://mini.2inc.org/">ミニブログサービス「clip」</a></li>
				</ul>
				<p>
				見た目それっぽくできてないですか？<br />
				完全に自己満足です。はい。</p>
]]></content:encoded>
			<wfw:commentRss>http://2inc.org/web/170.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>PHPでミニブログ</title>
		<link>http://2inc.org/php/168.html</link>
		<comments>http://2inc.org/php/168.html#comments</comments>
		<pubDate>Sun, 17 Aug 2008 08:51:07 +0000</pubDate>
		<dc:creator>inc</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://2inc.org/?p=168</guid>
		<description><![CDATA[				
				前回の続きです。
				
				
				結構途中経過をすっとばしちゃったけど、だいぶ形にはなりました。
				一昔前のWeb日記です。本当にありがとうございました。
				
				
				 [...]]]></description>
			<content:encoded><![CDATA[				<p>
				<a href="http://2inc.org/php/166.html">前回</a>の続きです。
				</p>
				<p>
				結構途中経過をすっとばしちゃったけど、<a href="http://mini.2inc.org/users/inc">だいぶ形にはなりました</a>。<br />
				一昔前のWeb日記です。本当にありがとうございました。
				</p>
				<p>
				さすがにこのままではヘボすぎなんで、あとはコメントとユーザ登録ですかね、とりえあず。</p>
]]></content:encoded>
			<wfw:commentRss>http://2inc.org/php/168.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>PHPでログイン（認証）処理 + ログアウト</title>
		<link>http://2inc.org/php/166.html</link>
		<comments>http://2inc.org/php/166.html#comments</comments>
		<pubDate>Sun, 10 Aug 2008 09:33:55 +0000</pubDate>
		<dc:creator>inc</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://2inc.org/?p=166</guid>
		<description><![CDATA[				
				はい、ということで前回の続きです。
				
				
				チェックボックスで、Cookieを使った自動ログインできるようにしたのと、ログアウトの処理を加えました。
				
				index.php
				&#60;?php

  require('../common/define.php');
  require('../common/function.php');
  require('../Connections/DB.php');

  //セッションの開始（セッション名：memolog）
  session_name('memolog');
  session_start();

  //cookie用のkeyがDBに入っていてそれが一致したら自動ログイン
  if(isset($_COOKIE['mini_auto_login'])){
    $sql="
      SELECT name FROM mini_users
        WHERE
          auto='".myesc($_COOKIE['mini_auto_login'])."'    ";
    [...]]]></description>
			<content:encoded><![CDATA[				<p>
				はい、ということで<a href="http://2inc.org/php/157.html">前回</a>の続きです。
				</p>
				<p>
				チェックボックスで、Cookieを使った自動ログインできるようにしたのと、ログアウトの処理を加えました。
				</p>
				<h3>index.php</h3>
				<pre><code>&lt;?php

  require('../common/define.php');
  require('../common/function.php');
  require('../Connections/DB.php');

  //セッションの開始（セッション名：memolog）
  session_name('memolog');
  session_start();

  //cookie用のkeyがDBに入っていてそれが一致したら自動ログイン
  if(isset($_COOKIE['mini_auto_login'])){
    $sql="
      SELECT name FROM mini_users
        WHERE
          auto='".myesc($_COOKIE['mini_auto_login'])."'    ";
    $rs = mysql_query($sql,$DB) or die(mysql_error());
    $flg = mysql_num_rows($rs);
    login_update_info();
  }

  //postされたときに実行
  if($_SERVER['REQUEST_METHOD'] == "POST"){
    //nameとpwdがmini_usersに格納されているかチェック
    $sql="
      SELECT name FROM mini_users
        WHERE
          name='".myesc($_POST['name'])."' AND
          pwd='".sha1(myesc($_POST['pwd']))."'
    ";
    $rs = mysql_query($sql,$DB) or die(mysql_error());
    $flg = mysql_num_rows($rs);
    login_update_info();
  }

  //ログインページに移動+情報書き込みの関数
  function login_update_info(){
    global $DB;
    global $flg;
    //存在したら
    if(isset($flg) &#038;&#038; $flg!=""){
      //自動ログインにチェックがあったらsession_nameをクッキーに書き込む
      if(isset($_POST['auto']) &#038;&#038; $_POST['auto']=="1"){
        $key=sha1(uniqid(rand(),true));
        setcookie('mini_auto_login',$key,time()+3600*24*7);
        //update文用
        $sql_auto=",auto='".$key."'";
      }
      //IPとログイン時間を記憶
      $sql="
        UPDATE mini_users
          SET
            last_ip='".myesc($_SERVER['REMOTE_ADDR'])."',
            last_login='".myesc(date('Y-m-d H:i:s'))."'
            ".$sql_auto."
      ";
      $rs = mysql_query($sql,$DB) or die(mysql_error());
      //セッションIDを変更
      session_regenerate_id();
      //login.phpに飛ばす
      header("location:login.php");
    }
  }

?&gt;</code></pre>
				<p>
				一部関数化したけど、だいぶ長くなってしまって見づらいな。。あとCookieの中身の文字列がDBに格納してあったら即ログインするようにしてるんだけどこれってやっぱまずいんかな…。でもCookieにユーザ名とかパスワードとか持たせたくないからなぁ。
				</p>
				<h3>logout.php</h3>
				<pre><code>&lt;?php

  require('../common/define.php');
  require('../common/function.php');
  require('../Connections/DB.php');

  session_name("memolog");
  session_start();

  //自動ログインクッキーを削除
  if (isset($_COOKIE['mini_auto_login'])) {
    //DBからも情報を削除
    $sql="
        UPDATE mini_users
          SET
            auto=''
    ";
    $rs = mysql_query($sql,$DB) or die(mysql_error());
    setcookie('mini_auto_login', '', time()-42000, '/users/');
  }

  //セッション変数を全て解除する
  $_SESSION = array();

  //セッションクッキーを削除
  if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time()-42000, '/');
  }

  //最終的に、セッションを破壊する
  session_destroy();

  header("Location: ./index.php");

?&gt;</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://2inc.org/php/166.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>PHPでログイン（認証）処理</title>
		<link>http://2inc.org/php/157.html</link>
		<comments>http://2inc.org/php/157.html#comments</comments>
		<pubDate>Sun, 10 Aug 2008 03:23:55 +0000</pubDate>
		<dc:creator>inc</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://2inc.org/?p=157</guid>
		<description><![CDATA[				
				前回の記事で独自サービス作りたいと書きましたので、まずはログイン処理から作っていきましょうと。URLはhttp://mini.2inc.org/users/。
				
				
				
				とり [...]]]></description>
			<content:encoded><![CDATA[				<p>
				<a href="http://2inc.org/php/151.html">前回の記事</a>で独自サービス作りたいと書きましたので、まずはログイン処理から作っていきましょうと。URLは<a href="http://mini.2inc.org/users/">http://mini.2inc.org/users/</a>。
				</p>
				<p><span id="more-157"></span></p>
				<p>
				とりえあず、書いたスクリプトはこんな感じ。
				</p>
				<pre><code>&lt;?php

  require('../common/define.php');
  require('../common/function.php');
  require('../Connections/DB.php');

  //セッションの開始（セッション名：memolog）
  session_name('memolog');
  session_start();

  //$_SESSION['login']がtrueだったら自動ログイン
  //あとでチェックした人のみ方式を実装
  if(isset($_SESSION['login']) &#038;&#038; $_SESSION['login']=="true"){
      session_regenerate_id();
      $_SESSION['login']="true";
      header("location:login.php");
  }

  //postされたときに実行
  if($_SERVER['REQUEST_METHOD'] == "POST"){
    //nameとpwdがmini_usersに格納されているかチェック
    $sql="
      SELECT name FROM mini_users
        WHERE
          name='".myesc($_POST['name'])."' AND
          pwd='".sha1(myesc($_POST['pwd']))."'
    ";
    $rs = mysql_query($sql,$DB) or die(mysql_error());
    $flg = mysql_num_rows($rs);

    //存在したら
    if(isset($flg) &#038;&#038; $flg!=""){
      //IPとログイン時間を記憶
      $sql="
        UPDATE mini_users
          SET
            last_ip='".myesc($_SERVER['REMOTE_ADDR'])."',
            last_login='".myesc(date('Y-m-d H:i:s'))."'
      ";
      $rs = mysql_query($sql,$DB) or die(mysql_error());

      //セッションIDを変更
      session_regenerate_id();
      //$_SESSION['login']をtrueに
      $_SESSION['login']="true";
      //login.phpに飛ばす
      header("location:login.php");
    }

  }

?&gt;</code></pre>
				<p>
				セッションIDを変更するsession_regenerate_id()関数は変更前のセッションIDを残してしまうらしい。PHP5.1以降なら引数にtrueを指定することで変更前のセッションIDを削除可能ですが、それ以前だと自前スクリプトで削除しないとだめらしい。とりえあずそのスクリプトの書き方がわからんので…放置。
				</p>
				<p>
				ほんとはcookieとか使ってログインの状態を保持するんだろうけど、その場合だと$_SESSION['login']とかを持たせてたら良いんかな？
				</p>
				<p>
				まだログアウトがないからテストするのが不便ですね。てかlogin.phpに直アクセスされたら普通に見れちゃう状態なのでその辺の処理も必要だなー。
				</p>
				<h3>ちなみに</h3>
				<p>
				スクリプト中の「myesc」はこんな感じ。
				</p>
				<pre><code>function myesc($str){
	$str=eregi_replace("t","",$str);
	$str=eregi_replace("&lt;br&gt;","&lt;br /&gt;",$str);
	$str=eregi_replace("&lt;br /&gt;","",$str);
	$str=mysql_real_escape_string($str);
	return $str;
}</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://2inc.org/php/157.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
