文章列表

启程!Linux内核开发之旅

若想在Linux内核上学习和开发,一个可以编译运行调试内核的环境必不可少。相信网上已经有不少相关文章了,但我还是遇到了不少麻烦,花费了几天时间才构建了一个令我比较满意的环境。 本文描述了一个从0到可运行环境的最短路径,且尽量只使用标准的工具,减小额外学习的负担。希望能帮助未来的其他人。特别地,本文包含了两个在其他文章中很少描述的内容,如何快速构建一个可在KVM中运行的.config内核配置,和如何构建一个全功能的rootfs。使用本文描述的流程可以使你在写完代码后的最短时间内,启动一个使用修改后内核的Ubuntu发行版的qemu虚拟机。(顺便,在调试内核上用qemu虚拟机比其他vmware,h…

编辑时间:2021/12/20 下午9:43:58 作者:huww98
查看全文

CephFS v16.2.6升级事故

本次使用cephadm自动化从Ceph v16.2.5升级到v16.2.6过程中,元数据服务MDS未能正常完成自动升级,造成了从2021/9/17 22:37到次日5:46服务中断。主要原因为上游自动化升级流程缺乏测试,导致明显的bug未被发现。只要在升级时max_mds设置大于1或开启了standby_replay就能触发。但该问题想要恢复其实应该并不难,但我在处理时的一些鲁莽操作走了不少弯路。 升级流程bug 本次更新加入了在MON中协调不同版本的MDS的功能,确保不兼容的MDS版本间不会相互通信。MON要求in状态的MDS数量为1且禁用standby_replay时才能将MDS集群升级至…

编辑时间:2021/11/26 下午8:09:46 作者:huww98
查看全文

探测图片分辨率,从20次/s到30000次/s

背景 ImageNet数据集有大约1.3e6张图片,不禁令人好奇,其中的图片的分辨率的分布是怎样的呢?在机器学习的训练中,如果我们提前缩小图片的分辨率会不会大幅提升训练速度呢? FFProbe ffprobe是著名的多媒体工具FFmpeg的一个组件,简单地通过命令行调用即可快速查询各种多媒体文件的信息。虽然它主要的用途是查询视频,但也可以用于查询图片的信息,其中也包括了的分辨率。以下是使用的方法: ffprobe -loglevel warning -show_entries stream=height,width -print_format json /path/to/image.jpg …

编辑时间:2020/11/2 上午1:31:45 作者:huww98
查看全文

在Ubuntu 20.04上运行EasyConnect(华工VPN)

近日我将主力操作系统换为了Ubuntu 20.04,总体体验还是不错的,但最大的一个问题就是华南理工大学的VPN客户端EasyConnect运行时会闪退。无法连入学校内网还是有诸多不便,本文就记录下该问题的解决方案。这个解决方案应该也适用于很多基于electron的应用程序在Ubuntu 20.04下闪退的问题。 故障描述 点击桌面图标后弹出“错误报告”对话框。在命令行运行时出现以下错误: $ /usr/share/sangfor/EasyConnect/EasyConnect Gtk-Message: 14:54:34.831: Failed to load module "canberra…

编辑时间:2020/7/25 下午1:35:12 作者:huww98
查看全文

投入机器学习中去

博客很久没有更新了,虽然我直到写在这里也不会有多少人看到,但就权且写给未来的自己看吧。为什么写下此文呢?几个月前,我结束了在腾讯的实习,进入了MSRA开始了下一份实习。然而,相比在腾讯的激情澎湃,在MSRA的工作却总是让我提不起兴致。写下此文梳理心中所想。 在当今这个时代,机器学习的出现,给很多之前难以解决的的问题带来了难以想象的进步,比如在最经典的图像分类任务上。如今如今,各个领域都在寻求机器学习的帮助来解放人力,各个领域都有大量的研究力量涌入。而在我们软件工程专业上更是如此,研究生导师中十个有九个是做机器学习相关方向的。 而我个人,虽然自认为实力出众,但也身处这个潮流之中,只得顺势而为…

编辑时间:2020/1/5 下午11:18:54 作者:huww98
查看全文

实验室的网络问题-疑似MAC地址冲突

最近我新加入了实验室,但给我分配的电脑的网络一直都有问题,具体表现如下: 可以获取IP地址,可以访问互联网,但连接质量非常差。具体表现为:ping丢包10%左右,iperf3到外网的连接测试上行带宽正常,下行带宽几乎为0,大量重传,偶尔有几个数据包可以送达。应用层表现为打开网页,下载文件非常缓慢,经常失败;远程桌面连接经常掉线。已更换网线,使用不同电脑,使用USB网卡测试,均无法解决问题。 一开始我的电脑是不能获取到IP地址的,后来咨询师兄,师兄告诉我这个端口原来登记的MAC地址不是我这台电脑的MAC地址。于是我把我的MAC地址改成了登记的地址,便成功获取到了IP。但后来就出现了上述问题。 我…

编辑时间:2019/3/31 下午12:29:29 作者:huww98
查看全文

Java对象的对比

近日我有个这样的需求,对比同一个类的两个对象中的内容。一个对象是来自数据库的,另一个是接收自http请求的。根据对比的结果我可以判断用户有没有修改其中的内容,修改的部分需不需要重新审核之类的。这个对象中还有一个列表需要对比,对比的方式是对比列表中的元素的ID和原来的是否一样。但也不是所有的字段都需要对比。例如数据库中的 如果我直接按照最容易想到的办法,逐字段的比较当然也可以,但是会就会导致大量看上去很冗余的代码。类似这样: if (!Objects.equals(oldDesc.getTitle(), newDesc.getTitle()) || !Objects.equals(old…

编辑时间:2019/3/17 下午8:33:57 作者:huww98
查看全文

C++软件部署的选择

软件的部署方案从计算机软件出现以来就一直在不断演化着。而这部署方案的演化也体现着软件行业生态,甚至是整个计算机行业的演化。以下基于我当前的理解,讨论一些在现在还有着深刻影响的部署方法。 源代码部署 源代码部署是非常古老的方案了,开发者在编写完代码后,直接将自己编写的源代码发给用户,用户自己进行编译运行。在当初计算机的硬件体系十分多样的时候,不同的芯片使用不同的机器代码,而作为C/C++的高级语言则能够在不同平台之间基本保持不变。使用每个平台自己的编译器进行编译才能保证编译出来的二进制能与自己的芯片相兼容。 时至今日,这个问题已经得到了缓解,目前依然活跃的平台只有x86,ARM,PowerPC等…

编辑时间:2020/1/5 下午6:24:32 作者:huww98
查看全文

配置文件的路径

在软件体系结构课程上,我们知道延迟绑定是增强程序可修改性的有效办法。而使用配置文件,从配置文件中读取一些经常修改的内容可以显著减少软件重新编译的次数。但是没想到,如何可靠地从代码中找到配置文件却并不是一个简单的问题。 经过一段时间的思考,并调查了其他软件的实现方案,得出了以下一些可选的方案,以及他们各自的优缺点。 使用相对路径 该方案是最为简单的方案,在需要打开配置文件时只需在程序里写相对路径即可。但是相对路径是相对于当前工作目录的,但运行这个程序的人可能并不知道这一点,而使用了错误的工作目录,导致找不到配置文件。比如在开发阶段,我可能直接在build目录里运行./a.out,但我也很可能在源…

编辑时间:2019/1/12 下午5:07:39 作者:huww98
查看全文

在树莓派上安装aarch64架构的Ubuntu Server

Update 2019/09 时隔一年,现在Ubuntu Server官方已经有预安装的镜像了,直接刷入镜像启动就可以了,也没有了本文遇到的各种奇怪的问题,没有必要进行以下操作了。但博客内容还是保留以作参考。官方镜像使用的是linux-raspi2内核(而不是generic内核)。最新操作指南请参见官方网站 以下是博客原文 树莓派真是个神奇的玩意,我手上的树莓派3B,小小身材却搭载了一颗64位的ARM-v8架构处理器,Wi-Fi、蓝牙、以太网、USB啥都不少。但可惜的是官方提供的Raspbian系统却只有32位的版本。本着极客的精神,当然要让手头的硬件发挥出它最大的实力啦。我找了一下,发现Ub…

编辑时间:2019/9/15 下午8:18:47 作者:huww98
查看全文

查看其他周课表的设计难题

查看其他周课表的设计难题 我感觉,我们真的需要更多人参与进来帮我们设计软件的功能了。移动设备的屏幕小,每一寸空间都要精打细算才行。比如,这次我们加入的查看其他周课表的功能就着实耗费了我不少精力。 第一个简单的设计版本 这是我第一感觉的设计版本,它最终没有被实现。大概的想法是在课程表的上部放一个下拉选框,一个左箭头,一个右箭头,就像论坛里常用的切换上页下页的那样 图片来自MIUI论坛手机版。 对需求的深入思考 我们知道,要想设计出好用的软件,就必须要充分深入的了解用户的需求。我们经过分析,得出使用这个功能的以下几个需求: 确认将来的某个时间点自己是否有课,以安排其他事情。 大概感觉一下之后自…

编辑时间:2017/12/10 下午4:33:49 作者:huww98
查看全文

软卓信息管理v0.1.0更新日志

重要更新 使用最新的chrome浏览器(其他浏览器或许也行),你可以把我们的管理系统添加到桌面上啦,它就像一个原生的APP一样工作,即使在没有网络连接的情况下也工作得很好。 新增查看其他教学周课程表功能 现在可以在不刷新网页的情况下刷新数据了(虽然似乎并没有什么用)

编辑时间:2017/12/10 下午4:40:10 作者:huww98
查看全文

软卓信息管理系统网页离线使用实践

我以前都没有怎么深入了解过网页前端的开发技术。最近与同学合作开发软卓班级信息管理系统,使用SPA模式,我这才去深入了解了一下近期前端技术的发展。其发展速度真是令人瞠目结舌,我们不得不佩服前端开发人员强大的学习能力。 闲话休题,我们来说一说如何使网站能够在离线的时候正常使用吧。对于我们软卓信息管理系统来说,它的界面设计很像是一个手机app,我们自然会想到,如果它和app一样,离线也能用该多好呀!上网一查,还真的可以! Service Worker Service Worker是最新的Web标准的内容,目前大多数最新版的手机和电脑浏览器都已经至少支持了最基本的功能。它的基本功能就是以编程方式为网站…

编辑时间:2017/12/9 下午12:59:25 作者:huww98
查看全文

Windows中控制台应用的Unicode支持调查

先说结果,Windows控制台中的Unicode支持和想象中还有一些距离,我研究了一天半时间,目前还没能在控制台中获得完整的Unicode支持,在UCS-4中超过两个字节编码的字符我还没有成功地使其显示在控制台中。幸运的是,这些字符很少用,并且,我成功地输出了UCS-2中用两个字节编码的各种字符。 控制台本身的限制 控制台本身对Unicode的支持不是很彻底,以下是我尝试的方法:将🍌(U+0001F34C)𢒉(U+00022489)这两个字符以UTF-8(无BOM)编码保存于test.txt文件中,在控制台中输入chcp 65001以将当前代码页更改为UTF-8,然后在命令行输入: ty…

编辑时间:2017/10/15 下午9:01:02 作者:huww98
查看全文

关于ssh连接时的系统信息

记得我首次使用腾讯云服务器的时候,在每次ssh连接的时候都会有一段描述系统当前状态的消息。就像: Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-53-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Sat Mar 11 16:…

编辑时间:2017/3/11 下午5:47:18 作者:huww98
查看全文

Bash自动补全

想必大家都知道Linux的Bash的自动补全吧。在输入完部分内容后,按下Tab键,如果只有一个可能的候选内容,Bash就会帮你自动补全剩余的内容。如果有多个,那么再按一下Tab键,就会显示可用内容的列表,然后你可以继续输入,直到只剩下一种可能,再次按下Tab键即可补全。十分的方便。 我在之前的博客博客构建之路-部署中提到,我写了一个脚本用于自动化软件的发布过程,这个脚本有一个参数,为了最大限度节省人力,我希望能自动补全这个参数。 Bash的内置命令complete和compgen便是用于自动补全的,前者用于指定每个命令应该如何补全,而后者用于辅助你生成自动补全的候选内容。下面就来小试牛刀以下吧…

编辑时间:2017/3/11 下午5:47:08 作者:huww98
查看全文

博客构建之路-技术、框架选择

接到这个任务,按照道理来说,首先我要考虑的就是采用什么技术和框架了。 但其实我也没啥要考虑的,因为我在此之前对这方面的了解几乎为零。我高中自学了C#语言,到大学学了C++,都用的是Visual Studio。我也比较关心微软的技术,可以说是微软的粉丝了,微软最近几年把他的很多项目都推向了开源和跨平台,我选择微软的技术也正好可以乘此机会体验一下这些新技术。再加上这样的话我可以利用我高中自学的.NET平台的知识。 因此,我几乎没有犹豫就选择了ASP.NET Core MVC。因为我想把它部署在腾讯云的Ubuntu系统的服务器上,所以数据库方面选择了MySQL,用Entity Framework C…

编辑时间:2019/3/11 下午3:47:23 作者:huww98
查看全文

博客构建之路-概述

这是个值得纪念的项目,这是我做的第一个网站项目。 2016年,我满怀希望进入华南理工大学软件学院学习。进入大学,我高中自学的一些编程知识使我有了很大优势。很荣幸,我成为了校学生会网络队的一员。而你现在看到的这个博客,就是网络队布置给我们的第一个任务。任务要求很少,几乎完全是自由发挥。 我以前也没有写博客的习惯,那既然现在这个博客核心功能已经完成,已经可以正常使用,我就写些博客来记录下这个博客的构建过程吧,一来与他人分享,二来在实际体验中对这个项目做出改进。 技术、框架选择 新建项目 文章的新建编辑和删除 权限设计 富文本文章编辑器 图片上传 多级文章分类功能 部署 本项目开源于GitHub…

编辑时间:2017/2/24 上午12:49:58 作者:huww98
查看全文

Change Log

2017年2月4日 第一个版本上线啦~ 2017年2月6日 修复:日期现在以中国习惯展示了。 2017年2月11日 修复:博客现在支持长度大于255的文章内容了。 2017年2月12日 修复:博客编辑界面的HTML源码编辑模式现在可以直接粘贴HTML源码而不会发生格式错误了。 2017年2月13日 新增:博客文章自定义链接地址 2017年2月14日 新增:全新的文章列表页,旧版页面可在这里查看 2017年2月15日 修复:摘要的长度更加统一,在粗体斜体处分割时不再会出现格式错误。 2017年2月20日 更改:全新的Markdown文章编辑器 2017年2月22日

编辑时间:2018/9/9 下午5:21:43 作者:huww98
查看全文

博客构建之路-部署

最近在搞部署环节,我就先写这一部分吧。我打算介绍一下我把我的网站部署到腾讯云的Ubuntu系统的云服务器上的过程,记录一下遇到的一些坑。 手动部署 微软官网有专门针对这个情景的文档:Publish to a Linux Production Environment,写得很不错,但是就给我这样的新手带来了很多需要研究的地方。 安装软件包 根据官网的.NET Core installation guide安装.NET Core。(如果你使用独立部署,这一步可以跳过,因为.NET Core运行时已经包含在你的程序里了。 另外,还需要安装Nginx作为反向代理,以及安装MySQL数据库。在远程服务器上…

编辑时间:2017/3/5 下午1:39:43 作者:huww98
查看全文