mysql存储emoji

mysql使用utf8编码时不能存储emoji,因为emoji是占4个字节的,而普通字符是3个字节。myslq从5.5.3版本之后引入了一种新的编码方式utf8mb4,支持emoji包括火星文。下边的例子是基于flask的一个新建的项目中使用utf8mb4编码。

新建数据库设定字符集

1
2
3
4
5
6
$ mkdir emoji
$ touch run.py
$ cd emoji
$ touch __init__.py
$ mkdir templates
$ touch templates/test.html

Read More

python私有同名属性的继承

在python中以双下划线开头的属性是私有属性,不会被子类继承,然而python中的私有不是绝对的私有,可以通过_类名__私有属性的方式被继承,现有如下两个类, childFather

  • 第一种情况:子类Child未调用父类的构造函数,但是没有定义get方法,只定义了一个__value私有属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Father(object):

def __init__(self):
self.__value = 0

def get(self):
print 'Father get() method'
print self.__value


class Child(Father):

def __init__(self):
self.__value = 100

子类Child继承了父类Fatherget方法,但是这个get方法打印的是父类Father中的私有属性__value,子类对象创建的过程没有调用父类的构造函数,并未继承到父类的私有属性_Father__value,所以子类对象调用时会抛出异常AttributeError: 'Child' object has no attribute '_Father__value'

Read More

使用PIL获取图片主色调

最近看到Pocket casts这个APP中有些页面是取了上一层入口处点击的图片中的颜色作为背景,所以就在想这个是怎么实现的,在网上发现了一篇文章获取图片的主色调,是用c#实现的,我按原作者的思路用Python做了一个类似的版本,原作者的思路是:

1
2
3
4
5
6
7
8
9
10
11
我想了一个简单的办法,就是根据图片中每个像素的色调值去判断哪些像素符合“醒目”这个特性。

分三步进行

1.计算整个图片的色调的平均值 (avg_hue)

2.遍历每个像素,计算该像素的色调值与 avg_hue 的色差(即将二者相减后取绝对值),如果该色差大于一个阈值(本文中取 30),

则将该像素加入到“醒目像素”的列表

3.计算整个“醒目像素列表”的颜色均值,得到的结果即为该图片的主色调。

Read More

使用PIL生成缩略图

两种生成缩略图方法的区别

使用PIL生成缩略图用两种方式,resizethumbnail,区别在于使用reszie会返回一个新对象,
而使用thumbnail则会在原对象上进行修改,即thumbnail会覆盖原图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> from PIL import Image
>>> im = Image.open('a.jpg')
>>> im.size # 原图尺寸
(3264, 2448)
>>> id(im)
140253860921640
>>> resize_im = im.resize((100,100))
>>> resize_im
<PIL.Image.Image image mode=RGB size=100x100 at 0x7F8F65A0A518>
>>> id(resize_im)
140253862077720
>>> thumb_im = im.thumbnail((100, 100))
>>> thumb_im
>>> im.size # 使用thumbnail后的原图尺寸改变,resize后的结果不一定等于指定的尺寸,因为是按比例缩放的
(100, 75)

Read More

sublime快捷键

使用sublime也有一年多了,今天总结下比较常用的快捷键.

跳转类

  • Ctrl+P: 搜索项目中的文件
    • 输入’#’: 在当前文件匹配结果
    • 输入’@’: 同Ctrl+R
    • 输入’:’: 同Ctrl+G
  • Ctrl+R: 搜索函数名或类名
  • Ctrl+G: 跳转到指定行
    F12: 跳转到定义处

文件窗口切换

  • Ctrl+Tab: 在当前窗口和前一个窗口之间切换
  • Ctrl+PgDown: 切换到右侧标签
  • Ctrl+PgUp: 切换到左侧标签
  • Alt+数字: 切换到指定序号的标签(从左往右从1开始递增)

Read More

Hexo部署相关

记录一下hexo部署时遇到的问题, 执行了

1
$ hexo deploy

报错hexo Deployer not found, 这是因为hexo 3.0后需要单独安装delpoyer package,如果要部署在github则需要安装hexo-deployer-git, 其它部署方式所需要相应的deployer请参看hexo deployment

1
$ npm install hexo-deployer-git --save

然后就是编辑config的delpoy部分

1
2
3
4
5
# Deployment
## Docs: http://hexo.io/docs/deployment.html
deploy:
type: git
repo: git@github.com:zhangming0509/zhangming0509.github.io.git
  • repo的名字是你的github用户名加.github.io,每个用户只能创建一个github page
  • 编辑config时要注意yml的语法,冒号后要有空格

Read More