はてなキーワード: プログとは
http://anond.hatelabo.jp/20100824002314 これね
で、こんなんでも、物事の成り立ちを漠然と考えられる人と、点と線でしか考えられない人の差がすぐ見えちゃうんだな。
腐女子の知り合いは絵ごとに自由に動きや反応つけてカオスなもん作って楽しんでたけど、某理系大学の知り合いは、脳内のフローチャート通りに動かそうとする感じでさっぱり出来てなかった。やってみるまで意外とわからん。
今までプログラミング人に教えた事何度もあるけど、最初のこの傾向はあるんだよな。これだけ単純化されていても考え方の傾向は出るんだなと思った。
まーネトゲのゲーム内マクロ程度でも、0から作れる人と、コピペでしか作れない人がやっぱいる。その腐女子の知り合いはネトゲでも面白いマクロ作ってたよなーと思い出した。なんだろうな、こういう能力のことをなんていうのか上手い言葉がない。
http://www.mext.go.jp/programin/
中身が見える電卓 http://www.mext.go.jp/programin/share/?share_id=227971f63ec51ea1e4fecae3b2756e40
ついったしゅーてぃんぐ http://www.mext.go.jp/programin/share/?share_id=59f11494cfcfbdfefe85e649d8d40c31
ようかんマン http://www.mext.go.jp/programin/share/?share_id=6823a17c360baefe471d66a9dd2b546f
子猫の冒険 http://www.mext.go.jp/programin/share/?share_id=c41b798ed45cda85a747094727d73598
ゆめにっき無双(没)2 http://www.mext.go.jp/programin/share/?share_id=a4f82e312089c72127d0ca3d44ff0283
カピバラさま http://www.mext.go.jp/programin/share/?share_id=c32fce7dd60336a35d5a794a2e5131ef
3匹のワンコ http://www.mext.go.jp/programin/share/?share_id=69252b94ff037955b49bc1f243c8f6df
しーけんさ http://www.mext.go.jp/programin/share/?share_id=50c85491c4c870521401caa45b446add
そげぶ http://www.mext.go.jp/programin/share/?share_id=cf2b155246c5fd5ae448cc921c5e3f50
ぞうさんのめいろ http://www.mext.go.jp/programin/share/?share_id=7f029f51fa3ed0f245c794e5959a2ebb
RococoWorksの新作の情報が出て、Sun Cagedの新作The Lotus Effectも近いうちに発売らしい。
個人的には実にめでたいことである。
今のうちにカタハネやっとかないとなー。
RococoWorksはairy[F]airyの絵がちょっとぺドすぎるんで、カタハネからVolume 7の頃の感じになるといいんだけど。
The Lotus EffectはSun Caged(アルバム)とArtemisia掛ける2を足して2で割ったくらいだったらいいなぁ。
Sun Cagedの方がプログメタルしてるとは思うけど、Artemisiaの湿っぽい情感が好きなんだ。
RenaissanceのBBC Sessionsが欲しいけど、日本とコメリカのどっちの密林でも値段が高い。
アニーの声はいいよ。
仕事柄ITの本が多いけど、敢えて松坂和夫先生の集合・位相入門と代数系入門も入れた。
ジェラルド・ワインバーグの本は邦訳を7冊持ってるけど、これはいつか原書を読むつもりだから入れなかった。
荷物にはレッド・ツェッペリンと再結成クリームのDVDも放り込んだ。
だからツェップとクリーム。
以下は回答結果。客観性を担保するために雑音や変な回答も保存し量を確保した。ここから適当に真実を読みとろう。しかし悲惨なものだね。
途中集計へ [ 前の 件 ] ~ 件目の回答 [ 次の 件 ] [ 全件表示 ]
unu ない わかんなぃ 税金でほとんどとられる あ a あ gg か a あ 奴隷社会 たいよう 頑張っても成果は比例しない
わからん 荒波 今北産業 a 色々大変 裏金 給料 すぐに死ねる ヴァンアレン帯 あ 学歴社会 セクハラ うんこ a 安月給
大人の嘘 学歴主義 d 収入が少ない事 zurui やなたまやは 学生より楽 なし ああああ あ ヤフー なし a ぱんつ
メデューサ a 不正 忙しい ない 大人もバカだ 本サイトは無償提供のため、アンケートにご協力ください 格差社会
KY j ブラック企業 ? あ 特にない 理想と現実は違う 付き合い ? sirann . ki ww 不合理 うんこ ko a aaa 裏金
意外と黒い トイレの場所 そーか >< 知りません 適当 か 不倫が横行 労です 自給はうそっぱち 汚い 別にない
aaa 賄賂 あ 軽い 大変 おk unko k 世の中は平等に不平等 夢がない z 分からない 適当さ。 あ 男尊女卑 お金
給料が安い a d ない 出会いがない。 e 大人は汚い にゃー あ a 理想はあくまで理想 サービス残業 わからない r
ない kuso 矛盾 整形が多い あほ ? サービス残業 デスマーチ 学歴社会 sfd 一場 ニート a asda
あ 残業代出ない lg abc 偽装 khb r l まだ学生だから不明 まだ学生 嘘 m 胃痛 / だんどり力 ? n ちんこ 不正
nani 学生 特になし 格差社会 上司がいやだ \(^o^)/ test A 意外に童貞が多いwww s 有給 ラクしてる人は
してる 要領一番 官僚が一番 コネ は 裏口 SIRAN 仕事ができる人が出世できるわけでは無い。大人は意外と子供
cc な 縦社会 しらん p 賄賂 現実 ない 談合の多いことに、びっくり 世の中馬鹿が多すぎる くだらん okane
社会主義 力 k 就職してない I don't know 東大が神 ? 学歴ってホントものいうね 学歴社会 金 キチガイクレーマー
特に無い わかりません 女性蔑視 fusianasan 本音と建て前 秘密 全て 裏事情 医療行為と称した虐待 区別
つつつつつ ? \(^o^)/オワタ ? ? いろいろ 縦社会 zeikinn uso なべやかん ちんぴょろすぽーん ビールうまい
そうか 本当の社会 アンケートに正確に答えてください 談合 接待 さあ 知らない 裏の社会 ゆうせい民営化で得する
のはあめりかだけ かけひき q jkkkk あ ひとによる kane m g opoj わからない 税金の行方 ない ; 税金の正しい
使われ方 あ おまんこ 学生には答えられないのでは? チンコは硬くてうまい >< aaa あ 消費活動は恐怖の植え付
けから生じる free sex 詐欺 乾季値 f ぷるぷる q お客様は神様です 学歴社会 ディズニーランドのキャラクターの中
には人が・・・ わかりません おまんこ あ 知らん ・・・ 分かりません unko うんこ コナン=新一 a z うぇr , , 知らん sya
innhatukaisuterareru 完全週休二日を信じるな わかりません s わからない a l わからない 人を殺しても死刑にはなら
ない あああ lo 努力は必ずしも実らない ま○こ属性 ・・・ 分かりません。 学校のプログラムが国の思惑どおりな事
ない sex don know 福利厚生 bb 主張が出来る奴が勝つ 不明 学歴序列 ytふぃytふぉ この世は亀の背中に乗ってい
る。 高学歴じゃないとクズ fcxv 教師 社会に夢を持ってはいけない ぇ じつは年功序列 不倫 ? この世に夢はない
え dont know 。 i しらないっす かいらく しらね 菅井きんの妊娠 なし 不条理 bbb a 辛い ? 仕事の厳しさ ??
就業時間 no しりません^^ 年収は低い r 人生は辛い お年玉 さあ 整形 a o セックスの神秘 あ すごい 学生なり。
知らん。 赤ちゃんはコウノトリが運んでくる 搾取システム あほ ・・・・ 知らない うん \ わかんない 裏取引
学歴での採用基準の序列 わからん 巨乳はうそ aq 分かりません。 大人って意外と子供 ? ? しらね
SEXは都市伝説 y l 秘密 授業の情報操作 w お金を稼ぐのは大変 a ats e わかりません おおおおおおおおおお
おおおお あ 生涯年収は入社時に決まる 精勤 サンタは実在しない わからない a あ a 人間 kane 学費が高い 努力
しても夢はほぼかなわない 学歴 ない 自殺 特にない あ 天下りが酷い ? 学歴がすべて とくにない このページをみ
た感想を書いて下さい dsa ない 知らん 社会人もいじめをやる 交際費 hdhd 学生 わからない なし e ? 雇用機会均等
は実はない souka souka. ◇未来は自分の夢の素晴らしさを信じる人のものである。 F・ルーズベルト マスゴミ 特にな
し 資本主義社会 税金の無駄遣い 勉強はマジでやっておいたほうがいいが、そんなもんあるか? 政治の問題 アホは
ゴミ 時間 特になし からだ巡り茶 わからない uso ない ないよ 店内のトイレは絶対に利用しない 。 ゆy」 学閥 a 学生
ですから。 あべしの心理 れろれろ a セックスは都市伝説 メンタルマネージメントの重要さ あ まんこ z 学校のプログラ
ムは国の思惑通り gじゅ」@lmn aaa あばば 学生だからしらねぇよw うんちがおいしいという事実 nl 王労 い aaaa
aaaa 警察と暴力団は蜜の関係 wwww 初任給 金金金 ひんこかゆい 格差 ? しね」 を支配しているかが コチニール
デーヴィットロックフェラー 格差 ドラゴンボールは存在しない vguj あ w 酒が飲める A qkあj 道路を舗装すると平米
あたり万円以下がでできる。
3Kだの7Kだの言われるプログラマー1年目のオレが
プログラミング言語の種類にはC、VB、JAVA、Delphi、PHP、Perlとか無数にあるが
どれでもいいからひとつ好きなの選んで学べ。
どれにしようかと迷うぐらいならCかJAVAやっとけ。
いきなり難しいことしようとは考えず、入門書通りに文字を表示したり
掛け算したりそういうのを確実にやれ。
FizzBuzzっていう基礎さえできてれば屁をこく方が難しいプログラミングがある。
1からどんどん数を増やしていくプログラミングだ。
3の倍数になった場合は数字の変わりに「Fizz」と表示させて
5の倍数になった場合は数字の変わりに「Buzz」と表示させる。
3と5の公倍数になった場合は数字の変わりに「FizzBuzz」と表示させるシンプルなプログラムだ。
プログラミングできるって言っておいてこれもできない奴が結構いるわけだ。
とりあえず入門書買って順々に進んで行け。
大抵のサイトはやり方と簡単な説明だけで詳細な説明が載ってないから本は買え。
そして一気にやろうとするな。先週やったことを30分でもいいから今週にもしろ。
あと、目標を立てろ。1日10ページとか1章とかそんなんでいいから
そして最後の5分は今日やったことをノートでもブログにでも書け。
本とかの練習問題では目標タイムとか書いてあるからそれを守るように解いていけ。
時間を多めにとってある入門書の練習問題程度で目標タイムに届かなかったら前の章からやり直せ。
仕事は生産性が非常に大切だ。 仕事遅いのにできる人より残業して給料貰ってる汚い大人にはなるなよ。
とりあえず基礎だ基礎。
普通なら応用に進むのが普通だろうと思うが、これからプログラマになるわけだから
環境を変えてやってみるのもいいと思う。基礎さえ確実にマスターしておけば
応用的なものはその都度調べることの繰り返しで結構覚えれるもの。
ここからはメモ帳からサクラエディタや秀丸エディタに変えてプログラミングしてみたり
EclipseやVisual Studioを使ってこういったツールが非常に便利であることを体験しろ。
仕事はこういったツールがないとやっていけない。
そして意外とこういったツールを使いこなせていないプログラマが沢山いる。
使いこなすことによって仕事量が増えるだけでなく、ミスも減らすことができる。
おれはもうMooseしかつかわねぇ。後にも先にもMooseMooseMooseMooseMoose!!!!!!!!!!!1111111
ってな人の為にいつでもどこでもMooseする。automooseを実装しますた。
package automoose; use strict; use warnings; sub import { strict->import; warnings->import; } package automoose::before; use Moose; no Moose; package automoose::after; use Moose; my @before = keys %automoose::before::; my @after = keys %automoose::after::; my @exports = do { my %u; @u{@before} = (); grep { !exists $u{$_} } @after }; package UNIVERSAL; use Moose; for my $func (@exports) { __PACKAGE__->meta->remove_method($func); __PACKAGE__->meta->add_method($func,sub { my $class = shift; my $auto = $class.'::__auto__'; no warnings 'redefine'; local *Moose::_get_caller = sub { return $class }; Moose->import( { into => $auto } ); my $code = $auto->can($func); $class->meta->add_method($func,sub { shift; goto $code; }); goto $code; }); } 1;
使い方はいたって簡単。useするだけ。
use automoose; my $obj = Foo->new;
いきなりnewが呼べちゃう。
他にも
use automoose; Foo->has( hoge => is => 'rw' ,default => 9999 ); Foo->has( muge => is => 'rw' ,default => 7777 ); print Foo->new->hoge; print Foo->new->muge; Bar->extends('Foo'); print Bar->new->hoge;
ょーかんたん。げーべんり。
しっかしこれ、automooseだけど実装するの結構めんどかったのよ。Moose-0.44をベースに作ったんだけどさ。
Moose内部で使用している$CALLERって変数がレキシカルなもんだから、どうやってそれを外から制御すればいいのかすんごい苦労したわけさね。
で結局importの引数にinto渡してさらにMoose::_get_caller関数を上書き無理矢理ハックしたってわけさ。
でもね。でもね。でもね。ちょっと聞いてよ。
ふと最新のMoose-0.50見てみたらさ、Moose::__CURRY_EXPORTS_FOR_CLASS__なんて関数が定義されてるわけよ。
外から明示的に$CLASSを変更できるインターフェイスなわけよ。おいおいおいおい、勘弁してくれよ。こっちゃ折角苦労してハックしたのにあっさり公式対応するなってばよ。メゲルヨ?ぼく。
まぢめげるよ。めげる。ってかもうめげたよ。もうMooseなんてつかわんね!つかわんね!
Mooseなんて大嫌いだー!
俺はMooooooooooseをやめるぞぉおおおおおおおおお、JOJOぉぉぉおおおおお!!!!11
最近Perl界隈ではMoose、MooseってなんかMooseってのが流行ってるらしい。
自分自身のブログでは、さもずっと前からMoose知ってたかのように振舞うために、増田で先に放出しておく。てへへ。
プログラマ層が限りなく低い増田にこんなこと書いてもだれも見てくれない気はするけど。
初めてのMoose - Mooseのすすめ - はてな#hide-k
meta object protocol について考えてみる - TokuLog 改めChumbyとどきました日記
YappoLogs: Moose のコードを探索して理解を深めた
Mooseってのは結局のところClass::MOPのラッパーみたいなもんだと。
で、Class::MOPってのは何だ?ってことだけど、メタなんとかプログラミング?え?プロトコル?まーどっちでもいい。
よくよく読んでいくとメタなんとかとか大層な名前が付いてるけど、結局のところPerlのpackageそのものの操作をオブジェクティブ扱えるようにしたものみたいだ。
つまりだな、例えばpackageに対して動的に(静的ではなく!)メソッドを追加したい場合、今までなら
package Foo; **Foo::method = sub { return 'hoge'; }; print Foo->method;
のように型グロブに関数のリファレンスを突っ込むということをしなければなかったが
use Class::MOP; my $class = Class::MOP::Class->create('Foo'); $class->add_method('method',sub { return 'hoge'; }); print Foo->method;
みたいな感じでかっこよく追加できるってわけさ。ま、これはほんの一例だけどな。(他にもメソッドを削除したりフックしたり色々できる。その辺は今回省略。)
本来なら「package Foo」とするところを「my $class = Class::MOP::Class->create('Foo');」と書ける。
これの何が良いのかというと、$classというオブジェクト経由でFooパッケージを色々操作できるところにつきる。
型グロブを使用したり「no (warnings|strict)」をしたりパッケージを操作する処理っていうのはPerlのキチャナイ構文が多かったのだが、Class::MOPのおかげでスッキリ綺麗に書けるようになったってこった。
で、次にMooseだが、これは結局のところClass::MOPのパッケージ管理の部分に+αしただけのラッパーだ。
でもその+αってのが結構凄かったりする。
もうこの辺の話はさんざん既出だが、例えばhasという関数を使ってアクセサや型定義が出来たり
package Foo; use Moose; has 'method' => ( is => 'rw', isa => 'Int' , default => '10' ); my $obj = Foo->new; print $obj->method; # 10 $obj->method(50); print $obj->method; # 50 $obj->method('hoge') # Int型じゃないのでエラー
Moose::Roleを使ってRubyのMixinみたいなことができたりする。
でも実はこれらの処理ってのは本当は別に凄くもなんとも無い。
アクセサ生成なんてClass::Accessorがあるし、関数の引数の型チェックなんてのもParams::Validate等昔から存在してるし、Mixinに関してはもともとPerlは多重継承できるので最初からできるし。
じゃあなんでみんなMoose、Moose言ってるのかっていうと、それはやはりClass::MOPの存在が大きいであろう。
綺麗且つ柔軟にパッケージの操作が出来るClass::MOPが土台にあって、今まで別々の役割として存在してきたモジュール達を統合し、よりわかりやすく、より柔軟に、そしてより強力なPerlのオブジェクト指向を構築できるようにした。それがMooseなのだ。
・・・しかし、小生。
Mooseについて調べていくうちに一つ残念に思ったことがある。
オブジェクトにメソッドを追加する機構がないのだ。
オブジェクトにメソッドを追加する、だ。パッケージにではなく、オブジェクトに、だ。
具体例をあげる。
package Foo; use Moose; my $obj = Foo->new; $obj->meta->add_method('hoge', sub { return 'hoge' }); print $obj->hoge; # hoge
ちなみに$obj->metaというのはFooパッケージを管理するClass::MOPへのアクセサだ。
ということは上記の処理はFooに対してhogeというメソッドを追加していることになる。
では次の例。
package Foo; use Moose; my $obj = Foo->new; $obj->meta->add_method('hoge', sub { return 'hoge' }); print $obj->hoge; # hoge my $obj_2 = Foo->new; print $obj_2->hoge; # hoge
$obj_2->hogeが呼べてしまうわけだ。
$obj->metaは結局のところFooパッケージなのだから、そこにメソッドを追加しているので当然の結果である。
$objだけにメソッドを追加することは、Mooseではできないのだ。
非常に残念である。ああ、残念だ。
・・・しかし、小生。
これでもプログラマの端くれである。こんなことでめげていてはMooserを名乗れないのである。(あ、MooserってのはMoose使いの人の俗称ね。今僕が考えたの)
なのでオブジェクトにメソッドを追加できるように拡張して見せよう。
package Foo; use Moose; use Class::Object; my $class_object = Class::Object->can('new'); override new => sub { ref($class_object->(shift))->SUPER::new(@_) }; my $obj = Foo->new; $obj->meta->add_method('hoge', sub { return 'hoge' }); print $obj->hoge; # hoge my $obj_2 = Foo->new; print $obj_2->hoge; # エラー
たった3行追加するだけで実現できる。さすがMoose。
ただし、Class::Objectを利用しているのでFoo->newで返ってくるパッケージがFoo::0といったようにFooではなくなってしまっているのでrefとかでパッケージ名の比較ができなくなってしまう問題が発生する。
でもこれも継承順をいじったりと本気で頑張れば、表向きに見せるパッケージ名をFooすることも可能だろう。
その添削の役目はどこかのハッカーに任せるとして、今日のところはこの辺で終了としたい。
Moooooooooooooose!と叫ぶのが流行ってるみたいなので、もっとも長くMooooooooooooooose!と叫んだ最初の男となるべく下記の処理を残しておく。
length q chdir uc and print chr ord uc q rmdir and do { print chr ord q xor x while $a++ < 0xffffffff } or print chr ord qw q sin q and print chr ord q ne sin and print chr hex length q q shift shmread bless q;
4Uって知ってるかい?
”世界中の美女画像を皆でシェアするソーシャルイメージブックマークサービス”
とのことさ。それはほんともう美しい画像が満載で毎日見てても飽きないわけさ。
そこでローカルに画像を保存しようと思い、ちょっくら実装してみた。
#!/usr/local/bin/perl -w use strict; use warnings; use Web::Scraper; use LWP::UserAgent; use Perl6::Say; use MIME::Type; use URI; use Data::Dumper; sub p { print Data::Dumper::Dumper(@_) }; my $page = shift || 1000; unless ( $page =~ /^\d+$/ ) { die 'perl 4u.pl [page as int]'; } for my $i (1..$page) { my $url = sprintf 'http://4u.straightline.jp/?page=%s' , $i; say "request url>".$url; my $tmp = scraper { process 'ul.entry-list>li>div.entry-body>div.entry-photo>a', 'link[]' => '@href'; process 'ul.entry-list>li>div.entry-footer>div.wrapper-entry-description>div.entry-description>p.entry-img-src', 'img[]' => 'TEXT'; result 'link','img'; }->scrape( URI->new($url) ); my $links = $tmp->{link}; my $imgs = $tmp->{img}; if ( ref $links ne 'ARRAY' ) { say "end program."; exit; } for my $link (@$links) { $link =~ m{/([^/]+)$}; my $sesid = $1; sleep 1; my $image_url = shift @$imgs || next; $image_url = 'http://'.$image_url; say "get image url >".$image_url; my $ua = LWP::UserAgent->new; my $req = HTTP::Request->new(GET => $image_url); my $res = $ua->request($req); my $content = $res->content; my $content_type = $res->headers->header('content-type'); my $ext = MIME::Type->new( type => $content_type )->subType || 'bin'; my $write_path = './img/'.$sesid.'.'.$ext; if ( -f $write_path ) { say "file exsits end program >".$write_path; exit; } open my $FH, '>', $write_path; binmode $FH; print $FH $content; close $FH; say "write image >".$write_path; } }
貴様、うるせーんだよ。
今回俺としてはWeb::Scraper使いたかったので自力実装してみますた。
使い方を試しながらだったので製作時間2時間くらいかかたお。次からはもっと短縮できそうだ。
まーがーっと書いた後に整理してないからコード自体はかなり汚ねぇのでご了承を。ふへ。
とりあえず4u.plを叩くとカレントディレクトリのimgフォルダに取得した画像を次々書き込んでいく。
ちゃんと次のページにも遷移しながらどんどんがんがん書き込んでいくのさ。
で、以前取得したことのある画像にぶつかるとそこでプログラム終了。
ちゅーかなんつってもWeb::Scraperってばスゲエよな。俺のクリオアがびんびん反応するぜ。え?クオリアだって?うっせぇ野暮なこと言うなよ。
フレームワークとか使ってるともはや隠蔽されすぎて自分で実装しようなんて思わないのが普通である。
ましてや車輪の再開発などもってのほか、バグを生み出す温床にしかならない。
だが、どういう仕組みになっているのかを紐解くのに自分で再実装するのはそれはそれで有意義だろう。
君は今まで食したパンの枚数を覚えていなくてもいい。しかしそのパンがどのように作られているかを知ることは決して間違いじゃぁない。
自分で実装してみてわかることもある。あぁ、このライブラリって凄かったんだなと。
なんでこんなにコード長いの?もっと短く書けそうなのに。そう思って自分で再実装してみると、あれが足りないこれが足りない。あ、バグってた。ダメだこりゃ。元のライブラリより長くなっちゃった・・・あれ?しかもベンチ遅!!
みたいなことになる。
CGIモジュールはもともとある種のフレームワークのようなもので、入力データ以外にも色々HTML吐き出したりできるのでコードが長くなってしまってるんだ。
だからもっと短くかけるはずだよ。うん、俺やってみる。
結果惨敗。意外にしんどい。きつい。ベンチとってみてCGI.pmよりも低速になったときは絶望したよ。
しかも、機能が足りない。全然たりない。
CGI.pmはコマンドラインからの入力データにも対応してるし、ファイルのアップロードもばっちしできる。
腐ってやがる、まだ早すぎたんだ!(by クロトワ)
昔からあるものは伊達じゃない。それだけ歴史が詰まっているということだ。
凄い、凄すぎる。ハハハ。わらっちまうしかねぇ。
しかし、それを乗り越えて新しいものを産み出す人もいる。これはすごい。[これはすごい]ハハハこやつめ。
そーゆー人を俺は尊敬する。敬意を払う。ビシっ。
あ、スミマセン。手、当たりました?ごめんなさい。そんなつもりじゃ。ツッコミとかじゃないですよ。
あぁ、いてて、コラ、叩くなって、痛いイタイ、んー、もうハハハ、やめてってば、コラ、いい加減にしろ、ってばよ、っんもう。
NabeAtzzが空前のブームということで俺もRubyで書いてみた。
list = %W/ さん ろく きゅう じゅうに じゅうさん じゅうご じゅうはち にじゅういち にじゅうさん にじゅうよん にじゅうなな さんじゅう さんじゅういち さんじゅうに さんじゅうさん さんじゅうよん さんじゅうご さんじゅうろく さんじゅうなな さんじゅうはち さんじゅうきゅう / (1..40).map{|x| ((x % 3)==0 || x.to_s.match(/3/)) ? list.shift : x }.each {|y| print "#{y}\n" }
ひらがな化は面倒だったんで固定値だけど勘弁。
今時Shift_JISでプログラミングするバカな奴はいないだろうけど折角まとめたので公開
| @ | [ | \ | ] | ^ | _ | ` | { | | | } | ~ | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 40 | 5B | 5C | 5D | 5E | 5F | 60 | 7B | 7C | 7D | 7E | |
| 81 | ー | ― | ‐ | / | \ | ?? | + | ?? | ± | × | |
| 82 | ・ | ・ | ・ | ・ | ・ | ・ | A | ・ | ・ | ・ | ・ |
| 83 | ァ | ゼ | ソ | ゾ | タ | ダ | チ | ボ | ポ | マ | ミ |
| 84 | А | Ъ | Ы | Ь | Э | Ю | Я | к | л | м | н |
| 85 | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ |
| 86 | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ |
| 87 | ?? | ?? | ?? | ?? | ・ | ?? | ?? | ・ | ・ | ・ | ?? |
| 88 | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ |
| 89 | 院 | 閏 | 噂 | 云 | 運 | 雲 | 荏 | 閲 | 榎 | 厭 | 円 |
| 8A | 魁 | 骸 | 浬 | 馨 | 蛙 | 垣 | 柿 | 顎 | 掛 | 笠 | 樫 |
| 8B | 機 | 擬 | 欺 | 犠 | 疑 | 祇 | 義 | 宮 | 弓 | 急 | 救 |
| 8C | 掘 | 啓 | 圭 | 珪 | 型 | 契 | 形 | 鶏 | 芸 | 迎 | 鯨 |
| 8D | 后 | 梗 | 構 | 江 | 洪 | 浩 | 港 | 砿 | 鋼 | 閤 | 降 |
| 8E | 察 | 纂 | 蚕 | 讃 | 賛 | 酸 | 餐 | 施 | 旨 | 枝 | 止 |
| 8F | 宗 | 充 | 十 | 従 | 戎 | 柔 | 汁 | 旬 | 楯 | 殉 | 淳 |
| 90 | 拭 | 深 | 申 | 疹 | 真 | 神 | 秦 | 須 | 酢 | 図 | 厨 |
| 91 | 繊 | 措 | 曾 | 曽 | 楚 | 狙 | 疏 | 捜 | 掃 | 挿 | 掻 |
| 92 | 叩 | 端 | 箪 | 綻 | 耽 | 胆 | 蛋 | 畜 | 竹 | 筑 | 蓄 |
| 93 | 邸 | 甜 | 貼 | 転 | 顛 | 点 | 伝 | 怒 | 倒 | 党 | 冬 |
| 94 | 如 | 納 | 能 | 脳 | 膿 | 農 | 覗 | 倍 | 培 | 媒 | 梅 |
| 95 | 鼻 | 票 | 表 | 評 | 豹 | 廟 | 描 | 府 | 怖 | 扶 | 敷 |
| 96 | 法 | 房 | 暴 | 望 | 某 | 棒 | 冒 | 本 | 翻 | 凡 | 盆 |
| 97 | 諭 | 夕 | 予 | 余 | 与 | 誉 | 輿 | 養 | 慾 | 抑 | 欲 |
| 98 | 蓮 | 麓 | 禄 | 肋 | 録 | 論 | 倭 | ・ | ・ | ・ | ・ |
| 99 | 僉 | 兌 | 兔 | 兢 | 竸 | 兩 | 兪 | 几 | 處 | 凩 | 凭 |
| 9A | 咫 | 喙 | 喀 | 咯 | 喊 | 喟 | 啻 | 嘴 | 嘶 | 嘲 | 嘸 |
| 9B | 奸 | 媼 | 媾 | 嫋 | 嫂 | 媽 | 嫣 | 學 | 斈 | 孺 | 宀 |
| 9C | 廖 | 彈 | 彌 | 彎 | 弯 | 彑 | 彖 | 悳 | 忿 | 怡 | 恠 |
| 9D | 戞 | 拏 | 拿 | 拆 | 擔 | 拈 | 拜 | 掉 | 掟 | 掵 | 捫 |
| 9E | 曄 | 杣 | 杤 | 枉 | 杰 | 枩 | 杼 | 桀 | 桍 | 栲 | 桎 |
| 9F | 檗 | 歇 | 歃 | 歉 | 歐 | 歙 | 歔 | 毬 | 毫 | 毳 | 毯 |
| E0 | 漾 | 濕 | 濬 | 濔 | 濘 | 濱 | 濮 | 炮 | 烟 | 烋 | 烝 |
| E1 | 瓠 | 畆 | 畚 | 畩 | 畤 | 畧 | 畫 | 痣 | 痞 | 痾 | 痿 |
| E2 | 磧 | 禺 | 秉 | 秕 | 秧 | 秬 | 秡 | 窖 | 窩 | 竈 | 窰 |
| E3 | 紂 | 綣 | 綵 | 緇 | 綽 | 綫 | 總 | 縵 | 縹 | 繃 | 縷 |
| E4 | 隋 | 膽 | 臀 | 臂 | 膺 | 臉 | 臍 | 艝 | 艚 | 艟 | 艤 |
| E5 | 蕁 | 藜 | 藹 | 蘊 | 蘓 | 蘋 | 藾 | 蛔 | 蛞 | 蛩 | 蛬 |
| E6 | 襦 | 觴 | 觸 | 訃 | 訖 | 訐 | 訌 | 諚 | 諫 | 諳 | 諧 |
| E7 | 蹇 | 躰 | 軆 | 躱 | 躾 | 軅 | 軈 | 轆 | 轎 | 轗 | 轜 |
| E8 | 錙 | 鐚 | 鐔 | 鐓 | 鐃 | 鐇 | 鐐 | 閔 | 閖 | 閘 | 閙 |
| E9 | 顱 | 饉 | 饅 | 饐 | 饋 | 饑 | 饒 | 驅 | 驂 | 驀 | 驃 |
| EA | 鵝 | 鷦 | 鷭 | 鷯 | 鷽 | 鸚 | 鸛 | 黠 | 黥 | 黨 | 黯 |
| EB | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ |
| EC | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ |
| ED | 纊 | 倞 | 偆 | 偰 | 偂 | 傔 | ?? | 垬 | 埈 | 埇 | ?? |
| EE | 犾 | 劯 | 砡 | 硎 | 硤 | 硺 | ?? | 葈 | 蒴 | 蕓 | 蕙 |
| EF | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ |
| F0 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? |
| F1 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? |
| F2 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? |
| F3 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? |
| F4 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? |
| F5 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? |
| F6 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? |
| F7 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? |
| F8 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? |
| F9 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? |
| FA | ?? | ∵ | 纊 | 褜 | 鍈 | 銈 | 蓜 | 傔 | ?? | 僘 | 兊 |
| FB | 涖 | 犱 | 犾 | 猤 | ?? | 獷 | 玽 | 硺 | ?? | ?? | ?? |
| FC | 髜 | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ | ・ |
| 40 | 5B | 5C | 5D | 5E | 5F | 60 | 7B | 7C | 7D | 7E | |
| @ | [ | \ | ] | ^ | _ | ` | { | | | } | ~ |
# ちなみに「??」って表示されてるのはまー外字部分だしそんなに気にしなくていいかと
これらの文字コードには気をつけること。
特に2バイト目が5C(\)ものは要注意。
"や'と引っ付くのでまともにプログラミングできない。
print '予定表'; print "無能";
特にPerlの場合は文字列中に展開できる構文が多いのもあり、色々なエラーを出せるので注意が必要だ。
print qq[夕焼け小焼け]; # 「夕」の2バイト目でエラー print "警察24時!"; # @24という変数とみなされる
また、正規表現でも厄介な問題が起きまくるので注意すべし。
my $str = 'ダ'; print 'match' if $str =~ /_/; # マッチしちゃう
こういう様々な理由からShift_JISでプログラミングをしてはいけないわけだ。
だからUTF8を使うべきだ。UTF8が無理でもせめてEUC-JPのどちらかでプログラミングすることをオススメする。
まーEUC-JPはEUC-JPでShift_JISと一部文字コードが重なっているので正直扱いにくいのでやっぱりUTF8を強く推奨する。
どうーでもいいーですよー。
どうでもいい話ー、聞いてください。
Perlというやつは一応内部的には数値か文字列かをちゃんと分けて変数の管理をしているのです。
でわ、現在ある変数が内部的に数値なのか?内部的に文字列なのか?判別しようと思ったらどうしますか?
こうしてみます。
my @data = (
100, # 100は内部的に数値
'200' # 200は内部的に文字
);
foreach my $d ( @data ) {
if( ($d ^ $d) eq '0' ){
print $d . " = It's numeric\n";
}
else {
print $d . " = It's string\n";
}
}
同じ変数同士を排他的論理和(^)すると、その変数が数値の場合は0になり、その変数が文字列の場合は空文字になるのです。
なぜかって?そりゃ同じ値同士で排他的論理和したら必ず00000000になるでしょう?
で00000000は、数値なら数字の0だし、文字列なら制御コードのNUL文字になるので上記のような処理が成り立つというわけです。
あってますよね?
ってか判別できたからなんだというんだと問われたらぐうの音すら出ません。まったくもってどうでもいい話でした。
結論→一緒。
すまん嘘。
ほぼ同じ意味だって言いたかったの。カンマもイコールダイナリもほとんど同じ感覚で使用できる。
唯一つ違うのはイコールダイナリの左辺に置いた文字列は裸でも良いってところにある。
どういうことか?んー。
my @hoge = ( 'foo' , 'bar' );
これはカンマを使っているわけだが、当然文字列を指定する場合、シングルクォートでくくらねばならない。
しかしイコールダイナリを使えば左辺の値のみシングルクォートでくくらなくてもよくなる。
my @hoge = ( foo => 'bar' );
こういうことだ。当然こんな風にもかける(普通あまりこんな書き方はしないが)
my @hoge = ( foo => bar => baz => 'hoge' );
これらの書き方はハッシュに値を代入する際に良く使われる傾向がある。
my %hoge = ( foo => 1, bar => 2, );
しかし、気をつけなければならないこともある。いくらシングルクォートが必要ないとは言っても記号が混ざってるとその限りではない。
my %hoge = ( 10-1 => 'bar', );
これは引き算と見なされる。10引く1というわけだ。
ドットの扱いにも注意が必要だ。
my %hoge = ( foo.bar => 1 );
このように文字同士だとstrict環境下でエラーになる。だが数値同士ならエラーにならない。
my %hoge = ( 1.1 => 'foo' );
この場合、「1.1」というキーが生成される。
また、vの扱いにも気をつけなければならない。
my %hoge = ( v1 => 'foo' );
上記は「v1」というキーが生成されるが、
my %hoge = ( v1.1 => 'foo' );
上記はエラーになると思いきや、エラーにならずバージョン文字列に変換されてうまく動いてしまう。
標準関数等も文字列として扱われる。
my %hoge = ( rand => 'foo', undef => 'bar', );
関数を展開したくば()をつけると良い
my %hoge = ( rand() => 'foo', undef() => 'bar', );
アンダーバーの扱いにも注意する必要がある。
my %hoge = ( a_a => 'foo', );
これは「a_a」というキーが生成され、正しく動いてくれる。が、数値同士を繋いだ場合は話が別だ。
my %hoge = ( 1_1 => 'foo', );
これは「11」というキーになってしまう。この問題は1_1と11が等価であることに起因する。気をつけたし。
しっかし、「,」と「=>」はほぼ同じと言っておきながら「=>」を使う場合は裸の文字列の扱いに対する注意が多すぎて困る。
やはり文字列は文字列で明示的にシングルクォート等でくくるのが一番なんじゃないだろうかと思う今日この頃である。
唐突にClass::Data::Inheritableのソースコードについて説明してやんよ。
使い方とかの説明はこの辺でも読んでから出直して来い、ごるぁ!
まぁとりあえずソース見てみろ、下記にはっつけてやっからよぉ!
1: package Class::Data::Inheritable; 2: 3: use strict qw(vars subs); 4: use vars qw($VERSION); 6: $VERSION = '0.06'; 7: 8: sub mk_classdata { 9: my ($declaredclass, $attribute, $data) = @_; 10: 11: if( ref $declaredclass ) { 12: require Carp; 13: Carp::croak("mk_classdata() is a class method, not an object method"); 14: } 15: 16: my $accessor = sub { 17: my $wantclass = ref($_[0]) || $_[0]; 18: 19: return $wantclass->mk_classdata($attribute)->(@_) 20: if @_>1 && $wantclass ne $declaredclass; 21: 22: $data = $_[1] if @_>1; 23: return $data; 24: }; 25: 26: my $alias = "_${attribute}_accessor"; 27: *{$declaredclass.'::'.$attribute} = $accessor; 28: *{$declaredclass.'::'.$alias} = $accessor; 29: } 30: 31: 1;
短いソースだなーこれ。でもな、なめんじゃねーぞ。短いけど色々な技術が盛り込まれてんだよコレはよぉ。
ハイ、まず3行目。
かるくstrictについて説明してやんよ。心して聞けよオマエラ。
strictっつーのはだな、つまりPerlにおける曖昧な部分をすこーしだけチェックしてくれるスグレモノなんだなコレが。
とりあえずざっくり言うと三つの機能があってだな、下記のよーに書くわけだ。
use strict 'vars'; use strict 'subs'; use strict 'refs';
varsってーのは簡単に言うとmyとかourとか宣言しろボケってやつですわ。
subsは裸体は許さんってやつですの、$とか%とかついていない裸の文字列をエラーにしてくれんだよ。
refsってのが一番やっかいな代物でな、これはムツカシイ言葉で言うとシンボリックリファレンスってんだが、要は変数名に変数を使うとエラーにしてくれるってこったよ。
で、これら全部ひっくるめてuse strict;なんだな。わかったか?オラ!
ちゅーことはだ、3行目を見ると意図的にrefsだけ外してるのがわかるよな。
つまりコレはこのコードのどこかで変数名に変数を使うってことを明示していることにもなるわけだ。けけけ。
あーもういいもういい、次だ、次。
4,5行目を見てみろよ。今時our使わずにuse vars使うなんてどんだけー。
ははは、まぁまてよ。
ourってのは明示的にグローバル変数を定義するもんなんだが、このourってやつが導入されたのがPerl5.6からなんだよ。
Perl5.5のころはourなんてなかったからグローバル変数定義すんのにこのuse varsを使っていたわけだ。
つまりこのモジュールはPerl5.5環境でも動くように配慮しているわけなんだな、ちゃんちゃん。ほほほ。
あーもう全然すすまねーよ。チクショウ、が、ま・・・・。
で、11-14行目。これはref関数使って$declaredclassがオブジェクトだったら死ぬって処理だ。
require CarpっつーのはCarpモジュールを動的にロードしてるっていうことだよぅ。
で、Carp::croak関数使ってエラー文はいて死ぬ、と。ちなみにこのCarp::croakってはまぁdie関数みたいなもんなんだ。
違いとしてはエラーの発生した原因を呼び出し元の奴のせいにして自分は悪くないんだよってアピールすることかな。まぁ実際使ってみりゃわかるよ。
さぁ、16行目。本編突入だ。長かった。長い道のりだったなお前ら。
sub {}ってのは無名サブルーチン(関数のリファレンス)ってやつだ。で、ここで注目すべき点はただひとつ!!!!!
19-23行目あたりをぼーっとみてると$declaredclass, $attribute, $dataっていう変数を使用していることがわかる。
これらの変数は9行目で受け取ったmk_classdataへの引数だ。
ここで問題が発生する。
myで宣言された変数の賞味期限はスコープの終端だ。それはわかるな?
つまり9行目で宣言された$declaredclass, $attribute, $dataといった変数どもは29行目のスコープの終端で消滅してしまうわけだ。
しかし!その消えてしまうはずの変数どもをsub {}という無名サブルーチンの中で使用してしまっている!!!
これが世間一般に語られているクロージャという仕組みなのだ!!!!!!うはははははははh!!!
本来生涯をまっとうするはずだった変数たちが別のサブルーチンの中にまぎれてしまうとその別のサブルーチンが消えてなくなるまでは死ぬことを許されなくなるのである!!!ざ・不☆老☆不☆死!
なんたる奇妙奇天烈なことであるが、この現実を受け入れることによってお前らの道が開けるんだ!!!すげーだろぉがよぉ!!
ボクはッ、キミがッ、クロージャを受け入れるまでッ、殴るのをやめないッ!
さて、肝心の16-24行目のアクセサ部分の処理の解説だけども、
引数が渡されてなければ特になんの処理もせずに$dataを返している。$dataってのは死ぬことを許されなくなったカワイソウな変数君だ。
つまり、Class::Data::Inheritableってやつはアクセサに渡された値をどこで保存してるのかというと、紛れも無いこの$data君に他ならない。
$data君がニート君になっちゃうとたちまちデータの読み書きができなくなるのであまり働かせ過ぎないように注意しよーね!
ハイ、次はアクセサに引数が渡された時の処理だけどな、20行目を見てみろ。$declaredclassに格納されてる値はmk_classdataメソッドを使用したときに格納された値になる。
package Hoge; use base qw/Class::Data::Inheritable/; Hoge->mk_classdata('hoge_accessor');
つまり上記の処理で例えると、$declaredclassには'Hoge'という文字列が入ってることになんだな。
で、この'Hoge'と$wantclassに入ってる値を比較しているわけだが、
package Hoge; use base qw/Class::Data::Inheritable/; Hoge->mk_classdata('hoge_accessor'); Hoge->hoge_accessor('aaa');
上記の処理で例えると$wantclassには$declaredclassと同じく'Hoge'が入ってくることになんだな。うっひょー。
んで、20行目のif文は$wantclassと$declaredclasが違う場合にだけ19行目の処理を実行しているわけだからこの場合はスルーするわけだぁ。ひょひょひょ。
じゃあだな、$wantclassと$declaredclasが違う場合ってどんな場合?ってことだが、下記に例を示すから目ん玉引ん剥いて網膜から直接見てみろよこのボケ野郎どもが。
package Hoge; use base qw/Class::Data::Inheritable/; Hoge->mk_classdata('hoge_accessor'); package Foo; use base qw/Hoge/; Foo->hoge_accessor('bbb');
HA!HA!HA!こういう場合だよ米ベー。$wantclass=Fooで$declaredclas=Hogeになるんで19行を実行し、Fooをベースにしてmk_classdataを呼ぶことでFooに同じ名前の新たなアクセサを提供し、元クラスHogeの値を壊さないようにするわけですなぁ。
考えた人すごいですなぁ。これがClass::Data::Inheritableが継承可能なクラス変数といわれる由縁でするまする。
で、最後の26-28行目はコレらの便利な処理をしてくれる$accessorさんをクラスに登録するというわけですよぉ。
27,28行目の*ってのは型グロブ変数ってという奴で、型グロブに対して無名サブルーチンを突っ込むと動的に関数を定義できるんだなぁコレが。
でここで、初めに俺が語った話を覚えてるか?へっ、オマエラなら覚えてないだろうなけっけ。use strictの話だよ。refsだよrefs。
ここでrefsを省いていたのが利いて来るんだ。refsって何だった?ホラ言ってミソ?
で良く見てみると型グロブ変数に対して「$declaredclass.'::'.$attribute」っていう変数を使おうとしているよね?これをしたかったからrefsだけ仲間外れにしてたわけですね。
はは。
あー、あー、あー。
これで終わりだよぅ。みんなわかったかな!?
コレ読んでもわからんやつはもう死ぬか、もしくはわからん用語について死ぬほど調べてもっかい読みなおしてみろこのド低のぅッ・・・ごふんごふん、このクサレ脳みそがぁ!!!!!!!!!!!!11