たつをの ChangeLog : 2006-09-05

自分用メモ。
Perl で ASIN をぱっと見わからない文字列に可逆変換する方法を模索中。
モジュールなしで済ませたい。
(ref. [を] 日付文字列のencode/decode[2006-09-04-1])

↓今考えているやつ。未整理。
#!/usr/bin/perl
use strict;
use warnings;

my @CHARS = split(//, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
my %CHAR2NUM = map {$CHARS[$_] => $_} (0..$#CHARS);

my @AIUEO = split(//, "aiueoAIUEO_");
my %AIUEO2NUM = map {$AIUEO[$_] => $_} (0..$#AIUEO);

foreach my $asin ("4844322893", "B000EQHU6M", "0123450000") {
    my $e = aiueo_encode(asin_encode($asin));
    my $d = asin_decode(aiueo_decode($e));
    print "$asin =>(encode)=> $e =>(decode)=> $d\n";
}

sub asin_encode {
    my ($asin) = @_;
    my $sum = 0;
    foreach (reverse split(//, $asin)) {
        $sum *= @CHARS;
        $sum += $CHAR2NUM{$_};
    }
    return $sum;
}

sub asin_decode {
    my ($n) = @_;
    my $asin;
    for (1..10) {
        my $r = $n % @CHARS;
        $n = ($n - $r) / @CHARS;
        $asin .= $CHARS[$r];
    }
    return $asin;
}

sub aiueo_encode {
    my ($n) = @_;
    my $c;
    while ($n > 0) {
        my $r = $n % @AIUEO;
        $n = ($n - $r) / @AIUEO;
        $c .= $AIUEO[$r];
    }
    return $c;
}

sub aiueo_decode {
    my ($c) = @_;
    my $sum = 0;
    foreach (reverse split(//, $c)) {
        $sum *= @AIUEO;
        $sum += $AIUEO2NUM{$_};
    }
    return $sum
}

実行例:
% perl encode.pl
4844322893 =>(encode)=> uuoEIAuEI_aoIO =>(decode)=> 4844322893
B000EQHU6M =>(encode)=> oaUIAeAUeoOae_A =>(decode)=> B000EQHU6M
0123450000 =>(encode)=> ueAuOAOoi =>(decode)=> 0123450000

chalow で簡単に YouTube の動画を紹介できるプラグインです。
YouTube プラグイン自体は既出なのですが、今回のは自分用に表示サイズ
の指定もできるようにしてみたのがポイント。

参考:
- はてなダイアリー日記 - 日記で簡単に動画を紹介できる http記法の
  拡張について
  http://d.hatena.ne.jp/hatenadiary/20060904/1157363729
  これで生成されるコードをベースに。って、object と embed の width
  と height は常に一緒でよいのかな…。まあいいか。
- [戯] YouTube のビデオを埋め込む chalow プラグイン
  http://cl.pocari.org/2006-02-17-1.html

### YouTube
# usage: {{youtube('ID', 'size:1<2<3<4<5(default)<6<7<...')}}
# Ex. {{youtube("e9-L68H0AHU", 2)}}
sub youtube {
    my ($id, $size) = @_;
    $size = 5 if (not defined $size or $size < 1);
    my $url = "http://www.youtube.com/v/$id";
    my ($w, $h) = (85 * $size, 70 * $size);
    return qq(<object width="$w" height="$h">).
    qq(<param name="movie" value="$url"></param>).
    qq(<embed src="$url" type="application/x-shockwave-flash" ).
    qq(width="$w" height="$h"></embed></object>\n);
}

設置例:


{{youtube("Xv_ftbVzU1o", "", 1)}}


{{youtube("We8e3YrnDzg", "", 3)}}


{{youtube("e9-L68H0AHU")}} (size=5)
この記事に言及しているこのブログ内の記事

今週もプール(前回は[2006-08-29-2])。
今日は Kambara 君は居なくて、taku-ku だけ。
終了後はイエローカンパニーでスープカレー。
最近イエカン率高いな。来週は趣向を変えて、ラーメンかな。

- 代官山スポーツプラザ/渋谷区
  http://www.city.shibuya.tokyo.jp/est/sports/sp8_daikanyama.html
この記事に言及しているこのブログ内の記事

たつをの ChangeLog
Powered by chalow