2023-10-21 Typecho博客网格 置顶 Typecho博客网格 基于油管视频搭建个人Typecho博客网站。视频对应文字介绍:https://iweec.com/336.htmlVPS目前使用Racknerd VPS。主题主题不使用视频中提供的版本,而是使用joe魔改版1.1.9,主题下载地址:https://github.com/XG2020/Typecho-Joe-Theme。侧边栏广告位图片适配图片分辨率调整设置广告位高度为90px (原先190px)usr/themes/Typecho-Joe-Theme/assets/css/joe.min.css外链图片不能正常显示在控制台->外观->设置外观->公共设置中“自定义head标签末尾位置内容”中添加<meta name="referrer" content="no-referrer" /> 插件代码高亮试用了CodeStyle和ColorHighlight插件发现与现在的主题不适配,最终选择了SyntaxHighlighter这款插件。插件地址:https://github.com/tinpont/SyntaxHi... 2023年10月21日 25,962 阅读 1 评论
2024-12-03 Git使用p4merge作为diff和merge工具 Git使用p4merge作为diff和merge工具 我们团队之前使用Perforce作为版本管理软件,其提供的图形界面的diff/merge工具非常好用。因此在切换到Git版本管理后,希望Git合并版本时能够继续使用这些工具。下面是配置p4merge作为Git的diff/merge工具方法。安装从Perforce网站下载免费的二进制包。通过浏览器下载,安装包网址:https://www.perforce.com/downloads/visual-merge-tool 这里我们选择和操作系统匹配的2019版本(Centos 8.4)。或者直接使用wget下载。$ wget https://cdist2.perforce.com/perforce/r19.1/bin.linux26x86_64/p4v.tgz如果下载最新版本,会因为缺少依赖动态库报错。p4merge.bin: error while loading shared libraries: libOpenGL.so.0: cannot open shared object file: No such file or directory解压缩安装包并配置PATH变量$ mkd... 2024年12月03日 80 阅读 0 评论
2024-12-03 Fail2ban阻止服务器暴力破解登录 Fail2ban阻止服务器暴力破解登录 今天通过SSH登录到云服务器上,看到离上次成功登录已经有快三万多次的非法尝试登录。可怜我的小服务器啥都没有,还要来暴力破解...There were 27607 failed login attempts since the last successful login.为了增强服务器安全,在网上找到一种可以阻止暴力破解的方法,就是使用fail2ban工具锁定多次登录失败的IP。首先安装fail2ban工具(服务器是centos系统)> dnf install epel-release -y > dnf install fail2ban -y > vi /etc/fail2ban/jail.local安装好后进行设置,新增文件/etc/fail2ban/jail.local并添加以下内容[sshd] enabled = true port = ssh filter = sshd logpath =/var/log/secure maxretry = 3 bantime = 86400其中maxretry参数指密码登录最大尝试次数,bantime指锁定IP时间,单位... 2024年12月03日 82 阅读 0 评论
2024-12-03 Fortran内置函数Transfer Fortran内置函数Transfer Transfer是Fortran一个偏底层的内置函数,其功能类似C语言中Type Casting(类型转换)。// C type casting void *ptr = NULL; itn *p = (int *)ptr;Transfer类型转换与一般的数值类型转换(比如浮点数转换为整数)不同,其转换过程中保持底层二进制位表示不变。函数语法:RESULT = TRANSFER(SOURCE, MOLD[, SIZE])其中SOURCE是要转换变量,可以是任何类型的标量或者数组。MOLD是希望转换的类型,可以是任何类型的标量或者数组,一般会设置成RESULT变量。示例:program main implicit none integer :: a real :: b character :: c a = 48 b = transfer(a,b) c = transfer(a,c) print*, 'tranfer(1) into real is ',b print*, 'tranfer(1) into character is ',c e... 2024年12月03日 86 阅读 0 评论
2024-12-03 Git合并请求的思考 Git合并请求的思考 前两天将开发的一个特性(feature)分支内容通过PR(Pull Request)合并请求方式合并到主线develop开发分支上。合并完成后复盘整个过程发现了一个问题:合并到develop分支的提交记录太多了。下面介绍了合并过程以及一些思考。在个人特性分支上开发过程中,非常频繁的提交,虽然有意识的使用amend修补提交方式合并提交,但结果提交记录仍然过多。对于一个特性分支来说,它的使命就是为了完成一个feature的开发,理论上应该只有一个commit提交记录。实际情况可能会有几个commit记录,但不应该太多。为了保持develop分支开发记录是一个线性记录,先通过变基(rebase)操作使个人特性分支变基到develop分支最新提交上,使特性分支看起来像是在develop最近提交基础上开始开发的。将个人特性分支推送到远程仓库,通过网页界面的PR按钮申请合并到develop分支。然后仓库管理员通过变基后快进方式合并特性分支内容。以上就是基于分支策略的工作流。这种变基后快进方式会将特性分支开发提交记录都会保存下来并维护develop分支线性记录特点。但这也带来一个问题:如果没有... 2024年12月03日 94 阅读 0 评论
2024-12-03 Git commit提交粒度的思考 Git commit提交粒度的思考 提交粒度考虑在Git项目开发过程中经常需要考虑的一个问题,即修改提交COMMIT的粒度如何选择。如果粒度太细,很多提交可能没有意义,合并到开发分支(如果保持线性记录的话)太多这种提交会给团队其它人员造成困扰;但如果太粗,又会导致查看前面某个节点的版本快照以及版本回退困难。所以COMMIT提交粒度应该把握”适中“原则。我认为一个COMMIT提交应该是一个完整的子任务(subtask),比如按照函数级别的提交粒度,同时要保证提交时程序完整、能够正常运行。善用amend补救提交在开发过程中我们经常遇到这样一个场景:完成一部分代码的开发,虽然完成度还不高,但希望放进Git版本库中保存,中途可能有其他事去做。当后续继续开发时下一次提交实际上内容和上一次提交紧密相关的,使用新的COMMIT提交没有必要,此时可以考虑使用补旧时提交。$ git add file # 将文件添加到暂存区 $ git commit --amend # 进入COMMIT信息编辑窗口,编辑提交信息在git commit时加上参数--amend可以合并上一个COMMIT提交内容,需要注意的是此时会生成一个新的COM... 2024年12月03日 99 阅读 0 评论
2024-12-03 万物皆可RSS 万物皆可RSS 本文简单记录使用RSS源订阅方法及相关应用软件,如果感兴趣可以自行搜索如何部署使用。工具组合:RSSHub + RSSHub Radar +wewe-rss + Fluent-reader一台云服务器(可选)RSSHub万物皆可RSS。现在很多网站不提供RSS源,而RSSHub通过爬虫、编辑页面伪装成RSS源提供订阅。可以在云服务器使用docker快速部署RSSHub。docker run -d --name rsshub -p 1200:1200 diygod/rsshub RSSHub RadarChrome/Edge浏览器插件,打开某个网站时会自动侦测是否提供RSS源。公众号文章RSS订阅使用开源项目wewe-rss部署(实际上利用了微信读书接口),在云服务器使用docker可以快速部署。wewe-rss使用介绍见B站视频:https://www.bilibili.com/video/BV17b421i7hd/?spm_id_from=333.999.0.0&vd_source=bc08bd80a6bd57e97aacb39dc192b77fRSS阅读器PC版 fluent... 2024年12月03日 100 阅读 0 评论
2024-12-03 技术随笔 技术随笔 最近看到车好多集团的CTO、前阿里P10专家郭东白从信息传播理论中看待技术价值角度说的一段话令我受益匪浅。他的原话是:对于我们软件行业的从业者来说,价值创作永远是个衰减的过程。因为我们的经验会在信息扩散中迅速贬值。如果你不度量自己的增量价值,那就没法保证自己出在价值创造的前沿。这在互联网时代是被验证过的。当我们遇到技术问题,尤其是软件方面的问题,第一反应是通过搜索引擎寻找解决方法,因为大概率在互联网上已经有类似问题和对应解决方法。知识通过论坛、博客载体记录,通过搜索引擎传播,甚至在AI时代获取答案更加有效率精准。一方面这给所有人带来了便利,但对从事软件行业的个人来说也意味着技术经验在信息扩散中迅速贬值。这就是信息化时代注脚。 更意味着从事软件技术的人员需要不断学习,终身学习。推荐大神程序员 陈皓的书《左耳听风:传奇程序员练级攻略》,从事技术的人一定能从书中收获很多。陈皓,网名左耳朵耗子,coolshell.cn博客网站站长。学生时代学习Makefile时就是读的他写的《跟我一起写Makefile》,后来就经常到他的博客网站学习,收获颇多。但更让我敬佩的是他对技术的热情、做事的理念... 2024年12月03日 78 阅读 0 评论
2024-12-02 ODC库使用:Legacy ODB API ODC库使用:Legacy ODB API ODC库中还提供了legacy ODB API接口,在官方文档中未进行说明,需要通过阅读源代码才能了解其功能。ODB C/Fortran API接口说明可以参阅:odc/src/odc目录下的odccapi.cc和odccapi.h文件定义了C API;odc/src/fortran目录下的odc_c_binding.f90定义了Fortran API,实际上大部分Fortran API调用的就是C API。ODB API命令约定是以odb_为前缀的接口名称,前面介绍的ODC库一般以odc_前缀。ODB API主要包括四类:读取ODB消息: odb_read_*接口写入ODB消息: odb_write_*接口SQL语法:odb_select_*接口追加消息:odb_append_*接口ODB API设计是传统的C接口设计风格,其接口很类似NetCDF API接口设计,而最新的ODC库API是面向对象设计,以类对象构建API。对于Fortran用户,可以阅读odc/src/fortran/legacy_fortran_api_examples.f90示例程序了解如何调用ODB AP... 2024年12月02日 92 阅读 0 评论