# -*- coding: UTF-8 -*-
import sys
import os
from pdfrw import PageMerge, PdfReader, PdfWriter, IndirectPdfDict
import fitz
# resize
def adjust(page):
info = PageMerge().add(page)
x1, y1, x2, y2 = info.xobj_box
viewrect = ((x2 - 421) / 2, (y2 - 595) / 2, 421, 595)
page = PageMerge().add(page, viewrect=viewrect)
return page.render()
fin, = sys.argv[1:]
fout = 'mid.' + os.path.basename(fin)
reader = PdfReader(fin)
writer = PdfWriter(fout)
for p in reader.pages:
writer.addpage(adjust(p))
writer.trailer.Info = IndirectPdfDict(reader.Info or {})
writer.write()
# trip backgroud images
doc = fitz.open(fout)
for i in range(len(doc)):
imglist = doc.getPageImageList(i)
for img in imglist:
xref = img[0]
if xref==51:
doc._deleteObject(xref)
print(img)
doc.save('new.' + os.path.basename(fin))
《校园市场》读书笔记
校园市场具有非常重要的特性
- 第一,具有独有的延续性,品牌介入用户越早对后期影响力越大。
- 第二,封闭、集中,口碑传播快。
- 第三,人群特征明显,可以精准分类并筛选出目标用户。
- 第四,市场回报率高,可以精准投放并转化。
- 第五,校园文化有其独特性,大学生能迅速接受新生事物。
校园市场,需要注意有几个基本工作:
我们所说的校园市场,需要注意有几个基本工作:
- (1)详细了解全国高校分布情况;
- (2)要了解各大高校专业学院的组成;
- (3)要了解高校中的一些社团组织分类。
了解清楚这3点,你就可以快速找到你的产品的目标用户了。
校园市场面临的社会考验
我们面对着数千万的用户所带来的利益回报,同时也要考虑所做的事情将如何影响年轻人的成长,以及如何正确引导其价值观。有多少企业和高校将大学生创业大赛变成了华丽的演讲比赛;有多少企业和高校将一个个踏踏实实的学生变得满嘴项目、满脑创业。试问谁能保证他(她)会成功?如果失败,他(她)还会安心回到教室上课吗?如果他(她)已经习惯活在幻想中,那么这个学生的未来由谁来负责?
校园市场的营销战略和运营秘籍
- “内容为王,潜心创作,布局未来,专注校园。”
- 还有我自己在和一些大学生聊天中,都能明显地感觉到,待遇对大学生来说不是最重要的,大部分学生想获得的是团队的归属感和“好玩儿”。所以,从一开始就不应以物质条件来吸引学生加入团队,但当他们做出成绩时,哪怕自己掏钱,也要给予奖励。
- 什么好玩就玩什么。
中国校园市场的未来
- 做校园的真正价值在于品牌。很多人表面上表示支持和认同这一观点,但往往轮到自己做的时候,却会忽略这个价值导向,原因是什么?
- 在做校园市场之前,我想请各位认真思考以下问题。(1)大家都在谈论校园市场,那么到底什么是校园市场?(2)我为什么要做校园市场?我的目的是否只有做校园市场才能达到?(3)做校园市场的价值到底是什么?能否实现社会责任和商业的双赢?(4)我的企业和产品与校园市场的匹配度是多少?目的是要用户量?要消费者?要品牌效益?(5)我能找到合适的人来做校园市场吗?我是否一定要自己来做校园市场?(6)如果要启动校园市场项目,是不是要提升到战略层面,还是只停留在从营销手段上去思考和布局?
- 每一个领域和行业,每年能够产出两三篇出众的专业性文章供大家参考、学习,已经是难能可贵的了。所以,与其期待别人给自己指引方向,不如踏踏实实,埋头苦干,研究市场,分析自己工作能力的优劣,找方向,深挖市场需求,才是真正的市场渠道运营策略,这一点我深有体会。
总结
差评部分
- 见过写作水平最差的作者了
- 很多地方总结没有依据只有结论,比如对于游戏和社交在校园市场只有2、3颗星,实际上游戏和社交虽然是红海,但是并没有比校园更好的渠道,而且书中就可以找到反例(社交人人、黑白)
- 书籍是讲校园市场,但是作者标板社会责任感的地方太多,大家想看到的是《15个行业如何做校园市场》或者《大企业都在做校园市场》
好评部分
- 与学生交朋友
- 团队管理充分授权
- 活动策划好玩,互动
- 活动内容要符合主流价值观
- 活动要做好充分准备
- 校园团队架构如何搭建
思考
- 与用户成为朋友,而朋友是应该辈子的,唯有真心想交
- 校园市场需要有产期的效益支持
解决nginx+php/java/go/python+mysql下time_wait连接数过多问题
公司服务器连接数超过10K了,查了下大多数是没有即时回收,采用tcp复用容易后程序出现了故障,以前一直看到说PHP持久连接有问题,所以没怎么用,最近有机会试了下。
非常香,连接数直接降低到几百了,目前观察数周没有问题。
查看连接数
netstat -n | wc -l # 总连接数
netstat -n | grep -i time_wait | wc -l # time_wait 连接数
netstat -anp # 查看占用端口过多的程序
tcp复用解决方案
网上大部分解决方案是修改sysctl.conf回收重用ipv4连接,但是可能带来其他问题
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time = 600
nginx fastcgi(php) 解决方案
修改nginx.conf
upstream fastcgi_backend {
server 127.0.0.1:9000;
keepalive 60;
}
location ~ \.php$ {
fastcgi_pass fastcgi_backend;
fastcgi_keep_conn on;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
主要是 fastcgi_keep_conn on
与 upstream
的 keepalive
nginx + proxy (python/go/java) 解决方案
upstream wxpic {
keepalive 60;
server 127.0.0.1:xxx;
}
server {
keepalive_requests 10000; # 默认100
location / {
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
主要是 proxy_http_version
, proxy_set_header Connection ""
以及keepalive_requests
mysql数据库连接解决方案
修改yii数据库配置采用长链接
'db' => [
'class' => 'yii\db\Connection',
'dsn' => '*', 'username' => '*',
'password' => '*',
'charset' => 'utf8mb4',
'attributes' => [
PDO::ATTR_PERSISTENT => true
]
],
redis 连接数
linux下PhpStorm,WebStorm,PyChram,IntelliJ IDEA,Android Studio使用ibus,fcitx输入中文
找到在pycharm安装目录bin下的pycharm.sh文件
在pycharm.sh文件中添加以下代码:
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
添加的位置
在Run the IDE之前,添加到文件末尾无效
CLASSPATH="$IDE_HOME/lib/bootstrap.jar"
CLASSPATH="$CLASSPATH:$IDE_HOME/lib/extensions.jar"
CLASSPATH="$CLASSPATH:$IDE_HOME/lib/util.jar"
CLASSPATH="$CLASSPATH:$IDE_HOME/lib/jdom.jar"
CLASSPATH="$CLASSPATH:$IDE_HOME/lib/log4j.jar"
CLASSPATH="$CLASSPATH:$IDE_HOME/lib/trove4j.jar"
CLASSPATH="$CLASSPATH:$IDE_HOME/lib/jna.jar"
if [ -n "$PYCHARM_CLASSPATH" ]; then
CLASSPATH="$CLASSPATH:$PYCHARM_CLASSPATH"
fi
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
# ---------------------------------------------------------------------
# Run the IDE.
# ---------------------------------------------------------------------
如果使用fcitx输入法将ibus修改为fcitx即可
Windows监控打印机任务实现付费打印
如何拦截打印任务
参考:
-
Intercept any print job and prompt for password.
FindFirstPrinterChangeNotification()
FindNextPrinterChangeNotification()
if pdwChange = PRINTER_CHANGE_ADD_JOB you get the Job ID from PRINTER_NOTIFY_INFO_DATA
You pause the Job with
SetJob() and JOB_CONTROL_PAUSE
You call your Dialog Box, thenyou resume the Job with
SetJob() and JOB_CONTROL_RESUME
or you cancel it with
SetJob() and JOB_CONTROL_DELETE -
Monitor jobs in a printer queue (.NET)
There is a lot of code available in the internet (CodeProject as well as other sites) about the API calls to do print spool monitoring. However, I was not able to find any code that would help the user to enable monitoring one or more print queues with minimal code changes. So, I created a class (PrintQueueMonitor) that would allow the user to monitor the print queue for job changes and raise an event as and when jobs get added to the queue or job status gets changed in the queue.
《AI.未来》读书笔记
解开深度学习的面纱
深度学习的原理
通过大量历史数据,找出结果与参数之间最大的关联性算法
深度学习局限性
- 需要大量案例
- 历史不代表未来(如政策因素)
- 已知因素和未知因素(如天气,心情等外部环境)
人工智能的基本相关常识
- 互联网智能,商业智能,实体世界智能,自主智能 (天猫精灵)
- 哪些职业容易被替换:低技能,弱社交
人工智能时代的世界格局
- 人工智能需要的理论和数据,中国和美国具有显著优势
- 美国在人工智能理论方面仍然领先
- 中国已经不在仅是模仿,开始通过互联网走向世界舞台,并拥有大量的数据优势(王兴美团,共享单车)
- 政策方面中国政府积极迎接人工智能时代的到来,中国民众对隐私数据更加不care
人工智能的未来思考
- 社会分配的三个方案:1,减少工作时间;2,再培训;3,重新分配(补贴以及补贴方式补贴用于学习教育)(估计大部分女性同胞不会同意)
- 人机区别在于情感(爱)(如果机器拥有情感是否也成了人,人如果像机器一样不知道累,不会死是不是也成了机器?)
Python通用logging方法:控制台输出以及文件自动切分
import logging
from logging.handlers import TimedRotatingFileHandler
import sys
def get_logger():
logger = logging.getLogger()
hd = logging.StreamHandler(sys.stdout)
# hd = TimedRotatingFileHandler('mylog.log', when='D',maxBytes=10240000 backupCount=30)
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
hd.setFormatter(formatter)
logger.addHandler(hd)
logger.setLevel(logging.DEBUG)
return logger
Yii2 composer安装慢的解决办法
修改fxp-asset为Asset Packagist
参考官方安装指南Yii advanced template installation提到:
It uses asset-packagist for managing bower and npm package dependencies through Composer. Also you can use asset-plugin, as in earlier versions, but it works slowly.
找到
"config": {
"process-timeout": 1800,
"fxp-asset":{
"installer-paths": {
"npm-asset-library": "vendor/npm",
"bower-asset-library": "vendor/bower"
}
}
},
"replace": {
"bower-asset/jquery": ">=1.11.0",
"bower-asset/inputmask": ">=3.2.0",
"bower-asset/punycode": ">=1.3.0",
"bower-asset/yii2-pjax": ">=2.0.0"
}
修改为
"config": {
"process-timeout": 1800,
"fxp-asset": {
"enabled": false
}
},
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
修改config/main.php
'aliases' => [
'@bower' => '@vendor/bower-asset',
'@npm' => '@vendor/npm-asset',
],
Asset Packagist介绍
from https://asset-packagist.org/
Composer + Bower + NPM = friends forever!
This repository allows installation of Bower and NPM packages as native Composer packages.
NO plugins and NO Node.js are required.
At the moment we’ve added most popular Bower and NPM packages 4000+ each.
In case Composer fails to install some asset package, use the search line at the top of the page to check specific package health.
For NPM scoped packages use scope--package
instead of @scope/package
, e.g. npm-asset/pusher--chatkit
.
Got tired of fxp/composer-asset-plugin.
Why Asset Packagist
Got tired of fxp/composer-asset-plugin.
It’s a good project with nice idea and good implementation. But it has some issues: it slows down composer update a lot and requires global installation, so affects all projects. Also there are Travis and Scrutinizer integration special problems, that are a bit annoying.
django rest framework token验证指南
安装app
修改settings.py增加rest_framework.authtoken
INSTALLED_APPS = (
'rest_framework',
'rest_framework.authtoken',
'myapp',
)
增加权限验证
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAdminUser',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
)
}
升级表可以看到增加了authtoken_token表
python manage.py migrate
添加url
编辑urls.py
from rest_framework.authtoken import views
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^api-token-auth/', views.obtain_auth_token),
]
获取token
http POST 127.0.0.1:8000/api-token-auth/ username=’admin’ password=’password’
{
"token": "9d1ff379e5e380c143ceadb66dde26b2b09dd4ab"
}
查看验证
http GET 127.0.0.1:8000/users/
{
"detail": "身份认证信息未提供。"
}
http GET 127.0.0.1:8000/users/ ‘Authorization:Token 9d1ff379e5e380c143ceadb66dde26b2b09dd4ab’
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"date_joined": "2018-09-12T22:46:35.919532+08:00",
"id": 1,
"url": "http://127.0.0.1:8000/users/1/",
"username": "admin"
}
]
}
参考
Python字符串转unicode emoji
Converting emojis to Unicode and vice versa in python 3
# -*- coding: UTF-8 -*-
text = u"?"
print(text.encode('unicode-escape').decode('ASCII')) # output: \U0001f188\ue513\ue220\ue21c