小编Mat*_*Moy的帖子

当主机使用dnsmasq并且Google的DNS服务器被防火墙时,DNS无法在docker容器中工作?

症状是:主机具有适当的网络访问权限,但在容器内运行的程序无法解析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被某些防火墙规则过滤.

发生这种情况的原因是:

  • Docker首先尝试在主机和容器内配置相同的DNS服务器.
  • 主机运行DNS缓存服务dnsmasq.dnsmasq充当DNS请求的代理,因此主机中明显的DNS服务器/etc/resolve.confnameserver 127.0.1.1 …

dns dnsmasq localhost docker

19
推荐指数
3
解决办法
1万
查看次数

在静态网站中本地检查死链接(使用wget?)

检查死链接的非常好的工具(例如指向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 …

python wget hyperlink http-status-code-404

13
推荐指数
1
解决办法
364
查看次数

从Eclipse启动使用Maven配置的JavaFX应用程序

我有一个可以与Maven一起正常运行的JavaFX应用程序:

mvn compile
mvn exec:java  # Launches the GUI
Run Code Online (Sandbox Code Playgroud)

这是在Ubuntu,使用openjdk-11-jdkmavenopenjfxUbuntu的软件包。

我想从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)

java eclipse ubuntu javafx maven

10
推荐指数
2
解决办法
463
查看次数

VScode 自动缩进和缩进指南,以及制表大小 (editor.tabSize)

我有一个使用 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_widthindent_size属性。 …

indentation visual-studio-code

7
推荐指数
1
解决办法
543
查看次数

为什么呼叫后GCC for Risc-V会产生nop指令

默认情况下,用于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指令的实际原因?

gcc riscv

6
推荐指数
1
解决办法
132
查看次数

每个输入文件单独的测试用例?

大多数测试框架都假设“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)

然后我得到了 …

python testing unit-testing

5
推荐指数
1
解决办法
906
查看次数

perl的pod2usage(-verbose => 2)显示源代码而不是格式化文档

根据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)

perl perldoc

4
推荐指数
1
解决办法
154
查看次数

如何在Gitter中发送图像?

gitter.im帮助中显示的格式![alt](http://)解决了包含来自外部网站的图像的问题,而不是如何发送网站上尚未存在的图像.这是否意味着我们必须在某处上传图像然后以此格式粘贴链接,或者有没有办法直接通过gitter.im发送图像?

markdown instant-messaging

3
推荐指数
1
解决办法
3234
查看次数

MechanicalSoup (python 3x) 可以处理网站中的 javascript 吗?

我可以成功登录并浏览网站,但是当我检查注销按钮时,它就像javascript:__doPostBack('ctl00$lnkBtnLogout','')链接一样,follow_link()不起作用(说:没有适配器)???有人能帮我吗?

javascript python-3.x mechanicalsoup

1
推荐指数
1
解决办法
737
查看次数