圣诞节快乐

聖誕節到了,自己動手做了一張賀卡送給朋友,不過鑒於本人動手能力實在抱歉,所以還望大家輕拍……輕拍……

Christmas Card

上面是賀卡設計圖,樣式很簡單,就是傳統的賀卡形式,四個面(不妨分別喚作ABCD面)內容都挺簡單,不過我還是大致分開寫一下各個面都是些什麼吧。

首先是封面(也就是A面),封面當然是最重要的,但是又要避免落入俗套,所以還是玩了點兒小花樣,借用點陣字體的方式匯出4A 69 6E 67,同時為了看起來不那麼單調,四組分了兩排,兩排字體分別採用了一陰一陽的點陣(或許這裡還有一個考慮,因為要送的那個朋友是雙子座。:p)。至於這四組碼是什麼意思想必大家都猜到了,不過還是稍微提醒一下:ASCII。

然後是裡面打開之後的B面,這個沒有什麼特別的,就是一個QR Code,解開就行了,答案我就不公布了。

再下來是C面,C面……本來想寫些祝福語之類的,但是這顯然不是我的style嘛,所以……

#!/usr/bin/env perl
use strict;
use warnings;
use Encode 'encode_utf8';

my $s = ' ' . encode_utf8(pack 'U', 0x2605);
my $f = encode_utf8(pack 'U', 0xFF0F);
my $b = encode_utf8(pack 'U', 0xFF3C);
my $o = [ map { encode_utf8(pack 'U', $_) } (
    0x0069, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
    0x0020, 0x2E1B, 0x2042, 0x2E2E, 0x0026, 0x0040, 0xFF61,
) ];
my $oc = [ 21, 33, 34, 35, 36, 37 ];
my $l  = pack 'U', 0x005e;

sub tree {
    my ($H) = @_;

    print("\n");
    print(" " x $H);
    print("\033[33m" . $s . "\n");
    my $M = $H * 2 - 1;
    for my $L (1 .. $H) {
        my $O = $L * 2 - 2;
        my $S = ($M - $O) / 2 + 1;
        print(" " x $S);
        print("\033[32m" . $f);
        for (1 .. $O) {
            print("\033[" . $oc->[ int(rand @$oc) ] . "m" . $o->[ int(rand @$o) ]);
        }
        print("\033[32m" . $b . "\n");
    }
    print(" ");
    print("\033[32m" . $l) for 1 .. $H - 1;
    print("|  |");
    print("\033[32m" . $l) for 1 .. $H - 1;
    if ($H > 10) {
        print("\n ");
        print(" ") for 1 .. $H - 1;
        print("|  |");
        print(" ") for 1 .. $H - 1;
    }
    print("\n\n");
}

tree(20);

運行結果應該是類似於下圖的一棵由各種字符組成的聖誕樹。

最後是封底(也就是D面),為了貫徹極簡的人生哲學,就索性只寫上了一句:

[isaac@thu ~]$ echo "aHR0cDovL2lzLmdkL3lqbmdqeAo=" | base64 -d

唉我也不賣關子了,其實大致就是作者信息啦(not exactly),base64解開就得到答案了:http://is.gd/yjngjx (btw. thu是我們學校的縮寫)

好了,大致就是這樣,不過……其實……總之實踐起來比我想象的要難得多,本來打算是用有格子的紙的(因為比較適合畫點陣圖還有QR碼)不過因為一些原因最後用了純白的紙板,然後就是布局跟字體比例大小的問題,確實挺傷腦筋的。筆的話……因為沒有太多時間,就用了一隻2B鉛筆,要是有時間的話還打算用彩筆給代碼加亮呢哈哈。

最後再上一張圖,Merry Christmas to you all!