Hi there 👋

  • My name is Qihang Hu. This is my blog, i will note something here.
  • Welcome to leave me messages.

Oh Shit, Git!?! But Lazy.

原文是 Oh Shit, Git!?!,但命令还是太长啦,对它使用 Lazygit 🧑‍🚀🚀。 用好 Git 很难: 很容易就犯错了,然后想自己弥补犯下的错,简直太难了。查阅 Git 文档简直就像是个 “鸡生蛋 蛋生鸡” 的问题,你得知道你要的是啥 ,但如果我知道的话,我还他妈查个毛文档啊! 所以接下来我会分享一些我遇到过的抓狂的经历,然后用 白话 来说说我是如何解决的。 哎呦我去,我刚才好像犯了个大错,能不能给我台时光机啊!? 在 Reflog 页面你将看到你在 git 上提交的所有改动记录,而且囊括了所有的分支,和已被删除的commit 哦!找到在犯错前的那个提交记录,然后按下 gh,哈哈,这就是你要的时光机! 你可以用这个方法来找回那些你不小心删除的东西、恢复一些你对 repo 改动、恢复一次错误的 merge 操作、或者仅仅想退回到你的项目还能正常工作的那一时刻。我经常使用 reflog,在此我要向那些提案添加这个功能的人们表示感谢,太谢谢他们了! 哎呦我去,我刚提交 commit 就发现还有一个小改动需要添加 继续改动你的文件,按下 a 添加所有文件(或者你可以使用 space 添加指定的文件),然后再按下 shift+a 你这次的改动会被添加进最近一次的 commit 中,警告: 千万别对公共的 commit 做这种操作。 这经常发生在我提交了 commit 以后立马发现,妈蛋,我忘了在某个等号后面加空格了。当然,你也可以提交一个新的 commit 然后利用 rebase -i 命令来合并它们,但我觉得我的这种方式比你快 100 万倍。 警告: 你千万不要在已推送的公共分支上做这个 amend 的操作! 只能在你本地 commit 上做这种修改,否则你会把事情搞砸的! 哎呦我去,我要修改我刚刚 commit 提交的信息 选中最新一次提交,按下 r(或 R)按照提示修改信息就行啦。 ...

January 25, 2025 · 2 min · 253 words · Me

2025

1月18日 Link blog in a static site – Redowan Delowar Redowan 在博客上记录日常,比如做的事、读的书和看的演讲,还加了评论或引用。这样一方面在年终回顾时有成就感,另外定期写东西也能督促自己去多做、多读。文章最后也说了这个方案足够简单、有效,看着满满的记录很满足。当然,别写自己都不愿意看的东西。

January 18, 2025 · 1 min · 12 words · Me

甜甜圈

之前偶尔刷到 Joma 的视频 why you NEED math for programming:在终端渲染了一个甜甜圈1,当时只是不明觉厉。最近回忆起来,有点好奇就去研究了下。 他所做的事是:以固定视角,在甜甜圈表面绘制大量对应每个点亮度的像素点,让其看起来是立体的。这些像素点是 ASCII 字符:.,-~:;=!*#$@ 依次代表最暗到最亮。 主要步骤如下2: Create a circle of radius R1 centered at R2 Create a donut by rotating about the Y axes Spin the donut around the X and Z axes Project donut onto 2D screen Determine illumination by calculating surface normal (given a light source) 效果图: 首先我们要有一个甜甜圈(也就是环面),其本质上是一个旋转体。我们以 3D 空间中的点为圆心画一个 2D 的圆,然后让圆绕着环面的中心轴旋转就得到了一个旋转体。 这是穿过环面中心的横切面: 在 xy 平面上,点 (x, y) 绕3圆心 $(R_2, 0, 0)$ 旋转一圈,得到一个半径为 $R_1$ 的圆,假设旋转角度为 $\theta$,则圆上每个点的坐标为: ...

October 16, 2022 · 5 min · 1022 words · Me

力扣第166场周赛

第四题太可惜了,题目读错了以为反转要改变一行一列,其实只要改变相邻的元素(还是菜),第一次离ac这么近,记录一下。 1. 整数的各位积和之差 3分 给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。 示例 1: 输入:n = 234,输出:15 解释: 各位数之积 = 2 3 4 = 24,各位数之和 = 2 + 3 + 4 = 9,结果 = 24 - 9 = 15 示例 2: 输入:n = 4421,输出:21 解释: 各位数之积 = 4 4 2 * 1 = 32,各位数之和 = 4 + 4 + 2 + 1 = 11,结果 = 32 - 11 = 21 提示: 1 <= n <= 105 ...

December 9, 2019 · 4 min · 816 words · Me

爬取贴吧图片

一直有在贴吧白嫖漫画的习惯,正好最近又在看Python爬虫,于是无聊就想把每个帖子里的漫画都下载到本地。思路是先分析爬取一页帖子内的漫画图片,然后再分析爬取精品栏内所有帖子的漫画图片。 目标:爬取我的英雄学院百度贴吧精品贴漫画图片 工具:Python Chrome 第一步:爬取当前目标帖子内的所有图片 目标帖子URL:https://tieba.baidu.com/p/5993286218?see_lz=1 开启只看楼主,发现页数不超过一页,所以不用翻页操作,只需爬取当前一页图片即可。打开Chrome开发者工具,观察发现网页原始返回信息中就包含图片链接,所以直接使用requests库GET请求目标帖子URL,再使用PyQuery库解析返回的网页源码即可获取图片链接,然后再下载图片到本地。 使用Chrome开发者工具分析网页源码,可以发现: 帖子所有楼层信息都存在一个class=“p_postlist"的div标签中 每层楼的信息存在class=“l_post"的div标签中 每层楼中图片链接是class=“d_post_content"的div标签中img标签的src属性 分析完源码后开始编写爬虫代码: 定义get_one_page(url)方法,使用requests库获取当前目标页面的网页源码(try-except防止网页请求错误,导致程序终止) import requests from requests.exceptions import RequestException def get_one_page(url): try: url = url response = requests.get(url) return response.text except RequestException: print('第'+page_number+'页,网页请求失败') 定义parse_one_page(html)方法,使用pyquery库解析当前网页源码。根据上面的分析,使用css选择器**’#pb_content .p_postlist .l_post .BDE_Image’**获取全部img标签,并返回img标签的生成器(方便后面循环调用) from pyquery import PyQuery as pq def parse_one_page(html): doc = pq(html) images = doc('#pb_content .p_postlist .l_post .BDE_Image').items() return images 定义get_title(html)方法,同样使用pyquery库获取当前帖子标题,方便后续把每个帖子的图片存入名称为帖子名的文件夹中 from pyquery import PyQuery as pq def get_title(html): doc = pq(html) title = doc('#j_core_title_wrap > h3').text() return title 定义download_images_to_folder(images,html)方法,使用获取的图片链接下载图片到名称为帖子名的文件夹中。首先获取帖子名称建立文件夹,再循环遍历parse_one_page(html)方法返回的生成器,获取每个img标签的src属性,并下载该图片到文件夹中,图片名按顺序为1-n import requests from requests.exceptions import RequestException from pyquery import PyQuery as pq import os def download_images_to_folder(images,html): title = get_title(html) if not os.path.exists(title): os.mkdir(title) try: i = 1 for image in images: response = requests.get(image.attr.src) image_path = '{0}/{1}.jpg'.format(title,i) with open(image_path,'wb') as f: f.write(response.content) print('保存'+title+'第'+str(i)+'张图片成功') i = i + 1 except RequestException: print('保存图片失败') 定义main()方法测试一下,成功获取目标网页图片 ...

January 15, 2019 · 2 min · 232 words · Me