对于许多Web应用程序,我需要像Capistrano这样的东西来自动部署.我知道Capistrano可以用来部署非ruby应用程序,但我不熟悉Ruby,所以我希望编写部署配置可能有点痛苦.
所以我想知道,有任何替代Capistrano写的任何一个Lua Perl?
另外,忘了提一下,运行部署的平台是Windows(XP).所以卡皮斯特拉诺已经或多或少已经无从谈起.虽然我发现它可以与Git for Windows附带的MINGW32 Bash shell一起运行.
我正在维护的PHP应用程序使用带有Ecry_MODE加密的Rijndael_256和mcrypt.有趣的是,密钥不是256位长,而是只有160.根据mcrypt_encrypt
文档,密钥用\ 0填充以获得所需的大小,如果它太小.
用于加密数据的密钥.如果它小于所需的密钥大小,则用'\ 0'填充.最好不要将ASCII字符串用于键.
这似乎发生在mcrypt.c中第1186行的开头附近,并在第1213行修改了密钥.
因此,假设我们已经得到$key = 'abcdefghijkm';
了太短的内容,但PHP的mcrypt实现确保在使用RIJNDAEL_256时它扩展到32个字符(或256位).最终的关键是什么样的?
我问这个是因为正在构建另一个使用相同加密数据的应用程序,但是使用另一种语言.Perl准确而且我正在使用Crypto::Rijndael
.对于给定的示例密钥,Crypto::Rijndael
为了能够再次解密数据,我必须提供哪些准确的密钥(或其他任何内容)?
更新
使用Perl,我可以生成一个键为0的填充pack('a32', 'my secret key');
(或Z32
),length()
将报告32并且Crypt::Rijndael
模块接受密钥.看看PHP的mcrypt的来源,这应该是生成的密钥(\ 0填充),但它根本不会接受它.
从理论上讲,PHP pack('a32', 'my secret key');
应该会产生PHP的mcrypt生成的相同\ 0填充键,但事实并非如此.
我非常接近只是用一把新密钥加密所有东西.这花费了太多时间.
一段时间以来,我一直在将Subversion存储库镜像到Git存储库.哪个一直很好.但是,由于虚拟服务器崩溃而没有备份,我必须再次设置镜像.我需要跟踪的存储库大约有1200次提交,并且包含很多文件(这是Git镜像的主要原因,因为它可以更快地检出repo的副本).
我现在需要做的是让我刚刚克隆的Git镜像再次跟踪Subversion存储库.我添加新的远程引用没有问题,但似乎无法弄清楚如何能够再次将svn提交引入Git分支.
我似乎收到的一个错误是Unable to determine upstream SVN information from working tree history
.
如何在现有的Git分支上重新启用镜像Subversion存储库,该分支仅在Subversion存储库的几个提交后面?
在下面的代码中,我正在对Bucket Sort的实现进行基准测试.
该bucketsort
函数使用结果_bucketsort
但将其展平为单个列表.令我惊讶的是,这个过程(Map.toList
)需要花费很多时间.
module Main where
import System.Random
import Criterion.Main
import qualified Data.List as List
import qualified Data.Map as Map
import Data.Maybe
insert :: (Ord a) => a -> [a] -> [a]
insert x [] = [x]
insert x (y:xs)
| x <= y = x:y:xs
| otherwise = y : insert x xs
bucketsort :: (Integral a) => [a] -> [a]
bucketsort xs = List.concatMap (snd) . Map.toList $ _bucketsort xs Map.empty
_bucketsort …
Run Code Online (Sandbox Code Playgroud) 我是JS的新手,并且很难阅读以下JS代码.
该函数的第一个参数是PHP脚本的url,第二个是字符串.
令我困惑的是如何在行后读取代码:self.xmlHttpReq.open('POST',strURL,true);
这之后会发生什么?我应该看看这行代码?剧本?打开后会发生什么?
function check_detail(strURL, pids)
{
var xmlHttpReq = false;
var self = this;
// Mozilla/Safari
if (window.XMLHttpRequest) {
self.xmlHttpReq = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
self.xmlHttpReq.open('POST', strURL, true);
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
self.xmlHttpReq.onreadystatechange = function()
{
if (self.xmlHttpReq.readyState == 4)
updatepage(self.xmlHttpReq.responseText, pids);
}
self.xmlHttpReq.send(getquery(pids));
}
Run Code Online (Sandbox Code Playgroud) benchmarking ×1
bucket-sort ×1
capistrano ×1
git ×1
git-svn ×1
haskell ×1
javascript ×1
lua ×1
mcrypt ×1
perl ×1
php ×1
rijndael ×1
svn ×1