Hatena::Groupgeneration1986

omote87 このページをアンテナに追加 RSSフィード

ura87 no omote

メインのブログ(d:id:kiwofusi)は日本語の読めるひとみんなに読んでもらいたいので、作業メモやソースコードなどはこちらに書きます。

2009年11月24日(火)

[][][]mecab.rbでMeCabを動かす 23:11 はてなブックマーク - mecab.rbでMeCabを動かす - omote87 mecab.rbでMeCabを動かす - omote87 のブックマークコメント

WindowsではRubyバインディングがうまくインストールできないみたいです。そこでmecab.rbを使わせていただきました。

参考:Windows + MeCab + Ruby: 猫背ミジンコMeCabのRubyバインディング (マルッと!)

require 'mecab.rb'
require 'kconv'

str = "庭には二羽鶏がいる貴社の記者が汽車で帰社した。"
str = ARGV[1] if ARGV[1] != nil

$mecab = Mecab.new("")# surfaceのみ => "-O wakati"
puts "version: " + $mecab.version()

def sparse_tostr(str)
	begin
		$mecab.sparse_tostr(str.tosjis).split(/\n/).each {|word|
	     	puts word
		}
	rescue Exception => e
		$stderr.puts e, e.backtrace
	end
end

def sparse_tonode(str)
	begin
		node_set = []
		node = $mecab.sparse_tonode(str.tosjis).next # 一個目のノード
		while node
			node_set << [node.surface, node.pos.split(/,/)[0]] # 単語&品詞 
			node = node.next
		end
		return node_set
	rescue Exception => e
		$stderr.puts e, e.backtrace
	end
end

def extract_noum(str) # 名詞を抜き出す 
	begin
		node_set = []
		node = $mecab.sparse_tonode(str.tosjis).next # 一個目のノード
		while node
			pos = node.pos.split(/,/)[0]
			node_set << node.surface if /名詞/.match(pos.toutf8)
			node = node.next
		end
		return node_set
	rescue Exception => e
		$stderr.puts e, e.backtrace
	end
end

# メイン

if ARGV[0] == "node"
	sparse_tonode(str).each {|node| # ノードで
		puts node[0] + "\t" + node[1]
	}
elsif ARGV[0] == "noum"
	extract_noum(str).each {|word| # 名詞を出す
		print word + ", "
	}
else
	sparse_tostr(str) # ふつうに結果を出す
end

実行結果

D:\ruby\src\mecab-sample>ruby mecab-sample2.rb

version: 0.98pre1

庭 名詞,一般,*,*,*,*,庭,ニワ,ニワ

に 助詞,格助詞,一般,*,*,*,に,ニ,ニ

は 助詞,係助詞,*,*,*,*,は,ハ,ワ

二 名詞,数,*,*,*,*,二,ニ,ニ

羽 名詞,接尾,助数詞,*,*,*,羽,ワ,ワ

鶏 名詞,一般,*,*,*,*,鶏,ニワトリ,ニワトリ

が 助詞,格助詞,一般,*,*,*,が,ガ,ガ

いる 動詞,自立,*,*,一段,基本形,いる,イル,イル

貴社 名詞,一般,*,*,*,*,貴社,キシャ,キシャ

の 助詞,連体化,*,*,*,*,の,ノ,ノ

記者 名詞,一般,*,*,*,*,記者,キシャ,キシャ

が 助詞,格助詞,一般,*,*,*,が,ガ,ガ

汽車 名詞,一般,*,*,*,*,汽車,キシャ,キシャ

で 助詞,格助詞,一般,*,*,*,で,デ,デ

帰社 名詞,サ変接続,*,*,*,*,帰社,キシャ,キシャ

し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ

た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ

。 記号,句点,*,*,*,*,。,。,。

EOS

D:\ruby\src\mecab-sample>ruby mecab-sample2.rb node

version: 0.98pre1

庭 名詞

に 助詞

は 助詞

二 名詞

羽 名詞

鶏 名詞

が 助詞

いる 動詞

貴社 名詞

の 助詞

記者 名詞

が 助詞

汽車 名詞

で 助詞

帰社 名詞

し 動詞

た 助動詞

。 記号

EOS EOS

D:\ruby\src\mecab-sample>ruby mecab-sample2.rb noum

version: 0.98pre1

庭, 二, 羽, 鶏, 貴社, 記者, 汽車, 帰社,

[][]携帯百景のnice!を展開するブックマークレット 09:59 はてなブックマーク - 携帯百景のnice!を展開するブックマークレット - omote87 携帯百景のnice!を展開するブックマークレット - omote87 のブックマークコメント

nice!をワンクリックでつけたいだけなら携帯百景においてワンクリックでnice!をつけよう - 青春スイーツでおk。ブックマークレットで展開までしてみる。大量アクセス注意。IEでは動かない。

eval()なるものを知る。

javascript:(function(){try{var code_set = document.getElementsByClassName('star');for(i=0; i<code_set.length; i++){var code = code_set[i].getElementsByTagName('a')[0].getAttribute('onclick')+'').replace(/;return false;/,'');eval(code)}}catch(_e_r_r_){alert(_e_r_r_.description)}})();</ppp>

(function(){
  try{
    var code_set = document.getElementsByClassName('star');
    for(i=0; i<code_set.length; i++){
      var code = (code_set[i].getElementsByTagName('a')[0].getAttribute('onclick')+'').replace(/;return false;/,'');
      eval(code)
    }
  }catch(_e_r_r_){
    alert(_e_r_r_.description)
  }
})();
トラックバック - http://generation1986.g.hatena.ne.jp/kiwofusi/20091124

2009年11月22日(日)

[][][][]twicli用 未読管理ブックマークレット 11:21 はてなブックマーク - twicli用 未読管理ブックマークレット - omote87 twicli用 未読管理ブックマークレット - omote87 のブックマークコメント

つくった→twicli用 未読管理ブックマークレット

グリモンなどでもよく見る (function(){})(); の意味はJavascriptのブックマークレットに見る無名関数の使われ方 | 村式開墾日記で知った。

IEFxでgetAttributeのエラーとかhasAttributeの有無とかが違った。参考:JavaScript DOM リファレンス

自分自身を削除するメソッドがないので、削除するのは面倒そう。参考:DOM要素(<div>タグ)をJavaScriptで削除する|JavaScriptプログラムメモ|プログラムメモ

JimboJimbo2011/05/06 19:55Glad I've finally found soemhting I agree with!

mvnzjltygmmvnzjltygm2011/05/07 11:1549roso <a href="http://qgqlmjmnoowc.com/">qgqlmjmnoowc</a>

トラックバック - http://generation1986.g.hatena.ne.jp/kiwofusi/20091122

2009年10月17日(土)

[][][]ユーザスタイルシートでアンケートサイトを快適に 23:44 はてなブックマーク - ユーザスタイルシートでアンケートサイトを快適に - omote87 ユーザスタイルシートでアンケートサイトを快適に - omote87 のブックマークコメント

ひきこもっていてひまだったのでポイントサイトのたぐいに登録してみた。なかにはすごくユーザビリティに優れたものもある。しかしラベル要素を使わないところもざらにある。せめてラジオボタンやチェックボックスを大きくして快適にしたい。ということが、簡単にできた。

ユーザCSS

ユーザーCSSのカスタマイズ - Mozilla Firefox まとめサイト:概要。ブラウザの外観も変えられるのかあ。

usercontent.css - Mozilla Firefox まとめサイト:具体的にユーザスタイルシートを書くときに。

Stylish - Mozilla Firefox まとめサイト:このツールを使ってみた。

Stylishを使ってユーザスタイルシート

ボイスポートでやってみた。ボイスポートのアンケート回答ページを開いてStylishをクリックし「新しいスタイルを書く」から回答ページのドメインを指定する。

f:id:kiwofusi:20091017234109p:image

そしたらCSSが編集できる。ドメインの部分の内側にCSSを書く。元のスタイルを上書きするために" !important"を追加する。ラジオボタンとチェックボックスを大きくしたいので最小サイズを大きくした。「お試し」で反映される。名前をつけて「保存」すれば完了。

f:id:kiwofusi:20091017234102p:image

こんな感じになる(キャプチャしていなかったのでサンプルで)。ほかのドメインでも同様にできるでしょう。

f:id:kiwofusi:20091017234050p:image

その他

Restyle the web with Stylish! | userstyles.org

ほかのスタイルを取り込んだり、公開するときにはこちらが便利かも。Stylishにインストールしたり、ユーザスクリプトでインストールしたりできる。

トラックバック - http://generation1986.g.hatena.ne.jp/kiwofusi/20091017

2009年10月01日(木)

[][][]TumblrのテーマをAutoPagerizeLDRizeに対応させる 17:46 はてなブックマーク - TumblrのテーマをAutoPagerizeとLDRizeに対応させる - omote87 TumblrのテーマをAutoPagerizeとLDRizeに対応させる - omote87 のブックマークコメント

自分のTumblrmine関数)のテーマを変えてみた。テーマによってAutoPagerizeLDRizeがうまくいかないのでいい感じ: microformatsを体感する:TumblrのAutoPagerize+LDRize対応を参考にカスタマイズした。

AutoPegerizeへの対応は、メインコンテンツをautopagerize_page_element hfeedクラスのブロックに入れ、リンクにrel="next"属性をつける。メインコンテンツをhfeedクラスのブロック、各ポストをhentryクラスのブロックにし、hetnry中のパーマリンクにrel="bookmark"属性をつけることでLDRizeとReblogコマンドに対応できる。

気に入ったテーマ(Color Shades)がぺージを開くたびにJavascriptを実行して色を変更する形式だったので AutoPagerize_DOMNodeInsertedイベントでページ継ぎ足しのたびにスクリプトを再実行するようにした(AutoPagerizeで継ぎ足された部分に自分のスクリプトを適用する方法あれこれ - 0xFF)。

修正したテーマ

AutoPagerizeへの対応(CSS追加、PostNotesブロックの位置を変更、Javascriptの再実行)、LDRizeへの対応、その他ちょこっとした変更。

元テーマ:Color Shades

AutoPagerizeの2ページ目以降の継ぎ足しに失敗するときは{NextPage}の前に自分のTumblrのURLを追加するとよいです)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta name="color:Default 1" content="#468966"/>
    <meta name="color:Default 2" content="#FFF0A5"/>
    <meta name="color:Default 3" content="#FFB03B"/>
    <meta name="color:Default 4" content="#B64926"/>
    <meta name="color:Default 5" content="#8E2800"/>
    
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    {block:Description}<meta name="description" content="{MetaDescription}" />{/block:Description}
    <title>{Title}{block:PostTitle} - {PostTitle}{/block:PostTitle}</title>
    <link rel="alternate" type="application/rss+xml" title="RSS" href="{RSS}"/>
    
    <link rel="icon" href="{Favicon}"/>

    <script type="text/javascript">
      var themes = {"default":      ["{color:Default 1}","{color:Default 2}","{color:Default 3}","{color:Default 4}","{color:Default 5}"],
                    "dolores":      ["E8E595","D0A825","40627C","26393D","FFFAE4"],
                    "grannysmith":  ["85DB18","CDE855","F5F6D4","A7C520","493F0B"],
                    "indian":       ["C98B2F","803C27","C56520","E1B41B","807916"],
                    "jambajuice":   ["ca3995","f58220","ffdf05","bed73d","61bc46"],
                    "sandstone":    ["E6E2AF","A7A37E","EFECCA","046380","002F2F"],
                    "olive":        ["B4AF91","787746","40411E","32331D"],
                    "coolrunnings": ["FFF8E3","CCCC9F","33332D","9FB4CC","DB4105"],
                    "bw":           ["FFF8E3","33332D"],
                    "neutralblue":  ["FCFFF5","D1DBBD","91AA9D","3E606F","193441"],
                    "bananaflambe": ["F0C755","E2AD3B","BF5C00","901811","5C110F"],
                    "denim":        ["4F5D73","65758D","313E57"],
                    "winters-end":  ["E6D1AA","587265","3D3A24","342F29","A14727"],
                    "sumatra":      ["1A1D20","667371","2E3538","57495A","3A2C3A"]
      };
    </script>
    
    <script src="http://static.tumblr.com/bqyeqv2/DmWkoqylp/colorshades-compressed.js" type="text/javascript"></script>
    <style type="text/css">
    hr.autopagerize_page_separator{display:none;}
    p.autopagerize_page_info{text-align:center; margin:0; padding: 5px 0 5px 0; background-color:#000000; color:#FFFFFF;}
    p.autopagerize_page_info a{color:#FFFFFF;}
    blockquote{margin-left:1em; margin-right:0;}
        body {
            color:            black;
            margin:           0px;
            background:       white;
            font-family:      'Lucida Grande', Helvetica, sans-serif;
            width: 100%;
        }
        div.outer_content {
            width: 100%;
        }
        div.content {
            width:            510px;
            margin:           auto;
            position:         relative;
            padding: 30px 30px 30px 30px;
        }

        a {
            color:            black;
        }

        h1 {
            padding:          25px 0px 25px 0px;
            margin:           0px;
            text-align:       center;
            font:             Normal 65px Georgia, serif;
            line-height:      60px;
            letter-spacing:   -1px;
            opacity:          0.9;
            -moz-opacity:     0.9;
            filter:           alpha(opacity=90);
        }
        h3 {
          margin-top: 0;
          margin-bottom: 0;
        }
        
        h1 a {
            text-decoration:  none;
        }

        div#description {
            position:         absolute;
            left:             600px;
            width: 300px;
            font:             Normal 14px Verdana,sans-serif;
            line-height:      20px;
        }

        div.post {
            position:         relative;
        }

        div.post div.date a {
            padding: 10px;
            text-decoration: none;
        }

        div.post div.date {
            position:         absolute;
            right:            565px;
            text-align:       right;
            width:            200px;
            white-space:      nowrap;
            font:             Bold 20px Helvetica, sans-serif;
            text-align:       right;
            letter-spacing:   -1px;
            padding:          5px 5px 5px 5px;
            line-height:      20px;
            text-transform:   none;
        }

        div.commentholder {
            width:            500px;
            padding:          5px 5px 5px 5px;
        }

        div.commentholder div.comment_name {

            width:            100px;
            float:            left;
            font:             Bold 18px Helvetica, sans-serif;
            text-align:       right;
            margin-bottom:    5px;
        }

        div.commentholder div.comment_body {
            float:            left;
            font:             16px Georgia, sans-serif;
            text-align:       left;
            padding-left:     20px;

        }

        div.post div.date em {
            font-style:       normal;
        }

        div.post div.date big {
            font-size:        30px;
        }

        div.post h2 {
            font:             Normal 28px Georgia, serif;
            letter-spacing:   -1px;
            margin:           0px 0px 10px 0px;
        }
        
        div.post h2 a {
            text-decoration:  none;
        }

        /* Regular Post */
        div.post div.regular {
            font-size:        14px;
            line-height:      19px;
        }

        div.post div.regular img { max-width: 100%; }

        div.post div.regular blockquote {
            font-style: italic;
        }
        
        /* Photo Post */
        div.post div.photo img {
            border:           solid 5px black;
        }

        div.post div.photo div.caption {
            font-size:        14px;
            margin-top:       5px;
        }
        
        div.post div.photo div.caption a {

        }
        
        /* Quote Post */
        div.post div.quote span.quote {
           
        }

        div.post div.quote span.short {
            font:             Normal 28px Georgia, serif;
            line-height:      34px;
        }

        div.post div.quote span.medium {
            font:             Normal 23px Georgia, serif;
            line-height:      27px;
        }

        div.post div.quote span.long {
            font:             Normal 16px Georgia, serif;
            line-height:      20px;
        }

        div.post div.quote span.quote a {

        }

        div.post div.quote span.quote big.quote {
            font-weight:      bold;
            font-size:        60px;
            line-height:      8px;
            vertical-align:   -20px;
        }
        
        div.post div.quote span.source {
            font-size:        16px;
            letter-spacing:   -1px;
        }

        div.post div.quote span.source a {

        }
        
        /* Link Post */
        div.post .biglink {
            font:             Bold 30px Helvetica, sans-serif;
            letter-spacing:   -1px;
            text-decoration:  none;
            border-bottom:    dotted 1px black;
            line-height:      33px;
        }

        div.post div.link div.description {
            font-weight:      normal;
            font-size:        14px;
            line-height:      17px;
            margin-top:       5px;
        }

        div.post div.link div.description a {
            font-weight:      normal;
            font-size:        14px;
            line-height:      17px;
        }
        
        /* Conversation Post */
        div.post div.conversation ul {
            list-style-type:  none;
            margin:           0px;
            padding:          0px;
        }
        
        div.post div.conversation ul li {
            font-size:        12px;
            padding:          4px 0px 4px 8px;
        }
        
        div.post div.conversation ul li span.label {
            font-weight:      bold;
        }
        
        /* Video Post */
        div.post div.video {
            width:            500px;
            margin:           auto;
        }

        div.post div.video div.caption {
            font-size:        14px;
            margin-top:       5px;
        }
        
        div.post div.video div.caption a {
            color:            black;
        }

        /* Footer */
        #footer {
            margin: 0;
            padding-top: 20px;
            text-align:       center;
            font-size:        22px;
        }
        
        #footer a {
            text-decoration:  none;
        }
        
        #footer a:hover {
            text-decoration:  underline;
        }

        #footer p.tiny {
            margin:           50px 0px 0px 0px;
            font-size:        10px;
        }
        
        #footer p.tiny a {
            text-decoration:  underline;
        }
        div#swatch_container {
          width: 104px;
          position: absolute;
          z-index: 100;
          right: 20px;
          top: 35px;
          margin: auto;
          border: 0;
          height: 135px;
        }
        body > div#swatch_container {
          position: fixed;
        }

        #swatches {
          height: 100px;
          overflow: hidden;
        }

        .swatch {
          width: 20px;
          height: 20px;
          float: left;
        }
        .swatch_holder {
          border: 1px solid white;
          background: #000;
          padding: 1px;
          height: 20px;
          margin-bottom: 1px;
          position: relative;
        }
        .scroller {
          width: 104px;
          text-align: center;
          padding-top: 4px;
          padding-bottom: 4px;
          cursor: pointer;
          cursor: hand;
        }
        .normal_link {
            font-size: 14px;
            font-weight: normal;
        }
        ol.notes {
            padding: 0px;
            margin: 25px 0px;
            list-style-type: none;
        }

        ol.notes li.note {
            padding: 10px;
        }

        ol.notes li.note img.avatar {
            vertical-align: -4px;
            margin-right: 10px;
            width: 16px;
            height: 16px;
        }

        ol.notes li.note span.action {
            font-weight: bold;
        }

        ol.notes li.note .answer_content {
            font-weight: normal;
        }

        ol.notes li.note blockquote {
            padding: 4px 10px;
            margin: 10px 0px 0px 25px;
        }

        ol.notes li.note blockquote a {
            text-decoration: none;
        }
        .under_date, .under_date a {
          font-size: 12px;
        }
        div.navleft {
          float: left;
          width: 50%;
          text-align: left;
        }
        div.navright {
          text-align: right;
          float: right;
          width: 50%;
        }
        {CustomCSS}
    </style>

    <!--[if lt IE 7]>
        <style type="text/css">
            div.post div.date {
                right: 600px;
            }
        </style>
    <![endif]-->
  </head>
  <body>
    <div id="swatch_container">
      <div onmouseout="stopScrolling();" onmouseover="scrollDivUp('swatches');" class="scroller"><img  src="http://static.tumblr.com/bqyeqv2/MEZkhbyzn/up.gif"></div>
      <div id="swatches"></div>
      <div onmouseout="stopScrolling();" onmouseover="scrollDivDown('swatches');" class="scroller"><img src="http://static.tumblr.com/bqyeqv2/LMfkhbz0b/down.gif"></div>
    </div>
    <div class="outer_content">
      <div class="content">
        <h1><a href="/">{Title}</a></h1>
        {block:Description}
        <div style="text-align: center">{Description}</div>
        {/block:Description}
      </div>
    </div>
    {block:SearchPage}
    <div class="outer_content">
      <div class="content">
        <div class="date">
          {SearchResultCount} result(s)
        </div>
        <div class="regular bodypart">
          searched for <em>{SearchQuery}</em>
        </div>
      </div>
    </div>
    {/block:SearchPage}
    <div class="autopagerize_page_element hfeed">
    {block:Posts}
      <div class="outer_content hentry">
        <div class="content">
          <div class="post">
            {block:NewDayDate}
            <div class="date">
              <a href="{Permalink}" class="permalink" rel="bookmark">{ShortDayOfWeek}
                <em>
                  {ShortMonth}
                  <big>{DayOfMonth}</big>
                </em>
              </a><br />
              
              {block:Pagination}
              <a href="{Permalink}" class="permalink"><span class="under_date">{NoteCountWithLabel}</span></a><br />
              {/block:Pagination}
              {block:SearchPage}
              <a href="{Permalink}" class="permalink"><span class="under_date">{NoteCountWithLabel}</span></a><br />
              {/block:SearchPage}
              {block:PermalinkPage}
              <a href="/" class="permalink"><span class="under_date">home</span></a><br />
              {/block:PermalinkPage}
              {block:RebloggedFrom}<span class="under_date">via<a href="{ReblogParentURL}">{ReblogRootName}</a></span><br />{/block:RebloggedFrom}
            </div>
            {/block:NewDayDate}
          
            {block:SameDayDate}
            <div class="date">
              <a href="{Permalink}" class="permalink" rel="bookmark">+</a><br />
              <a href="{Permalink}" class="permalink"><span class="under_date">{NoteCountWithLabel}</span></a><br />
              {block:RebloggedFrom}<span class="under_date">via<a href="{ReblogParentURL}">{ReblogRootName}</a></span><br />{/block:RebloggedFrom}
            </div>
            {/block:SameDayDate}

            {block:Regular}
            <div class="regular bodypart">
              {block:Title}<h2><a href="{Permalink}" rel="bookmark">{Title}</a></h2>{/block:Title}
              {Body}
            </div>
            {/block:Regular}
        
            {block:Photo}
            <div class="photo bodypart">
              {LinkOpenTag}<img src="{PhotoURL-500}" alt="{PhotoAlt}"/>{LinkCloseTag}<br/>
              {block:Caption}
                <div class="caption">{Caption}</div>
              {/block:Caption}
            </div>
            {/block:Photo}
        
            {block:Quote}
            <div class="quote bodypart">
              <span class="quote {Length}">
                <big class="quote {Length}">&#147;</big> {Quote}
              </span>
              {block:Source}<span class="source">{Source}</span>{/block:Source}
            </div>
            {/block:Quote}
        
            {block:Link}
            <div class="link bodypart">
              <a href="{URL}" class="biglink">{Name}</a>
              {block:Description}
              <div class="description">{Description}</div>
              {/block:Description}
            </div>
            {/block:Link}
        
            {block:Conversation}
              <div class="conversation bodypart">
                {block:Title}<h2><a href="{Permalink}">{Title}</a></h2>{/block:Title}
                <ul>
                  {block:Lines}
                    <li>
                      {block:Label}<span class="label">{Label}</span>{/block:Label}
                      {Line}
                    </li>
                  {/block:Lines}
                </ul>
              </div>
            {/block:Conversation}
        
            {block:Video}
              <div class="video bodypart">
                {Video-500}
                {block:Caption}
                  <div class="caption">{Caption}</div>
                {/block:Caption}
              </div>
            {/block:Video}
            {block:Audio}
              <div class="audio bodypart">
                {AudioPlayerGrey}
                <div class="caoption">{Caption}</div>
              </div>
            {/block:Audio}
          </div>
        </div>
      {block:PermalinkPage}
        {block:PostNotes}
        <div class="outer_content">
          <div class="content">
            <div class="post">
              <h3>Notes</h3>
              {PostNotes}
            </div>
          </div>
        </div>
        {/block:PostNotes}
      {/block:PermalinkPage}
      </div>
    {/block:Posts}
    </div>
    <div class="outer_content autopagerize_insert_before">
      <div class="content">
        <div id="footer">
          {block:Pagination}
          {block:PreviousPage}
          <div class="navleft">
            <a href="{PreviousPage}" rel="prev">&larr;&nbsp;previous</a>
          </div>
          {/block:PreviousPage}
          {block:NextPage}
          <div class="navright">
            <a href="{NextPage}" rel="next">next&nbsp;&rarr;</a>
          </div>
          {/block:NextPage}
          {/block:Pagination}
          {block:PermalinkPagination}
          {block:NextPost}
          <div class="navleft">
            &larr;&nbsp;<a href="{NextPost}" rel="next">next post</a>
          </div>
          {/block:NextPost}
          {block:PreviousPost}
          <div class="navright">
            <a href="{PreviousPost}" rel="prev">previous post</a>&nbsp;&rarr;
          </div>
          {/block:PreviousPost}
          {/block:PermalinkPagination}
          <div style="clear: both"></div>
          <p class="tiny">
              Subscribe via <a href="{RSS}">RSS</a> &nbsp;/&nbsp;
              powered by <a href="http://gondaba.com/post/88531930/color-shades-theme-released" target="_new">gondaba.com's color shades</a> &amp; <a href="http://tumblr.com/" target="_new">Tumblr</a> &nbsp;/&nbsp;
              thanks <a href="http://kuler.adobe.com/" target="_new"> Kuler</a>
          </p>
        </div>
      </div>
    </div>
    <!-- don't remove this -->
    <script type="text/javascript">
    doColors();
    setupSwatches();
    document.body.addEventListener('AutoPagerize_DOMNodeInserted',function(evt){
      var node = evt.target;
      var requestURL = evt.newValue;
      var parentNode = evt.relatedNode;
      // 処理
      doColors();
    }, false);
    </script>
  </body>
</html>
トラックバック - http://generation1986.g.hatena.ne.jp/kiwofusi/20091001

2009年09月22日(火)

[][]LDRizeTumblrをReblog 14:15 はてなブックマーク - LDRizeでTumblrをReblog - omote87 LDRizeでTumblrをReblog - omote87 のブックマークコメント

久しぶりにTumblrでもしようと思って、以前うまくいかなかったReblog関係のグリモンを試す。

MinibufferAutoPagerizeLDRizeの順で最新版をインストールした。LDRize Mibuffer tumblr reblog command for Greasemonkeyをインストールし説明のとおりやってみるがうまくいかない。

代わりにreblogcommand.user.js - CodeReposをインストールする。LDRizeでカーソルを合わせて「t」を押すだけでReblogできた。Reblog成功のメッセージも出る。ピンを立ててReblogもできる。

参考:kisatonomori - Firefox - LDRize+Autopagerize、Minibufferとブログへの対応

[][][]Ubuntu8.04のスワップをオフ、RAMディスクを追加 14:00 はてなブックマーク - Ubuntu8.04のスワップをオフ、RAMディスクを追加 - omote87 Ubuntu8.04のスワップをオフ、RAMディスクを追加 - omote87 のブックマークコメント

Let's note W4にアドテックのメモリ(ADS4200P-1G)を増設して1.5Gになった。Ubuntu8.04でも認識されたのでスワップの無効化とブラウザのキャッシュ用にRAMディスクの追加を試した。

「$ swapoff -a」でスワップが無効になった。これを起動時にもおこなうために/etc/fstabを書き換える。よくわからないので「swap」が含まれる行に「#」でコメントアウトした。再起動するとスワップが0になった。

Ubuntu Manpage: swapon, swapoff

RAMディスクは以下を参考にしたがうまくいかなかった。コマンドを入力しても引数がまちがっているのかヘルプが表示される。Firefoxの設定でディスクキャッシュをオフにしたので、これでもよさそう?

UbuntuでもRAMdisk利用(とりあえずFireFox高速化) - Winux/Lindows

tmpfsについてtmpfs は本当に容量が動的なのか - naoyaのはてなダイアリーが参考になった。サーバのパフォーマンス向上にも実用的らしい。今回はうまくいかなかったが、そのうち有効に使える機会が出てくるかもしれない。

トラックバック - http://generation1986.g.hatena.ne.jp/kiwofusi/20090922

2009年06月11日(木)

トラックバック - http://generation1986.g.hatena.ne.jp/kiwofusi/20090611

2009年05月28日(木)

[][][]参議院予算委員会をニコニコ動画にうpしてみた 19:56 はてなブックマーク - 参議院予算委員会をニコニコ動画にうpしてみた - omote87 参議院予算委員会をニコニコ動画にうpしてみた - omote87 のブックマークコメント

予算委員会での大塚さんの質疑がおもしろかった。ニコニコ動画にうpしてみよう。

関連記事として動画サイトや著作権などについて書きました→大塚耕平さん@予算委員会の議論が熱いのでニコ動にうpしてみた - 反言子

国会中継の映像を入手する

参議院インターネット審議中継のビデオライブラリからストリーミングで閲覧できる。

これをGetASFStreamでダウンロードする。サイトからだと個人別に動画にアクセスできるが、うまくいかないので一日分の動画をダウンロードした。数時間の動画で1-2Gbyte程度。

フォーマットはwmv。閲覧には問題なし。音ズレもない。

必要な部分を切り取る

でかいwmvファイルから必要な部分を切り取る。これが編集の大本のファイルになると思う。

AsfFEというツールで時間指定して切り出すことができる。劣化や音ズレは生じないが、フレーム単位・ミリ秒単位の調整はうまくいかない。

大ざっぱに抽出できればいいや、というならこれで十分。

とりあえずエンコードしてみる

エンコードの基本的な知識についてはエンコード設定 - ニコニコ動画まとめwikiが参考になる。

ここではエンコード設定(中画質~高画質) - ニコニコ動画まとめwikiを参考にmp4(H.264)フォーマットで動画を作成する。

ニコエンコ - 普通ダイアリというツールに動画ファイルをわたすだけで適切なエンコードが行われる。これをニコニコ動画にアップすれば再エンコードなしに公開される。簡単。

2009 0420 FLVENC2 Ver0.55 (H264形式MP4エンコード支援ツール)‐ニコニコ動画(ββ)はエンコードに時間がかかったのでテストしていない。

音ズレorz

しかし音ズレが生じた。だんだんと映像が音声に遅れていく。

wmvファイルから、「Windowsムービーメーカー」で切り取ったり(wmvに再エンコ)、AviUtl(+DirectShow File Reader プラグイン)で切り取ったり(無圧縮avi or Huffyuvに再エンコ)してみたが、同じような音ズレが生じる。

読み込み時のfps調整、VirtulDubを使って音ズレを補正する、ニコエンコのmp4修復などを試してみたがうまくいかない。

とりあえずの対処

だんだん速くなったり遅くなっていくような動画の音ズレをどうしても直したい。 :教えて君.netを参考に音声ファイルの時間を調整することで、ややましになった。この場合、映像が遅れるから、音声ファイルの時間をすこし長く(=遅く)した。

  1. AviUtlにwmvファイルを読み込ませて必要部分をHuffyuvで出力する(動画1)
  2. TMPGEncで動画1から音声をwavで出力する(音声1)
  3. Wave Time Controlで音声1を勘で時間調整する(音声2)
  4. TMPGEncで動画1と音声2を結合する(動画2)
  5. ニコエンコで動画2をエンコードする

当然、むだに時間がかかるし、たぶん雑音もはいるし、音ズレも解消していないので、なんともいえない。

やってみたいこと

AviUtlの拡張x264出力(GUI)でmp4(H.264/AVC)エンコード‐ニコニコ動画(ββ)を参考にAviUtlだけでmp4動画を出力してみたい。プラグインのサイトにつながらないので保留。

あとは、画面キャプチャのツールを使うとか。

うpしたもの

参議院 予算委員会 2009年5月20日 大塚耕平‐ニコニコ動画(ββ)(音ズレ対処なし)

参議院 予算委員会 2009年5月21日 大塚耕平(1/2)‐ニコニコ動画(ββ)

参議院 予算委員会 2009年5月21日 大塚耕平(2/2)‐ニコニコ動画(ββ)

トラックバック - http://generation1986.g.hatena.ne.jp/kiwofusi/20090528