OpenSSL为AES加密提供了一种流行的(但不安全 - 见下文!)命令行界面:
openssl aes-256-cbc -salt -in filename -out filename.enc
Run Code Online (Sandbox Code Playgroud)
Python以PyCrypto包的形式支持AES,但它只提供工具.如何使用Python/PyCrypto解密使用OpenSSL加密的文件?
此问题过去也涉及使用相同方案的Python加密.我已经删除了那部分以阻止任何人使用它.不要以这种方式加密任何数据,因为它不符合今天的标准.你应该只使用解密,除了后向兼容性之外没有其他原因,即当你别无选择时.想要加密?如果可能的话,使用NaCl/libsodium.
我有4个点1,2,3,4封闭的矩形.
这些点以下列方式位于数组中: x1 y1 x2 y2 x3 y3 x4 y4
我遇到的问题是矩形可以以一定角度旋转.
如何计算原始点(灰色轮廓)和角度?

我试图在javascript + css3-transform中重现这个效果,所以我需要首先知道直尺寸,然后用css旋转.
我只是通过比较点来知道矩形是否笔直 y1==y2
if(x1==x4 && x2==x3 && y1==y2 && y4==y3){
rectangle.style.top = y1;
rectangle.style.left = x1;
rectangle.style.width = x2-x1;
rectangle.style.height = y4-y1;
rectangle.style.transform = "rotate(?deg)";
}
Run Code Online (Sandbox Code Playgroud) 在做IoC时,我(认为我)通过编写正确的部分以及可测试性的好处来理解它用于获得所需应用程序级功能的用途.但是在微观层面上,我不太明白如何确保一个对象注入了它实际可以使用的依赖项.我的例子是BackupMaker一个数据库.
要进行备份,需要以特定格式导出数据库,使用特定的压缩算法进行压缩,然后将其与一些元数据打包在一起以形成最终的二进制文件.完成所有这些任务似乎远非一个单一的责任,所以我最终得到了两个合作者:a DatabaseExporter和a Compressor.
在BackupMaker并不真正关心如何数据库导出(例如,使用工控机自带的数据库软件实用程序,或者通过做正确的API调用),但它确实很在意结果,即它必须是这个-kind-of-database备份首先是可传输(版本不可知)格式,其中任何一种我都不知道如何包装合同.如果压缩器在内存或磁盘上进行压缩,它也不关心,但它必须是BZip2.
如果我提供BackupMaker错误的导出器或压缩器,它仍会产生结果,但它会损坏 - 它看起来像一个备份,但它不会有它应该具有的格式.感觉系统的任何其他部分都不能被信任给那些合作者,因为它BackupMaker不能保证自己做正确的事情; 它的工作(从我的角度来看)是产生一个有效的备份,如果情况不对,它将不会,更糟糕的是,它不会知道它.与此同时,即使写这篇文章,在我看来,我现在说的是愚蠢的事情,因为单一责任的重点在于每件作品都应该完成它的工作,而不是担心别人的工作.如果它很简单,就没有合同 - JB只是教我有.(仅供参考,我直接向他发送了这个问题,但我还没有得到答复,关于此事的更多意见会很棒.)
直觉上,我最喜欢的选择是无法以无效方式组合类/对象,但我不知道如何做到这一点.我是否应该编写可怕的特定接口名称,例如IDatabaseExportInSuchAndSuchFormatProducer和ICompressorUsingAlgorithmXAndParametersY假设没有类实现这些,如果它们不这样做,然后调用它一天,因为没有任何关于彻头彻尾的代码可以做什么?我是否应该尽可能地解析我的数据库的导出和压缩算法的二进制格式,以进行合同测试,以验证语法和行为,然后确保(但如何?)仅使用测试类?或者我可以以某种方式重新分配责任,使这个问题消失?是否应该有另一个班级负责组成正确的低级别要素?或者我甚至分解太多了?
我注意到这个非常特别的例子给予了很多关注.然而,我的问题比这更普遍.因此,对于赏金的最后一天,我将尝试总结如下.
在使用依赖项注入时,根据定义,对象依赖于其他对象以满足其需要.在许多书籍示例中,指示兼容性的方式 - 提供该需求的能力 - 是通过使用类型系统(例如,实现接口).除此之外,特别是在动态语言中,使用合同测试.编译器(如果存在)检查语法,并且合同测试(程序员需要记住)验证语义.到现在为止还挺好.但是,有时语义仍然太简单,无法确保某些类/对象可用作对另一个的依赖,或者太复杂而无法在合同中正确描述.
在我的示例中,我的依赖于数据库导出器的类会考虑实现的任何内容IDatabaseExportInSuchAndSuchFormatProducer并将字节返回为有效(因为我不知道如何验证格式).非常具体的命名和如此粗略的合同要走的路还是我能做得更好?我应该将合同测试变成集成测试吗?也许(整合)测试三者的构成?我并不是真的想是通用的,但我想保持独立的责任和维护可测性.
language-agnostic oop dependency-injection inversion-of-control
最近我一直在努力解决以下问题:
给定一个整数数组,找到一个总和至少为k的最小(最短长度)子数组.
显然,这可以在O(n ^ 2)中轻松完成.我能够编写一个算法,在自然数的线性时间内解决它,但我无法弄清楚它是否为整数.
我最近的尝试是这样的:
def find_minimal_length_subarr_z(arr, min_sum):
found = False
start = end = cur_end = cur_sum = 0
for cur_start in range(len(arr)):
if cur_end <= cur_start:
cur_end, cur_sum = cur_start, arr[cur_start]
else:
cur_sum -= arr[cur_start-1]
# Expand
while cur_sum < min_sum and cur_end < len(arr)-1:
cur_end += 1
cur_sum += arr[cur_end]
# Contract
while cur_end > cur_start:
new_sum = cur_sum - arr[cur_end]
if new_sum >= min_sum or new_sum >= cur_sum:
cur_end -= 1
cur_sum = new_sum
else: …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我制作的自定义组件制作一个包.它基于几个库,包括Graphics32,GraphicEx和CCR.Exif.
我创建了一个Package项目,编写了包含其Register寄存程序的单元,添加了一些额外的引用,Delphi通知我有关requires部分(包括dbrtl.dcp,inet.dcp,soaprtl.dcp,vclimg.dcp,xmlrtl.dcp和dclGraphicEx140). dcp)并在contains部分添加了许多单元,以避免隐式发生有关它的警告.该项目编译并可以在我自己的机器上安装和使用而不会出现问题.但是,当我想在另一台机器上安装它时,麻烦就开始了.最后,我不得不复制我使用的所有第三方组件的所有DCU,以及来自GraphicEx的DCP和BPL,我必须安装它.
提供大量文件是一个无赖,但可以克服,但不得不安装其他软件包是不行的.我可以通过在包含部分中放置更多单元来摆脱DCP和BPL ,但这导致我自己的机器上实际安装了GraphicEx的错误消息.这对我来说很困惑,因为有了Graphics32就不会发生这样的事了......
无论如何,我如何将我的分配保持在最低限度并避免这种情况?我希望我团队中的其他开发人员能够使用该软件包,而不必担心我用它来构建它.首先,不能将所有第三方单元编译到我自己的DCU中吗?
关于OmniXML似乎有很大的热情,但是omnixml.com处于离线状态且Google Code项目是空的.这个库发生了什么,我在哪里可以找到代码(因为它是开源的)?
因为有时它比围绕队列设计解决方案更实用,我想编写一个简单的包装器来使迭代器线程安全.到目前为止,我从这些 主题中获得了灵感,并提出了两个想法:
class LockedIterator(object):
def __init__(self, it):
self._lock = threading.Lock()
self._it = it.__iter__()
if hasattr(self._it, 'close'):
def close(self):
with self._lock:
self._it.close()
self.__setattr__('close', close)
def __iter__(self):
return self
def next(self):
with self._lock:
return self._it.next()
Run Code Online (Sandbox Code Playgroud)
我不喜欢的是,如果我必须指定所有可能的方法,它会变得有点冗长 - 好吧,我不能 - 比如发电机的特殊情况.此外,我可能有一些其他迭代器,甚至更具体的方法现在已隐藏.
class LockedIterator(object):
def __init__(self, it):
self._lock = threading.Lock()
self._it = it.__iter__()
def __getattr__(self, item):
attr = getattr(self._it, item)
if callable(attr):
def hooked(*args, **kwargs):
with self._lock:
return attr(*args, **kwargs)
setattr(self, item, hooked)
return hooked
Run Code Online (Sandbox Code Playgroud)
这更简洁,但它只能拦截调用,而不是直接的属性更改.(现在隐藏这些属性以防止出现问题.)更重要的是,它使得Python不再将我的对象识别为迭代器!
什么是使所有迭代器(甚至更好:所有对象)都能工作的最佳方法,而不会产生漏洞抽象?在没有必要时我不太担心锁定,但是如果你能想出一个解决这个问题的解决方案,那太好了!
我已经使用了一些功能测试StaticLiveServerCase.这适用于本地测试,但现在我也想测试我的登台服务器.我正在阅读的这本书的作者提出了以下黑客攻击:
import sys
[...]
class NewVisitorTest(StaticLiveServerCase):
@classmethod
def setUpClass(cls):
for arg in sys.argv:
if 'liveserver' in arg:
cls.server_url = 'http://' + arg.split('=')[1]
return
super().setUpClass()
cls.server_url = cls.live_server_url
@classmethod
def tearDownClass(cls):
if cls.server_url == cls.live_server_url:
super().tearDownClass()
# Now use self.server_url instead of self.live_server_url
Run Code Online (Sandbox Code Playgroud)
我调整它以调用super(LiveServerTestCase, cls).setUpClass()(以及tearDownClass),而不是使用"临时服务器",因为直截了当地忽略(大)父母的实现感觉不对.
仍然是一个黑客,我想知道是否存在更清洁的解决方案.Django确实有--liveserver自己的参数,但它只能用于更改临时服务器的绑定.
到目前为止,我已经提出了以下想法:
StaticLiveServerCase以解析参数,相应地更改live_server_url属性,并让临时服务器刚刚启动/停止使用.从理论上讲,某些性能会降低成本,使得测试的可靠性降低.StaticLiveServerCase或某些StagingServerTestCase子类TransactionTestCase).这并不是一个黑客,我的IDE可能也不会喜欢它.StaticLiveServerTestCase或TransactionTestCase(组合而不是继承).看起来很多工作要实现这一点.组件升级后,其某些属性的存储方式不同,但仅在下次保存表单时存储.这意味着当我编辑上次保存的表单时仍然使用以前版本的组件时,在VCS中,我的实际更改会因组件升级产生的差异而变得模糊.我可以将它们分成单独的提交,但是我需要一直在寻找这些工件,组件升级的效果会分散在存储库的历史记录中.相反,我希望在升级组件后立即将这些更改捆绑在一个提交中.
为了实现这一点,我需要强制Delphi在项目(组)中重新保存(生成)所有表单,即使编辑器中没有进行任何更改,因此唯一的文件更改将由组件升级引起.到目前为止,我甚至没有设法在没有打开单个表单的情况下实现这一点,进行更改并将其还原 - IDE似乎最小化写入磁盘; 只需保存全部而不触及所有单位不会削减它.最后我需要尽可能多地为多个表单执行此操作并在编辑器中打开它们并不会起作用,因为有数百个...我可以编写一些AutoIt脚本来完成我所做的一切手工完成,但我希望有一些聪明的方法不涉及IDE的脚本.
我希望在我的应用程序中有一个交互式楼层地图(所以它们不是很大).每个用户的地图都不同,但包含的数字元素只有数量和位置不同.应用程序将显示地图,识别某些元素并将它们链接到数据库中的信息.
要设计和存储地图,我宁愿不滚动我自己的编辑器和/或想出一些自定义文件格式.但是,如果格式是开放的并且易于阅读,那将是很好的.SVG似乎是这项工作的完美候选人.所有需要的是如何命名元素以使它们可识别的约定.但是怎么去那里?我需要能够渲染SVG并区分不同层的东西.
TSVG可以做到这一点,但依赖于我宁愿避免使用的FireMonkey - 它甚至不存在于Delphi 2010中,因此我必须使用另一个版本并执行DLL技巧.
另一种选择是使用Chromium Embedded Framework并使用HTML,CSS和JavaScript创建地图.这感觉非常笨重,很难做对.
有没有更简单的方法可以做到这一点我忽略了,使用SVG还是完全不同的东西?
我不确定GIS系统是否适合这种情况.这可能是矫枉过正的.
delphi ×4
python ×4
delphi-2010 ×3
aes ×1
algorithm ×1
css ×1
css3 ×1
django ×1
django-1.7 ×1
encryption ×1
geometry ×1
graphicex ×1
iterator ×1
javascript ×1
math ×1
omnixml ×1
oop ×1
openssl ×1
pycrypto ×1
python-2.7 ×1
svg ×1
unit-testing ×1
vcl ×1