Living a Simple Life is a Happy Life

有饭吃,自由自在,就非常开心

Peewee ABC

| Comments

在我用了又一个小时的时间去温习sqlchemy丰富的文档后,我放弃治疗了。

我的智商还是适合比较简单的幼儿化的Python库,于是我转向Peewee了。

定义Model

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from peewee import SqliteDatabase, Model, CharField

db = SqliteDatabase('testdb.sqlite3')

class User(Model):
    username = CharField(index=True)
    password = CharField()
    email = CharField(index=True)
    birthday = DateField()
    is_relative = BooleanField()

    class Meta:
        database = db

创建

1
2
>>> db.connect()
>>> db.create_tables([User])

保存

1
2
3
>>> user_record = User(name='Bob', password="", email="[email protected]", birthday=date(1960, 1, 15), is_relative=True)
>>> user_record.save()

批量插入

1
2
3
4
5
6
7
8
fields = [User.username, User.password, User.email, User.birthday, User.is_relative]
user_records.append(
    (username, password, email, birthday, True),
    (username, password, email, birthday, True),
    (username, password, email, birthday, True),
)
User.insert_many(user_records, fields=fields).execute()

查询

1
2
for user in User.select().where(User.username.contains(username)):
    print(user.username ....)

关闭

1
>>> db.close()

How to Set Proxy for Git

| Comments

全局设置和取消:

1
2
3
4
5
6
7
git config --global https.proxy http://127.0.0.1:1080

git config --global https.proxy https://127.0.0.1:1080

git config --global --unset http.proxy

git config --global --unset https.proxy

local设置和取消:

1
2
3
4
5
6
7
git config  https.proxy http://127.0.0.1:1080

git config  https.proxy https://127.0.0.1:1080

git config  --unset http.proxy

git config  --unset https.proxy

Becoming Warren Buffett

| Comments

看了一遍 《Becoming Warren Buffett》 这部纪录片。

印象里巴菲特总是与成功学书籍联系在一起,作为股神,他的公司Berkshire Hathaway的股票价格达到了近$300,000一股,实在是让人叹为观止。

后来有时间仔仔细细读了他每年致股东的信,距离一下子拉近了,他确实是个不凡的人。

巴菲特不同于一般的投机者,他是一个受人尊敬的人。人们尊敬他,并不仅仅是因为他的富有:

1. 巴菲特很早就确定了自己喜欢做什么,自己的人生信条是什么,并用一生去实践。

大部分人一辈子也不明白自己到底喜欢做什么,就这样浑浑噩噩一生过去了。

早早找到自己喜欢做的事情,才能拥有充实的人生。

当你发现自己内心深处的期望后,要有勇气去克服困难,并尽一切努力去追寻它,守护它;

全世界只有你最了解自己想要什么,在这一方面,其他任何人的意见都不值得参考;

也许你说这是一种固执,但是如果你有了信念,不要轻易动摇,用你的一生或者半生去实践这个信念。

所谓信念,就是值得你赌上一生去判断对错的东西。

2. 巴菲特洞悉了时间之谜。他遵循内心的信念,数十年如一日的耐心等待,他是少数能与时间友好相处的那个人。

人在生物学上就是一种短视的动物,早在人类初期,生存环境恶劣,那时候的人类不得不把大部分精力放在眼前。筹划未来是一种负担,因为你不知道明天会发生什么,自己能不能活下去。

随着科技水平的提高,人们的寿命也不断提高,但是”只顾眼前”是刻在人类进化的基因里面的,不会轻易改变。所以人们今晚做出的决定,明天又会被自己轻易否决。

人们焦虑的追逐时间却往往没有所得,基因诱使我们焦虑。让我们短视,急于求成。

只有那些真正把握信念的人才能不为所动,巴菲特就是其中的佼佼者。

让我们记住 “不为所动”,耐心是需要人类不断锻炼自己才能拿到的美德。

3. 巴菲特的故事里面包含了信念、坚韧、固执、耐心、快乐这些字眼。

他从一而终的守护自己的观点,并实践终身。就像是运动员不断超越极限,我们看到一个自律的人究竟能达到什么样的高度,这份了不起的坚守打动了我们。

Python处理中文标点符号

| Comments

中文文本中可能出现的标点符号来源比较复杂,通过匹配等手段对他们处理的时候需要格外小心,防止遗漏。以下为在下处理中文标点的时候采用的两种方法:

How to Sort a Very Very Very Big File

| Comments

sort -uo 一个1T的文件,让最高配的google cloud instance (48 core/512G)崩溃了~~~,可惜了我的$30,白白跑了那么长时间~~~

网上搜索都是how to sort a big file,那我这个属于very very very big big big file了~~

不管是并行也好,管道也好,用了各种奇技淫巧就是敌不过人家 very very big~

不要跟我谈什么外排,归并,位图,bloom filter,redis hash去重,我就是不想折腾,最后只有分割手动外排搞定~~

把大象装进冰箱分为几步?

三步:

1
2
3
4
5
split -l 1000000000 huge-file small-chunk

for X in small-chunk*; do sort -u < $X > sorted-$X; done

sort -u -m sorted-small-chunk* > sorted-huge-file && rm -rf small-chunk* sorted-small-chunk*

小TIPS:

如果只要去重不要排序的话,尽量不要用 sort -u或者sort uniq,这个是nLog(n)的效率,让人捉急。

可以利用awk的数组是内存hash表的特性,直接awk来做,前提是你内存够大,瞎估估需要十倍于数据的内存吧:

1
cat xxxxx zzz | awk '{ if (!seen[$0]++) { print $0; } }' > xxx_zzz.uniq.txt

PS:

我后来又看了一下GNU Sort的实现描述,它说已经用了外排了,但是实际使用还是不给力,暂时迷惑中

How to Get Intersection of Two Big Files

| Comments

两个大文件,a.txt和b.txt两个文件的数据都是逐行呈现的, 如何求他们的交集、并集和差集。

用sort+uniq直接搞定:

交集

1
2
3
$ sort a.txt | uniq > aa.txt
$ sort b.txt | uniq > bb.txt
$ cat aa.txt bb.txt | sort | uniq -d

并集

1
cat a.txt b.txt | sort | uniq

差集

1
2
3
$ sort a.txt | uniq > aa.txt
$ sort b.txt | uniq > bb.txt
$ cat aa.txt bb.txt bb.txt | sort | uniq -u
  • 在开搞 bloom filter或者bitmap 或者grep -f之前可以先组合工具来一个

How to Parallel All Cmds for Linux

| Comments

grep 一个100GB的文件总是很有压力,怎么才能提速呢?

瞎优化

1
LC_ALL=C fgrep -A 5 -B 5 'xxxxx.password' allpassseed.txt
  • LC_ALL=CLC_ALL=UTF-8要块

  • 不需要正则的话,用fgrep可以提速

不过这样优化总是治标不治本,下面隆重推出linux 里面parallel all cmds的perl工具

1
cat allpassseed.txt |parallel  --pipe  --no-notice grep -f xxxxx.password

使用parallel ,和不使用parallel直接grep。结果显而易见,相差 20 倍。这比用啥 ack,ag优化效果明显多了

xargs也有一个-n的多核选项,可以作为备用

1
2
3
4
5
$ time echo {1..5} |xargs -n 1  sleep

real    0m15.005s
user    0m0.000s
sys 0m0.000s

这一条xargs把每个echo的数作为参数传给sleep ,所以一共sleep了 1+2+3+4+5=15秒。

如果使用 -P 参数分给5个核,每个核各sleep 1,2,3,4,5秒,所以执行完之后总共sleep的5秒。

1
2
3
4
5
$ time echo {1..5} |xargs -n 1 -P 5 sleep

real    0m5.003s
user    0m0.000s
sys 0m0.000s
  • 引自:

https://www.jianshu.com/p/c5a2369fa613