小编Jim*_*nis的帖子

旅行推销员和地图/减少:放弃频道

这是一个学术而非实际的问题.在旅行推销员问题中,或任何其他涉及寻找最小优化的问题......如果使用地图/减少方法,似乎有一些价值可以将当前最小结果广播给所有人计算节点以某种方式允许它们放弃超过该计算的计算.

换句话说,如果我们将问题映射出来,我们希望每个节点知道何时在完成之前放弃给定的部分结果,但是当它已经超过其他解决方案时.

如果减速器具有向映射器提供反馈的方法,那么立即想到的一种方法是.考虑一下我们是否有100个节点,映射器为它们提供了数百万条路径.如果reducer将最佳结果提供给mapper,那么该值可以作为参数与每个新路径(问题子集)一起包含.在这种方法中,粒度相当粗糙...... 100个节点将在问题的分区上逐渐磨损完成,并且只有来自映射器的下一个请求才能获得新的最小值.(对于少量节点和大量问题分区/子集来说,这种粒度是无关紧要的;也可能是人们可以将启发式方法应用于可能的路由或问题子集被馈送到节点的序列中获得朝向最优的快速收敛,从而最小化节点执行的"浪费"计算量.

想到的另一种方法是节点主动订阅某种频道,或多播甚至广播,从中可以从计算循环中收集新的最小值.在这种情况下,当被通知更好的解决方案时(他们的同行之一),他们可以立即放弃糟糕的计算.

所以,我的问题是:

  • 这个概念是否涵盖了与现有地图/减少讨论相关的任何艺术术语
  • 当前的map/reduce框架是否提供支持此类动态反馈的功能?
  • 这个想法有一些缺陷......为什么它是愚蠢的一些原因?

optimization mapreduce traveling-salesman

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

3.4.2中的asyncio问题 - 由于某种原因它终止了

一个python的新手,花了很多时间阅读文档和其他代码我似乎无法asyncio在Python 3中获得新模块.它一直没有堆栈跟踪终止给我一个线索,应该永远运行但不会.

我试图模仿的基本流程概念如下:

从端口读取: 打开端口 - >读取数据(可变长度) - >放在queue1上

然后处理数据: 从queue1获取数据 - >条件适用 - >结果放在queue2上

然后写入端口: 从queue2获取数据并写入端口

永远地从顶部循环

注意:输入端口上的数据是偶发的,可变长度,因此我可以使用几个块来"序列" asyncio.我理解asyncio将允许一个块到达的情况,然后在我的应用程序响应之前的另一个 - 即该调用get_io_from_port()有助于协同例程的多次执行.这就是我使用队列来确保不阻塞的原因process_queue()

到目前为止我的玩具示例代码:

import queue
import asyncio

@asyncio.coroutine
def process_queue(q1, q2):
    tmp = q1.Get()
    if tmp == 'ABCDEF':
        q2.put('12345')
    elif tmp == 'GHIJKL':
        q2.put =('67890')
    else:
        print('There is a data error')

@asyncio.coroutine
def put_io_to_port(writer, q2):

    if not q2.empty():
        try:
                writer.write(q2.get())

        except IOError as e:
            print('OUT Port issue: ', e)

@asyncio.coroutine
def get_io_from_port(reader, …
Run Code Online (Sandbox Code Playgroud)

python debugging python-3.x python-asyncio

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

Go [lang]二进制文件上的SetGID / SetUID是否安全?

我已经使用YAML和MySQL驱动程序编写了一个简单的程序,目的是提供一个简单的实用程序来更新数据库,而不会向执行该程序的用户暴露用户名和密码凭据。

(我很清楚,我也可以用Python或其他脚本语言编写此代码,并使用管理权限委托,但出于我自己的喜好,我想在这里尝试其他方法)。

构建程序后,我使用了chgrp sys dbcreds.yaml && chmod 0640 dbcreds.yamlchgrp sys ./myprog && chmod g+s ./myprog(作为root)...,一切似乎都正常了。(我还测试了在setGID步骤之前应拒绝的访问)。

我也进行了测试strace,结果导致权限被拒绝(应该如此)。(为了好玩,我还运行ltrace -S了它;这是在Linux下运行的。正如预期的那样,我没有看到很多普通的libc函数调用...通过我很惊讶地看到了一些pthread _....()和一个malloc()调用我猜想GO运行时确实链接到某些系统库函数)。

我的问题:这样安全吗?有什么已知的方法可以导致Go程序,例如(下面)这样的Go程序在读取了这些私有凭据之后进行核心转储或公开其内存?阅读凭据后,是否可以删除SGID特权?Go二进制文件上是否有SUID / SGID漏洞利用的示例?有一个更好的方法吗?有没有一种方法可以主动防止核心转储或确保敏感数据(凭证)不会出现在核心转储中?

另一个注意事项:我发现gopkg.in/yaml.v2语义有点令人不安。在我的YAML文件中,我有类似以下内容:

---
user me
pw mypassword
Run Code Online (Sandbox Code Playgroud)

但是在我的代码中,我必须使用UserPw(大写),而不是像我期望的那样使用小写字母。我认为这是Goyaml的作者的实施决定。是这样吗?

#!go
package main

import (
    "fmt"
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
    "gopkg.in/yaml.v2"
    "io/ioutil"
    "os"
    "strconv"
)

type Creds struct {
    User string
    Pw   string
}

func main() {

    filename := …
Run Code Online (Sandbox Code Playgroud)

sudo setuid go

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

亚马逊是否提供了保留AWS S3存储桶名称前缀的方法?

AWS S3"存储桶"名称必须全局唯一.我认为一个常见的约定是使用mydomain-tld-作为前缀.

公约很酷,但标准更强.

亚马逊是否为客户提供服务以保留S3存储桶名称的前缀?如果有人发现"蹲"在前缀上,例如my_domain-tld-(换句话说,前缀的出处是明显的),他们是否提供任何冲突解决方案或可接受的使用挑战机制?

amazon-s3 amazon-web-services

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

连续空间最短路径

我需要一个最短路径算法来控制现实生活中的机器人。

假设我有矩阵形式的环境地图,其中 1 是障碍物,0 是自由空间。如果我使用传统的最短路径算法,例如 A*,那么这将为我提供曼哈顿距离最短路径。所以离实际的最短路径还差得很远。出现这个问题是因为我想不出一种方法来惩罚运动,使对角线比两条直线更好。我可以做一个启发式,让 A* 首先尝试两点之间的欧几里德最短路径,但实际上并没有使欧几里德最短路径成为更好的路径。

有谁知道获得连续空间最短路径的方法吗?它不一定是实际的最佳路径,但比直线和 90 度角更好。

我有一个想法:从起点画一个圆。增加圆的半径,直到圆上的一个点靠近墙壁或球门。圆边缘上的所有点都被设置为子节点,并受到圆半径的惩罚。圆内所有不开放的点都将被关闭,因为没有理由测试它们。以欧几里德最短路径为启发式,以 A* 方式重复此过程,直到达到目标状态。使机器人从一个点直线移动到下一个点。

这应该会提供更接近我正在寻找的东西。一组具有不同角度的直线。当然,如果有连续的曲线就更好了……

algorithm continuous shortest-path euclidean-distance

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

使用string.translate()将不可打印的字符转换为点

所以我之前已经完成了这个,对于这样一个看似简单的任务来说,这是一个令人惊讶的丑陋代码.

目标是将任何不可打印的角色翻译成一个.(点).出于我的目的,"可打印"确实排除了最后几个字符string.printable(换行符,制表符等).这是用于打印旧的MS-DOS调试"十六进制转储"格式......或任何类似的东西(其中额外的空格将破坏预期的转储布局).

我知道我可以使用,string.translate()并且要使用它,我需要一个翻译表.所以我用string.maketrans()它.这是我能想到的最好的:

filter = string.maketrans(
   string.translate(string.maketrans('',''),
   string.maketrans('',''),string.printable[:-5]),
   '.'*len(string.translate(string.maketrans('',''),
   string.maketrans('',''),string.printable[:-5])))
Run Code Online (Sandbox Code Playgroud)

......这是一个难以理解的混乱(虽然它确实有效).

从那里你可以打电话使用像:

for each_line in sometext:
    print string.translate(each_line, filter)
Run Code Online (Sandbox Code Playgroud)

... 而且要快乐.(只要你不看引擎盖).

现在,如果我将这个可怕的表达式分解为单独的语句,它就更具可读性:

ascii = string.maketrans('','')   # The whole ASCII character set
nonprintable = string.translate(ascii, ascii, string.printable[:-5])  # Optional delchars argument
filter = string.maketrans(nonprintable, '.' * len(nonprintable))
Run Code Online (Sandbox Code Playgroud)

为了便于阅读,这样做很诱人.

但是,我一直认为必须有一种更优雅的方式来表达这一点!

python code-golf

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

根据索引数组求和值

我有两个相同维度的数组:

a = np.array([ 1,  1, 2,  0, 0, 1])
b = np.array([50, 51, 6, 10, 3, 2])
Run Code Online (Sandbox Code Playgroud)

我想b根据指数总结元素a.

i我想要的矩阵个元素将是所有值的总和b[j],使得a[j]==i.

所以结果应该是一个三维数组 [10 + 3, 50 + 51 + 2, 6]

有一个numpy方式来做到这一点?我有一些非常大的数组,我需要在多个维度上这样求和,所以不得不执行显式循环.

python arrays numpy

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

AngularJS:为什么即使它们正确显示我也能得到NaN?

编辑://修复...和//下面代码中的错误评论显示答案

对于JavaScript专家来说,这可能是一件愚蠢而且显而易见的事情......但如果我能看到这一点,我将会受到威胁.

这是我的t.js:

var angularApp = angular.module('myApp', []);

angularApp.controller('mainController', ['$scope', '$http', '$log',
                                function ($scope,   $http,   $log) {
    $scope.version = angular.version;
    var ctime = new Date();
    $scope.ctime = ctime.getTime() / 1000;
    $http.get('http://127.0.0.1:8765/').then(
      function(res){
        $scope.stime = res['data']['server-time'] / 1000;
        // Fix goes here: $scope.skew = $scope.stime - $scope.ctime;
        },
      function(error){
        $log.warn('Unable to get time');});
    // Error here: this happens asynchronously to the $http.get!
    $scope.skew = parseFloat($scope.stime) - parseFloat($scope.ctime);
}]);
Run Code Online (Sandbox Code Playgroud)

...和我的HTML:

<!DOCTYPE html>
<html lang="en-us" data-ng-app="myApp"><head><title>Time Skew</title>
    <meta charset="UTF-8">
    <link rel="stylesheet" …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs

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

是否有像Python.Counter()这样的Python标准库类,但是列表作为值?

collections.Counter()堂课非常方便.只需几行代码就可以实现类似的东西; 但是当你记得使用它时,很高兴它出现在标准库中.

事实上,我很尴尬的是,我经常重写那些三到四行代码而不是使用它.

但我经常需要做一些非常相似的事情......将值累积到字典中的键中.但是,区别在于我想将值累积为列表而不是仅仅计算它们.例如,最近我想处理一大堆LDAP DN,我想写这样的东西:

#!python
f = 'o=Foo,ou=bar,cn=this,dc=sub,dc=org,dc=somewhere,dc=not'
d = dict()
for i in f.split(','):
    k, v = i.split('=')
    if k not in d:
        d[k] = list()
    d[k].append(v)
Run Code Online (Sandbox Code Playgroud)

(这是为了让我能够轻松生成从搜索中返回的所有项目的列表,这些项目远比DN规范冗长:Foo:bar:this@sub.org.somewhwere.not,但这或多或少与这个问题).

标准库中是否已存在某种"累加器"类?某种类似于"更新"或计数器的东西,但附加值

python

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

如何在我的shell脚本中嵌入CRLF或其他不可打印的字符?

我的老板向我提出了一个问题,即如何将CRLF序列嵌入到他的shell脚本中(用于管理他正在做的某些netcat或某些telnet事情),这是一种合理的便携和强大的方式.

shell whitespace sh non-printing-characters

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

Python:如何从 OptionParser type='count' 记录.setLevel 详细程度?

所以我想将日志记录添加到我一直在维护的一个小的内部命令行实用程序中。(实际上,我正在将其转换为使用 Pythonlogging模块的相当丑陋的手动编码日志记录;并在此过程中清理了一些问题)。

首先,我想保留现有的行为,疣等等,以供遗留使用。任何可能依赖于它已经发出的无关警告的脚本都不应该因为我正在做的事情而中断。新功能应该通过-v开关实现,在 OptionParser 中实现为 a type=count(按照古老的 Unix/Linux 约定)。这里的问题是,单个-v将详细程度从 -1 设置为 0(零)......具有讽刺意味的是,它至少抑制了来自 Paramiko 库的一条警告消息(找不到记录器“paramiko.transport”的处理程序)。从那里我想支持最多四个附加-v选项,并使用那些logging.setLevel()逐渐变得更加冗长的选项,从logging.CRITICAL仅到logging.DEBUG.

有摩擦!

我可以轻松地使用类似的东西:

if opts.verbosity == 0: # default is -1 do NOTHING
    # 0 ironically makes it slightly quieter
    logging.getLogger().addHandler(logging.NullHandler())
elif opts.verbosity > 0:
    logging.basicConfig()
    logging.getLogger().setLevel(50 - min(40, 10*opts.verbosity))
    # UGLY BUT IT WORKS.
    # logging.CRITICAL is 50, 
    # each -v reduces log filter by 10 down to 10
Run Code Online (Sandbox Code Playgroud)

换句话说,我将我的-v …

python logging verbosity optionparser

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