症状是:主机具有适当的网络访问权限,但在容器内运行的程序无法解析DNS名称(在调查更多内容之前可能看起来"无法访问网络").
$ sudo docker run -ti mmoy/ubuntu-netutils /bin/bash
root@082bd4ead733:/# ping www.example.com
... nothing happens (timeout) ... ^C
root@082bd4ead733:/# host www.example.com
... nothing happens (timeout) ... ^C
Run Code Online (Sandbox Code Playgroud)
(docker图像mmoy/ubuntu-netutils是一个基于Ubuntu的简单图像ping,host包含在内,方便,因为网络坏了,我们不能使用apt install这些工具)
问题来自于docker自动将Google的公共DNS配置为容器内的DNS服务器:
root@082bd4ead733:/# cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8
nameserver 8.8.4.4
Run Code Online (Sandbox Code Playgroud)
这只适用于许多配置,但显然不适用于主机在网络上运行,其中Google的公共DNS被某些防火墙规则过滤.
发生这种情况的原因是:
/etc/resolve.conf是nameserver 127.0.1.1 …检查死链接的非常好的工具(例如指向404错误的链接)是wget --spider.但是,我有一个稍微不同的用例,我生成一个静态网站,并希望在上传之前检查损坏的链接.更确切地说,我想检查两者:
相关链接就像 <a href="some/file.pdf">file.pdf</a>
绝对链接,最有可能是外部网站<a href="http://example.com">example</a>.
我试过wget --spyder --force-html -i file-to-check.html,它读取本地文件,将其视为HTML并跟随每个链接.不幸的是,它无法处理本地HTML文件中的相对链接(错误输出Cannot resolve incomplete link some/file.pdf).我试过使用file://但wget不支持它.
目前,我有一个基于运行本地Web服务器python3 http.serve并通过HTTP检查本地文件的hack :
python3 -m http.server &
pid=$!
sleep .5
error=0
wget --spider -nd -nv -H -r -l 1 http://localhost:8000/index.html || error=$?
kill $pid
wait $pid
exit $error
Run Code Online (Sandbox Code Playgroud)
由于以下几个原因,我对此并不满意:
我需要这个sleep .5等待网络服务器准备好.如果没有它,脚本会失败,但我无法保证0.5秒就足够了.我更愿意wget在服务器准备就绪时启动命令.
相反,这kill $pid感觉很难看.
理想情况下,python3 -m http.server可以选择在服务器就绪时运行命令,并在命令完成后自行关闭.通过编写一些Python听起来可行,但我想知道是否存在更清晰的解决方案.
我错过了什么吗?有更好的解决方案吗?我wget在我的问题中提到它因为它几乎完全符合我的要求,但使用wget并不是我的要求(也不是python …
我有一个可以与Maven一起正常运行的JavaFX应用程序:
mvn compile
mvn exec:java # Launches the GUI
Run Code Online (Sandbox Code Playgroud)
这是在Ubuntu,使用openjdk-11-jdk,maven和openjfxUbuntu的软件包。
我想从Eclipse IDE(带有Eclipse的Eclipse)编译并运行该应用程序sudo snap install --classic eclipse。我安装了m2e(从Maven到Eclipse)插件,并使用导入了项目File -> Import -> Maven -> Existing Maven Project。对于非JavaFX项目,m2e插件可以通过Maven的Eclipse在Eclipse中配置项目pom.xml。不幸的是,在我的情况下,缺少了一些东西:类型检查可以正常工作并找到javafx.*类,但是当我尝试运行该应用程序时,在控制台中收到以下错误消息:
Error: JavaFX runtime components are missing, and are required to run this application
Run Code Online (Sandbox Code Playgroud)
一种解决方法是将该应用程序作为Maven应用程序(Run -> Run As -> Maven Build -> target=exec:java)运行,但我发现它不太方便且较慢,因此我正在寻找一种方法来使该应用程序直接在Eclipse中作为Java应用程序运行。
我找到了手动配置Eclipse的方法(下面作为答案发布),但是我仍然想知道是否有更好的方法,可以让Maven + m2e完全完成这项工作,即尽可能地配置所有内容pom.xml并拥有所有内容在Eclipse中“正常工作”。
这个问题可以用一个极简的例子重现pom.xml:
mvn compile
mvn exec:java # Launches the GUI
Run Code Online (Sandbox Code Playgroud)
以及任何使用JavaFX的应用程序,例如:
Error: …Run Code Online (Sandbox Code Playgroud) 我有一个使用 4 列缩进级别的文件,并假设一个制表字符对应于 8 个空格,如下所示(我.用来表示一个空格,并<------>表示一个制表字符):
class Foo {
....void bar() {
<------>if (boz) {
<------>....return x;
<------>}
....}
}
Run Code Online (Sandbox Code Playgroud)
这对于某些编码风格很常见,例如Java 的 Oracle 编码约定:
应该使用四个空格作为缩进的单位。缩进的确切构造(空格与制表符)未指定。制表符必须恰好每 8 个空格(而不是 4 个)设置一次。
我无法使用 VSCode 正确呈现它:
editor.tabSize为 4,那么它的渲染效果会很差class Foo {
....void bar() {
<-->if (boz) {
<-->....return x;
<-->}
....}
}
Run Code Online (Sandbox Code Playgroud)
editor.tabSize为 8,则文本会正确呈现,但缩进指南不正确(void bar()缩进级别缺少指南):更重要的是,自动缩进(按“tab”键,或在{字符后按“return”时即时缩进)现在缩进了 8 列,使编辑器几乎无法使用。
一个明显的解决方法是仅使用空格进行缩进,但这在打开预先存在的文件时不适用。
有没有办法将缩进指南配置为每 4 列显示一次,同时仍然每 8 列呈现选项卡?
在editorconfig跨编辑器配置文件规范中,这对应于我希望能够独立更改的tab_width和indent_size属性。 …
默认情况下,用于Risc-V的GCC会nop在生成指令后生成指令call:
$ cat test.c
void g();
void f() {
g();
}
$ riscv64-unknown-elf-gcc -S test.c -o -
[...]
f:
addi sp,sp,-16
sd ra,8(sp)
sd s0,0(sp)
addi s0,sp,16
call g
nop #### <-----------here
ld ra,8(sp)
ld s0,0(sp)
addi sp,sp,16
jr ra
.size f, .-f
.ident "GCC: (GNU) 8.3.0"
Run Code Online (Sandbox Code Playgroud)
我希望当针对具有分支延迟时隙的架构时,但是我的理解是Risc-V不是这样的架构。实际上,nop使用-O1或更高版本进行编译时消失。
只是GCC中的“错误”会nop从具有延迟插槽的体系结构中遗留下来,还是有此nop指令的实际原因?
大多数测试框架都假设“1 个测试 = 1 个 Python 方法/函数”,并认为当函数执行时没有提出断言,测试就通过了。
我正在测试一个类似编译器的程序(一个读取*.foo
文件并处理其内容的程序),我想对许多输入 ( *.foo) 文件执行相同的测试。IOW,我的测试看起来像:
class Test(unittest.TestCase):
def one_file(self, filename):
# do the actual test
def list_testcases(self):
# essentially os.listdir('tests/') and filter *.foo files.
def test_all(self):
for f in self.list_testcases():
one_file(f)
Run Code Online (Sandbox Code Playgroud)
我当前的代码使用
Python 标准库中的unittest,即one_file使用self.assert...(...)
语句来检查测试是否通过。
这是有效的,因为当我的代码正常/有问题时,我确实得到了一个成功/失败的程序,但是我失去了测试框架的许多优点:
我没有得到相关的报告,比如“Y 次测试中的 X 次失败”,也没有通过/失败的测试列表。(我打算使用这样的系统不仅测试我自己的开发,还作为老师对学生的代码进行评分,所以报告对我很重要)
我没有测试独立性。第二个测试在第一个测试留下的环境上运行,依此类推。第一次失败会停止测试套件:根本不会运行失败后的测试用例。
我觉得我在滥用我的测试框架:只有一个测试功能,因此 unittest 的自动测试发现听起来有点矫枉过正。相同的代码可以(应该?)用简单的 Python 编写,并带有基本的assert.
一个明显的替代方法是将我的代码更改为类似
class Test(unittest.TestCase):
def one_file(self, filename):
# do the actual test
def test_file1(self):
one_file("first-testcase.foo")
def test_file2(self):
one_file("second-testcase.foo")
Run Code Online (Sandbox Code Playgroud)
然后我得到了 …
根据Pod :: Usage的文档,pod2usage(-verbose => 2)"整个手册页被打印".但是,在某些情况下,将显示脚本的perl源代码,而不是正确格式化的联机帮助页.
这是一个例子:
use Pod::Usage qw(pod2usage);
pod2usage(-verbose => 2);
__END__
=head1 NAME
Minimal example
=head1 SYNOPSIS
This is the synopsys section.
=cut
Run Code Online (Sandbox Code Playgroud)
运行脚本:
$ perl test.perl
You need to install the perl-doc package to use this program.
use Pod::Usage qw(pod2usage);
pod2usage(-verbose => 2);
__END__
=head1 NAME
Minimal example
=head1 SYNOPSIS
This is the synopsys section.
=cut
Run Code Online (Sandbox Code Playgroud) gitter.im帮助中显示的格式解决了包含来自外部网站的图像的问题,而不是如何发送网站上尚未存在的图像.这是否意味着我们必须在某处上传图像然后以此格式粘贴链接,或者有没有办法直接通过gitter.im发送图像?
我可以成功登录并浏览网站,但是当我检查注销按钮时,它就像javascript:__doPostBack('ctl00$lnkBtnLogout','')链接一样,follow_link()不起作用(说:没有适配器)???有人能帮我吗?