目前我正在尝试学习Zend Framework,因此我买了"Zend Framework in Action"这本书.
在第3章中,介绍了基本模型和控制器以及它们的单元测试.基本控制器如下所示:
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->title = 'Welcome';
$placesFinder = new Places();
$this->view->places = $placesFinder->fetchLatest();
}
}
Run Code Online (Sandbox Code Playgroud)
Places是从数据库中获取最新位置的模型类.什么错误我在这里:我应该如何测试IndexController在隔离?由于对Places类的引用是"硬编码",我无法注入任何存根或模拟IndexController.
我宁愿拥有的是这样的:
class IndexController extends Zend_Controller_Action
{
private $placesFinder;
// Here I can inject anything: mock, stub, the real instance
public function setPlacesFinder($places)
{
$this->placesFinder = $places;
}
public function indexAction()
{
$this->view->title = 'Welcome';
$this->view->places = $this->placesFinder->fetchLatest();
}
}
Run Code Online (Sandbox Code Playgroud)
我发布的第一个代码示例绝对不是单元测试友好的,因为IndexController不能单独测试.第二个好多了.现在我只需要一些方法将模型实例注入控制器对象.
我知道Zend …
在最后几天,我和riak玩了一下.我认为初始设置比较容易.现在我有一个3节点集群,所有节点都在同一个vm上运行,以便进行测试.
我承认,我的虚拟机的硬件设置非常降级(1个CPU,512 MB RAM),但我仍然对riak的缓慢性能感到非常惊讶.
地图减少
玩一点地图减少我在一个桶中有大约2000个对象,每个大约1k - 2k的大小为json.我使用了这个地图功能:
function(value, keyData, arg) {
var data = Riak.mapValuesJson(value)[0];
if (data.displayname.indexOf("max") !== -1) return [data];
return [];
}
Run Code Online (Sandbox Code Playgroud)
仅执行http请求返回其结果花了2秒多,不计算我的客户端代码从json反序列化结果所花费的时间.删除3个节点中的2个似乎稍微将性能提升到略低于2秒,但这对我来说似乎仍然很慢.
这是预期的吗?对象的字节大小并不大,一个桶中的2000个对象也不是那么多.
插入
批量插入大约60,000个与上面相同大小的对象花了相当长的时间,实际上并没有真正起作用.
我在riak中插入对象的脚本在大约40.000左右死亡,并说它无法连接到riak节点.在riak日志中,我发现了一条错误消息,表明该节点内存耗尽而死亡.
题
这真是我在riak的第一枪,所以我肯定有机会搞砸了.
如果有更多riak经验的人可以帮我解决其中的一些问题,那对我来说真的会有很大的帮助.
我的代码看起来像这样:
curl = curl_easy_init();
if (curl) {
headers = curl_slist_append(headers, client_id_header);
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_URL, "127.0.0.1/test.php");
curl_easy_setopt(curl, CURLOPT_PUT, 1L);
res = curl_easy_perform(curl);
res = curl_easy_send(curl, json_struct, strlen(json_struct), &io_len);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
Run Code Online (Sandbox Code Playgroud)
哪个不起作用,该程序永远挂起.
在test.php中,这些是我得到的请求标头:
array(6) {
["Host"]=>
string(9) "127.0.0.1"
["Accept"]=>
string(3) "*/*"
["Transfer-Encoding"]=>
string(7) "chunked"
["X-ClientId"]=>
string(36) "php_..."
["Content-Type"]=>
string(16) "application/json"
["Expect"]=>
string(12) "100-continue"
}
Run Code Online (Sandbox Code Playgroud)
但是身体是空的,意味着没有与请求一起发送的json数据.
我想用libcurl做的事实上就是这些命令行脚本:
curl -X PUT -H "Content-Type: application/json" -d '... some json ...' 127.0.0.1/test.php
Run Code Online (Sandbox Code Playgroud) 唉,今天是愚蠢问题的日子,我是个白痴.
我有一个应用程序,它创建一个zip文件,其中包含某个目录中的一些JPEG.我使用此代码以便:
using (var outStream = new FileStream("Out2.zip", FileMode.Create))
{
using (var zipStream = new ZipOutputStream(outStream))
{
foreach (string pathname in pathnames)
{
byte[] buffer = File.ReadAllBytes(pathname);
ZipEntry entry = new ZipEntry(Path.GetFileName(pathname));
entry.DateTime = now;
zipStream.PutNextEntry(entry);
zipStream.Write(buffer, 0, buffer.Length);
}
}
}
Run Code Online (Sandbox Code Playgroud)
一切都在Windows下运行良好,当我打开文件,例如使用WinRAR,文件被提取.但是当我尝试在Mac OS X上解压缩我的存档时,它只会创建一个.cpgz文件.相当无用.
.zip在Windows和Mac OS X上提取在Windows上使用相同文件手动创建的普通文件,没有任何问题.
我在互联网上找到了上面的代码,所以我不确定整件事情是否正确.我想知道是否需要使用zipStream.Write()才能直接写入流?
我之前没有使用过Salesforce API,所以我对如何连接到salesforce服务感到困惑.
到目前为止,我知道我必须为我的帐户生成一个wsdl文件,或者更确切地说是我客户的帐户(步骤1).到现在为止还挺好.
但是现在Quickstart(http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_quickstart_steps.htm)说了一些关于"将WSDL文件导入您的开发平台"的内容(步骤2).
如何将wsdl文件导入Visual Studio 2008?我找不到快速入门中提到的"添加Web引用"选项.
如果我只需要使用WSDL,可以从salesforce网站(http://wiki.developerforce.com/index.php/Salesforce_Dotnet_API)下载Salesforce Dotnet API包吗?
在开发使用salesforce API的应用程序时,是否有任何问题需要注意?
我正在尝试使用httrack(http://www.httrack.com/)来下载单个页面,而不是整个站点.因此,例如,当使用httrack下载www.google.com时,它应该只下载www.google.com下的html以及所有样式表,图片和javascript,而不是关注images.google.com的任何链接, labs.google.com或www.google.com/subdir/等
我尝试了这个-w选项,但没有任何区别.
什么是正确的命令?
编辑
我试过用httrack "http://www.google.com/" -O "./www.google.com" "http://www.google.com/" -v -s0 --depth=1但不会复制任何图像.
我基本上想要的只是下载该域的索引文件以及所有资产,而不是任何外部或内部链接的内容.
是否有(简单)方式来自定义通过fbml实现的facebook按钮的外观?
我很确定我在某个地方看到了这个,但我不记得在哪里,我无法找到任何关于此的文档.
嗯,可能是一个非常简单的问题,但我只是注意到我不知道如何将DateTime.Now转换为YYMMDD格式,所以例如今天(2009年11月5日)将是"091105".
我知道DateTime.Now.ToString()有重载你可以传入一个格式字符串,但我没有找到正确的格式,例如短年格式(09而不是2009).
目前我正在一个功能分支工作,很快将合并回主人.我最近尝试过这个并且有一些合并冲突,我必须手动修复.
那么,是否有可能告诉git始终使用合并分支中的版本以避免事先合并冲突?在这种情况下,我手动修复了冲突,但总是选择合并分支中的版本,这样可以省去一些繁琐的工作.
我的CSS文件实际上是一个PHP文件,它与内容类型一起提供,text/css以便我可以在该文件中使用PHP变量.style.php看起来像这样:
<?php
header('Content-Type: text/css');
$bgColor = '#000';
?>
body { background:<?php print $bgColor; ?>; }
Run Code Online (Sandbox Code Playgroud)
它按预期工作,但如果浏览器缓存动态创建的css文件,我有点担心.
在查看firebug中的请求时,我觉得style.php每次重新加载页面时浏览器都会重新加载.
我已经尝试添加这些缓存标头:
header('Cache-control: must-revalidate');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 60 * 60 * 24) . ' GMT');
Run Code Online (Sandbox Code Playgroud)
但没有运气.每次加载页面时仍会加载该文件.为了强制浏览器在一定时间内缓存文件,有哪些适当的标题?