实现可以跨多个线程修改但具有最少数量的锁的Hash的最佳方法是什么.出于这个问题的目的,你可以假设哈希将是重读的.它必须在所有Ruby实现中都是线程安全的,包括以真正同步方式运行的实现,例如JRuby,并且它必须用纯Ruby编写(不允许使用C或Java).
随意提交始终锁定的天真解决方案,但这不太可能是最佳解决方案.优雅的要点,但较小的锁定可能性胜过较小的代码.
我在编写一些单元测试时遇到了一些困难,无法测试我创建的自定义ModelBinder.我正在尝试单元测试的ModelBinder是我在这里发布的JsonDictionaryModelBinder .
我遇到的问题是使用Moq进行Mocking所有设置.由于HttpContextBase没有被正确模拟,我一直得到Null Exceptions.我认为.
有人能帮我搞清楚我不做的事情吗?
这是我试图编写的单元测试样本不起作用:
[TestMethod()]
public void BindModelTest()
{
JsonDictionaryModelBinder target = new JsonDictionaryModelBinder();
NameValueCollection nameValueCollection = new NameValueCollection() {
{"First", "1"},
{"Second", "2"},
{"Name", "Chris"},
{"jsonValues", "{id: 200, name: 'Chris'}"}
};
HttpContextBase httpContext = MockHelper.FakeHttpContext(HttpVerbs.Post, nameValueCollection);
ControllerContext controllerContext =
new ControllerContext(new RequestContext(httpContext, new RouteData()), new Mock<Controller>().Object);
Predicate<string> predicate = propertyName => (propertyName == "jsonValues");
ModelBindingContext bindingContext = new ModelBindingContext()
{
Model = null,
ModelType = typeof(JsonDictionary),
ModelState = new ModelStateDictionary(),
PropertyFilter = predicate,
ValueProvider = …Run Code Online (Sandbox Code Playgroud) 我想向应用商店提交应用.
该应用程序一直以一个名字开发 - "猴子".但是,现在需要将其改为"猿".
我只需要将Bundle显示名称更改为"Apes"吗?如果我这样做,它在模拟器和设备中显示为"Apes",但产品仍称为Monkeys.app.我应该担心它还有旧名吗?
如果我更改"可执行文件",则表示构建失败.
我正在实现一个Rails应用程序,用户可以在其中存储代码片段供以后参考.我打算使用Markdown进行文本输入,并且可能会使用wmd markdown编辑器.(Stackoverflow使用的那个.)
我有点担心人们在编辑框中输入代码的想法.根据我的理解,存在进入SQL的危险,这可能会搞砸我的数据库,或者输入稍后会运行的JavaScript并且会恶作剧.
通常,Rails具有防范此功能的功能,但我是否处于特殊情况,因为我的用户将被鼓励输入代码片段?
我应该注意哪些额外的预防措施?
我有一个CLLocation对象数组,我希望能够比较它们以获得起始CLLocation对象的距离.数学是直接的,但我很好奇是否有一个方便的排序描述符去做这个?我应该避免使用NSSortDescriptor并编写自定义比较方法+冒泡排序吗?我通常比较最多20个对象,所以它不需要超级高效.
Subversion:是否有可能在不推送它们的情况下提交本地修订,并在以后推送它们 - 或者缺少这个功能为什么它被称为"集中式"?
提前谢谢你们所有人.
我目前正在调整/改进我为我公司从头开始编写的MVC框架.它相对较新,所以肯定是不完整的.我需要将错误处理合并到框架中(一切都应该有访问错误处理),它应该能够处理不同类型和级别的错误(用户错误和框架错误).我的问题是这样做的最佳方法和最佳机制是什么?我知道PHP 5的异常处理和PEAR的不同错误机制,但我从来没有使用过它们.我需要一些高效且易于使用的东西.
创建自己的错误处理或使用已经制作的东西会更好吗?当然欢迎任何建议,提示,问题.我最终会认为以某种方式注册错误处理程序与PHP的甜蜜,所以我只需要抛出错误,然后决定如何处理它以及是否继续.
编辑:对不起,我应该提供更多有关我想记录的错误类型的详细信息.我希望记录2种主要类型的错误:用户和框架.
对于用户错误,我的意思是坏网址(404),非法访问受限制的页面等等.我知道我可以重新路由到主页或只是脱口而出一个JavaScript对话框,但我希望能够真正处理这些错误并在它们变得明显时添加更多用户错误.
通过框架错误,我的意思是无法连接到数据库,有人在事故中删除了数据库表或以某种方式删除了文件等.
此外,我将负责开发和实时服务器处理.
我有一些通过Runtime.getRuntime.exec(String)运行命令的代码,它可以在 Windows 上运行。当我将代码移至 Linux 时,它崩溃了,修复它的唯一方法是切换到exec(String[])版本。如果我这样保留,代码在 Windows 和 Linux 上的工作方式是否相同,或者我应该在 Windows 上使用 exec(String) 而在 Linux 上使用 exec(String[]) ?
所以我想为表创建一个切换按钮,在那里我可以进行异步调用来更新数据库记录(启用/禁用).
img http://i41.tinypic.com/os4vua.jpg
经过一些试验和错误,我已经设法让它工作 - 但感觉必须有一个更优雅的方式.
这是我在控制器中的代码:
public ActionResult ToggleEnabled(int id)
{
if (Request.IsAjaxRequest())
{
var p = this.PageRepository.GetPage(id);
p.Enabled = p.Enabled != true;
this.PageRepository.Edit(p);
return p.Enabled ? Content("<img src='/Content/icons/tick.png' border=0 />") : Content("<img src='/Content/icons/tick_grey.png' border=0 />");
}
return Content("Error");
}
Run Code Online (Sandbox Code Playgroud)
而观点......:
<% var img = Model.Enabled ? "tick.png" : "tick_grey.png"; %>
<% foreach (var item in Model)
{ %>
...
<td align="center">
<%=Ajax.ActionLink("[replacethis]",
"ToggleEnabled",
new { id = Model.ID },
new AjaxOptions { UpdateTargetId = "toggleimage" + …Run Code Online (Sandbox Code Playgroud) 业务对象是否应包含对其他对象的引用(如在id字段中引用另一个数据库记录),或者它是否应包含实际对象的实例.
例如:
public class Company
{
public int Id { get; set; }
public CompanyStatus Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
要么
public class Company
{
public int Id { get; set; }
public int Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×2
iphone ×2
ruby ×2
app-store ×1
asp.net-ajax ×1
c# ×1
cocoa ×1
commit ×1
concurrency ×1
geolocation ×1
hash ×1
java ×1
locking ×1
modelbinders ×1
moq ×1
php ×1
process ×1
security ×1
sorting ×1
svn ×1
unit-testing ×1