专栏名称: 数据分析与开发
伯乐在线旗下账号,分享数据库相关技术文章、教程和工具,另外还包括数据库相关的工作。偶尔也谈谈程序员人生 :)
目录
相关文章推荐
数据中心运维管理  ·  机房布线的最高境界…… ·  3 天前  
数据中心运维管理  ·  微软介绍0水蒸发数据中心设计:每设施每年节约 ... ·  2 天前  
数据分析与开发  ·  悼念!清华大学计算机教授、《数据结构》编著者 ... ·  2 天前  
数据中心运维管理  ·  阿里巴巴官方回应“河源云计算数据中心失火”, ... ·  5 天前  
数据中心运维管理  ·  数据中心日常运维解决方案 ·  6 天前  
51好读  ›  专栏  ›  数据分析与开发

看程序员是如何把自动化做到极致的!

数据分析与开发  · 公众号  · 数据库  · 2017-04-08 21:09

正文

(点击上方公众号,可快速关注)


来源:伯乐在线 - sphynx

如有好文章投稿,请点击 → 这里了解详情


【伯乐在线导读】:作为一名程序员或技术人,你们有木有写过让工作/生活得更轻松的算法/程序呢。编程自动化又会给生活带来哪些便利呢?下面是程序员们在 Quora 上的分享,伯乐在线翻译组挑选摘编一些精彩内容。


Guru S(IT自由职业者, 软件和web开发者,平面和网页设计师)


这才是我在 Quora 期待遇见的问题嘛!


我就从最有趣的开始说吧:我创建过一个批处理文件,每当我登陆自己的计算机超过 10 分钟还没有手工解除这个批处理文件的执行的话,它就会删光硬盘上所有的爱情动作片。如果我今天挂了的话,即使你知道我的开机密码;我也能平静的死去,不用担心灵魂被捉个现行,也不必担心世人在我过世后发现这些动作片而改变对我的看法。


三年前,我并不知道 MVC 架构。


在那时,我们还在用三层架构写代码。后来,成为软件架构师之后,我在公司引入了四层架构(其中,表现层分为两部分,一部分位于用 JS 开发的客户端,另一部分位于服务器端)。众所周知,n 层架构需要大量冗余而重复性的代码。当时,为了建立数据访问层、商业逻辑目标、表单及最大的部分:JS 中的 OOP,我们不得不写很多重复性代码。为了解决这个问题,我写了个自动做这些事的程序。奇妙的是,以往需要一周多才能完成的任务,现在不到15-20分钟就能解决。


后来,当我学了 Angular JS 和 ASP .NET MVC 后发现 MVC 已经包含了和所谓的“基架”类似的功能。尽管现在已经不用这程序了,当时我用写的另一个程序来创建 Angular JS 控制器和视图模型,其实这些可以由 ASP .NET MVC 的视图模型自动创建。


在我学习工程的最后一个学期,我们得对项目截图来把它们收录到手册里。当时我们不知道 Dropbox 有自动保存截屏的功能。而截图,在画图板中黏贴(不能在 Word 里,因为分辨率不够高)并保存这一系列动作过于繁琐。更有甚者,有很大的几率会犯把保存的文件覆盖掉的错。当时我用 VB .NET 编了个程序,当快速连击三次鼠标时自动对当前窗口截屏并保存到指定文件夹。是的,我做得比 Dropbox 更好,哈哈。但如果当初知道 Dropbox 的话,我是不会去写这个程序的。


这个项目像一个间谍软件一样也在我家的电脑(所有家人都在使用)里运行了很多天.


在同一期间,我并不知道 SQL 有 SP_Generate_Inserts 这个函数。当我需要在两个表之间拷贝 100 行数据时,我几乎创建了和这个函数相同逻辑的脚本来对表之间基于‘where’条件拷贝特定列。


正当前:我刚开始使用 Quora (仅仅20天前)。我没有找到任何办法来下载我问的问题的答案。我正在写一个用来自动下载答案的程序。


Yash Bhardwaj(想致力贡献 AI 世界)


我觉得自动化的主意简直是太棒了。以下是我已经自动化的一些东西列表。它是生活变得容易,而计算机为你服务是十分让人满意的。第 3、4、9 点是我的最爱。


  1. 我讨厌别人随便摆弄我的个人电脑或者甚至私闯入我的房间,所以当这种事发生时,网络摄像头会检测到,并自动拍照立即发邮件给我!

  2. 我对历史挺感兴趣的,比如每到一个纪念碑或纪念地我总是想要了解它。而又有什么比维基百科当你的向导更好的呢!每当我的 GPS 靠近重要的历史遗迹,我的智能手机会自动打开维基百科。

  3. 我追的剧有 GoT/The Flash/BBT/Mr.Robot 等等等等。在印度用 BT 种子下载是最佳选择。所以每当新出一集,便会自动下载。假如要下载的完整的一季的话,我只需打【剧名】+【第x季】。程序会自动排序集数并同字幕一起下载。

  4. 讲到种子,还有个程序根据 IMDB 的排名每月自动下载 10 部英文佳片。但有时候会因为种子的低种子率而失败。

  5. 我喜欢关于太空的东西,所以每当 NASA 的哈勃望远镜上传了它的每日一照时,我的手机墙纸也会跟着更新。

  6. 现在天气可预报的程度高了但我们仍需要别人来提醒,而我会收到一条短信提醒,如果明天下雨的话。

  7. 作为印度人,我们从不在 MRP 上买东西,而总是找便宜货,所以我在线编了个同样的东西,一段跟踪产品价格动态的脚本并更新在 excel 页上,每当有东西跳楼价了我就会得到什么值得买的通知。

  8. 每当有闪购或大减价日,一段脚本自动把折扣大的东西放入我的购物车。这帮助我抢到了5秒之内售罄的红米手机,还有一加手机的优先邀请等等

  9. 每当我打开一个隐身窗口,看看爱情动作片时。历史纪录当然不会被保存但是会有后一段时间上的真空。所以我的脚本干的事就是当我隐身时用普通网站和随机文章来填补这个真空。

  10. 现在还有其他的一些小小的自动化,比如我的推特 DP 和 脸书 DP 同步, 状态同步了,标记过的照片会保存到我的 Dropbox, 如果有人打我电话超过三次我电话的静音模式就会自动切换关闭,每当我插入耳机,音乐自动开始播放随机曲目,执行备份,等等。


所有这些任务执行起来都很简单,你不必有很多编程经验可实现。有类似 IFTTT 的工具可帮到你,但自动化的真正乐趣是写脚本(诸如 VB、Java 还有 PHP 等)。现在还只是概念阶段,但我想把所有这些很棒的脚本都开源了,像做产品一样。这样即便是技术小白们也能自动化东西了。现在你会说我上述的 app 已经做的很不错了,但瞧瞧吧!”每个 Facebook 都有一个 MySpace & Freindster 来给它垫背。“


自动化愉快!万一我还想起什么的话会更新这个列表的:)


Ashhar Hasan(计算机工程学本科 2013 级。常年致力于挑战)


我自动化了许多任务:


  1. 自动下载必应每日壁纸:这是一个 PowerShell 脚本, 仅当有网络连接时每天一次启动一个外部程序 30 秒用来下载文件。然后另一个脚本每天 12:00 am 运行(或是一有机会的下一次),把下载的图片复制到我指定的文件夹。

  2. 自动下载 Windows Spotlight 锁屏图片:这也是用 PowerShell 写的,用来把所有 Spotlight 图片拷贝到一个文件夹,并根据他们的分辨率分成两组,一组电话用,一组手提电脑用,还能清除垃圾图片。

  3. 一些开机启动程序的延迟启动:因为我没有 SSD,但开机有许多程序要启动。所以我写了一个批处理文件,用于等待磁盘 I/O 低于某个阈值,再根据优先级从高到低启动程序。

  4. 自动 Git 命令:我的系统中有大约 60 多个 GitHub 和 Mercurial 存储库,我希望他们根据 upstream 保持最新状态。于是我写了个 shell 脚本运行在给定深度的特定目录(和二级目录)的所有存储库,从 upstream 获取新的 commits。我正在写一个工具,可以在多个存储库中运行任何 git 命令。

  5. 自动 Licence 头:我也写过个 PowerShell 脚本用来给存储库的一些文件(取决于文件类型)加上特定 Licence 头。

  6. 找到未配置存储库:这个脚本做的是找到所有根目录中没有 README、LICENCE、.gitattributes 和 .gitignore 的存储库。

  7. 一个下载所有 GitHub 问题和 pull-requests 存为 markdown 文件的扩展,这样我就能离线浏览了。

  8. 批量改名器:这是一个通过从目录结构和文件名中提取信息来给电视剧集改名的利器。

  9. 今晚看啥:一个 python 脚本,用来根据一些我给出的标准(上映日期范围,评分,类型等等)告诉我我该看哪些电影。

  10. 歌单生成器:一个用来生成我很久没听歌曲的歌单和生成我最近收集但一次也没播放过的歌曲的歌单的脚本。


为了让我的生活变得更容易,我还在做很多事。


Aarjith Nandakumar(程序员一枚,又热又专)


我设定自己的计算机 2:05 AM 自动开机,拨号联网并启动 uTorrent, 最后在 7.50 AM 或者下载完毕之后自动休眠。


在我的大学时代,我们只在 2 AM 到 8 AM 享受无限宽带连接。(这是因为全时段无限套餐有 256 kbps 的带宽限制,而晚间的最大带宽为 2 mbps)我还迷恋上了尝试不同的 linux 发行版,并下载了 ubuntu, kubuntu, mint mate, mint cinnamon, fedora, debian, SUSE 等。然而每天要熬夜到 2 AM 是困难的。所以我在 windows 设置了计划任务在 2.05AM 触发一个批处理脚本来建立连接(Modem 被配置成桥接模式,未获得较佳下载速度不使用 PPPoE)。这一任务被设置成唤醒系统运行,所以可以从睡眠状态执行。



在 uTorrent 配置被设置成当下载结束关机,而还有另一个计划任务作为双保险,确保 万一下载还没结束 7.50 AM 关机 。



我碰到的唯一问题是计算机在厅里,而开机的时候会有蓝色灯光闪烁。我父母以为我晚上忘了关电脑就替我关了机,我起来后才发现根本就没有下载。那次以后我想他们解释了这计划,之后就都好了:)


Ankit Jain(编程是懒虫的福音)


我有写过一个为我在脸书上自动聊天的脚本。这脚本读取一个 excel 文件,文件指定了我想聊天的对象,每五分钟检查一次这些聊天对象有没有上线。


我的自动聊天是以 Hiiiiiii 开头的。然后从预定义的问题和答案中选择来保持聊天。


如果有人问的问题与我的 excel 中已存在的问题相差 50% 会自动回复 Hmmmmmmmmmm 。并且立马用邮件和短信通知我聊天需要我的干预。现在没人再对我抱怨我不关心他们了。


同样这个脚本随机从不同网站选出祝福人们生日的话语,并发布在过生日朋友的墙上。


[补充]:如果我的任何一名朋友与我在脸书上三周没有联系(没有评论、喜欢、聊天和贴标签等),这个脚本会删了他们(仅仅因为他们不在我喜欢与之聊天的人的名单之列)。这真是让生活轻松多了。


[注]:为对代码感兴趣的人的一些注意事项

1. 当前授权部分还是手动的,它是一个桌面应用,只有当我登陆到脸书并且浏览器打开一个页面才有用。

2. 这目前是基于 Python, Java 和 Selenium。

3. 我正在朋友的帮助下把它转成一个安卓 app,或便携式桌面应用。敬请期待,你可能在 Google Play 商店或是 GitHub 下载到它。之前我只会回复 Hmmmmmmmmmm 


2015年11月 Reddit 上有个很火的帖子。是这样一回事:


Alex 有一位前同事,这家伙简直就是生活在终端里面。如果某些事情,甚至可以说是任何事情,哪怕只需要花费他超过 90 秒的时间,那他会写脚本来自动处理那些事情。


前同事把他写的脚本发到一个俄语聊天信息网站 bash.im上。Alex 把俄文翻成英文了,伯乐在线翻译组再翻成中文咯。


某某某:好吧,我们的集成工程师已经跳槽到另一家公司了。那个哥们简直就是生活在终端里面。你懂的,他就是那种喜欢 Vim、用 Dot 创建图表和用 Markdown 编写 wiki 帖子等等的家伙(译者注:Dot,一种图形描述语言)。如果某些事情,甚至可以说是任何事情,哪怕只需要花费他超过 90 秒的时间,那他会写一个脚本,来自动处理那些事情。


某某某:嗯……所以我们坐在这里,翻翻着他的“遗产”。


某某某:你会喜欢这个的。


smack-my-bitch-up.sh


给他老婆发一条的短信,大概意思是“晚上要加班”。从一个字符串数组中自动随机地提取理由。运行在一个定时任务里面。如果晚上 9 点之后,服务器上还有他登录的有效 SSH 会话,那就会触发这个定时任务。


(伯乐在线补充:《Smack My Bitch Up》是英国乐团 Prodigy 的一首歌。试听地址:戳这里。)


kumar-asshole.sh


从电子邮件的收件箱里扫描“Kumar”(他是我们一个客户的数据库管理员)。查找像“help”、“trouble”、“sorry”等这样的关键字。如果找到了,那么脚本会 SSH 连接登录到客户服务器,并且将数据库回滚到最新的备份。然后发送一条回复:“别担心,兄弟。下次小心点。”


hangover.sh


另一个定时任务被设置成特定的时间。自动发送类似“感觉不舒服、要在家里工作”这样的电子邮件。从另一个定义好的字符串数组中,选取一个随机的“理由”。如果在早上 8:45 前,服务器上没有交互的 session,就会触发该定时任务。


(伯乐在线补充:hangover 是「宿醉」的意思。)

某某某:(最 diao 的来了!)fuckingcoffee.sh


这个脚本会等待整整 17 秒(!),然后打开一个 SSH 会话,连接我们的咖啡机(我们完全没有想到咖啡机会连网、上面运行着 Linux、 后台还执行着 SSHD),接着给它发送一些稀奇古怪的命令。这看起来很有极客范。完成这些之后,咖啡机会开始煮一杯中号的 half-caf 拿铁咖啡,再等待 24 秒(!)就可以把咖啡倒入杯中。这个时间恰恰是那家伙从他的座位上走到咖啡机所用的时间。


某某某:这太 TM 牛 X 了,我要留着这些。



觉得本文有意思?请分享给更多人

关注「程序员的那些事」,提升编程技能