Practice

一款优秀的代码高亮库 - rainbow.js

介绍一个优秀的 js 库。 缘起 代码高亮的 js 库也不少,最知名的莫过于 highlightjs,支持你听过的没听过的各种编程语言,兼容你用过没用过的各种浏览器,有着多姿多彩的配色方案。然而,唯有一点我还是选择放弃了它,因为它不能很方便的自定义高亮语言。 现在我的需求是是这样的,有一个自动化测试结果的页面,里面会显示一个测试案例运行的数据,比如控制台输出 stdout, 我需要...

在 Windows 下搭建 Appium + Android 自动化测试环境

Appium 是移动端自动化测试的必学内容。 前言 本来并不打算写这么一篇文章,但是实践下来发现网上的各种教程里大致有两个问题。一是文章有些跟不上时代,目前 android 开发和测试的技术更新都比较快,内容有些过期。二是细节部分不是太完整,拼拼凑凑也能完成,但对新手来说就比较痛苦。那么,我也来试着总结一下自己踩过的坑。 备注:Android 自动化测试环境和开发环境并不完全相同,...

如何开发一个 PyCharm 插件

PyCharm 是很多 Python 开发者优先选择的 IDE,功能强大,跨平台,提供免费社区版,非常良心。如果你想自己给 PyCharm 添加一些功能怎么办呢? 有两个办法: 通过提需求实现,到 JetBrains 的 github 去提 issue 或者自己发 Pull Request 请他们 merge。 通过安装插件实现,你可以查找现有的插件仓库,或者,自己写一个。...

在Windows平台使用IIS部署Flask网站

在 Windows 平台部署基于 Python 的网站是一件非常折腾的事情,Linux/Unix 平台下有很多选择,本文记录了 Flask 部署到 IIS 的主要步骤,希望对你有所帮助。 涉及工具和平台 Windows 7 x64 Python 3.4+ Flask 完成 Hello Flask 网站 这是一个最简单的 Flask 网站: # hello.py ...

理解 Git Diff 命令

你确定自己会git diff 吗? 在 git 提交过程中,存在三大环节: working tree index file (staged) commit 这三大环节中,你应该有一个大概的了解: working tree:就是你所工作在的目录,每当你在代码中进行了修改,working tree 的状态就改变了。 index file:是索引文件,它是连接...

上传并发布你自己发明的轮子 - Python PyPI 实践

Pypi 的发布实践。 本文仅讨论上传相关的步骤,关于如何给写一个setup.py 请参阅官方文档: https://docs.python.org/2/distutils/setupscript.html 上传前的注意事项 假设你的包已经开发完成,并且根目录必须要有一个setup.py。 最好有一个README.rst 用来描述你的轮子,虽然这不是必须的,但文...

Move on to Python 3

Do we want to move on to Python 3? Well, what is your concerns? Here is a slide made by me probably can help you out. (Use the left/right arrow key to navigate back/forward.) Slides Resourc...

总结:Python中的异常处理

异常处理在任何一门编程语言里都是值得关注的一个话题,良好的异常处理可以让你的程序更加健壮,清晰的错误信息更能帮助你快速修复问题。 在Python中,和不部分高级语言一样,使用了try/except/finally语句块来处理异常,如果你有其他编程语言的经验,实践起来并不难。 异常处理语句 try…excpet…finally 实例代码 def div(a, b): try:...

Gif截屏工具 - GifCam

如果你需要录制截屏并保存成 gif 图片格式,那么你一定不能错过 GifCam 这个神奇的小工具。它虽然只有 600K,但功能不可小觑。 GifCam (Gif 相机) 是一款免费且非常优秀的视频录制/剪辑的 GIF 动画制作软件,它的使用非常简单直观,譬如想要将某一小段视频录制成 Gif 图片,你只需将其窗口的取景框拖放到视频播放的区域,然后按下录制按钮即开始录制。它就像一个摄像机一...

Python装饰器的另类用法

之前有比较系统介绍过 Python 的装饰器(请查阅《详解 Python 装饰器》),本文算是一个补充。今天我们一起探讨一下装饰器的另类用法。 语法回顾 开始之前我们再将 Python 装饰器的语法回顾一下。 @decorate def f(...): pass 等同于: def f(...): pass f = decorate(f) @语法的好处在于...

详解Python的装饰器

Python 中的装饰器是你进入 Python 大门的一道坎,不管你跨不跨过去它都在那里。 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数。 def say_hello(): print "hello!" def say_goodbye(): print "hello!" # bug here if __na...

说说Python中的闭包 - Closure

Python 中的闭包不是一个一说就能明白的概念,但是随着你往学习的深入,无论如何你都需要去了解这么一个东西。 闭包的概念 我们尝试从概念上去理解一下闭包。 在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久...

Python中不尽如人意的断言Assertion

断言是测试的氧气,无断言,不测试。 Python Assert 为何不尽如人意 Python 中的断言用起来非常简单,你可以在assert后面跟上任意判断条件,如果断言失败则会抛出异常。 >>> assert 1 + 1 == 2 >>> assert isinstance('Hello', str) >>> assert is...

Improve Assertion In Python

Assertion is the basics of testing. Why not using Python Assert Assertion in Python is pretty simple, you can assert any condition by assert statement. >>> assert 1 + 1 == 2 >>&...

解决 Jenkins中TFS Plugin Mapping错误的问题

处理 TFS 的问题备忘。 问题描述 Once you had update in TFS workspace for Jenkin TFS plugin, you might get error like bellow: 如果你把 Jenkins 中 TFS 插件更新过,那么你有可能会遇到 Mapping 错误的问题。 [workspace] $ "C:\Program Fil...