2013年11月6日水曜日

2013/10/27現在のPlaggerに必要なモジュールの取得その2

次にperl moduleをインストールしていきます。
私の環境で2時間程度かかりました。
一つ一つインストールして確認しながらやっていくのも
いいのかもしれませんが私はscriptを組んで
実行後screenをデタッチして別作業を行っていました。
好みによると思いますので適宜読み直して下さい。
ここではinst02.shという名前で新規作成していきます。

--ここから--
#!/bin/bash
export CPANM_CMD=/usr/local/UserPerl/bin/cpanm
curl -L http://xrl.us/cpanm | perl - App::cpanminus
$CPANM_CMD local::lib
$CPANM_CMD -L /usr/local parent
$CPANM_CMD Test::Harness
$CPANM_CMD Module::Install
$CPANM_CMD Module::Install::AuthorTests
$CPANM_CMD HTTP::Tiny
$CPANM_CMD CPAN::DistnameInfo
$CPANM_CMD App::pmuninstall
$CPANM_CMD YAML
$CPANM_CMD XML::LibXML
$CPANM_CMD Class::Accessor
$CPANM_CMD Module::Pluggable::Fast
$CPANM_CMD UNIVERSAL::require
$CPANM_CMD XML::Liberal
$CPANM_CMD Encode::Detect
$CPANM_CMD AppConfig
$CPANM_CMD Template
$CPANM_CMD Image::Info
$CPANM_CMD Config::Simple
$CPANM_CMD XML::SAX::Expat
$CPANM_CMD XML::Simple
$CPANM_CMD Time::HiRes
$CPANM_CMD Date::Parse
$CPANM_CMD IO::AtomicFile
$CPANM_CMD Try::Tiny
$CPANM_CMD Test::Fatal
$CPANM_CMD Module::Runtime
$CPANM_CMD List::MoreUtils
$CPANM_CMD Dist::CheckConflicts
$CPANM_CMD Test::Requires
$CPANM_CMD Module::Implementation
$CPANM_CMD Params::Validate
$CPANM_CMD Package::Stash::XS
$CPANM_CMD Package::Stash
$CPANM_CMD Params::Util
$CPANM_CMD Sub::Install
$CPANM_CMD Data::OptList
$CPANM_CMD Class::Load
$CPANM_CMD Log::Dispatch
$CPANM_CMD Net::Delicious
$CPANM_CMD Digest::SHA
$CPANM_CMD Archive::Zip
$CPANM_CMD Net::Telnet
$CPANM_CMD Term::ReadKey
$CPANM_CMD Term::ReadLine
$CPANM_CMD Text::Glob
$CPANM_CMD Probe::Perl
$CPANM_CMD IPC::Run3
$CPANM_CMD Test::Script
$CPANM_CMD File::Which
$CPANM_CMD --force Term::ReadLine::Perl
$CPANM_CMD File::HomeDir
$CPANM_CMD YAML::Syck
$CPANM_CMD IO::Tty
$CPANM_CMD Expect
$CPANM_CMD IPC::Run
$CPANM_CMD Module::Signature
$CPANM_CMD Capture::Tiny
$CPANM_CMD IO::CaptureOutput
$CPANM_CMD CPAN::Version
$CPANM_CMD Test::Reporter
$CPANM_CMD File::pushd
$CPANM_CMD Devel::Autoflush
$CPANM_CMD File::Spec
$CPANM_CMD File::Temp
$CPANM_CMD Config::Tiny
$CPANM_CMD CPAN::Reporter
$CPANM_CMD Kwalify
$CPANM_CMD Pod::Simple
$CPANM_CMD Test::Pod
$CPANM_CMD Devel::Symdump
$CPANM_CMD Pod::Coverage
$CPANM_CMD Test::Pod::Coverage
$CPANM_CMD XML::NamespaceSupport
$CPANM_CMD XML::SAX::Base
$CPANM_CMD XML::SAX
$CPANM_CMD HTML::Entities::Numbered
$CPANM_CMD XML::Parser
$CPANM_CMD DBI
$CPANM_CMD RDF::Core
$CPANM_CMD XML::FOAF
$CPANM_CMD Test::Tester
$CPANM_CMD Test::NoWarnings
$CPANM_CMD Test::Deep
$CPANM_CMD Mail::Header
$CPANM_CMD MIME::Parser
$CPANM_CMD Net::SSLeay
$CPANM_CMD IO::Socket::SSL
$CPANM_CMD IO::SessionData
$CPANM_CMD Class::Inspector
$CPANM_CMD Task::Weaken
$CPANM_CMD SOAP::Lite
$CPANM_CMD XMLRPC::Lite
$CPANM_CMD Algorithm::Diff
$CPANM_CMD Text::Diff
$CPANM_CMD HTTP::Cookies::Mozilla
$CPANM_CMD DateTime::Locale
$CPANM_CMD Sub::Exporter
$CPANM_CMD Test::Output
$CPANM_CMD Class::Singleton
$CPANM_CMD DateTime::TimeZone
$CPANM_CMD DateTime
$CPANM_CMD DateTime::Format::W3CDTF
$CPANM_CMD DateTime::Format::Mail
$CPANM_CMD XML::RSS::LibXML
$CPANM_CMD WebService::Bloglines
$CPANM_CMD FCGI
$CPANM_CMD CGI
$CPANM_CMD PadWalker
$CPANM_CMD Devel::Cycle
$CPANM_CMD Test::Memory::Cycle
$CPANM_CMD Carp
$CPANM_CMD Sub::Uplevel
$CPANM_CMD File::Slurp
$CPANM_CMD Tree::DAG_Node
$CPANM_CMD Test::Warn
$CPANM_CMD Test::Taint
$CPANM_CMD Test::LongString
$CPANM_CMD HTML::TreeBuilder
$CPANM_CMD HTTP::Server::Simple
$CPANM_CMD LWP::MediaTypes
$CPANM_CMD Encode::Locale
$CPANM_CMD HTTP::Date
$CPANM_CMD IO::HTML
$CPANM_CMD HTTP::Request
$CPANM_CMD HTML::Form
$CPANM_CMD WWW::Mechanize
$CPANM_CMD Jcode
$CPANM_CMD WWW::Mixi
$CPANM_CMD XML::RSS::Liberal
$CPANM_CMD XML::XPathEngine
$CPANM_CMD HTML::TreeBuilder::XPath
$CPANM_CMD HTML::Scrubber
$CPANM_CMD Time::Duration
$CPANM_CMD Exporter::Lite
$CPANM_CMD Time::Duration::Parse
$CPANM_CMD XML::SimpleObject
$CPANM_CMD XML::OPML
$CPANM_CMD Digest::HMAC_MD5
$CPANM_CMD Net::SMTP::TLS
$CPANM_CMD Email::Date::Format
$CPANM_CMD MIME::Types
$CPANM_CMD MIME::Lite
$CPANM_CMD Spiffy
$CPANM_CMD Test::Base
$CPANM_CMD DateTime::Format::Strptime
$CPANM_CMD Error
$CPANM_CMD Digest::SHA1
$CPANM_CMD Cache::Cache
$CPANM_CMD HTML::ResolveLink
$CPANM_CMD Number::Compare
$CPANM_CMD File::Find::Rule
$CPANM_CMD Test::Manifest
$CPANM_CMD XML::RSS
$CPANM_CMD Class::ErrorHandler
$CPANM_CMD Heap::Fibonacci
$CPANM_CMD File::NFSLock
$CPANM_CMD IO::String
$CPANM_CMD Cache
$CPANM_CMD URI::Fetch
$CPANM_CMD LWP::Authen::Wsse
$CPANM_CMD Class::Data::Inheritable
$CPANM_CMD XML::XPath
$CPANM_CMD XML::Atom
$CPANM_CMD Feed::Find
$CPANM_CMD XML::Feed
$CPANM_CMD Text::Tags
$CPANM_CMD Term::Encoding
$CPANM_CMD Template::Provider::Encoding
$CPANM_CMD YAML::Base
$CPANM_CMD Template::Plugin::JavaScript
$CPANM_CMD URI::Find
$CPANM_CMD Scalar::Util
$CPANM_CMD File::Listing
$CPANM_CMD HTTP::Negotiate
$CPANM_CMD HTTP::Daemon
$CPANM_CMD Net::HTTP
$CPANM_CMD HTTP::Cookies
$CPANM_CMD WWW::RobotRules
$CPANM_CMD LWP::UserAgent
$CPANM_CMD Mozilla::CA
# LWP::Protocol::httpsはwww.apache.org:443に接続してテストするが
# サーバーのアクセスに失敗する時もある。
# モジュール自体は問題なさそうなので強制インストール
$CPANM_CMD --force LWP::Protocol::https
LANG=C $CPANM_CMD Crypt::SSLeay
$CPANM_CMD Config::INI::Simple
$CPANM_CMD ExtUtils::ParseXS
$CPANM_CMD Log::Log4perl
$CPANM_CMD Net::Amazon
$CPANM_CMD --force Regexp::Assemble
$CPANM_CMD Parse::RecDescent
$CPANM_CMD Text::Hatena
$CPANM_CMD Regexp::Common
$CPANM_CMD Data::Section::Simple
$CPANM_CMD Regexp::Common::profanity_us
$CPANM_CMD Data::TemporaryBag
$CPANM_CMD SWF::BinStream
$CPANM_CMD Font::TTF
$CPANM_CMD SWF::Builder
$CPANM_CMD Text::CharWidth
$CPANM_CMD Text::WrapI18N
$CPANM_CMD RPC::XML
$CPANM_CMD Test::Exception
$CPANM_CMD Set::Infinite
$CPANM_CMD DateTime::Set
$CPANM_CMD DateTime::Util::Calc
$CPANM_CMD DateTime::Util::Astro::Sun
$CPANM_CMD http://ftp2.ru.freebsd.org/pub/FreeBSD/distfiles/DateTime-Event-SolarTerm-0.05.tar.gz
$CPANM_CMD Math::Round
$CPANM_CMD DateTime::Event::Lunar
$CPANM_CMD DateTime::Util::Astro
$CPANM_CMD http://search.cpan.org/CPAN/authors/id/D/DM/DMAKI/DateTime-Event-Chinese-0.05.tar.gz
$CPANM_CMD http://search.cpan.org/CPAN/authors/id/D/DM/DMAKI/DateTime-Calendar-Chinese-0.07.tar.gz
$CPANM_CMD Encode
# Hatena::Keyword には2つ修正するべき箇所がある。
# 1:POD内にあるeuc-jpの"’"の除去
# 2:utf8の使用および文字引渡し時のエンコード処理
cd /root
wget http://search.cpan.org/CPAN/authors/id/N/NA/NAOYA/Hatena-Keyword-0.05.tar.gz
tar xzvf Hatena-Keyword-0.05.tar.gz
cd Hatena-Keyword-0.05/lib/Hatena/
# euc-jpなPODをUTF-8に変換します。
/usr/bin/nkf -w Keyword.pm > Keyword.pm.utf8
# 下のアポストロフィの全角を半角にするために置換します
/bin/sed -e "s/’/'/g" Keyword.pm.utf8 > Keyword.pm.utf8.sed
# 元ファイル除去
rm -f Keyword.pm
# 中間ファイル除去
rm -f Keyword.pm.utf8
mv Keyword.pm.utf8.sed Keyword.pm
cat << "EOFA" > Keyword.patch 2>&1
--- Keyword.pm  2008-02-21 12:11:59.000000000 +0900
+++ Keyword.pm.new      2013-10-19 13:53:33.197136826 +0900
@@ -7,6 +7,7 @@
 use URI;
 use RPC::XML;
 use RPC::XML::Client;
+use utf8;

 our $VERSION = 0.05;

@@ -22,6 +23,7 @@
     my $body = shift or croak sprintf 'usage %s->extract($text)', $class;
     my $args = shift || {};
     $args->{mode} = 'lite';
+    utf8::encode($body);
     my $res = $class->_call_rpc_with_cache($body, $args)
         or $class->error($class->errstr);
     my @keywords = map { $class->_instance_from_rpcdata($_) }@{$res->{wordlist}};
EOFA
patch < Keyword.patch
rm -f Keyword.patch
cd /root
rm -f Hatena-Keyword-0.05.tar.gz
tar czvf Hatena-Keyword-0.05.tar.gz Hatena-Keyword-0.05
rm -fr Hatena-Keyword-0.05
$CPANM_CMD Hatena-Keyword-0.05.tar.gz
rm -f Hatena-Keyword-0.05.tar.gz
$CPANM_CMD Exporter
$CPANM_CMD File::ShareDir
$CPANM_CMD Params::Validate
$CPANM_CMD Math::BigInt
$CPANM_CMD Math::BigInt::GMP
wget http://search.cpan.org/CPAN/authors/id/D/DM/DMAKI/DateTime-Calendar-Japanese-Era-0.08001.tar.gz
tar xzvf DateTime-Calendar-Japanese-Era-0.08001.tar.gz
cd DateTime-Calendar-Japanese-Era-0.08001
rm -fr inc/ExtUtils
cd lib/DateTime/Calendar/Japanese
cat << "EOFB" > Era.patch 2>&1
--- Era.pm.orig    2013-10-21 16:41:35.886078724 +0900
+++ Era.pm    2013-10-21 16:42:43.663065831 +0900
@@ -211,17 +211,23 @@
 #        $start_date->set_time_zone('UTC');
 #        $end_date->set_time_zone('UTC');

+        my $eraname;
+        if (Encode::is_utf8($this_era->[$NAME])){
+            $eraname = $this_era->[$NAME] ;
+        } else {
+            $eraname = Encode::decode_utf8($this_era->[$NAME]);
+        }
         if ( $opts->{is_south_regime} ) {
             push @SOUTH_REGIME_ERAS, __PACKAGE__->new(
                 id => $this_era->[$ID],
-                name => Encode::decode_utf8($this_era->[$NAME]),
+                name => $eraname,
                 start => $start_date,
                 end => $end_date,
             );
         } else {
             __PACKAGE__->register_era(
                 id    => $this_era->[$ID],
-                name  => Encode::decode_utf8($this_era->[$NAME]),
+                name  => $eraname,
                 start => $start_date,
                 end   => $end_date
             );
EOFB
patch < Era.patch
rm -f Era.patch
cd /root
rm -f DateTime-Calendar-Japanese-Era-0.08001.tar.gz
tar czvf DateTime-Calendar-Japanese-Era-0.08001.tar.gz DateTime-Calendar-Japanese-Era-0.08001
rm -fr DateTime-Calendar-Japanese-Era-0.08001
$CPANM_CMD DateTime-Calendar-Japanese-Era-0.08001.tar.gz
rm -f DateTime-Calendar-Japanese-Era-0.08001.tar.gz
$CPANM_CMD DateTime::Event::Sunrise
$CPANM_CMD DateTime::Calendar::Japanese
$CPANM_CMD Class::Factory::Util
$CPANM_CMD DateTime::Format::Builder
wget http://backpan.perl.org/authors/id/D/DM/DMAKI/DateTime-Format-Japanese-0.04000.tar.gz
tar xzvf DateTime-Format-Japanese-0.04000.tar.gz
cd DateTime-Format-Japanese-0.04000
cd lib/DateTime/Format/Japanese
cat << "EOFC" > Common.patch 2>&1
--- Common.pm.orig    2008-08-25 01:18:06.000000000 +0900
+++ Common.pm    2013-10-21 17:17:29.572062844 +0900
@@ -302,7 +302,12 @@
     }

     my $era_year = ($dt->year - $era->start->year) + 1;
-    my $era_name = Encode::decode_utf8($era->name);
+    my $era_name;
+    if (Encode::is_utf8($era->name)){
+        $era_name = $era->name;
+    } else {
+        $era_name = Encode::decode_utf8($era->name);
+    }

     return $era_name .
         _format_number($era_year, $number_format) .
EOFC
patch < Common.patch
rm -f Common.patch
cd /root
rm -f DateTime-Format-Japanese-0.04000.tar.gz
tar czvf DateTime-Format-Japanese-0.04000.tar.gz DateTime-Format-Japanese-0.04000
rm -fr DateTime-Format-Japanese-0.04000
$CPANM_CMD --force DateTime-Format-Japanese-0.04000.tar.gz
rm -f DateTime-Format-Japanese-0.04000.tar.gz
$CPANM_CMD --force XML::Feed::RSS
$CPANM_CMD Cache::FastMmap
$CPANM_CMD base
$CPANM_CMD IO::Pipely
$CPANM_CMD POE::Test::Loops
$CPANM_CMD POE
$CPANM_CMD Net::DNS
$CPANM_CMD POE::Component::Client::DNS
$CPANM_CMD Net::IP::Minimal
$CPANM_CMD ExtUtils::Constant
$CPANM_CMD Socket
$CPANM_CMD POE::Component::Resolver
$CPANM_CMD POE::Component::Client::Keepalive
$CPANM_CMD Test::POE::Server::TCP
$CPANM_CMD POE::Component::Client::HTTP
$CPANM_CMD UNIVERSAL::isa
# 下記2つはすでにcpanには無い為別のサイトから取得
$CPANM_CMD http://mirrors.gigenet.com/freebsd/distfiles/Data-Average-0.03000.tar.gz
$CPANM_CMD http://download.xs4all.nl/freebsd/ports/distfiles/Xango-1.08.tar.gz
$CPANM_CMD XML::Parser::Lite::Tree
$CPANM_CMD Flickr::API
# DateTime::Format::EpochはMath::BigInt::GMPの精度が上がったために起こる
# 問題の様子。AD100年とかを使わないので仕方なくforceInstall
$CPANM_CMD --force DateTime::Format::Epoch
$CPANM_CMD WebService::YouTube
$CPANM_CMD WWW::Babelfish
$CPANM_CMD Text::Emoticon
$CPANM_CMD Email::Address
$CPANM_CMD Lingua::StopWords
$CPANM_CMD Text::ExtractWords
$CPANM_CMD Text::Language::Guess
$CPANM_CMD Geography::Countries
$CPANM_CMD IP::Country
$CPANM_CMD File::Fetch
$CPANM_CMD Archive::Extract
$CPANM_CMD Alien::Tidyp
$CPANM_CMD HTML::Tidy
$CPANM_CMD Data::Dumper
$CPANM_CMD Test::Differences
$CPANM_CMD Text::Markdown
wget http://kakasi.namazu.org/stable/kakasi-2.3.4.tar.gz
tar zxvf kakasi-2.3.4.tar.gz
cd kakasi-2.3.4
./configure
make && make install
cd ..
rm -fr kakasi-2.3.4*
$CPANM_CMD Text::Kakasi
$CPANM_CMD NetAddr::IP
$CPANM_CMD Crypt::OpenSSL::Random
# Mail::SpamAssassin自力インストールは難しい。
# 素直にyum系からspamassassinをインストールすべし
$CPANM_CMD Mail::SpamAssassin
$CPANM_CMD Audio::Beep
$CPANM_CMD IRC::Utils
$CPANM_CMD Object::Pluggable
$CPANM_CMD POE::Component::Syndicator
$CPANM_CMD POE::Filter::IRCD
$CPANM_CMD POE::Component::IRC
$CPANM_CMD Data::Dump
$CPANM_CMD Devel::Size
$CPANM_CMD POE::Component::IKC::Client
$CPANM_CMD Net::NetSend
$CPANM_CMD Text::CSV_PP
$CPANM_CMD OLE::Storage_Lite
$CPANM_CMD Spreadsheet::WriteExcel
$CPANM_CMD Mail::IMAPClient
# Net::MovableTypeはテストに使われるサーバに
# 接続できないためエラーとなるのでうまく行かない可能性もあるがforce
$CPANM_CMD --force Net::MovableType
$CPANM_CMD XML::Twig
$CPANM_CMD PDF::Writer
$CPANM_CMD Image::Size
$CPANM_CMD Module::Loaded
$CPANM_CMD Graphics::ColorNames
$CPANM_CMD PDF::API2
$CPANM_CMD PDF::FromHTML
$CPANM_CMD Palm::PalmDoc
$CPANM_CMD Data::Serializer
$CPANM_CMD DateTime::Format::ICal
$CPANM_CMD DateTime::Event::Recurrence
$CPANM_CMD DateTime::Event::ICal
$CPANM_CMD Devel::StackTrace
$CPANM_CMD Class::ReturnValue
$CPANM_CMD Class::Accessor::Chained
$CPANM_CMD Text::vFile::asData
$CPANM_CMD Data::ICal
# Search::EstraierはTestPodで引っかかってる様子
# 他テストで問題無いことからforce
$CPANM_CMD --force Search::Estraier
$CPANM_CMD File::Grep
$CPANM_CMD Lingua::Stem::Snowball
$CPANM_CMD common::sense
$CPANM_CMD JSON::XS
$CPANM_CMD KinoSearch
# DBIx::Class::Schemaはここまでインストールしてきた
# モジュール以外の33のモジュールを必要とする。
# しかしここまで来ていれば全てのモジュールを正常に
# インストールできる事から省略する。
$CPANM_CMD DBIx::Class::Schema
$CPANM_CMD Text::Sentence
$CPANM_CMD Lingua::EN::Summarize
$CPANM_CMD Text::Original
$CPANM_CMD Lingua::JA::Summarize::Extract
$CPANM_CMD Font::AFM
$CPANM_CMD HTML::FormatText
$CPANM_CMD Lingua::ZH::HanDetect
$CPANM_CMD Plagger
$CPANM_CMD Mouse
$CPANM_CMD Log::Minimal
$CPANM_CMD OrePAN
--ここまで--

このBloggerは変な所で折り返しがついてしまいます。
長い所は変な改行などが残ってないか確認して下さい。

この状態で既にPlaggerの実行は可能です。
ただしassetsを用意しないと正常な動作はしません。
長かったので次回実行に移ります

2013/10/27現在のPlaggerに必要なモジュールの取得その1

2013/10/27現在でPlaggerインストール時に必要と思われる
モジュールを取得、インストールしてみたいと思います。
私が行った方法は以下の構成です。
  1. Windows7 x64 SP1
  2. Oracle VirtualBox 4.2.16 r86992
  3. MotherBoard ASUS B85M
  4. MEM 16GB
  5. HDD SATA 2TB
2の仮想マシンにCentOS6.4をインストールします。
CentOS6.4のインストールの詳細は省きますが
http://centossrv.com/
さんのページがわかりやすいかと思います。
こちらでCentOSインストール->CentOS6インストールと
CentOS初期設定ー>CentOS6初期設定 をしておきます。
この時点でSSHでの接続が可能になりますのでPuttyなどを使って
各種設定をしていかれたほうがいいかと思います。
なぜならこれから沢山のコピペが必要になるからです。
VirtualBoxのツールを入れてコピペが出来るようにするのも
手段としてはあるのですが、汎用性にかけると思いますので
推奨いたしません。

次からは仮想マシンの中での作業になります。
ユーザーはrootを想定しています。
通常ユーザーを使用する場合は適宜変更してください。
テキストエディタ(私はviを使用しています。)で以下のshellscriptを
新規作成します。(ここではinst00.sh)

--ここから--
#!/bin/bash
yum -y install perl-devel
yum -y install perl-ExtUtils-MakeMaker
yum -y install libxml2-devel
yum -y install perl-XML-LibXML perl-libxml-perl
yum -y install openssl-devel openssl-perl
yum -y install perl-Crypt-SSLeay perl-Net-SSLeay
yum -y install expat-devel
yum -y install readline-devel
yum -y install perl-Term-UI
yum -y install mpfr-devel
yum -y install apr-devel apr-util-devel
yum -y install httpd-devel sqlite-devel
yum -y install neon-devel
yum -y install subversion-perl
yum -y install libtidy-devel
yum -y install db4-devel db4-devel-static
yum -y install spamassassin
yum -y install screen
mkdir /usr/local/UserPerl
chmod 777 /usr/local/UserPerl
chown nobody:nobody /usr/local/UserPerl
--ここまで--

やっていることは土台となるOSにperlモジュール以外で
必要になるモジュールをインストールしています。
この中にはperlモジュールも含まれていますが
後ほどアップグレードいたします。
また/usr/local/UserPerlというフォルダを作成し
ここに今回使用するモジュールをインストールしていきます。

書き終わったらshellを実行します。
bash inst00.sh
私の環境で2分程度でした。

次にperlモジュールインストール先の設定を行います。
私は.bashrcに記載しましたが環境変数が変わってくれるのであれば
どこでもかまいません。

--追記ここから--
export PERL_CPANM_OPT="--local-lib=/usr/local/UserPerl --mirror=http://backpan.perl.org/ --save-dists=/root/cpan-mirror"
export PATH=/usr/local/UserPerl/bin:$PATH;
export PERL5LIB=/usr/local/UserPerl/lib/perl5:$PERL5LIB;
--追記ここまで--

追記したらsource .bashrcとするかリセットさせて下さい。
また次回からのモジュールインストールには時間がかかりますので
裏で実行させておけるscreenの設定を行います。
~/.screenrcを新規作成します。

--ここから--
escape ^z^z
defencoding UTF8
defscrollback 1000
startup_message off
log on
deflog on
logfile "~/.screenlog/screen%d_%m(%y).log"
--ここまで--

これでscreenの環境が整いました。
screenを実行させてバックグラウンド環境で動作する
環境が整いました。
(これは私が普段使っている設定です。
お好みに合わせてキーバインドなどを変更してもかまいません
ちなみにこの.screenrcではCtrl+zでコマンド入力状態、
続けてcを押せば新規screen追加、nでscreen切り替え
dでデタッチ(フォアグランドへ戻る)などが可能です。
詳細はgoogleなどでlinux screenとすれば出てくるでしょう)
この環境で今後は操作していきます

2013年10月22日火曜日

2013/10/22現在のPlaggerについて

お久しぶりです。
以前の投稿から何年たったかわからない位前になりますね。

この間正常に動作していたサーバが突如不安定になりそれを復旧させるために
再インストールする事になりました。

普通のサーバ用途ならばたいして時間かからなかったのですがPlaggerだけは
すんなりと入ってはくれませんでした。

さて。お題にあるとおりなのですが、なにぶん7年前のプロダクトですから
現在インストールするのにだいぶてこずりました。

一度は挫折しかけたのですが、どうしても自分の環境には
無くてはならない存在だと気づき
長期戦覚悟で地道にインストールを続けてきました。

ここにその成果を記したいと思います。

「Plaggerは今でもインストールできるのか?」可でもあり不可でもあります。
現在通常ではインストールできないモジュールが複数あり
それを強制的にインストールするか自分のようにある程度加工してから入れるかで
そのモジュールを使用する場面で違いが出てきます。

「そもそもPlaggerってなに?」
フィードアグリゲーターの一種でRSSに代表される情報を加工して
別の形にして出力するものです。
じゃあRSS見れればそれでいいんじゃない?と言われる方。
自分のほしい情報だけ見たいと思いませんか?
RSSには最近では宣伝などが多く含まれていたり
単純にRSSだけ見ても本文はリンクページ先にあったりと
案外不便なことも多いのです。
さらにRSSは蓄積情報とはなりません。
情報の早いページでは1時間もたたないうちに
過去へ流されその時点の情報しか得られません。
自分は会社の通勤途中に情報を見ることにしています。
そのときの最新情報はその場で取得できますが、
それ以外の時間に起きた情報は探すのに一苦労します。
いちいちコピペしたり検索をかけたり、Webを渡り歩いたりとあっという間に
時間は過ぎ去っていき、目的のものを調べきれないまま
帰宅してしまうということが多々ありました。
またつい数時間前まであったと思われる情報が消し去られ
見ることができなかったことも多くありました。
「自分の時間をもっとも有効に過ごすためにはどうしたらよいか」を
調査していった時Plaggerにたどり着きました。

「Plaggerで何ができるの?」
検索で「Plagger Wiki」 で詳細が得られるでしょう。
プラグイン方式でさまざまな事が可能になります。
私がしているのはPlaggerで最も使われているであろう
「複数のRSSから本文を取得し、メール形式にして特定のメアドに送付する」
ということをさせています。
実は最近では
「個人毎に最適化されたニュース配信(キュレーションサービス)」
なんていうサービスも存在しますが、
実際使用してみるとやはり広告があったり可読性が悪い
などで私には適していませんでした。
メール形式で必要なサイトの記事全文を送ってもらうことにより
その瞬間(実際には一時間単位でそれらページをクロールしたとき)に
起こったニュース記事やブログ記事などが蓄積されます。
この中から必要と思われるタイトルを拾い読みすれば
その日何が起こっていたのかがわかるようになったり、
それを残しておけば後日ネタのひとつにすることもできます。

「情報過多にならない?」
なります(笑)。しかもとても多くの情報を仕入れる事になります。
なので私はある程度選別も同時に行っています。
記事中に特定の文字があるかどうかをメーラーで振り分け、
「最重要」「重要」「普通」「それ以外」の4つに区分けさせます。
こうすることで「取得したが自分にはさほど必要ではない」記事を
フィルタリングさせています。
私の場合10箇所程のサイトを1時間置きに最新情報を取得させて
います。多いときは通勤時間中では収まらない程になるときもあります。
そんなときは帰ってからの余暇時間を利用してPCで一覧読みしたりしています。

まずはPlaggerをインストールしてみて、情報収集能力の高さを確認してみて下さい。
かなり高度なPerlの知識、shellの知識が必要になりますが
それを覚えたらこれほど便利なツールはありません。
前にも書きましたが、7年も前にできたシステムです。
ですが枯れてたほうが使いやすいというのも事実です。
Plaggerで検索をかければさまざまなサイトで紹介してくれています。

次回は現状のPlaggerのインストール及び
それらインストールに使用したモジュールの保存
方法などを書きたいと思います。

2013年5月18日土曜日

DateTime-Calendar-Japanese-Era-0.08001が入らない

cpanm DateTime::Calendar::Japanese::Era
FAIL

orz


色々調査してみての結果

http://search.cpan.org/CPAN/authors/id/D/DM/DMAKI/DateTime-Calendar-Japanese-Era-0.08001.tar.gz

で落としてきたファイルを展開した後
cpanm .

としてみてもなぜかコンパイルエラーが発生する。
エラーの場所はAUTHORとかわけわからん。
あちこち探っていくとinc/ExtUtils/MakeMakerなる物があるがそこでファイルが生成できない様子。

で、ふと思った。
「ん? ExtUtils::MakeMakerって最新落としたんでなかったっけ?」
で最新のMakeMaker.pmと比較してみたら案の定古い。
でわざわざ最新版があるのだからそれを使ってもらおう。

rm -fr inc/ExtUtils

cpanm .

うまー

2013年1月31日木曜日

電流測定およびロガー

お久しぶりです。
今回は趣向を変えて自作基板の紹介を行いたいと思います。


お題はずばり「電流測定およびロガー」です。応用すれば電力も導き出せますよね。

作成した目的としては
1.フレッツミルエネでは思ったようなグラフが保存できなかった為自由度の高い数値だけのデータがほしかった。
2.フレッツミルエネは安いようで結構高い。安いコストで。
3.自分の頭をフル回転させてみたい
そんな思いから作成しました。


注意事項:
今回の実験・制作は電気・電子知識のある方を対象としています。
よくわからない方は素直にフレッツミルエネなどの既成品を購入することをお勧め致します。


さて作ったものはこちら
一番上に載っているものがそうでして、クランプ式電流センサー(私は秋葉原の千石電商さんで取り扱っているSCT-013-030を使用しております)の微弱電圧をAC→DC、昇圧して下のイーサーネットシールドを経由してArduinoに接続してあります。



Arduinoについて簡単に説明しておきます。
これはイタリアで作成されたマイコン基板でして、デジタル的にはLEDを点滅させてみたり
モーター駆動を制御してみたり。アナログ的には温度センサーなどを取り付けてその数値を
読み取ったりなど汎用性に富んだボードです。
私が使用しているのはArduino unoというまあ初心者が扱いやすいボードです。
一個だいたい3千円程度で購入できます。
また。この基板用にさまざまなシールド製品(ドーターボード?拡張基板?)があり
私はイーサーネットシールドというものを同時に購入しました。こちらは一個5千円前後です。
この2つだけで小さなWebサーバが作れちゃいます。
この業界では結構名が知れている製品ではあります。

さて話を戻しましょう。


やれることとしては

1.現在の電流値が電圧値となって出力されているセンサー値をブラウザで確認。(その際現在時刻、基板動作電圧の計測値も出力されます)
2.マイクロSDカードに1秒毎に記録。
3.リアルタイムクロックのみバッテリバックアップ(SDを取り外す際に電源を落としても時刻機能だけは動かしておきたいため)
4.arduinoのプログラムを書き換えることで さまざまなシステムへの応用
ということができます。

SCT-013-030は最大30Aまでを計測することが可能なセンサーでこれをACの片側にクランプ
するとこのセンサーは電流に応じた電圧を出力してくれます。

非接触なためほぼ安全(延長用の短いケーブルを買ってきてその線をクランプするようにすれば既存の線を加工する必要がなく、ショートする可能性も可能な限り少なくすることができると思います。)だと思います。

ただこのセンサーはDCの線であればDCの出力なのですが、ACを測ろうとすると当然出力も
ACの値が出力されます。
今回一番苦慮したのはそこでして、いかにしてArduinoに的確な数値を読み取ってもらうかが問題であり、自作した中では一番厄介な代物でした。
最初は「ピークだけ読み取れば簡単じゃん」と軽い考えはやはり甘かったです。
ArduinoのAD変換時間とピーク取得のタイミングがぴったりとはいかないからです。
AD変換最速でやってもピークの数値が想定の範囲を軽く超えてしまいます。

そこで色々な書物を読み漁り、たどり着いた回路を基板に落とし込んでみました。
結果としてはArduinoに最大30A時に1Vppの電圧が発生するセンサーの値を、ADするのに最適な電圧Max5Vにすることが可能になりました。
分解能力としてはArduino(正確にはAtmel社のATmega328P)の制限により5Vを1024段階で表現しているので約0.0048V=4.8mV単位で計測することが可能です。
これを30A時に5Vに当てはめると4.8mV時は約28.8mAとなり計測上28.8mA毎という計算になりますかな。

あとはソフトでAD変換数値をブラウザーで表示するようにしたのとマイクロSDに結果を出力するだけにして、計算は取得したパソコンでExcelなりRRDToolなりでグラフ化すれば使用電流の表が出来上がり。
使用電源はAC100を想定。VA値は直計算で出ますし、力率がわかれば電力だって計算できます。(世の中の電力計は80%で計算されているとどこかで聞いたことがありますが調べていません)

もっとも正確な数値であるかどうかはセンサーの精度によってしまうのでこれはいかんともしがたいところではあります。
ただ実測値を見てみると期待以上の精度を得ることができました。









とここまで引っ張っておいてさあ回路図を出しましょうと思ったのですがこんな回路誰でも思いつくし必要な人は作っているでしょう。





















そこで・・・




ほしい人は
1.回路図だけほしい。
2.基板設計図までほしい。
3.基板だけほしい。
4.基板と部品がほしい。
5.完成品がほしい。
に分けてそれぞれ適切な価格の意見を聞きたいと思います。
結構大変だったので必要であればその対価を頂きたいと思っています。
ほしいと思う人はご連絡ください。
回路図はLTspiceで設計し、EAGLEで基板を作成しています。
自前でエッチングし穴あけ加工も手作業です。
簡単な導通試験までは行いますが、それ以上は購入者様がご自身で行うスタンスです。
安いことにこしたことはないのですが、筆者がそれ相応と思えるまでは公表を控えようと思います。

どれだけの人が興味あるか知りたいし、なにより自分への「励ましの声」がどれだけあるか。
とてもわくわくしています。
ご意見ご感想お待ちしております。

タグ:電流測定 ロガー フレッツミルエネ SCT-013-030 Arduino イーサーネットシールド クランプ型 電流センサー AD変換 LTspice EAGLE