Unable to find vcvarsall.bat

1. 什么是 vcvarsall.bat ?

Visual Studio 的编译器的一个组件。

2. 使用Python开发环境,何时需要它?

在Windows环境下,使用了lxml、mysqlclient、pillow等第三方库,这些第三方库的一些子模块是用C语言扩展写的。而在安装这些库时试图通过源码安装,需要编译,如果当前系统下没有对应的编译环境,则会报错,这里是报“无法找到vcvarsall.bat”。

阅读全文

UTC+8还是GMT+8?聊聊时间与计时法

今天一位同事问道:“你写入ES的时间字段是考虑过时区处理了的吗?”

原来是我们有一个可能部署在全球各地的软件系统,这个系统会记录各种服务监控指标存入ES(一种数据存档索引系统)。今日那位同事发现他获取的是北京时间,而存入ES系统后却比北京时间晚了8个小时。

阅读全文

如何在Python里应用SOLID原则

如今OOP编程大行其道。不少人以为用编程语言里的class关键字定义一个类,然后用类创建一个对象就是OOP了。肤浅!

OOP编程很贴近人们的正常思维方式,所以容易被接受,而且应用也很广泛。的确,这给编程带来了很大的好处。但并不是任何人都能深谙OOP的本质。简略证明如下:如果把“女朋友”作为一个类,你自己的女朋友就是你的对象,是“女朋友”类的具体的实例。如果你能熟练掌握“女朋友”这个类的特性以及方法,还不能创建一个实例么?你没女朋友,说明你没吃透女朋友类,进而说明你肯定没理解好OOP。但创建了一个实例出来也并不能证明你就吃透了这个类。

阅读全文

管理多个SSH Key以支持多个Git账号

SSH Key 可以方便地解决系统登录的问题,不用每次提交代码时输入相关Git平台的登录密码。

由于各种各样的原因,程序猿一般都有多台电脑或多个开发系统环境,同样也有多个Git账户,最起码的可能有一个GitHub账户加公司内部的一个GitLab账户。可能不同的账户有不同的用户名,邮箱等。

1. 生成SSH密钥

  • 生成默认公钥

    先确认系统中是否已有默认的SSH密钥(使用的是公钥,之后都称公钥)存在。
1
cat ~/.ssh/id_rsa.pub

如果已经有了则不用生成默认的公钥了,如果没有,则按照如下命令生成。生成后再用上述cat命令查看公钥。

1
ssh-keygen -t rsa -C "$your_email"

将上述的$your_email替换为你想使用的默认email地址。如我在工作电脑上生成默认公钥时邮箱使用的是公司内部邮箱。在私人电脑上则用的是本人Gmail邮箱。

阅读全文

Python性能优化之记忆化(Memoization)

记忆化(Memoization)介绍

简单说来 Memoization 是一种利用缓存来加速函数调用的技术手段,将消耗较大的调用结果存储起来,当再次遇到相同调用时就从缓存读取结果而无需重新计算。
有一个限制条件是该函数必须是纯函数式的,相当于函数式编程中的不可变性,即输入一致时输出一定不会改变。比如计算平方的函数就满足这种条件,square(3) 的结果永远是9,所以我们才能把它的结果存储起来,下次需要知道3的平方的结果时,无需计算,直接从内存中读取就好了。

阅读全文

深入浅出Python装饰器

有朋友说看到《Python CookBook》的装饰器部分有些迷糊,究其原因是没有清晰地理解Python装饰器是什么,能干什么。于是有了本文。看此文时,从头到尾跟着思路走,应该会对Python装饰器有更明白深刻的认识。新手不要跳读,新手不要跳读,新手不要跳读。
本文假定你已经明白了Python中什么叫做函数,变量的作用域、解析规则及生存周期。阿驹还是简单阐述一下:

  • 作用域: 变量起作用的范围, 也称之为命名空间。以方法、类、函数、模块、包、Python内置环境(当前Python解释器的Python Path里所包含的)这几个的程序结构为单元,以大结构包含小结构外层包含内层的方式,把变量放置在这样一个个的空间中,一个程序结构单元就对应一个作用域(命名空间)。每个变量,不加global和nonlocal关键字时,只属于声明该变量的这层作用域。

    阅读全文

Python入门、基础书籍简评与推荐

本文对Python网友讨论较多的几本基础入门书籍做个简评,给新手朋友们一个参考。本文仅代表阿驹的个人对它们的意见,不一定完全正确,但站在阿驹的角度看来,是很中肯的。

《简明Python教程》

  • 英文原版名为《A Byte of Python》。它非常简明扼要地介绍了Python语言基础的各个方面。
  • 适合群体:
    1. 仅仅临时使用Python的新手,非专业性地临时运用十来行简单代码就能自动化处理一些工作。
    2. 非常熟练编程的老手,深谙编程本质,换语言不过是换工具而已,通过简要地提点,其他诸多方面自然通晓,辅以浏览官方文档和《Python Cookbook》此类书籍,就和Python熟手无异。

      阅读全文

简单明了地选择Python GUI库

可用于Python GUI程序开发,优秀且更新“跟得上时代”的库有 wxPythonPyQT(PySide)、KivyLibavg ,当然还有 Python 内置的 Tkinter 。像 PyGUI 、PyGTK 、PySWT 等,由于上次更新距现在太为久远且文档、学习资料、稳定性等诸多考虑,阿驹认为它们并不适合于开发一个正式的项目,就不作介绍。

各种 Python GUI 库简介

1. wxPython

  • 跨平台,Windows / Unix / unix-like / OS X
  • 包装的是 wxWidgets,C++写成的
  • 完全开源,可以任意用于自己的开源或商业项目
  • 不支持 Python3.x (新启了一个名为 Phoenix 项目,支持 Python 3.x,尚未正式发布)
  • 学习资料《wxPython in Action》、《wxPython 2.8 Application Development Cookbook》,均有中文版
  • 有第三方提供的图形化界面设计工具,但还是有瑕疵,不如PyQT的强大
  • 看起来非常本地化地界面

    阅读全文

Python web 加密下载链接的实现

需求背景

文件上传下载绝对是Web攻防中一个重要的突破口。网络安全日益受重视的今天,web开发中除了要对文件上传进行严格的权限控制,文件下载亦是如此。不可随意暴露服务器端信息,以及用户信息。
其他技术栈的网站也可以作参考。

实例

设有银行网站 WEB_SERVER , 另有银行每月交易流水日志文件服务器 LOG_SERVER , 用户在 BANK_WEB 的 “个人中心” 里可以 “下载流水日志”。
用户点击 “下载流水日志” 后,选择想要流水日志的年月,WEB_SERVER 返回的是一个加密的下载链接,此链接可以由浏览器当时执行,也可放在下载工具中下载。也有如下安全性要求。

  • 用户无法构造文件的URL
  • 不直接暴露文件的绝对路径
  • 开始下载之前不暴露文件名
  • 可以进行权限控制,无权限者无法下载
  • 下载链接有过期时间
  • 还可以实现其他你可以想到的功能
  • 文件下载服务器只需提供文件,无须管理用户信息

    阅读全文