看完了 NeoVim 的 Tutor 文档
发布时间:2023-05-20 20:37:16
归档分类:

今天闲得没事干,于是想起了可以看看 NeoVim 提供的入门文档,是的,它是全英文的,但是里面的单词还是很简单的,颇为流畅地通读了一遍。之前只是知道一些零零散散的命令,如今感觉好多了,又学习到了很多新的知识。

  • neovim
  • Extract tar.gz file to a directory and create the directory if not exist
    发布时间:2023-05-09 16:14:24
    归档分类:

    Description

    I can run the following command to extract the tar.gz file to 'somedir' directory, But this command requires that the directory already exists.

    tar -xvf somefile.tar.gz -C somedir
    

    Solution

    Following command can extract the somefile.tar.gz file to a directory that does not exist.

    tar -xf somefile.tar.gz --one-top-level=somedir
    
  • extract
  • dwm 和 st 的安装及补丁
    发布时间:2023-05-05 15:59:30
    归档分类:

    前言

    得益于近些日子在学校深入学习了很多关于 Linux 的知识,加之之前也多次重装过 Arch ,这些因素综合起来后,这一次的系统安装可以说颇为顺畅,之前因无法理解的地方而导致难以下手的操作,所赖知识见长,逐渐克服且熟练了起来。

    本次为了更加深入地去学习 Linux ,所以放弃了像 Gnome 这样简单易用的桌面环境, 而是使用像 DWM 这样更简单的窗口管理器,虽然是自找麻烦,但我也乐在其中,我会在本文中简略地记录下折腾的过程。

    DWM 和 st 的安装

    事实上安装 DWM 非常的简单,自需要从 suckless 官网下载源码文件即可。

    
    $ git clone git://git.suckless.org/dwm
    $ cd dwm
    $ make
    # sudo make install
    
    

    编译安装后,我这里是通过 xrog 的 .xinitrc 从 tty 终端使用 startx 命令启动的:

    exec dwm
    

    启动之后的第一眼就是简陋,目前还什么都干不了,因为我甚至还没安装终端,suckless 也提供了一个 xrog 下的终端实现,叫 st 。 通过魔法键回到 tty (ps.当然也可以通过快捷键:Alt + Shift + Q 退出 dwm ),通过 tty 的终端去下载 st 源码。

    同样也是通过源码安装:

    $ git clone https://git.suckless.org/st
    $ cd st
    $ make
    # sudo make install
    

    编译安装完后,在dwm便应该通过Alt + Shift + Enter 组合键启动 st 管终端。但是毫无疑问,也是十分简陋,甚至字体小到无法看清……

    不过问题不大,我学过 C ,源码文件是能看懂的,首先就是修改了字体大小,顺带一提我还通过 pacman 包管理下载了 [ttf-fira-code] 字体。

    首先来修改一下 dwm 的字体和其大小:

    # dwm > config.h
    
    static const char *fonts[]          = { "Fira Code:size=14" };
    static const char dmenufont[]       = "Fira Code:size=14";
    
    

    保存后通过 sudo make clean install 命令安装即可

    接着修改 st 终端的字体和大小:

    # st > config.h
    
    static char *font = "Fira Code:style=Bold:pixelsize=23:antialias=true:autohint=true";
    

    保存后通过 sudo make clean install 命令安装即可

    这样修改完后,便好看很多了。

    安装 dmenu

    这个就是 suckless 的程序托盘? 总之,安装后,可以快速打开程序,也是蛮好的,这个就没有使用源码安装了,不过听说它也有很多好玩之处,之后再研究吧,总之 dmenu 通过包管理器安装:

    $ sudo pacman -S dmenu
    

    给 dwm 打补丁

    Dwm 目前其实足够我使用了, 这里就打一个透明补丁: 「 alpha.diff

    $ wget https://dwm.suckless.org/patches/alpha/dwm-alpha-20201019-61bb8b2.diff
    $ patch p1 < dwm-alpha-20201019-61bb8b2.diff
    
    

    通过 patch 命令 把补丁打进去即可,之前我都没怎么用过这个 patch 命令,用多了其实也还好,出现错误了,手动去修改源文件即可。

    给 st 打补丁

    这里打了好几个补丁:

    也是一样地通过 patch 命令打进去,这里就不再赘述了。

    安装 picom

    这是一个合成管理器,可以给窗口管理器带来需要效果,比如透明、阴影,上面的透明补丁也需要它的安装才能真正起作用。

    $ sudo pacman -S picom
    

    安装完后,编辑 ~/.xinitrc 文件,进程让它以 Daemon(后台) 的形式运行。

    compton -b
    

    (未完待续)

  • dwm
  • st
  • dmenu
  • 重新安装 Archlinux
    发布时间:2023-05-03 11:22:11
    归档分类:

    前言

    最近系统频繁死机,通过初步判断,应该是图形界面的卡死,但不合理的是 —— 我无法通过魔法键退出到tty界面……

    我尝试了复现,但这似乎是没有规律的,我其实开始怀疑是我的SSD的问题了,但转头用了两天DWM,期间没有出现卡死现象,那问题很大可能就是图形界面卡死,Gnome和我目前的系统内核不匹配?

    总之,我决定对系统做一次全面的重置。

    这里放一个 Chrome 插件: Ghelper

  • archlinux
  • [NFS] mount: Connection timed out
    发布时间:2023-04-06 20:09:29
    归档分类:

    问题描述

    Linux 服务端和 Arm 开发板客户端进行 NFS 服务的连接。

    Linux 和 Arm 开发板之间能ping通,并且处于同一网端,且掩码、网口相同,但是在执行下面的程序时发生超时错误。

    在服务端的nfs配置完全正确的情况下,Arm开发板还是无法正确连接nfs服务器。

    [root@FORLINX6410]# mount -t nfs -o nolock,hard 192.168.1.5:/home/yarnom/nfs /mnt
    mount: mounting 192.168.1.5:/home/yarnom/nfs on /mnt failed: Connection timed out
    
    

    解决

    这个问题困扰了我两天终于在这个帖子里找到了解决方案。

    Mount the NFS filesystem using the TCP protocol instead of the default UDP protocol. Many NFS servers only support UDP.

    这是在NFSv3中添加了对TCP协议的支持:

    总之,我尝试了下面的命令,使用了tcp协议:

    $ mount -t nfs -o nolock,proto=tcp,port=2049 192.168.1.5:/home/yarnom/nfs /mnt
    

    这个协议最终使我正确连接上了nfs服务器。

  • NFS
  • ARM
  • 2023-03-31 英语翻译练习
    发布时间:2023-03-31 13:20:27
    归档分类:

    Studying for a graduate exam can be challenging, but with the right mindset and study strategies, it can be manageable. It's important to prioritize your time, focusing on your weak areas while also reviewing what you already know. Practice exams can be helpful in identifying areas for improvement and getting a sense of the exam format. Additionally, developing good study habits, such as taking breaks and getting enough sleep, can increase your overall productivity and retention of material. Remember to stay motivated and keep a positive attitude, as this will help you stay focused and achieve your goals.

    备考研究生考试可能是具有挑战性的,但是只要拥有正确的心态和学习策略,就可以应对。重要的是要优先考虑时间,专注于自己的薄弱领域,同时复习已经掌握的知识。模拟考试可以帮助您确定需要改进的方面,并了解考试的格式。此外,养成良好的学习习惯,如休息和充足的睡眠,可以提高您的总体生产力和记忆材料的能力。记住要保持动力和积极的态度,因为这将帮助您保持专注,实现自己的目标。

    prioritize - 优先考虑 weak areas - 薄弱领域 retention - 记忆 productivity - 生产力/工作效率 positive attitude - 积极态度

  • 英语
  • 对未来的一些思考
    发布时间:2023-03-28 14:43:31
    归档分类:

    这段时间我在写积分题,写到后面的难题感觉特别的痛苦,我自然是不应该放弃的,我应该坚持下去。

    虽然如此劝慰自己,但在行动上还是逃避,退后。

    自闭。

    走了出来,为了什么?

    不去逃避就是最大的勇气。

  • 思考
  • 工程 [2023_3_25] 附录文件「二」 - Flask SQLAlchemy
    发布时间:2023-03-26 16:19:51
    归档分类:

    前言

    本文主要介绍 Flask SQLAlchemy 的具体使用。

    如需要了解 Flask 入门文档可跳转:

    Setup

    Install MySQL/MariaDB

    1. Installation

    MariaDB is the default implementation of MySQL in Arch Linux, provided with the mariadb package.

    Install mariadb, and run the following command before starting the mariadb.service

    # mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
    

    2. Configuration

    Once you have started the MariaDB server and added a root account, you may want to change the default configuration.

    To log in as root on the MariaDB server, use the following command:

    # mariadb -u root -p
    
    2.1 Add user

    Creating a new user takes two steps: create the user; grant privileges. In the below example, the user monty with some_pass as password is being created, then granted full permissions to the database mydb:

    # mariadb -u root -p
    
    MariaDB> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
    MariaDB> GRANT ALL PRIVILEGES ON mydb.* TO 'monty'@'localhost';
    MariaDB> quit
    

    安装 PyMySQL 和 Flask-SQLAlchemy

    使用python 提供 pip 包管理器安装 pymysqlFlask-SQLAlchemy

    $ pip install PyMySQL
    $ pip install flask-sqlalchemy
    

    Connection URI Format

    For a complete list of connection URIs head over to the SQLAlchemy documentation under (Supported Databases). This here shows some common connection strings.

    SQLAlchemy indicates the source of an Engine as a URI combined with optional keyword arguments to specify options for the Engine. The form of the URI is:

    dialect+driver://username:password@host:port/database
    

    MySQL:

    mysql://scott:tiger@localhost/mydatabase
    

    Configuration Keys

    SQLALCHEMY_DATABASE_URI

    The database URI that should be used for the connection. Examples:

    • sqlite:////tmp/test.db
    • mysql://username:password@server/db

    创建数据库

    安装完上边的套件后,就可以正式创建Mysql数据库了。

    使用root用户创建数据库

    sudo mariadb -u root -p
    

    进入mariadb后,使用如下命令创建数据库:

    MariaDB [(none)]> create database proj_20230325;
    Query OK, 1 row affected (0.000 sec)
    

    给予权限

    之后给予用户 Yarnom 该数据库的所有权限:

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON proj_20230325.* TO 'yarnom'@'localhost';
    Query OK, 0 rows affected (0.009 sec)
    

    安装 FLask-Migrate

    $ pip install Flask-Migrate
    

    配置

    from flask_migrate import Migrate
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://yarnom:root@localhost:3306/proj_20230325"
    db = SQLAlchemy(app)
    Migrate(app,db)
    

    初始化

    $ flask db init
    

    Flask 使用Mysql数据库

    创建出相应的模板:

    class Student(db.Model):
        id = db.Column('id', db.String(100),primary_key=True)
        name = db.Column('name',db.String(100))
        def __init__(self, id, name):
            self.id =id
            self.name = name
    

    使用如下命令更新数据库

    $ flask db migrate -m "說明文字"
    $ flask db upgrade
    

    Flask-Sqlalchemy 使用

    以下内容转载自flask-sqlalchemy 官方文档

    Flask 添加数据

    me = User('admin', '[email protected]')
    db.session.add(me)
    db.session.commit()
    

    Flask 查询数据

    So how do we get data back out of our database? For this purpose Flask-SQLAlchemy provides a query attribute on your Model class. When you access it you will get back a new query object over all records. You can then use methods like filter() to filter the records before you fire the select with all() or first(). If you want to go by primary key you can also use get().

    The following queries assume following entries in the database: |id|username|email| |---|---|---| |1|admin|[email protected]| |2|peter|[email protected]| |3|guest|[email protected]|

    Retrieve a user by username:

    >>> peter = User.query.filter_by(username='peter').first()
    >>> peter.id
    2
    >>> peter.email
    u'[email protected]'
    

    Same as above but for a non existing username gives None:

    >>> missing = User.query.filter_by(username='missing').first()
    >>> missing is None
    True
    

    Selecting a bunch of users by a more complex expression:

    >>> User.query.filter(User.email.endswith('@example.com')).all()
    [<User u'admin'>, <User u'guest'>]
    

    Ordering users by something:

    >>> User.query.order_by(User.username).all()
    [<User u'admin'>, <User u'guest'>, <User u'peter'>]
    

    Limiting users:

    >>> User.query.limit(1).all()
    [<User u'admin'>]
    

    Getting user by primary key:

    >>> User.query.get(1)
    <User u'admin'>
    
  • 开发记录
  • Flask