分类 小工具 下的文章

静态站点生成器应用场景

有一篇国外文章An Introduction to Static Site Generators
静态展点有几个好处,如响应速度快、站点内容有版本控制、安全(站点本身不接收用户输入)、部署方便(不依赖服务器、数据库等),但是,静态站点并不是解决所有问题的神奇解决方案-它们在某些情况下是完美的,但在另一些情况下则很糟糕。至关重要的是要了解他们的工作方式以及他们可以做什么,以便在每个项目的基础上评估他们是否是正确的工具。

它适用于项目展示网站、企业官网、博客、产品展示网站、在线文档。
适用于有一定开发能力的个人使用。

如果想为客户提供建站服务,还是建议CMS,如wordpress

警句

为一般情况编写程序,把具体情况放在别处。
把抽象放进代码,细节放进元数据。
好处:

  • 解除设计的耦合,从而带来更灵活、可适应性更好的程序
  • 迟细节处理,创建更健壮、更抽象的设计

系统设计
概念区分明确
逻辑显式指定,杜绝隐含推导逻辑

相信自己,深度思考

本地开发测试、服务器运行的一个方案

本文目的是分享一个开发便捷、运行简便、工作优雅的开发方案。
本文适用于使用IDE写代码、看代码的RD及QA。对于热衷Vim等编辑器的同学,可能不适用。
本地指个人笔记本,服务器指的是开发运行的机器。

本地开发服务器运行.png

1.开发便捷:利用IDE的强大功能就好

2.运行简便:服务器(开发机)上的环境是直接可用的,所以将本地代码快捷地同步到服务器上运行,本地开发并提交版本控制。
什么方式?SFTP/FTP/SMB等都可以,服务器上只要运行相关服务器,本地配置认证、目录映射,本地代码变动,手动或自动地将代码上传。如何在Webstorm/Phpstorm中设置连接FTP

3.工作优雅:举例说,本地开发分支A,服务器运行调试,开发完成(提交代码)或开发至一半(git stash暂存工作进度),本地切换分支B,开发下一个功能... 此刻服务器上代码的版本控制,就是不干净的,所以在本地切分支A->B时,同时处理好服务器的代码,清理不干净的代码、同样切换A->B,以git为例

git clean -df
git reset --hard
git pull
git checkout --track origin/B

微博春晚流排序算法榜单

需求说明

原始需求说明

首页

实时流
白名单用户所发博文 + 关键词
阅读量+互动量排序,权重各占50%
发博时间降权

精彩段子

段子实时流
白名单用户所发博文 + 关键词
阅读量 + 互动量排序, 权重各占50%
发博时间降权
段子排行榜
白名单用户所发博文 + 关键词
阅读量 + 互动量排序, 权重各占50%
uid 去重,每个uid显示排名最高的博文

视频流

历年节目回顾
白名单用户所发博文+关键词
播放量+互动量排序,权重各占50%

明星实时流

白名单用户所发博文 + 关键词
阅读量 + 互动量排序,权重各占50%
发博时间降权

排序规则的抽象

是否区分视频微博

博文类:排序计数按 阅读量 + 转评赞
视频类:排序计数按 播放量 + 转评赞
视频的播放量从微博信息中获取,不同于 阅读、转评赞是同一个接口

是否时间降权

实时流: 计数按发布时间因子衰减

是否uid去重

段子手排行榜

抽象后的流排序

流分类

春晚实时博文 (阅读+转评赞+时间降权; 春晚主场、精彩段子、明星拜年)
春晚段子排行 (阅读+转评赞+uid去重,精彩段子)
春晚视频排行 (播放量+转评赞,历年回顾、视频排行)

算法抽象

//根据后台设置的计数权重计算 单体微博的原始得分
//如对于视频微博, $weight['read'] = 0 
//对于普通博文, $weight['play'] = 0
$raw_score = $weight['read'] * $read_count + $weight['interacts'] * $interacts_ccount  + $weight['play'] * $play_counts;
//根据时间衰减因子,计算衰减系数,
//$decay_hour_config 衰减到e^(-1) 约为0.3678需要的小时数
//如果需要实时性比较强,$decay_hour_config 可以设置的比较下,如0.01
$decay_weight = exp(-1 * ($count_time_in_seconds - $mid_create_time_in_seconds) /(3600 * $decay_hour_config));
$score = $score * $decay_weight;

流收录&&排序总体流程

使用redis的zset 实时收录feed流
区分视频微博和普通微博(redis_key_feed, redis_key_video, redis_key_spring2018)
每十分钟排序
前台展示使用redis_key_spring2018, 初始微博的score 为0