我在我的macbook pro(OSX 10.8.4)上创建了一个新用户'dad'.'爸爸'是管理员.我已成功将自制软件安装为'爸爸'.它以前是由其他用户安装的.我做了:
sudo chown -R dad /usr/local/
cd /usr/local/
chmod -R 777 *
Run Code Online (Sandbox Code Playgroud)
但任何安装尝试,例如:
brew install nmap
Run Code Online (Sandbox Code Playgroud)
得到:
Error: Permission denied - /Library/Caches/Homebrew/Formula/nmap.brewing
Run Code Online (Sandbox Code Playgroud)
似乎nmap.brewing不存在:
dad$ ls -l /usr/local/Library/Caches/Homebrew/Formula/nmap.brewing
ls: /usr/local/Library/Caches/Homebrew/Formula/nmap.brewing: No such file or directory
dad$ ls -l /Library/Caches/Homebrew/Formula/nmap.brewing
ls: /Library/Caches/Homebrew/Formula/nmap.brewing: No such file or directory
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我目前对Castle Windsor注册的理解是,只能通过在根组件上调用Resolve来验证注册.但是,由于windsor的组件模型知道每个组件的依赖关系,因此应该可以测试是否可以满足所有依赖关系而无需实际实例化任何内容.想要执行此操作的主要原因是要进行单元测试以进行注册,这不需要我在启动时调用调用外部资源的组件.
例如.我有一个依赖于IChild的类Root:
public class Root : IRoot
{
private IChild child;
public Root(IChild child)
{
this.child = child;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将Root注册为IRoot,但不注册IChild.当我打电话给这样的决心:
var container = new WindsorContainer().Register(
Component.For<IRoot>().ImplementedBy<Root>()
);
container.Resolve<IRoot>();
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
MyNamespace.Root is waiting for the following dependencies:
Services:
- MyNamespace.IChild which was not registered.
Run Code Online (Sandbox Code Playgroud)
是否有类似的东西:
container.TestResolve<IRoot>();
Run Code Online (Sandbox Code Playgroud)
这将走依赖图并检查是否可以满足所有依赖关系,但实际上并没有实例化任何依赖关系?
这是一个有趣的图书馆作家的困境.在我的库(在我的案例中是EasyNetQ)中,我正在分配线程本地资源.因此,当客户端创建新线程然后调用我的库中的某些方法时,将创建新资源.在EasyNetQ的情况下,当客户端在新线程上调用"发布"时,会创建到RabbitMQ服务器的新通道.我希望能够检测客户端线程何时退出,以便我可以清理资源(通道).
我想出的唯一方法是创建一个新的"观察者"线程,它只是阻止对客户端线程的Join调用.这是一个简单的演示:
首先是我的'图书馆'.它抓取客户端线程,然后创建一个阻止'Join'的新线程:
public class Library
{
public void StartSomething()
{
Console.WriteLine("Library says: StartSomething called");
var clientThread = Thread.CurrentThread;
var exitMonitorThread = new Thread(() =>
{
clientThread.Join();
Console.WriteLine("Libaray says: Client thread existed");
});
exitMonitorThread.Start();
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个使用我的库的客户端.它创建一个新线程,然后调用我的库的StartSomething方法:
public class Client
{
private readonly Library library;
public Client(Library library)
{
this.library = library;
}
public void DoWorkInAThread()
{
var thread = new Thread(() =>
{
library.StartSomething();
Thread.Sleep(10);
Console.WriteLine("Client thread says: I'm done");
});
thread.Start();
}
}
Run Code Online (Sandbox Code Playgroud)
当我像这样运行客户端时:
var client = new …Run Code Online (Sandbox Code Playgroud) 通常,要从字节流中读取字符,请使用StreamReader.在这个例子中,我正在从无限流中读取由'\ r'分隔的记录.
using(var reader = new StreamReader(stream, Encoding.UTF8))
{
var messageBuilder = new StringBuilder();
var nextChar = 'x';
while (reader.Peek() >= 0)
{
nextChar = (char)reader.Read()
messageBuilder.Append(nextChar);
if (nextChar == '\r')
{
ProcessBuffer(messageBuilder.ToString());
messageBuilder.Clear();
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,StreamReader的有一个小的内部缓冲区,因此,如果等待(在这种情况下,"\ r")分隔符的"记录结束"的代码它必须等待,直到StreamReader的内部缓冲区被刷新(通常是因为更多的字节已经到了).
此替代实现适用于单字节UTF-8字符,但在多字节字符上将失败.
int byteAsInt = 0;
var messageBuilder = new StringBuilder();
while ((byteAsInt = stream.ReadByte()) != -1)
{
var nextChar = Encoding.UTF8.GetChars(new[]{(byte) byteAsInt});
Console.Write(nextChar[0]);
messageBuilder.Append(nextChar);
if (nextChar[0] == '\r')
{
ProcessBuffer(messageBuilder.ToString());
messageBuilder.Clear();
}
}
Run Code Online (Sandbox Code Playgroud)
如何修改此代码以使其适用于多字节字符?
我正在尝试让我的cygwin git安装与kdiff3一起工作.
我跟随Noam Lewis的指示:http://noamlewis.wordpress.com/2011/03/22/how-to-use-kdiff3-as-a-difftool-mergetool-with-cygwin-git/
但它不起作用:(
运行
git mergetool -t kdiff3
Run Code Online (Sandbox Code Playgroud)
给出这个结果:
Normal merge conflict for ...
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (kdiff3):
The merge tool kdiff3 is not available as '~/kdiff3.sh'
Run Code Online (Sandbox Code Playgroud)
但是,跑步
~/kdiff3.sh
Run Code Online (Sandbox Code Playgroud)
按预期打开kdiff3.
这是我的.gitconfig:
[diff]
tool = kdiff3
[merge]
tool = kdiff3
[mergetool "kdiff3"]
path = ~/kdiff3.sh
keepBackup = false
trustExitCode = false
Run Code Online (Sandbox Code Playgroud)
kdiff3.sh
#!/bin/sh
RESULT=""
for arg
do
if [[ "" != "$arg" ]] && [[ -e …Run Code Online (Sandbox Code Playgroud)