はてなキーワード: Perlとは
SE歴6年目。
ソフトウェア品質管理から基幹系業務アプリケーション開発に移り3年、
いまだにプログラミングの面白さが分からない。
COBOLだのperlだのrubyだの、必要に応じて言語を変えてはシステムを作ったり、
永遠とストアドを組み続けたり、それなりに開発業務には携わってきたと思う。
でも得意な言語は?と聞かれたらこれと言って無い。
参考書を買うものの読み切るのは1割程度しかない。それも読むだけ。
買う理由も「覚えないとヤバイ」というプレッシャーで買うばかりだ。
たまに凄いWebサービスに出会うと興奮して、こういうサービス作りたいな、と考えが巡り
先駆けて開発環境を構築したりするけど、構築した時点で満足してその情熱も1日で冷めてしまう。
IT技術には興味はあるが、細部の技術に触れると途端にめんどくさくなる。
この業界、向いてないんだろうか。
それにこの業界に携わり続けたいという気持ちも全くない。
現在28歳。
これから何処に向かっていいのか分からなくなってきた。
流行は追っておこうな。
俺は今はPHP/Ruby使いで、昔使ってたPerlはもう忘れちゃったけど。いわゆる「モダンPerl」の流れで、Perlは1年くらい前から再評価されている。
Plack、Catalyst、Coro、AnyEvent、Mooseなど、むしろPerlは最近機能が全部揃っているイメージがある。
Perl基礎文法最速マスター - Perl入門〜サンプルコードによるPerl入門〜
http://d.hatena.ne.jp/perlcodesample/20091226/1264257759]
Route 477 - Ruby基礎文法最速マスター - , 1. 基礎 , 2. 数値 , 3. 文字列 , 4. 配列 , 5. ハッシュ , 6. 制御文 , 7. サブルーチン , 8. ファイル入出力 , 知っておいた方がよい文法 , 余談 , (おまけ)Ruby書籍紹介
http://route477.net/d/?date=20100125]
http://www.1x1.jp/blog/2010/01/php-basic-syntax.html]
http://d.hatena.ne.jp/dplusplus/20100126/p1]
昔勤めてた会社の人が「年にひとつぐらいは(仕事以外で)新しい言語、フレームワークに触れるといいよ」みたいなことを言っていたのでこれを機に(正直好きではなかった)Perlもはじめてみようかなと。
Java基礎文法最速マスター - 何かしらの言語による記述を解析する日記
http://d.hatena.ne.jp/nattou_curry_2/20100130/1264821094]
LLじゃないのも出てきたので改題。このへんいっぱつで Mece になるようにできないのがしょぼいなー。
ところで増田ではカギ括弧でくくってもリンクが正しく認識されないしhttp記法のタイトルもリンクにならないしイケてないのなんとかできないのかな。
大学教育について話題になっているようですので、私が卒業した、大阪大学基礎工学部情報科学科について書いてみたいと思います。
大阪大学基礎工学部情報科学科は、昭和45年に最初に国立大学に設立された情報工学関連学科のうちの一つで、コンピュータサイエンスの分野では日本で最も古い歴史を持っている学科、ということになります。
情報科学科の特徴は、そのプログラミング実習の充実ぶりです。入学すると、まずPascalというプログラミング言語で構造化プログラミングを勉強することになります。次にアセンブリ言語であるCASLを勉強し、Pascalとアセンブリ言語を応用してC言語を勉強します。またその後、スクリプト言語であるPerl、関数型言語のML、オブジェクト指向言語としてJavaを学習します。
また、言語だけではなく、コンピュータサイエンスの基本であるアルゴリズムやデータ構造についても幅広く学ぶことができます。
全ての実習は課題が出され、実際にコードを書かなければいけません。例えばC言語の授業の最終的な課題は、「shのようなシェルプログラムを作成すること」でした。最終的には、「Pascal風の言語をCASLに変換するコンパイラを作成する」という課題に取り組むことになります。
大阪大学は全体的に単位の取得が厳しいことで知られていますが、情報科学科も例外ではありません。もしプログラミングをあまりしたことがないのであれば、遅くまで実習室にこもることになると思います。だけど、それは情報工学の世界で生きていくためには必要な知識なのです。
実習で勉強する言語は、Javaを除くとあまり現在使われている主流の言語とは言えないのですが、様々な言語を学ぶのは「プログラミング言語はそれぞれに違いがあり、それぞれに適した用途がある」ことを理解することに繋がります。また大学を卒業してから、新しい言語を学ぶ必要が出てきたとき、それに対応する能力を磨くことができます。
日本の大学で、ここまで実戦的なコンピュータに関する教育を行っている場所はあまりないのではないか、と思います。コンピュータがどのように動いているのか、内部原理までしっかり教えてくれます。卒業生の進路は、研究者というよりは、エンジニアとして開発の現場で働くことが多いようです。
大阪大学の入試問題は、東大や京大と違って特殊な問題はそれほど出ません。努力でなんとかなるレベルだと思います。
情報工学は新しい分野なので、大学院で研究するために必要な知識は他の分野ほど多くありません。このため情報工学科では、3年生の夏に大学院の試験を受けて合格すれば、学部を卒業しなくても4年目から大学院に進むことができます。この仕組みを活用すれば、5年で大学院を卒業できます。実際、学部生の1/4くらいはこの仕組みを活用しています。
もちろん、ここに書いたのは情報科学科の全てではありません。ネットにも他に情報がありますし、もし興味があったら、大学のオープンキャンパスに行ってみるのもよいと思います。
コンピュータの世界は変化が激しくて、エンジニアとして生きていくのはとても大変ですが、それでもいい、プログラマとして将来何かを作りたいんだという人であれば、ここはそのための力を与えてくれるはずです。進学先として検討してもらえたら幸いです。
◆日本でしか生きていけないと将来破滅するリスクがあるので、世界中どこでも生きていける戦略のご紹介
日本依存症は、国家依存症の一種であり、会社依存症とよく似ています。
会社依存症とは、ある特定の会社でしか通用しないスキルばかり蓄積して、他の会社では通用しない人材になってしまう病気です。
会社依存症にかかると、その会社の経営が悪化して、どんどん待遇が悪くなり、給料を下げられ、「このままここにいても、少しもいいことがないまま年を取っていくだけ」という状況になっても、ひたすらその会社にしがみつくしかなくなります。
また、会社の都合で延々とつまらない仕事をさせられたり、いまいち納得のいかない降格や減給をされても、なかなか拒否しにくくなります。
上司や同僚と相性が合わず、人間関係がこじれてギスギスした雰囲気になり、毎日会社へ行くのが憂鬱になっても、そこに居続けるしかありません。
なぜなら、その会社を辞めると、ほかに行くところがなくなり、路頭に迷ってしまうからです。
このため、このことがよく分かっているエンジニアなどは、その会社の独自製品や独自環境でしか通用しないスキルしかたまらないような仕事をできるだけ避けるようにします。
そして、「広く普及しており、かつ中長期的に需要があり、供給が不足ぎみで、かつ陳腐化しにくいスキル」を戦略的に蓄積します。
たとえば、以下のようなものが考えられます。
・要求分析、要求仕様定義、システムアーキテクチャ設計、RDBスキーマ設計、サーバの負荷分散設計、各種サーバのパフォーマンス解析・チューニング、デザインパターン、マルチスレッドプログラミング、システム管理、ネットワーク管理
・マネージメント、プロデューサ・デザイナ・経営者・営業・顧客との交渉スキルや連係プレースキル
・普遍性の高いコンピュータサイエンスの基礎
・Unix、RDB、正規表現、Java、Perl、TCP/IP、.NET、C#
日本にはたくさんの会社があり、それぞれが浮き沈みを繰り返しています。
いまいる会社が今後もずっと浮いたままだという保証はありません。
一つの会社に依存しきると、その会社が沈むとき自分まで一緒に沈んでしまい、酷い目に会います。
いまいる会社が沈みそうになったら早めに別の会社へ移れるように準備しておくべきではないでしょうか。
国家に対しても同じことが言えます。
政府は全ての国民を幸せにするような政策を実行するべきですが、必ずそれに成功するとは限りません。
ときに間違った政策を行い、多くの犠牲者を出すこともあります。しかも、その犠牲者を救済するための政策が実行されないこともあります。
もっと最悪なことに、間違った政策で、国全体が沈んでしまうようなことすらあります。
もちろん、そうならないように、われわれは選挙で正しい政策を実行してくれる政治家に投票すべきですが、常に正しい政策を実行してくれる政治家が自分の選挙区から立候補してくれるとは限らず、自分以外の人々が常に正しい政策を実行してくれる政治家に投票してくれるとも限らないというのが、世の中の現実です。
だから、どんなに自分が正しい政治行動を取っていても、おかしな政策が実行され、自分の将来が危うくなるリスクは常に存在します。
たとえば、金持ちばかりが得をし、平均的な労働者が搾取される最悪の格差社会になってしまうかもしれません。
あるいは逆に、今後スキルアップし、キャリアアップし、実力を身につけて高い年収をゲットしようと思っているのに、高額所得者の所得税が大増税されて、酷い搾取に苦しむようになるかも知れません。
あるいは、少子化対策で、実質的に独身税をかけられたのと同じような状態になり、結婚するつもりも子供を作るつもりもない人たちの生活の質がかなり落ちるかも知れません。
あるいは、国の医療システムが疲弊しまくって、まともな医療サービスを受けられなくなるかも知れません。あるいは、まともな治療を受けようとしたら、恐ろしく高い料金を徴収されるようになってしまうかもしれません。
あるいは、地方格差を埋めるため、都市部の住民を徹底的に搾取し、地方にじゃんじゃんばらまくような政治が行われるかもしれません。そうすると、田舎に住む人間の暮らしはよくなるかもしれませんが、今後も都市に住み続けるつもりの人間の暮らしの質が大きく低下するかも知れません。
あるいは、非正規雇用を減らし正社員を増やすという名目で、おかしな規制がかけられ、予期せぬ副作用が出て逆に多くの人が職を失うことになるかも知れません。余波で、自分まで失職するかもしれません。残された正社員の自分に酷いしわ寄せが来るかも知れません。
労働者保護や消費者保護という名目で、過剰に企業の手足を縛るような規制がかけられて、企業の活動が阻害されて経済が悪化したり、企業がどんどん日本から逃げ出すかも知れません。雇用が減り、治安が悪化し、日本が住みにくい国になるかも知れません。
要するに、投資において、全ての資産を一点がけするのが危険な投資戦略であるように、自分の生活基盤となる国家を一カ所だけに限定してしまうのも、極めて危険な賭なのです。
この国にずっと住み続けるのが一番賢い戦略でした。
しかし状況は変わりました。
いまや日本よりも豊かな国や都市がどんどん生まれつつあります。
日本などよりも、はるかに先行きの明るい国や都市がたくさんあります。
本来、この惑星には、たくさんの国家があり、それぞれ浮き沈みを繰り返しています。
いまいる国家が、今後もずっと浮いたままだという保証はありません。
一つの国家に依存しすぎると、その国家が沈んでいくとき、酷い目に会います。
いまいる国家が沈みそうになったら、早めに別の国家に移れるように、準備しておくべきではないでしょうか。*1
こういうことを言うと、「おまえに愛国心はないのか?」と言い出す人間が時々いますが、依存症と愛国心とは別の話です。
これは、結婚において、夫を愛していることと、夫に依存することが異なるのと同じことです。
経済的にも精神的にも自立していることと、夫を愛することは両立します。
夫婦仲は冷め切っていて、夫の暴力に怯えながら暮らしているにもかかわらず、夫に経済的に依存しているためにガマンし続けているような状態は、とても健全だとは言えません。
むしろ、特定の国にまったく依存していないにもかかわらず、その国を愛し、その国に貢献することこそ、純粋に打算抜きの愛国的な行為なのではないでしょうか。
そもそも、「いろんな異性とつきあってみて、そのなかから最高のパートナーを見つけ出して結婚する」というのは、少しもおかしなことではありません。
「1人の異性しか知らず、最初につきあった異性と一生添い遂げなければならない」というのはいかにも古めかしい道徳観念です。これは国家についても同じことです。たまたま日本に生まれたからと言って、日本と一生添い遂げなければならないということはありません。
むしろ、さまざまな国に住んでみて、そのなかから、自分にいちばんあった国に落ち着き、添い遂げる、という人生も十分にありなのではないでしょうか。
日本以外で暮らしたことのない人々の中には、日本だけが世界で唯一暮らしやすい場所で、日本以外には暮らしやすい場所などないと信じて疑わない人もときどきいるようですが、そんなことは決してありません。
むしろ、日本よりもはるかに、晴天の日が多く、気候が温暖で、からっとさわやかで、毎日気持ちよく暮らせる国や地域がたくさんあります。
食べ物も美味しく、人々も気持ちよく、街の各種施設も充実しており、遊び場所もたくさんある快適な都市は世界中にたくさんあります。
どんなところでも、けっこう住めば都なのです。
また、日本以外の国は治安が悪くて暮らしにくいという偏見を持っている人もいますが、どんな国でも、きちんとした安全対策を講じ、危険な地域に近寄らないようにすれば、それなりに安全に快適にくらせるものです。
それに、どうせネット環境さえあれば、世界中どこでも、twitterやtumblrやmixiで遊べるし、ブログのコメント欄でクネクネすることもできるし、2ちゃんでだらだら過ごすことも出来るし、エロ画像をダウンロードすることもできるし、はてブで脊髄反射的なコメントを付けることもできるし、はてなスターを連打しまくって顰蹙をかうこともできるのです。
「わたしは(この国に生まれたというより)この惑星に生まれたのだ」という感覚を持ちながら生きるというのは、広々とした感じがして、なかなか気持ちの良いものです。
せっかくこの美しい惑星に生まれたのに、日本という小さな小さな島国に引きこもったまま一生を終えるのは、じつにもったいないことではないかと思えてきます。
●依存症からの脱出は難しい
ギャンブル依存症、アルコール依存症、買い物依存症、恋愛依存症、セックス依存症、たいていの○○依存症は、そこから抜け出すのに苦労するように、日本依存症も、一度それにかかると、そこから抜け出すのにかなり苦労します。
また、タバコ依存症から抜け出すために、さまざまな方法があるように、日本依存症から抜け出すにも、さまざまな方法があります。
日本依存症から抜け出す一番効果的な方法は、実は、英語力をアップすることではなく、日本の外でも安定した収入源を得られるようにすることです。(もちろん、最低限の英語力は必要ですが)
これに一番効果的なのが、資産運用で暮らせるようにすることです。
利回りのよい債権や株式に自分の資産を分散投資し、運用することは、どこの国に居住していてもできます。
日本の国債や株式で資産を運用していたとしても、日本に住んでいなければ運用できないということはありません。世界中どこに住んでいても、日本の国債や株式で資産運用することは可能です。
それどころか、そもそも、日本の国債や日本の株式で資産を運用しなければならないということはありません。
むしろ、全資産を円ベースに一点がけしてしまうと、今後円安が進んだときに、自分の資産が大きく目減りしてしまうというリスクを抱え込むことになります。
資産は、全世界に分散投資しておいた方が安全だし、世界全体の経済は、多少の波はあるものの、中長期的にはつねに成長し続けているので、正しくポートフォリオを組んで、世界中に分散投資しておけば、それほどひどいことにはなりません。
だから、いったん資産運用で暮らせるだけの資産を蓄積してしまえば、日本依存症からの脱却はかなり容易になります。
ここで、「日本がキャピタルゲイン課税の大増税を行ったら、資産運用では暮らしていけなくなるのではないか?」という疑問がわく人もいるでしょうが、そうでもありません。
まず、税金の徴収には、属人主義と属地主義の二つの方式があります。
日本は属地主義なので、自分が居住している国や地域に税金を納めることになっています。
このため、日本でキャピタルゲイン課税の大増税が行われたとしても、海外で暮らしている限り、影響を被ることはありません。*2
現在、属人主義を採用しているのは、アメリカとフィリピンぐらいなもので、極めて例外的なケースです。
ですから、今後日本が属人主義に変更するリスクは、とても低いと思われます。
また、万一、日本が属人主義に切り換えたとしても、ある程度の資産を持つ人間に国籍を与えてくれる国は、けっこうあります。
日本が属人主義に切り換え、さらにきわめて重いキャピタルゲイン課税をかけてきたら、単に国籍を切り換えればいいことです。
ただ、問題は、資産運用で暮らせるようになるほどの資産を蓄積することが難しい、ということです。
そのため、当面は、収入の全てを資産運用だけで稼ぎ出すのではなく、収入の一部だけでも資産運用で稼ぎ出すような状態を目指してみてはどうでしょうか。
そうすると、日本がヤバくなったので、脱出して海外で職を得たのはいいが、最初のうちはまだ英語にも不慣れで、十分な収入を得られないというようなケースでも対応できます。
たとえば、前述のUnix、Web、RDB、Java、Perl、.NET、C#など、世界中に普及している技術の場合、そのスキルを身につけることで、日本依存から抜け出すことができます。
また、これらに関連する要求仕様定義、オブジェクト設計技術、デザインパターンを適切に使いこなしたクラス設計、プロジェクトマネージメント、スケジュール管理なども、特定の国家に依存しないスキルです。
これらのスキルを身につけたITエンジニアは、さまざまな国で職を得ることが出来ます。
実際、ボクの知り合いでも海外で働いているプログラマーがいます。
むしろ、日本よりも快適に働いているようです。
もちろん、これらの技術は、会社依存症から脱却するための技術としても有効で、きわめて安全性の高い技術だと言えます。
これらの標準的なITスキルは、このように、会社や国家を超越して有効ですが、それ以上に驚きなのは、かなりの長い時間をも超越する力を持っているということです。
たとえば、unixの基本アーキテクチャはボクが知っているだけでも十数年、ほとんど変わってません。マルチスレッドプログラミングやデザインパターンも十数年前に身につけたスキルは、かなりの部分、いまでもそのまま役に立ちます。はるか昔に覚えた、クロージャや再帰を使ったさまざまなプログラミングテクニックも、RDBのスキーマ設計のスキルも、ほとんどが、いまだに現役です。
TCP、UDP、IP、HTTP、SMTP、POPなどのプロトコル類もいまだに基本はほとんど変わりません。新しく登場した.NETやC#にしても、過去にマスターしたスキルにほんのちょっと上積みしたぐらいのわずかな薄皮でしかなく、いままで蓄積した基本スキルはそのまま通用します。Haskellのような関数型言語ですら、似たようなコンセプトのプログラミングアーキテクチャは昔からあり、十数年前にマスターした技術の延長線上でなんなくマスターできます。
このように、長期的に安定した技術やスキルを選んで身につけるようにすれば、会社、国家、時間を超えて、安定した収入源を確保できるのです。
ただ、注意しなければならないのは人材の需給バランスです。とくに、インドや旧共産圏からのプログラマの大量供給は要注意です。
一方で、ヨーロッパ、BRICs、VISTAなど、世界中で急速に経済が発達しており、ITエンジニアの需要が今後も全世界的に巨大化し続けるのは確実です。
ここでのポイントは、下級エンジニアや中級エンジニアは、需要はそれほど拡大しそうにないのに、供給は膨大になると思われるので、リスクが大きいということです。
つまり、下級エンジニアや中級エンジニアの場合、海外に行くと、日本にいたとき以上に悲惨になる可能性があります。安易に日本から出て行くべきではないでしょう。
一方で、上級エンジニアは技術分野にもよりますが、今後、世界中で爆発的に需要が拡大することが見込まれていますが、供給が不足する可能性は十分に考えられます。
従って、自分が今後上級エンジニアになる可能性があると考えている人たちは、この戦略に沿って日本依存症から脱却しておいたほうが良い可能性が高いです。
あと、もう一つ考慮すべき点は、上級エンジニアになるような人は生産性が高いため、今後、高額所得者になる可能性があるということです。
今後、この機運の盛り上がりに押されて、高額所得者を狙い打ちする形で大増税が行われ、酷い搾取の対象にされるリスクもあります。
このリスクに対する保険という意味でも、早めに日本依存症を治療し、いつでも仕事と生活の場を海外に移せるようにしておいた方が安全かもしれません。
日本人が海外で暮らしてみると、さまざまな小さなニッチビジネスのチャンスに気がつくことがあります。
たとえば、日本にはあって当たり前なのに、その国にはない商品やサービス。
それは、日本のやり方を現地方式にアレンジすれば、それなりに繁盛する商売ができるかもしれません。
あるいは逆に、その国のおもしろい商品やサービスで、アレンジすれば日本でもウケそうなもの。
もしくは、現地の安い人件費を利用して、何かを作らせ、日本に持ち込むというパターンもあるでしょう。
実際、ネパールに小さな工場をもっていて、そこで自分のデザインした服を作らせ、日本に輸入して販売しているという女性に会ったことがあります。
こういうビジネスのネタをみつけたとき、スモールビジネスを興すスキルを持っていると、そのチャンスを活かして、その国で商売をはじめることができたりします。
とくに、最近急速に豊かになったアジアの国々では、日本がかなりブランドになっています。
とくに富裕層は、日本のさまざまな質の高い品々やサービスを求め、日本の産物に信仰のようなものを抱いています。
これをうまく利用することで、いろいろなニッチビジネスを作り出すことができるかもしれません。
スモールビジネスのスキルとは、小さな会社向けのマーケティング、マネージメント、経理などのスキルです。
たとえば、どんな小さなビジネスでも、どんな商品を、どんな顧客に売るのか、そのために、商品にはどのような魅力がなければならないのか、顧客は、どういう理由でその商品にお金を払うのか、どのようにして利益が出る構造になっているのか、などのビジネスモデルを組み立てなければなりません。
そして、いざ、ビジネスプランが出来たら、場合によっては人を雇い、契約を結び、信頼関係を作り上げ、法律に則って取引しなければなりません。関係者全員が気分良く仕事できるように、win-winの構造を作り出す必要があります。
また、さまざまな法律を調べ、その法律に則ってビジネスを運営する必要があります。
さらに、会社を設立し、会計ソフトで帳簿を付け、経理と資金の管理をする必要があります。
また、予算計画を立て、融資なり出資なりで資金を調達する必要もあります。
こういう小さなビジネスを最小限の規模ではじめてみて、いざ、顧客の反応が上々だったら、しだいに規模を拡大していけばいいのです。
思ったより反応が悪ければ、早期に撤退するか、あるいは、やり方を変えて再度トライしてみたりすればいいでしょう。
そして、スモールビジネスの醍醐味は、たまたま大ヒットしたときのうまみです。
日本のサラリーマンの頂点とも言える、上場企業の社長の年収でも、たかだか4000万円にしかなりません。
これに比べ、スモールビジネスをヒットさせた場合、実質的に年収1億円を優に越えてしまうということは、それほど珍しくないのです。
実際、ぼくの知り合いにもそういう人がいます。
「たかが自営業」とばかにできるようなもんでもないのです。
自営業は、あたると凄いんです。
どのようなモデルで日本依存を脱却するのであれ、共通して必要な Permalink | 記事への反応(0) | 22:10
元ネタ http://phpspot.org/blog/archives/2009/12/phpjavascriptph_1.html
面白そうだと思ったので僕もやってみた。モジュールはPerl5.8系の標準モジュールのみ利用可という制限。
全部はキツイので関数処理関係の関数(http://php.benscom.com/manual/ja/ref.funchand.php)だけ実装してみた。
use strict; use warnings; =head2 call_user_func $ret = call_user_func($function,@param); $ret = call_user_func([$class,$method],@param); example1 sub plus { $_[0] + $_[1] } print call_user_func('plus',10,20); # 30 example2 package Foo; sub plus { $_[1] + $_[2] } package main; print call_user_func(['Foo','plus'],10,20); # 30 =cut sub call_user_func { my $proto = shift; if ( ref $proto eq 'ARRAY' ) { return $$proto[0]->${\$$proto[1]}(@_); } else { require Pod::Functions; if ( $Pod::Functions::Flavor{$proto} ) { return eval qq{$proto(\@_)}; } else { no strict 'refs'; return $proto->(@_); } } } =head2 call_user_func_array $ret = call_user_func_array($function,\@param); $ret = call_user_func_array([$class,$method],\@param); example sub plus { $_[0] + $_[1] } print call_user_func_array('plus',[10,20]); # 30 =cut sub call_user_func_array { return call_user_func(shift,@{+shift}); } =head2 create_function $code = create_function($args_str,$code_str); example $code = create_function('$c,$d=1','print $c+$d'); $code->(10); # 11 =cut sub create_function { my $args = shift; my $code = shift; my $default = 0; my @args = split /,/,$args; my $code_str = 'sub {'; for my $arg (@args) { if ( $arg =~ /^\s*(\$[a-zA-Z][\w]*)\s*(?:=\s*(.+))?\s*$/ ) { my $val = $1; my $def = $2; if ( defined $def ) { $default = 1; $code_str .= qq{my $val = \@_ ? shift : $def;\n}; } else { die 'parse error' if $default; $code_str .= qq{my $val = shift;\n}; } } } $code_str .= $code . '}'; my $sub = eval $code_str; die $@ if $@; return $sub; } =head2 forward_static_call $ret = forward_static_call($function,@param); $ret = forward_static_call([$class,$method],@param); =cut sub forward_static_call { call_user_func(@_); } =head2 forward_static_call_array $ret = forward_static_call_array($function,\@param); $ret = forward_static_call_array([$class,$method],\@param); =cut sub forward_static_call_array { call_user_func_array(@_); } =head2 func_get_arg $arg = func_get_arg($no) example sub foo { print func_get_arg(1) } foo(100,200); # 200 =cut sub func_get_arg { my $n = shift; package DB; @DB::args = (); () = caller(1); return defined $DB::args[$n] ? $DB::args[$n] : undef; } =head2 func_get_args @args = func_get_args() example sub foo { print join ':', func_get_args() } foo(11,22,33); # 11:22:33 =cut sub func_get_args { my $n = shift; package DB; @DB::args = (); () = caller(1); return @DB::args; } =head2 func_num_args $arg_count = func_num_args() example sub foo { print func_num_args() } foo(11,22,33); # 3 =cut sub func_num_args { my $n = shift; package DB; @DB::args = (); () = caller(1); return scalar @DB::args; } =head2 function_exists $bool = function_exists($func) example sub foo {} print function_exists('foo'); # 1 print function_exists('bar'); # 0 print function_exists('rand'); # 1 =cut sub function_exists { my $func = shift; return 1 if exists &$func; require Pod::Functions; return $Pod::Functions::Flavor{$func} ? 1 : 0; } =head2 get_defined_functions $funcs = get_defined_functions() =cut sub get_defined_functions { require Pod::Functions; return { internal => [ keys %Pod::Functions::Flavor ], user => [ grep { exists &$_ } keys %:: ], }; } =head2 register_shutdown_function register_shutdown_function($func,@param); register_shutdown_function([$class,$method],@param); =cut { my $REGISTER_SHUTDOWN_FUNCTION = []; sub register_shutdown_function { my $proto = shift; push @$REGISTER_SHUTDOWN_FUNCTION, [ do { if ( ref $proto eq 'ARRAY' ) { $$proto[0]->can($$proto[1]); } else { require Pod::Functions; if ( $Pod::Functions::Flavor{$proto} ) { sub { eval qq{$proto(\@_)} }; } else { no strict 'refs'; \&$proto; } } }, [@_] ] } END { $_->[0]->(@{$_->[1]}) for @$REGISTER_SHUTDOWN_FUNCTION; } }
思ったよりも難しかった。標準関数一覧を取る手段がなかったので標準モジュールを利用して標準関数の一覧を取得した。
あと文字列から標準関数を呼び出すスマートな手段が思いつかなかったのでeval便りに。
create_functionはかなりゴリ押し。myを勝手に付けたりデフォルト引数にも対応してたり細かい芸が光る(自分で言うな)
forward_static_callはぶっちゃけPerl的にcall_user_funcと殆ど処理が変わらないのでそのまま利用。
func_get_arg系は結構クリティカルだなー。@DB::argsをリアルに使ったの初めてだよ。
register_shutdown_functionはちょっとねー。ENDブロックを利用してるわけなんだけど当然mod_perlとかではうまく動かない。あとシグナルとか使った方が良いのかもしれない。
ヒマがあったら他の関数とかも実装してみたいかも。
※トラバはしてますが話題はマイコーじゃないです。マイコーにハマった若者のちょっと迂闊だったかなって発言に対して、ちょこちょこ考えてみたって文章です。ちなみに私自身は、マイコーは大好きです。
http://anond.hatelabo.jp/20091107102619
そもそも「マスゴミ批判」っていうのがあまりにも短絡的なんだよね。もちろんマスメディアがアレなのはみんな知ってるけれども、じゃあ無かったらどうなる?ていうかマスコミ以外はゴミじゃないの?それって、庶民の第四の権力に対するルサンチマンじゃね?とかとか、いくらでも(一定以上教養のある)オトナは考える。
ニコニコのマイコー動画を観ると「マイコー=神」「マスコミ=神に対する反逆者、ゴミ」という安直なコメントが目立つけれども、あそこのサイトは年齢層が下がるほどアクティブユーザー率が高いので(そもそもニワンゴの親会社であるドワンゴはガキんちょに着メロ買わせて儲けまくって会社だった)、教養ある人は苦笑いで見てます。
そして、その賢い人たちはニコニコが非同期型コミュニケーションであり議論が成立しえないことは理解しているので、それに対する苦言は動画上ではしません。荒れるだけだって分かってるからね。よって、あそこには声のでかい極論ばかりが残ることになる。
マスゴミって単語そのものが2ch内でも痛いとされている板、それをコピペしてるアフィブログ、ニコニコ、それぐらいでしか盛んに使われていないので、気をつけた方がいいです。教養ってもんは文章内の単語のはしっこから判断されます。
国語のテスト(笑)とか言ってたんで中高生かと思ってたら、大学は通ってんのか。うへぇ。
ブコメへ。
「国語のテスト」と表記するのは高卒がいるからだと思う。現に私は高卒。 / 一般的人に教養はいらないような気がする。配達員が大学の資格持っても……あればいいけど、使うことはない。大卒資格よりも免許の方が大事
なんていうかな、決してあなたをバカにするわけじゃないんだけれども、ああ高卒の友人に「教養」を語るとこうなるよな、と懐かしい思いがした。(最近は大卒でもそうなんでホント学歴差別で言ってるんじゃないです)
まず前提として、「教養」ってんのは純然たる知識量とは比例しないんで、「大学教育を受ければ教養人」「院卒なら教養人」「読書人なら教養人」ってんのとは違うんですね。
具体的に名前を挙げると失礼かもなんですが、小飼弾さんとか私の数倍本を読んでいるし、先日出された本では「IT界の知の巨人」などと言われたりしていますが、率直に言えば彼は無教養なんですよ(多分ですけどいわゆる教養人はみんなそう思っていると思います)。無論それは彼が大学中退だからとか、最終学歴は中学だからとか、そんなことは問題じゃあないんです。端的に言うと、彼は「いくら本を読んでも学ばず、知識量そのものが増えつづけるだけ」のマシーンのような方でして、特に社会科学、人文系に関する発言はそれはもうボロボロです。
小飼さんを馬鹿にしても意味がないし、彼はオープンソースだのPerlの世界だので頑張ってるから後の戯言は笑って聞き逃してやれよとも思うので話題を戻すと、じゃあ「教養」とか「知(知識、ではないよ)」とか「常識」ってなんなの?っていうと、一言で表現するならば「だまされない力」「主体的に判断できる力」「他者の意見を受け入れて、それの薫陶を受けつつも、鵜呑みにはせず、考えを止揚させていける力」といったところでしょうか。
つまりですね、「マスゴミは糞だ、信じるな」と言われて「そうだな、糞だ!」と言ってるようじゃダメなんです。いわゆるメディア・リテラシーといってマス・メディアの情報の真偽を自分で判断する力を、増田さんはロクに持ってないですと暴露してしまっているんですね。
ネウヨの話をもうひとつ挙げるならば、「民主なんかが政権を握ってしまった、日本オワタ」「麻生さんがよかったのに」ってんのも、全然ダメじゃないですか。けれども、じゃあ民主があの支持率通り素晴らしい政党かといえば、それも違うじゃないですか。
あなたは教養なんていらないと言ったけれども、残念ながら間接民主制において経済学の知識と政治学の基本、各政党、政治家の特徴に関する知識が皆無なまま生きていくのは、実はかなり危険なことなんですね。私は高卒でも中卒でも、職人のような技ができたり、人望があったり、そういう人間は尊敬しています。が、そういう人だとしても、教養なんか無意味かというと、そりゃあった方がいいと思うんですよ。
年収200万代の知り合いが小泉の郵政選挙で自民党に票を入れたとき、「おいおいお前は共産党に入れた方が絶対に得すると思うぞ」と思いました。私はその時は自民でしたけど、それは率直に言えば金があったからであって、彼の場合左翼政権下の方がとりあえずうまい飯は食えるってことが分かっていない。
何度も言うように「知識」があっても考えられないやつはバカなんですが、「考えるために必要となる知識」はないと困るんですね。本来「教養」とは、よりよく生きるため十分条件ではないですが、必要条件ではあるのです。(必要・十分条件をもしご存じないならばググってください)
話が散漫になってしまい、申し訳ない。「教養」という言葉に関する認識が違ったようなので、できるだけ多めに例を挙げてみたのですが、うまくいったとは言いがたくてごめんなさい。
もちろん勉強することと他のことをするのはトレード・オフ(知らないならググってください)の関係にありますので、そこらへんの兼ね合いは各自にまかせればいいと思っていますが、ある程度は勉強、した方が得だと思いますよ。やっぱり。
10/18 改訂
なお、取得した画像の著作権はグーグル他各社が保持しています。
ご利用は計画的に私的範囲でどうぞご利用ください。
#!/usr/bin/perl use strict; use warnings; use Getopt::Long; use LWP::UserAgent; use GD; my $cmdline = join(" ", $0, @ARGV); my $usage = "usage: $0 -sx=116423 -sy=51603 -ex=116426 -ey=51605 -dx=4 -dy=3 -z=17 -size=300 -get=30 -dir=cache -output=output.jpg -nodebug"; my ($sx, $sy) = (0, 0); my ($ex, $ey) = (0, 0); my ($dx, $dy) = (4, 3); my $z = 17; my $size = 300; my $get = 30; my $dir = "cache"; my $output = "output.jpg"; my $debug = 0; GetOptions("sx=i" => \$sx, "sy=i" => \$sy, "ex=i" => \$ex, "ey=i" => \$ey, "dx=i" => \$dx, "dy=i" => \$dy, "z=i" => \$z, "size=i" => \$size, "get=i" => $get, "dir=s" => \$dir, "output=s" => \$output, "debug!" => \$debug) or die "$usage\nDied"; if ($ex == 0) { $ex = $sx + $dx; } else { $ex++; $dx = $ex - $sx; } if ($ey == 0) { $ey = $sy + $dy; } else { $ey++; $dy = $ey - $sy; } $sx>0 and $dx>0 and $sy>0 and $dy>0 and $z>0 and $dir and $output or die "$usage\nBad arguments"; $dx*$dy > $size and die "Getting too large."; $debug and print "debug: mkdir $dir\n"; mkdir $dir; -d $dir or die "can't make dir $dir: $!"; my $base = sprintf("http://khm%d.google.co.jp/kh/v=46&z=%d", int(rand(4)), $z); my $ua = LWP::UserAgent->new; printf "now get %d images...\n", $dx*$dy; for (my $x=$sx; $x < $ex; $x++) { for (my $y=$sy; $y < $ey; $y++) { my $file = sprintf("%s/%02dz%06dx%06d.jpg", $dir, $z, $x, $y); $debug and print "debug: check of $file\n"; -s $file and next; --$get < 0 and last; my $req = HTTP::Request->new(GET=>+"$base&x=$x&y=$y"); $debug and print "debug: fetch from ".$req->uri."\n"; my $res = $ua->request($req); unless ($res->is_success) { print "fail fetch from $file: ", $res->status_line, "\n"; next; } if (open(my $fh, ">", $file)) { $debug and print "debug: write of $file\n"; binmode $fh; print $fh $res->content; close $fh; } else { print "fail open in $file: $!\n"; } } } $get < 0 and print "reach the getting limit, skip after all.\n"; printf "creating %dX%d image...\n", 256*$dx, 256*$dy; my $image = new GD::Image(256*$dx, 256*$dy); for (my $x=$sx; $x < $ex; $x++) { for (my $y=$sy; $y < $ey; $y++) { my $file = sprintf("%s/%02dz%06dx%06d.jpg", $dir, $z, $x, $y); $debug and print "debug: check of $file\n"; -s $file or next; $debug and print "debug: read of $file\n"; my $part = GD::Image->newFromJpeg($file); $debug and print "debug: image copy\n"; $image->copy($part, 256*($x-$sx), 256*($y-$sy), 0, 0, 256, 256); } } #$image->string(gdSmallFont, 0, 0, $cmdline, $image->colorAllocate(255, 255, 255)); open(my $fh, ">", $output) or die "fail open $output: $!"; $debug and print "debug: write of $output\n"; binmode $fh; print $fh $image->jpeg(); close $fh;
例えば秋葉原とか
perl gmwall.pl -sx=116423 -sy=51603 -ex=116427 -ey=51606
駅だけとか
perl gmwall.pl -sx=465701 -sy=206420 -ex=465705 -ey=206423 -z=19
使う数値はfirebugなどで拾ってください。
たしかにjavascriptをきっちりマスターすれば、それは強みになるかもしれない。
しかし、いかんせんアクが強すぎる。王道になり得ない。
まず、javascriptだけで完結しない。どうしてもサーバサイドが絡む。
いや、javascriptで完結できるよ、と思うかもしれないが、それは特殊だ。ニッチだ。
何を言っても今のところ、javascriptは組込み言語の域を出ていない。
実行環境が特殊過ぎる。
ファイルシステムがあってプロセスがあってネットワークがあるOSに透過な環境で動かない。
DOMがあってHTTPでデータが運ばれてシングルタスク的な環境になってる。
そして、クラス/インスタンスモデルではなく、プロトタイプチェーンモデルだ。
サーバソフトウェアから使い捨てプログラムまで書くような言語ではない。
プログラミングの体験には良いかもしれない。オブジェクトを体験するには良いかもしれない。
しかし、程々にして他の言語に移った方が良い気がする。
javascriptを極める前にマルチリンガルを目指せ。
……。
当たり前か。
一つの言語で満足できるわけない。
田舎から上京して東京のとある著名な私大に在籍。その1年目にして叔父がまさかの倒産。両親が保証人になってたせいで、家族全体として多額の借金を背負う。学費稼ぎのためにコンビにバイトを始めるが、逆に単位を落としがちになり、その結果、育英会の奨学金が止まった。生活で精一杯のため大学を中退することにした。なぜか両親の逆鱗に触れ、勘当される。このとき2000年、成人式を終えたばかりの春だった。
大学中退は高卒扱いだ。学歴を武器に仕事しようと思っていたために、どうやって生きていけばいいのか目標を見失った。一人暮らしだから無職にもなれない。まずコンビニバイトをやめようと思った。
最初は新社会人の就職活動と同じような感覚でマイナビをひとしきり見てたのを覚えてる。ここで給料の相場観を掴み、フロムエーとかanで求人を探した。技術が身につくなら何でも良いと思っていたが、求人からIT技術者人口が相当薄いんだろうという事を感じた。その結果「IT企業で雑用ができる」「初心者歓迎」のような説明のある企業に応募することが多くなった。
IT企業ではないが「システム部門での雑用」ができる中小企業があったので応募。「残業できますんで働かせて下さい、中退した理由は色々ありますが、とにかく仕事がしたいんです」と素直に申し出たところ、賞与がないという条件付きで採用された。月給17万前後。新入社員歓迎の飲み会で全裸になったのが大ウケしたのが良かった。バカ田大学のバカが来たと言うような感じでバカにされながら仕事したが、それでも真面目に雑用をこなしているうちに徐々にシスアドの仕事ができるようになってきた。
この会社で覚えたことは結構ある。
この結果、最終的には社内で使うサイトを構築から任されることになった。資格でもプログラム言語でもないが「仕事する人にとって使いやすいWebサイト(GUI)を作る」というデザイン技術は確実に身についたと思っている。
働き始めて2年目で初級シスアドと基本情報に挑戦して両方とも合格した。このとき情報シスアドも挑戦したが午前科目で不合格。これは翌年も挑戦して合格した。
コツコツ貯めたはした金で、株式にも挑戦する。ちょうど紙幣バラ撒きのパフォーマンスで有名な「あしぎん株」騒動に乗っかり、30万円の大損をする。ここで自分には儲けるセンスがないことを思い知る。しかし仕事に対するモチベーションを大きく上げることになったと思う。
この会社では色々な知識が入ってきてレベルに応じた仕事ができるいい環境だが、入社条件があるだけに、どんなに頑張っても昇給はなさそうだと考えるうちに将来が不安になった。クレジットカードのショッピング枠のリボ返済がきつくなり、返済に追われるように転職を決意する。2006年。
ここで参考にしたサイトは Re就活 と マイコミ。物は試しと色々なIT企業に面接に出向くも、ほぼ全滅。採用されたとしてもマルチまがい商法に参加するような会社だったりして、入社後すぐ辞めたりした。
面接に落とされた原因は恐らく4点。
今までやってきた仕事をどう面接で表現するのか、何が目的で働きたいのか、今から働こうとするその会社に対してどのような手段で貢献するのかを正しく話すことができれば、それだけでいいんじゃないか、と思うようになりました。その結果、会社のニーズとマッチしていないことが分かれば、素直に他あたるのも大事だなぁとも思うようになりました。
上場を目指す会社に運よく入ることができ、年収が1年目350万。しかし社内システム関連業務全体における役付きの地位がまわってきて、このご時勢で入社3年目にして900万まで伸びました。そして今に至ります。
───アタシの名前はRuby。パーザに傷を負った軽量言語。ゆるふわ仕様で動的型付けの愛されランゲージ♪
アタシがつるんでる友達はどうとでも書けるPerl、学校にナイショで
エンタープライズで働いてるPython。訳あって不良グループの一員になってるPHP。
友達がいてもやっぱり学校はタイクツ。今日もPHPとちょっとしたことで口喧嘩になった。
LL同士だとこんなこともあるからストレスが溜まるよね☆そんな時アタシはselfでmodule_evalすることにしている。
がんばった自分へのご褒美ってやつ?自分らしさの演出とも言うかな!
「あームカツク」・・。そんなことをつぶやきながらしつこいRails案件を軽くあしらう。
「カノジョー、ちょっとSNS作ってくれない?」どいつもこいつも同じようなセリフしか言わない。
Railsの男はカッコイイけどなんか薄っぺらくてキライだ。もっと等身大のアタシを見て欲しい。
「すいません・・。」・・・またか、とYARVなアタシは思った。シカトするつもりだったけど、
チラっとRailsな男の顔を見た。
「・・!!」
・・・チガウ・・・今までの男とはなにかが決定的に違う。スピリチュアルな感覚がアタシのカラダを
駆け巡った・・。「・・(カッコイイ・・!!・・これって運命・・?)」
男は_whyだった。連れていかれてCampingされた。「キャーやめて!」Hpricotをきめた。
http://b.hatena.ne.jp/t/%E6%9C%AC%E6%96%87%E6%8A%BD%E5%87%BA
別にいいんだけどさ、細かいところで突っ込む。
なんで、Cなん?w
いや俺もガチでやるならアセンブリ言語とか、Cをやる必要はあると思うよ。
だから工学部のおにーちゃんとかがはじめに習うのは分かるよ。
ハードも意識して書かれたものだし、いろんな意味で教育効果も高い。
でもさ、とりあえず食っていきたいって感じで学んだんだろ?
ベンチャーも含めて色々求人とか見てからその言語に決めたのか?
PerlかPHPかJavaが圧倒的に多いってその時に気付かなかったか?
いや、Cが悪いとは言わないんだ。
ただ、お前が「なんとなくC」を選んだ気がして、ならないんだ。
身体を壊したのはお気の毒だと思うけれども、ちょっとお前計画性なさすぎじゃね?ってオモッタ