首页 文章 精选 留言 我的

精选列表

搜索[告别],共1085篇文章
优秀的个人博客,低调大师

赛门铁克推生物特征识别科技 告别密码

赛门铁克信息保护的ANZ业务经理Nick Savvides表示,“密码是个太弱的烂东西。” Savvides近日接受媒体采访时表示,密码不管多么复杂都不是企业用来对付网络威胁和保护自己的理想方式,因为网络犯罪分子的手法已越来越精密。 他还特别提到,由于物联网、云计算和移动互联网的兴起,企业需要实施新的安全措施,采用诸如语音、面部,或指纹等生物识别技术以及利用关键动态元素和地理位置信息,以确保自己得到保护。 Savvides表示,赛门铁克将在未来的12个月里发布多种利用这些新元素的功能。 Savvides给出了一些预览功能,他透露,赛门铁克将推出VIP Everywhere(VIP处处太平),以加强旗下赛门铁克验证和标识保护(VIP)服务的功能。VIP Everywhere预定将于2016年下半年推出。据Savvides介绍,VIP Everywhere旨在提供终端到终端的认证,将见证“安全性和可用性首次成为少见的朋友”。VIP Everywhere会被嵌入到Norton软件里,使得计算机具备一个唯一的赛门铁克标识符,可以识别特定计算机用户。 他表示,“我们现在通过VIP认证用户。我们现在引进的这项功能可以利用行为分析进行连续的认证;可以利用来自应用程序在使用过程中的遥测数据;可以进行机器学习做出决定,确定是否需要停止用户操作,或是需要重新进行身份验证,以确保该设备没有被劫持。” 此外,赛门铁克会将重点放在“移动强化”上,赛门铁克将推出一个名为移动应用保护服务的新科技,简称MAPS。Savvides表示,MAPS产品的设计考虑的对象是移动应用程序开发者,使得他们可以专注于应用程序的功能,而不是安全。 他表示,“安全性对应用程序开发人员来说是件难事。为什么呢?因为移动应用程序开发者是些25岁的大胡子小伙子,他们不知道如何编安全应用程序;他们知道如何编移动应用程序。” Savvides表示,“他们关心的是程序的功能,他们不关心程序的安全性,所以我们所做的就是,为他们提供一个简化保护应用程序的做法,我们为他们提供一个黑盒子,我们对他们说:”把这个加到移动应用程序里,赛门铁克会将移动应用程序包起来,我们会确保用的是最好的加密技术,我们向你保证会实施钉扎(Pinning)机制,我们保证会实施编纂(Codification),我们保证你可以检测到在装置上运行的恶意软件。'” 作者:杨昀煦/编译 来源:51CTO

优秀的个人博客,低调大师

告别命令行噩梦!这个工具让你用

还在为记不住tar -xzvf和find . -name "*.py" -type f -mtime -7这类鬼畜命令而抓狂?试试这个神器,让 AI 成为你的专属命令行翻译官! 😱 程序员的日常噩梦 相信每个程序员都经历过这样的场景: 想压缩一个文件夹,但忘了 tar 命令的参数顺序,反复查文档 需要查找最近 7 天修改过的文件,结果 find 命令写了半天还是报错 跨平台开发时,Linux 和 Windows 命令总是记混 临时需要查个 IP、看个端口,却要在浏览器搜"如何查看本机 IP" 我们的大脑本应该用来思考业务逻辑和算法,而不是浪费在记忆awk '{print $2}'这种反人类的语法上。 💡 解决方案:Shex —— 你的自然语言命令行助手 今天给大家推荐一个开源项目Shex,它的理念非常简单: 为什么不能用人话来执行命令呢? 安装只需一行: pip install shex 然后你就可以这样操作电脑了: # 不用记 ls -lah,直接说人话 shex 列出当前目录所有文件 # 不用查 df 命令,想怎么问就怎么问 shex 查看磁盘使用情况 # 不用背 find 的复杂参数 shex 找出所有 python 文件 # 不用记 ifconfig/ipconfig 的区别 shex 我的 IP 地址是多少 # 不用纠结 tar 的参数顺序 shex 压缩 logs 文件夹 是的,就是这么简单! 🚀 核心特性 1. 🗣️ 自然语言交互 Shex 的最大亮点是支持完全自然的语言描述。无论你是说"列出当前目录"、"显示这个文件夹的内容",还是"我想看看这里有什么文件",它都能理解。 2. 🤖 多模型支持 Shex 不绑定任何特定的 AI 服务商,支持: 国外服务 国内服务 OpenAI (GPT-4o) DeepSeek Chat Anthropic (Claude 3.5) 通义千问 (Qwen Plus) Google (Gemini Pro) 月之暗面 (Kimi) Mistral、Groq、Cohere 智谱 AI (GLM-4) 更重要的是:它支持任何兼容 OpenAI API 的服务!这意味着你可以使用本地部署的 Ollama、LM Studio,或者任何自建的大模型服务。 3. 🔄 智能重试 命令执行失败?没关系,Shex 会自动分析错误信息,并尝试其他方法。就像一个真正的助手,而不是死板的工具。 4. ⚠️ 安全优先 Shex 内置了安全检测机制: 危险命令(删除、格式化等)会自动识别并要求确认 你始终拥有命令执行前的最终决定权 所有操作都有日志记录 5. 🌍 多语言 + 跨平台 界面支持中英文切换 完美运行在 Windows、macOS、Linux 上 自动适配不同操作系统的命令差异 🎯 实际应用场景 场景 1:服务器运维 # 传统方式:需要记住一堆命令 ps aux * grep python * awk '{print $2}' * xargs kill -9 # Shex 方式:说人话 shex 杀掉所有 python 进程 场景 2:日志分析 # 传统方式:复杂的 grep + awk 组合 grep "ERROR" app.log * awk '{print $1, $2, $5}' * sort * uniq -c # Shex 方式:直接描述需求 shex 统计日志文件中各类错误出现的次数 场景 3:文件批量处理 # 传统方式:需要查文档 find . -name "*.log" -mtime +30 -exec rm {} \; # Shex 方式:自然表达 shex 删除 30 天前的所有日志文件 场景 4:系统信息查询 # 传统方式:不同系统命令不同# Linux: free -h# macOS: vm_stat# Windows: wmic OS get FreePhysicalMemory # Shex 方式:一句话搞定所有系统 shex 显示内存使用情况 🛠️ 技术实现亮点 从技术角度来看,Shex 的设计很有意思: 轻量级设计:核心代码只依赖openai和python-dotenv,没有引入笨重的框架 Agent 架构:采用 LLM Agent 模式,让 AI 自主分析、执行、重试 配置管理:使用标准的配置目录(Windows 用%LOCALAPPDATA%,Unix 用~/.config/) 国际化支持:内置 i18n 模块,方便扩展更多语言 安全沙箱:在执行命令前进行风险评估 核心代码结构非常清晰: shex/ ├── agent.py # LLM Agent 核心逻辑 ├── config.py # 配置管理 ├── tools.py # 命令执行和安全检查 ├── i18n.py # 国际化 └── main.py # 命令行入口 📊 性能与成本 你可能会担心:每次执行命令都要调用 API,会不会很贵? 实际测试下来: 平均每次命令消耗约 200-500 tokens 使用 DeepSeek 的话,成本几乎可以忽略不计(约 $0.0001/次) 命令响应速度在 1-3 秒之间,完全可以接受 支持本地模型(Ollama),零成本使用 🎨 使用体验 初次配置 首次运行时,Shex 会友好地引导你完成配置: $ shex 列出所有文件 欢迎使用 Shex! 请选择语言 / Please select language: 1. 中文 2. English > 1 请选择大模型服务商: 1. DeepSeek (推荐,性价比高) 2. OpenAI (GPT-4) 3. Claude 3.5 4. 通义千问 ... > 1 请输入 DeepSeek API Key: > sk-xxxxxxxxxxxxx 配置完成!现在可以开始使用了。 配置一次,永久使用。后续如果想换模型,只需: shex --config 日常使用 之后的使用就非常自然了: $ shex 找出占用空间最大的 5 个文件 正在执行: du -ah . * sort -rh * head -5 1.2G ./videos/tutorial.mp4 856M ./backup.tar.gz 234M ./node_modules ... $ shex 这些文件夹一共占用多少空间 正在执行: du -sh ./videos ./backup.tar.gz ./node_modules 1.2G videos 856M backup.tar.gz 234M node_modules --- 总计: 2.3G 🔥 为什么你应该试试 Shex? 提升效率:不用再频繁查命令文档,把精力放在真正重要的事情上 降低门槛:初学者也能轻松使用命令行,不再被复杂语法劝退 跨平台一致性:不用记不同系统的命令差异,Shex 会自动适配 学习工具:看到 Shex 生成的命令,你还能学习到正确的命令用法 开源免费:MIT 协议,代码透明,可以自由修改和扩展 🚧 未来规划 根据 GitHub issues,作者正在考虑: 支持管道操作和复杂命令组合 添加命令历史和收藏功能 支持更多本地模型(Ollama、LM Studio) 提供 Web 界面 集成到 IDE 插件中 如果你有好的想法,欢迎到GitHub提 issue 或 PR! 📦 快速开始 # 1. 安装 pip install shex # 2. 开始使用(首次运行会引导配置) shex 查看当前目录 # 3. 更多命令 shex --help # 查看帮助 shex --config # 重新配置 shex --version # 查看版本 💬 写在最后 命令行本应该是提升效率的工具,而不是学习的负担。Shex 的出现,让我们终于可以用最自然的方式和电脑对话。 这个项目目前在 GitHub 上刚起步不久,但理念非常超前。作为开发者,我强烈建议你试试看: GitHub:https://github.com/YUHAI0/shex PyPI:https://pypi.org/project/shex/ 许可证: MIT 如果觉得有用,不妨给项目点个 Star ⭐,让更多人看到这个宝藏工具! 你最讨厌的 shell 命令是什么?在评论区告诉我,让我们看看 Shex 能否解放你!💪 本文介绍的 Shex 项目遵循 MIT 开源协议,代码托管在 GitHub。 如有问题欢迎提 issue,也欢迎贡献代码! #开源项目 #命令行工具 #AI应用 #开发效率 #Python

优秀的个人博客,低调大师

告别 GPU 焦虑,玩转极致性价比的 CPU 文生图

作者:壮怀、竹刚 AIGC 中的 Stable Diffusion 文生图模型是开源流行的跨模态生成模型,用于生成给定文本对应的图像。但由于众所周知的原因,GPU 资源出现了一卡难求的现状,如何通过云计算快速提升业务规模,降低文生图的计算成本,以及更好的保护自定义的扩展模型?针对文生图模型特性和规模化场景,本文提供了一种新的思路,通过云原生部署方式提供推理服务 API,使用 CPU 矩阵计算能力针对模型进行无侵入优化,以及机密计算的环境的无缝切换,可以有效的替代部分 GPU 推理需求,提供稳定、高效、高性价比且安全的文生图服务。 通过在 Kubernetes 集群内添加阿里云第八代企业级 CPU 实例 g8i,不修改模型本身,通过云原生化的部署和推理优化,在 CPU 节点上实现秒级响应的成本低廉的文生图服务。本文介绍如何在 ACK 集群中快速部署一个使用 CPU 加速的 Stable Diffusion 文生图示例服务,并且您还可以将这个示例服务无缝迁移到机密虚拟机节点池中,为您的推理服务提供数据安全保护。 准备环境 在 ACK 集群内创建一个使用阿里云第八代企业级实例 g8i 的节点池,确保实例规格的 CPU 大于或等于 16vCPU,可以使用 ecs.g8i.4xlarge,ecs.g8i.8xlarge 或 ecs.g8i.12xlarge 实例规格。(如果你还没有一个阿里云 Kubernetes 集群,请参见创建 Kubernetes 托管版集群 [ 1] 。) 一步生成文生图服务 使用默认参数执行以下命令,在集群内部署一个使用的 Stable Diffusion XL Turbo 模型。 helm install stable-diffusion-ipex https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/pre/charts-incubator/stable-diffusion-ipex-0.1.9.tgz 等待约 10 分钟,然后执行以下命令检查 Pod 状态,确保运行正常。 kubectl get pod |grep stable-diffusion-ipex 预期输出: stable-diffusion-ipex-577674874c-lhnlc 1/1 Running 0 11m stable-diffusion-ipex-webui-85d949d9bd-mcwln 1/1 Running 0 11m 服务部署完成后,对外提供了一个文生图 API 和 web UI。 测试文生图服务 执行以下命令,将 Stable Diffusion XL Turbo 模型服务提供的 web UI 转发到本地。 kubectl port-forward svc/stable-diffusion-ipex-webui 5001:5001 预期输出: Forwarding from 127.0.0.1:5001 -> 5001 Forwarding from [::1]:5001 -> 5001 在浏览器中打开http://127.0.0.1:5001/ ,访问 web UI 页面。 在这个 web UI 页面中,您可以点击【生成图片】按钮使用输入的提示词生成图片。 测试提示词: "A panda listening to music with headphones. highly detailed, 8k." "A dog listening to music with headphones. highly detailed, 8k." “A robot cat eating spaghetti, digital art, 8k.” “A large blob of exploding splashing rainbow paint, with an apple emerging, 8k.” “An astronaut riding a galloping horse, 8k.” “A family of raccoons living in a small cabin, tilt shift, arc shot, 8k.” “A tree walking through the forest, tilt shift, 8k.” “An octopus attacks New York, 8k.” “Motorcyclist on a racing track, highly detailed, 8k.” “Humans building a highway on Mars, cinematic, 8k.” 性能测试 使用不同 ECS g8i 实例规格在 Stable Diffusion XL Turbo 模型中生成 512x512、1024x1024 图片的耗时信息(单个 batch)。下表结果数据仅为实验参考,实际数据可能会因您的操作环境而发生变化。 实例规格 Pod Request/Limit 参数 单次平均耗时 (512x512) 单次平均耗时 (1024x1024) ecs.g8i.4xlarge(16 vCPU 64 GiB) 14/16 batch: 1step: 4 2.2s 8.8s ecs.g8i.8xlarge(32 vCPU 128 GiB) 24/32 batch: 1step: 4 1.3s 4.7s ecs.g8i.12xlarge(48 vCPU 192 GiB) 32/32 batch: 1step: 4 1.1s 3.9s 从推理速度的绝对性能来看,在多 batch 和多步的推理场景下,CPU 的推理速度仍然与 A10 的 GPU 实例有所差距。采用 ecs.g8i.8xlarge 的 CPU 机型、step 为 30、batch 为 16 时,图片生成速度为 0.14 images/s;采用 A10 的 GPU 实例、step 为 30,batch 为 16 时,图片生成速度为 0.4 images/s。但从最佳图像生成质量的推理性能来看,采用 ecs.g8i.8xlarge 的 CPU 机型、step 为 4、batch 为 16 时,图像生成速度为 1.2 images/s,仍可实现秒级出图性能。 因此,通过合理运用 CPU 加速策略和文生图模型推理的最佳实践,ECS g8i 等第八代 CPU 实例可用于替代 GPU 推理实例,提供稳定、高效、高性价比且安全机密的文生图服务。 在追求性价比、模型安全 TEE 和大规模资源供给的文生图推理场景下,建议采用 ecs.g8i.4xlarge 机型运行 stabilityai/sdxl-turbo 及相关的微调模型,以最优性价比的方式提供高质量的文生图服务。 使用 ecs.g8i.8xlarge 实例代替 ecs.gn7i-c8g1.2xlarge 时,可有效节省约 9% 的成本,并依然保持 1.2 images/s 的图像生成速度。 使用 ecs.g8i.4xlarge 实例替代 ecs.gn7i-c8g1.2xlarge 时,图像生成速度降为 0.5 images/s,但可有效节省超过 53% 的成本。 One morethings,更安全的机密推理 使用 ACK 集群的 TDX 机密虚拟机节点池,通过采用 ECS g8i 实例并结合 AMX + IPEX 技术,能够有效加速文生图模型的推理速度,并可以开启TEE实现对模型推理的安全保护。通过简单的打标和更新模型部署,可以把模型部署迁移进入内存加密的机密虚拟机环境。 在 ACK 集群内创建一个机密计算节点池,参考创建机密虚拟机节点池 [ 2] 。 将以下内容保存为 tdx_values.yaml。说明此处以为 TDX 机密虚拟机节点池配置了标签 nodepool-label=tdx-vm-pool 为例,如果您配置了其他标签,需替换 nodeSelector 中 nodepool-label 取值。 nodeSelector: nodepool-label: tdx-vm-pool 执行以下命令,将部署的 Stable Diffusion 示例模型迁移到 TDX 机密计算节点池。 helm upgrade stable-diffusion-ipex https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/pre/charts-incubator/stable-diffusion-ipex-0.1.9.tgz -f tdx_values.yaml 结论 在追求性价比、模型安全和大规模资源供给的文生图推理场景下,建议采用 ecs.g8i.4xlarge, ecs.g8i.8xlarge,ecs.g8i.12xlarge 机型补充,代替部分 GPU 实例运行 stabilityai/sdxl-turbo 及相关的微调模型,通过合理运用节点池管理,应用和 API 的部署模版 Helm Chart,Intel CPU 加速扩展,以最优性价比的方式提供稳定、高效、安全机密的文生图服务。 使用 ecs.g8i.8xlarge 实例代替 ecs.gn7i-c8g1.2xlarge 时,可有效节省约 9% 的成本,并依然保持 1.2 images/s 的图像生成速度。 使用 ecs.g8i.4xlarge 实例替代 ecs.gn7i-c8g1.2xlarge 时,图像生成速度降为 0.5 images/s,但可有效节省超过 53% 的成本。 更详细参考:https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/using-tee-cpu-to-accelerate-text2image-inference 相关链接: [1]创建 Kubernetes 托管版集群 https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/create-an-ack-managed-cluster-2#task-skz-qwk-qfb [2]创建机密虚拟机节点池https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/create-tdx-confidential-vm-node-pools

优秀的个人博客,低调大师

【建议使用】告别if,Java超好用参数校验工具类

一、前言 今天和小伙伴们分享一个常用的工具类,共计四个方法,使用场景比较广泛,有用于校验某个对象或对象中指定属性为空值时,直接返回异常,常用语校验前端请求参数;也有当值不为空时,执行指定动作,可减少大量的if条件,如:mybatis请求参数设置;还有用于判断当值不为空时,替代为新值,完成后续动作。 这样描述可能不够清晰,这里我列举了几个使用场景,更多的场景需要小伙伴们根据自己业务需求合理使用。 //场景一,点击登录时,后端校验用户名 if(StringUtils.isEmpty(name)){ throw new Exception("登录用户名不能为空"); } ​ //场景二:属性内容转换为新值 String address = "浙江省杭州市"; if(StringUtils.isNotEmpty(address)){ address ="地址:"+address; } ​ //场景三:替代过多的if条件 SysUserDto userDto = new SysUserDto();//前端参数 ​ SysUser user = new SysUser();//mybatis参数 if(StringUtils.isEmpty(userDto.getName())){ user.setUserName(userDto.getName()) } if(StringUtils.isEmpty(userDto.getPwd())){ user.setPassword(userDto.getPwd()) } 复制代码 \ 二、正文 首先创建一个测试实体类: import lombok.Data; ​ @Data public class SysUser{ private String name; private String password; } 复制代码 2.1 检查多个对象不能为空 测试范例 SysUser user = new SysUser(); SysUser user2 = null; Args.notEmptys(user,user2); 复制代码 方法内容 public static void notEmptys(Object... objects) { for (Object obj : objects) { if (obj == null) { throw new BusinessException("属性不能为空"); } if (obj.toString().trim().isEmpty()) { throw new BusinessException("属性不能为空"); } } } 复制代码 测试结果 Exception in thread "main" 属性不能为空 at com.basic.business.utils.Args.notEmptys(Args.java:27) at com.basic.business.demo.DemoController.main(DemoController.java:43) 复制代码 2.2 校验对象属性不能为空 若将参数【Boolean isAll】设置为true,则会校验全部属性;若设置为false,就需要将检测字段放入【propertys】中。 测试范例 SysUser user = new SysUser(); //用法一:校验全部参数 Args.checkField(user,true,""); //用法二:只校验password参数 Args.checkField(user,false,"password"); 复制代码 方法内容 /** * 对象多字段判空检查 * @param obj 被检查的对象 * @param isAll 是否检查全部参数 * @param propertys 被检查对象中的字段 可多个 */ public static void checkField(Object obj, Boolean isAll, String... propertys) { if (obj != null) { Class<? extends Object> clazz = obj.getClass(); if (isAll) { PropertyDescriptor[] propertyDescriptors = BeanUtils.getPropertyDescriptors(clazz); for (int p = 0; p < propertyDescriptors.length; p++) { checkEachField(obj, propertyDescriptors[p]); } } else { if (propertys != null && propertys.length > 0) { //遍历所有属性 for (int i = 0; i < propertys.length; i++) { String property = propertys[i]; //获取属性信息 BeanUtils.getPropertyDescriptors(clazz); PropertyDescriptor pd = BeanUtils.getPropertyDescriptor(clazz, property); checkEachField(obj, pd); } } } } } ​ private static void checkEachField(Object obj, PropertyDescriptor pd) { Class<? extends Object> clazz = obj.getClass(); String property = pd.getName(); if (pd != null) { //获取当前字段的javabean读方法 Method readMethod = pd.getReadMethod(); if (readMethod != null) { ​ Object invoke = null; try { invoke = readMethod.invoke(obj); } catch (Exception e) { throw new BusinessException("方法 " + readMethod.getName() + "无法执行"); } ​ if (invoke != null) { //String类型单独处理 Class<?> propertyType = pd.getPropertyType(); if ("java.lang.String".equals(propertyType.getName())) { if (StringUtils.isBlank((String) invoke)) { throw new BusinessException("错误 : [ " + property + " ] 不能为空!"); } } else if ("java.util.List".equals(propertyType.getName())) { List list = (List) invoke; if (list.size() == 0) { throw new BusinessException("错误 : [ " + property + " ] 不能为空!"); } } } else { throw new BusinessException("错误 : [ " + property + " ] 不能为空!"); } } else { throw new BusinessException("在 " + clazz + "中 找不到" + "[ " + property + " ] 的 读方法"); } } else { throw new BusinessException("在 " + clazz + "中 找不到" + "[ " + property + " ] 属性"); } } 复制代码 测试结果 用法一结果: Exception in thread "main" 错误 : [ name ] 不能为空! at com.basic.business.utils.Args.checkEachField(Args.java:116) at com.basic.business.utils.Args.checkField(Args.java:77) 用法二结果: Exception in thread "main" 错误 : [ password ] 不能为空! at com.basic.business.utils.Args.checkEachField(Args.java:116) at com.basic.business.utils.Args.checkField(Args.java:77) 复制代码 2.3 参数不为空时执行指定动作 我们经常会遇到这种场景,根据前端参数来组装数据库查询条件,如果不为空我们就将前端值设置到是实体类中,或者如下面这个例子中,当name不为空时,加入到list当中。 测试范例 List list = Lists.newArrayList(); ​ SysUser user = new SysUser(); user.setName("huage"); Args.doIfNotEmpty(user.getName(),list::add); System.out.println(list); 复制代码 方法内容 public static <R, T> R doIfNotNull(T t, Callback<T, R> callback) { try { return t == null ? null : callback.call(t); } catch (Exception e) { throw new BusinessException("[doIfNotNull error]", e); } } 复制代码 测试结果 [huage] 复制代码 2.4 参数为空时使用新值,并完成指定动作 本方法和2.较为类似,只是当目标值不为空时,使用新值进行后续的操作,如下面这个例子中,name初始值为【test】,执行完doIfNotNullNewValue后会将新值【huage】添加到list中,。 测试范例 List list = Lists.newArrayList(); ​ SysUser user = new SysUser(); user.setName("test"); Args.doIfNotNullNewValue(user.getName(),"huage",list::add); System.out.println(list); 复制代码 方法内容 public static <R, T> R doIfNotNullNewValue(T t,T newt, Callback<T, R> callback) { try { return t == null ? null : callback.call(newt); } catch (Exception e) { throw new BusinessException("[doIfNotNull error]", e); } } 复制代码 测试结果 [huage] 最后 如果你觉得此文对你有一丁点帮助,点个赞。或者可以加入我的开发交流群:1025263163相互学习,我们会有专业的技术答疑解惑 如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star:https://gitee.com/ZhongBangKeJi/crmeb_java不胜感激!

优秀的个人博客,低调大师

告别弱网,一直追剧一直爽

假设这样一个应用场景:下班途中,你刚上地铁,戴好耳机,准备看一集追到兴起的电视剧或者综艺节目,消磨乘坐交通工具的时间。这时,你却发现网络信号随着地铁的启动停站,变得时有时无,视频加载也开始不稳定。 如何解决这一问题?华为HMS Core无线传输服务(Wireless Kit)为开发者提供了完善的无线通信传输能力,打造定制化的蜂窝+WiFi通信解决方案。其中,弱信号预测可以在多种场景下提升用户视频观看体验。 1. 弱信号预测如何工作? 弱信号预测通过机器学习方式,采集并分析用户在固定路线上移动时的网络信号质量变化,并基于学习结果提前预测出用户即将进入信号质量不佳区域的时间,以及恢复为正常信号水平的时间。据此,应用可以预测信息,提前做出应对措施,以提升应用在弱网下的业务体验。 图1 弱信号预测工作示意图 2. 弱信号预测应用哪些场景? 对于视频App来说,常见的一个应用场景是用户上下班路途中观看视频。对此,各大运营商还联合腾讯、优酷、抖音等视频软件以及短视频平台,推出了流量包套餐。而人们观看视频过程中,经常会遇到的问题就是经过一片弱信号区域或者信号覆盖盲区造成的卡顿。如果手机能够最大限度的保障视频流畅度,并及时选择更优网络,就能够让用户有更好的观赏体验。 基于用户每天的上下班路线相对固定,网络的变化趋势可预测的情况,华为无线传输服务(Wireless kit)提供了基于学习的弱信号预测能力,根据用户的位置变化,主动预知网络变化趋势,以便视频应用提前做出应对,比如提升视频缓存时长。 也就是说,弱信号预测相当于连接起底层通信与用户体验之间的一座桥梁,把用户或应用平时不关注或者感知不到的底层信号变化特征及时反馈给上层应用,为用户体验保驾护航。 当前,华为HMS Core无线传输服务提供的弱信号预测已经与华为视频、优酷视频、爱奇艺视频、抖音短视频合作商用,后续期待支持更多的应用,服务如地铁、高铁、大型会议等更多场景。 10月23日,华为开发者大会HMS Core 6.0:连接与通信论坛,将系统介绍华为在连接与通信领域的多个解决方案,并邀请来自抖音、西山居、北斗应用研究院、爱联科技等合作伙伴,为开发者分享移动应用开发实践经验和解决方案,期待与开发者共同探索连接的价值。 扫描下方二维码,添加HDC·HMS Core分论坛小助手,加入“HDC连接与通信论坛交流群” 获取最新资讯,与行业专家交流,参与10月23日当天的在线直播。 如何集成弱信号预测服务,HMS Core为大家提供了详细的开发指导,欲了解更多详情,请参阅—— Wireless Kit开发指导 获取开发指导文档: Android、iOS、Web、快应用 访问华为开发者联盟官网 获取开发指导文档 华为移动服务开源仓库地址:GitHub、Gitee 关注我们,第一时间了解 HMS Core 最新技术资讯~

优秀的个人博客,低调大师

有了这个神器,快速告别垃圾短信邮件

前言 在日常生活中,我们时常会接收到一些垃圾短信和邮件,造成这种原因就是因为我们使用自己的手机号码在App上 注册了账号,导致手机号泄露,成为了别人发财的工具。 一、如何避免接收垃圾短信 众所周知,针对短信和邮箱都有相应的屏蔽号码或者是邮箱号的设置,但是并不是很智能。因为我们永远不知道下一秒钟究竟会是哪个大佬来光顾我们。一个一个去设置显得太麻烦,这里给大家介绍两个平台,超级好用。既不用担心泄露手机号码,也不会再接收到垃圾短信和邮件了。 Top 1.云短信 神器地址: https://www.materialtools.com/?page=1 它可以代替你的手机号进行注册,并且也会和接收到验证码,你只需要把上面能用的手机号输入到你想注册的app里面,然后发送验证就可以了。 不过,它有一个缺陷就是我们用的手机号接收的验证码它会显示在这上面,基本所有用这个神器的人都能看到,就给人一种毫无隐私可言的感觉。不过为了能不接收垃圾短信,也无妨,毕竟问题不大。 可以看到这是最近一段时间申请注册的平台名和时间。 这里可以看到已经有这么多人使用了,可见这个神器还是挺受欢迎的。有了这款神奇妈妈再也不用担心我会被人骚扰了。 Top 2.10分钟邮箱 神器地址: http://24mail.chacuo.net/ 看到这里大家想必应该能望文生义吧,其实它也是相当于云短信一样的功能,只是它的强大之处在于它是替换的邮箱号,而云短信则是专注手机短信领域方面,二者虽领域不同,但功能差不多,都是使用虚拟的号码来代替真实的号码在注册,这样以后再也不用担心别人发骚扰信息了,感觉世界会清净许多,下面我们来看下它的界面: 可以看到它目前支持两种邮箱后缀,一个是027168还有一个是chacuo。这里邮箱的获取方式有三种: 1.手动刷新 2.自动刷新 3.自定义邮箱 其中第三种方法最灵活,你想用什么奇葩的邮箱名都可以,比如小编想了一个好名字: ”哎呦不错哦@chacuo.net“,设置好后可以看到: 这样就完成了我们的个性化邮箱了。要注意的是,你的邮箱申请注册后它会提示你的邮箱是否可用,如果提示不可用就重新再设置一个,虽然很好用,但是遗憾的是,这个邮箱号只能保存十分钟,十分钟过后会自动销毁,所以要是用这个邮箱号接收到什么重要的邮件那就赶紧保存吧,免得造成损失了责怪小编没提醒你。 总结 通过对上面两个神器的了解,相信任何人用上了它们,都会给你的日常生活带来更好的感觉,不知道你是怎么认为的了?又或者你还有什么有趣的神器了?欢迎下方评论区留言。 看完本文有收获?请转发分享给更多的人 IT共享之家 入群请在微信后台回复【入群】 ------------------- End ------------------- 往期精彩文章推荐: 一篇文章教会你用Python抓取抖音app热点数据 一篇文章教会你使用Python定时抓取微博评论 手把手教你使用Python抓取QQ音乐数据(第四弹) 想要学习更多,请前往Python爬虫与数据挖掘专用网站:http://pdcfighting.com/

优秀的个人博客,低调大师

告别狗屎代码,请记住这 11 条编码秘诀!

这是一篇值得收藏起来,隔三差五就拿来重读的文章!因为作者向你保证,他“遇到的所有糟糕的代码,都是因为没采纳这些实践经验。而任何一段优秀的代码,都采纳了至少部分实践经验。” 还等什么?赶快看看这些经验就是什么吧? 我已经写了20年代码了,在此期间曾与17个团队共事过,使用不同的语言做过数百个项目。 这些项目从最简单的博客网站,到支持每秒3000多次请求的API,还有曾经热卖过的应用。 根据这些经验,再结合我读过的书,我认为编程中最重要的是:可读性。 1.可读性 表面上看来,可读性似乎很主观。不同语言、代码、和团队对于可读性的定义不尽相同。但如果深入本质的话,就会发现代码可读性有一些非常关键的因素。 许多程序员太倾向于计算机了,只要程序能运行就一了百了。尽管是老生常谈,但这种方式完全断绝了人参与的可能性。 最近几个月, 我在努力将这些人为因素提炼成11条写程序的实践经验,专门讨论如何增强可读性并降低复杂度。 我在BaseCode中写过这些详细内容,并将其应用到真实世界的代码片段中。 许多人会认为这些太基础、无关紧要,可以忽视。但我可以向你保证,我遇到的所有糟糕的代码都是因为没采纳这些实践经验。而任何一段优秀的代码都采纳了至少部分实践经验。 2.格式 我们在格式上消耗了太多精力。制表符还是空格,Allman还是K&R。总会有一天,你会意识到格式在编程中并不是最重要的。 选择一种格式,应用到代码中,然后将这个过程自动化。然后就可以重新专注于写代码本身了。 3.代码 所有注释掉的代码块、未使用的变量和无法到达的的代码都是垃圾。他们就像在对读者说,“我不关心这段代码”。 于是恶性循环开始了。日复一日,死代码最终会埋葬你的代码。这正是经典的破窗效应。 必须要找出并干掉死代码。虽然不需要把精力主要放在这里,但一定要时时留意。更多代码规范请看这篇文章《优秀 Java 程序员写代码的风格》。 4.嵌套代码 逻辑几乎是一切代码的基础。我们写代码是为了做决策、迭代和计算。一般情况下都会导致分支或嵌套,从而造成嵌套得很深的代码块。 虽然计算机很容易阅读这种代码,但对于人类则是非常大的精神负担。因此,代码会变得复杂、难以阅读。应该通过防御语句、提前返回或使用函数式编程等方式消灭嵌套代码。 5.使用对象 尽管现在是面向对象编程的时代,我们依然使用了过多的原始指令。 长长的参数列表,杂乱的数据,自定义的数组或字典结构等。这些都可以重构成对象。 这样不仅能让数据结构变得正规,还能容纳所有重复的、使用原始数据的重复的逻辑。 6.大型代码块 虽然没有具体的数字,但代码块的长度应该是有限制的。如果你认为你的代码块过大,就应该对其进行识别、重组并重构。 这个简单的过程可以让你确定代码块的上下文和抽象级别,以便正确地找出代码的任务,并将代码重构到更加易于阅读、更简单的代码块中。 7.命名规则 当然,好的命名很困难,但只是因为我们人为增加了难度。有个小技巧在编程的许多方面都能用得上,包括命名,那就是——延后。不要纠结某个东西的命名,继续写代码就好。 就算是用一整句话命名一个变量都没问题,继续写代码就好。我可以保证,当你完成整个功能之后,更好的名字就会浮出水面。 8.删除注释 在我看来这一条至关重要,删了注释我才能把精力放到可读性上。不管我如何解释删除注释的必要性,总会有人跟我抬杠,然后举出一个绝对需要注释的例子。 当然,如果哈勃望远镜要和古老的适配器连接,而后者返回一个意思不明的687,这种情况肯定需要注释来说明。但大多数其他情况下,你应该尽量重写代码使得它不需要注释也能看懂。 9.合理的返回 我们总是选择返回最奇怪的值,特别是对于边界条件的情况。像-1、687或null。然后就得写很多代码来处理这些值。实际上,null的创造者称它为“10亿美元的错误”。 应该努力返回更有意义的值。理想情况下,最好是即使在反面情况下也能让调用者继续执行的值。如果真的是异常情况,那么最好用其他方式来通信,而不是使用null。 10.三的原则 考虑一下数学上的序列。给出数字2并问你,“下一个数字是什么?”可能是3可能是4,但也可能是1或2.1。实际上你没办法知道。然后我提供了序列中的下一个数字2, 4然后问,“下一个是什么?”可能是6,8,也可能是16。 同样,尽管猜对的可能性增加了,但还是不能确定。然后我提供了数列中的第三个数字,2, 4, 16,然后问“下一个是什么?”有了三个数字之后,程序员的大脑很容易看出这是个平方序列,于是确定下一个数字是256。这就是三的原则。 这个例子虽然跟编程没关系,但它告诉我们,我们不应该太早做抽象。三的原则能阻止我们过早消除重复的努力,直到有了足够多的信息后再做出决定。用Sandi Mets的话说,“重复的代价远远低于错误的抽象。” 11.对称性 最后一条实践经验能给所有代码的可读性带来诗一般的润色,那就是对称性。这条来自Kent Beck的《实现模式》一书,书中说到: 代码中的对称性是说,同样的思想在任何地方都使用同样的实现。 不过说起来容易做起来难。对称性体现了编程的创造性。它是许多其他实践的基础:命名、结构、对象、模式等。不同语言之间、不同代码之间和不同团队之间对于对称性的定义都可能不一样。 因此,你需要花上许多年去追求对称性。但是,一旦开始在代码中使用对称性,就会迅速呈现纯粹的形式,代码的形状也会迅速变好。更多代码规范请看这篇文章《优秀 Java 程序员写代码的风格》。 原文发布时间为:2018-10-10 本文作者:Jason McCreary 本文来自云栖社区合作伙伴“Java技术栈”,了解相关信息可以关注“Java技术栈”。

优秀的个人博客,低调大师

告别高墙铁窗,AI或将终结传统监狱模式

科技几乎改变了社会的各个角落。而这种趋势之外的自由之地是顽固的刑事司法制度,特别是处理罪犯的方式。 几个世纪以来,惩罚罪犯最常见的方法就是将他们锁在“铁窗”之中。 丹·亨特教授是监狱罪犯心中的噩梦,但他并不是一个“狠心”的人。作为斯温伯恩大学法学院院长,他正在努力让基于人工智能技术的产品逐步“取代”看守所。他认为,应该通过对犯罪者的实时监测以及可以远程阻止罪犯的技术来取代监狱。这样做除了可以为政府节省大量经费之外,还能更好地保护社会免受侵犯。 “虽然技术已经在很多层面改变了我们的社会,但让人失望的是,21世纪的监狱却还是像100年前那样在运作。现在的监狱系统是臃肿和不可持续的,在过去的几十年以来,我们一直在尝试各种“封闭”的惩罚和监禁模式,但从后期的再次犯罪率的数据上可以得出,这显然是无效的;另外,如果利用监狱去看管罪犯,成本将会非常高

优秀的个人博客,低调大师

果粉请注意:准备告别 OS X,迎接 macOS 吧

苹果在改名字这件事上向来坚决。比如,2010年,随着工业设计令人惊艳的 iPhone 4 到来的,还有从 iPhone OS 更名为 iOS 的新操作系统。但有时候又会让人摸不着头脑,比如 2011 年的 iPhone 4S 叫了三年之后,随着 iPhone 5s 的到来,突然要变成小写的 iPhone 4s。又比如 iPhone SE 又大写了…… 最近,又有一个新的产品要改名字了:苹果 Mac 电脑的操作系统要从 OS X 改为 macOS(注意大小写)。这个改法其实不难猜,因为: 苹果手机的操作系统:iOS 苹果手表的操作系统:watchOS 苹果电视的操作系统:tvOS 苹果电脑的操作系统:macOS 据称,苹果将在今年 6 月的 WWDC 大会上公布这个消息。专注报道苹果消息的媒体 Apple Insider 在最新 Mac 电脑系统 10.11.4 的源代码中找到了 macOS 字样,而且知名果粉 John Gruber 在于苹果高级营销副总裁 Phil Schiller 讨论 tvOS 这个名字时,也得到了对方的暗示。 苹 果电脑的操作系统,在2000年之前一直叫 Mac OS,出到 Mac OS 9 之后更名 Mac OS X(不是 X,是罗马字母 X,代表 10,读 ten),命名变成 10.x。到了 2013 年,苹果连 Mac 也省了,变成 OS X 再加一个加州地名的方式来命名。 这次更名之后,那个伪果粉们从来没读对过的 OS X(ten),就成为了历史。 ====================================分割线================================文章转载自 开源中国社区[http://www.oschina.net]

优秀的个人博客,低调大师

用 Python 批量生成销售日报,告别每天复制粘贴

销售日报需要汇总各渠道的订单数、销售额和客单价。渠道超过十个以后,手工把数据从各平台抄进同一张 Excel 就成了明显负担:耗时、易错、且无法追溯数据来源。以 11 个渠道、日均 42 分钟手工汇总估算,每月仅此一项就占用约 15 个小时。本文用一个可落地的 Python 脚本,把这份日报改成每天定时自动生成。流程拆成取数、归一化、算指标、写 Excel、调度五步,代码可直接复用,数据源与代理配置集中管理,渠道字段变动时只改对应函数。先说清日报的结构:左侧各渠道一行,右侧是当日订单数、销售额、客单价,末尾合计并附环比。格式稳定是自动化的前提,若格式频繁变动,脚本反而增加维护成本。先把事情拆开一份"日报"其实就三件事。第一,数据从哪儿来。第二,拿回来怎么算。第三,算完怎么落盘成 Excel 并发出去。这三步我分开写,后面渠道改字段或者老板要加指标,都不用动全身。有人会问,为什么不直接用 pandas 一口气读库写表完事。因为我们的情况是混合数据源,没法一刀切。公司自有订单系统在公司内网,直接连库拉就行。另外两个渠道的销量要走平台开放接口,而这个接口按出口 IP 限流,办公室那条固定 IP 请求两轮就被封半小时。这两类数据源的取数逻辑完全不同,硬塞一个函数里只会越写越乱。也有人推荐直接用 Excel 的 Power Query。试过,图形化界面点起来爽,但渠道一多,每个查询的刷新顺序、依赖关系全藏在界面背后,出了错没法 diff,也没法进版本库。脚本丑是丑,但每一行都在眼前,新人接手看代码就行,不用我坐在旁边讲半小时。抓数据,并且要能重试网络这种事你控制不了,别指望一次就通。接口超时、平台抖一下、代理偶尔抽风,都是常态。我用了 tenacity 做重试,最多试三次,失败之间退避等待,避免一拥而上把接口打挂。报表自动化为什么绕不开代理先把背景讲透。日报要拉十几个渠道,其中有几个是淘宝、抖音这类开放平台,它们的订单接口都带反爬。办公室那条固定出口 IP,请求两轮就被限流半小时。我一开始加了 sleep 退避,没用,平台认的是 IP 不是频率。后来接了亿牛云的动态转发代理(隧道代理)。它背后是一个很大的 IP 池,只配一个固定入口,每次转发自动换出口 IP,对目标平台来说每次请求都来自不同地方,而且是匿名的,拉数据跟正常访问没两样。我不用自己维护 IP 池,某个 IP 被封也不会全盘停摆。日报一天几十兆流量,动态转发按月付,成本比自己租服务器搭池子低很多,这也是我没自己养 IP 的原因。代理的鉴权是用户名加密码,格式是 http://用户名:密码@入口域名:端口。用户名里通常带订单号和地区参数,具体以后台接入串为准,别照抄网上的例子。动态转发一般要求把调用方出口 IP 加进白名单,否则拒绝连接。我第一次配完连不上,查了半天是忘绑白名单,这种坑踩一次就记住了。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册