背景 我的问题似乎很简单,但它变得非常复杂。 基本上,我真的很厌倦了手动维护我的服务器(尖叫在后台) ,我决定是时候find一种方法,使服务器pipe理员更宜居。 那时候我find了Ansible。 很棒吧? 当然,我打算让自动化的东西制作bash脚本(大声尖叫) 。 有什么问题? 我有很多的麻烦,搞清楚我的个人剧本会运行什么东西。 我也需要能够指定哪些用户将运行特定的任务。 以下是一些具体的用例: 克隆回购作为另一个用户: 我的目的是,它运行我的node.js webapp从另一个用户,我们会叫bill (这只能使用sudo来运行我启动节点服务器的脚本,而不是根或我的用户,可以所有命令都使用sudo)。 要做到这一点,我需要能够让Ansible的git模块克隆我的git回购账单 。 我该怎么做? 了解Ansible将如何获得根源: 据我所知,你可以设置什么用户Ansible将连接到你正在维护的服务器,通过定义“用户”和剧本文件的开始。 下面是我不明白的:如果我通过我的用户名joe告诉它,并通过apt模块更新一个包,它将如何获得root权限? Sudo通常会提示我input密码,我宁愿保持这种状态(为了安全起见)。 最后的要求 我已经search了Ansible文档,做了一些(我认为是彻底的)search,一般只是试图找出自己的,但这些信息继续排除我。 对Ansible来说,我是一个非常新的人物,虽然这很简单,但是如果我能够明确地理解运行的用户,运行的用户以及我可以在不同的时间指定用户的方式,我将会受益匪浅。 提前谢谢你
我想出了一些其他网站的这个程序,并想到尝试它,这里的程序: #include <stdio.h> int main() { int a=10; switch(a) { case '1': printf("one"); break; case '2': printf("two"); break; defau4t: printf("none"); } return 0; } 令人惊讶的是,这个编译没有错误或警告。 这怎么可能? 关键字“default”没有错误吗? 有谁能解释这种行为吗?
我已经在Ubuntu 14.04上安装了docker,它告诉我安装成功。 然后我进入sudo docker version ,它返回 Client: Version: 1.9.1 API version: 1.21 Go version: go1.4.2 Git commit: a34a1d5 Built: Fri Nov 20 13:12:04 UTC 2015 OS/Arch: linux/amd64 Cannot connect to the Docker daemon. Is the docker daemon running on this host? 我进入sudo service docker status ,我得到了 docker start/running, process 8063 我尝试了sudo docker images和sudo docker info […]
我知道这个问题已经被问了几次了,但到目前为止我还没有find一个好的解决scheme。 我有一个与其他控制面板。 我想要在面板上的所有控件上画一条线 我遇到了三种types的解决scheme(非他们的工作方式我想要的): 获取桌面DC和绘图在屏幕上。 如果它们与表单重叠,这将使用其他应用程序。 覆盖面板的“CreateParams”: = protected override CreateParams CreateParams { get { CreateParams cp; cp = base.CreateParams; cp.Style &= ~0x04000000; //WS_CLIPSIBLINGS cp.Style &= ~0x02000000; //WS_CLIPCHILDREN return cp; } } //注意我也尝试禁用WS_CLIPSIBLINGS 然后绘制一行OnPaint()。 但是…由于面板的OnPaint在其中的控件的OnPaint之前被调用,因此内部控件的绘制只是简单地绘制在行的顶部。 我见过有人build议使用消息filter来监听WM_PAINT消息,并使用一个计时器,但我不认为这个解决scheme是“好的做法”或者是有效的。 你会怎么做 ? 确定内部控件在X毫秒后完成绘图,并将计时器设置为X毫秒? 该屏幕快照显示closures了WS_CLIPSIBLINGS和WS_CLIPCHILDREN的面板。 蓝线画在小组的OnPaint上,只是被文本框和标签画上。 红线只是涂在顶部,因为它不是从面板的OnPaint(它实际上是一个button被点击的结果) 第三:创build一个透明的图层并在该图层上绘制。 我已经创build了一个透明的控制使用: protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; […]
在我目前的一个项目中,我正在阅读一些文字,看三字组的频率。 在我第一次使用它的时候,我使用了三层深度的默认字典。 换句话说, topDict[word1][word2][word3]返回这些单词在文本中出现的次数, topDict[word1][word2]返回一个字典,其中所有单词出现在单词1和2之后。 这function正常,但它是非常内存密集型的。 在我最初的testing中,它使用了像存储三元组的文本文件20倍的内存,这似乎是一个过多的内存开销。 我的怀疑是,这些字典中的许多字段的创build数量比实际使用的字段多,所以我想用这种方式replace字典中更有记忆效率的其他字典。 我强烈希望有一个解决scheme,允许沿着字典的关键查找。 从我所了解的数据结构来看,使用类似红黑或AVL的平衡二叉search树可能是理想的,但我真的不希望自己实现它们。 如果可能的话,我宁愿坚持使用标准的Python库,但如果他们能够最好地工作,我绝对可以接受其他的select。 那么,有没有人对我有任何build议? 编辑添加: 感谢迄今的回应。 到目前为止,答案中的一些已经build议使用元组,当我将前两个单词压缩成元组时,这些元组并没有太多的用处。 我不愿意把这三个字作为一个关键字,因为我希望能够容易地查看前两个字的所有第三个字。 (即我想要的东西像topDict[word1, word2].keys() )的结果。 我正在玩的当前数据集是维基百科学校的最新版本。 例如,parsing第一千页的结果对于文本文件是11MB,其中每行是三个词并且所有的tab都是分开的。 以字典格式存储文本我现在使用大约185MB。 我知道指针和额外的开销会有一些额外的开销,但差异似乎过大。
首先,我已经阅读了关于协议和反变换的SO和博客的许多解释,并且非常感谢Eric Lippert在协变和逆变方面创作了这样一个系列。 然而,我有一个更具体的问题,我正试图让我的头稍微有点。 据我所知, 埃里克的解释是,协变和逆变都是描述转换的形容词。 协变变换是保持types顺序的变换,逆变换是逆转变换的变换。 我以这样的方式理解协变性,我认为大多数开发人员直观地理解。 //covariant operation Animal someAnimal = new Giraffe(); //assume returns Mammal, also covariant operation someAnimal = Mammal.GetSomeMammal(); 这里的返回操作是协变的,因为我们正在保持动物比哺乳动物或长颈鹿更大的尺寸。 在这一点上,大多数返回操作是协变的,逆变操作是没有意义的。 //if return operations were contravariant //the following would be illegal //as Mammal would need to be stored in something //equal to or less derived than Mammal //which would mean that […]
这似乎是一个非常简单的问题,但我无法弄清楚。 罪魁祸首似乎是WP7的默认风格。 当单击一个button时,它将背景颜色更改为白色,然后返回到该button的默认背景。 我有的问题是我想改变button的背景,当button被点击。 我找不到任何可能的方法来做到这一点。 我试过在代码中设置背景,但是什么都不做。 我认为它被默认的样式覆盖。 我已经尝试在Blend中使用属性更改行为,但具有完全相同的结果。 我已经尝试创build一个新的button的可视化状态,并设置点击,但这是一个小错误,并与我正在处理的button数量有很大的开销。 而且,它没有工作。 我可以在点击事件上设置其他button的背景,而不是被点击的button。 这是一个令人讨厌的路障! 我确信这是一种代码types的答案。 🙂
我必须编写一个Windows服务来处理某些机密数据(如PIN码,密码等)。 这些信息需要很短的时间:通常它们几乎立即被发送到智能卡读卡器。 让我们考虑这段代码: { std::string password = getPassword(); // Get the password from the user writePasswordToSmartCard(password); // Okay, here we don't need password anymore. // We set it all to '\0' so it doesn't stay in memory. std::fill(password.begin(), password.end(), '\0'); } 现在我关心的是编译器优化。 在这里编译器可能会检测到密码即将被删除,并且在这一点上改变它的值是无用的,只需要删除这个呼叫。 我不希望我的编译器关心未来未被引用的内存的价值。 我的担心是否合法? 我怎样才能确定这样一段代码不会被优化?
我创build的应该是一个非常简单的Win32 C ++应用程序,仅用于显示半透明的PNG。 该窗口不应该有任何铬,所有的不透明度应该在PNG本身进行控制。 我的问题是,当窗口下的内容改变时,窗口不会重新绘制,所以当应用程序最初启动时,PNG的透明区域与“窗口”下的内容“卡住”。 这里是我设置新窗口的那一行: hWnd = CreateWindowEx(WS_EX_TOPMOST, szWindowClass, szTitle, WS_POPUP, 0, height/2 – 20, 40, 102, NULL, NULL, hInstance, 0); 对于RegisterClassEx的调用,我有这样的背景设置: wcex.hbrBackground = (HBRUSH)0; 这是我的WM_PAINT消息处理程序: case WM_PAINT: { hdc = BeginPaint(hWnd, &ps); Gdiplus::Graphics graphics(hdc); graphics.DrawImage(*m_pBitmap, 0, 0); EndPaint(hWnd, &ps); break; } 有一件事要注意的是,应用程序总是停靠在屏幕的左侧,不移动。 但是,当用户打开,closures或移动窗口时,应用程序下面的内容可能会改变。 应用程序首次启动时,看起来很完美。 透明(和simi透明)的PNG部分显示完美。 但是,当应用程序下面的背景发生变化时,背景不会更新,只是应用程序首次启动时保持不变。 实际上,WM_PAINT(或WM_ERASEBKGND在后台更改时不会被调用)。 我已经玩了很长一段时间,已经接近100%的权利,但不是那样。 例如,我试图设置背景(HBRUSH)NULL_BRUSH,我试着处理WM_ERASEBKGND。 当它下面的内容改变时,可以做些什么来重新绘制窗口?
javax.inject注释是否可以直接替代com.google.inject? 所以,如果我用javax.inject中所有当前的guice / gin注释replace掉了我的应用程序,那么我的应用程序就可以编译并运行了。 首先,javax.inject覆盖了google.inject覆盖的所有基础吗?