Shawn's Blog

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

自从一咬牙购入了一台Synology之后感觉网络和存储的体验提升了很多。在这里总结一下购买理由,方便犹豫不决的朋友做个参考。

0X00 来自百度云盘的惊悚事件

国内云盘一波洗牌过后,常用的几家都已经GG了,仅有一家百度还存活着。不过百度云说起来是免费的,实际如果使用的比较多的话就会发现,如果不充值为会员的话,速度就会非常的慢。所以说百度云盘也几乎是一个收费的网盘,超级会员算下来要将近30元/月。

其实收费无可厚非,毕竟大家花钱享受服务嘛。不过直到一天,在网上看到了这样一件事:

一个人在自己的百度云盘中上传了大量自己拍摄的照片(纯一手自己拍摄的),过段时间后因为一些原因从百度云盘手动删除了。又过了不短的一段时间,该用户再次将自己的这些照片上传至百度云盘,发现居然所有图片都是使用 急速秒传 的方式上传的。那么就发现了一个问题,急速秒传使用的是文件摘要值对比后选择性上传的一个技术。那问题就来了,该用户自己纯一手拍摄的照片,在没有分享给任何人的情况下删除了,而且是过了不短的一段时间再次上传,居然是秒传。那就意味着百度的服务器上存储了该用户的这些数据,但是用户已经删除了这些数据。意味着什么呢?百度根本没有删除用户的数据,在用户删除之后也只是不展示给用户看了而已。

现在想想是不是不寒而栗?

阅读全文 »

0X00 内容比较少,不分标题

我们对Django中的model进行查询时通常是某个字段和一个常量对比,比如下面这种写法

1
2
3
Student.objects.filter(name='shawn')
Student.objects.filter(age=233)
Student.objects.filter(gender__in=('F', 'M'))
阅读全文 »

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中仓库之间的关系没有这么简单。

阅读全文 »
0%