负雪明烛的博客

LeetCode,算法题,求职领域博主

0%

本文记录了我对owllook.net这一网络小说搜索引擎的推荐系统的分析与设计过程。这个项目是开源项目,地址在owllook repo,目前已经积累了一定的数据量,需要一个靠谱的推荐系统。注意我用到的数据是内部数据,并没有开源。

本文使用推荐算法包括:基于用户的协同过滤(UserCF)、基于物品的协同过滤(ItemCF)、基于流行度的推荐、随机推荐、基于用户标签相似度的推荐等算法。通过对比发现基于用户标签相似度的推荐算法表现效果最佳,目前已经将该算法在线上使用。

owllook

Read more »

项亮的《推荐系统实践》是一本面向推荐系统初学者的好书。这本书中间花了不少的篇幅去介绍了推荐系统中很重要的一个算法:协同过滤。囿于书中的篇幅限制,作者只给出了核心部分的代码。基于此书内容,我动手实现了基于用户的协同过滤算法和基于物品的协同过滤算法,并在MovieLens数据集上做了测试,效果令人满意。现在总结一下自己对协同过滤系统的理解和动手实践过程的经验。

本电影推荐系统已开源在:https://github.com/fuxuemingzhu/MovieLens-Recommender

Read more »

如果问大家离开北邮最不舍的东西是什么?很多人肯定会脱口而出:北邮人BT!显然,北邮人BT已经融为每个BYR生活的一部分了。那么就从这个网站下手,练一练Python的爬虫吧。

很早之前写这篇文章时,对下载北邮人BT的资源的理解是先通过模拟北邮人BT登录,然后用代码下载资源。现在觉得这么做太复杂了,所以这篇文章就改成用python模拟登录北邮人BT的教程吧。

Read more »

最近有了审美强迫症,不仅让自己的Ubuntu变得很酷炫,还想把自己的博客变得更吸引眼球。调了两三天的博客,只为让博客变得更美。

记录一下我的调整的地方,也为了让大家更能看到我博客的亮点。

由于本博客使用的是Next主题,不同主题的调整方式可能略有不同。大家可以根据自己的主题进行模仿调整。

鼠标点击出现小心心

  1. love.js放到 \themes\next\source\js\src 文件目录下。

  2. 找到 \themes\next\layout\_layout.swig 文件, 在文件的后面,</body> 标签之前 添加以下代码:

<!-- 页面点击小心心 -->
<script type="text/javascript" src="/js/src/love.js"></script>

漂浮的颗粒背景

你注意到了吗?你现在正在看的博客的的背景是很多漂浮的小颗粒。更重要的是,当你鼠标放到空白位置时,小颗粒会吸附到你的鼠标位置!特别有意思~

  1. particle.js 文件添加到 \themes\next\source\js\src 文件目录下。
  2. 找到 \themes\next\layout\_layout.swig 文件, 在文件的后面,</body>标签之前 添加以下代码:
    <!-- 颗粒漂浮背景 -->
    <script type="text/javascript" src="/js/src/particle.js"></script>
    

颗粒效果因为特别耗性能,故已关。如果想玩,可以点击:https://neveryu.github.io/

关于添加居中模块

A head full of fears has no space for dreams.

不需要使用html,在Hexo3中可以使用下面语句实现。

{% cq %} A head full of fears has no space for dreams. {% endcq %}

根据是否是当前页面并修改浏览器标题栏

当页面切换到其他网页的时候,浏览器会有改变哦!切换回来也会有变化~去试试吧~~

  1. 找到 \themes\next\layout\_layout.swig 文件, 在文件的后面,</body>标签之前 添加以下代码:
<script type="text/javascript">var OriginTitile=document.title,st;document.addEventListener("visibilitychange",function(){document.hidden?(document.title="负雪明烛在这里等你",clearTimeout(st)):(document.title="Got ya~~"+OriginTitile,st=setTimeout(function(){document.title=OriginTitile},3e3))})</script>

在Hexo中使用ECharts实现动态图表

EChart图表库是百度推出的在线网络画图库。非常好用,比如下面这张图,注意,’利润’, ‘支出’, ‘收入’,这些标签是可以点击的哦!有交互效果!

如何在Hexo中使用ECharts请看我的另外一篇博客,讲的更详细:
http://fuxuemingzhu.cn/2017/08/10/echarts-hexo/

后续补充中……

走心推广

因为本博客部署在Digital Ocean 服务器上,每个月都要有5美元的成本,对于学生党来说也是不小开支。所以既然你能看到这篇博客的话,希望你能帮助我一下,鼓励我写出更好的文章。

Digital Ocean 服务器购买

如果你也需要购买服务器,强烈推荐Digital Ocean,推荐原因如下:

  • 基础套餐很便宜,每月最低5美元
  • 服务器资源很给力,基础套餐配置是512MB内存,20GB的SSD硬盘,带宽不限制
  • 可以搭建ShadowSocks,实现科学上网(特别实用!!)
  • 支持ipv6,轻松解决校园网流量不够用的问题

我使用的是san francisco节点,搭建好ss之后,看油管1080p视频轻松无压力!!

你如果使用我的这个网址注册Digital Ocean,你可以得到10美元的代金券,我也能赚到一点,就是这个链接:https://m.do.co/c/86d4e56f6c7a

另外,如果你也是学生,有校园网邮箱,即可申请GitHub的Student Pack,免费送你50美刀的Digital Ocean代金券!地址是:https://education.github.com/pack/offers

菜菜手绘坊

菜菜手绘坊是我的姐姐在经营的一个手绘店铺,每一笔都是我的姐姐亲自画出来的。手绘坊里有很多风格可以选择,特别适合做头像,屏保,聊天背景等等!!甚至可以画好图之后做成手机壳,情侣T恤都是可以的!价格真的很便宜,可以加微信具体聊价格,绝对会让你惊喜!

更详细的宣传可以看我的这篇文章:http://fuxuemingzhu.cn/drawing/

店主微信和QQ:290885604

下面是黑白风格的,看看有没有心动:

黑白风格:
黑白风

参考资料:
Hexo-NexT搭建个人博客(二)

模拟登录北邮人论坛可能是每个学着写爬虫的北邮人必备技能了。在网上和论坛上也有相关资料,但质量参差不齐,有些甚至不能实现模拟登录。因此,这里我使用requests库和urllib2库两种方法,分别实现了北邮人论坛的模拟登录。

教程所需环境:

  • Python 2.x
  • requests 库

requests库模拟登录北邮人论坛

教程的刚开始我们先优先使用最为方便的库:requests。

requests库的宣言是:

HTTP for Humans (给人用的 HTTP 库)

通过使用可以看出,requests库确实是当前Python处理网络请求最好用的库!强力推荐大家放弃urllib2库!

安装方式很简单:

pip install requests

安装完成之后,可以用下面的代码测试是否安装成功:

import requests

如果Python环境没有报错就说明安装成功,可以使用这个最方便的网络请求库了~

下面我们开始分析模拟登录的逻辑。

首先,打开论坛首页https://bbs.byr.cn/#!default,并且退出登录。

然后,按F12键审查元素,并且切换到Network选项卡,并且勾选上preserve log选项。现在的状态如下:

重点来了,输入用户名密码后点击登录,你应该能看到下面的信息:

可以看出向https://bbs.byr.cn/user/ajax_login.json发送了一个post请求,发送了正确的用户名密码之后,就能登录成功。

另外,经过测试得到,如果请求的头部不正确,论坛会拒绝登录,正确的方式是添加头部。必须添加下面的头部。

'x-requested-with': 'XMLHttpRequest'

下面是完整的登录代码,请输入自己的用户名和密码。

import requests

r_url = 'https://bbs.byr.cn/user/ajax_login.json'
my_header = {'x-requested-with': 'XMLHttpRequest'}
byr_data = {'id': 'fuxuemingzhu', 'passwd': '********'}
session = requests.Session()
req = session.post(r_url, data=byr_data, headers=my_header)
print(req.text)

运行结果,这说明运行代码执行成功:

{
    "id": "fuxuemingzhu",
    "user_name": "意涵团·负雪明烛 http://fuxuemingzhu.cn",
    "face_url": "https://static.byr.cn/uploadFace/F/fuxuemingzhu.120.jpg",
    "face_width": 120,
    "face_height": 120,
    "gender": "m",
    "astro": "未知",
    "life": 365,
    "qq": "",
    "msn": "",
    "home_page": "http://fuxuemingzhu.cn/",
    "level": "版主",
    "is_online": true,
    ......
    "ajax_code": "0005",
    "ajax_msg": "操作成功"
}

这里有必要讲一下为什么使用了Session()的方式,这样可以使用时requests库能自动保存cookies到Session中,也就是说只要程序没关闭,就可以访问其他数据!

比如,我们查一下超神的信息:

quer = session.get("https://bbs.byr.cn/user/query/zc199102.json", headers=my_header)
print(quer.text)

返回结果如下:

{
    "id": "zc199102",
    "user_name": "超byr||呐,你们的小企鹅~",
    "face_url": "https://static.byr.cn/uploadFace/Z/zc199102.502.gif",
    "face_width": 100,
    "face_height": 75,
    "gender": "m",
    "astro": "未知",
    "life": 365,
    "qq": "",
    "msn": "",
    "home_page": "",
    "level": "用户",
    "is_online": true,
    ......
    "ajax_code": "0005",
    "ajax_msg": "操作成功"
}

根据这个原理你可以查看任意用户的公开信息,或者把整个论坛爬下来。

urllib2库模拟登录北邮人论坛

urllib2库是Python自带的库,并且已经在Python3中取消。这就是我不再推荐的原因,另外下面冗长的代码也可以看出,这个库不好用。

urllib2库不支持自动管理cookies,需要导入cookielib包进行管理。因为登录的逻辑上文已经分析过,所以,这里直接贴上代码。

import cookielib
import urllib2
import urllib

auth_url = 'https://bbs.byr.cn/user/ajax_login.json'
data = {'id': '*********', 'passwd': '*********', }
post_data = urllib.urlencode(data)
my_header = {'x-requested-with': 'XMLHttpRequest'}

cookieJar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
urllib2.install_opener(opener)
req = urllib2.Request(auth_url, post_data, headers=my_header)
b = opener.open(req)
print(str(b.read()).encode('utf-8'))
user_url = "https://bbs.byr.cn/user/query/zc199102.json"
req_user = urllib2.Request(user_url, headers=my_header)
a = opener.open(req_user)
print(str(a.read()).encode('utf-8'))

执行后应该有和requests库同样的结果。

结语

刚开始写这个模拟登录的时候还是个Python的小白,当时只会使用urllib2库,因为reqeusts库需要安装,所以就特别害怕去尝试新东西。

但是,尝试之后简直发现了新世界。requests库同时支持python2和3,这点就比urllib2方便。从上文的代码对比也能更加看出requests库的强大。

如果你没用过requests库,那么我强烈推荐你尝试,你会彻底抛弃urllib2的。

人生苦短,我用Python。如果你也在用Python,那么肯定像我一样希望节省更多的时间,因此,有更好用的东西就去尝试吧!不要害怕折腾。

走心推广

因为本博客部署在Digital Ocean 服务器上,每个月都要有5美元的成本,对于学生党来说也是不小开支。所以既然你能看到这篇博客的话,希望你能帮助我一下,鼓励我写出更好的文章。

Digital Ocean 服务器购买

如果你也需要购买服务器,强烈推荐Digital Ocean,推荐原因如下:

  • 基础套餐很便宜,每月最低5美元
  • 服务器资源很给力,基础套餐配置是512MB内存,20GB的SSD硬盘,带宽不限制
  • 可以搭建ShadowSocks,实现科学上网(特别实用!!)
  • 支持ipv6,轻松解决校园网流量不够用的问题

我使用的是san francisco节点,搭建好ss之后,看油管1080p视频轻松无压力!!

你如果使用我的这个网址注册Digital Ocean,你可以得到10美元的代金券,我也能赚到一点,就是这个链接:https://m.do.co/c/86d4e56f6c7a

另外,如果你也是学生,有校园网邮箱,即可申请GitHub的Student Pack,免费送你50美刀的Digital Ocean代金券!地址是:https://education.github.com/pack/offers

菜菜手绘坊

菜菜手绘坊是我的姐姐在经营的一个手绘店铺,每一笔都是我的姐姐亲自画出来的。手绘坊里有很多风格可以选择,特别适合做头像,屏保,聊天背景等等!!甚至可以画好图之后做成手机壳,情侣T恤都是可以的!价格真的很便宜,可以加微信具体聊价格,绝对会让你惊喜!

更详细的宣传可以看我的这篇文章:http://fuxuemingzhu.cn/drawing/

店主微信和QQ:290885604

下面是唯美风格的,看看有没有心动:

唯美风格:
唯美

为什么要开这篇文章?就是因为我这两天已经被Hexo折腾得够呛!

诚然,Hexo一键部署博客给写作带来了很大的便利,但是不可否认的是,Hexo的错误让人摸不到头脑,只有反复尝试才能得出正确结果。

因此,奉劝大家,不要瞎升级Hexo!不要瞎改动Hexo!不要瞎折腾Hexo!

这里记录下我踩过的各种坑,留给大家排坑,也方便自己以后查找问题。

Hexo升级3.0版本

如果你现在用的是2.x版本,我强烈建议不要升级!因为大家用到的Hexo功能肯定都是简单的那几个命令,Hexo的2.x版本完全够用,升级很容易出问题!别问我为什么知道!

如果你一定要升级的话,记住Hexo的3.x版本的安装命令是:

npm install -g hexo-cli

昨天因为折腾,安装速度还很快,今天不知道为什么了,速度非常之慢,用了Hexo淘宝镜像也很慢。需要镜像的可以参考这个文章:修改npm包管理器的registry为淘宝镜像(npm.taobao.org)

Hexo同时部署到多个Git仓库

网上的教程很多,但是试了之后感觉都不行,会报错!亲测下面的方法可以用!

在_config.yml中的deploy中这么写:

deploy:
    - type: git 
      repo: cfg@165.227.00.000:/var/repo/hexo_static
      branch: master
    - type: git 
      repo: git@github.com:fuxuemingzhu/fuxuemingzhu.github.io.git
      branch: master

把仓库的地址修改成你的Git地址。

如果你使用的是Github的仓库,查看仓库地址的方式是在这里,记得切换成ssh模式查看。

Hexo文章中用相对路径方式插入图片

这个坑大家可能都感觉遇到过,其实这不是个坑。

因为大家写博客就是公开的,完全可以把图片放到一个公开的图片网站再引用即可。但是我感觉不太好。

这种方式莫名其妙地把图片放到了一个你可能完全不会去访问的网站,很难管理,如果想删除图片也比较麻烦,甚至无法删除。

我之前的做法是放到自己的Github仓库中,然后引用自己仓库的图片的网址。这样不错,只不过图片要先上传一次,然后才能在博客里使用。

正确做法是在Hexo中采用相对路径方式插入图片。步骤如下。

  1. 首先在hexo目录下安装插件:
npm install https://github.com/CodeFalling/hexo-asset-image --save
  1. 然后,把打开_config.yml开关。这样新建每个文章都建一个同名的图片的文件夹,用于管理。
_config.yml
post_asset_folder: true
  1. 把图片放到文章的同名文件夹之下,在博客中用以下的hexo命令插入图片,注意不用填写路径,直接写图片名字!
{% asset_img github.png github仓库地址 %}

上面这个代码的结果就是上一节中github仓库的那张图片的代码。

这个是图片放的位置:

{% asset_img posts.png  图片放的位置 %}

在public文件夹下会生成对应资源图片:

{% asset_img public.png  生成的图片 %}

使用以上的代码就能看到效果了~

更多信息可以看官方文档:资源文件夹

有得有失,这样做的时候就不能再markdown源文件中查看到图片了。

page页面图片不能采用相对路径

博客的文章页面是可以采用相对路径寻找图片的,正如上文所述。可是,今天发现如果是一个page页面(可以通过侧边栏直接访问的),相对路径就不起作用了。。不是找不到图片的问题,而是如果是page页面采用asset_img的方式根本就不会识别出这里要插入图片。。

因此,解决的办法是直接采用markdown方式插入图片就好了,虽然有点不那么优雅……

后续补充

……

参考资料:

ECharts简介

最近在实习的时候用到了ECharts。最刚开始我以为这个只能在前端通过js调用,对于我用python画图没帮助。可是自从再一次刷Github的时候发现了一个神器,激动地我差点睡不着了!这个就是pyecharts!这简直是神器啊,可以通过python调用ECharts的js接口然后就返回了画好的图而且这个是可以交互的,比如下图,你就可以感受一下~~(利润,支出,收入三个标签也是可以点击的哦

常规做法

你可能也看到了,上面的图表在我的hexo搭建的博客中可以完美展示。这个是怎么做到的呢?

首先,如果你用的是Yelee或者类似的主题,你应该可以很简单地直接参照这个博客去做。

我也是在看上面的博客的时候遇到了问题,如果我用Yelee主题的话是很简单的可以实现上面的效果的,但是我现在更喜欢的是现在的Next主题。这两个主题的结构不一样。

安装上文说的在所用主题目录下layout\_partial文件夹中不存在,更不存在head.ejs

Next目录:

Yelee目录:

Next主题做法

由此看出,如果你和我一样使用Next主题的话上面的教程不能用。需要像我这样做:

下载js

首先下载ECharts的js文件:ECharts

把js文件放到next主题的\source\js\src目录下:

js文件的引用

然后在next\layout\文件夹下,找到_layout.swig文件,并用文本查看器打开,在下面代码:

<main id="main" class="main">
  <div class="main-inner">
    <div class="content-wrap">
      <div id="content" class="content">
        {% block content %}{% endblock %}
      
{% include '_third-party/duoshuo-hot-articles.swig' %} {% include '_partials/comments.swig' %}
{% if theme.sidebar.display !== 'remove' %} {% block sidebar %}{% endblock %} {% endif %} </div> </main>

的前面添加:

<!-- echarts -->
<script type="text/javascript" src="/js/src/echarts.common.min.js"></script>

保存退出。

安装hexo-tag-echarts插件

在博客站点目录下执行npm install hexo-tag-echarts --save

使用范例

可以简单的找个例子试下,把下面代码放到一个博客的markdown文件中即可。注意不要使用代码块!!

{% echarts 400 '81%' %}
{
    tooltip : {
        trigger: 'axis',
        axisPointer : {            // 坐标轴指示器,坐标轴触发有效
            type : 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
        }
    },
    legend: {
        data:['利润', '支出', '收入']
    },
    grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
    },
    xAxis : [
        {
            type : 'value'
        }
    ],
    yAxis : [
        {
            type : 'category',
            axisTick : {show: false},
            data : ['周一','周二','周三','周四','周五','周六','周日']
        }
    ],
    series : [
        {
            name:'利润',
            type:'bar',
            itemStyle : {
                normal: {
                    label: {show: true, position: 'inside'}
                }
            },
            data:[200, 170, 240, 244, 200, 220, 210]
        },
        {
            name:'收入',
            type:'bar',
            stack: '总量',
            itemStyle: {
                normal: {
                    label : {show: true}
                }
            },
            data:[320, 302, 341, 374, 390, 450, 420]
        },
        {
            name:'支出',
            type:'bar',
            stack: '总量',
            itemStyle: {normal: {
                label : {show: true, position: 'left'}
            }},
            data:[-120, -132, -101, -134, -190, -230, -210]
        }
    ]
};
{% endecharts %}

之后你就应该能看到我的上面的ECharts图了。

最后

上面的这个做法纯属我自己尝试得出来的,可能有更好的做法,可以在下面留言~~

为了找到这个方法,我把自己的博客环境都搞坏了……现在在重装hexo……觉得我解决了你的问题的话就给我打个赏吧!

参考文献:
· echarts官网:http://echarts.baidu.com/
· Airing博客: http://blog.ursb.me/2016/04/06/Hexo%E9%A9%B1%E5%8A%A8%E5%8D%9A%E5%AE%A2%E4%B8%AD%E4%BD%BF%E7%94%A8Echarts%E5%8A%A8%E6%80%81%E5%9B%BE%E8%A1%A8/
· NeverYu博客: https://neveryu.github.io/2016/09/30/hexo-next-two/

不知不觉已经离开一年多了,现在的我已经是准研究生一枚了,于是重新拾起了这个博客~~

原来我去年就已经申请到了GitHub的student pack,这样的话我就能用了Digital Ocean的服务器50元的代金券,还有免费一年的.me的域名了。哈哈哈哈~~

租了一台Digtial Ocean的服务器,成功的搭建了ss,现在通过ipv6访问外网的速度达到了12M/s,看国外视频都是1080p还不卡的,果然还是自己做来的比较爽呀,中间还学到了很多故障处理的方式。

之前租过两台服务器,分别是阿里云和腾讯云,但我都没用过……就在那里闲着感觉很浪费啊,这个DO服务器已经开始用来走ss啦,还是挺有用的,另外这个博客也是搭建在上面的。

顺便做个小广告吧,欢迎大家使用我的推荐码注册DO啊,这样你可以得到10美元的代金券,我也能赚到一点,嘻嘻,就是这个链接:https://m.do.co/c/86d4e56f6c7a

凡是使用上面这个链接注册DO服务器的,我教你怎么搭建SS科学上网~~

喔喔,如果不想自己购买服务器还想畅快的科学上网的,直接给我发邮件,我给你开个账号也就行啦,费用好说好说~~

欢迎大家来我的博客里赏光哈,如果想联系我,可以从导航栏里看到“关于我”就行啦~

参加了一个面试,之后发现我的技术基本功完全就是渣!而且以前学过的都忘完了!回答的效果自己都感觉看不下去了。

不过还是感谢两位面试官能够花这么多时间和我交流。让我学习了很多。

别忘了,Show me the code!

下面就技术和知识两个方面进行分析。

Read more »

这是一份阶段性总结。虽然并没有明显的分界线,但我感觉过了这么久,总该写点什么吧,给以后的自己看。碰巧也遇到不少烦心事,闲着也是闲着,趁这种干不了其他事的时候自己反思一下自己罢。

这是篇给自己看的保留文章,完全是想到哪写到哪,特别没意思,游客止步吧。

Read more »