1.作为 IT 从业人员,你觉得有什么工具大大提高了你的工作效率?
2.暴力拒绝白嫖,著名开源项目作者删库跑路,数千个应用程序无限输出乱码
3.Turtle —— 一个懂得浪漫的 Python 库
作为 IT 从业人员,你觉得有什么工具大大提高了你的工作效率?
我也谈谈自己的一些提高开发体验经验,就说软件工具部分。这里的35目录源码经验基本上都是冲着一个原则去的:“凡是需要重复做的,必须使用自动化工具完成。”
1. 版本控制
一般自己的项目使用git,公司开发规定用svn。反正不管怎么样,版本控制少不了。有个说法,没有版本控制的项目,就等于没有。
版本控制的好处太多了,用过的人都知道。等于历史版本 + 代码备份了。这个提到的很多,就不多说了。
2.单元测试工具
写程序需要验证,如果快速知道新的代码和过去的写的代码不冲突,这个时候单元测试就能起到作用了。
当然单元测试的功能不仅仅是这个:
验证代码正确性和可靠性
验证新代码不和原有代码冲突
验证自己代码不合团队其他人员代码有冲突
验证合并是否有冲突
验证快速
可以作为API使用实例
跨平台和跨环境测试
这个是现代开发流程的基本模块之一,没有单元测试的项目,不是一个合格完整的项目。
有了单元测试,就再也不用担心在大项目中,自己做的小修改有会有什么大影响了。开发压力大大减少
PHP的我用的是PHPunit,JavaScript用过的就多了,Jasmine,gta 源码Qunit,Mocha等工具(不管哪一个,至少要用到一个)C#一般用nUnit。还有各种mock,faker辅助。
3.功能测试工具
就是交互界面测试,也可以是界面样式测试。代码写的方式大致过程和单元测试差不多,不过单元测试每个单元都是独立的,理论上不应该有任何依赖关系(只要有依赖关系就叫做集成测试);而功能测试,就是最后成品的测试,必须把所有依赖打开,并且在界面上进行测试。
界面功能测试的优点:
速度比人工快
模拟真人操作
可以录像后导出测试代码
可以抓图
缺点:
依赖多,依赖的环境变化可导致代码失效
速度相对单元测试慢很多
测试成功率可能不是%
功能测试,也是自动测试的一种,至少解放了大量重复性劳动,大大提升界面功能开发的速度。
功能测试工具主要有phantomjs和Selenium。我两个都用,根据不同情况使用不同策略。
4. 依赖管理/程序包管理器
有了依赖管理,从此不用再手动去每个库的官方网站下载和更新库了。配置一下,运行一下命令行,然后就下载好了,定时在运行一下命令行,所有库又更新到最新版本了。开发体验大大提高。
列举一下主要好处:
自动安装依赖库
自动更新依赖库
自动安装/更新依赖库的audiotrack 源码依赖
最新库和现有项目有冲突,可以强制降级依赖库
开发依赖和项目依赖分开,发布版本时候可以自动删除所有开发依赖库
版本控制可以只收入依赖管理配置,无需收入依赖库的目录,大大节省版本控制大小
统一团体所有人员依赖库的版本
依赖管理下载速度快,免除开发人员手动的重复劳动。大大提高开发效率
PHP的依赖管理是composer,js的依赖管理是npm和bower,C#的是nuget,
5. 流程管理/构建工具
这个叫法很多还有叫做任务自动管理工具的,不管是什么名字,都是一个意思:自动化流程管理。
简单的说从源代码到产品之间,中间还有一个复杂的过程,一般大致如下:
代码清洁
编译
配置
测试
一般对开发人员来说,凡是重复的,必须使用工具自动完成。开发人员是不愿意重复做这些流程,所以需要流程管理,把这些步骤全部用代码编排好,然后执行一个命令行,让电脑反复执行去。没有流程管理的项目不是一个好项目
JavaScript有grunt和gulp,PHP有Phing,Java有ANT。我用grunt比较多。
6. Live Reload
Live Reload一般是和流程管理一起使用的,(也有独立使用的版本)。独立出来说也是为了体现程序员一个终极特质:懒。凡是重复的,必须使用工具完成。wordcount 源码Live Reload就是这个体现:按F5是个重复的低效率行为,必须交给工具完成
Live Reload的功能说起来很简单:
检查文件是否变动
如果变动刷新页面
给开发人员带来的直接好处就是查看页面变动,只要按ctrl+s保持代码就行了,连f5都不用按了。就这好处,足以把Live Reload这个工具当作神器了。配合流程管理工具,只要保存代码(ctrl+s),就马上进行构建,构建完成自动刷新页面。
我用的Live Reload是grunt-contrib-watch。
7.代码质量分析工具
人工检查代码的效率是比较低下的,所以质量分析这一块可以作为开发辅助工具,来提高开发质量
常见的代码质量工具有:
语法检查,保证代码语法正确,可以跨平台,使用最佳实践
代码风格检查,保证团队代码风格一致
代码压缩,减少尺寸
重复代码检查
无用代码检查
模块复杂度分析
模块连接分析
等等,让然还有其他的质量分析,这些都是可以整合到流程管理上的。
JavaScript和PHP的用的比较多,Jshint,Jscs,uglifyjs,phpcpd,phpcs,phpdcd,PHPLOC等等工具,可以帮助开发人员提高代码质量,gets源码控制团队代码风格。
8.持续集成
有人和我说过,持续集成可以让你开发水平提高达到到另外一个层级。当我实践后,终于明白持续集成的魅力所在了。
要会持续集成,你首先必须学会以上6条(live reload除外),以上6条基本就是持续集成的几个基础模块,学会后,你自然而然就已经会了持续集成了。
持续集成的主要流程如下
检查版本控制库是否更新
如果更新,就下载最新版本的代码
构建
测试
报告
当你设置好一个持续集成的项目后,以上的步骤应该就是全自动的了。还是那句老话: 凡是重复的步骤,应该用工具来完成。而持续集成就是这个终极工具。
持续集成其实就是流程管理的一个升级版本,或者说一个扩充。它们都是自动流程工具。它们的差别是:
流程管理主要在本机(开发人员自己的开发环境)上执行,而持续集成则是在一个独立设置的环境下执行。
流程管理继续的是本机代码,而持续集成构建的是版本控制中保存的代码
团队中任何一个人push代码到版本控制中,持续集成就开始构建验证新代码的可靠性。
项目流程配置完成后,流程管理需要执行命令行,持续集成应该全自动
流程管理是持续集成的一个模块,属于持续集成的构建模块
持续集成会有更多后续的专业功能,比如说产生报告,错误通知,构建历史,测试历史等开发新型
我们可以设想一下这样的一个情况,在有-个人的团队在开发一个PHP项目,每个人每天至少往版本控制中push大约次新代码,而这个项目你又要保证在3个主流的浏览器中功能一致,样式相同,而这个项目又必须跨平台,可以在mac,window,linux上都可以运行,而且还要保证PHP5.4~5.6都可以运行。这个时候,持续集成系统的优势就会显示其真正的威力了。
总之,在一个专业项目中,持续集成服务所提供的自动构建和专业报告,可以把项目开发的专业水准再次提高到一个新的层次当中。
我用过的持续集成是Jenkins。
文章到此算完结了。其实开发中,还有很多优秀的工具,但无法和这些主要的开发工具相比,就不在这里说了。
暴力拒绝白嫖,著名开源项目作者删库跑路,数千个应用程序无限输出乱码
「我删我自己的开源项目代码,需要经过别人允许吗?」
开源库「faker.js」和「colors.js」的作者 Marak Squires 的突然举动,让使用这两个项目的数千位开发者陷入了混乱。在几天前,开发者们惊讶地发现自己的应用程序输出乱码数据,而造成这一状况的正是「faker.js」和「colors.js」的开发者本人。
Marak Squires 主动删除了这两个开源项目的代码仓库,这使得正在使用它们的开发者们直接面临崩溃。这两个项目在 npm 上每周下载量分别接近 万和 万,使用它们的工具包括 AWS CDK 等,影响范围极大。
「faker.js」是一个用于生成伪数据的 Node.js 库,支持多语种信息和丰富的 API,可以帮助开发者在构建和测试应用时生成真实数据量不足的伪数据。这个项目在服务器端和浏览器端的 JavaScript 中都有应用。如今,Squires 将所有 commit 信息修改为「endgame」,在 README 中留下疑问「What really happened with Aaron Swartz?」,指向围绕 Swartz 死亡疑云的事件。
在 Squires 的恶意操作下,「colors.js」被添加了新的模块,并发布到 GitHub 和 npm,随后又发布了「faker.js」的 6.6.6 版本。这两个动作导致应用程序无限输出奇怪的字母和符号,从「LIBERTY」开始,后面跟着一系列非 ASCII 字符。目前,「colors.js」已更新为可用版本,但「faker.js」项目尚未恢复,开发者们只能降级到之前的版本来解决问题。
Squires 在 GitHub 上发布了更新来解决「zalgo 问题」,并提到正在努力解决「colors」版本中的 zalgo 错误。在将更新推送到「faker.js」两天后,他发布推文表示自己的 GitHub 账户被封,随后在 1 月 7 日发布了「colors.js」的「liberty」版本,但账户似乎被解封过。目前不清楚账户是否再次被封。
Squires 的行动引起了对开源开发者道德和财务困境的关注。开发者们对这一事件反应不一,有人认为是绑架行为,建议分散托管免费软件源代码;有人将所有项目转移到 GitLab 私有实例上,强调不要信任互联网服务提供商。也有人认为 faker.js 团队的反应有些夸张,认为生成伪数据的包不会为企业赚大钱。还有人认为 Squires 的做法冲动且不够理性,与之前「卖掉房子购买 NFT」的传闻有关,强调需要控制情绪。有人同情开源软件开发者,希望有基金会为他们提供资金支持,也有人认为 Marak 的行为不可取,不是正面例子。
面对这一事件,开发者们普遍感到困惑和担忧,对开源软件的未来和开发者们的权益产生了思考。开源社区需要进一步探讨如何保护开发者权益,防止类似事件再次发生。
Turtle —— 一个懂得浪漫的 Python 库
情人节来临,或许你正在寻找一种独特的方式表达爱意,亦或是在探索编程的世界中寻找灵感。今天,让我们一起探索一个 Python 库,它不仅能帮助你绘制出美丽的图形,还能成为你表达情感的工具。它就是 turtle,一个专为初学者设计的 Python 绘图库。
turtle,这个名字本身便充满了温馨与趣味。它不仅简单易用,还拥有强大的功能,能带领你从基础绘图到创造复杂的图形与图案。这正是我们今天想要分享给你的浪漫之旅。
首先,导入 turtle 模块,为你的“数字画布”创建一个窗口,并设定纯白色背景,为后续绘图奠定基础。接下来,我们将逐步学习如何用 turtle 绘制一个充满情人节气息的心形与爱神之箭。
绘制心形涉及一系列 turtle 命令,包括移动、旋转和绘制圆的一部分。通过精心设计的步骤,你将能够轻松地在画布上呈现出一颗完美的心形图案。而绘制箭与文字则同样细腻,确保色彩搭配与文字摆放传达出节日的温暖与深情。
现在,你是否能将爱神之箭的方法补充完整?表达出那句充满爱意的话语?尝试一下吧!
源码已为你准备,只需回复关键词即可获取完整参考版本。记得,有时候主动尝试,能带来意想不到的成果。
利用 turtle 的能力,你不仅能够绘制出心形、爱神之箭,还能添加文字,形成一幅完整的情人节图画。让我们一睹其成果——
通过学习简单的 turtle 模块,你不仅掌握了图形绘制技巧,更深刻理解了代码可以是情感表达的一种形式。在程序员的世界里,编程不再只是逻辑的集合,它也可以成为传递爱意的艺术。
记住,使用 Python 库如 turtle,不仅能够让你享受编程的乐趣,还能激发无限的创造力。走出编程的边界,找到你所爱的人,用技术和热情构建属于自己的浪漫之旅。
如果你觉得这份分享有价值,不妨点赞、三连支持一下。关注我,未来还有更多精彩内容等着你。无论是 Cocos2d、Pygame、Faker 还是其他 Python 库,总有一款能满足你的需求,让编程成为生活的一部分。