小编Nat*_*ate的帖子

从python通过sendmail发送邮件

如果我不是通过SMTP发送邮件,而是通过sendmail发送邮件,是否有一个用于封装此进程的python库?

更好的是,是否有一个好的库可以抽象出整个'sendmail -versus-smtp'的选择?

我将在一堆unix主机上运行这个脚本,其中只有一些正在监听localhost:25; 其中一些是嵌入式系统的一部分,无法设置为接受SMTP.

作为良好实践的一部分,我真的很想让库自己处理标题注入漏洞 - 所以只需要将字符串倾斜popen('/usr/bin/sendmail', 'w')到比我想要的金属更接近金属.

如果答案是'去写一个库',那就这样吧;-)

python email sendmail

71
推荐指数
5
解决办法
8万
查看次数

将具有错误编码数据的MySQL表转换为UTF-8

我有一个很棒的'MySQL 5.1数据库,由于各种愚蠢的原因,我相信,我在UTF8表中存储了编码为LATIN1的UTF8字符.真奇怪.而且我想解决它.

MySQL的-在UTF8表到UTF8转换LATIN1字符的问题似乎工作-一次一列.但我有24个表和几十列要转换.我真的在寻找能够同时转换至少一张桌子的解决方案.

作为参考,适用于我的单列解决方案是:

UPDATE foo SET col1 = CONVERT(CAST(CONVERT(col1 USING latin1) AS binary) USING utf8);
Run Code Online (Sandbox Code Playgroud)

对于表格,我可以这样做:

ALTER TABLE foo CONVERT TO CHARACTER SET latin1;
ALTER TABLE foo CONVERT TO CHARACTER SET binary;
ALTER TABLE foo CHARACTER SET utf8  COLLATE utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

这让我非常接近 - 但是,该CONVERT TO CHARACTER SET binary步骤将我的所有VARCHAR列变为VARBINARY,并将我的TEXT列一次性变为BLOB.我可以通过改变它们看起来一切都很好......但是我回到了"让我们单独修改所有列"的世界 - 在这种情况下,我可能也一样

我已经在这些SQL语句上尝试了大约50种变体,但是我找不到一种在字符数据类型中保留我的列并正确编码数据的变体.

有什么建议?

更新:决定只修复列而不是等待数据库或表格式解决方案,我提出:

#!/usr/bin/env ruby
require 'rubygems'
require 'mysql2'

CONNECT_OPTS = {} # whatever you want
Mysql2::Client.default_query_options.merge!(:as => :array)
conn = Mysql2::Client.new(CONNECT_OPTS)

tables = conn.query("SHOW …
Run Code Online (Sandbox Code Playgroud)

mysql character-encoding

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

快速读取交错数据的方法?

我有一个包含多个数据通道的文件.文件以基本速率进行采样,每个通道以基本​​速率除以某个数字进行采样 - 它似乎总是2的幂,但我认为这不重要.

所以,如果我有通道a,bc,在1,2和4的分隔处采样,我的流将如下所示:

a0 b0 c0 a1 a2 b1 a3 a4 b2 c1 a5 ...
Run Code Online (Sandbox Code Playgroud)

为了增加乐趣,通道可以独立地浮动或整数(虽然我知道每个通道),并且数据流不一定以2的幂结束:示例流在没有进一步扩展的情况下是有效的.虽然我知道我正在处理的是什么,但这些价值有时很大,有时甚至是小端.

我有一些代码可以正确地解包这些并用正确的值填充numpy数组,但它很慢:它看起来像(希望我不会过多地掩盖;只是给出算法的概念):

for sample_num in range(total_samples):
    channels_to_sample = [ch for ch in all_channels if ch.samples_for(sample_num)]
    format_str = ... # build format string from channels_to_sample
    data = struct.unpack( my_file.read( ... ) ) # read and unpack the data
    # iterate over data tuple and put values in channels_to_sample
    for val, ch in zip(data, channels_to_sample):
        ch.data[sample_num / ch.divider] = val …
Run Code Online (Sandbox Code Playgroud)

python optimization numpy binary-data

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

使用python/numpy将一个数组"绘制"到另一个数组上

我正在编写一个库来处理Python中的凝视跟踪,而且我对整个numpy/scipy世界都很陌生.基本上,我希望及时获取一系列(x,y)值,并将某些形状"绘制"到这些坐标的画布上.例如,形状可能是模糊的圆圈.

我想到的操作与在Photoshop中使用画笔工具或多或少完全相同.

我有一个交互式算法,可以将我的"画笔"修剪到我的图像范围内,并将每个点添加到累加器图像中,但它很慢(!),看起来似乎有一种从根本上更简单的方法来做到这一点.

关于从哪里开始寻找的任何指针?

python numpy image-processing scipy

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

在javascript/d3中使用强制定向布局的怪异情节

这是一篇关于在R中创建beeswarm情节文章.

还有R包为beeswarm情节.接下来的两张图片说明了该软件包提供的一些可能性:

在此输入图像描述

在此输入图像描述

但是,我现在正试图使用d3.js的强制定向布局.

我的计划是让自定义重力将点拉向垂直线及其正确的y值,并且碰撞检测使点彼此保持不变.

我有一个半工作原型:

在此输入图像描述

不幸的是,我无法找到解决两个问题的方法 - 我怀疑它们确实是同一个问题:

  1. 我的观点不断重叠,至少有点重叠.

  2. 在布局中心堆积积分之后,正在进行"洗牌",因为防撞力量和"来到中心"部队的战斗.

我希望这些要点可以很快就他们应该居住的地方达成协议,最终不会重叠.

我正在使用的强制代码(如果你想在这里看到它而不是bl.ocks.org):

force.on("tick", function(e) {
  var q,
    node,
    i = 0,
    n = nodes.length;

  var q = d3.geom.quadtree(nodes);

  while (++i < n) {
    node = nodes[i];
    q.visit(collide(node));
    xerr = node.x - node.true_x;
    yerr = node.y - node.true_y;
    node.x -= xerr*0.005;
    node.y -= yerr*0.9;
  }

  svg.selectAll("circle")
      .attr("cx", function(d) { return d.x; })
      .attr("cy", function(d) { return d.y; });
});

function collide(node) …
Run Code Online (Sandbox Code Playgroud)

javascript layout plot d3.js force-layout

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

Python,从input()中删除所需的引号

好吧,我一直在编写一个脚本,但是输入部分会发生令人讨厌的事情.根据我的python版本,我需要为我的输入包含引号,否则我不需要.使用python 2.7,我需要引号; 用python 3.3,我没有.例如:

filename = input('Enter Update File: ')
print(filename)
Run Code Online (Sandbox Code Playgroud)

使用python 2.7,我需要用引号括住我的输入,否则会引发NameError; 在python 3.3中,我没有.

有办法避免这种情况吗?

python

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

Rails + Nginx:HTTP 499错误和客户端重复POST

所以,我正在调查我们的Rails/Unicorn/Nginx应用程序上的MySQL死锁异常.我发现有时,我们会看到一个请求风暴,从一个客户端获取499状态代码.从这篇文章看,当客户端意外关闭连接时,或者嗯,某些东西,nginx看起来像是返回499.我不清楚客户端是否真正看到状态代码; 我不能在本地复制这个.

从nginx日志看起来,在这些请求中,我们最终将0字节写入客户端.在我的Rails日志中,请求没什么了不起的; 他们在正常的时间(40-120毫秒)内完成并返回302重定向.

所以,无论如何,对吧?但!造成这种情况的原因在于,客户似乎正在将其看到(或未看到)的内容解释为再次尝试其请求的邀请.即使它是一个POST.我的Rails应用程序很乐意处理这些请求并在数据库中创建重复的条目.有时它会创建相当多的记录 - 在一种情况下,我们让客户在大约十分钟内重复请求约6500次.这是......次优.

我正在试图弄清楚要做什么.我真正喜欢的是修复我用nginx看到的任何交互,但我不确定如何 - 如果客户端在获取数据之前关闭连接,我无法控制它将要做什么.

另一种选择(感觉就像一个可怕的黑客攻击)是做一些事情,比如在隐藏的表单中包含一个唯一的键(例如,来自序列),并在相应的数据库列上有一个唯一的索引.但是这个桌子上有数百万行,所以用它的模式搞砸不是我想做的事情.

如果重要,请求通过HTTPS完成.看起来它最常见于我们客户的一小部分.

还有其他人看过这个(除了这篇文章)吗?我完全疯了吗?谁能想到一个优雅的解决方案?

mysql ruby-on-rails nginx

6
推荐指数
0
解决办法
1717
查看次数

为numpy.array的每个元素添加一个维度

我正在尝试将numpy数组的每个元素转换为数组本身(例如,将灰度图像解释为彩色图像).换一种说法:

>>> my_ar = numpy.array((0,5,10))
[0, 5, 10]
>>> transformed = my_fun(my_ar)  # In reality, my_fun() would do something more useful
array([
      [ 0,  0, 0], 
      [ 5, 10, 15], 
      [10, 20, 30]])
>>> transformed.shape
(3, 3)
Run Code Online (Sandbox Code Playgroud)

我试过了:

def my_fun_e(val):
    return numpy.array((val, val*2, val*3))

my_fun = numpy.frompyfunc(my_fun_e, 1, 3)
Run Code Online (Sandbox Code Playgroud)

但得到:

my_fun(my_ar)
(array([[0 0 0], [ 5 10 15], [10 20 30]], dtype=object), array([None, None, None], dtype=object), array([None, None, None], dtype=object))
Run Code Online (Sandbox Code Playgroud)

我试过了:

my_fun = numpy.frompyfunc(my_fun_e, 1, 1)
Run Code Online (Sandbox Code Playgroud)

但得到:

>>> my_fun(my_ar)
array([[0 …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

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

如何停止登录Django unittests从打印到stderr?

我正在使用bog-standerd django.test.Testcase测试一些Django模型.我的models.py使用以下init代码写入调试日志:

import logging
logger = logging.getLogger(__name__) # name is myapp.models
Run Code Online (Sandbox Code Playgroud)

然后我写入日志:

logger.debug("Here is my message")
Run Code Online (Sandbox Code Playgroud)

在我的settings.py中,我设置了一个FileHandler,以及一个myapp的记录器,使用该处理程序,只使用该处理程序.这很棒.我看到该日志的消息.当我在Django shell中时,我看到该日志的消息.

但是,当我运行我的测试套件时,我的测试套件控制台也会看到所有这些消息.它使用的是我没有明确定义的不同格式化程序,它正在写入stderr.我没有定义写入stderr的日志处理程序.

我真的不希望这些邮件在我的控制台上发送垃圾邮件.如果我想查看这些消息,我会尾随我的日志文件.有办法让它停止吗?(是的,我可以重定向stderr,但有用的输出也会转到stderr.)

编辑:我在settings.py中设置了两个处理程序:

'handlers': {
    'null': {
        'level': 'DEBUG',
        'class': 'django.utils.log.NullHandler',
    },
    'logfile' : {
        'level':'DEBUG',
        'class':'logging.FileHandler',
        'filename':'%s/log/development.log' % PROJECT_DIR,
        'formatter': 'simple'
    },
},
Run Code Online (Sandbox Code Playgroud)

并试过这个:

'loggers': {
    'django': {
        'level': 'DEBUG',
        'handlers': ['null']
    },
    'myapp': {
        'handlers': ['logfile'],
        'level':'DEBUG',
    },
Run Code Online (Sandbox Code Playgroud)

...但是logging/stderr转储行为保持不变.这就像我在运行测试时得到另一个日志处理程序.

python testing django logging

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

使用ast和白名单使python的eval()安全吗?

好.我知道 专家 ,你不应该永远使用Python的eval()不受信任的数据,直到永远.我并不比世界其他地方更聪明,甚至不应该尝试这个.但!无论如何,我要去.

我的基本问题是我正在编写一个小计算器评估程序,它将使用python语法的一个子集进行不可信的输入.我知道:使用plypyparsing并编写解析器然后我们去.通过传递全局和本地人来解决这个问题是eval()不行的.

我所看到的所有方法(并且一直保持冷漠)试图列举邪恶.在这里,我试图枚举 - 得到一个AST,只允许几个节点类型,然后验证任何调用是否属于一组白名单函数之一.这是一个迷你实现(和要点):

import ast
import math

SAFE_FX = {
    'exp': math.exp,
}

SAFE_NODES = set(
    (ast.Expression,
    ast.Num,
    ast.Call,
    ast.Name,
    ast.Load,
    ast.BinOp,
    ast.Add,
    ast.Sub,
    ast.Mult,
    ast.Div,)
)

class CleansingNodeVisitor(ast.NodeVisitor):
    def generic_visit(self, node):
        if type(node) not in SAFE_NODES:
            raise Exception("%s not in SAFE_NODES" % type(node))
        super(CleansingNodeVisitor, self).generic_visit(node)

    def visit_Call(self, call):
        if call.func.id not in SAFE_FX:
            raise Exception("Unknown function: %s" % …
Run Code Online (Sandbox Code Playgroud)

python security parsing eval

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

Rails 4.2:Eager-loading has_many 与 STI 的关系

假设我在 Rails 中与使用 STI 的表有关系,例如:

class Vehicle < ActiveRecord::Base; end

class Car < Vehicle; end

class Truck < Vehicle; end

class Person < ActiveRecord::Base
  has_many :cars
  has_many :trucks
  has_many :vehicles
end
Run Code Online (Sandbox Code Playgroud)

...我想在一个查询中加载一个人及其所有的汽车和卡车。这不起作用:

# Generates three queries
p = Person.includes([:cars, trucks]).first
Run Code Online (Sandbox Code Playgroud)

...这很接近,但这里没有运气:

# Preloads vehicles in one query
p = Person.includes(:vehicles).first
# and this has the correct class (Car or Truck)
p.vehicles.first
# but this still runs another query
p.cars
Run Code Online (Sandbox Code Playgroud)

我可以在person.rb中做这样的事情:

def cars
  vehicles.find_all { |v| v.is_a? Car }
end
Run Code Online (Sandbox Code Playgroud)

但那时 …

ruby activerecord ruby-on-rails ruby-on-rails-4

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

从 javascript 类型数组创建一个(好的)结构?

我正在考虑 javascript 中的类型化数组;特别是读取二进制文件头。阅读MDN 类型数组文档,他们愉快地说我们可以表示 C 结构:

struct someStruct {
  unsigned long id;
  char username[16];
  float amountDue;
};
Run Code Online (Sandbox Code Playgroud)

使用 JavaScript:

var buffer = new ArrayBuffer(24);

// ... read the data into the buffer ...

var idView = new Uint32Array(buffer, 0, 1);
var usernameView = new Uint8Array(buffer, 4, 16);
var amountDueView = new Float32Array(buffer, 20, 1);
Run Code Online (Sandbox Code Playgroud)

然后你可以说,amountDueView[0]但似乎忘记了这样一个事实:将标量视为单元素数组是很糟糕的,并且能够说类似的话sizeof(someStruct)也很有用。

那么……还有更好的吗?MDN 引用了js-ctypes,但它不是标准的 javascript。

编辑:是的,我了解 javascript 对象。数据建模不是问题;问题在于。优雅地读取和写入二进制数据。

javascript typed-arrays

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

ElasticSearch,Logstash,MySQL:如何加速大量导入?

我正在尝试将大型(~30M行)MySQL数据库导入ElasticSearch.酷酷的,有一个logstash看起来像是为这类东西而建的工具; 它的JDBC插件可以让我连接到数据库,并快速实现行.

然而!当我尝试它时,它会爆炸java.lang.OutOfMemoryError.好的.它可能试图批量过多行或其他东西.所以我添加jdbc_fetch_size => 1000到我的配置.没有骰子,仍然没有记忆.好吧,也许这个选项不起作用,或者没有按照我的想法行事?

所以我尝试添加jdbc_paging_enabled => truejdbc_page_size => 10000我的配置.成功!它开始以10k的批量向我的索引添加行.

但它放慢了速度.起初我跑100k行/分钟; 然而,当我在2M行时,我可能只有十分之一.并不奇怪; 我很确定这是使用LIMIT和OFFSET,并且在查询中使用大量OFFSET非常慢,所以我在这里处理O(n ^ 2)类的事情.

我真的很想只运行整个大查询并让游标迭代结果集,但看起来它因某些原因无效.如果我对查询有更多的控制权,我可以将LIMIT/OFFSET的东西更改为WHERE id BETWEEN val1 AND val2某种东西,但我无法看到我可以在哪里做到这一点.

关于我怎么不能崩溃,但仍以合理的速度运行的任何建议?

mysql full-text-indexing elasticsearch logstash

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