我开始尝试使用CouchDB,因为它看起来像是我们遇到的某些问题的完美解决方案.鉴于所有工作都将在一个没有遗留依赖关系的全新项目上,您建议使用哪个客户端库,为什么?
如果我们使用的操作系统有任何重叠,这将更容易.FreeBSD只在其ports集合中提供了py- simplecouchdb,但该库的项目网站表示要使用CouchDBKit.这些都没有Ubuntu,它只与CouchDB一起发布.由于这两个操作系统没有共同的库,我可能会从源代码安装一些东西(如果我有时间的话,希望能够将软件包提交给Ubuntu和FreeBSD人员).
对于那些感兴趣的人,我想使用CouchDB作为在各种服务之间传递的数据的方便的中间存储位置 - 考虑消息总线系统但不太正式.例如,我们有守护进程下载和解析网页,然后将有趣的位发送到其他守护进程以进行进一步处理.很多这些对象在运行时都是不明确的("这里有一些HTML,加上一组元数据,还有一些在其上运行的动作").而不是将其序列化为ad-hoc本地网络协议或将其粘贴在PostgreSQL中,我宁愿使用为此目的而设计的东西.我们目前正在使用NetWorkSpaces这个角色,但它几乎没有广泛的支持或CouchDB的用户社区.
在我写的一个开源程序中,我正在读取文件中的二进制数据(由另一个程序编写)并输出整数,双精度和其他各种数据类型.其中一个挑战是它需要在两个端点的32位和64位机器上运行,这意味着我最终不得不做一些低级别的bit-twiddling.我知道(非常)关于类型惩罚和严格别名的一点点,并且想要确保我正确地做事.
基本上,很容易从char*转换为各种大小的int:
int64_t snativeint64_t(const char *buf)
{
/* Interpret the first 8 bytes of buf as a 64-bit int */
return *(int64_t *) buf;
}
Run Code Online (Sandbox Code Playgroud)
我有一组支持函数来根据需要交换字节顺序,例如:
int64_t swappedint64_t(const int64_t wrongend)
{
/* Change the endianness of a 64-bit integer */
return (((wrongend & 0xff00000000000000LL) >> 56) |
((wrongend & 0x00ff000000000000LL) >> 40) |
((wrongend & 0x0000ff0000000000LL) >> 24) |
((wrongend & 0x000000ff00000000LL) >> 8) |
((wrongend & 0x00000000ff000000LL) << 8) |
((wrongend & 0x0000000000ff0000LL) << 24) |
((wrongend …Run Code Online (Sandbox Code Playgroud) 我有接受dicts或其他对象的方法以及从这些对象中获取的"fields"的名称.如果对象是dict,则该方法用于__getitem__检索命名键,或者getattr用于检索命名属性.这在网络模板语言中非常常见.例如,在变色龙模板中,您可能具有:
<p tal:content="foo.keyname">Stuff goes here</p>
Run Code Online (Sandbox Code Playgroud)
如果你foo像dict一样传入{'keyname':'bar'},然后foo.keyname获取'keyname'键以获得'bar'.如果foo是类的实例,如:
class Foo(object):
keyname = 'baz'
Run Code Online (Sandbox Code Playgroud)
然后foo.keyname从keyname属性中获取值.变色龙本身实现了这个功能(在chameleon.py26模块中),如下所示:
def lookup_attr(obj, key):
try:
return getattr(obj, key)
except AttributeError as exc:
try:
get = obj.__getitem__
except AttributeError:
raise exc
try:
return get(key)
except KeyError:
raise exc
Run Code Online (Sandbox Code Playgroud)
我在自己的包中实现了它,如:
try:
value = obj[attribute]
except (KeyError, TypeError):
value = getattr(obj, attribute)
Run Code Online (Sandbox Code Playgroud)
问题是,这是一种非常常见的模式.我已经在很多模块中看到过这种方法或者与它非常类似的方法.那么为什么在语言的核心,或者至少在一个核心模块中不是这样的东西呢?如果做不到这一点,是那里怎么会以明确的方式应该写?
假设您要将值的字典传递给函数,或者希望使用不会被重用的短期字典.有两种简单的方法可以做到这一点:
使用该dict()函数创建字典:
foo.update(dict(bar=42, baz='qux'))
Run Code Online (Sandbox Code Playgroud)
使用匿名词典:
foo.update({'bar': 42, 'baz': 'qux'})
Run Code Online (Sandbox Code Playgroud)
你喜欢哪个?选择一个而不是个人风格有其他原因吗?
我正在使用Ubuntu 11.04中的Emacs 23.2.1.我已经安装了purcell的Solarized色彩主题端口,但是我想调整一些面孔以使我的Python缓冲区看起来更像Solarized Vim截图.编辑颜色主题很容易,因此我总是使用我喜欢的颜色,但这也会在C模式下改变它们,我想避免这种情况.
具体来说,这是builtin-face的默认设置:
(font-lock-builtin-face ((t (:foreground ,green))))
Run Code Online (Sandbox Code Playgroud)
在Python模式 - 而且只有Python模式 - 我想改用它:
(font-lock-builtin-face ((t (:foreground ,blue))))
Run Code Online (Sandbox Code Playgroud)
我非常喜欢通过修补一些逻辑到颜色主题定义做出这种改变,这样我可以有一张纸条写着:"这改变了上游送我调整只是 Python的突出".如果做不到这一点,我会满足于我的init.el.不过,我宁愿把它与主色彩主题打包在一起.
这可能吗?抓一点.这是Emacs; 我知道这是可能的!但是我怎么能这样做呢?
如何编写一个函数来确定使用php或javascript的16位整数的总体数.种群计数定义为"打开"的位数,或者在其他情况下,它是数字的二进制表示中的1的数量.例如,二进制数0b0000的总体数为0,因为没有任何1位.0b0101的人口数为2,因为2位开启; 0b1110的人口数为3. 0b1111111111111111具有16的人口数,因为有16个1位.您的函数应接受INTEGER参数并返回包含其人口计数的INTEGER.例:
f(0)= 0
f(1)= 1
f(2)= 1
f(3)= 2
f(4)= 1
f(5)= 2
如何在最近的一小时内启动AlarmManager?例如,当用户点击按钮并且时间是12:32时,我想在13:00开始服务,然后每小时重复一次,我尝试了这段代码,但它不起作用,它只在一小时后启动AlarmManager,所以如果时间是12:32,它将在13:32开始服务.
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY)+1);
AlarmManager alarm = (AlarmManager)myService.this.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(myService.this, AlarmReceiver.class);
PendingIntent pIntent = PendingIntent.getBroadcast(BatteryService.this, 0, i, 0);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000*60*60, pIntent);
Run Code Online (Sandbox Code Playgroud) 我有一个测试脚本,可以在1到180秒之间随机睡眠几秒钟。测试程序将挂起3分钟以上。
因此,我更改了代码,使其休眠60秒(1分钟)并运行了脚本。20小时(!!!)之后,代码仍按time.sleep()挂起。
该代码是
downtime = 60
time.sleep(downtime)
Run Code Online (Sandbox Code Playgroud)
为什么Python会永远挂在time.sleep(60)上?
python ×4
ajax ×1
alarmmanager ×1
android ×1
c ×1
color-scheme ×1
couchdb ×1
emacs ×1
endianness ×1
getattr ×1
javascript ×1
php ×1
sleep ×1
themes ×1
type-punning ×1