小编Mar*_*usQ的帖子

71
推荐指数
9
解决办法
13万
查看次数

如何在git存储库中处理广泛的代码格式更改

我们有一个包含大约500,000行代码的项目,使用git进行管理,其中大部分已经使用了几年.我们即将进行一系列修改,以使旧代码符合开发人员社区的当前标准和最佳实践,包括命名约定,异常处理,缩进等.

你可以把它想象成漂亮的印刷和低级/机械重构之间的东西.

这个过程很可能触及代码库中的几乎所有代码行(~85%),并且一些行将受到多达五次修改.所有更改都旨在在语义上保持中立.

  • 是否有任何方法可以使更改对git blame等透明,这样当从一个月后查看代码时,我们会看到引入逻辑的提交,而不是更改缩进或大小写的提交?
  • 从没有经历过这个过程的叉子中拉出合并的最佳方法是什么?我现在的计划是让一个脚本克隆分叉的repo,将自动化过程应用于它及其基础,对它们进行区分,然后应用diff.但我希望得到更清晰的答案.
  • 还有其他我没有看到的问题,如果有的话可以做些什么来减轻它们?我认为git bisect等应该没问题,git log等等.除非你小心谨慎,否则git diff会很烦人,但是我不相信我不会忽视另一个痛点.

  • git refactoring pretty-print indentation

    44
    推荐指数
    3
    解决办法
    6883
    查看次数

    您是否发现您仍然需要可以更改的变量,如果是这样,为什么?

    我听过的反对函数式语言的一个论点是,单个赋值编码太难了,或者至少比"普通"编程要难得多.

    但是通过我的代码,我意识到如果你用一种合理的现代语言写作,我真的没有很多(任何?)使用模式,使用单一的赋值形式也无法编写.

    那么变量的用例有哪些在一个单独的范围调用中变化?请记住,在这种情况下,调用之间不同的循环索引,参数和其他范围限制值不是多个赋值(除非您出于某种原因必须在正文中更改它们),并假设您正在编写某些内容远远高于汇编语言级别,在那里你可以编写类似的东西

    values.sum
    
    Run Code Online (Sandbox Code Playgroud)

    或(如果没有提供金额)

    function collection.sum --> inject(zero, function (v,t) --> t+v )
    
    Run Code Online (Sandbox Code Playgroud)

    x = if a > b then a else b
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    n = case s 
      /^\d*$/ : s.to_int
      ''      : 0
      '*'     : a.length
      '?'     : a.length.random
      else    fail "I don't know how many you want"
    
    Run Code Online (Sandbox Code Playgroud)

    当你需要,并有列表推导,地图/收集等等.

    您是否发现在这样的环境中仍然需要/需要可变变量,如果是,那么对于什么?

    澄清一点,我不是要求对SSA表格的异议进行背诵,而是要求适用这些异议的具体例子.我正在寻找具有可变变量的清晰简洁的代码,如果没有它们就无法编写.

    到目前为止我最喜欢的例子(以及我对他们的最佳反对意见):

    1. 保罗约翰逊的Fisher-Yates算法答案,当你包含大O约束时,它非常强大.但是,正如catulahoops指出的那样,big-O问题与SSA问题无关,而是与可变数据类型相关联,并且在预留的情况下,可以在SSA中清楚地编写算法:

       shuffle(Lst) ->
           array:to_list(shuffle(array:from_list(Lst), erlang:length(Lst) - 1)).
       shuffle(Array, 0) -> Array;
       shuffle(Array, N) ->
           K = random:uniform(N) …
      Run Code Online (Sandbox Code Playgroud)

    variables haskell functional-programming ssa modern-languages

    33
    推荐指数
    4
    解决办法
    2782
    查看次数

    2d中的正则表达式是否有任何好的/有趣的类比?

    两个维度中的正则表达式是否有任何好的(或至少有趣但有缺陷的)类似物?

    在一个维度上,我可以编写类似于/aaac?(bc)*b?aaa/快速拉出交替bs和cs 的区域,其边界至少为3 a秒.也许同样重要的是,我可以在一个月后回来,一目了然地看到它在寻找什么.

    我发现自己在2d中编写类似问题的自定义代码(一些更复杂/受限制),并且有一个更简洁和标准化的符号会很好,即使我必须自己编写引擎.

    第二个例子可能被称为"找到+".目标是找到一个3或更多as 的列,一个b括号为3或更多的as,a下面有三个或更多s.它应该匹配:

    ..7...hkj.k f
    7...a  h o j 
    ----a--------
     j .a,g- 8 9 
    .aaabaaaaa7 j
     k .a,,g- h j
     hh a----?  j
        a   hjg 
    
    Run Code Online (Sandbox Code Playgroud)

    并且可能写成[b ^(a {3})v(a {3})>(a {3})<(a {3})]或......

    建议?

    regex language-agnostic algorithm graphics

    26
    推荐指数
    1
    解决办法
    1225
    查看次数

    内存映射文件有多大?

    什么限制了内存映射文件的大小?我知道它不能超过最大的连续未分配地址空间块,并且应该有足够的可用磁盘空间.但还有其他限制吗?

    mmap memory-mapped-files

    24
    推荐指数
    2
    解决办法
    2万
    查看次数

    在Rails中获取STI类基类的路由

    假设我有一个带有3个模型的rails应用程序,Person,Place和Thing.假设Thing使用单表继承,因此有FancyThing和ScaryThing子类.然后有定义的路线map.resources :people, :places, :things.所以没有FancyThings和ScaryThings的控制器,ThingsController处理任何类型.

    现在说我需要有代码,显示任何有链接的列表.如果我在我的视图中有这个代码:

    <% @items.each do |item| %>
      <%= link_to item.name, item %>
    <% end %>
    
    Run Code Online (Sandbox Code Playgroud)

    如果item是Person或Place,则工作正常,polymorphic_path负责生成正确的路由.但是如果item是FancyThing或ScaryThing,这会爆炸,因为它会尝试使用fancy_thing_path,没有路由.我想以某种方式使它使用thing_path.理想情况下,Thing和/或其子类上会有一个方法以某种方式指示子类应该使用基类来生成路由.有一个优雅的解决方案吗?

    ruby ruby-on-rails

    8
    推荐指数
    2
    解决办法
    3263
    查看次数

    提出这个问题最阴险的方法是什么?

    到目前为止我最好的一击:

    交付工具需要进行一系列交付(d 1,d 2,... d n),并且可以按任何顺序进行交付- 换句话说,集合的所有可能排列D = {d 1, d 2,... d n }是有效的解决方案 - 但是特定的解决方案需要在路由器的一端离开基站之前确定(想象一下这些包需要加载到车辆LIFO中,例如).

    此外,各种排列的成本也不相同.它可以计算为d i -1和d i之间行进距离的平方和,其中d 0被认为是基站,需要注意的是任何涉及方向变化的段都要花费3倍的时间(想象一下,这是在铁路或气动管上进行的,备份会破坏其他交通).

    鉴于交付的集合D表示为它们与基站的距离(因此abs(di -dj)是两个交付之间的距离)和迭代器permutations(D)将连续产生每个排列,找到一个成本小于或等于任何排列的排列其他排列.

    现在,从这个描述直接实现可能会导致这样的代码:

    function Cost(D) ...
    
    function Best_order(D)
        for D1 in permutations(D)
            Found = true
            for D2 in permutations(D)
                Found = false if cost(D2) > cost(D1)
            return D1 if Found
    
    Run Code Online (Sandbox Code Playgroud)

    哪个是O(n*n!^ 2),例如非常糟糕 - 特别是与O(n log(n))相比,有洞察力的人会通过简单地排序D.

    我的问题:你能否提出一个似乎合理的问题描述,这自然会导致粗心大意进入排序算法的更糟(或不同的可怕)实现?

    puzzle algorithm analysis

    7
    推荐指数
    1
    解决办法
    942
    查看次数

    在树的节点上构建等价类的好数据结构是什么?

    我正在寻找一个良好的数据结构来在树的节点上构建等价类.在理想的结构中,以下操作应该是快速的(适当的O(1)/ O(n))和容易(没有神秘代码的段落):

    • (A)从树上走树; 在每个节点上 - >子转换枚举子节点的所有等效版本
    • (B)合并两个等价类
    • (C)从现有节点(子节点)和其他数据的列表中创建新节点
    • (D)找到结构上等同于节点的任何节点(即它们具有相同数量的子节点,相应的子节点属于相同的等价类,并且它们的"其他数据"相等)以便可以放置新的(或新修改的)节点在正确的等价类中(通过合并)

    到目前为止,我已经考虑过(其中一些可以组合使用):

    • parfait,其中子节点引用节点集合而不是节点.(A)速度快,(B)需要遍历树并更新节点以指向合并集合,(C)需要查找包含新节点的每个子节点的集合,(D)需要遍历树
    • 按特征维护节点的哈希值.这使得(D)更快但(B)更慢(因为当合并等价类时必须更新散列)
    • 将节点串在一起成为循环链表.(A)速度快,(B)速度快但是因为圆形列表的"合并"部分实际上拆分列表(C)会很快,(D)需要走树
    • 如上所述,但在每个节点中有一个额外的"向上"指针,可用于查找循环列表的规范成员.

    我错过了一个甜蜜的选择吗?

    language-agnostic algorithm tree equivalence-classes data-structures

    6
    推荐指数
    1
    解决办法
    2956
    查看次数

    默认的Ruby访问器方法?

    是否有一个默认方法或类访问器,我可以添加到一个Ruby类,如果一个访问器(类似Ruby的属性)没有退出?然后,我可以编写一些自定义代码来回复,就像从数据库中读取的数组列表一样,可以像访问者一样访问值,而无需编写访问者代码(因为如果从数据库中读取它的未知数).

    使用Ruby MRI 1.9

    谢谢!

    ruby method-missing

    4
    推荐指数
    1
    解决办法
    1904
    查看次数

    Ruby中的符号表与其他语言中的符号表有任何不同

    符号表上的维基百科条目是一个很好的参考:

    http://en.wikipedia.org/wiki/Symbol_table

    但是当我尝试理解Ruby中的符号以及它们如何在符号数组中表示时(由Symbol.all_symbols方法返回),

    我想知道Ruby的符号表方法是否与其他语言有任何重要的区别?

    ruby symbol-tables

    2
    推荐指数
    1
    解决办法
    853
    查看次数

    如何将<p> </ p>标记应用于文本字段

    我在SQL Server中有一个varchar()字段,它在段落标记之间有一些回车符/换行符.

    我想把它变成格式正确的HTML.

    例如:

    ----------之前----------

    快速的棕色狐狸跳过懒狗.然后他感到无聊并上床睡觉.之后,他和他的朋友一起玩.

    第二天,他和他的朋友举行了一个盛大的聚会.


    ---------- -----------之后

    <p>快速的棕色狐狸跳过懒狗.然后他感到无聊并上床睡觉.之后,他和他的朋友一起玩.</ p>

    <p>第二天,他和他的朋友举行了一个盛大的聚会.</ p>


    这样做的正确方法是什么?显然正则表达式是一个很好的方法,但我无法弄清楚如何以理智的方式捕获字段的开头以及crlf(回车/换行)组合.

    那里有任何正则表达式的天才?会爱一些帮助.谢谢,如果是的话

    c# regex sql string

    0
    推荐指数
    1
    解决办法
    1532
    查看次数

    这个算法有什么问题?

    这是一个抽象的bug形式,它引导我进入构成我之前问题基础的代码.很明显,一旦你看到了它,但是一些熟悉原始问题和原始语言的专业程序员会查看代码并在我们捕获它之前忽略它(不可否认,在它的原生环境中它接近三页长).

    混淆你的回答,以便后来者也能玩得开心.

    most_bang_for_buck_score = 0.0
    most_bang_for_buck_order = []
    for appetizer in appetizers
        total_cost     = appetizer.cost
        total_calories = appetizer.calories
        for salad in salads
            total_cost     = total_cost     + salad.cost
            total_calories = total_calories + salad.calories
            for entree in entrees
                total_cost     = total_cost     + entree.cost
                total_calories = total_calories + entree.calories
                for desert in deserts
                    total_cost     = total_cost      + desert.cost
                    total_calories = total_calories + desert.calories
                    if total_calories/total_cost > most_bang_for_buck_score
                        most_bang_for_buck_score = total_calories/total_cost
                        most_bang_for_buck_order = [appetizer,salad,entree,desert]
     print "You'll get the most food …
    Run Code Online (Sandbox Code Playgroud)

    language-agnostic debugging

    -1
    推荐指数
    1
    解决办法
    741
    查看次数