いてつくブログ

2ちゃんねるのスレッドをコピペしてまとめてみるブログ

プログラム技術

PC等【Perl,Python,PHP】LL バトルロワイヤル 25【JavaScript】

1 :uy:2012/08/11(土) 12:21:25.19
面白かったのでコピペ

979 名前:uy[sage] 投稿日:2012/08/11(土) 11:53:55.80
面接官「特技はRubyとありますが?」
学生 「はい。Rubyでならなんでもかけます。」
面接官「ではシングルトンパターンを書いてください。」
学生 「存在しません?」
面接官「え、存在しない?」
学生 「はい。存在しません。Rubyはシングルトンパターンを言語でサポートしています。」
面接官「・・・で、その言語でサポートされた機能を使うとシングルトンパターンになるんですよね?」
学生 「はい。シングルトンパターンです。」
面接官「いや、あなたRubyでシングルトンパターンは存在しないといいましたよね。なぜシングルトンパターンになるんですか?」
学生 「でも、シングルトンパターンは存在しないんですよ。」
面接官「いや、存在しないとか問題じゃなくてですね・・・」
学生 「Rubyなら簡単にシングルトンパターン書けますよ。」
面接官「ふざけないでください。それに機能が用意されてるってことは存在するでしょ。だいたい・・・」
学生 「機能は用意されていますが言語でサポートしているんです。だから存在しません。」
面接官「聞いてません。帰って下さい。」
学生 「あれあれ?怒らせていいんですか?シングルトンパターン書きますよ。」
面接官「いいですよ。書いてください。Rubyでシングルトンパターンを。それで満足したら帰って下さい。」
学生 「運がよかったな。Rubyにシングルトンパターンは存在しないようだ。」
面接官「帰れよ。」


146 :デフォルトの名無しさん:2012/08/15(水) 15:17:03.87
Rubyはなんでdoに|つけるの?

149 :デフォルトの名無しさん:2012/08/15(水) 15:39:44.61
>>146
パイプでブロック引数をはさまないと、
それがブロック引数なのか、
単に式としてそこにあるのかが区別できない

151 :デフォルトの名無しさん:2012/08/15(水) 15:46:24.88
>>149
pythonみたいな
for t in list:
みたいにできなかったの?
絶対にこっちのほうがわかりやすいと思うんだけど||でかこったら特殊な演算やってそうじゃん

153 :デフォルトの名無しさん:2012/08/15(水) 15:49:51.63
>>151
for t in list; end という構文も最初から存在していますけど、なにか?

162 :uy:2012/08/15(水) 16:52:58.51
rubyで一番よく使うのはmap、これは戻り値に配列を返す
普通に書いたら
p [1,2,3].map { |x| x*2 } # => [2, 4, 6]

だけど、メソッド(イテレータ)チェインする事によって、本来配列を返さない
each_with_indexなども
p [1,2,3].each_with_index { |x,i| x*(2+i) } # => [1, 2, 3]

mapを置く事による戻り値を変えられる
p [1,2,3].each_with_index.map { |x,i| x*(2+i) } # => [2, 6, 12]


これをforで書くとこう
s??=??[]
i??=??0
for??x??in??[1,2,3]
????s??<<??x*(2+i)
????i??+=??1
end
p??s

for文とイテレータじゃ力の差が有りすぎて異論の余地すらない

177 :デフォルトの名無しさん:2012/08/15(水) 18:40:16.04
だから、分かりやすいのがよいなら、
一時変数用意すればよいだろ。何の説明も要らなくなるよ。

181 :153:2012/08/15(水) 19:14:29.25
>>177
一時変数は悪ではないし、否定しないよ
実際に実用的なプログラムでは、あまりに長いメソッドチェーンを
途中で切って、間に一時変数を入れることがある
ただし、一度代入したら二度と更新しない

問題は変数の「破壊的代入」
たとえば>>162の最後にあるforを使った手続き型スタイルでは、
最初にリスト変数とループ変数に初期値を代入した後、
forループ内でこれら変数をゴリゴリと更新(破壊的に代入)している
これが可読性の悪化とコード品質の低下をまねく要因

なお破壊的代入の無さは、専門用語だと「参照透明性」と呼ばれる

191 :デフォルトの名無しさん:2012/08/15(水) 21:10:40.01
内包表記が読み難いとか言ってる奴は
数学の素養が無いって自己紹介してることに気付いてないの?
かっこわるいから控えた方が良いよ

197 :153:2012/08/15(水) 21:57:54.67
>>191
自分は内包表記が読み難いとは思わないね
ただしPythonの場合、局所宣言またはクロージャがないから
せっかくの内包表記構文が台無しになっている
過去スレ19,20で議論になったコードを以下に示す

==== Haskell ====
 data Option a = None | Some a
 ys = [fn x | x <- xs]
   where fn x =
     let
       h = if is_first_page x then generate_header else None
       b = generate_body x
       f = if is_last_page x then generate_footer else None
     in
       (h, b, f)

Haskellには局所宣言としてwhere節があるから、関数fnを定義することで
内包表記を含む式をトップダウンに数学っぽく記述できる

==== Python ====
 ys??=??(Document.new(h,b,f)??for??x??in??xs
   for??h??in??[generate_header()??if??x.is_first_page??else??None]
   for??b??in??[generate_body(x)]
   for??f??in??[generate_footer()??if??x.is_last_page??else??None])

このPythonコードが何をしているかどうか、はたして一目で把握できるかな?

198 :153:2012/08/15(水) 22:01:18.03
参考として、>>197に関するRubyのコードを過去スレからコピペする

==== Ruby ====
 ys = xs.map { |x|
   h = if x.first_page? then generate_header else nil end
   b = generate_body x
   f = if x.last_page? then generate_footer else nil end

   Document.new h, b, f
 }

Rubyには内包表記構文は無いけれど、普通に書ける(実に初歩的なコードだ)

211 :デフォルトの名無しさん:2012/08/15(水) 22:52:50.85
>>197をPythonで(RubyやHaskellのコード相当で)書くならごく素直に

def preprocess(x):
h = generate_header() if x.is_first_page else None
b = generate_body(x)
f = generate_fotter() if x.is_last_page else None
return h, b, f
ys = [Document(preprocess(x)) for x in xs]

じゃないかと。まずリスト内包で書くことはない

235 :153:2012/08/16(木) 10:04:35.58
>>211
ん、最終行にはリスト内包表記が見えるけど、気のせいかな?

それはさておき、Pythonでは「ごく普通に」関数を定義して適用するのに対して、
Ruby(および関数型言語)では「ごく普通に」ブロックや無名関数を使って
シンブルな式として表現できる、ということになった
また当たり前だけど、>>211のような関数を定義するコードはRubyでも書ける

これは>>197,198で述べたように、関数型言語風プログラミングにおいて
局所宣言が無いというPythonの欠点、そしてRubyの優位性を示している

237 :デフォルトの名無しさん:2012/08/16(木) 11:05:52.40
>>235
Rubyは関数内関数を素直に定義できないじゃん
Proc??と??lambda??の違いとかキモイし
どさくさにまぎれて関数型言語と一緒にすんなよ

243 :153:2012/08/16(木) 14:13:16.73
>>237
>Rubyは関数内関数を素直に定義できないじゃん

エッ!、Rubyは普通に関数内関数を定義できるよ???
以前(1.8)は関数内関数のスコープに問題があったけど、今(1.9)では解消されたし

・メソッド定義のネスト - Ruby 1.9.3 リファレンスマニュアル
 http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fdef.html#nest_method

というか、OOPLであるRubyでは、プライベートメソッドとして定義するのが一般的で、
関数内関数はまず目にすることはない
しかも(>>211のPyhtonのような)他LLでは関数定義を「普通」に使うけど、
Rubyならブロックがあるから一度しか適用しない関数は式の中に埋め込むのが「普通」
つまり、(関数内関数を多用せざるをえない他LLと違って)関数内関数を使う頻度は少ない

>Proc??と??lambda??の違いとかキモイし

確かにProcとlambdaの微妙な差異は分かりづらいよね
でもRubyにはブロック構文があるから、(Procやlambdaのような)明示的な無名関数宣言を
使う頻度は比較的少ないし、使うケースでもどちらか一方を使えば済むことが多い
また、言語の微妙な弱点を避けて、良い点を引き出すことに注力することが
(Rubyに限らず)中級プログラマのたしなみの一つだと考える

>どさくさにまぎれて関数型言語と一緒にすんなよ

え、一度も「Rubyは関数型言語である」とは言ってないけど.....???
「関数型言語風プログラミングには(他LLよりも)Rubyは明らかに優れている」と主張している


244 :デフォルトの名無しさん:2012/08/16(木) 14:25:57.61
>>243
>??エッ!、Rubyは普通に関数内関数を定義できるよ???

はあ?じゃあ何で関数内関数が外から見えてんだよ

http://ideone.com/4J057

245 :デフォルトの名無しさん:2012/08/16(木) 14:42:18.11
>??つまり、(関数内関数を多用せざるをえない他LLと違って)関数内関数を使う頻度は少ない

関数型言語でも関数内関数を多用するけど...?

「関数型言語風プログラミング」って何?
それってただの「Ruby風プログラミング」なんじゃないの?

248 :153:2012/08/16(木) 14:50:55.63
>>244
わざわざideon上のコードを引用しなくても、Rubyの振る舞いは>>243で示した
リファレンスマニュアル「普通のメソッド定義式と同じ」の通りだよ???

確かに、理想的には内側のメソッドが外部から隠蔽されたほうが望ましいことは認める
これが>>211のPythonコードのように、関数定義を多用するのが「普通」、
あるいは関数定義を多用「しなければならない」言語であれば、致命的な欠陥になる
でも>>243で述べたように、Rubyでは関数内関数の必要性がほとんど存在していないんだ

もしも可能であるならば、ブロックやプライベートメソッド定義では読みづらかったり
冗長だったりするけど、関数内関数であれば素直に表現できるコード例を示してほしいなあ...


255 :153:2012/08/16(木) 15:41:10.73
>>245
>関数型言語でも関数内関数を多用するけど...?

うん、関数型言語では関数内関数でプログラムを構築していくのが普通だね
でもRubyはオブジェクト指向言語であり(>>243の最後で書いたように)関数型言語ではないから、
モジュールやクラスでプログラムを構築するのが普通なんだ

>「関数型言語風プログラミング」って何?

「(破壊的代入を含む)副作用を避けた参照透明性のあるプログラミング」(>>181も参照)

これは関数型言語のパラダイムと同じ
もちろん(関数内関数ではない)Rubyでは、入出力や効率(性能や資源)といった理由から
完全に参照透明性のあるコードは書けないけど、それでも副作用を極力避けたり、
参照透明性のある部分とない部分を意識的に使い分ける、あるいは副作用のあるコードを隠蔽する

現実に実用的なテキスト処理プログム開発で試したところ(全体で約20Kstep)、
8割は参照透明性のあるコードで実装することが可能だった
残る2割の部分は、トップレベルの(入出力を含む)メイン処理モジュール群と
最下層の副作用をカプセル化(隠蔽)した内部ライブラリ群になる

264 :デフォルトの名無しさん:2012/08/16(木) 17:48:13.46
旧世代的なラムダ脳にはリスト内包表記、イテレータ、ジェネレータ、デコレータを上手く使うPythonicなコードは理解出来ない
なんとかラムダで書こうとするのは、どの言語でもCみたいなコードを書く奴と何も変わらん

267 :153:2012/08/16(木) 18:11:28.09
>>264
論よりコード

270 :デフォルトの名無しさん:2012/08/16(木) 18:42:06.27
>>267
Closures in Python (part 1)
http://ivan.truemesh.com/archives/000392.html
>(ie. use a "list comprehension" - I think it reads a bit easier than using the map/lambda).

278 :デフォルトの名無しさん:2012/08/16(木) 19:02:19.29
そもそも関数定義無しに書けなきゃダメって
勝手にルール作ってるところがおかしい

285 :デフォルトの名無しさん:2012/08/16(木) 19:21:31.64
>全ての関数をラムダ式で書くわけもなく、普通に関数定義するし
普通の関数もかけるのは当たり前で、
それだけじゃつらいからラムダを導入したって話だろ。
論点ずれてるだろ。何言ってんだか。
ラムダが要らないものならわざわざ変な文法作ってまで導入するかよ。

286 :デフォルトの名無しさん:2012/08/16(木) 19:23:37.43
>>285
上のはラムダで書くべき例なの?

287 :153:2012/08/16(木) 19:26:19.29
>>278,279
あらゆる関数型言語であれば関数定義無しにかけるから、
それは「関数型プログラミング」の特徴の一つである、という理屈
だってPythonだけが関数定義が無ければ書けないんだから、
マイナス評価されても当然だろ?

というかさ、もしルールに不満があるならそれを最初に主張すべきだった
具体的には、>>235の指摘に対して即座に反論すればよかったのに....
いろいろゴネたあげく、技術論で反論できないからルールに不満を言うのは
カッコワルイと思うよ

294 :デフォルトの名無しさん:2012/08/16(木) 20:14:22.38
>>287
あれ?お前>>255でRubyはOOPLだから関数内関数無くても良いんだとか
言ってなかったっけ?
関数型言語では関数内関数あるんだからRubyではdefの入れ子で
関数内関数が定義できないのはマイナス評価されても良いの?

297 :デフォルトの名無しさん:2012/08/16(木) 20:18:08.51
(1)Pythonのlambdaじゃ書けなくて
(2)関数を定義したら冗長になってしまうほど短い

そんな例題があればいいんだよ

310 :153:2012/08/16(木) 21:19:31.47
>>294
>関数型言語では関数内関数あるんだからRubyではdefの入れ子で
>関数内関数が定義できないのはマイナス評価されても良いの?

正確には「関数内関数定義で内部の関数が外部から隠蔽されない」だね
もちろんこの点はRubyのマイナス評価であると認めるよ
また、アンカも間違いで(>>255ではなくて)>>243じゃないかな?

さらに言えば、>>297自身も(>>243,248から)引用しているように、
このマイナス評価はRubyにとっては致命的な欠点ではない
もしも致命的ではないという意見が不満ならば、
>>248の最後でリクエストしたように具体的なコードで語って欲しい

論よりコードだ

328 :デフォルトの名無しさん:2012/08/16(木) 22:02:23.59
Pythonディスりたければ、俺みたいに、
あの糞みたいな、ネスとスコープの仕様をつつけば良いのに。
あれだけは生粋のパイソニストでも擁護不可能だからね。
擁護しようものなら、
今になってnonlocal追加した事実に反してしまうしな。

333 :デフォルトの名無しさん:2012/08/16(木) 22:08:32.79
>>328
nonlocal(酷い名前だ)を追加したPython3ではネストスコープの問題は無いの?

344 :デフォルトの名無しさん:2012/08/16(木) 22:24:22.12
>>333
ああ、問題残ってるよ。代入の有る無しでスコープが切り替わる問題が。
互換性のためか残っちゃってるけど、
nonlocal追加したんなら、思い切ってこの糞仕様は廃止すべきだったな。
nonlocal有りならネストスコープ、無しならローカルスコープ。
一貫してそれでよかったんだよ。シンプル、単純、分かりやすい。
スコープ調べるのに代入の有る無し調べるとか意味わかんねー。
折角nonlocal追加したのに、なぜに。
二箇所調べなきゃならなくなったから、状況はより悪化したともいえる。

346 :デフォルトの名無しさん:2012/08/16(木) 22:26:16.84
>>344
ちょっと待てよ。nonlocal追加以前はそもそも代入不可だろ

349 :デフォルトの名無しさん:2012/08/16(木) 22:30:33.87
>>346
いや、代入できるよ。ローカルスコープの変数になるけどな。
代入があっても、nonlocalならネストスコープ。
nonlocal無くても、代入が無ければネストスコープ。
あー超ややこしいね。
単に、nonlocal有り/無しで、ネスト/ローカルが切り替わる
方が直感的で良いよなぁ。

419 :デフォルトの名無しさん:2012/08/17(金) 02:16:05.29
ラムダを多用ってどこの誰が多用してんの?

512 :uY:2012/08/20(月) 05:46:11.83
さっきちょっと書いたコードなんだけど
何も考えずに適当に書くとこうなるコードでも

n??=??i??=??0
s??=??[]
b??=??["a","b"]
[1,2,3].cycle??do??|??m??|
????n??+=??1
????i??+=??1
????break??if??n??==??21
????s??<<??m
????if??i??==??4
????????i??=??0
????????s??<<??b.first
????????b.rotate!
????end
end
p??s

↓ちゃんと書けばちゃんとブロック内に全部収まるところが、rubyが最強である所以だと思う

[1,2,3].cycle.take(20).each_with_index.each_with_object??[??s??=??[]??,??["a","b"]??]????do??|??(??m??,??i??)??,??(??s??,??b??)??|????
????s??<<??m
????(??(i??+=??1)??%??4??).zero???and??s??<<??b.rotate![-1]
end
p??s

メソッド名が長かったりしてソースは長いけどアルゴリズムとしては完璧なものが書けるんだよ

519 :uY:2012/08/20(月) 16:31:55.85
40.times.map.each.with_index(1).each_with_object( [ [1,2,3] , ["a","b"] ].map(&:cycle) ).map?? do | ( m , i ) , ( a , b ) |??
?? Hash[ true , b.next , false , a.next ][ ( i % 5 ).zero? ]
end.display

puts

[1,2,3].cycle.take(40).each.with_index(1).each_with_object( ["a","b"].cycle ).map?? do | ( m , i ) , b |??
?? ( i % 5 ).zero? ? b.next : m
end.display


変数の完全隠蔽がされている

アルゴリズムとして完璧なんだよこれは


これを無駄に長いとはいわない
短くしようと思えば出来る長さなんだよ
すべてがメソッドで、その引数で構成されているから

↓これが出来る

a = [1,2,3].cycle.take(40).each.with_index(1).each_with_object( ["a","b"].cycle )

a.map do | ( m , i ) , b |??
?? ( i % 5 ).zero? ? b.next : m
end.display


520 :デフォルトの名無しさん:2012/08/20(月) 17:05:56.67
from??itertools??import??cycle

print([s??if??i??%??5??==??0??else??n??for??n,s,i
????????in??zip(cycle([1,2,3]),??cycle("ab"),??range(1,41))])

576 :uY:2012/08/21(火) 19:53:34.60
def func n , aa , bb
?? y = Enumerator.new do | e |
?? ?? a = aa.cycle
?? ?? b = bb.cycle??
?? ?? [*1..n].cycle { |i|
?? ?? ?? r = (i%n) == 0 ? a : b
?? ?? ?? e << r.next
?? ?? }
?? end
end

y = func 5 , ["a","b"] , [1,2,3]

p y.take(20) # => [1, 2, 3, 1, "a", 2, 3, 1, 2, "b", 3, 1, 2, 3, "a", 1, 2, 3, 1, "b"]

y = func 2 , [true] , [false]

p y.take(20) # => [false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]


ゲームでインターバルの制御に使うんです


592 :デフォルトの名無しさん:2012/08/21(火) 21:51:53.70
>>576
func の中の y の代入が意味不明。
[*1..n].cycle は冗長。

def func(n, aa, bb)
????Enumerator.new do |y|
????????a = aa.cycle
????????b = bb.cycle
????????loop{ (n-1).times{ y << b.next }; y << a.next }
????end
end

enum = func(5, ["a","b"], [1,2,3])
p enum.take(25)

720 :デフォルトの名無しさん:2012/08/30(木) 16:23:23.43
大学のプログラミングでperlやってるんですが
3年になったら何言語やるんでしょう?

1年 C java Basic Javascript ruby
2年 C++ perl
な感じです。

2学期後期は何ですか?

765 :uy:2012/08/31(金) 03:21:35.57
逆に考えると専門にはいれば
論外的に才能ない奴はすぐ挫折していなくなるから、かえってそのほうが早期にIT脱出できて幸せなんじゃね
大学だと才能なくてもやめずに4年間ズルズルとやり続けて産廃になってる可能性もある
才能がないなら早めにリターンしたほうが絶対良い


http://toro.2ch.net/test/read.cgi/tech/1344655285/l50/../人気ブログランキングへ

PC等関数型言語Part5

1 :デフォルトの名無しさん:2009/09/09(水) 13:31:46
Lisp Scheme ML Haskell FP Mirranda など
関数型言語について話し合いましょう。

前スレ
関数型言語Part IV
http://pc12.2ch.net/test/read.cgi/tech/1083649982/

関連スレ

Lisp Scheme Part27
http://pc12.2ch.net/test/read.cgi/tech/1248657331/

関数型言語ML (SML, OCaml, etc.), Part 6
http://pc12.2ch.net/test/read.cgi/tech/1245017721/

関数型プログラミング言語Haskell Part11
http://pc12.2ch.net/test/read.cgi/tech/1252382593/

Emacs Lisp 3
http://pc12.2ch.net/test/read.cgi/tech/1191875993/

283 :デフォルトの名無しさん:2011/09/28(水) 10:01:26.13
ある言語が関数型であるか否かを判断できる基準はあるかな?たとえば、
(1) 条件判定式(if/case式)がある
(2) 局所宣言式(let/where式)がある
(3) 末尾再帰の最適化
これらすべてを満たせば、大半の人には関数型であると同意してもらえると思う。
ML/Haslell/Schemeはすべて満たすから文句無し。(ただしLispは(3)がNG?)
Smalltalk/Rubyは(1)のみで、Python/JavaScriptは全滅だから関数型とは認められない。

295 :デフォルトの名無しさん:2011/09/28(水) 13:46:33.23
Python??2.5でif式(三項演算子)が入ってる

298 :デフォルトの名無しさん:2011/09/28(水) 16:13:01.13
Perlの無名関数はラムダとして認められないの?

300 :283:2011/09/28(水) 17:09:22.56
>>295
確かにif式はあるけど、Pythonのif式ってすごく特異というか汚い構文ですよね。
 value = then_value if predicate else else_value
たとえば条件判定がネストした処理をコード化した場合、SMLだと
 val value =
   if x == 0 then (
     if y == 0 then
       1
     else
       2
   ) else (
     .... 省略 ....
   )
同じ処理をRubyなら
 value =
   if x == 0 (
     if y == 0
       1
     else
       2
     end
   ) else (
     .... 省略 ....
   )
と、ほぼ類似のコード構造で、しかも適切なインデントで記述できます(=可読性のある記述ができる)。
SchemeとSmalltalkは構文が異なりますけど、これらの言語でも適切なインデントでコード化できます。
でも、このPhytonの構文だと、(自分の知識では)可読性のあるコードが書けないと思います。いかがでしょうか?


308 :デフォルトの名無しさん:2011/09/28(水) 19:22:34.24
>>283
そもそも、ある言語が関数型であるか否かを判断する「理由」はなに?

関数型であるか否かを判断する必要があるのってどういう場合?

314 :283:2011/09/28(水) 20:33:17.09
>>308
正直言って、あまり考えていないです。
「「分ける」こと「わかる」こと」という分類学の本(講談社学術文庫)がありますけど、
関数型であるか否かを考えることで関数型言語とは何かを理解しようとしているだけです。

あえて言えば、局面に応じた言語の使い分けですね。
デフォはRuby、でもここはSMLでも書き直そう、ただここだけはHaskellのほうが直感的に書ける....というふうに。

318 :デフォルトの名無しさん:2011/09/29(木) 00:39:55.69
「問題を解決する為に数学的な関数を構築する」

これをするプログラミング言語が関数型言語であり、これが本質です

それ以外の末尾再帰最適化や条件判定式、局所宣言式など諸々は全て、
個々のプログラミング言語が個々の目的の為に加えた飾りです
IOへのアクセス手段も、外部ライブラリへのアクセス手段も飾りです

それが実用かどうかは、関数型言語かどうかとは一切関わらない別問題です

100%この本質だけでプログラミング言語が作られている訳ではもちろんありません
ですが、基本理念としてこの本質を据え、その上でこの本質が活きるよう、
できるだけ壊さないよう、実用や教育(や遊び?)といった目的に応じて飾りが加わります

本質を忘れると、本質を活かすように加えられた飾りを上手く活用できません
本質を忘れると、馬鹿な考えに至ったり、関数型プログラミング言語で問題を解決することが
非常に困難になります

「関数型の特徴を取り入れた」と一般的に言っているのは本質を忘れた馬鹿な発言のいい例です
それは、ある複数の関数型プログラミング言語が共通して持つ「便利な飾り」を、
取り入れ先のプログラミング言語に合うように仕立て直したというだけのことです
本質を考えれば、関数型言語としての特徴を取り入れた訳では全くないことが分かります

334 :283:2011/09/29(木) 18:17:12.26
>>298,323

FP
 ---- 壁0. 変数の壁 ----
Haskell
 ---- 壁1. 純粋性(副作用)の壁 ----
SML/OCaml/C++11
 ---- 壁2. 型推論の壁 ----
Scheme
 ---- 壁3. 末尾再帰最適化/局所定義式の壁 ----
========<< 越えられない壁 >>========
Smalltalk/Ruby
 ---- 壁4. 条件判定式の壁 ----
Perl/Python/JavaScript
 ---- 壁5. クロージャ/ラムダ式の壁 ----
========<< 越えられない壁 >>========
C/C++/Java...etc

336 :デフォルトの名無しさん:2011/09/30(金) 20:14:01.41
条件判定式の壁ってのが相変わらず分からん

340 :283:2011/09/30(金) 21:23:28.76
>>336-338
条件判定が式として自然な形でコード化できるよう言語が設計されているか否か?という意味です。
誰もが関数型言語だと認める言語(>>334の最上段)であれば、当然これを満たしています。

Perl/Python/JavaScriptは条件判定(ifやcase)が(式ではなく)文として定義されているのでNGになります。
Pythonについては、if式はあるけれど「実用性に欠ける」設計であると判断しました。(>>300を参照)
もし value = if predicate ":" then_value else else_value という構文であればOKにしたかったのですが....。

# あくまで「俺様流判定基準」なので、納得いかないという意見が多々あることは承知してます

361 :デフォルトの名無しさん:2011/10/06(木) 00:33:33.17
>>318
> 「問題を解決する為に数学的な関数を構築する」
>
> これをするプログラミング言語が関数型言語であり、これが本質です

というような恥ずかしい大袈裟な言葉を平気で書けるのは、
君が関数プログラミングについて何も分かっていない事の証拠だね。
そもそも「数学的な関数」という言葉が何を表すかを理解せずに使ってるんだろう。

普通に数学で言う「関数」と関数プログラミング言語での「関数」は全然違う。
せめて学部レベルでも数学を専攻してちゃんと勉強した人間ならば
関数プログラミング言語での「関数」が数学での関数とはかけ離れた概念だと気づく筈だ。
そんな基本中の基本すら理解していないから上の引用箇所のような事を平気で書けるんだろうが。

364 :デフォルトの名無しさん:2011/10/06(木) 01:18:36.50
>>361
> 普通に数学で言う「関数」と関数プログラミング言語での「関数」は全然違う。
> せめて学部レベルでも数学を専攻してちゃんと勉強した人間ならば
> 関数プログラミング言語での「関数」が数学での関数とはかけ離れた概念だと気づく筈だ。

そんなことはない。
ラムダ計算が何のために作られたのか知らないのか?

ラムダ計算のみに依拠するようなら純粋な関数型言語(Haskellは理念的にはほとんどそう)の関数は、数学上の計算可能な関数と同じもの。

384 :デフォルトの名無しさん:2011/10/07(金) 00:02:40.48
>>364
> そんなことはない。
> ラムダ計算が何のために作られたのか知らないのか?

そんな事は百も承知だ。

> ラムダ計算のみに依拠するようなら純粋な関数型言語(Haskellは理念的にはほとんどそう)の関数は、数学上の計算可能な関数と同じもの。

まず普通の数学、つまり数学の主流分野の代数学・幾何学・解析学で登場する関数つまり写像は計算可能である必要はないし
存在しか主張できない写像はいくらでも登場する。数学の主流分野では「計算可能」なんて条件はほとんど無意味。
君が言っている「数学上の」の「数学」は数学基礎論という普通の数学からは相手にされてない数学の辺境の中でも
辺境中の辺境の再帰関数論部落や証明論部落の住民が考えている「数学」だ。
数学基礎論でも普通の数学と多少は繋がりのあるモデル論部落や公理的集合論部落になればすぐに計算可能とは限らない写像が現れる。
最も簡単な例は選択公理が存在を主張する選択関数だ。

更にλ計算はindefiniteに対する関数値とある変数をパラメタとする関数そのものを厳密に区別する表記法としてのλ記法での「関数値の計算」が
どういう事なのかを分析する為に、λ記法を純粋に構文的な体系として形式化し対象化したものだから、
λ計算での計算はreductionという純粋に構文的な概念のみだ。

ところが関数プログラミング言語で実際に行われている計算は必ずしもそうではない。少なくとも純粋に構文的なものとして理解しようとすれば
気がおかしくなりそうな計算メカニズムを用いているケースは珍しくない。グラフ簡約とかな。

数学をせめて学部レベルほどもちゃんと学ばずに基礎論の解説か通俗書をチョイと齧ったぐらいで「数学上の」なんて言い切らない方がいいよ。


391 :デフォルトの名無しさん:2011/10/07(金) 09:47:34.55
>>384

> まず普通の数学、つまり数学の主流分野の代数学・幾何学・解析学で登場する関数つまり写像は計算可能である必要はないし
・・・
> 最も簡単な例は選択公理が存在を主張する選択関数だ。

この部分は、数学でいう関数には計算可能でないどころか、存在することしか分からない関数もある、ってことだよね、要は。
それはそうだけど、それがなんで

> 普通に数学で言う「関数」と関数プログラミング言語での「関数」は全然違う

という言明を正当化するのか分からん。数学でいう「関数」の全部を扱えなくとも、その一部を扱えていれば十分じゃん。

加法と乗法しか習っていない小学生の使う自然数は、大学生の使う自然数とは別のものなのか?
もしそうだというなら、それこそ、過度に数学基礎論的な見方だと思う(嫌いではない)。


> ところが関数プログラミング言語で実際に行われている計算は必ずしもそうではない。少なくとも純粋に構文的なものとして理解しようとすれば
> 気がおかしくなりそうな計算メカニズムを用いているケースは珍しくない。グラフ簡約とかな。

グラフ簡約はいいだろ。
数学者が証明過程でいちいち論理学レベルの変形を事細かに書かないようなもんだろ。


数学基礎論を悪し様に言いつつも、オマエの言っていることには数学基礎論的な潔癖性を感じる。

404 :デフォルトの名無しさん:2011/10/10(月) 19:02:16.93
>>391
> > 普通に数学で言う「関数」と関数プログラミング言語での「関数」は全然違う
>
> という言明を正当化するのか分からん。数学でいう「関数」の全部を扱えなくとも、その一部を扱えていれば十分じゃん。

数学での関数概念は外延的。
プログラミングでの関数概念は内包的。

405 :デフォルトの名無しさん:2011/10/10(月) 19:12:12.84
>>404
> 数学での関数概念は外延的。

アホ?

491 :デフォルトの名無しさん:2011/10/23(日) 02:38:45.93
たとえば、自動販売機の状態遷移図があったとして、それを実装しようとした時、
OOP なら素直にクラスを作って、素直に状態遷移の処理が書ける
デザインパターンにもあるくらいだし

一方、これを関数型で実装しようとすると、状態遷移図の読み取ってから、
それをコードに落とすまでに、素直に作業が進むとは言いがたいと思う
(実際にそういう経験が多々ある)
図ではそれぞれの状態は分かれて書かれているのに、
関数型のコードにすると局所化されずに関係が全体に広がってしまう感じ

なんていうか、図とコードの一体感が薄い

OOP だって図とコードが一対一に対応しているわけでは決して無いんだけど、
OOP の場合は他人のコードを読んで、それを逆に状態遷移図に起こすことも、
そのコードが元々ちゃんとした状態遷移図からコード化してるのなら比較的素直にできる
それくらいには図とコードの一体感がある

関数型の場合、それが難しいと感じるケースが多い

状態遷移自体は必要なのだから何らかの図は必要なのだが、
今までの UML の状態遷移図が関数型にフィットしていないのか、
それともそれを関数型のコードに落とす手法に問題があるのか、
それとも単に私がまだまだ未熟なだけなのか

493 :デフォルトの名無しさん:2011/10/23(日) 05:59:43.71
状態という考え方と関数型プログラミングとは馴染まないんだよ。
そもそも状態遷移をガンガン使うって事は変数の値を次々に書き変える事で処理を進める手続き的パラダイムで考えてるって事だからね。
もちろん、そういうパラダイムの処理を関数型でシミュレートする(状態を表す引数を次々に渡す)事はできるが、
本来の関数型のパラダイムはそういう変数への破壊的な代入(バインディングとは等価でない代入)を避けるべきだという哲学に基づいているから
馴染まなくて当然だし、そういう状態遷移の処理を書くのならば関数型よりも手続き型の方が自然に書けて当然なんだよ。

494 :デフォルトの名無しさん:2011/10/23(日) 08:26:39.32
>>491-493
お前らにまとめて聞きたい
お前らはCのような手続き型言語であれば状態遷移機械を書けるのか?
実は書けない、あるいは今まで書いた事が一度も無いんじゃないのか?
情けない奴ら、お前らの将来はIT土方一直線で決定だ

反論があるなら、その前にまずWikipediaでトピック「有限オートマトン」にある
数学モデルの節を読め
ここではトランスデューサ型で決定性オートマトンだけを見ればいい
面倒であればトピック「ミーリ・マシン」を直に見てもいい

これだけ簡潔な数学的定義があるのに、まだ難しいとか馴染まないとか言うつもりか?!

510 :デフォルトの名無しさん:2011/10/23(日) 12:10:59.72
たとえば状態Aと状態B、状態Cがあるとする
今状態Aであるときにイベントxが起きたら、
状態Aが保持してる内部の変数の値とxで計算して、
その結果yをまた状態Aの内部変数に格納する
yの値によって次に状態Bか状態Cへ遷移する

こういう場合、OOP なら素直に状態毎にクラスを作る
あるいは一つのクラスのインスタンスを状態毎に作る
で、状態Aを表現するインスタンスのメンバ変数は、
そのインスタンスの中で完結していて外に出ることはない

一方、関数型でこれを実現するとき、
「状態を引数に入れて、計算して、戻り値として状態を返す」
ということを(再帰的に)繰り返すという方法をとると、
状態Aの内部変数に相当する値も色んなところへ運ばれる事になる
そうしないと、また状態Aに戻った時に計算できない

また、Haskell の State モナドのような仕組みを使っても同じ
本来は内部に閉じ込めておくべき情報が外に出ることに変わりはない

たとえ何らかの方法で、状態Bや状態Cの計算をしてる時には
状態Aの内部変数に相当する値にはアクセスできない仕組みがあるとしても、
その仕組みを作っている時は、色んなところへ情報が漏れることを
ちゃんと意識してプログラミングする必要がある
(一般的な OOP ならその仕組みは改めて作る必要は無い)

また、状態Aの計算の最後に状態Bを末尾呼び出しする方法は、
状態間の繋がりがますます強くなる

情報の漏れと結合度の強さ、これらをもう少し改善する方法はないだろうか

513 :デフォルトの名無しさん:2011/10/23(日) 12:17:44.03
>>510
> 一方、関数型でこれを実現するとき、
> 「状態を引数に入れて、計算して、戻り値として状態を返す」
> ということを(再帰的に)繰り返すという方法をとると、
> 状態Aの内部変数に相当する値も色んなところへ運ばれる事になる
> そうしないと、また状態Aに戻った時に計算できない

ん??? ここが不可解
それって、あなたがいっているOOPでも、状態Aから状態Bに遷移しても「状態Aのインスタンス」を保持しておいて、状態Aに戻ったときにそれを復帰させるってこと?

それはもう状態マシンの設計として破綻してない?
なんか、状態マシンと別の何かをごっちゃにしているような・・・

557 :デフォルトの名無しさん:2011/10/26(水) 01:47:25.32
GUIは状態が基本だし関数型は部分の開発効率向上寄与にとどまるよ

643 :デフォルトの名無しさん:2011/12/14(水) 14:12:31.00
関数型言語でもスパゲッティになる(ならざるを得ない)場合はあるでしょう。
自分が使っているコードにもそういう場所があって、反省してみると、
データの再帰的な定義に逆らうかたちでアクセスする場合に起こりがちな気
がします。

例えば、リストのリストを行列見立てて、アクセスすることを考えます。
(例えば、条件を満たす要素をnを取り出すなど)
val xss =
[ [1.0 , 2.0, ~3.0, 4.0]
, [~10.0, 20.0, 30.0, 40.0, 50.0]
, [100.0, ~200.0, 300.0]
, [1000.0, ~2000.0, 3000.0, 4000.0, 5000.0, 6000.0]
]

このときに、列方向(内側のリストに沿って)アクセスする場合は、
要素への操作をfとして
app (app f) xss
と簡潔に書けますが、行方向にアクセスする場合にはかなり複雑に
なります。

694 :デフォルトの名無しさん:2012/03/02(金) 00:25:01.03
関数型言語でWebのシステムは作れますか。
何か実績はありますか。

712 :デフォルトの名無しさん:2012/03/03(土) 15:59:16.17
なんで人はモナドで躓くんだろ?

748 :デフォルトの名無しさん:2012/03/04(日) 15:57:11.86
readFile :: FilePath -> IO String

なんで戻り値が String にならないの?
という初学者の素朴な質問にどう答えられるか。

749 :デフォルトの名無しさん:2012/03/04(日) 16:14:09.93
>>748
参照透過性が保証できないから

これくらいは初学者用の入門書に必ず書かれていると思うが

751 :デフォルトの名無しさん:2012/03/04(日) 16:25:13.92
>>749
答えになってないような。
IO String 型だとどうして参照透過性が保証できるの?

754 :デフォルトの名無しさん:2012/03/04(日) 17:09:44.62
>>751
逆だよ

readFile 関数が内部で行うことが参照透過性を保証できないから、
String 型ではなく IO String 型を使用させるを得ない

readFile 関数が参照透過性を保証できるのなら String 型を使ってる


なんで readFile 関数が内部で行うことが参照透過性を保証できないかと言えば、
引数である Srring 型のある値に対して、戻り値として返す String 型の値が
いつ如何なる時でも同じ値になるとは限らないからだ

それは、例えば読み込むファイルの内容が一時間前と変わっているかもしれないから
そうなれば同じ引数に readFile 関数を適用しても、戻り値が同じにならない

同じになる場合もあれば、ならない場合もあり、同じだという保証ができない

800 :デフォルトの名無しさん:2012/03/06(火) 00:00:43.39
素朴な疑問なんだけど
lazy eval な処理系って realtime なシステムに適用可能なの?


862 :デフォルトの名無しさん:2012/08/19(日) 21:34:24.06
最近の手続き型は関数型の一部を取り込む例がありますが、
逆はどうなんでしょう?


866 :デフォルトの名無しさん:2012/08/19(日) 22:39:26.00
>>862
そうそう、C言語は(手続きが無くて)関数だけでプログラミングするから関数型言語だよな

...... こうですか?よくわかりまへんw

869 :デフォルトの名無しさん:2012/08/19(日) 23:15:07.57
>>866
C#のラムダ式とか


http://toro.2ch.net/test/read.cgi/tech/1252470706/l50/../人気ブログランキングへ

PC等Win32API質問箱 Build110

1 :デフォルトの名無しさん:2012/08/04(土) 11:18:03.75
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。

■過去スレ
Win32API質問箱 Build109
http://toro.2ch.net/test/read.cgi/tech/1341153543/

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
 英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

179 :デフォルトの名無しさん:2012/08/09(木) 23:06:04.99
CreateWindowExでRichEditをWS_HSCROLLとWS_VSCROLL無しで作成してウィンドウに貼り付けてサブクラス化しています(これを初期状態とします)
初期状態でRichEditにBOTHでShowScrollBarをすると両方表示されます(これをスクロールAとします)
初期状態でRichEditにSetScrollInfoをするとこれも両方表示されます(これをスクロールBとします)

スクロールAもスクロールBもWM_*SCROLLが飛んできます
という事はRichEditにデフォルトで付属してるスクロールバーを使用せず独自に実装する場合は
・WS_*SCROLLを指定する必要が無い(当たり前と思いますが)
・スクロールバーコントロールを作成してchildに指定する必要が無い
・ShowScrollBar or SetScrollInfoで表示だけはできる
という事で合ってますか?

この状態でやってみたのですが全然スクロールされません
同期されていないという意味ではなくてスクロール範囲に指定している所が動かないのです
case WM_*SCROLL:
SetScrollInfo
ScrollWindowEx
UpdateWindow
InvalidateRect
return 0;

やっぱりコントロール作成→Childとして貼り付けという工程が必要なんでしょうか

185 :デフォルトの名無しさん:2012/08/10(金) 01:08:48.30
スクロールA・スクロールB・スクロールバーコントロール全て同じ動作でした

case WM_*SCROLL:
SetScrollInfo
ScrollWindowEx
UpdateWindow
InvalidateRect
return 0;

1行ずつ実行して行くと正常にスクロールされるのですが
スクロールさせた直後にreturn or break(デフォルトプロシージャで処理)
しても元に戻ってしまいました
どうすればスクロールが元に戻らなくなりますか?

187 :デフォルトの名無しさん:2012/08/10(金) 01:17:24.77
>>185
SendMessageでスクロールの位置を記憶させておくメッセージを送る

201 :デフォルトの名無しさん:2012/08/10(金) 12:43:55.66
>>187
スクロールバーの位置は問題無いのですが
ScrollWindowExで右に1文字分画面をスクロールしたのが
また左に1文字分スクロールされて元に戻ってしまうんです

>>179,>>185

202 :デフォルトの名無しさん:2012/08/10(金) 13:01:00.13
>>201
だから一時的にスクロールしてるだけだから記憶させなけりゃ元に戻るのは当たり前だろ
回答の内容が理解できないほど基礎知識が不足してるなら質問するなよ
おちょくってんのかコイツ

207 :デフォルトの名無しさん:2012/08/10(金) 14:53:20.72
>>202
スクロールバーの位置を記憶させる事を言ってるのかと思いました
ScrollWindowExの後に画面の位置を記憶させないといけないという事は
スクロールされた時の動作はMoveWindowでRichEditの座標yが1文字分上に移動してbottomが1文字分増えて
上にはみ出した分を表示していないって事になるのですか?

>>179,>>185,>>201

211 :デフォルトの名無しさん:2012/08/10(金) 15:41:08.49
>>207
つまり動かしたスクロールバーが元に戻るわけではなく
元々動いてないように見えるってこと?

212 :デフォルトの名無しさん:2012/08/10(金) 15:47:13.13
>>211
はい、スクロールバーは動いたらうごいたままその位置へ止まるのですが
再描画するとスクロール範囲内がスクロールバーを押す前の状態に戻るんです

>>179,>>185,>>201.>>207

214 :デフォルトの名無しさん:2012/08/10(金) 16:01:25.42
>>212
ライブラリに変なもの使ってるとかはない?
どっかの個人が作ったようなマイナーなライブラリ使ってるとか

215 :デフォルトの名無しさん:2012/08/10(金) 16:07:39.95
>>214
使用しているのは全てVC++2010付属の物です
RichEditを使用する時にシステムフォルダのMsftEdit.dllをロードしています
CreateWindowEx時にはMSFTEDIT_CLASS(L"RICHEDIT50W")を指定しています

>>179,>>185,>>201.>>207,>>212

217 :デフォルトの名無しさん:2012/08/10(金) 16:17:01.81
>>215
レンダリングの時点で元に戻ってるのかな
スクロールしたあとどの時点で戻ってるのかは分かる?

218 :デフォルトの名無しさん:2012/08/10(金) 16:41:07.47
>>215
てかScrollWindowExの代わりに普通にマウスでスクロールさせてそこにUpdateWindowとInvalidateRectかけても元に戻るのか、その辺りどうなんだ

220 :デフォルトの名無しさん:2012/08/10(金) 16:49:06.18
>>217
サブクラス化したRichEditのプロシージャでunMessageを見てみました

RichEditにフォーカスがある状態でVScrollDown
0x0115 WM_VSCROLL
SetScrollInfo 再描画フラグ TRUE
ScrollWindowEx スクロールオプション 0
このタイミングでスクロールされる
UpdateWindow
InvalidateRect 消去するかどうかの状態 TRUE
return 0;

WM_VSCROLLがreturn0;した後
0x001f WM_CANCELMODE
0x0215 WM_CAPTURECHANGED
0x0008 WM_KILLFOCUS
0x0281 WM_IME_SETCONTEXT
0x0282 WM_IME_NOTIFY
0x000f WM_PAINT
0x0014 WM_ERASEBKGND
ここのタイミングで元に戻る
0x02a2 WM_NCMOUSELEAVE

というメッセージが来ていました

>>179,>>185,>>201.>>207,>>212,>>215

221 :デフォルトの名無しさん:2012/08/10(金) 16:54:53.95
>>218
すみません
「ScrollWindowExの代わりにマウスでスクロール」の部分がわからないので試せません
マウスメッセージを捕まえてScrollWindowExするものだと思っていました

>>179,>>185,>>201.>>207,>>212,>>215,>>220

222 :デフォルトの名無しさん:2012/08/10(金) 16:59:19.74
>>220
ルーチンがどっか間違ってるんだろうけど・・・
InvalidateRect外して、ウィンドウ動かしたりして再描画しても元に戻る?

223 :デフォルトの名無しさん:2012/08/10(金) 17:07:59.43
>>222
元に戻ってしまいます
サブクラスの中はWM_*SCROLLの2種類しか処理していません

>>179,>>185,>>201.>>207,>>212,>>215,>>220,>>221

224 :デフォルトの名無しさん:2012/08/10(金) 17:15:21.95
>>223
よく考えろ

そのウインドウを作成するときに足りてないスタイルがないか?

229 :デフォルトの名無しさん:2012/08/10(金) 18:12:47.75
>>223
おかしいのはプロシージャ周りじゃないと思うけど。
普通のメモ帳みたいなやつでそれ実装したことある?

230 :デフォルトの名無しさん:2012/08/10(金) 19:47:37.84
>>224
リッチエディットにWS_VSCROLL | WS_HSCROLLを指定した場合
・ページ内に収まる行数 or 文字数になるとスクロールの位置が0になってしまう
・ウィンドウサイズbottomが小さくなる時にキャレットが常にウィンドウの一番下にくるように移動される
今の所この2点が気になったので自前で実装してみようと思ったんです

>>229
ScrollWindowExでスクロールさせるのは今回が初めてです

>>179,>>185,>>201.>>207,>>212,>>215,>>220,>>221,>>223

231 :デフォルトの名無しさん:2012/08/10(金) 19:54:46.97
>>230
前にもどっかで似たような質問見たぞ
2chではなかったけど

縦と横のスクロールバーの処理が逆とかないよな?

232 :デフォルトの名無しさん:2012/08/10(金) 20:00:50.79
>>231
表示が元に戻る前はスクロール方向VとHの違いは無かったので大丈夫と思います

>>179,>>185,>>201.>>207,>>212,>>215,>>220,>>221,>>223,>>230

235 :デフォルトの名無しさん:2012/08/10(金) 20:21:39.89
>>232

スクロールの位置を-1にしてみな。

237 :デフォルトの名無しさん:2012/08/10(金) 20:28:53.92
ルーチン組んで1刻みでどうなるのとか見ない子なのかしら

239 :デフォルトの名無しさん:2012/08/10(金) 20:38:48.86
>>235
VScrollの下をクリックした時(SB_LINEDOWN)に表示は上にスクロールさせる
(バーの移動方向と表示の移動方向は反対)
って事ならそのようになっていました

>>237
>>220の事でしょうか
デバッガでWM_VSCROLL内のブレイクポイントで止めてから
プロシージャのreturnのブレイクポイントでメッセージを全て見た結果です

>>179,>>185,>>201.>>207,>>212,>>215,>>220,>>221,>>223,>>230,>>232

245 :デフォルトの名無しさん:2012/08/10(金) 21:18:08.92
>>239
気付いた?

248 :デフォルトの名無しさん:2012/08/10(金) 22:11:09.49
>>245
何にでしょうか

EM_LINESCROLLが使えそうだったのですが
今度はwParamに指定しても水平方向には移動してくれません
垂直方向には移動してくれるので引数は合ってるはずなんですがどうしてでしょうか

>>179,>>185,>>201.>>207,>>212,>>215,>>220,>>221,>>223,>>230,>>232,>>239

249 :デフォルトの名無しさん:2012/08/10(金) 22:37:28.09
>>248
気付いてないのか
>>211-235であんたがレス返した相手のレスの
最初の1文字だけを抜き出してつなげてみな

>>211 → つ
>>215 → ラ




266 :デフォルトの名無しさん:2012/08/11(土) 20:33:14.26
Linuxで一定時間おきにメモリの使用率を測定してグラフにしたいと考えています
どうしたらいいでしょうか

326 :デフォルトの名無しさん:2012/08/14(火) 15:37:39.36
ポインタの原理は理解できるんだけど、
ポインタ表現の統一性に苦しむ。

p++ってアドレスに加算するの分かるのだけど
*p++もアドレス値に加算

(*p)++がアドレスを介してオブジェクトに加算

優先を考えると*p++は* p++
(*p)++は*p ++ だとしても * p++の*は何を意味するのか

p++ と *p++の混同で困る。

344 :片山博文MZボット ◆0lBZNi.Q7evd :2012/08/14(火) 17:24:22.45
http://msdn.microsoft.com/ja-jp/library/xbb7wf8y(v=vs.80).aspx
「この値は、リッチ エディット コントロールがES_RIGHT または ES_CENTER
スタイルのどちらかを持っていると無視されます」

345 :片山博文MZボット ◆0lBZNi.Q7evd :2012/08/14(火) 17:27:39.31
でもこっちには、単に「無視される」と書いてある。
http://msdn.microsoft.com/en-us/library/windows/desktop/bb761615(v=vs.85).aspx
ということは、>>344が間違い。

348 :デフォルトの名無しさん:2012/08/14(火) 17:31:33.80
>>345
richedit wparamはゼロじゃないとダメって書いてますね

リッチエディットのスクロールを制御する場合どういう方法を取りますか?

350 :片山博文MZボット ◆0lBZNi.Q7evd :2012/08/14(火) 17:33:34.95
>>348 普通にSendMessageでWM_HSCROLL送れば?

370 :片山博文MZボット ◆0lBZNi.Q7evd :2012/08/14(火) 20:02:59.04
スクロール表示用にリッチエディット使うのやめたら?用途が違う。別のコントロールを使うべき。

372 :デフォルトの名無しさん:2012/08/14(火) 20:19:36.91
>>370
用途としてはリッチエディットの機能を使いたいんですけど(フォントの色変更タブインデント幅変更etc)
エディタデフォルトのスクロール動作の一部を無効にしたいんです

ですがScrollWindowを使用してもスクロール直後の再描画で元に戻ってしまうんです

エディタから自分で作るしかないんですかね?


381 :片山博文MZボット ◆0lBZNi.Q7evd :2012/08/14(火) 20:57:59.39
サブクラス化

485 :デフォルトの名無しさん:2012/08/18(土) 06:06:08.20
いじめられる奴には必ず原因がある
いじめられる奴が悪い

595 :デフォルトの名無しさん:2012/08/21(火) 19:10:54.36
質問お願いします。
ウィンドウサイズをあるサイズ以下にさせない制御をしています。
たとえば、最小のサイズを縦500、横500と決めて、それより大きいサイズは
自由に変更させますが、それ以下のサイズは変更させない制御です。
縦600、横500はOKで、縦400、横500はNG、といった感じです。

その処理はほぼ制御できますが、以下の場合に制御できません。
WIN7のAeroスナップの機能(?)で、サイズ変更するウィンドウの四隅をドラッグして
画面一番上(又は下)まで持って行き「縦方向最大化」状態で、横サイズを例で言えば
500以下にすると、変更できてしまいます。

WM_SIZINGを捕まえてWMSZ_BOTTOMRIGHTとかのメッセージで制御していますが、Aeroスナ
ップの機能(?)は、ほかのメッセージで制御する必要があるんでしょうか?

ご教授お願いします。


640 :デフォルトの名無しさん:2012/08/22(水) 22:28:38.17
レス研究報告(^u^)/
去年から的外れな屁理屈で絡んでくる人は大体同じ人達~。
そして絡んでくる人は仲間同士が多い。
はじめは反論が一杯来るからビックリしたけど、最近は何だ又おマエらかって感じ(^u^)
行き場のない歪んだ人間の吹き溜まりを今、私は目撃しているのかな? (笑

758 :デフォルトの名無しさん:2012/08/26(日) 14:24:49.53
Windows7のSnipping Toolの様な機能ってどうやって実装するんですか?
つまり、ユーザーにデスクトップの画面をドラッグさせて、その際に出来た矩形の枠
内の画像を、アプリケーションに取り込みたいです。

765 :758:2012/08/26(日) 14:58:53.49
このサイトのサンプルで分かりそうです。
http://homepage1.nifty.com/MADIA/vc/api/
凄いありがたいね。このサイト。

771 :デフォルトの名無しさん:2012/08/26(日) 15:25:51.14
マウスキャプチャ無くてもできるだろ

825 :デフォルトの名無しさん:2012/08/27(月) 23:30:23.54
これさ、わざと電波を装って、win32の知識共有を妨害しようとしているのかな?


860 :デフォルトの名無しさん:2012/08/30(木) 16:04:19.20
#define HANDLE_MSG(hwnd, message, fn) \
case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))

これって、実際にはどう展開されますの?
教えてくださいおながいします

870 :デフォルトの名無しさん:2012/08/30(木) 20:30:57.91
case (WM_CLOSE):
 return HANDLE_WM_CLOSE(hWnd, wParam, lParam, OnClose);

こんな感じで合ってますの?

879 :デフォルトの名無しさん:2012/08/31(金) 19:57:12.13
Vista以降ではCHMファイルの閲覧はブロックされるが、
CHMファイルのブロックを自動的に解除するにはどうすればいいか?


http://toro.2ch.net/test/read.cgi/tech/1344046683/l50/../人気ブログランキングへ

PC等文字コード総合スレ part7

1 :デフォルトの名無しさん:2011/05/29(日) 00:12:44.96
プログラマーなら一度は煩わされたことのある文字コードについてのスレ。
UTF-8、ShiftJIS、JIS、EUC、Uincode、 UCS、サロゲートペア、コードポイント、文字コード判定、
合成文字、ソート、TRON、外字コード、その他について語り合いましょう。
各言語での文字列の扱いについての質問もOKです。
基本マッターリ、ささ、茶でもどうぞ。

■過去スレ
文字コード総合スレ part1 http://pc11.2ch.net/test/read.cgi/tech/1031028205/
文字コード総合スレ part2 http://pc11.2ch.net/test/read.cgi/tech/1143375639/
文字コード総合スレ part3 http://pc11.2ch.net/test/read.cgi/tech/1180250376/
文字コード総合スレ part4 http://pc11.2ch.net/test/read.cgi/tech/1228052369/
(スレ再利用)UnicodeとUTF-8の違いは? http://pc12.2ch.net/test/read.cgi/tech/1177930957/
(隔離スレ)UnicodeとUTF-8の違いは? その2 http://pc12.2ch.net/test/read.cgi/tech/1274937437/
文字コード総合スレ part5 http://pc12.2ch.net/test/read.cgi/tech/1236529563/
文字コード総合スレ part6 http://hibari.2ch.net/test/read.cgi/tech/1278923059/

115 :デフォルトの名無しさん:2011/07/10(日) 03:36:29.63
安岡はもう引退した方がいい。既に頭が老人ぼけずぎ

119 :デフォルトの名無しさん:2011/07/10(日) 07:26:41.38
>>115
「互換漢字にVSを付けられるようにすればいい」とか何も考えてないにもほどがあるよな

163 :デフォルトの名無しさん:2011/07/18(月) 13:13:12.26
MSゴシックの昴の字形みたいにいつの間にかこっそり訂正されてたりして。
その結果IBM拡張文字の昴の字形が入れ替わったわけだが
誰も話題にしていないところを見るとやっぱりほとんどの人にとっては自分の
名前に使われていない限りどうでもいいらしいな

207 :デフォルトの名無しさん:2011/08/02(火) 18:25:02.58
南堂案って委員会に提出されてないよ
http://opac.ndl.go.jp/recordid/000003624020/jpn
そもそも南堂がアレを言いだしたのは委員会終了後

214 : [―{}@{}@{}-] 忍法帖【Lv=7,xxxP】 !denji 株価【E】 u:2011/08/03(水) 02:54:06.88
で、結局南堂案のコンセプトが正しかったことが証明された。
にもかかわらず、南堂を無視し続けた。
それどころか南堂の案の重要な点である、字体の変更をトンデモ扱いした。
そんなことをすれば南堂が委員会を敵だとみなすのも無理は無い。
万死に値すると思うが。


230 :デフォルトの名無しさん:2011/08/04(木) 10:15:32.74
????????????????????????????????????

テスト

280 : 忍法帖【Lv=10,xxxPT】 !denji 株価【E】 u:2011/08/17(水) 19:50:00.10
結局南堂の業績は認めるの?認めないの?
はっきりさせろ・

285 :デフォルトの名無しさん:2011/08/18(木) 18:10:38.20
次からといわず移せばいいのに

294 :デフォルトの名無しさん:2011/08/30(火) 23:03:39.03
汎用電子のレビューコメント全然来ないのか…

319 :デフォルトの名無しさん:2011/09/09(金) 14:40:15.38
合成を使わないと某半島のアレがウン十万字分のコードポイント占めるんだよ

321 :デフォルトの名無しさん:2011/09/09(金) 16:22:51.70
>>319
合成済みのが追加済みじゃなかったっけ?
あまりにも数が多いので規則的にして計算式で求められるようになってて表からは除外されてる

328 :デフォルトの名無しさん:2011/09/10(土) 18:15:23.12
>>321
コードポイントのどのあたり?

333 :デフォルトの名無しさん:2011/09/17(土) 16:06:00.17
シングルバイト文字しかない文字列をエディタで保存したとき、
内部文字コードをUTF-8にしてもUTF-8にはならず、SJISとなってしまいます。
単にエディタが識別できないだけだと思いますが、気にしなくてもいいですか?
例えばhtmlでContent-Typeをtext/html;charset=UTF-8と指定してるにも関わらず、
マルチバイト文字がないため、内部文字コードがSJISになってる感じです。

335 :デフォルトの名無しさん:2011/09/17(土) 17:06:36.21
BOMはバイトオーダーを識別するためにあるんですよ。

336 :デフォルトの名無しさん:2011/09/17(土) 17:31:46.68
>>333
円記号については問題が発生する

337 :デフォルトの名無しさん:2011/09/17(土) 17:59:00.61
>>333
> 内部文字コードがSJISになってる

というのはどういう状態? なぜそう判断したの?


338 :333:2011/09/17(土) 18:19:16.94
レスありがとうございます。

>>335
一般的にはそうみたいですね。
UTF-8には無意味とも書いていました。
ただ判別するためにUTF-8でも使うみたいなことは書いてました。

>>336
よくわかりませんが確かに\は発生しそうですね。

>>337
エディタで文字コードを指定して保存する時UTF-8で保存しますが、
再度開いたときにSJISで開かれてエディタもSJISと判断してるということです。
バイナリエディタなんかで開いたとき、
シングルバイト文字は、SJISでもUTF-8でも、16進数ダンプで同じ値になるので、
エディタにはそのへんが判断できないんじゃないのかなぁと思ってます。

367 :デフォルトの名無しさん:2011/11/01(火) 04:28:14.19
ブログのログインみたいな感じの部分を想像してほしいのですが、
データベースやファイルに入っているログイン情報がUTF-8以外、
ログインするためにフォームから入力する値がUTF-8で、
これらを比較するとします。

基本ログイン情報は半角英数字だと思うので問題は起きにくいとは思いますが、
もしこの状態のまま、ログイン情報にマルチバイト文字を入れた場合、
ログインが出来なくなる以外に何か問題は発生しますか?

例えば情報があってないのにログイン出来たとか、
そんな感じのはありえますか?

405 :デフォルトの名無しさん:2011/12/19(月) 23:57:13.20
あれってすごく不思議なんだけど、「金」「日」は親子共用で1つでことたりるよね?
ただでさえ王家専用符号位置なのに、なんで「金」「日」「成」「金」「正」「日」って6つも使うの?

組み文字として「金日成」「金正日」を符号化したなら分解できないから仕方ないし、
「“金日成”はポップ体、“金正日”は相撲体を使う」とかの儀礼があるなら意義がわかるんだけど。

「金」「日」「成」「正」だと付け足しみたいで金正日に不敬、みたいな価値観があったりする?


そうなると、うっかり「金正日」の「日」に「金日成」の「日」を使ってしまったらお仕置きがあったりするの?

407 :デフォルトの名無しさん:2011/12/20(火) 07:42:15.65
ある国には過去、
天皇陛下 という 1x4 の活字が過去存在してたんだ。
別にどうだっていいだろうそんなもん。

415 :デフォルトの名無しさん:2011/12/20(火) 22:14:02.07
まさかUnicodeに入れるとかしないよな?

420 :デフォルトの名無しさん:2011/12/21(水) 23:45:09.33
すみません、CGI質問スレが無いので、どなたか教えてください
sitemixで、メールフォームのchamamailを設置したのですが、http://www.chama.ne.jp/download/mail/chamamail/index.htm
送信の確認画面に??と出たりメールを受け取った時のメールフォームの中が
----------------------------------------------------
縺雁錐蜑�=縺�
email=doostynahin@gmail.com
---------------------------------------------------
の様に文字化けしてしまいます。サクラエディタ使用でファイル転送ソフトはFFTPです
ローカルの文字コードはEUCにしているのですが、ホスト側の漢字コードもどう設定したら良いのでしょうか?
ホスト側をJISやSJISにするとエラーが表示されます


422 :デフォルトの名無しさん:2011/12/22(木) 06:59:10.28
おまいらなんでそんな朝鮮事情に詳しいんだ
在日か?

429 :デフォルトの名無しさん:2011/12/22(木) 13:35:42.06
日本語の文字コードの保存形式を聞きたいだけなので
こっちのほうが専門かと思ったんですが・・・



431 :デフォルトの名無しさん:2011/12/22(木) 14:16:57.94
>>429
ソースをダウンロードしてみたら、chamamail.cgi(perl code)はシフトJISで書かれていた。
更に改行コードがCR+LFなので、Windows環境で開発された物と思われる。

>■設定設置方法
の部分を見るに文字コードについては一切の指定が無い。
どうやら作った人間は、そういう事まで頭が回らない人間と思われる。

ソース中に、
print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">\n";
というハードコーディングがなされているので、シフトJISのままサーバーに設置する物なのだろう。

ソースに書かれた日付を見ると、どうやら最後にメンテナンスされたのは2001年頃らしい。

2001年頃に、サーバー側にインストールされていたperlのバージョンを考えると、
最新でも5.6.0、ちょっと古ければ5.5.0、5.0.xxx、下手すればperl4の可能性だってある。

シフトJISのまま動かない理由としては、perlはバージョンが変わると、
使用可能なリテラルが変わったり、エスケープしなければならない文字が変わるので、
シフトJISで書かれたコードは上記の制限に該当しやすいのでエラーが発生し、
それはCGIでは結果的にInternal Server Errorを引き起こす。

これは元々シフトJISに対応していないperlで、
無理矢理シフトJISを使う事による弊害なので、perlが悪い訳でも無い。

修正したいならエラー出力に、問題となった箇所が出力されている筈なので、
httpdのerrorログを見てソースを修正すれば良い。

あとは↓のスレに行ってやれ。
http://toro.2ch.net/test/read.cgi/tech/1319953460/

449 :デフォルトの名無しさん:2012/01/05(木) 09:45:50.28
え、なにこれ…

Genuine Han Unification
http://blogs.adobe.com/CCJKType/2012/01/genuine-han-unification.html
http://lundestudio.com/PDF/iuc35-lunde-s12t2.pdf


460 :デフォルトの名無しさん:2012/01/07(土) 00:50:31.27
Han Unif.がレンダラ実装の重荷だってことは分かるけど、
レンダラは主なものに収斂してきているから、
こういう動きが足早に進められることはなさそう。

461 :デフォルトの名無しさん:2012/01/07(土) 08:29:02.18
>>460
よく意味がわからないのだが。
純粋なレンダリングの処理にはコードポイントは関係ないし、
フォントの切り替えとかの話なら別にHan Unif.が無くても生じるわけだが。

463 :デフォルトの名無しさん:2012/01/07(土) 11:43:07.48
>>461
コードポイントでなく、
言語情報でフォント切り替えるのは、
ハンユニフィケーション以外にあるの?

475 :デフォルトの名無しさん:2012/01/15(日) 00:27:41.03
ISO-2022-JPのファイルで「ESC ( B ESC $ B」とか「ESC ( B ESC ( B」という並びは形式的に許されますか?

508 :デフォルトの名無しさん:2012/02/04(土) 21:30:32.27
URL貼るの忘れてた
https://sourceforge.net/projects/code2000/
OFL 1.1とのデュアルライセンスになった模様

547 :デフォルトの名無しさん:2012/03/01(木) 02:13:06.91
むしろ、複数コードポイントが1文字になるのでUTF-32の存在意義すら危うくする存在>IVS
合成やセレクタをうまいこと区別できるUTF-??出てこないかなあ。

566 :デフォルトの名無しさん:2012/03/02(金) 22:11:09.49
CIDをUnicodeに変換する事って出来るの?
記号(♂)のまっすぐバージョンがCIDにはあるんだけど、これをhtmlで表示させたい(もちろん、フォントには収録してます)。
もし、Unicodeに出来るのであれば、そのコードを指定してやれば表示させられるとは思うのですが、果たしてCIDをUnicodeに変換する事は可能なのでしょうか?

573 :デフォルトの名無しさん:2012/03/03(土) 11:19:19.87
もしやもしや、FirefoxのIVSってTruetypeしか対応してない?
花園明朝のTrueならIVS表示できたがOpenだとIVS表示できてない…

574 :デフォルトの名無しさん:2012/03/03(土) 11:47:22.43
あ~、jp78とかいう属性付けるとIVSではないけど異体字表示できますね。
俺としてはIVSでやりたいんだが、誰か方法を御教授願います。

578 :573:2012/03/03(土) 19:29:53.70
http://senda.shiteyattari.com/aalt.html

何か信じてくれてなさそうなので表示サンプル作ってみた。ローカルに落として、それぞれのフォント指定を自分の環境に変更させた上で
Firefoxで表示させてみて。OTFだけIVSが正常に表示されないから。

もし、俺のコーディングがおかしくて表示されてないのだとしたら、修正稿の提示をどうかお願いします。

584 :デフォルトの名無しさん:2012/03/11(日) 13:26:15.37
そういや結局0213って改正するの? 常用漢字の関係で

598 :デフォルトの名無しさん:2012/03/24(土) 20:21:52.09
さっそくバグ
http://slashdot.jp/journal/548379/%E3%80%8CU%2B9415-U%2BE0101%E3%80%8D%E3%81%A8%E3%80%8CU%2B9415-U%2BE0103%E3%80%8D%E3%81%AE%E5%B7%AE

599 :デフォルトの名無しさん:2012/03/25(日) 14:07:19.61
>>598
なんでレビューのときに指摘しないの? 指摘してるけど無視されてるの?
(無視したらそれまででそのまま登録するしかない)

604 :デフォルトの名無しさん:2012/03/25(日) 22:42:55.72
>>599
Unicodeのレビューシステムが壊れてて
結局レビューが届かなかったらしい >>294

659 :デフォルトの名無しさん:2012/06/12(火) 15:38:38.15
http://www.icelandreview.com/icelandreview/daily_news/International_Day_of_Icelandic_Letter_%C3%9E_Celebrated_0_390746.news.aspx

英語がよくわからないんだけど
U+00DEがUnicodeに収録されたのが1994年6月9日ってこと?

665 :デフォルトの名無しさん:2012/06/25(月) 22:21:18.35
安岡はキティの癖に、
コレじゃまるでマトモな人じゃないか。

666 :デフォルトの名無しさん:2012/06/25(月) 23:43:55.09
漢字やキー配列の話題から離れればこんなものなのかも。

672 :デフォルトの名無しさん:2012/06/27(水) 22:02:50.38
次回が最終回

684 :デフォルトの名無しさん:2012/07/11(水) 17:28:44.01
1:1ってのがコードポイントの話ならno、
ラウンドトリップ可能かって意味ならyes…だったと思う。

685 :デフォルトの名無しさん:2012/07/11(水) 18:00:46.36
ということはJISの文字はそのままUnicodeに変換可能。
CJKの問題はあまり影響無いような。

689 :デフォルトの名無しさん:2012/07/11(水) 22:33:52.23
文盲が多いな
「我々が扱いたい日本の文字はx0213以外の文字もあるため
CJKの問題を考慮する必要があります」って言えばいいだけだろ
誰もCJK統合に問題がないなんて言ってないし

693 :デフォルトの名無しさん:2012/07/12(木) 18:23:01.02
Office 1 の頃から?
ちょっと信じられんが。

706 :デフォルトの名無しさん:2012/07/27(金) 19:01:38.86
http://slashdot.jp/%7Eyasuoka/journal/553806
>U+20F96は誰が提案したのか

711 :デフォルトの名無しさん:2012/08/01(水) 01:17:22.20
有効なUnicodeのコードポイントかどうかを判定する必要に迫られているのですが、
どう調べたらいいですかね。コードポイントのデータベースとか、APIとか。

自分が受け取ったHTMLに文字参照(数値参照)がたくさん含まれているんだけど
どうもデタラメなコードポイントを含んでいるようで、それをチェックしたいのですが。
あ、HTMLから文字参照を抜き出すとかその辺はできてるんですが、数値の判定を
どうするかということです。

まあ実際にはいろんな次元のデタラメがある(たとえばUnicode的には正当でも
文書内容的におかしいとか)わけですが、今はUnicodeのレベルでのチェックを
必要としております。

712 :デフォルトの名無しさん:2012/08/01(水) 01:41:03.42
自分が使いたい文字の一覧を作っておけばいいだろう。
君が何を有効としたいかは誰にもわからないわけだし。

713 :デフォルトの名無しさん:2012/08/01(水) 01:50:05.73
\p{Cn}

714 :デフォルトの名無しさん:2012/08/01(水) 04:59:22.11
>>711
割当済コードポイントの一覧が欲しいってことならこれ。
http://www.unicode.org/Public/6.1.0/ucd/UnicodeData.txt

715 :デフォルトの名無しさん:2012/08/01(水) 08:34:50.33
どうも>>711です。

>>712 とりあえず最低限のチェックをしたいなと思って。
>>713 perlですね。なるほど。
>>714 なるほど。

というわけで>>713>>714をまず試してみようかと思います。どうもありがとうございます。

716 :デフォルトの名無しさん:2012/08/01(水) 11:29:05.51
>>715
シフトJISだけでいいなら
Unicodeコンソーシアムのcp932を基に一覧作るとか

728 :デフォルトの名無しさん:2012/08/22(水) 00:59:38.82
DIS 10646第1版
http://ja.wikipedia.org/wiki/DIS_10646
ってもう少し詳しい情報載ってるところある?

733 :デフォルトの名無しさん:2012/08/24(金) 12:43:49.51
http://www.itscj.ipsj.or.jp/senmon/11sen/sc02.html
>JIS X0221については前回の改正から5年が経過するということで,
>2012年度は第3版の内容に基づいた改正を検討することになっている.

734 :デフォルトの名無しさん:2012/08/24(金) 18:09:26.47
10646じゃなくJIS X 0221を参照している規格ってあるのかな

739 :デフォルトの名無しさん:2012/08/27(月) 12:37:24.88
http://rtk.art.coocan.jp/cjk/rads/index.html

745 :デフォルトの名無しさん:2012/08/28(火) 22:17:55.13
文字コードと関係ないが、
安岡はバイトオーダーについて
少しは勉強した方がいい。

748 :デフォルトの名無しさん:2012/08/30(木) 00:58:43.10
>>713
化石レスなんですがperlが対応しているUnicodeのバージョンって調べられますかね?
自分の環境でやったらどうもCJK Extension C/D の文字が微妙な感じなので。

749 :デフォルトの名無しさん:2012/08/30(木) 01:29:09.72
>>748
データベースのバージョンなら
perl -MUnicode::UCD -E 'say Unicode::UCD::UnicodeVersion();'
かな


http://toro.2ch.net/test/read.cgi/tech/1306595564/l50/../人気ブログランキングへ

PC等WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part13

1 :デフォルトの名無しさん:2012/04/13(金) 15:53:23.55
ユーザーインターフェースシステム、Windows Presentation Frameworkについて語るスレ。

Visual Studio 2010
http://www.microsoft.com/japan/msdn/vstudio/
Microsoft .NET Framework 4 (Web インストーラー)
http://www.microsoft.com/downloads/details.aspx?familyid=9CFB2D51-5FF4-4491-B0E5-B386F32C0992&displaylang=ja
Microsoft .NET Framework 4 (スタンドアロンインストーラー)
http://www.microsoft.com/downloads/details.aspx?familyid=0A391ABD-25C1-4FC0-919F-B21F31AB88B7&displaylang=ja

前スレ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part12
http://toro.2ch.net/test/read.cgi/tech/1324366825/

関連スレ
Microsoft Silverlight その9
http://toro.2ch.net/test/read.cgi/tech/1321150267/

コードを貼る場合は以下の(ピヨピヨ)の利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/

130 :デフォルトの名無しさん:2012/05/03(木) 10:47:32.53
エディターコントロールを自作しようと思うんだがScrollViewer要素の内側に直接描く方法がわからない
AvalonEditだとScrollViewerの子要素にControlクラスを継承したクラスを置くような格好になってるんだが、それだとどうも気持ち悪い
http://www.codeproject.com/Articles/42490/Using-AvalonEdit-WPF-Text-Editor
かといって、OnRenderで描くとスクロールバーも破壊されてしまうので好ましくない
AvalonEditが行っている方法以外でスクロールバーなどの要素を破壊せずに直接描く方法があったら教えてほしい

219 :デフォルトの名無しさん:2012/05/05(土) 20:08:18.86
FrameworkElementを継承させたFooTextBoxBaseにOnPreviewKeyDown()メソッドを追加したんだが、肝心のイベントが発生しない
どうすればいいの?

XAMLはこういう感じになってる
http://codepad.org/tJsfxN8B
FooTextBox.cs
http://codepad.org/YXP49As8
FooTextBoxBase.cs
http://codepad.org/7uVr43PH


223 :デフォルトの名無しさん:2012/05/05(土) 20:57:12.08
こういうやり方で解決した
http://codepad.org/Bi5T1p5x

これでとりあえず動くようになったんだが、文字の入力が重たくて仕方ない
前の書き込みを見てるとOnRenderで描写すると重たいと書いてあったんだが、軽くするにはどうすればいいの?
(ただ、キャレットの移動自体は思いのほか軽かった)

235 :219:2012/05/06(日) 01:36:15.44
>>223
どういう風に使えばいいの?

あと、もう一つ質問なんだが、結構な数のプロパティがあるんでFooTextBoxBaseにあるやつと同じ奴をFooTextBox追加するのは結構面倒くさい
でも、FooTextBoxに依存関係プロパティがないとかなり使いにくくなってしまう
何かいい手はないんだろうか


236 :デフォルトの名無しさん:2012/05/06(日) 01:40:47.55
>>235
ビヘイビア

237 :デフォルトの名無しさん:2012/05/06(日) 01:51:39.80
> FooTextBox追加するのは結構面倒くさい
標準的な方法ではどうにもならないね。

他にも、WPFは色々と定型的で面倒な部分が多いので
ソースコードの自動生成で効率化することをお勧めする。

238 :219:2012/05/06(日) 02:08:26.39
>>236
それ使っても早くならなかった
なぜ遅いのかわからないのでプロファイラーを使ってみたら、別なところに原因があった

>>237
どうにもならないのか

313 :デフォルトの名無しさん:2012/05/10(木) 00:32:56.89
FooTextBoxをWPFに移植してみたんだが、CPUの負荷がWinForm+Direct2Dを使った奴より高くて悩んでる(WPFだと20%を推移してるんだが、Direct2Dだと10%前後で済んでる)
OnRenderではなく、DrawingVisualに描く方法なら低くなると思ったんだが、CPU負荷の点では差がなかった
CPU負荷を落とすにはどうすればいいの?


314 :デフォルトの名無しさん:2012/05/10(木) 01:58:51.69
>>313
まず、WPFにDirect2Dって概念はない
それにお前は質問するだけで質問には答えてやらないのはなぜだ?
お前でも答えられる質問はいくらでもあっただろ
質問しかしにこないのか?
そんなやつに答えてやる義務はない

315 :デフォルトの名無しさん:2012/05/10(木) 03:30:20.92
>>313
それだけの情報だと何とも言えない。
WPF Performance Suite を使ってアプリケーションイベントの CPU 使用率を調べてみたら?

319 :デフォルトの名無しさん:2012/05/10(木) 13:52:35.63
>>314
すまん
あんまり詳しくないんで答えるのもあれだと思ってた

>>315
それ使って調べてみた
レタリング:15%
レイアウト:3%
その他もろもろ:合計で2%
レタリングの負荷を落とすことってできないのかな


324 :デフォルトの名無しさん:2012/05/11(金) 12:58:07.35
AvalonEditはWPFの流儀に沿った書き方をしてるので
WPFのレンダリング最適化機構がちゃんと動作してる。

>>319はGDIのプログラムのような書き方をしてるので
WPFの最適化機構が全然働いていない。

つーわけで、速くしたかったら
WPFの解説書をよく読んで、AvalonEditを参考にしつつ1から書き直せ。

325 :319:2012/05/14(月) 16:02:15.92
OnTextInputをオーバーライドしただけだと、IMEのウィンドウが外に出てしまう
このままじゃあ、使い物にならないから、オンスポット入力に対応させたいんだが、どういう風にすればいいのかさっぱりわからない
くぐっても出てこないし、avaloneditorもそこらへんは特に何もしてなかった
MSDNならあるだろうと思い調べてみたが、IMEに関するサンプルは何もなかった
どうすればIME対応にできるんだろうか

>>324
なるほど流儀に従っているから早いのか
もう一度参考にしつつ書いてみる


346 :デフォルトの名無しさん:2012/05/16(水) 09:54:57.23
http://www.atmarkit.co.jp/fdotnet/chushin/introwpf_05/introwpf_05_03.html
にあるような式木を視覚化するので遊んでたんだけど、たかだか10階層超えたあたりで重くなるのね。
レイアウトロジックがタコくてO^Nになってる感じなんだけど、このへんはちょこっとフックして自前ロジックにすることって出来るの?
それともDataTemplateとかも使えず全部ゴリゴリ書かなきゃいけなくなる?

347 :デフォルトの名無しさん:2012/05/16(水) 11:01:35.71
DataTemplate内で使われてるパネルを独自のものに置き換えりゃいいんじゃねーの?

フックがどういうことを想定しているのか不明だが、
少なくともDataTemplateが使えなくなる事は無い。

348 :デフォルトの名無しさん:2012/05/16(水) 11:41:30.58
>>346
ダウンロードして10階層ぐらいにしてみたけど重くないぞ?
変なことしてんじゃないの?

349 :デフォルトの名無しさん:2012/05/16(水) 11:55:57.24
>>347
んーレイアウトのロジックだけ別のをインジェクトするとか的な意味なんだが、パネルを変えればいいのかな。Canvasとかに。
その場合はコンテンツを変更した時に一番下のから順にサイズ測ってセットとかすればいいのかな・・・

>>348
そのExpressionTreeTemplates.xamlのりソース定義をGrid.Reaourcesにコピーして試してるんだが、だからかしら・・・
(x,y)=>x+(y*21)+x+(y*21)+x+(y*21)*(x+(y*21)+x)+(y*21)+(y*21)+(y*21)+(y*21)+(y*21)+(y*21)
を表示させるとGridのレイアウト時とかに5秒以上かかる。

350 :デフォルトの名無しさん:2012/05/16(水) 12:32:33.02
>>349
> レイアウト時とかに5秒以上かかる。
こっちでは0.01秒しかかからないぞ。

レイアウト中にGCが発生すると0.08秒になったが、5秒はおかしすぎる。

373 :デフォルトの名無しさん:2012/05/18(金) 17:03:46.34
テキストエディタにDirect2Dてw
文字入力やスクロールでカクカクしてなきゃいいんだよ。
以前、行番号表示したくてテキストエディタコントロール作ったが最適化して実用程度にはなったぞ。


382 :デフォルトの名無しさん:2012/05/19(土) 03:19:45.32
http://mumurik2.wordpress.com/2007/09/24/managed-tsf-managed-implementation-of-itextstoreacp/#comment-209

もうすでにオンスポット入力をWPFで実現している人がいるので、表示属性の取得をやってみた
でも、0x80040201がthis._context.GetSelection()の段階で出てどうもうまく行かない
どうすれば取得できるんだろう
このままじゃあ使い物にならないよ

http://codepad.org/B4x6kW0M
TextStore.cs


387 :デフォルトの名無しさん:2012/05/19(土) 14:11:32.72
実行不能なコードの断片なんか出されても回答のしようがない

問題を再現可能な、最小の実行可能なコードを出せ

391 :デフォルトの名無しさん:2012/05/19(土) 16:04:01.18
http://msdn.microsoft.com/en-us/library/windows/desktop/ms538791(v=vs.85).aspx

にはpredefined property identifiersを指定しろとあるのに、
何故かIIDを指定してるからさ。

そのIIDがpredefined property identifiersとしても使えるってのなら話は別だけど。

392 :デフォルトの名無しさん:2012/05/19(土) 17:27:43.29
>>391
IIDの実体はGUIDだから使えるよ


393 :デフォルトの名無しさん:2012/05/19(土) 18:07:58.90
>>392
俺が昔作ったやつの断片コード。参考になれば。
http://codepad.org/GPMsTdtb


394 :デフォルトの名無しさん:2012/05/19(土) 18:29:02.81
>>393
ありがとう
参考になった
もし、差支えなければ、コード全部アップしてくれ
車輪の輪の再発明はもうこりごりだ(笑)

そういや、コード読んで気になったんだが、VARIANTはどこの名前空間で定義されてるの?
VARIANTって.NET Frameworkにはない型のはずなんだが
あと、_servicesはどういう感じでインスタンスを作ってるの?

395 :デフォルトの名無しさん:2012/05/19(土) 20:45:42.40
>>394
簡単なサンプルつけといた。
https://docs.google.com/open?id=0By6Cgv6nBdtsN1JsbzlOaXBXcWc

VARIANT は探せばいくらでもサンプルでてくるだろ、と言いつつ自分は
Reflectorでランタイムから抜き出したw


396 :デフォルトの名無しさん:2012/05/19(土) 21:02:31.31
PROPVARIANTはともかく、VARIANTはObjectじゃないのか

412 :デフォルトの名無しさん:2012/05/21(月) 13:09:32.38
XAML←これは読み方はザメルでいいの?

418 :デフォルトの名無しさん:2012/05/21(月) 21:07:45.51
http://kie.nu/b3a
速度面で問題はあるが、日本語入力ができるFooTextBoxのWPF版ができた
いろいろと教えてくれてありがとう
すごく助かった


424 :デフォルトの名無しさん:2012/05/23(水) 10:17:53.87
市販のデータグリッドってインフラジスティックスとグレープシティのどっちがおすすめ?

455 :デフォルトの名無しさん:2012/05/30(水) 16:01:10.96
とりあえず2chブラウザーを作り始めてみました。
http://neetchan.blog.so-net.ne.jp/_images/blog/_a2f/neetchan/ss1.png
http://neetchan.on.arena.ne.jp/


492 :デフォルトの名無しさん:2012/06/03(日) 18:48:40.12
WPFでテキストエディタ作った
http://kie.nu/ckp
バイナリー
http://kie.nu/ckt
ソース


493 :455:2012/06/03(日) 19:43:47.11
>492
「矩形選択をおこなう」で複数行方向にマウス・ドラッグするとアサートが出るみたい

495 :デフォルトの名無しさん:2012/06/03(日) 20:27:19.23
>>492
ずいぶん頑張ったな。
ファイルを保存するとエラーになるとか不安定だけど形にはなってるじゃん。

496 :492:2012/06/03(日) 20:44:30.58
>>493
こっちでも出てきたんでさっそく修正しておいた

>>495
どういうエラーが出るの?


497 :デフォルトの名無しさん:2012/06/03(日) 20:47:53.21
>>496
不正な処理で強制終了

508 :デフォルトの名無しさん:2012/06/05(火) 18:05:59.84
.net frameworkから離れて5年くらい経つ。
当時は2ちゃんブラウザ作ってて最初はC#でやってたけど、
パフォーマンスとか納得いかずに結局ATL+WTLにやることに。
今、twitterクライアント作るとしてWPFでプログラミングして、
十分なパフォーマンス出るのかな。
結局はATL+WTLってことになるんだろうか。

554 :デフォルトの名無しさん:2012/06/12(火) 22:42:56.69
自作のカスタムコントロールで、CaptureMouse() したいんだけど、
GotMouseCapture イベント発生直後に、なぜかLostMouseCaptureが
発生してしまってキャプチャーできない(正確には一瞬だけキャプチャして
なぜ勝手にロストしている)状態なんだけど、なぜ LostMouseCapture が
発生するか調べる方法ってある?

617 :デフォルトの名無しさん:2012/07/04(水) 13:08:24.55
いやタッチデバイスでもわかりにくいだろ
iOSやAndroidアプリで縦横スクロール混在ってほとんど見たことない

618 :デフォルトの名無しさん:2012/07/04(水) 13:12:16.31
標準のブラウザからして縦横スクロールですが

620 :デフォルトの名無しさん:2012/07/04(水) 13:31:36.14
>>618
だから使いにくいだろ?
スマホ向けサイト作るなら縦スクロールだけでいけるようにするのが常識

631 :デフォルトの名無しさん:2012/07/05(木) 20:39:27.44
>>620
俺はスマホ向けのほうがいやだったりする
いちいちPC向けに飛び直してるよ
少数派か・・・

639 :デフォルトの名無しさん:2012/07/10(火) 07:12:20.48
>>631
タッチパネルなら、縦横スクロールもそんなに苦じゃない。
マウスだとコロコロで1方向にしか行けないから使い辛い。

しかしMetroって今ストアにあるアプリの大半が横スクロールで作ってるけどなんで?
別に縦スクロールでも良いはずなのに。大抵のwinアプリは横スクロールなんて使ってないのに。

641 :デフォルトの名無しさん:2012/07/10(火) 23:21:35.39
>>639
ディスプレイが横長だから、かな?

643 :デフォルトの名無しさん:2012/07/11(水) 10:31:10.74
一ヶ月以上も前の話題で、どうもすみませんが、
可能でしたら、テキストエディタを作る話題のコードを、
再び、アップロードして頂けないでしょうか?
>>395
>>418
>>492

AvalonEditとか、とっかかりにするには巨大すぎて把握できません……


644 :デフォルトの名無しさん:2012/07/11(水) 10:39:59.32
>>641
人間の目は、縦より横に動く物の方が捉え易いからじゃねーかな
パチスロばっかりやってる様な奴は知らんがw

645 :デフォルトの名無しさん:2012/07/11(水) 10:49:01.42
>>639
WP7のパノラマUIを発展させた感じじゃない?
自分的には左右からのフリックでの操作とあわせて操作はしやすいと思う。


657 :デフォルトの名無しさん:2012/07/11(水) 20:10:11.96
メトロは池沼の発想による産物だから。
横スクロール推奨で、MSのガイドラインに
「スクロールできることが視覚的に分かるように次のページの一部が入り込むようにしましょう」
とか書いてあるのを見て目眩がしたわ。

701 :デフォルトの名無しさん:2012/07/28(土) 17:01:39.14
GDI+である範囲をクリッピングして線を引いたり四角を描いたりするのと同じようなことをしようと思うんですが、Canvas上でShape使ってやるとしてClipの仕方どうすべきですかね。
各Shape各々のClipにのShape位置にずらしてGeometryを設定する?
それともクリップの形状ごとにCanvasを全面覆う子Canvasを作ってそれにShape追加してクリップすべきですかね。
何か良い作法があれば教えてたもれ

711 :デフォルトの名無しさん:2012/08/01(水) 00:31:30.79
一度変更通知受け取ったら解除しちゃえばいいじゃないか

726 :デフォルトの名無しさん:2012/08/22(水) 08:16:33.29
ローカルアプリもHTML,CSSやJSだけでUIつくれたららくなのにな,,(ブラウザ無しでさ)

727 :デフォルトの名無しさん:2012/08/22(水) 08:26:54.56
>>726
今そういうの探してる最中なんだけど、そしてたどり着いたのがXAMLなんだけど、それに近いのってないの?


728 :デフォルトの名無しさん:2012/08/22(水) 08:28:47.59
Metroなら作れるよ
WPFなんか無くなってビューがHTML/CSS/JSで作れたら嬉しいのは同意
ビュー以外はC#で書きたいが

737 :デフォルトの名無しさん:2012/08/22(水) 10:19:34.20
>>727
世の中にはQTって奴も存在するんだけどな

748 :デフォルトの名無しさん:2012/08/22(水) 20:11:20.39
既存のブラウザコンポーネントを使うのが嫌だからって
自分でHTML/CSSの処理系作って組み込んだとして
それブラウザとどう違うのかと
環境依存が嫌ならWebkitのラッパーでも使っとけばいいだろ

753 :デフォルトの名無しさん:2012/08/22(水) 22:48:48.47
ブラウザコントロール使うならJavaScriptからC#のオブジェクトを操作したりメソッド呼んだり
その逆も普通にできるよ
ブラウザ使わないにしてもV8とかC#アプリに組み込んでC#からJavaScriptのコードを実行させることは可能
その場合、JavaScript側に.NETのリフレクションAPIをラップして提供しておけば
JavaScriptから.NET側のあらゆる機能に自由にアクセスできる

754 :デフォルトの名無しさん:2012/08/22(水) 22:53:20.43
>>753
そんなめんどくさいことしなくてもDLRでいけるだろ
DLRはJavaScriptもサポートしていたはず


759 :デフォルトの名無しさん:2012/08/23(木) 08:02:22.07
dynamicの中身はなかなか素敵だけど、
それでもDLRの一部しか入らなかったの残念ではある。

DLRでなくてもいいけども、動的言語間でのオブジェクト共有プロトコルはほんとほしいんだけどなぁ。
言語ごとに別ライブラリ覚えるとかナンセンス。

774 :デフォルトの名無しさん:2012/08/30(木) 05:59:39.27
スレ違いの気もするけど、Windows8のタッチパネル自体微妙だなって思う

単に見たりするだけの用途ならタッチパネルでもいいけど、
入力とか編集とかする場合はアプリなら10年後でも20年後でも
キーボードの方が入力効率はいいと思うし、
ゲームとかにしてもキーボードとマウスをフルに使ってプレイするような
複雑なものだと、タッチパネルだけで遊べるようになるとも思えない
他プレイヤーとのチャットとかもキーボード必須だろうし

結局、タッチパネルはタッチパネルで
外出先でノートで、何かを見るだけとか
一部の用途には有用だろうけど
デスクトップアプリやゲームは現状のまま残ると思う



http://toro.2ch.net/test/read.cgi/tech/1334300003/l50/../人気ブログランキングへ

学ばないブログ
忍者AdMax
記事検索
最新コメント
QRコード
QRコード
  • ライブドアブログ