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

<channel>
	<title>ORBIT SPACE &#187; Perl</title>
	<atom:link href="http://www.orsp.net/blog/archives/tag/perl/feed" rel="self" type="application/rss+xml" />
	<link>http://www.orsp.net/blog</link>
	<description>10を聴いて1を知る学生が努力するブログ</description>
	<lastBuildDate>Fri, 03 Feb 2012 15:29:22 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.orsp.net/blog/archives/tag/perl/feed" />
		<item>
		<title>かんたんメール送信(添付ファイル対応) Perl用ライブラリ</title>
		<link>http://www.orsp.net/blog/archives/3032</link>
		<comments>http://www.orsp.net/blog/archives/3032#comments</comments>
		<pubDate>Sat, 17 Sep 2011 06:10:28 +0000</pubDate>
		<dc:creator>orbit</dc:creator>
				<category><![CDATA[Linux (Server)]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[PROGRAM]]></category>

		<guid isPermaLink="false">http://www.orsp.net/blog/?p=3032</guid>
		<description><![CDATA[――――――――――――――――――――――――――――――――――――― 【ソフト名】かんたんメール送信(添付ファイル対応) 【著作権者】ORBIT 【制作日】2011年09月17日 【種　別】Perlモジュール 【連 [...]]]></description>
			<content:encoded><![CDATA[<p>―――――――――――――――――――――――――――――――――――――<br />
【ソフト名】かんたんメール送信(添付ファイル対応)<br />
【著作権者】ORBIT<br />
【制作日】2011年09月17日<br />
【種　別】Perlモジュール<br />
【連絡先】http://orsp.net/blog/<br />
【配布元】http://orsp.net/blog/<br />
【圧縮形式】zip<br />
【動作環境】Sendmailコマンドの使えるUNIX系OS<br />
【開発環境】Perl5.8(標準モジュール Encode MIME::Base64 使用)<br />
―――――――――――――――――――――――――――――――――――――<br />
≪著作権および免責事項≫</p>
<p>　本ソフトはフリーソフトです。自由にご使用ください。なお，著作権は作者<br />
であるORBITが保有しています。</p>
<p>　このソフトウェアを使用したことによって生じたすべての障害・損害・不具<br />
合等に関しては、私と私の関係者および私の所属するいかなる団体・組織とも、<br />
一切の責任を負いません。各自の責任においてご使用ください。</p>
<p>・はじめに<br />
　メール送信を行うとき毎回文字操作を行うのが面倒だったためそれらを全て行う<br />
モジュールを作成しました。<br />
　わずか数行で添付ファイル付きのメールを送信できるため簡単なメールフォーム<br />
の作成等に強力な力を発揮すると思います。</p>
<p>・ファイル構成<br />
  readme.txt  ← 当ファイル<br />
  Sendmail.pm ← 本体</p>
<p>・インストール方法<br />
  対象のプロブラムと同じディレクトリにおいてください。</p>
<p>・使い方<br />
  Sendmail.pm最下部に簡単な利用法を記載してるのでそちらを御覧ください。</p>
<p>・履歴<br />
  2011年09月17日 Ver 1.0.0 公開</p>
<p>簡単な使用例</p>
<pre class="brush: perl; title: ; notranslate">
#!/usr/bin/perl
# 当モジュールを呼び出し
use Sendmail;

# オブジェクトの生成
my $send_obj = Sendmail-&gt;new({
        Subject =&gt; '件名',                     # 件名
        From    =&gt; 'user@mail.goge.net',       # 送信元
        });

# メール送信
$send_obj-&gt;sendmail(
                'user@mail.goge.net',          # 送信先
                '添付ファイル無し',            # メッセージ
                );

# メール送信
$send_obj-&gt;sendmail(
                'user@mail.goge.net',          # 送信先
                '添付ファイル有り',            # メッセージ
                'file.txt,日本語ファイル.txt'  # 添付ファイル(,で区切ると複数送信可能)
                );
</pre>
<p>ライセンス形態:GPL<br />
<a href='http://www.orsp.net/blog/archives/3032/sendmail' rel='attachment wp-att-3033'>Sendmail</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.orsp.net/blog/archives/3032/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.orsp.net/blog/archives/3032" />
	</item>
		<item>
		<title>オブジェクト指向 Perl プログラミング 設定用クラスのひな形</title>
		<link>http://www.orsp.net/blog/archives/3024</link>
		<comments>http://www.orsp.net/blog/archives/3024#comments</comments>
		<pubDate>Sat, 10 Sep 2011 14:09:13 +0000</pubDate>
		<dc:creator>orbit</dc:creator>
				<category><![CDATA[Linux (Server)]]></category>
		<category><![CDATA[PROGRAM]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://www.rosx.net/blog/?p=3024</guid>
		<description><![CDATA[Perlでオブジェクト指向なプログラミングを行う時設定ファイルの扱いに困った。confファイルでも使おうかと思ったが、Settingクラスを作ってやったところ思いの外使い勝手が良かったので公開してみる。 Settingク [...]]]></description>
			<content:encoded><![CDATA[<p>Perlでオブジェクト指向なプログラミングを行う時設定ファイルの扱いに困った。confファイルでも使おうかと思ったが、Settingクラスを作ってやったところ思いの外使い勝手が良かったので公開してみる。</p>
<p>Settingクラスは値の設定だけでなく外部の設定ファイルへのアクセスを行うメソッドを定義しておくことでメールのテンプレートや、禁止ワード等幅広い用途で外部の設定ファイルを素早く使う事ができる。</p>
<p>Settingクラス(Setting.cgi)のひな形</p>
<pre class="brush: perl; title: ; notranslate">
package Setting; # クラスのパッケージ名を宣言

sub new {
	my $class = shift;
	my $self= {
		# 設定項目を適当に作る
		setting1 =&gt; 'mogempoge',
		setting2 =&gt; 'hogehoge.txt',
		setting3 =&gt; 'hoguhogu.txt'
	};
	return bless $self , $class;
};

# テンプレートを記述したファイルから内容を読み取り変数に格納し、返すメソッド
sub read_config{
	my $self = shift; #クラスプロパティ
	$self-&gt;{ ConfigFile } = $_[0] if( @_ );

	open(my $fh, &quot;&lt;&quot;, $self-&gt;{ ConfigFile }) || die(&quot;Can not open file $self-&gt;{ ConfigFile }&quot;);
	my $file_contents;
	while( my $line = readline $fh ){
		$file_contents .= $line;
	}
	return $file_contents;
}

# 改行で区切られたワードを記述したファイルから内容を読み取り配列に格納し、返すメソッド
sub read_words {
	my $self = shift; #クラスプロパティ
	$self-&gt;{ ConfigFile } = $_[0] if( @_ );

	open(my $fh, &quot;&lt;&quot;, $self-&gt;{ ConfigFile }) || die(&quot;Can not open file $self-&gt;{ ConfigFile }&quot;);
	my @word_contents;
	while( my $line = readline $fh ){
		chomp($line); # 改行を削除
		push(@word_contents, $line);
	}
	return \@word_contents;
}

1;
</pre>
<p>mainクラス(Test.cgi)のひな形</p>
<pre class="brush: perl; title: ; notranslate">
#!/usr/bin/perl
BEGIN{ $| = 1; print &quot;Content-type: text/html\n\n&quot;; open(STDERR, &quot;&gt;&amp;STDOUT&quot;); }
# オプション関連の宣言
use strict;
use warnings;

# クラスを宣言
require &quot;Setting.cgi&quot;;
require &quot;Function.cgi&quot;;

# パッケージ名宣言
package main;

my $f_obj = Function-&gt;new();
$f_obj-&gt;function();
</pre>
<p>その他クラス(Function.cgi)で設定ファイルを読み込む場合のひな形</p>
<pre class="brush: perl; title: ; notranslate">
package Function; # クラスのパッケージ名を宣言

# コンストラクタを定義する時にSettingクラスを継承してあげる。
sub new {
	# 引数を受ける
	my ( $class, @args ) = @_;
	my %args = ref $args[0] eq 'HASH' ? %{ $args[0] } : @args;
	my $self = { %args }; #クラスプロパティ
	# オブジェクト生成
	$self = Setting-&gt;new();
	return bless $self , $class;
};

sub function{
	my $self = shift; #クラスプロパティ
	# &quot;setting1&quot;の値を表示する
	print $self-&gt;{ setting1 };
	# テンプレート&quot;setting2&quot;の内容を変数で受け取り表示する
	print $self-&gt;read_config( $self-&gt;{ setting2 } );
	# ワードリスト&quot;setting3&quot;の一覧を配列で受け取り表示する
	print $self-&gt;read_words( $self-&gt;{ setting3 } );
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.orsp.net/blog/archives/3024/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.orsp.net/blog/archives/3024" />
	</item>
		<item>
		<title>対ボット＋外国人用 平仮名＋和製漢字CAPTCHA  Perl用ライブラリ</title>
		<link>http://www.orsp.net/blog/archives/3011</link>
		<comments>http://www.orsp.net/blog/archives/3011#comments</comments>
		<pubDate>Mon, 05 Sep 2011 06:05:41 +0000</pubDate>
		<dc:creator>orbit</dc:creator>
				<category><![CDATA[Linux (Server)]]></category>
		<category><![CDATA[PROGRAM]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[未分類]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://www.rosx.net/blog/?p=3011</guid>
		<description><![CDATA[――――――――――――――――――――――――――――――――――――― 【ソフト名】かんたん日本語画像認証（アルファベットも可） 【著作権者】ORBIT 【制作日】2011年07月05日 【種　別】Perlモジュール [...]]]></description>
			<content:encoded><![CDATA[<p>―――――――――――――――――――――――――――――――――――――<br />
【ソフト名】かんたん日本語画像認証（アルファベットも可）<br />
【著作権者】ORBIT<br />
【制作日】2011年07月05日<br />
【種　別】Perlモジュール<br />
【連絡先】http://rosx.net/blog/<br />
【配布元】http://rosx.net/blog/<br />
【圧縮形式】zip<br />
【動作環境】Perl5とImage::Magick、sazanami-gothicをインストールしたLinux<br />
            Windows系OSでは動作しない事が確認されております。<br />
【開発環境】<br />
            CentOS5.6 perl, v5.8.8<br />
―――――――――――――――――――――――――――――――――――――<br />
≪著作権および免責事項≫</p>
<p>　本ソフトはフリーソフトです。自由にご使用ください。なお，著作権は作者<br />
であるORBITが保有しています。</p>
<p>　このソフトウェアを使用したことによって生じたすべての障害・損害・不具<br />
合等に関しては、私と私の関係者および私の所属するいかなる団体・組織とも、<br />
一切の責任を負いません。各自の責任においてご使用ください。</p>
<p>・はじめに<br />
　新しいフォームを作った時の副産物の公開です。わずか数行で画像認証機能<br />
を実装することが可能です。<br />
　海外のスパム・人間、共に日本特有の和製漢字・平仮名は入力できないこと<br />
に着目し今回の日本語画像認証を作成しました。</p>
<p>・ファイル構成<br />
readme.txt      当取説ファイル<br />
JCaptcha.pm     本ソフト<br />
background.jpg  画像認証用の下地となる画像ファイル<br />
tmp/imgs/       作成済みの画像ファイルを保存するディレクトリ</p>
<p>sazanami-gothic.ttf<br />
↑さざなみゴシック(フォント) ライセンスの関係上同封しておりません。</p>
<p>・導入方法<br />
efont プロジェクト日本語トップページ &#8211; SourceForge.JP</p>
<p>http://sourceforge.jp/projects/efont/</p>
<p>よりさざなみフォントをダウンロードし、sazanami-gothic.ttfのみ取り出し<br />
ファイル構成のようにJCaptcha.pmと同じディレクトリに格納する。</p>
<p>　画像認証機能を追加したい対象のプログラムと同じディレクトリに上記、<br />
ファイル構成を設置する。</p>
<p>・利用方法<br />
下記の使用例を参考にプログラムに組み込んでください。</p>
<p>簡単な使用例</p>
<pre class="brush: perl; title: ; notranslate">
#!/usr/bin/perl

# 当モジュールを呼び出し
use JCaptcha;

# オブジェクトの生成
my $obj = JCaptcha-&gt;new(
		Key    =&gt; RX, # 鍵を指定
		Lang   =&gt; JP,# 言語を指定(JP/ENG)
		Length =&gt; 10  # 文字の長さを指定
	);

# 認証画像作成用メソッドを呼び出す
my $tmp1 = $obj-&gt;makeimgcode(); # 認証用画像を作成し、その画像までのパスを受ける
print &quot;$tmp1\n&quot;; # 認証画像までのパスを受け取る

#==============================================#
# 画像を表示し、入力を行う処理を書いてください #
#==============================================#

# 認証
# 入力された文字列で認証を行い、正しければ&quot;1&quot;間違っていれば&quot;0&quot;を受ける
#（受け渡す文字列はフラグ無しUTF-8とする）
my $tmp2 = $obj-&gt;enimgcode('入力を受けた文字列');
print &quot;$tmp2\n&quot;; # if文などで認証の成功失敗を判別する
</pre>
<p>・履歴</p>
<p>2011年09月05日 Ver 1.0.0 公開</p>
<p>作成された画像認証用画像の一例<br />
<a href="http://www.rosx.net/blog/wp-content/uploads/2011/09/img.jpg" rel="shadowbox[sbpost-3011];player=img;" title="img"><img src="http://www.rosx.net/blog/wp-content/uploads/2011/09/img.jpg" alt="" title="img" width="200" height="50" class="alignnone size-full wp-image-3018" /></a></p>
<p>ライセンス形態:GPL<br />
Download:<a href='http://www.rosx.net/blog/wp-content/uploads/2011/09/JCaptcha.zip'>JCaptcha</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.orsp.net/blog/archives/3011/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.orsp.net/blog/archives/3011" />
	</item>
		<item>
		<title>ぴくぴくダウンローダ Ver β 03.03 Windows UNIX (MacOSX Linux) 対応</title>
		<link>http://www.orsp.net/blog/archives/2926</link>
		<comments>http://www.orsp.net/blog/archives/2926#comments</comments>
		<pubDate>Fri, 27 May 2011 03:32:21 +0000</pubDate>
		<dc:creator>orbit</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[PERSONAL COMPUTER]]></category>
		<category><![CDATA[PROGRAM]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[PC]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://www.orsp.net/blog/?p=2926</guid>
		<description><![CDATA[ぴくぴくダウンローダ Ver β 03.03でのバグを一部修正しました。 更新内容 絵師さんのID指定時に次のページに移動しない事があるようなので修正しました。 （Pixivの仕様が変わったため？不明です） 当ソフトの特 [...]]]></description>
			<content:encoded><![CDATA[<p>ぴくぴくダウンローダ Ver β 03.03でのバグを一部修正しました。</p>
<p><strong>更新内容</strong><br />
絵師さんのID指定時に次のページに移動しない事があるようなので修正しました。<br />
（Pixivの仕様が変わったため？不明です）</p>
<p><strong>当ソフトの特徴</strong><br />
・ブラウザでリンクを開かなくても自動で条件(タグ検索、ブックマーク数、絵師さんのID)を指定することで画像を収集します。</p>
<p>・最初HTMLファイルのみを取得し作品へのリンクを解析するためダウンロードする画像（Pixivへのアクセス）は最小限です。低負荷です。</p>
<p>・一度ダウンロードした作品はコミックはフォルダ分けされ管理されます。指定されたフォルダにある画像は多重ダウンロードを行いません。</p>
<p>・バッチファイル等にコマンドを記述し指定した時間に実行させることも可能です。（絵師さんの新しい作品を定期的に収集し同期します。）</p>
<p>このバージョンにはバグがあります。ぴくぴくダウンローダ β C01.01をご利用ください。</p>
<p>当サーバからダウンロード<br />
<del datetime="2011-09-20T12:31:12+00:00">Download：<a href='http://www.rosx.net/blog/wp-content/uploads/2011/05/pixpix_downloader-b03.03.zip'>ぴくぴくダウンローダ β03.03</a>　</del><br />
※ 帯域制限がかかってるのでミラーでダウンロードすることを推薦します。<br />
（環境によってはダウンロードに失敗する事があります。）</p>
<p>ミラー<br />
<del datetime="2011-09-20T12:31:12+00:00">Download：<a href="https://rapidshare.com/files/3758178432/pixpix_downloader_b03.03.zip">ぴくぴくダウンローダ β03.03</a>　Rapidshare</del><br />
<del datetime="2011-09-20T12:31:12+00:00">Download：<a href="http://www.megaupload.com/?d=H7AP611A">ぴくぴくダウンローダ β03.03</a>　MEGAUPLOAD</del></p>
<p>動作例）<br />
Windows 7 (検索ワード,ミク　ブックマーク数,5以上)<br />
<a href="http://www.rosx.net/blog/wp-content/uploads/2011/05/WS000013.jpg" rel="shadowbox[sbpost-2926];player=img;" title="WS000013"><img src="http://www.rosx.net/blog/wp-content/uploads/2011/05/WS000013-300x214.jpg" alt="" title="WS000013" width="300" height="214" class="alignnone size-medium wp-image-2874" /></a></p>
<p>MacOSX 10.6 (検索ワード,ミク)<br />
<a href="http://www.rosx.net/blog/wp-content/uploads/2011/05/b8bbe2804cebb5701ab9d8547a56227d.png" rel="shadowbox[sbpost-2926];player=img;" title="スクリーンショット（2011-05-23 12.19.19）"><img src="http://www.rosx.net/blog/wp-content/uploads/2011/05/b8bbe2804cebb5701ab9d8547a56227d-300x210.png" alt="" title="スクリーンショット（2011-05-23 12.19.19）" width="300" height="210" class="alignnone size-medium wp-image-2885" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.orsp.net/blog/archives/2926/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.orsp.net/blog/archives/2926" />
	</item>
		<item>
		<title>Perlで簡易WEBサーバを書く</title>
		<link>http://www.orsp.net/blog/archives/2918</link>
		<comments>http://www.orsp.net/blog/archives/2918#comments</comments>
		<pubDate>Wed, 25 May 2011 23:50:18 +0000</pubDate>
		<dc:creator>orbit</dc:creator>
				<category><![CDATA[PERSONAL COMPUTER]]></category>
		<category><![CDATA[PROGRAM]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://www.orsp.net/blog/?p=2918</guid>
		<description><![CDATA[なんとなく書いてみました。リファラやユーザエージェントとかそんなものは環境変数として取得できませんしForkもしません。とりあえず動かして一対一でHTMLファイルや画像ファイルを表示するだけです。ファイヤウォールを外せば [...]]]></description>
			<content:encoded><![CDATA[<p>なんとなく書いてみました。リファラやユーザエージェントとかそんなものは環境変数として取得できませんしForkもしません。とりあえず動かして一対一でHTMLファイルや画像ファイルを表示するだけです。ファイヤウォールを外せば他のパソコンからも閲覧できたりします。（危ないのでやらないようにｗ）</p>
<pre class="brush: perl; title: ; notranslate">
#!/usr/bin/perl -w
use FindBin;
use Socket qw/sockaddr_in inet_ntoa/;
use HTTP::Daemon;
use HTTP::Status;

# バッファリングしない
local $| = 1;
# 公開パス
my $public_path = &quot;$FindBin::Bin&quot;.&quot;/public_html&quot;;
my %in; # ブラウザからデータを受け取るハッシュを初期化

my $daemon = HTTP::Daemon-&gt;new(LocalAddr =&gt; '',LocalPort =&gt; &quot;8080&quot;);
print &quot;START SERVER $public_pathn&quot;;

while (my ( $client, $peer_addr ) = $daemon-&gt;accept){ # メインループ

    my ( $port, $iaddr ) = sockaddr_in($peer_addr); # PortとIPを取得する
    my $remote_addr = inet_ntoa($iaddr); # バイナリ状態のIPを変換する
    print &quot;Access IP: $remote_addrn&quot;;

    while (my $request = $client-&gt;get_request){ # リクエスト処理ループ

        if ($request-&gt;method eq 'GET'){

            my $resource = $request-&gt;url-&gt;path;

            # GETで送られてきた情報を取得
            my $get_request = $request-&gt;url;
            my $get_data = &quot;&quot;; $get_data = $1 if($get_request =~ m/.*?(.+)/);
            &amp;get_form($get_data) if($get_data);

            print &quot;---&gt; PATH: $resource GET: $get_datan&quot;;
            foreach my $key (keys (%in)){print &quot;------&gt; HASH: $key -&gt; $in{$key}n&quot;;}

            if($resource =~ m/^/-_-/){ # インフォメーションページ
                my $header = HTTP::Headers-&gt;new( 'Content-Type' =&gt; 'text/html' );
                my $res = HTTP::Response-&gt;new( 200, 'OK', $header );
                $client-&gt;send_response($res);
                print $client &quot;日本語でおｋ？ PATH: $resource GET: $get_data IP: $remote_addrn&quot;;
            }elsif($resource =~ m//$/){ # ファイル名を省略していたらとりあえず&quot;index.html&quot;を表示する
                $client-&gt;send_file_response($public_path.$resource.&quot;index.html&quot;);
            }else{ # それ以外はファイルを探して表示
                $client-&gt;send_file_response($public_path.$resource);
            }

        }

    }

    $client-&gt;close;

}

sub get_form{
	%in = (); my ($get_data) = @_ ;
	foreach my $data (split(/&amp;/, $get_data)) {
		my ($key, $value) = split(/=/, $data);

		$value =~ s/+/ /g;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1))/eg;
		$value =~ s/t//g;

		$in{&quot;$key&quot;} = $value;
	}
}
</pre>
<p>ブラウザで適当にhttp://127.0.01:8080/-_-/ でアクセスすれば下記のような返答があると思います。<br />
日本語でおｋ？ PATH: /-_-/ GET:  IP: 127.0.0.1</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orsp.net/blog/archives/2918/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.orsp.net/blog/archives/2918" />
	</item>
		<item>
		<title>Pixiv 画像 ダウンロード ぴくぴくダウンローダ Ver β 03.00 公開</title>
		<link>http://www.orsp.net/blog/archives/2873</link>
		<comments>http://www.orsp.net/blog/archives/2873#comments</comments>
		<pubDate>Sat, 21 May 2011 06:22:04 +0000</pubDate>
		<dc:creator>orbit</dc:creator>
				<category><![CDATA[PERSONAL COMPUTER]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[PROGRAM]]></category>

		<guid isPermaLink="false">http://www.orsp.net/blog/?p=2873</guid>
		<description><![CDATA[大まかな更新内容 ＊コミックのダウンロードでフォルダー分けするようになりました。（重複ダウンロード対策済み） ＊多重ダウンロード対策の強化でPixivサーバへの負荷軽減を目指しました。 ＊ブックマーク数の制限でPixiv [...]]]></description>
			<content:encoded><![CDATA[<p>大まかな更新内容<br />
＊コミックのダウンロードでフォルダー分けするようになりました。（重複ダウンロード対策済み）<br />
＊多重ダウンロード対策の強化でPixivサーバへの負荷軽減を目指しました。<br />
＊ブックマーク数の制限でPixivの仕様が若干変更されているみたいなので対策しました。</p>
<p>cielavenir さん の修正していただいたソースを元に更新しました。</p>
<p>動作画面　タグ検索(ミク) ブックマーク数(5以上)で動作させております。<br />
<a href="http://www.rosx.net/blog/wp-content/uploads/2011/05/WS000013.jpg" rel="shadowbox[sbpost-2873];player=img;" title="WS000013"><img src="http://www.rosx.net/blog/wp-content/uploads/2011/05/WS000013-300x214.jpg" alt="" title="WS000013" width="300" height="214" class="alignnone size-medium wp-image-2874" /></a></p>
<p><del datetime="2011-05-23T11:59:22+00:00">ダウンロード：<a href='#http://www.rosx.net/blog/wp-content/uploads/2011/05/pixpix_downloader-b03.00.zip'>ぴくぴくダウンローダ Ver β 03.00</a></del></p>
<p><del datetime="2011-05-23T11:59:22+00:00">※　近日中にVectorへ更新の申請を行います。更新されるまではこちらからダウンロードするようお願いいたします。</del><br />
※ ファイルの入れ間違いがありました。すでにぴくぴくダウンローダ Ver β 03.01を公開しておりますのでそちらをご利用ください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orsp.net/blog/archives/2873/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.orsp.net/blog/archives/2873" />
	</item>
		<item>
		<title>二分探索の処理の様子を細かく見てみる</title>
		<link>http://www.orsp.net/blog/archives/2837</link>
		<comments>http://www.orsp.net/blog/archives/2837#comments</comments>
		<pubDate>Fri, 13 May 2011 08:37:33 +0000</pubDate>
		<dc:creator>orbit</dc:creator>
				<category><![CDATA[PERSONAL COMPUTER]]></category>
		<category><![CDATA[PROGRAM]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://www.orsp.net/blog/?p=2837</guid>
		<description><![CDATA[二分探索の仕組みを詳しく見てみようと思う。サンプルコードはPerlで書いているがCやRuby、Javaなどほかの言語も似たようなものだと思う。 サンプルコード 変数や条件式の動きを追ってみると次のようになっていることが分 [...]]]></description>
			<content:encoded><![CDATA[<p>二分探索の仕組みを詳しく見てみようと思う。サンプルコードはPerlで書いているがCやRuby、Javaなどほかの言語も似たようなものだと思う。</p>
<p>サンプルコード</p>
<pre class="brush: perl; title: ; notranslate">
#!/usr/bin/perl -w

# パラメータ
my $left = 0; my $right = 100; my $target = 140;
my @a; # 初期化

# 0～100までの数字を二倍しながら配列@aに追加
foreach my $i ($left..$right) {push(@a,$i*2);}

# 配列@aのリファレンスとその他引数を添えて二分探索関数を実行する
print &amp;binary_search (@a , $left , $right , $target);

sub binary_search{
	# 配列@aのリファレンスと引数の受け取り
	my ($a , $left , $right , $target) = @_;
	# リファレンス$aを使い配列@aを読み込む
	my @a = @{$a};
	while($left &lt;= $right){
		my $mid = int(($left + $right) / 2);
		if($a[$mid] == $target){
			return $mid;
		}elsif($a[$mid] &lt; $target){
			$left = $mid + 1;
		}else{
			$right = $mid - 1;
		}
	}
	return -1;
}
</pre>
<p>変数や条件式の動きを追ってみると次のようになっていることが分かる。</p>
<table border="1" cellpadding="5" >
<tr>
<th>$left</th>
<th>$right</th>
<th>$mid</th>
<th>if($a[$mid] == $target)</th>
</tr>
<tr>
<td>0</td>
<td>100</td>
<td>(0 + 100) / 2 = 50</td>
<td>100 < 140 → 50 + 1 ($left)</td>
</tr>
<tr>
<td>51</td>
<td>100</td>
<td>(51 + 100) / 2 = 75</td>
<td>150 > 140 → 75 &#8211; 1 ($right)</td>
</tr>
<tr>
<td>51</td>
<td>74</td>
<td>(51 + 74) / 2 = 62</td>
<td>126 < 140 → 62 + 1 ($left)</td>
</tr>
<tr>
<td>63</td>
<td>74</td>
<td>(63 + 74) / 2 = 68</td>
<td>137 < 140 → 68 + 1 ($left)</td>
</tr>
<tr>
<td>69</td>
<td>74</td>
<td>(69 + 74) / 2 = 71</td>
<td>143 > 140 → 71 &#8211; 1 ($right)</td>
</tr>
<tr>
<td>69</td>
<td>70</td>
<td>(69 + 70) / 2 = 69</td>
<td>139 > 140 → 69 + 1 ($right)</td>
</tr>
<tr>
<td>70</td>
<td>70</td>
<td>(70 + 70) / 2 = 74</td>
<td>140 == 140 → END</td>
</tr>
</table>
<p>二分探索の仕組みも分かったがPerlのリファレンスについても勉強になった。<br />
一石二鳥ですね～</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orsp.net/blog/archives/2837/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.orsp.net/blog/archives/2837" />
	</item>
		<item>
		<title>Twitter フォロワー同期(フォロー専用)Bot Perl 作成編</title>
		<link>http://www.orsp.net/blog/archives/2778</link>
		<comments>http://www.orsp.net/blog/archives/2778#comments</comments>
		<pubDate>Sun, 10 Apr 2011 09:42:10 +0000</pubDate>
		<dc:creator>orbit</dc:creator>
				<category><![CDATA[PERSONAL COMPUTER]]></category>
		<category><![CDATA[PROGRAM]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Bot]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.orsp.net/blog/?p=2778</guid>
		<description><![CDATA[とりあえずさっきのプログラムを書きなおして完全にフォロワーさんを同期するプログラムを書きました。 Botみたいで(処理してるのはBotですが・・・)味気ないけど仕方ないですねｗｗｗｗ うん。書いてて思った。今まで差分取る [...]]]></description>
			<content:encoded><![CDATA[<p>とりあえずさっきのプログラムを書きなおして完全にフォロワーさんを同期するプログラムを書きました。<br />
Botみたいで(処理してるのはBotですが・・・)味気ないけど仕方ないですねｗｗｗｗ</p>
<pre class="brush: perl; title: ; notranslate">
#!/usr/bin/perl
use utf8;
use strict;
use warnings;

# モジュール使用宣言
use Array::Diff;
use Data::Dumper;
use Net::Twitter;
use YAML::Tiny;
use Encode;
use FindBin;

# 現在のパスから見て設定ファイルを読み込み
my $config = (YAML::Tiny-&gt;read($FindBin::Bin . '/config.yml'))-&gt;[0];
# OAuth認証
my $twitter = Net::Twitter-&gt;new(
     traits =&gt; ['API::REST', 'OAuth'],
     consumer_key =&gt; $config-&gt;{'consumer_key'},
     consumer_secret =&gt; $config-&gt;{'consumer_secret'}
);
$twitter-&gt;access_token($config-&gt;{'access_token'});
$twitter-&gt;access_token_secret($config-&gt;{'access_token_secret'});
# 認証失敗時の処理
die('Auth failed:'.$config-&gt;{'username'}) unless ( $twitter-&gt;authorized ) ;

# ユーザー名を含むユーザー情報を取得
my $cr = $twitter-&gt;verify_credentials;
my $own_id = $cr-&gt;{id};

my $nextc = -1; # paging default.
my @following_id_list; # outgo

# APIの仕様？から一度に100人までしか取得できないから0が返ってくるまでdoブロックをループ
do{
	# パラメータcursorは前回取得したフォローイングまでの番号が入っている
	my $following_list = $twitter-&gt;friends_ids({ id=&gt;$own_id, cursor =&gt; $nextc });
	$nextc = $following_list-&gt;{next_cursor};
	# 配列からフォローイングのidを取得
	foreach my $id (@{ $following_list-&gt;{ids} }){
		push(@following_id_list, $id); # 後で比較するためにフォローイングを配列に保管
	}
}while($nextc!=0);
# 文字昇順でソート
@following_id_list = sort @following_id_list; 

$nextc = -1;
my @followers_id_list; # income

# APIの仕様？から一度に100人までしか取得できないから0が返ってくるまでdoブロックをループ
do{
	# パラメータcursorは前回取得したフォロワーまでの番号が入っている
	my $followers_list = $twitter-&gt;followers_ids({ id=&gt;$own_id, cursor =&gt; $nextc });
	$nextc = $followers_list-&gt;{next_cursor};
	# 配列からフォロワーのidを取得
	foreach my $id (@{ $followers_list-&gt;{ids} }){
		push(@followers_id_list, $id); # 後で比較するためにフォロワーを配列に保管
	}
}while($nextc!=0);
# 文字昇順でソート
@followers_id_list = sort @followers_id_list; 

# 差分を取得(フォローイング)
my $diff_following = Array::Diff-&gt;diff(@following_id_list, @followers_id_list);

# 差分を取得(フォロワー)
my $diff_followers = Array::Diff-&gt;diff(@followers_id_list, @following_id_list);

# リムった人をリム返し
foreach my $delid_following (@{ $diff_following-&gt;{deleted} }){
	$twitter-&gt;destroy_friend($delid_following);
}

# フォローした人をフォロー返し
foreach my $delid_followers (@{ $diff_followers-&gt;{deleted} }){
	$twitter-&gt;create_friend($delid_followers);
}
</pre>
<p>うん。書いてて思った。今まで差分取るとかループで比較するだけじゃんとか思ってたけどData::Dumperって結構便利だなｗ　今度機会があったら使ってみようかな？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orsp.net/blog/archives/2778/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.orsp.net/blog/archives/2778" />
	</item>
		<item>
		<title>Twitter フォロワー同期(リム専用)Bot  Perl 解析編</title>
		<link>http://www.orsp.net/blog/archives/2775</link>
		<comments>http://www.orsp.net/blog/archives/2775#comments</comments>
		<pubDate>Sun, 10 Apr 2011 09:21:43 +0000</pubDate>
		<dc:creator>orbit</dc:creator>
				<category><![CDATA[Linux (Server)]]></category>
		<category><![CDATA[PERSONAL COMPUTER]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Bot]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[PROGRAM]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.orsp.net/blog/?p=2775</guid>
		<description><![CDATA[自動でフォローされたらフォローし返すプログラムを書きたいけどNet::Twitterの使い方がわからなかったのでとりあえずフォロワー同期(リム専用)Botのソースをマニュアルを読みながら適当に解析してコメント打ちました。 [...]]]></description>
			<content:encoded><![CDATA[<p>自動でフォローされたらフォローし返すプログラムを書きたいけどNet::Twitterの使い方がわからなかったのでとりあえずフォロワー同期(リム専用)Botのソースをマニュアルを読みながら適当に解析してコメント打ちました。</p>
<p>マニュアル：<a href="http://search.cpan.org/~mmims/Net-Twitter-3.14002/lib/Net/Twitter.pod">Net::Twitter(英語)</a><br />
参考にさせて頂いたソース：<a href="http://d.hatena.ne.jp/uzulla/20100623/p2">■[メモ]Twitterで自動フォロー削除</a></p>
<pre class="brush: perl; title: ; notranslate">
#!/usr/bin/perl
use utf8;
use strict;
use warnings;

# モジュール使用宣言
use Array::Diff;
use Data::Dumper;
use Net::Twitter;
use YAML::Tiny;
use Encode;
use FindBin;

# 現在のパスから見て設定ファイルを読み込み
my $config = (YAML::Tiny-&gt;read($FindBin::Bin . '/config.yml'))-&gt;[0];
# OAuth認証
my $twitter = Net::Twitter-&gt;new(
     traits =&gt; ['API::REST', 'OAuth'],
     consumer_key =&gt; $config-&gt;{'consumer_key'},
     consumer_secret =&gt; $config-&gt;{'consumer_secret'}
);
$twitter-&gt;access_token($config-&gt;{'access_token'});
$twitter-&gt;access_token_secret($config-&gt;{'access_token_secret'});
# 認証失敗時の処理
die('Auth failed:'.$config-&gt;{'username'}) unless ( $twitter-&gt;authorized ) ;

# ユーザー名を含むユーザー情報を取得
my $cr = $twitter-&gt;verify_credentials;
my $own_id = $cr-&gt;{id};

my $nextc = -1; # paging default.
my @following_id_list; # outgo

# APIの仕様？から一度に100人までしか取得できないから0が返ってくるまでdoブロックをループ
do{
	# cursorは前回取得したフォローイングまでの番号が入っている
	my $following_list = $twitter-&gt;friends_ids({ id=&gt;$own_id, cursor =&gt; $nextc });
	$nextc = $following_list-&gt;{next_cursor};
	# 配列からフォローイングのidを取得
	foreach my $id (@{ $following_list-&gt;{ids} }){
		push(@following_id_list, $id); # 後で比較するためにフォローイングを配列に保管
	}
}while($nextc!=0);
# 文字昇順でソート
@following_id_list = sort @following_id_list; 

$nextc = -1;
my @followers_id_list; # income
do{
	# cursorは前回取得したフォロワーまでの番号が入っている
	my $followers_list = $twitter-&gt;followers_ids({ id=&gt;$own_id, cursor =&gt; $nextc });
	$nextc = $followers_list-&gt;{next_cursor};
	# 配列からフォロワーのidを取得
	foreach my $id (@{ $followers_list-&gt;{ids} }){
		push(@followers_id_list, $id); # 後で比較するためにフォロワーを配列に保管
	}
}while($nextc!=0);
# 文字昇順でソート
@followers_id_list = sort @followers_id_list; 

# 差分を取得
my $diff = Array::Diff-&gt;diff(@following_id_list, @followers_id_list);

# リムった人をリム返し
foreach my $delid (@{ $diff-&gt;{deleted} }){
	$twitter-&gt;destroy_friend($delid);
}
</pre>
<p>だいたい構造がわかったのでちゃちゃっと書き足しましょうか＾＾</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orsp.net/blog/archives/2775/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.orsp.net/blog/archives/2775" />
	</item>
		<item>
		<title>ぴくぴくダウンローダ　インストーラ付き　公開　β01.00</title>
		<link>http://www.orsp.net/blog/archives/2684</link>
		<comments>http://www.orsp.net/blog/archives/2684#comments</comments>
		<pubDate>Thu, 20 Jan 2011 06:52:18 +0000</pubDate>
		<dc:creator>orbit</dc:creator>
				<category><![CDATA[PERSONAL COMPUTER]]></category>
		<category><![CDATA[PROGRAM]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Pixiv]]></category>

		<guid isPermaLink="false">http://www.orsp.net/blog/?p=2684</guid>
		<description><![CDATA[Pixivの画像を寝ている合間もひたすらダウンロードするソフトです。 インストール画面 動作画面 pixpix_downloader β01.00 このバージョンは古いです。最新のバージョンをダウンロードしてください。]]></description>
			<content:encoded><![CDATA[<p>Pixivの画像を寝ている合間もひたすらダウンロードするソフトです。</p>
<p>インストール画面<br />
<a href="http://www.rosx.net/blog/wp-content/uploads/2011/01/WS000060.jpg" rel="shadowbox[sbpost-2684];player=img;" title="WS000060"><img src="http://www.rosx.net/blog/wp-content/uploads/2011/01/WS000060-300x224.jpg" alt="" title="WS000060" width="300" height="224" class="alignnone size-medium wp-image-2685" /></a></p>
<p><a href="http://www.rosx.net/blog/wp-content/uploads/2011/01/WS000061.jpg" rel="shadowbox[sbpost-2684];player=img;" title="WS000061"><img src="http://www.rosx.net/blog/wp-content/uploads/2011/01/WS000061-300x224.jpg" alt="" title="WS000061" width="300" height="224" class="alignnone size-medium wp-image-2686" /></a></p>
<p><a href="http://www.rosx.net/blog/wp-content/uploads/2011/01/WS000062.jpg" rel="shadowbox[sbpost-2684];player=img;" title="WS000062"><img src="http://www.rosx.net/blog/wp-content/uploads/2011/01/WS000062-300x224.jpg" alt="" title="WS000062" width="300" height="224" class="alignnone size-medium wp-image-2687" /></a></p>
<p>動作画面<br />
<a href="http://www.rosx.net/blog/wp-content/uploads/2011/01/WS0000581.jpg" rel="shadowbox[sbpost-2684];player=img;" title="WS000058"><img src="http://www.rosx.net/blog/wp-content/uploads/2011/01/WS0000581-300x233.jpg" alt="" title="WS000058" width="300" height="233" class="alignnone size-medium wp-image-2688" /></a></p>
<p><del datetime="2011-05-25T21:40:38+00:00"><a href='#http://www.rosx.net/blog/wp-content/uploads/2011/01/a8bc6f0dea0980d5fef7aa9a6b55e5e6.zip'>pixpix_downloader β01.00</a></del><br />
このバージョンは古いです。最新のバージョンをダウンロードしてください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orsp.net/blog/archives/2684/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.orsp.net/blog/archives/2684" />
	</item>
	</channel>
</rss>

