我刚刚发现http://code.google.com/p/re2,使用一个长期被忽视的方式(一个有前途的库汤普森NFA)来实现正则表达式引擎,可以是数量级比AWK的可用引擎更快,Perl或Python.
所以我下载了代码并做了平常的sudo make install
事情.然而,这个动作似乎只是添加/usr/local/include/re2/re2.h
到我的系统.似乎有一些``` .afile in addition, but then what is it with this
.a``扩展名?
我想使用Python中的re2(最好是Python 3.1)并很高兴看到像make_unicode_groups.py
发行版中的文件(可能只是在构建过程中使用?).然而,那些没有部署在我的机器上.
我如何使用Python的re2?
更新两个友好的人已经指出,我可以尝试从源代码构建DLLs/*.so文件,然后使用Python的ctypes
库来访问它们.任何人都可以提供有用的指示如何做到这一点?我在这里几乎一无所知,尤其是第一部分(构建*.so文件).
更新我也张贴了这个问题(前面)的RE2开发者群体,没有回答到现在(这是一小群),今天的(有些人口较多)comp.lang.py组[-thread这里- ].希望来自不同角落的人们可以相互联系.我的猜测是技术娴熟的人可以在他们的20%你的免费时间属于谷歌太时间片的几个小时内做到这一点; 这会让我筋疲力尽.是否有一个工具可以自动将C++愚蠢地转换为Python需要能够连接的任何C语言?然后可能会得到一个可行的结果可以简化为聪明的工具链.
(咆哮)为什么这么难?认为在2010年我们仍然不能拥有我们丰富的软件,只是互相交谈.这是一个障碍,每当你想要从Python处理一些C代码时,你必须总是抓住这些链接位.这需要大量工作,但只提供特定于C代码版本和Python版本的扩展模块,因此它可以快速老化.(/ rant) 是否可以在不同的进程中运行这些东西(如果我有一个re2可执行文件,可以产生数据的结果,比如说,subprocess/Popen/communicate()
)?(这不应该是一个纯粹的命令行工具,就必须在每次需要时的处理的开口,但连续运行的单个PROCESSS;也许存在包装之类的"丑化"这样的C代码).
我正在涉及过程到过程的沟通; 目标是让工作进程执行一些计算并将结果传回控制进程.我安装了zeromq.node并在coffeescript中设置了一个简单的请求者和响应者.
请求者:
# requester.coffee
zmq = require 'zmq'
context = new zmq.Context()
socket = zmq.socket 'req'
socket.bind 'tcp://127.0.0.1:5555', ( error ) =>
throw error if error?
console.log 'Requesting writer bound to port 5555'
setInterval ( -> socket.send 'helo world' ), 1
response_count = 0
t0 = new Date() / 1000
socket.on 'message', ( message ) ->
response_count += 1
# x = message.toString 'utf-8'
if response_count % 1000 is 0
t1 = new Date() / 1000
console.log …
Run Code Online (Sandbox Code Playgroud) 在我的HTML中,我有一个<div>
(称之为面板)固定宽度,包含一些文本; 该文本font-size: 25px; line-height: 25px;
在随附的CSS中设置.事实上,文本最终为36行.
鉴于所有边距,填充和边框都是零,你可以期望面板的高度,这36 * 25px = 900px
实际上是我在Firefox中使用DOM的getBoundingClientRect()
方法找到的.
但是,在谷歌浏览器中,我会得到不同的数据 看来该面板仅为892.7999877929688px高,而线路为24.799999660915798px高.除了这两个数字仍然给出36.看起来像CSS中设置的标称像素和实际像素之间存在缩放比率getBoundingClientRect()
; 在我的情况下,这是每实际像素标称1.0080645299120465.
另外一个证据来自于在nwjs app中运行的Chromium,我最初观察到这种差异.在我的测试中,它显示出与 Chrome中不同的比例.现在,在我测试的某个时刻,Chromium报告的像素突然跳到Firefox中报告的整数值; 我不知道我做了什么来实现这一目标.
可以预期分数比率在某种程度上与页面缩放有关; 毕竟,在非常小的尺寸下,Chrome和Chromium会对文本进行重排(有时会出错).事实上,改变Chrome的变焦会导致不同的比例,并且Chrome放大到最大值会使比率变为1.仍然,我的Chromium应用程序没有放大到最大值并且仍然具有小数比率.测试中的整数像素比率,但实际app中的小数值.
对于我目前所知的所有,我可以做的就是获得比率,这样我就能用JavaScript进行声音,一致的盒子大小测量就是设置一个已知大小的盒子并测量它.
我仍然想知道观察到的行为的来源是什么.有没有报道呢?它是渲染器的故意还是紧急行为?这是开发人员曾经讨论过的吗?是否有API来获得比率?
我在https://gist.github.com/loveencounterflow/d8c20b9021d2ab3f573a上写了一些代码,以简化测试.
这可能不是一个惊天动地的python缺陷,但我仍然怀疑以下行为背后的基本原理:当我跑
source = """
print( 'helo' )
if __name__ == '__main__':
print( 'yeah!' )
#"""
print( compile( source, '<whatever>', 'exec' ) )
Run Code Online (Sandbox Code Playgroud)
我得到::
File "<whatever>", line 6
#
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
我可以通过(1)删除尾随来避免这种例外#
; (2)删除或删除这些if __name__ == '__main__':\n
print( 'yeah!' )
行; (3)在源的最后添加换行符.
而且,如果我的源端没有后面的尾随换行符print( 'yeah!' )
,那么源代码也会编译而不会出错.
我也可以用python 2.6重现这种行为,所以它对3k系列来说并不陌生.
我发现这个错误非常令人恼火,因为当我将上面的源放在文件中并直接执行它或导入它时,不会发生错误 - 这是预期的行为.
#
字符串文字外的a (哈希)应始终表示python源中(可能为空)注释的开头; 而且,if __name__ == '__main__'
条款的存在与否不 应该在句法层面上改变对一个灵魂的解释.
任何人都可以重现上述问题,和/或评论这种现象吗?
干杯
有没有人知道如何在谷歌v8中渲染unicode'星界'字符(其CID超出0xffff),javascript vm驱动谷歌chrome和nodejs?
有趣的是,当我给谷歌chrome(它标识为11.0.696.71,在ubuntu 10.4上运行)这样的html页面时:
<script>document.write( "helo" )
document.write( " ??" );
</script>
Run Code Online (Sandbox Code Playgroud)
它将正确地呈现'宽'字符和'窄'字符,但是当我在nodejs(使用console.log()
)中尝试等效时,我得到一个'宽'字符的单个 (0xfffd,REPLACEMENT CHARACTER).
我也被告知,无论出于何种不可理解的原因,谷歌都决定使用16位宽的数据类型来实现字符.虽然我觉得这很愚蠢,但代理码点的设计恰恰是为了通过16位挑战的路径实现"星际代码点"的"引导".并且不知何故,运行在chrome 11.0.696.71内部的v8似乎使用了这一点unicode-foo或其他魔法来完成它的工作(我好像记得几年前我总是有盒子而不是静态页面).
啊,是的,node --version
报道v0.4.10
,要弄清楚如何从中获取v8版本号.
更新我在咖啡脚本中做了以下事情:
a = String.fromCharCode( 0xd801 )
b = String.fromCharCode( 0xdc00 )
c = a + b
console.log a
console.log b
console.log c
console.log String.fromCharCode( 0xd835, 0xdc9c )
Run Code Online (Sandbox Code Playgroud)
但这只会给我
???
???
??????
??????
Run Code Online (Sandbox Code Playgroud)
这背后的想法是,因为处理unicode的javascript规范的脑谜部分似乎是强制性的吗?/不是彻头彻尾的禁止?/允许?使用代理对,那么也许我的源文件编码(utf-8)可能是问题的一部分.毕竟,在utf-8中有两种编码32位码点的方法:一种是写出第一个代理所需的utf-8个八位字节,然后是第二个代码点.另一种方式(根据utf-8规范,这是首选方式)是计算得到的代码点并写出该代码点所需的八位字节.所以在这里我完全排除源文件编码的问题,只处理数字.上面的代码确实可以document.write()
在chrome中使用, so i know i got the numbers right.
sigh.
EDIT i did some experiments and found …
我正在尝试在Node.js下异步和逐行读取文本文件.我有以下CoffeeScript代码:
readline = require 'readline'
fs = require 'fs'
#--------------------------------------------------------------------
lines_of = ( route, handler ) ->
#..................................................................
stream = readline.createInterface
input: fs.createReadStream route
output: process.stdout
terminal: false
#..................................................................
stream.on 'close', ->
handler null, null
#..................................................................
stream.on 'error', ( error ) ->
handler error
#..................................................................
stream.on 'line', ( line ) ->
handler null, line
Run Code Online (Sandbox Code Playgroud)
它工作正常,除非最后一行文件从未报告,除非它被换行符终止.有没有办法解决这个问题(当然,除了手动添加换行符)?
我想写一个装饰器,使类的方法可以被其他方看到; 然而,我所描述的问题与该细节无关.代码看起来大致如下:
def CLASS_WHERE_METHOD_IS_DEFINED( method ):
???
def foobar( method ):
print( CLASS_WHERE_METHOD_IS_DEFINED( method ) )
class X:
@foobar
def f( self, x ):
return x ** 2
Run Code Online (Sandbox Code Playgroud)
我的问题在于装饰foobar()
者看到方法的那一刻,它还无法调用; 相反,它可以看到它的未绑定版本.也许这可以通过在类上使用另一个装饰器来解决,该装饰器将处理对绑定方法必须做的任何事情.我将尝试做的下一件事是在装饰方法通过装饰器时简单地使用属性标记,然后使用类装饰器或元类来进行后处理.如果我得到这个工作,那么我不必解决这个谜语,这仍然让我困惑:
任何人都可以在上面的代码中填写有意义的行,CLASS_WHERE_METHOD_IS_DEFINED
以便装饰器可以实际打印出f
定义的类,它被定义的那一刻?或者在python 3中排除了这种可能性?
我正在尝试安装pycairo 1.10.0以用于我的自定义构建python 3.1.然而,
sudo /flower/bin/easy_install-3.1 pycairo
Run Code Online (Sandbox Code Playgroud)
失败了
XXX@XXXX:/adventures$ sudo /flower/bin/easy_install-3.1 pycairo
install_dir /flower/lib/python3.1/site-packages/
Searching for pycairo
Reading http://pypi.python.org/simple/pycairo/
Reading http://cairographics.org/pycairo
Best match: pycairo 1.10.0
Downloading http://cairographics.org/releases/pycairo-1.10.0.tar.bz2
Processing pycairo-1.10.0.tar.bz2
error: Couldn't find a setup script in /tmp/easy_install-zeG9HB/pycairo-1.10.0.tar.bz2
Run Code Online (Sandbox Code Playgroud)
事实上,setup.py
在上述下载中没有; 相反,INSTALL
说:
Install Procedure
-----------------
$ ./waf --help # shows available waf options
$ ./waf configure # use --prefix and --libdir if necessary
# --prefix=/usr --libdir=/usr/lib64 for Fedora 64-bit
$ ./waf build
$ ./waf install
Use
$ python3 ./waf ... …
Run Code Online (Sandbox Code Playgroud) 所以我为我的内存饥渴的应用程序实现了一个实验性的缓存,并在混合中加入了一个堆,这样一旦缓存超过某个限制,我就可以轻松地获得最少访问的对象 - 这个想法是从对象中清除缓存可能不会很快重新使用,如果是,请从数据库中检索它们。
到目前为止,一切都很好,除了可能有尚未写入数据库且不应清除的对象。我可以通过设置“脏”位来解决这个问题,没问题。但还有另一个问题来源:如果仍然存在对潜伏在某处的给定缓存对象的有效引用怎么办?这可能会导致这样一种情况:函数f
持有对 ID 为 的对象的引用 A xxx
,然后从缓存中清除g
该对象,然后另一个函数请求具有相同 ID 的对象xxx
,但获得另一个引用 B,与 A 不同。到目前为止,我正在构建我的软件的假设是,任何具有给定 ID 的持久化对象都应该只有一个实例(也许这很愚蠢?)。
到目前为止,我的猜测是,我可以从垃圾收集相关的方法中gc.get_reference_count( value )
获利,例如——检查并知道上面的任何计数1
(因为value
在缓存中)意味着某些闭包仍在保留value
,因此不应清除它。
我在这个方向上没有发现任何有用的东西。这个问题是否需要另一种解决方案?
我使用命令行加密文件
openssl aes-256-cbc -in /tmp/text.txt -out /tmp/text.crypt
Run Code Online (Sandbox Code Playgroud)
我然后尝试使用以下JavaScript代码解密它:
crypto = require( 'crypto' );
cipher_name = 'aes-256-cbc';
password = '*';
decoder = crypto.createDecipher( cipher_name, password );
text_crypt = njs_fs.readFileSync( '/tmp/text.crypt' );
chunks = [];
chunks.push decoder.update( text_crypt, 'binary' );
chunks.push decoder.final( 'binary' );
text = chunks.join( '' ).toString( 'utf-8' );
Run Code Online (Sandbox Code Playgroud)
这失败了
TypeError: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有一个很长的单词列表,我把它放入一个非常简单的SOLR/Lucene数据库.我的目标是从列表中为单项查询找到"相似"的单词,其中"相似性"特别理解为(damerau)levensthein编辑距离.我知道SOLR为拼写建议提供了这样的距离.
在我的SOLR中schema.xml
,我配置了一个字段类型string
:
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
Run Code Online (Sandbox Code Playgroud)
我用它来定义一个字段
<field name='term' type='string' indexed='true' stored='true' required='true'/>
Run Code Online (Sandbox Code Playgroud)
我想搜索这个字段,并根据他们的levenshtein编辑距离返回结果.但是,当我webspace~0.1
通过调试和解释运行类似于SOLR 的查询时,报告显示计算得分时需要考虑大量因素,例如:
"1582":"
1.1353534 = (MATCH) sum of:
1.1353534 = (MATCH) weight(term:webpage^0.8148148 in 1581), product of:
0.08618848 = queryWeight(term:webpage^0.8148148), product of:
0.8148148 = boost
13.172914 = idf(docFreq=1, maxDocs=386954)
0.008029869 = queryNorm
13.172914 = (MATCH) fieldWeight(term:webpage in 1581), product of:
1.0 = tf(termFreq(term:webpage)=1)
13.172914 = idf(docFreq=1, maxDocs=386954)
1.0 = fieldNorm(field=term, doc=1581)
Run Code Online (Sandbox Code Playgroud)
很明显,对于我的应用,术语频率,idf
s等是没有意义的,因为每个文档只包含一个术语.我试图使用拼写建议组件,但没有设法让它返回实际的相似性分数.
有谁能够提供线索如何配置SOLR与返回分数和执行levensthein /哈罗-温克勒/ n元搜索没有做额外的东西一样tf
, …
在python(3)中,hash(x)
可以返回的最小值是多少?
我想使用哈希给数据库值一个快速的"指纹"(基本上很容易看出两个长的,类似的文本是否实际上是相同的),并且想要摆脱负数(为简单起见),所以我以为我只是添加最小的可能值来获得零和向上的值.手册非常有用地说明"哈希值是整数".这和我之前知道的一样多.
我今天有点惊讶,当我发现我在64位ubuntu上的手工编译的python显然使用64位左右的散列函数; 我一直以为应该是32位.机器架构会对hash()
功能产生影响吗?
另外,当我编译python时,我没有设置任何选项来编译64位架构(希望它"只是工作").python是自己调整还是我现在在64位机器上有32位python?这不是一个愚蠢的问题我相信很多时候根据处理器提供单独的包装.
编辑:我强烈怀疑答案将与sys.maxint
python 3中遗憾地删除密切相关.我的怀疑是我应该def xhash( x ): return hash( x ) - ( -maxint - 1 )
如果maxint
可用.我知道由于整体和多头的统一,这个价值"失去了它的价值",但这里可能仍然是一个有用的领域.任何人都知道如何实现模拟?
为了解决问题#3367795在这里我必须应对一些子问题.其中之一是:在所述算法(levenshtein距离)中,在存储器中分配了几个数组并用线初始化
cdef char *m1 = <char *>calloc( blen + 2, sizeof( char ) )
cdef char *m2 = <char *>calloc( blen + 2, sizeof( char ) )
cdef char *m3 = <char *>malloc( ( blen + 2 ) * sizeof( char ) )
#.........................................................................
for i from 0 <= i <= blen:
m2[ i ] = i
<...snip...>
Run Code Online (Sandbox Code Playgroud)
blen
这里指的是Python bytes
变量的长度.现在,据我所知的算法(参见我的原始帖子中的完整代码)和初始化代码m2
清楚地显示,这些数组意味着保存整数,而不是字符,所以人们会认为正确的分配应该看起来喜欢
cdef int *m3 = <int *>malloc( ( blen + 2 ) * sizeof( int …
Run Code Online (Sandbox Code Playgroud) python ×6
node.js ×4
python-3.x ×4
javascript ×3
c ×2
coffeescript ×2
32bit-64bit ×1
astral-plane ×1
browser ×1
caching ×1
cairo ×1
css ×1
cython ×1
encryption ×1
hash ×1
html ×1
lucene ×1
performance ×1
pixel ×1
pycairo ×1
re2 ×1
readline ×1
regex ×1
solr ×1
ubuntu-10.04 ×1
unicode ×1
v8 ×1
zeromq ×1