08/09/05 17:52:57
クラスは代入も関数も引数も参照渡しをする
2: ◆LKDzGov2.g
08/09/05 17:58:22
Python特有の癖
・代入を行うと名前がいつも最も内側のスコープに入る。
・代入はデータのコピーをしない。
⇒単に名前をオブジェクトに結びつける(bind)だけ。
3:デフォルトの名無しさん
08/09/05 18:05:42
__ __ n _____ _____ ___ ___ ___
| | / / / / / | /__ __/ [][] _| |_| |__ _| |_
| |. / / /⌒ヽ/ / / ̄ ̄|. l / / | _ | |_ レ'~ ̄|
| | / / ( ^ω^ ) / /. / / | |___  ̄| | / / / /| |
| | / / ノ/ / ノ /  ̄ ̄ / \__| | |  ̄ /_ / | |_
| |. / / // / ノ / / ̄ ̄ ̄ |_| |__| \/
| |/ / ⊂( し'./ / /
|. / | ノ' / /
| /. し' ./ /
 ̄ ̄ ̄  ̄ ̄
4: ◆LKDzGov2.g
08/09/05 18:06:11
関数のローカルな名前空間は、関数が呼び出されたときに作成され、
関数から戻ったときや、関数内で例外が送出され、かつ関数内で処理され なかった場合に削除されます。
5: ◆LKDzGov2.g
08/09/05 18:18:28
スコープはある名前空間が直接アクセスできる、Python プログラムのテキスト上の領域。
⇒``直接アクセス可能'' とは、限定なしである名前を参照 した際に、その名前空間から名前を見つけようと試みること。
実行中はいつでも、直接名前空間にアクセス可能な、少なくとも三つの 入れ子になったスコープがある。
最初に検索される最も内側のスコープには、ローカルな名前が入っている。
あるいは、最も内側のスコープを囲んでいる関数群のスコープで、最も 近傍のスコープから検索を始める。
中間のスコープが次に検索され、 このスコープには現在のモジュールのグローバルな名前が入っている。
(最後に検索される) 最も外側のスコープは、組み込みの名前が入った 名前空間。
6:デフォルトの名無しさん
08/09/05 19:59:21
URLリンク(info.2ch.net)
> 固定ハンドルが題名に入っている・固定ハンドルが占用している・
> 閉鎖的な使用法を目的としている・等は、
> 自己紹介板・最悪板・夢・独り言板・おいらロビー・なんでもあり板以外では、
> 原則として全て削除または移動対象にします。
7:デフォルトの名無しさん
08/09/05 20:15:50
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
8:デフォルトの名無しさん
08/09/06 16:23:32
クラスの中で定義された変数が「クラス変数」
クラスの中の__init()__メソッドや他のメソッドの中で定義されたのが「インスタンス変数」
「クラス変数」も「インスタンス変数」も
self.nameでアクセスすることができる
。
self.nameでアクセスする場合、「インスタンス変数」は同名の「クラス変数」を隠蔽する。
変更不能な値をもつクラス変数は、インスタンス変数のデフォルト値と して使える。
9:デフォルトの名無しさん
08/09/06 18:36:40
>>8
違うわヴォケー
10:デフォルトの名無しさん
08/09/06 18:45:26
>>9
どのあたり?
11:デフォルトの名無しさん
08/09/06 19:34:21
あ、Python なら合ってるかも…自信無いなった
12:デフォルトの名無しさん
08/09/06 20:44:58
>>> range(3, 6) # 個別の引数を使った通常の呼び出し
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args) # リストからアンパックされた引数での呼び出し
[3, 4, 5]
ちょっと便利だと思った
13:デフォルトの名無しさん
08/09/06 21:12:59
スクリプト言語なら当たり前
14:デフォルトの名無しさん
08/09/06 22:00:40
うるせえ俺の日記だだまれ屑
15:デフォルトの名無しさん
08/09/06 22:20:22
↑帰れ偽者
16:デフォルトの名無しさん
08/09/06 22:40:11
↑お前も偽物
17:デフォルトの名無しさん
08/09/06 22:48:21
↑お前も偽物
18:デフォルトの名無しさん
08/09/06 22:52:27
------[再会]------
19:デフォルトの名無しさん
08/09/07 00:21:00
------[第一部完]------
20:デフォルトの名無しさん
08/09/07 00:25:23
オレはようやく登りはじめたばかりだからな。
このはてしなく遠いPython坂をよ…
21:デフォルトの名無しさん
08/09/07 00:27:24
>>1先生の次回作にご期待下さい。
22:デフォルトの名無しさん
08/09/07 04:24:30
>self.nameでアクセスする場合、「インスタンス変数」は同名の「クラス変数」を隠蔽する。
この機能知らなかったけど、
こんな機能使ってるようなコードって読みづらくないか?
インスタンス変数とクラス変数は全部違う名前にするべきでは?
23:デフォルトの名無しさん
08/09/07 09:54:33
文句があるなら出て行け
24:デフォルトの名無しさん
08/09/07 09:56:48
>>23
>>22は文句というより問いかけだろう
25:デフォルトの名無しさん
08/09/07 21:55:56
>>> float(7.3)
7.2999999999999998
気をつける
26:デフォルトの名無しさん
08/09/07 22:39:32
>>> 0.1
0.10000000000000001
>>> 0.1.__str__()
'0.1'
>>> import decimal
>>> decimal.Decimal('0.1')
Decimal("0.1")
27:デフォルトの名無しさん
08/09/07 23:19:52
decimal使う奴は童貞
28:デフォルトの名無しさん
08/09/08 00:34:10
decimal使わない奴はヤリチン
29:デフォルトの名無しさん
08/09/08 01:32:37
a
30:デフォルトの名無しさん
08/09/08 12:10:25
オブジェクトはアイデンティティ値 (identity) 、型 (type) 、そして値 (value) を持つ。
オブジェクトが一度生成されると、そのオブジェクトの アイデンティティ値 は決して変化することがない。
アイデンティ ティ値をオブジェクトのメモリ上のアドレスと考えてもかまわない。
演算子 `is' は、二つのオブジェクト間のアイデンティティ値を比 較する。
関数 id() は、オブジェクトのアイデ ンティティ値を表す整数 (現在の実装ではオブジェクトのメモリ上のアドレス) を返す。
外部リソースを明示的に解放する 方法は大抵 close() メソッドを使う。
この場合`try...finally' 文を使うと 便利。
他のオブジェクトに対する参照をもつオブジェクトもあり、コンテナと呼ぶ。
コンテナオブジェクトの例 として、タプル、リスト、および辞書がある。
"a = 1; b = 1" とすると、 a と b は値 1 を持つ 同じオブジェクトを参照するときもあるし、そうでないときもある。
"c = []; d = []" とすると、 c と d はそれぞれ 二つの異なった、互いに一意な、新たに作成された空のリストを参照する ことが保証されている。
"c = d = []" とすると、 c と d の両方に同じ オブジェクトを代入する。
31:デフォルトの名無しさん
08/09/08 13:04:20
class X:
は旧式のクラスになり、
class X(object):
は新しい形式のクラスになる。
クラス定義から普通に (定義の終端に到達して) 抜けると、 クラスオブジェクト (class object) が生成される。
32:デフォルトの名無しさん
08/09/08 13:22:38
ok
33:デフォルトの名無しさん
08/09/08 15:24:44
__dict__
オブジェクトの (書き込み可能な) 属性を保存するために使われる辞書または 他のマップ型オブジェクト。
module.__dict__
はモジュールのシンボルテーブルを含む辞書。
この辞書を修正すると、実際にはモジュールのシンボルテーブルを変更するが、
__dict__ 属性を直接代入することはできない。
m.__dict__['a'] = 1
と書いて m.a を 1 に定義することはでるが、m.__dict__ = {} と 書くことはできない。
34:デフォルトの名無しさん
08/09/08 16:52:28
#--mdl.py--
class X(object):
pass
import sys
sys.modules[__name__] = X()
のようにモジュールファイル「mdl.py」下部に下2行を追加すると、
import mdl
したときに、クラスXのインスタンスがモジュールのようにロードされる。
インポート元で
import sys
sys.modules["mdl"]
の値を比較するとわかる。
35:デフォルトの名無しさん
08/09/08 18:22:02
>>34
あんまそういうuglyなことすんな
それと削除依頼出してこい
36:デフォルトの名無しさん
08/09/08 19:36:02
>>35
仕様書どおりにしかプログラム書けない底辺野郎はROMってろ
37:デフォルトの名無しさん
08/09/08 21:59:07
仕様書通りに書けるなら立派な底辺じゃないか
38:デフォルトの名無しさん
08/09/08 22:11:21
------[第二部完]------
39:デフォルトの名無しさん
08/09/08 23:27:58
------[再会]------
40:デフォルトの名無しさん
08/09/09 00:10:14
------[第三部完]------
41:デフォルトの名無しさん
08/09/09 11:02:07
>>34
これは使える
42:デフォルトの名無しさん
08/09/09 12:54:52
オブジェクトはクラスをテンプレートとして生成される。
クラスのテンプレートはメタクラス。
type(obj) はオブジェクトobj の型/クラスを返す。
新しいtype クラスは、関数new.classobj が提供してきたのと同様のクラス・ファクトリーの役割を果たす。
>>> X = type('X',(),{'foo':lambda self:'foo'})
>>> X, X().foo()
(<class '__main__.X'>, 'foo')
Xはクラスオブジェクト
43:デフォルトの名無しさん
08/09/09 20:14:44
------[第四章 モンバーバラの姉妹]------
44:デフォルトの名無しさん
08/09/09 22:32:44
ラムダについて
式 lambda arguments: expression は関数オブジェクトになる。
そして
def name(arguments):
return expression
と同じ動作をする。
45:デフォルトの名無しさん
08/09/09 23:39:29
------[第四部 モルモンの侵攻とタプルたん]------
46:デフォルトの名無しさん
08/09/10 00:26:37
class文を実行するとメタクラスが必ず関わる。
メタクラスは
旧式クラスはtypes.ClassType
新式クラスはtype
自分でtypeをサブクラス化してカスタムメタクラスを作る事も可能。
クラス定義が読み込まれる際、__metaclass__ が定義されていれば、
type() の代わりに __metaclass__ が指している 呼び出し可能オブジェクトが呼び出される。
__metaclass__
この変数は name、bases、および dict を引数として 取るような任意の呼び出し可能オブジェクトにできる。
【メタクラスの決定順】
dict['__metaclass__'] があればそれを使います。
それ以外の場合で、最低でも一つ基底クラスを持っているなら、 基底クラスのメタクラス (__class__ 属性を探し、なければ 基底クラスの型) を使います。
それ以外の場合で、__metaclass__ という名前のグローバル変数 があれば、それをつかいます。
それ以外の場合には、旧形式のメタクラス (types.ClassType) を使います。
47:デフォルトの名無しさん
08/09/10 00:33:39
typeはクラス
>>> import inspect
>>> inspect.isclass(type)
True
48:デフォルトの名無しさん
08/09/10 01:43:33
Python Code Readingで
今週金曜日のお題になってたところだな
49:デフォルトの名無しさん
08/09/10 09:19:56
>>48
はあ?俺のオリジナルだカス
消えろ
50:デフォルトの名無しさん
08/09/10 09:33:21
>>48
>Python Code Reading
URLリンク(coreblog.org)
こんな楽しそうなイベントがあったとは。。
けど開催日が金曜の午後7時って一般的にみんなキツイだろww
せめて他の平日にしてほしい。あと金払うから過去の内容も公開して欲しいな。
51:デフォルトの名無しさん
08/09/10 09:52:34
ちょwwwwww主催者に要望メール送ろうと思ったらブログのコメント欄だったwwworz
52:デフォルトの名無しさん
08/09/10 10:02:56
まるちゃん乙!
53:デフォルトの名無しさん
08/09/10 12:57:02
#新らしい形式クラス
class X(object):
pass
class Y():
__metaclass__ = type
Z = type("Z",(),{})
#古い形式クラス
class H():
pass
print type(X) #<type 'type'>
print type(Y) #<type 'type'>
print type(Z) #<type 'type'>
print type(H) #<type 'classobj'>
>>46のメタクラス決定順の通り、クラスオブジェクトHは旧式のメタクラスが使用されている。
54:デフォルトの名無しさん
08/09/10 13:35:10
#「ok]という属性にだけ代入ができるクラスA
#ラッパー関数
def rap(func):
def t(self, name, value):
if name == "ok":
func(self, name, value)
else:
raise AttributeError("代入できません")
return t
class A():
class __metaclass__(type):
__setattr__ = rap(type.__setattr__)
55:デフォルトの名無しさん
08/09/10 13:53:17
>>54
こっちの方が解りやすかった
class A():
class __metaclass__(type):
def __setattr__(self, name, value):
if name == "ok":
type.__setattr__(self, name, value)
else:
raise AttributeError("代入できません")
56:デフォルトの名無しさん
08/09/10 14:15:31
>>> class A(object):
... __slots__ = ("ok",)
...
>>> a = A()
>>> a.ok = 0
>>> a.ng = 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'ng'
57:デフォルトの名無しさん
08/09/10 14:28:54
>>56
それインスタンスでしょ
58:デフォルトの名無しさん
08/09/10 14:38:13
>class A():
> class __metaclass__(type):
その書き方は、Guido が completely unreadable って言ってた
59:デフォルトの名無しさん
08/09/10 15:04:29
>>58
まじ?class定義の中でまたclass定義してるのがイヤなのかな?
となると
class B(type):
def __setattr__(self, name, value):
if name == "ok":
type.__setattr__(self, name, value)
else:
raise AttributeError("代入できません")
class A():
__metaclass__ = B
って感じなのかな~?
60:デフォルトの名無しさん
08/09/11 01:17:33
あるクラスが __getitem__() という名前のメソッドを定義 しており、
x がこのクラスのインスタンスであるとすると、
x[i] は x.__getitem__(i) と等価になります。
特に注釈の ない限り、適切なメソッドが定義されていない場合にこのような演算を行おうと すると例外が送出されます。
#コンテナをエミュレートする
class A(object):
def __getitem__(self, key):
pass
x = A()
の場合
x[i]とx.__getitem__(i)は等価
61:デフォルトの名無しさん
08/09/11 01:21:51
つかなんでPythonはじめたのさ
回りに使ってる奴皆無だろ。
62:デフォルトの名無しさん
08/09/11 01:24:56
ほう
63:デフォルトの名無しさん
08/09/11 02:34:47
>>61
特別な理由はないよ。Rubyでもよかった。Webアプリとか作れれば。
>回りに使ってる奴皆無だろ。
そもそも周りにプログラマーがいない
64:デフォルトの名無しさん
08/09/11 02:35:49
だってニートだし
65:デフォルトの名無しさん
08/09/11 02:42:28
>>61
Rubyよりライブラリがあるんじゃないの?
66:デフォルトの名無しさん
08/09/11 11:22:40
__contains__()メソッドはインスタンスオブジェクトoにKey kが存在するかのチェックを
if k in o
と簡単に書けるようにするためのメソッド
67:デフォルトの名無しさん
08/09/11 20:16:42
コンテナへ反復処理を実装する。
そのためには__iter__()メソッドを定義する。
このメソッドはイテレータオブジェクトを返すようにする。
イテレータオブジェクトはイテレータプロトコルをサポートする必要がある。
__iter__()とnext()の2つのメソッドがイテレータプロトコルを成す。
class A(object):
data = "abc"
def __iter__(self):
return iter(self.data)
>>> a = A()
>>> for c in a:
... c
...
'a'
'b'
'c'
68:デフォルトの名無しさん
08/09/11 20:21:44
クラス自体で next() を定義している場合、__iter__() では 単に self を返すようにできる。
class B(object):
data = "abc"
index = 0
def __iter__(self):
print type(self)
return self
def next(self):
print type(self)
if self.index == len(self.data):
raise StopIteration
self.index += 1
return self.data[self.index - 1]
selfの中身はインスタンス。
selfという名前は慣習。
69:デフォルトの名無しさん
08/09/11 23:05:46
素の list が結構便利に出来てるから、
そこまで手の込んだクラスがどうしても必要になる場面は
そんなに多くないよ。まあ、知ってて損はないけど
70:デフォルトの名無しさん
08/09/11 23:48:23
>>69
ありがと。自分も途中で「これ使う時あんのかな?」って思ってた。
71:デフォルトの名無しさん
08/09/12 12:47:07
string モジュールを使ったプレースホルダ
import string
s = string.Template("$who have $what")
#キーワード引数を使用する
print s.substitute(who='I', what='apple') #I have apple
#テンプレートにないKeyはスルーされる
print s.substitute(who='I', what='apple', a="abc") #I have apple
#辞書オブジェクトが引数の場合
d = dict(who='I', what="apple")
print s.substitute(d) #I have apple
#locals()を引数にする。
#locals()は値のある変数をキーとした人工的な辞書
msg = string.Template("the square of $number is $square")
for number in range(10):
square = number * number
print msg.substitute(locals())
72:デフォルトの名無しさん
08/09/12 23:17:21
これなんとかマーケティングとかいうやつだろ
73:デフォルトの名無しさん
08/09/12 23:38:57
1はどんな本、もしくはWEBで勉強してるの?
74:デフォルトの名無しさん
08/09/13 01:16:08
? 答える義務なんてないと思うが
きもい奴がいますね
75:デフォルトの名無しさん
08/09/13 13:10:25
>>73
本は
Python クックブック 第2版
URLリンク(www.amazon.co.jp)
を買ったけど、
Python ドキュメント
URLリンク(www.python.jp)
を見てる方が多い。
76:デフォルトの名無しさん
08/09/13 15:24:36
>>73
ごめんURI間違えた
Python クックブック 第2版
URLリンク(www.amazon.co.jp)
77:デフォルトの名無しさん
08/09/14 13:41:57
マップ型のfromkeysメソッド
mapping.fromkeys(seq[, value]) seq からキーを作り、値が value であるような、新しい辞書を作成します
>>> d = {"A":1,"B":2}
>>> d
{'A': 1, 'B': 2}
>>> dict.fromkeys([k.lower() for k in d])
{'a': None, 'b': None}
78:デフォルトの名無しさん
08/09/14 22:51:40
>>75
サンクス。
本高いな、オライリーだからかな?
>>76
「間違えた」って言ってる割には、リンク先のタイトルと一致してないんだけど・・・
79:デフォルトの名無しさん
08/09/14 23:37:46
みんPyとJython本はネタとしてよくリンクが貼られる
80:デフォルトの名無しさん
08/09/14 23:59:05
本人じゃないとしたら、誰かが著者を陥れようとしてるのかなぁ・・・
81:デフォルトの名無しさん
08/09/15 00:21:30
ま、たいてい唐突にこういうの出る場合関係者の自演だと思うがな。
だってまったく話題にあがってこないものだったわけだからね
82:デフォルトの名無しさん
08/09/15 11:11:01
>>78
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたageた
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
83:デフォルトの名無しさん
08/09/15 21:33:29
ここってsage進行なの?
84:デフォルトの名無しさん
08/09/15 22:08:28
モジュールurllib2でhttpステータスに直接アクセスする。
>>> import urllib2
>>> urllib2.urlopen("URLリンク(www.example.com)").code
200
85:デフォルトの名無しさん
08/09/16 17:46:27
urllib2でプロキシ&UserAget
import urllib2
#ProxyHandlerインスタンスを生成
proxies = urllib2.ProxyHandler({"http" : "URLリンク(host:port)"})
#OpenerDirectorインスタンスを生成
opener = urllib2.build_opener(proxies)
#UserAgetを変更
opener.addheaders = [("User-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)")]
#インストール
urllib2.install_opener(opener)
#出力
print urllib2.urlopen(url).read() #print opener.open(url).read()でも一緒、その場合openerのインストールは不要
86:デフォルトの名無しさん
08/09/17 13:35:11
例外のelse文は例外が送出されなかった場合に実行される。
except 節は例外名の後に変数が指定可能。
try:
print i
except ZeroDivisionError, e:
print "例外ZeroDivisionErrorです。:", e
except NameError:
print "例外NameErrorです。"
else:
print "else文です。"
87:デフォルトの名無しさん
08/09/17 13:45:39
ユーザ定義の例外はException クラスから導出して、新しい例外クラスを作成する
class MyError(Exception):
・・・
88:デフォルトの名無しさん
08/09/17 14:56:22
tryって、例外を自分で処理するために使うんだよね?
try文で囲ってない部分で例外が発生したら、そのプログラムが強制終了すると。
89:デフォルトの名無しさん
08/10/13 10:04:44
勉強してるうちに勉強そのものが目的になって
もともと何が作りたかったのか忘れてることってない?
90:デフォルトの名無しさん
08/10/13 15:23:40
>>89
HaskellやらLispやらの勉強は特にそうだよなwww
奴らじゃなきゃ出来ない事なんてないわけだし、むしろ一般的なライブラリやドキュメントが少くて不便なことも多い。
例えばGUIとか。
91:sage
08/10/13 16:46:23
>>89
あるある。
もともと作りたいものが具体的にないんだけどね。
勉強している時は、これであんなことやこんな事が出来そうと思ってワクワクする。
でも気づいたら完成したソフトが出来てない。
そして、飽きて次の言語に・・・
92:デフォルトの名無しさん
08/10/13 16:59:34
perlで作ったものは完成したけど表面的なものはともかく中身はぐちゃぐちゃだった
phpで作ったものは完成したけど楽しくなかった
rubyで作ったときは楽しかったけど完成しなかった
pythonは楽しく作れてしかも完成出来て中身もすっきり
93:デフォルトの名無しさん
08/10/17 08:24:52
Pythonはパッケージ管理がしっかりしているから良い
バイナリ配布方法も含めて
94:デフォルトの名無しさん
08/10/24 18:39:41
setuptools で bdist_wininst は Windows でしか
使えないと思っていたが,Linux 上でもできた・・・
exe ファイルが出来やがった…
Windows な友人に渡すためだけに Windows 上で
setuptools 動かしてたおれって orz
95:デフォルトの名無しさん
08/10/24 21:26:36
>>94
distutils/command/ にWindows用のインストーラーのexeが入ってて
bdist_wininst すると必要なファイルを作って固めてインストーラーの後ろにくっつけてるから
96:デフォルトの名無しさん
08/12/29 21:03:17
age
97:デフォルトの名無しさん
08/12/29 22:29:59
sage
98:デフォルトの名無しさん
08/12/30 13:04:24
今日から始めた、おっぱいそん。
今チュートリアル4が終わりそう。
3日くらいでそこそこ使えるようになるかな?
ゆっくりまったりこの正月で覚えるぜ。
99:デフォルトの名無しさん
08/12/31 00:20:21
うおおおおおおおおおおチュートリアル大体読み終わったぜ。
バストサイズはアップした。形だな、次は、うん。
次はどこに進めばいいんだろうか。
とりあえずもっかい読み直すか。
100:デフォルトの名無しさん
08/12/31 07:38:58
工学社のはじPyこうたのはいいんだが ネットワークプログラミングのほうだた
一冊目ほしいなー
101:デフォルトの名無しさん
08/12/31 15:47:06
フッフフウァッ!ユクゾッ ユクゾッ ユクゾッ フッフフウァッ!ユクゾッ ユクゾッ ユクゾッ ユクゾッ
フッフフウァッ!ユクゾッ ユクゾッ ユクゾッ フッフフウァッ!ユクゾッ ユクゾッ ユクゾッ ユクゾッ
102:デフォルトの名無しさん
09/01/04 23:09:15
┏━━━━━━━━━━━┓
┃ ━ ╋━╋ ╋┓┏┓ ┳┻┳┏━ ┣━┳━ ┃
┃ ━ ┏┳┓ ┃┃┗┛ ┻━┻┃ ┃ ┃ ┃
┃ ━ ┗╋┛ ┏━┓ ┃ ┣┳ ┏━╋━ ┃
┃ ━ ━╋━ ┣━┫ ━╋━┃┃ ┃ ┃ ┃
┃┏┓━╋━ ┣━┫ ┏╋┓┃┃ ━┻━╋━ ┃
┃┃┃ ┃ ┗━┛ ┃┃┃┃┃ ┃ ┃
┃┗┛━┻━ ━┛┗━ ┃┃┃┃┃ ┃ ┃
┗━━━━━━━━━━━┛
∩
〈〈〈 ヽ
〈⊃ }
(\___/) | |
( ̄l▼  ̄)! !
/ ● ● | /
/ l ___\lミ/
/▲ ( 。--。 )
/■___ (( ̄)) 新年あけましておめでとうございますーーっ!
(___)  ̄/
2009年 元旦