tag:blogger.com,1999:blog-5236337238192762372023-11-16T16:54:57.664+09:00ねこったの日々ねこったがやってみた事を、つらつらひたすら書いて行くブログです。
だいぶお休みしてましたが復帰します。tarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.comBlogger15125tag:blogger.com,1999:blog-523633723819276237.post-69756983514326292972018-07-18T18:05:00.000+09:002018-07-18T18:05:23.253+09:00Windows10 1803の再インストールした時のメモ今日はちょっとしたメモを残そうと思って書き込みしています。<br />
事の発端は大きいファイルを整理している最中にエラーが頻発した事から始まります。<br />
<br />
<a name='more'></a>エラー情報を見るとDisk1のwriteエラーが頻発しておりました。<br />
Disk1は自分の場合メインHDDに相当する「はず」です。<br />
そこでディスクステータスを表示してもらうため<a href="https://crystalmark.info/ja/software/crystaldiskinfo/" target="_blank">CrstalDiskInfo</a>を利用しました。<br />
結果は健康状態正常。エラーステータスも出ていません。<br />
<br />
<br />
<br />
<br />
あれ?<br />
<br />
<br />
<br />
<br />
じゃあなんでWindowsログにDiskエラーが出てるわけ?<br />
<br />
相当悩みましたがその後は特にエラーが出ていない様子。<br />
おかしいなぁと思いながらもエラーが出たのは間違いないので、ここは危険回避という事と、大分使い込んだ為せっかくだからきれいにしようという事にしました。<br />
<br />
大分使い込んだHDDは当時高かったSSHDというSSDとHDDの良い所を取り込んだ物でした。<br />
これを新品の普通のHDDに乗り換える事に。<br />
新しいHDDは<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=takald-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B01N0LY37N&linkId=1d5b9be71d586b34d53cb62a70907a4e" style="height: 240px; width: 120px;"></iframe>
をチョイス。ポチりました。<br />
<br />
届いた日にパソコンの蓋をパッカーンと開けSATAの1番に接続。ここで何かがおかしいことに気が付かなかったのが最大の原因。(詳しくは後程)<br />
<br />
クローンソフト<a href="https://jp.easeus.com/backup-software/free.html" target="_blank">EaseUS Todo Backup Free 11.0</a>を使ってクローン開始。<br />
特に問題無くクローン成功。時間は5時間程かかったけどね。<br />
<br />
一度新HDDで起動を確認。Windows10のデジタルライセンスを通しておかないと、この後のインストールに失敗する可能性があります。<br />
<br />
無事デジタルライセンスの確認が取れた、及びまだ旧HDDは手付かずで残ってるので、思い切ってWindows10 1803を新規でインストールすることにしました。<br />
<br />
やってみる事2時間で無事インストール完了。きれいにインストールしなおしました。<br />
<br />
ドライバも必要最低限入れていき順調に事は運びました。<br />
<br />
<br />
<br />
<br />
そこで疑問が生じます。<br />
「なんでエラーが発生してたの?」と。<br />
間髪入れずに問題が発生します。Disk1エラーです。<br />
「おいおい新品のHDDがそんな簡単に壊れるわけがなかろうに」<br />
<br />
ここからもう一度調査開始です。<br />
<br />
よくよく思い出してみるとPORT1番にすんなりSATAケーブル刺しています。いくら空いているからと言って無造作に接続するのもある意味怖かった。<br />
クローンしている際中はマザーボードに直結していたので問題出なかったようです。<br />
そして旧HDDを取り外し、新HDDを「その」SATAケーブルに刺して戻しました。<br />
<br />
「あ、もしかしてケーブル?それともSATAのPORT逝った?」<br />
<br />
そこでPORTを取り換えようとマザーボードをよく見ると今2番につながっています。<br />
やってしまいました。どうやら0番から始まるPORT番号に順に繋いでいなかった様子です。<br />
そこで今度は0番に刺しなおしてもう一度トライ。<br />
大きなファイルをコピーしているときにまたもやエラー。<br />
おかしいポート変えても同じエラーが出るなんて。<br />
<br />
<br />
壊れていたのは外付けUSBHDDでした。<br />
チャンチャン。<br />
<br />
でもまあきれいにインストールできたし、最悪元に戻せるHDDが手元に残ったしで満足しています。tarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0tag:blogger.com,1999:blog-523633723819276237.post-62288531134233341112014-07-25T21:25:00.001+09:002018-07-18T16:28:15.533+09:00LinuxのMailコマンドで外部に送信失敗の時今まで何度も何度も読み返してるのになぜスルーしてたのか分からない。<br />
<br />
<a name='more'></a>mailコマンドはMTAにメール配送を任せるので<br />
たとえば<br />
echo test | mail -s test hogehoge@hoge.com<br />
とかして外部に送信しようとした場合<br />
sendmailやpostfixなどMTAに送信依頼をする。<br />
この時外に出ようとするメールは<br />
「自分の所に届けるメールじゃない」と判断した際<br />
MTAのデフォルト設定にも寄るが基本設定したドメインに<br />
@以降を書き換える。<br />
私の場合Centos6.5だったので必然的にPostfixがデフォルトだったので<br />
main.cfとか一生懸命見直してはテストしてました。<br />
だけどどうやってもMTAが「ユーザー名@localhost.localdomain」とかで<br />
外に送信したがる。<br />
myoriginとか確実に直ってるはずなのにである。<br />
<br />
で、何が悪いのか色々なサイトを見て周るも<br />
書かれていることは皆同じ。<br />
どこが違う・・・・・。散々悩んでとあるサイトを見ていた時。<br />
「CentOS7はデフォルトでPostfixになっています」の文字。<br />
ん?<br />
CentOS6だってそうじゃなかったっけ?<br />
・・・・まさか<br />
<br />
そう。まさかだったんです。<br />
<br />
alternatives --config mta<br />
<br />
<br />
2 プログラムがあり 'mta' を提供します。<br />
<br />
選択 コマンド<br />
-----------------------------------------------<br />
*+ 1 /usr/sbin/sendmail.sendmail<br />
2 /usr/sbin/sendmail.postfix<br />
<br />
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:<br />
<br />
!!!!!!<br />
sendmailなんて入っていないがな!<br />
すかさす2を選択。<br />
そしてメールテスト・・・・・・。あっさりパス。<br />
ふざけるなぁ!と叫んでおりました。はい。<br />
<br />
みなさん。MTAは目的の物に確実に選択されているか確認してから設定してくださいね。tarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0tag:blogger.com,1999:blog-523633723819276237.post-34313370200522113412014-06-18T17:07:00.000+09:002018-07-18T16:28:57.861+09:00Hatena::Keywordの部分修正どうもすいません。間違いを記載していたようです。<br />
私の"2013/10/27現在のPlaggerに必要なモジュールの取得その2"で紹介している<br />
スクリプトの中でHatena::Keywordの部分ですが<br />
本体を修正する必要はありませんでした。ですので修正する箇所としては<br />
<br />
<a name='more'></a><br /><br />
<br />
---------------ここから---------------<br />
# Hatena::Keyword には2つ修正するべき箇所がある。<br />
# 1:POD内にあるeuc-jpの"’"の除去<br />
# 2:utf8の使用および文字引渡し時のエンコード処理<br />
cd /root<br />
wget http://search.cpan.org/CPAN/authors/id/N/NA/NAOYA/Hatena-Keyword-0.05.tar.gz<br />
tar xzvf Hatena-Keyword-0.05.tar.gz<br />
cd Hatena-Keyword-0.05/lib/Hatena/<br />
# euc-jpなPODをUTF-8に変換します。<br />
/usr/bin/nkf -w Keyword.pm > Keyword.pm.utf8<br />
# 下のアポストロフィの全角を半角にするために置換します<br />
/bin/sed -e "s/’/'/g" Keyword.pm.utf8 > Keyword.pm.utf8.sed<br />
# 元ファイル除去<br />
rm -f Keyword.pm<br />
# 中間ファイル除去<br />
rm -f Keyword.pm.utf8<br />
mv Keyword.pm.utf8.sed Keyword.pm<br />
cat << "EOFA" > Keyword.patch 2>&1<br />
--- Keyword.pm 2008-02-21 12:11:59.000000000 +0900<br />
+++ Keyword.pm.new 2013-10-19 13:53:33.197136826 +0900<br />
@@ -7,6 +7,7 @@<br />
use URI;<br />
use RPC::XML;<br />
use RPC::XML::Client;<br />
+use utf8;<br />
<br />
our $VERSION = 0.05;<br />
<br />
@@ -22,6 +23,7 @@<br />
my $body = shift or croak sprintf 'usage %s->extract($text)', $class;<br />
my $args = shift || {};<br />
$args->{mode} = 'lite';<br />
+ utf8::encode($body);<br />
my $res = $class->_call_rpc_with_cache($body, $args)<br />
or $class->error($class->errstr);<br />
my @keywords = map { $class->_instance_from_rpcdata($_) }@{$res->{wordlist}};<br />
EOFA<br />
patch < Keyword.patch<br />
rm -f Keyword.patch<br />
cd /root<br />
rm -f Hatena-Keyword-0.05.tar.gz<br />
tar czvf Hatena-Keyword-0.05.tar.gz Hatena-Keyword-0.05<br />
rm -fr Hatena-Keyword-0.05<br />
$CPANM_CMD Hatena-Keyword-0.05.tar.gz<br />
rm -f Hatena-Keyword-0.05.tar.gz<br />
---------------ここまで---------------<br />
<br />
を<br />
<br />
---------------ここから---------------<br />
# Hatena::Keyword には修正するべき箇所がある。<br />
# POD内にあるeuc-jpの"’"の除去<br />
cd /root<br />
wget http://search.cpan.org/CPAN/authors/id/N/NA/NAOYA/Hatena-Keyword-0.05.tar.gz<br />
tar xzvf Hatena-Keyword-0.05.tar.gz<br />
cd Hatena-Keyword-0.05/lib/Hatena/<br />
# euc-jpなPODをUTF-8に変換します。<br />
/usr/bin/nkf -w Keyword.pm > Keyword.pm.utf8<br />
# 下のアポストロフィの全角を半角にするために置換します<br />
/bin/sed -e "s/’/'/g" Keyword.pm.utf8 > Keyword.pm.utf8.sed<br />
# euc-jpに戻します。<br />
/usr/bin/nkf -e Keyword.pm.utf8.sed > Keyword.pm.euc.sed<br />
# 元ファイル除去<br />
rm -f Keyword.pm<br />
# 中間ファイル除去<br />
rm -f Keyword.pm.utf8<br />
rm -f Keyword.pm.utf8.sed<br />
# ファイル名変更<br />
mv Keyword.pm.euc.sed Keyword.pm<br />
cd /root<br />
rm -f Hatena-Keyword-0.05.tar.gz<br />
tar czvf Hatena-Keyword-0.05.tar.gz Hatena-Keyword-0.05<br />
rm -fr Hatena-Keyword-0.05<br />
$CPANM_CMD Hatena-Keyword-0.05.tar.gz<br />
rm -f Hatena-Keyword-0.05.tar.gz<br />
---------------ここまで---------------<br />
<br />
に修正願います。tarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0tag:blogger.com,1999:blog-523633723819276237.post-29339798721988320322013-11-06T16:41:00.001+09:002018-07-18T16:29:54.570+09:002013/10/27現在のPlaggerに必要なモジュールの取得その2次にperl moduleをインストールしていきます。<br />
私の環境で2時間程度かかりました。<br />
一つ一つインストールして確認しながらやっていくのも<br />
いいのかもしれませんが私はscriptを組んで<br />
実行後screenをデタッチして別作業を行っていました。<br />
好みによると思いますので適宜読み直して下さい。<br />
ここではinst02.shという名前で新規作成していきます。<br />
<br />
<a name='more'></a><br /><br />
--ここから--<br />
#!/bin/bash<br />
export CPANM_CMD=/usr/local/UserPerl/bin/cpanm<br />
curl -L http://xrl.us/cpanm | perl - App::cpanminus<br />
$CPANM_CMD local::lib<br />
$CPANM_CMD -L /usr/local parent<br />
$CPANM_CMD Test::Harness<br />
$CPANM_CMD Module::Install<br />
$CPANM_CMD Module::Install::AuthorTests<br />
$CPANM_CMD HTTP::Tiny<br />
$CPANM_CMD CPAN::DistnameInfo<br />
$CPANM_CMD App::pmuninstall<br />
$CPANM_CMD YAML<br />
$CPANM_CMD XML::LibXML<br />
$CPANM_CMD Class::Accessor<br />
$CPANM_CMD Module::Pluggable::Fast<br />
$CPANM_CMD UNIVERSAL::require<br />
$CPANM_CMD XML::Liberal<br />
$CPANM_CMD Encode::Detect<br />
$CPANM_CMD AppConfig<br />
$CPANM_CMD Template<br />
$CPANM_CMD Image::Info<br />
$CPANM_CMD Config::Simple<br />
$CPANM_CMD XML::SAX::Expat<br />
$CPANM_CMD XML::Simple<br />
$CPANM_CMD Time::HiRes<br />
$CPANM_CMD Date::Parse<br />
$CPANM_CMD IO::AtomicFile<br />
$CPANM_CMD Try::Tiny<br />
$CPANM_CMD Test::Fatal<br />
$CPANM_CMD Module::Runtime<br />
$CPANM_CMD List::MoreUtils<br />
$CPANM_CMD Dist::CheckConflicts<br />
$CPANM_CMD Test::Requires<br />
$CPANM_CMD Module::Implementation<br />
$CPANM_CMD Params::Validate<br />
$CPANM_CMD Package::Stash::XS<br />
$CPANM_CMD Package::Stash<br />
$CPANM_CMD Params::Util<br />
$CPANM_CMD Sub::Install<br />
$CPANM_CMD Data::OptList<br />
$CPANM_CMD Class::Load<br />
$CPANM_CMD Log::Dispatch<br />
$CPANM_CMD Net::Delicious<br />
$CPANM_CMD Digest::SHA<br />
$CPANM_CMD Archive::Zip<br />
$CPANM_CMD Net::Telnet<br />
$CPANM_CMD Term::ReadKey<br />
$CPANM_CMD Term::ReadLine<br />
$CPANM_CMD Text::Glob<br />
$CPANM_CMD Probe::Perl<br />
$CPANM_CMD IPC::Run3<br />
$CPANM_CMD Test::Script<br />
$CPANM_CMD File::Which<br />
$CPANM_CMD --force Term::ReadLine::Perl<br />
$CPANM_CMD File::HomeDir<br />
$CPANM_CMD YAML::Syck<br />
$CPANM_CMD IO::Tty<br />
$CPANM_CMD Expect<br />
$CPANM_CMD IPC::Run<br />
$CPANM_CMD Module::Signature<br />
$CPANM_CMD Capture::Tiny<br />
$CPANM_CMD IO::CaptureOutput<br />
$CPANM_CMD CPAN::Version<br />
$CPANM_CMD Test::Reporter<br />
$CPANM_CMD File::pushd<br />
$CPANM_CMD Devel::Autoflush<br />
$CPANM_CMD File::Spec<br />
$CPANM_CMD File::Temp<br />
$CPANM_CMD Config::Tiny<br />
$CPANM_CMD CPAN::Reporter<br />
$CPANM_CMD Kwalify<br />
$CPANM_CMD Pod::Simple<br />
$CPANM_CMD Test::Pod<br />
$CPANM_CMD Devel::Symdump<br />
$CPANM_CMD Pod::Coverage<br />
$CPANM_CMD Test::Pod::Coverage<br />
$CPANM_CMD XML::NamespaceSupport<br />
$CPANM_CMD XML::SAX::Base<br />
$CPANM_CMD XML::SAX<br />
$CPANM_CMD HTML::Entities::Numbered<br />
$CPANM_CMD XML::Parser<br />
$CPANM_CMD DBI<br />
$CPANM_CMD RDF::Core<br />
$CPANM_CMD XML::FOAF<br />
$CPANM_CMD Test::Tester<br />
$CPANM_CMD Test::NoWarnings<br />
$CPANM_CMD Test::Deep<br />
$CPANM_CMD Mail::Header<br />
$CPANM_CMD MIME::Parser<br />
$CPANM_CMD Net::SSLeay<br />
$CPANM_CMD IO::Socket::SSL<br />
$CPANM_CMD IO::SessionData<br />
$CPANM_CMD Class::Inspector<br />
$CPANM_CMD Task::Weaken<br />
$CPANM_CMD SOAP::Lite<br />
$CPANM_CMD XMLRPC::Lite<br />
$CPANM_CMD Algorithm::Diff<br />
$CPANM_CMD Text::Diff<br />
$CPANM_CMD HTTP::Cookies::Mozilla<br />
$CPANM_CMD DateTime::Locale<br />
$CPANM_CMD Sub::Exporter<br />
$CPANM_CMD Test::Output<br />
$CPANM_CMD Class::Singleton<br />
$CPANM_CMD DateTime::TimeZone<br />
$CPANM_CMD DateTime<br />
$CPANM_CMD DateTime::Format::W3CDTF<br />
$CPANM_CMD DateTime::Format::Mail<br />
$CPANM_CMD XML::RSS::LibXML<br />
$CPANM_CMD WebService::Bloglines<br />
$CPANM_CMD FCGI<br />
$CPANM_CMD CGI<br />
$CPANM_CMD PadWalker<br />
$CPANM_CMD Devel::Cycle<br />
$CPANM_CMD Test::Memory::Cycle<br />
$CPANM_CMD Carp<br />
$CPANM_CMD Sub::Uplevel<br />
$CPANM_CMD File::Slurp<br />
$CPANM_CMD Tree::DAG_Node<br />
$CPANM_CMD Test::Warn<br />
$CPANM_CMD Test::Taint<br />
$CPANM_CMD Test::LongString<br />
$CPANM_CMD HTML::TreeBuilder<br />
$CPANM_CMD HTTP::Server::Simple<br />
$CPANM_CMD LWP::MediaTypes<br />
$CPANM_CMD Encode::Locale<br />
$CPANM_CMD HTTP::Date<br />
$CPANM_CMD IO::HTML<br />
$CPANM_CMD HTTP::Request<br />
$CPANM_CMD HTML::Form<br />
$CPANM_CMD WWW::Mechanize<br />
$CPANM_CMD Jcode<br />
$CPANM_CMD WWW::Mixi<br />
$CPANM_CMD XML::RSS::Liberal<br />
$CPANM_CMD XML::XPathEngine<br />
$CPANM_CMD HTML::TreeBuilder::XPath<br />
$CPANM_CMD HTML::Scrubber<br />
$CPANM_CMD Time::Duration<br />
$CPANM_CMD Exporter::Lite<br />
$CPANM_CMD Time::Duration::Parse<br />
$CPANM_CMD XML::SimpleObject<br />
$CPANM_CMD XML::OPML<br />
$CPANM_CMD Digest::HMAC_MD5<br />
$CPANM_CMD Net::SMTP::TLS<br />
$CPANM_CMD Email::Date::Format<br />
$CPANM_CMD MIME::Types<br />
$CPANM_CMD MIME::Lite<br />
$CPANM_CMD Spiffy<br />
$CPANM_CMD Test::Base<br />
$CPANM_CMD DateTime::Format::Strptime<br />
$CPANM_CMD Error<br />
$CPANM_CMD Digest::SHA1<br />
$CPANM_CMD Cache::Cache<br />
$CPANM_CMD HTML::ResolveLink<br />
$CPANM_CMD Number::Compare<br />
$CPANM_CMD File::Find::Rule<br />
$CPANM_CMD Test::Manifest<br />
$CPANM_CMD XML::RSS<br />
$CPANM_CMD Class::ErrorHandler<br />
$CPANM_CMD Heap::Fibonacci<br />
$CPANM_CMD File::NFSLock<br />
$CPANM_CMD IO::String<br />
$CPANM_CMD Cache<br />
$CPANM_CMD URI::Fetch<br />
$CPANM_CMD LWP::Authen::Wsse<br />
$CPANM_CMD Class::Data::Inheritable<br />
$CPANM_CMD XML::XPath<br />
$CPANM_CMD XML::Atom<br />
$CPANM_CMD Feed::Find<br />
$CPANM_CMD XML::Feed<br />
$CPANM_CMD Text::Tags<br />
$CPANM_CMD Term::Encoding<br />
$CPANM_CMD Template::Provider::Encoding<br />
$CPANM_CMD YAML::Base<br />
$CPANM_CMD Template::Plugin::JavaScript<br />
$CPANM_CMD URI::Find<br />
$CPANM_CMD Scalar::Util<br />
$CPANM_CMD File::Listing<br />
$CPANM_CMD HTTP::Negotiate<br />
$CPANM_CMD HTTP::Daemon<br />
$CPANM_CMD Net::HTTP<br />
$CPANM_CMD HTTP::Cookies<br />
$CPANM_CMD WWW::RobotRules<br />
$CPANM_CMD LWP::UserAgent<br />
$CPANM_CMD Mozilla::CA<br />
# LWP::Protocol::httpsはwww.apache.org:443に接続してテストするが<br />
# サーバーのアクセスに失敗する時もある。<br />
# モジュール自体は問題なさそうなので強制インストール<br />
$CPANM_CMD --force LWP::Protocol::https<br />
LANG=C $CPANM_CMD Crypt::SSLeay<br />
$CPANM_CMD Config::INI::Simple<br />
$CPANM_CMD ExtUtils::ParseXS<br />
$CPANM_CMD Log::Log4perl<br />
$CPANM_CMD Net::Amazon<br />
$CPANM_CMD --force Regexp::Assemble<br />
$CPANM_CMD Parse::RecDescent<br />
$CPANM_CMD Text::Hatena<br />
$CPANM_CMD Regexp::Common<br />
$CPANM_CMD Data::Section::Simple<br />
$CPANM_CMD Regexp::Common::profanity_us<br />
$CPANM_CMD Data::TemporaryBag<br />
$CPANM_CMD SWF::BinStream<br />
$CPANM_CMD Font::TTF<br />
$CPANM_CMD SWF::Builder<br />
$CPANM_CMD Text::CharWidth<br />
$CPANM_CMD Text::WrapI18N<br />
$CPANM_CMD RPC::XML<br />
$CPANM_CMD Test::Exception<br />
$CPANM_CMD Set::Infinite<br />
$CPANM_CMD DateTime::Set<br />
$CPANM_CMD DateTime::Util::Calc<br />
$CPANM_CMD DateTime::Util::Astro::Sun<br />
$CPANM_CMD http://ftp2.ru.freebsd.org/pub/FreeBSD/distfiles/DateTime-Event-SolarTerm-0.05.tar.gz<br />
$CPANM_CMD Math::Round<br />
$CPANM_CMD DateTime::Event::Lunar<br />
$CPANM_CMD DateTime::Util::Astro<br />
$CPANM_CMD http://search.cpan.org/CPAN/authors/id/D/DM/DMAKI/DateTime-Event-Chinese-0.05.tar.gz<br />
$CPANM_CMD http://search.cpan.org/CPAN/authors/id/D/DM/DMAKI/DateTime-Calendar-Chinese-0.07.tar.gz<br />
$CPANM_CMD Encode<br />
# Hatena::Keyword には2つ修正するべき箇所がある。<br />
# 1:POD内にあるeuc-jpの"’"の除去<br />
# 2:utf8の使用および文字引渡し時のエンコード処理<br />
cd /root<br />
wget http://search.cpan.org/CPAN/authors/id/N/NA/NAOYA/Hatena-Keyword-0.05.tar.gz<br />
tar xzvf Hatena-Keyword-0.05.tar.gz<br />
cd Hatena-Keyword-0.05/lib/Hatena/<br />
# euc-jpなPODをUTF-8に変換します。<br />
/usr/bin/nkf -w Keyword.pm > Keyword.pm.utf8<br />
# 下のアポストロフィの全角を半角にするために置換します<br />
/bin/sed -e "s/’/'/g" Keyword.pm.utf8 > Keyword.pm.utf8.sed<br />
# 元ファイル除去<br />
rm -f Keyword.pm<br />
# 中間ファイル除去<br />
rm -f Keyword.pm.utf8<br />
mv Keyword.pm.utf8.sed Keyword.pm<br />
cat << "EOFA" > Keyword.patch 2>&1<br />
--- Keyword.pm 2008-02-21 12:11:59.000000000 +0900<br />
+++ Keyword.pm.new 2013-10-19 13:53:33.197136826 +0900<br />
@@ -7,6 +7,7 @@<br />
use URI;<br />
use RPC::XML;<br />
use RPC::XML::Client;<br />
+use utf8;<br />
<br />
our $VERSION = 0.05;<br />
<br />
@@ -22,6 +23,7 @@<br />
my $body = shift or croak sprintf 'usage %s->extract($text)', $class;<br />
my $args = shift || {};<br />
$args->{mode} = 'lite';<br />
+ utf8::encode($body);<br />
my $res = $class->_call_rpc_with_cache($body, $args)<br />
or $class->error($class->errstr);<br />
my @keywords = map { $class->_instance_from_rpcdata($_) }@{$res->{wordlist}};<br />
EOFA<br />
patch < Keyword.patch<br />
rm -f Keyword.patch<br />
cd /root<br />
rm -f Hatena-Keyword-0.05.tar.gz<br />
tar czvf Hatena-Keyword-0.05.tar.gz Hatena-Keyword-0.05<br />
rm -fr Hatena-Keyword-0.05<br />
$CPANM_CMD Hatena-Keyword-0.05.tar.gz<br />
rm -f Hatena-Keyword-0.05.tar.gz<br />
$CPANM_CMD Exporter<br />
$CPANM_CMD File::ShareDir<br />
$CPANM_CMD Params::Validate<br />
$CPANM_CMD Math::BigInt<br />
$CPANM_CMD Math::BigInt::GMP<br />
wget http://search.cpan.org/CPAN/authors/id/D/DM/DMAKI/DateTime-Calendar-Japanese-Era-0.08001.tar.gz<br />
tar xzvf DateTime-Calendar-Japanese-Era-0.08001.tar.gz<br />
cd DateTime-Calendar-Japanese-Era-0.08001<br />
rm -fr inc/ExtUtils<br />
cd lib/DateTime/Calendar/Japanese<br />
cat << "EOFB" > Era.patch 2>&1<br />
--- Era.pm.orig 2013-10-21 16:41:35.886078724 +0900<br />
+++ Era.pm 2013-10-21 16:42:43.663065831 +0900<br />
@@ -211,17 +211,23 @@<br />
# $start_date->set_time_zone('UTC');<br />
# $end_date->set_time_zone('UTC');<br />
<br />
+ my $eraname;<br />
+ if (Encode::is_utf8($this_era->[$NAME])){<br />
+ $eraname = $this_era->[$NAME] ;<br />
+ } else {<br />
+ $eraname = Encode::decode_utf8($this_era->[$NAME]);<br />
+ }<br />
if ( $opts->{is_south_regime} ) {<br />
push @SOUTH_REGIME_ERAS, __PACKAGE__->new(<br />
id => $this_era->[$ID],<br />
- name => Encode::decode_utf8($this_era->[$NAME]),<br />
+ name => $eraname,<br />
start => $start_date, <br />
end => $end_date, <br />
);<br />
} else {<br />
__PACKAGE__->register_era(<br />
id => $this_era->[$ID],<br />
- name => Encode::decode_utf8($this_era->[$NAME]),<br />
+ name => $eraname,<br />
start => $start_date,<br />
end => $end_date<br />
);<br />
EOFB<br />
patch < Era.patch<br />
rm -f Era.patch<br />
cd /root<br />
rm -f DateTime-Calendar-Japanese-Era-0.08001.tar.gz<br />
tar czvf DateTime-Calendar-Japanese-Era-0.08001.tar.gz DateTime-Calendar-Japanese-Era-0.08001<br />
rm -fr DateTime-Calendar-Japanese-Era-0.08001<br />
$CPANM_CMD DateTime-Calendar-Japanese-Era-0.08001.tar.gz<br />
rm -f DateTime-Calendar-Japanese-Era-0.08001.tar.gz<br />
$CPANM_CMD DateTime::Event::Sunrise<br />
$CPANM_CMD DateTime::Calendar::Japanese<br />
$CPANM_CMD Class::Factory::Util<br />
$CPANM_CMD DateTime::Format::Builder<br />
wget http://backpan.perl.org/authors/id/D/DM/DMAKI/DateTime-Format-Japanese-0.04000.tar.gz<br />
tar xzvf DateTime-Format-Japanese-0.04000.tar.gz<br />
cd DateTime-Format-Japanese-0.04000<br />
cd lib/DateTime/Format/Japanese<br />
cat << "EOFC" > Common.patch 2>&1<br />
--- Common.pm.orig 2008-08-25 01:18:06.000000000 +0900<br />
+++ Common.pm 2013-10-21 17:17:29.572062844 +0900<br />
@@ -302,7 +302,12 @@<br />
}<br />
<br />
my $era_year = ($dt->year - $era->start->year) + 1; <br />
- my $era_name = Encode::decode_utf8($era->name);<br />
+ my $era_name;<br />
+ if (Encode::is_utf8($era->name)){<br />
+ $era_name = $era->name;<br />
+ } else {<br />
+ $era_name = Encode::decode_utf8($era->name);<br />
+ }<br />
<br />
return $era_name .<br />
_format_number($era_year, $number_format) .<br />
EOFC<br />
patch < Common.patch<br />
rm -f Common.patch<br />
cd /root<br />
rm -f DateTime-Format-Japanese-0.04000.tar.gz<br />
tar czvf DateTime-Format-Japanese-0.04000.tar.gz DateTime-Format-Japanese-0.04000<br />
rm -fr DateTime-Format-Japanese-0.04000<br />
$CPANM_CMD --force DateTime-Format-Japanese-0.04000.tar.gz<br />
rm -f DateTime-Format-Japanese-0.04000.tar.gz<br />
$CPANM_CMD --force XML::Feed::RSS<br />
$CPANM_CMD Cache::FastMmap<br />
$CPANM_CMD base<br />
$CPANM_CMD IO::Pipely<br />
$CPANM_CMD POE::Test::Loops<br />
$CPANM_CMD POE<br />
$CPANM_CMD Net::DNS<br />
$CPANM_CMD POE::Component::Client::DNS<br />
$CPANM_CMD Net::IP::Minimal<br />
$CPANM_CMD ExtUtils::Constant<br />
$CPANM_CMD Socket<br />
$CPANM_CMD POE::Component::Resolver<br />
$CPANM_CMD POE::Component::Client::Keepalive<br />
$CPANM_CMD Test::POE::Server::TCP<br />
$CPANM_CMD POE::Component::Client::HTTP<br />
$CPANM_CMD UNIVERSAL::isa<br />
# 下記2つはすでにcpanには無い為別のサイトから取得<br />
$CPANM_CMD http://mirrors.gigenet.com/freebsd/distfiles/Data-Average-0.03000.tar.gz<br />
$CPANM_CMD http://download.xs4all.nl/freebsd/ports/distfiles/Xango-1.08.tar.gz<br />
$CPANM_CMD XML::Parser::Lite::Tree<br />
$CPANM_CMD Flickr::API<br />
# DateTime::Format::EpochはMath::BigInt::GMPの精度が上がったために起こる<br />
# 問題の様子。AD100年とかを使わないので仕方なくforceInstall<br />
$CPANM_CMD --force DateTime::Format::Epoch<br />
$CPANM_CMD WebService::YouTube<br />
$CPANM_CMD WWW::Babelfish<br />
$CPANM_CMD Text::Emoticon<br />
$CPANM_CMD Email::Address<br />
$CPANM_CMD Lingua::StopWords<br />
$CPANM_CMD Text::ExtractWords<br />
$CPANM_CMD Text::Language::Guess<br />
$CPANM_CMD Geography::Countries<br />
$CPANM_CMD IP::Country<br />
$CPANM_CMD File::Fetch<br />
$CPANM_CMD Archive::Extract<br />
$CPANM_CMD Alien::Tidyp<br />
$CPANM_CMD HTML::Tidy<br />
$CPANM_CMD Data::Dumper<br />
$CPANM_CMD Test::Differences<br />
$CPANM_CMD Text::Markdown<br />
wget http://kakasi.namazu.org/stable/kakasi-2.3.4.tar.gz<br />
tar zxvf kakasi-2.3.4.tar.gz<br />
cd kakasi-2.3.4<br />
./configure<br />
make && make install<br />
cd ..<br />
rm -fr kakasi-2.3.4*<br />
$CPANM_CMD Text::Kakasi<br />
$CPANM_CMD NetAddr::IP<br />
$CPANM_CMD Crypt::OpenSSL::Random<br />
# Mail::SpamAssassin自力インストールは難しい。<br />
# 素直にyum系からspamassassinをインストールすべし<br />
$CPANM_CMD Mail::SpamAssassin<br />
$CPANM_CMD Audio::Beep<br />
$CPANM_CMD IRC::Utils<br />
$CPANM_CMD Object::Pluggable<br />
$CPANM_CMD POE::Component::Syndicator<br />
$CPANM_CMD POE::Filter::IRCD<br />
$CPANM_CMD POE::Component::IRC<br />
$CPANM_CMD Data::Dump<br />
$CPANM_CMD Devel::Size<br />
$CPANM_CMD POE::Component::IKC::Client<br />
$CPANM_CMD Net::NetSend<br />
$CPANM_CMD Text::CSV_PP<br />
$CPANM_CMD OLE::Storage_Lite<br />
$CPANM_CMD Spreadsheet::WriteExcel<br />
$CPANM_CMD Mail::IMAPClient<br />
# Net::MovableTypeはテストに使われるサーバに<br />
# 接続できないためエラーとなるのでうまく行かない可能性もあるがforce<br />
$CPANM_CMD --force Net::MovableType<br />
$CPANM_CMD XML::Twig<br />
$CPANM_CMD PDF::Writer<br />
$CPANM_CMD Image::Size<br />
$CPANM_CMD Module::Loaded<br />
$CPANM_CMD Graphics::ColorNames<br />
$CPANM_CMD PDF::API2<br />
$CPANM_CMD PDF::FromHTML<br />
$CPANM_CMD Palm::PalmDoc<br />
$CPANM_CMD Data::Serializer<br />
$CPANM_CMD DateTime::Format::ICal<br />
$CPANM_CMD DateTime::Event::Recurrence<br />
$CPANM_CMD DateTime::Event::ICal<br />
$CPANM_CMD Devel::StackTrace<br />
$CPANM_CMD Class::ReturnValue<br />
$CPANM_CMD Class::Accessor::Chained<br />
$CPANM_CMD Text::vFile::asData<br />
$CPANM_CMD Data::ICal<br />
# Search::EstraierはTestPodで引っかかってる様子<br />
# 他テストで問題無いことからforce<br />
$CPANM_CMD --force Search::Estraier<br />
$CPANM_CMD File::Grep<br />
$CPANM_CMD Lingua::Stem::Snowball<br />
$CPANM_CMD common::sense<br />
$CPANM_CMD JSON::XS<br />
$CPANM_CMD KinoSearch<br />
# DBIx::Class::Schemaはここまでインストールしてきた<br />
# モジュール以外の33のモジュールを必要とする。<br />
# しかしここまで来ていれば全てのモジュールを正常に<br />
# インストールできる事から省略する。<br />
$CPANM_CMD DBIx::Class::Schema<br />
$CPANM_CMD Text::Sentence<br />
$CPANM_CMD Lingua::EN::Summarize<br />
$CPANM_CMD Text::Original<br />
$CPANM_CMD Lingua::JA::Summarize::Extract<br />
$CPANM_CMD Font::AFM<br />
$CPANM_CMD HTML::FormatText<br />
$CPANM_CMD Lingua::ZH::HanDetect<br />
$CPANM_CMD Plagger<br />
$CPANM_CMD Mouse<br />
$CPANM_CMD Log::Minimal<br />
$CPANM_CMD OrePAN<br />
--ここまで--<br />
<br />
このBloggerは変な所で折り返しがついてしまいます。<br />
長い所は変な改行などが残ってないか確認して下さい。<br />
<br />
この状態で既にPlaggerの実行は可能です。<br />
ただしassetsを用意しないと正常な動作はしません。<br />
長かったので次回実行に移りますtarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0tag:blogger.com,1999:blog-523633723819276237.post-8172964409306838942013-11-06T16:08:00.001+09:002018-07-18T16:30:11.685+09:002013/10/27現在のPlaggerに必要なモジュールの取得その12013/10/27現在でPlaggerインストール時に必要と思われる<br />
モジュールを取得、インストールしてみたいと思います。<br />
私が行った方法は以下の構成です。<br />
<a name='more'></a><br />
<ol>
<li>Windows7 x64 SP1</li>
<li>Oracle VirtualBox 4.2.16 r86992</li>
<li>MotherBoard ASUS B85M</li>
<li>MEM 16GB</li>
<li>HDD SATA 2TB</li>
</ol>
2の仮想マシンにCentOS6.4をインストールします。<br />
CentOS6.4のインストールの詳細は省きますが<br />
<a href="http://centossrv.com/" target="_blank">http://centossrv.com/</a><br />
<a href="http://centossrv.com/" target="_blank"> </a>さんのページがわかりやすいかと思います。<br />
こちらでCentOSインストール->CentOS6インストールと<br />
CentOS初期設定ー>CentOS6初期設定 をしておきます。
<br />
この時点でSSHでの接続が可能になりますのでPuttyなどを使って<br />
各種設定をしていかれたほうがいいかと思います。<br />
なぜならこれから沢山のコピペが必要になるからです。<br />
VirtualBoxのツールを入れてコピペが出来るようにするのも<br />
手段としてはあるのですが、汎用性にかけると思いますので<br />
推奨いたしません。<br />
<br />
次からは仮想マシンの中での作業になります。<br />
ユーザーはrootを想定しています。<br />
通常ユーザーを使用する場合は適宜変更してください。 <br />
テキストエディタ(私はviを使用しています。)で以下のshellscriptを<br />
新規作成します。(ここではinst00.sh)<br />
<br />
--ここから-- <br />
#!/bin/bash<br />
yum -y install perl-devel<br />
yum -y install perl-ExtUtils-MakeMaker<br />
yum -y install libxml2-devel<br />
yum -y install perl-XML-LibXML perl-libxml-perl<br />
yum -y install openssl-devel openssl-perl<br />
yum -y install perl-Crypt-SSLeay perl-Net-SSLeay<br />
yum -y install expat-devel<br />
yum -y install readline-devel<br />
yum -y install perl-Term-UI<br />
yum -y install mpfr-devel<br />
yum -y install apr-devel apr-util-devel<br />
yum -y install httpd-devel sqlite-devel<br />
yum -y install neon-devel<br />
yum -y install subversion-perl<br />
yum -y install libtidy-devel<br />
yum -y install db4-devel db4-devel-static<br />
yum -y install spamassassin<br />
yum -y install screen<br />
mkdir /usr/local/UserPerl<br />
chmod 777 /usr/local/UserPerl<br />
chown nobody:nobody /usr/local/UserPerl<br />
--ここまで--<br />
<br />
やっていることは土台となるOSにperlモジュール以外で<br />
必要になるモジュールをインストールしています。<br />
この中にはperlモジュールも含まれていますが<br />
後ほどアップグレードいたします。<br />
また/usr/local/UserPerlというフォルダを作成し<br />
ここに今回使用するモジュールをインストールしていきます。<br />
<br />
書き終わったらshellを実行します。<br />
bash inst00.sh<br />
私の環境で2分程度でした。<br />
<br />
次にperlモジュールインストール先の設定を行います。<br />
私は.bashrcに記載しましたが環境変数が変わってくれるのであれば<br />
どこでもかまいません。<br />
<br />
--追記ここから--<br />
export PERL_CPANM_OPT="--local-lib=/usr/local/UserPerl --mirror=http://backpan.perl.org/ --save-dists=/root/cpan-mirror"<br />
export PATH=/usr/local/UserPerl/bin:$PATH;<br />
export PERL5LIB=/usr/local/UserPerl/lib/perl5:$PERL5LIB;<br />
--追記ここまで--<br />
<br />
追記したらsource .bashrcとするかリセットさせて下さい。<br />
また次回からのモジュールインストールには時間がかかりますので<br />
裏で実行させておけるscreenの設定を行います。<br />
~/.screenrcを新規作成します。<br />
<br />
--ここから--<br />
escape ^z^z<br />
defencoding UTF8<br />
defscrollback 1000<br />
startup_message off<br />
log on<br />
deflog on<br />
logfile "~/.screenlog/screen%d_%m(%y).log"<br />
--ここまで--<br />
<br />
これでscreenの環境が整いました。<br />
screenを実行させてバックグラウンド環境で動作する<br />
環境が整いました。<br />
(これは私が普段使っている設定です。<br />
お好みに合わせてキーバインドなどを変更してもかまいません<br />
ちなみにこの.screenrcではCtrl+zでコマンド入力状態、<br />
続けてcを押せば新規screen追加、nでscreen切り替え<br />
dでデタッチ(フォアグランドへ戻る)などが可能です。<br />
詳細はgoogleなどでlinux screenとすれば出てくるでしょう)<br />
この環境で今後は操作していきますtarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0tag:blogger.com,1999:blog-523633723819276237.post-12381793105277463392013-10-22T16:11:00.000+09:002018-07-18T16:30:27.960+09:002013/10/22現在のPlaggerについてお久しぶりです。<br />
以前の投稿から何年たったかわからない位前になりますね。<br />
<br />
この間正常に動作していたサーバが突如不安定になりそれを復旧させるために<br />
再インストールする事になりました。<br />
<br />
普通のサーバ用途ならばたいして時間かからなかったのですがPlaggerだけは<br />
すんなりと入ってはくれませんでした。 <br />
<br />
<a name='more'></a><br /><br />
さて。お題にあるとおりなのですが、なにぶん7年前のプロダクトですから<br />
現在インストールするのにだいぶてこずりました。<br />
<br />
一度は挫折しかけたのですが、どうしても自分の環境には<br />
無くてはならない存在だと気づき<br />
長期戦覚悟で地道にインストールを続けてきました。 <br />
<br />
ここにその成果を記したいと思います。<br />
<br />
「Plaggerは今でもインストールできるのか?」可でもあり不可でもあります。<br />
現在通常ではインストールできないモジュールが複数あり<br />
それを強制的にインストールするか自分のようにある程度加工してから入れるかで<br />
そのモジュールを使用する場面で違いが出てきます。<br />
<br />
「そもそもPlaggerってなに?」<br />
フィードアグリゲーターの一種でRSSに代表される情報を加工して<br />
別の形にして出力するものです。<br />
じゃあRSS見れればそれでいいんじゃない?と言われる方。<br />
自分のほしい情報だけ見たいと思いませんか?<br />
RSSには最近では宣伝などが多く含まれていたり<br />
単純にRSSだけ見ても本文はリンクページ先にあったりと<br />
案外不便なことも多いのです。<br />
さらにRSSは蓄積情報とはなりません。<br />
情報の早いページでは1時間もたたないうちに<br />
過去へ流されその時点の情報しか得られません。<br />
自分は会社の通勤途中に情報を見ることにしています。<br />
そのときの最新情報はその場で取得できますが、<br />
それ以外の時間に起きた情報は探すのに一苦労します。<br />
いちいちコピペしたり検索をかけたり、Webを渡り歩いたりとあっという間に<br />
時間は過ぎ去っていき、目的のものを調べきれないまま<br />
帰宅してしまうということが多々ありました。<br />
またつい数時間前まであったと思われる情報が消し去られ<br />
見ることができなかったことも多くありました。<br />
「自分の時間をもっとも有効に過ごすためにはどうしたらよいか」を<br />
調査していった時Plaggerにたどり着きました。<br />
<br />
「Plaggerで何ができるの?」<br />
検索で「<a href="http://ja.wikipedia.org/wiki/Plagger" target="_blank">Plagger Wiki</a>」 で詳細が得られるでしょう。<br />
プラグイン方式でさまざまな事が可能になります。<br />
私がしているのはPlaggerで最も使われているであろう<br />
「複数のRSSから本文を取得し、メール形式にして特定のメアドに送付する」<br />
ということをさせています。<br />
実は最近では<br />
「個人毎に最適化されたニュース配信(キュレーションサービス)」<br />
なんていうサービスも存在しますが、<br />
実際使用してみるとやはり広告があったり可読性が悪い<br />
などで私には適していませんでした。<br />
メール形式で必要なサイトの記事全文を送ってもらうことにより<br />
その瞬間(実際には一時間単位でそれらページをクロールしたとき)に<br />
起こったニュース記事やブログ記事などが蓄積されます。<br />
この中から必要と思われるタイトルを拾い読みすれば<br />
その日何が起こっていたのかがわかるようになったり、<br />
それを残しておけば後日ネタのひとつにすることもできます。 <br />
<br />
「情報過多にならない?」<br />
なります(笑)。しかもとても多くの情報を仕入れる事になります。<br />
なので私はある程度選別も同時に行っています。<br />
記事中に特定の文字があるかどうかをメーラーで振り分け、<br />
「最重要」「重要」「普通」「それ以外」の4つに区分けさせます。<br />
こうすることで「取得したが自分にはさほど必要ではない」記事を<br />
フィルタリングさせています。<br />
私の場合10箇所程のサイトを1時間置きに最新情報を取得させて<br />
います。多いときは通勤時間中では収まらない程になるときもあります。<br />
そんなときは帰ってからの余暇時間を利用してPCで一覧読みしたりしています。<br />
<br />
まずはPlaggerをインストールしてみて、情報収集能力の高さを確認してみて下さい。<br />
かなり高度なPerlの知識、shellの知識が必要になりますが<br />
それを覚えたらこれほど便利なツールはありません。<br />
前にも書きましたが、7年も前にできたシステムです。<br />
ですが枯れてたほうが使いやすいというのも事実です。<br />
Plaggerで検索をかければさまざまなサイトで紹介してくれています。<br />
<br />
次回は現状のPlaggerのインストール及び<br />
それらインストールに使用したモジュールの保存<br />
方法などを書きたいと思います。tarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0tag:blogger.com,1999:blog-523633723819276237.post-12229091547607754332013-05-18T18:44:00.000+09:002018-07-18T16:41:28.913+09:00DateTime-Calendar-Japanese-Era-0.08001が入らないcpanm DateTime::Calendar::Japanese::Era<br />
FAIL<br />
<br />
orz <br />
<br />
<a name='more'></a><br /><br />
<br />
色々調査してみての結果<br />
<br />
http://search.cpan.org/CPAN/authors/id/D/DM/DMAKI/DateTime-Calendar-Japanese-Era-0.08001.tar.gz<br />
<br />
で落としてきたファイルを展開した後<br />
cpanm .<br />
<br />
としてみてもなぜかコンパイルエラーが発生する。<br />
エラーの場所はAUTHORとかわけわからん。<br />
あちこち探っていくとinc/ExtUtils/MakeMakerなる物があるがそこでファイルが生成できない様子。<br />
<br />
で、ふと思った。<br />
「ん? ExtUtils::MakeMakerって最新落としたんでなかったっけ?」<br />
で最新のMakeMaker.pmと比較してみたら案の定古い。<br />
でわざわざ最新版があるのだからそれを使ってもらおう。<br />
<br />
rm -fr inc/ExtUtils<br />
<br />
cpanm .<br />
<br />
うまーtarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0tag:blogger.com,1999:blog-523633723819276237.post-40889204529984791752013-01-31T20:01:00.000+09:002018-07-18T16:45:03.431+09:00電流測定およびロガーお久しぶりです。<br />
今回は趣向を変えて自作基板の紹介を行いたいと思います。<br />
<br />
<br />
お題はずばり「電流測定およびロガー」です。応用すれば電力も導き出せますよね。<br />
<br />
<a name='more'></a><br /><br />
作成した目的としては<br />
1.フレッツミルエネでは思ったようなグラフが保存できなかった為自由度の高い数値だけのデータがほしかった。<br />
2.フレッツミルエネは安いようで結構高い。安いコストで。<br />
3.自分の頭をフル回転させてみたい <br />
そんな思いから作成しました。 <br />
<br />
<br />
<span style="color: red;">注意事項:</span><br />
<span style="color: red;">今回の実験・制作は電気・電子知識のある方を対象としています。</span><br />
<span style="color: red;">よくわからない方は素直にフレッツミルエネなどの既成品を購入することをお勧め致します。 </span><br />
<br />
<br />
さて作ったものはこちら<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG12dmX52uku-Ov4yt61CGcbdxky35RNanJgCetvLNUi26VS5qgeKA_YAwMJtwsLAfaT7aRVilrRH9cVym3-N2St_Y8yoQJMwIAeXsbGFpk7929UhJABDa64mNdJ8sJgUAkBx2rlQBdjOV/s1600/20130130_145221s.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG12dmX52uku-Ov4yt61CGcbdxky35RNanJgCetvLNUi26VS5qgeKA_YAwMJtwsLAfaT7aRVilrRH9cVym3-N2St_Y8yoQJMwIAeXsbGFpk7929UhJABDa64mNdJ8sJgUAkBx2rlQBdjOV/s1600/20130130_145221s.jpg" width="320" /></a></div>
一番上に載っているものがそうでして、クランプ式電流センサー(私は秋葉原の千石電商さんで取り扱っているSCT-013-030を使用しております)の微弱電圧をAC→DC、昇圧して下のイーサーネットシールドを経由してArduinoに接続してあります。<br />
<br />
<br />
<br />
Arduinoについて簡単に説明しておきます。<br />
これはイタリアで作成されたマイコン基板でして、デジタル的にはLEDを点滅させてみたり<br />
モーター駆動を制御してみたり。アナログ的には温度センサーなどを取り付けてその数値を<br />
読み取ったりなど汎用性に富んだボードです。<br />
私が使用しているのはArduino unoというまあ初心者が扱いやすいボードです。<br />
一個だいたい3千円程度で購入できます。<br />
また。この基板用にさまざまなシールド製品(ドーターボード?拡張基板?)があり<br />
私はイーサーネットシールドというものを同時に購入しました。こちらは一個5千円前後です。<br />
この2つだけで小さなWebサーバが作れちゃいます。<br />
この業界では結構名が知れている製品ではあります。<br />
<br />
さて話を戻しましょう。<br />
<br />
<br />
やれることとしては<br />
<br />
1.現在の電流値が電圧値となって出力されているセンサー値をブラウザで確認。(その際現在時刻、基板動作電圧の計測値も出力されます)<br />
2.マイクロSDカードに1秒毎に記録。<br />
3.リアルタイムクロックのみバッテリバックアップ(SDを取り外す際に電源を落としても時刻機能だけは動かしておきたいため)<br />
4.arduinoのプログラムを書き換えることで さまざまなシステムへの応用<br />
ということができます。<br />
<br />
SCT-013-030は最大30Aまでを計測することが可能なセンサーでこれをACの片側にクランプ<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiomE9pGmDiX8j10KU-ZJ-Z3uSztcw_oHChbTzlRxJOc-Tsk2ioooS0XFrue7uHCf-PdGyTK7LKVeTgKEINI96_YI6iQozZjZos29i94-rO53pgAVPPa0cx5O7IzJIOf8hr185IiRo1fqoh/s1600/20130131_160539s.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiomE9pGmDiX8j10KU-ZJ-Z3uSztcw_oHChbTzlRxJOc-Tsk2ioooS0XFrue7uHCf-PdGyTK7LKVeTgKEINI96_YI6iQozZjZos29i94-rO53pgAVPPa0cx5O7IzJIOf8hr185IiRo1fqoh/s1600/20130131_160539s.jpg" width="320" /></a></div>
するとこのセンサーは電流に応じた電圧を出力してくれます。<br />
<br />
非接触なためほぼ安全(延長用の短いケーブルを買ってきてその線をクランプするようにすれば既存の線を加工する必要がなく、ショートする可能性も可能な限り少なくすることができると思います。)だと思います。<br />
<br />
ただこのセンサーはDCの線であればDCの出力なのですが、ACを測ろうとすると当然出力も<br />
ACの値が出力されます。<br />
今回一番苦慮したのはそこでして、いかにしてArduinoに的確な数値を読み取ってもらうかが問題であり、自作した中では一番厄介な代物でした。<br />
最初は「ピークだけ読み取れば簡単じゃん」と軽い考えはやはり甘かったです。<br />
ArduinoのAD変換時間とピーク取得のタイミングがぴったりとはいかないからです。<br />
AD変換最速でやってもピークの数値が想定の範囲を軽く超えてしまいます。 <br />
<br />
そこで色々な書物を読み漁り、たどり着いた回路を基板に落とし込んでみました。<br />
結果としてはArduinoに最大30A時に1Vppの電圧が発生するセンサーの値を、ADするのに最適な電圧Max5Vにすることが可能になりました。<br />
分解能力としてはArduino(正確にはAtmel社のATmega328P)の制限により5Vを1024段階で表現しているので約0.0048V=4.8mV単位で計測することが可能です。<br />
これを30A時に5Vに当てはめると4.8mV時は約28.8mAとなり計測上28.8mA毎という計算になりますかな。<br />
<br />
あとはソフトでAD変換数値をブラウザーで表示するようにしたのとマイクロSDに結果を出力するだけにして、計算は取得したパソコンでExcelなりRRDToolなりでグラフ化すれば使用電流の表が出来上がり。<br />
使用電源はAC100を想定。VA値は直計算で出ますし、力率がわかれば電力だって計算できます。(世の中の電力計は80%で計算されているとどこかで聞いたことがありますが調べていません)<br />
<br />
もっとも正確な数値であるかどうかはセンサーの精度によってしまうのでこれはいかんともしがたいところではあります。<br />
ただ実測値を見てみると期待以上の精度を得ることができました。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
とここまで引っ張っておいてさあ回路図を出しましょうと思ったのですがこんな回路誰でも思いつくし必要な人は作っているでしょう。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
そこで・・・<br />
<br />
<br />
<br />
<br />
ほしい人は<br />
1.回路図だけほしい。 <br />
2.基板設計図までほしい。 <br />
3.基板だけほしい。<br />
4.基板と部品がほしい。<br />
5.完成品がほしい。<br />
に分けて<b><span style="color: #134f5c;">それぞれ適切な価格の意見</span></b>を聞きたいと思います。<br />
結構大変だったので必要であればその対価を頂きたいと思っています。<br />
ほしいと思う人はご連絡ください。<br />
回路図はLTspiceで設計し、EAGLEで基板を作成しています。<br />
自前でエッチングし穴あけ加工も手作業です。<br />
簡単な導通試験までは行いますが、それ以上は購入者様がご自身で行うスタンスです。<br />
安いことにこしたことはないのですが、筆者がそれ相応と思えるまでは公表を控えようと思います。 <br />
<br />
どれだけの人が興味あるか知りたいし、なにより自分への「励ましの声」がどれだけあるか。<br />
とてもわくわくしています。<br />
ご意見ご感想お待ちしております。<br />
<br />
タグ:電流測定 ロガー フレッツミルエネ SCT-013-030 Arduino イーサーネットシールド クランプ型 電流センサー AD変換 LTspice EAGLEtarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0tag:blogger.com,1999:blog-523633723819276237.post-35247791308020583002011-12-07T20:49:00.001+09:002018-07-18T16:45:18.053+09:00JavaのArrayListの削除時の注意点<br />
AndroidやJavaではよくArrayListを頻繁に使用する。<br />
特にAndroidではListViewにアタッチする時によく利用されるようだ。<br />
そこで私がしでかした失敗談を一つ。<br />
<br />
<a name='more'></a><br /><br />
ArrayListの要素を削除する場合removeメソッドを使用する。<br />
このremoveメソッドは要素を削除した場合<br />
indexも変更になる事に気をつけなければならない。<br />
例えば<br />
<br />
ArrayList<String> arrayList = new ArrayList<String>[];<br />
arrayList.add("AAA");<br />
arrayList.add("BBB");<br />
arrayList.add("CCC");<br />
<br />
とした際にまとめて削除したい場合<br />
for( int i = 0 ; i < arrayList.size() ; i++ ){<br />
arrayList.remove(i);<br />
}<br />
とかするとエラーになってしまう。<br />
なぜならsizeで取得した時点の要素数は3だが<br />
removeを実行した瞬間にsizeが変わる。<br />
index0番目(i=0)に相当するAAAを削除したらsizeはその時点で2になるのだ。<br />
そしてindex1番(i=1)はBBBを指してはおらずCCCを指す事になる。<br />
この時点でBBBは残りCCCは削除されるが<br />
次のindex2番(i=2)はremoveをかけた瞬間にエラーとなる。<br />
そう。要素が既に無いのだ。<br />
3個消したい場合これではだめ。<br />
全部消したいのなら<br />
arrayList.clear()とするか<br />
for( int i = 0 ; i < arrayList.size() ; i++ ){<br />
arrayList.remove(0);<br />
}<br />
などとすればよいだろう。<br />
だが例えば「1番目と3番目を削除したい」としたらどうだろう。<br />
理論的にはindex0を削除したあとindex1を削除すればいいのだが・・・。<br />
「減っていくなら最後の方から削除すればいいのに」という声が聞こえた。<br />
<br />
for( int i = arrayList.size() - 1 ; i >= 0 ; i-- ){<br />
if ( i == 0 ){<br />
arrayList.remove(i);<br />
}<br />
if ( i == 2 ){<br />
arrayList.remove(i);<br />
}<br />
}<br />
<br />
こんな感じ?tarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0tag:blogger.com,1999:blog-523633723819276237.post-7547479726071741422011-12-04T21:00:00.001+09:002018-07-18T16:46:40.033+09:00Androidプログラミングメモ 2011/12/4simple_list_item_multiple_choiceのListViewを使用していて<br />
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);<br />
などとした時にチェックされた物を処理したい場合に<br />
getCheckedItemPositions()を使おうと思ったんだけどどうも違うみたい。<br />
<br />
<a name='more'></a>正しくは「チェックしたものがある時にすべてのリストを返す」物みたい。<br />
例えば以下の直感コードではうまく動かない。<br />
<br />
SparseBooleanArray positions = lv.getCheckedItemPositions();<br />
for (int i = 0; i < positions.size(); i++) {<br />
if(positions.valueAt(i)){<br />
data.remove(positions.keyAt(i));<br />
}<br />
}<br />
<br />
一個だけだとうまく行く時もあるけど二個以上のチェックに失敗したり<br />
データを追加したりした後のデータ削除などすると目もあてられない。<br />
SparseBooleanArrayのsize()はListViewの最大値を返してくれるし<br />
keyAt(i)なんかはよくわからない数値を出してくるし。<br />
<br />
ListViewが何百もあった場合は結構つらそうだけど以下のように地道に<br />
処理した方が無難みたい。<br />
<br />
for (int ii = 0; ii < lv.getChildCount(); ii++) {<br />
CheckedTextView vv = (CheckedTextView)lv.getChildAt(ii);<br />
if (vv.isChecked()) {<br />
//チェックしたものの作業<br />
data.remove(ii);<br />
}<br />
}<br />
<br />
また、これはAndroidだけではない事だけどデバッグなどで<br />
データを見たいからと言って<br />
<br />
Log.v(getClass().getSimpleName(), "values: " + data.toString());<br />
data.remove(ii);<br />
Log.v(getClass().getSimpleName(), "values: " + data.toString());<br />
<br />
とかするとデータの無いものを見たりしようとするので<br />
馬鹿な真似はしないように。tarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0tag:blogger.com,1999:blog-523633723819276237.post-54007985205139953822011-10-19T15:44:00.000+09:002018-07-18T16:47:59.873+09:00素で入れたperlbrewにはLWP::Protocol::httpsをニコニコ動画を取り込みたいと思いperlbrew環境で試していた所<br />
どうもAPIから帰ってくる答えが手元のブラウザと違う。<br />
<br />
<a name='more'></a>なんでかなといろいろ探って遡っていったらサインアップでこけてた。<br />
サインアップは毎回LWP::UserAgentを使用しているので問題無いと<br />
思っており戻り値もちゃんと帰ってくるのでいいと思っていたら<br />
大間違いに気がつく。そう戻り値にちゃんと書いてあるのだ。<br />
<br />
$ lwp-request -e -d https://secure.nicovideo.jp<br />
501 Protocol scheme 'https' is not supported<br />
(LWP::Protocol::https not installed)<br />
Content-Type: text/plain<br />
Client-Date: Wed, 19 Oct 2011 06:21:24 GMT<br />
Client-Warning: Internal response<br />
<br />
(ダメじゃん。おれ)<br />
自分Crypt::SSLeayが入っていればLWPもそれに追従するものと<br />
思っておりました。基本的に。<br />
なので<br />
<br />
cpanm LWP::Protocol::https<br />
<br />
で解決。tarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0tag:blogger.com,1999:blog-523633723819276237.post-7801601118065505352011-10-13T20:54:00.000+09:002011-10-13T20:54:12.321+09:00HTC Evo WiMAXでgoldcard作成ISW11HTでMicroSDカードをカスタムFWなどを<br />インストールする際に必要なgoldcard作成のお話。<br />どうもこの機種ではマウント構造が少し違うみたい。<br />私のは<br />/sys/class/mmc_host/mmc2/mmc2:*/cid<br />にありましたので表示する際は<br />adb shell cat /sys/class/mmc_host/mmc2/mmc2:*/cid<br />となります。<br />tarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0tag:blogger.com,1999:blog-523633723819276237.post-50032264752825592292011-09-26T10:07:00.001+09:002018-07-18T16:49:04.889+09:00Plagger野良プラグイン作成Plagger::Plugin::Filter::ImageResizeなるものを作った。<br />
利用用途としては携帯のパケット量が気になる方や<br />
androidなどの端末でリサイズする時に時間が気になる方向け。<br />
<br />
<a name='more'></a><br /><br />
私は画像入りfeedなどをgmailのようにメールで読む時<br />
大きなサイズの画像などはリサイズ処理がかかるが<br />
この処理時間がちとイライラしていたので<br />
なんとかならないかといろいろサイトを見ていた。<br />
<br />
昔にだれか公開していたと思うのだが<br />
いくら探してもなかなか出てこないため作ってみた。<br />
<br />
package Plagger::Plugin::Filter::ImageResize;<br />
use strict;<br />
use warnings;<br />
use base qw (Plagger::Plugin);<br />
<br />
use Image::Magick;<br />
<br />
sub register {<br />
my($self, $context) = @_;<br />
$context->register_hook(<br />
$self,<br />
'update.entry.fixup' => \&filter,<br />
);<br />
}<br />
<br />
sub init {<br />
my $self = shift;<br />
$self->SUPER::init(@_);<br />
<br />
$self->conf->{width} or Plagger->context->error("config 'width' is not set.");<br />
}<br />
<br />
sub filter {<br />
my($self, $context, $args) = @_;<br />
<br />
my $conf_width = $self->conf->{width};<br />
<br />
for my $enclosure ($args->{entry}->enclosures) {<br />
my $image = Image::Magick->new;<br />
my $local_path = $enclosure->local_path;<br />
unless ($local_path) {<br />
$context->log(warn => "\$enclosure->local_path is not set. You need to load Filter::FetchEnclosure to use this plugin.");<br />
return;<br />
}<br />
$context->log(debug => "Load Image $local_path...");<br />
$image->Read($local_path);<br />
my $org_local_image_size = $image->Get('width') ;<br />
$context->log(debug => "Image Size $org_local_image_size");<br />
$context->log(debug => "Resize Size $conf_width");<br />
if ($org_local_image_size > $conf_width){<br />
$context->log(debug => "Image Width Bigger...");<br />
$image->Scale(geometry=>$conf_width);<br />
$image->Write($local_path);<br />
}<br />
undef $image;<br />
}<br />
}<br />
<br />
1;<br />
<br />
でyaml的にはこんな感じ。<br />
<br />
- module: Filter::ImageResize<br />
config:<br />
width: 280<br />
<br />
とりあえず適当なPluginをパクッてます。<br />
<br />
基本的に"見る向き"の横幅を基本にするため<br />
そこしか設定する箇所がありません。<br />
<br />
ソース読んで頂ければわかると思うけど<br />
ImageMagickとImageMagick-perlが必要。<br />
<br />
LogLevelをdebugにすると詳細な動きが出てきます。<br />
<br />
他にも"画質を落とす"などもできると思いますが<br />
取り合えず自分的には満足したので<br />
必要な方はご自身で追加してみてください。<br />
<br />
久々に組んでみたら結構時間がかかってしまった。<br />
もう年かなぁ。tarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0tag:blogger.com,1999:blog-523633723819276237.post-78504373295309683292011-09-11T12:27:00.001+09:002011-09-26T09:58:56.310+09:00家の携帯達<br />
<br />
家の携帯達です。<br />
<br />
両方共にandroidです。<br />
<br />
ここに落ち着くまで結構長かったなぁ。tarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0tag:blogger.com,1999:blog-523633723819276237.post-54739284942337257932011-09-11T12:04:00.001+09:002011-09-26T09:59:13.933+09:00HTC Evo WiMAX<br />
<br />
購入しました。<br />
<br />
これから少しづつ更新していきますね。tarepandahttp://www.blogger.com/profile/18253159605969630734noreply@blogger.com0