現在のマルチスレッドプログラミングの抱える問題点と、代替案をわかりやすく解説いたします。最近登場したConcurrent Revisionsも解説します。
uupaa.js や mofmof.js には {@hoge 〜 }@hoge のようなコードブロックを切り落として Minify する機能があるので、「ソースコードにテストもドキュメントも全部埋め込むことが可能だな〜」って3年程前から考えてました。 そこで、Function.prototype.spec というメソッドを追加し、これにスペックを書き貯めたらどうだろうか(?)とか考えました。 たとえば Array.range(1,7) で [1..7] 的な連続した数値の配列を生成する Array.range 関数があったとすると // Array.range - range generator function Array_range(begin, // @param Number: begin end, // @param Number: end filter) { // @param
とくにMacやiPhoneのプログラム開発で最初にわからなくなるのがこのあたり。Appleもそれは理解していて、Your First Mac Applicationの中のUnderstanding Fundamental Design Patternsという章にまとめてあります。 僕もまだ慣れてないので、その文章を読んでの現時点での理解を下にまとめておきました。 Model-View-Controller その昔、僕がBASICでプログラムを書いていたときにはデータもコードも一緒くたで、すぐにスパゲッティ・コードになったものでした。Javaのようなオブジェクト指向言語を使うようになって、データ構造部分とその表示部分とは切り分けた方がいいと学びました。 たとえばRPGを作っているときに、体力点とか技術点のような主人公の基礎データを保管・管理する部分と、それらを画面に棒グラフなどで表示する部分
_ テストコードを作らない文化が浸透している現場へRuby/Railsが導入された結果への対策を考えてみる まず、導入された結果は以下のようになっております。信じられないものもありますが、事実です。 1. マージが頻繁に行われる開発中はNoMethodErrorや文法エラーが続出。必要なコードのマージ漏れまで発生 2. 修正の度に人力テストが必要となり、コスト増大 3. これまで以上に責任論が追求される現場となる 4. コスト増加を恐れるあまりリファクタリングはおろか、巨大な迂回処理やコピペが横行する 本プロジェクトには、以下のようなテストコードを作(らない|れない)様々な原因があります。 問題分類 現場への影響
2011年7月8日(金)に行われた第2回TPS/アジャイル研究会での発表資料です。DSLを中心とする要求獲得がもたらす効果を実例を交えながら解説する内容です。
私は最近のバグの傾向、キーワードを組み合わせて連想したネタでバグを見つけることが多いです。見つけないことも多いけど。 これを機械にやらせたらおもしろそう。 https://github.com/seki/Drip/blob/master/sample/tw_markov.rb オフレコなんだけど、githubのDripのsample/に、自分のツイートのログからマルコフ連鎖つかって自分っぽいツイートを生成するスクリプトがあるじゃん?この自分のツイート風文章作成の辞書をバグ票から作ればそのシステムに出てきそうなバグが作れるはず。 んで、やってみた。(あまりに短いのでスクリプトは載せません) うちのRWikiに入ってる数万のストーリーから直近の数千のバグっぽいチケットを集めてきて辞書を作って、バグ報告風文章を作成するシステムを書いてみたですよ。確かにそれらしいバグ報告が生成されます。次はそのバ
「テストコードのリファクタリング - 千里霧中」の続きです。 十分に実施できる方法 テストコードを対象としたリファクタリングの回帰テストについてですが、現実性があり、十分に実施できる方法は主に次の2つとなると思います。 テストコードのインプットとなるテストケース仕様にもとづいて、ミューテーション分析を実施。ミューテーションテストと正常系のテストを実施することで、バグがなければパスし、バグがあれば失敗することを確認する。 テストコードに対する入出力・間接入力(テストフィクスチャからの入力など)・間接出力(Assertionメソッドへの出力等)を、Test Doubleやロギングで網羅的に記録。変更前と変更後で、入出力、間接入力・間接出力が変化しないことを確認する。 ただ現実性があるといっても問題もあります。ミューテーション分析については、テストケース仕様からミューテーションテストの仕様を作成
TwitterでこんなTweetが流れた… エビデンスとしてNUnitのGUIのスクリーンショットと、対応するテストコードが含まれている部分のVSのスクリーンショットを取る作業が終りません・・・ UnitTestのエビデンスって…なに? 一般的にテストのエビデンスというと、次の2点を指す。 テスト手順を明らかにするもの(ex. テスト設計書、テスト仕様書、...) テスト結果の証拠(ex. 画面ハードコピー、DBスナップショット、...) UnitTestでは、これはこのように解釈できる。 テスト手順を明らかにするもの = テストコード テスト結果の証拠 = 今実行すればテストが全てグリーンになること これがなぜか理解されず、軋轢とストレスと大きな工数追加になっている現場がずいぶんある。 なぜUnitTestはいつまでも理解されないのだろう。 余談。これらのことは、Seleniumなどを使
盛り上がってるSleep sort。 僕もどの言語かで実装しようと思ったけどもう色々やられていて悔しいのでまとめてみる。 随時更新。 そもそもの発端 4chan BBS – Genius sorting algorithm: Sleep sort (本家) 常識を覆すソートアルゴリズム!その名も”sleep sort”! – Islands in the byte stream bash 4chan BBS – Genius sorting algorithm: Sleep sort (本家) 4chan BBS – Genius sorting algorithm: Sleep sort C# 4chan BBS – Genius sorting algorithm: Sleep sort JavaScript 話題のソートアルゴリズム「sleep sort」をJavascriptで実
C# 3.0とは何か? C#も順調にバージョンアップを重ね、ついに「3.0」である。連載を開始するに当たり、前置きとしてこの連載で扱うC# 3.0とは何かを簡単に紹介しておこう。 C# 3.0は、動的かつタイプセーフなオブジェクト指向プログラミング言語である。「動的」とは、実行するまで内容が確定しない要素が多いことを意味し、「タイプセーフ」とは、あらゆるデータに「型」が存在し、コンパイル時、あるいは実行時にそれが厳格にチェックされることを意味する。そして「オブジェクト指向プログラミング言語」とは、データとプログラムの入れ物である「オブジェクト」を前提とした言語であることを示す。 しかし、これらの特徴はC# 2.0から継承されたものであって、必ずしもC# 3.0固有のものではない。C# 3.0ならではの特徴とは何だろう? 筆者の個人的な印象だが、C# 3.0は言語が持つ個々の機能について技術
【2016/03/04追記】以前まとめたこのMVACという名前の設計は既に古くなっており、今はこのようなアーキテクチャで設計していません。 こんにちは。最近ははてなでMVACというアーキテクチャに則って開発をしているのですが、ようやく意味を理解できてきました。そこで今回は「Web Applicationを綺麗に設計するためのMVACという考え方」について、サンプルを交えながら説明していこうと思います。かなり長くなってしまったので、時間があるときにでもどうぞ。 MVACって? データソースやロジックを扱う「Model」、表示・出力を管理する「View」、複数のModelとControllerをつなぐApplication、ユーザのリクエストなどを受け取りViewやApplicationを制御する「Controller」の4つの要素を組み合わせてシステムを実装する方式。MVCをさらに抽象化した
SimpleAPIなどで有名な「Webサイトのスクリーンショットを撮ってサムネイル画像を作成してくれる」サービス。 SimpleAPIは、 「1人で作るなら、一気にやるのが重要」SimpleAPI・伊藤まさおさん の伊藤まさおさんが一人で作っています。 今回は、各スクリーンショット提供サービスを紹介した後、実際にこのサービスを作る手順を検証し、さらなる応用サービスにつなげる方法を考えてみます。 Webサイトのスクリーンショットを撮ってサムネイル画像にしてくれるサイト まずは、Webサイトのスクリーンショットを撮ってサムネイル画像にしてくれるサービスとして有名なサイトを紹介しておきます。 SimpleAPI - ウェブサイト・サムネイル化ツール 日本国内、海外からも大人気。ややサムネイル結果が不安定。 Mozshot ページごとにきれいに出力。大規模利用は禁止。 サムネイルAPI APIとし
CSSもHTMLと同じように、ソース中にコメントを挿入することができます。 /*と*/で囲った文字列がコメントになりますが、入れ子にすることはできません。また、他のプログラムにあるような「#」や「//」といった単一行コメントはありません。 適切なコメントを挿入することで、複数人での作業するときや、時間がたってから編集するときなどにコードの見通しが良くなります。ブラウザ間の差異を埋めるための宣言やハックなんかも、適用させるブラウザ名や理由などをきちんとコメントで書いておきたいですね。 僕は、スタイルをグループに分けて記述するときなど、コメントを目立たせるために次のように記述しています。 /* ------------------------------ Header ------------------------------ */ div#header { } . . /* -------
C言語標準ライブラリの乱数rand( )は質に問題があり、禁止している学会もある。 他にも乱数には様々なアルゴリズムがあるが、多くのものが問題を持っている。 最も多くの人に使われている乱数であろう Visual Basic の Rnd の質は最低である。 そもそも乱数とは 乱数とは、本来サイコロを振って出る目から得られるような数を意味する。 このような乱数は予測不能なものである。 しかし、計算機を使って乱数を発生させた場合、 次に出る数は完全に決まっているので、予測不能とはいえない。 そこで、計算機で作り出される乱数を疑似乱数(PRNG)と呼び区別することがある。 ここでは、特にことわらない限り乱数とは疑似乱数のことを指すとする。 計算機でソフト的に乱数を発生させることの最大のメリットは、 再現性があることである。 初期状態が同じであれば、発生する乱数も全く同じものが得られる。 このことは
MVCの典型的な相関図 Model-View-Controller (MVC、モデル・ビュー・コントローラ) はUIを持つソフトウェアに適用されるソフトウェアアーキテクチャの一種である。 MVCはソフトウェアを処理/Model・表示/View・入力伝達/Controllerの3要素に分割し、ソフトウェア内部データをユーザーが直接参照・編集する情報から分離する。プレゼンテーション(View・Controller)とドメイン(Model)を分離しまたユーザー入力(Controller)と表示(View)も分離することでソフトウェアの保守性・開発生産性を向上させる。 1979年: パロアルト研究所にてトリグヴェ・リーンスカウクが考案[1][2]。長い間、Smalltalk-80の実装のみが公開され、MVCに関する公開情報はなかった 1988年: 最初の論文「A Cookbook for Usin
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く