|
|
|
|
いきなり名曲キタ。反則。舞美、キャプ、のオリメンですやん。キッズ優遇な紺を印象付けさせる選曲。
出だしの高音ソロは愛理。愛理は声量ないけど上手いから(*1)、こういう部分がピッタリだね。れいにゃの猫耳はキャワ。吉澤のシャウトもよい。
(*1) 特に高音の澄んだ声がいい
新曲キタ。ギャグ100の桃子を彷彿とさせるようなのっけから続く愛理ソロ。後列マニアとしてはメンバー全員への均等なパート割が好みなのだが、完全に愛理1トップになってる℃-uteの現状の縮図とも言える。人気2位の舞美は歌唱力的に若干不安が残るし。もし、キルヒアイスが生きていたなら。誰もがそう思わずにはいられない。でも、僕は過去や仮定に固執することなく、この1トップの現実を受け入れようとしている。てゆか、よく考えたら僕、愛理ヲタだし。
いい曲だし好きなんですが、手持ちの枠数が限られている以上、ここはまっさらを期待したかった。(児玉清)
そろそろ秋田>コサック
ちなこ、れいな、熊井さんの並びが綺麗だった。ユニット組んで下さい。是非。
☆从从从 ノノハヽ☆ 从´∇`从 ノノハヽo (^∇^*川 ( ⊃¶つ从 ´ ヮ`)⊂、_¶と .) | | | (つ¶と) | | | (_)_) (_)_) (__(_)
まさかのかっちょええ!この曲はスイッチョンの印象が強くて舞波を想い出しちゃうけど、愛理とnkskちゃんのかっちょええが見れて幸せです。キャプテンの「いきますよ」+「煽り」入りバージョンだったのもグッド。
亀井さんは今回かなり可愛いかった気がします。
キッズ全員で大もてとか。おーいえーおーいえー。感激です。
ベリのソロ紺並の盛り上がり。おいおい言ってタオルを投げて大満足。ベリヲタならこれだけで元が取れる。
あややのカップリング曲らしい。
「次の曲は℃-uteの萩原舞、岡井千聖・・・」この瞬間、キューティーガールズを100%確信してた自分が可愛い。
この曲のよさは理解できない。まったく耳障りだ。コンサートでも何をすればよいかわらないこの曲は騒音でしかない。しかし、この曲の最後の雅ちゃんの裏声の部分は泣ける。
このファイポに納得しているベリヲタは一人もいない。ここはなん恋が正解。マジで。せめて、スッペかジリリ。
正直、どうしていいかわからなかった。でも、それで正解のようだ。
503 :名無し募集中。。。:2007/01/03(水) 01:34:06.42 O
肩身の狭い美誘電ヲタだけど
アイスは未だに乗り方が分からないわサビでフウフウって入れるしかできない
ヒッパレとか唇とか乗れる曲あるんだが |
688 :名無し募集中。。。 :2007/01/03(水) 02:42:36.86 0
バニーでバラードとか悲しすぎて泣けたよな
696 :名無し募集中。。。 :2007/01/03(水) 02:45:09.90 0
>>688
あれは不覚にも吹いてしまった
たそがれて座るような衣装じゃないだろw |
野心はいいね。知ってる曲に出会えてほっとする。
ちょっと古めの曲なら知ってる。
カレーが食べたくなった。
名曲キター。でも、れいにゃがいないのは去年の本体スッペ並に悔しい。他コンでやるのはいいけど、本人が会場にいるときは本人にやってもらいたいよ派。
名曲キター。かもなふぁいやー!これも盛り上がるやね。「夢を夢としないで」とかやっぱ良歌詞すぎるよ。この頃の寺田さん戻ってきて。
これがラストなのは納得。24時間テレビの最後もサライでなくて来年からはこれでいいよ。
スッペもなん恋もまっさらもわっきゃないもないから、絶対アンコール要員だろうと思ってたのだが、会場に電気がついていきなり終わって焦った。合同コンってアンコールないんだっけ?あと、全体DDは少数だし、非推しグループはお互い辛いので、もう少しだけ細分化して欲しい。特に今回はキッズ偏重気味だったので、キッズヲタは大満足だが、本体ヲタは出番が削られた感が大で消化不良だったと思う。そこでワンダ紺スレでは3分割が提案されていた。
| 合同コン3分割案 | |
|---|---|
| キッズ | |
| 娘。中心の辻とか美勇伝 | |
| えるだ |
うん、これがベストだね。各ヲタもみんな納得していたので、夏の合同コンからはこれでお願いします。でも悲しいかな、どこのグループも美勇伝の受け入れを拒否してたのには苦笑。
熊井ちゃん、ヴィトたんが言うには
世界は成立していることがらの総体である |
なんだって。
といった現実世界の色んな「事実」を集めて、それらの事実の論理的な「像」を考えることが世界を「思考」することなんだって。でもね、「否定」は「事実」には含まれないって言うんだ。本当かなぁ?その理由は「否定の絵」を描けないことからもわかるんだって。例えば、「テーブルの上に熊が居ない」という絵を頑張って描こうとしても
| 絵 | 判定 |
|---|---|
| テーブルだけ描く | ただのテーブルの絵だから不可 |
| (↑熊がいない絵と言い張る) | ラクダがいない絵とも言えるから不可 |
| 熊を描いてバツ印をつけ加える | バツは絵の一部ではない (バツという事実はテーブル上にない) |
となってしまって、結局、「否定形の像」は描くことができない。だから、「否定」は「事実」ではありえないでしょ、だってさ。確かに、カントもゲーデルも歴史上のどんな天才だって描けないかもしれないけど、世界で一人だけそんな絵をかける人物を僕達は知ってるよね。
,rn ┌──────────┐ r「l l h │お笑いマンガ道場 │ | 、. !j └──────────┘ ゝ .f _ | | ,r'⌒ ⌒ヽ、 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ,」 L_ f ,,r' ̄ ̄ヾ. ヽ. │ ヾー‐' | ゞ‐=H:=‐fー)r、) | 2コマでっ!! | じ、 ゛iー'・・ー' i.トソ | \ \. l、 r==i ,; |' .人____________ \ ノリ^ー->==__,..-‐ヘ___ \ ┌───────┐ /\ \ │ ∞∞┌┐── │ / |. │ ΘΘ││ 〆χ | │ ξ〆┴┴─ ∈ 彳 / ─────┴────── τソ_/
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| |. 〉/ _ __ .| |. -乙 ヽ( ・)○)⌒v⌒) | |_____________| ̄|. | |. ヽ< 2 / | 〈 ..| | | | ( i^. | |. ーi 彳_ / ヽ ` | | | | | 〉〉 ) .| |. /] 廴, ー' |_| | | |__// / .| |. 〜┤ <_'k ー- ' | | | |__/ 〈 | |. >- ,y ―――― | | | | ) .| |. 「`-! T〈 ` .| | | | ̄ ^ー .| |. |_|―――――――――――――|_| | |_________________________________|
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| |. __ | |. | |_____________| ̄| | |. | | | | | |. | | | | | |. | | | | | |. | | | | | |. | | | | | |. | | | | | |. |_|―――――――――――――|_| | |_________________________________|
熊井ちゃん、2コマだよ。
熊井ちゃん、DQMJのモンスターの生息エリアってどう管理してる?

「モンスター」と「エリア」をエンティティ(リソース)と見做せば、関係テーブルが必要になるのはいいとして、これは運用上変更されない静的な関係だから、このテーブルにIDを導入する必要性は感じないよね。

てことで、テーブルはこんな感じになるんだけど、これって Rails でどう表現すればいいの?n:mなら habtm がピッタリだけど、生息エリアが1箇所のみ(n:1)とすると、 やっぱり habto が欲しいよね。実装はどうしよう?またあの地獄の ActiveRecord::Associations に頑張って追加するの?1.1 と 1.2 で結構違ってるし、そんな体力はないよ。
熊井ちゃん、大は小を兼ねるって言うから、そのまま habtm 使ってみる?
class Monster < ActiveRecord::Base has_and_belongs_to_many :areas end |
slime = Monster.find(1)
=> #<Monster:0xb7093c6c @attributes={"name"=>"スライム", "id"=>"1", "rank"=>"F"}
novice = Area.find(1)
=> #<Area:0xb70858d8 @attributes={"name"=>"ノビス島", "id"=>"1"}>
slime.areas = [novice]
=> [#<Area:0xb70858d8 @attributes={"name"=>"ノビス島", "id"=>"1"}>]
Monster.find(1).areas[0]
=> #<Area:0xb7079768 @attributes={"name"=>"ノビス島", "monster_id"=>"1", "id"=>"1", "area_id"=>"1"}> |
うーん、動くんだけど、配列の表記が不細工だし、empty のケアも面倒だよね。
じゃあ、habtm へのAPIを作ればいいんじゃない?habto て habtm の第一要素へのラッパでいいんじゃない?
ActiveRecord::Base.instance_eval do
def has_and_belongs_to_one(name, options = {})
habtm = name.to_s.pluralize
has_and_belongs_to_many(habtm.intern, options)
define_method(name){ send(habtm).first }
define_method("#{name}="){|*records| send "#{habtm}=", records.compact}
end
end |
class Monster < ActiveRecord::Base has_and_belongs_to_one :area end |
Monster.find(1)
=> #<Monster:0xb70943d8 @attributes={"name"=>"スライム", "id"=>"1", "rank"=>"F"}>
Monster.find(1).area
=> #<Area:0xb70888f8 @attributes={"name"=>"ノビス島", "monster_id"=>"1", "id"=>"1", "area_id"=>"1"}>
Monster.find(1).area = Area.find(2)
=> #<Area:0xb7075c94 @attributes={"name"=>"デオドラン島", "id"=>"2"}>
Monster.find(1).area
=> #<Area:0xb706be74 @attributes={"name"=>"デオドラン島", "monster_id"=>"1", "id"=>"2", "area_id"=>"2"}> |
エリア→モンスターは普通に habtm で。
class Area < ActiveRecord::Base has_and_belongs_to_many :monsters end |
>> Area.find(2).monsters.map(&:name) => ["バブルスライム", "スライムつむり", "エンゼルスライム", "はぐれメタル", "メタルキング", "スライム"] |
habto は内部的には habtm なので、もしモンスターが複数のエリアに出現するような仕様変更があったとしても、そのまま habtm としてアクセスするだけでよいし。(プログラムには全く修正の必要がない)
Monster.find(1).areas = Area.find(:all, :limit=>3)
=> [#<Area:0xb737f228 @attributes={"name"=>"ノビス島", "id"=>"1"}>, #<Area:0xb737f0d4 @attributes={"name"=>"デオドラン島", "id"=>"2"}>, #<Area:0xb737ef94 @attributes={"name"=>"サンドロ島", "id"=>"3"}>]
Monster.find(1).areas.map(&:name)
=> ["デオドラン島", "ノビス島", "サンドロ島"] |
熊井ちゃん、これ意外とCPよくない?また手紙書くね、熊井ちゃん。
舞波。
熊井ちゃん、考えれば考えるほどテーブル設計がわかんなくなってきたよ。なんとかしてー。リソースエンティティは絶対に FK を持たないようにして、関係は全て関係テーブルに追い出したらダメなの?そう考えたら、has_one とか has_many とか何なの?そんなのどこで使うの?なんとかしてー。そんな風に関係テーブルを1つ追加すべきかどうかに関して、必死にテーブル設計を行う一方で、
属性値が多値の場合は別テーブルにするべき |
という大人の願望の押し付けには、縛られたくない!詰め将棋を必死に考えつつも、無駄な持久の手を指すような矛盾というか。なんとかしてー。もう怖くてテーブルが作れなくなったよ、熊井ちゃん。
関係テーブルへの追い出しを敷衍して分解能を最大にすれば、究極的にはリソースの属性なんて全て別テーブルに追い出せるんじゃない?なんとなれば、対象の固体(エンティティ)を捉えるという行為において、殆どの属性が外的な性質なのだから。熊井ちゃんの存在にとって「名前」を持つことは必要条件じゃないから、熊井ちゃんテーブルに名前があること自体ナンセンスだよね。You、名前属性テーブルに追い出しちゃいなよ!つまり、全ての(外的性質な)属性は、その属性を値に持つだけのテーブルへと解体されてゆき、最後に残るのは、
だけになる。それがロックだ!
モンスター(存在)
|
名前関係ケーブル
|
名前属性
| ||||||||||
ランク関係ケーブル
|
ランク属性
|
これだと、あの耐え難い「RDB制約1」からも自動的に解放されている。
モンスター(存在)
|
名前関係ケーブル
|
名前属性
|
(*1) 内的な性質である属性は存在テーブルに入れることはできるが、多くの場合主キー(サロゲートキー)のみとなる
(*2) 各エントリは独立した固体(エンティティ)ではないため、関係テーブルは交差エンティティとは呼べない
上で気になるのは、属性テーブルのエントリは、(*2) で補足した通り本質的にはリソース(存在テーブル)に依存しているという点。つまり、ある属性エントリが、現在所属している存在エントリとは別のエントリから参照(関係付け)されることはないため、交差エンティティが目指すような独立した事象の関連付けという大げさな手段をとる必要がないことがわかる。(図で言えば、右から左への関係従属性が常に存在する)。
また、その関係テーブル自体に直接属性値を持たせたとしても、意味的にも機能的にも問題は発生しないので、テーブル数の無駄な増加を防ぐためにも両者を融合させるべきであろう。最終的には、以下の構造を得る。
モンスター(存在)
|
名前属性付関係ケーブル
|
熊井ちゃん、これってなんて has_one / has_many?orz (いまここ)
( ⌒ ) l | / 〆⌒ヽ ⊂(#‘д‘) / ノ∪ し―-J |l| | @ノハ@ -=3 ペシッ!!
(「メガマックの感想」スレ http://ex19.2ch.net/test/read.cgi/morningcoffee/1168676815/107 より)
どうせお前らはあれだろ、scrAPI は強力だし、これこそ自分がまさに待望してた道具、使いこなすぜ!と意気込んでるんだけど、どれだけ決意してもあの複雑な引数に毎回挫折しちゃって、挫折つーかちょっと使いたいだけなのにパーザ(Scrape)用のクラスを定義するのが面倒なんだよね、みたいな言い訳を毎回自分にしつつ、結局使いこなせてない脳内ゆとり世代のお前らなんだけど、まぁ実際引数に無駄に色んな機能を詰め込み過ぎてる感は否めないし、というかextractorのsrcとdstはどう見ても直感的に逆だろ、grepみたいに使わせろよ使えない1だな、みたいな愚痴をこぼしてたら、むしろCSS3なgrepとして使えるだけでいい事に気付いて、You、Stringクラスに入れちゃいなYO!
require 'scrapi'
class String
def scrape(pattern, options = {}, &block)
options = {:extract=>options} unless options.is_a?(Hash)
options[:parser_options] = {:char_encoding=>'utf8'}.merge(options[:parser_options]||{})
extract = options.delete(:extract) || block && :element || :text
scraped = Scraper.define do
process pattern, "matches[]"=>extract
result :matches
end.scrape(self, options) || []
block ? scraped.map{|i| block.call(i)} : scraped
end
end |
(※ 以下、$KCODE = 'u' を前提)
... <tr> <td class="style_td">スライム</td> <td class="style_td">基本のスライム</td> ... </tr> <tr> <td class="style_td">バブルスライム</td> <td class="style_td">緑の溶けてる奴</td> ... |
html.scrape("tr td")
=> ["スライム", " 基本のスライム", ..., "バブルス ライム", "緑の溶けてる奴", ...] |
html.scrape("tr td:nth-child(1)")
=> ["スライム", "バブルスライム", ...] |
require 'open-uri'
html = NKF.nkf('-w', open("http://www.asahi.com/").read)
html.scrape("#con1 li a:nth-child(1)")
=>
["暖冬で原油価格が下落 日本は灯油在庫が過剰",
"三菱電機、エアコンのリサイクル料金値下げ",
"1万2千羽の焼却始まる 宮崎の鳥インフルエンザ",
"顧客の3000万円詐取 容疑の公認会計士を逮捕",
"楽天新人の田中投手、合同自主トレでブルペン投球"] |
第二引数に extractor (専門用語)を指定することができる。extractor の書式では"@" プレフィクスが属性値を意味するので、リンクを取得する場合は "@href" を指定する。
html.scrape("#con1 li a:nth-child(1)", "@href")
=>
["/life/update/0115/014.html",
"/life/update/0115/013.html",
"/national/update/0115/SEB200701150016.html",
"/national/update/0115/TKY200701150337.html",
"/sports/update/0115/207.html"] |
String#scrape は戻り値に文字列の配列を返すが、scrAPI 自体は内部では HTML 要素クラスで管理している。その element オブジェクトを直接操作した場合は、ブロック引数を利用する。
html.scrape("#con1 li a:nth-child(1)"){|e| e.class}
=> [HTML::Tag, HTML::Tag, HTML::Tag, HTML::Tag, HTML::Tag] |
element は親と子の全ての参照を持つため、"{|e| e}" とかやるのは表示が大変なことになるので危険。(= 一度やって体で覚えるのもあり)。実際の用途としては、「リンク名とリンク先を配列に入れる」場合などに便利。
html.scrape("#con1 li a:nth-child(1)"){|e| [e["href"], Scraper::Base.text(e)]}
=>
[["/life/update/0115/014.html",
"暖冬で原油価格が下落 日本は灯油在庫が過剰"],
["/life/update/0115/013.html",
"三菱電機、エアコンのリサイクル料金値下げ"],
["/national/update/0115/SEB200701150016.html",
"1万2千羽の焼却始まる 宮崎の鳥インフルエンザ"],
["/national/update/0115/TKY200701150337.html",
"顧客の3000万円詐取 容疑の公認会計士を逮捕"],
["/sports/update/0115/207.html",
"楽天新人の田中投手、合同自主トレでブルペン投球"]] |
element がどういうアクセサメソッドを理解するかについて興味があれば、scrAPI のドキュメント or ソースを参考に。でも、Scraper::Base.text は便利なので、もう HTML::Tag に持たせておくのもよいかも。
class HTML::Tag def text() Scraper::Base.text(self) end end |
html.scrape("#con1 li a:nth-child(1)"){|e| [e["href"], e.text]} |
熊井ちゃん、Rails Chat の人たちとブレスト(オフ会)してきたよ。内容は主にテーブル設計について。簡単に1NFのおさらいをした後、2NF,3NFとか一気に飛ばしていきなり7NFの話に。なんとなれば、その途中は誰も正確には理解していないから。そんな中途半端な技術者達が4人。4時間強の冬冬合宿へ!久々に脳がオーバーヒート。お陰で色々悩んでた部分が一気に氷解&整理できたけど、急速に得たものはそれが失われていくのもまた早い、って彩子さんが言ってたから忘れないうちにメモっておくね、熊井ちゃん。
1NFでドメインの原子性とタプルの集合性を保障した熊井ちゃん。2〜3NFで関係従属を、4〜5NFで結合従属を解消した熊井ちゃんは、6NFでドメイン間の独立性を保障することに成功した。そして遂に熊井ちゃんはリソースを「存在」と「ドメイン属性関係」へと分解する7NFへ到達した。
7NFでは、思考対象であるリソースをまず「存在」として捉える。
リソースとは、実世界を構成している対象(事実としての固体)である。正確に言えば、実在するものだけでなく、概念的なモデルも含まれる。その粒度もまちまちであり、設計者が「思考の対象として捉えるもの」は全てリソースになりえる。この意味では独我的である。
リソースを構成するものは「存在」と「属性」である。必須要素である「存在」は内的性質を表し、外的な性質は全て「属性」として追い出される。
リソース { 存在, 属性 }
存在 { 内的性質 }
属性 { 外的性質 }リソースはそれだけで独立して存在するものであるため、他者との関係に関する情報は持ちえない。従って、この(実)世界にFKは存在しないことになる。だって、FK(福田花音)は天使だから。
天使たるFKは地上には存在しないが、FKだけが住む楽園がある。これが天上界である。逆に言えば、天上界には実体を持つ者が踏み入れることはできない。全てのドメインが天使である関係を「リソース間の関係」と定義する。天上界にはこの関係テーブルしか存在せず、タプルを構成する値は全てリソースへのFKである。
では、天上界にある「リソース」間を繋ぐ関係というものは存在しないのか?もし存在すれば、それを管理するメタな関係テーブルは、天上界のさらに上位に存在することになる。つまり、今まで天上界だと思っていたものが実はまだカリン塔なのではないかという疑惑が生じる。これに対して熊井ちゃんは明確な答えを出していないが、そのメタ関係テーブルは、突き詰めるとそれらが指す関係テーブルのさらに先にある具象リソースへのポインタであるため、それらの実体(リソース)を直接指すようにすることで、従来の天上界の関係テーブルへと解消することが可能だと述べている。この天上界の概念は、リソースをノード、関係をエッジとしたグラフ理論でも表現できるため、その意味においても、線同士を結ぶ概念は考慮しなくてよいと思ってる熊井ちゃん。
ORMは対象が1タプルである場合に最大の生産性を発揮するが、RDBMのモデルであるリレーショナルモデルは本来集合論であり、集合演算操作を簡単に行うための道具である。その長所を活かす集合演算を行うパターン(仮にActiveMaskと命名)を構築し、両者を適材適所で利用することで、RDBMの能力を最大限に利用できると考える熊井ちゃん。
存在レベルまで解体された7NFは集合演算との親和性が高く、複雑化しやすい条件節(where区)を INNER JOIN の集合演算へと解きほぐすことを実現する。具体的には、あるリソースの存在集合 RE、そのリソースのステータス集合 RS、そして論理削除集合 RD という関係変数を用いれば、あるステータスを持つ削除されていないリソースの取得を、熊井ちゃんは以下のように記述する。
class Member < ActiveRecord::Base end class MemberStatus < ActiveMask::Status end class MemberDeleted < ActiveMask::Mask end (Member * MemerStatus[1] * MemberDeleted.not).find(:all) |
講師としてお呼ばれ。参加者、関係者の皆さんお疲れ様でした。内容は省略。(えー!)。というのも、東京と関西で勉強会の形態や雰囲気が全く違うのが一番印象的だったので、その辺の違いを率直な感想で綴る方が、歴史的に見れば1勉強会の内容よりも遥かに有益な情報になるだろうから。(両方に参加経験がある人はそんなに多くないと思うので)。深く考察する時間はないので、とりあえず、漠然とした感想を徒然と。
| 項目 | 東京 | 関西 |
|---|---|---|
| 雰囲気 | 研究会 | セミナー |
| 内容 | 当日決定 | 事前確定 |
| 対象 | 技術者 | 初心者 |
| 敷居 | 高い(*1) | 低い |
| 同時セッション数 | 3〜4 | 1 |
| 運営 | だれとなく | 勉強会スタッフ |
| 会場 | ドリコム乙 | スタッフ乙 |
| 参加者 | 疎結合 | 密結合 |
| 女性 | Yugui | 多値 |
| 二次会 | 少数 | 殆ど参加 |
| 情報伝達 | プル型 | プッシュ型 |
| 道 | 開拓 | 舗装 |
| キャズム | 生む | 埋める |
| アウトプット | アイディア | ビジネス |
(*1) 表現は両者の相対性に基づくもので、さらに敷居を高めようとするものではない。(東京でも毎回のように Kanta さんが初心者向けセッションを開いてくれています。Kanta乙)
東京では個々のRails技術者が参加し、興味のある話題に応じてセッション参加者の集合が決定される。複数の候補からセッションを選ぶことができるため、目的の健全性が満たされやすい。特に自分が知りたい内容に関して、それに興味を持つ人々とブレストを行う場があるのは非常に有益であり、何か新しいアイディアが生まれる可能性が高い。参加者は、知識を深めることができるが、恐らく、知識を広げることはできない。
一方関西では、まず「関西」というコミュニティがある。スタッフが事前に全てを準備し、参加者は教えてもらえばよい。一見受身のようだが、食わず嫌いの情報から新たな知見を得ることもあるし、グループ作業ではわからない分野であるためにお互いが協力するという構図が生まれやすく、さらなるコミュニティを形成していくメリットがある。参加者はゆっくりとだが知識を広げ、人脈も広げていき、そこから新しいビジネスが生まれる可能性が高い。しかし、スタッフへの依存度が増すと、それらが固定化し代替が効かない状況を生み、特定のスタッフや発表者に負荷が集中する可能性がある。
例えるなら、東京の参加者は7NFのエンティティである。単体で火星に行くこともできるほど個々は独立した存在であり、「興味」という関係(タグ)によってセッションが紐付けされるだけの疎結合である。セッションが終わればバラバラになり、二次会への参加率も低く、他の勉強会にも参加しない。一方関西にはコミュニティがあり、参加者はそのFKを持っている(従属している)。これは勉強会後の二次会への参加率の異様な高さ(東京比)に繋がり、また、コミュニティが主催するその他の勉強会(Ruby勉強会等)への参加メンバーとの積集合は、東京のそれと比較するとかなり高いであろうことは容易に推測でき、恐らく当たっている可能性が高い。
もちろん両者は一長一短であるし、どちらがよいと言うわけでもなく、というよりむしろ、東京が道を開拓し、関西が高速道路へと舗装する、というミラクルな役割分担が自然に実現されており、お互いのこの絶妙なバランスがRailsの普及につながっている、と好意的に(恣意的に)解釈したい、と熊井ちゃんは表明している。
そろそろインフルエンザが流行る季節のせいか、体調不良で欠席者多数。セッションが不足気味になったので7NFについて話す。7NFは多値絡みのインピーダンスミスマッチに対するアンチテーゼとして極論レベルまで無茶したモデル化で、すぐに破綻するだろうと思ってたからこそそんな大そうな名前を名乗っていたのだが、これが意外と明確には否定できずに、いつも「なくはない」という結論ばかりだ。この辺で勉強会でYuguiたんにバッサリと切り捨てて欲しいなぁと思っていたが、残念ながら不参加だったために、7NFは今日も生き残ってしまいました。死に場所を求めた終わりのない旅がまだ続くのかと思っていたら、遅刻してきた高橋会長が見るなり一言で切り捨ててくれた。
ヴィトゲンシュタインとか言い出す奴は電波系 |
そんな我等が電波系の父であらせられるヴィトたんに興味がある人にはこれがお勧め。
野矢 茂樹 (著) 文庫: 382ページ 出版社: 筑摩書房 (2006/04) ISBN-13: 978-4480089816 |
Amazon http://www.amazon.co.jp/dp/4480089810
前期の論考についてですが、全体的に平易な記述がわかりやすく、現在の問題意識を確かめつつ用心深く話を進めていくので、道に迷うこともありません。普通に読み物としても楽しめます。
これが欲しい。凄く欲しい。

http://japanese.engadget.com/2007/01/22/ergopod-500/
どう見ても航空写真です。時代は「介護ベッド」か「電動式寝ながらワークステーション」の二択だ。これでプログラムを書きながら息絶えたい。
どうせお前らはあれだろ、HTML のハイパーリンクはクリック範囲が文字列長に依存するから、短い文字列の場合はクリックが面倒で困っていて、特に Table による表組みの場合とかは TD レベルでリンクさせてくれよと思いつつも、そのためだけに JavaScript を使うのも負け組だ、みたいな妙なポリシーのせいで今日も悶々とするお前らなんだけど、Chatでおさかなさんに「Aタグを block 要素にすればいいじゃん」と教えてもらって目から鱗が落ちちゃうんだろう?
a.block { display : block; } |
<div style="background-color: #cccccc;"> <a href="http://www.asahi.com/" class="block">朝日新聞</a> </div> |
.clickable {
color : black;
background-color : #eeeeff;
}
.clickable a{
display : block;
color : black;
background-color : #eeeeff;
text-decoration : none;
width : 100px;
}
.clickable a:hover{
background-color : #ccccdd;
}
.clickable td {
border : 1px solid #666;
} |
<table class="clickable"> <tr> <td><a href='#'>舞波</a></td> <td><a href='#'>マイハマン</a></td> <td>備考</td> </tr> <tr> <td><a href='#'>桃子</a></td> <td><a href='#'>ツグナガ星人</a></td> <td>備考</td> </tr> </table> |
| 舞波 | マイハマン | 備考 |
| 桃子 | ツグナガ星人 | 備考 |
幅は固定になっちゃうけど、表組みの場合はデザイン的にも大概固定長なのでOKだよね、熊井ちゃん。おさかなマンありがとう!
世界樹の迷宮はゲット失敗したためこちらは即日ゲット。早速プレイするも、バトル開始と同時に敵がワラワラと攻めてきて、何をしていいのかわからないまま撤退に追い込まれちゃうのが流行。というか、一騎打ちで勝てない。張飛がいきなり黄巾賊に打たれるとか。一騎打ちは音ゲーのようにタイミングを5回合わせてクリックするんだけど、何度やっても全ミスなのよね。一騎打ちとかいうレベルじゃねーぞ。ちなみにアーケードは未経験。
どっちにしろ最初は何やっていいかわからないので、仕方なくやり続けるんだけど、それでも10回くらいやってたらようやくタイミングが掴めてきた。クリックから判定までのタイムラグがある気がするので、最初は塊の真ん中を狙って打つのがよさそう。パネルの左右はどちらでもOK。戦闘を重ねると負けても武将カードがゲットできるので、デッキ組むのが楽しくなってくる。序盤はとりあえずバトル回数を増やすのがよさそうだ。ストーリーモードは蜀で始めて魏延あたりで挫折。CPU戦は激まで行けたけど、9,10戦目が無理。あの呂布、馬超、張飛とかのオールスター軍の絶望的な突撃ってどうやって止めるのさ、熊井ちゃん。
| 所属 | 武将名 | コスト | 武力 | 知力 | 兵種 |
|---|---|---|---|---|---|
| 蜀 | 張飛 | 2 | 8 | 3 | 槍兵 |
| 蜀 | 姜維 | 2 | 7 | 7 | 槍兵 |
| 呉 | 周瑜 | 2 | 6 | 9 | 弓兵 |
| 蜀 | 馬超 | 2 | 8 | 3 | 騎兵 |
(データは「三国志大戦のなにか」様より)
会社で1年前に凍結されたプロジェクトが再始動したのだが、この業界で1年前の技術は既に過去であることを実感した。
3 は個人的な問題に寄る所であるが、当時はまだ道具(Rails)的に他に選択肢がなかったのも大きい。
ということで、1年前の Rails アプリを見て手直ししたくなる項目ベスト5。
1はやはり流行りの三テーブル構造で。関係テーブルをどんどん挟んでエンティティを疎な関係に保ちたい。テーブル数は多くなるけど気にしない。というか、既に100個以上はあるから200になっても気にならない。
2はプラグイン絡みだけど、権限を全部 boolean で管理してるテーブルを今見ると吐き気がした。少なくとも概念上は吐いた。
| Field | Type | Null | Key | Default | Extra |
|---|---|---|---|---|---|
| id | int(11) | NO | PRI | NULL | auto_increment |
| usercode | int(11) | YES | UNI | NULL | |
| comviewcom | tinyint(1) | YES | 0 | ||
| comaddcom | tinyint(1) | YES | 0 | ||
| comeditcom | tinyint(1) | YES | 0 | ||
| comdelcom | tinyint(1) | YES | 0 | ||
| comviewcompass | tinyint(1) | YES | 0 | ||
| comeditcompriv | tinyint(1) | YES | 0 | ||
| comviewgrade | tinyint(1) | YES | 0 | ||
| comaddgrade | tinyint(1) | YES | 0 | ||
| comeditgrade | tinyint(1) | YES | 0 | ||
| comdelgrade | tinyint(1) | YES | 0 | ||
| comviewsection | tinyint(1) | YES | 0 | ||
| comaddsection | tinyint(1) | YES | 0 | ||
| comeditsection | tinyint(1) | YES | 0 | ||
| comdelsection | tinyint(1) | YES | 0 | ||
| infoviewinfo | tinyint(1) | YES | 0 | ||
| infoaddinfo | tinyint(1) | YES | 0 | ||
| infoeditinfo | tinyint(1) | YES | 0 | ||
| infodelinfo | tinyint(1) | YES | 0 | ||
| infoviewjob | tinyint(1) | YES | 0 | ||
| infoaddjob | tinyint(1) | YES | 0 | ||
| infoeditjob | tinyint(1) | YES | 0 | ||
| infodeljob | tinyint(1) | YES | 0 | ||
| inforeleasejob | tinyint(1) | YES | 0 | ||
| infoapplyjob | tinyint(1) | YES | 0 | ||
| infopermitjob | tinyint(1) | YES | 0 | ||
| infoviewpage | tinyint(1) | YES | 0 | ||
| infoaddpage | tinyint(1) | YES | 0 | ||
| infoeditpage | tinyint(1) | YES | 0 | ||
| infodelpage | tinyint(1) | YES | 0 | ||
| inforeleasepage | tinyint(1) | YES | 0 | ||
| infoapplypage | tinyint(1) | YES | 0 | ||
| infopermitpage | tinyint(1) | YES | 0 | ||
| infoviewguidance | tinyint(1) | YES | 0 | ||
| infoaddguidance | tinyint(1) | YES | 0 | ||
| infoeditguidance | tinyint(1) | YES | 0 | ||
| infodelguidance | tinyint(1) | YES | 0 | ||
| inforeleaseguidance | tinyint(1) | YES | 0 | ||
| infoapplyguidance | tinyint(1) | YES | 0 | ||
| infopermitguidance | tinyint(1) | YES | 0 | ||
| infoviewinterview | tinyint(1) | YES | 0 | ||
| infoaddinterview | tinyint(1) | YES | 0 | ||
| infoeditinterview | tinyint(1) | YES | 0 | ||
| infodelinterview | tinyint(1) | YES | 0 | ||
| inforeleaseinterview | tinyint(1) | YES | 0 | ||
| infoapplyinterview | tinyint(1) | YES | 0 | ||
| infopermitinterview | tinyint(1) | YES | 0 | ||
| entryviewentry | tinyint(1) | YES | 0 | ||
| entryaddentry | tinyint(1) | YES | 0 | ||
| entryeditentry | tinyint(1) | YES | 0 | ||
| entrydelentry | tinyint(1) | YES | 0 | ||
| entrysearchentry | tinyint(1) | YES | 0 | ||
| entrydlentry | tinyint(1) | YES | 0 | ||
| entryviewmail | tinyint(1) | YES | 0 | ||
| entrysendmail | tinyint(1) | YES | 0 | ||
| entryviewpdf | tinyint(1) | YES | 0 | ||
| entryaddpdf | tinyint(1) | YES | 0 | ||
| entryeditpdf | tinyint(1) | YES | 0 | ||
| entrydelpdf | tinyint(1) | YES | 0 | ||
| entryuseimport | tinyint(1) | YES | 0 | ||
| entryviewform | tinyint(1) | YES | 0 | ||
| entryaddform | tinyint(1) | YES | 0 | ||
| entryeditform | tinyint(1) | YES | 0 | ||
| entrydelform | tinyint(1) | YES | 0 | ||
| seminarviewseminar | tinyint(1) | YES | 0 | ||
| seminaraddseminar | tinyint(1) | YES | 0 | ||
| seminareditseminar | tinyint(1) | YES | 0 | ||
| seminardelseminar | tinyint(1) | YES | 0 | ||
| seminarreleaseseminar | tinyint(1) | YES | 0 | ||
| seminarviewentry | tinyint(1) | YES | 0 | ||
| seminarsearchentry | tinyint(1) | YES | 0 | ||
| seminarviewbusiness | tinyint(1) | YES | 0 | ||
| seminaraddbusiness | tinyint(1) | YES | 0 | ||
| seminareditbusiness | tinyint(1) | YES | 0 | ||
| seminardelbusiness | tinyint(1) | YES | 0 | ||
| seminarviewstaffwaku | tinyint(1) | YES | 0 | ||
| seminaraddstaffwaku | tinyint(1) | YES | 0 | ||
| seminareditstaffwaku | tinyint(1) | YES | 0 | ||
| seminardelstaffwaku | tinyint(1) | YES | 0 | ||
| seminarviewstaffassign | tinyint(1) | YES | 0 | ||
| seminaraddstaffassign | tinyint(1) | YES | 0 | ||
| seminareditstaffassign | tinyint(1) | YES | 0 | ||
| seminardelstaffassign | tinyint(1) | YES | 0 | ||
| seminarliststaff | tinyint(1) | YES | 0 | ||
| interviewviewinterview | tinyint(1) | YES | 0 | ||
| interviewaddinterview | tinyint(1) | YES | 0 | ||
| intervieweditinterview | tinyint(1) | YES | 0 | ||
| interviewdelinterview | tinyint(1) | YES | 0 | ||
| interviewreleaseinterview | tinyint(1) | YES | 0 | ||
| interviewviewentry | tinyint(1) | YES | 0 | ||
| interviewsearchentry | tinyint(1) | YES | 0 | ||
| interviewviewbusiness | tinyint(1) | YES | 0 | ||
| interviewaddbusiness | tinyint(1) | YES | 0 | ||
| intervieweditbusiness | tinyint(1) | YES | 0 | ||
| interviewdelbusiness | tinyint(1) | YES | 0 | ||
| interviewviewstaffwaku | tinyint(1) | YES | 0 | ||
| interviewaddstaffwaku | tinyint(1) | YES | 0 | ||
| intervieweditstaffwaku | tinyint(1) | YES | 0 | ||
| interviewdelstaffwaku | tinyint(1) | YES | 0 | ||
| interviewviewstaffassign | tinyint(1) | YES | 0 | ||
| interviewaddstaffassign | tinyint(1) | YES | 0 | ||
| intervieweditstaffassign | tinyint(1) | YES | 0 | ||
| interviewdelstaffassign | tinyint(1) | YES | 0 | ||
| interviewliststaff | tinyint(1) | YES | 0 | ||
| statusviewprogress | tinyint(1) | YES | 0 | ||
| statusaddprogress | tinyint(1) | YES | 0 | ||
| statuseditprogress | tinyint(1) | YES | 0 | ||
| statusdelprogress | tinyint(1) | YES | 0 | ||
| statusviewflag | tinyint(1) | YES | 0 | ||
| statusaddflag | tinyint(1) | YES | 0 | ||
| statuseditflag | tinyint(1) | YES | 0 | ||
| statusdelflag | tinyint(1) | YES | 0 | ||
| qaviewcategory | tinyint(1) | YES | 0 | ||
| qaaddcategory | tinyint(1) | YES | 0 | ||
| qaeditcategory | tinyint(1) | YES | 0 | ||
| qadelcategory | tinyint(1) | YES | 0 | ||
| qaviewqa | tinyint(1) | YES | 0 | ||
| qaaddqa | tinyint(1) | YES | 0 | ||
| qaeditqa | tinyint(1) | YES | 0 | ||
| qadelqa | tinyint(1) | YES | 0 | ||
| qareleaseqa | tinyint(1) | YES | 0 | ||
| qaapplyqa | tinyint(1) | YES | 0 | ||
| qapermitqa | tinyint(1) | YES | 0 | ||
| baitaiviewbaitai | tinyint(1) | YES | 0 | ||
| baitaiaddbaitai | tinyint(1) | YES | 0 | ||
| baitaieditbaitai | tinyint(1) | YES | 0 | ||
| baitaidelbaitai | tinyint(1) | YES | 0 | ||
| scoutviewtemplate | tinyint(1) | YES | 0 | ||
| scoutaddtemplate | tinyint(1) | YES | 0 | ||
| scoutedittemplate | tinyint(1) | YES | 0 | ||
| scoutdeltemplate | tinyint(1) | YES | 0 | ||
| scoutviewcondition | tinyint(1) | YES | 0 | ||
| scoutaddcondition | tinyint(1) | YES | 0 | ||
| scouteditcondition | tinyint(1) | YES | 0 | ||
| scoutdelcondition | tinyint(1) | YES | 0 | ||
| scoutviewdelivery | tinyint(1) | YES | 0 | ||
| scoutadddelivery | tinyint(1) | YES | 0 | ||
| scouteditdelivery | tinyint(1) | YES | 0 | ||
| scoutdeldelivery | tinyint(1) | YES | 0 | ||
| matchingviewsetting | tinyint(1) | YES | 0 | ||
| matchingaddsetting | tinyint(1) | YES | 0 | ||
| matchingeditsetting | tinyint(1) | YES | 0 | ||
| matchingdelsetting | tinyint(1) | YES | 0 | ||
| matchingviewcondition | tinyint(1) | YES | 0 | ||
| matchingaddcondition | tinyint(1) | YES | 0 | ||
| matchingeditcondition | tinyint(1) | YES | 0 | ||
| matchingdelcondition | tinyint(1) | YES | 0 |
146権限のカラムとか。オワットル。こんなのが一杯あって耐えられない。当時は仕方ないとして、じゃあ、今ならどうするか?やはり acts_as_bits。
とかわーわーありましてどうにも耐えられないので、上司を説得して1週間の大リファクタリング大会期間を頂きました。これから半年1年これと付き合うとすれば、1週間なんてきっと易いもんでつよ。楽勝でペイできるよね、熊井ちゃん。
ちなみに現状はこんな感じ。テストは generator の副産物だけで全く書いてません。はい。
+----------------------+-------+-------+---------+---------+-----+-------+ | Name | Lines | LOC | Classes | Methods | M/C | LOC/M | +----------------------+-------+-------+---------+---------+-----+-------+ | Helpers | 3161 | 2666 | 10 | 427 | 42 | 4 | | Controllers | 16703 | 13933 | 128 | 1634 | 12 | 6 | | APIs | 0 | 0 | 0 | 0 | 0 | 0 | | Components | 0 | 0 | 0 | 0 | 0 | 0 | | Functional tests | 6654 | 4764 | 156 | 759 | 4 | 4 | | Models | 1459 | 1236 | 101 | 125 | 1 | 7 | | Unit tests | 380 | 266 | 38 | 38 | 1 | 5 | | Libraries | 570 | 463 | 10 | 34 | 3 | 11 | +----------------------+-------+-------+---------+---------+-----+-------+ | Total | 28927 | 23328 | 443 | 3017 | 6 | 5 | +----------------------+-------+-------+---------+---------+-----+-------+ Code LOC: 18298 Test LOC: 5030 Code to Test Ratio: 1:0.3 |
| プラグイン名 | 説明 |
|---|---|
| acts_as_authenticated | 認証系の個人的デファクト |
| acts_as_attachment-1.1.6 | 画像ファイルとか(file_columnでも可) |
| acts_as_bits | フラグ管理で必須 |
| acts_as_nervous | A型用 |
| acts_as_view | with_scope 代わりに |
| ar_fixtures | テストデータ作成にもデータ退避リストアにも使える |
| dsl_accessor | やっぱり使う |
| expectation | 俺俺DRYに |
| htpasswd | 5秒でDigest認証を追加するのに便利 |
| migration2 | 開発時のテーブル定義に |
| perform_filters | actionのDRYに必須 |
| redbox | Modal Window ぽく |
| responds_to_parent | 画面繊維なしの upload |
| scoped_access | has_many 時代の縛りとして |
そろそろ1月が終わりそう。だからこそ今、ハロプロ楽曲大賞2006だ。
| 順位 | 曲名 | 歌手 |
|---|---|---|
| 1 | まっさらブルージーンズ | ℃-ute |
| 2 | As ONE | ℃-ute |
| 3 | SEXY BOY 〜そよ風に寄り添って〜 | モーニング娘。 |
| 4 | ジリリ キテル | Berryz工房 |
| 5 | ハレーション サマー | [清水、嗣永、須藤] / Berryz工房 |
| 6 | わっきゃない(Z) | ℃-ute |
| 7 | EVERYDAY YEAH! 片想い | ℃-ute |
| 8 | Ambitious! 野心的でいいじゃん | モーニング娘。 |
| 9 | 恋☆カナ | 月島きらり starring 久住小春(モーニング娘。) |
| 10 | マジ夏すぎる | Berryz工房 |
| 順位 | 曲名 | 歌手 |
|---|---|---|
| 1 | 大きな愛でもてなして | ℃-ute |
| 2 | まっさらブルージーンズ | ℃-ute |
| 3 | ジリリ キテル | Berryz工房 |
総合1位はまっさらで確定。そして、As ONE は名曲。つんくの力の入れ方が露骨に℃-uteな1年だったことよ。
ブツ < あのね、今度りしゃこがピチレでモデルデビューするやん ハゲ < そうやな。めでたいな ブツ < めでたいことあらへんがな。最近それで困ってるちゅーねん ハゲ < なんでや、ええことやないか ブツ < デビュー自体はええわ。本をどないして買うねん、ちゅー話や ハゲ < そんなもんお前、普通にコンビニで買うたらええやねんか ブツ < ああ、普通にな。。。でもなぁ、、、店員さんが 「お客様、ピチレでよろしかったですか?」 て確認して来たらどないするんや ハゲ < ファミレスちゃうやろ、何の心配してんねん じゃあ「いつものピチレ下さい」言いながら買えよ ブツ < ああ、常連のようにな。。。でもなぁ、、、店員さんに 「うわぁ、ええ歳したおっさんが女子小学生が読む雑誌を定期購読してはる」 て思われたら嫌やし ハゲ < ほんなやったら、何か別の真面目な本と一緒にさりげなく買えや! それこそお前の好きなビトゲンシュタインに挟んで持って行けばええやろ! ブツ < お前、論考と探求とピチレ売ってるコンビニがどこにあんねん! ハゲ < ほいじゃ買うときに領収書を貰えや! そしたら会社で使う資料か何かだと思うやろがい! ブツ < 何で顔バレした上に会社名まで白状せなあかんねん ハゲ < 素性ばれたくないんなら、はなからネット通販で買えや! Amazonとかで注文したらええやろ ブツ < お前、それでピチレゲットできてもな、 数日後に「小学6年生」とか「ちゃお」とか提案されたらヘコむやろ Amazonの購入履歴からの商品お勧め力を見くびんなよ! ハゲ < 何で怒られてるねん ブツ < もうええ。お前に相談したのが間違いやったわ ハゲ < どないすんねん ブツ < いつものスレで熊井ちゃんに報告してくるわ
| JRuby | Rails | Berryz | ℃-ute | エッグ | jQuery |
| 前 | 2007年 1月 |
次 | ||||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | |||
_ shachi [デスピサロが強くてたくましいので作ってやってください。 良い感じです。]
_ 舞波 [ピサロナイトは作ったけど、相方の4体合体君を作るところで挫折。 別系統はゾーマが強さ微妙&成長遅くて挫折。 本体は正..]