タグ

ブックマーク / nishiohirokazu.hatenadiary.org (24)

  • 文字列の解析 その3: 正規表現の歴史 - 西尾泰和のはてなダイアリー

    第1回では文字列から特定パターンの部分を切り出すことがなぜ必要になるのか、そして第2回ではパターンが複雑になるとそれを実装するコードがとても複雑になるということと、その複雑なコードを人間が書くのではなくコンピュータに作らせる「正規表現」について学びました。 ここではその正規表現がどのように生まれてきたのか、軽く歴史を振り返ってみましょう。[1] (注:書きかけです) マッカロピッツのニューラルネット 1943年、Warren McCulloch と Walter Pittsの2人が神経細胞(ニューロン)の振る舞いをモデル化して、複数の神経がネットワークとしてどういう振る舞いをしうるかについての研究を発表しました。[2] 後のニューラルネットワークにつながる研究です。[3] この論文の中で彼らは、複雑なニューロンの接続関係を表現するために、独自の記法を発明しました。 (脚注[1] 今回の話は

    文字列の解析 その3: 正規表現の歴史 - 西尾泰和のはてなダイアリー
  • 再帰呼び出しを再帰呼び出しなしで実現 - 西尾泰和のはてなダイアリー

    拙著「コーディングを支える技術」の第5章「関数」では、P.50で「再帰呼び出しを使っているプログラムは、再帰呼び出しを使わなくても書くことができる」と説明しました。この件に関してここで補足記事として解説することにしました。 P.53の簡単な再帰呼び出しの例(total関数)をターゲットにします。これは空行とコメントを除くと8行の簡単な例です。このコードから、挙動を変えずに再帰呼び出しを取り除いてみましょう。腕に自身のある人はは続きを読む前に自分で実装してみるとよいでしょう。 チャレンジする人向けの注意点 今回の対象では再帰呼び出しをしながら行う処理が「要素の足し算」でした。足し算は順番を入れ替えても結果が同じです。なので、うっかり計算の順番を変えてしまっても、結果からは間違いに気付けません。例えば深さ優先探索を幅優先探索に変えてしまうと、[1, [2, 3], 4]が来の1, 2, 3,

    再帰呼び出しを再帰呼び出しなしで実現 - 西尾泰和のはてなダイアリー
  • manに「cp -rは使うな」と書いてあった話 - 西尾泰和のはてなダイアリー

    cp -rでシンボリックリンクまで実体としてコピーされて困ったのでMacのmanを読んでいたのだが、そもそもcp -rってオプション一覧に載ってない。あれれ?と思って続きを読んでいたら互換性の章でstrongly discouragedと書かれていた。 COMPATIBILITY Historic versions of the cp utility had a -r option. This implementation supports that option; however, its use is strongly discouraged, as it does not correctly copy special files, symbolic links, or fifo's. 代わりに-Rを使うべきだそうだ。その場合のシンボリックリンクの扱いをどうするかはオプションで指定でき

    manに「cp -rは使うな」と書いてあった話 - 西尾泰和のはてなダイアリー
  • JSXからjQueryを使ってDOMの情報を取得 - 西尾泰和のはてなダイアリー

    jQueryなどのような静的型付けのことを何も考えていないサードパーティ製のライブラリをJSXから使えるか? 使えたので報告。 もっとハマるかと思ったけど意外と素直に書けた。mainの最初の1行と最後の2行で「jQueryで最初のpタグを取得してそのinnerTextを取得し、文字列として編集してからコンソール出力」をやっている。間の5行のlogは答えにたどり着く過程を残してある。 import "js.jsx"; class _Main { static function main(args : string[]) : void { var jQuery = js.global["$"] as function(:string):variant; log jQuery; log jQuery("p"); log (jQuery("p") as __noconvert__ Map.<var

    JSXからjQueryを使ってDOMの情報を取得 - 西尾泰和のはてなダイアリー
  • Dive into .git 資料を公開しました - 西尾泰和のはてなダイアリー

    「Gitのいろんな概念が難しい」だって? じゃあ概念は置いといて、「物理的にはどうなってんの?」を確認してみよう! 社内勉強会でそういう趣旨の10分間デモをやった時の資料を公開しました。Gitがどんなものかイメージしやすくなれば幸いです。 Dive into .git語版 View more presentations from nishio

    Dive into .git 資料を公開しました - 西尾泰和のはてなダイアリー
  • 作りたいもの: JavaScriptのコードの質を保つためのガードレール - 西尾泰和のはてなダイアリー

    増井さんの作りたいものリストを作ろうというスライドを見て「確かに『いつかやる』リストに入れてるだけじゃ発展しないから、公開しても問題ないものは公開したらいいなぁ」と思ったので早速やってみました。3つ目。 JavaScriptのコードの質を保つためのガードレール JavaScriptは柔らかい言語で、typoとか変数名の変え忘れが実行時までエラーにならない。しかもしれっとundefinedとかになって、そのままHTMLSVGのpath文字列に埋め込まれてたりしてデバッグにコストが掛かってしまう。人間は間違える生き物だから、間違いをなくすことはできない。だから間違えた時になるべく早く気づけるようにする仕組みが必要だ。 Google Closure CompilerはJavaScriptのソースコードを静的に検証してエラーを報告してくれる。であれば自分がソースコードを編集している時にバックグラ

    作りたいもの: JavaScriptのコードの質を保つためのガードレール - 西尾泰和のはてなダイアリー
  • 作りたいもの: 1歩ずつミッションをクリアすることでGitの使い方を覚えられるゲーム - 西尾泰和のはてなダイアリー

    増井さんの作りたいものリストを作ろうというスライドを見て「確かに『いつかやる』リストに入れてるだけじゃ発展しないから、公開しても問題ないものは公開したらいいなぁ」と思ったので早速やってみました。2つ目。 1歩ずつミッションをクリアすることでGitの使い方を覚えられるゲーム なんちゃらVille系のゲームはどうして人の心をとらえるのか? 「小さい粒度のミッションが提示されて、それを達成すると次のミッションが表示される仕組み」は、頻繁に「達成感」という報酬を与えることで人の心をとらえるのだろうか? そういえば僕が昔書いた、対話的インタプリタで1歩ずつ操作しながらPythonを覚えるコンテンツも評判が良かったなぁ。だったらgitの使い方も、1歩ずつ対話的にミッションをクリアしながら学べるようにしたら面白いんじゃないか? 学習ユーザのユースケース 実は既にgithubにおいてあったりする。一応遊べ

    作りたいもの: 1歩ずつミッションをクリアすることでGitの使い方を覚えられるゲーム - 西尾泰和のはてなダイアリー
  • 言語女子会2: varは必要?/privateがない? - 西尾泰和のはてなダイアリー

    言語女子会: undefとnullは両方必要?の続編です。 varは必要なの? とあるプログラミング言語が集う女子会にて: Python: JavaScriptちゃんってさ、なんでvarだらけなの? JavaScript: えっ、変? Python: varなんかいらなくない?私ぜんぜん持ってないよ? JavaScript: えー、じゃあ変数をどうやって宣言するの? Python: 宣言っていうか…「x = 1」みたいな代入文があれば変数xが必要なのって自明じゃない?宣言とか必要? Ruby: 必要ないよね。っていうか変数宣言とか古臭くない? JavaScript: そうかなー。 Python: 少しダサイかも。ほら断舎離ブームだし要らないものは捨てなきゃ! JavaScript: 要らないかなぁ、変数宣言。Pythonちゃんは関数がネストしているときに外側のスコープの変数に代入するのって

    言語女子会2: varは必要?/privateがない? - 西尾泰和のはてなダイアリー
  • 言語女子会: undefとnullは両方必要? - 西尾泰和のはてなダイアリー

    Twitterのタイムラインが面白すぎて、ついうっかり言語を擬人化して脳内で言語女子会なるものを開いてしまいました。なお、登場人物と実在の人物は1対1に対応しません。 undefinedとnullの両方必要なの? とあるプログラミング言語が集う女子会にて: Perl: そういえばさ、なんでJavaScriptちゃんってundefinedとnullの両方もってるの? JavaScript: えっ、未定義の変数にアクセスした時undefined返したいじゃない? Python: 例外投げて死ねばいいじゃん Ruby: 例外投げて死ねばいいよね Python & Ruby: ねー♡ Java: いやそこは参照型ならnull、数値型なら0で初期化すべきでしょ C: これだから最近の若い子は…初期化にだってコストが掛かるんだからね!デフォルトで初期化するなんて無駄遣いよ!必要な人だけが責任をもって初

    言語女子会: undefとnullは両方必要? - 西尾泰和のはてなダイアリー
  • セキュリティ&プログラミングキャンプ「Rubyのバグを探せ」問題 - 西尾泰和のはてなダイアリー

    これはセキュリティ&プログラミングキャンプのCTF競技(タイムトライアルのチーム戦)で出題された問題です。Ruby処理系へのバグの仕込みと問題文の原稿を僕が書き、竹迫さんが競技環境で実行するための調査や加筆を行ってくれました。参加者のShota Fukumori (sora_h)が「21日に『セプキャン行ってきたトーク』するから早く公開しろ」というので、取り急ぎ公開します。 問題文 これはプログラミング言語クラスでのタイムトライアル処理系デバッグ演習のために作られた、バグの混入してあるRuby処理系のソースコードです。C言語で書かれています。誰も着手しなかった「veryhard」の問題なので、解説を加筆してCTFの問題とします。 言語クラスではRuby処理系のビルドの仕方やテストのためのツールを2日目に演習し、3日目の朝に「1時間で8問のバグを易しい順に倒す演習」(タイムトライアル処理系デ

    セキュリティ&プログラミングキャンプ「Rubyのバグを探せ」問題 - 西尾泰和のはてなダイアリー
  • gitチートシートv0.3 - 西尾泰和のはてなダイアリー

    http://www.nishiohirokazu.org/tmp/git03.pdf 今日はツッコミ役の人はお休み。

    gitチートシートv0.3 - 西尾泰和のはてなダイアリー
  • gitチートシートver0.2を公開して情報デザイン出身の人に激しく突っ込まれた日記 - 西尾泰和のはてなダイアリー

    http://www.nishiohirokazu.org/tmp/git02.pdf あまりに激しく突っ込まれたので「ちょ、ちょっとまって、続きはまた今度で」とお願いして逃げ帰ってきました。 「リポジトリって何」「変更履歴を溜めておく場所」 「これ書き換えるのはどこ」「<name>のところ」「じゃあ斜体にするか色変えるかいっそ日語にしなきゃ。かっこごと灰色とかにしないとかっこを入力しちゃうよ」 「コマンドの部分を箱で囲むなり書体を変えるなりプロンプトつけるなりが必要」 「コミットをするって何?」「変更履歴をリポジトリに入れること」 「なんで『最初の』コミットなの?最後のコミットはあるの?」 「コメントでの解説の色を変えろよ」 「『.gitにできる』ってどこ?急に思いついて作っていいの?いつもhomeにいるとは限らないでしょ」「いまいるディレクトリの中。思いついて作っていいよ」「2回 g

    gitチートシートver0.2を公開して情報デザイン出身の人に激しく突っ込まれた日記 - 西尾泰和のはてなダイアリー
  • もっとよいGitチートシート - 西尾泰和のはてなダイアリー

    世の中にGitのチートシートはいくつかあるけど「Gitを知らない人に渡して最初に読んでもらうのに適したもの」が見つからない。チートシートじゃなくてチュートリアルと呼ぶべきかもしれないけど、とにかく印刷してA4で1枚になるくらいの資料が必要だ。Gitに触れた技術者が軒並み同じ落とし穴でコケるのは正しい状態ではない。「Gitには、indexっていう『コミットする前にワークツリーで行った変更のうちのどの部分をコミットするか整理するための場所』があるんだよ」とか「git revertはsvn revertと違っていきなりリポジトリに変更を加えるから気をつけて」とか最初に言ってもらえればもっとスムーズに進めたはずだ。 というわけでどういうチートシートが必要かに関して考えてみる。 登場人物 http://www.ndpsoftware.com/git-cheatsheet.html このチートシートが

    もっとよいGitチートシート - 西尾泰和のはてなダイアリー
  • gitまとめ - 西尾泰和のはてなダイアリー

    いろんな異なるバージョンのプログラムを管理したい、というわけで、gitを使うことにしました。cvsやsvnやhgやgitはいままで長いこと使ってきていたけども、ブランチをたくさん作るスタイルで使ったことはなかったもので。案の定つまずきまくりなので自分が後で参照するためにここにまとめていくことにする。入門Gitが手元にないので調べられない…あのにこういう問題にぶち当たったときの解決方法が書いてあった気がするのに〜 ブランチfoo上で、来ブランチbarで編集するべきa.pyを編集してしまう ブランチfoo上で、来ブランチbarで編集するべきa.pyを編集してしまい、ブランチbarをcheckoutしてそこで反映しようにもfooとbarでa.pyの内容が違うため「error: You have local changes to 'a.py'; cannot switch branches.

    gitまとめ - 西尾泰和のはてなダイアリー
  • そろそろ例のプロジェクトについて言及するか - 西尾泰和のはてなダイアリー

    以前、とあるシステムのソースコードを読む機会があったのだけどあまりにひどかった。あのひどいコードでまあまあまともに動いているというのが逆に信じられない。今日昼ご飯をべながら少し話していたのだけど意外と知られていないようなので、話せる範囲でいかにひどいのか説明してみようと思う。 まず、ソースコードが大雑把に見積もって3750万行あるのだけど、その中でまともに機能しているコードは3%しかない。10分の1程度のソースコードで同程度の機能を実現しているシステムもあるのでほんとあのシステムのコードはゴミだと言っても過言じゃない(*1) プログラマとしてはなんでそのプロジェクトはそんな状態になってしまったのか気になるところだけども、まあ多くのプロジェクト同様、真相を知る人は誰もいない。でもまあ、実際に機能しているコードのコピーみたいなものがあちこちに散らばっていることからしてコピー&ペーストが盛んに

    そろそろ例のプロジェクトについて言及するか - 西尾泰和のはてなダイアリー
  • 焼畑農業をやめるために---新卒準備カレンダー 2011春 - 西尾泰和のはてなダイアリー

    by Lior Shapira under CC BY-NC-ND 2.0 このエントリーは新卒準備カレンダー 2011春という、みんなで仕事に関して自分が考えることなどをエントリーに書いていく企画で書かれたものです。 渋川さんの話を聞く会のつもりが、なぜかいつの間にか名前入りで「新卒準備カレンダー 2011春 : ATND」を作られていたので、空気を読まずに農業の話をします!! お前だれよ? 西尾泰和と申します。サイボウズっていうグループウェアの会社のサイボウズラボっていう研究部門子会社で、まあ研究とかをしています。一番最近のアウトプットはこのブログの右サイドバーに出ている「 Amazon.co.jp: WEB+DB PRESS Vol.60」で「言語設計の基礎知識」という特集を書いたことかな。そうそう、3年くらい英語版のプロフィールページしか更新していなかったら3年前の日語版を最新版

    焼畑農業をやめるために---新卒準備カレンダー 2011春 - 西尾泰和のはてなダイアリー
  • マインドマップ日記6(分散リポジトリの発展について) - 西尾泰和のはてなダイアリー

    今日のお話は分散リポジトリがどう発展してきたか。センターイメージも枝もないのでマインドマップと呼ぶのは正しくないけどまあこの前のgitマインドマップの続き物なので。 かつてリポジトリってのは1個だけあって、そこにコミットするものだった。黄色円筒がリポジトリ、顔が人でそのそばのはワークツリー。リポジトリとワークツリーの間でchekout/commit/updateする。 この時代「コミット」は二つの行動の抱合せであった。それは「変更履歴の記録」と「変更の公開」だ。複数人での共用リポジトリの場合コミット即公開であった。それが嫌ならばリポジトリをサーバにおかず自分一人で使うことになる。 「変更履歴の記録」のためには、なるべく細かい単位でコミットをした方がいい。その方が各々のチェンジセットの意味が明確になる。しかし「変更の公開」のためには、そのコミットの後でチェックアウトした人のところでビルドが通

    マインドマップ日記6(分散リポジトリの発展について) - 西尾泰和のはてなダイアリー
  • 首都圏で引っ越す人が知らないともったいない情報 - 西尾泰和のはてなダイアリー

    「引越れんらく帳」にお客さまのお名前や引越先のご住所などを登録しておけば、電気・水道・ガスなどの引越に関する手続きで何度も同じことを入力する手間が省けます。他にも、NHK、クレジットカード、損害保険等々、主要な企業の住所変更などにも対応しています。 東京電力 引越コンシェルジュ すごい、こんなものがあったなんて。1回住所や電話番号、メールアドレスなどを入力したら、東京ガスや水道局は違うウェブサービスなのにちゃんとデータが引き継がれてさくさく入力できる。12分くらいで電気とガスの手続きを完了した。水道はお客様番号をメモしてこなかったので後でやろう。

    首都圏で引っ越す人が知らないともったいない情報 - 西尾泰和のはてなダイアリー
  • 未踏ユース現役生に贈る言葉 - 西尾泰和のはてなダイアリー

    未踏ユースには、分野をまたいだ横方向のつながりを作るために未踏ユース採択者が一堂に介して「自分はこれから何々をする!」と発表しあう「ブースト会議」がある。そして、各年度ごとの横のつながりを作るだけではなく、縦にもつながりを作って網目を作ることも重要だ。だから例年何人かのOBが呼ばれて発表をすることになっている。僕も未踏ユースの1期生(平成14年)として、なんども参加させてもらった。 ところがだ、当然ながらOBの数はどんどん増加する。時間は有限だ。会場も有限だ。どうしても初期のように時間制限無し・人数制限なしで自分がやったこと、今関心を持っていること、現役生に伝えたいことを発表する、ってのが難しくなってくる。そこで気づいたんだが、当に「発表」というフォーマットである必要はあるのか? 年度をまたいで未踏ユース採択者同士のつながりを作る、という目的のためには発表である必要はない。伝えたいことを

    未踏ユース現役生に贈る言葉 - 西尾泰和のはてなダイアリー
  • Perlでオブジェクト指向を復習中 - 西尾泰和のはてなダイアリー

    ところで my $counter = {"value" => 0}; print "$counter\n"; # HASH(0x1008001f0) bless $counter, Counter; print "$counter\n"; # Counter=HASH(0x1008001f0) てなことをやるとuse strict時には「Bareword "Counter" not allowed」って言われる。bless $counter, "Counter";なら大丈夫。 説明の都合で明示的にパッケージと参照をblessしたいわけなのだが、文字列でやるのはどうなんだろうか?パッケージがファーストクラスのオブジェクトであるような誤解をさせないために明示的に文字列でblessするべきなのか、それとも余計なことに気を取らせないためにBarewordでやっちゃうべきなのか。もちろん普通はCou

    Perlでオブジェクト指向を復習中 - 西尾泰和のはてなダイアリー