为什么我们需要抽象工厂devise模式?

大部分的定义是: 抽象工厂提供了一个创build相关对象族的界面,而不需要指定具体的类 什么是抽象工厂模式的使用,因为我们可以通过创build具体类本身的对象来实现任务。 为什么我们有一个创build具体类的对象的工厂方法? 请给我提供我必须实现abstractFactory模式的真实例子吗?

最快的屏幕捕获方法

我想为Windows平台编写一个屏幕录像程序,但不确定如何捕获屏幕。 我知道的唯一方法是使用GDI,但我很好奇是否还有其他方法可以解决这个问题,如果有的话,哪个方法的开销最小? 速度是重中之重。 屏幕录制程序将用于录制游戏画面,但如果这样做缩小了选项的范围,我仍然可以接受任何其他不属于此范围的build议。 毕竟,知识并不坏。 编辑 :我碰到这篇文章: 各种捕获屏幕的方法 。 它向我介绍了使用Windows Media API的方法和使用DirectX的方法。 它在结论中提到禁用硬件加速可以大大提高捕获应用程序的性能。 我很好奇这是为什么。 任何人都可以为我填写缺失的空白吗? 编辑 :我读了像Camtasia的屏幕录像程序使用自己的捕获驱动程序。 有人能给我一个深入的解释,说明它是如何工作的,为什么它更快? 我也可能需要关于实现类似的指导,但是我确定无论如何都有现有的文档。 另外,我现在知道FRAPS如何logging屏幕。 它挂钩底层graphicsAPI从后台缓冲区读取。 据我所知,这是比从前缓冲区读取更快,因为你正在从系统RAM,而不是videoRAM读取。 你可以在这里阅读文章。

更改Pandas中列的数据types

我想将一个表格(表示为列表清单)转换为Pandas DataFrame。 作为一个非常简单的例子: a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']] df = pd.DataFrame(a) 什么是最好的方式将列转换为适当的types,在这种情况下,列2和3为浮动? 有没有办法在转换为DataFrame时指定types? 或者是最好先创buildDataFrame,然后遍历列来更改每列的types? 理想情况下,我想以dynamic的方式做到这一点,因为可以有数百个列,我不想明确指定哪些列是哪种types。 我只能保证每列都包含相同types的值。

jacksonVS. Gson

在search了一些现有的JSON库之后,我终于find了这两个: jackson Google GSon 我对GSON有些偏袒,但networking上的一句话是GSon遭受了某种天体性能问题 (截至2009年9月)。 我正在继续我的比较; 在此期间,我正在寻求帮助来下定决心。

rvm安装不工作:“RVM不是一个函数”

我刚刚安装了RVM,但无法使其工作。 我的.profile文件末尾有这样的行: [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" 我试图运行source .profile和重新启动terminal,但仍然,当我运行rvm use 1.9.2我得到: RVM is not a function, selecting rubies with 'rvm use …' will not work. 我的系统是Ubuntu 11.10。

用Git改变项目的第一次提交?

我想在我的项目的第一次提交中改变一些东西,而不会丢失所有后续的提交。 有没有办法做到这一点? 我不小心列出了我的原始邮件在源代码中的评论,我想改变它,因为我从垃圾邮件索引GitHub垃圾邮件。

什么是最快的子stringsearchalgorithm?

好的,所以我不会听起来像一个白痴,我会更明确地陈述问题/要求: Needle(pattern)和haystack(text to search)都是C样式的以null结尾的string。 没有提供长度信息; 如果需要,它必须被计算。 函数应返回指向第一个匹配的指针,如果找不到匹配项,则返回NULL 。 故障情况是不允许的。 这意味着任何具有非恒定(或大的恒定)存储要求的algorithm都需要具有分配失败的回退情况(并且后备处理中的性能因此导致最坏情况的性能)。 实现是用C语言编写的,但是没有代码的algorithm(或者链接到这个)的一个很好的描述也不错。 …以及我所说的“最快”的意思是: 确定性O(n)其中n =干草堆长度。 (但是,如果将它们与更稳健的algorithm结合以提供确定性O(n)结果),则可以使用通常为O(nm)algorithm(例如滚动哈希)的想法。 从来没有执行过(可测量的; if (!needle[1])等几个时钟是可以的),比天真的蛮力algorithm更糟糕,特别是在非常短的针头上,这可能是最常见的情况。 (无条件繁重的预处理开销是不好的,因为试图以牺牲可能的针头为代价来提高病态针头的线性系数)。 给定一个任意的针和干草堆,相比或更好的性能(不比其他任何其他广泛实施的algorithm更长的search时间50%)。 除了这些条件之外,我将离开“最快”的开放式的定义。 一个好的答案应该解释为什么你考虑你build议“最快”的方法。 我目前的实现比glibc的双向实现运行速度大概慢10%到8倍(取决于input)。 更新:我目前的最优algorithm如下: 对于长度为1的针,请使用strchr 。 对于长度为2-4的针,使用机器字一次比较2-4个字节:预加载一个16位或32位整数的移位,并在每次迭代时从干草堆中循环旧字节输出/新字节。 干草堆的每个字节都只读一次,并对0(string结尾)和一个16位或32位比较进行检查。 对于长度大于4的针头,使用双向algorithm和一个仅适用于窗口最后一个字节的错误移位表(如Boyer-Moore)。 为了避免初始化一个1kb表的开销(这对于许多中等长度的针来说是一个净损失),我保留一个位数组(32字节)来标记移位表中的哪些入口被初始化。 未设置的位对应于从不出现在针中的字节值,可以进行全针长度的移位。 我脑海中留下的大问题是: 有没有办法更好地使用坏class表? Boyer-Moore通过向后扫描(从右到左)充分利用它,但是双向需要从左到右的扫描。 在一般情况下,我发现的唯一两个可行的候选algorithm(没有内存不足或二次性能条件)是有序字母上 的双向和string匹配 。 但是,在那里容易检测到不同的algorithm是最优的? 当然,空间algorithm中的许多O(m) (其中m是针长)可用于m<100左右。 如果有一个简单的testing针可能只需要线性时间,那么也可以使用最差二次方法。 奖励积分为: 你可以通过假设针和干草堆都是格式良好的UTF-8来提高性能吗? (使用字节长度不同的字符时,良好的结构会在针头和干草堆之间施加一些stringalignment要求,并且在遇到不匹配的头字节时允许自动2-4字节的移位。最大的后缀计算,好的后缀转换等已经给你各种algorithm?) 注意:我很清楚大部分的algorithm,只是没有在实践中performance如何。 这里有一个很好的参考,所以人们不会给我algorithm的参考作为评论/答案: http : //www-igm.univ-mlv.fr/~lecroq/string/index.html

在Android Studio中查看数据库文件的内容

自从发布以来,我一直在使用Android Studio开发我的应用程序。 一切都很好,直到最近,我不得不一起debugging数据库文件。 由于我不知道如何直接查看数据库,所以当我debugging生成数据库文件时,我必须将数据库文件从手机导出到PC。 为了做到这一点,我必须打开DDMS > File Explorer 。 一旦我打开DDMS,我必须重新连接USB,我失去了我的debugging线程。 检查数据库文件后,必须closuresDDMS并重新连接USB才能返callback试模式。 这太复杂了。 有没有人有更好的方式在Android Studio中做到这一点(我知道在Eclipse中更容易)?

Unicode(UTF-8)读取和写入Python文件

理解阅读和写文本到一个文件(Python 2.4),我有一些脑力衰竭。 # The string, which has an a-acute in it. ss = u'Capit\xe1n' ss8 = ss.encode('utf8') repr(ss), repr(ss8) (“u'Capit \ xe1n'”,“'Capit \ xc3 \ xa1n'”) print ss, ss8 print >> open('f1','w'), ss8 >>> file('f1').read() 'Capit\xc3\xa1n\n' 所以我inputCapit\xc3\xa1n到我最喜欢的编辑器中,在文件f2中。 然后: >>> open('f1').read() 'Capit\xc3\xa1n\n' >>> open('f2').read() 'Capit\\xc3\\xa1n\n' >>> open('f1').read().decode('utf8') u'Capit\xe1n\n' >>> open('f2').read().decode('utf8') u'Capit\\xc3\\xa1n\n' 我在这里不了解什么? 显然有一些重要的魔法(或者说是有意义的)我失踪了。 一个人input到文本文件中以获得正确的转换? 我真的没有在这里讨论什么,UTF-8的代表性是什么,如果你真的不能让Python认出它,当它来自外部。 也许我应该只是JSON转储string,并使用它,因为它有一个asciiable表示! […]

在Java中从类path加载资源的URL

在Java中,您可以使用相同的API但使用不同的URL协议来加载各种资源: file:///tmp.txt http://127.0.0.1:8080/a.properties jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class 这很好地解耦了需要资源的应用程序的实际资源加载,由于URL只是一个string,所以资源加载也很容易configuration。 有使用当前类加载器加载资源的协议吗? 这与Jar协议类似,只是我不需要知道资源来自哪个jar文件或类文件夹。 当然,我可以使用Class.getResourceAsStream("a.xml")来做到这一点,但这需要我使用不同的API,从而改变现有的代码。 我希望能够在所有可以通过更新属性文件来指定资源URL的地方使用它。