Before doing real calculations, several parameters (e.g. energy cut-off, k-points, lattice, …) must be checked to ensure the quality of calculations. This article provides sciripts about convergence test based on ASE (version >= 3.14.0) and VASP 5.4.1. Different styles will be adopted to exemplify different ase-vasp features.
用VASP优化TiO2_anatase晶格常数(a, c)
对一系列固定体积的结构进行弛豫,然后根据birch-murnaghan拟合E-V曲线,得到基态的平衡体积$V_0$。得到平衡体积之和再优化形状,得到a,c的值。
Windows平台上通过VirtualBox安装centos虚拟机
首先,点击我的电脑右键查看系统属性,查看系统是32位还是64位。 之后根据操作系统的类型下载相应的VirtualBox和centos,并安装VirtualBox。 打开任务管理器,查看虚拟化是否开启。若未开启,需在开机时进入BIOS设置(各厂商快捷键不同,一般为F2或F10)开启虚拟化。
Python:最长按字母顺序排列的子串
这是edX上Introduction to Computer Science and Programming Using Python第一周的一个练习题,题目是这样的:给你一个由小写字母组成的字符串s,请你输出按字母顺序排列的最长的s的子串
《Think Python》(3):列表、字典、元组
第十章 列表
- 列表是可变的,列表中的值称为元素(element),或列表项(item)。
列表添加元素(返回值均为none):
- append可以在列表尾部添加新的元素:
t.append(str)
; - extend可以接受一个列表作为一个参数,并将其所有元素添加到列表中:
t1.extend(t2)
; t = t + [x]
(需要新建list,耗时太长)。
- append可以在列表尾部添加新的元素:
列表删除元素:
- pop修改列表,并换回被删除掉的值。如果不提供下标,它会删除并返回最后一个元素:
x = t.pop(index)
- del操作符:
del t[n]
- remove删除列表中的某个元素,返回值为none:
t.remove(element)
- pop修改列表,并换回被删除掉的值。如果不提供下标,它会删除并返回最后一个元素:
把Wordpress和Tumblr连接起来
创建Tumblr app
- 登陆Tumblr。
- 打开Tumblr开发者界面注册。app:http://www.tumblr.com/oauth/apps。
- 记录OAuth Consumer Key和Secret Key。
把Wordpress已有的文章上传到Tumblr
- 打开http://wp2tumblr.jonthornton.com/ 并连接Tumblr。
- 选择你想把文章导入到哪一个Tumblr博客。
- 上传由Wordpress导出的xml文件,提交即可。
新发布的文章自动发布到Tumblr
- 安装NextScripts: Social Networks Auto-Poster插件。
- 添加Tumblr账号,把OAuth Consumer Key、Secret Key、Tumblr url加上去。根据需求对标题和正文进行修改。
- 测试成功之后即可保存设置。
将自定义域名绑定到Tumblr
- 进入域名的DNS设置页面,添加如下记录
backup A 66.6.44.4
- 进入Tumblr博客的设置页面:https://www.tumblr.com/settings/blog/diwater
- 编辑Tumblr URL,选择Use a custom domain,输入backup.diwater.me。
- Test domain成功后保存,这样就完成了域名绑定 Tips:官网上的配置目前是行不通的
Domain | Configuration |
---|---|
Two Levels (e.g. mywebsite.com) |
point A-record (IP address) to 66.6.44.4 |
Three or More Levels (e.g. www.mywebsite.com, blog.mywebsite.com, or mywebsite.co.uk) |
point CNAME record to “domains.tumblr.com” |
按理说backup.diwater.me是属于Three or More Levels,但是你按CNAME的方式绑定域名,它会出现这样的错误提示:
This subdomain’s CNAME is not pointing to Tumblr. Please change the CNAME to: domains.tumblr.com
当你打开自定义的域名时,你会看到一个Tumblr的error页面,这意味着你的自定义域名已经指向了Tumblr,但是博客里面没有进行设置。而当你进行设置的时候又会出现上面的错误提示,所以还是按A记录的方式绑定域名比较方便。
完成上述之后就把Wordpress和Tumblr连接起来了。
Python:最长回文子串
最长回文子串是hihocoder上的一道练习题,hihocoder只支持C、C++、Java,不支持Python。目前在学Python,看到这个题恰好能做就做了一下。Leetcode是支持python的,以后可以在leetcode上练练。
小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。
这一天,他们遇到了一连串的字符串,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能分别在这些字符串中找到它们每一个的最长回文子串呢?”
小Ho奇怪的问道:“什么叫做最长回文子串呢?”
小Hi回答道:“一个字符串中连续的一段就是这个字符串的子串,而回文串指的是12421这种从前往后读和从后往前读一模一样的字符串,所以最长回文子串的意思就是这个字符串中最长的身为回文串的子串啦~”
小Ho道:“原来如此!那么我该怎么得到这些字符串呢?我又应该怎么告诉你我所计算出的最长回文子串呢?
小Hi笑着说道:“这个很容易啦,你只需要写一个程序,先从标准输入读取一个整数N(N<=30),代表我给你的字符串的个数,然后接下来的就是我要给你的那N个字符串(字符串长度<=10^6)啦。而你要告诉我你的答案的话,只要将你计算出的最长回文子串的长度按照我给你的顺序依次输出到标准输出就可以了!你看这就是一个例子。” 样例输入
3 abababa aaaabaa acacdas样例输出7 5 3我是这么想的,把一个字符串和字符串的子串都检查一边,是回文的话就把子串的长度和子串作为一个turple储存在一个list里面。然后list降序排列,第一个结果就是最大回文了。def check_huiwen(s): return s == s[::-1]
def max_huiwen(s): n = len(s) new_list = list() for i in range(1, n+1): for j in range(n-i+1): huiwen = s[j:j+i] if check_huiwen(huiwen): new_list.append((len(huiwen),huiwen))
new_list.sort(reverse=True)
print new_list[0][0]
判断一个字符串是不是回文很简单,直接判断它和它逆序的list的值是否相同即可。 找最大回文子串的时候,第一个循环控制子串的长度,第二个按起始位置循环遍历每一个子串,是回文的就存储起来,然后排序,最后输出。 这是《Think Python》里介绍的典型的DSU模式:
- 修饰(Decorate):构建一个元组列表,在序列元素之前放置一个或多个排序键。
- 排序(Sort):给这个序列排序,并。
- 去修饰(Undecorate):抽取排好序的序列中的元素。 补充资料:http://leetcode.com/2011/11/longest-palindromic-substring-part-ii.html
未完待续。
2015-01-08
从主机91搬到了DigitalOcean
去年差不多这个时候开始准备搭建个人博客,发现Wordpress上手还是比较方便的。那段时间经常看我爱水煮鱼的教程,里面推荐了香港的虚拟主机服务商主机91为新手用。虚拟主机的好处就是不用担心维护的问题,开发环境、数据库各方面都给你准备好了,cPanel集成的功能也很方便,文件管理也可以在线进行。无奈还是觉得有点贵,而且绑定多个域名比较麻烦,所以就想着换一个了。主机91的配置大概是这样的:
- 1G空间、2个网站、SSD
- 不限数据库大小、不限流量
CloudLinux系统 总价格是一年480,刚开始买的时候只有500MB,后来免费升级到了1G,当时还觉得挺好,后来看到DigitalOcean的配置简直吓尿了。
512MB内存
- 单核CPU
- 20GB SSD空间
- 1TB流量 这个是5刀一个月,linode也有类似的方案不过没有5刀的。这个配置感觉够用就买了这个,正好paypal可以用银联,即便它不支持支付宝也可以很方便的付款。之前用91的时候进后台有时还会卡卡的,换到DO之后才发现这才是SSD啊,虽然买的是San Fancisco的VPS,但连接速度快的飞起。在Wordpress后台升级的时候简直惊呆了,几乎瞬秒。测试的时候下了Jetpack,好像有个七八兆,瞬间就下完装好了。相比之下之前的虚拟主机简直是渣渣。
数据的转移比想象中要方便得多得多,DO把一个VPS叫做droplet,在创建droplet的时候可以选择机房(比如纽约、伦敦、新加坡)、操作系统、常见的开发环境(node.js、lamp、wordprees、Ghost等)。真的是一键安装,太方便了,不到一分钟就好了。备份可以选择自动备份服务(大概多占20%的费用),也可以手动snapshot,如果你想换个机房,直接从镜像还原即可,真的是人性化。Droplet创建好之后,要为初次运行Wordpress做准备了。在/root下有一个隐藏的文件.my.cnf,打开之后里面是mysql的初始密码。/root下的Wordpress文件里面有Apache保护Wordpress的用户名和密码。为了方便数据库管理可以自己安装phpmyadmin,在命令行里输入
apt-get install -y phpmyadmin安装的时候选择Apache,mysql密码上面说到了,然后在/etc/apache2/apache2.conf的最后一行添加
Include /etc/phpmyadmin/apache.conf然后重启Apache服务器
service apache2 restart原本以为迁移还需要手动导入数据库,结果发现完全不需要。在Wordpress后台选择从Wordpress导入,然后它会自动安装插件,从之前的网站导出xml,导入到现在的网站同时下载附件。一键就解决了,又感受到了Wordpress的强大,简直不能更方便。还以为要手动上传图片等一些资源到wp-content/upload,现在完全不需要了。
DO还有一个好处就是IP是完全独立的,这个太赞了。这样一年下来60刀,比去年的便宜了100多,而且性能还提高了,哈哈。DO好像是按天扣费的,不是一次付清,现在也没什么钱了,年费也不怎么付得起。总之DO完爆主机91
《Think Python》(2):递归、迭代、字符串、搜索
第五章 条件和递归
- 无限递归时会报错:RuntimeError: Maximum recursion depth exceeded
- input():返回的是float或int,而raw_input():返回的是str,实际上input = eval(raw_input())
- int(“12.2”)是无法起作用的,如果想把输入的数字转成整形可以直接用int(input(x)),也可以用int(float(raw_input()))。简而言之,int只能把浮点或者整数形式的str转成整数,无法把浮点形式的str转成整数。
- 嵌套条件语句会很快随着嵌套层数增多而变得非常难阅读,通常可以用逻辑操作符来简化嵌套条件语句。
第六章 有返回函数
增量开发的关键点:
- 以一个可以正确运行的程序开始,每次只做小的增量修改。如果在任意时刻发现错误,你都应当知道错误在哪里;
- 使用临时变量保存计算的中间结果,这样你可以显示和检查它们;
- 一旦整个程序完成,你可能会想要删除掉某些脚手架代码或者把多个语句综合到一个复杂的表达式中。但只在不会增加代码阅读的难度时才应该那么做。
再谈递归——“坚持信念”:当你遇到一个函数调用时,不去跟踪执行的流程,而假定函数是正确工作,能够返回正确的结果。
- 递归调试举例:
def factorial(n): space = ‘ ‘ (4 n) print space, ‘factorial’, n if n == 0:
else:print space, 'returing 1' return 1
recurse = factorial(n-1) result = n * recurse print space, 'returing', result return result
“””factorial(5) output factorial 5 factorial 4 factorial 3 factorial 2 factorial 1 factorial 0 returing 1 returing 1 returing 2 returing 6 returing 24 returing 120 “””
第7章 迭代
- 初始化、增量、跳出
第8章 字符串
- 字符串是不可变的:你不能修改一个已经存在的字符串。你能做的最多是新建一个字符串,它和原来的字符串稍有不同。
- in是一个布尔操作符,操作于两个字符串上,如果第一个是第二个的子串,则返回True,否则返回False。
- str[index]:index为下标,从0开始到len(str)-1为止,str[-1]表示倒数第一个字母。
- str[n:m]:返回下标n~m的字母。
第9章 案例分析:文字游戏
#Chapter 9 Words Game #Exercise 9-1 def print_word(): fin = open('words.txt') for line in fin: word = line.strip() if len(word) > 20: print word #Exercise 9-2 def has_no_e(word): if 'e' in word: return False else: return True def print_no_e(): fin = open('words.txt') sum = 0 sum_e = 0 for line in fin: word = line.strip() if has_no_e(word): print word sum_e = sum_e + 1 sum = sum + 1 print float(sum_e)/sum #Exercise 9-3 def avoids(word, str): for letter in word: if letter in str: return False return True #Exercise 9-4 def uses_only(word, str): for letter in word: if letter not in str: return False return True #Exercise 9-5 def use_all(word, required): for letter in required: if letter not in word: return False return True #Exercise 9-6 def is_abecedarian(word): i = 0 while i < len(word)-1: if word[i+1] < word[i]: return False i = i+1 return True #Exercise 9-7 def is_triple(word): i = 0 count = 0 while i < len(word)-1: if word[i] == word[i+1]: count = count + 1 if count == 3: return True i = i + 2 else: count = 0 i = i + 1 return False def print_triple(): fin = open('words.txt') for line in fin: word = line.strip() if is_triple(word): print word #Exercise 9-8 def is_huiwen(num, start, len): s = str(num)[start:start+len] return s[::-1] ==s def check(i): return (is_huiwen(i, 2, 4) and is_huiwen(i+1, 1, 5) and is_huiwen(i+2, 1, 4) and is_huiwen(i+3, 0, 6)) def print_huiwen(): i = 100000 while i < 999999: if check(i): print i i = i + 1 #Exercise 9-9 def str_fill(i, len): """return the integer (i) written as a string with at least (len) digits""" return str(i).zfill(len) def are_reversed(i, j): """ return True if the integers i and j, written as strings, are the reverse of each other""" return str_fill(i,2) == str_fill(j,2)[::-1] def num_instances(diff, flag=False): """returns the number of times the mother and daughter have pallindromic ages in their lives, given the difference in age. If flag==True, prints the details.""" daughter = 0 count = 0 while True: mother = daughter + diff if are_reversed(daughter, mother) or are_reversed(daughter, mother+1): count = count + 1 if flag: print daughter, mother if mother > 120: break daughter = daughter + 1 return count def check_diffs(): """enumerate the possible differences in age between mother and daughter, and for each difference, count the number of times over their lives they will have ages that are the reverse of each other.""" diff = 10 while diff < 70: n = num_instances(diff) if n > 0: print diff, n diff = diff + 1 """ print 'diff #instances' check_diffs() print print 'daughter mother' num_instances(18, True) """
小结
Visual Studio真是神器,调试太好用了,太方便了。变量监控,输出都在这边,还有交互式界面可以输python代码,太方面了。微软大法好啊