-->
./
<!-- フラ&#65533;ュが見れな&#65533;のためにここに何か書&#65533; --> フラ&#65533;ュがインス&#65533;&#65533;ルされて&#65533;&#65533;たいで&#65533;&#65533;&#65533;

2010年01月06日

ファイルの内容を表示

for i in `ls rails222/app/models/*`; do echo -e \
"***********************************************\n \
[FILENAME] $i\n***********************************************\n"; \
cat $i; echo -e "\n"; done

 コピペしてコマンドラインから実行。

実行例:
[sakura cvs-works] % for i in `ls rails222/app/models/*`; do echo -e \
> "***********************************************\n \
> [FILENAME] $i\n***********************************************\n"; \
> cat $i; echo -e "\n"; done
***********************************************
 [FILENAME] rails222/app/models/categorizations.rb
***********************************************

class Categorizations < ActiveRecord::Base
  belongs_to :entrydata, :dependent => :destroy
  belongs_to :category, :dependent => :destroy
end


***********************************************
 [FILENAME] rails222/app/models/category.rb
***********************************************

class Category < ActiveRecord::Base
  #has_and_belongs_to_many :entrydatas
  has_many :categorizations
  has_many :entrydatas, :through => :categorizations
end


***********************************************
 [FILENAME] rails222/app/models/dlink.rb
***********************************************

class Dlink < ActiveRecord::Base
    belongs_to :hentry, :dependent => :destroy
    belongs_to :hcategory, :dependent => :destroy
end


***********************************************
 [FILENAME] rails222/app/models/entrydata.rb
***********************************************

class Entrydata < ActiveRecord::Base
#  has_and_belongs_to_many :categories
  has_many :categorizations
  has_many :categories, :through => :categorizations
end


***********************************************
 [FILENAME] rails222/app/models/hcategory.rb
***********************************************

class Hcategory < ActiveRecord::Base
  has_many :dlinks
  has_many :hentries, :through => :dlinks
end


***********************************************
 [FILENAME] rails222/app/models/hentry.rb
***********************************************

class Hentry < ActiveRecord::Base
  has_many :dlinks
  has_many :hcategories, :through => :dlinks
end


[sakura cvs-works] %


Powered by ScribeFire.

2009年12月02日

指定したディレクトリ内のhtmlファイルにMETAタグを追加(latex2html用)

MATAタグのエンコード指定を付加しています。現在プライベートモードにしているHatena::Diaryのブログで、今年の4月14日付のエントリーに以前作成したスクリプトのコードがありました。

 変更したのはなぜか「euc-jp」だったのを「UTF-8」にしただけです。
#!/bin/bash                                                                                                   
workdir=""                                                                                                    
if [ $# -gt 1 -o $# -le 0 ] ; then                                                                            
        echo "引数はディレクトリの指定一つだけ。"                                                             
        exit 1                                                                                                
else                                                                                                          
        workdir=$1                                                                                            
        cd $workdir                                                                                           
        echo "`pwd $workdir`に入りました。"                                                                   
fi                                                                                                            

ans=""
        read -t 10 -n 1 -p "処理を続行しますか?[y/n]" ans
                case "$ans" in                            
                        n|"")                             
                                echo "中止しました。"     
                                exit 1                    
                                ;;                        
                        y)                                
                                echo "継続"               
                                ;;                        
                esac                                      

        f_check () {
                local s=""
                s=`sed -n '/text\/html; charset/p' $1`
                if [ "$s" != "" ]; then               
                        echo "既に存在します。---> $1"
                        echo "-------------------------------------------------------"
                        echo $s                                                       
                        echo "-------------------------------------------------------"
                        return 1                                                      
                else                                                                  
                        return 0                                                      
                fi                                                                    
        }                                                                             

declare -a add_list
no=0;              

for f in `find . -name '*.html' -print`;do
        f_check $f
        if [ 1 -eq "$?" ]; then
                :
        else
                cat $f | \
                awk '{print}/<\/TITLE>/{print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"}' >  $.tmp
                mv $.tmp $f
        echo "set done $f"

        add_list[$no]=$f
        no=$(expr $no + 1)

        fi
done

echo "==========結果:=========="

for a in "${add_list[@]}"; do
        echo "$a"
done

echo "上記${no}個のファイルが処理されました。"


Powered by ScribeFire.



2009年11月13日

マインドマップvymからTexファイルを生成

あらかじめプリアンブルの出来たindex.texというファイルがあることが前提です。includeコマンドで、vymからエクスポートされ、スクリプトで変換処理を施したTexファイルを読み込んでいます。


vymファイル
vym-kennkei_20091113
vym-kennkei_20091113 posted by (C)hirono-hideki

スクリプトファイルの内容
#!/bin/sh

WORKFILE=$1
FILE=${1%.*}
DIR=`pwd`
WORKDIR=$DIR/work
if [ !  -d $WORKDIR ]; then
    mkdir ./work
fi

if [ ! -f $DIR/index.tex ]; then
    echo "index.texが存在しません。"
    exit 1
fi

cat $WORKFILE | perl -ne 'unless (/^\.+\{.+\}$/) { s/(.+)/$1\\/;
        s/#/\#/g;
        s/%/\%/g;
        s/_/\_/g;
        s/\{/\\{/g;
        s/>/\>/g;
        s/\^/\verb\|\^\|/g;
        s/~/\verb\|~\|/g;
        s/\|/\verb\+\|\+/g;
        s/\verb\|<\|/g;
        s/\}/\\}/g;
        s/&/\&/g;}

        print;' > $DIR/work/work.tex


     cat $DIR/work/work.tex |
     awk '{if(/^\.+\{.+\}$/){sub(/>/,")"); sub(/
     {if(/^\chapter/){sub(/\chapter/, "\section")}
            else if(/^\section/){sub(/\section/, "\subsection")}
            else if(/^\subsection/){sub(/\subsection/, "\subsubsection")}
            else if(/^\subsubsection/){sub(/\subsubsection/, "\paragraph")}}
            {print;}' > ./work/tmp.file

            mv $DIR/work/tmp.file  $DIR/work/work.tex

nkf -e --overwrite $DIR/work/work.tex
perl -i -pe  's/##########/work\/work/' "$DIR/index.tex"




生成されたPDFファイル
pdf-kennkei_20091113
pdf-kennkei_20091113 posted by (C)hirono-hideki

Powered by ScribeFire.

2009年11月09日

Linuxのorg-modeファイルをWindowsの「Story Editor」に変換

#!/usr/bin/perl                                                                              
#nkf -w -Lu  n.txt |perl -ple'if(/^\.+/){ s/\./\*/g; s/(^\*+)/$1 /g;  print}' >> k.org       
#nkf -s -Lw  kennkei.txt |sed -e '1,8d'|perl -ple' if(/^\*+/){s/^(\*+)[ ]{1}/$1/g; s/\*/\./g;}'                                                                                           
use Jcode;                                                                                   

open(FH, $ARGV[0]);
$wf = $ARGV[0];
$wf =~ s/(.+)(\..+)/$1-win$2/;
open(WF, "> $wf");
$i=0;
@list = <FH>;
    foreach $n (@list) {
        $i++;
        if ($i <= 8) {
                next;
        }

        $n =~ s/^(\*+)[ ]{1}/$1/g;
        $n =~ s/\*/\./g;
        $n =~ s/\n/\r\n/;
        &Jcode::convert(\$n, "sjis");
                print  WF $n;
    }

close(FH);
close(WF);

Powered by ScribeFire.



2009年11月07日

[コマンド]単調増加 (減少) する数値列を表示する<seq>

clmemo@aka: seq で 0 padding した数字列を作る
Linux の seq コマンドは、シンプルな数列を作ってくれる。例えば、1 から 10 までの数字を表示させるには次のやうにする。


 今日初めて知ったコマンドなのか、以前使ったことがあるのか記憶もはっきりしませんが、覚えていないぐらいですから、ほとんど使ったことのないコマンドです。

 使ってみると簡単に書式指定ができるなどとても便利なのですが、それにしても余り知られていないのか、ほとんど見かけることのなかったことが、とても不思議且つ新鮮に思いました。Rubyなど使えば、「1..10」などと書けるのでありがたみが薄いのかもしれませんが、書式の指定までオプションで簡単に指定できるので、コマンドライン操作が格段に向上しそうです。

 シェルを使えば、ファイルディスクリプタを作る必要もないのでファイル操作が簡単に済みますし、やはりこの組み合わせは強力だと思います。余り使う機会はないかもしれませんが、覚えておいて損はないでしょう。

u8w@u8w-desktop:~/xxxx % for i in `seq -f 'xxx_%04g.txt' 101 107`; do touch "$i"; done
u8w@u8w-desktop:~/xxxx % ls
xxx_0101.txt  xxx_0102.txt  xxx_0103.txt  xxx_0104.txt  xxx_0105.txt  xxx_0106.txt  xxx_0107.txt


 %04gのgの部分が書式指定子みたいです。manをみるとこれが標準みたいで整数になるみたいです。普通はdだと思うのですが、ジェネリック(一般的)というような意味でしょうか。fにすると小数点になるみたいです。


 いよいよ使い道が乏しいみたいですが、次のようなことも出来ました。必要に応じ、応用次第では便利に且つ正確に使えることもありそうです。区切り文字も変更しています。

u8w@u8w-desktop:~/xxxx % for i in `seq -s '--->' -f 'オリンピック_%g.txt' 1964 4 2009`; do echo "$i"; done
オリンピック_1964.txt--->オリンピック_1968.txt--->オリンピック_1972.txt--->オリンピック_1976.txt--->オリンピック_1980.txt--->オリンピック_1984.txt--->オリンピック_1988.txt--->オリンピック_1992.txt--->オリンピック_1996.txt--->オリンピック_2000.txt--->オリンピック_2004.txt--->オリンピック_2008.txt
オリンピック_1968.txt
オリンピック_1972.txt
オリンピック_1976.txt
オリンピック_1980.txt
オリンピック_1984.txt
オリンピック_1988.txt
オリンピック_1992.txt
オリンピック_1996.txt
オリンピック_2000.txt
オリンピック_2004.txt
オリンピック_2008.txt


減算:
u8w@u8w-desktop:~/xxxx % for i in `seq -f 'オリンピック_%g.txt' 2008 -4 2000`; do echo "$i"; done
オリンピック_2008.txt
オリンピック_2004.txt
オリンピック_2000.txt




使い方として、こちらの方が安全かもしれません。
for i in `seq -f 'xxx_%04g.txt' 10`; do echo "$i"; done|xargs -i touch {}

Powered by ScribeFire.



2009年10月29日

[Perl]指定したディレクトリを辿って条件に合ったファイルのリストを作成

シェルのfindコマンドやコマンドをパイプで繋いだ方が、簡単そうですが、Perlの勉強をかねてやってみました。ずいぶん時間が掛かりましたが漏れなくうまくいったみたいです。スクリプトを作った方が、すっきり簡単なはずですが、あえてコマンドラインでやってみました。
 1行が長くなりすぎるので強制改行を行っており、2行目の頭にある>は、第二プロンプトの表示です。
 絞り込みの条件は「2009xxxx」という日付を表す書式が拡張子の直前にあるjpeg画像ファイルです。
 なぜ、こんなスクリプトを作ろうかと思ったかというと、zipコマンドで所定の条件に当て嵌まるファイルのアーカイブを作りのが目的でした。

u8w@u8w-desktop:~$ perl -MFile::Find -e \
> 'find(sub {print "$File::Find::name\n"  if $File::Find::name  =~ /([0-9a-zA-Z\/_-])*\/([0-9a-zA-Z_-])*2009\d{4}\.jp[e]?g$/}, ".");'
./xfyBlogEditor/thumbu9-xfy_20091018.jpeg                                                                                           
./kokuso/google-site/analytics_sites-google_20090220-20090322.jpg                                                                   
./kokuso/jpegs/trends-google-20090402.jpeg                                                                                          
./kokuso/jpegs/Analyics-sites_google-20090401.jpeg                                                                                  
./kokuso/jpegs/Analyics-cocolog-20090401.jpeg                                                                                       
./kokuso/jpegs/20090331/nakayama-blog-20090313.jpeg                                                                                 
./kokuso/jpegs/20090331/digikam-20090321.jpeg                                                                                       
./kokuso/jpegs/20090331/mapae_20090327.jpeg                                                                                         
./画像/suzuka-20090427.jpg                                                                                                          
./画像/hatena-photo/google-sites_20090510.jpeg
(以下省略)

Powered by ScribeFire.

[Perl]コマンドラインでの実行をスクリプト化で確認

一行野郎(one-liner)はperlにおまかせ
-MO=Deparseでスクリプト化

ここで、-MO=Deparseも覚えておきましょう。perlにはさまざまなコマンドラインスイッチがあるので、複雑なものを利用した場合、実際に実行されるコードがどうなっているのかわかりにくくなったりしますが、これを使えば「もしコマンドラインではなく、スクリプトだったらどうなるか」を確認することできます。



 これはPerlをコマンドラインで使う上で、大きな発見を頂きました。
 次のようにコマンドラインから実行するとうまくいかず、変数展開がおかしいと疑っていたのですが、おかげで確認が出来ました。
u8w@u8w-desktop:~$ perl  -MO=Deparse -MFile::Find  -le  "find(\&xxx, './'); sub xxx{print qq($File::Find::name\n);}"
BEGIN { $/ = "\n"; $\ = "\n"; }
use File::Find;
find(\&xxx, './');
sub xxx {
    print "::Find::name\n";
}
-e syntax OK

 「\$File::Find::name」と変数名の頭をエスケープするとうまく行きました。
perl -e '$a="XXX"; print qq($a\n);'
のような通常の使い方の場合問題は出ないのですが、モジュールの変数を参照するときに「::」が含まれているのでおかしなことになるみたいです。時間を掛けて探し回ったのですが、解決方法は見つからず困っていました。



Powered by ScribeFire.

2009年10月28日

さくらのブログの過去記事を一覧のリストで取得

ブログの過去記事のアップロード日時を全て知りたいです。 RSSを使って日時を確認しようとしたのですが、 下記を取得すると http://blog.livedoor.jp/dqnplus/index.rdf 過.. - 人力検索はてな

 この記事を参考にさせていただきました。perlのスクリプトが紹介されていたので、試しに取得するURLの部分だけを書き換えて実行してみたところ、一発でうまく取得できました。
 しかし、結果をよく見てみると、一つ困った問題があることに気がつきました。せっかく取得できたリストのデータが記録された日付順に並んでいなかったんです。どういう規則で並んでいるのかも不明なのですが、8割方は順番に並んでいるように見えるものの実際はバラバラなのです。

 アーカイブのファイル名が例えば「2009-10.html」となっていますが、ブラウザからこのURLで接続すると記事の数に合わせて分割されたページのURLに置き換わりました。htmlという拡張子になっているので静的なhtmlファイルに見えますが、CGIやサーブレットで動的に生成されているページの可能性もあるかと思います。詳しく調べれば、仕組みもわかりそうですが、そこまではやっていません。

 分割されたページの数に応じて、「2009-10-1.html」、「2009-10-2.html」のように番号が振られ、今回自分の場合は5までありました。これはブラウザで接続したときのページにリンクとして表示されている数でもあるので、当然この番号に応じて記事が日付順に並んでいるはずだと考えました。

 そこでcurlコマンドを使い、次のように実行しました。
curl http://hirono-hideki.sblo.jp/archives/%04d-%02d-[1-5].html

 スクリプト中では変数を使っているので次のようになっています。これがhtmlを読み込むメインの部分です。
my $command = sprintf("curl -# http://hirono-hideki.sblo.jp/archives/%04d-%02d-[1-%d].html", $y, $m, $p);

 これでうまく順番通りに並んでくれるものと期待したのですが、結果はダメでした。さらにおかしなことに気がつきました。一月分のデータで「2009-10.html」などと指定しても肝心のリストのデータが取得できないのです。どうやら指定した年月から遡って一番古い記事までの範囲をすべてリクエストしなければ、必要なデータを得ることが出来ないみたいです。リクエストのヘッダ情報から応答の処理を切り替えているのか、それとも転送されたデータのバッファリングの問題なのか、と個人的に見当を付けているのですが、今までに経験したことのないような問題に遭遇してしまいました。

 一度、どういうわけか取得したhtmlのなかで、スクリプトで抜き出している情報を見ることができたのですが、その後はいろいろ試してみたものの、本体部分の抜けたスタイル情報のようなhtmlソースしか取得出来なくなりました。初めの方でたまたうまくいったときに、ソースコードを眺めて、カテゴリ情報の入っている部分を知ることが出来たので、これも参考にさせていただいたソースに付け加えました。他に変更点はコマンドをwgetからcurlに変更したことですが、curlの方が処理も速いみたいです。


ソースコード

#!/usr/bin/perl

#--- main
$y = 2009;
$p = 5;
while($y>=2009){
        $m = 10;
        while($m>=1){
                getDqn($y, $m);
                $m--;
        }
        $y--;
}
exit;


sub getDqn{
        sleep 1;
        my $command = sprintf("curl -# http://hirono-hideki.sblo.jp/archives/%04d-%02d.html", $y, $m);
        #my $command = sprintf("curl -# http://hirono-hideki.sblo.jp/archives/%04d-%02d-[1-%d].html", $y, $m, $p);
        open(my $fh, "$command |");
        while(<$fh>){
                print "TITLE: $1\n"   if(/dc:title="([^"]+)"/);
                print "CATEGORIE: $1\n" if(/dc:subject="([^"]+)"/);
                print "URL:   $1\n"   if(/dc:identifier="([^"]+)"/);
                print "DATE:  $1\n\n" if(/dc:date="([^"]+)"/);
        }
        close($fh);
}


 curlについては次のページを参考にさせていただきました。これまでにも何度かお世話になっているページです。実践的な使い方が書いてあります。
http://www.big.or.jp/~crane/cocoa/0800_internet/curl/

 curlを知り使うようになったのは3年ほど前でしょうか、Emacsのhatena-modeを動かすのに必要になりました。Linuxでも標準ではインストールされていないと思いますが、apt-getやyumで簡単に入るはずです。WindowsXPのMeadowでもhatena-modeを使っていたので、Windowsパソコンでもcurlを使えると思いますが、あれはCygwinのパッケージに含まれていたものであったかもしれません。

 スクリプトを実行した結果は次のような感じです。
TITLE: vimのシンタックスハイライト処理をクリップボードに入れる
URL:   http://hirono-hideki.sblo.jp/article/33157861.html
CATEGORIE: UNIXコマンドスクリプト
DATE:  2009-10-24T12:39:37+09:00

TITLE: ほとんど触れなかった場合、「捜査続行を意味し、立件を本気で目指している可能性が高い」
URL:   http://hirono-hideki.sblo.jp/article/33137174.html
CATEGORIE: 検察
DATE:  2009-10-23T13:05:07+09:00

TITLE: 娘の死に関する真相の一端でも知りたい、押尾被告の初公判に女性遺族が傍聴券求め並ぶ
URL:   http://hirono-hideki.sblo.jp/article/33136692.html
CATEGORIE: 刑事裁判
DATE:  2009-10-23T12:42:18+09:00

TITLE: 賠償責任を巡り県と市が争った裁判で、最高裁が初判断
URL:   http://hirono-hideki.sblo.jp/article/33136524.html
CATEGORIE: 日記
DATE:  2009-10-23T12:29:11+09:00

TITLE: 「宅八郎容疑者を書類送検 アキバ系と揶揄されミクシィに「ぶっ殺す」」:イザ!
URL:   http://hirono-hideki.sblo.jp/article/33136444.html
CATEGORIE: インターネット/ブログ
DATE:  2009-10-23T12:22:42+09:00

TITLE: [fml]メーリングリストの初期化
URL:   http://hirono-hideki.sblo.jp/article/33129065.html
CATEGORIE: インターネット/ブログ
DATE:  2009-10-23T02:56:48+09:00
TITLE: [fml]さくらインターネットのfmlでバージョン確認
URL:   http://hirono-hideki.sblo.jp/article/33124008.html
CATEGORIE: インターネット/ブログ
DATE:  2009-10-22T23:13:01+09:00
TITLE: fmlコマンドリファレンス
URL:   http://hirono-hideki.sblo.jp/article/33123840.html
CATEGORIE: 日記
DATE:  2009-10-22T23:03:13+09:00
 並べ替えもかねて、今度暇のあるとき、RubyでMySQLのデータベースに自動で登録するスクリプトを作り、それをRailsで検索表示が出来るようにしたいと考えています。このさくらのブログは今月の12日から始めたのですが、記事も100件近くになっているみたいで、もうこの段階においても目的の過去記事を探し出すのは容易ではなくなっています。
 Hatena::Diaryだと過去記事の一覧のページがあったり、検索機能でも記事名だけの表示が出来たので、本当に不便に感じていました。RSSだと最新記事から15件程度しか取得できないみたいですし、手作業でリストを作る気にもなれず、どうしたものかと頭を痛めていました。

 なお、「bloglines」(http://www.bloglines.com/myblogs)というサービスも参考にさせていただいたところで知り、早速登録して使ってみました。RSSの記事情報が蓄積されるみたいなのですが、まだ始めたところなので、どういう具合かよくわかりません。ざっとみたところカテゴリー別の表示なども出来ないみたいなので、記事が増えれば探し出すのに相当、時間も手間が掛かりそうです。








Powered by ScribeFire.

2009年10月24日

vimのシンタックスハイライト処理をクリップボードに入れる

スクリプトのコード
#!/bin/sh
if [ $# -ne 1 ]; then
    echo "引数にファイル名を一つ指定してください。"
    exit 1
else
    echo "${1}の変換処理をします。"
fi

SRC="`sed -e '1,/^$/d' -e 's%%%' -e 's%%%'  -e 's/#e80000/#e80000/g' $1`"
TS=`date '+%Y-%m-%d_%H:%M'`
ST="<!-- ${TS} ここから。 -->"
ET="<!-- ${TS} ここまで。 -->"

STY="
<div style=\"
      max-width:800px;
      font-family:Cebtry,Arial,srif;
      overflow: auto;
      background-color:#FBFFFD;
      border-style: solid;
      border-width: thin;
      border-color: #005899;
      padding:20px 10px 10px 20px;
\">
"

PAST="${ST}${STY}${SRC}</div>${ET}"

echo "$PAST" | xsel -b

echo "処理結果のソースコードをクリップボードに格納しました。"


<!-- 2009-10-24_12:38 ここまで。 -->


生成されたコード
<!-- 2009-10-24_12:38 ここから。 -->
<div style="
      max-width:800px;
      font-family:Cebtry,Arial,srif;
      overflow: auto;
      background-color:#FBFFFD;
      border-style: solid;
      border-width: thin;
      border-color: #005899;
      padding:20px 10px 10px 20px;
">
<font color="#8080ff">#!/bin/sh</font><br />
<font color="#e80000">if</font> <font color="#e80000">[</font> <font color="#ff40ff">$#</font> <font color="#e80000">-ne</font> <font color="#ff6060">1</font> <font color="#e80000">]</font><font color="#e80000">;</font> <font color="#e80000">then</font><br />
    <font color="#e80000">echo</font><font color="#ff6060"> </font><font color="#e80000">"</font><font color="#ff40ff">引数にファイル名を一つ指定してください。</font><font color="#e80000">"</font><br />
    <font color="#e80000">exit</font> <font color="#ff6060">1</font><br />
<font color="#e80000">else</font><br />
    <font color="#e80000">echo</font><font color="#ff6060"> </font><font color="#e80000">"</font><font color="#ff40ff">${</font><font color="#ff40ff">1</font><font color="#ff40ff">}</font><font color="#ff40ff">の変換処理をします。</font><font color="#e80000">"</font><br />
<font color="#e80000">fi</font><br />
<br />
<font color="#00ffff">SRC</font>=<font color="#e80000">"</font><font color="#ff40ff">`sed -e </font><font color="#e80000">'</font><font color="#ff6060">1,/^<body.*>$/d</font><font color="#e80000">'</font><font color="#ff40ff"> -e </font><font color="#e80000">'</font><font color="#ff6060">s%</body>%%</font><font color="#e80000">'</font><font color="#ff40ff"> -e </font><font color="#e80000">'</font><font color="#ff6060">s%</html>%%</font><font color="#e80000">'</font><font color="#ff40ff">  -e </font><font color="#e80000">'</font><font color="#ff6060">s/#e80000/#e80000/g</font><font color="#e80000">'</font><font color="#ff40ff"> </font><font color="#ff40ff">$1</font><font color="#ff40ff">`</font><font color="#e80000">"</font><br />
<font color="#00ffff">TS</font>=<font color="#ff40ff">`date </font><font color="#e80000">'</font><font color="#ff6060">+%Y-%m-%d_%H:%M</font><font color="#e80000">'</font><font color="#ff40ff">`</font><br />
<font color="#00ffff">ST</font>=<font color="#e80000">"</font><font color="#ff6060"><!-- </font><font color="#ff40ff">${</font><font color="#ff40ff">TS</font><font color="#ff40ff">}</font><font color="#ff6060"> </font><font color="#ff40ff">ここから。</font><font color="#ff6060"> --></font><font color="#e80000">"</font><br />
<font color="#00ffff">ET</font>=<font color="#e80000">"</font><font color="#ff6060"><!-- </font><font color="#ff40ff">${</font><font color="#ff40ff">TS</font><font color="#ff40ff">}</font><font color="#ff6060"> </font><font color="#ff40ff">ここまで。</font><font color="#ff6060"> --></font><font color="#e80000">"</font><br />
<br />
<font color="#00ffff">STY</font>=<font color="#e80000">"</font><br />
<font color="#ff6060"><div style=</font><font color="#ff40ff">\"</font><br />
<font color="#ff6060">      max-width:800px;</font><br />
<font color="#ff6060">      font-family:Cebtry,Arial,srif;</font><br />
<font color="#ff6060">      overflow: auto;</font><br />
<font color="#ff6060">      background-color:#FBFFFD;</font><br />
<font color="#ff6060">      border-style: solid;</font><br />
<font color="#ff6060">      border-width: thin;</font><br />
<font color="#ff6060">      border-color: #005899;</font><br />
<font color="#ff6060">      padding:20px 10px 10px 20px;</font><br />
<font color="#ff40ff">\"</font><font color="#ff6060">></font><br />
<font color="#e80000">"</font><br />
<br />
<font color="#00ffff">PAST</font>=<font color="#e80000">"</font><font color="#ff40ff">${</font><font color="#ff40ff">ST</font><font color="#ff40ff">}${</font><font color="#ff40ff">STY</font><font color="#ff40ff">}${</font><font color="#ff40ff">SRC</font><font color="#ff40ff">}</font><font color="#ff6060"></div></font><font color="#ff40ff">${</font><font color="#ff40ff">ET</font><font color="#ff40ff">}</font><font color="#e80000">"</font><br />
<br />
<font color="#e80000">echo</font><font color="#ff6060"> </font><font color="#e80000">"</font><font color="#ff40ff">$PAST</font><font color="#e80000">"</font><font color="#ff6060"> </font><font color="#e80000">|</font> xsel <font color="#ff40ff">-b</font><br />
<br />
<font color="#e80000">echo</font><font color="#ff6060"> </font><font color="#e80000">"</font><font color="#ff40ff">処理結果のソースコードをクリップボードに格納しました。</font><font color="#e80000">"</font><br />
<br />
<br />
</font></div><!-- 2009-10-24_12:38 ここまで。 -->

Powered by ScribeFire.



2009年10月22日

photozou-up.shソースコード

http://hirono-hideki.sblo.jp/article/33106728.html
で書いたのですが、シンタックスハイライトを使うと「</rsp>」のような部分が抜け落ちたりしていたので、別にあげておきます。


#!/bin/sh
if [ $# -ne 1 ]; then
    echo "引数に画像ファイル名を一つ指定してください。"
    exit 1
else
    echo "${1}をフォト蔵にアップロードします。"
fi

TEMPFILE="$$.tmp"

 curl -X POST --user hirono.h@po3.nsknet.or.jp:ib4OrqM0  -F "album_id=978701" -F "photo=@${1}" \
 http://api.photozou.jp/rest/photo_add > ./$TEMPFILE

 res=$( sed -e '1,/^.*\[CDATA\[/d' -e 's/^.*\[CDATA\[//' -e 's%]]></medium_tag>%%' -e 's%</rsp>%%' \
  -e 's/width=\"[0-9]*\" height=\"[0-9]*\"/width=\"800" height=\"600\"/' $TEMPFILE \
  | perl -p -e \
's/^(.+show\/\d+?\/)([^"]+)(.*<img src=")(http:[^"]+)(.*)/$1$2$3http:\/\/art16.photozou.jp\/bin\/photo\/$2\/org.bin?size=800$5/;')
 echo $res | xsel -i
 echo $res

 rm ./$TEMPFILE


Powered by ScribeFire.

2009年10月18日

ディレクトリを遡って文字列を置換

http://d.hatena.ne.jp/BigFatCat/20070807/1186461385

を参考にさせて頂きました。

 ノートパソコンから先ほどインストールした「Xfy Blog Editor」をディレクトリごとUbuntuのディスクトップパソコンにscpでコピーしました。

 さくらのぶろぐの設定をそのまま使いたかったのですが、feduというユーザ名でファイルのパスが記載され、ファイルが存在しないというエラーが出ていました。

 grepコマンドで調べたところ、複数のファイルに記述されているみたいだったので、次のコマンドを使って直したところ、うまく起動出来、先ほどの設定も有効になっていました。

find . -type f -exec perl -p -i -e 's%/home/fedu/%/home/u8w/%g' {} \;

 失敗してもディレクトリごとをコピーし直せばいいので気が楽でしたが、リスクのある作業なので、気をつけた方がいいと思います。

サムネイルになっているので画像をクリックすると拡大されます。

2009年10月14日

メール自動返信スクリプト

Syntaxhighlighter 参考:http://hisasann.com/housetect/2008/07/syntaxhighlighter.html 次のように使用:
 <pre name="code" class="言語名">
   ここにコードを書く。
 
 なぜかpreの閉じタグが表示されていないみたいです。


Syntax Highlighter
次のように使用:
 <pre class="brush: 言語名;">
    ここにコードを書く。
  

Powered by ScribeFire.



2009年10月13日

ソースコードのシンタックスハイライトGeSHi

JavaScriptを使ったシンタックスハイライトは、けっこう種類もあるようですが、このGeSHiはPHPを使ったスクリプトのようです。
http://www.phppro.jp/phptips/archives/vol31/2
を参考に使ってみたのですが、これは古いバージョンの使い方みたいでした。初めに最新のバージョンのものをダウンロードしたのですが、ファイルの構成自体が変わっているようで、メインとなるgeshi.phpというファイルすら存在しませんでした。

 PHPを使ったこと自体ずいぶん久しぶりで、長い間インストールもしていません。手持ちの環境にPHPは入れてないのですが、さくらインターネットのサーバでは、初めから使えるようになっていたので、簡単なスクリプトを作りそれで試してみました。
<span style="color: #808080; font-style: italic;">#!/usr/local/bin/php -q</span>
<span style="color: #000000; font-weight: bold;"><?php</span>
    <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #0000ff;">$argv</span><span style="color: #66cc66;">[</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">]</span>;
    <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #ff0000;">"<span style="color: #000099; font-weight: bold;">\n</span>を処理します。<span style="color: #000099; font-weight: bold;">\n</span>"</span>;
 
    <span style="color: #b1b100;">require_once</span> <span style="color: #ff0000;">"/home/hirono-hideki-01//apps/geshi/geshi.php"</span>;
    <span style="color: #0000ff;">$source</span> = <a href="http://www.php.net/file_get_contents"><span style="color: #000066;">file_get_contents</span></a><span style="color: #66cc66;">(</span><span style="color: #0000ff;">$argv</span><span style="color: #66cc66;">[</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">]</span><span style="color: #66cc66;">)</span>;
 
    <span style="color: #0000ff;">$geshi</span> = <span style="color: #000000; font-weight: bold;">new</span> GeSHi<span style="color: #66cc66;">(</span><span style="color: #0000ff;">$source</span>, <span style="color: #ff0000;">"bash"</span><span style="color: #66cc66;">)</span>;
 
    <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #0000ff;">$geshi</span>-><span style="color: #006600;">parse_code</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>;
<span style="color: #000000; font-weight: bold;">?></span>
 
 
 コマンドラインで実行し、引数に変換対象となるファイルを一つ指定しています。処理結果は標準出力への表示になります。さくらのサーバはPHPの環境が整っているのか、手を加えずに使えました。その点、Rubyではライブラリの追加も多く、それでも不便があったので、自前でソースファイルをコンパイルしてインストールし、そちらを使うようにしました。
 "bash”の部分を、argv[2]とすることで、変換のフォーマット形式を第2引数でしてすることが出来ます。GeSHiはプログラム言語のフォーマットの種類がとても多いそうです。


Powered by ScribeFire.

sedコマンドを使ったHTMLファイルの編集

<span style="color: #808080; font-style: italic;">#org-modeか らhtmlエクスポートされた
</span><span style="color: #808080; font-style: italic;">#htmlファイルをmapaeの 記事投稿用に加工する。
</span><span style="color: #cc66cc;">1</span>,/<\/head><body>/d
s/<\/body>//g
s/<\/html>//g
/Table of Contents/s/<h2>\<span style="color: #66cc66;">(</span>.*\<span style="color: #66cc66;">)</span><\/h2>/<div <span style="color: #0000ff;">style=</span><span style="color: #ff0000;">"color: red;"</span>>\<span style="color: #cc66cc;">1</span><\/div>/
s/<h2 /<h2 <span style="color: #0000ff;">class=</span><span style="color: #ff0000;">"hh"</span> /g
s/<h3 /<h3 <span style="color: #0000ff;">class=</span><span style="color: #ff0000;">"hh"</span> /g
s/<h4 /<h4 <span style="color: #0000ff;">class=</span><span style="color: #ff0000;">"hh"</span> /g
s/<h5 /<h5 <span style="color: #0000ff;">class=</span><span style="color: #ff0000;">"hh"</span> /g
 
 
dp.SyntaxHighlighterを使うと次のようにエラーが出る。他にも試したがダメ。
#org-modeからhtmlエクスポートされた
#htmlファイルをmapaeの記事投稿用に加工する。
1,/<\/head><body>/d
s/<\/body>//g
s/<\/html>//g
/Table of Contents/s/<h2>\(.*\)<\/h2>/<div style="color: red;">\1<\/div>/
s/<h2 /<h2 class="hh" /g
s/<h3 /<h3 class="hh" /g
s/<h4 /<h4 class="hh" /g
s/<h5 /<h5 class="hh" /g
 どうもタグの括弧が対になっていないのがいけないみたいです。
<h2 <span style="color: #0000ff;">id=</span><span style="color: #ff0000;">"sec-3"</span>>
 
 
のような部分を処理するので、閉じ括弧を変換対象に含めると正規表現が複雑になりそうです。なんとか出来そうですが、他のことで疲れてしまってやる気も起こりません。これも一つ勉強になりました。
使い方
 ファイルに名前を付けて保存
 sed -f 保存したファイル名 変換対象のファイル名
例:
sed -f saisinn/cocolog-css saisinn/kokuso-tex.html

注意点  sedコマンドは処理結果を端末に表示するだけなので、結果を残して使用したい場合は、リダイレクトで別ファイルとして保存。

 スクリプトをファイルとして保存せず、シェルから直接実行する場合は、特殊文字のエスケープが沢山必要になるので大変。


Powered by ScribeFire.

Emacsのorg-modeファイルをTexの改行に変換

#!/bin/bash

awk '{if($0 !~ /.*\\\\$/ && $0 !~ /^#.*$/ && $0 !~ /^$/ && $0 !~ /^\*/){print $0, "\\\\\n"} else {print $0}}' $1 |\
sed -e 's/^ //'  > /tmp/org.$$
mv /tmp/org.$$ $1


Powered by ScribeFire.