小编stm*_*max的帖子

合并:Hg/Git与SVN

我经常读到Hg(和Git和......)在合并方面比SVN更好但是我从未见过Hg/Git可以合并SVN失败的地方(或者SVN需要人工干预的地方)的实际例子.您可以发布一些分支/修改/提交/ ....-操作的逐步列表,显示SVN在Hg/Git愉快地移动时会失败的位置吗?实用,非常特殊的情况请...

一些背景:我们有几十个开发人员在使用SVN进行项目,每个项目(或一组类似项目)都在自己的存储库中.我们知道如何应用发布和功能分支,所以我们不会经常遇到问题(即,我们一直在那里,但我们已经学会克服Joel的问题 "一个程序员给整个团队造成创伤"或"需要六个开发人员两周才能重新整合分支机构").我们的发布分支非常稳定,仅用于应用错误修正.我们的中继线应该足够稳定,能够在一周内创建发布.我们还有一些开发人员或开发人员可以使用的功能分支.是的,它们在重新集成后被删除,因此它们不会使存储库混乱.;)

所以我仍然试图找到Hg/Git优于SVN的优势.我很想获得一些实践经验,但目前还没有任何我们可以移动到汞/ GIT中还没有更大的项目,所以我坚持用只含有少量由文件小型人工玩的项目.而且我正在寻找一些你可以感受到Hg/Git令人印象深刻的力量的案例,因为到目前为止我经常读到它们但却未能自己找到它们.

svn git merge mercurial dvcs

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

在ControlTemplate.Triggers中使用TemplateBinding

为什么下面的XAML给我一个带有(无意义)消息的"XamlParseException""表达式类型不是有效的样式值".在运行时?

<Control x:Class="TestApp.Max.MyControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:Max="clr-namespace:TestApp.Max"
         mc:Ignorable="d"
         d:DesignHeight="300" d:DesignWidth="300">
  <Control.Template>
    <ControlTemplate>
      <TextBlock Name="txt" Text="{TemplateBinding Max:MyControl.Foo}" />
      <ControlTemplate.Triggers>
        <Trigger Property="Control.IsMouseOver" Value="True">
          <Setter TargetName="txt" Property="Text" Value="{TemplateBinding Max:MyControl.Bar}" />
        </Trigger>
      </ControlTemplate.Triggers>
    </ControlTemplate>
  </Control.Template>
</Control>
Run Code Online (Sandbox Code Playgroud)

违规行是

<Setter TargetName="txt" Property="Text" Value="{TemplateBinding Max:MyControl.Bar}" />
Run Code Online (Sandbox Code Playgroud)

如果我用普通的Binding替换TemplateBinding,它开始工作:

{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Text2}
Run Code Online (Sandbox Code Playgroud)

我不应该使用TemplateBinding,因为我在ControlTemplate中?异常消息的真正含义是什么?

.net wpf

19
推荐指数
1
解决办法
3636
查看次数

为什么conda尝试使用--no-update-dependencies更新包?

通常当我尝试安装新软件包时,conda也想更新其他软件包,即使我已经添加了--no-update-dependencies开关.这些更新似乎是"不必要的" - 就像大多数时候只有版本号的最后一部分发生了变化.

今天我想安装mpld3包,conda想要将我的python包从版本3.4.4-2更新到3.4.4-4,即使我已经添加了--no-update-dependencies开关.

如何让conda安装mpld3包而不触及我的其他包?

C:\...>conda install -p pyenv --no-update-dependencies mpld3
Fetching package metadata: ....
Solving package specifications: ...........

Package plan for installation in environment C:\...\pyenv:

The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    vs2010_runtime-10.00.40219.1|                0         1.1 MB
    python-3.4.4               |                4        31.7 MB
    mpld3-0.2                  |           py34_0         123 KB
    ------------------------------------------------------------
                                           Total:        33.0 MB

The following NEW packages will be INSTALLED:

    mpld3:          0.2-py34_0
    vs2010_runtime: 10.00.40219.1-0

The following packages will be UPDATED:

    python:         3.4.4-2 --> 3.4.4-4

Proceed ([y]/n)?
Run Code Online (Sandbox Code Playgroud)

python anaconda conda

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

在测试F#异步工作流时如何获得有用的堆栈跟踪

我想测试以下异步工作流程(使用NUnit + FsUnit):

let foo = async {
  failwith "oops"
  return 42
}
Run Code Online (Sandbox Code Playgroud)

我为它编写了以下测试:

let [<Test>] TestFoo () =
  foo
  |> Async.RunSynchronously
  |> should equal 42
Run Code Online (Sandbox Code Playgroud)

自从foo抛出后,我在单元测试运行器中得到以下stacktrace:

System.Exception : oops
   at Microsoft.FSharp.Control.CancellationTokenOps.RunSynchronously(CancellationToken token, FSharpAsync`1 computation, FSharpOption`1 timeout)
   at Microsoft.FSharp.Control.FSharpAsync.RunSynchronously(FSharpAsync`1 computation, FSharpOption`1 timeout, FSharpOption`1 cancellationToken)
   at ExplorationTests.TestFoo() in ExplorationTests.fs: line 76
Run Code Online (Sandbox Code Playgroud)

不幸的是,堆栈跟踪并没有告诉我异常的位置.它在RunSynchronously处停止.

某处我听说Async.Catch神奇地恢复了堆栈跟踪,所以我调整了我的测试:

let [<Test>] TestFooWithBetterStacktrace () =
  foo
  |> Async.Catch
  |> Async.RunSynchronously
  |> fun x -> match x with 
              | Choice1Of2 x -> x |> should equal 42
              | Choice2Of2 …
Run Code Online (Sandbox Code Playgroud)

f# nunit unit-testing async-workflow

13
推荐指数
1
解决办法
784
查看次数

即使Process.HasExited为true,Process.WaitForExit也不会返回

我使用Process.Start来启动批处理文件.批处理文件使用"START"命令并行启动多个程序然后退出.

批处理文件完成后,Process.HasExited变为true,Process.ExitCode包含正确的退出代码.

但是当我调用Process.WaitForExit()时,它会挂起/永不返回.

下面的代码演示了这个问题.它创建一个批处理文件,启动它然后打印:

Process is still running...
Batch file is done!
Process has exited. Exit code: 123
Calling WaitForExit()...
Run Code Online (Sandbox Code Playgroud)

然后它应该打印:

WaitForExit returned.
Run Code Online (Sandbox Code Playgroud)

...但它永远不会(尽管HasExited是真的,我们已经有了一个ExitCode).

open System.IO
open System.Diagnostics
open System.Threading

let foobat = """
  START ping -t localhost
  START ping -t google.com
  ECHO Batch file is done!
  EXIT /B 123
"""

File.WriteAllText("foo.bat", foobat)

use p = new Process(StartInfo = ProcessStartInfo("foo.bat",
                                                 UseShellExecute = false,
                                                 RedirectStandardOutput = true,
                                                 RedirectStandardError = true))

let onOutput = DataReceivedEventHandler(fun _ args -> printfn "%s" args.Data)

p.OutputDataReceived.AddHandler …
Run Code Online (Sandbox Code Playgroud)

.net c# f#

12
推荐指数
1
解决办法
9456
查看次数

查找覆盖2d数组中某些元素的最小矩形数的算法

简化后,我要解决以下问题:

你有一个填充0和1的二维数组.找到最小数量的矩形,使它们覆盖所有1.矩形不应重叠.

函数签名可能如下所示: List<Rectangle> FindCoveringRectangles(bool[,] array)

我已经有一个"足够好"的解决方案,但并不总能找到最小数量的矩形.我想知道是否有一些众所周知且有效的算法可用于解决这个问题?

例:

输入数组:

..........
.1.....11.
.......11.
...111....
...111....
...111....
....1111..
....1111..
......11..
..........
Run Code Online (Sandbox Code Playgroud)

(为了便于阅读,将0替换为点)

可能导致以下矩形:

(2,2,2,2),
(2,8,3,9),
(4,4,6,6),
(7,5,8,8),
(9,7,9,8)
Run Code Online (Sandbox Code Playgroud)

(上,左,下,右),基于1

可以有多个解决方案,但其中一个就足够了.

algorithm

11
推荐指数
1
解决办法
3404
查看次数

F#模块初始化的不同行为

我有以下F#程序:

open MyModule

printfn "%d" test
Run Code Online (Sandbox Code Playgroud)

MyModule是:

module MyModule

printfn "foo"

let test = 
  printfn "bar"
  42
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

foo
bar
42
Run Code Online (Sandbox Code Playgroud)

当我将MyModule更改为:

module MyModule

printfn "foo"

let test = 
  // printfn "bar" <-- note the comment!
  42
Run Code Online (Sandbox Code Playgroud)

......结果是:

42
Run Code Online (Sandbox Code Playgroud)

为什么"foo"不再打印?

f#

9
推荐指数
1
解决办法
823
查看次数

Async.Catch不适用于OperationCanceledExceptions

我使用Async.Catch来处理异步工作流抛出的异常:

work
|> Async.Catch
|> Async.RunSynchronously
|> fun x -> match x with
            | Choice1Of2 _ -> () // success
            | Choice2Of2 ex -> // failure, handle exception
Run Code Online (Sandbox Code Playgroud)

今天我注意到Async.Catch不处理OperationCanceledExceptions.而不是从Async.Catch获得选择,异常不断冒泡直到它击中我.我希望下面的测试是红色的,但它是绿色的:

  [<Test>]
  let ``Async.Catch doesnt work on OperationCancelledExceptions``() =
    use cancellationTokenSource = new System.Threading.CancellationTokenSource(1000)

    let work = async {
      while true do
        do! Async.Sleep 100
    }

    (fun () -> work
               |> Async.Catch
               |> fun x -> Async.RunSynchronously (x, cancellationToken=cancellationTokenSource.Token)
               |> ignore)
    |> should throw typeof<System.OperationCanceledException>
Run Code Online (Sandbox Code Playgroud)

使用Async.Catch + Choices +匹配以及其他一些使用try/catch块评估一些异常似乎不正确......它看起来像下面这样,这太复杂了.除此之外,我想知道Async.Catch有什么用,因为我必须使用try/catch块...:

  [<Test>]
  let ``evaluating …
Run Code Online (Sandbox Code Playgroud)

f# exception-handling async-workflow

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

PostAndReply 在已处理的 MailboxProcessor 上

当其 MailboxProcessor 被处理(或以其他方式停止)时,是否可以让 PostAndAsyncReply 立即返回?或者是否有一些关于如何安全地使用 PostAndReply 方法而不造成死锁的“模式”/最佳实践?

现在我遇到的问题是 PostAndAsyncReply 在 MailboxProcessor 被处理后永远不会返回。使用 timeout 参数不是一种选择,因为我迫不及待(此外,选择合理的超时非常困难或不可能,因为它取决于太多因素)。

  [<Test>]
  let ``waiting for a reply from a disposed agent``() =
    use server = MailboxProcessor.Start(fun inbox -> async {
      ()
    })

    (server :> System.IDisposable).Dispose()

    server.PostAndReply (fun reply -> reply) // <- deadlock
    |> ignore)
Run Code Online (Sandbox Code Playgroud)

编辑:我见过的大多数邮箱处理器示例(包括 MSDN 上的示例)甚至不介意处理邮箱处理器。并且 MSDN 没有解释 MailboxProcessors 在被处理时如何反应。没有必要处置它们吗?

f# mailboxprocessor

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

为什么Dapper使用/不使用mini-profiler连接生成不同的SQL

Dapper(1.13 Noobget Package)创建不同的SQL语句,具体取决于它是与普通的ADO.NET数据库连接一起使用还是与装饰的迷你探查器数据库连接一起使用.

示例代码(使用Postgresql测试)

Usings:

using System.Linq;
using Dapper;
using Npgsql;
using NUnit.Framework;
using StackExchange.Profiling;
using StackExchange.Profiling.Data;
Run Code Online (Sandbox Code Playgroud)

Test1使用普通的ADO.NET连接并失败:

[TestFixture]
public class DapperTests {
  private const string cnnstr = "HOST=...;DATABASE=...;USER ID=...;PASSWORD=...;";

  [Test]
  public void Test1() {
    using (var cnn = new NpgsqlConnection(cnnstr)) {
      cnn.Open();

      // The following line fails:
      cnn.Query<int>("SELECT 1 WHERE 42 IN @Items", new {Items = new[] {41, 42, 43}}).Single();

      // Npgsql.NpgsqlException : ERROR: 42883: operator does not exist: integer = integer[]
    }
  }
Run Code Online (Sandbox Code Playgroud)

Test2使用围绕ADO.NET连接的mini-profiler连接并成功: …

npgsql dapper mvc-mini-profiler mvcminiprofiler

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

取消不同类型的Asyncs时行为不一致

取消不同类型的Asyncs时,我遇到了看似不一致的行为问题.

为了重现这个问题,让我们说有一个函数可以获取一个"作业"列表(Async <_>列表),等待它们完成并打印出它们的结果.该函数还会获取取消令牌,因此可以取消它:

let processJobs jobs cancel =
  Async.Start(async {
    try
      let! results = jobs |> Async.Parallel
      printfn "%A" results
    finally
      printfn "stopped"
  }, cancel)
Run Code Online (Sandbox Code Playgroud)

该函数被调用如下:

let jobs = [job1(); job2(); job3(); job4(); job5()]
use cancel = new CancellationTokenSource()

processJobs jobs cancel.Token
Run Code Online (Sandbox Code Playgroud)

稍后它会被取消:

Thread.Sleep(1000)
printfn "cancelling..."
cancel.Cancel()
Run Code Online (Sandbox Code Playgroud)

取消令牌源被取消后,该函数应执行finally块并打印"已停止".

这适用于job1,2和3,但是当列表中有job4或job5时不起作用.

Job1只是Async.Sleeps:

let job1() = async {
  do! Async.Sleep 1000000
  return 10
}
Run Code Online (Sandbox Code Playgroud)

Job2启动一些异步子进程并等待它们:

let job2() = async {
  let! child1 = Async.StartChild(async {
    do! Async.Sleep 1000000
    return …
Run Code Online (Sandbox Code Playgroud)

f#

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

使用protobuf序列化F#区分联合

有没有办法让protobuf序列化/反序列化F#的歧视联盟?

我正在尝试使用protobuf序列化消息.消息是F#记录和受歧视的联合.

序列化似乎适用于记录,但我不能让它与歧视的联合工作.

在下面的代码中,测试testMessageA和testMessageB是绿色的.测试testMessageDU为红色.

module ProtoBufSerialization

open FsUnit
open NUnit.Framework

open ProtoBuf

type MessageA = {
  X: string;
  Y: int;
}

type MessageB = {
  A: string;
  B: string;
}

type Message =
| MessageA of MessageA
| MessageB of MessageB

let serialize msg =
  use ms = new System.IO.MemoryStream()
  Serializer.SerializeWithLengthPrefix(ms, msg, PrefixStyle.Fixed32)
  ms.ToArray()

let deserialize<'TMessage> bytes =
  use ms = new System.IO.MemoryStream(buffer=bytes)
  Serializer.DeserializeWithLengthPrefix<'TMessage>(ms, PrefixStyle.Fixed32)

[<Test>]
let testMessageA() =
  let msg = {X="foo"; Y=32}
  msg |> serialize |> deserialize<MessageA> |> …
Run Code Online (Sandbox Code Playgroud)

f# protobuf-net

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

带有分号分隔符和预定义模式的CsvProvider

我想使用FSharp.Data.CsvProvider(v1.1.10)创建一个类型来处理带有";"的CSV文件 分隔符和预定义的模式.

以下行报告错误:

type CsvType1 = CsvProvider<Sample="1;2;3", Separator=";", Schema="category (string), id (string), timestamp (string)">
Run Code Online (Sandbox Code Playgroud)

错误是:

指定的参数既不是文件,也不是格式良好的CSV:无法找到文件'...\1; 2; 3'.

将Sample设置为"",null或不设置它会产生其他错误.

使用","的分隔符和"1,2,3"的样本工作正常..但是无法读取我的csv文件.

我究竟做错了什么?

f# f#-data

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