• Ruby VS Scala at 2015年05月06日

    #21 楼 @loveltyoic 不完全是,我不知道 scala 有没有办法直接 eval 传进去的字符串。

  • Ruby VS Scala at 2015年05月06日

    性能没什么可比性,ruby 运行时都能扩展类,scala 可以么?

  • 我觉得 ruby 最好的 ide 还是 rubymine

  • Web 开发后端缓存思路 at 2015年04月20日

    #13 楼 @Alex join 十几个表,为什么不直接写 sql 呢?我觉得 orm 只有在简单查询修改的场景下才比较好用。

  • Web 开发后端缓存思路 at 2015年04月16日

    不同意第一条,join 也不是只连接一张表,如果是很多张表显然只能手写没法换成,orm 总体只能处理简单的业务逻辑,复杂的还是智能手写 sql。

  • 遗传算法。

  • 你的 model 保存过么?没保存是在 public/upload/tmp 下面。

  • 软件架构本质就是把简单事情复杂化。 C 语言纯过程式,不照样能把 os,compiler 这种级别的软件做得好好。软件开发最根本的重点只有一个,就是谁在写代码。

  • 简书沦陷了么? at 2015年03月09日

    用贝叶斯机器学习。

  • 遗传算法。

  • vim 好。 ruby ide 用 rubymine 如果能用就用 VS,最好的 ide 没有之一。

  • 加索引,分表

  • 和为定值的随机数 at 2015年01月10日

    #11 楼 @luikore 例如我跑了 5 遍排了下序,结果是这样的: ➜ ruby ruby tt.rb [20, 32, 47, 49, 119, 153, 160, 200, 201, 221, 222, 260, 271, 272, 297, 303, 304, 314, 333, 350, 352, 358, 366, 399, 400, 400, 402, 467, 492, 501, 511, 514, 532, 553, 573, 588, 607, 646, 649, 655, 670, 691, 720, 725, 750, 757, 762, 770, 792, 800, 822, 828, 841, 848, 850, 874, 904, 942, 988, 996, 1003, 1050, 1060, 1092, 1104, 1115, 1159, 1206, 1207, 1208, 1211, 1223, 1224, 1230, 1234, 1246, 1256, 1265, 1266, 1270, 1278, 1284, 1295, 1297, 1298, 1298, 1299, 1299, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300] ➜ ruby ruby tt.rb [34, 39, 40, 77, 79, 82, 85, 94, 96, 99, 129, 136, 145, 183, 241, 283, 295, 341, 342, 346, 382, 385, 402, 474, 484, 503, 538, 551, 554, 561, 572, 630, 646, 673, 676, 676, 684, 689, 699, 714, 718, 748, 750, 750, 766, 786, 809, 823, 847, 862, 871, 880, 881, 883, 892, 917, 932, 932, 974, 980, 989, 993, 1003, 1019, 1035, 1041, 1055, 1067, 1076, 1077, 1120, 1156, 1173, 1191, 1194, 1205, 1242, 1243, 1248, 1258, 1264, 1293, 1299, 1299, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300] ➜ ruby ruby tt.rb [27, 50, 91, 105, 106, 108, 128, 138, 141, 147, 164, 187, 235, 298, 335, 358, 378, 381, 384, 413, 414, 444, 457, 458, 469, 480, 497, 499, 506, 536, 545, 564, 565, 615, 617, 625, 628, 658, 661, 679, 681, 687, 701, 701, 707, 710, 714, 722, 740, 796, 797, 855, 860, 903, 904, 953, 965, 995, 1005, 1014, 1015, 1036, 1042, 1063, 1068, 1081, 1101, 1105, 1105, 1128, 1162, 1166, 1166, 1167, 1176, 1178, 1193, 1198, 1223, 1256, 1258, 1258, 1271, 1294, 1295, 1296, 1299, 1299, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300] ➜ ruby ruby tt.rb [18, 28, 35, 40, 49, 60, 125, 139, 177, 189, 190, 201, 245, 264, 268, 291, 316, 320, 338, 351, 351, 359, 392, 398, 401, 412, 425, 441, 468, 477, 492, 497, 512, 516, 525, 568, 573, 604, 643, 655, 662, 673, 715, 740, 772, 804, 829, 869, 872, 877, 881, 901, 909, 914, 931, 948, 973, 992, 1001, 1020, 1028, 1057, 1058, 1076, 1115, 1122, 1124, 1124, 1125, 1128, 1145, 1150, 1173, 1243, 1245, 1266, 1285, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300] ➜ ruby ruby tt.rb [9, 10, 37, 42, 85, 137, 139, 171, 183, 184, 199, 210, 235, 236, 271, 278, 298, 307, 329, 339, 345, 360, 366, 393, 401, 404, 435, 477, 527, 575, 575, 585, 591, 609, 629, 638, 646, 647, 648, 671, 725, 726, 758, 768, 769, 777, 781, 788, 814, 819, 822, 838, 865, 872, 893, 896, 897, 904, 916, 936, 946, 1048, 1049, 1050, 1060, 1105, 1137, 1138, 1138, 1156, 1194, 1205, 1208, 1212, 1228, 1241, 1268, 1275, 1276, 1288, 1297, 1298, 1299, 1299, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300]

    如果用遗传算法,效果会好很多,不过同时也慢(存在不确定性):

    ➜ ruby ruby ga.rb [4, 32, 100, 162, 171, 220, 232, 249, 259, 286, 292, 318, 322, 356, 362, 362, 381, 436, 442, 448, 454, 463, 496, 501, 510, 516, 573, 582, 589, 591, 593, 597, 597, 619, 654, 672, 681, 697, 707, 707, 712, 714, 731, 736, 759, 815, 846, 850, 868, 870, 872, 877, 897, 900, 919, 921, 930, 949, 951, 957, 964, 980, 982, 995, 1002, 1039, 1043, 1044, 1045, 1046, 1069, 1071, 1080, 1082, 1094, 1094, 1109, 1110, 1139, 1141, 1145, 1168, 1173, 1173, 1192, 1201, 1203, 1220, 1221, 1224, 1232, 1240, 1243, 1251, 1258, 1275, 1278, 1282, 1288, 1297] ➜ ruby ruby ga.rb [8, 59, 97, 132, 146, 168, 179, 180, 223, 230, 262, 263, 276, 291, 318, 318, 328, 350, 350, 461, 473, 477, 494, 494, 495, 540, 561, 575, 587, 590, 641, 650, 661, 672, 677, 699, 705, 718, 738, 739, 751, 752, 761, 769, 788, 807, 841, 864, 868, 882, 894, 897, 903, 924, 930, 956, 957, 969, 978, 980, 988, 998, 998, 1002, 1008, 1011, 1040, 1041, 1047, 1056, 1078, 1086, 1094, 1113, 1121, 1133, 1136, 1140, 1153, 1156, 1167, 1170, 1173, 1177, 1179, 1179, 1186, 1189, 1204, 1215, 1217, 1221, 1223, 1225, 1239, 1240, 1248, 1266, 1288, 1299] ➜ ruby ruby ga.rb [22, 122, 135, 167, 184, 227, 232, 234, 237, 265, 278, 290, 330, 352, 379, 388, 393, 401, 405, 424, 439, 464, 503, 505, 508, 517, 527, 553, 555, 557, 561, 588, 592, 601, 608, 624, 652, 659, 676, 684, 717, 719, 726, 738, 747, 759, 768, 786, 792, 894, 904, 917, 926, 929, 932, 934, 949, 952, 954, 961, 979, 982, 989, 999, 1007, 1013, 1024, 1027, 1041, 1052, 1081, 1096, 1097, 1114, 1118, 1120, 1122, 1126, 1166, 1168, 1169, 1174, 1189, 1214, 1215, 1224, 1225, 1226, 1238, 1247, 1249, 1257, 1259, 1268, 1270, 1271, 1275, 1276, 1292, 1299] ➜ ruby ruby ga.rb [146, 157, 159, 160, 184, 192, 234, 247, 272, 295, 361, 384, 391, 399, 418, 435, 435, 472, 494, 524, 553, 556, 562, 565, 575, 593, 602, 611, 630, 631, 640, 642, 661, 663, 669, 678, 695, 699, 713, 717, 721, 729, 753, 753, 766, 778, 782, 802, 814, 818, 831, 833, 836, 851, 867, 879, 881, 887, 894, 905, 914, 952, 959, 965, 969, 973, 995, 1002, 1005, 1019, 1022, 1025, 1031, 1041, 1045, 1064, 1085, 1087, 1104, 1128, 1140, 1155, 1159, 1163, 1165, 1165, 1190, 1191, 1193, 1217, 1222, 1224, 1228, 1228, 1238, 1247, 1257, 1262, 1288, 1289] ➜ ruby ruby ga.rb [16, 26, 38, 64, 155, 170, 203, 227, 231, 233, 241, 270, 270, 283, 294, 309, 350, 374, 396, 398, 404, 447, 451, 454, 490, 509, 516, 523, 544, 573, 609, 610, 620, 683, 685, 691, 719, 722, 733, 783, 786, 787, 791, 796, 799, 812, 825, 841, 846, 850, 877, 910, 920, 933, 933, 946, 947, 958, 959, 984, 990, 1018, 1018, 1018, 1027, 1030, 1050, 1059, 1064, 1078, 1082, 1106, 1111, 1111, 1131, 1134, 1136, 1140, 1158, 1158, 1159, 1160, 1175, 1180, 1183, 1184, 1186, 1190, 1212, 1231, 1233, 1255, 1257, 1262, 1275, 1277, 1280, 1285, 1291, 1292]

  • 好玩的遗传算法。 at 2015年01月10日

    这个算法实现的随机数数组是相当的随机,扩大数据范围就可以看得非常明显,例如: ga 80000, 100, 4, 1300

  • 和为定值的随机数 at 2015年01月10日

    #11 楼 @luikore 大数据范围你这类的基本开头都不随机的,几乎都是最大值。。。 例如 nums 100, 80000, 4, 1300

  • 和为定值的随机数 at 2015年01月10日
    $pm = 0.01
    $cluster_num = 20
    $result = nil
    
    def gen_rands(n, lb, rb)
      rands = []
      n.times do
        r = rand(lb..rb)
        rands << r
      end
      rands
    end
    
    def gen_rands_arr(arr_num, n, lb, rb)
      rands_arr = []
      arr_num.times do 
        rands_arr << gen_rands(n, lb, rb)
      end
      rands_arr
    end
    
    def fit(sum, all_rands)
      total_p = 0.0
      curr_p_arr = []
      all_rands.each do |rands|
        curr_p = 0.0;
        rands.each { |r| curr_p += r }
        delta = sum-curr_p
        if delta == 0
          $result=rands
          return
        end
        curr_p = 1.0/(delta)
        curr_p = curr_p.abs
        curr_p_arr << curr_p
        total_p += curr_p
      end
    
      fit_arr = []
      fit_arr << curr_p_arr[0]/total_p
      curr_p_arr.each_index do |i|
        next if i == 0
        fit_arr << fit_arr[i-1] + curr_p_arr[i]/total_p
      end
    
      fit_arr
    end
    
    def ga(sum, n, lb, rb)
      rands_arr = gen_rands_arr($cluster_num, n, lb, rb)
      fit_arr = fit(sum, rands_arr)
      while $result.nil?
        fit_arr = fit(sum, rands_arr)
        return unless $result.nil?
        selector_arr = []
        $cluster_num.times do
          selector_arr << rand()
        end
    
        selected_rands_indexs = Array.new($cluster_num, 0)
        selector_arr.each do |s|
          # binary search
          low = 0
          high = fit_arr.size
          while low <= high
            middle = (low+high)/2
            if fit_arr[middle] >= s
              high = middle-1
            else
              low = middle+1
            end
          end
          selected_rands_indexs[low] += 1
        end
    
        next_gen_rands_arr = []
        k = 0
        while k < $cluster_num do
          i = 0
          while selected_rands_indexs[i] == 0
            i += 1
          end
          selected_rands_indexs[i] -= 1
    
          j = i+1
          while selected_rands_indexs[j] == 0
            j += 1
          end
          j = i if j == $cluster_num
          selected_rands_indexs[j] -= 1
    
          next_gen_rands1 = []
          next_gen_rands2 = []
          # 随机交叉点
          r1 = rand(0..n-1)
          r2 = rand(0..n-1)
          if r1 > r2
            tmp = r1
            r1 = r2
            r2 = tmp
          end 
    
          for ii in 0..(r1-1) do
            next_gen_rands1[ii] = rands_arr[i][ii]
            next_gen_rands2[ii] = rands_arr[j][ii]
          end
          for jj in (r2+1)..(n-1) do
            next_gen_rands1[jj] = rands_arr[i][jj]
            next_gen_rands2[jj] = rands_arr[j][jj]
          end
          # 交换基因
          for kk in r1..r2 do 
            next_gen_rands1[kk] = rands_arr[j][kk]
            next_gen_rands2[kk] = rands_arr[i][kk]
          end
          # 忽略修复重复基因
    
          #新种群
          next_gen_rands_arr[k] = next_gen_rands1
          next_gen_rands_arr[k+1] = next_gen_rands2
          k+=2
        end
    
        next_gen_rands_arr.each do |r|
          #突变
          pm = rand()
          if pm < $pm
            #发生突变
            #突变点
            pi = rand(0..n-1)
            new_rand = rand(lb..rb)
            r[pi] = new_rand
          end
        end
        rands_arr = next_gen_rands_arr
    
        rands_arr.each do |rands|
          curr_p=0
          rands.each { |r| curr_p += r }
          delta = sum-curr_p
          if delta == 0
            $result=rands
            return
          end
        end
      end
    end
    
    ga 80000, 100, 4, 1300
    p $result.sort
    
    
  • 和为定值的随机数 at 2015年01月09日

    #15 楼 @bluexuemei 过会儿给你,最近比较忙。

  • 有人会跳出来让你学 erlang

  • Rails 集成 ActiveX at 2015年01月04日

    #2 楼 @michael_roshen 等我做好了就分享出来哈哈。

  • 和为定值的随机数 at 2015年01月04日

    这玩儿意感觉可以用遗传算法来算,会更平均些。。

  • Rasefon <- 实干家!

  • 你们都是如何调试的 at 2015年01月03日

    rubymine 是最好用的。我觉得花钱买也值。

  • 我兑现了一个月前的承诺 at 2015年01月03日

    诚实帝

  • #18 楼 @luikore 纯算法上的解法的话,排序 + 取前 n 个本来就不是好的做法吧。

  • 语法糖没意思,我最不喜欢 ruby 一种功能多种写法,还不如多想点办法提高运行效率。

  • 别用 mysql 了,多买几个 ups,搞个 100g 内存就行了哈哈。