小编Wil*_*ill的帖子

在github页面上确定页面已过时

Github页面在所有服务内容上设置非常积极的缓存标头(Cache-Control: max-age=864001天,Expires提前1个月).

如果您更新页面并推送到github,那么重新访问已经拥有缓存副本的页面的人将无法获得新页面而无需实际清理其浏览器缓存.

如何在页面中运行的脚本确定它是陈旧的并强制更新?

步骤可能是:

  1. 确定你在github页面上运行:easy,parse window.locationforgithub.com/
  2. 确定网页的当前版本:很难,Git并不让你嵌入SHA1 一个COMMITED页面; 没有RCS $id$.那你怎么知道你的版本是什么?
  3. 获取github中的当前版本; 很难,github摆脱了未经身份验证的v2 API.推送到github和github之间也有时间脱节.那么你怎么知道你可以得到什么版本?
  4. 确定你是陈旧的,如何使页面无效并强制重新加载? 很难,window.location.reload(true)在Safari/Chrome中不起作用,例如......

所以它解决了这些步骤; 当然可能有另一种方式?

javascript github browser-cache

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

将数据传递给subprocess.check_output

我想调用一个脚本,将字符串的内容传递给它的stdin并检索它的标准输出.

我不想触摸真正的文件系统,所以我无法为它创建真正的临时文件.

使用subprocess.check_output我可以得到脚本写的任何内容; 我怎样才能将输入字符串输入到stdin中?

subprocess.check_output([script_name,"-"],stdin="this is some input")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/subprocess.py", line 537, in check_output
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/usr/lib/python2.7/subprocess.py", line 672, in __init__
    errread, errwrite) = self._get_handles(stdin, stdout, stderr)
  File "/usr/lib/python2.7/subprocess.py", line 1043, in _get_handles
    p2cread = stdin.fileno()
AttributeError: 'str' object has no attribute 'fileno'
Run Code Online (Sandbox Code Playgroud)

python

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

整洁的异步IO代码

虽然异步IO(带有select/poll/epoll/kqueue等的非阻塞描述符)并不是Web上记录最多的东西,但有一些很好的例子.

但是,所有这些示例在确定了调用返回的句柄后,只有一个do_some_io(fd)"存根".它们并没有真正解释如何在这种方法中最好地接近实际的异步IO.

阻止IO非常整洁,直接读取代码.另一方面,非阻塞,异步IO是毛茸茸的,凌乱的.

有什么办法?什么是健壮和可读的?

void do_some_io(int fd) {
  switch(state) {
    case STEP1:
       ... async calls
       if(io_would_block)
          return;
       state = STEP2;
    case STEP2:
       ... more async calls
       if(io_would_block)
          return;
       state = STEP3;
    case STEP3:
       ...
  }
}
Run Code Online (Sandbox Code Playgroud)

或者(ab)使用GCC的计算得到的:

#define concatentate(x,y) x##y
#define async_read_xx(var,bytes,line)       \
   concatentate(jmp,line):                  \
   if(!do_async_read(bytes,&var)) {         \
       schedule(EPOLLIN);                   \
       jmp_read = &&concatentate(jmp,line); \
       return;                              \
}

// macros for making async code read like sync code
#define async_read(var,bytes) \
    async_read_xx(var,bytes,__LINE__)

#define async_resume()            \
     if(jmp_read) {               \
         void* …
Run Code Online (Sandbox Code Playgroud)

c c++ io asynchronous

24
推荐指数
2
解决办法
3万
查看次数

手写asm.js - 如何跟踪堆中的javascript对象?

我在Javascript 的asm.js子集中编写优先级队列和八叉树,以便从中榨取最后可能的性能.

但是,如何在asm.js函数的heap缓冲区中存储对Javascript对象的引用?

现在,我在堆中的结构必须有一个他们引用的Javascript对象的整数ID,我需要一个经典的Javascript对象作为这些int和Javascript对象之间的字典.

例如,我有一个asm.js八叉树,它公开了一个add函数,就像add(x1,y1,z1,x2,y2,z2,object_id)where object_id是整数一样.该find(x1,y1,z1,x2,y2,z2)函数返回一个包含在边界内的所有object_id的列表.这意味着我必须在Javascript中维护object_id的对象字典,以便我可以确定该框中的实际对象; object_ids到对象的映射.

这感觉不对.将int转换为字符串以在Javascript世界中进行查找的想法是错误的.在asm.js中编写内部循环数据结构的一个关键点是避免创建垃圾.

(我的目标是Chrome和Firefox一样;我希望asm.js严格的代码在两者上运行得更快.是的,我将进行分析.)

无论你有多少属性可以实现到asm.js堆 - 例如对象的位置和维度 - 你通常也需要将一些Javascript对象与项目关联起来; 字符串和webGL对象以及DOM对象等.

有没有更好的方法让asm.js堆包含指向Javascript对象的指针?如果使用整数ID映射,例如,使用数组或对象作为字典是否更好?

javascript asm.js

24
推荐指数
2
解决办法
3965
查看次数

解码短信报告肯尼亚狮子会的GPS位置

马拉-Naboisho狮项目已经要求我们帮助解码和绘制配备了GPS项圈狮子的位置.

他们从领子收到短信:

Collar07854_100806210058.SMS

074952494449554d0000000000000000000000000000000000000000000000040f33303030333430313232393738393000000000000000000000000000000000f10a0806100028008c13ef348a0039d0fe000de871004cc92b5ca92d6213ef26640039d108000de86b004cc92d5ca92d5d13ef18620039d101000de865004cc92c5ca92d5813ef0a930039d0fc000de864004cc9311c682d5413eefc170039d045000de7d4004cc95b7c692c5013eeee280039d0ff000de85f004cc92a7c692d6fffffffffffffffffffffffffffffffffffffffffff

Collar07854_100807060011.SMS

074952494449554d0000000000000000000000000000000000000000000000040f33303030333430313232393738393000000000000000000000000000000000f10a0807020038008c13efb2eb0039d0ed000de853004cc92e3cea2d8813efa5060039d0fb000de860004cc9291c6a2d8413ef96fd0039d0fc000de85e004cc92d5c6a2d7f13ef88e00039d0f6000de85a004cc92b5c6a2d7b13ef7ad80039d0fa000de85a004cc9327c6a2d77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Run Code Online (Sandbox Code Playgroud)

这些可能是SMS PDU,虽然简单的在线解码器似乎没有太多意义.其中有ASCII文本"IRIDIUM",可能是SMSC或发送者或字符串,因为IRIDIUM是一个卫星电话系统,可能是当项圈发送他们的位置时的持票人.

更新:他们有一些与这些项圈对应的KML文件; 我在这里这里上传了KML.项圈可能由Vectronic-Aerospace制造.

它是什么格式,我们如何解码它?

(这是一个授权代码项目;也许你想帮助他们,或者看看那里的其他问题?)

sms gps decode

21
推荐指数
3
解决办法
817
查看次数

直写RAM磁盘,或文件系统的大量缓存?

我有一个程序,它非常重视文件系统,读取和写入一组工作文件.这些文件的大小为几千兆字节,但不大到不适合RAM磁盘.这个程序运行的机器通常是Ubuntu Linux机箱.

有没有办法将文件管理器配置为具有非常大的缓存,甚至可以缓存写入以便稍后访问磁盘?

或者有没有办法创建一个可以直接写入真实磁盘的RAM磁盘?

linux filesystems optimization ramdisk

20
推荐指数
3
解决办法
3万
查看次数

Python(和Java)中最快的数据打包

(有时我们的主人是错的;纳秒很重要;)

我有一个Python Twisted服务器与一些Java服务器进行通信,并且分析显示在JSON编码器/解码器中花费约30%的运行时间; 它的工作是每秒处理数千条消息.

youtube的这个演讲提出了有趣的适用点:

  • 序列化格式 - 无论您使用哪种格式,它们都很昂贵.测量.不要使用泡菜.不是一个好选择.找到协议缓冲区很慢.他们编写了自己的BSON实现,比你下载的快了10-15倍.

  • 你必须衡量.Vitess为HTTP实现交换了一个协议.即使它在C中它也很慢.所以他们破解了HTTP并使用python进行了直接套接字调用,这在全局CPU上便宜了8%.HTTP的包络非常昂贵.

  • 测量.在Python中,测量就像读茶叶一样.Python中的很多东西都是反直觉的,就像垃圾收集的成本一样.他们的应用程序的大部分时间都花时间序列化.分析序列化很大程度上取决于您所使用的内容.序列化整数与序列化大blob非常不同.

无论如何,我控制了消息传递API的Python和Java两端,并且可以选择与JSON不同的序列化.

我的消息如下:

  • 可变数量的长; 在1到10K之间的任何地方
  • 和两个已经UTF8的文本字符串; 均为1到3KB

因为我正在从套接字中读取它们,所以我想要能够优雅地处理流的库 - 例如,如果它没有告诉我它消耗了多少缓冲区,那就太烦人了.

当然,这个流的另一端是Java服务器; 我不想选择对Python端有用的东西,但是将问题转移到Java端,例如性能或曲折或片状的API.

我显然会做自己的分析.我在这里问,希望你能描述我不会想到的方法,例如使用struct和最快的字符串/缓冲区是什么.

一些简单的测试代码给出了惊人的结果:

import time, random, struct, json, sys, pickle, cPickle, marshal, array

def encode_json_1(*args):
    return json.dumps(args)

def encode_json_2(longs,str1,str2):
    return json.dumps({"longs":longs,"str1":str1,"str2":str2})

def encode_pickle(*args):
    return pickle.dumps(args)

def encode_cPickle(*args):
    return cPickle.dumps(args)

def encode_marshal(*args):
    return marshal.dumps(args)

def encode_struct_1(longs,str1,str2):
    return struct.pack(">iii%dq"%len(longs),len(longs),len(str1),len(str2),*longs)+str1+str2

def decode_struct_1(s):
    i, j, k = struct.unpack(">iii",s[:12])
    assert len(s) == 3*4 + 8*i + j + k, …
Run Code Online (Sandbox Code Playgroud)

python java optimization performance serialization

20
推荐指数
2
解决办法
7453
查看次数

在Android Canvas上包装长文本

我有一个自定义控件,直接进行了大量的2D绘图canvas.

一些图纸是文字,所以我使用的Canvas.drawText()方法.

我想在一些边界内绘制文本 - 左上角,某个最大宽度和最大行数.在绘制文本后,我想知道它花了多少行.

是否有内置函数在边界内绘制文本进行明智的分割?

如果没有,是否有这样做的标准配方?

android 2d canvas

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

获取LLVM值的原始变量名称

llvm::User(例如指令)的操作数是llvm::Values.

mem2reg传递之后,变量采用SSA形式,并且它们与原始源代码对应的名称将丢失. Value::getName()只是针对某些事情; 对于大多数变量,它们是中介,它没有设置.

instnamer通可以运行给所有的变量的名称,如TMP1TMP2,但这并不能捕捉到他们最初来自.这是原始C代码旁边的一些LLVM IR:

在此输入图像描述

我正在构建一个简单的html页面来可视化和调试我正在进行的一些优化,并且我想将SSA变量显示为名称ver表示法,而不仅仅是临时的instnamer名称.它只是为了帮助我的可读性.

我通过命令行来获取我的LLVM IR,例如:

 clang -g3 -O1 -emit-llvm -o test.bc -c test.c
Run Code Online (Sandbox Code Playgroud)

在国际关系中有电话llvm.dbg.declare和电话llvm.dbg.value; 你如何变成原始的源代码名称和SSA版本号?

那么如何从一个llvm::Value?确定原始变量(或命名常量名称)?调试器必须能够做到这一点,所以我该怎么办?

compiler-construction llvm clang debug-symbols llvm-ir

19
推荐指数
2
解决办法
6345
查看次数

Python数据库扭曲

Twisted应用程序有一个API可以以可扩展的方式与数据库通信:twisted.enterprise.dbapi

令人困惑的是,要选择哪个数据库?

该数据库将有一个Twisted应用程序,主要是进行插入和更新以及相对较少的选择,然后其他严格只读客户端正在访问数据库直接进行选择.

(只读用户不一定选择Twisted应用程序正在插入的数据;它不像数据库被用作消息队列一样)

我的理解 - 我想纠正/建议 - 是:

  • Postgres是一个很棒的数据库,但是几乎所有的Python绑定 - 以及它们中令人困惑的迷宫 - 都是弃用的
  • postgres 有psycopg2,但这对于做自己的连接池和事情会产生很多噪音; 这是否与Twisted异步数据库连接池优雅/有用/透明地共存?
  • SQLLite对于小东西来说是一个很棒的数据库,但是如果以多用户方式使用它会进行全数据库锁定,那么性能会影响我设想的使用模式; 它还有不同的键值列表机制?
  • MySQL - 在Oracle收购之后,谁想要现在采用它或采用分支?
  • 还有什么吗?

python database rdbms scalability twisted

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