要想获取外网IP,可以直接使用curl获取。
curl ipecho.net/plain
做一个有趣的人
要想获取外网IP,可以直接使用curl获取。
curl ipecho.net/plain
有些时候,我们不得不导出pdf,一些软件会要求购买vip服务才行,但是如果你装了python环境的话,其实现成的包就能帮你完成这个操作。
第一步需要安装fitz和PyMuPDF
大概三十多M。国内网络比较差的情况下可以使用清华源 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install fitz -i https://pypi.tuna.tsinghua.edu.cn/simple pip install PyMuPDFContinue reading “Python如何将pdf导出图片格式”
python: symbol lookup error: /data/home/xxxxxproject/venv/lib/python3.9/site-packages/torch/lib/../../nvidia/cudnn/lib/libcudnn_cnn_infer.so.8: undefined symbol: _ZN15TracebackLoggerC1EPKc, version libcudnn_ops_infer.so.8
如果你遇到上面错误,可以ldd看一下libcudnn_ops_infer.so.8 指向的不是我们的venv下的目标so
ldd /data/home/projxxx/venv/lib/python3.9/site-packages/torch/lib/../../nvidia/cudnn/lib/libcudnn_cnn_infer.so.8 ldd: warning: you do not have execution permission for `/data/home/xxxxxxxproject/venv/lib/python3.9/site-packages/torch/lib/../../nvidia/cudnn/lib/libcudnn_cnn_infer.so.8' linux-vdso.so.1 (0x00007ffcee0e1000) /$LIB/libonion_block.so => /lib64/libonion_block.so (0x00007f81c7053000) /$LIB/libonion.so => /lib64/libonion.so (0x00007f81ee291000) libcudnn_ops_infer.so.8 => /usr/local/cuda-11.0/lib64/libcudnn_ops_infer.so.8 (0x00007f81b5507000) libz.so.1 => /lib64/libz.so.1 (0x00007f81b52f0000) librt.so.1 => /lib64/librt.so.1 (0x00007f81b50e7000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f81b4ec7000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f81b4cc3000) libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f81b4b2b000) libm.so.6 => /lib64/libm.so.6 (0x00007f81b47a9000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f81ee261000) libc.so.6 => /lib64/libc.so.6 (0x00007f81b43e7000) /lib64/ld-linux-x86-64.so.2 (0x00007f81ee172000)
可以看到,libcudnn_ops_infer 并非指像我们虚拟环境下的路径,可以重新指定搜索路径
export LD_LIBRARY_PATH=~/projectxxxxxx/venv/lib/python3.9/site-packages/nvidia/cudnnib:$LD_LIBRARY_PATH
上面xxxxxx 就是你的项目地址, venv是虚拟环境目录
最近开发使用Kotlin确实挺爽的,就在于这门语言足够现代化,和JetBrains家的编辑器结合起来更是无敌了,自动提示,编译优化都是很实用的,但这样基本也脱离不了这个生态了,话说今天使用List的遍历,居然有六种方式,使用哪种方式都可以。这样虽然看起来很庞大,看起来很难记的样子,但是好在编译器+idea足够聪明,记住一两种就OK了。这有点像是我们学习英语,随着对语义的更加紧准的表达,英文单词拓展到了十几二十万个。(方便的同时也会加大人们的记忆负担)
brandList.forEach { println(it) }
for (brand in brandList) { println(brand) }
for (index in 0 until brandList.size) { println("$index:${brandList[index]}") }
for (index in 0..brandList.lastIndex) { println("$index:${brandList[index]}") }
for (index in brandList.indices) { println("$index:${brandList[index]}") }
brandList.forEachIndexed { index, brand -> println("$index:${brand}") }
那天续费的时候,发现距离上一篇博客已经有两年之久了,挺惭愧的,就像买了一台心心念念的顶配电脑,确没有用起来。
这个端午只放了三天假期,外面也在下雨我想是时候重新整理一下了
Continue reading “再次博客技术架构迁移”