Python中不能安装python-docx的问题

python-docx是咱们常用的一个python中处理word文档的库,相对于VB来说,更容易学,也比较适合通过python作为胶水,将其他内容放在word中。然而很多时候安装python-docx会报错,如何解决呢?

0. 前提

必须使用的是windows系统,python-docx在mac os上是不能够工作的。

另外python-docx使用了lxml,而lxml的更新又不是那么快,所以导致了问题。

在命令行中,使用pip install python-docx安装

1. 问题提示

一般来说,大家看到的提示有这么几个:

  1. 提示vcvarsall.bat不存在。
  2. 提示 fatal error C1083: Cannot open include file: ‘libxml/xpath.h’: No such file or directory

2. 问题解决方案

对于上面两个问题,由以下方法解决:

  1. vcvarsall.bat不存在,是因为没有安装visual studio。可以到微软官网下载一个visual studio express并且安装。
  2. 再提示的libxml/xpath.h的错误,通常是因为lxml的安装有问题导致的。所以这里建议分两步安装,先安装lxml的非官方的包:lxml补丁包链接,然后再通过pip install python-docx即可。
    • 注意补丁包的选择,需要选择跟你的python版本对应的版本,例如如果你使用的是32位的python35,就需要选择lxml-3.5.0-cp35-none-win32.whl这个版本
    • whl包的安装:用命令行工具cd到whl目录,再pip install即可

Django中{% template tag %} 和 {{ variable }}应用

1. 概念

用两个大括号括起来的文字(例如 {{ variable }} )是 变量(variable) 。

被大括号和百分号包围的文本(例如 {% template tag %})是 模板标签(template tag)。标签(tag)定义比较明确,即:仅通知模板系统完成某些工作。

具体概念请见链接:

Django Template Language

https://docs.djangoproject.com/en/1.9/ref/templates/language/

2. 如何搭配应用?

注意template tag中不能够嵌套variable,所以如果需要同时使用的时候,用并列关系,而不是嵌套关系。

3. 举例

我有一个Movie的model,这个model的static_pic中存储了图片在静态文件夹的地址,静态文件夹通过{% load staticfiles %}先调用。

现在需要在template上显示图片,那么在src的双引号中,就需要把上面的静态文件夹和movie地址并列放在一起,如下

正确代码(注意下面这一段都在tag中)

img src=”{% static ‘movie/’ %}{{ movie.static_pic }}” alt=”{{ movie.name }}”

错误代码

img src=”{% static ‘movie/'{{ movie.static_pic }} %}” alt=”{{ movie.name }}”

这个错误代码会报这个错误:

Could not parse the remainder: ‘{‘ from ”movie/'{{‘

为什么呢?因为template tag中不能够嵌套variable,嵌套之后识别不出来。

类与封装(Class and Encapsulation) in Python

1 Why Class

(这篇文章是一篇新手级的文章,请高手绕道)

最初人们编程的时候都是用过程在编程。然而随着使用的深入,人们开始使用类。大概的进化过程是这样:

过程—> 过程+函数 —> 类 —> 类&子类……

我们作为一个初学者的时候,往往不明白为什么要用类,为什么不直接用过程就好了。Well, 简短的程序是可以用过程+函数,然而一旦要涉及到很多调用的情况,还是要有Class,让整个程序都可以看起来很清爽。

2 Class is an abstract of things

下面举一个例子:

Al在它的书里面第八章https://automatetheboringstuff.com/chapter8/讲了一个project(Project: Generating Random Quiz Files),就是讲的一个有一个地理老师,他管理了一个35人的班级,准备给他们出一套试题,考考美国的50个州和每个州的首府;由于有很多童鞋喜欢抄袭,所以这个老师就准备每个学生准备一份(美国老师好敬业啊,遥想读书当年,我们的老师最多就提过AB卷),然而如果人工来准备太麻烦了,所以老师决定自动化。

要解决的思路很简单,就是通过几个循环,将答案shuffle开就是,这里写一段伪代码讲讲大致思路:

“`
for 童鞋 = 1 to 童鞋总数(35):
随机打乱50题

for 每一题 = 1 to 题目总数(50):

生成正确的答案+错误的答案

打印问题到试卷文件中

打印答案到答案文件中
“`

具体思路请看Al的帖子https://automatetheboringstuff.com/chapter8/,搜索Generating Random Quiz Files。

新的问题

那么现在问题来了,如果是有一个中国的地理老师是你的朋友,准备跟国际接轨,考中国的34个省的省会,而班上有60位同学,你也准备每人准备一套试卷,要怎么准备呢?

有一个简单的方法就是改参数,然而,这样的问题是,可能而且程序也会显得很ad-hoc。如果又是另一个国家的又怎么办。如果这个地理老师下次再找到你,让你帮忙给班上58位同学准备有48道题的试卷呢?

3 Class Solution

所以这里提出类的方法。听过类的童鞋都知道类有『封装,继承,多态』三个属性。咱们这里会用到封装。

这里是将Al的方法改为Class之后的结果:

# -- coding: utf-8 --
# RandomQuizGenerator.py
import random

capitals = {'Alabama': 'Montgomery', 'Alaska': 'Juneau', 'Arizona': 'Phoenix',
            'Arkansas': 'Little Rock', 'California': 'Sacramento',
            'Colorado': 'Denver', 'Connecticut': 'Hartford', 'Delaware': 'Dover',
            'Florida': 'Tallahassee', 'Georgia': 'Atlanta', 'Hawaii': 'Honolulu',
            'Idaho': 'Boise', 'Illinois': 'Springfield', 'Indiana': 'Indianapolis',
            'Iowa': 'Des Moines', 'Kansas': 'Topeka', 'Kentucky': 'Frankfort',
            'Louisiana': 'Baton Rouge', 'Maine': 'Augusta', 'Maryland': 'Annapolis',
            'Massachusetts': 'Boston', 'Michigan': 'Lansing', 'Minnesota': 'Saint Paul',
            'Mississippi': 'Jackson', 'Missouri': 'Jefferson City', 'Montana':
                'Helena', 'Nebraska': 'Lincoln', 'Nevada': 'Carson City', 'New Hampshire':
                'Concord', 'New Jersey': 'Trenton', 'New Mexico': 'Santa Fe', 'New York':
                'Albany', 'North Carolina': 'Raleigh', 'North Dakota': 'Bismarck', 'Ohio':
                'Columbus', 'Oklahoma': 'Oklahoma City', 'Oregon': 'Salem', 'Pennsylvania':
                'Harrisburg', 'Rhode Island': 'Providence', 'South Carolina': 'Columbia',
            'South Dakota': 'Pierre', 'Tennessee': 'Nashville', 'Texas': 'Austin',
            'Utah': 'Salt Lake City', 'Vermont': 'Montpelier', 'Virginia': 'Richmond',
            'Washington': 'Olympia', 'West Virginia': 'Charleston',
            'Wisconsin': 'Madison', 'Wyoming': 'Cheyenne'}

NUM_OF_STUDENTS = 35
NUM_OF_QUESTIONS = 50


class RandomQuizGenerator():
    def __init__(self, capitals, number_of_students, number_of_questions):
        self.capitals = capitals
        self.number_of_students = number_of_students
        self.number_of_questions = number_of_questions
        self.quiz_file = None
        self.quiz_answer_file = None

    def run(self):
        # TODO create a loop of number_of_students quizzes
        for quiz_num in range(self.number_of_students):
            # Create the quiz and answer key files.
            self.init_quiz_file(quiz_num)

            # Generate random questions' order for each quiz.
            unique_states_list = list(self.capitals.keys())
            random.shuffle(unique_states_list)

            # loop through all 50 States, making a question for each.
            self.generate_one_quiz(unique_states_list)

            # Close the quiz_file and the quiz_answer_file
            self.close_quiz_file()

    def init_quiz_file(self, quiz_num):
        self.quiz_file = open('capitalsQuiz%s.txt' % (quiz_num + 1), 'w')
        self.quiz_answer_file = open('capitalsQuiz_Answers%s.txt' % (quiz_num + 1), 'w')

        # Write out the header for the quiz.
        self.quiz_file.write('Name:nnDate:nnPeriod:nn')
        self.quiz_file.write((' ' * 20) + 'States Capitals Quiz (Form %s)'
                             % (quiz_num + 1))
        self.quiz_file.write('nn')

    def close_quiz_file(self):
        self.quiz_file.close()
        self.quiz_answer_file.close()

    def generate_one_quiz(self, unique_states_list):
        for question_num in range(self.number_of_questions):
            # Generate wrong answers
            question_state = unique_states_list[question_num]
            correct_answer = self.capitals[question_state]
            wrong_answers = list(self.capitals.values())
            del wrong_answers[wrong_answers.index(correct_answer)]
            wrong_answers = random.sample(wrong_answers, 3)
            # Get the right answer and mingle with the wrong one
            answer_options = wrong_answers + [correct_answer]
            random.shuffle(answer_options)

            # Write the answer to the self.quiz_file
            self.quiz_file.write('%s. What is the capital of %s?n'
                                 % (question_num + 1, question_state.encode('utf-8')))
            for i in range(4):
                self.quiz_file.write(' %s. %sn' % ('ABCD'[i], answer_options[i].encode('utf-8')))
            self.quiz_file.write('n')

            # Write the answer to the self.quiz_answer_file
            self.quiz_answer_file.write('%s. %sn' % (question_num + 1,
                                                      'ABCD'[answer_options.index(correct_answer)]))

    def change_save_file_name(self, quiz_save_name, answer_save_name):
        # TODO The teacher can change the name of the save file.
        pass


def main():
    random_quiz_generator = RandomQuizGenerator(capitals, NUM_OF_STUDENTS, NUM_OF_QUESTIONS)
    random_quiz_generator.run()
    pass


if __name__ == '__main__':
    main()

¥¥¥¥¥¥¥¥¥¥¥我是文件的分界线¥¥¥¥¥¥¥¥¥¥

封装

你可能会说,这个看着比原来更复杂啊,然而,假如这个是拿给地理老师,他并不需要懂上面那一段,他只需要看懂下面这段代码就是了:

# -- coding: utf-8 --
# china_provincial_capital.py
import RandomQuizGenerator

capitals = {u'北京': u'北京', u'上海': u'上海', u'天津': u'天津', u'重庆':u'重庆', u'新疆': u'乌鲁木齐',
            u'黑龙江': u'哈尔滨', u'吉林': u'长春', u'辽宁': u'沈阳', u'内蒙古': u'呼和浩特', u'河北': u'石家庄',
            u'甘肃': u'兰州', u'青海': u'西宁', u'陕西': u'西安', u'宁夏': u'银川', u'河南': u'郑州',
            u'山东': u'济南', u'山西': u'太原', u'安徽': u'合肥', u'湖北': u'武汉', u'湖南': u'长沙',
            u'江苏': u'南京', u'四川': u'成都', u'贵州': u'贵阳', u'云南': u'昆明', u'广西': u'南宁',
            u'西藏': u'拉萨', u'浙江': u'杭州', u'江西': u'南昌', u'广东': u'广州', u'福建': u'福州',
            u'台湾': u'台北', u'海南': u'海口', u'香港': u'香港', u'澳门': u'澳门'
}


if __name__ == '__main__':
    total_question = len(capitals)
    total_students = 6
    china_capital_quiz = RandomQuizGenerator.RandomQuizGenerator(capitals, total_students, total_question)
    china_capital_quiz.run()

是不是要清爽很多?但为什么这么短呢?因为你把题目封装了,封装将详细的方法隐藏了,所以Class只需要被调用就是;具体的实现,只需要操作一个很小的文件就是了。

继承、多态

可能有同学会说:『我用过程去改一下输入输出也可以做这件事哦』。嘿嘿,好像是可以;然而假如你面对的不是一个地理老师呢?如果是还有其他老师,选择题的选项不止4个怎么办?又拿原来做好的过程文件去改;还是用Class中拉一个subclass出来呢?很明显答案是subclass更好。首先可以继承原来的Class,然后还可以在这个Class上做改变。整个程序也会更清晰。

Some Trivias

  • 如果要用中文,记得输入的时候将中文decode为Unicode,然后输出字符串的时候,再encode为utf-8。

百度云linux下载上传器bpcs_uploader

目标:
在VPS中,将文件上传下载(主要是上传)到百度云。

端到端流程:
1. 首先,有一些文件可能在国内比较难下载到,但在国外比较好下载。
2. 这时候,可以用国外的VPS主机,先wget文件到VPS上。
3. 然后再通过此工具-bpcs_uploader,传到百度云上。
4. 最后再在自己的PC/MAC上,通过百度云下载即可。

bpcs_uploader的下载地址&具体流程
看这个链接即可,也挺简单的。
https://github.com/oott123/bpcs_uploader
注意上传之后的文件是在以下的文件夹中,不要搞错了。
百度网盘/我的应用数据/应用名(bpcs_uploader)

爬虫中如何科学上网

为什么爬虫也要科学上网

因为有时候我们还想spider一下外面的世界,油管小鸟谷歌什么的,这时候肯定要出去啦。

构成

简单的科学上网爬虫,我们一般会做这么几件事情。第一是set-up,然后是Request请求(headers来spoof browser),然后是打开页面读取内容,最后是分析并且获取内容。

详细操作

  1. Set-up
  • opener。其中opener包含了proxy作为其中一个handler。对于ProxyHandler,其中包含的proxy必须为一对一对的。

    proxyhandler = urllib2.ProxyHandler(‘http’: ‘proxy地址’,’https’: ‘proxy地址’)

    上面的proxy地址,一般为一个类似于blah.blah.com:8080这样的字符串,包含了地址和端口。

  • 如果需要urllib2.urlopen全部都使用该opener的话,安装这个opener。否则不用安装,在需要使用该opener的时候调用该opener即可。
  1. urllib2.Request是一个URL Request的abstraction,包含了url,headers等参数。urllib2.Request(url, data, headers, originreqhost, unverifiable)
    • headers:因为有很多网站以及proxy对爬虫不太友好;。我们通常需要用headers来伪装成一个浏览器。另外referer有时候也有需要。

      headerinfo =
      ‘User-Agent’:’Mozilla/5.0 (Macintosh; Intel Mac OS X 10105) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36′,
      ‘Proxy-Connection’: ‘keep-alive’,
      ‘Connection’:’keep-alive’

      req = urllib2.Request(url, headers = headerinfo)

  2. 打开页面读取内容这一步没有什么特别的。无非就是

    response = urllib2.urlopen(req)

    content = response.read()

  3. 分析并且获取内容这里涉及到正则表达式,数据分析,数据保存等等问题,这一块涉及到的问题比proxy这块多得多。以后再学习添加相关内容。

小结

这只是爬虫中的一个trick。不过如果使用proxy的时候,记得看看你的proxy服务有没有对爬虫限制哦。

面向对象的爬虫(以百度贴吧为例)

其实很早就学过python的正则表达式了,然而一直没有很好的实践,直到最近在网上找到这个帖子,做了一个爬虫出来,效果还挺好。代码就不贴了(可以到原帖找),这里记一下我写的思路。

 

Step 1 设定目标
Step 2 定义一个爬虫类,包含两个methods:一个初始化、一个获取页面信息
Step 3 定义更多的methods,来使用正则表达式提取内容,包含

  1. 帖子标题
  2. 帖子的总页数
  3. 帖子的正文内容
Step 4 使用re,对正文内容进行进一步整理。并且为了方便重用,把这个封装成一个类
Step 5 加上行号
Step 6 保存在文件中
Step 7 写外面的大循环,将每一页都循环出来
Step 8 问答式GUI
  1. 设定目标

1.对百度贴吧的任意帖子进行抓取

2.指定是否只抓取楼主发帖内容

3.将抓取到的内容分析并保存到文件

  1. 定义一个爬虫类:BaiduTieba

方法:

Init 初始化。 属性包含BaseURL,seeLZ的标志。
getPage 获取页面 通过URL获取到页面的内容,以便于后面通过RE进行处理

 

如果在内网或者要通过proxy,还需要定义proxy_handler,然后写到opener之中。

 3. RE处理

内容(red is for 提取) RE 分析 作用
帖子标题

getTitle(self, page)

<h3 class=”core_title_txt pull-left text-overflow  ” title=”纯原创我心中的NBA2014-2015赛季现役50大” style=”width: 396px”>纯原创我心中的NBA2014-2015赛季现役50大</h3> <h3 class=”core_title_txt.*?>(.*?)</h3> 得到的帖子标题,可以在后面用于保存文件时使用
帖子的总页数

getPageNum(self, page)

<li class=”l_reply_num” style=”margin-left:8px” ><span class=”red” style=”margin-right:3px”>140</span>回复贴,共<span class=”red”>5</span>页</li> <liclass=”l_reply_num.*?<span.*?>(.*?)</span>.*?<span.*?>(.*?)</span> 由于这个class出现了4次,所以需要以更严格的RE来筛选。注意这个公式里,我用的gorup(2)表示的总页数 可以写循环,让每一页都被拔下来
帖子的正文内容

getContent(self, page)

<div id=”post_content_…>……</div> <divid=”post_content_.*?>(.*?)</div>

4. 通过REcontent进行进一步处理

为了方便以后重用,将这个写作单独的一个class<Tool>

内容 代码 分析 RE
图片 <img class=…> 删除
超链接tag <a …>…</a> 删除
换行tag <tr>|<div>|</div>|</p> n
制表符 <td> t
段落开头 <p> n+2space
换行,双换行 <br><br>|<br> n
其他标签 <.*?> 删除

 

5. 加上行号

很简单,在writeContent的时候加上计数器即可

6.保存在文件中

Self.file = open(“xxx.txt”, “w+”)

Self.file.write(content)

7. 外面的大循环

其实这里就是要将getPageContent(pageNum)这个动作函数化

 8.问答式GUI

这里可以用一个问答式的GUI询问用户想看的内容。

这个如果做到后面,也可以 做成GUI

人生需要经营,就跟游戏一样

前一段时候在玩一个经营游戏,叫做Cities in Motion。基本上是讲的如何在一个没有公交系统的公司,通过很少的启动资金,建立一个公交帝国的故事。

最开始玩得时候,觉得这个游戏好复杂,其中的指引系统做得好差,差点就把它删除掉了。特别在建立地铁线路的时候,好难建好一条线路。但后来我再多琢磨琢磨,发现这个游戏不就是还原了真实的情况吗?所以就接着玩了下去。

游戏吸引我的地方

经营。人生就是一场经营,公司也不例外。这里面包含有很多经营元素,比如首先要知道哪些群体有运输需求(Blue collar, tourist, etc.),他们的起始地和目的地分别在什么地方,你有多少钱能够摊多大的摊子,哪些区域的交通需要优先解决,以及什么时候借钱扩张,经济局势又是如何。只有掌握好了这些局势之后才能够开好一个交通公司。我记得在读projectup.net的文章中,讲到人生都是需要经营的。如果有一个好的点子没有实现,顶多是错过了成为CEO迎娶白富美走向人生巅峰的机会;而如果经营得不好,人生会变得miserable。

一般的玩法

经过有城市破产,有城市成功,也总结出来一套经验;一般来说,

  1. 开始都是在一个区域铺设bus line,
  2. 然后再通过电车(trolley, tram)将这些bus line串起来。这一般来说就会花掉前面的启示资金,
  3. 然后要么就是等,要么就需要去贷款修地铁,修地铁是压力最大的,尤其是还不知道地铁有多大revenue return的时候,而自己每周都需要还年利率100%以上的贷款。所以修第一条线路,最需要解决的是市场需求量最大的连接需求,通常需要将blue collar, white collar, downtown, factories连接起来。(还好游戏中可以暂停之后建地铁,不用担心贷款一直在那里烧啊烧。然后如果运气好的话,越来越多的人会来采用公共交通出行,
  4. 这个时候公司的商业价值就会慢慢上涨,等到涨到一定时候,借钱就会更加容易一点。这时候可以比第一次借钱以更低的利率借到更多的钱,然后依次修更多的线路,将人们连接起来。

启示

  1. 要专业,不要业余。最开始玩的时候各种业余,包括以为waypoint就是bus stop;包括不知道公交线路实际上都是来回的(在城市里面看到的大多数在两端都有设计depots,所以感觉是单向的)。还包括没有看到单行道,所以将轨道架反方向了,也包括地铁轨道设计的太弯,所以轨道没有连接起来。
  2. 最初都要承受压力;有多大的野心,就需要承担多大的压力。这个尤其是在最初的贷款的时候。如果最初不贷款,只能够以很慢的速率发展,而如果要贷款的话,就需要一直投入。其实人生也是一样,买房子的时候也要贷款,贷款就意味着压力。然而不贷款只是抱残守缺的话,自己也发展不了。
  3. 不要以为玩了一个游戏就懂交通了。我下载了一个城市的城市交通设计报告,一共有96页,里面分析了市外/市内交通:市外主要是道路、铁路、机场、轮渡;市内就包括了公交(bus,地铁)。另外还有提出交通发展得目标和详细规划。才知道交通细讲起来有很多学问,包括经济、地理、人口、交通现况等等。我看到的报告中,就涉及到一个精细度,例如说
    • “某条路高峰期已经10000pcu/hr,已经趋于饱和”;PCU: passenger car equivalent,是一种记录一条道路上汽车的方法,一般的四门车都是算的1,bus/truck算3.5,自行车算0.2,摩托车算0.5。
    • “内环的车站300m覆盖达到xx%,500m覆盖达到yy%”;这个就是车站半径圆的覆盖;如果在300到500m以内人们一般还是愿意走的,多了就不想了。
    • 交通规划目标是“内环达到轨道交通+步行;内环外达到轨道交通+巴士”。

    遂感叹游戏只是小儿科,生活才是真正的经营。

其实游戏还只是游戏,是生活中的奢侈品,而真正把人生经营好,需要更多的投入。所以一旦已经能够成功挑战游戏中的设定了,就可以删除游戏,好好过自己的生活了。我之所以写下这篇,也是有一些迷茫,遂找游戏玩作为安慰;玩过之后,觉得做下总结,纪念一下我花在不重要也不紧急这个象限上的时间。大家懂得怎么经营人生的还是好好经营人生吧。

人民币贬值面面观

最近美元兑人民币都到6.41了,觉得人民币实在跌得太快,所以作为一个还喜欢读经济新闻的人,我也去关心一下这个事情。

今天在网上看到去年一篇旧闻,讲到了人民币贬值升值是有周期的,现在看来确实如此,人民币兑美元最近已经到2011年的水平了,6.41。
[http://finance.qq.com/original/caijingguancha/f1070.html]

预测贴

这个帖子在7月24日预测了2015年8月10日发生的贬值
[http://www.wenxuecity.com/news/2015/07/26/4441031.html]
7月24日,媒体公开报道了一个文件:国务院办公厅印发的《关于促进进出口稳定增长的若干意见》,一共有七条内容,其中第二条内容分明在暗示:人民币汇率将有小幅贬值。发文详见如下:[http://www.gov.cn/zhengce/content/2015-07/24/content_10031.htm]

第二条内容全文如下:

保持人民币汇率在合理均衡水平上基本稳定。完善人民币汇率市场化形成机制,扩大人民币汇率双向浮动区间。进一步提高跨境贸易人民币结算的便利化水平,扩大结算规模。研究推出更多避险产品,帮助企业规避汇率风险,减少汇兑损失。

这段话里最重要的是“扩大人民币汇率双向浮动区间”。这是什么意思?简单说来,中国对汇率的管理是这样的:在银行间即期汇率市场上,官方每天给出人民币对美元等的中间价,然后允许市场围绕这个中间价波动。最初的波动幅度是上下各0.3%,后来逐步增加到上下各2%。文件里这句话的意思是,今年年内也许会将波动幅度增加到上下各3%。

事情的经过

貌似这次贬值是中国银行自行发起的:中国人民银行8月11日宣布改变人民币对美元汇率中间价报价而引发人民币出现接近2%的一次性贬值(source:[http://www.voachinese.com/content/voa-news-dc-expert-on-rmb-20150812/2914885.html])
请小心服用以下内容,这是VOA采访的专家的回答,并没有经过其他人验证:
问:中国人民银行说,此举是为了完善人民币对美元汇率中间价报价。你认为他们这样做的动机是什么?希望通过此举达到什么目的?

答:你无法在一个多星期的时间里“完善”汇率,所以这部分的说法毫无意义。人民银行希望看到人民币既有上行压力也有下行压力,否则会出现汇率偏差,国际货币基金组织也有另外的一个理由,说人民币没有做好成为储备货币的准备。
问:你认为让人民币贬值的举动与中国最近疲软的出口数据以及经济下滑没有任何关系?
答:这只是2%的贬值。如果它是对出口或是经济增长整体疲软感到担心的迹象的话,那么这表明他们对这些事情并不是太担心。
问:如果此举与中国的出口下滑以及经济放缓没有关系的话,为什么中国当局现在采取这样一个举动?与美联储可能加息有关吗?
答:中国很可能认为美联储会在9月加息,从而加大人民币贬值的压力。在这种情况下,现在让它贬一点值意味着中国稍后不会在压力之下还让它贬值,或是承担失去信誉的风险。
问:这次贬值对中国经济会有什么影响?
答:几乎没有什么影响。出口对于中国的增长来说没有那么重要,而且2%的贬值对于出口影响不大。中国经济必须看到强有力的基于市场的改革,否则它会继续逐步减弱。
问:此举是否会引发亚洲地区新一轮的货币竞相贬值?
答:中国方面可以说,该地区的其他国家已经在竞相让自己的货币贬值。韩元过去一年对人民币贬值的幅度超过了10%,日元对人民币贬值接近20%。如果出现更多的贬值,那不是中国的错。

对经济的影响

围绕着股市、楼市的利益群体,以及大国企,都不希望人民币贬值。愿意看到贬值的,是制造业,特别是市场在外的中小企业。

人民币的坚挺,让中国制造业在最近几年竞争力下降,日子越来越难过。房地产好的时候,国家可以不太在乎出口;但房地产不行了,家里缺了顶梁柱。启动股市又遭遇挫折,所以最近领导人又在强调“实体经济”。而上面这个文件,其实就有呼应支持实体经济的意思。

但毕竟中国还有求于人,人民币较大幅度贬值是不可能的,对自己也不好。但增加波动幅度,以市场化的名义,让人民币对美元贬值一两个百分点,显然是可能的,也是非常有必要的。

而且我认为,当人民币纳入SDR这件事尘埃落定之后,无论成功与否(不成功,就要再等5年),2016年人民币都需要对美元贬值5%到10%。否则,实体经济过不了这个坎儿。想想看,日元和欧元最近一年多,对人民币贬值了多少吧!他们正在偷走我们的活力和机会!

人民币适度贬值,对中国整体而言是好事,对于搞实业走正道的人,也是好事。当然,对于“玩资产泡沫”的人来说,这不是好消息。

人民币汇率进入贬值周期,将促使大量对赌人民币升值的国际资本在短期内流出中国,进一步加剧国际资本流出,形成恶性循环。这会造成国内局部流动性不足并推升市场利率,最终导致房价、地价、收藏品等资产价格下跌,引发银行等金融系统的债务安全性。

  • 股市下跌
  • 房价下跌
  • 有外汇贷款的企业负担加重
  • 出口型企业收入增多

    对股市的影响

    (img)
    当美元趋势性升值的时候,A股倾向于下跌,而美元呈贬值态势时,A股将会上涨。最近美元升得厉害,而A股直接从4000点跌到了3000点以下。

    对房价的影响

    过去10多年房价持续上涨,使得拥有房产或土地的企业及个人的财富迅速增长,大量资本向房地产行业聚集。企业也热衷于搞房地产开发,房价高企使得实体经济的经营环境恶化,所以许多经营资本退出实业后投资于房地产。
    此外,过去8年人民币汇率不断升值也引来国际资本涉足中国房地产,同时推升外汇占款,增加货币投放。
    随着美国经济复苏,美联储退出量化宽松政策对全球的影响主要体现在资金流动变化和美元价格上,短期来看,会使跨国资本回流美国和美元走强,包括中国在内的新兴市场国家将面临资本出逃和本币贬值的压力。
    美元走强、人民币汇率下跌将导致很多持有美元贷款的企业债务负担加重,利润大幅下降,也将导致中国房企的海外融资成本和汇率风险增加。房企在海外融资的难度将加大,甚至可能被迫抛售房产以应对流动性危机,而大量卖房就会增加市场供给,房地产价格下降。

    对实业的影响

    文中没有分析,但貌似对于这种出口产品到国外的企业来说还是好事情。

为什么要贬值

[http://www.quora.com/China-Currency-Devaluation-August-2015/Why-did-the-Peoples-Bank-of-China-devalue-Chinas-currency-the-yuan-renminbi?redirected_qid=717876]
Quora上Dhaval Sampat的答案比较在理

  1. GDP增速已经降到7%,而房产又不给力,需要有实体经济推动。
  2. Export也降到了近年来最低。
  3. 人民币浮动汇率空间增大
  4. 增加RMB在世界上的地位,Special Drawing Right’s basket. 现在USD, JPY, EUR在里面。

总结

贬值这个事情是国家发起的,促进经济增长的一个手段,只希望中国的实体经济能够起来。本文的内容大部分来自于以下几个链接:
[http://finance.qq.com/original/caijingguancha/f1070.html]
[http://www.wenxuecity.com/news/2015/07/26/4441031.html]
[http://www.quora.com/China-Currency-Devaluation-August-2015/Why-did-the-Peoples-Bank-of-China-devalue-Chinas-currency-the-yuan-renminbi?redirected_qid=717876]

曲径不能通幽,红杏尚能出墙?

看到这个标题,大家是不是觉得我要八卦一下哪个哪个明星出轨的消息了?不过为啥我的tag还是technology相关的呢?因为我今天想要讲的是梯子。

今天某个服务正式宣布挂了,让我先来默哀一阵。。。。。。

不过我觉得,其实当这个服务几个月前说自己不再接受新用户的时候,我就大概猜到结局了,只是没有来得那么猛烈而已。如今一下子挂了,一个是会立马去找另外的梯子,还有就是会默哀缅怀一下了。

可能你会说,既然用梯子这么麻烦,为什么还要这么麻烦去用呢?

为什么我要用梯子?

因为可以看到更美好的世界啊

其实我记得四五年前周边就有人用起了梯子。然而,那会儿就觉得推特太吵了,我们这种专注于技术的不去。后来又过了一两年,Google也经常挂了,当时我就很火大,再怎么说我的主油箱也是Google的好不好。所以就开始用起了梯子。

不用不要紧,一用才知道有多好,

  • 首先,我可以通过全世界最大的英文搜索引擎搜索到我想要的东西了,而不是一天都是看各种广告。
  • 其次,我的各位朋友们有很多在海外的在用f,我也能够上F跟他们交流。
  • 再次,油管是个好东东,娱乐教育两不误。记得有一段时间玩minecraft,在油管上各种查找各种红石机关怎么做,好不惬意。

梯子的展望

然而,现在的梯子已经在开始被搬了,这是一个坏事。少了Google能够查找到的东西都少的多。所以要怎么办呢?哈哈,我也不知道,可能就站在墙头了,可能建了一个云梯上去了,可能留在这边打孔当土行孙了,也可能肉身翻了。

所以其实每个梯子相关的问题,最终都是个人问题,如果你觉得呆着爽,可以不用梯子。如果你觉得你想看得更多,可能都不会满足于梯子。无论是什么目标,加油吧。

WordPress架构浅析

 首先来理解一下,什么是Wordpress

技术上,Wordpress其实就是别人写的php文件的组合。

产品上,Wordpress有一个相应的架构,让blogger能够更好的写日志。对于很多blogger来说,买别人的主题+配置一下就可以了。

如果要自己搞主题,那么就要懂一点点PHP代码,并且要将Wordpress的架构搞清楚。

WordPress架构

每个主题至少要有这两个文件 – style.css 和 index.php。index.php 告诉主题中所有的元素如何布局,style.css 则告诉主题中所有的元素该如何展示,以及它们的样式。

一般来说,Wordpress中包含了这些文件:

• style.css

• index.php

• home.php

• single.php

• page.php

• archive.php

• category.php

• search.php

• 404.php

• comments.php

• comments-popup.php

• author.php

• date.php

定制化

首先理解一下,Wordpress中每个博客页面是由多个模板文件组合而成的,然后就可以做相应的定制。

wordpress page generator

Header template files

通常在这个文件中包含博客的标题(title)和描述(description)。而且它们通常在整个博客中都是一样的。

Index template files

这个模板文件包含你的日志的标题,日志的内容(就是每篇日志的文本和图片)和日志的元数据(元数据是每篇日志的额外信息,如作者是谁,日志发布的时间,在哪个分类下,有多少留言等等)。

Sidebar template files

这个模板文件主要用于控制博客的页面列表,类别列表,存档列表,友情链接列表和其他一些列表。

Footer template files

像 header.php 模板文件一样,footer.php 通常不会因为页面的改变而改变,你可以在这里放置任何东西,但是通常是版权信息。

层次结构

下面的这幅图中显示了一旦你主题中的某个文件丢失了,WordPress 主题系统将会使用其他什么模板文件来代替。

2015-07-18 at 11.34Wordpress主题层次结构

(内容来自于我爱水煮鱼,他的教程网址如下:http://blog.wpjam.com/article/wp-theme-lessons/)