Shawn's Blog

一个伪程序员的伪技术博客

Python一切皆对象

0X00 困扰我的一个问题

前两天在工作上遇到了个问题,说来很简单:我要在每天的固定时刻统计系统中当天产生的一些数据并且用邮件发送给指定的人,又考虑到了程序的可复用性(统计其他日期)我并没有把参数写死,而是将其默认为当天的日期并可以指定参数。很容易我就写出了类似下面的代码。Ps.伪代码,不要过分纠结。

1
2
3
def export_statistic(export_date=datetime.date.today()):
result = get_statistic_for_day(export_date)
sendmail('今日数据统计结果', result, receiver_list)

并且将其配置在Celery中,每晚执行,并且在得到了第一天的正确数据后默认程序正确了。第二晚虽然收到了统计数据的邮件,但是发现日期是前一天的。以为是Celery或是服务器时间同步问题或是缓存等导致的,但是在多次检查后没有发现这个问题的根本原因。故临时使用crontab去执行这个定时任务,但这并不是长久之计。

阅读全文 »

内容比较少,只是今晚翻看教程的时候发现的几个可以替换调我以前一些诡异操作的方法,将其整理贴出。

0X00 git blame

是谁在代码里下了毒?是谁用了一个超酷炫的方法解决了你解决不了的问题?当你想知道仓库中的某行代码是谁提交的,就可以使用这个方法。git blame hello.py可以看到hello.py这个文件所有行的提交人是谁,于何时提交的。而且这个命令最常用的是和grep合用,git blame hello.py | grep prinft(是谁写错了这个单词+_+)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200   1) <p align="center">
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200 2) <img src="https://s3.amazonaws.com/ohmyzsh/oh-my-zsh-logo.png" alt="Oh My Zsh">
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200 3) </p>
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200 4)
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200 5) Oh My Zsh is an open source, community-driven framework for managing your [zsh](https://www.zsh.org/) configuration.
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200 6)
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200 7) Sounds boring. Let's try again.
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200 8)
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200 9) _Oh My Zsh will not make you a 10x developer...but you might feel like one.__
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200 10)
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200 11) Once installed, your terminal shell will become the talk of the town _or your money back!_ With each keystroke in your command prompt, you'll take advantage of the hundreds of powerful plugins and beautiful themes. Strangers will come up to you in cafés and ask you, _"that is amazing! are you some sort of genius?"_
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200 12)
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200 13) Finally, you'll begin to get the sort of attention that you have always felt you deserved. ...or maybe you'll use the time that you're saving to start flossing more often. 😬
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200 14)
^9544316 (Lars Schneider 2018-07-24 22:55:48 +0200 15) To learn more, visit [ohmyz.sh](https://ohmyz.sh) and follow [@ohmyzsh](https://twitter.com/ohmyzsh) on Twitter.

上面的例子是oh-my-zsh中README的部分输出

阅读全文 »

0X00 遇到了什么

我们使用git,绝大多数情况下都是大于等于一个人进行代码编辑,然后将自己的改动提交到github/gitlab/gogs等仓库,然后再通过pull request/merge request的方式进行代码合并。所以我们一般都是先从github上创建一个新的项目,然后按照向导在自己的本地git clone下来一个空项目,再提交代码上去;或者fork & clone的流程。

以前从来没有去想过github上的仓库是不是和我本地的相同,以至于今天第一次搭建自己的git服务时遇到了问题。我从服务器上一顿操作猛如虎mkdir xxx; cd xxx; git init; touch README.md; git add .; git commit -m "init the repository",结果不小心成了二百五。因为这个仓库根本不能clone到我本地,经过一番搜索发现了git中仓库之间的关系没有这么简单。

阅读全文 »

本来准备总结一下Linux桌面系统使用一年以来的一些感受,以及为什么选择Linux作为桌面系统工作学习的,但是构思了半个小时也没能想到要写些什么。所以还是来推荐一下一年以来在Linux桌面平台下的软件体验和推荐吧。由于我这一年多以来一直使用的是Fedora Workstadion,所以并不能保证这些软件能在其他平台下的体验与我一致,不过一般来说都是没有问题的呢。

0X00 vim + spacevim

首先说明我不认为Vim比IDE写代码更好用,但是我仍然在使用vim。一个原因是觉得使用盗版IDE有些不太道德,另一个也是想要提升一下自己的代码水平,毕竟vim给出的提示会更少一些。IDE用户可以在IDE上安装vim的操作插件,毕竟vim的操作方式还是能很大程度上提升效率的。

SpaceVim 呢是vim的一个插件打包配置集成之后的一个版本。由于它集成了大量精选插件和配置,所以用起来很舒服,就把他当成一个高级的文本编辑器来用就好的。spacevim还有官方的中文文档可以查阅,虽然学习成本相对高一些,但是带来效率和爽快感的提升可不是一点点的。

0X01 ulaunch

ulaunch是一个快速启动器,按下快捷键后屏幕中间会出现一个搜索框,可以快捷打开软件和文件。配合一些插件可以实现在搜索框中翻译等工作,而且软件和插件都是Python写的可以轻松制作自己的插件。

阅读全文 »

0X00 Sentry是什么

Sentry是一个统一收集整理程序异常错误的服务。如果你有一个程序在跑,并且配置了日志,那么可以轻松的找到程序出错的地方;甚至可以在报错后发邮件通知自己以便抓紧处理。但是如果你的团队有10个项目和50个人,并且这50个人并不是每人只负责一个项目,此时此刻该怎么办呢?难道为每个项目都配置很多人,并且在人员变动和项目变动的时候都去再修改吗?这样就未免有点傻了,Sentry就是用来做这个的。

你可以在Sentry上为每个项目创建一个Project用于收集项目的错误,再为每位成员创建用户,由用户去关注项目,就可以实现上述复杂的功能了。

0X01 如何部署

为了流程简洁,默认安装了dockerdocker-compose

1
2
3
4
5
6
7
8
9
10
# 将一个配置好的使用docker-compose部署Sentry给clone下来
git clone https://github.com/getsentry/onpremise.git

cd onpremise

# 创建所需的目录
mkdir -p data/{sentry,postgres}

# 生成一个secret-key
docker-compose run --rm web config generate-secret-key
阅读全文 »
0%