抛掉重用的幻想,好使就行:用脚本生成脚本的例子

抛掉重用的幻想,好使就行:用脚本生成脚本的例子

阿于同学说过,合肥同学不懂什么是"好使",所以,先解释一下。"好使"可能是东北方言,大意是 可用,能工作,趁手。

今天讲的是在用脚本生成脚本中,可以对付到什么程度。

当年写用vba自动判卷的时候,某张同学说"这个要是再这么一下,那就更好了",小韩老师说"唉呀大姐 (我记得是这样说的,小张比小韩要小) ,你是要开发个工具,不是产品。"

韩老师说的话大抵容易懂,而深刻,对我颇有教益,这一句就是。代码可以重用到什么程度,给用户提供多大程度上的方便 (友好之类的),在工程中,不仅要看未来和追求,也要视为一个急功近利的短期行为。

如果我们在VBA判卷上做得那么完美的话,当年我跟偶像多半个下午判完全部试卷的传奇故事就不会发生了。我们可能今天还在追求某个完美的细节。我记得当年李老师质疑过我的判法,"你这么判,要是那么答,不就错了也得分么?"我答,"是啊,不过换成人判,比如你,就能那么认真了?"

写程序,我们要的只是比没程序更好,不是最好。"最"这种事,只存在于当今的媒体、人民的幻想及前后的之中。对不起,错了,语言不仅是"最",而且是"最最"。需要补课的同学请自行阅读参考书,这里不展开了。

有时候,追求完美的重用--对未来的无比重视--会让我们失去今天。当然,失去今天也就没有未来了。

比如,年轻男女经常讨论的问题,类似于"以后到底谁刷碗"啊这样的。重用这和这个类似。事实上,以我们的年轻和技术之浅薄,大多时候,因为没有足够的经验,我们根本无法预测未来会如何发展。重用是什么?重用是在*未来*被自己或别人*再次*使用。咱们这点破技术,知道未来如何再次使用这些代码么?

有同学说,"书里说了"。呵呵。

书归正传。用脚本生成脚本,一看这题目,不少同学就会想到编译原理啥的,还有同学想到了lisp里的宏。我说的不是这些高级题目,而是极其朴素的刚刚能对付得过去的手段。

1. 所谓朴素

所谓朴素,就是尽可能不使用和依赖高级的技术。比如,我到C++中的 flowcontrol的时候,讲到循环执行,给过这样的例子:

请输出从1到5的数字。

同学们给出的答案都是:

for(int i=0;i<5;++i)

{

printf ("%d\n", ++1);

}

当然,漂亮。

我的一个答案是这样的:

printf ("1\n");printf ("2\n");printf ("3\n");printf ("4\n");printf ("5\n");

我看到了,得有超过半个班级的同学对我的写法嗤之以鼻。这代码太烂了,马上就会有人指出,"要是输出到100呢,要是输出从8到20呢。"

我的代码的缺陷,缺乏重用性,数量大了不好改。一,谁说我准备重用了呢?我们一看到别人的问题,往往就要预想提问者的动机,有时甚至解读过度。中层对上层的解读,往往如此,下层就受了苦。二,数量大的时候,其实也简单,我可以在excel按ctrl拉鼠标,得到数字序列,然后再把这一列粘到C代码里。

之所以能这么对付,是因为,我也可以假设这段代码只用一次,而且只被我一人使用。

2. 例1,跟牛同学的讨论

前几天跟刘同学一起破解了个软件,我的解法暴力而有效,刘的解法更好,极其优雅。可惜现在似乎还不宜显摆具体内容。不过,后续与牛同学的一些交流可以在此讨论一下。

我为牛同学分配的任务是,把这好几千个文件的名字改成符合某个算法要求的文件名。文件名的对应关系,一部分在数据库里,一部分是C#代码。

你打算怎么实现?牛同学准备写C#程序读数据库。

我建议的方案是这样的,一个标准的对付流程。

(1) 写C#程序,就是那段算法;(2) 把数据库里的作为算法输入的那一列复制到C#代码里;(3) 让段C#程序,输出很多行这样的文字:mv "源文件名" "目标文件名"

以上,用C#生成了shell程序或批处理,然后跑一遍就改了所有文件名。C#本身并不操作数据库 (人手拷过来的),也不操作文件系统 (由shell程序完成)。

如果算法变了呢?如果源文件列表变了呢?如果……所有这些问题的答案都是:重新跑一遍上面的流程。用人,而不是用程序的可重用性。

当鳄鱼冲上来咬你的时候,有一种情况,你绝对不要用刀。那就是,你手头没有刀的时候。另一种情况,不建议用刀。那就是,你用刀非常不熟练的时候。你可以抱住鳄鱼的嘴,它的咬合力惊人,但是张嘴的肌肉非常软弱。这个时候,并不是你训练自己用刀的时候。

同样的,当你不熟悉数据库操作,不熟悉在C#里文件系统操作的时候,你应该做的是 不用它们。项目是用来解决问题的,其原始动机不是给咱们训练技术的--技术可以在自己练习的时候做。项目唯一能训练的,是工程能力。就像鳄鱼问题能训练的是随机应变和灵活寻找解决问题的手段。

3. 例2

我有个top250电影目录,下载的时候不知怎么整的,文件名非常长,而且中文部分是乱码。一直准备把中文部分都删了,长期拖延,昨天晚上整了。

原始的文件名类似于:Top093.罪æ¶åŸŽå¸‚.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv

准备改为Top093.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv

这样的文件有250个。

这么整的。下面是一个整行

$ ls -1 Top* | awk -F. '{ first=$1;min=length($1)+length($2)+3;max=length($0);print ("mv \"" $0 "\" "first "." substr($0,min,max))}'> ren.sh; chmod +x ren.sh

然后,执行这个脚本,文件名就都改完了。文件中有 ' 或 ( 的,可能会出错。

ren.sh这个脚本,是重定向输出的前半段产生的。这是unix系统管理中常用的一个手段,用程序A生成一个脚本,用生成的脚本,而不是直接用程序A解决问题。

脚本的内容是很多个这样的行,下面也是一个整行:mv Top093.罪æ¶åŸŽå¸‚.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv Top093.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv

4. 例4

做等级考试的系统时,要批量ping机器以确定每台机器网络正常。我也使用了类似的方法,用C生成ping.bat。bat里面是很多ping目标地址,及只ping一次的参数,似乎还有一个超时设置为半秒的限制;C负责循环IP地址,好象是这样printf ("ping -n 1 192.168.0.%d", i++);。

IP地址的循环,我也用excel实现过。那套方案里,连C也不用。excel的几例中,有一例是文字"ping -n 1 ",其余几例是IP地址的4个部分,其中最后一部分用ctrl实现数字的递增。

更早,也更朴素的方法,我用记事本复制第一行ping,然后粘贴几次,每次复制已粘过的,行数翻倍增长;然后再手动修改IP地址最后一段。

这些方法都很朴素,但是有效。

5. 总结

核心思想是,用代码生成代码;在这个过程是,保持注意目标是"小工具",抛开重用的幻想。

关同学前两天提到,我们在既往的开发中,代码最终都没有重用。我想,代码不必重用,或者说,我们远没有达到那个高级阶段。能够解决问题,并重用解决问题的手段--设计,就非常不错了。而且,毕竟设计很值钱,而代码够便宜。

--------------------博客会手工同步到以下地址:

[http://giftdotyoung.blogspot.com]

[http://blog.youkuaiyun.com/younggift]

[http://www.renren.com/268966623/profile#pblog]

【中项第三版】系统集成项目管理工程师 | 第 1 章 信息化发展 阅读详情

相关推荐

论文理解【LLM-OR】——【Step-Opt】Training LLMs for Optimization Modeling via Iterative Data Synthesis and

本文提出 Step-Opt-Instruct 方法,针对用 LLM 做 OR 问题求解任务,用迭代问题生成 + 分步验证机制实习更可靠的训练数据合成,从而微调开源 LLM 得到 Step-Opt。在多个 OR 建模基准提升性能,尤其在复杂问题上提升更明显

佚失的诗篇 806

Kook Zimage真实幻想Turbo完整指南:从安装到高质量幻想人像生成全流程

本文介绍了如何在星图GPU平台上一键自动化部署🔮 Kook Zimage 真实幻想 Turbo镜像,实现高质量幻想风格人像生成。该镜像针对幻想与写实融合的人像创作深度优化,用户可通过简洁的Web界面快速生成细腻的AI绘画作品,适用于角色设计、概念艺术等创意场景。

weixin_35749796的博客 269

VS2017中调用gdal(C#版)的方法二(含gdal下载地址,配置过程,代码测试,超详细!!)

VS2017中gdal(C#)版的配置与测试 上次记录了直接在VS2017中下载并应用gdal的方法,这次来记录一下网上下载的安装包配置与测试的方法。 一、环境、版本及下载地址 win10,vs2017社区版,gdal2.4.4 还是像之前在Unity中应用gdal一样,最好是下载已经编译好的C#版的gdal,不然自己配置真的很容易出错,我就是这样的,下面提供不同版本的gdal下载地址: 1.GDAL2.4.4(C#版、64位): https://download.youkuaiyun.com/download/che

chengbaola的博客 1365

Kook Zimage 真实幻想 Turbo加速技术解析

本文介绍了如何在星图GPU平台自动化部署🔮 Kook Zimage 真实幻想 Turbo镜像,实现高效幻想风格图像生成。该镜像通过轻量化架构和推理优化技术,可在RTX 4090等设备上快速生成高质量幻想艺术图片,大幅提升创作效率,适用于概念设计、数字艺术创作等场景。

weixin_42126677的博客 292

C#联合Halcon机器视觉框架源码

本软件参考EV开发,共用模块,基于WPF+Halcon,是非常不错的学习框架,需要什么功能可以自己添加,插件式开发非常方便。

Z's Palace 4829

【使用FPGA实现MIPI DSI接口】——如何使用FPGA实现MIPI DSI接口?这是一个让许多开发者都感到困扰的问题。本文将介绍如何使用FPGA设计和实现...

【使用FPGA实现MIPI DSI接口】——如何使用FPGA实现MIPI DSI接口?MIPI DSI(移动产业处理器接口 - 显示串行接口)是一种用于在移动设备中传输视频数据的标准接口,它是目前大部分智能手机和平板电脑所采用的显示接口。首先,我们需要实现MIPI DSI的物理层接口。在实现MIPI DSI接口后,我们还需要编写驱动程序来控制MIPI DSI显示屏显示图像。这里只是提供了MIPI DSI接口的物理层代码示例,完整的MIPI DSI接口实现需要包括控制器和驱动程序等更多内容。

uote_e的博客 1998

Kook Zimage 真实幻想 Turbo 数据存储:MySQL集成方案

本文介绍了如何在星图GPU平台上自动化部署🔮 Kook Zimage 真实幻想 Turbo镜像,并实现其与MySQL数据库的集成方案。该方案能自动记录AI图片生成过程中的提示词、参数等关键元数据,构建可追溯、易检索的智能作品库,有效解决创作者在管理大量生成图片时面临的“数据管理困境”。

weixin_36303807的博客 307

第3版•系统集成项目管理工程师(中级) │ 告别迷茫!案例分析高分攻略

🥏第3版•系统集成项目管理工程师(中级) │ 告别迷茫!案例分析高分攻略

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3869

Kook Zimage 真实幻想 Turbo性能优化:使用.NET加速图像生成

本文介绍了如何在星图GPU平台上自动化部署🔮 Kook Zimage 真实幻想 Turbo镜像,实现高性能AI图像生成。通过.NET技术优化并行计算和内存管理,该方案显著提升了幻想风格图片的生成速度,适用于批量创作和高质量视觉内容生产场景。

weixin_42376614的博客 107

prplOS介绍

介绍prplOS是什么,特性、框架、编译等。

四儿家的小祖宗的博客 2123

【C2000系列DSP的Bootloader详解】如何打包源文件为库文件且加密仅授权使用,一步步教你如何实现

如果想要在 TI 的 CCS 开发环境中为 C2000 系列 MCU 生成 lib 库文件,并对这些库文件进行加密保护,确保只有授权方(持有密钥)才能调用和使用,以此保护源代码的知识产权。

昔时扬尘处 177

Ruby 101:重用、隐藏和多态

Ruby 101:重用、隐藏和多态   Written by Allen Lee   什么?你不想安装Ruby?       在我决定把Ruby装到我的机子里之前,我想先试一下;在我试用Ruby之前,我得先把它装到我的机子里;在我决定……哎哟,死锁了……       没问题,今天我带上"钥匙"了!现在,请用你喜欢的浏览器打开这个网址:http://tryruby.sophr...

weixin_34204057的博客 131

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【论文笔记 - 图像生成 - CVPR2022】Learning to Memorize Feature Hallucination for One-Shot Image Generation

Learning to Memorize Feature Hallucination for One-Shot Image Generation 论文地址:https://drive.google.com/file/d/1Gq-167f2ue30463K4XMkHOJThg9Yugk0/view 参考:1. 简单解读 本文研究的是图像生成领域中的单样本生成 (One-Shot Generation,OSG)(One\text{-}Shot\ Generation,OSG)(One-Shot&nbs

qq_43491212的博客 1445

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Kook Zimage 真实幻想 Turbo IDEA插件开发指南

本文介绍了如何在星图GPU平台自动化部署🔮 Kook Zimage 真实幻想 Turbo镜像,并开发IntelliJ IDEA插件实现AI图像生成功能。该镜像能够根据文本描述快速生成高质量幻想风格图像,集成到开发环境中可大幅提升程序员的视觉创作和灵感可视化效率。

weixin_29155599的博客 83

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Kook Zimage真实幻想:电商海报设计实战案例分享

本文介绍了如何在星图GPU平台自动化部署🔮 Kook Zimage 真实幻想 Turbo镜像,实现高效电商海报设计。该平台简化了部署流程,用户可快速生成高质量商品海报,适用于美妆、服装、食品等电商场景,大幅提升设计效率并降低制作成本。

weixin_29997223的博客 244

Kook Zimage 真实幻想 Turbo与STM32嵌入式开发结合

本文介绍了如何在星图GPU平台自动化部署🔮 Kook Zimage 真实幻想 Turbo镜像,实现嵌入式设备的本地AI图像生成。该轻量级模型特别适用于STM32开发,能高效生成真实幻想风格图片,典型应用于智能相框、教育设备的即时插图生成,为资源受限的嵌入式场景提供低成本、离线的视觉内容创作解决方案。

weixin_42230607的博客 263

TIC-80游戏设计模式:创建可重用的游戏组件和系统

TIC-80是一款功能强大的幻想计算机,专为制作、游玩和分享微型游戏而设计。这个开源项目提供了一个完整的开发环境,让开发者能够在受限的环境中创建精彩的像素游戏。通过使用TIC-80的可重用组件设计模式,你可以大大提高游戏开发效率,构建更加模块化和可维护的游戏系统。 ## 🎯 为什么需要可重用游戏组件? 在游戏开发中,可重用组件设计模式能够帮助你: - **提高开发效率**:一次编写,多次使

gitblog_00912的博客 1149

如何高效使用碧蓝幻想Relink DPS监控工具:专业玩家的终极指南

碧蓝幻想Relink DPS监控工具GBFR Logs是一款专为《碧蓝幻想:Relink》玩家设计的实时数据监控与分析工具,通过先进的游戏内存解析技术,为玩家提供精准的伤害统计和战斗数据可视化功能。这款免费开源的DPS监控工具让您告别盲打盲猜,用数据驱动每一次战术决策,全面提升团队配合效率和个人操作水平。 ## 🎯 从数据盲区到精准掌控:游戏战斗的革命性工具 在传统的《碧蓝幻想:Relink

gitblog_00964的博客 458

hive深度优化,提高效率50%不再是幻想——>>>>>超级详细

#开启本地模式 set hive.exec.mode.local.auto=true; #注意:表示加载文件的最大值,若大于该配置仍会以集群方式来运行 hive.exec.mode.local.auto.inputbytes.max默认值为128M #开启并行模式 当硬件资源足够,查询数量大,当各个子查询无关,可以考虑开启 set hive.exec.parallel=true; #...

Lpf的博客 6965

软件测试狂想曲,等你来幻想...

软件质量在几年前,一直是困扰软件工程的头号难题... 所以提出了cmmi ,敏捷等软件工程方案..企图采用工程化方法客服软件的质量问题 (当然软件工程不单单是为了解决软件质量问题,还是为了按时高效的高质量的完成项目而提出).... 但是实际上还是有很多难题,比如说.测试员的水平.程序员的水平...测试的全面性...这些得不到全面的有效的贯彻的话软件质量很难保证.... 测试也只能减少而不能根

走错路的程序员 1357

10. 蘑菇定律

蘑菇定律是组织对待初出茅庐者的一种非常适用的管理方法,初学者被置于阴暗的角落(不受重视的部门,或打杂跑腿的工作),浇上一头大粪(无端的批评、指责、代人受过),任其自生自灭(得不到必要的指导和提携)相信很多人都有一段“蘑菇"的经历,但不一定是什么坏事,尤其是当一切都刚刚开始的时候,当上几天“蘑菇",能够消除很多不切实际的幻想,让我们更加接近现实。对一个组织来说,新进的员工都是一张白纸,能力和经验没有

wangjiong的专栏 836

FFXIV TexTools:终极《最终幻想14》模组管理器完全指南

你是否想在《最终幻想14》中打造独一无二的角色外观?FFXIV TexTools正是你需要的强大工具!这是一款专为《最终幻想14》设计的免费开源模组管理框架,让普通玩家也能轻松成为游戏外观定制大师。 ## 🔍 为什么选择FFXIV TexTools? ### 🛡️ 安全无忧的模组管理 传统模组安装方式需要手动替换游戏文件,风险极高。TexTools采用智能备份系统,每次操作都会自动创建恢复

gitblog_00693的博客 140

幻想FPGA人工智能的未来世界

--------------------------------------------------------------------------------------------------------------------------------------------

幻雪神界 3046

ANIMATEDIFF PRO在游戏开发中的应用:NPC动画批量生成方案

本文介绍了如何在星图GPU平台自动化部署ANIMATEDIFF PRO电影级渲染工作站镜像,实现NPC动画的批量生成。该方案通过AI技术,将静态角色设计或文本描述快速转换为高质量动画序列,显著提升了游戏开发中非玩家角色动画的制作效率,适用于构建大规模NPC动作库。

weixin_42584758的博客 301
上一篇: Hibernate入门BLOG[十、Hibernate对象关系多对多映射]
下一篇: Hibernate入门BLOG[十一、Hibernate表关联的级联操作]
test_touch
博客等级 码龄16年 5粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值