小编Jas*_*siu的帖子

跟踪多个远程分支

所以我们假设有三个开发人员:Alice,Bob和Cecil.他们决定在没有中央回购的情况下使用Git.他们都为彼此设置遥控器,以便:

  • 爱丽丝 remotes/bob/master
  • 爱丽丝 remotes/cecil/master
  • 鲍勃有 remotes/alice/master
  • 鲍勃有 remotes/cecil/master
  • 塞西尔有 remotes/alice/master
  • 塞西尔有 remotes/bob/master

而现在,Alice希望她的本地主分支能够跟踪两个远程主分支.这在Git中甚至可能吗?如果没有,你们用什么工作流程解决这个问题?

git git-remote

28
推荐指数
1
解决办法
9136
查看次数

锚点href中的唯一哈希?

在我工作的项目中,我最近从开发后端(即非Web)服务器转向与Web相关的事物.在HTML代码中,我发现了以下所有内容:

<a href='#'>some link</a>
Run Code Online (Sandbox Code Playgroud)

然后一些JS附加到元素的click事件<a>.

这个唯一的哈希是否有任何特殊含义?我理解如何href='#some_id'告诉浏览器滚动到ID =的元素some_id.但是href='#'不行,那对吧?如果只是创建一个可点击的文本,为什么不简单地使用<span>

html javascript

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

如何生成随机凸多边形?

我正在尝试设计一种生成随机2D凸多边形的方法.它必须具有以下属性:

  • 坐标应该是整数;
  • 多边形应位于带角(0,0)和(C,C)的正方形内,其中给出C;
  • 多边形应具有接近给定数量N的顶点数.

例如,生成具有10个顶点并位于square [0..100] x [0..100]内的随机多边形.

使这项任务变得困难的原因是坐标应该是整数.

我尝试的方法是在给定的方格中生成随机的点集并计算这些点的凸包.但是与N相比,合成的凸包是非常小的顶点.

有任何想法吗?

random geometry

12
推荐指数
2
解决办法
4261
查看次数

这个Python生产者 - 消费者无锁方法是否是线程安全的?

我最近编写了一个使用简单生产者/消费者模式的程序.它最初有一个与不正确使用线程有关的错误.我最终解决了这个问题.但它让我想到是否有可能以无锁的方式实现生产者/消费者模式.

我的要求很简单:

  • 一个生产者线程.
  • 一个消费者线程.
  • 队列只有一个项目.
  • 生产者可以在消耗当前物品之前生成下一个物品.因此当前项目丢失了,但这对我来说没问题.
  • 消费者可以在生成下一个项目之前使用当前项目.因此,当前项目被消耗两次(或更多),但这对我来说没问题.

所以我写了这个:

QUEUE_ITEM = None

# this is executed in one threading.Thread object
def producer():
    global QUEUE_ITEM
    while True:
        i = produce_item()
        QUEUE_ITEM = i

# this is executed in another threading.Thread object
def consumer():
    global QUEUE_ITEM
    while True:
        i = QUEUE_ITEM
        consume_item(i)
Run Code Online (Sandbox Code Playgroud)

我的问题是:这段代码是否是线程安全的?

直接评论:这段代码不是真的无锁 - 我使用CPython并且它有GIL.

我测试了一点代码,它似乎工作.它转换为一些由于GIL而成为原子的LOAD和STORE操作.但是我也知道del x当x实现__del__方法时,操作不是原子的.因此,如果我的项目有__del__方法并且发生了一些讨厌的调度,那么事情可能会破裂.或不?

另一个问题是:为了使上述代码正常工作,我必须施加什么样的限制(例如生成的项目类型)?

我的问题只是关于利用CPython和GIL的怪癖的理论可能性,以便提出无锁(即没有像代码中的threadading.Lock那样的锁)解决方案.

python locking producer-consumer thread-safety

6
推荐指数
2
解决办法
3457
查看次数

如何检测多边形是否具有自交叉?

想象一下,您有一个2D多边形(2D 闭合多边形链更精确).你如何检查它是否包含自交叉?它可以是凸形或凹形,顺时针或逆时针方向.

现在,我可以运行一个标准O(N log N)算法来检查是否有任何两个段交叉.但我相信,因为我们有一些额外的结构 - 分段的顺序以及每两个连续分段在端点处相遇的事实 - O(N)可以设计出更简单,更快(可能是?)的算法.

有任何想法吗?

geometry computational-geometry

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

如何无缝连接MP3流?

我正在开发能够播放目标广告的流媒体服务器.基本上听众会听到相同的音乐,但每一个,比方说,30分钟就会出现一块广告,每个听众都有自己的音乐.实现这样的流服务器带来了各种问题,这个问题就是其中之一.

服务器将以类似于Icecast的方式工作,即它将从某个流生成器通过网络读取流并将其转发给每个侦听器.当广播广告时,服务器停止从生成器获取流,从文件中读取广告并将它们插入到每个侦听器的缓冲区中,传输它们并从发生器的中继流中恢复.

当服务器从中继流切换到广播广告时,它必须连接两个MP3流(我们用MP3播放).我担心的是,简单地追加一个接一个的数据可能会产生一些可听到的伪像.可以无缝完成吗?

我已经想到了这个: - 我可以让服务器知道MP3帧,以避免同步错误. - 我正在考虑在流中的MP3帧之后从广告文件中添加MP3帧. - 由于广告是从正确编码的MP3文件中加载的,因此我避免了字节存储的问题,因为文件中的第一帧无法使用它.

但我担心的是MDCT的工作方式.听众不知道我的服务器会做什么,因此他们的MP3解码器可能会产生一些工件,因为不正确的MDCT数据会在他们下载的流中一个接一个地放置.广告文件开头的零填充是否会对此进行补偿?

你知道任何可以无缝地连接两个MP3文件而不解压缩它们的库/工具(如果可能的话,开源)吗?

你能指出任何描述MP3格式的好资源吗?我搜索了很多网,发现了很多信息,但我仍然想念整体情况.

也许你知道如果我使用像OGG/Vorbis,AAC这样的其他编解码器会更容易吗?

PS.这个问题并不重复合并mp3文件的最佳方法什么?.mp3wrap和工具都不适合我.

streaming mp3 lossless

5
推荐指数
1
解决办法
4812
查看次数

我多久运行一次autoconf?

在我的公司,我正在努力deb从第三方库创建Debian 软件包.该库是使用Autotools构建的.我之前从未使用过Autotools,而且我遇到了一些困难.库源包含configure.inMakefile.am文件和m4/目录.我能够使用以下序列构建库:

aclocal -I m4 -I /usr/share/aclocal
autoheader
libtoolize --automake
automake -a
autoconf
./configure
make
Run Code Online (Sandbox Code Playgroud)

debian/rules文件中我想使用CDBS.我写了这个:

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk
Run Code Online (Sandbox Code Playgroud)

但它不起作用.它抱怨该configure文件丢失.这是对的,因为Autotools类希望这个文件存在.但它不存在,有人必须先autoconf和朋友打电话!

为什么Autotools CDBS课程不让我autoconf和朋友打电话?我该如何规避呢?

题外话:

当我使用程序时,我不会每次都编译它,我编译一次并重用二进制文件.

当人们安装软件时,他们不会自己编译,维护者编译一次,人们重用二进制包.

当维护者编译包时,他/她configure每次编译时都不创建脚本,上游作者创建它一次,维护者可以重用它.

这最后一句是真的吗?因为对我而言,似乎Autotools CDBS类的作者假设了这样的东西 - 他们假设configure存在,并在为不同的架构编译包时重用它.我对吗?

一方面,如果configure可以生成,它不应该出现在任何地方 - 如果你需要它,你从其他文件生成.另一方面,Autotools CDBS类的作者必须有一些理由以这种方式实现它而不是另一种.

摘要:

  • 如何处理上述Autotools CDBS类问题?
  • 我多久重生一次configure?(一般情况下和构建Debian软件包时.)

debian autoconf autotools cdbs

3
推荐指数
1
解决办法
3240
查看次数

NaN在不同的g ++版本中处理不同

考虑以下程序,这显然是错误的:

#include <cstdio>

double test(int n) {
    if (n % 2 == 0)
        return 0.0;
    // warning: control reaches end of non-void function
}

int main() {
    printf("%.9lf\n", test(0));
    printf("%.9lf\n", test(1));
    printf("%.9lf\n", test(2));
    printf("%.9lf\n", test(3));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在32位Ubuntu 8.04上使用g ++ 4.2.4版(Ubuntu 4.2.4-1ubuntu4)编译时,它会产生以下输出:

0.000000000
nan
0.000000000
nan
Run Code Online (Sandbox Code Playgroud)

当在64位Ubuntu 10.04上使用g ++ 4.4.3版(Ubuntu 4.4.3-4ubuntu5)编译时,它会产生以下输出:

0.000000000
0.000000000
0.000000000
0.000000000
Run Code Online (Sandbox Code Playgroud)

似乎较旧的编译器为了返回NaN而不是垃圾而做了一些额外的工作,而较新的编译器只返回内存中的任何内容.究竟是什么导致了这种行为差异以及如何控制它并使其在不同的编译器版本中可预测?

编辑:很抱歉没有提及之前的未定义行为.我知道差异来自于这个程序有未定义的行为.我想知道为什么前gcc版本似乎把一些精力和产生的代码,始终返回NaN,并这种行为变为后者的gcc版本所观察到的.另外,通过"可预测",我的意思不是如何用C++编写好的程序,而是如何控制这个gcc行为(可能有一些命令行选项?).

c++ floating-point gcc nan undefined-behavior

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

Scala中的C++嵌套类

我正在学习Scala,而且我来自C++(很少有Java经验).我工作的地方经常使用以下模式:

class SomeClass {
 public:
  class Options {
    ...
  };
  SomeClass(const Options& options);
  ...
};

int main() {
  SomeClass::Options options;
  options.a = ...;
  ...
  SomeClass* sc = new SomeClass(options);
}
Run Code Online (Sandbox Code Playgroud)

我如何在Scala中模拟它?

scala nested-class

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

如何从单行stdin中读取多个整数?

为了学习Rust,我正在研究HackerRank 30天挑战,Project Euler和其他编程竞赛.我的第一个障碍是从一行标准输入读取多个整数.

在C++中我可以方便地说:

cin >> n >> m;
Run Code Online (Sandbox Code Playgroud)

我如何在Rust中以惯用方式执行此操作?

rust

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