跳转到内容
彼岸论坛

小天管理

管理员
  • 内容数

    19567
  • 注册日期

  • 最后上线

  • 得奖次数

    5

小天管理 发表的所有内容

  1. 如题,迫于最近想折腾 Linux 桌面但是水平实在太菜,不敢直接在主力笔记本上整,打算搞个小尺寸二手笔记本; 暂时不打算买小主机/NUC/二合一/arm 平板/chromebook/开发板,和目前已有设备的定位有点冲突; 目前的主力笔记本是 thinkbook 14+ ARA 32G ,因此二手笔记本打算买一个屏幕稍微小一点、配置稍微低一点的。 从 thinkpad 系列开始找的,x230 到 x270 因为英特尔挤牙膏性能不太行,而且没换过模具,内存条松动 bug 太难受了,看网友推荐捡垃圾至少从 x280 开始,8 代低压 U 据说还可堪一用,但是从这代开始内存是焊在主板上了,能换,但是麻烦,x280 i5 8350U 16G 闲鱼参考价 1.2k (这个系列都是 12.5 寸,屏幕 TN 和 IPS 、FHD 和 720P 、触摸和非触摸都有,好在基本上都可以换屏幕;从 x270 开始支持 Type-C PD 充电); 然后找到类似定位的 DELL Latitude 7290/7300,13.3 寸,和 x280 差不多并且是可更换双通道内存,屏幕好像也是标配 1080P IPS ,可惜没有 Type-C PD 供电支持,7300 8265U 8G 闲鱼参考价 790 ; HP 暂时没找到类似定位的产品(产品线有点乱,我还没看懂)。 所以整理一下需求就是: 预算 1.5k (包含可能的加内存、换屏幕预算) 尺寸在 12.5 寸到 13.3 寸之间 处理器至少为 8 代低压 i5 双通道内存,最好为 16G 屏幕为 1080P IPS (或者为可完美更换的) 一些加分项: Type-C PD 供电 可更换内存 丰富的拓展接口 支持 M.2 固态硬盘 可以更换电池 一些减分项: 有独立显卡 仅有 Type-C 接口 厚度或者重量超标 目前打算继续去海鲜市场蹲一蹲 x280 和 Latitude 7300 ,也想问问各位大佬的建议
  2. 个人觉得比 venv 命令要易懂和上手。由于我用 Mac ,因此以下记录仅针对 Mac 。 macOS 下的安装 mkdir -p ~/miniconda3 curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o ~/miniconda3/miniconda.sh bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 rm -rf ~/miniconda3/miniconda.sh 安装之后要运行如下命令, 适配 Shell ~/miniconda3/bin/conda init bash ~/miniconda3/bin/conda init zsh conda 常用的命令 查看安装了哪些包 conda list 查看当前存在哪些虚拟环境 conda env list conda info -e 检查更新当前 conda conda update conda Python 创建虚拟环境 conda create -n your_env_name python=x.x anaconda 命令创建 python 版本为 x.x ,名字为 your_env_name 的虚拟环境。your_env_name 文件可以在 Anaconda 安装目录 envs 文件下找到。 激活或者切换虚拟环境 打开命令行,输入 python –version 检查当前 python 版本。 Linux: source activate your_env_nam Windows: activate your_env_name 对虚拟环境中安装额外的包 conda install -n your_env_name [package] 关闭虚拟环境(即从当前环境退出返回使用 PATH 环境中的默认 python 版本) conda deactivate 或者`activate root`切回 root 环境 Linux 下:source deactivate 删除虚拟环境 conda remove -n your_env_name –all 删除环境钟的某个包 conda remove –name $your_env_name $package_name
  3. 领导布置任务,让我这个小小运维去搞一些 python 的开发面试题;求助一下广大的 V 友们,能出一些 py 开发人员面试题吗,还望附上答案;一经采用,奖励 10 铜币,哈哈哈哈 面试题与港美股量化交易开发类相关最好; 再次感谢!!
  4. 在之前遇到过一个 Node.js 使用文件描述符来读取文件,未释放文件描述符的坑,对此还对 Node.js 提过 PR ,让 Node.js 支持文件句柄的变量 GC 后,也同时销毁句柄,在 fs 的 FileHandleAPI 提供了未使用变量时进行尝试关闭文件描述符并提供警告,但是很多人并没有使用 FileHandleAPI ,而是更习惯于使用早期的 File System 的 API ,而除了显式的未释放的文件描述符,还有隐式的文件描述符。下面我则根据两个案例来进行讲解关于文件描述符的坑。 显式的文件描述符 显式的文件描述符,我们通常会使用 fs.open() 方法来打开文件,然后通过 fs.read() 方法来读取文件。如下代码所示。 const fs = require("fs"); fs.open("test.txt", "r", (err, fd) => { // 做一些操作 }); setInterval(() => { // 一直循环 }, 1000); 在这里其实有两个误区: 误区 1:fd 变量如果被回收了(GC),那么 fd 对应的文件描述符也会被自动回收。 误区 2:fs.open 后,文件描述符不需要 close 。 针对误区 1 ,因为大多数人在没有完整阅读 Node.js 文档,由于 Node.js 又存在回收机制,所以很多人会认为 fd 变量被回收了,那么 fd 对应的文件描述符也会被自动回收。 针对误区 2 ,这个误区则是没有 C 语言基础的同学容易犯的错误,而是更习惯于 JavaScript 的用法,更少的考虑回收问题,所以不会去 close 。 针对上面的误区,如果没有 close 的情况,什么时候文件描述符会被回收呢?在这个情况下,只有 Node.js 进程销毁的时候才会进行文件描述符的回收。 隐式文件描述符 对于显式的文件描述符,隐式的文件描述符更具有欺骗性,那么什么叫隐式的文件描述符呢?简单来说就是没有直接强制我们传递文件描述符或直接使用文件描述符却又使用到了文件描述符的场景,比如下面的代码。 const fs = require("fs"); // 创建一个文件读流 fs.createReadStream("test.txt"); setInterval(() => { // 一直循环 }, 1000); 在这里由于没有像显式使用文件描述符,而是将文件描述符作为可选变量,像这种隐式使用文件描述符的方法更具有欺骗性。 在上面的案例中,相信很多人都有类似的使用可读流的用法并且没有关闭可读流,但哪怕你仅仅式创建了可读流都将会生成一个文件描述符,和上面的显示文件描述符一样,必须手动关闭才能释放文件描述符,并且着这个文件描述符的占用都是 Node.js 进程销毁的时候才会进行回收。在这种场景下,如果你和 C 或 C++交互,哪怕你使用的是读流,都可能导致当前的文件描述符占用,导致 C 或 C++无法正常读取文件。 现象和解决方法 如果说我们的文件描述符被大量泄漏了,那么到了一定的数值,整个 Node.js 进程服务将会出现一个假死的现象,比如一直卡住在读文件的方法上,无法进行下一步运行,那么这个时候我们就可以考虑是否泄漏了文件描述符。 对于文件描述符的泄漏,我们在 linux 下可以使用lsof命令来查看你某个进程下的文件描述符情况。比如我们的 Node.js 进程是 12345 ,那么我们可以使用以下的命令来查看该进程下的文件描述符使用情况。 lsof -p 12345 然后我们根据文件的使用情况,查找代码的使用情况来对代码进行一个修改对文件描述符进行关闭,比如上面 fs.open 和 createReadStream 的例子,可以使用下面的代码来进行关闭。 const fs = require("fs"); fs.open("test.txt", "r", (err, fd) => { // 使用完成后关闭文件描述符 fd.close(); }); const fd = fs.createReadStream("test.txt"); // 流使用完成后进行销毁 fd.destroy();
  5. 总感觉有人在看着你,我对国产系统有深深的不信任感,保不齐在背后干些什么小动作
  6. 小公司,希望部署自己的 Clickhouse 数据库,在经过了一些初步测试之后发现这个数据库的配置较为复杂,希望请教一些细节问题避免走太多弯路,一年的原始数据量大概在 10-20TB 。 我们希望可以通过视频会议或者线下的方式(上海)和我们简单交流,可以解决我们提出的一些具体问题。 绿色软件:YnVubmthbF8zNg==,请备注 Clickhouse
  7. 原封带卡板全新未激活,有需要的朋友可以联系我. V:Ranger7hero V:Ranger6hero 或者 Telegram: @haisenbergor 相关文档: https://www.yuque.com/u33641174/lp0fcn/fptse35ohsfsmz5e 现货不议价,只要链接还在就可以直接拍,圆通包非偏远地区。 [闲鱼] https://m.tb.cn/h.5DSG6Qm?tk=AiWrWnGqVX8 CZ3456 「我在闲鱼发布了 [ skinny 安迪斯马斯特原厂金属面盖 有线款无线款均适用的金] 」 点击链接直接打开 或闲鱼搜用户:请叫偶达文西 飞机换绑不成功的话就更换节点,或者下载最新版本重新注册。 激活后一年内免费接码,截止日前充值 5NZD 或者转入转出 1NZD 即可续期一年,可以加我 V 我后期空了会拉群方便互转
  8. https://git.kingwayer.com/Kingwayer/poixe
  9. 22 款的 xc60 去年在 4 儿子买的人保,实付 52226 ,车损 28w ,三者 400w ,送一个 4 儿子的保养( 1 年/次或 1 万公里 1 次最多 2 次) 今年在太平洋,实付 4030 ,车损 26.6 ,三者 300 ,送一个普通保养 另有平安和太平洋类似,报价实付 4300 左右,4 儿子的人保今年报价 4600 的样子
  10. 在小米 app 只能查看 1 月份的录制的视频,以前是可以循环录制的,后面发现没发循环了,这个摄像头也容易怀卡,存储卡都换了几张
  11. 如图,白天蛮正常的,晚上不浏览东西就不会异常,但是开点高负载的马上就偶发性丢包 本来想定位是路由器原因还是光猫原因(100 是光猫网关),但是我发现丢包的时候两个都 ping 不通,如果是光猫原因的话按我理解应该连路由器是正常的才对呀?
  12. 首先打个小广告,GitHub 写了个开源项目,https://github.com/MarsZone/Embodied ,使用 kotlin+ktorm+mysql 以及 React+react-vant 开发了各一个简单的移动社交 Apps 。 然后呢,平时大家可能也都会用 ai 来写些小的工具函数或者问一些问题来获取实现方案。 现在我项目写的七七八八了,想整体分析下有没有什么能提高的地方,有没有什么设计模式,或者语法一类的需要改造重构的,但是目前 AI 应该是没办法整体分析整个项目。 废了老半天力气搭建了一个本地的 sonarqube,感觉只能检测些安全漏洞和语法有没有问题。 怎么能整体的分析整个项目的情况呢?主要是对 kotlin 也不是特别熟悉,为了学点新技术,平时工作主要用的 spring 全家桶,写 dto ,entity ,vo,po 那一套写吐了,就写的特别简单。不知道有没有什么办法能去整体评估下,提高项目的质量。
  13. 例如,现在有 N 本书,每本书有若干个标签如下: 电子商务-网站-高等学校-教材 经济学-通俗读物 故事-作品集-中国-当代 人物-列传-浙江省 ... 最终通过算法得到二级分类: |-教材 |-电子商务 |-经济学 |-作品集 |-故事 |-列传 有什么办法能找到这种层级关系吗?
  14. 我看 2060 拥有 1920 个 CUDA 核心 但 12G 3060TI 搭载了 4864 个 CUDA 核 8G 应该是 3060TI 更快吧 能块多少呢
  15. 故事点这个概念,看起来鬼鬼祟祟的。 提到故事点,必然讲到,“不是基于时间的度量(如小时或天数),而是一种相对的估算方法,用来比较不同用户故事的复杂性或工作量”。 谁懂你为什么不用具体时间,而是用相对量? 敏捷联盟不是鼓励勇气和以客户为中心吗?客户真的看到你的故事点,然后如何和他的时间期限比较呢? 我问过一个行业内标杆实践企业的员工,当你估计了一个故事点的点数后,你怎么估计它的时间? 他说,我们项目组约定好,都是一个点就是一天。 这不是障眼法?…干脆一点,你这个月底能不能完成?当你故作专业的时候,客户就只能流氓起来。 我一度以为这个肯特贝克的发明,因为故事点和故事两个概念太接近了。因此我有点怀疑肯特贝克了,然而不是,我查了下,是 Ken Schwaber 和 Mike Cohn 主要再说。好像他们两个都是搞 Scrum 的。 确实,在《极限编程解释》一书中,肯特贝克并没有直接介绍故事点( Story Points )这个概念。 你看,敏捷联盟如果剿灭董卓的 18 路诸侯一样,也不是铁板一块。 https://projectmanagercc.github.io
  16. 坐标成都,周末搞了个双栈的家宽,目前用 openwrt+ddns+泛域名解析+nginx 代理了一些家里的服务(主要是 nas 相关的),以便在外网使用,对外只暴露了两个高位端口,套上了 https ; rt:请问这样是否相对安全,还有什么需求注意的, 以及如何预防被封宽带或者被攻击
  17. appletv home 键双击是切换后台应用的。 appletv 的遥控器真是垃圾啊,一会 connected 一会 disconnected 用手机也不方便,还要解锁。
  18. 不想备案,流量每日 5000 ,备选: 1. 有阿里云/腾讯云 香港轻量服务器,价格便宜,性能据说一般。 2. aws lightsail 新加坡节点,据说也是轻量,配置太低,性能一般。 3. aws ec2 新加坡/香港节点,后续可扩容,价格较贵。 不知道上面了解的对不对。选择好难。有没有大佬们帮忙参考下。感谢
  19. 在纯前端实现的 PGP 加解密( firefox 115.12 测试通过) 代码中引用的 openpgp.min.js 是 openpgpjs 在这里发布的项目: https://unpkg.com/openpgp/dist/ 直接下载此 js 文件: https://unpkg.com/openpgp@5.11.1/dist/openpgp.min.js 将以下代码保存成 .html 文件即可 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>OpenPGP.js Demo</title> <script src="openpgp.min.js"></script> <script> function clearTextarea() { switch (event.target.id) { case "btnClearPubKey2": var text = document.getElementById("publicKey2").value = ""; break; case "btnClearPgpMsg2": var text = document.getElementById("pgpmsg2").value = ""; break; } } function copyToClipboard() { switch (event.target.id) { case "btnCopyPubKey": var text = document.getElementById("publicKey").value; break; case "btnCopyPgpMsg": var text = document.getElementById("encrypttext").value; break; } // Create a temporary textarea element var tempTextarea = document.createElement("textarea"); tempTextarea.value = text; document.body.appendChild(tempTextarea); // Select the text in the textarea element tempTextarea.select(); tempTextarea.setSelectionRange(0, 99999); /*For mobile devices*/ // Copy the selected text document.execCommand("copy"); // Remove the temporary textarea element document.body.removeChild(tempTextarea); // Optionally, provide feedback to the user //alert("Copied the text: " + text); } async function pgpencrypt() { // privateKey sign var privateKeyArmored = document.getElementById("privateKey").value; const passphrase = document.getElementById("passphrase").value; const privateKey = await openpgp.decryptKey({ privateKey: await openpgp.readPrivateKey({ armoredKey: privateKeyArmored }), passphrase }); // The other party's public key is used for encryption var publicKeyArmored2 = document.getElementById("publicKey2").value; var plaintext = document.getElementById("plaintext").value; const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored2 }); const encrypted = await openpgp.encrypt({ message: await openpgp.createMessage({ text: plaintext }), // input as Message object encryptionKeys: publicKey, signingKeys: privateKey // optional }); document.getElementById('encrypttext').value = encrypted; //console.log(encrypted); // '-----BEGIN PGP MESSAGE ... END PGP MESSAGE-----' } async function pgpdecrypt() { // Verify digital signature with the opponent's public key var publicKeyArmored2 = document.getElementById("publicKey2").value; const publicKey2 = await openpgp.readKey({ armoredKey: publicKeyArmored2 }); // decryption var privateKeyArmored = document.getElementById("privateKey").value; var encrypted = document.getElementById("pgpmsg2").value; const passphrase = document.getElementById("passphrase").value; // what the private key is encrypted with const privateKey = await openpgp.decryptKey({ privateKey: await openpgp.readPrivateKey({ armoredKey: privateKeyArmored }), passphrase }); const message = await openpgp.readMessage({ armoredMessage: encrypted // parse armored message }); const { data: decrypted, signatures } = await openpgp.decrypt({ message, verificationKeys: publicKey2, // optional decryptionKeys: privateKey }); document.getElementById('decryptedtext').value = decrypted //console.log(decrypted); // 'Hello, World!' // check signature validity (signed messages only) try { await signatures[0].verified; // throws on invalid signature console.log('Signature is valid'); } catch (e) { throw new Error('Signature could not be verified: ' + e.message); } } async function buildpair() { const { privateKey, publicKey, revocationCertificate } = await openpgp.generateKey({ type: 'ecc', // Type of the key, defaults to ECC curve: 'curve25519', // ECC curve name, defaults to curve25519 userIDs: [{ name: 'Jon Smith', email: 'jon@example.com' }], // you can pass multiple user IDs passphrase: document.getElementById("passphrase").value, // protects the private key format: 'armored' // output key format, defaults to 'armored' (other options: 'binary' or 'object') }); document.getElementById('privateKey').value = privateKey; // '-----BEGIN PGP PRIVATE KEY BLOCK ... ' document.getElementById('publicKey').value = publicKey; // '-----BEGIN PGP PUBLIC KEY BLOCK ... ' //console.log(revocationCertificate); // '-----BEGIN PGP PUBLIC KEY BLOCK ... ' } (async () => { const { privateKey, publicKey, revocationCertificate } = await openpgp.generateKey({ type: 'ecc', // Type of the key, defaults to ECC curve: 'curve25519', // ECC curve name, defaults to curve25519 userIDs: [{ name: 'Jon Smith', email: 'jon@example.com' }], // you can pass multiple user IDs passphrase: 'password', // protects the private key format: 'armored' // output key format, defaults to 'armored' (other options: 'binary' or 'object') }); document.getElementById('privateKey').value = privateKey; // '-----BEGIN PGP PRIVATE KEY BLOCK ... ' document.getElementById('publicKey').value = publicKey; // '-----BEGIN PGP PUBLIC KEY BLOCK ... ' //console.log(revocationCertificate); // '-----BEGIN PGP PUBLIC KEY BLOCK ... ' })(); </script> </head> <body> <h1>OpenPGP.js Demo</h1> <hr /> <h3>My temporary PGP key pair</h3> <p> Private key protects passwords<br /> <input id="passphrase" type="password" value="password" /> <button id="btnBuildPair">Build pair</button> </p> <p><textarea id="privateKey" rows="5" cols="70"></textarea></p> <p><textarea id="publicKey" rows="5" cols="70"></textarea></p> <p><button id="btnCopyPubKey">Copy Public Key</button></p> <hr /> <h3>Encrypt Message</h3> <p>The PGP public key of the other party</p> <p><button id="btnClearPubKey2">Clear</button></p> <p><textarea id="publicKey2" rows="5" cols="70"></textarea> </p> <p>Plain Text</p> <p><textarea id="plaintext" rows="5" cols="70"></textarea></p> <p><button id="btnPgpSignEncrypt">Signature & Encrypt</button></p> <p><textarea id="encrypttext" rows="5" cols="70"></textarea></p> <p><button id="btnCopyPgpMsg">Copy PGP Message</button></p> <hr /> <h3>Decrypt Message</h3> <p>PGP Message</p> <p><button id="btnClearPgpMsg2">Clear</button></p> <p><textarea id="pgpmsg2" rows="5" cols="70"></textarea></p> <p><button id="btnPgpDecryptVerifySign">Decrypt & Verify Signature</button></p> <p>Plain Text</p> <p><textarea id="decryptedtext" rows="5" cols="70"></textarea></p> <script> document.getElementById("btnBuildPair").addEventListener("click", buildpair); document.getElementById("btnPgpSignEncrypt").addEventListener("click", pgpencrypt); document.getElementById("btnPgpDecryptVerifySign").addEventListener("click", pgpdecrypt); document.getElementById("btnCopyPubKey").addEventListener("click", copyToClipboard); document.getElementById("btnCopyPgpMsg").addEventListener("click", copyToClipboard); document.getElementById("btnClearPubKey2").addEventListener("click", clearTextarea); document.getElementById("btnClearPgpMsg2").addEventListener("click", clearTextarea); </script> </body> </html>
  20. 目前知道的是儿童医院的 吴泽斌医生比较厉害一些,打算这个暑假做
  21. 大家有没有居家办公或者远程办公的经验分享一下,通过哪些平台?或者哪些公司? 想长期居家办公或者远程办公了。 本人目前是全栈开发工程师。 熟悉技术栈:Spring 全家桶、Vue.js 、Node.js 、Python 、Docker
  22. 有一个兄弟,欠问我几百块想恶心太一下,找他发消息现在不都理我了
  23. 家里的网络拓扑大致如下 备注: 光猫是移动给的,只有普通 user 账户,能进行设置的功能不多. 预埋的网线集中出口在小仓库的弱电箱,位置比较偏,取放不方便,对外发射信号屏蔽多. 期望: 手机/笔记本/平板等无线上网设备能和台式机在一个网段上,或者能简单直接互访. 我应该怎么配置网络设备(路由器/光猫/上网设备)好呢? 真心请教,有没说清楚的,我可以再补充.谢谢大家!
×
×
  • 创建新的...