「Mai」を含む日記 RSS

はてなキーワード: Maiとは

2010-03-13

はてなブックマーク - <鳩山首相>「揺らぎは宇宙の真理」 発言ぶれ批判に強調(毎日新聞) - Yahoo!ニュース

ttp://b.hatena.ne.jp/entry/headlines.yahoo.co.jp/hl?a=20100311-00000120-mai-pol

精神的に重圧がかかる重要な場面で「宇宙」とか「真理」とか言い出したら本気で警戒した方が良い。

2010-02-13

2/13 狩猟海賊の血は争えないんですよ

ttp://nihon9999.blog77.fc2.com/blog-entry-4287.html

1 名前: ◆SCHearTCPU @胸のときめき▲φ ★[tokimeki2ch@gmail.com] 投稿日:2010/02/12(金) 07:36:36 ID:???0 ?PLT(12556)



和歌山高知千葉東北地方など国内各地の沿岸地域には、古くからクジラ漁の歴史がある。

長崎県上五島(しんかみごとう)町の有川地区も伝統的にクジラ漁が盛んだった。



今でも冠婚葬祭などの地域の行事にはクジラの刺し身は欠かせない料理

クジラでだしを取ったうどんは、どこの家庭でも親しまれている。



有川町漁業協同組合中山弘光組合長)の浜崎永吉参事は「昔から鯨食文化があり、今も当然のように食べている」と強調。環境保護を標榜(ひょうぼう)する米団体シー・シェパード(SS)の抗議活動については、「受け入れられない主張だ。



クジラを食べるのは、欧米人牛肉を食べているのと同様に文化だ」と話す。

クジラなどの哺乳(ほにゅう)類保護動物愛護という意見はあってもよいが、暴力的な抗議活動を行うことは許されない」と批判する。



SSに対し、政府はいまでこそ対策を積極的に検討している。

予算がかかっても海上保安庁の巡視艇を警備に派遣すべきだ」という声も高まりつつある。

しかし、数年前までは妨害を受けても、政府は「とにかく逃げろ」と指示するばかりだった。



背景にあったのは捕鯨の是非が議論され続けている国際捕鯨委員会(IWC)。

賛成派と反捕鯨国の勢力が拮抗(きっこう)しており、水産庁を中心に「SSに対抗すれば、逆に反捕鯨派を刺激し、勢いづかせる」という考えが根強かった。



そうした考え方が変わったターニングポイント平成20年だった。

その前年、南極海捕鯨船にSS活動家が乗り込んでくる“事件”が発生し、船員らは活動家の身柄を拘束した。



しかし、政府は反捕鯨オーストラリアへの引き渡しを決め、実質的に釈放した。

トラブルを拡大しない」。

そんな考え方があったが、SSはその後も妨害を繰り返している。

トラブルを拡大しているのはSSの方だった。



(»2へ)



+*+ 産経ニュース 2010/02/12[07:36:36] +*+*

ttp://sankei.jp.msn.com/affairs/crime/100212/crm1002120008000-n1.htm



2 名前: ◆SCHearTCPU @胸のときめき▲φ ★[sage tokimeki2ch@gmail.com] 投稿日:2010/02/12(金) 07:37:06 ID:???0 ?PLT(12556)



「なぜ、あのとき逮捕しなかったのか」。

公海上でも日本船への不法侵入者は日本法律が適用されるため、逮捕もできた。

批判は高まり、日本側は少しずつ対SS強硬策にかじを切り始めた。



政権交代を果たした民主党は昨年末になって、捕鯨や船舶関係者からSS問題などについて意見を聴く議員協議会を開いた。

その場で、全日本海員組合の近英男(こん・ひでお)水産部長が、大きな声を張り上げた。



国民テロに近い暴力にさらされ、生命の危機を感じているのに、助けようとしない政府がどこにあるのか」

返す言葉もなく押し黙る議員たち。



政治に、なんとかしてもらいたい」。

多くの出席者から不満が漏れた。



SSの公海上での暴力行為に対して、日本の現行法制は逮捕など取り締まりを認めていない。

国連海洋法条約は、海賊ならば公海上でも逮捕を認めているが、政府は「海賊とはいえない」との外務省見解採用している。

環境保護を主張するSSは、略奪目的の「海賊」ではないという解釈だ。



これに対して農水省逮捕を可能にする法整備を求めてきた。

昨年3月には石破茂農水相が「SSは海賊と同じだ」として、ソマリア沖の海賊を取り締まる海賊対処法を適用するよう求め、それが拒否されるとSSを対象にした新たな新法制定を求め、水面下で法案の骨子まで作成した。



しかし、それも政権交代によって、握りつぶされた形になっている。

今の政府の大勢は法整備に冷ややかだ。



「ただ、船員の安全を守ってほしい、それだけなのに…」

部長はそう話す。

多くの調査捕鯨関係者らの気持ちだ。



SSの暴力を野放しにすることで、重大な人的被害を受ける可能性は強まる。

そのときまで問題を放置していいのか。

日本調査捕鯨船団はいまもSSの脅威にさらされながら、南極海で航海を続けている。






21 名前名無しさん@十周年[] 投稿日:2010/02/12(金) 07:49:15 ID:vlGJ4gNxO

ポッポおまえ所信表明で何言ってた?



59 名前名無しさん@十周年[] 投稿日:2010/02/12(金) 08:14:15 ID:bpkYjug+0

»21

異の地を守りたい

(自身の政治生)命を守りたい






55 名前名無しさん@十周年[sage] 投稿日:2010/02/12(金) 08:11:37 ID:h0KDSErH0

みんしゅとうって、なんのおしごとやってるの?



63 名前名無しさん@十周年[] 投稿日:2010/02/12(金) 08:17:43 ID:bpkYjug+0

»55

韓国行って韓国のご機嫌伺いをやってます





岡田外相韓国外相に「痛み覚える側の気持ち忘れない」

ttp://www.asahi.com/politics/update/0211/TKY201002110253.html



日韓併合>「民族の誇りに傷」岡田外相韓国側に見解

ttp://headlines.yahoo.co.jp/hl?a=20100211-00000068-mai-pol



岡田外相外国人参政権で明言避ける 韓国外相「普天間問題に関心」

ttp://sankei.jp.msn.com/politics/policy/100212/plc1002120021000-n1.htm







65 名前名無しさん@十周年[sage] 投稿日:2010/02/12(金) 08:21:04 ID:IPbYoRr+0

あれ?

「命を守る政治!」とか言ってなかったっけ?



69 名前名無しさん@十周年[sage] 投稿日:2010/02/12(金) 08:24:28 ID:IT0EaFLM0

»65

鯨の命を守ります。







214 名前名無しさん@十周年[] 投稿日:2010/02/12(金) 11:20:30 ID:c7QceIa80



この様子は、米CS放送局アニマル・プラネットカメラマン撮影

映像は、今年夏から同局で放送されるシー・シェパードドキュメンタリー番組「鯨戦争」シーズン3に反映されるものと思われる。



ttp://sankei.jp.msn.com/affairs/crime/100212/crm1002120935007-n1.htm





テレビ番組制作の為に、日本人狩りをしたのさ。

なんせ迫力のある狩りの映像を撮らなきゃならんからな。

2010-02-09

政治子ども手当、親が「不詳」は対象外…施設長「施設で暮らす子の支援と手当を根本から考えるべきだ」

ttp://tsushima.2ch.net/test/read.cgi/newsplus/1265683002/

1 :☆ばぐた☆ ◆JSGFLSFOXQ @☆ばぐ太☆φ ★:2010/02/09(火) 11:36:42 ID:???0

★<子ども手当>親「不詳」は対象外 施設入所の2千人



 子ども手当を巡り、児童養護施設などに入所している子供について厚生労働省が、親の状況が「不詳」の場合、現時点で支給対象外としていることが同省の内部資料で分かった。同省は、入所に同意した親には支給し、虐待などで強制入所となった子や父母のいない子については親ではなく施設に同額を渡す方向だが、親の状況が「不詳」の子約2000人については支給について何も決まっていないという。



 10年度の子ども手当は現行の児童手当に準じ「監護のある(養育・監督をしている)親」に原則支給される。内部資料によると、乳児院児童養護施設などで暮らす子供約4万人のうち、親が同意し入所した3万人余は「親の監護がある」とみなされる。一方、「親のいない子」約4150人と、虐待などで親が不同意でも裁判所が入所すべきだと判断した「強制入所の子」同約700人については、支給対象外としつつ「特例的に施設などに相当額を渡す」(同額措置)としている。



 しかし「親が誰かや生死そのものがわからず、『存在』『いない』『不明』を施設が回答できない『不詳』に該当する子」が16歳以上を含めて約2400人おり、支給対象となる中学3年以下は約2000人とみられるが、この子らについては「同額措置の対象に含めていない」(同省児童手当管理室)という。



 西日本のある施設長は「施設で暮らす子の支援と手当を根本から考えるべきだ」と指摘。同省雇用均等・児童家庭局総務課は「『不詳』を同額措置から除いたのは、位置づけが不明確との担当の判断ではないか」と話している。

 ttp://headlines.yahoo.co.jp/hl?a=20100209-00000007-mai-soci




7 :名無しさん@十周年:2010/02/09(火) 11:39:19 ID:uchQrT8Y0

子ども選挙権、無いからね。



 36 :名無しさん@十周年:2010/02/09(火) 11:46:56 ID:QsaMso/OP

 »7

  選挙権がない在日には手当あるんだろ?

 なんでだ? 手当もカットしようぜ。



  40 :名無しさん@十周年:2010/02/09(火) 11:48:39 ID:eKcbjSFb0

  »36

  もうすぐ選挙権与える予定だからな



  41 :名無しさん@十周年:2010/02/09(火) 11:48:50 ID:l+gr08u40

  »36

  いつも言っているじゃない?

  (韓)国民の生活が第一、って。



11 :名無しさん@十周年:2010/02/09(火) 11:41:13 ID:F5EWT+hRP

目的曖昧すぎてどうしようもねーなこれ

経済対策なのか少子化対策なのか

まあ選挙対策なんだろうけど



 15 :名無しさん@十周年:2010/02/09(火) 11:42:01 ID:uchQrT8Y0

 »11

 むしろハッキリした。

 選挙対策である、と。



18 :名無しさん@十周年:2010/02/09(火) 11:42:14 ID:+7KSqfK00

いや~本末転倒ですよね

何が命を守りたいだ

都合よすぎ



24 :名無しさん@十周年:2010/02/09(火) 11:43:48 ID:wxAgawri0

票を買うのが目的なんだから未成年に配るわけ無いじゃない。

民主党だよ。



25 :名無しさん@十周年:2010/02/09(火) 11:43:59 ID:t+2W8lAV0

票にならないいのちは守りません



 39 :名無しさん@十周年:2010/02/09(火) 11:48:34 ID:3YZtiQkn0

 »25

 票を守りたいって言えばよかったのにね



33 :名無しさん@十周年:2010/02/09(火) 11:45:11 ID:eKcbjSFb0

小沢問題なんて、子供手当て配れば消えてなくなると若手議員を激励した

アホな民主党のおっさん誰だっけ?

どこまで、国民馬鹿にしてるん?



 35 :名無しさん@十周年:2010/02/09(火) 11:46:16 ID:53bY57Rh0

 »33

 山岡!

 山岡と言えば、史郎もいたな。



  50 :名無しさん@十周年:2010/02/09(火) 11:51:29 ID:cfhUY9Xp0

  »33»35

  民主党にそんな馬鹿がいるんだ。馬鹿というだけじゃなく、品性も卑しいよな。

  民主議員の中でも、輿石や山岡って胡散臭さが特段に匂うよ。



   52 :名無しさん@十周年:2010/02/09(火) 11:52:41 ID:l+gr08u40

   »50

   逆に問う。胡散臭くない民主党議員を挙げてくれ。



87 :名無しさん@十周年:2010/02/09(火) 12:06:27 ID:8AUDJc0ui

親が外国人でも出すくせに

不祥でも日本人には出さない民主党



92 :名無しさん@十周年:2010/02/09(火) 12:09:28 ID:EQY9cd8o0

「(民主党政権の)いのちを守りたい」



137 :名無しさん@十周年:2010/02/09(火) 12:26:05 ID:bynINoph0

子ども(がいる親)手当

2009-07-10

「超時空七夕ソニック」に関する感想やらのまとめ

すっごくよかった!のでとりあえずまとめてみる!

追記していきます。他にもあったら教えて!

ステージ上の人

May'n

http://ameblo.jp/mayn-blog/entry-10295530244.html

http://ameblo.jp/mayn-blog/entry-10296064433.html

中島愛

http://stblog.stardust-web.net/nakajimamegumi/comment/?entry_id=11255&_s=ce0ea6c0c41d5d9b158d716c873154b0

Steve Conte

http://twitter.com/SteveConteNYC/status/2488533999

http://twitter.com/SteveConteNYC/status/2495420935

http://twitter.com/SteveConteNYC/status/2496210183

http://twitter.com/SteveConteNYC/status/2505110284

http://twitter.com/SteveConteNYC/status/2515197542

http://twitter.com/SteveConteNYC/status/2517005885

http://twitpic.com/9fyab

http://thecontes.com/biosteve.asp

Day Three: In Tokyo for Yoko Kanno Concert

The show @ Saitama Super Arena was absolutely incredible...3 hours long! It was a real mix of J-pop, symphonic, musician's music (jazz-rock, funk, etc) and beautiful ballads. I sang The Garden Of Everything duet w/ Maya Sakamoto - @ rehearsals I was having a rough time memorizing the crazy words (even more trippy than Hendrix or Lennon) but in the end I nailed it. When I did "Could You Bite The Hand" the crowd went nuts clapping in time throughout the song, just my acoustic guitar and 17,000 people! It was the biggest crowd I've ever "fronted" before - what a rush man. When I got to Call Me, Call Me they were like putty in my hands. Later in the show I came back and did a killer version of Rain as a duet w/ Mai Yamane. It was really good to see everyone again....I only wish we could do this more often.

Day Two: In Tokyo for Yoko Kanno Concert

The 1st rehearsal was a trip, lots of staging, etc. The first time I appear onstage I perform 3 songs in a row starting with a duet w/ Maya Sakamoto "The Garden Of Everything". We start out on opposite ends of a long stage and move toward each other by the end. As I reach the other side of the stage with my wireless microphone, an acoustic guitar and mic stand rise up from out of the floor, I strap on the guitar and do "Could You Bite The Hand?" - When I'm done I set the guitar back down, it disappears into the floor with the mic stand and I finish with "Call Me, Call Me" backed by the Warsaw Philharmonic Orchestra. Pretty Awesome. Later in the show I come back for a duet of "Rain" with Mai Yamane and back her up on "Gonna Knock A Little Harder". It's gonna be an amazing show!

Day One: In Tokyo for Yoko Kanno Concert

Happy July 4th! I am just now waking up in Tokyo. On the plane there were many people wearing surgical masks and constantly washing with Purell. It was a 12 hour flight so I slept a bit, worked on learning the words for Yoko's concert that I'm singing on here and watched some movies/tv. Typical boring flight. When I got in to Narita airport my contact, Cherry met me and took me to where I"m staying - Hotel Sunroute Plaza in Shinjuku section of Tokyo. After I cleaned up we went out for something to eat and although I had my heart set on sushi she took me to a place called Momma's - a homestyle Japanese place that serves little dishes of different stuff, like their version of tapas. Anyway, I did have some octopus sashimi...but also uni flavored tofu, raw scallop and a strange salad with lettuce, red pepper raw tuna & octopus, raisins, cashews & cheese. When I got back to the hotel and passed out right after. I just awoke to white skies and bizzare shaped buildings outside my window. Now I'm off to have an equally adventurous breakfast...

篠崎正嗣

http://masachan4994.blog116.fc2.com/blog-entry-585.html

http://masachan4994.blog116.fc2.com/blog-entry-586.html

http://masachan4994.blog116.fc2.com/blog-entry-587.html

http://masachan4994.blog116.fc2.com/blog-entry-588.html (音楽進行表アリ)

キョウコ

http://mtye.at.webry.info/200907/article_3.html

著名人

田中公平

http://ameblo.jp/kenokun/entry-10295617849.html

http://ameblo.jp/kenokun/entry-10296258517.html

新居昭乃

http://ameblo.jp/viridianroom/entry-10295550961.html

やっちゃん(ケット・シー)

http://blog.livedoor.jp/seventheffect/archives/51188788.html

http://blog.livedoor.jp/seventheffect/archives/51189153.html

http://blog.livedoor.jp/seventheffect/archives/51189529.html

山寺宏一

http://hollywood-express.cocolog-nifty.com/blog/2009/07/post-50db-1.html

豊口めぐみ

http://toyoguchi-megumi.cocolog-nifty.com/blog/2009/07/post-d828.html

野島裕史

http://nojima.jugem.jp/?eid=102

遠藤綾

http://blog.excite.co.jp/endo-aya/11480636/

多田 葵

http://yaplog.jp/tada_aoi/archive/1479

あきまん

http://blog.livedoor.jp/akiman7/archives/51893646.html

2007-09-07

ようこそ、℃-uteLisp の世界へ

発祥: http://ex23.2ch.net/test/read.cgi/morningcoffee/1188654905/


はじめに

Scheme という Lisp 語族言語を用いて ℃-ute相関関係プログラムし、様々な角度から関係性を分析する手法を紹介していきます(ソースコードは最後に張ります)。


まずは、メンバー間の関係を「リスト」というデータ型で表現します。例えば「栞菜->愛理」という関係

(kanna . airi)

という形で表すことができます。これに、「大好き」という情報を付加し、ついでにその関係の性質を数値化したものを加えると

((kanna . airi) (desc "大好き") (score . 1))

のようになり、関係図における一つの矢印の情報データ化できたことになります(暫定的に、好意は 1、良好・中立は 0、険悪は -1 の3段階で表すことにします)。

メンバー間の全ての関係性をこのデータ単位で定義し、データベース化しておくことで、色んな条件に基づいた検索やスコア計算などが可能となります。


例 1: リンク状況の調査

ここで相関関係図における矢印を「リンク」と呼ぶことにして、あるメンバーから他のメンバーへどのようにリンクし、またリンクされているかを調べることができます。

関係の中からリンクの起点を抽出してソートしてみると

(sort-nodes (number-list (from-links)))

結果:

((kanna . 6) (saki . 5) (maimi . 4) (erika . 3) (mai . 3) (chisato . 3) (airi . 2))

栞菜ちゃんがメンバー全員にリンクを張っていることが分かり、℃-ute ラブっぷりが伺えます。なっきーにも同様の事が言えます。例の「女の子が好き」発言を数値的に裏付ける結果と言えるかもしれません。

ただ、データ不足でリンク件数がまだ少ないのと、リンクの性質(好意/反感など)までは分からない点を考慮する必要があるでしょう。


例 2: 被リンク状況の調査

同様に、リンクの終点の件数を調べてみます。

(sort-nodes (number-list (to-links)))
((chisato . 5) (erika . 5) (kanna . 4) (maimi . 4) (airi . 4) (mai . 3) (saki . 1))

えりかちゃんと千聖ちゃんが高ポイントです。メンバーからの人気や注目度の高さを示すデータですが、千聖ちゃんの場合敵対的なリンクが2件含まれている点に注意してください。

なっきーの被リンク数が極端に少ないですが、単純にデータ不足のためだと思われます。はぶら(ryとか言わないようにお願いします。


例 3: 愛情度の評価

リンクに付随するスコアを計算することで、愛情の度合いを測ることができるのではないか、という考えに基づく研究です。

まず、全ての関係性を対象として、スコアマイナス関係を抽出してみます。

(filter-nodes (lambda (n)
		(< (score-relation n) 0)))

結果:

(((kanna . chisato) (desc "愛理に手出すんじゃねぇよ") (score . -1))
 ((saki . chisato) (desc "愛理に手出すんじゃねぇよ") (score . -1)))

件数だけを得ると

(length (filter-nodes (lambda (n)
			(< (score-relation n) 0))))
2

僅か2件です。

良好・中立的な関係

(length (filter-nodes (lambda (n)
			(= (score-relation n) 0))))
8

愛に満ちた関係

(length (filter-nodes (lambda (n)
			(> (score-relation n) 0))))
16

非常に多いです。舞美ちゃんの「℃-ute同士でラブラブなんですよ」発言(例のラジオ)を数値的に裏付ける結果と言えるんじゃないでしょうか。

次に、メンバーごとのスコアを算出してみます。Lisp 的には以下のようにフィルタリングと畳み込み (fold) で計算することができます。例えば

(foldr (lambda (n acc)
	 (+ (get-score n) acc))
       0
       (filter-nodes (cut to? <> 'kanna)))

栞菜ちゃんに対するリンクスコアが得られます。結果:

3

上式を一般化して一挙にメンバー全員に適用してみると

(sort-nodes (map (lambda (x)
		   (cons x (score-loved x)))
		 (all-members)))

結果:

((airi . 4) (kanna . 3) (mai . 2) (erika . 2) (maimi . 2) (saki . 1) (chisato . 0))

愛理ちゃんが好意を寄せられやすい傾向が伺えます。

今度は逆方向のスコアを計算してみると

(sort-nodes (map (lambda (x)
		   (cons x (score-loving x)))
		 (all-members)))
((kanna . 3) (maimi . 3) (chisato . 2) (airi . 2) (saki . 2) (mai . 1) (erika . 1))

まいまいえりかちゃんが特に堅い・一途だという傾向を読み取ることができます。


例 4: 相性の調査

今度は組み合わせ(カップリング)の評価です。

2点間相互のリンクスコアを加算したものを「相性」と考えられるものとします。最大値 (互いに好意を寄せている場合の数値) は現在スコアリング方式では 2 です。例えば

(score-between 'kanna 'airi)

の値は

2

となります。1 であれば一方通行と考えます。

関係性が未定義の場合もあるので 0 のものを除外して算出すると

(sort-nodes (filter (lambda (n)
		      (not (= (cdr n) 0)))
		    (map (lambda (n)
			   (cons n (apply score-between n)))
			 (all-combinations))))
(((chisato mai) . 2)
 ((chisato airi) . 2)
 ((airi kanna) . 2)
 ((saki kanna) . 2)
 ((kanna maimi) . 2)
 ((erika maimi) . 2)
 ((saki airi) . 1)
 ((saki erika) . 1)
 ((kanna mai) . 1)
 ((maimi airi) . 1)
 ((saki chisato) . -1)
 ((kanna chisato) . -1))

となります。若干ピンとこない部分もあるかも知れませんが、計算上は矛盾無くデータの内容を表しています。

参考までに、スコア 1 の相互関係の中身を見てみると

(map (lambda (p)
       (find-relation (cons (caar p) (cadar p))
		      identity))
     (filter (lambda (n)
	       (= (cdr n) 1))
	     (map (lambda (n)
		    (cons n (apply score-between n)))
		  (all-combinations))))
(((kanna . mai) (desc "喰ってやるよ") (score . 1))
 ((saki . airi) (desc "好き") (score . 1))
 ((maimi . airi) (desc "良き妹") (score . 1))
 ((saki . erika) (desc "彼氏にしたい") (score . 1)))

のようになります。


まとめ

以上の調査を経て気になった問題点を列挙してみます。

特に最初の点に関して、「百合的」なるものの質的評価がなかなか難しいと感じました。例えば「大好き」も「良き妹」も同じ 1 と評価してしまっているのが妥当かどうか、といったことです。

また、スレにて与えられた情報を評価・分析する方法としては有効だとしても、逆方向のフィードバックの手段がなかなか見つからないというのが三つ目の問題です(技術力不足とも言います)。(注:画像化の方法が分かりました。追記参照)


最後に、プログラムソースを示します。実行には PLT Scheme が必要です。文字コードUTF-8 で保存した上で、(load "c-ute.ss") としてください。文字化けする場合はターミナルUTF-8 を表示できるよう設定する必要があります。がんばってください。


プログラム

c-ute.ss:

(require (lib "etc.ss")
         (lib "list.ss")
         (lib "26.ss" "srfi")
         (lib "delete.ss" "srfi" "1"))

;;; Utilities

(define true? (compose not not))

(define (ignore _) #f)

(define fif
  (case-lambda
    ((predicate consequent)
     (fif predicate consequent ignore))
    ((predicate consequent alternative)
     (lambda (x)
       (if (predicate x)
           (consequent x)
           (alternative x))))))

(define (concat! xs) (apply append! xs))

(define (mapconcat f lst sep)
  (let lp ((str (f (car lst)))
           (lst (cdr lst)))
    (if (null? lst)
        str
        (lp (string-append str sep (f (car lst)))
            (cdr lst)))))

(define (slice-string str len)
  (let lp ((res '())
           (str str))
    (if (<= (string-length str) len)
        (reverse! (cons str res))
        (lp (cons (substring str 0 len) res)
            (substring str len)))))

(define (break-string str len)
  (mapconcat identity (slice-string str len) "\\n"))

;; NOTE: input and output ports have to be either file-stream or #f
;; (i.e., cannot be a string port)
(define (run exe opt in out)
  (let-values (((p p-i p-o p-e)
                (subprocess out in #f exe opt)))
    (subprocess-wait p)
    (close-input-port p-e)))

;;; Database

;; http://ja.wikipedia.org/wiki/%E2%84%83-ute

(define names
  '((erika . "えりか") (maimi . "舞美") (saki . "早貴") (airi . "愛理")
    (chisato . "千聖") (mai . "舞") (kanna . "栞菜")))

(define (symbol->name sym)
  ((fif true?
        cdr)
   (assq sym names)))

(define nodes '())
(define edges '())

(define (relate from to desc score)
  (let ((n (cons from to)))
    (or (find-relation n
                       (lambda (r)
                         (let ((d (assq 'desc r))
                               (s (assq 'score r)))
                           (set-cdr! d (cons desc (cdr d)))
                           (set-cdr! s (+ score (cdr s))))))
        (begin
          (set! nodes (cons n nodes))
          (set! edges (cons (cons n `((desc ,desc)
                                      (score . ,score)))
                            edges))))))

(define (find-relation n k)
  ((fif true? k)
   (assoc n edges)))

(define (related? x y)
  (find-relation (cons x y) (lambda (_) #t)))

(define (from? n x)
  (eq? (car n) x))

(define (to? n x)
  (eq? (cdr n) x))

(define flip-relation
  (case-lambda
    ((n)
     (and (related? (cdr n) (car n))
          (cons (cdr n) (car n))))
    ((n k)
     ((fif true? k)
      (flip-relation n)))))

(define (get-score n)
  (cdr (assq 'score n)))

(define (get-description n)
  (cdr (assq 'desc n)))

(define (describe-relation n)
  (find-relation n get-description))

(define (score-relation n)
  (or (find-relation n get-score) 0))

(define (print-node . ns)
  (for-each (cute find-relation <>
                  (lambda (r)
                    (display
                     (format "| ~a => ~a  (~a)~%"
                             (caar r) (cdar r)
                             (mapconcat (lambda (s)
                                          (string-append "\"" s "\""))
                                        (cdr (assq 'desc r))
                                        ", ")))))
            ns))

(define (iter-nodes k)
  (let lp ((nodes nodes))
    (unless (null? nodes)
      (k (car nodes))
      (lp (cdr nodes)))))

(define (filter-nodes p)
  (let ((ns '()))
    (iter-nodes (fif p
                     (cut find-relation <> (lambda (n)
                                             (set! ns (cons n ns))))))
    ns))

(define (from-links)
  (map car nodes))

(define (to-links)
  (map cdr nodes))

(define (all-members)
  (delete-duplicates! (from-links)))

(define (all-pairs) nodes)

(define (ordered-pairs)
  (concat! (map (lambda (x)
                  (map car
                       (sort (filter-nodes (cute to? <> (car x)))
                             (lambda (x y)
                               (> (get-score x) (get-score y))))))
                (sort-nodes (map (lambda (x)
                                   (cons x (score-loved x)))
                                 (all-members))))))

(define (all-combinations)
  (let lp ((cs '()) (ns nodes))
    (if (null? ns)
        cs
        (let ((n (car ns)))
          (lp (if (member (list (cdr n) (car n))
                          cs)
                  cs
                  (cons (list (car n) (cdr n)) cs))
              (cdr ns))))))

;; number-list :: [a] -> [(a . Int)]
(define (number-list ls)
  (let lp ((ns '()) (ls ls))
    (if (null? ls)
        ns
        (let ((x (car ls)))
          (lp ((fif not
                    (lambda (_) (cons (cons x 1) ns))
                    (lambda (n)
                      (set-cdr! n (add1 (cdr n)))
                      ns))
               (assq x ns))
              (cdr ls))))))

;; sort-nodes :: [(a . Int)] -> [(a . Int)]
(define (sort-nodes ns)
  (sort ns (lambda (x y)
             (> (cdr x) (cdr y)))))

(define (diff-nodes ms ns)
  (let lp ((ds '()) (ns ns))
    (if (null? ns)
        (sort-nodes ds)
        (lp (let* ((n (car ns))
                   (m (assq (car n) ms)))
              (cons (cons (car n)
                          (- (cdr m) (cdr n)))
                    ds))
            (cdr ns)))))

(define (get-total-score x p)
  (foldr (lambda (n acc)
           (+ (get-score n) acc))
         0
         (filter-nodes (cut p <> x))))

(define (score-loved x)
  (get-total-score x to?))

(define (score-loving x)
  (get-total-score x from?))

(define (score-between x y)
  (+ (score-relation (cons x y))
     (score-relation (cons y x))))

(define (-> x)
  (display (format "~%Links from [~a]~%" x))
  (iter-nodes (fif (cut from? <> x)
                   print-node)))

(define (<- x)
  (display (format "~%Links towards [~a]~%" x))
  (iter-nodes (fif (cut to? <> x)
                   print-node)))

(define (<-> x)
  (display (format "~%Reciprocal links for [~a]~%" x))
  (iter-nodes (fif (cut to? <> x)
                   (lambda (n)
                     (flip-relation n
                                    (lambda (m)
                                      (print-node m n)))))))

(define (<=> x)
  (display (format "~%Reciprocal matches for [~a]~%" x))
  (iter-nodes
   (fif (cut to? <> x)
        (lambda (n)
          (flip-relation n
                         (lambda (m)
                           (if (ormap (lambda (x)
                                        (ormap (lambda (y)
                                                 (equal? x y))
                                               (describe-relation m)))
                                      (describe-relation n))
                               (print-node m n))))))))

(define (<?> x)
  (let ((to (assq x (number-list (from-links))))
        (from (assq x (number-list (to-links)))))
    (display (string-append
              (format "~%Link statistics for [~a]~%"
                      x)
              (format "| ~a => ~a (love ~a)~%"
                      x
                      (cdr to)
                      (score-loving x))
              (format "| ~a => ~a (love ~a)~%"
                      (cdr from)
                      x
                      (score-loved x))))))

(define (info x)
  (for-each (cut <> x)
            (list <- <-> <=> -> <?>)))

;;; GraphViz (http://www.graphviz.org/) support

(define graphviz "C:/Program Files/ATT/Graphviz/bin/dot.exe")

(define (nodes->dot ns)
  (string-append "digraph cute {\n"
                 ;;"\tordering=out;\n"
                 ;;"\trankdir=LR;\n"
                 "\toverlap=true;\n"
                 "\tnode[fontname=\"msgothic.ttc\"];\n"
                 "\tedge[fontname=\"msgothic.ttc\",fontsize=9];\n"
                 (let lp ((str "") (ns ns))
                   (if (null? ns)
                       str
                       (let* ((n (car ns))
                              (s (score-relation n)))
                         (lp (string-append
                              str
                              (format "\t\"~a\" -> \"~a\""
                                      (symbol->name (car n))
                                      (symbol->name (cdr n)))
                              (format "[label=\"~a\",color=\"~a\","
                                      (break-string
                                       (car (describe-relation n))
                                       7)
                                      (cond ((> s 0) "red")
                                            ((= s 0) "green")
                                            (else "blue")))
                              (format "style=\"bold~a\"];\n"
                                      (if (and (not (= s 0)) (< s 1) (> s -1))
                                          ",dashed"
                                          "")))
                             (cdr ns)))))
                 "}"))

(define (write-dotfile dot file)
  (and (file-exists? file) (delete-file file))
  (with-output-to-file file
    (lambda ()
      (display dot)))
  file)

(define (dot->png dot png)
  (call-with-input-file (write-dotfile dot "c-ute.dot")
    (lambda (in)
      (and (file-exists? png) (delete-file png))
      (call-with-output-file png
        (lambda (out)
          (run graphviz "-Tpng" in out)))))
  'done)

;;; Setup database

;; Based on:
;; http://ex23.2ch.net/test/read.cgi/morningcoffee/1188654905/116-142
(begin
  (relate 'maimi 'erika "大好き" 1)
  (relate 'maimi 'kanna "良き妹" 1)
  (relate 'maimi 'airi "良き妹" 1)
  (relate 'maimi 'mai "姉妹" 0)
  (relate 'erika 'maimi "一番可愛いよ" 1)
  (relate 'erika 'kanna "仲間" 0)
  (relate 'erika 'chisato "おソロパジャマ" 0)
  (relate 'kanna 'erika "仲間" 0)
  (relate 'kanna 'maimi "好き" 1)
  (relate 'kanna 'saki "喰ってやるよ" 1)
  (relate 'kanna 'mai "喰ってやるよ" 1)
  (relate 'kanna 'airi "大好き" 1)
  (relate 'kanna 'chisato "愛理に手出すんじゃねぇよ" -1)
  (relate 'saki 'maimi "荷物整理" 0)
  (relate 'saki 'erika "彼氏にしたい" 1)
  (relate 'saki 'kanna "興味がある" 0.5)
  (relate 'saki 'chisato "愛理に手出すんじゃねぇよ" -1)
  (relate 'saki 'airi "好き" 1)
  (relate 'airi 'kanna "受け入れる" 1)
  (relate 'airi 'chisato "最近親密" 1)
  (relate 'mai 'erika "保護者" 0)
  (relate 'mai 'maimi "姉妹" 0)
  (relate 'mai 'chisato "恋人" 1)
  (relate 'chisato 'erika "おソロパジャマ" 0)
  (relate 'chisato 'mai "恋人" 1)
  (relate 'chisato 'airi "最近親密" 1))

;; query relations / draw graphs

(if (file-exists? graphviz)
    (dot->png (nodes->dot (ordered-pairs))
              "c-ute.png")
    (for-each info (all-members)))

追記(グラフ描画について)

Graphviz というソフトによって関係図を可視化できる、ということを教えていただきました(既に上プログラムを実行すると自動的に関係画像を作成するようにしてあります)。ここでは技術的な観点から幾つか注意点を挙げておきます。


まず、Scheme プログラムから Graphviz を動かす方法について。コマンドラインからの起動のように、プログラムへのオプション文字列で入出力ファイルを指定する方法ではどうも上手く行きませんでした。調査の結果、入出力ファイルポートScheme 側で用意しておく必要があるようです。処理系によって異なりますが、PLT Scheme の場合 subprocess という関数を次のように呼び出します。

(subprocess output-port input-port #f "/path/to/dot.exe" "-Tpng")

ここで output-port は png画像ファイルへの出力ポート。input-port は dot ファイルグラフの定義ファイル)の入力ポートです。エラーポートは必要無いでしょう (#f)。

dot という名前の実行ファイルが、関係図のような有向グラフを描画するプログラムです。最後にオプション文字列として出力形式を指定します(png, jpeg, gif, etc.)。


次に dot ファイルScheme で書く方法ですが、以下の基本的な有向グラフの書式

digraph g {
  A -> B;
  B -> C;
  C -> A;
}

を理解すれば、後は実直に Schemeデータを当てはめて format 関数等で変換するだけです。

(string-append
 "digraph g {"
 (format "~a -> ~a;" (car node) (cdr node))
 "}")

問題は、ノードを配置する順番によって出来上がる画像が変わってくる、ということです。

より見た目に分かりやすくするための工夫としては、相互にリンクするノード同士が dot ファイル上でも近接して出力されるようにすると良いでしょう。関連の強いものが画像の上でも近くに表示されるようになります。

また上述(特に例3)のスコア概念を応用し、スコアの低いものが後に出力されるようにすることで、重力感覚に一致するような関係図を得ることができるでしょう。

- 転職ならen
- 派遣ならen
 
1ページ中1ページ目を表示(合計:5件)