- 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 上做这种修改,否则你会把事情搞砸的! ...
2025
2025-04-23 Coding as Craft: Going Back to the Old Gym · cekrem.github.io In the context of coding, our “old gym” is the mental space where we wrestle directly with problems, algorithms, and architectures without the cushion of AI generating solutions for us. 现在遇到问题,条件反射似的就想问 chatGPT,好久没有感受到复杂度带来的多巴胺了。Let’s get outta here, back to the old gym! 🏋️ #2025 #AI 2025-04-19 Link blog in a static site – Redowan Delowar Redowan 在博客上记录日常,比如做的事、读的书和看的演讲,还加了评论或引用。这样一方面在年终回顾时有成就感,另外定期写东西也能督促自己去多做、多读。文章最后也说了这个方案足够简单、有效,看着满满的记录很满足。当然,别写自己都不愿意看的东西。 #2025
甜甜圈
之前偶尔刷到 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$,则圆上每个点的坐标为: ...
力扣第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 ...
爬取贴吧图片
一直有在贴吧白嫖漫画的习惯,正好最近又在看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()方法测试一下,成功获取目标网页图片 ...