├── src ├── static │ └── images │ │ └── qbar_light@2x.png ├── index.jsx ├── index.html ├── sass │ ├── components │ │ ├── _UserPanel.scss │ │ ├── _TopicHot.scss │ │ ├── _CommunityStatus.scss │ │ ├── _Footer.scss │ │ ├── _Header.scss │ │ └── _Main.scss │ ├── _config.scss │ ├── main.scss │ ├── _page.scss │ ├── _global.scss │ └── _normalize.scss ├── components │ ├── Header.jsx │ ├── UserLink.jsx │ ├── UserPanel.jsx │ ├── CommunityStatus.jsx │ ├── SearchInput.jsx │ ├── TopicsHot.jsx │ ├── MainItem.jsx │ ├── Footer.jsx │ └── Main.jsx ├── utils │ └── getData.js ├── containers │ └── App.jsx └── api │ ├── hot.json │ └── latest.json ├── .codeclimate.yml ├── .gitignore ├── .editorconfig ├── .travis.yml ├── .eslintrc ├── readme.md ├── .babelrc ├── server.js ├── webpack.config.js └── package.json /src/static/images/qbar_light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kisnows/react-v2ex/HEAD/src/static/images/qbar_light@2x.png -------------------------------------------------------------------------------- /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | engines: 2 | eslint: 3 | enabled: true 4 | scss-lint: 5 | enabled: true 6 | ratings: 7 | paths: 8 | - src/** 9 | exclude_paths: 10 | - spec/**/* 11 | - vendor/**/* 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Example user template template 3 | ### Example user template 4 | 5 | # IntelliJ project files 6 | .idea 7 | *.iml 8 | out 9 | gen 10 | 11 | node_modules 12 | -------------------------------------------------------------------------------- /src/index.jsx: -------------------------------------------------------------------------------- 1 | import 'babel-core/polyfill' 2 | import React from 'react' 3 | import { render } from 'react-dom' 4 | import App from './containers/App' 5 | 6 | 7 | render( 8 | , 9 | document.getElementById('root') 10 | ) 11 | -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | react-v2ex 5 | 6 | 7 |
8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | charset = utf-8 6 | trim_trailing_whitespace = true 7 | insert_final_newline = true 8 | indent_style = space 9 | indent_size = 2 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "4" 4 | - "5" 5 | script: 6 | - npm run lint 7 | - npm run build 8 | addons: 9 | code_climate: 10 | repo_token: b98ddc113b0f491040d9629e86d165a00d77d027a59175d317036aa5b65229ac 11 | -------------------------------------------------------------------------------- /src/sass/components/_UserPanel.scss: -------------------------------------------------------------------------------- 1 | .user-panel { 2 | background: $color-box-bg; 3 | border-radius: 4px; 4 | color: #000; 5 | strong { 6 | display: block; 7 | margin-bottom: 5px; 8 | } 9 | .inner { 10 | text-align: center; 11 | } 12 | .button { 13 | margin-bottom: 8px; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/sass/components/_TopicHot.scss: -------------------------------------------------------------------------------- 1 | .topic-hot { 2 | .item { 3 | a { 4 | display: inline-block; 5 | vertical-align: middle; 6 | &:first-child { 7 | width: 24px; 8 | margin-right: 10px; 9 | } 10 | &:last-child { 11 | width: 216px; 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "rackt", 3 | "rules": { 4 | "no-var": 0, 5 | 'no-console': 0, 6 | 'space-before-blocks': 0, 7 | 'array-bracket-spacing': 0, 8 | "react/jsx-uses-react": 1, 9 | "react/jsx-no-undef": 2, 10 | "react/wrap-multilines": 2, 11 | }, 12 | "plugins": [ 13 | "react" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | #react-v2ex 2 | [![Build Status](https://travis-ci.org/kisnows/react-v2ex.svg?branch=master)](https://travis-ci.org/kisnows/react-v2ex) 3 | [![Code Climate](https://codeclimate.com/github/kisnows/react-v2ex/badges/gpa.svg)](https://codeclimate.com/github/kisnows/react-v2ex) 4 | 5 | 用于熟悉 `react` 而搭建的 [v2ex](https://v2ex.com) 首页。 6 | #license 7 | MIT 8 | -------------------------------------------------------------------------------- /src/sass/_config.scss: -------------------------------------------------------------------------------- 1 | //font 2 | $font:"Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;; 3 | $font-size-small: 12px; 4 | $font-size-normal: 14px; 5 | $font-size-big: 16px; 6 | 7 | //color 8 | $color-text: #778087; 9 | $color-text-dark: #555; 10 | $color-bg: #e2e2e2; 11 | 12 | $color-box-bg: #fff; 13 | -------------------------------------------------------------------------------- /src/sass/main.scss: -------------------------------------------------------------------------------- 1 | @import "normalize"; 2 | 3 | //setting 4 | @import "config"; 5 | @import "global"; 6 | 7 | //components 8 | @import "components/Header"; 9 | @import "components/UserPanel"; 10 | @import "components/TopicHot"; 11 | @import "components/CommunityStatus"; 12 | @import "components/Main"; 13 | @import "components/Footer"; 14 | 15 | //page 16 | @import "page"; 17 | -------------------------------------------------------------------------------- /src/sass/_page.scss: -------------------------------------------------------------------------------- 1 | .v2ex { 2 | .header { 3 | margin-bottom: 20px; 4 | } 5 | .main-body { 6 | width: 970px; 7 | margin: 0 auto 20px; 8 | .main { 9 | width: 680px; 10 | float: left; 11 | } 12 | .right-bar { 13 | width: 270px; 14 | float: right; 15 | .box { 16 | margin-bottom: 20px; 17 | } 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/sass/components/_CommunityStatus.scss: -------------------------------------------------------------------------------- 1 | .community-status { 2 | .cell { 3 | div { 4 | padding: 5px 0; 5 | } 6 | &-title { 7 | display: inline-block; 8 | width: 50px; 9 | text-align: right; 10 | color: #999; 11 | margin-right: 10px; 12 | } 13 | &-content { 14 | color: #000; 15 | font-weight: bold; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "stage": 2, 3 | "env": { 4 | "development": { 5 | "plugins": [ 6 | "react-transform" 7 | ], 8 | "extra": { 9 | "react-transform": { 10 | "transforms": [{ 11 | "transform": "react-transform-hmr", 12 | "imports": ["react"], 13 | "locals": ["module"] 14 | }] 15 | } 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/components/Header.jsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import SearchInput from './SearchInput' 3 | import UserLink from './UserLink' 4 | 5 | class Header extends Component { 6 | render() { 7 | return ( 8 |
9 |
10 | V2EX 11 | 12 | 13 |
14 |
15 | ) 16 | } 17 | } 18 | 19 | 20 | export default Header 21 | -------------------------------------------------------------------------------- /src/utils/getData.js: -------------------------------------------------------------------------------- 1 | /** 2 | * get.js 3 | * @author kisnows 4 | * Created 2015-12-24 5 | */ 6 | function get(url) { 7 | return new Promise(function (resolve,reject) { 8 | var xhr = new XMLHttpRequest 9 | xhr.open('GET', url, true) 10 | xhr.responseType = 'json' 11 | xhr.setRequestHeader('Content-type', 'application/json') 12 | xhr.send(null) 13 | xhr.onreadystatechange = function () { 14 | if(this.readyState !== 4){ 15 | return 16 | } 17 | if(this.status === 200){ 18 | resolve(this.response) 19 | }else{ 20 | reject(this.status) 21 | } 22 | } 23 | }) 24 | } 25 | 26 | export { get } 27 | -------------------------------------------------------------------------------- /src/components/UserLink.jsx: -------------------------------------------------------------------------------- 1 | import React, { PropTypes, Component } from 'react' 2 | 3 | class UserLink extends Component { 4 | constructor(props) { 5 | super(props) 6 | } 7 | 8 | render() { 9 | if (+this.props.isLogin) { 10 | return ( 11 |
12 | 你不可能登录 13 |
14 | ) 15 | } else { 16 | return ( 17 |
18 | 首页 19 | 注册 20 | 登录 21 |
22 | ) 23 | } 24 | } 25 | } 26 | 27 | UserLink.propTypes = { 28 | isLogin: PropTypes.string 29 | } 30 | 31 | export default UserLink 32 | -------------------------------------------------------------------------------- /src/containers/App.jsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | 3 | import Header from '../components/Header' 4 | import Main from '../components/Main' 5 | import UserPanel from '../components/UserPanel' 6 | import TopicHot from '../components/TopicsHot' 7 | import CommunityStatus from '../components/CommunityStatus' 8 | import Footer from '../components/Footer' 9 | import '../sass/main.scss' 10 | 11 | class App extends Component { 12 | render() { 13 | return ( 14 |
15 |
16 |
17 |
18 | 23 |
24 |
25 |
26 | ) 27 | } 28 | } 29 | 30 | export default App 31 | 32 | -------------------------------------------------------------------------------- /src/components/UserPanel.jsx: -------------------------------------------------------------------------------- 1 | import React, { PropTypes, Component } from 'react' 2 | 3 | class UserPanel extends Component { 4 | 5 | render() { 6 | if (+this.props.isLogin) { 7 | return ( 8 |
9 | 你不可能登录 10 |
11 | ) 12 | } else { 13 | return ( 14 |
15 |
16 | V2EX = way to explore 17 | V2EX 是一个关于分享和探索的地方 18 |
19 |
20 | 现在注册 21 |
已注册用户请  登录
22 |
23 |
24 | ) 25 | } 26 | } 27 | } 28 | 29 | UserPanel.propTypes = { 30 | isLogin: PropTypes.string 31 | } 32 | 33 | export default UserPanel 34 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | var webpack = require('webpack') 2 | var webpackDevMiddleware = require('webpack-dev-middleware') 3 | var webpackHotMiddleware = require('webpack-hot-middleware') 4 | var config = require('./webpack.config') 5 | var app = new (require('express'))() 6 | var port = 4000 7 | var compiler = webpack(config) 8 | 9 | app.use(webpackDevMiddleware(compiler, { noInfo: true, publicPath: config.output.publicPath })) 10 | app.use(webpackHotMiddleware(compiler)) 11 | 12 | app.get('/', function (req, res) { 13 | res.sendFile(__dirname + '/src/index.html') 14 | }) 15 | 16 | app.get('/api/:name.json',function (req,res) { 17 | var name = req.params.name 18 | res.sendFile(__dirname + '/src/api/'+name+'.json') 19 | }) 20 | app.listen(port, function (error) { 21 | if (error) { 22 | console.error(error) 23 | } else { 24 | console.info('==> 🌎 Listening on port %s. Open up http://localhost:%s/ in your browser.', port, port) 25 | } 26 | }) 27 | -------------------------------------------------------------------------------- /src/components/CommunityStatus.jsx: -------------------------------------------------------------------------------- 1 | /** 2 | * CommunityStatus.js 3 | * @author kisnows 4 | * Created 2015-12-24 5 | */ 6 | import React, { Component } from 'react' 7 | 8 | export default class CommunityStatus extends Component { 9 | render() { 10 | return ( 11 |
12 |
13 | 社区运行状况 14 |
15 |
16 |
注册会员152308
17 |
主题152308
18 |
回复152308
19 |
20 |
21 |
财富排行榜
22 |
消费排行榜
23 |
24 |
25 | ) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/sass/components/_Footer.scss: -------------------------------------------------------------------------------- 1 | .footer { 2 | border-top: 1px solid rgba(0, 0, 0, 0.22); 3 | background-color: #fff; 4 | text-align: center; 5 | color: #999; 6 | .content { 7 | width: 970px; 8 | margin: 0 auto; 9 | } 10 | .fr { 11 | float: right; 12 | margin-top: 7px; 13 | } 14 | .top-link { 15 | margin-top: 7px; 16 | a.dark { 17 | color: gray; 18 | text-decoration: none; 19 | &:hover { 20 | color: #385f8a; 21 | } 22 | &:after { 23 | content: ' · '; 24 | color: #e2e2e2; 25 | } 26 | } 27 | .top-recode { 28 | margin-left: 10px; 29 | &:after { 30 | content: ' · '; 31 | color: #e2e2e2; 32 | } 33 | } 34 | .select-language { 35 | vertical-align: sub; 36 | } 37 | } 38 | p.describe { 39 | &-top { 40 | margin-top: 20px; 41 | margin-bottom: 5px; 42 | } 43 | &-bottom { 44 | margin-top: 0; 45 | margin-bottom: 20px; 46 | } 47 | } 48 | .f12 { 49 | display: block; 50 | margin-top: 20px; 51 | margin-bottom: 10px; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var webpack = require('webpack') 3 | 4 | var config = { 5 | devtool: 'cheap-module-eval-source-map', 6 | entry: [ 7 | 'webpack-hot-middleware/client', 8 | './src/index' 9 | ], 10 | output: { 11 | path: path.resolve(__dirname, 'build'), 12 | filename: 'bundle.js', 13 | publicPath: '/static/' 14 | }, 15 | plugins: [ 16 | new webpack.optimize.OccurenceOrderPlugin(), 17 | new webpack.HotModuleReplacementPlugin(), 18 | new webpack.NoErrorsPlugin() 19 | ], 20 | resolve: { 21 | extensions: ['','.js','.jsx'] 22 | }, 23 | module: { 24 | loaders: [{ 25 | test: /\.(js|jsx)$/, 26 | loaders: ['babel'], 27 | exclude: /node_modules/ 28 | }, { 29 | test: /\.json$/, 30 | loaders: ['json'], 31 | exclude: /node_modules/ 32 | }, { 33 | test: /\.scss?$/, 34 | loaders: ['style', 'css?sourceMap', 'sass?sourceMap'] 35 | }, { 36 | test: /\.(png|jpg)$/, 37 | loader: 'url?limit=25000' 38 | }] 39 | } 40 | } 41 | if (process.env.NODE_ENV === 'production') { 42 | config.entry = ['./src/index'] 43 | } 44 | module.exports = config 45 | -------------------------------------------------------------------------------- /src/components/SearchInput.jsx: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | 3 | 4 | class SearchInput extends Component { 5 | constructor(props) { 6 | super(props) 7 | this.state = { 8 | text: this.props.text || '' 9 | } 10 | this.handleChange = this.handleChange.bind(this) 11 | this.handleSubmit = this.handleSubmit.bind(this) 12 | } 13 | 14 | handleChange(e) { 15 | this.setState({ text: e.target.value }) 16 | } 17 | 18 | handleSubmit(e) { 19 | const text = e.target.value.trim() 20 | if (e.which === 13) { 21 | window.open('https://www.google.com/search?q=site:v2ex.com/t%20' + text) 22 | } 23 | } 24 | 25 | render() { 26 | return ( 27 | 28 | 36 | 37 | ) 38 | } 39 | } 40 | 41 | SearchInput.propTypes = { 42 | text: PropTypes.string, 43 | placeholder: PropTypes.string 44 | } 45 | 46 | export default SearchInput 47 | -------------------------------------------------------------------------------- /src/sass/components/_Header.scss: -------------------------------------------------------------------------------- 1 | .header { 2 | height: 45px; 3 | line-height:45px; 4 | background-color: #fff; 5 | min-width: 970px; 6 | box-shadow: 0 0 4px 4px rgba(0, 0, 0, 0.10); 7 | .content { 8 | width: 970px; 9 | height: 45px; 10 | margin: 0 auto; 11 | font-size: $font-size-normal; 12 | font-weight: 500; 13 | color: $color-text; 14 | } 15 | .logo { 16 | width: 94px; 17 | height: 30px; 18 | margin-right: 20px; 19 | padding-top: 7px; 20 | } 21 | .search-input { 22 | width: 276px; 23 | height: 28px; 24 | background: url('../static/images/qbar_light@2x.png') center center no-repeat; 25 | background-size: 276px 28px; 26 | display: inline-block; 27 | position: relative; 28 | .input { 29 | border: none; 30 | width: 222px; 31 | height: 26px; 32 | margin-left: 30px; 33 | background-color: transparent; 34 | font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", STHeiti !important; 35 | font-size: 12px; 36 | line-height: 16px; 37 | outline: none; 38 | float: left; 39 | } 40 | } 41 | .user-link { 42 | display: inline-block; 43 | float: right; 44 | a { 45 | color: $color-text-dark; 46 | margin-left: 15px; 47 | &:hover { 48 | color: #99a; 49 | } 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/components/TopicsHot.jsx: -------------------------------------------------------------------------------- 1 | /** 2 | * TopicsHot.js 3 | * @author kisnows 4 | * Created 2015-12-21 5 | */ 6 | import React, { PropTypes, Component } from 'react' 7 | import Hot from '../api/hot.json' 8 | 9 | class TopicsHot extends Component { 10 | constructor(props) { 11 | super(props) 12 | } 13 | 14 | render() { 15 | return ( 16 |
17 |
18 | 今日热议主题 19 |
20 |
21 | {Hot.map((topic, index) => 22 | 23 | )} 24 |
25 |
26 | ) 27 | } 28 | } 29 | 30 | class TopicsHotItem extends Component { 31 | constructor(props) { 32 | super(props) 33 | } 34 | 35 | render() { 36 | let memberUrl = 'http://v2ex.com/member/' + this.props.member.username 37 | return ( 38 |
39 | 40 | {this.props.member.username}/ 41 | 42 | {this.props.title} 43 |
44 | ) 45 | } 46 | } 47 | 48 | TopicsHot.propType = { 49 | member: PropTypes.object.isRequired, 50 | url: PropTypes.string.isRequired, 51 | title: PropTypes.string.isRequired 52 | } 53 | export default TopicsHot 54 | -------------------------------------------------------------------------------- /src/components/MainItem.jsx: -------------------------------------------------------------------------------- 1 | /** 2 | * @author kisnows 3 | * @email yq12315@gmail.com 4 | * Created 2016/1/18. 5 | */ 6 | import React,{ PropTypes, Component } from 'react' 7 | 8 | export default class MainItem extends Component { 9 | constructor(props) { 10 | super(props) 11 | } 12 | 13 | render() { 14 | let memberUrl = 'http://v2ex.com/member/' + this.props.member.username 15 | let modifyTime = (Math.random() * (1 - 60) + 60).toFixed(0) + '分钟' 16 | return ( 17 |
18 |
19 | 20 | {this.props.member.username}/ 21 | 22 |
23 |
24 |
{this.props.title}
25 | 26 | {this.props.node.title}  •  27 | {this.props.member.username}  •  {modifyTime}前 28 | 29 |
30 |
31 | {this.props.replies} 32 |
33 |
34 | ) 35 | } 36 | } 37 | 38 | MainItem.propTypes = { 39 | url: PropTypes.string, 40 | title: PropTypes.string, 41 | member: PropTypes.object, 42 | replies: PropTypes.number 43 | } 44 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-v2ex", 3 | "version": "0.1.0", 4 | "description": "v2ex demo power by react", 5 | "scripts": { 6 | "lint": "eslint src test ./src/*.jsx", 7 | "dev": "node server.js --devtool eval --progress --colors --hot", 8 | "build": "set NODE_ENV=production&webpack -p --progress --profile -colors" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/kisnows/react-v2ex" 13 | }, 14 | "keywords": [ 15 | "react" 16 | ], 17 | "authors": [ 18 | "Kisnows(抹桥) (https://github.com/kisnows)" 19 | ], 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/kisnows/react-v2ex/issues" 23 | }, 24 | "homepage": "http://kisnows.com/react-v2ex", 25 | "dependencies": { 26 | "classnames": "^2.1.2", 27 | "json-loader": "^0.5.4", 28 | "react": "^0.14.0", 29 | "react-dom": "^0.14.0" 30 | }, 31 | "devDependencies": { 32 | "babel-core": "^5.6.18", 33 | "babel-eslint": "^4.1.6", 34 | "babel-loader": "^5.1.4", 35 | "babel-plugin-react-transform": "^1.1.0", 36 | "css-loader": "^0.23.0", 37 | "eslint": "^1.10.1", 38 | "eslint-config-rackt": "1.0.0", 39 | "eslint-plugin-react": "^3.6.3", 40 | "express": "^4.13.3", 41 | "file-loader": "^0.8.5", 42 | "jsdom": "^5.6.1", 43 | "node-sass": "^3.4.2", 44 | "react-transform-hmr": "^1.0.0", 45 | "sass-loader": "^3.1.2", 46 | "style-loader": "^0.12.3", 47 | "url-loader": "^0.5.7", 48 | "webpack": "^1.9.11", 49 | "webpack-dev-middleware": "^1.2.0", 50 | "webpack-hot-middleware": "^2.2.0" 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/sass/_global.scss: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: $font; 3 | font-size: $font-size-normal; 4 | color: $color-text; 5 | background: $color-bg; 6 | } 7 | 8 | a { 9 | color: $color-text; 10 | text-decoration: none; 11 | &:hover { 12 | color: #4d5256; 13 | text-decoration: underline; 14 | } 15 | &:link, 16 | &:active, 17 | &:visited { 18 | color: $color-text; 19 | } 20 | } 21 | 22 | .clearfix { 23 | &:after { 24 | content: ""; 25 | display: table; 26 | clear: both; 27 | } 28 | *zoom: 1; 29 | } 30 | 31 | .box { 32 | background-color: $color-box-bg; 33 | border-radius: 3px; 34 | box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1); 35 | border-bottom: 1px solid $color-bg; 36 | } 37 | 38 | .cell { 39 | padding: 10px; 40 | font-size: 12px; 41 | line-height: 120%; 42 | text-align: left; 43 | border-bottom: 1px solid $color-bg; 44 | } 45 | 46 | .inner { 47 | padding: 10px; 48 | font-size: 12px; 49 | line-height: 150%; 50 | text-align: left; 51 | } 52 | 53 | .fade { 54 | color: #ccc; 55 | } 56 | 57 | a.button { 58 | display: inline-block; 59 | height: 14px; 60 | line-height: 14px; 61 | padding: 4px 15px 4px 15px; 62 | font-size: 12px; 63 | font-weight: bold; 64 | color: #333; 65 | background: #fff url(http://v2ex.com/static/img/bg_blended_light.png); 66 | text-shadow: 0px 1px 0px #fff; 67 | text-decoration: none; 68 | box-shadow: 0px 1px 0px rgba(66, 66, 77, 0.1); 69 | border: 1px solid rgba(80, 80, 90, 0.2); 70 | border-bottom-color: rgba(80, 80, 90, 0.35); 71 | border-radius: 3px; 72 | outline: none; 73 | } 74 | 75 | .chevron { 76 | font-family: "Lucida Grande"; 77 | font-weight: 500; 78 | margin-right: 4px; 79 | } 80 | -------------------------------------------------------------------------------- /src/components/Footer.jsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Bottom.js 3 | * @author kisnows 4 | * Created 2015-12-24 5 | */ 6 | import React, { Component } from 'react' 7 | 8 | export default class Footer extends Component { 9 | render() { 10 | return ( 11 |
12 |
13 |
14 |
15 | 16 | DigitalOcean 17 | 18 | 19 |
20 |
21 | 22 | 关于 23 | FAQ 24 | API 25 | 我们的愿景 26 | IP 查询 27 | 工作空间 28 | 广告投放 29 | 鸣谢 30 | 上网首页 31 | 952 人在线 32 | 最高记录 1630 33 | 34 | 35 | 36 |
37 |

创意工作者们的社区

38 |

This DEMO is create by Kisnows

39 | VERSION: 3.9.2 · 23ms · UTC 12:10 · PVG 20:10 · LAX 04:10 · JFK 07:10
♥ Do have faith in what you're doing.
40 | 沪ICP备15015613号-1 41 |
42 |
43 |
44 | ) 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/sass/components/_Main.scss: -------------------------------------------------------------------------------- 1 | .main { 2 | .tab { 3 | display: inline-block; 4 | font-size: 13px; 5 | line-height: 13px; 6 | padding: 5px 8px 5px 8px; 7 | margin-right: 5px; 8 | border-radius: 3px; 9 | color: $color-text-dark; 10 | cursor: pointer; 11 | &:hover { 12 | background-color: #f5f5f5; 13 | color: #000; 14 | text-decoration: none; 15 | } 16 | } 17 | .tab_current { 18 | display: inline-block; 19 | font-size: 13px; 20 | line-height: 13px; 21 | padding: 5px 8px 5px 8px; 22 | margin-right: 5px; 23 | border-radius: 3px; 24 | background-color: #334; 25 | color: #fff; 26 | cursor: pointer; 27 | } 28 | .main-item { 29 | .main-user-avatar, 30 | .main-content, 31 | .main-comment { 32 | display: inline-block; 33 | vertical-align: middle; 34 | font-size: 0; 35 | } 36 | .main-user-avatar { 37 | width: 48px; 38 | margin-right: 10px; 39 | } 40 | .main-content { 41 | width: 680-48-70-10-20px; 42 | font-size: $font-size-small; 43 | margin-bottom: 6px; 44 | .item-title { 45 | font-size: $font-size-big; 46 | line-height: 1.3; 47 | text-shadow: 0 1px 0 #fff; 48 | word-wrap: break-word; 49 | display: block; 50 | margin-bottom: 5px; 51 | } 52 | .node { 53 | background-color: #f5f5f5; 54 | font-size: 10px; 55 | line-height: 10px; 56 | display: inline-block; 57 | padding: 4px 4px 4px 4px; 58 | -moz-border-radius: 2px; 59 | -webkit-border-radius: 2px; 60 | border-radius: 2px; 61 | text-decoration: none; 62 | color: #999; 63 | &:hover { 64 | text-decoration: none; 65 | background-color: #e2e2e2; 66 | color: #777; 67 | } 68 | } 69 | } 70 | .main-comment { 71 | width: 70px; 72 | text-align: right; 73 | a { 74 | font-size: $font-size-small; 75 | line-height: 12px; 76 | font-weight: bold; 77 | color: white; 78 | background-color: #aab0c6; 79 | display: inline-block; 80 | padding: 2px 10px 2px 10px; 81 | border-radius: 12px; 82 | text-decoration: none; 83 | margin-right: 5px; 84 | &:hover { 85 | background-color: #969cb1; 86 | } 87 | &:visited { 88 | background-color: #e5e5e5; 89 | } 90 | } 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /src/components/Main.jsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Main.js.js 3 | * @author kisnows 4 | * Created 2015-12-21 5 | */ 6 | import React, { Component } from 'react' 7 | import MainItem from './MainItem' 8 | import { get } from '../utils/getData' 9 | 10 | export default class Main extends Component { 11 | constructor() { 12 | super() 13 | this.state = { 14 | hot: [], 15 | latest: [], 16 | count: 0 17 | } 18 | } 19 | 20 | componentDidMount() { 21 | const _this = this 22 | get('./api/hot.json').then(function (data) { 23 | // console.log(data) 24 | _this.setState( { hot: data }) 25 | }).catch(function (err) { 26 | console.error( err ) 27 | }) 28 | get('./api/latest.json').then(function (data) { 29 | _this.setState({ latest: data }) 30 | }).catch(function (err) { 31 | console.error(err) 32 | }) 33 | } 34 | 35 | handleClick(e) { 36 | let count = this.state.count 37 | if (e.target.tagName.toLowerCase() === 'span') { 38 | if (this.className === 'tab_current') { 39 | return false 40 | } 41 | let tabs = document.querySelector('#Tabs').querySelectorAll('span') 42 | Array.prototype.slice.call(tabs).forEach(function (el) { 43 | el.className = 'tab' 44 | }) 45 | e.target.className = 'tab_current' 46 | this.setState({ count: ++count }) 47 | } 48 | } 49 | 50 | render() { 51 | let style = [{ 52 | display: 'block' 53 | },{ 54 | display: 'none' 55 | }] 56 | 57 | if(this.state.count % 2 === 0){ 58 | style.reverse() 59 | } 60 | 61 | return ( 62 |
63 |
64 | 技术 65 | 创意 66 | 好玩 67 | Apple 68 | 酷工作 69 | 交易 70 | 城市 71 | 问与答 72 | 最热 73 | 全部 74 | R2 75 |
76 |
77 | {this.state.hot.map((topic, index) => 78 | 79 | )} 80 |
81 |
82 | {this.state.latest.map((topic, index) => 83 | 84 | )} 85 |
86 |
87 | ) 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /src/sass/_normalize.scss: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.2 | MIT License | git.io/normalize */ 2 | 3 | // 4 | // 1. Set default font family to sans-serif. 5 | // 2. Prevent iOS text size adjust after orientation change, without disabling 6 | // user zoom. 7 | // 8 | 9 | html { 10 | font-family: sans-serif; // 1 11 | -ms-text-size-adjust: 100%; // 2 12 | -webkit-text-size-adjust: 100%; // 2 13 | } 14 | 15 | // 16 | // Remove default margin. 17 | // 18 | 19 | body { 20 | margin: 0; 21 | } 22 | 23 | // HTML5 display definitions 24 | // ========================================================================== 25 | 26 | // 27 | // Correct `block` display not defined for any HTML5 element in IE 8/9. 28 | // Correct `block` display not defined for `details` or `summary` in IE 10/11 29 | // and Firefox. 30 | // Correct `block` display not defined for `main` in IE 11. 31 | // 32 | 33 | //noinspection ALL 34 | article, 35 | aside, 36 | details, 37 | figcaption, 38 | figure, 39 | footer, 40 | header, 41 | hgroup, 42 | main, 43 | menu, 44 | nav, 45 | section, 46 | summary { 47 | display: block; 48 | } 49 | 50 | // 51 | // 1. Correct `inline-block` display not defined in IE 8/9. 52 | // 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. 53 | // 54 | 55 | audio, 56 | canvas, 57 | progress, 58 | video { 59 | display: inline-block; // 1 60 | vertical-align: baseline; // 2 61 | } 62 | 63 | // 64 | // Prevent modern browsers from displaying `audio` without controls. 65 | // Remove excess height in iOS 5 devices. 66 | // 67 | 68 | audio:not([controls]) { 69 | display: none; 70 | height: 0; 71 | } 72 | 73 | // 74 | // Address `[hidden]` styling not present in IE 8/9/10. 75 | // Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. 76 | // 77 | 78 | [hidden], 79 | template { 80 | display: none; 81 | } 82 | 83 | // Links 84 | // ========================================================================== 85 | 86 | // 87 | // Remove the gray background color from active links in IE 10. 88 | // 89 | 90 | a { 91 | background-color: transparent; 92 | } 93 | 94 | // 95 | // Improve readability when focused and also mouse hovered in all browsers. 96 | // 97 | 98 | a:active, 99 | a:hover { 100 | outline: 0; 101 | } 102 | 103 | // Text-level semantics 104 | // ========================================================================== 105 | 106 | // 107 | // Address styling not present in IE 8/9/10/11, Safari, and Chrome. 108 | // 109 | 110 | abbr[title] { 111 | border-bottom: 1px dotted; 112 | } 113 | 114 | // 115 | // Address style set to `bolder` in Firefox 4+, Safari, and Chrome. 116 | // 117 | 118 | b, 119 | strong { 120 | font-weight: bold; 121 | } 122 | 123 | // 124 | // Address styling not present in Safari and Chrome. 125 | // 126 | 127 | dfn { 128 | font-style: italic; 129 | } 130 | 131 | // 132 | // Address variable `h1` font-size and margin within `section` and `article` 133 | // contexts in Firefox 4+, Safari, and Chrome. 134 | // 135 | 136 | h1 { 137 | font-size: 2em; 138 | margin: 0.67em 0; 139 | } 140 | 141 | // 142 | // Address styling not present in IE 8/9. 143 | // 144 | 145 | mark { 146 | background: #ff0; 147 | color: #000; 148 | } 149 | 150 | // 151 | // Address inconsistent and variable font size in all browsers. 152 | // 153 | 154 | small { 155 | font-size: 80%; 156 | } 157 | 158 | // 159 | // Prevent `sub` and `sup` affecting `line-height` in all browsers. 160 | // 161 | 162 | sub, 163 | sup { 164 | font-size: 75%; 165 | line-height: 0; 166 | position: relative; 167 | vertical-align: baseline; 168 | } 169 | 170 | sup { 171 | top: -0.5em; 172 | } 173 | 174 | sub { 175 | bottom: -0.25em; 176 | } 177 | 178 | // Embedded content 179 | // ========================================================================== 180 | 181 | // 182 | // Remove border when inside `a` element in IE 8/9/10. 183 | // 184 | 185 | img { 186 | border: 0; 187 | } 188 | 189 | // 190 | // Correct overflow not hidden in IE 9/10/11. 191 | // 192 | 193 | svg:not(:root) { 194 | overflow: hidden; 195 | } 196 | 197 | // Grouping content 198 | // ========================================================================== 199 | 200 | // 201 | // Address margin not present in IE 8/9 and Safari. 202 | // 203 | 204 | figure { 205 | margin: 1em 40px; 206 | } 207 | 208 | // 209 | // Address differences between Firefox and other browsers. 210 | // 211 | 212 | hr { 213 | -moz-box-sizing: content-box; 214 | box-sizing: content-box; 215 | height: 0; 216 | } 217 | 218 | // 219 | // Contain overflow in all browsers. 220 | // 221 | 222 | pre { 223 | overflow: auto; 224 | } 225 | 226 | // 227 | // Address odd `em`-unit font size rendering in all browsers. 228 | // 229 | 230 | code, 231 | kbd, 232 | pre, 233 | samp { 234 | font-family: monospace, monospace; 235 | font-size: 1em; 236 | } 237 | 238 | // Forms 239 | // ========================================================================== 240 | 241 | // 242 | // Known limitation: by default, Chrome and Safari on OS X allow very limited 243 | // styling of `select`, unless a `border` property is set. 244 | // 245 | 246 | // 247 | // 1. Correct color not being inherited. 248 | // Known issue: affects color of disabled elements. 249 | // 2. Correct font properties not being inherited. 250 | // 3. Address margins set differently in Firefox 4+, Safari, and Chrome. 251 | // 252 | 253 | button, 254 | input, 255 | optgroup, 256 | select, 257 | textarea { 258 | color: inherit; // 1 259 | font: inherit; // 2 260 | margin: 0; // 3 261 | } 262 | 263 | // 264 | // Address `overflow` set to `hidden` in IE 8/9/10/11. 265 | // 266 | 267 | button { 268 | overflow: visible; 269 | } 270 | 271 | // 272 | // Address inconsistent `text-transform` inheritance for `button` and `select`. 273 | // All other form control elements do not inherit `text-transform` values. 274 | // Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. 275 | // Correct `select` style inheritance in Firefox. 276 | // 277 | 278 | button, 279 | select { 280 | text-transform: none; 281 | } 282 | 283 | // 284 | // 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 285 | // and `video` controls. 286 | // 2. Correct inability to style clickable `input` types in iOS. 287 | // 3. Improve usability and consistency of cursor style between image-type 288 | // `input` and others. 289 | // 290 | 291 | button, 292 | html input[type="button"], // 1 293 | input[type="reset"], 294 | input[type="submit"] { 295 | -webkit-appearance: button; // 2 296 | cursor: pointer; // 3 297 | } 298 | 299 | // 300 | // Re-set default cursor for disabled elements. 301 | // 302 | 303 | button[disabled], 304 | html input[disabled] { 305 | cursor: default; 306 | } 307 | 308 | // 309 | // Remove inner padding and border in Firefox 4+. 310 | // 311 | 312 | button::-moz-focus-inner, 313 | input::-moz-focus-inner { 314 | border: 0; 315 | padding: 0; 316 | } 317 | 318 | // 319 | // Address Firefox 4+ setting `line-height` on `input` using `!important` in 320 | // the UA stylesheet. 321 | // 322 | 323 | input { 324 | line-height: normal; 325 | } 326 | 327 | // 328 | // It's recommended that you don't attempt to style these elements. 329 | // Firefox's implementation doesn't respect box-sizing, padding, or width. 330 | // 331 | // 1. Address box sizing set to `content-box` in IE 8/9/10. 332 | // 2. Remove excess padding in IE 8/9/10. 333 | // 334 | 335 | input[type="checkbox"], 336 | input[type="radio"] { 337 | box-sizing: border-box; // 1 338 | padding: 0; // 2 339 | } 340 | 341 | // 342 | // Fix the cursor style for Chrome's increment/decrement buttons. For certain 343 | // `font-size` values of the `input`, it causes the cursor style of the 344 | // decrement button to change from `default` to `text`. 345 | // 346 | 347 | input[type="number"]::-webkit-inner-spin-button, 348 | input[type="number"]::-webkit-outer-spin-button { 349 | height: auto; 350 | } 351 | 352 | // 353 | // 1. Address `appearance` set to `searchfield` in Safari and Chrome. 354 | // 2. Address `box-sizing` set to `border-box` in Safari and Chrome 355 | // (include `-moz` to future-proof). 356 | // 357 | 358 | input[type="search"] { 359 | -webkit-appearance: textfield; // 1 360 | -moz-box-sizing: content-box; 361 | -webkit-box-sizing: content-box; // 2 362 | box-sizing: content-box; 363 | } 364 | 365 | // 366 | // Remove inner padding and search cancel button in Safari and Chrome on OS X. 367 | // Safari (but not Chrome) clips the cancel button when the search input has 368 | // padding (and `textfield` appearance). 369 | // 370 | 371 | input[type="search"]::-webkit-search-cancel-button, 372 | input[type="search"]::-webkit-search-decoration { 373 | -webkit-appearance: none; 374 | } 375 | 376 | // 377 | // Define consistent border, margin, and padding. 378 | // 379 | 380 | fieldset { 381 | border: 1px solid #c0c0c0; 382 | margin: 0 2px; 383 | padding: 0.35em 0.625em 0.75em; 384 | } 385 | 386 | // 387 | // 1. Correct `color` not being inherited in IE 8/9/10/11. 388 | // 2. Remove padding so people aren't caught out if they zero out fieldsets. 389 | // 390 | 391 | legend { 392 | border: 0; // 1 393 | padding: 0; // 2 394 | } 395 | 396 | // 397 | // Remove default vertical scrollbar in IE 8/9/10/11. 398 | // 399 | 400 | textarea { 401 | overflow: auto; 402 | } 403 | 404 | // 405 | // Don't inherit the `font-weight` (applied by a rule above). 406 | // NOTE: the default cannot safely be changed in Chrome and Safari on OS X. 407 | // 408 | 409 | optgroup { 410 | font-weight: bold; 411 | } 412 | 413 | // Tables 414 | // ========================================================================== 415 | 416 | // 417 | // Remove most spacing between table cells. 418 | // 419 | 420 | table { 421 | border-collapse: collapse; 422 | border-spacing: 0; 423 | } 424 | 425 | td, 426 | th { 427 | padding: 0; 428 | } 429 | -------------------------------------------------------------------------------- /src/api/hot.json: -------------------------------------------------------------------------------- 1 | [ 2 | 3 | { 4 | "id": 244942, 5 | "title": "谈谈关于 qq 会员", 6 | "url": "http://www.v2ex.com/t/244942", 7 | "content": "这几天会员又要续费了,几年前还只有一种会员,近又出了个超级会员,小马哥真会玩啊,不过一直觉得开了会员纯属满足自己装 x 心理,并无卵用,\u000D\u000A\u000D\u000A\u000D\u000A各位开会员是为了什么?别告诉我是为了同步聊天记录", 8 | "content_rendered": "这几天会员又要续费了,几年前还只有一种会员,近又出了个超级会员,小马哥真会玩啊,不过一直觉得开了会员纯属满足自己装 x 心理,并无卵用,\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E各位开会员是为了什么?别告诉我是为了同步聊天记录", 9 | "replies": 121, 10 | "member": { 11 | "id": 118502, 12 | "username": "le0rn0", 13 | "tagline": "", 14 | "avatar_mini": "//cdn.v2ex.co/gravatar/bdf760cc3d482d8759ac2a9c269eeaf4?s=24&d=retro", 15 | "avatar_normal": "//cdn.v2ex.co/gravatar/bdf760cc3d482d8759ac2a9c269eeaf4?s=48&d=retro", 16 | "avatar_large": "//cdn.v2ex.co/gravatar/bdf760cc3d482d8759ac2a9c269eeaf4?s=73&d=retro" 17 | }, 18 | "node": { 19 | "id": 12, 20 | "name": "qna", 21 | "title": "问与答", 22 | "title_alternative": "Questions and Answers", 23 | "url": "http://www.v2ex.com/go/qna", 24 | "topics": 61722, 25 | "avatar_mini": "//cdn.v2ex.co/navatar/c20a/d4d7/12_mini.png?m=1448889637", 26 | "avatar_normal": "//cdn.v2ex.co/navatar/c20a/d4d7/12_normal.png?m=1448889637", 27 | "avatar_large": "//cdn.v2ex.co/navatar/c20a/d4d7/12_large.png?m=1448889637" 28 | }, 29 | "created": 1450628415, 30 | "last_modified": 1450664940, 31 | "last_touched": 1450706911 32 | }, 33 | 34 | { 35 | "id": 244926, 36 | "title": "准备逃离北京了", 37 | "url": "http://www.v2ex.com/t/244926", 38 | "content": "现在北京雾霾越来越严重了,治理也不是一年两年的事情。前几天冒出年后放弃北京,回家发展的想法。不知道有没有 v2exer 有跟我类似的想法,可以一起交流下??\u000D\u000A\u000D\u000A我 07 年参加工作,在北京工作整整 8 年多,一直是从事开发相关的工作。老家没有计算机公司,如果回老家可能面临很多选择,一时之间拿不定主意。\u000D\u000A\u000D\u000A1. 转行\u000D\u000A把这些年工作的积蓄,投资到其他项目 或者 看看能不能考个公务员。\u000D\u000A\u000D\u000A2. 外包\u000D\u000A目前计算机外包给的钱不多,而且对于个人而言没有积累。\u000D\u000A\u000D\u000A3. 继续互联网创业\u000D\u000A之前跟过一个创业团队,知道创业的辛苦,另外创业成功的几率很小,特别是草根团队。\u000D\u000A\u000D\u000A4. soho 项目\u000D\u000A能找到 soho 的项目应该不多,而且我之前没做过,不知道有没有什么难度", 39 | "content_rendered": "\u003Cp\u003E现在北京雾霾越来越严重了,治理也不是一年两年的事情。前几天冒出年后放弃北京,回家发展的想法。不知道有没有 v2exer 有跟我类似的想法,可以一起交流下??\u003C/p\u003E\u000A\u000A\u003Cp\u003E我 07 年参加工作,在北京工作整整 8 年多,一直是从事开发相关的工作。老家没有计算机公司,如果回老家可能面临很多选择,一时之间拿不定主意。\u003C/p\u003E\u000A\u000A\u003Col\u003E\u000A\u003Cli\u003E\u003Cp\u003E转行\u003Cbr\u003E\u000A把这些年工作的积蓄,投资到其他项目 或者 看看能不能考个公务员。\u003C/p\u003E\u003C/li\u003E\u000A\u003Cli\u003E\u003Cp\u003E外包\u003Cbr\u003E\u000A目前计算机外包给的钱不多,而且对于个人而言没有积累。\u003C/p\u003E\u003C/li\u003E\u000A\u003Cli\u003E\u003Cp\u003E继续互联网创业\u003Cbr\u003E\u000A之前跟过一个创业团队,知道创业的辛苦,另外创业成功的几率很小,特别是草根团队。\u003C/p\u003E\u003C/li\u003E\u000A\u003Cli\u003E\u003Cp\u003Esoho 项目\u003Cbr\u003E\u000A能找到 soho 的项目应该不多,而且我之前没做过,不知道有没有什么难度\u003C/p\u003E\u003C/li\u003E\u000A\u003C/ol\u003E\u000A", 40 | "replies": 108, 41 | "member": { 42 | "id": 8392, 43 | "username": "eric_zyh", 44 | "tagline": "不干程序员就去做快递员", 45 | "avatar_mini": "//cdn.v2ex.co/avatar/1d01/bd2e/8392_mini.png?m=1441448481", 46 | "avatar_normal": "//cdn.v2ex.co/avatar/1d01/bd2e/8392_normal.png?m=1441448481", 47 | "avatar_large": "//cdn.v2ex.co/avatar/1d01/bd2e/8392_large.png?m=1441448481" 48 | }, 49 | "node": { 50 | "id": 19, 51 | "name": "beijing", 52 | "title": "北京", 53 | "title_alternative": "Beijing", 54 | "url": "http://www.v2ex.com/go/beijing", 55 | "topics": 994, 56 | "avatar_mini": "/static/img/node_mini.png", 57 | "avatar_normal": "/static/img/node_normal.png", 58 | "avatar_large": "/static/img/node_large.png" 59 | }, 60 | "created": 1450624857, 61 | "last_modified": 1450640292, 62 | "last_touched": 1450703308 63 | }, 64 | 65 | { 66 | "id": 244956, 67 | "title": "读了那么多年书方才觉得最重要的是英语,其次是数学", 68 | "url": "http://www.v2ex.com/t/244956", 69 | "content": "", 70 | "content_rendered": "", 71 | "replies": 97, 72 | "member": { 73 | "id": 90666, 74 | "username": "UtopiaCHN", 75 | "tagline": "", 76 | "avatar_mini": "//cdn.v2ex.co/avatar/22fd/a4de/90666_mini.png?m=1445272478", 77 | "avatar_normal": "//cdn.v2ex.co/avatar/22fd/a4de/90666_normal.png?m=1445272478", 78 | "avatar_large": "//cdn.v2ex.co/avatar/22fd/a4de/90666_large.png?m=1445272478" 79 | }, 80 | "node": { 81 | "id": 13, 82 | "name": "idev", 83 | "title": "iDev", 84 | "title_alternative": "iDev", 85 | "url": "http://www.v2ex.com/go/idev", 86 | "topics": 2607, 87 | "avatar_mini": "//cdn.v2ex.co/navatar/c51c/e410/13_mini.png?m=1450333358", 88 | "avatar_normal": "//cdn.v2ex.co/navatar/c51c/e410/13_normal.png?m=1450333358", 89 | "avatar_large": "//cdn.v2ex.co/navatar/c51c/e410/13_large.png?m=1450333358" 90 | }, 91 | "created": 1450639349, 92 | "last_modified": 1450639466, 93 | "last_touched": 1450706942 94 | }, 95 | 96 | { 97 | "id": 245040, 98 | "title": "骗子已经开始劫持银行的短信了么", 99 | "url": "http://www.v2ex.com/t/245040", 100 | "content": "本人有张建行的储蓄卡,上周收到一条短信,一看是个非主流域名 www.jo95533.us (只能用手机打开),知道是钓鱼的。这么直接劫持建行 95533 的短信怎么做到的。这种看上去来自“银行官方”的短信对用户非常危险啊。\u000D\u000A\u000D\u000A如图,上面的短信都是真实的,看最后一条。\u000D\u000A![Alt text]( http://ww2.sinaimg.cn/large/006fVPCvjw1ez76wj0atsj30u01hcwqc.jpg)\u000D\u000A\u000D\u000A钓鱼网站:\u000D\u000A![Alt text]( http://ww2.sinaimg.cn/large/006fVPCvjw1ez76uai6vnj30u01hcdy2.jpg)", 101 | "content_rendered": "\u003Cp\u003E本人有张建行的储蓄卡,上周收到一条短信,一看是个非主流域名 \u003Ca target\u003D\u0022_blank\u0022 rel\u003D\u0022nofollow\u0022 href\u003D\u0022http://www.jo95533.us\u0022\u003Ewww.jo95533.us\u003C/a\u003E (只能用手机打开),知道是钓鱼的。这么直接劫持建行 95533 的短信怎么做到的。这种看上去来自“银行官方”的短信对用户非常危险啊。\u003C/p\u003E\u000A\u000A\u003Cp\u003E如图,上面的短信都是真实的,看最后一条。\u003Cbr\u003E\u000A\u003Cimg src\u003D\u0022http://ww2.sinaimg.cn/large/006fVPCvjw1ez76wj0atsj30u01hcwqc.jpg\u0022 alt\u003D\u0022Alt text\u0022\u003E\u003C/p\u003E\u000A\u000A\u003Cp\u003E钓鱼网站:\u003Cbr\u003E\u000A\u003Cimg src\u003D\u0022http://ww2.sinaimg.cn/large/006fVPCvjw1ez76uai6vnj30u01hcdy2.jpg\u0022 alt\u003D\u0022Alt text\u0022\u003E\u003C/p\u003E\u000A", 102 | "replies": 65, 103 | "member": { 104 | "id": 35700, 105 | "username": "cozof", 106 | "tagline": "", 107 | "avatar_mini": "//cdn.v2ex.co/avatar/086a/6236/35700_mini.png?m=1363011616", 108 | "avatar_normal": "//cdn.v2ex.co/avatar/086a/6236/35700_normal.png?m=1363011616", 109 | "avatar_large": "//cdn.v2ex.co/avatar/086a/6236/35700_large.png?m=1363011616" 110 | }, 111 | "node": { 112 | "id": 557, 113 | "name": "life", 114 | "title": "生活", 115 | "title_alternative": "Life", 116 | "url": "http://www.v2ex.com/go/life", 117 | "topics": 229, 118 | "avatar_mini": "/static/img/node_mini.png", 119 | "avatar_normal": "/static/img/node_normal.png", 120 | "avatar_large": "/static/img/node_large.png" 121 | }, 122 | "created": 1450673917, 123 | "last_modified": 1450674269, 124 | "last_touched": 1450703669 125 | }, 126 | 127 | { 128 | "id": 245053, 129 | "title": "这是我对中国互联网最不理解的地方", 130 | "url": "http://www.v2ex.com/t/245053", 131 | "content": "作为一个程序员,每个人都希望自己得到尊重。从薪资待遇上,我比较满意。整个大环境,技术岗位的工资毫无疑问是最高的。但是中国根本没有技术驱动的公司,纯粹的产品、运营驱动,他们的数量是开发的两倍还多,可是这些人大多毫无经验,程序员在产品构思上没有话语权,产品都快上线了还要连夜改不靠谱的需求。产品、运营人员也很不爽,明明自己主导产品,工资却很低。", 132 | "content_rendered": "\u003Cp\u003E作为一个程序员,每个人都希望自己得到尊重。从薪资待遇上,我比较满意。整个大环境,技术岗位的工资毫无疑问是最高的。但是中国根本没有技术驱动的公司,纯粹的产品、运营驱动,他们的数量是开发的两倍还多,可是这些人大多毫无经验,程序员在产品构思上没有话语权,产品都快上线了还要连夜改不靠谱的需求。产品、运营人员也很不爽,明明自己主导产品,工资却很低。\u003C/p\u003E\u000A", 133 | "replies": 63, 134 | "member": { 135 | "id": 29780, 136 | "username": "eightqueen", 137 | "tagline": "", 138 | "avatar_mini": "//cdn.v2ex.co/avatar/70f0/e6d5/29780_mini.png?m=1430929741", 139 | "avatar_normal": "//cdn.v2ex.co/avatar/70f0/e6d5/29780_normal.png?m=1430929741", 140 | "avatar_large": "//cdn.v2ex.co/avatar/70f0/e6d5/29780_large.png?m=1430929741" 141 | }, 142 | "node": { 143 | "id": 56, 144 | "name": "internet", 145 | "title": "互联网", 146 | "title_alternative": "Internet", 147 | "url": "http://www.v2ex.com/go/internet", 148 | "topics": 745, 149 | "avatar_mini": "//cdn.v2ex.co/navatar/9f61/408e/56_mini.png?m=1448949997", 150 | "avatar_normal": "//cdn.v2ex.co/navatar/9f61/408e/56_normal.png?m=1448949997", 151 | "avatar_large": "//cdn.v2ex.co/navatar/9f61/408e/56_large.png?m=1448949997" 152 | }, 153 | "created": 1450675124, 154 | "last_modified": 1450705382, 155 | "last_touched": 1450705984 156 | }, 157 | 158 | { 159 | "id": 244908, 160 | "title": "台灯到底有没有辐射?辐射多大?如何计算呢?", 161 | "url": "http://www.v2ex.com/t/244908", 162 | "content": "![]( http://ww2.sinaimg.cn/large/a15b4afegw1ez6haueeaij21kw23u7wh.jpg)\u000D\u000A\u000D\u000A这是我的灯泡的规格,请问辐射大吗?", 163 | "content_rendered": "\u003Cp\u003E\u003Cimg src\u003D\u0022http://ww2.sinaimg.cn/large/a15b4afegw1ez6haueeaij21kw23u7wh.jpg\u0022 alt\u003D\u0022\u0022\u003E\u003C/p\u003E\u000A\u000A\u003Cp\u003E这是我的灯泡的规格,请问辐射大吗?\u003C/p\u003E\u000A", 164 | "replies": 61, 165 | "member": { 166 | "id": 120274, 167 | "username": "ooTwToo", 168 | "tagline": "", 169 | "avatar_mini": "//cdn.v2ex.co/avatar/3cd6/3f45/120274_mini.png?m=1442589875", 170 | "avatar_normal": "//cdn.v2ex.co/avatar/3cd6/3f45/120274_normal.png?m=1442589875", 171 | "avatar_large": "//cdn.v2ex.co/avatar/3cd6/3f45/120274_large.png?m=1442589875" 172 | }, 173 | "node": { 174 | "id": 12, 175 | "name": "qna", 176 | "title": "问与答", 177 | "title_alternative": "Questions and Answers", 178 | "url": "http://www.v2ex.com/go/qna", 179 | "topics": 61722, 180 | "avatar_mini": "//cdn.v2ex.co/navatar/c20a/d4d7/12_mini.png?m=1448889637", 181 | "avatar_normal": "//cdn.v2ex.co/navatar/c20a/d4d7/12_normal.png?m=1448889637", 182 | "avatar_large": "//cdn.v2ex.co/navatar/c20a/d4d7/12_large.png?m=1448889637" 183 | }, 184 | "created": 1450620772, 185 | "last_modified": 1450620772, 186 | "last_touched": 1450702606 187 | }, 188 | 189 | { 190 | "id": 245002, 191 | "title": "大家都在论英语的重要性, That\u0027s why I wrote this app \u002D QingDict for OSX", 192 | "url": "http://www.v2ex.com/t/245002", 193 | "content": "##首先...\u000D\u000A英语当然重要,词典是学英语最重要的工具\u000D\u000A\u000D\u000A##但是...\u000D\u000A我一直觉得,多数词典软件始终没摆脱“纸质词典电子化”这个思维局限。\u000D\u000A另外就是“划词取词”,我认为这主意“看似精美绝伦,实则愚不可及”,太烦人!\u000D\u000A至于 OSX 内置词典?太不接地气了!能用、但是一点也不好用。\u000D\u000A\u000D\u000A##所以...\u000D\u000A我决定写一个“轻量级、实用主义”的词典小程序, 它满足:\u000D\u000A * 触发方式必须简单自然\u000D\u000A * 必须真正帮助用户记住单词\u000D\u000A * UI 必须精简实用\u000D\u000A正好打算具体学习一下 Swift ,就写着练练手。\u000D\u000A\u000D\u000A##于是...\u000D\u000A * SITE: http://www.yingdev.com/projects/qingdict\u000D\u000A * REPO: https://github.com/yingDev/QingDict", 194 | "content_rendered": "\u003Ch2\u003E首先...\u003C/h2\u003E\u000A\u000A\u003Cp\u003E英语当然重要,词典是学英语最重要的工具\u003C/p\u003E\u000A\u000A\u003Ch2\u003E但是...\u003C/h2\u003E\u000A\u000A\u003Cp\u003E我一直觉得,多数词典软件始终没摆脱“纸质词典电子化”这个思维局限。\u003Cbr\u003E\u000A另外就是“划词取词”,我认为这主意“看似精美绝伦,实则愚不可及”,太烦人!\u003Cbr\u003E\u000A至于 OSX 内置词典?太不接地气了!能用、但是一点也不好用。\u003C/p\u003E\u000A\u000A\u003Ch2\u003E所以...\u003C/h2\u003E\u000A\u000A\u003Cp\u003E我决定写一个“轻量级、实用主义”的词典小程序, 它满足:\u003Cbr\u003E\u000A * 触发方式必须简单自然\u003Cbr\u003E\u000A * 必须真正帮助用户记住单词\u003Cbr\u003E\u000A * UI 必须精简实用\u003Cbr\u003E\u000A正好打算具体学习一下 Swift ,就写着练练手。\u003C/p\u003E\u000A\u000A\u003Ch2\u003E于是...\u003C/h2\u003E\u000A\u000A\u003Cul\u003E\u000A\u003Cli\u003ESITE: \u003Ca target\u003D\u0022_blank\u0022 rel\u003D\u0022nofollow\u0022 href\u003D\u0022http://www.yingdev.com/projects/qingdict\u0022\u003Ehttp://www.yingdev.com/projects/qingdict\u003C/a\u003E\u003C/li\u003E\u000A\u003Cli\u003EREPO: \u003Ca target\u003D\u0022_blank\u0022 rel\u003D\u0022nofollow\u0022 href\u003D\u0022https://github.com/yingDev/QingDict\u0022\u003Ehttps://github.com/yingDev/QingDict\u003C/a\u003E\u003C/li\u003E\u000A\u003C/ul\u003E\u000A", 195 | "replies": 48, 196 | "member": { 197 | "id": 124939, 198 | "username": "nozama", 199 | "tagline": "", 200 | "avatar_mini": "//cdn.v2ex.co/avatar/7df7/74cb/124939_mini.png?m=1437546029", 201 | "avatar_normal": "//cdn.v2ex.co/avatar/7df7/74cb/124939_normal.png?m=1437546029", 202 | "avatar_large": "//cdn.v2ex.co/avatar/7df7/74cb/124939_large.png?m=1437546029" 203 | }, 204 | "node": { 205 | "id": 17, 206 | "name": "create", 207 | "title": "分享创造", 208 | "title_alternative": "Create", 209 | "url": "http://www.v2ex.com/go/create", 210 | "topics": 4789, 211 | "avatar_mini": "//cdn.v2ex.co/navatar/70ef/df2e/17_mini.png?m=1447011026", 212 | "avatar_normal": "//cdn.v2ex.co/navatar/70ef/df2e/17_normal.png?m=1447011026", 213 | "avatar_large": "//cdn.v2ex.co/navatar/70ef/df2e/17_large.png?m=1447011026" 214 | }, 215 | "created": 1450666970, 216 | "last_modified": 1450682391, 217 | "last_touched": 1450705472 218 | }, 219 | 220 | { 221 | "id": 244964, 222 | "title": "现在还有人用 Pascal 编程吗?", 223 | "url": "http://www.v2ex.com/t/244964", 224 | "content": "## Pascal \u0026\u0026 Delphi\u000D\u000A\u0009\u000D\u000A 用过 Delphi 的人都知道,组件化编程是有多么的爽,跟现在的 react 有相似的概念, pascal 编译器也是牛 X 的不行,当年也是跟 C 编译器齐名呀,可是自从安德斯·海尔斯伯格去了微软整了个 C#出来(这哥们真是厉害),似乎 pascal 就成了后妈的孩子,眼看 C#如日中天一天比一天得宠,却只能躲在角落里黯然神伤...\u000D\u000A \u000D\u000A## 开源吗\u000D\u000A\u000D\u000A\u0009我相信要是 pascal 开源,应该会在当今的开发大潮中能掀起一点波澜吧\u000D\u000A\u000D\u000A## 应用场景\u000D\u000A\u000D\u000A\u0009我知道现在还有一部分人在使用着 pascal/delphi ,很想知道具体的应用开发场景是什么样的\u000D\u000A\u000D\u000A## 像初恋\u000D\u000A\u000D\u000A\u0009我学的第一门语言是 Foxbase ,相当于是情窦初开吧,之后进入某公司维护学了 PowerBuilder ,为了吃饭不得不学,真正的热恋是和 Delphi ,一知半解的情况下,胡乱拖几个控件在窗体上,编译\u002D运行,我去,好厉害啊\u000D\u000A \u000D\u000A## 怀念\u000D\u000A\u000D\u000A\u0009很怀念用 pascal 写代码的快感,编译速度和运行速度,以及碉堡了的兼容性(我在 2006 年写的程序到现在还能在 Win10 上运行,当年的承载开发的操作系统是 Win2000 )。\u000D\u000A \u000D\u000A给来点提示吧, Linux 或者 Win 下面,有用 pascal/delphi 开发的吗?你们都在开发什么?用的哪个 IDE (时下开发流行的),收入如何?(我市有一家招 Delphi 开发的貌似是建筑行业)", 225 | "content_rendered": "\u003Ch2\u003EPascal \u0026amp\u003B\u0026amp\u003B Delphi\u003C/h2\u003E\u000A\u003Cdiv class\u003D\u0022highlight\u0022\u003E\u003Cpre\u003E用过 Delphi 的人都知道,组件化编程是有多么的爽,跟现在的 react 有相似的概念, pascal 编译器也是牛 X 的不行,当年也是跟 C 编译器齐名呀,可是自从安德斯·海尔斯伯格去了微软整了个 C#出来(这哥们真是厉害),似乎 pascal 就成了后妈的孩子,眼看 C#如日中天一天比一天得宠,却只能躲在角落里黯然神伤...\u000A\u003C/pre\u003E\u003C/div\u003E\u000A\u000A\u003Ch2\u003E开源吗\u003C/h2\u003E\u000A\u003Cdiv class\u003D\u0022highlight\u0022\u003E\u003Cpre\u003E我相信要是 pascal 开源,应该会在当今的开发大潮中能掀起一点波澜吧\u000A\u003C/pre\u003E\u003C/div\u003E\u000A\u000A\u003Ch2\u003E应用场景\u003C/h2\u003E\u000A\u003Cdiv class\u003D\u0022highlight\u0022\u003E\u003Cpre\u003E我知道现在还有一部分人在使用着 pascal/delphi ,很想知道具体的应用开发场景是什么样的\u000A\u003C/pre\u003E\u003C/div\u003E\u000A\u000A\u003Ch2\u003E像初恋\u003C/h2\u003E\u000A\u003Cdiv class\u003D\u0022highlight\u0022\u003E\u003Cpre\u003E我学的第一门语言是 Foxbase ,相当于是情窦初开吧,之后进入某公司维护学了 PowerBuilder ,为了吃饭不得不学,真正的热恋是和 Delphi ,一知半解的情况下,胡乱拖几个控件在窗体上,编译\u002D运行,我去,好厉害啊\u000A\u003C/pre\u003E\u003C/div\u003E\u000A\u000A\u003Ch2\u003E怀念\u003C/h2\u003E\u000A\u003Cdiv class\u003D\u0022highlight\u0022\u003E\u003Cpre\u003E很怀念用 pascal 写代码的快感,编译速度和运行速度,以及碉堡了的兼容性(我在 2006 年写的程序到现在还能在 Win10 上运行,当年的承载开发的操作系统是 Win2000 )。\u000A\u003C/pre\u003E\u003C/div\u003E\u000A\u000A\u003Cp\u003E给来点提示吧, Linux 或者 Win 下面,有用 pascal/delphi 开发的吗?你们都在开发什么?用的哪个 IDE (时下开发流行的),收入如何?(我市有一家招 Delphi 开发的貌似是建筑行业)\u003C/p\u003E\u000A", 226 | "replies": 46, 227 | "member": { 228 | "id": 64535, 229 | "username": "zanpen2000", 230 | "tagline": "", 231 | "avatar_mini": "//cdn.v2ex.co/gravatar/c28c88fd7b51f2ccb384b8785cc171af?s=24&d=retro", 232 | "avatar_normal": "//cdn.v2ex.co/gravatar/c28c88fd7b51f2ccb384b8785cc171af?s=48&d=retro", 233 | "avatar_large": "//cdn.v2ex.co/gravatar/c28c88fd7b51f2ccb384b8785cc171af?s=73&d=retro" 234 | }, 235 | "node": { 236 | "id": 413, 237 | "name": "programming", 238 | "title": "编程", 239 | "title_alternative": "Programming", 240 | "url": "http://www.v2ex.com/go/programming", 241 | "topics": 305, 242 | "avatar_mini": "//cdn.v2ex.co/navatar/0deb/1c54/413_mini.png?m=1436505210", 243 | "avatar_normal": "//cdn.v2ex.co/navatar/0deb/1c54/413_normal.png?m=1436505210", 244 | "avatar_large": "//cdn.v2ex.co/navatar/0deb/1c54/413_large.png?m=1436505210" 245 | }, 246 | "created": 1450657891, 247 | "last_modified": 1450669799, 248 | "last_touched": 1450699831 249 | }, 250 | 251 | { 252 | "id": 245071, 253 | "title": "小米路由器在我关闭自动升级的情况下,强制升级了我的路由器,崩溃", 254 | "url": "http://www.v2ex.com/t/245071", 255 | "content": "我前几天从稳定版升级小米路由器到开发版,在路由器上做了大量的配置和修改,写了一些脚本。\u000D\u000A\u000D\u000A但是今天使用路由器的时候,路由器竟然升级成了稳定版。\u000D\u000A\u000D\u000A还敢用小米路由器吗?简直是强盗。", 256 | "content_rendered": "我前几天从稳定版升级小米路由器到开发版,在路由器上做了大量的配置和修改,写了一些脚本。\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E但是今天使用路由器的时候,路由器竟然升级成了稳定版。\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E还敢用小米路由器吗?简直是强盗。", 257 | "replies": 43, 258 | "member": { 259 | "id": 43792, 260 | "username": "lijinma", 261 | "tagline": "金马", 262 | "avatar_mini": "//cdn.v2ex.co/gravatar/d7779435ee3a8b8dff22ce22446a7678?s=24&d=retro", 263 | "avatar_normal": "//cdn.v2ex.co/gravatar/d7779435ee3a8b8dff22ce22446a7678?s=48&d=retro", 264 | "avatar_large": "//cdn.v2ex.co/gravatar/d7779435ee3a8b8dff22ce22446a7678?s=73&d=retro" 265 | }, 266 | "node": { 267 | "id": 834, 268 | "name": "xiaomi", 269 | "title": "小米", 270 | "title_alternative": "Xiaomi", 271 | "url": "http://www.v2ex.com/go/xiaomi", 272 | "topics": 68, 273 | "avatar_mini": "//cdn.v2ex.co/navatar/301a/d0e3/834_mini.png?m=1422448760", 274 | "avatar_normal": "//cdn.v2ex.co/navatar/301a/d0e3/834_normal.png?m=1422448760", 275 | "avatar_large": "//cdn.v2ex.co/navatar/301a/d0e3/834_large.png?m=1422448760" 276 | }, 277 | "created": 1450679154, 278 | "last_modified": 1450685011, 279 | "last_touched": 1450704660 280 | } 281 | 282 | ] 283 | -------------------------------------------------------------------------------- /src/api/latest.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 245953, 4 | "title": "pandas 里关于日期的处理", 5 | "url": "http://www.v2ex.com/t/245953", 6 | "content": "最近想玩玩 tushare ,有几个问题:\u000D\u000A1 、比如我从 csv 中读入股票的数据,存入到 DataFrame 里: df\u003Dpd.read_csv(FileDir, index_col\u003D\u0022date\u0022, encoding\u003D\u0027gbk\u0027)。此时 date 作为 index ,那么之后调用排序 df.sort_values 就无法使用 date 进行。只能选用其它 column (比如 open 、 close 等)进行排序。也就是说 df.sort_values(by\u003D[\u0027date\u0027])出错,而 df.sort_values(by\u003D[\u0027close\u0027])正常。\u000D\u000A所以目前我只能修改为 df\u003Dpd.read_csv(FileDir, encoding\u003D\u0027gbk\u0027),这样 df 的数据就类似于:\u000D\u000A date open high close low volume price_change p_change \u005C\u000D\u000A0 2015\u002D12\u002D22 25.45 25.60 25.34 24.83 23069.91 \u002D0.10 \u002D0.39 \u000D\u000A1 2015\u002D12\u002D21 25.65 25.95 25.44 25.01 34771.50 \u002D0.42 \u002D1.62 \u000D\u000A这时 index 就是从 0 开始的整数。如果调用 df.sort_values(by\u003D[\u0027date\u0027]), index 也会相应调整成这样:\u000D\u000A date open high close low volume price_change p_change \u005C\u000D\u000A584 2012\u002D12\u002D24 5.40 5.44 5.41 5.35 5436.09 0.01 0.18 \u000D\u000A583 2012\u002D12\u002D25 5.41 5.58 5.52 5.36 17887.64 0.11 2.03 \u000D\u000A但是我希望 index 不参与排序\u000D\u000A2 、我想对 df 的 open 或者 close 数据画图,比如 x 轴为 date , y 轴为 open ,日期该如何转换?\u000D\u000A因为我直接调用 plt.plot(df[\u0027date\u0027], df[\u0027close\u0027])就会出错。", 7 | "content_rendered": "最近想玩玩 tushare ,有几个问题:\u000D\u003Cbr /\u003E1 、比如我从 csv 中读入股票的数据,存入到 DataFrame 里: df\u003Dpd.read_csv(FileDir, index_col\u003D\u0026quot\u003Bdate\u0026quot\u003B, encoding\u003D\u0027gbk\u0027)。此时 date 作为 index ,那么之后调用排序 df.sort_values 就无法使用 date 进行。只能选用其它 column (比如 open 、 close 等)进行排序。也就是说 df.sort_values(by\u003D[\u0027date\u0027])出错,而 df.sort_values(by\u003D[\u0027close\u0027])正常。\u000D\u003Cbr /\u003E所以目前我只能修改为 df\u003Dpd.read_csv(FileDir, encoding\u003D\u0027gbk\u0027),这样 df 的数据就类似于:\u000D\u003Cbr /\u003E date open high close low volume price_change p_change \u005C\u000D\u003Cbr /\u003E0 2015\u002D12\u002D22 25.45 25.60 25.34 24.83 23069.91 \u002D0.10 \u002D0.39 \u000D\u003Cbr /\u003E1 2015\u002D12\u002D21 25.65 25.95 25.44 25.01 34771.50 \u002D0.42 \u002D1.62 \u000D\u003Cbr /\u003E这时 index 就是从 0 开始的整数。如果调用 df.sort_values(by\u003D[\u0027date\u0027]), index 也会相应调整成这样:\u000D\u003Cbr /\u003E date open high close low volume price_change p_change \u005C\u000D\u003Cbr /\u003E584 2012\u002D12\u002D24 5.40 5.44 5.41 5.35 5436.09 0.01 0.18 \u000D\u003Cbr /\u003E583 2012\u002D12\u002D25 5.41 5.58 5.52 5.36 17887.64 0.11 2.03 \u000D\u003Cbr /\u003E但是我希望 index 不参与排序\u000D\u003Cbr /\u003E2 、我想对 df 的 open 或者 close 数据画图,比如 x 轴为 date , y 轴为 open ,日期该如何转换?\u000D\u003Cbr /\u003E因为我直接调用 plt.plot(df[\u0027date\u0027], df[\u0027close\u0027])就会出错。", 8 | "replies": 0, 9 | "member": { 10 | "id": 25261, 11 | "username": "moogle", 12 | "tagline": "", 13 | "avatar_mini": "//cdn.v2ex.co/avatar/5122/eee5/25261_mini.png?m=1344788101", 14 | "avatar_normal": "//cdn.v2ex.co/avatar/5122/eee5/25261_normal.png?m=1344788101", 15 | "avatar_large": "//cdn.v2ex.co/avatar/5122/eee5/25261_large.png?m=1344788101" 16 | }, 17 | "node": { 18 | "id": 90, 19 | "name": "python", 20 | "title": "Python", 21 | "title_alternative": "Python", 22 | "url": "http://www.v2ex.com/go/python", 23 | "topics": 4169, 24 | "avatar_mini": "//cdn.v2ex.co/navatar/8613/985e/90_mini.png?m=1450824590", 25 | "avatar_normal": "//cdn.v2ex.co/navatar/8613/985e/90_normal.png?m=1450824590", 26 | "avatar_large": "//cdn.v2ex.co/navatar/8613/985e/90_large.png?m=1450824590" 27 | }, 28 | "created": 1450967550, 29 | "last_modified": 1450967550, 30 | "last_touched": 1450967370 31 | }, { 32 | "id": 245952, 33 | "title": "大家都是怎样理财的", 34 | "url": "http://www.v2ex.com/t/245952", 35 | "content": "工作两年了,过年算算身上就三万不到,好歹也算是年薪十万…真不知道钱都用哪里去了,衣服穿的一看就是屌丝程序员,还用着个小米。想想往后成家立业可怎么办…大家平时都是怎么理财呢?", 36 | "content_rendered": "工作两年了,过年算算身上就三万不到,好歹也算是年薪十万…真不知道钱都用哪里去了,衣服穿的一看就是屌丝程序员,还用着个小米。想想往后成家立业可怎么办…大家平时都是怎么理财呢?", 37 | "replies": 2, 38 | "member": { 39 | "id": 113774, 40 | "username": "onceyoung", 41 | "tagline": "", 42 | "avatar_mini": "//cdn.v2ex.co/avatar/71c7/6045/113774_mini.png?m=1445267529", 43 | "avatar_normal": "//cdn.v2ex.co/avatar/71c7/6045/113774_normal.png?m=1445267529", 44 | "avatar_large": "//cdn.v2ex.co/avatar/71c7/6045/113774_large.png?m=1445267529" 45 | }, 46 | "node": { 47 | "id": 12, 48 | "name": "qna", 49 | "title": "问与答", 50 | "title_alternative": "Questions and Answers", 51 | "url": "http://www.v2ex.com/go/qna", 52 | "topics": 61884, 53 | "avatar_mini": "//cdn.v2ex.co/navatar/c20a/d4d7/12_mini.png?m=1448889637", 54 | "avatar_normal": "//cdn.v2ex.co/navatar/c20a/d4d7/12_normal.png?m=1448889637", 55 | "avatar_large": "//cdn.v2ex.co/navatar/c20a/d4d7/12_large.png?m=1448889637" 56 | }, 57 | "created": 1450967137, 58 | "last_modified": 1450967194, 59 | "last_touched": 1450967973 60 | }, { 61 | "id": 245951, 62 | "title": "太诡异了, Facebook 账号被盗号了?!突然感觉好恐怖啊", 63 | "url": "http://www.v2ex.com/t/245951", 64 | "content": "http://ww2.sinaimg.cn/large/86a81bfbgw1ezb46qgk19j20e8066q3t.jpg", 65 | "content_rendered": "\u003Cimg src\u003D\u0022http://ww2.sinaimg.cn/large/86a81bfbgw1ezb46qgk19j20e8066q3t.jpg\u0022 class\u003D\u0022imgly\u0022 style\u003D\u0022max\u002Dwidth: 660px\u003B\u0022 border\u003D\u00220\u0022 /\u003E ", 66 | "replies": 4, 67 | "member": { 68 | "id": 28958, 69 | "username": "langqianyi", 70 | "tagline": "", 71 | "avatar_mini": "//cdn.v2ex.co/avatar/d6a1/4995/28958_mini.png?m=1409445073", 72 | "avatar_normal": "//cdn.v2ex.co/avatar/d6a1/4995/28958_normal.png?m=1409445073", 73 | "avatar_large": "//cdn.v2ex.co/avatar/d6a1/4995/28958_large.png?m=1409445073" 74 | }, 75 | "node": { 76 | "id": 12, 77 | "name": "qna", 78 | "title": "问与答", 79 | "title_alternative": "Questions and Answers", 80 | "url": "http://www.v2ex.com/go/qna", 81 | "topics": 61884, 82 | "avatar_mini": "//cdn.v2ex.co/navatar/c20a/d4d7/12_mini.png?m=1448889637", 83 | "avatar_normal": "//cdn.v2ex.co/navatar/c20a/d4d7/12_normal.png?m=1448889637", 84 | "avatar_large": "//cdn.v2ex.co/navatar/c20a/d4d7/12_large.png?m=1448889637" 85 | }, 86 | "created": 1450967104, 87 | "last_modified": 1450967104, 88 | "last_touched": 1450967811 89 | }, { 90 | "id": 245950, 91 | "title": "刚刚发现两个神奇的动画效果", 92 | "url": "http://www.v2ex.com/t/245950", 93 | "content": "OS X 系统下面,按住 shift ,再吧你的浏览器最小化,咦?怎么动画变慢了。 dock 打开也是一样。\u000D\u000A还有就是按住 shift + ctrl 再把光标放到 dock 上面去,图标就会很大。", 94 | "content_rendered": "OS X 系统下面,按住 shift ,再吧你的浏览器最小化,咦?怎么动画变慢了。 dock 打开也是一样。\u000D\u003Cbr /\u003E还有就是按住 shift + ctrl 再把光标放到 dock 上面去,图标就会很大。", 95 | "replies": 0, 96 | "member": { 97 | "id": 99417, 98 | "username": "sengxian", 99 | "tagline": "", 100 | "avatar_mini": "//cdn.v2ex.co/avatar/2483/9e12/99417_mini.png?m=1438747137", 101 | "avatar_normal": "//cdn.v2ex.co/avatar/2483/9e12/99417_normal.png?m=1438747137", 102 | "avatar_large": "//cdn.v2ex.co/avatar/2483/9e12/99417_large.png?m=1438747137" 103 | }, 104 | "node": { 105 | "id": 16, 106 | "name": "share", 107 | "title": "分享发现", 108 | "title_alternative": "Share", 109 | "url": "http://www.v2ex.com/go/share", 110 | "topics": 17745, 111 | "avatar_mini": "//cdn.v2ex.co/navatar/c74d/97b0/16_mini.png?m=1448889669", 112 | "avatar_normal": "//cdn.v2ex.co/navatar/c74d/97b0/16_normal.png?m=1448889669", 113 | "avatar_large": "//cdn.v2ex.co/navatar/c74d/97b0/16_large.png?m=1448889669" 114 | }, 115 | "created": 1450966971, 116 | "last_modified": 1450966971, 117 | "last_touched": 1450966791 118 | }, { 119 | "id": 245947, 120 | "title": "再見,杭州", 121 | "url": "http://www.v2ex.com/t/245947", 122 | "content": "http://lepture.com/zh/2015/beloved\u002Dhangzhou\u000D\u000A\u000D\u000A每一次短暫的離去,過後總是回想起杭州的好處,忘卻了討人厭的陰雨天氣。", 123 | "content_rendered": "\u003Ca target\u003D\u0022_blank\u0022 href\u003D\u0022http://lepture.com/zh/2015/beloved\u002Dhangzhou\u0022 rel\u003D\u0022nofollow\u0022\u003Ehttp://lepture.com/zh/2015/beloved\u002Dhangzhou\u003C/a\u003E\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E每一次短暫的離去,過後總是回想起杭州的好處,忘卻了討人厭的陰雨天氣。", 124 | "replies": 6, 125 | "member": { 126 | "id": 1205, 127 | "username": "lepture", 128 | "tagline": "Love its people, but never trust its government.", 129 | "avatar_mini": "//cdn.v2ex.co/avatar/b571/ecea/1205_mini.png?m=1418210940", 130 | "avatar_normal": "//cdn.v2ex.co/avatar/b571/ecea/1205_normal.png?m=1418210940", 131 | "avatar_large": "//cdn.v2ex.co/avatar/b571/ecea/1205_large.png?m=1418210940" 132 | }, 133 | "node": { 134 | "id": 26, 135 | "name": "hangzhou", 136 | "title": "杭州", 137 | "title_alternative": "Hangzhou", 138 | "url": "http://www.v2ex.com/go/hangzhou", 139 | "topics": 303, 140 | "avatar_mini": "/static/img/node_mini.png", 141 | "avatar_normal": "/static/img/node_normal.png", 142 | "avatar_large": "/static/img/node_large.png" 143 | }, 144 | "created": 1450966200, 145 | "last_modified": 1450966200, 146 | "last_touched": 1450968334 147 | }, { 148 | "id": 245946, 149 | "title": "#RapidData# * PacificIDC 机房 KVM 虚拟服务器来了!* 10 元/月 起! *", 150 | "url": "http://www.v2ex.com/t/245946", 151 | "content": "Hi,V2EXer !\u000D\u000A\u000D\u000A首先,给大家说一声 MERRY CHRISTMAS!圣诞节快乐!\u000D\u000A\u000D\u000A其次,我们带来了最新的优惠!真正的圣诞节优惠来了!\u000D\u000APacificIDC 机房 KVM 虚拟服务器! 最低 10 元 /月起!\u000D\u000A\u000D\u000A宿主机采用全新硬件,多块全新硬盘+阵列卡组成的 RAID10 , KVM 企业级虚拟化,具有强大的 IO 且能确保正常稳定。每台宿主机严格控制虚拟服务器数量,确定不超售。智能路由+BGP 网络,使服务器到中国的延迟速度平均在 160\u002D180ms 上下!\u000D\u000A\u000D\u000A\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u000D\u000ABGP 多线:中国电信 / 中国联通 / 中国移动 / PCCW 电讯盈科 – AS3491 / NTT Communications – AS2914 / Psychz – AS40676\u000D\u000A智能路由:引进智能路由平台, 24 小时自动发现丢包、拥堵和潜伏问题,从而提前调试网络路由,以确保最优的产品服务。\u000D\u000A顶级 DDoS 防护:优越的 DDoS 探测、保护和过滤。不断的研究和投入促成了前所未有的发展并提高了安全防范来应对日益频繁的威胁。\u000D\u000AIPv6 支持:完美支持 IPv6 ,如果您有需求,请随时联系我们!\u000D\u000A内外网支持:轻松组建一个集群!外网 IP 不再孤单!\u000D\u000A\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u000D\u000A\u000D\u000A可选产品:这次,我们给大家带来了三款特价产品!支持 月付、季付以及半年付!续费同价!\u000D\u000A\u000D\u000A0x01 : KVM512\u000D\u000ACPU 1 Core(Up to 3.5Ghz)\u000D\u000A内存 512MB ECC RAM + 512MB SWAP\u000D\u000A硬盘 15GB HDD RAID10 保护\u000D\u000AIP 公网 IPv4*1 / 内网 IPv4*1 / IPv6 可免费申请\u000D\u000A网络 1Gbps 带宽 / 500GB 流量\u000D\u000A费用 ¥ 10/月\u000D\u000A购买 https://my.rapiddata.org/cart.php?a\u003Dadd\u0026pid\u003D52\u000D\u000A\u000D\u000A0x02 : KVM1024\u000D\u000ACPU 1 Core(Up to 3.5Ghz)\u000D\u000A内存 1024MB ECC RAM + 1024MB SWAP\u000D\u000A硬盘 30GB HDD RAID10 保护\u000D\u000AIP 公网 IPv4*1 / 内网 IPv4*1 / IPv6 可免费申请\u000D\u000A网络 1Gbps 带宽 / 1TB 流量\u000D\u000A费用 ¥ 20/月\u000D\u000A购买 https://my.rapiddata.org/cart.php?a\u003Dadd\u0026pid\u003D54\u000D\u000A\u000D\u000A0x03 : KVM2048\u000D\u000ACPU 2 Core(Up to 3.5Ghz)\u000D\u000A内存 2048MB ECC RAM + 1024MB SWAP\u000D\u000A硬盘 50GB HDD RAID10 保护\u000D\u000AIP 公网 IPv4*1 / 内网 IPv4*1 / IPv6 可免费申请\u000D\u000A网络 1Gbps 带宽 / 2TB 流量\u000D\u000A费用 ¥ 30/月\u000D\u000A购买 https://my.rapiddata.org/cart.php?a\u003Dadd\u0026pid\u003D55\u000D\u000A\u000D\u000A测试 IPv4 : 104.255.32.139\u000D\u000A测试 IPv6 : 2605:e980:d::beef\u000D\u000ALooking Glass : http://lg.pacificidc.com/\u000D\u000A100MB.test : http://lg.pacificidc.com/100MB.test\u000D\u000A\u000D\u000A支持在线安装的系统: CentOS 、 Debian\u000D\u000A\u000D\u000A注意事项\u000D\u000A*系统只提供 Linux 系,暂不提供 Windows ,也禁止自行安装 Windows\u000D\u000A*特价 /活动商品一经售出不予退款\u000D\u000A*锐网云计算保留该活动的解释权\u000D\u000A\u000D\u000A RapidData(锐网云计算)\u000D\u000A 2015 年 12 月\u000D\u000A\u003D\u003D\u003D\u003D\u003D\u003D\u003D\u003D\u003D\u003D\u003D\u003D\u000D\u000ARapidData(锐网云计算) 保留该活动的所有权利。\u000D\u000A售前 QQ 交流群: 461855819 提交工单: http://my.rapiddata.org/submitticket.php\u000D\u000A售前交流群仅供产品咨询,并非售后群,任何使用上的问题请发送工单!\u000D\u000A如果有任何问题,不要犹豫,马上发 E\u002Dmail 和提交工单!我们会第一时间回复您!", 152 | "content_rendered": "Hi,V2EXer !\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E首先,给大家说一声 MERRY CHRISTMAS!圣诞节快乐!\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E其次,我们带来了最新的优惠!真正的圣诞节优惠来了!\u000D\u003Cbr /\u003EPacificIDC 机房 KVM 虚拟服务器! 最低 10 元 /月起!\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E宿主机采用全新硬件,多块全新硬盘+阵列卡组成的 RAID10 , KVM 企业级虚拟化,具有强大的 IO 且能确保正常稳定。每台宿主机严格控制虚拟服务器数量,确定不超售。智能路由+BGP 网络,使服务器到中国的延迟速度平均在 160\u002D180ms 上下!\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u000D\u003Cbr /\u003EBGP 多线:中国电信 / 中国联通 / 中国移动 / PCCW 电讯盈科 – AS3491 / NTT Communications – AS2914 / Psychz – AS40676\u000D\u003Cbr /\u003E智能路由:引进智能路由平台, 24 小时自动发现丢包、拥堵和潜伏问题,从而提前调试网络路由,以确保最优的产品服务。\u000D\u003Cbr /\u003E顶级 DDoS 防护:优越的 DDoS 探测、保护和过滤。不断的研究和投入促成了前所未有的发展并提高了安全防范来应对日益频繁的威胁。\u000D\u003Cbr /\u003EIPv6 支持:完美支持 IPv6 ,如果您有需求,请随时联系我们!\u000D\u003Cbr /\u003E内外网支持:轻松组建一个集群!外网 IP 不再孤单!\u000D\u003Cbr /\u003E\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E可选产品:这次,我们给大家带来了三款特价产品!支持 月付、季付以及半年付!续费同价!\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E0x01 : KVM512\u000D\u003Cbr /\u003ECPU 1 Core(Up to 3.5Ghz)\u000D\u003Cbr /\u003E内存 512MB ECC RAM + 512MB SWAP\u000D\u003Cbr /\u003E硬盘 15GB HDD RAID10 保护\u000D\u003Cbr /\u003EIP 公网 IPv4*1 / 内网 IPv4*1 / IPv6 可免费申请\u000D\u003Cbr /\u003E网络 1Gbps 带宽 / 500GB 流量\u000D\u003Cbr /\u003E费用 ¥ 10/月\u000D\u003Cbr /\u003E购买 \u003Ca target\u003D\u0022_blank\u0022 href\u003D\u0022https://my.rapiddata.org/cart.php?a\u003Dadd\u0026amp\u003Bpid\u003D52\u0022 rel\u003D\u0022nofollow\u0022\u003Ehttps://my.rapiddata.org/cart.php?a\u003Dadd\u0026amp\u003Bpid\u003D52\u003C/a\u003E\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E0x02 : KVM1024\u000D\u003Cbr /\u003ECPU 1 Core(Up to 3.5Ghz)\u000D\u003Cbr /\u003E内存 1024MB ECC RAM + 1024MB SWAP\u000D\u003Cbr /\u003E硬盘 30GB HDD RAID10 保护\u000D\u003Cbr /\u003EIP 公网 IPv4*1 / 内网 IPv4*1 / IPv6 可免费申请\u000D\u003Cbr /\u003E网络 1Gbps 带宽 / 1TB 流量\u000D\u003Cbr /\u003E费用 ¥ 20/月\u000D\u003Cbr /\u003E购买 \u003Ca target\u003D\u0022_blank\u0022 href\u003D\u0022https://my.rapiddata.org/cart.php?a\u003Dadd\u0026amp\u003Bpid\u003D54\u0022 rel\u003D\u0022nofollow\u0022\u003Ehttps://my.rapiddata.org/cart.php?a\u003Dadd\u0026amp\u003Bpid\u003D54\u003C/a\u003E\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E0x03 : KVM2048\u000D\u003Cbr /\u003ECPU 2 Core(Up to 3.5Ghz)\u000D\u003Cbr /\u003E内存 2048MB ECC RAM + 1024MB SWAP\u000D\u003Cbr /\u003E硬盘 50GB HDD RAID10 保护\u000D\u003Cbr /\u003EIP 公网 IPv4*1 / 内网 IPv4*1 / IPv6 可免费申请\u000D\u003Cbr /\u003E网络 1Gbps 带宽 / 2TB 流量\u000D\u003Cbr /\u003E费用 ¥ 30/月\u000D\u003Cbr /\u003E购买 \u003Ca target\u003D\u0022_blank\u0022 href\u003D\u0022https://my.rapiddata.org/cart.php?a\u003Dadd\u0026amp\u003Bpid\u003D55\u0022 rel\u003D\u0022nofollow\u0022\u003Ehttps://my.rapiddata.org/cart.php?a\u003Dadd\u0026amp\u003Bpid\u003D55\u003C/a\u003E\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E测试 IPv4 : 104.255.32.139\u000D\u003Cbr /\u003E测试 IPv6 : 2605:e980:d::beef\u000D\u003Cbr /\u003ELooking Glass : \u003Ca target\u003D\u0022_blank\u0022 href\u003D\u0022http://lg.pacificidc.com/\u0022 rel\u003D\u0022nofollow\u0022\u003Ehttp://lg.pacificidc.com/\u003C/a\u003E\u000D\u003Cbr /\u003E100MB.test : \u003Ca target\u003D\u0022_blank\u0022 href\u003D\u0022http://lg.pacificidc.com/100MB.test\u0022 rel\u003D\u0022nofollow\u0022\u003Ehttp://lg.pacificidc.com/100MB.test\u003C/a\u003E\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E支持在线安装的系统: CentOS 、 Debian\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E注意事项\u000D\u003Cbr /\u003E*系统只提供 Linux 系,暂不提供 Windows ,也禁止自行安装 Windows\u000D\u003Cbr /\u003E*特价 /活动商品一经售出不予退款\u000D\u003Cbr /\u003E*锐网云计算保留该活动的解释权\u000D\u003Cbr /\u003E\u000D\u003Cbr /\u003E RapidData(锐网云计算)\u000D\u003Cbr /\u003E 2015 年 12 月\u000D\u003Cbr /\u003E\u003D\u003D\u003D\u003D\u003D\u003D\u003D\u003D\u003D\u003D\u003D\u003D\u000D\u003Cbr /\u003ERapidData(锐网云计算) 保留该活动的所有权利。\u000D\u003Cbr /\u003E售前 QQ 交流群: 461855819 提交工单: \u003Ca target\u003D\u0022_blank\u0022 href\u003D\u0022http://my.rapiddata.org/submitticket.php\u0022 rel\u003D\u0022nofollow\u0022\u003Ehttp://my.rapiddata.org/submitticket.php\u003C/a\u003E\u000D\u003Cbr /\u003E售前交流群仅供产品咨询,并非售后群,任何使用上的问题请发送工单!\u000D\u003Cbr /\u003E如果有任何问题,不要犹豫,马上发 E\u002Dmail 和提交工单!我们会第一时间回复您!", 153 | "replies": 1, 154 | "member": { 155 | "id": 151722, 156 | "username": "RapidData", 157 | "tagline": "", 158 | "avatar_mini": "//cdn.v2ex.co/avatar/5c40/1c40/151722_mini.png?m=1450273125", 159 | "avatar_normal": "//cdn.v2ex.co/avatar/5c40/1c40/151722_normal.png?m=1450273125", 160 | "avatar_large": "//cdn.v2ex.co/avatar/5c40/1c40/151722_large.png?m=1450273125" 161 | }, 162 | "node": { 163 | "id": 337, 164 | "name": "webmaster", 165 | "title": "站长", 166 | "title_alternative": "Webmaster", 167 | "url": "http://www.v2ex.com/go/webmaster", 168 | "topics": 654, 169 | "avatar_mini": "//cdn.v2ex.co/navatar/357a/6fdf/337_mini.png?m=1450843111", 170 | "avatar_normal": "//cdn.v2ex.co/navatar/357a/6fdf/337_normal.png?m=1450843111", 171 | "avatar_large": "//cdn.v2ex.co/navatar/357a/6fdf/337_large.png?m=1450843111" 172 | }, 173 | "created": 1450966096, 174 | "last_modified": 1450966096, 175 | "last_touched": 1450955296 176 | }, { 177 | "id": 245945, 178 | "title": "[坐标广州]她他社 资深系统架构师( php) 15k\u002D25k", 179 | "url": "http://www.v2ex.com/t/245945", 180 | "content": "职位描述:\u000D\u000A1. 深入发掘和分析业务需求,撰写技术方案和系统设计;\u000D\u000A2. 参与技术方案和系统设计评审;把握复杂系统的设计,确保系统的架构质量;\u000D\u000A3. 系统核心部分代码编写;疑难问题的解决;\u000D\u000A4. 对现存或未来系统进行宏观的思考,规划形成统一的框架、平台或组件;\u000D\u000A5. 指导和培训工程师,让团队成员在你的影响下取得成长;\u000D\u000A6. 为团队引入创新的技术、创新的解决方案,用创新的思路解决问题。\u000D\u000A\u000D\u000A\u000D\u000A职位要求:\u000D\u000A1 、 本科以上学历,计算机科学或相关专业优先;\u000D\u000A2 、 熟练掌握 PHP 语言,熟悉 PHP 开源框架,精通 PHP+MySQL 开发;\u000D\u000A3 、五年以上使用 php 开发的经验,两年以上电商相关开发经验,对于你用过的开源框架,能理解到它的原理和机制;\u000D\u000A4 、熟悉数据库建模,具有数据库设计经验,熟练应用 MySQL ,丰富的 MySQL 优化经历;\u000D\u000A5 、具备 Redis , Memcached, RabbitMQ 等应用优化经验优先;\u000D\u000A6 、熟悉 zookeeper 分布式解决方案优先;\u000D\u000A7 、熟练使用 java 的可以加分。\u000D\u000A\u000D\u000AHR 姐姐联系方式:\u000D\u000Ahr@ta2she.com", 181 | "content_rendered": "\u003Cp\u003E职位描述:\u003Cbr\u003E\u000A1. 深入发掘和分析业务需求,撰写技术方案和系统设计;\u003Cbr\u003E\u000A2. 参与技术方案和系统设计评审;把握复杂系统的设计,确保系统的架构质量;\u003Cbr\u003E\u000A3. 系统核心部分代码编写;疑难问题的解决;\u003Cbr\u003E\u000A4. 对现存或未来系统进行宏观的思考,规划形成统一的框架、平台或组件;\u003Cbr\u003E\u000A5. 指导和培训工程师,让团队成员在你的影响下取得成长;\u003Cbr\u003E\u000A6. 为团队引入创新的技术、创新的解决方案,用创新的思路解决问题。\u003C/p\u003E\u000A\u000A\u003Cp\u003E职位要求:\u003Cbr\u003E\u000A1 、 本科以上学历,计算机科学或相关专业优先;\u003Cbr\u003E\u000A2 、 熟练掌握 PHP 语言,熟悉 PHP 开源框架,精通 PHP+MySQL 开发;\u003Cbr\u003E\u000A3 、五年以上使用 php 开发的经验,两年以上电商相关开发经验,对于你用过的开源框架,能理解到它的原理和机制;\u003Cbr\u003E\u000A4 、熟悉数据库建模,具有数据库设计经验,熟练应用 MySQL ,丰富的 MySQL 优化经历;\u003Cbr\u003E\u000A5 、具备 Redis , Memcached, RabbitMQ 等应用优化经验优先;\u003Cbr\u003E\u000A6 、熟悉 zookeeper 分布式解决方案优先;\u003Cbr\u003E\u000A7 、熟练使用 java 的可以加分。\u003C/p\u003E\u000A\u000A\u003Cp\u003EHR 姐姐联系方式:\u003Cbr\u003E\u000A\u003Ca target\u003D\u0022_blank\u0022 rel\u003D\u0022nofollow\u0022 href\u003D\u0022mailto:hr@ta2she.com\u0022\u003Ehr@ta2she.com\u003C/a\u003E\u003C/p\u003E\u000A", 182 | "replies": 0, 183 | "member": { 184 | "id": 151827, 185 | "username": "lynnlin", 186 | "tagline": "跪求技术大牛", 187 | "avatar_mini": "//cdn.v2ex.co/avatar/f0ac/7bfb/151827_mini.png?m=1450949289", 188 | "avatar_normal": "//cdn.v2ex.co/avatar/f0ac/7bfb/151827_normal.png?m=1450949289", 189 | "avatar_large": "//cdn.v2ex.co/avatar/f0ac/7bfb/151827_large.png?m=1450949289" 190 | }, 191 | "node": { 192 | "id": 43, 193 | "name": "jobs", 194 | "title": "酷工作", 195 | "title_alternative": "Jobs", 196 | "url": "http://www.v2ex.com/go/jobs", 197 | "topics": 13393, 198 | "avatar_mini": "//cdn.v2ex.co/navatar/17e6/2166/43_mini.png?m=1450842771", 199 | "avatar_normal": "//cdn.v2ex.co/navatar/17e6/2166/43_normal.png?m=1450842771", 200 | "avatar_large": "//cdn.v2ex.co/navatar/17e6/2166/43_large.png?m=1450842771" 201 | }, 202 | "created": 1450965878, 203 | "last_modified": 1450965943, 204 | "last_touched": 1450951478 205 | }, { 206 | "id": 245944, 207 | "title": "明天学校让我交个作品,做个什么好", 208 | "url": "http://www.v2ex.com/t/245944", 209 | "content": "高中的,随便做什么都行 ( Win32 EXE )", 210 | "content_rendered": "高中的,随便做什么都行 ( Win32 EXE )", 211 | "replies": 0, 212 | "member": { 213 | "id": 82581, 214 | "username": "wbsdty331", 215 | "tagline": "", 216 | "avatar_mini": "//cdn.v2ex.co/avatar/2b6f/6139/82581_mini.png?m=1423498734", 217 | "avatar_normal": "//cdn.v2ex.co/avatar/2b6f/6139/82581_normal.png?m=1423498734", 218 | "avatar_large": "//cdn.v2ex.co/avatar/2b6f/6139/82581_large.png?m=1423498734" 219 | }, 220 | "node": { 221 | "id": 12, 222 | "name": "qna", 223 | "title": "问与答", 224 | "title_alternative": "Questions and Answers", 225 | "url": "http://www.v2ex.com/go/qna", 226 | "topics": 61884, 227 | "avatar_mini": "//cdn.v2ex.co/navatar/c20a/d4d7/12_mini.png?m=1448889637", 228 | "avatar_normal": "//cdn.v2ex.co/navatar/c20a/d4d7/12_normal.png?m=1448889637", 229 | "avatar_large": "//cdn.v2ex.co/navatar/c20a/d4d7/12_large.png?m=1448889637" 230 | }, 231 | "created": 1450965831, 232 | "last_modified": 1450965831, 233 | "last_touched": 1450792851 234 | }, { 235 | "id": 245943, 236 | "title": "有没有介绍国内 小而美 团队的 Website or App", 237 | "url": "http://www.v2ex.com/t/245943", 238 | "content": "这对工程师在考虑是否要加入某个团队能提供些参考", 239 | "content_rendered": "\u003Cp\u003E这对工程师在考虑是否要加入某个团队能提供些参考\u003C/p\u003E\u000A", 240 | "replies": 1, 241 | "member": { 242 | "id": 117112, 243 | "username": "fakesnow", 244 | "tagline": "", 245 | "avatar_mini": "//cdn.v2ex.co/gravatar/3cf8ee748cf3583093e5328ba2cc98d7?s=24&d=retro", 246 | "avatar_normal": "//cdn.v2ex.co/gravatar/3cf8ee748cf3583093e5328ba2cc98d7?s=48&d=retro", 247 | "avatar_large": "//cdn.v2ex.co/gravatar/3cf8ee748cf3583093e5328ba2cc98d7?s=73&d=retro" 248 | }, 249 | "node": { 250 | "id": 445, 251 | "name": "tech", 252 | "title": "科技", 253 | "title_alternative": "Technology", 254 | "url": "http://www.v2ex.com/go/tech", 255 | "topics": 27, 256 | "avatar_mini": "/static/img/node_mini.png", 257 | "avatar_normal": "/static/img/node_normal.png", 258 | "avatar_large": "/static/img/node_large.png" 259 | }, 260 | "created": 1450965249, 261 | "last_modified": 1450965249, 262 | "last_touched": 1450966588 263 | }, { 264 | "id": 245939, 265 | "title": "请问上海固定 IP 的企业精品网 IP 是什么开头的?", 266 | "url": "http://www.v2ex.com/t/245939", 267 | "content": "", 268 | "content_rendered": "", 269 | "replies": 0, 270 | "member": { 271 | "id": 147338, 272 | "username": "luchen", 273 | "tagline": "", 274 | "avatar_mini": "//cdn.v2ex.co/gravatar/c29d5b443633f276df9aa5a9330e6ffe?s=24&d=retro", 275 | "avatar_normal": "//cdn.v2ex.co/gravatar/c29d5b443633f276df9aa5a9330e6ffe?s=48&d=retro", 276 | "avatar_large": "//cdn.v2ex.co/gravatar/c29d5b443633f276df9aa5a9330e6ffe?s=73&d=retro" 277 | }, 278 | "node": { 279 | "id": 108, 280 | "name": "bb", 281 | "title": "宽带症候群", 282 | "title_alternative": "Broadband Symptom Complex", 283 | "url": "http://www.v2ex.com/go/bb", 284 | "topics": 1164, 285 | "avatar_mini": "//cdn.v2ex.co/navatar/a3c6/5c29/108_mini.png?m=1441773183", 286 | "avatar_normal": "//cdn.v2ex.co/navatar/a3c6/5c29/108_normal.png?m=1441773183", 287 | "avatar_large": "//cdn.v2ex.co/navatar/a3c6/5c29/108_large.png?m=1441773183" 288 | }, 289 | "created": 1450964079, 290 | "last_modified": 1450964079, 291 | "last_touched": 1450963899 292 | }, { 293 | "id": 245938, 294 | "title": "mac 权限请教", 295 | "url": "http://www.v2ex.com/t/245938", 296 | "content": "请教一个问题:\u000D\u000A\u000D\u000A在 mac 下如何获得最高权限,比如有时候虽然做一些操作用 sudo mv abc.txt /bin 这样的还可以。但是也有一些做不了,比如我要修改 /etc/profile 环境变量,就无法打开,貌似要 chmod 一下,有没有办法在 Mac 下获得 root 权限啊?\u000D\u000A\u000D\u000A\u000D\u000A另外一个问题:\u000D\u000A\u000D\u000A刚编译了一个 boost 库,生成了一些 include 目录和 lib 目录,我如何加载到系统的 path 下?", 297 | "content_rendered": "\u003Cp\u003E请教一个问题:\u003C/p\u003E\u000A\u000A\u003Cp\u003E在 mac 下如何获得最高权限,比如有时候虽然做一些操作用 sudo mv abc.txt /bin 这样的还可以。但是也有一些做不了,比如我要修改 /etc/profile 环境变量,就无法打开,貌似要 chmod 一下,有没有办法在 Mac 下获得 root 权限啊?\u003C/p\u003E\u000A\u000A\u003Cp\u003E另外一个问题:\u003C/p\u003E\u000A\u000A\u003Cp\u003E刚编译了一个 boost 库,生成了一些 include 目录和 lib 目录,我如何加载到系统的 path 下?\u003C/p\u003E\u000A", 298 | "replies": 1, 299 | "member": { 300 | "id": 149193, 301 | "username": "hailongs", 302 | "tagline": "", 303 | "avatar_mini": "//cdn.v2ex.co/gravatar/a2e9523f759943840e5072d9e127446a?s=24&d=retro", 304 | "avatar_normal": "//cdn.v2ex.co/gravatar/a2e9523f759943840e5072d9e127446a?s=48&d=retro", 305 | "avatar_large": "//cdn.v2ex.co/gravatar/a2e9523f759943840e5072d9e127446a?s=73&d=retro" 306 | }, 307 | "node": { 308 | "id": 10, 309 | "name": "mbp", 310 | "title": "MacBook Pro", 311 | "title_alternative": "MacBook Pro", 312 | "url": "http://www.v2ex.com/go/mbp", 313 | "topics": 1987, 314 | "avatar_mini": "//cdn.v2ex.co/navatar/d3d9/4468/10_mini.png?m=1438332810", 315 | "avatar_normal": "//cdn.v2ex.co/navatar/d3d9/4468/10_normal.png?m=1438332810", 316 | "avatar_large": "//cdn.v2ex.co/navatar/d3d9/4468/10_large.png?m=1438332810" 317 | }, 318 | "created": 1450963385, 319 | "last_modified": 1450963385, 320 | "last_touched": 1450952585 321 | }, { 322 | "id": 245937, 323 | "title": "Python 有获取加载完页面又去做别的请求的方法吗?", 324 | "url": "http://www.v2ex.com/t/245937", 325 | "content": "比如 Chrome 的 network 列表。", 326 | "content_rendered": "比如 Chrome 的 network 列表。", 327 | "replies": 3, 328 | "member": { 329 | "id": 152470, 330 | "username": "lszxlong", 331 | "tagline": "", 332 | "avatar_mini": "//cdn.v2ex.co/gravatar/b725bce64bcd8e46065eb57ae1270911?s=24&d=retro", 333 | "avatar_normal": "//cdn.v2ex.co/gravatar/b725bce64bcd8e46065eb57ae1270911?s=48&d=retro", 334 | "avatar_large": "//cdn.v2ex.co/gravatar/b725bce64bcd8e46065eb57ae1270911?s=73&d=retro" 335 | }, 336 | "node": { 337 | "id": 90, 338 | "name": "python", 339 | "title": "Python", 340 | "title_alternative": "Python", 341 | "url": "http://www.v2ex.com/go/python", 342 | "topics": 4169, 343 | "avatar_mini": "//cdn.v2ex.co/navatar/8613/985e/90_mini.png?m=1450824590", 344 | "avatar_normal": "//cdn.v2ex.co/navatar/8613/985e/90_normal.png?m=1450824590", 345 | "avatar_large": "//cdn.v2ex.co/navatar/8613/985e/90_large.png?m=1450824590" 346 | }, 347 | "created": 1450963261, 348 | "last_modified": 1450963261, 349 | "last_touched": 1450966244 350 | }, { 351 | "id": 245936, 352 | "title": "淘宝那些「微信多开版」是通过什么方式多开并且签名的?", 353 | "url": "http://www.v2ex.com/t/245936", 354 | "content": "拿不到源码吧?我试过某个分发站的企业签名,是会签名失败的。", 355 | "content_rendered": "拿不到源码吧?我试过某个分发站的企业签名,是会签名失败的。", 356 | "replies": 2, 357 | "member": { 358 | "id": 38603, 359 | "username": "DearTanker", 360 | "tagline": "", 361 | "avatar_mini": "//cdn.v2ex.co/avatar/0342/b022/38603_mini.png?m=1427027674", 362 | "avatar_normal": "//cdn.v2ex.co/avatar/0342/b022/38603_normal.png?m=1427027674", 363 | "avatar_large": "//cdn.v2ex.co/avatar/0342/b022/38603_large.png?m=1427027674" 364 | }, 365 | "node": { 366 | "id": 12, 367 | "name": "qna", 368 | "title": "问与答", 369 | "title_alternative": "Questions and Answers", 370 | "url": "http://www.v2ex.com/go/qna", 371 | "topics": 61884, 372 | "avatar_mini": "//cdn.v2ex.co/navatar/c20a/d4d7/12_mini.png?m=1448889637", 373 | "avatar_normal": "//cdn.v2ex.co/navatar/c20a/d4d7/12_normal.png?m=1448889637", 374 | "avatar_large": "//cdn.v2ex.co/navatar/c20a/d4d7/12_large.png?m=1448889637" 375 | }, 376 | "created": 1450963223, 377 | "last_modified": 1450963223, 378 | "last_touched": 1450968217 379 | }, { 380 | "id": 245935, 381 | "title": "如何快速找到女朋友?", 382 | "url": "http://www.v2ex.com/t/245935", 383 | "content": "以前认为随缘就好,这么多年了,我还是一个人。马上就是圣诞节了,突然觉得很孤单。 \u000D\u000A\u000D\u000A现在我知道的方法有:经常主动搭讪、用知识征服她、变得有钱、多点幽默感(我长相一般)... \u000D\u000A所以最近有尝试着跟女生搭讪,在图书馆要到了一个女生的号码,但是后面不知道该怎么聊了 \u000D\u000A\u000D\u000A那么还有哪些更好的实践方法呢,请有经验的人来指导一下", 384 | "content_rendered": "\u003Cp\u003E以前认为随缘就好,这么多年了,我还是一个人。马上就是圣诞节了,突然觉得很孤单。 \u003C/p\u003E\u000A\u000A\u003Cp\u003E现在我知道的方法有:经常主动搭讪、用知识征服她、变得有钱、多点幽默感(我长相一般)... \u003Cbr\u003E\u000A所以最近有尝试着跟女生搭讪,在图书馆要到了一个女生的号码,但是后面不知道该怎么聊了 \u003C/p\u003E\u000A\u000A\u003Cp\u003E那么还有哪些更好的实践方法呢,请有经验的人来指导一下\u003C/p\u003E\u000A", 385 | "replies": 21, 386 | "member": { 387 | "id": 92017, 388 | "username": "yangtze", 389 | "tagline": "", 390 | "avatar_mini": "//cdn.v2ex.co/avatar/da73/2b20/92017_mini.png?m=1437010631", 391 | "avatar_normal": "//cdn.v2ex.co/avatar/da73/2b20/92017_normal.png?m=1437010631", 392 | "avatar_large": "//cdn.v2ex.co/avatar/da73/2b20/92017_large.png?m=1437010631" 393 | }, 394 | "node": { 395 | "id": 12, 396 | "name": "qna", 397 | "title": "问与答", 398 | "title_alternative": "Questions and Answers", 399 | "url": "http://www.v2ex.com/go/qna", 400 | "topics": 61884, 401 | "avatar_mini": "//cdn.v2ex.co/navatar/c20a/d4d7/12_mini.png?m=1448889637", 402 | "avatar_normal": "//cdn.v2ex.co/navatar/c20a/d4d7/12_normal.png?m=1448889637", 403 | "avatar_large": "//cdn.v2ex.co/navatar/c20a/d4d7/12_large.png?m=1448889637" 404 | }, 405 | "created": 1450963153, 406 | "last_modified": 1450963288, 407 | "last_touched": 1450967971 408 | }, { 409 | "id": 245934, 410 | "title": "Django 中如何实现 url 自由配置", 411 | "url": "http://www.v2ex.com/t/245934", 412 | "content": "初学 web ,选了 Django 来开发一个博客程序,比如当前我所在的页面网址为\u000D\u000Ahttp://127.0.0.1:8000/2/\u000D\u000A然后页面内一个 btn 的 herf 想直接跳转到\u000D\u000Ahttp://127.0.0.1:8000/modify/2\u000D\u000ADjango 当前页面可以用 url, 比如可以写成\u000D\u000A\u003Cspan class \u003D \u0022link edit\u0022\u003E\u003Ca href\u003D\u0022{% url \u0027modify\u0027%}\u0022\u003Emodify\u003C/span\u003E\u000D\u000A但是这样最终发出的网址就是 http://127.0.0.1:8000/2/modify 了;\u000D\u000A而我想是发出 http://127.0.0.1:8000/modify/2\u000D\u000A该如何写呢?试了几种方法都编译报错。😓", 413 | "content_rendered": "\u003Cp\u003E初学 web ,选了 Django 来开发一个博客程序,比如当前我所在的页面网址为\u003Cbr\u003E\u000A\u003Ca target\u003D\u0022_blank\u0022 rel\u003D\u0022nofollow\u0022 href\u003D\u0022http://127.0.0.1:8000/2/\u0022\u003Ehttp://127.0.0.1:8000/2/\u003C/a\u003E\u003Cbr\u003E\u000A然后页面内一个 btn 的 herf 想直接跳转到\u003Cbr\u003E\u000A\u003Ca target\u003D\u0022_blank\u0022 rel\u003D\u0022nofollow\u0022 href\u003D\u0022http://127.0.0.1:8000/modify/2\u0022\u003Ehttp://127.0.0.1:8000/modify/2\u003C/a\u003E\u003Cbr\u003E\u000ADjango 当前页面可以用 url, 比如可以写成\u003Cbr\u003E\u000A\u0026lt\u003Bspan class \u003D \u0026quot\u003Blink edit\u0026quot\u003B\u0026gt\u003B\u0026lt\u003Ba href\u003D\u0026quot\u003B{% url \u0026#39\u003Bmodify\u0026#39\u003B%}\u0026quot\u003B\u0026gt\u003Bmodify\u0026lt\u003B/span\u0026gt\u003B\u003Cbr\u003E\u000A但是这样最终发出的网址就是 \u003Ca target\u003D\u0022_blank\u0022 rel\u003D\u0022nofollow\u0022 href\u003D\u0022http://127.0.0.1:8000/2/modify\u0022\u003Ehttp://127.0.0.1:8000/2/modify\u003C/a\u003E 了;\u003Cbr\u003E\u000A而我想是发出 \u003Ca target\u003D\u0022_blank\u0022 rel\u003D\u0022nofollow\u0022 href\u003D\u0022http://127.0.0.1:8000/modify/2\u0022\u003Ehttp://127.0.0.1:8000/modify/2\u003C/a\u003E\u003Cbr\u003E\u000A该如何写呢?试了几种方法都编译报错。😓\u003C/p\u003E\u000A", 414 | "replies": 11, 415 | "member": { 416 | "id": 80938, 417 | "username": "boyhailong", 418 | "tagline": "", 419 | "avatar_mini": "//cdn.v2ex.co/gravatar/c44c38834d429d06c537c451e6a4a119?s=24&d=retro", 420 | "avatar_normal": "//cdn.v2ex.co/gravatar/c44c38834d429d06c537c451e6a4a119?s=48&d=retro", 421 | "avatar_large": "//cdn.v2ex.co/gravatar/c44c38834d429d06c537c451e6a4a119?s=73&d=retro" 422 | }, 423 | "node": { 424 | "id": 431, 425 | "name": "django", 426 | "title": "Django", 427 | "title_alternative": "Django", 428 | "url": "http://www.v2ex.com/go/django", 429 | "topics": 174, 430 | "avatar_mini": "//cdn.v2ex.co/navatar/6636/8270/431_mini.png?m=1341249779", 431 | "avatar_normal": "//cdn.v2ex.co/navatar/6636/8270/431_normal.png?m=1341249779", 432 | "avatar_large": "//cdn.v2ex.co/navatar/6636/8270/431_large.png?m=1341249779" 433 | }, 434 | "created": 1450963099, 435 | "last_modified": 1450963099, 436 | "last_touched": 1450968323 437 | } 438 | ] 439 | --------------------------------------------------------------------------------