サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ノーベル賞
bingo-nakanishi-perl.hatenadiary.org
YAPCが始まりましたね。 去年は参加したのですが(聴衆の方ですが)、今年は非常にとてつもなく残念な事に参加できません。 でも気分だけでもひたりたいのでPerlのお話を少々。 Rubyに備わったブロックという概念 Rubyは言語自体に高階関数をブロックという形でもっており、 eachなどで使われているのは有名です。 例: array = [1,3,5,9] array.each{|i| puts i} eachに与えている { }の部分がブロックです。 自前でブロックを受け取る関数を作りたければ yield を使えばよいでしょう。 今回のお話の内容は「Perlでもブロックを渡せる」ということなので、 eachの機能, yieldの機能は知っておられるという前提で先にすすみたいと思います。 Perlのブロックを使った例 それではRubyの話はこれくらいにしてPerlの話にまいりましょう。 ま
Perlは空気を読む言語といわれています。 確かに楽な言語です。そして楽しい言語でもあります。 しかし、そう思えるようになったのは、Perlをある程度思ったとおりに動かせるようになってからです。 Perlは空気を読んでくれる? Perlが空気を読んでくれるというならば、 あなたがテキトーに書いたソースでも、あなたが思った通りに動いてくれてもいいはずです。 「俺はこういうつもりで書いたのに、なんでPerlはそう思って動かないの!?」 こうなります。 また、空気を読むということでPerlからいきなり、 「今回の実行では、こうしといたよ。 前の実行とはなんとなく違う気がしたから、ちょっとだけ違う動きにしたけど。」 と言われてしまったら困ってしまいます。 プログラムですから、明確な理由がなく毎回違う動きになっては困るのです。 Perlが空気を読むってどういうこと? ではPerlが空気を読むというの
PHPでもクラスベースのオブジェクト指向が書けますね。 しかもPHPは動的型付けではなりませんか、ということは とっても簡単にオブジェクト指向を使って強力なプログラミングが行なえます。 PHPでポリモーフィズム ポリモーフィズムは便利ですね。 すごく便利ですし、プログラムが超スマートになります。 プログラミングの発想も日本語で考えるような発想になって大変自然です。 しかもPHPならダックタイピングで書けます。 次のソースを見てください。 <?php class Dog{ function say(){ print 'わん' . "\n"; } } class Cat{ function say(){ print 'にゃん' . "\n"; } } $animals = array(new Dog, new Cat); foreach($animals as $animal){ $anima
あ、そこの君! だまされたと思ってこれを実行していきなさい。 if( false ){ print "ああああ\n"; } どんな結果になったかね? そうだ。 ああああこう表示されただろう。 ことの発端 この事実に気づいたのは、あるJS使いから if( !false ){ print "ああああ\n"; } が trueにならないんだけど、どういうこと? と質問があったからだ。 とあるC言語経験者の発言 そもそもC言語にも true, falseはないよね。 と言うのは、あるC言語経験者の発言。 ブーリアン型 - Wikipedia C言語では、C89 にはブーリアン型が定義されていない(C99には定義されている)。ブーリアン型がない代わりに true/false は 0 かどうかで判断される。 C++では、標準化の過程で bool、true、false というキーワードが導入され、基本デ
まつもとゆきひろ コードの世界?スーパー・プログラマになる14の思考法 作者: まつもとゆきひろ,日経Linux出版社/メーカー: 日経BP社発売日: 2009/05/21メディア: 単行本購入: 50人 クリック: 1,711回この商品を含むブログ (110件) を見るをすごく楽しく読んでいるとモンキーパッチングという発想がでてきました。 簡単に言うと、クラスを後から(実行時に)書き換えて、能力を追加することである。 起源は他人のバグを後付けで回避するところから始まったとのことです。 Ruby class Bar def initialize(n) @name = n end def say1 puts @name + 'です' end end bar = Bar.new('バー'); bar.say1 class Bar def say2 puts @name + 'やがな' end
私は動的なページを作ってみたいと思いJavaScriptを学び始めた。 今までこうとしか書けないと思っていたモノが、 他の言語では別の方法で書け、 その表現のおかけでパワフルなプログラミングができるといった話がかなり好きなので、 始めはJavaScriptの文法ばかりを勉強していた。 とくに、他の言語の経験者が面白い! ためになる! と思うのはこの本である。 まるごとJavaScript & Ajax ! Vol.1 作者: 天野仁史,舘野祐一,川崎有亮,arton,田中孝太郎,国分裕,山本有悟,海野裕也,nanto_vi出版社/メーカー: インプレス発売日: 2007/02/15メディア: 大型本購入: 8人 クリック: 98回この商品を含むブログ (78件) を見るJavaScriptのこの書き方ってそういう意味だったのか!! といったことや、最近の動向がぎゅぎゅっとまとまっている。
ラジオだと番組へのお便り的なものがありますが、そんな感じで 皆様からいただいた温かくありがたいコメントを紹介させていただきます。 はてなブックマーク - 第5回 リファレンスと無名配列 - bingo_nakanishiの他言語出身者のためのPerl入門 2009-01-11 はてなブックマーク - 第54回 ガベージコレクションについて - bingo_nakanishiの他言語出身者のためのPerl入門 はてなブックマーク - 第56回 クロージャの実践的使いどころ - bingo_nakanishiの他言語出身者のためのPerl入門 はてなブックマーク - 第87回 なかなか理解できないfindコマンドのmanを理解してみた - bingo_nakanishiの他言語出身者のためのPerl入門 はてなブックマーク - 第96回 ペイントでドット絵を書く人はこうやってグリッドを出してい
小さいながらもソースが書けるようになる 初めてのPerl 作者: ランダル・L.シュワルツ,トムフェニックス,Randal L. Schwartz,Tom Phoenix,近藤嘉雪出版社/メーカー: オライリージャパン発売日: 2003/05メディア: 単行本購入: 15人 クリック: 474回この商品を含むブログ (273件) を見る確かに他の言語でプログラム経験があるならいいのだけれども、 いきなりこれからプログラムに入るのは正直つらいところがある。 (だが、まずはここを通らずして次はないと言える) プログラマとして大切なことをPerlを通して理解していきたいのなら、 ぜひ読みたい書籍である。 まずはプログラムを知る 新版 明解C言語 入門編 作者: 柴田望洋出版社/メーカー: ソフトバンククリエイティブ発売日: 2004/08/30メディア: 単行本購入: 17人 クリック: 184
私はJavaは得意ではない。 だが、世の中にはやらなければならないということがあるのだ。 Javaの「仕組み」・「文法」 Java 謎+落とし穴 徹底解明 (標準プログラマーズライブラリ) 作者: 前橋和弥出版社/メーカー: 技術評論社発売日: 2001/12/01メディア: 大型本購入: 8人 クリック: 40回この商品を含むブログ (21件) を見るJavaにポインターはないと誰がいったのだろう。 確かにポインターはないかもしれないが、 もう全部「参照」と言ってもいいくらいなのがJava。 というか「参照」がわかっていないとなにもできないということに気づかせてくれる本。 詳解 Javaプログラミング第2版〈VOLUME1〉 作者: パトリックニーメイヤー,ジョナサンナッセン,Patrick Niemeyer,Jonathan Knudsen,滝沢徹,鈴木憲子,牧野祐子出版社/メーカー:
第55回 クロージャ - bingo_nakanishiの他言語出身者のためのPerl入門 第56回 クロージャの実践的使いどころ - bingo_nakanishiの他言語出身者のためのPerl入門 第58回 クロージャをもっとていねいに - bingo_nakanishiの他言語出身者のためのPerl入門 私は今まで、「クロージャは作られたときの状態を保持する」という言い方をしてきたが、 これは厳密には間違いだったようだ。 状態を保持しているように見える例 use strict; sub h{ my $c = shift; sub { $c++ }; }; my $h = h(5); print $h->(), "\n"; print $h->(), "\n"; print $h->(), "\n"; 結果: 5 6 7この例だと、確かに作られたときの状態を持っており、その状態に変化を
eachなどに与えるブロックは高階関数と考えてよい class Hoge def foo c = 10; [1,2,3].each{|i| puts c} end end Hoge.new.foo 結果: 10 10 10 each{ }の中にいるcは外側のcを見れている。 参考 まつもとゆきひろ コードの世界?スーパー・プログラマになる14の思考法 作者: まつもとゆきひろ,日経Linux出版社/メーカー: 日経BP社発売日: 2009/05/21メディア: 単行本購入: 50人 クリック: 1,711回この商品を含むブログ (110件) を見る クロージャ クロージャについては、 第55回 クロージャ - bingo_nakanishiの他言語出身者のためのPerl入門 第56回 クロージャの実践的使いどころ - bingo_nakanishiの他言語出身者のためのPerl入門 第57
前回は、Perlで書いたのだけど、 Rubyでも書いてみたので載せます。 動的型付け言語と静的型付け言語における多態性 オブジェクト指向では、多態性(ポリモーフィズム)という発想がでてくる。 この多態性を実現する方法を今回は2つ紹介する。 Rubyは動的型付け言語であり、ダックタイピングという手法で、多態性を実現できる。 対して、静的型付け言語であるJavaでは上位の型を作ることで多態性を実現できる(今回はインタフェースを用いてみた)。 ダックタイピング Rubyでのタックタイピングを見てみよう。 human = Human.new dog = Dog.new duck = Duck.new human.touch(dog) human.touch(duck)いま、このようにhumanがtouchすると、おのおのの動物が鳴くソースを書いてみる。 duck(アヒル)はhuman(人間)に触ら
動的型付け言語と静的型付け言語における多態性 オブジェクト指向では、多態性(ポリモーフィズム)という発想がでてくる。この多態性を実現する方法を今回は2つ紹介する。 Perlは動的型付け言語であり、ダックタイピングという手法で、多態性を実現できる。対して、静的型付け言語であるJavaでは上位の型を作ることで多態性を実現できる(今回はインタフェースを用いてみた)。 多態性を用いればif文がなくなるなどの恩恵を受ける事ができる。 (今回はこのif文がなくなる場面については説明はしない) ダックタイピング Perlでのタックタイピングを見てみよう。 my $human = Human->new(); my $duck = Duck->new(); my $dog = Dog->new(); $human->touch($duck); $human->touch($dog); いま、このようにhum
Perlの謎(その1):変数等の頭文字って何を意味するの? - 燈明日記 『&』が付くシンボルは、サブルーチンで、実は『&』を頭に付けるより、尾に『()』をつけてサブルーチンを明示する方が多いです。 おせっかいな、トラックバックで大変申し訳ないのですが、 少しだけ補足をさせてください。 私も初めはサブルーチンの頭に&を付けていたのですが(正確にいうと付けるのか付けないのかすごく悩んでいた)、これはPerl4のときには必要でしたが、Perl5からは不要になりました。 私が教えてもらったときのものを引用します。 関数と演算子 - deq blog Perl の 関数で &あっても なくても文脈で判断してくれると ありますが、、 あれも なんか納得いかないですねぇ 結局 どっちにすべきなんだと。。。 答え:関数呼び出しに単項前置演算子 & は使いません。 もともと,Perl 4ではビルトイン関数
極意1 組み込み関数のカッコは書かない open my $file, '<', 'hoge.txt'; split //, $c; 組み込み関数と自分が作った関数を一発で見分けられるのは有意義だ。 それに、記号が多いと読み辛い! Perlが標準で持っている関数くらい覚えているぜ!! ということをアピールするくらいの勢いで、標準の関数の括弧はなしで!!!! 極意2 変数は必要になったら宣言 my $c = 1; # $cに関する処理 my $d = 10; # $dに関する処理 プログラム言語の中には、関数の先頭で変数を宣言しなければならない言語があるが、Perlはそんなことはない!!! 必要になったときに宣言するんだ!!!!!! 後で読んだときに、変数をすべて頭に入れる必要がなくなる!!!!! 極意3 つなげる my @c = 1..3; for(reverse @c){ print $_
“Selenese” Selenium Commandsを読んでみました。 自分用にまとめてみます。 (勘違い、読み違い等ありましたら教えていただけるとうれしいです。 英語的にわからないところが2割ほどありました.....) 読んだのはココ Selenium - Web Browser Automation コマンドに関しての詳しい説明が書かれています。 ページの要素を検証する UIの要素を検証するのが、 Webページのテストの自動化では、 まあ、もっともよくあることですわな。 そこで、 テスト方法の違いを理解しておくのは大事ですわ ということですねん。 つぎの3つの方法があげられまっせ(まあ例としてやけど) 1. ある要素がページのどこかにあるかどうか? 2. 特定のテキストがページのどこかにあるかどうか? 3. 特定のテキストがページの特定の位置にあるかどうか? Assertion o
Developing Test Cases With Selenium-IDEを読んでみました。 自分用にまとめてみます。 (勘違い、読み違い等ありましたら教えていただけるとうれしいです。 英語的にわからないところが2割~3割ほどありました.....) 読んだのはココ Selenium - Web Browser Automation イントロダクション まあ、IDEは便利ですよと。 IDEをインストールしよう Firefoxのアドオンでいけますよ。 IDEの特徴 メニューバー テストケースを作ったり、開いたり、保存したりできる。 Edit menuは、 コピーしたり貼付けたり、 消したり、 アンドゥしたり、 コマンドを選択したりできる。 オプションメニューでは、設定をいじれる。 特定コマンドのtimeout valueとかいじれる。 保存形式の言語を選んだりもできる(HTMLなど)。 ユ
社会人になって、 LinuxもしくはUnixを使って開発する仕事を任されるなら、 次のコマンドは知っておきたいものです。 (なお、全OSを知り尽くしているわけではありませんので、 下で紹介している動きとは違う動きをするものがあるかもしれません) uname -a -aオプションをつけることで、 OSの名前、バージョンなどたくさんの情報がわかります。 家では1台のコンピュータにしか接続しない場合がおおいかもしれないですが、 会社に入ると色んなコンピュータで作業をしないといけないものです。 いま自分がはいっているコンピュータはなんなのか把握する必要があります。 su ユーザを切り替えることができます。 rootになって作業しないといけないときなどに使います。 id ターミナルを使用中のユーザ名やグループなどがわかる。 suを使っていて「あれ?いま俺、だれだっけ?」というときに使えます。 who
*(アスタリスク)を囲うか? 囲わないか? bashでコマンドを打つときに *(アスタリスク)を使う場面に出くわすことは多いと思います。 find / -name '*.txt'とするとき、 「あれ? クォートいったけ? いらなかったけ?」 「この*(アスタリスク)はbashが展開する? findが展開する?? (たしか、クォートしなかった場合は、bashが展開したような....)」 となってしまいました。 この * をクォートで囲むべきなのか はたまたダブルクォートで囲むべきなのか いやいやクォートせずに使うべきなのか 曖昧な理解をやめるために調べてみました。 シングルクォートとダブルクォートの違いは? http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html こちらを参考に、以下引用を交えて調べていった結果を書きたいと思います。
GROUP BYするときに、countだけでは、うまく集計できないことが多々ある。 それはもう結構ある。 そういうときは、sumとCASEもしくは、sumとDECODEである。 CASEとDECODEの違いは、 CASE と DECODE 関数の違い - オラクル・Oracleをマスターするための基本と仕組み を参考にしていただくとして、ここでは書式に慣れたいと思う。 リンク先で 引用: DECODE( expr, comparison_expr1, ret_expr1, comparison_expr2, ret_expr2, default_expr ); CASE expr WHEN comparison_expr1 THEN ret_expr1 WHEN comparison_expr2 THEN ret_expr2 ELSE default_expr ENDと とてもわかりやすく
JavaScriptは、関数をnewして、 他の言語でいうところのクラスのような使い方をするわけですが サンプル1: var C = function(){ var i = 1; function say_i(){ console.log(i) }; }; とvarを使って書くのか? サンプル2: var C = function(){ this.i = 1; this.say_i = function(){ console.log(i) }; }; とthisを使って書くのか? わかってなかったわけですが.......... var と this はまったく違うもの var と this は、まったく別のもの。 var varは、関数の中だけで生きる事ができる変数。 ちなみに、サンプル1は 以下のように、書いたのと同じ。 var C = function(){ var i = 1; va
前編はご好評いただいたようで、皆様ありがとうございました。 後編に参りたいと思います。 その12. F2 セルの上でおもむろにF2を押すと、マウスでクリックすることなく入力モードになります。 なお、これはExcelとは関係なくファイルやフォルダの名前を変えるときにも使えます。 これでもう右クリックしてからファイル名を変える必要はなくなります。 その13. 移動 Excelでは矢印キーでも移動できますが、矢印キーを使わずとも移動はできます。 viとの比較表を載せます。 vi Excel 右 l tab 左 h Shift + tab 下 j Enter 上 k Shift + Enter 次の検索 検索後 n 検索後 Shift + F4 ジャンプ :行番号 F5後 ジャンプ先のセルを入力しEnter 大きく移動 ワード分移動 w データが入ってるところまで移動 Ctr + 矢印キー 覚え方
新社会人になって、業務を与えられるようになると エクセルをガシガシ使っていくことになると思います。 今回は、これだけは押さえておきたいエクセルの知識です。 その1. 絶対参照 と 相対参照 絶対参照と相対参照を理解するには、 九九の表をつくってみると良いでしょう。 1*1 = 1 ... 9*9 = 81と小学生のときに必死に覚えたアレです。 右上の、数式バーに注目してください。 =C$2*$B3となっています。$は、固定をあらわしています。 なんで $ なの?? 「Sに縦棒が刺さって、固定しているみたいに見えるから$」 と、私は強引に覚えてみました。 この$が使いこなせるとエクセルを使うのが楽になります。 絶対参照とは セルをフィルで選択してコピーしても、同じ場所を指していること 相対参照とは セルをフィルで選択してコピーすると、指しているところが変わっちゃうこと(インクリメンタル、デク
「ドット絵ってどうやって書いてんの?」 そう聞いて........... 「ペイントで」 という返しをくらったことを君も一度はあるだろう。 「え!? ペイントで!?」 「そう。グリッドの表示を使えばいいのさ」 手順1 ペイントは、表示しているものを「拡大」して表示したりもできる。 普通にペイントを立ち上げた状態では、標準の大きさということで、「拡大」はされていない。 「拡大」していない状態ではこの「グリッドを表示」を選択できない。 手順2 そこで、拡大してみる。 手順3 すると「グリッドを表示」を選択できるようになる。
Excelで、 第88回 Excelでちょっとだけアクア風ボタンを作成 - bingo_nakanishiの他言語出身者のためのPerl入門 第89回 Excelでちょっとだけアクア風ボタンの作り方を紹介 - bingo_nakanishiの他言語出身者のためのPerl入門 第90回 Excelでロゴを作ってみた - bingo_nakanishiの他言語出身者のためのPerl入門 第91回 Excelで他にも作ってみた - bingo_nakanishiの他言語出身者のためのPerl入門 第93回 Excelで言語缶バッチを作成 - bingo_nakanishiの他言語出身者のためのPerl入門 第94回 Excelとペイントだけで地面に反射する文字を作れた - bingo_nakanishiの他言語出身者のためのPerl入門 こういったことができるまでに、読めるところまで読んだ本。
第88回 Excelでちょっとだけアクア風ボタンを作成 - bingo_nakanishiの他言語出身者のためのPerl入門 で、ご覧いただいたものの作り方をちょっとだけ紹介。 まずは超簡単なやりかた まずは、紹介したものとは違うのだが、超簡単でそこそこ見栄えがする方法を紹介したいと思います。 こんな感じで、角丸四角形を用意します。 後はグラデーションで塗りつぶすだけです。 このとき、同じような色で「明るい色」と「暗い色」を選びましょう。 光に近いほうを明るい色、遠いほうをだんだん暗くしたい寸法です。 だんだん暗くしたいのでグラデーションを使います。 以上が、超簡単なやりかたです。 こったやり方 では、前回のページでご覧いただいたほうの作り方にいきたいと思います。 まず、角丸四角形を、「青」一色で塗ってしまいましょう。 続いて、大きさが青で塗った角丸四角形の半分くらいの角丸四角形を用意して
SEというと、なんでもかんでもエクセルで作ってしまえる。 という印象をおもちではないでしょうか? ちょっとだけアクア風のボタンと球体を作ってみました。
findコマンドが覚えられない findコマンドというと、 find / -name hogeで、 ルートディレクトリから再帰的にhogeという名前のファイルもしくはディレクトリを見つけてという意味になるのだが、この書式をいっこうに覚えられない。 「えーと、検索を開始するディレクトリはどこに書けばよかったけかぁ...」 となる。 そこで、 「manを読めばいいじゃん」 となるのだが、このmanがむずかしい。 これでは、いけないと思い manを理解するように努めてみた。 これは、 findコマンドを理解してみようと試みた私の試練の軌跡である。 findコマンドのmanを読んでみる findコマンドのmanを見てみる。 今回、重要なところ以外は省略する。 (ちなみに簡単なmanの読み方は ビンゴ中西のほげほげmanのSYNOPSIS(書式)の読み方を参照) NAME find -- walk
みんな、Perlの配列の要素にアクセスするときは、 @ を $ に変えないといけないぞ!!!!! 注意! 注意! またまた注意!! my @c = ('a','b','c'); my $e = $c[0]; こうだぞぉおおおお!! となるわけなんですが........ 本当? じゃあ、 @のままでアクセスするとどうなるのでしょうか? use strict; my @c = ('a', 'b', 'c'); print @c[1], "\n"; my $d = @c[2]; print $d, "\n"; 結果: b cな、な、な、なんだってぇえええええええええ!! うまくいってるんじゃないかぁああ!? と、なっちゃうわけなんですが、 これ実は「スライス」と呼ばれるもの。 スライス 例えば、ある配列があって、その配列から、添字が1の要素と2の要素だけ持った配列を作りたいとします。 すると、P
次のページ
このページを最初にブックマークしてみませんか?
『bingo_nakanishiの他言語出身者のためのPerl入門』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く