IDEA两个实用的快捷键
如前边提过的,我最近要接触一些java相关的东西,现在对java这个臃肿的东西依然很不爽,但生活所迫不得不慢慢适应。公司使用的工具基本都是IntelliJ IDEA,习惯了vs.net鼠标移到一个方法自动显示提示,但IDEA没有此功能。有一个替代的方式为:鼠标点在方法名上按下“CTRL+Q”。
另外一个快捷键是自动给变量补全set get方法为:“ALT+INSERT” 可以生成代码(如GET,SET方法,构造函数等)
收集国外免费开源代码。Chairo的杂言碎语&&一些日常记录…
如前边提过的,我最近要接触一些java相关的东西,现在对java这个臃肿的东西依然很不爽,但生活所迫不得不慢慢适应。公司使用的工具基本都是IntelliJ IDEA,习惯了vs.net鼠标移到一个方法自动显示提示,但IDEA没有此功能。有一个替代的方式为:鼠标点在方法名上按下“CTRL+Q”。
另外一个快捷键是自动给变量补全set get方法为:“ALT+INSERT” 可以生成代码(如GET,SET方法,构造函数等)
Via:Chairo@2011年12月05日-EOF-今天公司下午断网,正好有时间来想一些事情。这些年都是在校园招聘领域乱晃,慢慢也熟悉了一些相关的业务。最近在一家依然是做招聘但是做SNS类招聘的公司打一些杂工。下午有时间想了想传统招聘和社会化招聘的特点,写下来做一个备忘,同样看看若干年后不知道现在这个观点是否正确。
在知乎曾经看到过一个句话说“传统招聘是硬性需求”,具体出处因为公司处于断网状态,无法具体查明出处了。其实我觉着应该这样说更能凸显传统招聘的意义“传统招聘是物质需要,社会化招聘是精神需要”。
乍一看这话是在说社会化招聘是重于传统招聘的,其实应该这样理解“只有物质需要被充分满足后,精神需要才会凸显其重要性”。但是既然社会化招聘被我列为“精神需要”那就是说明社会化招聘依然是很重要,是物质需要被满足之后的升华所在。现在的现实是:物质需要已经被满足了?
首先说明下我的观点(仅限校园招聘):
1.现在的HR在校园招聘旺季时候基本是没有时间泡在SNS的,而这时候是学生最想从SNS中获取到企业的消息,最希望和HR互动的时间。
2.HR空闲时间远没有你想的那么多。
3.学生只有一小搓人会在游戏、打屁、泡妞之余还有时间关注明年或者后年才会面对的工作问题。
4.中国需要找工作的人太多了,物质需要还没有满足。
我相信,社交是需要的,精神需要是高于物质需要的,但精神需要是要在物质需要高度满足的基础之上才有看头的。现在的SNS招聘太专注社交了,忘记了要适应“中国国情”。
Via:Chairo@2011年11月25日-EOF-书接上文说一下bottle如何自定义jinja2模板引擎的filters。
前边咱们说到
bottle中使用jinja2_template即等同于template(你传入参数, template_adapter=Jinja2Template),引用一个bottle中template()的关键部分
def template(*args, **kwargs):类似这几句代码,代码大概含义就是从template_settings获取内容然后传递给template_adapter对应对象(即咱们使用的Jinja2Template)
...
...
settings = kwargs.pop('template_settings', {})
...
...
TEMPLATES[tpl] = template_adapter(name=tpl, lookup=lookup, **settings)
继续跟进Jinja2Template,Jinja2Template接收到settings后会怎么处理呢?俺随后找到了下边这段代码
class Jinja2Template(BaseTemplate):
def prepare(self, filters=None, tests=None, **kwargs):
...
self.env = Environment(loader=FunctionLoader(self.loader), **kwargs)
这样只要想办法给Environment传入一个dict包含filter的参数即可。俺定义了这样一个filter
def datetimeFormat(value, format='%Y-%m-%d %H:%M:%S'): '''时间转换''' return time.strftime(format, time.localtime(value)) template_settings=dict(filters = {"datetimeformat": datetimeFormat})
from bottle import jinja2_template as template def func(): return template("Templates/showurls.html", 传入模板的数据, template_settings = template_settings)Via:Chairo@2011年11月19日-EOF-
在使用bottle的jinja2_template过程中碰到了一个自定义filter的问题,其中bottle关于jinja2_template的定义是这样的:
jinja2_template = functools.partial(template, template_adapter=Jinja2Template)
在.NET中class也是有partial这个概念的,所以从字面理解,jinja2_template应该是template和后边template_adapter=Jinja2Template这个参数之和的结果。官方的解释为:
Return a new partial object which when called will behave like func called with the positional arguments args and keyword arguments keywords.
from functools import partial basetwo = partial(int, base=2) basetwo.__doc__ = 'Convert base 2 string to an int.' basetwo('10010') 18
不管你懂没懂,反正我是没懂。最后Google了下,在这里找到一个简单易懂的例子。摘录如下:
import functools def add(a, b): return a + b add(4, 2) 6 plus3 = functools.partial(add, 3) plus5 = functools.partial(add, 5) plus3(4) 7 plus3(7) 10 plus5(10) 15
函数的partial应用
典型的,函数在执行时,要带上所有必要的参数进行调用。然后,有时参数可以在函数被调用之前提前获知。这种情况下,一个函数有一个或多个参数预先就能用上,以便函数能用更少的参数进行调用。
所以bottle中使用jinja2_template即等同于template(你传入参数, template_adapter=Jinja2Template)。稍后的文章会再说明如何自定义filters
Via:Chairo@2011年11月17日-EOF-之前做的Python小站点均是用nginx反代方式,实际使用python app.py方式启动,显着是非常不专业啊。而且效率也没测试过。
真正对Python感兴趣时候是从[observer专栏杂记]的 使用python爬虫抓站的一些技巧总结等文章开始的。So,之前因为部署uwsgi太麻烦虽然收藏了observer的配置Nginx+uwsgi更方便地部署python应用文章,但一直没有实际去配置过。
为了表示不停折腾精神,这几天把网址缩短项目用bottle重写一下(bottle只有一个文件,比tornado轻量多了,反正俺也无需考虑效率问题),部署在一个亚马逊免费的EC2(Elastic Compute Cloud)上。此次修改Todo list还包含引入免费的redis(使用redis4you提供的免费5M服务)等。
所以趁此从头开始的机会,配置了一下uwsgi。记录下完整安装过程(其中好多安装配置copy自lnmp.org的centos.sh中配置)。
申请亚马逊免费EC2的教程不提供了,自己Google一下,网上有详细的图文教程的。
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH
easy_install redis
yum -y install openssl openssl-devel ncurses ncurses-devel python-devel
groupadd mysql
useradd -s /sbin/nologin -M -g mysql mysql
groupadd www
useradd -s /sbin/nologin -g www www
mkdir -p /home/wwwroot
chmod +w /home/wwwroot
mkdir -p /home/wwwlogs
chmod 777 /home/wwwlogs
chown -R www:www /home/wwwrootwget -c http://sourceforge.net/projects/pcre/files/latest/download?source=files tar xvf pcre-8.20.tar.bz2 ./configure make && make install
wget http://nginx.org/download/nginx-1.0.9.tar.gz tar zxvf nginx-1.0.9.tar.gz cd nginx-1.0.9 ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module make && make install mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak cp /home/ec2-user/conf/nginx.conf /usr/local/nginx/conf/nginx.conf mkdir -p /home/wwwroot/au81.com chmod -R 755 /home/wwwroot/au81.com/ chown -R www:www /home/wwwroot/au81.com/ cp /home/ec2-user/conf/init.d.nginx /etc/init.d/nginx chmod +x /etc/init.d/nginx
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.59.tar.gz/from/http://mysql.he.net/ tar -zxvf mysql-5.1.59.tar.gz cd mysql-5.1.59 ./configure --prefix=/usr/local/mysql --with-extra-charsets=all --enable-thread-safe-client --enable-assembler --with-charset=utf8 --enable-thread-safe-client --with-extra-charsets=all --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile make && make install cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf sed -i 's/skip-locking/skip-external-locking/g' /etc/my.cnf /usr/local/mysql/bin/mysql_install_db --user=mysql chown -R mysql /usr/local/mysql/var chgrp -R mysql /usr/local/mysql/. cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql chmod 755 /etc/init.d/mysql cat > /etc/ld.so.conf.d/mysql.conf<<EOF /usr/local/mysql/lib/mysql /usr/local/lib EOF ldconfig ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql ln -s /usr/local/mysql/include/mysql /usr/include/mysql /etc/init.d/mysql start ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql ln -s /usr/local/mysql/bin/mysqldump /usr/bin/mysqldump ln -s /usr/local/mysql/bin/myisamchk /usr/bin/myisamchk /usr/local/mysql/bin/mysqladmin -u root password ******** /etc/init.d/mysql restart /etc/init.d/mysql stop
wget http://sourceforge.net/projects/mysql-python/files/latest/download?source=files tar xzf MySQL-python-1.2.3.tar.gz cd MySQL-python-1.2.3 python setup.py build python setup.py install
chkconfig --level 345 nginx on chkconfig --level 345 mysql on
yum install libxml2 libxml2-devel wget http://projects.unbit.it/downloads/uwsgi-0.9.9.2.tar.gz tar -zxvf uwsgi-0.9.9.2.tar.gz cd uwsgi-0.9.9.2/ python setup.py build make cp ./uwsgi /usr/local/sbin/ uwsgi -x /home/uwsgi.xml
经典的helloword(文件名为app.py)
import os from bottle import route, run, default_app @route('/') def main(): return "Hello world!" if __name__ == "__main__": # Interactive mode run() else: # Mod WSGI launch os.chdir(os.path.dirname(__file__)) application = default_app()Via:Chairo@2011年11月14日-EOF-