今天早些时候我发现我的git存储库中缺少一些代码.我知道一些丢失的文本,以及它所在的文件,所以我使用了git log -S'missingtext' /path/to/file.然而,唯一回来的是我添加了包含缺失文本的行的提交.HEAD中没有文本,添加它的提交存在于我的分支中,所以我知道我的分支历史中的一个提交必须删除它,但它没有显示出来.
经过一些手动搜索,结果发现在解决合并冲突时意外删除了该行.所以我想知道:
对#1的任何见解都会很棒(我认为这git log -S会给我答案),但我真正的问题是#2,因为我希望将来可以避免这种情况.
我有一个带有PointField属性的地理模型.一切都在本地完美,但当我尝试在服务器上保存实例时,我收到以下错误:
django.db.utils.DatabaseError: invalid byte sequence for encoding "UTF8": 0x00
Run Code Online (Sandbox Code Playgroud)
我挖掘了源代码,发现值的序列化方式不同; 具体而言,在服务器上执行查询之前,该值未被转义.它似乎正在进行转义psycopg2.Binary.getquoted(),当然,它不会在服务器上返回正确的值.
在我的机器上:
from psycopg2 import Binary
Binary('\0').getquoted() # > "'\\\\000'::bytea"
Run Code Online (Sandbox Code Playgroud)
在服务器上:
from psycopg2 import Binary
Binary('\0').getquoted() # > "'\\000'::bytea"
Run Code Online (Sandbox Code Playgroud)
好的,这解释了为什么它认为我试图插入一个空字节.(因为我.)所以现在我已经足够了解Jonathan S.在django-users组中找到类似的报告会出现什么问题但是,就像Jonathan一样,我不知道这是错误还是配置错误.
有人能指出我正确的方向吗?
以下是有关设置的一些信息:
My computer Server
OS OSX 10.7 CentOS 5.5
Python 2.7 2.6
Django 1.3 1.3
Postgres 9.0.4 9.9.1
postgis 1.5.2 1.5.3-2.rhel5
geos 3.3.0 3.3.0-1.rhel5
Run Code Online (Sandbox Code Playgroud) 我一直在使用pickle.dumps以便为任意Python对象创建哈希,但是,我发现dict/set命令不是规范化的,因此结果是不可靠的.
在SO和其他地方有几个 相关的 问题,但我似乎找不到使用相同基础进行相等(/ 结果)的哈希算法.我理解滚动自己的基本要求,但显然我更喜欢使用经过测试的东西.__getstate____dict__
这样的图书馆存在吗?我想我实际要求的是一个确定性地序列化对象的库(使用__getstate__和__dict__),这样我就可以对输出进行散列.
编辑
为了澄清,我正在寻找与Python hash(或__hash__)返回的值不同的东西.我想要的本质上是任意对象的校验和,可能是也可能不是.该值应根据对象的状态而变化.(我正在使用"状态"来指代由其重新调整的字典,__getstate__或者,如果不存在,则指对象的__dict__.)
我继承了一些C#代码,需要将它移植到PHP.这里是:
string key = "some key";
string strEncrypted = "some encrypted string";
byte[] hashedKey = new MD5CryptoServiceProvider().ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
byte[] strToDecrypt = Convert.FromBase64String(strEncrypted);
TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
tripleDES.Key = hashedKey;
tripleDES.Mode = CipherMode.ECB;
string strDecrypted = UTF8Encoding.UTF8.GetString(tripleDES.CreateDecryptor().TransformFinalBlock(strToDecrypt, 0, strToDecrypt.Length));
Run Code Online (Sandbox Code Playgroud)
我的PHP代码如下所示:
$key = 'some key';
$str_encrypted = 'some encrypted string';
$hashed_key = md5($key, TRUE);
$str_to_decrypt = base64_decode($str_encrypted);
// The IV isn't used for ECB, but it prevents a warning.
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_TRIPLEDES, MCRYPT_MODE_ECB), MCRYPT_RAND);
$str_decrypted = mcrypt_decrypt(MCRYPT_TRIPLEDES, $hashed_key, $str_to_decrypt, MCRYPT_MODE_ECB, $iv);
Run Code Online (Sandbox Code Playgroud)
但是这两个解密的值并不相同,我无法弄清楚原因.我在这里和其他地方已经阅读了很多类似的问题,但它们似乎都没有解释我遇到的问题. …
我有一种情况,只要存在第一个对象,我就想保持从一个对象到另一个对象的映射.我的第一个想法是使用WeakKeyDictionary.
import weakref
import gc
class M:
pass
w = weakref.WeakKeyDictionary()
m = M()
w[m] = some_other_object
del m
gc.collect()
print w.keys()
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,这样做很好.但是,在some_other_object(或具有引用)m的M情况下,实例将不会被垃圾收集.(要查看示例,替换some_other_object用m)
当然,如果我将映射存储在对象本身上,当我删除它时会收集垃圾:
import weakref
import gc
class M:
pass
m = M()
m.circular_reference = m
r = weakref.ref(m)
del m
gc.collect()
print r
Run Code Online (Sandbox Code Playgroud)
我可以使用weakref模块实现第二个例子的结果(即没有变异m)吗?
换句话说,我可以使用weakref模块将对象映射到自身(或其他具有强引用的对象),并且只要有对象的其他引用,只将对象保留在内存中吗?
最近,我被要求在网站上添加一些Woopra JavaScript,并注意到URL以双斜杠开头(即省略了该方案)。我以前从未见过,所以我去尝试找到更多有关它的信息,但我唯一能找到的就是Woopra常见问题解答中的一项:
安装程序中的Woopra JavaScript在脚本的URL调用中不包含http。这是对的。JavaScript已经过优化,可以在您的网站上快速高效地运行。
但是,某些验证和站点测试/调试服务和工具无法将代码识别为正确的代码。这是正确有效的。如果警告使您烦恼,只需将http添加到脚本的URL。它不会影响脚本。
(为清楚起见,URL为“ //static.woopra.com/js/woopra.v2.js”-除“ http”外,省略了冒号。)
是否有关于此做法的更多信息?如果确实有效,则必须有一个规范对此进行讨论,我非常希望看到它。
在此先感谢您满足我的好奇心!