<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>T&amp;T</title><link>http://w3-info.net</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/w3-info" /><description></description><language>ja</language><lastBuildDate>Sat, 28 Jan 2012 00:43:05 PST</lastBuildDate><generator>http://wordpress.org/?v=3.0.1</generator><sy:updatePeriod xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">hourly</sy:updatePeriod><sy:updateFrequency xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">1</sy:updateFrequency><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/w3-info" /><feedburner:info uri="w3-info" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>Bloggerがゆっくりしかし確かに成長していた件</title><link>http://feedproxy.google.com/~r/w3-info/~3/mtwSFerroWY/blogger.html</link><category>未分類</category><category>blogger</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">鷹本</dc:creator><pubDate>Sat, 28 Jan 2012 00:07:00 PST</pubDate><guid isPermaLink="false">http://w3-info.net/?p=1200</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>はてなブログが一般公開されたようなのでアカウントを取って見ました。使った感じとしてははてなダイアリー以上にテンプレの自由度は低めですがその分シンプルでこのままその良いところを伸ばしてくれればと思います。</p>

<p>で割りと好感触だったので他のサービスとの比較がしてみたくなりまして、LivedoorBlog、SeesaaBlog、FC2Blog、Blogger等も久しぶりに触って見た所、Bloggerが思いの外使えるようになっていたので、今回機能紹介などをしてみようかな、と。</p>

<p>自分がBloggerを最後まともに触ったのは確か2008年に入る前だったと思います、それ以降はずっとWordpressにどっぷりだったので。その頃はFC2blogが広告もなく、ブログサービスの中では一番質が高かったと記憶していますが、少しずつ改良進歩が重ねられ今となっては機能的にもFC2blogや今人気のLivedoorBlogとも引けを取らない出来になっていると感じます。</p>

<p>追記：<a href="http://souzou.fuzimoto.info/2012/01/blogger.html">今からブログを始める人に、僕が「blogger」をすすめるワケ | 想造ノート</a>おっとつい最近似た様な記事がヒットしてたのか……出すタイミング間違えたかも…</p>

<div class="more" padding-bottom:10px;>
		<div style="width:430px;margin-bottom:5px;">
			<script type="text/javascript"><!--
				google_ad_client = "pub-6696802667964685";
				/* Tools&amp;Toolz post-page */
				google_ad_slot = "2390815545";
				google_ad_width = 468;
				google_ad_height = 60;
				//-->
			</script>
			<script type="text/javascript"
				src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
			</script>
		</div>

<h4>◆主な機能・欠点</h4>

<ul>
<li>予約投稿機能(2008/05頃)</li>
<li>モバイルテンプレートあり＆カスタマイズ可(2011/11頃)</li>
<li>「続きを読む(追記)」機能(2009/09頃)</li>
<li>RSSの続きを読む以降をカットする機能(2010/12頃)</li>
<li>コメントのスパムフィルタリング機能(2010/08頃)</li>
<li>そこそこ詳しいアクセス解析機能(2010/07頃)</li>
<li>投稿プレビュー機能(2010/06頃)</li>
<li>固定ページ機能(2010/01頃)</li>
<li>android・iPhone用のアプリ</li>
<li>テンプレ・設定・ポスト・コメントのインポート・エクスポート機能(2008/09頃)</li>
<li>ブログ全体・ブログ全体のコメント・ポスト別のコメント・ラベル(タグ)別のRSSフィード</li>
<li>カテゴリ機能・トラックバック機能はなし(タグ機能はあり。トラックバックは有志が実現している)</li>
<li>少し重い気がする</li>
<li>Wiki記法などはついていない</li>
<li>1アカウントで複数ブログ可</li>
<li>1ブログ複数人で編集可</li>
<li>独自ドメイン可</li>
<li>プライベートブログ可(指定したユーザーのみ閲覧可)</li>
<li>広告はなし</li>
<li>管理画面が今風(去年頃)</li>
<li>テンプレートデザイナー機能(2010/06頃)</li>
</ul>

<p>分かるものは後ろに実装時期を記してあります（参考：<a href="http://www.kuribo.info/">クリボウの Blogger Tips</a>）。これを見るとここ一二年でかなりまともになったのがわかります。</p>

<h4>◆テンプレートデザイナー</h4>

<p>特にこの中で、テンプレートデザイナー機能は他のブログサービスにはない機能です。2010年の2月ごろにニュースになっているのを見て知っては居ましたが、当時は特に惹かれずスルーしていました。もったいなかった。テンプレートデザイナーは視覚的にテンプレートを弄ることができます。以下画像を使って簡単に解説します。</p>

<p><a href="/image/2012/Blogger_1.png"><img src="/image/2012/Blogger_1s.png" alt="テンプレート" title="" /></a><br />
基盤となるテンプレートは公式には30程置いてあるのでまずその中から好きなテンプレートを選びます。</p>

<p><a href="/image/2012/Blogger_2.png"><img src="/image/2012/Blogger_2s.png" alt="背景" title="" /></a><br />
背景は公式でかなりたくさんの数が用意されてあります。また自分で画像をアップロードして使用することも可能です。</p>

<p><a href="/image/2012/Blogger_3.png"><img src="/image/2012/Blogger_3s.png" alt="テーマカラー" title="" /></a><br />
一つの適当な色を選ぶことで、ブログタイトル・記事タイトル・記事本文の文字の色をいっぺんに調節することができます(個別に調節はアドバンスで可能)</p>

<p><a href="/image/2012/Blogger_4.png"><img src="/image/2012/Blogger_4s.png" alt="幅を調節" title="" /></a><br />
バーを動かすと動的にブログ全体の幅、サイドカラムの幅を調節することができます。</p>

<p><a href="/image/2012/Blogger_5.png"><img src="/image/2012/Blogger_5s.png" alt="レイアウト" title="" /></a><br />
1カラムデザイン、2カラム左サイドバー・右サイドバー、3カラム、4カラムなど選択するだけでデザインが変更できます。</p>

<p><a href="/image/2012/Blogger_6.png"><img src="/image/2012/Blogger_6s.png" alt="アドバンス" title="" /></a><br />
独自にCSSを追加することや、GoogleWebFontsAPIを利用して特殊なフォントを画像化することなく扱えたり、フォントのサイズ・色などを個別に変更できます。</p>

<p><a href="/image/2012/Blogger_8.png"><img src="/image/2012/Blogger_8s.png" alt="レイアウト" title="" /></a><br />
細かい配置はこの画面でカスタマイズできます。ガジェットの右下の「編集」を細かい設定をすることが出来、また左端に取っ手の付いたガジェットはヘッダより下ならば自由に配置することができます。ガジェットの追加は数千ある中から選ぶことができます。</p>

<p><a href="/image/2012/Blogger_7.png"><img src="/image/2012/Blogger_7s.png" alt="投稿のオプション" title="" /></a><br />
ブログの投稿の「編集」を押すとこんな感じ。</p>

<p><a href="/image/2012/Blogger_9.png"><img src="/image/2012/Blogger_9s.png" alt="テンプレート" title="" /></a><br />
必要と有らばテンプレートを直接いじることも出来ます。</p>

<hr/>

<p>勿論欠点はいくつも存在します。</p>

<ul>
<li>公式のテンプレがかなり少ない</li>
<li>アドバンスでいじれる所が少ない</li>
<li>記事の部分に何かを設置しようとすると(例えばはてなブックマークのアイコン)結局テンプレートを直に弄る必要が出てくる</li>
<li>非公式のテンプレートは公式で公開する場所が設けられておらず追加するのが面倒</li>
<li>非公式のテンプレートはガジェットの追加・移動と独自のCSSの追加しか対応していない</li>
</ul>

<p>壁紙を変えたり、色をちょろっと変えたりするくらいではやはり初期テンプレート臭さは残ってしまうので、結局CSSを自分で弄る必要が出てきます。また三番目のように少し凝ろうとするとテンプレートデザイナーだけではカバーしきれないことがどうしても出てきてしまいます。</p>

<p>しかし、他のブログサービスより少し自由度の高いガジェットの移動機能や段組を簡単に変更できることなどを考えると、デザインは弄りたいけどテンプレートをガリガリ弄るのは面倒のような場合には他のサービスよりも数段優秀ではないかと思います。（デザインを弄るのも面倒、適当に選んでそのまま使うという場合には逆に1と4の点で他のサービスよりも劣っていると感じます）</p>

<hr/>

<p>触ってみた感じでは最初に書いたように全く他のブログとも引けを取らない(簡単・気軽という点ではMarkdownや大量のテンプレを持つTumblrが一強だと思いますが)のですがその割に寂れ具合はどういうことなのかと思うところです(正直あんまりにもBloggerを使ってるブログを見ないので見るまでは今でもあんまりなのかと思っていました)。</p>

<p>WordPress程重くなくてもいいけどTumblrだと物足りない、という場合やサーバに金をかけずにそこそこのブログがやりたい。なんて場合にはBloggerは選択肢の一つに入れてみてはどうでしょうか。</p></div>
<p><a href="http://feedads.g.doubleclick.net/~a/quFCXnlGa1ncnEzPuGtkJmaO6CA/0/da"><img src="http://feedads.g.doubleclick.net/~a/quFCXnlGa1ncnEzPuGtkJmaO6CA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/quFCXnlGa1ncnEzPuGtkJmaO6CA/1/da"><img src="http://feedads.g.doubleclick.net/~a/quFCXnlGa1ncnEzPuGtkJmaO6CA/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/w3-info?a=mtwSFerroWY:QO5CXapc2Kc:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/w3-info?d=spdCosxkSQE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/w3-info?a=mtwSFerroWY:QO5CXapc2Kc:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/w3-info?d=OAQBO0PjnPA" border="0"></img></a>
</div>]]></content:encoded><description>はてなブログが一般公開されたようなのでアカウントを取って見ました。使った感じとしてははてなダイアリー以上にテンプレの自由度は低めですがその分シンプルでこのままその良いところを伸ばしてくれればと思います。 で割りと好感触だったので他のサービスとの比較がしてみたくなりまして、LivedoorBlog、SeesaaBlog、FC2Blog、Blogger等も久しぶりに触って見た所、Bloggerが思いの外使えるようになっていたので、今回機能紹介などをしてみようかな、と。 自分がBloggerを最後まともに触ったのは確か2008年に入る前だったと思います、それ以降はずっとWordpressにどっぷりだったので。その頃はFC2blogが広告もなく、ブログサービスの中では一番質が高かったと記憶していますが、少しずつ改良進歩が重ねられ今となっては機能的にもFC2blogや今人気のLivedoorBlogとも引けを取らない出来になっていると感じます。 追記：今からブログを始める人に、僕が「blogger」をすすめるワケ &amp;#124; 想造ノートおっとつい最近似た様な記事がヒットしてたのか……出すタイミング間違えたかも… ◆主な機能・欠点 予約投稿機能(2008/05頃) モバイルテンプレートあり＆カスタマイズ可(2011/11頃) 「続きを読む(追記)」機能(2009/09頃) RSSの続きを読む以降をカットする機能(2010/12頃) コメントのスパムフィルタリング機能(2010/08頃) そこそこ詳しいアクセス解析機能(2010/07頃) 投稿プレビュー機能(2010/06頃) 固定ページ機能(2010/01頃) android・iPhone用のアプリ テンプレ・設定・ポスト・コメントのインポート・エクスポート機能(2008/09頃) ブログ全体・ブログ全体のコメント・ポスト別のコメント・ラベル(タグ)別のRSSフィード カテゴリ機能・トラックバック機能はなし(タグ機能はあり。トラックバックは有志が実現している) 少し重い気がする Wiki記法などはついていない 1アカウントで複数ブログ可 1ブログ複数人で編集可 独自ドメイン可 プライベートブログ可(指定したユーザーのみ閲覧可) 広告はなし 管理画面が今風(去年頃) テンプレートデザイナー機能(2010/06頃) 分かるものは後ろに実装時期を記してあります（参考：クリボウの Blogger Tips）。これを見るとここ一二年でかなりまともになったのがわかります。 ◆テンプレートデザイナー 特にこの中で、テンプレートデザイナー機能は他のブログサービスにはない機能です。2010年の2月ごろにニュースになっているのを見て知っては居ましたが、当時は特に惹かれずスルーしていました。もったいなかった。テンプレートデザイナーは視覚的にテンプレートを弄ることができます。以下画像を使って簡単に解説します。 基盤となるテンプレートは公式には30程置いてあるのでまずその中から好きなテンプレートを選びます。 背景は公式でかなりたくさんの数が用意されてあります。また自分で画像をアップロードして使用することも可能です。 一つの適当な色を選ぶことで、ブログタイトル・記事タイトル・記事本文の文字の色をいっぺんに調節することができます(個別に調節はアドバンスで可能) バーを動かすと動的にブログ全体の幅、サイドカラムの幅を調節することができます。 1カラムデザイン、2カラム左サイドバー・右サイドバー、3カラム、4カラムなど選択するだけでデザインが変更できます。 独自にCSSを追加することや、GoogleWebFontsAPIを利用して特殊なフォントを画像化することなく扱えたり、フォントのサイズ・色などを個別に変更できます。 細かい配置はこの画面でカスタマイズできます。ガジェットの右下の「編集」を細かい設定をすることが出来、また左端に取っ手の付いたガジェットはヘッダより下ならば自由に配置することができます。ガジェットの追加は数千ある中から選ぶことができます。 ブログの投稿の「編集」を押すとこんな感じ。 必要と有らばテンプレートを直接いじることも出来ます。 勿論欠点はいくつも存在します。 公式のテンプレがかなり少ない アドバンスでいじれる所が少ない 記事の部分に何かを設置しようとすると(例えばはてなブックマークのアイコン)結局テンプレートを直に弄る必要が出てくる 非公式のテンプレートは公式で公開する場所が設けられておらず追加するのが面倒 非公式のテンプレートはガジェットの追加・移動と独自のCSSの追加しか対応していない 壁紙を変えたり、色をちょろっと変えたりするくらいではやはり初期テンプレート臭さは残ってしまうので、結局CSSを自分で弄る必要が出てきます。また三番目のように少し凝ろうとするとテンプレートデザイナーだけではカバーしきれないことがどうしても出てきてしまいます。 しかし、他のブログサービスより少し自由度の高いガジェットの移動機能や段組を簡単に変更できることなどを考えると、デザインは弄りたいけどテンプレートをガリガリ弄るのは面倒のような場合には他のサービスよりも数段優秀ではないかと思います。（デザインを弄るのも面倒、適当に選んでそのまま使うという場合には逆に1と4の点で他のサービスよりも劣っていると感じます） 触ってみた感じでは最初に書いたように全く他のブログとも引けを取らない(簡単・気軽という点ではMarkdownや大量のテンプレを持つTumblrが一強だと思いますが)のですがその割に寂れ具合はどういうことなのかと思うところです(正直あんまりにもBloggerを使ってるブログを見ないので見るまでは今でもあんまりなのかと思っていました)。 WordPress程重くなくてもいいけどTumblrだと物足りない、という場合やサーバに金をかけずにそこそこのブログがやりたい。なんて場合にはBloggerは選択肢の一つに入れてみてはどうでしょうか。</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://w3-info.net/blogger.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://w3-info.net/blogger.html</feedburner:origLink></item><item><title>「画像を使わずに見出しを水平線で挟むCSS小技」をspan無しで実現してみた</title><link>http://feedproxy.google.com/~r/w3-info/~3/Tcz5aepUF7Y/centered-heading-horizontal-line.html</link><category>Webサイト制作の心得とテク</category><category>css</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">鷹本</dc:creator><pubDate>Mon, 07 Nov 2011 22:05:14 PST</pubDate><guid isPermaLink="false">http://w3-info.net/?p=1189</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>元記事：<a href="http://kachibito.net/web-design/centered-heading-horizontal-line.html">画像を使わずに見出しを水平線で挟むCSS小技 &#8211; かちびと. net</a></p>
<p>何となくspanを使うのが気に入らなかったのでちょっと試してみた。</p>
<p><code>
<pre>
&lt;html&gt;
&lt;style&gt;
h1{
    margin:0;
    padding:0;
    font-family: 'Sorts Mill Goudy',serif;
    line-height: 1.5;
    font-size:30px;
}
p{
    text-align:left;
}
html,body{
    width:100%;
    padding:0;
    margin:0;
}

div#body1{
    text-align: center;
    position:relative;
}
#body1 h1 {
    background: none repeat scroll 50% 50% white;
    display:inline-block;
    text-align: center;
    padding:0px 20px;
}
#body1 h1:before {
    border-top: 1px solid black;
    content: &quot;&quot;;
    display: block;
    margin: 23px 0 0;
    position: absolute;
    left:0;
    width: 100%;
    z-index: -1;
}

#body2 h1{
    position:relative;
    text-align:center;
}
#body2 h1:before {
    border-top: 1px solid black;
    content: &quot;&quot;;
    display: block;
    margin: 23px 0 0;
    position: absolute;
    width: 100%;
    z-index: -1;
}
#body2 h1:first-line {
    background:white;
}
&lt;/style&gt;
&lt;body&gt;
&lt;div id=&quot;body1&quot;&gt;
&lt;h1&gt;
Kachibito
&lt;/h1&gt;
&lt;p&gt;Applicake chocolate cake carrot cake sweet roll icing marshmallow powder cake. Biscuit caramels faworki donut jujubes. Toffee dragée bonbon. Soufflé cookie topping powder jelly cookie I love. I love chocolate bar bonbon carrot cake chocolate bar caramels pastry. Pie I love candy applicake bonbon lemon drops. Dragée sweet roll cupcake I love gingerbread danish croissant cotton candy jelly-o. Topping croissant chocolate marshmallow oat cake I love. Pastry chocolate cake pudding cookie dessert marzipan topping wafer I love. Jujubes apple pie sugar plum marzipan I love dragée candy soufflé cotton candy. Sugar plum carrot cake liquorice faworki marzipan tiramisu. Wafer gummies croissant sweet I love. Dessert cake I love liquorice halvah halvah. Tootsie roll candy canes carrot cake chocolate bar gummi bears powder pie cheesecake carrot cake. Oat cake donut gummies soufflé. Sweet sesame snaps cake chupa chups caramels chupa chups.&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;body2&quot;&gt;
&lt;h1&gt;
Kachibito
&lt;/h1&gt;
&lt;p&gt;Applicake chocolate cake carrot cake sweet roll icing marshmallow powder cake. Biscuit caramels faworki donut jujubes. Toffee dragée bonbon. Soufflé cookie topping powder jelly cookie I love. I love chocolate bar bonbon carrot cake chocolate bar caramels pastry. Pie I love candy applicake bonbon lemon drops. Dragée sweet roll cupcake I love gingerbread danish croissant cotton candy jelly-o. Topping croissant chocolate marshmallow oat cake I love. Pastry chocolate cake pudding cookie dessert marzipan topping wafer I love. Jujubes apple pie sugar plum marzipan I love dragée candy soufflé cotton candy. Sugar plum carrot cake liquorice faworki marzipan tiramisu. Wafer gummies croissant sweet I love. Dessert cake I love liquorice halvah halvah. Tootsie roll candy canes carrot cake chocolate bar gummi bears powder pie cheesecake carrot cake. Oat cake donut gummies soufflé. Sweet sesame snaps cake chupa chups caramels chupa chups.&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p></code></p>
<p>2パターン。1は割りとオーソドックスな感じ、外にtext-align:center:とposition:relative;が必要、だけど元ネタと同じように自由にデザインできる。もう片方は:first-line擬似要素をspanの代わりに使って実現してある。paddingが使えないのでデザイン的に微妙。</p>
<p>どちらも;before擬似要素を使ってあるのでIE6-7非対応。もうちょっとうまくやれる気がするけど今のところ思い浮かばない。</p>
<p>結論：おとなしくjQueryを使おう。</p>

<p><a href="http://feedads.g.doubleclick.net/~a/89oy9BCP59DhOydxpKVnuN4-tbg/0/da"><img src="http://feedads.g.doubleclick.net/~a/89oy9BCP59DhOydxpKVnuN4-tbg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/89oy9BCP59DhOydxpKVnuN4-tbg/1/da"><img src="http://feedads.g.doubleclick.net/~a/89oy9BCP59DhOydxpKVnuN4-tbg/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/w3-info?a=Tcz5aepUF7Y:U78EhgwUwQ8:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/w3-info?d=spdCosxkSQE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/w3-info?a=Tcz5aepUF7Y:U78EhgwUwQ8:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/w3-info?d=OAQBO0PjnPA" border="0"></img></a>
</div>]]></content:encoded><description>元記事：画像を使わずに見出しを水平線で挟むCSS小技 &amp;#8211; かちびと. net 何となくspanを使うのが気に入らなかったのでちょっと試してみた。 &amp;#60;html&amp;#62; &amp;#60;style&amp;#62; h1{ margin:0; padding:0; font-family: 'Sorts Mill Goudy',serif; line-height: 1.5; font-size:30px; } p{ text-align:left; } html,body{ width:100%; padding:0; margin:0; } div#body1{ text-align: center; position:relative; } #body1 h1 { background: none repeat scroll 50% 50% white; display:inline-block; text-align: center; padding:0px 20px; } #body1 h1:before { border-top: 1px solid black; content: [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://w3-info.net/centered-heading-horizontal-line.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://w3-info.net/centered-heading-horizontal-line.html</feedburner:origLink></item><item><title>android携帯を使ってノートを電子化してiPadで見る為のフローチャート</title><link>http://feedproxy.google.com/~r/w3-info/~3/Xm0La0tkl30/cte-android-ipad0.html</link><category>未分類</category><category>android</category><category>iPad</category><category>電子化</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">鷹本</dc:creator><pubDate>Thu, 18 Aug 2011 17:51:54 PDT</pubDate><guid isPermaLink="false">http://w3-info.net/?p=1187</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>お久しぶりです。最近は体調も良くおかげで漸く受験勉強がまともとまでは行きませんが、出来る様になってきました。まあそのおかげでこっちの更新は全く手つかずになっていた訳ですが。ともかく今回はその勉強関係で一つ。（内容自体は続きを読むからどうぞ）</p>

<h4>割と誰でもノート遍歴を持っていると思いますが、</h4>
<p>私の場合はサイズはずっとB5でしたが、普通のノート→ルーズリーフ→方眼紙となってきました。ノート→ルーズリーフはノートを忘れて順番が滅茶苦茶になるのに嫌気が差した為。ルーズリーフ→方眼紙は後で纏めはするけどそれまでにバラバラになって順番が分からなくなる事が頻発した為に乗り換えました。</p>

<p>よくよく考えてみればルーズリーフ→方眼紙は「最初からバインダーに纏めてノートとして使う」とか「ページ毎に教科名とページ数書く」をするだけで改善する話なのですが、不精な私としては面倒くさかった訳です。</p>

<h4>さて今回。今度はノートの管理が面倒くさくなりました。</h4>
<p>これまではノートを見返してこなかったのでさしてコレの管理の手間は無かったのですが、最近になって2年分程見返さなくなってきました。</p>

<p>一つの学期のノート消費量は大体ハリポタ一冊分の厚みくらいになります。これはもう不精の私に管理は面倒くさいと言うより無理です。まず必要な部分を引っ張り出して来るのが面倒くさいです。必要なモノを各箇所から引っ張り出した後、また元の場所に戻すのはさらに面倒くさいのでかなりの確立でテキトーな所に仕舞います。（以下ループ）</p>

<p>そんな混沌(主に机の上)の世界に現れた救世主が電子化ですよ！　丁度iPadも買いましたし、整理は圧倒的にこっちの方がラクです。当然<a href="http://blog.livedoor.jp/dankogai/archives/51214980.html">複数を同時にプレイするのが難しい</a>と言ったデメリットがありますが、ノートとしての用途ならさほど問題になりません。という事でいってみましょう。</p>

<div class="more" padding-bottom:10px;>
		<div style="width:430px;margin-bottom:5px;">
			<script type="text/javascript"><!--
				google_ad_client = "pub-6696802667964685";
				/* Tools&amp;Toolz post-page */
				google_ad_slot = "2390815545";
				google_ad_width = 468;
				google_ad_height = 60;
				//-->
			</script>
			<script type="text/javascript"
				src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
			</script>
		</div>
<h4>◆大体の流れはこんな感じ</h4>
<p><a href="/image/2011/08/cte-android-ipad0.jpeg"><img src="/image/2011/08/cte-android-ipad0s.jpeg" alt="ワークフロー" /></a></p>

<p>今回はスキャナーを持っていないので一番上のルートを主に紹介する感じになります。あ、あと画像には書き忘れてしまいましたが、黄緑の一番上と一番下はWiFi経由でのファイル共有となるので、家庭内無線LAN等がない場合は出来ません。</p>

<h4>◆まずCamScannerでの取り込みですが、</h4>

<p>まず同種のアプリを使っても問題は無いと思いますが、殆ど使った事がないので解説は避けます。</p>

<ol>
<li>起動して<a href="/image/2011/08/cte-android-ipad2.png">左下</a>のボタンを押す。</li>
<li>カメラが起動されるのでノートを写真に撮る。*1 *2</li>
<li>画像処理画面になったら画像の向きを直し、鮮明化モードを選び、緑の枠がきちんとノートに合っているか確認して右下のチェックマークを押す。</li>
</ol>

<dl>
<dt>*1</dt>
<dd>バッチモードになっていると画像処理画面はスキップされます。鮮明化モードは前回選んだ物が適応されます。</dd>
<dt>*2</dt>
<dd>取り込みは昼間やる事（結構ぼけます）。また紙が重ねて積んだ状態で撮ると自動範囲取得に失敗しやすい為注意。</dd>

<p>上の*2を注意してやればバッチモードでカシャカシャと撮っていくだけで済むので意外と簡単です。ただ無料版は(現在)3回までしか同時に撮れません。詳しい制限はAndroidMarketの説明を参照。</p>

<p>画像を確認して、自動取得が失敗していた場合は<a href="/image/2011/08/cte-android-ipad3.png">下中央</a>の再編集ボタンから手動でやり直します。ぼけていた場合は再度<a href="/image/2011/08/cte-android-ipad1.png">左下</a>のボタンから取り直して<a href="/image/2011/08/cte-android-ipad1.png">右下</a>の鉛筆マークで並び替え・削除の編集作業をします。</p>

<h4>◆次にOn Airを使いサーバを立てます。</h4>

<p>使い方は<a href="http://www.teradas.net/archives/1445/">AndroidのSDカードをWi-Fi経由で読み書きできるアプリ「On Air」(非rootでもOK)</a>に十分詳しく乗っているのでこちらを参考にして、パスワードを固定化してFTPかWebDAVで立てます。</p>

<h4>◆最後にiPadのGoodReaderを起動して</h4>

<p>Connect to ServersのAddボタンからサーバ登録をすれば完成です。</p>

<h4>◆GoodReaderを買いたくないでござるって人は</h4>

<p>遅いですが、SideBooksはDropboxに対応しているのでそれを経由して送れば大丈夫です。というかGoodReaderの場合でも特別急がないならばDropbox経由の方が同時に操作しなくて良い分楽ちんです。AndroidからDropboxにファイルを投げるのは<a href="/image/2011/08/cte-android-ipad1.png">右から二番目の良く分からないボタン</a>からが一番簡単かと思います。</p>

<p>以上です。</p></div>
<p><a href="http://feedads.g.doubleclick.net/~a/-kV3l57TSIE6ydYaf_kkGM3j42w/0/da"><img src="http://feedads.g.doubleclick.net/~a/-kV3l57TSIE6ydYaf_kkGM3j42w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/-kV3l57TSIE6ydYaf_kkGM3j42w/1/da"><img src="http://feedads.g.doubleclick.net/~a/-kV3l57TSIE6ydYaf_kkGM3j42w/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/w3-info?a=Xm0La0tkl30:nVxukL8yaCw:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/w3-info?d=spdCosxkSQE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/w3-info?a=Xm0La0tkl30:nVxukL8yaCw:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/w3-info?d=OAQBO0PjnPA" border="0"></img></a>
</div>]]></content:encoded><description>お久しぶりです。最近は体調も良くおかげで漸く受験勉強がまともとまでは行きませんが、出来る様になってきました。まあそのおかげでこっちの更新は全く手つかずになっていた訳ですが。ともかく今回はその勉強関係で一つ。（内容自体は続きを読むからどうぞ） 割と誰でもノート遍歴を持っていると思いますが、 私の場合はサイズはずっとB5でしたが、普通のノート→ルーズリーフ→方眼紙となってきました。ノート→ルーズリーフはノートを忘れて順番が滅茶苦茶になるのに嫌気が差した為。ルーズリーフ→方眼紙は後で纏めはするけどそれまでにバラバラになって順番が分からなくなる事が頻発した為に乗り換えました。 よくよく考えてみればルーズリーフ→方眼紙は「最初からバインダーに纏めてノートとして使う」とか「ページ毎に教科名とページ数書く」をするだけで改善する話なのですが、不精な私としては面倒くさかった訳です。 さて今回。今度はノートの管理が面倒くさくなりました。 これまではノートを見返してこなかったのでさしてコレの管理の手間は無かったのですが、最近になって2年分程見返さなくなってきました。 一つの学期のノート消費量は大体ハリポタ一冊分の厚みくらいになります。これはもう不精の私に管理は面倒くさいと言うより無理です。まず必要な部分を引っ張り出して来るのが面倒くさいです。必要なモノを各箇所から引っ張り出した後、また元の場所に戻すのはさらに面倒くさいのでかなりの確立でテキトーな所に仕舞います。（以下ループ） そんな混沌(主に机の上)の世界に現れた救世主が電子化ですよ！　丁度iPadも買いましたし、整理は圧倒的にこっちの方がラクです。当然複数を同時にプレイするのが難しいと言ったデメリットがありますが、ノートとしての用途ならさほど問題になりません。という事でいってみましょう。 ◆大体の流れはこんな感じ 今回はスキャナーを持っていないので一番上のルートを主に紹介する感じになります。あ、あと画像には書き忘れてしまいましたが、黄緑の一番上と一番下はWiFi経由でのファイル共有となるので、家庭内無線LAN等がない場合は出来ません。 ◆まずCamScannerでの取り込みですが、 まず同種のアプリを使っても問題は無いと思いますが、殆ど使った事がないので解説は避けます。 起動して左下のボタンを押す。 カメラが起動されるのでノートを写真に撮る。*1 *2 画像処理画面になったら画像の向きを直し、鮮明化モードを選び、緑の枠がきちんとノートに合っているか確認して右下のチェックマークを押す。 *1 バッチモードになっていると画像処理画面はスキップされます。鮮明化モードは前回選んだ物が適応されます。 *2 取り込みは昼間やる事（結構ぼけます）。また紙が重ねて積んだ状態で撮ると自動範囲取得に失敗しやすい為注意。 上の*2を注意してやればバッチモードでカシャカシャと撮っていくだけで済むので意外と簡単です。ただ無料版は(現在)3回までしか同時に撮れません。詳しい制限はAndroidMarketの説明を参照。 画像を確認して、自動取得が失敗していた場合は下中央の再編集ボタンから手動でやり直します。ぼけていた場合は再度左下のボタンから取り直して右下の鉛筆マークで並び替え・削除の編集作業をします。 ◆次にOn Airを使いサーバを立てます。 使い方はAndroidのSDカードをWi-Fi経由で読み書きできるアプリ「On Air」(非rootでもOK)に十分詳しく乗っているのでこちらを参考にして、パスワードを固定化してFTPかWebDAVで立てます。 ◆最後にiPadのGoodReaderを起動して Connect to ServersのAddボタンからサーバ登録をすれば完成です。 ◆GoodReaderを買いたくないでござるって人は 遅いですが、SideBooksはDropboxに対応しているのでそれを経由して送れば大丈夫です。というかGoodReaderの場合でも特別急がないならばDropbox経由の方が同時に操作しなくて良い分楽ちんです。AndroidからDropboxにファイルを投げるのは右から二番目の良く分からないボタンからが一番簡単かと思います。 以上です。</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://w3-info.net/cte-android-ipad0.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://w3-info.net/cte-android-ipad0.html</feedburner:origLink></item><item><title>Pythonで作ったTwitterサービス「TweetReminder」のソース。それと詰まった点。</title><link>http://feedproxy.google.com/~r/w3-info/~3/FxdPf14BMyo/python-tweetreminder.html</link><category>自作物</category><category>Python</category><category>Twitter</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">鷹本</dc:creator><pubDate>Sat, 18 Jun 2011 20:33:23 PDT</pubDate><guid isPermaLink="false">http://w3-info.net/?p=1156</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://twitter.com/treminder">@treminder</a> というサービスを公開してみました。まあ今探してみたら似たようなのはあるようだけど、多分これが一番手軽なので良かったら是非。</p>
<h4>◆でソース↓</h4>
<pre><code>import sys,os,pickle,simplejson,re,random
from urllib import urlencode
from oauth2 import Client, Token, Consumer
CONSUMER_KEY    = ""
CONSUMER_SECRET = ""
KEY_FILE        = "./twitter_key.dat"
DATABASE        = "./trdatabase.dat"

def twitter():
    def split_parameter(parameters):
        result_list = [tuple(parameter.split('='))
                       for parameter in parameters.split('&amp;')]
        return dict(result_list)

    if os.path.isfile(KEY_FILE):
        access_token = pickle.load(file(KEY_FILE))
    else:
        consumer = Consumer(CONSUMER_KEY, CONSUMER_SECRET)
        client = Client(consumer, None)
        result = client.request('http://api.twitter.com/oauth/request_token','GET')
        request_token_map = split_parameter(result[1])
        request_token = Token(request_token_map['oauth_token'],request_token_map['oauth_token_secret'])
        print 'Please access "http://api.twitter.com/oauth/authorize?oauth_token='+request_token.key+'".'
        pin = raw_input('PIN:')
        request_token.set_verifier(pin)
        client.token = request_token
        result = client.request('http://api.twitter.com/oauth/access_token','POST')
        access_token = split_parameter(result[1])
        pickle.dump(access_token,file(KEY_FILE, "w"))
    return Client(Consumer(CONSUMER_KEY, CONSUMER_SECRET),Token(access_token["oauth_token"],access_token["oauth_token_secret"]))

def main(args):
    def stop(user):
        if user in database["mention"]:del(database["mention"][user])

    import datetime
    _ = datetime.datetime.now()
    NOW = datetime.datetime(_.year,_.month,_.day,_.hour)
    if os.path.isfile(DATABASE):
        database = pickle.load(file(DATABASE))
    else:
        database = {}
        database["mention"] = {}
        database["past"] = []

    tw = twitter()

    for user,mentions in database["mention"].items():
        for mention in mentions:
            text,tNOW,wait,postid = mention[0],mention[1],mention[2],mention[3]
            if tNOW.hour != NOW.hour or (tNOW-NOW).days%wait:continue
            tw.request("http://api.twitter.com/1/statuses/update.json","POST",urlencode(
              dict([k,v.encode("utf-8")] for k,v in {"status":"@"+user+" "+text,"in_reply_to_status_id":str(postid)}.items())
            ))

    mentions = simplejson.loads(tw.request("http://api.twitter.com/1/statuses/mentions.json","GET")[1])
    for mention in mentions:
        tweet, user, postid = mention["text"],mention["user"]["screen_name"],mention["id"]
        if postid in database["past"]:continue
        database["past"] = ([postid]+database["past"])[:200]
        print user
        if tweet=="@treminder":
            stop(user)
            continue
        match = re.compile(r"^.*?@treminder.*?([0-9]+) (.*)$").findall(tweet)
        if not match:
            print "syntax error!"
            tw.request("http://api.twitter.com/1/statuses/update.json","POST",urlencode({"status":"@"+user+" syntax error!"+str(random.random()),"in_reply_to_status_id":postid}))
            continue
        print match
        wait,text = int(match[0][0]),match[0][1]
        if wait==0:
            print "ZeroDivisionError!"
            tw.request("http://api.twitter.com/1/statuses/update.json","POST",urlencode({"status":"@"+user+" can't set 0 to &lt;wait&gt;."+str(random.random()),"in_reply_to_status_id":postid}))
            continue
        if not user in database["mention"]:database["mention"][user] = []
        database["mention"][user].extend([[re.compile("@").sub("",text),NOW,wait,postid]])

    pickle.dump(database, file(DATABASE, "w"))

if __name__ == '__main__':
    if sys.argv[1:2] ==["-d"]:
        print pickle.load(file(DATABASE))
    else:
        main(sys.argv)

</code></pre>
<p>拡張するつもりゼロなのでそのままスパッゲティなコード</p>
<h4>◆詰まった点</h4>
<p>初め、python-twitterというモジュールを使おうとしたけど上手く動かなかったので、結局<a href="http://d.hatena.ne.jp/reppets/20100522/1274553529<br />
">最短 Twitter bot OAuth化対応 (Python編) &#8211; reppets.log</a>を参考に、と言うかほぼ丸ぱくりで使用。</p>
<p>あと<a href="http://python.g.hatena.ne.jp/edvakf/20101002/1286040791">urllib.urlencode に unicode を渡すとエラー</a>問題が起きたのでこれもリンク先を参考にした。久々に触るとエラーが出た時何処がおかしいのか勘で分からなくて、2時間程詰まった。まあ、きっと今後もTwitter関係のサービス作る機会があると思うので記事にしてみた訳です。</p>

<p><a href="http://feedads.g.doubleclick.net/~a/GAnJG_JGpHINKouJ3XGz1fWs1Rs/0/da"><img src="http://feedads.g.doubleclick.net/~a/GAnJG_JGpHINKouJ3XGz1fWs1Rs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/GAnJG_JGpHINKouJ3XGz1fWs1Rs/1/da"><img src="http://feedads.g.doubleclick.net/~a/GAnJG_JGpHINKouJ3XGz1fWs1Rs/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/w3-info?a=FxdPf14BMyo:_IGUIXCCPdc:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/w3-info?d=spdCosxkSQE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/w3-info?a=FxdPf14BMyo:_IGUIXCCPdc:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/w3-info?d=OAQBO0PjnPA" border="0"></img></a>
</div>]]></content:encoded><description>@treminder というサービスを公開してみました。まあ今探してみたら似たようなのはあるようだけど、多分これが一番手軽なので良かったら是非。 ◆でソース↓ import sys,os,pickle,simplejson,re,random from urllib import urlencode from oauth2 import Client, Token, Consumer CONSUMER_KEY = "" CONSUMER_SECRET = "" KEY_FILE = "./twitter_key.dat" DATABASE = "./trdatabase.dat" def twitter(): def split_parameter(parameters): result_list = [tuple(parameter.split('=')) for parameter in parameters.split('&amp;#38;')] return dict(result_list) if os.path.isfile(KEY_FILE): access_token = pickle.load(file(KEY_FILE)) else: consumer = Consumer(CONSUMER_KEY, CONSUMER_SECRET) client = Client(consumer, None) result [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://w3-info.net/python-tweetreminder.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://w3-info.net/python-tweetreminder.html</feedburner:origLink></item><item><title>ソーシャルの力を借りて、Webページをフォルダごと等まとめて自動でタグ付けしてEvernote等に飛ばすスクリプト</title><link>http://feedproxy.google.com/~r/w3-info/~3/4c3j708cq3A/autotag.html</link><category>自作物</category><category>Evernote</category><category>GoogleChrome</category><category>Python</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">鷹本</dc:creator><pubDate>Wed, 06 Apr 2011 05:41:53 PDT</pubDate><guid isPermaLink="false">http://w3-info.net/?p=1139</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Evernoteはようやく少し使い始めた所なのですでに出来ることなのかもしれませんが。</p>

<p>はてなブックマークのソーシャル性を使えば自動でタグ付けできるのではないかと、ふと思いついたのでやってみました。とはいっても途中調べてみるとEvernoteは作っておいたタグしかメール投稿では扱えないらしいですが。</p>

<p>思いっきりα版です。現状、GoogleChromeのその他のブックマーク内の"autotag/"フォルダに入れたページを自動でタグを取得し、メールで送信する。ということしか出来ませんが、やる気があればin・outどちらも増やすかもしれません。</p>

<div class="more" padding-bottom:10px;>
		<div style="width:430px;margin-bottom:5px;">
			<script type="text/javascript"><!--
				google_ad_client = "pub-6696802667964685";
				/* Tools&amp;Toolz post-page */
				google_ad_slot = "2390815545";
				google_ad_width = 468;
				google_ad_height = 60;
				//-->
			</script>
			<script type="text/javascript"
				src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
			</script>
		</div>

<p>実行環境は<a href="http://www.python.jp/Zope/download/pythoncore">Windows Python 2.6</a>＋<a href="http://chardet.feedparser.org/download/">chardet</a>です。導入していない場合は導入してください。chardetは解凍して中の"chardet"フォルダをautoTag.pyと同じフォルダに突っ込めば動作します。</p>

<p>実行は"python autoTag.py chrome gmail"みたいな感じで。割と時間がかかります。あとその他のブックマークに"autotag/"、"autotag/error"、"autotag/warning"フォルダを先に作っておく必要があります。</p>

<p>file:autoTag.py（エンコードはUTF-8）</p>

<pre><code># -*- coding: utf-8 -*-
import urllib2, urllib, sys, json, re, time, datetime, os

class countWord(object):
	def __init__(self):
		self.tags = {}
	def __call__(self,jsonFile):
		r = re.compile(u"[!@#$%^&*()_+=-`\[\]{}:;?/,.<>！＠＃＄％＾＆＊（））＿＋－＝￥｜「」｛｝【】『』［］《》〔〕：；？・…＜＞、。]")
		for tag in map(lambda x:r.sub("",x.lower()),reduce(lambda x,y:x+y["tags"],[[""]]+json.loads(jsonFile)["bookmarks"])[1:]):
			self.tags[tag] = self.tags[tag]+1 if tag in self.tags else 1
		return self.tags

def hateBcount(url,errorFunc,warningFunc):
	print "hateBcount in"
	jsonFile = urllib2.urlopen(ur"http://b.hatena.ne.jp/entry/jsonlite/?url="+urllib.quote(url,'')).read()
	counter = countWord()
	if jsonFile == "null" or not counter(jsonFile):
		errorFunc()
		tags = []
	else:
		if len(counter.tags)<=5:
			warningFunc(counter.tags)
		tags = sorted(counter.tags.items(), key=lambda x:x[1],reverse=True)
	print "hateBcount out"
	return tags


def autoTag2chrome(bookmarkPath,sendFor):
	bookmarks = json.loads(open(bookmarkPath,"r").read())
	autoTagFolder = {}
	lasttimePath = os.path.join(os.path.abspath(os.path.dirname(sys.argv[0])),"lasttime")
	lasttime = long(open(lasttimePath).read()) if os.path.isfile(lasttimePath) else 0
	for x in ["/","/error","/warning"]:
		autoTagFolder[x] = filter(lambda y:"autotag"+x==y["name"],bookmarks["roots"]["other"]["children"])
	def walk(cd):
		for i in range(len(cd)):
			cd[i]
			if cd[i]["type"]=="folder" and long(cd[i]["date_modified"])>lasttime:
				print "nest in"
				walk(cd[i]["children"])
				print "nest out"
				continue
			if  long(cd[i]["date_added"])<lasttime and (cd==autoTagFolder["/"][0]["children"]):continue
			tags = hateBcount(
				cd[i]["url"]
				,lambda :autoTagFolder["/error"][0]["children"].append(cd[i])
				,lambda x:autoTagFolder["/warning"][0]["children"].append(cd[i])
			)
			if tags:
				sendFor(cd[i]["url"],tags,cd[i]["name"])
	walk(autoTagFolder["/"][0]["children"])
	open(bookmarkPath,"w").write(json.dumps(bookmarks))
	d = datetime.datetime.utcnow() - datetime.datetime(1601,1,1,0,0,0)
	open(lasttimePath,"w").write(str((d.days*60*60*24+d.seconds)*1000*1000+d.microseconds))

def send2gmail():
	print "send2gmail in"
	import smtplib,chardet
	from email.MIMEText import MIMEText
	from email.Header import Header
	from email.Utils import formatdate
	s = smtplib.SMTP('smtp.gmail.com', 587)
	s.ehlo()
	s.starttls()
	s.ehlo()
	s.login(from_address, password)
	def func(url,tags,comment):
		print "send2gmail in"
		html = urllib2.urlopen(url).read()
		html = unicode(html,chardet.detect(html)["encoding"],"ignore")
		title = re.compile("<title>(.*?)</title>",re.DOTALL).search(html).groups()[0]
		comment = "" if comment==title else comment+"\n\n"
		tags = "".join(map(lambda x:u" #"+x[0],tags)[0:10])
		
		body = comment + html
		subject = title + tags
		msg = MIMEText(body.encode("utf-8"), 'html', 'utf-8')
		msg['Subject'] = Header(subject.encode("utf-8"), 'utf-8')
		msg['From'] = from_address
		msg['To'] = to_address
		msg['Date'] = formatdate()
		s.sendmail(from_address, to_address, msg.as_string())
		print "send2gmail sleep"
		time.sleep(1)
		print "send2gmail out"
	print "send2gmail out"
	return func

if __name__ == "__main__":
    bookmarkPath = {}
    bookmarkPath["chrome"] = u"" //bookmarkファイルを指定
    from_address = "" //Gmailのアドレス
    password = "" //パスワード
    to_address = "" //送り先

    sendFor = locals()["send2"+sys.argv[2]]()
    locals()["autoTag2"+sys.argv[1]](bookmarkPath[sys.argv[1]],sendFor)
</code></pre>

<p>本当ならば処理の終わったブックマークは削除したかったのですが、ブックマークの編集・削除が不可能（恐らくchecksumが狂う為に起動時ブックマークを再構築しているようなのでその時。確認していませんが<a href="http://ryo49.cocolog-nifty.com/yoshimune/2009/09/google-chrome-a.html">ブックマークの順番を変えるのは問題ない様子</a>）なのでdate_addedで判定するようにしました。</p>

<ins datetime="2011-04-06T15:52:37+00:00"><p>追記：フォルダを突っ込んでも動くようにしました。というかこれが無いといまいち使い出が無い。</p></ins>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/k3EI4KTk0KgoLV7McllUDPnzx1w/0/da"><img src="http://feedads.g.doubleclick.net/~a/k3EI4KTk0KgoLV7McllUDPnzx1w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/k3EI4KTk0KgoLV7McllUDPnzx1w/1/da"><img src="http://feedads.g.doubleclick.net/~a/k3EI4KTk0KgoLV7McllUDPnzx1w/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/w3-info?a=4c3j708cq3A:dBZ3ywMKpJk:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/w3-info?d=spdCosxkSQE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/w3-info?a=4c3j708cq3A:dBZ3ywMKpJk:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/w3-info?d=OAQBO0PjnPA" border="0"></img></a>
</div>]]></content:encoded><description>Evernoteはようやく少し使い始めた所なのですでに出来ることなのかもしれませんが。 はてなブックマークのソーシャル性を使えば自動でタグ付けできるのではないかと、ふと思いついたのでやってみました。とはいっても途中調べてみるとEvernoteは作っておいたタグしかメール投稿では扱えないらしいですが。 思いっきりα版です。現状、GoogleChromeのその他のブックマーク内の"autotag/"フォルダに入れたページを自動でタグを取得し、メールで送信する。ということしか出来ませんが、やる気があればin・outどちらも増やすかもしれません。 実行環境はWindows Python 2.6＋chardetです。導入していない場合は導入してください。chardetは解凍して中の"chardet"フォルダをautoTag.pyと同じフォルダに突っ込めば動作します。 実行は"python autoTag.py chrome gmail"みたいな感じで。割と時間がかかります。あとその他のブックマークに"autotag/"、"autotag/error"、"autotag/warning"フォルダを先に作っておく必要があります。 file:autoTag.py（エンコードはUTF-8） # -*- coding: utf-8 -*- import urllib2, urllib, sys, json, re, time, datetime, os class countWord(object): def __init__(self): self.tags = {} def __call__(self,jsonFile): r = re.compile(u"[!@#$%^&amp;#038;*()_+=-`\[\]{}:;?/,.！＠＃＄％＾＆＊（））＿＋－＝￥｜「」｛｝【】『』［］《》〔〕：；？・…＜＞、。]") for tag in map(lambda x:r.sub("",x.lower()),reduce(lambda x,y:x+y["tags"],[[""]]+json.loads(jsonFile)["bookmarks"])[1:]): self.tags[tag] = self.tags[tag]+1 if tag in self.tags else 1 return self.tags def [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://w3-info.net/autotag.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://w3-info.net/autotag.html</feedburner:origLink></item><item><title>javascriptの少し判りづらい、当たり前なスコープの挙動</title><link>http://feedproxy.google.com/~r/w3-info/~3/V-Rcu7EONLs/javascript_scope.html</link><category>未分類</category><category>javascript</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">鷹本</dc:creator><pubDate>Sun, 13 Mar 2011 10:29:14 PDT</pubDate><guid isPermaLink="false">http://w3-info.net/?p=1127</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>最近node.jsを触り始めました。Javascript自体これまでGreaseMonkeyをちょろっと、とかその程度しか触ったことがなかったので<a href="http://d.hatena.ne.jp/gifnksm/20100131/1264934942">JavaScript基礎文法最速マスター</a>等の入門記事を見つつ進めていったのですがスコープの挙動で感覚的にわからない所が出てきてしまい、またそれに関する記事も見つからなかったので自分で検証してみました。</p>

<p>プログラミング能力自体も初級者以前なので、思いっきり間違っている部分もあるかもしれません。そこのところはご了承ください。</p>

<div class="more" padding-bottom:10px;>
		<div style="width:430px;margin-bottom:5px;">
			<script type="text/javascript"><!--
				google_ad_client = "pub-6696802667964685";
				/* Tools&amp;Toolz post-page */
				google_ad_slot = "2390815545";
				google_ad_width = 468;
				google_ad_height = 60;
				//-->
			</script>
			<script type="text/javascript"
				src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
			</script>
		</div>

<pre><code>var x = function(){
    var i=1;
    this.pipe = function(func){func();};
    this.alert = function(){alert(i)};
};
x.prototype.alert1 = function(){alert(i);};
x = new x;

var y = new function(){
    var i=0;
    this.alert = function(){alert(i)};

    this.test1 = function(){
        x.pipe(function(){alert(i);});
    };
    this.test2 = function(){
        x.pipe(x.alert);
    };
    this.test3 = x.alert;
    this.test4 = eval(x.alert.toSource());
};


y.alert();  //0     (1)
y.test1();  //0     (2)
y.test2();  //1     (3)
y.test3();  //1     (4)
y.test4();  //0     (5)
x.alert1(); //Error: i is not defined (6)
</code></pre>

<p>(1)は当然として、(2)はCallback関数を渡す関数を扱うときによく見る形ですね。私は初見ではxとyどちらに繋がっているのかわかりませんでした。まあよくよく考えると実際にxに繋がれていても使い道に困りますが。(3)は(2)のCallback関数がxのプロパティになった物ですが、こちらはxに繋がれています。また(4)もxに繋がれています（これははじめかなりビックリしました）。(5)は(4)をyに繋ぐための小細工。使う機会はほとんどないと思われますが。</p>

<p>結局ネット上で調べても出てこなかったのですが、この挙動を見るに<em>関数オブジェクトが作成された場所のスコープを繋いでいく</em>、のかな。そう考えれば上記の例は理解できますし、<a href="http://d.hatena.ne.jp/kayai/20110131">javascriptの関数が変態すぎる - 俺のメモ</a>の”関数リテラルとFunctionコンストラクタによってスコープがちがう”というのも一応理解できます。</p>

<p>まとめてみると非常にシンプルな仕様なのですが、例えば(6)なんかも初見ではいけるんではないかと思ってしまいました。<em>オブジェクトとスコープが完全に別物</em>であることを理解することが大事なのでしょうかね。</p>

<ins datetime="2011-03-20T12:33:30+00:00">
追記。<a href="http://javascript.g.hatena.ne.jp/blue_ring/20090402/1238691037">JavaScriptのスコープチェーンとは何か？ - javascriptめも</a>辺りが詳しそう。</ins></div>
<p><a href="http://feedads.g.doubleclick.net/~a/BNMxfODLPkhrta9Qv7CnjB-lqog/0/da"><img src="http://feedads.g.doubleclick.net/~a/BNMxfODLPkhrta9Qv7CnjB-lqog/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/BNMxfODLPkhrta9Qv7CnjB-lqog/1/da"><img src="http://feedads.g.doubleclick.net/~a/BNMxfODLPkhrta9Qv7CnjB-lqog/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/w3-info?a=V-Rcu7EONLs:PDnpa5fPokQ:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/w3-info?d=spdCosxkSQE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/w3-info?a=V-Rcu7EONLs:PDnpa5fPokQ:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/w3-info?d=OAQBO0PjnPA" border="0"></img></a>
</div>]]></content:encoded><description>最近node.jsを触り始めました。Javascript自体これまでGreaseMonkeyをちょろっと、とかその程度しか触ったことがなかったのでJavaScript基礎文法最速マスター等の入門記事を見つつ進めていったのですがスコープの挙動で感覚的にわからない所が出てきてしまい、またそれに関する記事も見つからなかったので自分で検証してみました。 プログラミング能力自体も初級者以前なので、思いっきり間違っている部分もあるかもしれません。そこのところはご了承ください。 var x = function(){ var i=1; this.pipe = function(func){func();}; this.alert = function(){alert(i)}; }; x.prototype.alert1 = function(){alert(i);}; x = new x; var y = new function(){ var i=0; this.alert = function(){alert(i)}; this.test1 = function(){ x.pipe(function(){alert(i);}); }; this.test2 = function(){ x.pipe(x.alert); }; this.test3 = x.alert; this.test4 = eval(x.alert.toSource()); }; y.alert(); //0 (1) y.test1(); //0 (2) [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://w3-info.net/javascript_scope.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://w3-info.net/javascript_scope.html</feedburner:origLink></item><item><title>【初心者向け】ODDレスでのUbuntu 10.10導入（PXEネットワークブート）</title><link>http://feedproxy.google.com/~r/w3-info/~3/_8YyUg5S-mE/networkboot.html</link><category>半日記</category><category>Server</category><category>Ubuntu</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">鷹本</dc:creator><pubDate>Fri, 18 Feb 2011 21:12:38 PST</pubDate><guid isPermaLink="false">http://w3-info.net/?p=1112</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>前回思いがけずヒットしたので、調子にのってUbuntuネタをもう一つ。前々回にちょろっと書いた自宅鯖はODDドライブが付いておらずまた外付けのドライブもブートに使用できなかったので、ネットワークブートからのインストールに挑戦してみました。</p>

<p>ネットワークブート自体は、<a href="http://d.hatena.ne.jp/palm84/20070403/1175609650">WindowsでPXEネットワークブート用サーバの設定 - TFTPD32 - Palm84 某所の日記</a>にかなり詳しく書かれている（かつ頻繁に更新されている）ので、私は分かりやすく簡潔にを目指してみようかと思います。……というかほとんどパクリです</p>

<div class="more" padding-bottom:10px;>
		<div style="width:430px;margin-bottom:5px;">
			<script type="text/javascript"><!--
				google_ad_client = "pub-6696802667964685";
				/* Tools&amp;Toolz post-page */
				google_ad_slot = "2390815545";
				google_ad_width = 468;
				google_ad_height = 60;
				//-->
			</script>
			<script type="text/javascript"
				src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
			</script>
		</div>

<ol>
<li>適当なところにpxeというフォルダを作る。さらにその中に<em>ubuntu</em>フォルダと<em>pxelinux.cfg</em>フォルダを作る。</li>
<li><p><a href="http://tftpd32.jounin.net/">TFTPD32 : an opensource TFTP server/service for windows  : TFTP server </a>からTFTPD32をDL＆インストール（今回使用したものはv3.51）、起動して設定をする。（<a href="http://w3-info.net/image/2011/02/tftp01.png">参考画像</a>）</p>

<dl>
<dt>TFTPタブ</dt>
<dd>PXE Compatibilityをクリックすると自動でほかの設定がチェックされます。</dd>

<dt>DHCPタブ</dt>
<dd>「IP pool starting address」……「192.168.0.(このPCの数字+1～254)」</dd>

<dd>「Size of pool」……1以上の数をテキトーに入力</dd>

<dd>「Boot File」……"pxelinux.0"</dd>

<dd>「WIND/DNS Server」……ルーターかプロパイダーのDNSサーバのアドレス(わからない場合はコマンドプロンプトに"ipconfig"と打って確認)</dd>

<dd>「Default router」……ルーターのアドレス(わからない場合は（ｒｙ)</dd>

<dd>「Mask」……サブネットマスク(わからない場合は（ｒｙ)</dd>
</dl></li>
<li><p><a href="http://www.kernel.org/pub/linux/utils/boot/syslinux/">Index of /pub/linux/utils/boot/syslinux</a>からsyslinux-4.03.zipをDL。解凍して<em><code>core\pxelinux.0</code></em>、<em><code>com32\menu\menu.c32</code></em>、<em><code>memdisk\memdisk</code></em>をpxeフォルダに入れる。</p></li>
<li><a href="http://archive.ubuntu.com/ubuntu/dists/maverick/main/installer-i386/current/images/netboot/ubuntu-installer/i386/">Index of /ubuntu/dists/maverick/main/installer-i386/current/images/netboot/ubuntu-installer/i386</a>（<a href="http://ftp.jaist.ac.jp/pub/Linux/ubuntu/dists/maverick/main/installer-i386/current/images/netboot/ubuntu-installer/i386/">ミラー</a>）から<em>initrd.gz</em>と<em>linux</em>をDL。ubuntuフォルダに入れる。</li>
<li><em>default</em>というテキストファイルを作り、以下の内容をコピーして保存する。</li>
<li>「Current Directory」にpxeフォルダを指定します。（<a href="http://w3-info.net/image/2011/02/tftp02.png">参考画像</a>）</li>
<li>必要ならば、ルーターにアクセスし（さっきのDefault routerのアドレス）DHCPサーバー機能をオフにします。（<a href="http://w3-info.net/image/2011/02/tftp03.png">参考画像</a>）</li>
<li>あとはUbuntuを入れるPCを起動させて成功していればブート選択画面が出ます。</li>
</ol>

<p>file：default</p>

<pre><code>DEFAULT menu.c32
PROMPT  0
MENU TITLE === Oshinagaki ===

LABEL ubuntu
      KERNEL ubuntu/linux
      APPEND vga=normal initrd=ubuntu/initrd.gz locale=ja_JP
</code></pre>

<h4>◆気になった事</h4>

<h5>違うVersionのUbuntuを入れるときには</h5>

<p>ディレクトリ構造が ”/ubuntu/dists/コードネーム/main/installer-i386/current/images/netboot/ubuntu-installer/i386”となっているので、<a href="http://ja.wikipedia.org/wiki/Ubuntu">Ubuntu - Wikipedia</a>を参考にいれてやると出来ます。初めこれを知らずに10.10のURLを紹介しているサイトをひたすら検索するハメになるなりましたorz
<h5>Ubuntu 10.02+GUIだと起動に失敗する</h5></p>

<p>恐らく今回使用した<em>FMV-830MT</em>固有の問題だと思われますが、起動中に表示されていたUbuntuのロゴがバグりその後は黒画面のままうんともすんとも言わなくなってしまいます。ネットワークブート以外も8.04からのバージョンアップにて発現しました。9.10や11.04は問題ないようなので10.02を避ければ良いだけの話ですが。</p>
<hr />
<p>＃余談。この記事を書いた理由は初めにも書いた「もっと簡潔な手引きがあった方がいい」と思った以外にも機会があればWindowsのインストールにも挑戦して記事にしてみようかと、その足がかりの意味もあったのですが、、、、<a href="http://d.hatena.ne.jp/palm84/20100911/1284215276">Windows XP のインストールに「ネットワークブート」を使うYO！の巻 - Palm84 某所の日記</a>まさか既にあったとは。一年ほど遅かったorz</p>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/ST8BEfK-d8aT9ohIkkUhpvS4pnk/0/da"><img src="http://feedads.g.doubleclick.net/~a/ST8BEfK-d8aT9ohIkkUhpvS4pnk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ST8BEfK-d8aT9ohIkkUhpvS4pnk/1/da"><img src="http://feedads.g.doubleclick.net/~a/ST8BEfK-d8aT9ohIkkUhpvS4pnk/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/w3-info?a=_8YyUg5S-mE:IyPvwchKWnA:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/w3-info?d=spdCosxkSQE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/w3-info?a=_8YyUg5S-mE:IyPvwchKWnA:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/w3-info?d=OAQBO0PjnPA" border="0"></img></a>
</div>]]></content:encoded><description>前回思いがけずヒットしたので、調子にのってUbuntuネタをもう一つ。前々回にちょろっと書いた自宅鯖はODDドライブが付いておらずまた外付けのドライブもブートに使用できなかったので、ネットワークブートからのインストールに挑戦してみました。 ネットワークブート自体は、WindowsでPXEネットワークブート用サーバの設定 - TFTPD32 - Palm84 某所の日記にかなり詳しく書かれている（かつ頻繁に更新されている）ので、私は分かりやすく簡潔にを目指してみようかと思います。……というかほとんどパクリです 適当なところにpxeというフォルダを作る。さらにその中にubuntuフォルダとpxelinux.cfgフォルダを作る。 TFTPD32 : an opensource TFTP server/service for windows : TFTP server からTFTPD32をDL＆インストール（今回使用したものはv3.51）、起動して設定をする。（参考画像） TFTPタブ PXE Compatibilityをクリックすると自動でほかの設定がチェックされます。 DHCPタブ 「IP pool starting address」……「192.168.0.(このPCの数字+1～254)」 「Size of pool」……1以上の数をテキトーに入力 「Boot File」……"pxelinux.0" 「WIND/DNS Server」……ルーターかプロパイダーのDNSサーバのアドレス(わからない場合はコマンドプロンプトに"ipconfig"と打って確認) 「Default router」……ルーターのアドレス(わからない場合は（ｒｙ) 「Mask」……サブネットマスク(わからない場合は（ｒｙ) Index of /pub/linux/utils/boot/syslinuxからsyslinux-4.03.zipをDL。解凍してcore\pxelinux.0、com32\menu\menu.c32、memdisk\memdiskをpxeフォルダに入れる。 Index of /ubuntu/dists/maverick/main/installer-i386/current/images/netboot/ubuntu-installer/i386（ミラー）からinitrd.gzとlinuxをDL。ubuntuフォルダに入れる。 defaultというテキストファイルを作り、以下の内容をコピーして保存する。 「Current Directory」にpxeフォルダを指定します。（参考画像） 必要ならば、ルーターにアクセスし（さっきのDefault routerのアドレス）DHCPサーバー機能をオフにします。（参考画像） あとはUbuntuを入れるPCを起動させて成功していればブート選択画面が出ます。 file：default DEFAULT menu.c32 PROMPT 0 [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://w3-info.net/networkboot.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><feedburner:origLink>http://w3-info.net/networkboot.html</feedburner:origLink></item><item><title>さくらVPSでWordPress運用するまでの手引き on ubuntu</title><link>http://feedproxy.google.com/~r/w3-info/~3/1m_le0s9X0c/sakuravps.html</link><category>Webサイト制作の心得とテク</category><category>Server</category><category>Ubuntu</category><category>WordPress</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">鷹本</dc:creator><pubDate>Fri, 04 Feb 2011 18:05:59 PST</pubDate><guid isPermaLink="false">http://w3-info.net/?p=1093</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>1月の半ば頃に借りてみて、その時やったことのまとめです。少しうろ覚えで書いていたり、基本初心者なのであまり参考にしないほうがいいかもしれませんが。まあ良かったら見てやってください。</p>
<p>＃こう、一からやってみると普段使っているレンタルサーバーがどのように動いているかがなんとなくつかめて面白いですね。</p>
<div class="more" padding-bottom:10px;>
		<div style="width:430px;margin-bottom:5px;">
			<script type="text/javascript"><!--
				google_ad_client = "pub-6696802667964685";
				/* Tools&amp;Toolz post-page */
				google_ad_slot = "2390815545";
				google_ad_width = 468;
				google_ad_height = 60;
				//-->
			</script>
			<script type="text/javascript"
				src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
			</script>
		</div>

<h4>◆下準備</h4>

<ol>
<li>WinSCP（インストール版）とteratermをインストール</li>
<li>WinSCPの中のPuTTYgenを起動。「SSH－2 RSA」をチェックし、右下の"1024"を"2048"に直して「Generate」ボタンをクリック、マウスをテキトーに動かしてやると早く終る。</li>
<li>「Key passphrase」にはログイン時のパスワードを入力する（OSのユーザーに設定されているパスワードではない）。気休めのようなものらしいので無くても可。</li>
<li><del datetime="2011-02-16T06:19:06+00:00">「Save public key」ボタン</del><ins datetime="2011-02-16T06:19:06+00:00">上部のテキストエリアをすべてコピー</ins>と「Save pricate key」ボタンをクリックしてそれぞれ（公開鍵は"authorized_keys"という名前にして）保存。</li>
<li>またメニューの「Conversions」をクリックして「Export OpenSSH key」をクリックして"id_rsa"というファイル名で保存する。</li>
</ol>

<h4>◆OSのインストール</h4>

<ol>
<li>まずさくらのコントロールパネルを開き、OS再インストール→カスタムOSインストールと進んでOS選択をUbuntu 10.04 i386を選んで確認ボタンを押す。</li>
<li><a href="http://support.sakura.ad.jp/support/vps/menu_oscustom_ubuntu.shtml">公式のマニュアル</a>があるのでこれを読みながらインストールする。</li>
</ol>

<h4>◆セキュリティ</h4>

<h5>SSH</h5>

<ol>
<li>WinSCPを起動し「新規(N)」ボタンを押す。「ファイルプロトコル」を"SCP"にし、ホスト名とインストール時入力したユーザー名、ポート番号に"22"を入力して「保存(S)」ボタンを押す。</li>
<li>「ログイン」ボタンを押しログインする。おそらく"/home/ユーザー名"が開かれるのでそこに右クリックから".ssh"というフォルダを作り、"authorized_keys"を放り込む。</li>
<li>"authorized_keys"と".ssh"のパーミッションをそれぞれ"600"と"700"にしてWinSCPを閉じる。</li>
<li>さくらのコントロールパネルのリモートコンソールを開きログインする。</li>
<li>以下のように入力、編集していく</li>
</ol>

<pre><code>$ sudo apt-get install vim
$ sudo vim /etc/ssh/sshd_config
$ sudo /etc/init.d/ssh restart
</code></pre>

<p>file：/etc/ssh/sshd_config</p>

<pre><code>Port 22 #0~65535の間の数字を適当に入れる。10000以上が良いらしい。

PermitRootLogin no #yesをnoに変える。rootのログインを禁止する。

#RSAAuthentication yes #コメントを取る。RSA認証を許可する。
#PubkeyAuthentication yes #コメントを取る。公開鍵認証を許可する。

#PermitEmptyPasswords no #コメントを取る。パスワード無しのログインを禁止する。

ChallengeResponseAuthentication no #noになっていることを確認する。

PasswordAuthentication yes #yesをnoに変える。パスワードでのログインを禁止する。
</code></pre>

<p>あとは保存して完了です。編集しづらいのは我慢します、挿入モードで十字キー使える分Viよりマシ。</p>

<h5>TeraTerm設定</h5>

<ol>
<li>設定(S)→端末(T)と開く。ロケールは"japanese"に言語コードは"932"に。</li>
<li>設定(S)→ウィンドウ(W)と開く。カラーの反転をクリック。（個人的趣味）</li>
<li>設定(S)→フォント(F)と開く。日本語を使えるフォントに変える。</li>
<li>設定(S)→SSH認証()と開く。ユーザ名には"サーバーでログインしているユーザー名"を、RSA/DSA鍵を使うにチェック。秘密鍵ボタンを押し、"id_rsa"を選ぶ。</li>
<li>設定(S)→設定の保存(S)と開き、保存。</li>
</ol>

<h5>ファイアウォール</h5>

<pre><code>$ sudo ufw enable
$ sudo ufw default DENY
$ sudo ufw allow 80/tcp
$ sudo ufw allow SSHのポート
</code></pre>

<p>これでポートスキャンなども防げる。らしい。</p>

<p>参考：<a href="https://wiki.ubuntulinux.jp/UbuntuTips/DedicatedServer/Ufw">ufw（Ubuntu標準の簡易ファイアウォール）を設定するには - Ubuntu Japanese Wiki</a></p>

<h5>denyhosts</h5>

<p>ログファイルを監視して、ブルートフォースアタックしてきたホストを/etc/hosts.denyに追加するPythonスクリプト。</p>

<pre><code>$ sudo apt-get install denyhosts
$ /etc/init.d/denyhosts start
$ sudo vim /var/lib/denyhosts/allowed-hosts #ホワイトリストに自分のIPを追加しておく。リモートコンソールがあるので無くてもいいかもしれない。
</code></pre>

<h4>◆サーバ</h4>

<pre><code>$ sudo apt-get install apache2 php5 libapache2-mod-php5 mysql-server php5-mysql
$ sudo /etc/init.d/apache2 restart #Apache再起動
$ sudo vim /etc/mysql/my.cnf
$ sudo /etc/init.d/mysql restart
</code></pre>

<p>file：/etc/mysql/my.cnf</p>

<pre><code>[client]
default-character-set=utf8 #追加

[mysqld]
default-character-set=utf8 #追加
character-set-server=utf8 #追加
</code></pre>

<h5>Perl＆.htaccess有効化</h5>

<pre><code>$ sudo a2enmod rewrite #mod_rewriteを有効にする
$ ln -s /usr/bin/perl /usr/local/bin/perl
$ sudo vim /etc/apache2/sites-available/default
$ sudo /etc/init.d/apache2 restart #Apache再起動
</code></pre>

<p>file : /etc/apache2/sites-available/default</p>

<pre><code>&lt;Directory /var/www/&gt;
    Options Indexes FollowSymLinks MultiViews +ExecCGI # ここと
    DirectoryIndex index.cgi # ここを追加。index.cgi はおまけ。
    AddHandler cgi-script .cgi .pl # もし Perl （拡張子は .cgi か .pl）を有効にしたい場合はこの行を追加
    AllowOverride ALL #.htaccess
    Order allow,deny
    allow from all
&lt;/Directory&gt;
</code></pre>

<h5>独自ドメイン設定</h5>

<pre><code>$ sudo vim /etc/apache2/sites-available/default
$ sudo /etc/init.d/apache2 restart #Apache再起動
</code></pre>

<p>file : /etc/apache2/sites-available/default</p>

<pre><code>&lt;VirtualHost *:80&gt;
        ServerName ドメイン名
        DocumentRoot 絶対パス
&lt;/virtualHost&gt; #追加しておく。
</code></pre>

<p>ちなみにさくらで独自ドメインを購入した場合は、ゾーン表示→さくらインターネットのネームサーバに設定する（詳細設定）→変更ボタンと進む。</p>

<h5>WordPress用のデータベース作成</h5>

<pre><code>$ mysql -u root -p
mysql&gt; create database データベース名;
mysql&gt; create user ユーザー名@localhost identified by 'パスワード';
mysql&gt; grant all on データベース名.* TO ユーザー名@localhost;
mysql&gt; exit
$ sudo /etc/init.d/mysql restart
</code></pre>
<p>データベース名、ユーザー名、パスワードはWordpressをインストールする際にwp-config.phpに入力するアレ。</p>
<p>一応目を通しておいたほうがいいかもしれない↓</p>

<ul>
<li><a href="http://itpro.nikkeibp.co.jp/article/COLUMN/20060510/237494/">［MySQLウォッチ］第26回 知らないではすまされない，MySQLのセキュリティ設定 - オープンソース：ITpro</a></li>
<li><a href="http://dev.mysql.com/doc/refman/5.1/ja/security-guidelines.html">MySQL ::   MySQL 5.1 リファレンスマニュアル :: 4.6.1 セキュリティ ガイドライン</a></li>
</ul>

<h5>WordPressインストール</h5>

<pre><code>$ wget http://ja.wordpress.org/wordpress-3.0.4-ja.zip
$ unzip wordpress-3.0.4-ja.zip
$ mv wordpress-3.0.4-ja 移す先の絶対パス
</code></pre>

<p>あとはいつも通り。</p>

<h4>◆雑多なこと</h4>

<h5>自動起動設定</h5>

<p>通常、インストール時に自動起動が設定されますが一応。</p>

<pre><code>$ sudo apt-get install sysv-rc-conf
$ sudo sysv-rc-conf denyhosts on
</code></pre>

<p>と自動起動を設定しておく。</p>

<h5>ロケールを ja_JP.UTF-8 にする</h5>

<pre><code>$ sudo apt-get install language-pack-ja
$ sudo locale-gen ja_JP.UTF-8
$ sudo update-locale LANG=ja_JP.UTF-8
$ export LANG=ja_JP.UTF-8
</code></pre></div>
<p><a href="http://feedads.g.doubleclick.net/~a/BMi73E2y6-4en5ExiXnNZIfOFZU/0/da"><img src="http://feedads.g.doubleclick.net/~a/BMi73E2y6-4en5ExiXnNZIfOFZU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/BMi73E2y6-4en5ExiXnNZIfOFZU/1/da"><img src="http://feedads.g.doubleclick.net/~a/BMi73E2y6-4en5ExiXnNZIfOFZU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/w3-info?a=1m_le0s9X0c:vQimreoU_ZM:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/w3-info?d=spdCosxkSQE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/w3-info?a=1m_le0s9X0c:vQimreoU_ZM:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/w3-info?d=OAQBO0PjnPA" border="0"></img></a>
</div>]]></content:encoded><description>1月の半ば頃に借りてみて、その時やったことのまとめです。少しうろ覚えで書いていたり、基本初心者なのであまり参考にしないほうがいいかもしれませんが。まあ良かったら見てやってください。 ＃こう、一からやってみると普段使っているレンタルサーバーがどのように動いているかがなんとなくつかめて面白いですね。 ◆下準備 WinSCP（インストール版）とteratermをインストール WinSCPの中のPuTTYgenを起動。「SSH－2 RSA」をチェックし、右下の"1024"を"2048"に直して「Generate」ボタンをクリック、マウスをテキトーに動かしてやると早く終る。 「Key passphrase」にはログイン時のパスワードを入力する（OSのユーザーに設定されているパスワードではない）。気休めのようなものらしいので無くても可。 「Save public key」ボタン上部のテキストエリアをすべてコピーと「Save pricate key」ボタンをクリックしてそれぞれ（公開鍵は"authorized_keys"という名前にして）保存。 またメニューの「Conversions」をクリックして「Export OpenSSH key」をクリックして"id_rsa"というファイル名で保存する。 ◆OSのインストール まずさくらのコントロールパネルを開き、OS再インストール→カスタムOSインストールと進んでOS選択をUbuntu 10.04 i386を選んで確認ボタンを押す。 公式のマニュアルがあるのでこれを読みながらインストールする。 ◆セキュリティ SSH WinSCPを起動し「新規(N)」ボタンを押す。「ファイルプロトコル」を"SCP"にし、ホスト名とインストール時入力したユーザー名、ポート番号に"22"を入力して「保存(S)」ボタンを押す。 「ログイン」ボタンを押しログインする。おそらく"/home/ユーザー名"が開かれるのでそこに右クリックから".ssh"というフォルダを作り、"authorized_keys"を放り込む。 "authorized_keys"と".ssh"のパーミッションをそれぞれ"600"と"700"にしてWinSCPを閉じる。 さくらのコントロールパネルのリモートコンソールを開きログインする。 以下のように入力、編集していく $ sudo apt-get install vim $ sudo vim /etc/ssh/sshd_config $ sudo /etc/init.d/ssh restart file：/etc/ssh/sshd_config Port 22 #0~65535の間の数字を適当に入れる。10000以上が良いらしい。 PermitRootLogin no #yesをnoに変える。rootのログインを禁止する。 #RSAAuthentication yes #コメントを取る。RSA認証を許可する。 #PubkeyAuthentication yes #コメントを取る。公開鍵認証を許可する。 #PermitEmptyPasswords [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://w3-info.net/sakuravps.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><feedburner:origLink>http://w3-info.net/sakuravps.html</feedburner:origLink></item><item><title>Perl版MarkdownでDL（定義リスト）を使用する為のパッチ</title><link>http://feedproxy.google.com/~r/w3-info/~3/iMQL2Sq05bc/markdown_dl.html</link><category>自作物</category><category>Blosxom</category><category>Perl</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">鷹本</dc:creator><pubDate>Sat, 22 Jan 2011 20:34:03 PST</pubDate><guid isPermaLink="false">http://w3-info.net/?p=1085</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>去年の11月の終わりごろからHowmに突っ込んであるメモをブラウザから見られるように（正確にはスマフォから見られるように）する為に自鯖の上でBlosxomを動かしています。</p>

<p>で、Blosxomは素のMarkdownに対応しているのでそのままPluginに入れれば動作するのですが、PerlのMarkdownはExtraのようにTableやDLに対応していません。まあTableはどっちでも良いのですがDLは無いと少し不便なのでソースを読みつつ作ってみました。</p>
<div class="more" padding-bottom:10px;>
		<div style="width:430px;margin-bottom:5px;">
			<script type="text/javascript"><!--
				google_ad_client = "pub-6696802667964685";
				/* Tools&amp;Toolz post-page */
				google_ad_slot = "2390815545";
				google_ad_width = 468;
				google_ad_height = 60;
				//-->
			</script>
			<script type="text/javascript"
				src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
			</script>
		</div>

<pre><code>sub _DoDList{
    my $text = shift;
    my $less_than_tab = $g_tab_width - 1;
    my $whole_dl = qr{
        (
            (.+?\n)+?
            :[ \t]*(?s:.+?)(\z|\n{2,})
            (?!([^\n]+\n)?:)
        )
    }mx;
    $text =~ s{
        (?:(?&lt;=\n\n)|\A\n?)
        $whole_dl
    }{
        my $list = $1;
        my $result = _ProcessDLItem($list);
        $result = "&lt;dl&gt;\n" . $result . "&lt;/dl&gt;\n";
        $result;
    }egmx;
    return $text;
}
sub _ProcessDLItem{
    my $dl_str = shift;
    my $less_than_tab = $g_tab_width - 1;
    $dl_str =~ s{
        (?&lt;=\n):[ \t]*(.*?)(?=\n:|\z|\n{2,})
    }{
        "&lt;dd&gt;" . $1 . "&lt;/dd&gt;\n";
    }egmsx;
    $dl_str =~ s{
        (?:(?&lt;=&lt;/dd&gt;)|\A)(.+?)(?=&lt;dd&gt;|\z)
    }{
        "&lt;dt&gt;" . $1 . "&lt;/dd&gt;";
    }egmsx;
    return $dl_str;
}
</code></pre>

<p>あとは<code>_RunBlockGamut</code>に<code>$text = _DoDList($text);</code>を追加</p>

<p><a href="http://www.rfs.jp/sb/perl/02/09.html#■拡張構文">拡張構文</a>を知らなくて少し手こずりましたがなんとか簡易的な対応ですが完成しました。しかし。</p>

<ul>
<li><a href="http://www.sera.desuyo.net/komono/">Markdown Extra for perl</a></li>
<li><a href="http://fuga.jp/blog/fugapress/archives/3871">blosxomでMarkdown Extraが使いたい(20090710-152330) «  ふがっさむ・WP</a></li>
</ul>

<p>先駆者がいました。以前PerlでMarkdownExtraが使えないものかと探したのが2008年の夏ごろなのでそりゃあ知らない筈ですし、今回はDLに絞って検索してしまったので検索に引っかかってこず（実際には引掛っているのですが分かり辛い）、記事を書く段階になってようやく気づきましたorz。まあこの記事が同じような目を見るかもしれない人の救済になればと思います。</p>

<p>ｸｿｯ</p></div>
<p><a href="http://feedads.g.doubleclick.net/~a/XAaza8SIcM8RO4Z86Efhf3XpSj8/0/da"><img src="http://feedads.g.doubleclick.net/~a/XAaza8SIcM8RO4Z86Efhf3XpSj8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/XAaza8SIcM8RO4Z86Efhf3XpSj8/1/da"><img src="http://feedads.g.doubleclick.net/~a/XAaza8SIcM8RO4Z86Efhf3XpSj8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/w3-info?a=iMQL2Sq05bc:XrwFj03OCQw:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/w3-info?d=spdCosxkSQE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/w3-info?a=iMQL2Sq05bc:XrwFj03OCQw:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/w3-info?d=OAQBO0PjnPA" border="0"></img></a>
</div>]]></content:encoded><description>去年の11月の終わりごろからHowmに突っ込んであるメモをブラウザから見られるように（正確にはスマフォから見られるように）する為に自鯖の上でBlosxomを動かしています。 で、Blosxomは素のMarkdownに対応しているのでそのままPluginに入れれば動作するのですが、PerlのMarkdownはExtraのようにTableやDLに対応していません。まあTableはどっちでも良いのですがDLは無いと少し不便なのでソースを読みつつ作ってみました。 sub _DoDList{ my $text = shift; my $less_than_tab = $g_tab_width - 1; my $whole_dl = qr{ ( (.+?\n)+? :[ \t]*(?s:.+?)(\z&amp;#124;\n{2,}) (?!([^\n]+\n)?:) ) }mx; $text =~ s{ (?:(?&amp;#60;=\n\n)&amp;#124;\A\n?) $whole_dl }{ my $list = $1; my $result = _ProcessDLItem($list); $result = "&amp;#60;dl&amp;#62;\n" . $result . "&amp;#60;/dl&amp;#62;\n"; $result; }egmx; return $text; } sub _ProcessDLItem{ my $dl_str [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://w3-info.net/markdown_dl.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://w3-info.net/markdown_dl.html</feedburner:origLink></item><item><title>【WordPress】Simple TweetでCategory名を使用する為のパッチ</title><link>http://feedproxy.google.com/~r/w3-info/~3/KCWNLN6JKY0/simple-tweet.html</link><category>Webサイト制作の心得とテク</category><category>自作物</category><category>WebDesine</category><category>WordPress</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">鷹本</dc:creator><pubDate>Tue, 18 Jan 2011 19:36:50 PST</pubDate><guid isPermaLink="false">http://w3-info.net/?p=1079</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>はい。タイトル通りです。必要に駆られたので作ってみました。</p>
<p>初めはちょろっと弄るだけで済むかと思っていたのですがget_postsからカテゴリが引っ張ってこれず、またループ中ではないので（多分）the_categoryが扱えずDBを直接いじらなければならないようなので、（DBをまともに触るのは初めてだったので）↓辺りを参考にしつつ作成。</p>
<ul>
<li><a href="http://www.atmarkit.co.jp/fdb/rensai/tsql02/tsql02_1.html">あっという間に分かるSELECT文の書き方（1/3） － ＠IT</a></li>
<li><a href="http://wpdocs.sourceforge.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%A6%82%E8%A6%81">データベース構造 &#8211; WordPress Codex 日本語版</a></li>
<li><a href="http://codex.wordpress.org/File:WP3.0-ERD.png">File:WP3.0-ERD.png « WordPress Codex</a></li>
<li><a href="http://wp.mmrt-jp.net/2008/02/02/2785/">タグまわりの謎 &#8211; MMRT daily life    </a></li>
<li><a href="http://blog.syuhari.jp/archives/410">WordPress の設定を使ってデータベースにアクセスする方法 | Sun Limited Mt.</a></li>
</ul>
<p><a href="http://w3-info.net/image/2011/01/simple_tweet.patch">simple_tweet.patch</a></p>
<p>それほど変更点は多くないので手動でも出来るかと思います。一応自環境では正常に動いていますが使用は自己責任でお願いします。</p>

<p><a href="http://feedads.g.doubleclick.net/~a/PHcvEnStGA4rv6YCEoMWQofSZdo/0/da"><img src="http://feedads.g.doubleclick.net/~a/PHcvEnStGA4rv6YCEoMWQofSZdo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PHcvEnStGA4rv6YCEoMWQofSZdo/1/da"><img src="http://feedads.g.doubleclick.net/~a/PHcvEnStGA4rv6YCEoMWQofSZdo/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/w3-info?a=KCWNLN6JKY0:4aqwtUwOHpk:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/w3-info?d=spdCosxkSQE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/w3-info?a=KCWNLN6JKY0:4aqwtUwOHpk:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/w3-info?d=OAQBO0PjnPA" border="0"></img></a>
</div>]]></content:encoded><description>はい。タイトル通りです。必要に駆られたので作ってみました。 初めはちょろっと弄るだけで済むかと思っていたのですがget_postsからカテゴリが引っ張ってこれず、またループ中ではないので（多分）the_categoryが扱えずDBを直接いじらなければならないようなので、（DBをまともに触るのは初めてだったので）↓辺りを参考にしつつ作成。 あっという間に分かるSELECT文の書き方（1/3） － ＠IT データベース構造 &amp;#8211; WordPress Codex 日本語版 File:WP3.0-ERD.png « WordPress Codex タグまわりの謎 &amp;#8211; MMRT daily life WordPress の設定を使ってデータベースにアクセスする方法 &amp;#124; Sun Limited Mt. simple_tweet.patch それほど変更点は多くないので手動でも出来るかと思います。一応自環境では正常に動いていますが使用は自己責任でお願いします。</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://w3-info.net/simple-tweet.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><feedburner:origLink>http://w3-info.net/simple-tweet.html</feedburner:origLink></item></channel></rss>

