单页批量规则数据抓取解决方案

加入青云后接的第一个活儿是抓取某公司的经销商的全部信息。该公司通过一个动态页面来展示经销商信息,使用后台的POST提交请求数据,并使用JS在页面下方加载请求的经销商信息,而且网址不会发生变化。

分析

接到活儿时候还在上课,电脑不在身边,就用手机先看了看页面。每一条数据都不出意外地非常有规律。观察辣个公司的页面源代码,看得头晕脑胀(只有一个萌萌的员工写的一句别删我让我傻乐了一会儿),无收获。没有办法使用BeautifulSoup,也不会用py来模拟用户的操作,我只好另辟蹊径了。

Read More

译-Ubuntu下五个最好的BT客户端

本文是我加入LCTT后翻译的第一篇文章,感谢LCTT项目组伙伴们的支持,感谢组长wxy的仔细校对,也欢迎大家加入LCTT项目,共同翻译优质的Linux文章~

Best Torrent clients for Ubuntu Linux

在寻找 Ubuntu 中最好的 BT 客户端吗?事实上,Linux 桌面平台中有许多 BT 客户端,但是它们中的哪些才是最好的 Ubuntu 客户端呢?

Read More

Bestcoder Round 16 C Revenge of Nim II

题目

源地址:

http://acm.hdu.edu.cn/showproblem.php?pid=5088

理解

给你N堆石子,你可以除去其中的某些堆(也可以不除),问你能否使得后手必胜。 这是一道看起来像博弈的数学题,因为我们都知道如果想使得后手必胜,就只需要使得每一堆石子数的异或和为0即可。也就是说,我们只需要找出其中的某一些,他们的异或和为0,然后剩下的全都除去。如果能找到,输出Yes;找不到,说明不存在,输出No

Read More

UVa 1594 Ducci Sequence

题目

源地址:

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4469

理解

题意分析

题意十分简单,给定一个序列的变换,每一次都把当前位置上的数变为当前位置与下一个位置差的绝对值。然后问你这个序列最后是变成一个循环还是全都变为0。

暴力做法

一开始看题目的时候感觉很难下手,不知道应该怎样去判断这个序列能否构成一个循环。但是注意到另外一个条件——题目中给出了最大的循环次数,1000次。再加上n的值比较小,也就是说,我完全可以暴力模拟一千次,如果还是没有全为0的串的话,这个串一定是一个循环的串。基于这种想法,我可以得到一个非常简单的暴力算法。

Floyd判圈算法

概述

这道题已经AC了,但是问题并没有结束。回到我最一开始的想法——我该如何判断一个序列是否构成了循环呢?这样,我们就引出了一个算法:Floyd判圈算法。是的,这个Floyd就是那个最短路算法的发明者。 这个算法可以在有限状态机,迭代函数或者链表上判断是否存在环,并求出该环的起点和长度的算法。

Read More

Markdown + Travis CI 构建自己的开源电子书

作为一只ACMer,一个非常现实的需求就是我们需要准备自己的模板。在我的想象当中,我们的模板应当有如下的这些特性:

  • 可以生成PDF格式,保证在多个平台下的一致性
  • 编辑起来比较简单,我的队友无需学习LaTeX即可开始编辑
  • 共同协作比较方便,我和队友无需将代码互相复制粘贴
  • 代码必须要支持高亮!(很重要!)
  • 代码编辑容易,因为我们的模板白手起家,经常会需要修改。

这些需求,单个实现都比较容易,但是如果想要找到一个全部符合并且简单易行的方案,就有些困难了。在@larrycai推出的中文开源电子书项目的启发下,我想到了使用 Markdown + Github + Travis CI 的一套工具链来构建了我的开源电子书的方法。 下面我来简单地介绍一下。

Read More

史上最详细的虚拟机安装Mac OS X图文教程

最近在电脑上配置了VMware,想要搭建一个Mac OS X的虚拟机以供体验。不过网上的资料过于老旧,版本更新不及时,导致我在配置的过程中遇到了无数的坑,折腾了一个晚上才配置成功。事后我总结了相关的经验和实践完成了这份教程,希望能够对大家有所益处~

Update: 因为要用到Vagrant,所以又捣鼓了一番在VirtualBox上安装Mac OS X,同样踩了不少坑,相关的总结如下。

Read More

动态规划——最长上升子序列问题

介绍

最长上升子序列问题,也就是Longest increasing subsequence,缩写为LIS。是指在一个序列中求长度最长的一个上升子序列的问题,是动态规划中一个相当经典问题。在这里我们可以看到,这个上升实质上就是一个对<进行定义的过程,所以我们求解的其实是一类问题,也就是在给定序列中求解长度最长的符合某一性质的子序列的问题。在下面总结的过程中,我还是以递增为例进行阐述。

Read More

Listary——让文件在指尖流动

今天想为大家介绍的是我使用了两年的神器——Listary,作为一款Windows文件浏览增强工具,它为Windows自带的资源管理器添加了很多实用的功能,包括智能命令、最近文档以及收藏功能。与此同时,它还能与很多第三方应用集成,包括鼎鼎大名的Total Commander,还有WinRAR,7zip,FileZilla等等。 值得一提的是,Listary由国人Channing开发,默认添加了简体中文支持,是不可多得的精品,典型的墙内开花墙外香的典范。可能是由于国人还并不是非常重视效率这个方面,感觉使用Listary的主要人群还是集中在国外,从Listary的论坛上也能看得出来。所以我完成了这样一篇文章,希望我也能为这样的精品应用在国内的推广做出些贡献。 恩?说我是水军?唔,谁说我不是呢? 官网上的广告语Keep files at your fingertips被我翻译成了让文件在指尖流动,不知道Channing会怎么想~

Read More

基于Socket.io的虚拟计算机

基于Socket.io有很多特别强大的应用,socket.io官方提供的一个虚拟计算机Demo就非常赞。通过将使用Qemu虚拟取出来的PC界面转发至Socket.io的端口,然后对Canvas不断地进行绘制,形成了近似与远程操控的体验。我们Together项目用到了这个库,但由于这个库发布于很久之前,再加上相关文档过少,导致部署起来极为困难。所以我完成了这篇文章,希望能让后来人少走一些弯路。 下文基于Ubuntu 14.04 x64,其他系统请自行转换相应命令,谢谢~

Read More