认真,坚持,静心
209-01-31
《程序员代码面试指南》
《大话设计模式》
2018-12-31
《流畅的python》注:第16、17 、18章暂时跳过,关于协程的部分。《SQL必知必会》《Python3学习笔记(上)》
《用户故事地图》- 《利用Python进行数据分析》
2017-11-19
- 《图解HTTP》
《WEB性能权威指南》- 《Redis入门指南》
《修改软件的艺术》阅读笔记
python允许通过为函数提供默认值来指定函数参数的,但是当默认值是可变的时,就会产生一些问题:
1 | def foo(bar=[]): |
上面的代码中,期望的是 foo() 重复调用(即不指定bar参数)将始终返回 'baz' ,因此假设每次 foo() 调用 bar 被设置为 []。
但是,让我们来看看执行次操作时实际发生的情况:
1 | >>> foo() |
咦,为什么每次调用都会默认值附加 'baz' 到现有的列表中,而不是每次都创建一个新列表?
答案就是: 函数参数的默认值仅在定义函数时计算一次。因此 bar 仅在 foo() 首次定义时将参数初始化为其默认值,但随后调用 foo() (即未指定bar参数),将继续使用 bar 最初初始化的相同列表。
仅供参考,一个常见的解决方法如下:
1 | def foo(bar=None): |
安装一些必要的依赖环境
1 | apt install -y libcurl4-openssl-dev libevent-dev \ |
下载最新的aria2的源码:
1 | wget --no-check-certificate https://github.com/aria2/aria2/releases/download/release-1.31.0/aria2-1.31.0.tar.gz |
Aria2的参数中-max-server-connection和-min-split-files很大程度上决定了网盘的下载速度。
在这里我将-max-server-connection最高设置为256,-min-split-files最小设置为256k。
sudo vi /etc/sudoers
将
1 | %sudo ALL=(ALL:ALL) ALL |
改为
1 | %sudo ALL=(ALL:ALL) NOPASSWD: ALL |
保存后退出 :wq!
之后输入 sudo 就可以不用输入密码。
至于安全问题,对于一般个人用户,我觉得这样也可以的。
如果改崩了,可以使用 pkexec visudo 输入密码后修改对应出错的地方,保存文件即可解决此问题
1 | sudo vi /etc/sudoers |
将
1 | %admin ALL=(ALL) ALL |
改为
1 | %admin ALL=(ALL) NOPASSWD: ALL |
保存后退出 :wq!
在 $HOME/.local/share/applications 目录下,新建文件: youapp_name.desktop,然后在其中填入以下内容:
1 | [Desktop Entry] |
其中 Exec 对应的是启动命令,如果是自己写的脚本,那就在以 Exec=sh 开头。Icon 对应的是图标
长按图标,然后选择添加到收藏夹即可
对于热门文章的定义是:
单位时间内,(”分享“数 + ”点赞“数 + ”评论“数)的总和大于某特定值的文章,被视为热门文章。
热门文章的列表是由后台动态生成的,而且在每次生成的时候,产生的数据不一定是相同的。为了减轻系统的压力和提高api的响应速度,该计算任务使用celery 进行后台任务调度。
后台定时任务是循环任务,任务执行时向缓存数据库中插入当前时段计算出的热门文章索引值,缓存数据库采用的是redis。
客户端有一个社区列表的展示界面,该列表的排序方式是按照关注人数进行反向排序(从大到小),类似:
| 社区id | 社区名称 | 社区关注人数 |
|---|---|---|
| 1 | AAA | 4 |
| 3 | CCC | 3 |
| 2 | BBB | 2 |
| 4 | DDD | 1 |
但是社区的 关注人数是动态变化的 ,当社区数量较多时也要考虑分页的情况,那么该列表的排序和分页有了很大的难度。
more >>这里简单整理当前的实现思路,并指出明显的缺陷和暂时解决不了的问题,待以后有能力解决。
在一个列表中,如果避免一次请求大量数据的问题,使用分页是最好的解决方式,而且在接触开发以来,也一直认为分页是最简单的基础,最容易实现的部分。然后在正式工作的第一个月,便改变了这个思想,虽然分页还是最基础的部分,但是已经不认为它是简单的了,它的实现,在某些场景下,让现在的我觉得还有很棘手的。
本文又名《简单的分页不简单》。为本人的第一篇工作笔记,以下所有的内容,均仅作为个人学习总结所用,特此声明!本文记录下当前这个状态的自己对于分页的理解,会留下目前解决不了的问题,等待未来的自己能够回来替自己解答。
参考文章:
https://developer.twitter.com/en/docs/tweets/timelines/guides/working-with-timelines
http://zhiheng.me/156
https://aotu.io/notes/2017/06/27/infinite-scrolling/index.html
”电梯式分页“,我觉得这个名字是十分贴切,这个名词形象的描述了这种分页模式的过程。常见的有百度的搜索页。
more >>1 |
|
安装完成之后,命令行启动
/usr/bin/google-chrome-stable
启动完成之后锁定到启动器即可。
1 | sudo add-apt-repository ppa:hzwhuang/ss-qt5 |
Ubuntu18及以上版本会在add-apt-repository之后会报错,需要手动去改源中的版本信息:
打开文件:
1 | sudo vi /etc/apt/sources.list.d/hzwhuang-ubuntu-ss-qt5-bionic.list |
将下面bionic改成 xenial:
1 | deb-src http://ppa.launchpad.net/hzwhuang/ss-qt5/ubuntu xenial main |
注意,Ubuntu 18及以上版本,以下方式添加全局代理已经无效。目前的做法就是,在设置网络中,“网络代理”选择手动,填入相应的代理IP和端口。然后登录谷歌,同步插件SwitchyOmega,进行代理。成功之后再禁用设置网络中的网络代理。
1 | sudo pip install genpac |
https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt 保存到本地gfwlist.txt
在fwlist.txt 目录下,执行以下命令:
1 | genpac --pac-proxy "SOCKS5 127.0.0.1:1080" --gfwlist-proxy="SOCKS5 127.0.0.1:1080" --gfwlist-local=gfwlist.txt --output="autoproxy.pac" |
点击:System settings > Network > Network Proxy,选择 Method 为 Automatic,设置 Configuration URL 为 autoproxy.pac 文件的路径,点击 Apply System Wide。
格式如:file:///home/{user}/autoproxy.pac
file:///home/wen/Downloads/autoproxy.pac
界面优化工具,可以自定义系统主题、图标、锁屏界面内容、字体,管理插件等内容
1 | sudo apt-get install gnome-tweak-tool |
将近一天的折腾,终于ok了,实现了如题的新玩法。这里做一个简单的记录,记录自己踏过的坑,其实还主要是ssh-key的问题。主要参考这里
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent:
meta: false
pages: false
posts:
title: true
date: true
path: true
text: false
raw: false
content: false
slug: false
updated: false
comments: false
link: false
permalink: false
excerpt: false
categories: false
tags: true