0%

起因

我在做自己的年度总结的图片之后,做完发现图片实在是太大了,有79MB之大,于是为了能在某不知名的绿白色白黑红色社交平台上发出来,我寻找有没有能切九宫格的本地工具
结果当然是没有,不然也不会有正在写这这篇文章的我了
我找到的基本都是在线 收费 这种东西, 拥有一定动手能力的我(存疑) 当然不会向这种东西低头,于是我开始查(问)文(A)档(I)

过程

最开始我就只是开发一个单纯的就我自己用的程序
↑其实就是单纯的停留在调试的阶段,能用就行的程度

过了几天之后,我突然想起来我为什么要做这个东西的契机,想到可能会有其他人和我一样需要这种纯本地的、离线的运行的工具,于是我就开始动手完善这个程序

思考的内容:

  1. 给别人用,总要给别人处理吧,于是我把初版的程序稍微改了一下,输入文件还是 input.png 输出是 output.png ,起码能有人简单用一下
  2. 进一步我发现这样貌似对于使用者还是太麻烦了,并且上一个阶段还是一个脚本文件的状态,并不符合普通人使用程序的习惯,于是我开始问AI,做 UI 出来,给别人用
  3. 其实到上一步我本来就要结束了,但是我又想到了,既然做了,为什么只能处理单个的特定文件?还不能自定义输出路径?不如让它在处理上更加强大,于是我增加了多文件处理与输出文件路径自定义
  4. 加了多文件处理之后,我想到了图片文件常用类型还是挺多的,那我就做多点覆盖吧。于是我把原本的 png 拓展到了 png jpg jpeg bmp 四种比较常用的图片类型
  5. 到此我的程序框架基本完成了,我就修改一下程序的UI配色,我在 配色表 进行的配色参考,并增加Tips,让使用者知道应该如何使用、谁开发的以及作者对这份程序持什么样的态度(因为Aria2的事情)
  6. 原本我就想要打包了的,但是我突发奇想,“欸!我们来搞个多线程的特性吧!不止!我还要用显卡加速工作!”,结果当然是失败了,不清楚为什么处理到我最初要处理的那张 79MB 的图片的时候程序稳定的崩溃了,于是被迫放弃了
  7. 经过上面的一条,算了,我们来增加结算页面吧( , 于是我稍微多用了一点性能来计算本次处理用时,还要精确到毫秒级别,给别人好好进行跑分排名
  8. 既然都有用时计算了,我们再来统计一下本次的处理文件数量吧
  9. 到了第8点我又想到了“对哦,我们没注意到过,既然我都支持多文件数量、类型的处理了。一会别人处理完出来,要是文件命名又不规范,一会岂不是要在一堆像垃圾堆一样的文件夹里面找哪个是哪个”,于是我多加了一个判断,判断是否需要帮他们来分类一下每种图片类型存放在我指定的分类文件夹中

好了,以上就是我在做这个程序的时候的思考

结尾

我在上课的时候来兴趣了,想看看GitHub上面到底有没有人做我这个,结果搜索出来了,发现有两个。
一个是给图片多加边框
一个是拥有预设的切割工具,是一个Android平台的app
一看到就让我不是很想接着开发完善自己这个工具了,但是处于学习,我可能会接着用这个程序来实验学习
就这样,886

操蛋的过程

在上个星期听到院里出资让一个跟学校合作的企业给我们上课,我一听到能白嫖里面报了个名去玩玩,结果今天(划掉)昨天一去,发现比纯开发软件无聊太多了。
首当其冲(我就要这样用【),这个开发板(GEC6818)的性能就很几把差,还不如在闲鱼上面东拼西凑凑出来的「E3神教」性能好
这个开发板集成了LED灯(废话)、一个性能很几把弱的CPU、外放音频、一个不知道链接速度是多少的网口、一个明明是VGA口,但却用来拿个转接口到USB作为链接传输文件数据的口(看不懂这个操作)、一个DC 5V 3A的电源口、一块响应速度&刷新率&色彩都很差的屏幕
对这个这个破开发板写东西感觉太没意思了,不如折腾旧手机都比这个有意思,性能更强、传感器更多、生态更丰富,最重要的是手机还比这个笨重的开发板轻好几倍
人生苦短,我为什么要为难自己去配置环境(恼
把原本几分钟就能搞定的东西拖到一晚上差点没做完,虽然收获不少
↑指从「龙鸣」变成了「时间大人」的程度


1. 先是解决虚拟机网络连接的问题

1
2
3
4
5
6
- 设置虚拟机网络连接方式为 仅主机连接  
- 再在虚拟机Ubuntu的终端分别输入一下命令:
- sudo service network-manager stop
- sudo rm /var/lib/NetworkManager/NetworkManager.state
- sudo service network-manager start
- 然后就可以愉快在虚拟机冲浪了

2. 熟悉包管理的命令

1
2
3
- apt与apt-get的区别
- apt是对 apt-get 的进一步封装的包管理器,有更多的list(显示包列表)等更多实用的命令,并且再安装包时输出的信息会比 atp-get 会更加简洁
- apt-get 更加接近底层的包管理器,输出信息更加丰富,方便排查在安装时出现的错误位置

3. linux的一些常用命令笔记

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- rm fileName 删除 fileName 这个文件
- tar fileName 使用tar工具解压 fileName 这个文件
- mkdir folderName 创建一个叫做 folderName 的文件夹
- sudo 临时获得管理员权限
- chmod [1-7][1-7][1-7] fileName
- 每个文件都有三种权限类型
- 读 - read - 4 - r
- 写 - write -2 - w
- 执行 - execute - 1 - x
- 可分配给不同类型的三种用户
- 文件所有者 - user - 创建文件的用户
- 所属组 - group - 创建文件用户所属的用户组
- 其他用户 - other - 不是上面两类的用户
- 权限的组合可以通过将这些数字相加得到。例如:
- 读和写:4 + 2 = 6
- 读和执行:4 + 1 = 5
- 读、写和执行:4 + 2 + 1 = 7

Servlet的生命周期(业务代码的执行顺序)

  1. 创建,重写(@Override)init()。此方法在第一次访问servlet时自动调用,只会执行一次
  2. 处理请求,重写service()。此方法每次访问servlet时都会自动调用,可以调用多次。
  3. 销毁,重写destroy()。此方法在服务器关闭时自动调用,只会执行一次。

Servlet的运行工作过程

  1. 客户端想服务器的某个servlet容器发出Http请求。
  2. 服务器的Servlet容器接收到请求。
  3. 服务器的Servlet容器根据请求信息创建一个HttpServletRequest对象(此过程由Servlet自动容器完成),并将客户端的请求的信息封装到HttpServletRequest对象中。
  4. 服务器的Servlet容器创建一个HttpServletRepose对象(此过程由Servlet容器自动完成)。
  5. 服务器的Servlet容器调用HttpServlet对象service()方法,把Request和Response作为参数,传HttpServlet对象。
  6. HttpSevelet对象调用HttpServletRequest对象的有关方法,获取客户端的Http请求信息。
  7. HttpServlet对象调用HttpServletResponse对象的有关方法,生成相应数据。
  8. Servlet容器把HttpServlet的相应结果传给客户端。

后记:
hexo的这个tags和categories功能是真几把鸡肋啊,定位重复了,还不允许设置同为一级的tags和categories。

在遇到数据库里面没什么重要的东西的时候,又忘记密码了,什么都不会干的时候,又不想先卸载再重装一遍的时候,可以使用这个初始化数据库的方法(这里只讨论Windows系统)

报错ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)

  1. 打开开始菜单,搜索“计算机管理(Computer Management【或者去控制面板找,Windows11改了名字叫做“管理工具”】)”并打开到“服务和应用程序->服务”,找到你的MySQL服务,停止运行相关的服务。
  2. 去到你安装MySQL Server的根目录下,找到my.bin这个文件,把它移动(剪贴,ctrl+x)到MySQL\bin的目录下,接着删除掉data目录下的所有文件(保留data文件夹)
  3. 用管理员身份打开命令提示符(cmd),输入sc query mysql(这个要对应上你的对应服务的名字,例如有的人的MySQL服务会叫做MySQL80,那么就输入sc query MySQL80)查看MySQL服务是否存在(其实是句屁话,走个过场罢了×),然后再输入sc delete mysql删除MySQL服务。
  4. 输入mysqld --initialize --user=mysql --console,初始化MySQL数据库并打印出初始化的密码,你的密码在@localhost的后面跟着的一串字符,记得先复制一下
  5. 输入mysqld --install安装MySQL服务。
  6. 输入net start mysql启动MySQL服务。
  7. 在接着打开一个新的命令提示符(cmd),输入mysql -u root -p,然后输入刚才复制的密码,回车。进入到MySQL命令行界面,输入show databases;,如果出现了mysql这个数据库,说明初始化成功。
  8. 最后修改密码,输入set password = password('your_new_password');(注意密码要用单引号包裹),然后输入flush privileges;刷新权限。
  9. 输入exit;退出MySQL命令行界面,然后再打开一个新的命令提示符,输入mysql -u root -p,然后输入刚才修改后的密码,回车。
  10. 至此,你已经成功的初始化了MySQL数据库,并且修改了密码。(哦么跌多.gif)

来自一位以为自己已经不需要再配置MySQL但是被老师的一句命令给又要搞的重新配置的同学(也就是我)ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';虽然不知道为什么会错,但就是输入了这句命令了之后,我本来的root密码进不去,新改的123456也登不进去,最后还是用了上面那个方法才解决的,真是够操蛋的。
顺带一说,上面那句命令ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456mysql_native_password是指的mysql的原生密码加密方式

前提:搞定了git的用户配置、 与自己的github账户进行了ssh绑定链定、创建一个属于这个项目的仓库

超级常用的指令

git add . | 把此目录底下的所有文件加入提交缓存中
git clone | 将一个github上的仓库资源克隆到本地
git commit -m '' | 提交文件到指定的仓库中,在''中填上本次提交的信息


将本地项目文件推送(push)到github上的仓库的要打代码的流程

建立本地仓库与远程仓库链接:git remote add origin 项目链接
添加根目录上的所有文件到缓存区:git add .
提交文件到指定的仓库中,在’’中填上本次提交的信息:git commit -m ''
把远程仓库和本地仓库同步:git pull --rebase origin main
把仓库中的文件推送到github仓库:git push -u origin main
结束


一些遇到的错误情况

  1. git返回错误:error: src refspec main does not match any时,表示此时你所要提交文件到的分支(branch)不在,个人创建仓库(Repositories)的时候一般都是为master/main两种名字,如果你上面所输入的提交代码为git push -u origin main又出现开头所说的错误的话,此时只需要将github上你的仓库的分支(branch)修改名字为‘main’,输入代码git branch -m master main

    贴上github为什么要这么做的原因:
    GitHub is working on replacing the term “master” on its service with a neutral term like “main” to avoid any unnecessary references to slavery
    GitHub正在努力将其服务中的“master”一词替换为“main”等中性术语,以避免任何不必要的奴隶制提及(机翻)

  2. git返回错误:fatal: unable to access '仓库地址': Failed to connect to github.com port 443 after 21057 ms: Couldn't connect to server时,表示网络出现错误,可能是此时电脑开着网络代理工具
    输入git config --global --unset http.proxy
    git config --global --unset https.proxy
    用来取消git的网络代理使用

今天在床上看到一个妹妹很可爱,走近一看竟然在写代码,我大喜过望,走过去想和她一起卓艾,就坐了过去,妹妹人也特别好,一直和我在聊天,讨论各种英雄的特点。然后我突然开始写代码,妹妹才发现我写的都是Rust、Haskell、Lisp这种高端语言,妹妹看着她的程序冷汗直冒,一直不敢新建项目。我看到妹妹的窘迫很温柔地问她是不是写的C,没关系的,语法简单但是上限也不低,写C的程序员都很懂计算机系统和结构。她一听更不敢说话了,我看妹妹没说话又说没事没事,写Java也没什么的,毕竟做大型项目能力不俗。见她还没反应,我的表情突然有点尴尬地笑了笑问她,该不会是写Python的吧,虽然语言一般但是生态很好,一起做做数据分析也没什么。她只好告诉我她写的是js,我的脸色唰一下就变了:“我说你怎么不敢说话,原来是写js的。”我看了她的代码之后,眼神中的鄙视更深了一层。“写js,还用typescript,别的语言一个都没用过?js码农真下头!愁表资滚,别跟我卓艾,看着都恶心!”

Soyorin的精彩回顾~

要是事先知道我就会阻止了😭

曲目都结束了她们却突然开始演奏😭

对不起没能阻止她们😭

小祥你一定很生气吧😭

你会生气我觉得是当然的😭

但是请你相信我我们原本真的没计划演奏春日影😭

真的很对不起😭我保证我不会再擅自演奏那首歌了😭

我也会要其他人以后绝对不要再演奏那首歌了😭我们可以稍微谈谈吗😭

我很珍惜CRYCHIC😭所以春日影擅自被人拿去演奏我也和小祥一样难受😭

希望你能了解我的心情😭拜托你约在哪里我都去😭我不得不组乐团的理由也会好好和你说清楚的😭

只要你愿意当面听我说你就一定能理解的😭我是站在小祥你那边的😭我想见你😭

来自不知名的客服用户的留言:HA☆NA☆SE

这不也挺好的嘛

╯  乀

ヘ  へ
 ′
 ﹀

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment