哑铃片的组合有几种,以及使用Excel解决

对于实现需求“一副哑铃,有可替换的哑铃片 0.75kg,1.25kg,2kg,2.5kg每种各4片。可以组合出哪些重量”,此前写过一篇博客,https://zhuanlan.zhihu.com/p/702387535。我当时感觉有条件的穷举相当困难,束手无策,二猫用C/C++解决了。上次那个故事告诉我们,精确描述需求经常相当困难,即使你觉得问题简单并且考虑清楚了。

前两天练着的时候,突然想到,好像用Excel能解决。这次的故事告诉我们,如果需求清晰了,一切都不是问题。

总体的思路是——先穷举、再过滤。

问题1. 约束条件:两个哑铃重量相同,每个哑铃的两端重量相同。
2.5kg,2kg,1.25kg,0.75kg 共4种哑铃片。

思路是这样的。

(1)在每个重量组合中,4个哑铃片的每个有2种状态,
分别为0和1,1代表取、哑铃片拧在杆上,0代表舍、哑铃片不拧在杆上。

(2)哑铃片彼此重量不同,因此分配4种不同的权重,对应二进制每位2^3~2^0。

步骤如下。

(1)Excel表格的左半边,函数的自变量及取值。

第1行以4种哑铃片的重量作为标签;
第2行的数据是哑铃片的重量,用于接下来的计算。
第3行开始穷举4种哑铃片的所有状态可能。
其中 0000代表4个哑铃片都舍;
0001中的1代表0.75kg哑铃片取,其余哑铃片舍;
0010中的1代表1.25kg哑铃片取,其余哑铃片舍;
0011代表1.25kg和0.75kg哑铃片取,其余哑铃片舍……

其2^4=16种可能。

(2)Excel表格的右半边,函数值。
“半边”这一列,用于计算单个哑铃一端的重量。公式为
每个哑铃片的重量 * 每个哑铃片的状态0或者1 ,4个哑铃片累加。

也即 sigma( 每个哑铃片的重量 * 每个哑铃片的状态 )

也即 2.5kg*状态a + 2kg*状态b + 1.25kg*状态c + 0.75kg*状态d

下图中,D6是0.75kg哑铃片的状态,d是0.75kg哑铃片的重量。

如下图,得到哑铃组合的16种可能。

(3)接下来,把单个哑铃的一端加倍,再加上杆的重量1.1kg。

16种可能,不重不漏。其中有些组合的重量是相同的,给予保留。在锻炼中,这时的重量分布不同,旋转等动作的时候会有不同感觉。

按重量排序。需要排序的原因分析在第2个问题中详述,此处从略。

问题 2. 放宽的限制条件:只组装出单个哑铃。
限制条件:每个哑铃的两端重量相同;每端不超过4个哑铃片。

2.5kg,2kg,1.25kg,0.75kg 共4种哑铃片,每种2片,共8个。

(1)自变量-取舍状态,穷举所有可能,函数值-哑铃重量。

下图为局部,只包括了所有可能中的8种。

按问题1中的思路,把每片哑铃赋值为一个自变量,取值为拧上或不拧上的状态1或0。共2^8=256种可能。

函数值,半边(单个哑铃的一端)重量,取值为

Sigma( 每个哑铃重量 * 每个哑铃片的取舍状态)

下图为局部,只包括了所有可能中的4种。

接下来,求单个哑铃的两端,再加上杆的重量。

(2)过滤条件1 相同重量哑铃片的去重

有一种情况,在穷举中认为两种不同组合,但在需求中视为相同的组合,需要去重。

例如:两个0.75kg哑铃片间没有任何不同,因此取任何一个,在需求中认为相同。但是在上述穷举中两个0.75kg哑铃片的状态是不同的变量,所以未去重。

解决方案如下。

两个相同重量的哑铃片,设1为取,0为舍,共有如下4种可能组合。

哑铃片a 哑铃片b
0 0
0 1
1 0
1 1

我们可以注意到,以上4种组合中 01 和 10 两种状态是完全相同的,因为在需求中两个相同重量的哑铃片没有任何不同,二者取哪个并无区别。

根据以上分析,我们过滤掉 10 的这种情况。

即 遍历4种哑铃片,只要其中任何一种哑铃片有10这样的组合,去除这一组合。

在Excel中分两步完成。

第一步 取重量相同的2片哑铃,如果组合为10,作标记为1。
算法是 左侧的权重为2^1=2,右侧的权重为2^0=1;如果 左*2 + 右 的值 为2,那么标记赋值为1,否则赋值为0。如下图所示,标记“0.75kg - 10”为1。

第二步 遍历所有4种哑铃片,作 或操作,即4种哑铃中有任何一个符合(组合为10),对“有哑铃片存在10组合”标记为1。如下图所示。其中的“+0”是为了把TRUE或FALSE转为1或0的形式。

(3)过滤条件2 哑铃片超过4个,去除

对左侧的状态 求和,哑铃片每取1片会有加1。如果总数大于等于5,对“哑铃片4个及以下”作标记1。

(4)过滤条件1 + 过滤条件2

上述两个条件中任意一个标记为1,那么标记“两条件过滤”当前组合为1。

设置筛选条件如下,去除所有标记为1的行。

(5)排序

筛选完成后发现,与问题1不同的,哑铃的重量并非由小到大升序排列。原因是二进制权重(以及所有带权的进位制)都假设 右边的所有位取1所得到的结果,小于 左侧任意一位的值。如二进制的100 > 011,如十进制的 1000 > 999。这样,按0000~1111穷举权重,得到的结果才是符合升序排列的。即相当于按下图的条件排序。

在下述反例中,
状态0000 1111得到重量4,
状态0001 0000 得到重量2。

状态 自变量值 0000 1111 < 0001 0000,
重量 函数的值 4 > 2。

这导致的按状态升序排列所有组合,函数值并非全都符合升序排列。

在Excel中,容易处理,按列 半边重量(或*2未含标,或加杆1.1kg,顺序相同)排序。

(6)得到结果

因为有筛选,所以如果想把结果复制粘贴到Excel之外,会把筛选掉的组合也一并复制粘贴出来。

排除筛选掉的行的方法,在Excel中按如下步骤操作。

第一步 Ctrl-g 或 F5 得到 定位对话框。

选择 定位条件。在下图中选中 可见单元格。

Ctrl-c复制,打开或新建 另一个工作表,鼠标右键 | 选择性粘贴。如下图所示,按 数值 粘贴。

共49种可能。经与二猫的工作核对,一致,旁证我的结果是对的。

画图分析,双哑铃 其中每个哑铃重量的增长,如下图所示。

从图中可以看出,(1)增长较为平缓,这样锻炼时可以组合出步进不那么激进的重量;(2)某些重量有不止一种组合。相邻求差发现步长有三种,分别是0、0.5、1、1.5。其中6处步长为1,4处步长为1.5,2处步长为0.5.

单哑铃的重量增长,如下图所示。具有与双哑铃相同的特性。

相邻求差发现步长有四种,分别是0、0.5、1、1.5,其中多数是0.5,更多哑铃片使增长更平滑。7处步长为1,1处步长为1.5——最后一步。

-----

https://zhuanlan.zhihu.com/p/709971919
微信公众号:杨贵福

避免雨课堂在切换窗口时暂停视频

在疫情期间对雨课堂就久闻大名,因为不喜欢被强迫,更喜欢自由发挥的感觉,所以未得一见。最近才知道雨课堂有个“为了你好”的功能,就是把网课切换到后台的时候,视频会停止播放。甚至在桌面上并置两个窗口,把另一个窗口设置为活动时,雨课堂的视频也会暂停。

一方面不喜欢被操控的感觉,另一方面喜欢操控代码的感觉。所以,手痒打算试一试如何禁止这个贴心的特性。我平时用 firefox,这次偏偏没有找到有些贴子提到的界面,所以只好换成 Chrome。

如果我是雨课堂的前端程序员,检测窗口不活动最直接的方法是 检测鼠标离开。就从这里试,姑且一试。

1. 技术原型 设置断点,找到代码,修改

打开目标页面,就是网课那页。在 Chrome 中,按 F12 进入 [这个界面叫作什么]界面。选择 Sources。

在窗口的右侧,Event Listener Breakpoints | Mouse | mouseout 设置断点。

动一下页面,东点西点,进入离开,触发断点。鼠标点击下图中红色方框中的按钮,或者按 shift-f11快捷键,跳出当前函数几次。

直到看到下图中的代码。用双斜线注释下图中红色方框中的那一行。在本文中,以下我们把这个文件称为目标文件。

注释以后如下图所示。

Ctrl-s保存。

清除断点。

此时,在不关闭当前页面和F12的前提下,可以连续播放视频,在切换到窗口以外时视频不会被暂停。

2. 下一节课 手动修改代码

载入下一节课时,或者刷新当前页面,修改刚刚那行代码以后就可以避免视频暂停了。

载入下一节课时,不必再次设置断点。通常,F12页面不关闭,在F12d页面上显示的就是这个文件的这个位置,只是代码又刷新成没有注释的版本了。一眼就能看到那行关键代码,注释掉就完成了修改,能避免视频暂停。或者按 ctrl-shift-f 显示 search,在文本框中键入要找的代码,回车就能找到目标文件及代码所在的行。打开文件,注释那一行就可以避免视频暂停。

3. 自动 超驰

每次修改代码还是不够自动化。在写 chrome插件或者油猴脚本 自动修改js代码或变量或函数之前,还有轻量级一点并且相对自动化的对付手段。

在目标文件上鼠标右键,选择下图中靠近下方的红框所在的菜单项, Override content (超驰)。注意看靠近上方的红色方框,目标文件已经修改完成了。

浏览器会在上方菜单之下显示一段文字,并选择文件夹保存修改过的js文件。

浏览器会要求本地硬盘的权限,如下图,允许。

附:以上两条消息对近视眼丰富不友好,如果不弹出系统菜单,那个大个屏幕,根本就看不到消息的存在。

完成以上操作后,载入下一节课,或者刷新当前课程,视频播放以后不会因为切换出窗口而暂停。原理是,目标文件不从远程载入,而是从本地的 override目录中那个刚刚保存的文件载入。从下图中我们可以看到,文件不在Page中,并且右下角标记了淡紫色圆点,表示使用这个本地文件超驰目标文件。

4. 更自动 及 其他

以上方法,适用于对前端开发感兴趣的同学。如果想给非程序员的其他人使用,还需要开发成 Chrome插件,或者油猴脚本(这和自动开始下一课是两种不同功能)。我猜测在 Burp 中正则表达式匹配 js 文件内容,在线修改,可能也行。我还看到有贴子用 python 代替浏览器的角色,发送心跳信号,极短时间内就学完了。

探索原理,熟悉工具,花费的时间比循规蹈矩地学一遍还要长。不过,乐在其中。


https://younggift.net/

https://www.zhihu.com/people/yang-gui-fu-52

如何理解一个数的无理数次幂

1. 问题

PQ同学在朋友圈提到,“如何理解一个数的无理数次幂?”我回复,“(3^x)^x = 9,求x。”

简单解读一下。写成更易读的形式为,在下面这个方程中求x。

我们容易猜测到, 刚好符合要求。接下来可能想到,解可能不唯一,然后想到 也是一个解。所以,这个方程如果有解,那么要求3这个数的次幂是无理数。因此,如果这个方程有解、有意义、成立,那么,一个数(在这里是自然数3)的无理数次幂就需要有意义。换言之,这个方程就是一个数的无理数次幂的意义,就是“如何理解一个数的无理数次幂”。

以上对解的猜测是否正确,可以找一下旁证。

用Geogebra,没错。

用 wolfram alpha https://www.wolframalpha.com/input?i=Solve+%283%5Ex%29%5Ex%3D9

得到2个解。

化简其中一个,结果没错。

数值约等于1.414,正是我们熟悉的 +sqrt(2) 和 -sqrt(2)。

2. 对这个方程又如何理解

单单这么一个方程,看起来有点莫名其妙。你能会觉得这并没有回答,而只是对问题的重复。

这个方程类似在 数域扩展数据类型 那一课中 所举的其他几个例子。我们略做回顾。

第一步 首先要有数。最初的数(似乎)是自然数。自然数是如何定义的?由0和+1操作可以定义出1。进而,由1和+1操作定义出2……这样,我们定义出自然数。

第二步 2+3=5,3+4=7。为方便起见,我们发现 自然数 可以用 加法 表示。

第三步 我们由加法定义出减法。7-4=3。5-3=2。7-4 的意思是 这样的一种运算——如果这个数x存在(有意义,有定义,有解)的话,方程7-4=x有解,即 x+4=7,也就是说那个数是 加上4等于7的那个数。当然,后来我们知道这个数刚好存在,并且唯一,是3。

根据减法的定义,我们列出式子 2-3。根据定义,其含义为 2-3=x,即x+3=2,加上3等于2的那个数——如果这个数存在的话。这个数不存在,在所有自然数中,当我们遍历时可以发现,没有一个数加上3能等于2。

第四步 为了2-3=x或x+3=2这个方程有解,我们扩展数域,令x=-1。我们把这个新的数域,也包括旧有的自然数,起个名字,称为整数。

负数或者说自然数以外的整数为什么存在?如何整理负数?负数,就是令2-3=x有解的那种数。如果想解这种方程,那么就需要负数。如果某个物理现象的建模所得到的方程,即各种变量间的约束关系,刚好就是这样的方程,那么我们就需要负数。

书说简短,我们按这样的方式,即因为方程需要有解(因为运算或逆运算是有定义的,因此应该可解),继续扩展数域,就得到了分数/有理数、实数中的无理数、复数。

回到最初的方程上来。这个方程(3^x)^x = 9看着如此简单,不应该无数吧。如果它有解,我们就必须接受次幂是无理数的,否则方程无解。

3. 如何构出这个方程

构造这个方程不是“显然”就写出来了。

看问题 “如何理解一个数的无理数次幂”时,我首先想到 有什么情况下会有无理数次幂。

所以,我需要一个方程。类似这样的方程 一个数^(x)=另一个数,即一个数的无理数次幂的值是另一个数。2^sqrt(2)=管它什么呢,这就是无理数次幂。但这是没有意义的,是对问题的重复。

什么是有意义呢,我们在什么情况下需要次幂是无理数?答案是:这类同于数域的扩展。

我需要类似 2个数的平方等于2 的形式,这样其解就是sqrt(2),无理数。那么我需要 x*x 的形式。加法不行,减法不行,一定要乘法才行,sqrt(2)就是那个 自乘等于2的数,x*x=2 的那个x。

3^(x*x)=9,这就有意义了。这个方程不需要 问题中的无理数次幂 就可以定义出来。并且,这个方程易懂,我们能猜出来它的根有sqrt(2)。

但是还差一点。这个方程确实没有引用未定义的概念无理数次幂,但是它的解是2,也没有引出无理数次幂(必然存在)这一结论。

变换一下,3^(x*x)=(3^x)^x,这样就可以了。这个公式叫做什么来着?

这样,我们就得到了 (3^x)^x=9,其解是无理数的次幂。

3. 物理意义及扩展

这个方程(3^x)^x=9在数学有意义了,但是有的同学可能还会追问,这样的方程有必要存在吗?那么,所追问的就是这一类方程,或者说无数数次幂,的物理意义。

物理中有没有这样的方程呢,我首先想到的是欧拉公式,那是复数次幂。实数的,还非得是无理数的,有理数/分数的不行,一时没想起来。搜索了一下。我才知道无理数次幂是高中数学的内容/捂脸。

又搜到

为什么几乎所有的物理公式里面的参数都是有理次方的? - Boo Radley的回答 - 知乎

https://www.zhihu.com/question/418475291/answer/2120030068

有回答指出 半衰期、热力学中的多方过程 都可能是无理数次幂。

突然想到前几天刚刚又看到的,维度。相当于下面这个回答中的,维度有一维、二维、三维,还有分数维度,还有无理数维度。正是按数域扩展的思路,“如果符合定义,我们还可以得到这样的结果;它有点匪夷所思,但是符合定义”。

在物理中,是否存在某个物理量正比于另一个物理量的无理数次幂的情况? - 笠道梓的回答 - 知乎

https://www.zhihu.com/question/396816857/answer/1242606325

接下来,我们可以按同一思路继续讨论。一阶导数是什么意思,二阶导数是什么意思,都是有定义的。那么,1/2导数是什么意思,sqrt(2)阶导数呢?

https://younggift.net/

https://www.zhihu.com/people/yang-gui-fu-52

哑铃片的组合有几种,以及二猫的编程解决

一副哑铃,有可替换的哑铃片 0.75kg,1.25kg,2kg,2.5kg每种各4片。可以组合出哪些重量?

1. 我哥给我一副哑铃

回老家,我哥给我一对可调节哑铃。

之前我有6.5kg*2kg哑铃一对,用来练深蹲、单侧或双侧俯身划船,农夫行走和土耳其起立。份量有点轻,但是没有更重的。还有3kg*2哑铃一对,是邦哥带我去迪卡侬买的,用来练肩。他说,不用太重,你感觉侧平举不太费劲就对了。一直用到现在,刚刚才有一点觉得轻,但是没有刚好稍微重一点儿的,因此没有进步的意愿。还有2对1kg哑铃,俯身或俯卧练肩后侧或肩胛,有时希望稍微重一点点点。

我哥给我的这对哑铃可调,共16片哑铃片,0.75kg,1.25kg,2kg,2.5kg共4种,每种各4片。哑铃杆2根,每根1.1kg。

我装配出8kg*2哑铃,当天晚上就练了一轮肱二头肌。果然比6.5kg的要给力,略微有点过于给力。第二天晚上,第三天晚上,肱二头肌拉伸时有微微疼痛。还试了左右分别5组土耳其起立,也果然比6.5kg*2要难。我想,是不是应该降一下重量,比6.5kg高5~10%,这样成长曲线更平滑一些,痛苦能少点。

如果有个表格,能把这副哑铃所有能组合出的重量都列出,我每次查找下一个5~10%进步的选项就可以了。最大重量是每个哑铃13(+杆重1.1)kg,练肩的话,我今生也不会达到。总重五十多斤,抱着深蹲对我可见的未来也足够。

问题是,都有哪些组合呢?

2. 用EXCEL试试

凡事,先用最简单的工具试试。Excel最简单,各种计算,特别是简单场景的,无出其右者。有人可能觉得C最简单,或者觉得Python最简单。你得在发着低烧,要求速度的时候,看出错率和体力消耗。这才是简单。

图1 Virgin Python,惟真楼的巨蟒

Excel有求组合和排列的函数,就是英文单词 combin 和 permut 或变形。我刚一输入函数就觉得“不对”。一,这两个函数的作用是求组合和排列的数量,而我要的是列表,仅仅数量对我不够。二,相同重量的组合,对我而言可以算同一种。如何判断?Excel 是否能像 C++ STL 那样支持自定义的谓词呢?十有八九不能。这样对多数用户过于复杂,容易用错。况且,我对谓词的要求是判断求和相等,通用的谓词定义需要何种计算能力,是不是得图灵机等价,那么这里需要用VBA才行。

再查,Excel 365版本以后的,支持给出组合和排列的条目。我手头的版本过低,不知道有多低,不过,想想发行时间应该不足以支持。试了下 一个array类函数{=PERMUT(A2:A4,3)},又试了ctrl-shift-enter组合键,果然不能工作。

再往下就是用VBA或者某个特别的插件,进入奇技淫巧模式了。

3. 二猫出手

所以,这种活儿就应该用C语言。穷举,判断条件自定义。找二猫,问“我有这么个问题”。我没说“这事挺简单”,虽然不确定,但是隐约觉得还有坑。

二猫说“简单,能做。”

然后开始问我尚未细化的需求。俩哑铃是不是需要相同重量?每个哑铃杆有两端,这两端是否需要相同重量?相同重量,使用不同的哑铃片,比如 2 == 1.25+0.75,这算一种还是两种?我又一次体会到 需求难提,用人类语言尽述心中所想的难度,以及为什么会有《猴爪》这样的故事。

没多一会儿,程序就出来了。核心代码大致如下。

我说,输出改成这样的格式吧,这里加几个空格,那里加两个\t,这里乘以2,那里对齐。二猫体会到需求变更是工程中的常态,用户经常在看到输出效果以后才知道“那不是我想要的”;可能程序员最花时间的那部分,做完以后,用户说“这个不重要”,请删除。

最重要最复杂的业务逻辑完成以后,我和二猫不约而同地对剩余的工作采用了额外的工具,而不是修改程序。二猫写了段以map为准的代码,把数据吃进去再排出来,去除完全相同的重复。核心代码大致如下。

我用excel去除重量相同的重复,调整格式,分别得到重量列表和组合列表。

这样,我们得到了以下表格。能够看到相同重量有多种哑铃片组合方式。

双手两手相同重量,不去重复,最右列是哑铃片的组合。

单手,不去重复,最右列是哑铃片的组合。

4.赞叹精妙设计

观察上述两个表格,我发现,我并不太需要哑铃片的组合。只要告诉我这个重量是可行的/,对我来讲信息就足够了。有了可以得到这个信心,很容易算出组合的方式。就算我的口算能力一塌糊涂,也可以再根据想要的重量查上面的两张表格。

因此,我删除哑铃片的组合,去除相同重量的重复行,得到下述两个表格。简洁多了。

双手,杆两端平衡,按相同重量去除重复。

单手,杆两端平衡,按相同重量去重。

观察这两张表格可以发现,哑铃片重量的选择应该是精心设计过的。哑铃总重的增量,绝大多数是0.5kg。增加0.5kg对于提高训练难度,经常不是特别大,也不特别小,相当适合。个别增量是0.25或者1。

再回顾哑铃片的种类,0.75kg,1.25kg,2kg,2.5kg,如果使用分数是 5/2,4/2,5/4,3/4,有点意思。转换成以1/4的倍数表示,那么4种哑铃为 10,8,5,3。这几个数字看起来眼熟得多,隐约有人民币面值的种类,以及质数、合数之类的印象。好了,应该是精心设计过的。就到这里吧,赶紧去锻炼——莫等闲,锈了新哑铃。

你手腕疼吗?

与老学生相聚总是很愉快。和老老师相聚,能听到很多掌故,和老学生相聚,能听到很多成长的故事。最近老学生华哥来,戴了一对护腕,一问,手腕疼。没多久,群里,老学生权哥问,“有同学遇到过写代码时间长了造成手腕子疼的情况吗?我以前都不疼,最近换了工位后就开始疼了。”我哈哈大笑,真应景,华哥手腕疼来着。我也疼过。

原理,个人体会,以及解决方案如下。

1. 原理

腕伸动作,就是手背向前臂靠拢,如果用力,或者持续,都会导致手腕疼。打字时手腕不悬,长时间用鼠标,俯卧撑特别支撑手远离头而向腰的方向靠近,都属于腕伸动作。如果留有长指甲,为了手指肚敲击键盘而抬起手背,也会导致腕伸。

2. 个人体会 手腕疼痛和休整的案例

我以前手腕疼,所以戴非常松的护腕保暖,感觉好很多。这个救急非常有效,从1998年到2012年,我持续了15年。需要忽视别人的目光和劝阻才行。我用的是线儿衣(有些地方称为秋衣?),里面穿的衬衣 的袖子,松紧和长短都适合。色调是亮绿,亮蓝,在那个时期的照片中非常突出。有次上公开课,老老师们特意告诉我,需要把这护腕摘掉。我说,疼啊。他们说,忍一下吧。袖子长点,长到手背,也有点作用。

因为腰突,接受向龙同学的建议尝试悬挂在单杠上。引体向上从3个长到7个,没有多久。

对腰突的效果不清楚,手腕好了。我猜测悬挂姿势因为握力增加,以及习惯的发力角度更适合人类进化。

3. 解决方案

(1)锻炼。吊单杠,锻炼腕部肌肉和关节。感觉受力的角度很重要,以这样拉伸的角度锻炼。

(2)避免。避免腕伸受力或长时间腕伸。打字时悬腕。如果觉得累悬不动,那就应该歇会儿。少用鼠标,多用键盘。鼠标动作比键盘精准很多,格外累。俯卧撑用架子或者拳头撑在瑜伽垫上。打人的时候,侧面扇巴掌,不要掌心向前推。当然,不打人更好。

(3-1)手腕的休息、训练、恢复的注意事项,角度。无论腕伸、腕屈、向拇指侧倾、向小指侧倾斜、向尺骨侧旋转、向桡骨侧旋转,都保证只停留在最舒服的范围和角度内。不要在腕伸时立掌,不要在腕屈时达到蛇鹤什么拳那样突起手腕的手背一侧成直角。人类手腕侧向旋转的角度非常小,以舒服为界。如果某个角度疼,不要进入那个角度,或者反向用力。例如把东西甩在肩膀后面提起来这个姿势,可能导致腕伸时疼痛。用力向腕屈方向,由手背侧的关节受力改变为手心侧的肌肉受力,这样就不疼了。甩筷子之类的挥拍运动,末端不要放松手腕,保持一定程度绷紧。

(3-2)手腕训练时的原则,除角度要小以外,负重/力量要小。手腕附近的肌肉非常小,关节也小并且复杂,不会练出多大力量,也不应该有这样的需求。所以,抓握、旋转、屈、伸时,随便找根不太细的棍子。截面要圆的,以免不硌手。一只手的上臂提供的力量,足够训练另一只手的手腕了。负重要足够小,数量稍微多点就会酸。我猜测这就足够了。负重不要大,不会练出大肌肉的。并且,手腕,前端的末端和手连接的地方,那里没有肌肉,天生多细就是多细,想也白扯。

训练的角度包括 腕伸、腕屈、向拇指侧倾、向小指侧倾斜、向尺骨侧旋转、向桡骨侧旋转。再次感叹,这么复杂的关节,不应该承受太大的压力和时长。

(4)器械。

这根棍子,过于夸张了。单手握凳子腿做腕屈,更超过了养生锻炼的范围。至于单手握凳子腿做腕伸,如果你能,那么就不应该读这个贴子。家里有马勺的话,可以试试左手颠勺,如果你是右利手。颠勺所需要的力量,超出健康所需要的。超出,可以,为了超出而锻炼,一方面太难,另一方面可能受伤,不是好事。

猜测 正常人类,有三五根筷子足够。如果你能用腕力折断三五根筷子,那就是练得过于努力了。一根筷子,别折断,那个力量感觉正好。

4.补充

对华哥的护腕的评论:护腕紧的话手不过血,勒出印痒;出汗得洗。

权哥补充说:我发现座椅偏低,手打字时就会出现腕伸动作,时间一长手腕就疼。

当压缩包里的文件名是乱码

有过几次,同学发给我压缩包里的文件是乱码,看起来如下图所示。

进入第一个目录,看起来如下图所示。

如果想看解决方案,请略过中间,跳到文末。

猜测这位同学的机器是 MacOs,苹果的机器。据说,苹果系统对于国别和编码处理得格外优秀,因此在落后的Windwos操作系统上看起来是乱码。有同学建议过我换个苹果系统,不贵,用起来特别顺手,这个乱码的问题会不药而愈合。据说苹果的笔记本用起来特别舒服……但是,我一直不能适应巧克力键盘,更何况由于视力弱,所以我现在已经没有办法用笔记本了,所以这么大的优点对我没有意义,钱会白花。还有同学建议我用 winrar(似乎高版本?)而别继续用zip解压也能解决这个问题。

苹果系统还给过我一个印象,就是有位苹果用户发给我的图片尺寸特别大,上面只有几个字纸件的照片,就达到几十M字节。我深深为自己的带宽、日志和工程存储空间而自卑,也为此发愁。

有的同学发来二三百M字节的ppt或者word文件,往往里面有特别大个儿的一张超高高清晰度(全尺寸展示比你的屏幕还大好多倍)的图片,还有特别的字体完整嵌入。

有的同学打包用7z,告诉我这来自当前最好的压缩工具。

有的同学发送给我wps,告诉我这来自爱国的和正版的工具。

以上这些,我统统都能想办法打开,然后削减尺寸以后保存。同时我经常杞人忧天地为他们犯愁,万一哪天被官方当作垃圾把文件扔了该有多可惜。

我对我钟爱的工具也非常执着,但是范围仅限于我的机器。多数时间用 emacs 写作,但是发给编辑或同事或同学的时候,一向要转换为 word。因为猜测这是收件一方中的多数人最常用的系统。

近些年,情况略有变化。有的同学发给我md,还有短小精悍或长篇大论或口齿清晰的或吐字不清的微信语音。有的同学发来截图的字体极难辨认,不是手写,胜似草书。我有时候说 不能听、打不开、不识字,有时候不吱声想办法查看,然后在心里祝福他以后不会被官方以打不开为由而丢掉文件。

说回压缩包里的乱码。最简单的方法是请对方换个方法重发一次,如果对方是计算机系的学生还好,不然万一他不会,你教他怎么操作是件相当繁琐的事。附,我的经验是,一定要拒绝远程解决任何故障。如果他有能力描述故障,他就十有八九有能力解决。如果他不能解决,十有八九他也说不清楚。如果你不知道故障的现象,能解决才怪——他会还觉得你笨,这都解决不了。

解决压缩包的乱码,再就是换个压缩软件,嗯,或者换操作系统和机器。在机器上装winrar触发了我的洁癖,所以不行。我机器上刚好有 Java运行环境 JDK,你的机器差不多也有,很多人的机器上都有。JDK里有个 jar.exe,常用它运行java的jar包文件。

Jar.exe能解压。Java对国别和编码处理得好,这一点也很著名。

鼠标单击资源管理器的地址栏(红框处)。

输入 CMD,回车,弹出命令行窗口,当前目录是资源管理器的地址栏所在目录。

在命令行下按如下命令操作。

Jar xvf 文件名

或者这样。

jar xf 文件名

解压完毕。

验证,所有文件名都不再显示为乱码了。

感谢 MWW同学 和 先帝创业未半而中道崩组 提供的示例。我收到过不少压缩包中文件名乱码的,妥善保存、容易找到、近期的就是这个。

FTP 502 故障解决一例

ftp服务器设置强制tls连接以后,ftp客户端报告502错误并连接失败。本文给出解决这个故障的一个例子。

1 故障现象

我平时通过 VPN 使用 FTP ,以为从端到端足够安全,因此用明文(Plain FTP(insecure)此处有警告标志),未用加密连接。同事尾巴巴G老师告诉我,口令被侦听到了,我在心里发了个惊叹号。想了一下,被侦听的路段应该是从 VPN 服务器到 FTP 服务器之间。所以,最要防范的恰恰是内部人。或者换个角度,如果黑客攻破到 VPN服务器以内,我的口令就暴露在扫描范围之中了。

希望能更加安全,因此我设置 FTP 服务器只接受加密 TLS 连接。这样,从我的 FTP 客户端到 FTP 服务器 会有基于 TLS 的端到端加密,因此口令不会被侦听到。

在 FileZilla FTP Sever的管理器中,我这样设置,强制用户登录使用TLS。

图1 服务端:强制TLS

从 FTP 客户端发起连接失败,现象如下,错误号502。

图2 故障现象 502

2 不好的解决方案

502的含义是什么?

根据RFC,https://www.rfc-editor.org/rfc/rfc959 ,"502 Command not implemented",即命令没有被实现。没实现的是什么命令?就是上一条我的 FTP 客户端发出的 "AUTH TLS",要求用TLS鉴权。更具体的信息在上面这个截图里有,在当前情况,是"Explicit TLS authentication not allowed",不允许TLS。

我不是刚刚配置了要求必须用TLS吗?

在网上搜索了一下,最前面几条给出的解决方案居然是 取消强制 TLS ,或者在 FTP 客户端上强制用非 TLS 即明文 plain FTP 连接。这相当于,为了安全,我在门上加把锁,用钥匙拧一下没打开。咋解决?方案是把锁头卸了。

所以,不靠谱的不仅AI而已,搜索引擎、博客,是否能作为依据,是否能提供帮助,还得自行判断。

3 解决方案

猜测在 FTP Server 里有什么配置没有做,还是理论不够通晓。同时,感慨,图形用户界面的配置真是麻烦啊,配置一共10个大类,小类还没算,大类小类里每面又很多条目。在 Unix/Linux 习俗中,还有 windows的ini中,是个文本文件,虽然对入门用户不太友好,但是搜索起来真是方便啊。

我遍历了所有配置,找到了。在这里。

图3 服务端:允许TLS + 禁止不加密连接 + 私钥

启用了 FTP over TLS,顺便禁止了不加密的 plain FTP。为了 TLS 能够工作,需要私钥,生成一个。这样,当 FTP 客户端第一次连接的时候,会问你要不要接受公钥是什么什么的服务器,需要同意。

我在 FTP客户端设置加密的选项为 (如果可用)使用TLS。

图4 客户端:支持TLS

现象表明,502故障解决,连接建立成功。

图5 故障解决

总结,FTP 强制 TLS,需要设置的地方有
图1 服务端强制TLS;
图3 服务端:允许TLS + 禁止不加密连接 + 私钥;
图4 客户端:支持TLS。

博客地址

https://younggift.net

https://www.zhihu.com/column/younggift

微信公众号 杨贵福

我和我学生背单词的7年岁月

有一天,我们决定开始背单词的这个游戏。之所以称为游戏,是因为要有奖励。

因为时间久远,日志回溯困难,微信聊天记录、红包记录、图片,都需要翻很久。记录到头了,从上下文看还不是开头。再转换成其他方法再回溯。经过艰难查询,找到了起始那一天。

这是我查到的咱们单词打卡游戏的第一次红包,那么,游戏的开始应该是2017年10月6日。奇怪,这天是假期,怎么会聚餐呢(后来换手机查到了,第一天是2017年9月1日)。不过,我确定记得是从某次聚餐开始的。印象里,是个周五的组会。我们在餐桌上聊起来背单词的事,不止一位同学正在用百词斩、扇背、墨墨背单词。谁提议的,忘了,我们确定以下规则。

每天背单词,在群里打卡。在这一周结束的时间,由教师我在群里发红包。如果参与者在本周没有任何一天遗漏,可以领红包。如果有任何一天遗漏,要在第二天在群里发红包。

使用的背单词软件不限,每天背多少单词不限,选哪本教材不限。

组会在以后的岁月换过不止一次时间,并不总是周五。能记得定下契约的时间是周五,因为我发红包的时间总是周五。这是我们每一周开始的日子,在这一天对上一周背单词回顾总结。

当时是不是所有同学都参加了?不记得了,应该是大部分。因为每天群里打卡蔚为壮观。最初我们都经常在午夜以前突然群体出动,纷纷打卡。也有人在午夜过后把第二天的卡先打出来。

既然是游戏,那参加是自愿的,绝不强迫,也不会对不参加的同学有负面评价。字面意思,并非阴阳。后来的同学,开始的几个届,研究生进组以后我会讲一下这个游戏,询问是否加入。再后来,发现师兄师姐们早就给新生讲完了,我仅需要按人数把红包的数量增加了就行。

为什么红包的数量是增加而不是增减?因为游戏并无退出机制,并且老学生在毕业以后,仍然在打卡领红包的也有。有的参与者从最初入盟就已经是毕业了的老学生。

起初,同学们加入时已经背了十几天,几十天。又一年,后来的新生加入时就已经有几百天的。

最近的记录是1626天,2916天,2118天。从最初参加游戏的元老,以及后来逐渐加入的各位新进,我们已经共渡2402天合343个星期。

在这其间,有过本组以外的老师、同学、前辈、同事觉得这种形式非常好,希望加入。我都拒绝了,因为我们打卡使用的是研究生的讨论群,每天怼人被怼不断,不足为外人道也。

XL同学有个亲戚群,组织了一群小孩天天英语打卡,他发红包鼓励。很多年过去,成果显著,有优秀人才成长起来了。

7年来,我们的打卡也在逐渐变化。过一了段时间,有同学不向群里打卡了,把打卡移到了朋友圈。再后来,看不到有的同学在任何地方打卡,但是仍领红包,一问,他能提供打卡满勤的截图。只有G同学明确说过,我不玩了。我说那么你差多少星期的打卡,得我们红包啊。他说,想想怎么办。后来不知道想得如何了,不过他送了我们一个大书架子,缓解了我们把书堆得到处都是的问题。也许这就是想的结果,不过他没有明确声明。

与G同学相比,其他同学的处理更为隐含。又过了很久,有的同学既不打卡,也没见领红包。在这个游戏里,失去了他/她的消息。

就这样一周一周过去了。我已经不关心大家的状态了,只是按当初的规则或者说契约执行。每周五发红包,然后自己领了。如果我偶尔差一天,就只发红包,不领。今年1月份,Z同学说,老师你别发红包了,红包只有咱俩在领。我说奇怪啊,没有人说退出游戏。有同学晒了打卡的记录,但是没有同学晒领红包的记录。

本周五,因为忙于俗世,我忘了发红包。回顾检点了几次红包,发现只有我一个人在领。这就是成年人的拒绝吧。我当年还相信吐口吐沫就是钉,后来这些年才知道大家可能对契约的记忆差异很大。当初我们没有立有文字,现今想拿着条款找同学们核对已不可行。

在群里宣布:以后不发红包了,游戏结束,感谢陪伴。

人类动机的表达经常含糊隐晦,再加上经常诸多掩饰,实在难以猜测。大家可能觉得心有灵犀、显然如此、不必多说、何必言明,因此渐行渐远、突然消失,按习俗,不宜深切追究,唐突询问。猜测无端,只能由他去吧。

好在,我们总是能不断换成新的身份继续相处。当年的学生,毕业后变成老学生。有的成为师弟师妹,有的成为同事,有的同为计算机领域的工程师。还有的会成为上级。也有的虽然我们从事的领域完全不同,也并不影响就共同知道的话题聊天扯淡。

以上,就是对我和我学生背单词7年岁月的总结。

AI的姓氏:与长春市十一高中学校同学的对谈

2024年3月29日,在长春市十一高中做科普讲座《AI的姓氏:与长春市十一高中学校同学的对谈》。以下是PPT,以及现场没有完整播放的suno作曲和演唱伴奏的歌曲。

已知错误:

1. 现场的同学不只高一的,还有高二的同学。现场同学已经纠正过了,在PPT中保留了这一错误。

所见:从冬天路滑到春天的公交车

1. 冬天路滑

看我拄棍,一位大妈说,"这天你登山?"

我说,"就是防摔。"

我走得急匆匆的,时速7公里左右,所以只来得及对话一句。

看我跑步赶公交,一位大爷说,"别摔着。"

怕摔着我头都没敢抬,想点个赞也没来得及。

2. 雕塑,孔子和苏格拉底

校园里的雕塑,孔子和苏格拉底分别携众弟子各据一方。孔子的学生,有一人鞠躬,另有一人面对教师,一人对着教师弹唱,两人交头接耳。苏格拉底(?)的学生,没有一个看老师的,看看都干啥呢,两两聊天的,自己看书的,站没站相佝偻着,靠椅子扶手的。那个看书的,脚都拿上来了,是不是抠脚丫子呐,啊?

学生们距离教师全两米以上,都偏好后排座位。这两位老师啊,唉。

3. 买葱

前一阵某天是个节,冬至吧,要包饺子,去买葱。老板娘正讨论吉林和缅甸电信诈骗间的关系,"不然他没事到咱们这儿来?你要大葱还是小葱?"

"不知道啊。"

"是不是包饺子?小葱,对,就那么一把就够了。四块。"

扫码付款。

"你是不是给了10块。四块,哪有那么贵。"

找了我现金。

我说,"你要不告诉我都不知道。"

"那我多亏心呐。"

4. 大吉普

一辆特别高大的白色大吉普车向左停在路边,没熄火,女司机下车,敞着车门。

前面不远的洗车小伙可能做了什么手势,她喊回去“不洗车!”

对面又喊了一句什么,轿车声音大我听不清。司机喊“停这咋地?”

这时我走得近些了,隐约小伙的声音,“警察贴条,这几天好几个了”

“我乐意!”她走向路边的店铺,车门和引擎仍然开着。

5. 春天,公交车

等公交车。

啪一声,是个瓶盖扔到马路上。银行保安大哥扭头看。一个姑娘的背影,挑染短发,蓝白牛仔裤,一只手扔瓶盖还没收回来,另一只手举起小半瓶饮料往嘴上凑。吨吨吨。啪踏,瓶子甩到马路牙子上,剩的底儿溅出来。头也不回,义无反顾,潇洒得像电影里向火药库甩出打火机的特工。全程动作行云流水,人已经绕过公交站点消失了,保安大哥好像还在犹豫要不要喊她。

一个胖小孩,"打车吧,这得等到什么时候"咬字很清晰而奇怪,哪里的口音呢,听不出来。"你出钱?"回应的是爷爷吧。奶奶说,"你买的……也养不活啊,现在还不是时候。等六月……我会在院子里养,不会在屋里养。"小胖子一个劲重复"有卖的有卖的有卖的",也不知道是在反对"不是时候,养不活"还是再重申诉求。

等了六分钟,公交车到了,上车。

坐对面的一位女士特别娇滴滴地语音,像是用鼻子说话:妈我跟你说我太厉害了。有个人特别气人,居然……我曝光他让大家出来谴责,才知道他……你说我是不是特别厉害?

一个小伙梳着马尾坐我旁边,一声不响地看着语音的女生,好像藏着笑意。

路过的公交站点广告是结婚通告,人名像真的。最近看到还有在报纸上通报结婚的宣传广告。感觉像鲁迅李大钊的时代。

公交车上有人打呼噜,但是都睁着眼睛,谁呢。大家你瞅我我瞅你。谁在逗乐呢吗?要下车时才找到,一位老爷子带个口罩,埋头在别人身后,刚刚挡住了。

下车。人来人往,有穿羽绒服的,有穿光腿神器的。有的走得急匆匆的,有的扭成各种姿势拍照,拍照的比被拍的扭得更投入。树叶还一片也没有,冰雕和积雪也不见了,只有黄草和枯叶。路边蘑菇雕塑之下积了一摊水。春天要来了。