浏览器多语言
edge://inspect/#devices
chrome://inspect/#devices
edge://inspect/#devices
chrome://inspect/#devices
pip install tb-nightly -i https://mirrors.aliyun.com/pypi/simple
写工具时通常会生成ZIP文件,一般来说就传相对路径和内容就好。但是今天发现一个细节。还需要将文件所在的目录也要传进去。虽然现在的解压软件都支持不传,但是如果解压的代码不规范就会造成保存路径不存在,因为父级目录不存在:
let file: File = File::create(zip_path).unwrap();
let mut writer: ZipWriter<File> = ZipWriter::new(file);
let options = zip::write::FileOptions::default()
.compression_method(zip::CompressionMethod::Deflated);
// 因为这里已经将所有目录 遍历好。目录结构已经不存在的,只能通过文件路径反向还原,并使用map去重
let mut dirMap:HashMap<String, bool> = HashMap::new();
// .... 中间省略循环遍历
// 先将文件目录结构创建
let arr:Vec<&str> = path.split('/').collect();
let mut tmp_dir: String = String::new();
for i in 0..(arr.len() - 1) {
let tmp = arr[i];
tmp_dir.push('/');
tmp_dir.push_str(tmp);
if dirMap.contains_key(&tmp_dir){ // 缓存保存过的目录
continue;
}
dirMap.insert(tmp_dir.clone(), true);
writer.add_directory(&tmp_dir, options).unwrap();
}
// 将文件写入ZIP
let mut buffer = Vec::new();
let mut file = File::open(&tmp_path).unwrap();
file.read_to_end(&mut buffer).unwrap();
writer.start_file(path, options).unwrap();
writer.write_all(&buffer).unwrap();
一般用Ubuntu相关的Docker
正常启动镜像时记得用 -p 1022:22 影射一个端口,然后先装SSH
apt-get update && apt-get install -y openssh-server
最关键执行这几个不然一直密码错误:
ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
修改root密码:passwd
修改配置:
/etc/ssh/sshd_config
开端口 Port 22
开Root登录 PermitRootLogin Yes
启动服务:
service ssh start
或
/usr/sbin/ssh -D
开机(Docker启动) 就执行服务
systemctl enable ssh
// 这是一个简单的宏,名为 `say_hello`。
macro_rules! say_hello {
// `()` 表示此宏不接受任何参数。
() => (
// 此宏将会展开成这个代码块里面的内容。
println!("Hello!");
)
}
macro_rules! say_hello2 {
// `()` 表示此宏不接受任何参数。
($args:tt) => (
// 此宏将会展开成这个代码块里面的内容。
println!("Hello! {}", $args);
)
}
fn main() {
// 这个调用将会展开成 `println("Hello");`!
say_hello!()
say_hello2!("fd")
say_hello2!(1)
say_hello2!(true)
// err : say_hello2!(1,2,3,4) 参数还是要跟定义一样
}
这里跟普能函数区别就是。他传的参数是可以是你在编辑器上的填的字符。在say_hello2中就相当于编译后。会将"fd"替换掉定义里的$args,是字符替换。不是传参数。这样就很好区分他和函数的区别。