画像をリサイズしてサーバーにアップロードするプログラム

macosをcatalinaに上げたらperlで書いていた画像をリサイズしてサーバーにアップロードするプログラムが動かなくなって困ったのでpythonで書き直した。

それにしてもこれいつ書いたんだろう?

#!/usr/bin/env perl

use strict;
use warnings;
use DateTime::Format::Epoch::Unix;
use DateTime;
use Image::Imlib2;
use Net::OpenSSH;

my $tp = $ARGV[0] || "";

my @files = do{
  opendir my $dh, '.' or return;
  my @f = grep /\.(JPG|jpg|jpeg|PNG|png)$/, grep !/^\./, readdir($dh);
  closedir $dh;
  @f;
};

my $ssh = Net::OpenSSH->new('XXXXXXX');
$ssh->error and die "SSH connection failed: " . $ssh->error;

for my $infile (@files) {
  my $now =  DateTime::Format::Epoch::Unix->format_datetime(DateTime->now);
  my $outfile = "/Users/kzfm/images/blog/" . $now . ".jpg";
  my $image = Image::Imlib2->load($infile);
  unless ($infile =~  /^DSCN/ ) {
      unless ($tp) {
          if ($image->width > $image->height) { $image->image_orientate(1); }}}
  my $image2 = $image->create_scaled_image(320,0);
  $image2->set_quality(95);
  $image2->save($outfile);
  $ssh->scp_put($outfile, "/usr/local/html/images/blog/" . $now . ".jpg")
    or die "scp failed: " . $ssh->error;
  printf "![%s](http://www.kzfmix.com/images/blog/%s.jpg)\n",$now,$now;
  sleep(1);
}

これをpythonで書き直した。

#!/usr/bin/env python

from PIL import Image
import time
from datetime import datetime
from glob import glob
import paramiko
import scp
import os

width = 400
img_dir = "/Users/kzfm/images/blog"
remote_dir = "/usr/local/html/images/blog/"

def get_epoc_name():
    return str(int(time.mktime(datetime.now().timetuple())))

def save_resize_image(filename):
    en = get_epoc_name()
    resize_file_name = "{}.jpg".format(en)
    f = os.path.join(img_dir, resize_file_name)
    img = Image.open(filename)
    height = round(img.height * width / img.width)
    img = img.resize((width, height), Image.LANCZOS)
    img = img.rotate(-90, expand=True)
    img.save(f)
    return (f, en)

if __name__ == "__main__":
    with paramiko.SSHClient() as sshc:
        sshc.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        sshc.connect(hostname='0.0.0.0', port=0000, username='XXX')
        with scp.SCPClient(sshc.get_transport()) as scpc:
            for f in glob("*.jpeg"):
                fname, en = save_resize_image(f)
                scpc.put(fname, remote_dir)
                print("![{0}](http://www.kzfmix.com/images/blog/{0}.jpg)".format(en))
                time.sleep(1)

YAPC ASIA 2011に行ってきた

スピーカー、スタッフの皆様お疲れ様でした。今年は一日目しか参加できなくて懇親会も出られずに帰ってしまったけど大変充実した一日をおくることができました。

聴いたセッション

個人的にはフェライト会議室のパスワード保護からperl meets beatsまでの一連のセッションが面白かった。

Rubyist のための Perl ウェブアプリケーション開発入門

@kyannyさんの Rubyist のための Perl ウェブアプリケーション開発入門を聞きながら、dotcloudサインアップした。Node.jsで書いたwikiがあるので動かしてみようかと思った。あとperlで書くならMojolicious::Lite使おうかなぁと。今メインで使っているFlaskもSinatraクローンみたいなもんだし、最近使い始めたExpressもそうだしね。

Perl Mongerなりきりカードゲームの考案と実践

パルモン

use strict!出社!出社!出社!出社!

最高でした。

perl meets beats

楽しみにしてたトーク。@techno_nekoさんによる、wave作成の話。思ったよりガチだった。最近、node.js系のイベントとかみてると、こういう音作る系がちょこちょこ出てくるので、興味があったんですよね。

コードがGitHubにあがっているので後で読んでみる

ドラムンベースよいですねと、帰りの新幹線でdrum'n'bass arena眺めてたら、Dom & RolandのLPが出てたので即買い、今聴いてる。

その他

Cartonは便利そう。あれで職場のレガシーな環境をどうにか出来ればいいなぁと。他人事なんだけど、バージョン管理きちんとしないでメンテナがどんどん変わるあのインフラヤバイんちゃうかなぁと思っているので、ああいう管理ツールの助けがあればと。あと、ああいうのは構成管理ツールという認識でいいのだろうか?最近インフラの話を聞くことが多くて境目がどこなのかよく分からなくなっている(そもそも境目なんてないのか?)。

SmartPhone development guide with Node/CoffeeScript and HTML5 technologies, for Perl programmersを聴いてて、確かにCoffeeScript+Expressで簡単なのは割りとサクサク開発できるなぁと。特にperl(pythonも同じことだろう)である必要性を感じないという結論だったのかなぁと。

PhoneGapはHTML5 Canvasの後ろの方に載ってたので、読み進めていけばいずれぶつかる。TituniumはShizudevの誰かに聞いてみよう(っていうか誰かハンズオンやってくれないかなぁ)。

ProductName HTML5 Canvas: Native Interactivity and Animation for the Web
Steve Fulton
Oreilly & Associates Inc / 2922円 ( 2011-05-13 )


と、色々刺激になったYAPC::Asiaだった。

TってPerl派なのかな

Natureからの求人メールでおもろいもん見つけた。

募集職種と応募資格

分子設計、ケモインフォマティクス、バイオインフォマティクスに関する高度な専門知識・技術を有し、創薬研究に活用できる能力を有する方。プログラミング(Perl、JAVAなど)の経験があり

JAVAってのはありがちなんだけど、Perlまで入れてるのは現場の意向かな?

Perl Best Practices届いた

Perl Best Practices届いたので読む。

ProductName Perl Best Practices
Damian Conway
Oreilly & Associates Inc / 3034円 ( 2005-08 )


サイン本うらやましいっす。

YAPC行ってきたヨ

今日明日と仕事を放棄してYAPC行ってます。面子がね、やっぱヤバイし、実際中身も濃かったヨ。

YAPC2006

色々メモッたけど、をを!と思ったのが、mixiってLAMPなのねってことと、高橋メソッドのプレゼンって、目にくるねということと、ダミアンの話は凄く面白くて、特に印象に残ったのはモジュールはh2xsでなくModule::Starter つかって書き始めましょうと正規表現にはxmsつけましょうって話

あとで試してみよう。

Larry Wallのサイン入りラクダ本はあったけど、Damian Conwayサイン入りベストプラクティス本はなかった。

ProductName Perl Best Practices
Damian Conway
Oreilly & Associates Inc / 3034円 ( 2005-08 )


Amazonで早速購入した。

CatalystでMarkdown & flavour

面白そうなCatalystのプラグインを見つけたので後で試す。

Catalystでmarkdown記法で書かれたテキストをHTMLに変換するプラグイン。このblosxomではMarkdown使いまくりなのでCatalystで作った何かに、今までのエントリ移すときとか楽そう。あと、Kwiki::Markdownってのもある。普段PukiWiki使ってるんだけど記法が混在すると混乱するからKwikiに変更しようかな。WYSIWYGなエディタもあるので、便利そうだし、タグもつけられるし。

Catalystでblosxomのフレーバーなことができるプラグイン。htmlとかrssとかURLの最後の.xxxでテンプレートを切り替えられるのでCatalystでその手の機能が欲しい場合には。というか、そういう場面って結構あるはず。