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日 30,647 阅读 1 评论
2024-11-03 Fortran标准库系列:查询变量占用内存大小 Fortran标准库系列:查询变量占用内存大小 C语言提供sizeof()运算符计算数据类型对象占用内存字节数,常用于malloc分配对象空间时使用。那么Fortran语言中是否有类似函数计算对象大小?Fortran标准实际上提供了STORAGE_SIZE和C_SIZEOF内置函数可以实现该功能,此外GNU编译器提供了额外的扩展SIZEOF支持该功能。STORAGE_SIZEFortran 2008标准内置函数,函数返回参数A的存储大小,单位是bits。RESULT = STORAGE_SIZE(A [, KIND])参数A是任意类型的标量或者数组。可选参数KIND是标量整型常量表达式,用于指定返回值的整型KIND。需要注意的是,如果传入的参数A是数组,返回的是数组一个元素占有的位数,而不是整个数组存储空间大小。SIZEOFGNU扩展,不是Fortran标准内置函数。计算参数X占用的存储字节数,单位是字节(bytes)。函数假设数组连续。N = SIZEOF(X)返回值类型是INTEGER(C_SIZE_T),值是参数占用的字节数。如果参数是POINTER属性,返回指向的存储区域字节数。如果参数是包含POINTER或ALLOC... 2024年11月03日 122 阅读 0 评论
2024-09-22 Linux服务器数据备份迁移 Linux服务器数据备份迁移 需求笔者需要将一台服务器上的所有数据备份到另一台服务器上。由于数据量比较大,需要长时间传输。为了防止登录远程服务器可能中途断开连接,考虑使用tmux + rsync组合进行数据备份迁移。用法首先确保备份服务器空间足够,避免传输过程将服务器存储空间用满情况。启动tmux$ tmux new -s backup 创建一个backup的tmux会话,并进入会话中。执行rsync备份在backup会话环境中执行以下命令$ mkdir BACKUP_DIR # 创建备份目录 $ rsync -avz --exclude={'*.o','*.mod','p4/*'} remote_user@remote_ip:/path/to/need/backup/dir/ BACKUP_DIR # 输入remote服务器用户密码其中rsync命令选项意义:-a 存档模式-v 命令执行详细信息-z 在传输过程中压缩数据--exclude 排除匹配模式文件/目录传输,以上设置不传输*.o和*.mod编译临时生成文件以及p4目录,根据自己需要进行设置。使用SSH协议传输数据,remote_user@r... 2024年09月22日 204 阅读 0 评论
2024-09-22 Fortran Sequential二进制文件读入问题诊断 Fortran Sequential二进制文件读入问题诊断 问题现有一个二进制文件rain_clmn_202306.0000.dat及对应的GrADS CTL数据描述文件,使用GrADS绘图正常显示,但通过Fortran程序读入数据会报错。CTL数据描述文件如下所示:DSET ^rain_clmn_202306.0000.dat OPTIONS sequential big_endian UNDEF 9999.000 TITLE Result for CTRL,MWR, XDEF 45 linear 5.0000 9.0000 YDEF 8 levels 3.0000 6.0000 9.0000 12.0000 15.0000 18.0000 21.0000 24.0000 ZDEF 1 levels 0.000 TDEF 30 linear 00Z01JUN2023 1dy VARS 12 CTRL1 1 0 CTRL (TS) CTRL2 1 0 CTRL (MISSED) CTRL3... 2024年09月22日 179 阅读 0 评论
2024-09-22 交互式登录shell 交互式登录shell 本文是上一篇文章[[TMOUT引起服务器断开连接解决方法]]的附带研究产物。TMOUT环境变量在Bash Beginners Guide的解释如下:If set to a value greater than zero, TMOUT is treated as the default timeout for the read built-in. In an interative shell, the value is interpreted as the number of seconds to wait for input after issuing the primary prompt when the shell is interactive. Bash terminates after that number of seconds if input does not arrive.TMOUT设置首先对read命令会产生影响,如果在指定时间内没有输入,Bash会退出read语句输入环境。其次,TMOUT会对交互式(interactive)shell产生影响,如果主提示符(P... 2024年09月22日 255 阅读 0 评论
2024-08-10 TMOUT引起服务器断开连接解决方法 TMOUT引起服务器断开连接解决方法 服务器管理员为了系统安全性和减少开销,一般会设置一定时间内shell没有活动自动断开连接。但如果设置时间过短,查查资料/休息下,再回终端工作发现已经退出登录是挺烦恼的。那么如何绕过这个限制保持SSH会话长时间在线?TMOUT变量首先我们要确认管理员如何实现该功能的。原先我以为自动断开连接是通过SSH配置实现的,后来发现是通过shell的TMOUT环境变量实现的。管理员会在系统配置文件/etc/profile中设置TMOUT值,并将其设为只读变量。export TMOUT=1200 # 保持在线1200秒,不活动退出 readonly TMOUT普通用户没有权限unset这个只读变量,这样用户就不能关闭这个自动退出功能了。$ unset TMOUT -bash: unset: TMOUT: cannot unset: readonly variable解决方法方法一一种解决思路是保持shell繁忙,可以在~/.bashrc加上一段代码:# ~/.bashrc alias bs="while sleep 1000; do printf '\33[0n'; done&... 2024年08月10日 311 阅读 0 评论
2024-08-10 Fortran标准库系列:MOD vs MODULO Fortran标准库系列:MOD vs MODULO 取余运算 vs 取模运算取余运算(remainder)在计算商时,会将商向0方向舍入。这意味着取余运算尽可能让余数的绝对值最小。取模运算(modulus)在计算商时,会将商向负无穷方向舍入。取模运算尽可能让商的值最小。当两个数都是正数时,取余运算和取模运算的结果是一样的,因为它们的商都是向0方向舍入的。然而,当两个数符号不同时,取余运算和取模运算的结果会不同。Fortran标准提供取余函数MOD和取模函数MODULO。MOD函数计算A除以P的余数。R=MOD(A,P)参数A是INTEGER或者REAL类型的标量。参数P必须与A相同类型和精度,不能为0。函数返回结果是$A-(INT(A/P)* P)$ ,返回值R符号与参数A相同,且$|R|<|P|$。MODULO计算A对P取模结果。R=MODULO(A,P)参数A是INTEGER或REAL类型的标量。参数P必须与A相同类型和精度,。返回结果类型和精度与参数相同,且返回值R符号与P相同,且$|R|<|P|$。。如果A和P是INTEGER类型,返回结果R满足$A=Q*P+R$ ,其中Q是一个整数,$R\in [0,P)$ ... 2024年08月10日 310 阅读 0 评论
2024-08-10 C面向对象 C面向对象 五星上将麦克阿瑟曾说过:“不是C不能OOP,而是C++更有性价比”。面向对象编程是一种编程思想,不和具体的语言工具绑定,但有些语言在语法层面支持使得面向对象编程实现更容易,比如C++,Python。我们常说C语言是一门面向过程的语言,但实际上也可以通过C结构体、函数指针来模拟实现面向对象编程。本文实例来自《嵌入式C语言自我修养》(王利涛编著)。类的模拟C语言中没有class关键字,但可以用结构体模拟一个类(C++中类定义也可以用struct),结构体成员类似C++类中属性,成员函数使用结构体中内嵌函数指针来模拟。// animal.c struct animal { int age; int weight; void (*fp)(void); //函数指针模拟成员函数 };类似于C++的类定义// animal.cpp class Animal { public: int age; int weight; void speak(void); //类方法 };如果需要模拟类的多个方法,一个结构体中需... 2024年08月10日 153 阅读 0 评论
2024-08-10 Fortran面向对象(三) Fortran面向对象(三) 继续Fortran面向对象的学习。Unlimited polymorphic typesclass(*) 类型称为无限制多态类型,必须拥有pointer或allocatable属性。括号中用*代替具体的类名表示可以是任意类。(联想C语言中void *通用指针概念)一般不直接使用无限制多态类型,常用作过程的哑元,使用select type结构转换为指定类型使用。CLASS(*), POINTER :: unlimited_ptr unlimited_ptr => base_target SELECT type(unlimited_ptr) TYPE IS (base) PRINT *, "base type: component value: ", unlimited_ptr%i TYPE IS (child) PRINT *, "child type: component values: ", unlimited_ptr%i,unlimited_ptr%j END SELECTpass ... 2024年08月10日 352 阅读 1 评论