我正在使用DynamoDB本地进行单元测试.这不错,但有一些缺点.特别:
我想要做的就是将DynamoDB本地jar和它所依赖的其他jar放在我的test/resources目录中(我正在编写Java).然后在每次测试之前,我会启动它,运行-inMemory
,并且在测试之后我会停止它.这样,任何下拉git repo的人都会获得运行测试所需的所有内容的副本,并且每个测试都独立于其他测试.
我已经找到了一种方法来完成这项工作,但这很难看,所以我正在寻找替代方案.我的解决方案是将一个DynamoDB本地内容的.zip文件放在test/resources中,然后在@Before方法中,我将它解压缩到一些临时目录并启动一个新的java进程来执行它.这是有效的,但它很难看并且有一些缺点:
似乎应该有一个更简单的方法.毕竟,DynamoDB Local只是Java代码.我不能以某种方式要求JVM自行分配并查看资源以构建类路径吗?或者,更好的是,我不能只main
从其他线程调用DynamoDb Local 的方法,所以这一切都发生在一个进程中?有任何想法吗?
PS:我知道Alternator,但它似乎还有其他缺点,所以如果我可以让它发挥作用,我倾向于坚持亚马逊的支持解决方案.
我确定我错过了一些非常明显的东西,但我无法弄明白.当提交登录表单时,我传递给LocalStrategy构造函数的函数不会被调用.
码:
var express = require('express');
var http = require('http');
var path = require('path');
var swig = require('swig');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
passport.serializeUser(function(user, done) {
console.log('Serialize user called.');
done(null, user.name);
});
passport.deserializeUser(function(id, done) {
console.log('Deserialize user called.');
return done(null, {name: 'Oliver'});
});
passport.use(new LocalStrategy(
function(username, password, done) {
console.log('local strategy called with: %s', username);
return done(null, {name: username});
}));
var app = express();
app.set('port', process.env.PORT || 3000);
app.set('view engine', 'swig');
app.set('views', __dirname + '/views');
app.use(express.favicon());
app.use(express.logger('dev')); …
Run Code Online (Sandbox Code Playgroud) 考虑以下:
template <class T> void Foo(const T* x) {
std::cout << "I am the pointer overload" << std::endl;
}
template <class T> void Foo(const T& x) {
std::cout << "I am the reference overload" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
鉴于上述情况,我希望以下内容可以调用指针重载:
int* x;
Foo(x);
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.这对我来说似乎很奇怪,因为它const T*
可以清楚地绑定到非const T
和const T&
can,但是指针变体似乎是"更适合".
对于我的应用程序,我希望调用指针变体.我可以通过额外的专业化来完成这项工作:
template <class T> void Foo(T* x) {
const T* const_x = x;
Foo(const_x);
}
Run Code Online (Sandbox Code Playgroud)
但那感到错误和不必要.有没有更好的办法?我不理解的是什么(除了标准的xyz部分说这是这样的)?
我们有一个Gradle构建,其中包含buildSrc
一些自定义插件.这些插件适用于其他插件.例如,我们的插件适用com.android.tools.build:gradle
.对于在编译期间库需要在Gradle的类路径上的注释处理.所以,把它放在我们的主要build.gradle
工作中:
buildscript {
repositories {
google()
}
dependencies {
classpath "com.android.tools.build:gradle:$gToolsVersion"
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这意味着对于用户应用此插件,他们必须(1)应用我们的插件和(2)添加该buildscript
样板.似乎这不应该是必要的.我们也可以project.buildscript
在我们的插件中添加一个块,但这似乎也是不必要的,由于这个bug是有问题的:https://developer.android.com/studio/build/gradle-plugin-3-0-0.html?utm_source = android-studio#known_issues.
我将com.android.tools.build:gradle
依赖项添加buildSrc/build.gradle
为runtime
依赖项.这似乎应该工作:我认为这告诉Gradle为了运行我的插件,库(及其依赖项)需要在类路径上.但是,gradle buildEnvironment
(以及我们的构建失败的事实)清楚地表明情况并非如此.
所以,问题:
runtime
指定的依赖项buildSrc/build.gradle
和常规build.gradle中块中classpath
指定的依赖项之间的区别是什么buildscript
?buildSrc
,并没有要还添加buildscript
块到他们build.gradle
?我有一个数据帧的熊猫3列,target
,pred
,和conf_bin
.如果我运行了一个groupby(by='conf_bin').apply(...)
我的应用函数,则会使用空DataFrame
s来调用未出现在conf_bin
列中的值.这怎么可能?
细节
DataFrame看起来像这样:
target pred conf_bin
0 5 6 0.50
1 4 4 0.60
2 4 4 0.50
3 4 3 0.50
4 4 5 0.50
5 5 5 0.55
6 5 5 0.55
7 5 5 0.55
Run Code Online (Sandbox Code Playgroud)
显然conf_bin
是一个数值区域,其值在该范围内np.arange(0, 1, 0.05)
.但是,并非所有值都存在于数据中:
In [224]: grp = tp.groupby(by='conf_bin')
In [225]: grp.groups.keys()
Out[225]: dict_keys([0.5, 0.60000000000000009, 0.35000000000000003, 0.75, 0.85000000000000009, 0.65000000000000002, 0.55000000000000004, 0.80000000000000004, 0.20000000000000001, 0.45000000000000001, 0.40000000000000002, 0.30000000000000004, 0.70000000000000007, 0.25]) …
Run Code Online (Sandbox Code Playgroud) 我有一个项目 P1,它创建一个 jar。该项目有一个父 POM,P1-PARENT。P1-Parent 包括以下内容:
<dependencyManagement>
<!-- Kafka uses Zookeeper 3.3.4, but Curator requires 3.4.5. To resolve
we specify 3.4.5 so all projects using either Kafka or Curator will
get the later version which is compatible with both projects. -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.8.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>2.2.0-incubating</version>
</dependency>
<!-- A bunch of other irrelevant stuff here -->
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)
这是有效的 - “mvn dependency:tree”的输出包括:
[INFO] +- org.apache.kafka:kafka_2.10:jar:0.8.0:compile
[INFO] | +- org.apache.zookeeper:zookeeper:jar:3.4.5:compile (version managed from 3.3.4) …
Run Code Online (Sandbox Code Playgroud) 我们有一个包含一些IMPORTED
静态库的多项目 cmake 设置。对于我们的一个可执行文件,我们需要强制链接其中一些IMPORTED
库中的所有符号,因此我们需要-Wl,-force_load
在该库的名称之前传递给编译器。请注意,这些导入的库之间存在依赖关系,因此需要在链接命令行中以正确的顺序放置它们。这些依赖项CMakeLists.txt
通过set_target_properties(fake_2 PROPERTIES INTERFACE_LINK_LIBRARIES ...)
.
我们使用的是相当标准的,target_link_libraries(lib_a PUBLIC -Wl,-force_load fake_4)
但事实证明 cmake 将其-Wl,-force_load
视为相当任意的链接器标志,如果您将其应用于多个库,例如:
target_link_libraries(lib_a PUBLIC -Wl,-force_load fake_4)
target_link_libraries(lib_a PUBLIC -Wl,-force_load fake_3)
Run Code Online (Sandbox Code Playgroud)
没有必要将这些链接器标志应用于fake_4
和fake_3
。在某些情况下,它会删除重复标志并将其仅应用于其中一个库。尝试解决这个问题
target_link_libraries(lib_a PUBLIC "-Wl,-force_load $<TARGET_PROPERTY:fake_4,IMPORTED_LOCATION>")
Run Code Online (Sandbox Code Playgroud)
导致链接器标志被放置在库之前,但是 cmake 无法识别导入的库是什么,因此它忽略了它们之间的依赖关系。
可以在此处找到展示这些问题的完整示例项目:https : //github.com/REVLUTION/cmake-example
注意:如果您想在那里看到一些评论,这是从cmake 讨论论坛移出的。
我有一个名为== elasticsearch
和serviceName == 的Kubernetes PetSet es
.它确实创建了pod,并且正如预期的那样,它们的名称elasticsearch-0
和elasticsearch-1
.但是,DNS似乎不起作用.elasticsearch-0.es
不解决(也不解决elasticsearch-0.default
).如果你查看生成的srv记录,它们似乎是随机的而不是可预测的:
# nslookup -type=srv elasticsearch
Server: 10.1.0.2
Address: 10.1.0.2#53
elasticsearch.default.svc.cluster.local service = 10 100 0 9627d60e.elasticsearch.default.svc.cluster.local.
Run Code Online (Sandbox Code Playgroud)
有人有主意吗?
细节
这是实际的PetSet和服务定义:
---
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
labels:
app: elasticsearch
spec:
ports:
- name: rest
port: 9200
- name: native
port: 9300
clusterIP: None
selector:
app: elasticsearch
---
apiVersion: apps/v1alpha1
kind: PetSet
metadata:
name: elasticsearch
spec:
serviceName: "es"
replicas: 2
template:
metadata:
labels:
app: elasticsearch …
Run Code Online (Sandbox Code Playgroud) 假设我的代码如下:
struct Foo {
Foo() : x(10) {}
int x_;
}
void WillRunInThread(const Foo* f) {
cout << "f.x_ is: " << f->x_ << endl;
}
struct Baz {
Baz() : foo_(), t_(&WillRunInThread, &foo_) {}
Foo foo_;
std::thread t_;
}
int main(int argc, char** argv) {
Baz b;
b.t_.join();
}
Run Code Online (Sandbox Code Playgroud)
我保证WillRunInThread
会打印 10 个吗?我已经看到一些 StackOverflow 答案表明这是安全的。但是,我不确定情况是否如此。具体来说,我认为存在以下两种可能性,这两种可能性都会产生问题:
Foo.x_
可以在t_
启动时存储在寄存器中。foo_
将出现前被修建t_
,这只是在同一个线程。例如,编译器可以自由地重新排序foo_.x_
until after的初始化t_
。我没有看到std::thread
的构造函数作为任何类型的内存栅栏来防止上述两个问题的迹象。但是,我经常看到像上面这样的代码,这让我觉得我错过了一些东西。任何澄清将不胜感激。
我刚刚开始使用Gradle,几乎肯定会遗漏一些明显的东西.我的系统默认安装了Java 7,但我希望我的所有Gradle项目默认使用Java 8.所以,我创建了一个~/gradle.properties
文件,并在其中添加以下内容:
$ cat ~/gradle.properties
org.gradle.java.home = /usr/lib/jvm/java-8-openjdk-amd64
Run Code Online (Sandbox Code Playgroud)
但这似乎并不值得尊敬.首先,如果我尝试构建我的项目,我得到:
Execution failed for task ':compileJava'.
> invalid source release: 1.8
Run Code Online (Sandbox Code Playgroud)
另外,gradle --version
给出:
$ gradle --version
------------------------------------------------------------
Gradle 1.5
------------------------------------------------------------
Gradle build time: Wednesday, October 8, 2014 8:21:39 AM UTC
Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.9.4 compiled on October 7 2014
Ivy: non official version
JVM: 1.7.0_79 (Oracle Corporation 24.79-b02)
OS: Linux 3.16.0-4-amd64 amd64
Run Code Online (Sandbox Code Playgroud)
但是,如果我复制~/gradle.properties
到我的项目目录(带有build.gradle文件的目录)或者如果我运行JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 gradle assemble
它.因此,我的gradle.properties文件中没有语法错误或任何内容,并且JDK路径是正确的.出于某种原因,如果属性文件位于我的主目录中,则会忽略它们.
请注意,我的项目目录中没有gradle.properties,我也尝试将文件放入~/.gradle/gradle.properties
.我还做了一堆Google和StackOverflow搜索,但是找不到这个看似显而易见的问题的答案.
c++ ×3
gradle ×2
java ×2
c++11 ×1
cmake ×1
dependencies ×1
express ×1
junit ×1
kube-dns ×1
kubernetes ×1
linker ×1
maven ×1
maven-3 ×1
node.js ×1
pandas ×1
passport.js ×1
python ×1
templates ×1
unit-testing ×1