LWP::UserAgentのSSL_Versionについてのメモ

0
Filed under perl
Tagged as , , ,

とある案件でBusiness::Paypal::NVPが使われてるものがあって、
Paypalさんが、「POODLE SSL 3.0の脆弱性」の対応のために、TLSだけに制限しますよっていうのを
言ってて、ちょっと確認したけどわかりにくかったので、メモしておきます。

POODLE SSL 3.0の脆弱性

Business::Paypal::NVPの中身をみるとLWP::UserAgentを使ってるんだけど
特に流れのなかで、SSL_version(SSL2.0, SSL3.0, TLSv1, TLSv1.1, TLSv1.2)等を指定してそうになかったので、
デフォルトの挙動を調べてみた。

LWP::UserAgentでhttps通信する場合、IO::Socket::SSLのSSL_versionに依存してくるようだけど、
podのSSL_version」の項目をみてみると、以下のように書いてある。

「’SSLv23′ uses a handshake compatible with SSL2.0, SSL3.0 and TLS1.x」
・SSLv23という指定だと、SSL2.0とSSL3.0とTLS1.xが使えるぞ

「The default SSL_version is ‘SSLv23:!SSLv3:!SSLv2′」
・デフォルトの指定は、SSLv23が入っている。

ということで、SSLv23という指定だけども、TLS1.xはdefault状態で使えるということっぽい。
まぎらわしい感じするけど、そういうことらしい。

自宅内のLAN配線をしてみた

3
Filed under Network, PC, その他, ルーター
Tagged as , , ,

いきなりの本題ですが、インターネット大好きな皆さんは、
いつも有線LANですか?無線LANですか?

まあ、今のご時世的には、パソコンであれば、無線LANと皆さんいいますよね。
MacBookAirとかそもそも初期状態だと有線LANの差し込み口すらありませんからね。
とはいえ、一般家電(グレードにもよる)によっては、有線LAN一択だったりもします。

作業背景

(生涯見習い)エンジニアである私も、エンジニアの端くれなので、
家をたてるときに、LANはほしいけど、「自分でやるので配管だけお願いします」と
意気揚々と言ってやったわけですが、そのままズルズル今に至ったわけです。

で、最近有線LAN必須の家電が自宅にやってきたため、必要に迫られて、ケーブリングするターンなのです。

事前確認

一応業者さんに頼むといくらするのか、確認してみました。
長さ関係なく、CAT5eをケーブリングしてもらうと、1カ所あたり4000円だそうです。
CAT6にすると、1カ所あたり6000円だそうです。

用意するもの

とりあえず長ーーーいLANケーブルが必要です。
事前に糸とかで長さを計っておくと、必要な長さがわかって捗りますが、
私みたいな人間だと行き当たりばったりですので、
100mくらいの業販用の安いCAT5eでいいだろうという感じになるわけです。

で、とりあえずamazon先生からELECOMのCAT5eの100mリール巻きを購入するわけです。

CAT6がいいなら、少しの差額ですむので、そっちを購入してください。

ちなみに、ぱっとみた感じCAT6までしか100mの売ってなさそう

いざケーブリング

まずは、amazonで購入したLANケーブルですが、これは、元々ケーブル先端が出てるので、そのまま使えます。
ELECOM CAT5e 100m Cable

次にルーターだのHUBだのを設置する側を外します。(家によってはこれ屋根裏とか配電盤のあたりにおいたりもあるようですけど。)
コンセントカバー
このカバーを開くと、
コンセントジャック
このジャック群を外すと、
配管
こんな感じで、沢山の管がでてます。(これは管だけ通しておいてくださいとお願いしたからですね。)
一応部屋がわかるようにラベリングされてるやつがLAN用で、オレンジが電話線用で、一番右のが電源コンセント用ですね。

で、次に線を通す相手側(各部屋側)もカバーなどを外しておきます。
各部屋側の配管
すると、このように、リード線のついた配管が見えるので、作業しやすいように穴から出しときます。

次に、どちらでもいいんですが、どちらかのリード線の先端にLANケーブルの先端をくっつけて、
セロハンテープだのガムテープだので外れないように何カ所か止めて、配管に軽く突っ込みます。
LANケーブルと配管
それを逆側のリード線を引っ張って、ぐいぐい引き寄せる
リード線ひきよせる
すると、そのうちケーブルが出てきますので、さっきつけたテープ類を外して、きれいにします。
ついでに逆側もニッパーとかで切って、両端が切れてる状態にします。
LANケーブル貫通

次にLANのコネクタ側をカバーから外して、LANケーブルをニッパー等で周りの保護部分はがして、ねじれ線を出して、
コネクタに書かれてる色のところに入れていきます。
LANケーブルをコネクタに接続

これで、各部屋作業すると、以下のような感じになってきます。
コネクタ類

あとは、元通りにカバー類を取り付けていけば、完成です。
コンセントカバー

動作確認については、上記作業中に一部屋通すたびに、
無線LANを止めた状態のノートパソコンを用意して、有線LANケーブルをつけたあとに、
windowsだとipconfig、mac,linuxなどだとifconfigを叩いて、ちゃんとにipがとれているのを確認して、
一応外部サイトの回線速度のチェックを簡単にこなしました。

ということで、こんな感じで宅内LAN配線をしてみました。

補足

我が家の場合、8カ所に通したかったので、安いCAT5eでも業者に依頼すると32,000円です。
これをamazonさんからケーブルを4,000円未満で購入して手作業したので、
28,000円くらいが工賃という事が判明しました。これは高いよ。。

ということで、amazonでケーブルだけ購入したら、自宅のLAN配線できたよというお話でした。

メモ:cpanm git:// 使うならgitのバージョンに注意

2
Filed under perl
Tagged as , ,

こんにちは。
今日も無駄に時間をつかったお話です。

先日のYAPCでYappoさんが発表されてました Ksgkを入れるべく
cpanmをしたら、なぜかcloneできずにエラーという問題にぶちあたりました。

環境としては、Mac上のVMwareで動いているCentOSです。


$cpanm -nL local git://github.com/yappo/p5-Ksgk.git
Cloning git://github.com/yappo/p5-Ksgk.git ... FAIL
! Failed cloning git repository git://github.com/yappo/p5-Ksgk.git
! Couldn't find module or a distribution git://github.com/yappo/p5-Ksgk.git

【結論】
結論ファーストでいうと、gitのバージョンが、古かったため、
最新版にあげたら回避できたという話です。

【経緯・内容】
gitがおかしいのかなと思って確認した以下のgitコマンドは問題なく処理できました。


$ git clone git://github.com/yappo/p5-Ksgk.git

じゃあ、cpanmコマンドがおかしいのかなと思って、以下を試すも問題なし。

$ cpanm Log::Minimal

gitもcpanmも問題なさそうだ。
次に考えられるのは、cpanm + git:// だと問題がでるんじゃないか。
以下の感じで別のgithub上のコードを取り込もうとしたところ、
こちらも同じエラーがでました。


$ cpanm -nL git://github.com/****

これで、cpanm + git://だと問題がでるというのが確定した。
この時点で、ホスト側のMacでは、cpanm + git://でも問題なくできて、
perlもcpanmも Mac, CentOS両方とも同じバージョンで詰んだ感じしてました。
そもそもVMwareがNatだから何か引っかかってるのかなとか 
どんどん道を外れていったときに、
@dayflower師が 「gitのバージョンじゃね」と一言で解決してくれました。
ありがたや。

ちなみにMac上のgitが、git –versionでみると、「git version 1.7.12.4 (Apple Git-37)」
VM上のCent上のgitが、「git version 1.5.2.1」
とりあえずgitのバージョンあげて、問題回避できました。

というお話でした。

YAPC::Asia Tokyo 2013に行ってきた

3
Filed under perl, 未分類
Tagged as , ,

前夜祭 : 2013-09-19


今年は前夜祭から行ってきました。

個人的などうでもいい話

まず、チェックイン時、後にLTで発表のあったアプリのバグでQRコードがでなくて
四苦八苦するという苦行を経験して、早くも致命傷状態
twitterアカウント名を伝えてどうにかチェックイン。

LT-thon

仕切り直して、今年の前夜祭は、LT-thonという事でした。
で、とりあえず前夜祭で一番hitしたのは、同僚であるdameninngenn先生のLTにあった
HTML::Validate::Structure::Simpleですね。

某サービス関連でhtmlの閉じタグ忘れる事があるから、合間にタグ忘れチェックつけてと
ディレクターさんに言われてた訳ですが、優先度低いから心の奥底にしまってたわけです。

そんな時に、この話聞いて、タスクを思い出したし、これ通せば、サクサクや!と言う事で、
LT-Thon聞きながら試してみて、昨日手元の開発環境で導入してみた。
欲しいものズバリすぎて、楽できすぎた。 dameninngenn++すぎる。

他にも色々有用な話が沢山ありました。
しかも、アルコールがタダで飲めちゃうなんて、なんてすばらしいんでしょう。

Day1 : 2013-09-20


個人的などうでもいい話

いつも11時近くに出社するような人間にとって、10時開始という事で、
かなり気張っていたのですが、なんだかんだで遅くなってしまったと家を出ました。

で、現地についたのが、9時15分くらいだったかな。
ここで自分の頭の中では、9時開始だと脳内変換が勝手に行われて
@941さんのオープニングみれなかったな。。と悲しい思いになりながら、
メインホールに移動しようとしたら、@lestrratさんに止められて、
まだ開場前ですよ!と言われて、やっと時間が脳内変換されてる事に気づいた
超恥ずかしかった。。。
という、どうでもいい話もありつつ、オープニングを無事に見れました。

PSGI/Plack・Monocerosで学ぶハイパフォーマンスWebアプリケーションサーバの作り方

まずは、同僚のkazeburo先生の
「PSGI/Plack・Monocerosで学ぶハイパフォーマンスWebアプリケーションサーバの作り方」

パッと思い出せる範囲で、
・Monocerosを作ろうと考えた背景や実際にどういった差別化をしたのか、どうやって使うのかがわかりやすかった。
・Starlet, Starman, Twiggy等と比較してMonocerosがどうなのかあたりもまとまってて、何を選んだらいいか悩んでる人には参考になると思った。

あとは、
・システムコールを減らそう
・ボトルネック調査には、Devel::NYProfとか、straceを使ったらいいですよ

などなど、色々と為になる事が沢山出てきた。
色々忘れてるから、あとでslide shareで振り返ろう。
(もっといいこと沢山言ってるのにそれだけしか書けないのかと椅子が飛んでくるかもしれない。。)

Perl and Riak – 分散データストア Riak を Perl から “爆速” で使うために -

FreakOutのmyfinderさんによるRiakをperlで使う方法のお話。
・[Tokyo|Kyoto][Tyrant|Tycoon]をPerlかつCache::Memcached::Fastから利用しているがスケーラビリティが課題。
・色々と試したけどdicornだとmemcached protocolでRiakとやり取りできるのでCache::Memcached::Fastがそのまま使える
ちょっと端折りすぎたけど、そんな感じなのかな

スポンサー企業ランチセッション A,B

で、お待ちかねのランチタイムです。
今回は、スポンサー企業によるランチセッションが行われ、それに参加すると、
1,200円相当のお弁当がもらえるというではありませんか。ばっちり参加ですね。
お肉メインで、以下の感じ。
YAPC::Asia 2013 Day1 ランチセッション

ランチセッションは、MTで有名なSixApartさんとMicrosoftさんでした。
SixApartさんのセッションでは同僚(一応名前は伏せておこう)が、
仕様変更により、exportデータに変更がありますかって聞いてて
仕事に直結する内容聞いてたので、さすがだなと思った。

Windows Azureは、twitterでも書いたけど、AWSでも同じだけど
公式でPerlだけ対象外にされてるあたりが、かなり悲しい感じだし、
Perlの祭典でLLでperlだけ?ってくらいの除外状態でのセッションは
かなり強いハートが求められる仕事だなって思った。

その後も何個か見たけど、Day1だけで終わりそうだから、この辺にしとく。

Day2 : 2013-09-21


はてなのイマドキの開発フロー

今のはてなブログの開発フローについてのセッション。
・GitHub Enterpriseを利用して、Pull RequestとIssueで進めていく
・属人化を防ぐために、おみくじで担当きめてる。
・ランチ後はレビュータイムを設けている。
・テスト(casperJS)、CI(jenkins)
・リリースタイミングを計画リリース(外部案件等の固定日)、定期リリース(毎週水曜日)とする事でリズムができる。
mysqldiffで本番、開発環境等のスキーマ差分をチェックする
mysqldiffみたいのはやろうと思った事あったけど、やってなかったから、必要そうならこれ使うのはありそう。

スポンサー企業ランチセッションC,D

二日目は、魚を中心としたお弁当でした。こちらも美味しかったです。
YAPC::Asia Day2お弁当

で、今回は、LINEさんと2回目の登場のSix Apartさんでした。
LINEさんは、福利厚生のマッサージが戻ってくるらしいとtweetしたら、数人釣れた。
LINE株式会社では、一緒に働いてくれる方を募集しております! よろしければ、こちらまで。
知り合いの方は、私まで連絡頂いてもいいですよ! コネ入社できる権力は持ち合わせておりませんが!

YAPC::Asia Tokyo 2013 特別座談会 「Rubyの良いところ語ってください 〜そんなPerlで大丈夫か?〜

RubyとPerlの戦いかと思ったら、全然大人な感じで、進んでいて、とりあえずtDiaryのパワーを感じた

関連する組織とは関係ない個人的見解としては、
結局、どちらの言語がっていう話をしたところで、ある一定レベルを超えたエンジニアであれば、
言語問わず使える人多そうだし、単純に用途に適したものであったり、使い慣れてるものを使うベースで、
他の言語からいいところを取り入れる事をかねて、たまに使ってない言語も使うっていう感じなのかなと思った

本当にあったレガシーな話

・livedoorBlogをmod_perlからpsgiに変更した際のお話
・psgi,cpanfile,cartonとどんどん近代化
・mount()は多用すると遅くなります。多用してはいけません!というお話
・svc -h でLAが大幅にあがったので、0.5秒おきに1プロセス毎あげさげされるようにして回避
他にも色々 livedoorBlogが近代化していくにあたって苦労、工夫、変更した内容が盛りだくさん
物理的(席)にも、担当サービス的にも近い場所で見てきた事だけど、あそこまで急速な近代化できるとか@lestrratさん凄い

フルテストも50msで終わらせたい 〜 FreakOutの取り組み 〜

かなり端折ってメモしとくと、
・テストの実行順番は、シャッフルするようにしましょう。順番に依存したテストがあると本当のテストにならない。
・テストを分散実行させる。
1日目の話も含めると今回のmyfinderさんの内容は、「スケール」にスポットがあたってる感じがした

Keynote

ikebeさんが話されていた内容で
1個思い当たる事があったので、記憶が少し違うかもしれないけど、メモ。

「perlが使えないとしても、他の何かの言語を使ってる人だったら、perlも使えるようになると思うので、
 その事で、採用面接をしないということはありません。」

というようなお話をされていたと思うのですが、まさに自分がそうだなと思って聞いてました
そもそも入社時は、perlは、ほんの少しだけ数行のコード書くだけだったくらいでしたが、
結果、採用してもらえました。かといって、今perl書けます!とは言いがたい実力で恐縮ですが。。

ということで、LINE株式会社では、一緒に働いてくれる方を募集しております!
知り合いの方は、私まで連絡頂いてもいいですよ! コネ入社できる権力は持ち合わせておりませんが!

クロージング

なんといっても、YAPC::Asiaを企画・運営されていた @lestrratさん @941さんの卒業ですね。
本当におつかれさまでした。

若い人に託すというメッセージ、世代交代の波から察するに、
@lestrratさんも@941さんもお子さんが生まれたというところで、
たぶんお二人のお子さんが来年から企画・運営するという流れかもしれませんね!
乞うご期待ってやつですね たぶん

あとがき

とりあえずいえるのは、かなり端折って書いたつもりだし、見たけど書いてないセッションもあるわけだけど
久しぶりのブログ投稿なのに、凄く長い文章になってしまった。

そして、かなり同僚にスポットを当てすぎた構成になってしまった気がする。

といっても、たぶん 最初から最後まで読む人は、いても1人とか2人とかだろう。むしろ誰もいないかもしれない。
もっというと、閲覧数0かもしれないから、気にしないでおこう。
単純な自己満足なメモということにしておこう。

tig blameを今更知った。。

0
Filed under git
Tagged as , ,

今日もメモ。

git blameもtigも かなり前から使ってるわけですが、
tigにオプションがあるのを知らなかった

ちゃんとドキュメントみてから使えよって話ですね。すいません。

ドキュメント:tig(1) Manual Page

具体的には、5パターン使えるようですね。

1. オプションなし

tig

  まあ、これは普通のgit logを使い安くした感じ。

2. showオプション

tig show Hogemoge.pm

  git showを見やすくした感じ

3. blameオプション

tig blame Hogemoge.pm

  git blameを見やすくした感じ

4. statusオプション

tig status

  git statusからgit diffがそのままいける感じで使いやすい感じ

5. gitコマンドの結果を取り込ませる

tig < [git command output]

  どういう時に使いたいというイメージがわかない。。。

という感じでtig statusとか tig blameは使いやすそうという個人的なイメージ。

mysql5.1のrename databaseが動かない

1
Filed under MySQL
Tagged as

久しぶりに更新したと思ったら、そんな事かよと思われそうだけど、
一応メモ。

mysql5.1.7からdatabaseを手軽にrenameできる
RENAME DATABASE from_database_name TO to_database_name;
みたいのが使えるようになってるはずだったんだけど、
手元のmysql5.1.46で使えないなーっておもってたら、mysql5.1.23で以降で使えないという記事を見つけました。

その後、@morygonzalezさんに脆弱性か何かで消えたらしいという情報を頂いて、
英語のdocsみてみたら、ちゃんと書いてあった。

英語のdocs
http://dev.mysql.com/doc/refman/5.1/ja/rename-database.html

抜粋すると、

This statement was added in MySQL 5.1.7 but was found to be dangerous and was removed in MySQL 5.1.23.
要するに、5.1.7で追加してみたけど、危険なのが見つかったから、5.1.23で外したよってこと見たいですね

use of this statement could result in loss of database contents, which is why it was removed.
要するに、rename databaseを利用すると、データベースの内容が消える場合があるから、消しましたって事みたいですね

さらっと、怖い事書いてあるわけですね
とりあえず、rename databaseは使わないぞ!
バックアップに甘えはいけないぞ!
という強い気持ちをメモとして残す。(すぐ忘れそう。。)

使えると思ったのは、日本語版のサイト側にまだ和訳されたremovedの文章が追加されてないからだけど、
まあ、ちゃんと英語のみましょうねっていう事です。

日本語のdocs
http://dev.mysql.com/doc/refman/5.1/en/rename-database.html

さあ、たいした事じゃないけど、メモしたので、今日はこの辺で。

Parallel::Preforkで「cannot start another process while you are in child process」

1
Filed under perl
Tagged as , ,

今日は、perlのParallel::Prefork(Parallel/Prefork.pm)で出たエラーについてメモ。
結論からいうと、今回のパターンは、Parallel::Preforkのバージョンと組み方の問題でした。
(※あくまでエラーメッセージの条件説明じゃなく、こんなパターンで出る場合があるよという感じで見てください)

では、簡単なテストスクリプトを書いてみます。

#!/usr/local/bin/env perl
use strict;
use warnings;
use FindBin;
use lib "$FindBin::Bin/Parallel-Prefork-0.08/lib/";
use Parallel::Prefork;

my $pm = Parallel::Prefork->new({
        max_workers => 2,
        trap_signals => {
            TERM => 'TERM',
        },
    });

while ($pm->signal_received ne 'TERM') {
    $pm->start(sub {
        sleep(3);
        warn "end:" . time();
    });
}
$pm->wait_all_children();

これを実行すると、

cannot start another process while you are in child process at ...../Parallel/Prefork.pm line 42.

みたいなエラーが表示されます。

これは、手元にあった0.10未満のバージョンのParallel::Preforkを利用して、
0.10から実装された「- support new style: $pm->start(sub { … })」の形で
コードを実装してしまっている為です。

【0.10未満のParallel::Prefork】
$pm->start(sub{})に対応していないので、上記のコードだと、
何も処理されずにstartだけしてwhile分がまわります。
ここで問題なのは、Parallel::Prefoxkを正常終了するには、$pm->finishしないといけないという事。
この場合、$pm->start(sub{});で渡した内容が宙に浮きます。そして、finishが走る要素がなくなります。

sub start { 
    my $self = shift;
    :
    :
    die 'cannot start another process while you are in child process'
        if $self->{in_child};
    :
}

0.10以上のParallel::Preforkを利用している場合には、上記の$pm->start(sub{})の中が
Parallel::Prefork側の$cbに入り、$cb->();実行後に、$self->finish();されているので、問題ない。

sub start {
    my ($self, $cb) = @_;
    :
    :
       if ($cb) {
           $cb->();
           $self->finish();
       }
    :
}

ということで、コードをそのままに、libの読み込み先を

use lib "$FindBin::Bin/Parallel-Prefork-0.08/lib/";
                        ↓
use lib "$FindBin::Bin/Parallel-Prefork-0.13/lib/";

に変更したら、正常に動作しました。
まあ、通常はcpanmとかでParallel::Preforkを更新すればいいだけですね。
現時点の最新が、0.13なので、それにしてますが、多分Changesから見ると0.10以降なら何でも動くはず。

【もしも0.08のままいきたいなら】
コードを以下のように$pm->startの引数で渡すのを止めて、
かつ、$pm->finish;を明示的にするように修正すればいいだけですね

#!/usr/local/bin/env perl
use strict;
use warnings;
use FindBin;
use lib "$FindBin::Bin/Parallel-Prefork-0.08/lib/";
use Parallel::Prefork;

my $pm = Parallel::Prefork->new({
        max_workers => 2,
        trap_signals => {
            TERM => 'TERM',
        },
    });

while ($pm->signal_received ne 'TERM') {
    $pm->start;

    sleep(3);
    warn "end:" . time();

    $pm->finish;
}

まあ、そもそもが、Parallel::Preforkの0.10以上を利用していたシステムを
0.10未満のサーバに移植した(古いサーバに移設とかあまり無いですよね)とかしないと発生しないので、
この現象を調べる事になる人は、ほとんどいないと思いますけど。

[Memo]wordpressで「現在メンテナンス中のため、しばらくの間ご利用いただけません。」

1
Filed under php, wordpress
Tagged as , ,

久しぶりのブログ更新が、比較的どうでもいいネタで、
かつwordpressなんで、少し微妙ではありますが、メモ程度に。

wordpressの更新(いわゆるバージョンアップ)をしてみたら、
ブログページも、管理ページも以下のエラーが表示されて、何もできなくなったというお話です。

現在メンテナンス中のため、しばらくの間ご利用いただけません。

結論からいうと、処理中でなく、処理完了後もこのエラーがでているようなら、
SSHやFTPや、レンタルサーバならファイルマネージャみたいので、
サーバ上のwordpressを置いてあるディレクトリ(フォルダ)直下に
「.maintenance」ファイルができてると思うので、これを削除するか、
不安だったら、「.maintenance_org」など適当な名前にリネーム(変更)したら表示されます。


具体的な内容としては、まあ、既に巷に溢れてるんだろうと思いますが、
共有のレンタルサーバとかでwordpressを利用している場合に、FTPのポートが開いているので、
wordpressのバージョンアップを自ずとFTPで行う場面が多くなりそうですが、
バージョンアップ処理を開始して、実際に新しいバージョンのファイルをコピーする前に、
「wp-admin/includes/update-core.php」ファイルの「update_core関数」によって、
以下のようにメンテナンスにロックファイルが作成されます。(関係ないけど直前に古いロックファイルは消してるみたい)

$maintenance_string = ‘‘;
$maintenance_file = $to . ‘.maintenance’;
$wp_filesystem->delete($maintenance_file);
$wp_filesystem->put_contents($maintenance_file, $maintenance_string, FS_CHMOD_FILE);

で、ブログページ側の挙動を追っていくと、 (wordpressを置いているフォルダを起点に書きます)
1. 「index.php」で「wp-blog-header.php」をrequire。

require(‘./wp-blog-header.php’);

2. 「wp-blog-header.php」で「wp-load.php」をrequire。

require_once( dirname(__FILE__) . ‘/wp-load.php’ );

3. 「wp-load.php」で、「wp-config.php」が存在すればrequire。

if ( file_exists( ABSPATH . ‘wp-config.php’) ) {
/** The config file resides in ABSPATH */
require_once( ABSPATH . ‘wp-config.php’ );

4. 「wp-config.php」で、「wp-settings.php」をrequire。

require_once(ABSPATH . ‘wp-settings.php’);

5. 「wp-settings.php」で、「wp_maintenance関数」を呼び出し。

// Check if we’re in maintenance mode.
wp_maintenance();

6. 「wp-includes/load.php」の「wp_maintenance関数」が呼び出され、
「.maintenance」ファイルがあり、かつファイル内に記載されているepoch値(エポック値)から
600秒(10分)以内の場合には、「wp-content/maintenance.php」があれば、それを表示。
それがなければ、「 _e( ‘Briefly unavailable for scheduled maintenance. Check back in a minute.’ )」が
表示される。

function wp_maintenance() {
if ( !file_exists( ABSPATH . ‘.maintenance’ ) || defined( ‘WP_INSTALLING’ ) )
return;

global $upgrading;

include( ABSPATH . ‘.maintenance’ );
// If the $upgrading timestamp is older than 10 minutes, don’t die.
if ( ( time() – $upgrading ) >= 600 )
return;

if ( file_exists( WP_CONTENT_DIR . ‘/maintenance.php’ ) ) {
require_once( WP_CONTENT_DIR . ‘/maintenance.php’ );
die();
}
:

7. 日本語設定になっている場合には、「 _e( ‘Briefly unavailable for scheduled maintenance. Check back in a minute.’ )」が
「wp-content/languages/ja.po」に基づいて「現在メンテナンス中のため、しばらくの間ご利用いただけません。」が表示される。

#: wp-includes/load.php:178
msgid “Briefly unavailable for scheduled maintenance. Check back in a minute.”
msgstr “現在メンテナンス中のため、しばらくの間ご利用いただけません。”

そして、管理者ページ側もほとんど同じですが、
「wp-admin/index.php」で

require_once(‘./admin.php’);

「wp-admin/admin.php」

require_once(dirname(dirname(__FILE__)) . ‘/wp-load.php’);

されているので、結果、ブログページの3番以降と同じフローにのります。

あとは、メンテナンスページとして自分の作成した内容を表示したい場合には、
「wp-content/maintenance.php」という名前のファイルを作って、表示させればいいです。

サンプルテキストを置くとしたら、

echo “メンテナンス中です。ご迷惑をお掛けしてすいません” > ./wp-content/maintenance.php

簡単にメンテナンスのテストするなら、コマンドラインから以下をたたいて今のepoch値でロックファイルを作ります。
(※当たり前ですが、wordpressはメンテ中になりますので、ご注意ください)

php -r “echo sprintf(‘‘, time());” > .maintenance

ということで、エラーがでたので、久しぶりにphpのコードを読んで、中身を追って、
どこにでもありそうな処理フローの解説をするという誰得っぽい記事を書いてみました。久しぶりの更新なのに。。

libgdで背景が透過な画像をつくる

0
Filed under C
Tagged as , ,

久しぶりすぎるブログの更新になってしまいました。。

さっそくですが、今はもう本家サイトが落ちている libgd について触る機会があったので、
備忘録として残しておきます。

C言語で画像を生成、結合するときに利用するlibgdですが、背景を透過にしたい場合のお話。

【普通のパターン】

gdImagePtr im;

im = gdImageCreate();
 :
//実際の生成とか結合

というようになりますが、このままだと、
一番最初に現れた色がイメージの背景色になってしまいます。

たとえば、画像をcopyして生成とかした場合に、それが透過画像で黒いborderがついてたりすると
透過部分は色がないので、スルーして、一番最初にくる黒を背景として、全体に利用されます。

そこで背景色を透過にするにはどうするのか。
以下のようにしたらできました。

【変更した後】

gdImagePtr im;
int bgColor;

im = gdImageCreate();
bgColor = gdImageColorAllocate(im, 0, 0, 0); 
 //↑使わないので色指定は何でもいい(ちなみに0,0,0は黒)

gdImageColorTransparent(im, bgColor); 
 //↑bgColorを透過で更新
 :
//実際の生成とか結合

というように一旦一番最初に適用される色を定義して、
その後で、そのcolorを透過に塗り替えるということですね。

まあ、ありふれた内容ですね。

とりあえず、サクっとできてよかった。

2011まとめ感想文 〜退職、そしてライブドアへ〜

0
Filed under 未分類

#!/usr/bin/env perl

use strict;
use warnings;

print ”

みなさんこんにちわ hattaraです。↑のようにperlをメインで使い始めました。

2011年がもう今日で終わりです。今年は特に長いようで短いような一年でした。
今年はあまりアウトプットができてないなというところではありますが、
書こう書こうとおもって書けてなかったものをザバっと書いてみたいと思います。

※技術者なのに技術的な内容がほとんどないです・・・
 来年は絶対技術的な内容で振り返りたい!

先にいっておきますが、長いです。本当に。感想文みたいなもんです。

—-
1月〜4月
  「下準備フェーズ」
  自分がメインで担当(と書かれていた)サービスの終了に伴い、
  移行先のサービスの機能拡張に没頭する日々
  ただただコードを書いてたけど、特筆すべき内容が特にない気がする。。

  個人的には2009年の終わりから進めていた個人サービス、個人サイトの移転作業で、
  自宅サーバーからSakuraのVPSへの移設をしてました。
  Apache2系から勉強のためにnginxにのせかえてる様子がブログからわかります

  nginxでZend Framework(rewrite)を利用する

  とはいいつつ、ほとんどプライベート作業はできてないですね
  しかも作業が中途半端でnginxの良さを殺してます!

5月〜6月
  「祝!プライベートフェーズ」
  おもいっきりプライベートですが、第二子が誕生しました!!
  これに伴い、変動勤務などを認めてもらい、長男の面倒をみながら仕事ができました。
  (上司の計らいで勤務時間をずらしてもらえました。本当に感謝しています。)
  (部署によるかもしれないけどpaperboy&co.は柔軟に対応してくれます。最高です)

7月〜8月
  「気合い!仕事仕事仕事フェーズ」
  ひたすら担当サービスを別のレンタルサーバサービスへ移行していきました。
  個人的には満足できる出来ではなかったのが悔やまれますし、
  利用してくれていたお客様に色々とご迷惑をお掛けして、こちらも悔やまれます。
  ご迷惑をお掛けしたユーザーの皆さん 本当にご迷惑をおかけしました。

  そして、何よりも連勤や徹夜を一緒にがんばってくれた
  プログラマ、インフラエンジニアの仲間に申し訳ないという気持ちとともに、
  感謝の気持ちを伝えたいです。ありがとうございました。
  この時のことは、一生忘れないと思います。

9月
  「決断!退職フェーズ」
  2004年7月から7年勤務してきた株式会社paperboy&co.を退職しようと決断しました。

  福岡支社にいたので、東京も一緒かどうかはわかりませんが、
  まずpaperboy&co.は、人間的に「いい人」ばかりです。
  そして、毎日笑いが絶えないし、イベントも多く楽しい日々を過ごせました。
  新しく入った人も、比較的早く打ち解ける事ができるというのも
  ポイントかなと思います。

  じゃあ、なんでやめる必要があるのかという話だけど
  理由は沢山ありすぎて説明しきれないのですが、
  一部で言われていたような特定の人物との不和ではありません!

  まずは個人的な理由だけど、関東に戻りたかったんですよね
  祖父の容態が悪いのもあり、比較的早急に戻りたかった。

  仕事面でいえば、会社側の変化と自分が思い描く方向性がズレていってるという事を
  少なからず感じていて、移設の忙しい作業と平行して、大きな分岐点が何個も訪れ、
  今後自分がどうしていくべきかを考える機会が増えました。

  また、長い間同じサービスに関わっていた事もあり、全体像を把握していて、
  調整能力だけで案件がまわり、自分に甘えが生まれている事も
  このままでは、自分自身が駄目になっていくような気もしていました。

  この辺が理由の一部です。他にもあるけど長くなるので割愛。

  7年前に少ししかサーバのことを知らなかった自分が、
  インフラエンジニア、プログラマを経験させて頂いて
  自分自身大きく育つ事ができました(体のことではありません!)

  上司、同僚、そして既に他社に旅立っていった人々にも、本当に感謝しています。
  これからも、別の会社ですが仲良くしてやって下さい。どうぞよろしくお願いします。  

10月〜11月
  「転職活動フェーズ!」
  転職というイベントが、そうそう訪れるものではないということもあって、
  沢山の人とお会いして、自分が成長していけるところを選びたいという事で、
  10社以上の会社の方にお話をお聞きしました。

  前回の転職では、リクナビと毎ナビを利用していたのですが、
  今回は、IT系企業が多数登録されているFind Job!と、
  気になっていた会社のコーポレートページでの直接応募で探す事にしました。

  色々な会社にいって、twitterでフォローして勉強させてもらっていた著名人の人や
  自社のことを熱く語ってくれる人、今後の業界の動向についてや
  自分に足りてないところを指摘して頂いたりと、とても貴重な体験をさせて頂きました。
  技術的な質問に全然答えられずに場違い感満載でご迷惑をお掛けしたりもしました。

  お忙しい中、お時間を割いてくださった方、私に期待して良いお話を頂いた会社の方
  本当にありがとうございました。
  この業界、広いようで狭いのでちょくちょくお会いするかもしれませんが、
  どうぞよろしくお願いします。

  そして、paperboy&co.の前社長の家入さんにも気にかけて頂いて、凄く心強かったです。
  これからもよろしくお願いします。

  
  この転職活動が一段落し、福岡から関東への引越準備中に、
  転職理由の一つであった祖父が他界しました。
  凄くお世話になってたのに、何も恩返しできなかった悔いが残ってる

12月
  「入社フェーズ」
  そして、このブログを見てる人なら大半の人が知ってるだろうけど、
  転職先は「株式会社ライブドア」に決め、お世話になる事にしました。

  決め手としては、技術力を高めたいという一言につきます。
  今回の転職活動で自分の非力さを痛感し、これから挽回しないといけないと思いました。
  結局のところ、どこの会社にいても、できる人はできる できない人はできないだけど、
  転職するなら、尊敬する凄い人たちがいるところで、コードを参考にさせてもらい、
  色々勉強できる環境に身を置きたいと考えたのが最終的な結論です

  この会社で、技術者として成長して、より多くのユーザーに喜んでもらえるサービスを
  提供していきたいと思ってます

  そして、イベントで登壇して発表できるくらいの技術力とネタとプレゼン力をつけたい。

  ## 凄い人 = 怖い人、冷たい人ってイメージがありましたが、
  ## ライブドアの人は、perlが書けずに入社した私にも凄く優しく接してくれます。
  ## 凄い人ばかりなのに、いい人ばかり。

  さあ、皆さんもライブドアで、自分の次のステージへのドアを開きましょう!!
  (ライブドアは、来年1月1日よりNHN Japanに統合されます!)

技術ブログのはずが、ただの感想ブログになってしまいましたが、
来年(もう明日ですが)は、もっと技術的なことをアウトプットしていきたいと思います。
来年もどうぞよろしくお願いします!
“;