Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

とちぎRuby会議01(原)

4,538 views

Published on

とちぎRuby会議01
原信一郎
2009.02.21

Published in: Technology
  • Be the first to comment

とちぎRuby会議01(原)

  1. 1. 裏表紙
  2. 2. 自己紹介 『Ruby プログラミング入門』オーム社 (1999)
  3. 3. 自己紹介
  4. 4. 自己紹介
  5. 5. 自己紹介
  6. 6. 自己紹介
  7. 7. 自己紹介
  8. 8. 自己紹介
  9. 9. 自己紹介
  10. 10. 自己紹介
  11. 11. 自己紹介
  12. 12. 自己紹介
  13. 13. 自己紹介
  14. 14. 自己紹介
  15. 15. 自己紹介
  16. 16. 自己紹介
  17. 17. 自己紹介 http://blade.nagaokaut.ac.jp/
  18. 18. ソフトウェア • blade
  19. 19. ソフトウェア • blade • shttpsrv
  20. 20. ソフトウェア • blade • shttpsrv • httpsnapshot
  21. 21. ソフトウェア • blade • shttpsrv • httpsnapshot • htmltree
  22. 22. ソフトウェア • blade • shttpsrv • httpsnapshot • htmltree • import module
  23. 23. ソフトウェア • blade • shttpsrv • httpsnapshot • htmltree • import module • 旧 rational
  24. 24. ソフトウェア • blade • shttpsrv • httpsnapshot • htmltree • import module • 旧 rational • statistics2
  25. 25. ソフトウェア • blade • shttpsrv • httpsnapshot • htmltree • import module • 旧 rational • statistics2 • algebra
  26. 26. ソフトウェア • blade • shttpsrv • httpsnapshot • htmltree • import module • 旧 rational • statistics2 • algebra • (cinema)
  27. 27. ソフトウェア • blade • shttpsrv • httpsnapshot • htmltree • import module • 旧 rational • statistics2 • algebra • (cinema) • (stardigio)
  28. 28. ソフトウェア • blade • shttpsrv • httpsnapshot • htmltree • import module • 旧 rational • statistics2 • algebra • (cinema) • (stardigio) • (album)
  29. 29. ソフトウェア • blade • shttpsrv • httpsnapshot • htmltree • import module • 旧 rational • statistics2 • algebra • (cinema) • (stardigio) • (album) • そのほか
  30. 30. 再び自己紹介
  31. 31. 再び自己紹介 計算が不自由
  32. 32. ある事例 42 ÷ 7 =?
  33. 33. 42 ÷ 7 =? 筆算でやってみる
  34. 34. 42 ÷ 7 =? 筆算でやってみる    
  35. 35. 42 ÷ 7 =? 筆算でやってみる     事態は好転せず
  36. 36. 42 ÷ 7 =? 筆算でやってみる     事態は好転せず
  37. 37. 42 ÷ 7 =? 筆算でやってみる     事態は好転せず 結局 irb
  38. 38. 42 ÷ 7 =? 筆算でやってみる     事態は好転せず 結局 irb    irb(main):001:0> 42.0 / 7   => 6.0
  39. 39. 42 ÷ 7 =? 筆算でやってみる     事態は好転せず 結局 irb    irb(main):001:0> 42.0 / 7   => 6.0 めでたしめでたし
  40. 40. めでたしめでたし ほんとうに?
  41. 41. めでたしめでたし これでいいのだ
  42. 42. めでたしめでたし ものは考えよう
  43. 43. めでたしめでたし ものは考えよう Ruby はすでに組み込まれている
  44. 44. めでたしめでたし ものは考えよう Ruby はすでに組み込まれている    
  45. 45. めでたしめでたし ものは考えよう Ruby はすでに組み込まれている        =⇒  
  46. 46. 『博士の愛した数式』   [ぼくの記憶は 80 分しかもたない] 博士の背広の袖にはそう書かれた古びたメモが留められていた―記憶力を失った博士 にとって、私は常に ”新しい ”家政婦。博士は ”初対面 ”の私に、靴のサイズや誕生日を尋ねた。数字が博士の言葉だっ た。やがて私の 10 歳の息子が加わり、ぎこちない日々は驚きと歓びに満ちたものに変わった。あまりに悲しく暖かい、 奇跡の愛の物語。
  47. 47. 「博士」と「工夫」 メモ 外部記憶装置にして主記憶 《新しい家政婦さん》
  48. 48. 「博士」と「工夫」 メモ 外部記憶装置にして主記憶 《新しい家政婦さん》 《と、その息子》
  49. 49. 「博士」と「工夫」 メモ 外部記憶装置にして主記憶 《新しい家政婦さん》 《と、その息子》 《 》
  50. 50. 「博士」と「工夫」 義手、義足、人工関節 ペースメーカ 人工肛門 カーナビ コンピュータ 時計 めがね 紙、鉛筆
  51. 51. 「博士」と「工夫」 人はハンディキャップを負っている。
  52. 52. 「博士」と「工夫」 人はハンディキャップを負っている。 本質的に「不自由」である。
  53. 53. しばらくお待ちください。 ここで時計を見る 残り時間早見表 時刻 経過 残り 13:05 0 35 13:10 5 30 13:15 10 25 13:20 15 20 13:25 20 15 13:30 25 10 13:35 30 5 13:40 35 0
  54. 54. algebra algebra
  55. 55. algebra algebra のできること • 体や環を定義できる • 剰余環 • 代数拡大 • 商体 • 多項式環 • 行列環 • 有限群
  56. 56. algebra • 多項式の因数分解 • 整数上 • 有理数上 • 素体上 • 代数体上 (1 変数のみ)
  57. 57. algebra • 線形代数 • 任意の体での連立 1 次方程式の解 • 代数体係数の正方行列の対角化 • 整数や任意の体上の多項式の作る行列の単因子を求める • Jordan 標準形を求める
  58. 58. algebra • 任意の体上の多項式の作るイデアルのグレブナ基底を求める • 任意の体での連立代数方程式の解 • 様々な応用
  59. 59. algebra • 代数方程式 • 代数体上の代数方程式の解 • 有理数係数多項式の最小分解体やガロア群を求める(苦しい)
  60. 60. 因数分解 x5 + 24x4 + 489x3 + 11041x2 + 53618x + 1062347
  61. 61. 因数分解 x5 + 24x4 + 489x3 + 11041x2 + 53618x + 1062347    = (x + 23)(x2 + 323)(x2 + x + 143)
  62. 62. 因数分解 x5 + 24x4 + 489x3 + 11041x2 + 53618x + 1062347    = (x + 23)(x2 + 323)(x2 + x + 143) require quot;algebraquot; P, x = Polynomial(Rational, quot;xquot;) f = x**5 + 24*x**4 + 489*x**3 + 11041*x**2 + 53618*x + 1062347 p f.factorize
  63. 63. 因数分解 x5 + 24x4 + 489x3 + 11041x2 + 53618x + 1062347    = (x + 23)(x2 + 323)(x2 + x + 143) require quot;algebraquot; P, x = Polynomial(Rational, quot;xquot;) f = x**5 + 24*x**4 + 489*x**3 + 11041*x**2 + 53618*x + 1062347 p f.factorize  #=>(x + 23)(xˆ2 + 323)(xˆ2 + x + 143)
  64. 64. 因数分解 x3 + y3 + z3 − 3xyz
  65. 65. 因数分解 x3 + y3 + z3 − 3xyz    = (x + y + z)(x2 − xy − xz + y2 − yz + z2 )
  66. 66. 因数分解 x3 + y3 + z3 − 3xyz    = (x + y + z)(x2 − xy − xz + y2 − yz + z2 ) require quot;algebraquot; P = MPolynomial(Rational) x, y, z = P.vars(quot;xyzquot;) f = x**3 + y**3 + z**3 - 3*x*y*z p f.factorize
  67. 67. 因数分解 x3 + y3 + z3 − 3xyz    = (x + y + z)(x2 − xy − xz + y2 − yz + z2 ) require quot;algebraquot; P = MPolynomial(Rational) x, y, z = P.vars(quot;xyzquot;) f = x**3 + y**3 + z**3 - 3*x*y*z p f.factorize  #=> (x+y+z)(xˆ2-xy-xz+y2-yz+zˆ2) ˆ
  68. 68. 因数分解 x4 + 1
  69. 69. 因数分解 √ √ x4 + 1    = (x2 + 2x + 1)(x2 − 2x + 1)
  70. 70. 因数分解 √ √ x4 + 1    = (x2 + 2x + 1)(x2 − 2x + 1) require quot;algebraquot; R2, r2, r2 = Root(Rational, 2) P, x = Polynomial(R2, quot;xquot;) f = x**4 + 1 p f.factorize
  71. 71. 因数分解 √ √ x4 + 1    = (x2 + 2x + 1)(x2 − 2x + 1) require quot;algebraquot; R2, r2, r2 = Root(Rational, 2) P, x = Polynomial(R2, quot;xquot;) f = x**4 + 1 p f.factorize  #=>(xˆ2 - r2x + 1)(xˆ2 + r2x + 1)
  72. 72. 三角形の重心の存在 (問題) 三角形の三本の中線は一点で交わる?  
  73. 73. 三角形の重心の存在 3 つの点 (x, y), (a1 , a2 ), (b1 , b2 ) が一直線上にある条件は 1x y a2 = 0 1 a1 1 b1 b2
  74. 74. 三角形の重心の存在 require ’algebra’ R = MPolynomial(Rational) x,y,a1,a2,b1,b2,c1,c2 = R.vars(’xya1a2b1b2c1c2’) V = Vector(R, 2) X, A, B, C = V[x,y], V[a1,a2], V[b1,b2], V[c1,c2] D, E, F = (B + C) /2, (C + A) /2, (A + B) /2 def online(p1, p2, p3)   SquareMatrix.det([[1, *p1], [1, *p2], [1, *p3]]) end l1, l2, l3 = online(X, A, D), online(X, B, E), online(X, C, F) s = online(A, B, C) g = Groebner.basis [l1, l2, l3, s-1] g.each with index do |f, i|  pf end
  75. 75. 三角形の重心の存在 #=>   x - 1/3a1 - 1/3b1 - 1/3c1   y - 1/3a2 - 1/3b2 - 1/3c2   a1b2 - a1c2 - a2b1 + a2c1 + b1c2 - b2c1 - 1
  76. 76. 3色彩色問題 (問題) 次のグラフの各点に色を塗る。線分で結ばれた2点は必 ず異なる色で塗るとするとき、3色で塗ることは可能か?  
  77. 77. 3色彩色問題 (解)各点に F3 = Z/3Z の元を割り当てる。x と y の色が異なる ことは、 x= y+1 あるいは、 x= y+2 で表現できるので、両方あわせて、 (x − y − 1)(x − y − 2) = 0 と表現できる。
  78. 78. 3色彩色問題 従って、絵を見ながら隣り合っている領域の添え字は L = {(1, 2), (1, 5), (1, 6), (2, 3), (2, 4), (2, 8), (3, 4), (3, 8), (4, 5), (4, 7), (5, 6), (5, 7), (6, 7), (7, 8)} なので、 (xi − x j − 1)(xi − x j − 2) = 0 が (i, j) ∈ L について成り立てばよい。
  79. 79. 3色彩色問題 従って、絵を見ながら隣り合っている領域の添え字は L = {(1, 2), (1, 5), (1, 6), (2, 3), (2, 4), (2, 8), (3, 4), (3, 8), (4, 5), (4, 7), (5, 6), (5, 7), (6, 7), (7, 8)} なので、 (xi − x j − 1)(xi − x j − 2) = 0 が (i, j) ∈ L について成り立てばよい。 x8 = 0 を加えて、簡約グレブナ基底を求めると G = {x1 − x7 , x2 + x8 , x3 − x7 , x4 , x5 + x7 , x6 , x7 2 + 2, x8 } とな る。G の零点集合が空でないことは容易に確かめることができる。
  80. 80. 3色彩色問題 require quot;algebraquot; F3 = ResidueClassRing(Integer, 3) vs = (1..8).map{|i| quot;x#{i}quot;} xs = MPolynomial.create(F3, *vs).vars fs = [[1,2],[1,5],[1,6],[2,3],[2,4],   [2,8],[3,4],[3,8],[4,5],[4,7],   [5,6],[5,7],[6,7],[7,8]].map do |i, j|   i, j = (i-1)%xs.size, (j-1)%xs.size   (xs[i] - xs[j] - 1)*(xs[i] - xs[j] - 2) end fs.push(xs[7]) puts Groebner.basis(fs)
  81. 81. 3色彩色問題 require quot;algebraquot; F3 = ResidueClassRing(Integer, 3) vs = (1..8).map{|i| quot;x#{i}quot;} xs = MPolynomial.create(F3, *vs).vars fs = [[1,2],[1,5],[1,6],[2,3],[2,4],   [2,8],[3,4],[3,8],[4,5],[4,7],   [5,6],[5,7],[6,7],[7,8]].map do |i, j|   i, j = (i-1)%xs.size, (j-1)%xs.size   (xs[i] - xs[j] - 1)*(xs[i] - xs[j] - 2) end fs.push(xs[7]) puts Groebner.basis(fs) #=> x1-x7 x2+x7 x3-x7 x4 x5+x7 x6 x7ˆ2+2 x8
  82. 82. algebra
  83. 83. algebra なぜ algebra を書いたのか?
  84. 84. algebra なぜ algebra を書いたのか? 障害を克服したい。 •
  85. 85. algebra なぜ algebra を書いたのか? 障害を克服したい。自分を肯定したい。 •
  86. 86. algebra なぜ algebra を書いたのか? 障害を克服したい。自分を肯定したい。 • あ~、algebra は手に馴染むなあ •
  87. 87. algebra なぜ algebra を書いたのか? 障害を克服したい。自分を肯定したい。 • あ~、algebra は手に馴染むなあ、と言い • たい。
  88. 88. しばらくお待ちください。 ここで再び時計を見る 残り時間早見表 残り時間早見表 時刻 経過 残り 13:05 0 35 13:10 5 30 13:15 10 25 13:30 15 20 13:25 20 15 13:30 25 10 13:35 30 5 13:40 35 0
  89. 89. 22 世紀 Ruby 22 世紀の Ruby とは
  90. 90. 22 世紀 Ruby
  91. 91. 22 世紀 Ruby Lamy2000 (1966)
  92. 92. 22 世紀 Ruby Lamy SWIFT
  93. 93. 22 世紀 Ruby Lamy SCRIBLE
  94. 94. 22 世紀 Ruby CARAN d’ACHE 849 (1969)
  95. 95. 22 世紀 Ruby そろそろおわり
  96. 96. 22 世紀 Ruby そろそろおわり プログラミングはおもしろい
  97. 97. 22 世紀 Ruby そろそろおわり プログラミングはおもしろい ↓ プログラミングはたのしい
  98. 98. 22 世紀 Ruby そろそろおわり プログラミングはおもしろい ↓ プログラミングはたのしい ↓ プログラミングーはキモチイー
  99. 99. メモ
  100. 100. メモ 1. algebra がマニアックなものであるという印象を与えないよ うにする
  101. 101. メモ 1. algebra がマニアックなものであるという印象を与えないよ うにする 2. algebra が 1.9.1 で動かないことちゃんと言う
  102. 102. メモ 1. algebra がマニアックなものであるという印象を与えないよ うにする 2. algebra が 1.9.1 で動かないことちゃんと言う 3. Pen 自慢はほどほどに
  103. 103. おわり
  104. 104. お詫び 時間を超過して申し訳ありません。 残り時間早見表 時刻 残り 13:40 0 13:45 -5 13:50 -10 13:55 -15 14:00 -20 14:05 -25 14:10 -30 14:15 -35 14:20 -40

×