这篇文章旨在为刚接触 wechat_spider 的人提供一个快速了解这个项目基本原理的途径。
首先我们随便进入一个微信公众号详情页。
# !/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
import sys | |
import json | |
from urlparse import urlparse, parse_qs | |
import requests | |
/* display:flex; */ | |
.flex { display: -webkit-box; display: -moz-box; display: -ms-flexbox; display: -webkit-flex; display: flex; } | |
/* for Android 4.3- */ | |
.flex > * {display: block;} | |
/* row reverse */ | |
.flex.flex--reverse { -webkit-box-orient: horizontal; -moz-box-orient: horizontal; -webkit-box-direction: reverse; -moz-box-direction: reverse; -webkit-flex-direction: row-reverse; -ms-flex-direction: row-reverse; flex-direction: row-reverse; } | |
/* column */ | |
.flex--clo { -webkit-box-orient: vertical; -moz-box-orient: vertical; -webkit-box-direction: normal; -moz-box-direction: normal; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; } | |
/* column reverse*/ | |
.flex--col.flex--reverse { -webkit-box-orient: vertical; -moz-box-orient: vertical; -webkit-box-direction: reverse; -moz-box-direction: reverse; -webkit-flex-direction: column-reverse; -ms-flex-direction: column-reverse; flex-direction: column-reverse; } |
mathclub是最近做的一个个人项目,帮助考SAT的同学通过在线做题、回顾、问答提高成绩。用户功能有:计次/计时做题、成绩单、错题分布、错题回顾、提问、汇总以及注册登录。管理后台主要是题库管理、学员管理、成绩单管理、问题回复。怎么看都像学校里的课设,的确项目本身并不出奇,开发上选用的一些方案或许更有意思。
整个项目一个人从产品需求、原型设计、前后端开发到部署历时2周左右。可以从截图上感受一下:
技术选型上服务端是Node.js,应用框架选了老牌的Express(4.x变化挺大不少中间件都废了),数据服务用的是MongoLab(MongoDB的云服务平台),图片上传用的是又拍云,程序部署在Nodejitsu上。模板引擎没选主流的Jade或ejs,而是用Express React Views它实现了在服务端渲染React组件。前端框架是用React,这次有意想追求前后端全部组件化的组织。之前是用Webpack实现CommonJS模块打包,这次用Browserify配置更简单,它有丰富的transform很赞,其中的reactify转换React的JSX很完美。CSS用Sass+autoprefixer让人省心。将这一切串起来的自动构建工具是Gulp。我其实崇尚用最精简的工具组合开发,上述组合在我看来比较精简了。(帖纸留念)
![image](http://satexam.b0.upaiyu
... or Why Pipelining Is Not That Easy
Golang Concurrency Patterns for brave and smart.
By @kachayev
<?php | |
define('APP_PATH', dirname(__FILE__)); | |
define('DATA_FILE', APP_PATH. '/sms.htdata'); | |
if ($_SERVER['REQUEST_METHOD'] == 'POST') { //tasker提交 | |
if (!isset($_POST['c'])) { | |
die('Invalid Request!'); | |
} else { | |
$data = ''; | |
if (file_exists(DATA_FILE)) { //读入已有数据 |
#!/usr/bin/env python | |
#-*- coding:utf-8 -*- | |
import datetime | |
from flask import Flask | |
from mixins import db | |
from models import Post, User |
package main | |
import ( | |
"compress/gzip" | |
"io" | |
"net/http" | |
"strings" | |
) | |
type gzipResponseWriter struct { |