タグ

ブックマーク / www.timedia.co.jp (16)

  • JavaScript でオセロを実装する(遅延評価編) | Webシステム開発/教育ソリューションのタイムインターメディア

    これまでのあらすじ 新人の力量を測るための課題としてオセロの作成を指示したが、 指示した当人が作れないようでは話にならないので実際に作り始めた。 一先ず盤面が4×4で黒も白も人間が指す一人二役の寂しいオセロは実装できたのだが、 快適に遊ぶには大きな問題が潜んでいたのであった。 実は4×4で既に重い問題 実際に前回作成したオセロを実行すると、 ゲームが遊べるようになるまでに割りと待たされます。 それもそのはずで、あの実装は ゲーム中で取り得る局面を予め全て列挙 していたからです。 しかも4×4という最小限の盤面のオセロですらゲーム中に出現し得る局面 = ゲーム木に含まれるノード数は 284,881個 あります(※回転すると同じになる盤面等は個別に数えて、同一盤面でも手番のプレイヤーが異なるなら別と数えて、パスした場合も1個と数えています)。 そりゃあ待たされるに決まってますし、無闇矢鱈にメモ

    JavaScript でオセロを実装する(遅延評価編) | Webシステム開発/教育ソリューションのタイムインターメディア
  • エディンバラ大学の関数プログラミングの講義 | Webシステム開発/教育ソリューションのタイムインターメディア

    さて、今日は、いつもとは違ったことを紹介しよう。 Haskellのプログラムをちょこちょこ紹介していたが、今日は、世界に飛び出してみよう。 つまり、日以外、世界ではHaskellでどんなことをしているのだろうか。とくに、大学などで、Haskellをどのように教えているのか見てみよう。 まず、Haskellをやる以上、かならず見るべきサイトがある。 The Haskell Programming Language (www.haskell.org) うまく表示されないときは、新しいタブ・新しいウィンドウに表示させるようにしてみてください。 そして、いままで使ってきたのがGHCなのだが、このGはグラスゴー大学のGなのだ。 ということで、グラスゴー大学で探すと、Functional Programming Research at Glasgowがすぐに見つかったが、文字情報はいっぱいあるものの

    エディンバラ大学の関数プログラミングの講義 | Webシステム開発/教育ソリューションのタイムインターメディア
  • Vim の矩形選択の痒いところに手を届かせる | Webシステム開発/教育ソリューションのタイムインターメディア

    問題 Vim の矩形選択 は便利です。痒いところに手が届く感じの便利さです。 例えば以下のようなコードを編集していて、 一時的に真ん中のブロックをコメントアウトして無効化したくなったとしましょう。 やり方は色々あります。 対象が1行だけなら I# <Esc> で十分です。複数行あるなら最初の行を I# <Esc> でコメントアウトした後に j. を繰り返していけば良いですね。数が多くて j. の連打が難しい場合は vip で選択して :s/^/# /<Enter> という手もあるでしょう。 これ以外に矩形選択を使う方法もあります。 <C-v> で矩形選択を開始し、j 等を連打して適当な範囲を選択し、I# <Esc> こうすれば選択範囲の各行の頭にまとめてコメント文字を入力することが出来ます。 しかし、現実には「 j 等を連打する」といった優雅さに欠ける操作はしません。 ブロック単位でテキス

    Vim の矩形選択の痒いところに手を届かせる | Webシステム開発/教育ソリューションのタイムインターメディア
    Layzie
    Layzie 2012/10/04
  • 対応する括弧等を入力する生活に疲れた(Vim 編) | Webシステム開発/教育ソリューションのタイムインターメディア

    問題 プログラムにせよ何にせよ、 ( と )[ と ]{ と }' と '" と " 等々、対応する文字を入力することはよくあります。 入力それ自体は難しいことではありませんが、 ペアで入力しなければ意味がないため、 場合によっては入力を忘れてしまうこともあります。 特にプログラムを書いているとこの手の入力漏れで構文エラーになることは多々あります。 例えば以下のような感じです: ZapZapZap(Convert.ToInt32(e.Item.Cells[0].Text); まあ何度も ( や [ を入力していれば一個くらい対応する ] や ) を入力し損ねるのは仕方がありません。 しかし入力し損ねる度にしょうもない構文エラーでコンパイルが失敗したりテストが失敗するのは士気に響きます。 もう2012年なのですから、どうにかして対応する括弧くらい自動で入力してもらえないものでしょうか。 解答

    対応する括弧等を入力する生活に疲れた(Vim 編) | Webシステム開発/教育ソリューションのタイムインターメディア
    Layzie
    Layzie 2012/09/02
    AutoCloseから乗り換え検討しよう
  • 名状し難いコードを書く(コメント編) | Webシステム開発/教育ソリューションのタイムインターメディア

    あらすじ 長年プログラムを書いていても、良いコメントを書く技術ってぇのはなかなか身に付かないもので、 良かれと思って書いたコメントでも後々読み返すと書いた当人ですら首を傾げる始末。 長屋に住む八五郎もそんなSEの一人。 ある日、出社すると親方エンジニアがカンカンに怒っている。 どうやら先週末の退社前にレビューしてもらおうと push したコードについてらしい。 特に不味いところはなかったはずだが、はて、何が悪かったのだろうかと親方のデスクモニターを覗き込むと── さっぱり役に立たない <summary> 八五郎は普段から Visual Studio で C# のコードを書いている。 こいつにはXML Documentation Commentsというのがあり、 一定の書式に従って型やメンバーにコメントを書いておけば、 インテリセンスで有意義なメッセージが表示されたりAPI リファレンスの

    名状し難いコードを書く(コメント編) | Webシステム開発/教育ソリューションのタイムインターメディア
    Layzie
    Layzie 2012/08/01
    タイトルがイアイアハスターなのに、内容が落語ww とても良いです
  • 僕が一番 Vim のタブページをうまく使えるんだ(GNU screen 連携編) | Webシステム開発/教育ソリューションのタイムインターメディア

    問題 僕が一番 Vim のタブページをうまく使えるんだ(カレントディレクトリ編)で述べたように、Vimのタブページはとても便利ですが、ちょっと工夫するだけでさらに便利になります。 ところで、一般に Vim を使うような方は黒い画面を眺める機会が多いと思います。 また、端末をより便利に使うために GNU screen 等の端末マルチプレクサーを使用している方も多くいるはずです。 すると、 Vim でソースコードを編集しつつ、時折端末に切り替えて作業する……ということが多発します。 この時、以下の点で不便に感じることがあります。 端末をアクティブにすることが面倒(GUI 版の Vim を使用している場合)。作業用のウィンドウに切り替えることが面倒(GNU screen 内で Vim を起動している場合)。シェルで作業ができる状態になったとしても、 Vim で注目しているカレントディレクトリに移

    僕が一番 Vim のタブページをうまく使えるんだ(GNU screen 連携編) | Webシステム開発/教育ソリューションのタイムインターメディア
    Layzie
    Layzie 2012/05/16
    "「 Vim の中でシェルを動かせばいい」というのは邪教徒の妄言なのでここでは無視しています"→やばい、そんなに使ってないけど、邪教徒認定される!
  • 僕が一番 Vim のタブページをうまく使えるんだ(カレントディレクトリ編) | Webシステム開発/教育ソリューションのタイムインターメディア

    問題 Vimのタブページはとても便利です。 例えばウィンドウを分割して複数のファイルを並行してにらめっこしていたとしましょう。 その最中に誰かからの依頼等で全く関係のない作業をやることになったとします。 このとき、 新しいタブページを開いて、そこで作業を進めて、作業が完了したらタブページを閉じて、先程まで行っていたにらめっこ作業を再開する という形で中断された作業をスムーズに再開することができます。 やりましたね。 しかし、これだけではまだタブページを全力全開で活用しきっているとは言えないのではないでしょうか。 例えば以下のような状況を考えてみましょう: あなたはプロジェクトAとプロジェクトBの両方を開発しています。AとBは相互に連携しています。大抵はAまたはBのどちらかの配下のファイルだけを編集するだけで十分です。時には双方の配下のファイルを並行して編集する必要があります。 このような状

    僕が一番 Vim のタブページをうまく使えるんだ(カレントディレクトリ編) | Webシステム開発/教育ソリューションのタイムインターメディア
  • 僕が一番 Vim の正規表現をうまく使えるんだ(\zs \ze 編) | Webシステム開発/教育ソリューションのタイムインターメディア

    問題 Vim の正規表現はとても豊富で、ベーシックなものからアドバンスドなものまでかなりの道具が揃っています。 これを駆使すればありとあらゆる……は言い過ぎですが、 世の中のテキスト処理の九分九厘を快適に行うことができます。 ただ、あまりにも数が多いので、一体どこから覚えていけばいいのか困りますし、 :help に記載されているものの中には今後の人生で活用する機会があるかどうか分からないものもあります。 手っ取り早く正規表現力を高めて生産性を向上するには一先ずどれを覚えれば良いのでしょうか。 解答 まずは\zsと\zeを覚えましょう。 この2つは正規表現のマッチの開始位置/終了位置を指定することができます。 これだけでは何のことやらさっぱりですが、以下のように応用することができます: 「foobar」の「foo」を指定 foo\zebar で表現できます(Perl 語で言うところの foo

    僕が一番 Vim の正規表現をうまく使えるんだ(\zs \ze 編) | Webシステム開発/教育ソリューションのタイムインターメディア
  • Vim で Git diff の出力からカーソル下にある変更箇所へ移動する | Webシステム開発/教育ソリューションのタイムインターメディア

    問題 パッチのレビューなどでGitの diff の出力を読む機会はそれなりにあると思います。 その際、 diff で列挙されている内容だけでなく前後のコードも確認するために変更のあったファイルを開くことも多々あるでしょう。 Vimにはこの状況にぴったりのコマンドgfがあります。 gf はカーソル下にあるテキストからファイル名らしき文字列を探してそれを開くというコマンドです。 diff の出力には変更のあったファイルのパスが含まれていますから、 そこへカーソルを移動して gf を使えば良いというわけです。 gf はとても便利なコマンドではあるものの、 上記の操作を何度か行っていると不満が募ってきます。 というのも、以下のような手間があるからです: gf を実行するためにパスの書かれている位置までカーソルを移動しなければならない。gf でファイルを開いた後、レビューしたい場所までカーソルを移動

    Vim で Git diff の出力からカーソル下にある変更箇所へ移動する | Webシステム開発/教育ソリューションのタイムインターメディア
    Layzie
    Layzie 2012/02/01
    これはやりましたね
  • Vimでカーソル行のテキストを簡単に選択/処理する | Webシステム開発/教育ソリューションのタイムインターメディア

    問題 世間一般のエディタではカーソルを行頭や行末に移動するキーが C-a だったり C-e だったり Home だったり End だったりと、 それなりに押下し易い配置になっているのですが、 Vim では何を思ったのか ^ と $ という謎のキー割り当てになっています。 この謎のキー割り当てにはそれなりの理由があると思われるのですが、 時々不便に思う場合があります。 例えば「カーソル行のテキストをコピーして他のアプリケーションにペーストする」というシチュエーションを考えてみましょう。 コピー自体は "*yy ですぐできるのですが、これでは改行文字が含まれるため、ペーストした際に悲しい結果を招くことが多々あります。 ^vg_"*y や 0v$h"*y とすれば改行文字抜きでコピーはできるものの、 キー押下難易度の高さにストレスが溜まってしまいます。 どうにかして快適にカーソル行のテキストを選

    Vimでカーソル行のテキストを簡単に選択/処理する | Webシステム開発/教育ソリューションのタイムインターメディア
  • Rubyistよ、irbを捨ててPryを使おう | Webシステム開発/教育ソリューションのタイムインターメディア

    Pryは結構前からgithubのリポジトリを追いかけている人達には認知されていましたが、RailsCastsでも紹介されたことから、Ruby界で一気に広がりを見せています。 ちなみに発音はpra'i(ぷらい)です。英単語で「覗く」などを意味します。 今回はそんな便利なPryについて少し紹介したいと思います。 Pryはirbの代わりになるREPL Pryを一言で説明すると、irbと同様にREPL環境を提供してくれます。 では、さっそくインストールしてみましょう。

    Rubyistよ、irbを捨ててPryを使おう | Webシステム開発/教育ソリューションのタイムインターメディア
  • Reactive Extensions で非同期処理を簡潔に記述する | Webシステム開発/教育ソリューションのタイムインターメディア

    問題 今時の若者ならばHeroku等を利用して手早く Web アプリを作成・公開することが日常茶飯事です。 バックエンドもフロントエンドも今はフレームワークが充実していますから、 高度な処理を簡潔な記述で行うことができます。 しかし非同期処理となると話は別です。 例えばフロントエンドを作るとなると、まずjQueryを使うことになるでしょう。 jQuery は洗練された API で DOM 操作を簡単に行うことができますし、 非同期通信についても $.ajax を使えば煩雑なことほぼ知らずに済みます。 例えばWikipediaの検索フォームは入力補完が行われるようになっており、 検索フォーム文字が入力されると関連するページのタイトルが候補として表示されます。 このような処理を書くとなると以下のようなコードになるでしょう: var showCompletionMenu = function (

    Reactive Extensions で非同期処理を簡潔に記述する | Webシステム開発/教育ソリューションのタイムインターメディア
  • gitで一度行った変更をなかったことにする方法4つ | Webシステム開発/教育ソリューションのタイムインターメディア

    gitでは様々な方法でコミットログを書き換えることができます。 その一例として一度行った変更をなかったことにする方法を4つ紹介します。 問題1: ライブラリの新機能を試すためにあれこれ適当なコードを書いてみた。でももう要らない。 $ $EDITOR $ git commit -am 'foo' $ $EDITOR $ git commit -am 'bar' $ $EDITOR $ git commit -am 'baz' のように適当な区切りでコミットして行ったものの、 結局全部要らないからなかったことにしたいということはままあります。 解答1: git reset –hard HEAD~{n} コミットしたもの全てを歴史から消し去りたい場合は git reset --hard を使います。 この例の場合は3回のコミットを全てなかったことにしたいので、 以下のコマンドで消し去ることができ

    gitで一度行った変更をなかったことにする方法4つ | Webシステム開発/教育ソリューションのタイムインターメディア
  • Vim Version Manager で複数のバージョンの Vim を簡単に管理する | Webシステム開発/教育ソリューションのタイムインターメディア

    ### 問題 ある程度 Vim を常用していると、それなりの頻度で以下のような問題に遭遇します: * HEAD を追いかけていたら手ひどいミスに遭遇した。少し昔のパッチレベルにまで巻き戻したい。 * [最近のバージョンに更新したらプラグインの動作が変わった](https://github.com/kana/vim-textobj-user/pull/3)。どのパッチレベルで問題が起きたか調べたい。 * そもそも最近のバージョンに更新するのが何だか面倒。 * 複数のバージョンを並行して利用できるようにしたい。 しかしこのようなことを手動で管理するのは面倒です。 どうにかしてこのような作業を簡単に行えないものでしょうか。 ### 解決 [Vim Version Manager](https://github.com/kana/vim-version-manager) (以下 VVM)を使います

    Vim Version Manager で複数のバージョンの Vim を簡単に管理する | Webシステム開発/教育ソリューションのタイムインターメディア
    Layzie
    Layzie 2011/09/01
  • gitでアレを元に戻す108の方法 | Webシステム開発/教育ソリューションのタイムインターメディア

    以前gitで一度行った変更をなかったことにする方法4つを紹介しましたが、 日常的に git を使用していると他にも様々な 「なかったことにしたい」「元に戻したい」 という状況に遭遇します。 そのひとつひとつについて対処方法を紹介していきます。 目次 問題1: ライブラリの新機能を試すためにあれこれ適当なコードを書いてみた。でももう要らない。問題2: トピックブランチをマージしたけど実はまだ不完全だった。マージをやり直したい。問題3: リリース後に発覚したバグ。原因は30日前に自分が行ったコミットだった。なかったことにしたい。問題4: 新しいコミットしようとして間違えてgit commit –amendで書き換えてしまった。元に戻したい。問題5: 色々作業していたら作業ディレクトリの内容が混沌としてきた。一度綺麗な状態にしたい。問題6: 作業ディレクトリにゴミファイルが溜まってきた。一度綺麗

    gitでアレを元に戻す108の方法 | Webシステム開発/教育ソリューションのタイムインターメディア
    Layzie
    Layzie 2011/08/21
    ワシのgitコマンドは108式まであるぞ
  • VimとExcelを組み合わせて全く新しいSQLクエリーを生成する | Webシステム開発/教育ソリューションのタイムインターメディア

    問題 ソフトウェア開発はクリエイティブでエキサイティングなものではありますが、いつもそうだとは限りません。 時には泥臭い作業が必要になることもあります。 例えばとある企業で運用されている業務用アプリケーションのメンテナンスを任されていたとしましょう。 時折 「△△部署が○○部署と☆☆部署に分割されたので関連データを移行してください。 対応関係は添付のExcelファイルを参照してください」 のような依頼が舞い込んできます。 これが5個程度なら手作業でSQLクエリーを書いても構わないのですが、 さすがに1万と2千個くらいになると手作業ではやっていられません。 となると何らかの方法で貰ったデータからSQLクエリーを生成することになります。 しかしこのSQLクエリーの生成が案外面倒だったりします。 貰ったデータがCSVの場合、これが素朴なデータならエディターにコピーして適当に置換すればいいのですが

    VimとExcelを組み合わせて全く新しいSQLクエリーを生成する | Webシステム開発/教育ソリューションのタイムインターメディア
  • 1