Manjaro下备份已安装软件包

使用Arch系列发行版Linux系统由于经常需要滚动升级,导致稍不注意就会滚挂,影响正常使用,一旦无法修复就可能需要重新安装系统了。因此为了提高重装效率,经常备份当前已安装的软件包列表是一个非常好的习惯。在Archlinux的wiki中,就提到了如何备份和恢复已安装软件包,然而里面提到的备份方法虽然简单通用,但生成的备份列表中往往存在很多自己没有手动指定安装的软件包,即使添加了-e选项指定仅列出显式安装的软件包。这里给出一种更加精确的获取手动指定安装的软件包的方法。

Manjaro个性化配置

使用了Manjaro Deepin有一段时间了,从最初的Ubuntu kylin,到Ubuntu,CentOS,Deepin,直到去年发现了Manjaro这个发行版,被其相对简单的安装和强大的软件源所深深吸引。刚从Debian系切换过来还不是很习惯,相对于Deepin的开箱即用,Manjaro还是有一些需要手动去配置的地方。本文将以刚安装完成的Manjaro为前提,一步一步记录下自己的个性化配置步骤,方便以后查阅,同时也为他人提供借鉴。

注:本文所示系统为Manjaro Deepin 17.1.2,不保证在其他Linux发行版/桌面环境/版本下完全可用。请根据自身的需求谨慎参考。具体相关命令可参考Manjaro个性化配置脚本

JNI中"No implementation found for native"错误的原因总结

说明

最近由于工作需要,我需要将C++库封装打包成AAR给Android项目使用,因此接触了JNI技术。由于完全没有经验,我在使用过程中遇到了不少坑,耗费了不少时间。
在我遇到的JNI错误中,其中最常遇到的一个报错便是在运行时提示”No implementation found for native”错误,错误信息类似于

No implementation found for void com.xxx.xxx.xxx.xxx(tried Java_com_xxx_xxx_xxx_xxx and Java_com_xxx_xxx_xxx_xxx_xxx)

导致这个错误的原因有很多,我也踩了其中不少的坑。为了避免以后再犯同样的错误,通过这篇文章记录总结一下我遇到的部分原因。

注:为了简洁,本文使用了部分可能不太合适的术语,具体如下

术语 说明
native方法 Java文件中声明的native方法
native库 包含native方法实现的C/C++库
JNI声明 native方法对应的C方法的声明
JNI实现 native方法对应的C方法的实现
JNI头文件 包含native方法对应的C方法声明的C头文件
JNI源文件 包含native方法对应的C方法实现的C源文件

CMake"变量污染"

最近在一个使用CMake进行构建的项目中,我希望在用户编译时如果通过-D CMAKE_INSTALL_PREFIX=<path>指定了安装目录,则使用用户指定的路径,否则为了避免默认安装到系统目录(如Linux下默认安装到/usr/local/目录),则另外设置一个默认安装目录,因为系统目录往往需要一定权限才能安装,,而且这个项目本身并没有安装到系统目录的需求。

查阅CMake手册我们可以知道,官方提供了CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT这个变量来判断CMAKE_INSTALL_PREFIX是否被用户手动指定。然而在使用过程中,发现这个变量经常会莫名其妙的失效。

经过查找资料和不断测试后,原来这是CMake的”变量污染”机制在捣乱。

软件折腾笔记

本人平时比较喜欢发掘和尝试各种能够为自己带来便利或乐趣的软件,但折腾的软件一多,或着部分仅在特定情况下才会去使用的软件,时间一长也便忘了如何使用,又要重新折腾一遍,因此通过《软件折腾笔记》系列进行一个记录。本文用于此系列文章的目录汇总。

Git命令整理

简介

本文用来记录日常Git使用过程中接触到的一些略高级的Git命令用法,这些命令通常是用于解决特定场景下Git相关的特定问题,以备日后查询使用。
大部分命令来源于网络,这些命令均会添加原网址,不保证链接的有效性。

记录格式为

[标题,通常是使用场景的概括]

  • 使用场景:[该命令用于解决的问题]
  • 命令:[Git命令]
  • 说明:[命令解释]
  • 注意:[使用时的注意事项]
  • 引用:[命令的引用网址]

正确使用Qt Style Sheet设置边框

为窗口或控件添加边框是经常需要用到的一个操作,通常可以使用两种方式,一是在代码中通过QPainter绘制边框,这种方式比较灵活,可以实现很多特殊效果,然而使用起来并不是很方便。另外一种是通过Qt Style Sheet(以下简称QSS),可以通过简单的几行代码实现。然而QSS本身存在很多需要特别注意的问题,稍不注意可能就无法达到想要的效果。本文探讨了一下QSS在不同情况下如何正确设置边框。

软件折腾笔记之Shadowsocks

服务器配置

安装环境

1
2
sudo apt install python3-pip
sudo -H pip3 install setuptools shadowsocks

优化系统配置

开启TCP BBR拥塞控制算法

  1. 且服务器虚拟化方式为xen或kvm,TCP BBR不支持OpenVZ,检测方式:

    1
    sudo apt install virt-what && sudo virt-what
  2. 检查内核是否为4.9以上,否则自行升级内核至4.9以上或更换较新的系统

  3. 开启BBR

    1
    2
    3
    echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
    echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
    sysctl -p

    输入sysctl net.ipv4.tcp_available_congestion_control检查是否开启成功
    输入lsmod | grep bbr检查是否加载成功

软件折腾笔记之hexo

hexo是一个基于nodejs、轻量、原生支持markdown写作的的博客系统。在看了一位同事的博客之后,我坚定地转向了hexo。但在安装配置和使用的过程中摸索了较长时间,也遇到了较多的坑点。 如果是初次接触hexo,推荐去阅读一下hexo的官方文档,会让我们对hexo的使用有一个基本的了解。 在搭建自己的hexo博客的过程中,我较多的参考了这位同事对hexo介绍的一篇文章及他托管在Github上的hexo博客

|