-
python 吐槽 (1)
代码风格 http://docs.python-guide.org/en/latest/writing/style/pep8 http://hqman.lofter.com/post/49bbb_236737 python 项目代码结构 http://www.kennethreitz.com/repository-structure-and-python.htmlpython 包管理 http://mrtopf.de/blog/en/a-small-introduction-to-python-eggs/autopep8 https://github.com/hhatto/autopep8
2012-09-07
全文链接
Text
-
Python 代码风格 和 PEP8
Python 的代码风格由 PEP 8 描述。这个文档描述了 Python 编程风格的方方面面。在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格。这样就易于阅读,易于在程序员之间交流。1 变量常量 : 大写加下划线USER_CONSTANT对于不会发生改变的全局变量,使用大写加下划线。私有变量 : 小写和一个前导下划线_private_valuePython 中不存在私有变量一说,若是遇到需要保护的变量,使用小写和一个前导下划线。但这只是程序员之间的一个约定,用于警告说明这是一个私有变量,外部类不要去访问它。但实际上,外部类还是可以访问到这个变量。内置变量 : 小写,两个前导下划线和两个后置下划线__class__两个前导下划线会导致变量在解释期间被更名。这是为了避免内置变量和其他变量产生冲突。用户定义的变量要严格避免这种风格。以免导致混乱。2 函数和方法总体而言应该使用,小写和下划线。但有些比较老的库使用的是混合大小写,即首单词小写,之后每个单词第一个字母大写,其余小写。但现在,小写和下划线已成为规范。私有方法 : 小写和一个前导下划线def _secrete(self): print don't test me.这里和私有变量一样,并不是真正的私有访问权限。同时也应该注意一般函数不要使用两个前导下划线(当遇到两个前导下划线时,Python 的名称改编特性将发挥作用)。特殊函数后面会提及。特殊方法 : 小写和两个前导下划线,两个后置下划线def __add__(self, other): return int.__add__(other)这种风格只应用于特殊函数,比如操作符重载等。函数参数 : 小写和下划线,缺省值等号两边无空格def connect(self, user=None): self._user = user3 类类总是使用驼峰格式命名,即所有单词首字母大写其余字母小写。类名应该简明,精确,并足以从中理解类所完成的工作。常见的一个方法是使用表示其类型或者特性的后缀,例如:SQLEngineMimeTypes对于基类而言,可以使用一个 Base 或者 Abstract 前缀BaseCookieAbstractGroupclass UserProfile(object): def __init__(self, profile): return self._profile = profile def profile(self): return self._profile4 模块和包除特殊模块 __init__ 之外,模块名称都使用不带下划线的小写字母。若是它们实现一个协议,那么通常使用lib为后缀,例如:import smtplibimport osimport sys5 关于参数5.1 不要用断言来实现静态类型检测断言可以用于检查参数,但不应仅仅是进行静态类型检测。 Python 是动态类型语言,静态类型检测违背了其设计思想。断言应该用于避免函数不被毫无意义的调用。5.2 不要滥用 *args 和 **kwargs*args 和 **kwargs 参数可能会破坏函数的健壮性。它们使签名变得模糊,而且代码常常开始在不应该的地方构建小的参数解析器。6 其他6.1 使用 has 或 is 前缀命名布尔元素is_connect = Truehas_member = False6.2 用复数形式命名序列members = ['user_1', 'user_2']6.3 用显式名称命名字典person_address = {'user_1':'10 road WD', 'user_2' : '20 street huafu'}6.4 避免通用名称诸如 list, dict, sequence 或者 element 这样的名称应该避免。6.5 避免现有名称诸如 os, sys 这种系统已经存在的名称应该避免。7 一些数字一行列数 : PEP 8 规定为 79 列,这有些苛刻了。根据自己的情况,比如不要超过满屏时编辑器的显示列数。这样就可以在不动水平游标的情况下,方便的查看代码。一个函数 : 不要超过 30 行代码, 即可显示在一个屏幕类,可以不使用垂直游标即可看到整个函数。一个类 : 不要超过 200 行代码,不要有超过 10 个方法。一个模块 不要超过 500 行。8 验证脚本可以安装一个 pep8 脚本用于验证你的代码风格是否符合 PEP8。easy_install pep8pep8 -r --ignoire E501 Test.py这个命令行的意思是,重复打出错误,并且忽略 501 错误(代码超过 79 行)。
1
2012-09-07
全文链接
Text
-
js 求两个数组的 交集,差集,并集,补集,去重(转)
/*** each是一个集合迭代函数,它接受一个函数作为参数和一组可选的参数br/* 这个迭代函数依次将集合的每一个元素和可选参数用函数进行计算,并将计算得的结果集返回{%examplescript var a = [1,2,3,4].each(function(x){return x 2 ? x : null}); var b = [1,2,3,4].each(function(x){return x 0 ? x : null}); alert(a); alert(b);/script%}* @param {Function} fn 进行迭代判定的函数* @param more ... 零个或多个可选的用户自定义参数* @returns {Array} 结果集,如果没有结果,返回空集*/Array.prototype.each = function(fn){ fn = fn || Function.K; var a = []; var args = Array.prototype.slice.call(arguments, 1); for(var i = 0; i this.length; i++){ var res = fn.apply(this,[this[i],i].concat(args)); if(res != null) a.push(res); } return a;};/*** 得到一个数组不重复的元素集合br/* 唯一化一个数组* @returns {Array} 由不重复元素构成的数组*/Array.prototype.uniquelize = function(){ var ra = new Array(); for(var i = 0; i this.length; i ++){ if(!ra.contains(this[i])){ ra.push(this[i]); } } return ra;};/*** 求两个集合的补集{%examplescript var a = [1,2,3,4]; var b = [3,4,5,6]; alert(Array.complement(a,b));/script%}* @param {Array} a 集合A* @param {Array} b 集合B* @returns {Array} 两个集合的补集*/Array.complement = function(a, b){ return Array.minus(Array.union(a, b),Array.intersect(a, b));};/*** 求两个集合的交集{%examplescript var a = [1,2,3,4]; var b = [3,4,5,6]; alert(Array.intersect(a,b));/script%}* @param {Array} a 集合A* @param {Array} b 集合B* @returns {Array} 两个集合的交集*/Array.intersect = function(a, b){ return a.uniquelize().each(function(o){return b.contains(o) ? o : null});};/*** 求两个集合的差集{%examplescript var a = [1,2,3,4]; var b = [3,4,5,6]; alert(Array.minus(a,b));/script%}* @param {Array} a 集合A* @param {Array} b 集合B* @returns {Array} 两个集合的差集*/Array.minus = function(a, b){ return a.uniquelize().each(function(o){return b.contains(o) ? null : o});};/*** 求两个集合的并集{%examplescript var a = [1,2,3,4]; var b = [3,4,5,6]; alert(Array.union(a,b));/script%}* @param {Array} a 集合A* @param {Array} b 集合B* @returns {Array} 两个集合的并集*/Array.union = function(a, b){ return a.concat(b).uniquelize();};
2012-08-04
全文链接
Text
-
js 调试技巧
这篇文章是根据目前 chrome 稳定版(19.0.1084.52 m)写的, 因为 google 也在不断完善chrome developer tool, 所以 chrome 版本不同可能稍有差别. 一些快捷键也是 windows 上的, mac 下的应该大同小异.常规的断点相关的 breakpoint/conditional-breakpoint/call-stack/watch-expressions 等就不涉及了.1. Beautify Javascriptjs 文件在上线前一般都会压缩下, 压缩的 javascript 几乎没有可读性, 几乎无法设定断点. 在 Scripts 面板下面有个 Pretty print 按钮(这种符号 {}), 点击会将压缩 js 文件格式化缩进规整的文件, 这时候在设定断点可读性就大大提高了.2. 查看元素绑定了哪些事件在 Elements 面板, 选中一个元素, 然后在右侧的 Event Listeners 下面会按类型出这个元素相关的事件, 也就是在事件捕获和冒泡阶段会经过的这个节点的事件.在 Event Listeners 右侧下拉按钮中可以选择 Selected Node Only 只列出这个节点上的事件展开事件后会显示出这个事件是在哪个文件中绑定的, 点击文件名会直接跳到绑定事件处理函数所在行, 如果 js 是压缩了的, 可以先 Pretty print 下, 然后再查看绑定的事件.3. Ajax 时中断在 Scripts 面板右侧有个 XHR Breakpoints, 点右侧的 + 会添加一个 xhr 断点, 断点是根据 xhr 的 url 匹配中断的, 如果不写匹配规则会在所有 ajax, 这个匹配只是简单的字符串查找, 发送前中断, 在中断后再在 Call Stack 中查看时那个地方发起的 ajax 请求4. 页面事件中断除了给设定常规断点外, 还可以在某一特定事件发生时中断(不针对元素) , 在 Scripts 面板右侧, 有个 Event Listener Breakpoints, 这里列出了支持的所有事件, 不仅 click, keyup 等事件, 还支持 Timer(在 setTimeout setInterval 处理函数开始执行时中断), onload, scroll 等事件.5. Javascript 异常时中断Pretty print 左侧的按钮是开启 js 抛异常时中断的开关, 有两种模式:在所有异常处中断, 在未捕获的异常处中断. 在异常处中断后就可以查看为什么抛出异常了6. DOM Level 3 Event 事件中断在 Elements 面板, 选中一个元素右键, 有两个选项:Break on subtree modifications, Break on attributes modifications, 这两个对应 DOM Level 3 Event 中的DOMSubtreeModified , DOMSubtreeModified 事件 在 Scripts 面板 DOM Breakpoints 处会列出所有 level3 的 event 中断7. 所有 js 文件中搜索查找 js 函数定义在 chrome developer tool 打开的情况下, 按 ctrl + shift + F, 在通过 js 钩子查找代码位置时很有用, 查找支持正则表达式查找函数定义: ctrl + shift + 0 (在 Scripts panel 下)查找文件: ctrl + o (在 Scripts panel 下)更多快捷键: 在 chrome developer tool 中按 ? 查看帮助8. command line api$(id_selector) 这个与页面是否有 jQuery 无关$$(css_selector)$0, $1, $2, $3, $4Elements 面板中最近选中的 5 个元素, 最后选择的是 $0这个 5 个变量时先进先出的copy(str) 复制 str 到剪切板, 在断点时复制变量时有用monitorEvents(object[, types])/unmonitorEvents(object[, types])当 object 上 types 事件发生时在 console 中输出 event 对象更多 console api 请 console.log(console) 或 点击更多 command line api 点击9. 实时修改 js 代码生效页面外部 js 文件在 Scripts 面板中可以直接修改, 改完后按 ctrl + S 保存, 会立即生效注意经测试不支持 html 页面中 js 修改经过 Pretty print 格式化的脚本不支持修改10. console 中执行的代码可断点在 console 中输入代码的最后一行加上 //@ sourceURL=filename.js, 会在 Scripts 面板中有个叫 filename.js 的文件, 然后他就和外部 js 文件一样了function hello() { alert('say hi'); } //@ sourceURL=hello.js参考链接chrome developer tool docGoogle I/O 2011: Chrome Dev Tools Reloadedhttp://www.zhihu.com/question/20260762/answer/14524303?utm_source=weiboutm_medium=weibo_shareutm_content=share_answerutm_campaign=share_button
2012-08-03
全文链接
Text
-
delete object from Array -js
for (var i = 0; i this.CaseJson.Cates.length; i++) { if (this.CaseJson.Cates[i].id == cate.id) { this.CaseJson.Cates.splice(i, 1); } }
2012-07-23
全文链接
Text
-
sphinx 搜索资料
搜索 官方http://sphinxsearch.com/中文教程http://www.coreseek.cn/docs/coreseek_4.1-sphinx_2.0.1-beta.htmlpyapihttp://code.google.com/p/sphinxsearch/source/browse/trunk/api/sphinxapi.py?r=2014api封装https://github.com/dcramer/django-sphinx豆瓣 pythonhttp://www.slideshare.net/hongqn/qcon2010-3881323
2012-07-20
全文链接
Text
-
ubuntu fcitx install
http://flyfire-blog.appspot.com/2012/03/29/fcitx-problems-under-ubuntu-11.04.html http://fcitx.github.com/handbook/faq.html
2012-07-08
全文链接
Text
-
SAE django 部署
参考http://appstack.sinaapp.com/static/doc/release/testing/framework.html#id2 http://www.cnblogs.com/qtsharp/archive/2012/01/12/2320774.html
2012-07-06
全文链接
Text
-
sqlalchemy object json 序列化
def to_dict(self): #序列华 sa 对象 json def convert_datetime(value): return value.strftime(%Y-%m-%d %H:%M:%S) d = {} for c in self.__table__.columns: if isinstance(c.type, DateTime): value = convert_datetime(getattr(self, c.name)) else: value = getattr(self, c.name) d[c.name] = value return d def from_dict(self, values): 反序列 json 到对象 for c in self.__table__.columns: if c.name in values: try: setattr(self, c.name, values[c.name]) except Exception, e: raise e
2012-07-02
全文链接
Text
-
自动登录 ssh
自动登录 ssh最后个 ssh 技巧,上面的技巧的确是很实用,但是我们也受不了每次都要输入次密码。如果你的确厌烦了这些,那么尝试执行下面的命令:ssh user@remotehost 'cat ~/.ssh/authorized_keys' ~/.ssh/id_rsa.pub这样远程的主机就会保存你本地的公钥,你就可以自动 ssh 登录远程主机( 详细 )。顺便提醒:强烈提醒您保护好您主目录下的 ssh 私钥,否则您的帐户可能会面临风险。from:http://www.gracecode.com/category/skill/3/
2012-06-27
全文链接
Text
-
sublime ctags 插件
sublime 是最近一直在捣鼓的编辑器 有点相识恨晚的感觉。跟一位同事介绍 sublime 如何 好用,结果被一个简单的问题问倒,如果在subl中跳转到一个变量 方法的定义初,因为很少用这个功能,所以没去发掘这个功能。后来在网上查了下,居然就是ctags 这个插件。官方地址:https://github.com/SublimeText/CTags 使用方法1:安装 ctags macox ubuntu 安装有区别2: 在项目 目录下 手动 生成 .tags 文件ctags -R -f .tags3: 当光标停在某个函数上时,按下快捷键”Ctrl+Alt+]”,就可以打开函数所在的文件,并跳转到相应位置。如果要返回之前的位置只需要按下”Ctrl+Alt+[“即可。
2012-06-22
全文链接
Text
-
Sublime Text2 视频演示
Sublime Text2 视频演示(via)地址: http://v.youku.com/v_show/id_XMzU5NzQ5ODgw.html相关视频: Zencoding in Sublime Text 2
2012-06-12
全文链接
Text
-
sublime text 左侧菜单美化1
修改 config/sublime-text-2/Packages/Theme - Default/Default.sublime-theme/Users/mac/Library/Application Support/Sublime Text 2/Packages/Theme - Default // Sidebar group closed { "class": "disclosure_button_control", "content_margin": [17, 8, 17, 7], "layer0.texture": "Theme - Default/custom_folder_closed.png", "layer0.opacity": 1.0, "layer0.inner_margin": 0 }, { "class": "disclosure_button_control", "parents": [{"class": "tree_row", "attributes": ["selected"]}], "layer0.texture": "Theme - Default/custom_folder_closed_selected.png" }, // Sidebar group open { "class": "disclosure_button_control", "attributes": ["expanded"], "layer0.texture": "Theme - Default/custom_folder_open.png" }, { "class": "disclosure_button_control", "attributes": ["expanded"], "parents": [{"class": "tree_row", "attributes": ["selected"]}], "layer0.texture": "Theme - Default/custom_folder_open_selected.png" },修改 文件浏览字体大小 { "class": "sidebar_label", "color": [0, 0, 0], "font.bold": false, "font.size": 17 // , "shadow_color": [250, 250, 250], "shadow_offset": [0, 0] },参考:http://sublimetext.userecho.com/topic/19274-theming-of-the-sidebar/http://www.sublimetext.com/forum/viewtopic.php?f=2t=5183/
2012-06-07
全文链接
Text
-
sencha theme
http://blog.wu-boy.com/2011/11/the-future-of-stylesheets-sass-compass/http://kalug.linux.org.tw/planet/user/24/tag/compass/
2012-05-08
全文链接
Text
-
python 抓取网页 保存文件
#!/usr/bin/env python#-*- coding: utf-8 -*-import osfrom os.path import join, existsimport urllib2def getRequest(url): request = urllib2.Request(url) request.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)') try: try: response = urllib2.urlopen(request,timeout=20) return response.read() #.decode('gbk','ignore').encode('utf-8') #.replace(u'�','') except Exception,e: print "erorr %s %s" % (url,e) return None except urllib2.HTTPError, e: print e.codedef saveToFile(filepath,filename,content): #with open(join("/data/scrapy/comms/", filename), 'wb') as f: with open(join(filepath,filename), 'wb') as f: f.write(content)if __name__ == '__main__': htmlstr=getRequest('http://www.google.com') saveToFile('/home/hqman','google.html',htmlstr)
2012-04-01
全文链接
Text
-
copy hdjr js
scriptfunction YMD(year, month, date) { MonHead = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; for (var i = 1912; i = 2031; i++) document.getElementById("Y").options.add(new Option(i + "Year", i)); //赋年份的下拉框 for (var i = 1; i 13; i++) document.getElementById("M").options.add(new Option(i + "Mon", i)); //赋月份的下拉框 document.getElementById("Y").value = year document.getElementById("M").value = month var n = MonHead[month - 1]; if (month == 2 IsPinYear(year)) n++; writeDay(n); //赋日期下拉框 document.getElementById("D").value = date;}function YC(str)//年发生变化时日期发生变化(主要是判断闰平年) { var Mvalue = document.getElementById("M").options[document.getElementById("M").selectedIndex].value; if (Mvalue == "") { var e = document.getElementById("D"); optionsClear(e); return; } var n = MonHead[Mvalue - 1]; if (Mvalue == 2 IsPinYear(str)) n++; writeDay(n);}function MC(str)//月发生变化时日期联动 { var Yvalue = document.getElementById("Y").options[document.getElementById("Y").selectedIndex].value; if (Yvalue == "") { var e = document.getElementById("D"); optionsClear(e); return; } var n = MonHead[str - 1]; if (str == 2 IsPinYear(Yvalue)) n++; writeDay(n);}function writeDay(n)//据条件写日期的下拉框 { var e = document.getElementById("D"); optionsClear(e); for (var i = 1; i (n + 1); i++) e.options.add(new Option(i + "day", i));}function IsPinYear(year)//判断是否闰平年 { return (0 == year % 4 (year % 100 != 0 || year % 400 == 0));}function optionsClear(e) { e.options.length = 0;}/scriptp align="center"select name="Y" id="Y" onchange="YC(this.value)" /selectselect name="M" id="M" onchange="MC(this.value)"/selectselect name="D" id="D"/selectscriptYMD(2012,3,28);function getDay(){ daystr=document.getElementById("Y").value+"-"+document.getElementById("M").value+"-"+document.getElementById("D").value;alert(daystr);//alert(window.location=daystr);return daystr; }/scriptinput type='button' value="search" onclick="getDay();" / /p
2012-03-28
全文链接
Text
-
(2006, 'MySQL server has gone away') 错误
应用刚上线几天 db session 老是出错,找到根源 原来是 (2006, 'MySQL server has gone away') 所导致 session 不可用。mysql 中有2个关于 连接超时的变量 interactive_timeout和wait_timeout show variables like '%timeout%'; 结果都是 28800 时间为8个小时意思是8个小时 当中没有connection 会自动让连接失效设置方法:set global wait_timeout=300 ,interactive_timeout=300;sqlalchemy 中连接参数 sqlalchemy.pool_recycle = 30pool_recycle 设置 重建连接的 时间间隔http://docs.sqlalchemy.org/en/latest/core/engines.html?highlight=create_engine#sqlalchemy.create_engine
2012-03-20
全文链接
Text
-
scim 输入法设置
在scim输入法中进行了如下设定: scim设置-全局设置-将预编辑字符串嵌入到客户端中 前的勾去掉 scim设置-gtk-嵌入式候选词标的勾去掉 重启scim 打开终端,输入 pkill scim然后输入 scim -d命令:sudo /etc/X11/xinit/xinput.d/scim找到其中的GTK_IM_MODULE=ximQT_IM_MODULE=xim把它们改成GTK_IM_MODULE=scimQT_IM_MODULE=scim
2012-03-15
全文链接
Text
-
supervisor gunicorn 小计
pyramid 真实环境部署1:gunicorn: gunicorn_paster [opts] -D怎么管理 gunicorn 进程?方法1: shell#!/bin/bash### BEGIN INIT INFO# Provides: manage process gunicorn_paster# Required-Start: $local_fs $remote_fs $network# Required-Stop: $local_fs $remote_fs $network# Should-Start: $gunicorn_paster# Should-Stop: $gunicorn_paster# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: Start gunicorn_paster.# Description: Start gunicorn_paster.### END INIT INFOBASE_PATH='/home/hqman/projects/pydev'NAME='meside'APP_HOME=$BASE_PATH/$NAMEAPP_BIN=$BASE_PATH/binDAEMON=$APP_BIN/gunicorn_pasterPIDFILE=$APP_HOME/$NAME.pid#need sudo user#if [ `id -u` -ne 0 ]; then# echo "You need root or sudo privileges to run this script"# exit 1#fistart_app() { if [ -e $PIDFILE ]; then echo "meside is running" return 1 fi cd $BASE_PATH source bin/activate echo "start $NAME" start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON -- -b 127.0.0.1:8000 -D $APP_HOME/development.ini -p $PIDFILE}stop_app() { echo "stop meside" if [ -f $PIDFILE ]; then echo "Killing $NAME" kill $(cat $PIDFILE ) fi}case "$1" in start) start_app ;; stop) stop_app ;; restart) stop_app sleep 2 start_app ;; *) echo ' * Usage: gunicornctl {start|stop|restart}' exit 1 ;;esac这个方法 方便 启动 重启 关闭 gunicorn 进程方法2: 采用supervisor 来管理1:下载 sudo apt-get install supervisor2: 编写配置文件[unix_http_server]file=%(here)s/supervisor.sock ; (the path to the socket file)[supervisord]logfile=%(here)s/supervisord.log ; (main log file;default $CWD/supervisord.log)logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)logfile_backups=10 ; (num of main logfile rotation backups;default 10)loglevel=info ; (log level;default info; others: debug,warn,trace)pidfile=%(here)s/supervisord.pid ; (supervisord pidfile;default supervisord.pid)nodaemon=false ; (start in foreground if true;default false)minfds=1024 ; (min. avail startup file descriptors;default 1024)minprocs=200 ; (min. avail process descriptors;default 200)[rpcinterface:supervisor]supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface[supervisorctl]serverurl=unix://%(here)s/supervisor.sock ; use a unix:// URL for a unix socket[program:meside]command=%(here)s/../../bin/gunicorn_paster --log-file=%(here)s/xxx.log %(here)s/../production.inidirectory=%(here)s/../user=xxxautostart=trueautorestart=trueredirect_stderr=falseenvironment=PATH=%(here)s/../../bin3:启动 supervisor supervisord -c xx.conf 4: 通过 supervisorctl restart start stop app参考 http://blog.yangyubo.com/2009/05/14/supervisor-introduce/
2012-03-13
全文链接
Text
-
前端学习网址大全
2012-01-16UED大全 http://www.baiduux.com/百度UFOhttp://ued.sohu.com/搜狐UEDhttp://ued.taobao.com/淘宝UEDhttp://www.ued163.com/网易UEDhttp://www.uedblog.com/YAHOO!CNUEDhttp://ued.ctrip.com/携程UEDhttp://fed.renren.com/人人网FEDhttp://cdc.tencent.com/腾讯CDChttp://isd.tencent.com/腾讯ISDhttp://www.sndaued.com/盛大UEDhttp://ued.koubei.com/雅虎口碑网UEDhttp://ued.alipay.com/支付宝UEDhttp://www.aliued.cn/阿里巴巴(中文站)UEDhttp://www.aliued.com/阿里巴巴(国际站)UEDhttp://www.alisoftued.com/阿里软件UEDhttp://www.the9ued.com/The9UED腾讯系http://cdc.tencent.com/http://isd.tencent.com/http://wsd.tencent.com/http://flashteam.tencent.com/http://tgideas.qq.com/阿里系http://ued.taobao.com/http://ued.alipay.com/http://www.aliued.com/http://www.aliued.cn/http://ued.alimama.com/http://ued.koubei.com/百度系http://www.baiduux.com/http://mux.baidu.com/网易系http://uedc.163.com/http://www.ued163.com/http://ucd.blog.163.com/其他http://ued.sina.com/http://www.sndaued.com/http://ued.sohu.com/http://ued.iciba.com/http://ued.ctrip.com/http://www.kdued.com/http://ued.5173.com/http://blog.19ued.com/还有一些不错的用户体验团队没有公开的网站,比如:创新工场、Google、Microsoft、Nokia、Motorola等。前端团队阿里巴巴 UED— 我们设计的界面,并没有几十亿的流量,但每天来自上百个国家的百万商人在使用着。阿里巴巴中国站UED— 阿里巴巴中国站UED成立于1999年,全称是用户体验设计部(User Experience Design Department),是阿里巴巴集团最资深的部门之一。支付宝前端开发— 支付宝前端开发车间。淘宝UED— 淘宝网用户体验团队。淘宝MED— MED(Marketing Experience Design). 是淘宝营销体验设计部门,为淘宝网的营销产品做体验设计。口碑UED— UED(User Experience Design) 中文意思就是用户体验设计。百度MUX— MUX(Mobile User Experience) 百度无线用户体验部。百度泛用户体验— 泛用户体验平台,是以’用户体验’为核心的跨专业分享平台。盛大游戏UED— 专注用户体验,改变生活,让互动娱乐更精彩。携程旅游UED— 这是一个血液中流淌着创意和活力的团队,在越来越关注严谨和灵活的过程中成长起来,我们对前端的需求如此强烈腾讯CDC— 全称是Customer Research User Experience Design Center(即用户研究与体验设计中心)作为腾讯的核心部门之一.腾讯ISD— ISD Webteam是一个设计团队,即腾讯互联网业务系统网站组。腾讯ISUX— 腾讯 ISUX 全称腾讯互联网用户体验设计部 (Internet Service User Experience),于2011年3月8日正式成立,前身为 ISD Webteam 网站组。腾讯WSD— 腾讯用户体验设计团队. 设计无线,快乐无限。腾讯Flash Team— 这里有一群可爱的Flash娃,他们热爱ActionScript开发~腾讯soso团队博客— soso更懂你。财付通TID— Tenpay Innovation Design, 财付通设计中心。5173 UED— 5173用户体验设计团队(User Experience Design),简称UED,成立于2009年。19楼UED— 19楼 UED团队。人人FED— 我们来自人人网,FED是”Front End Develop and Design”的缩写。网易邮箱UI团队— 网易邮箱UI团队。网易UED— 我们的团队博客,关注用户体验设计、关注web前端开发。网易UEDC— 网易用户体验设计中心(User Experience Design Center),简称”设计中心(UEDC)”,成立于2008年底。搜狐UED— Sohu UED Team就聚集着这样一群人,执着于为用户提供更好的产品和体验,哪怕是对一点点小细节的精益求精。新浪UED— 一个关注用户体验、关注工作流、关注作品质量的有爱团队。爱词霸UED— 爱词霸用户体验团队博客,有关用户体验设计和研究的经验分享。其它团队淘宝搜索— 淘宝搜索技术blogAlibaba DBA Team— 这里记录着阿里巴巴数据库团队成员的点点滴滴淘宝Data— 淘宝数据平台与产品部,是淘宝核心的数据平台技术和数据产品研发团队淘宝DBA Team— 淘宝数据库技术团队淘宝JAVA中间件团队— 我们是淘宝JAVA中间件团队。我们为淘宝网构建JAVA底层架构和基础服务。Taobao QA Team— 做测试的行业标准淘宝核心系统团队— 淘宝核心系统团队隶属于淘宝产品技术部,负责淘宝应用基础平台的研发和搭建阿里巴巴Data Warehouse— 阿里巴巴数据仓库部门主要收集公司内外部所有数据腾讯TGideas— TGideas是腾讯游戏的专业设计团队腾讯GDC— GDC的前身叫GDT(QQGAME DESIGN TEAM),QQ游戏产品设计中心个人博客Kejun— 就职于豆瓣Donkey(倔倔)— 就职于豆瓣蒙晨(波希米亚)— 就职于豆瓣greengnn(老卡)— 就职于豆瓣糖伴西红柿— 就职于豆瓣Fenng— 曾就职于支付宝sofish— 就职于支付宝白鸦— 就职于支付宝62mm— 就职于支付宝伯约(老鱼)— 就职于支付宝怿飞(圆心,Blank)— 就职于淘宝玉伯(lifesinger)— 就职于淘宝明城(mingcheng)— 就职于淘宝Der(崇志)— 就职于淘宝黑妞HAHA— 就职于淘宝秦歌(Kaven)— 就职于口碑网Emu(Stone)— 就职于腾讯Ghost— 就职于腾讯Yuguo— 就职于腾讯臭鱼— 曾就职于腾讯艾文王— 就职于腾讯Danger— 就职于腾讯神飞— 就职于腾讯pufen(飘飘)— 就职于腾讯屈超— 就职于腾讯米随随— 就职于腾讯大猫— 就职于腾讯AVENIR(郑焕义)— 就职于腾讯李振文— 就职于腾讯OnLing— 就职于腾讯Xiaoxiao— 就职于腾讯Seven— 就职于腾讯Lerroy— 就职于腾讯愚人码头— 就职于搜道网子鼠,秀才— 就职于百姓网Adam Lu— 就职于新浪林小志— 就职于携程旅游小灰灰— 就职于携程旅游小JOE— 就职于腾讯彬Go— 就职于人人Rokey— 曾就职于微软,网易,金山软件Evance(布拉格)— 就职于阿里巴巴日本深空— 就职于腾讯代码人(tomie)— 就职于腾讯小爝(龙啸)— 就职于淘宝Aether— 就职于土豆网一葉千鳥— 曾就职于盛大7月— 就职于Adobe周裕波— 就职于盛大创新院崔凯— 就职于傲游勾三股四— 就职于傲游welefen— 就职于百度kent.zhu— 就职于百度aoao(嗷嗷)— 就职于百度JerryQu— 就职于百度胡晓— 就职于网易5key— 就职于阿里巴巴Adam— 就职于Yahooslj(申力军)— 就职于赶集
8
2012-03-09
全文链接
Text
-
js 常用正则
只能输入数字:"^[0-9]*$"。 只能输入n位的数字:"^\d{n}$"。 只能输入至少n位的数字:"^\d{n,}$"。 只能输入m~n位的数字:。"^\d{m,n}$" 只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。 只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。 只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。 只能输入非零的正整数:"^\+?[1-9][0-9]*$"。 只能输入非零的负整数:"^\-[1-9][]0-9"*$。 只能输入长度为3的字符:"^.{3}$"。 只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。 只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。 只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。 只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。 只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。 验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。 验证是否含有^%',;=?$\"等字符:"[^%',;=?$\x22]+"。 只能输入汉字:"^[\一-\龥]{0,}$"
1
2012-03-06
全文链接
Text
-
关于时间和时区
关于时间在计算机中的表达方式1:Unix 时间戳 1970年1月1号 凌晨开始 以后的秒数偏移量 来表示 时间2:GMT 十七世纪,格林威治皇家天文台为了海上霸权的扩张计画而进行天体观测,这里所设定的时间是世界时间参考点,全球都以格林威治的时间作为标准来设定时间,这就是我们耳熟能详的「格林威治标准时间」(Greenwich Mean Time,简称G.M.T.)的由来。3:UTC 称为通用协调时(UTC, Universal Time Coordinated)。 以GMT 国际原子钟来计时更为精准。4:时区 每个地方都有本地时间 早上八点起床 晚上12点睡觉。我们的本地时间 UTC+8 领先于 基准8个小时 在东八区。 以格林威治的子午线作为划分地球东西两半球的经度零度。每隔经度15°,时差1小时。5:MYSQL 中的timestamp 是一个UTC时间 因此显示本地化时间 需要通过时区转换时间范围1970-2037.
2012-02-28
全文链接
Text
-
SWFUpload 多文件上传利器
SWFUpload V2.2.0 说明文档http://leeon.me/upload/other/swfupload.html
2012-02-16
全文链接
Text
-
linux 下防止 rm -rf 重要文件的工具safe-rm
https://launchpad.net/safe-rm 1,安装apt-get install safe-rm2,这时系统的一些重要目录就不会被删除$ rm -rf /usrSkipping /usr3,通过配置/etc/safe-rm.conf 或 ~/.safe-rm 添加你的需要保护的路径或文件
2
2012-02-16
全文链接
Text
-
14步优化网站的方法
14 steps to first-load web sitesRule 1, Make fewer HTTP request将多个请求js,css等的链接组装成一个 (Nginx concat)利用CSS对对较大图片做 sprites,减少请求图片的http请求数Rule 2, Use a CDN不多说,这是常识了Rule 3, Add an Expire Headerjs,css,img等元素都可以添加http缓存根据情况选择是采用conditional get,还是Expire/Cache-ControlHTTP specification dictates that the max-age directive will override the Expires headerRule 4, Gzip Compressed减少数据传输的大小,减少传输时间注意不要对image压缩,因为这样做只会浪费cpu时间Rule 5, Put CSS at the Top利用浏览器渐近渲染(Progressive rendering)的特性,因为浏览器需要css全部下载后,才会开始渲染,所以把css放在顶部,让它优先被下载Rule 6, Put Scripts at the BottomJavaScript的下载会block 浏览器的并行下载功能JavaScript 同时会block浏览器的渐近式渲染(Progressive rendering) 所以要把javascript放在底部。Rule 7, Avoid CSS ExpressionRule 8, Make JavaScript and CSS External便于js css文件的管理,包括前端与后端同学的分工及并行开发便于对javascript 做Minify及前面所说的concat组装Rule 9, Reduce DNS Lookup某些时候DNS会占用很大时间,所以需要尽量利用DNS Cache减少页面上使用到的域名的个数利用HTTP的Keep-Alive特性,减少后续请求的DNS Lookup.Rule 10, Minify JavaScript减少js文件的大小,同理可以作用在html文件中利用JSMin或 Dojo Compressor进行MinifyRule 11, Avoid Redirects尽量避免重定向,用户体验杀手Rule 12, Remove Duplicate Scripts不多说啥,这也应该是写代码人员的常识。Rule 13, Configure or remove ETags许多的http server在E-Tag生成唯一的key时,默认会使用一些主机上的信息,需要做到统一。建议使用Last-ModifiedRule 14, Make Ajax Cacheable对Ajax请求的数据做缓存利用第3条的http expire机制,对Ajax请求做处理
2012-02-12
全文链接
Text
-
网站图片存储的一点思考
用户logo 图片存储是一个看起来很容易的问题/user/log/{{id}}.jpg或者 直接把 dir path 存入 user logo 字段但实际中有一些 头痛的问题1:默认头像 第一种方案 不能实现这个功能 2:图片cache 更新后不能及时更新 第一种方案查阅一些 大的网站发现一个有趣的作法数据库中保存一个 图片的 version 每次更新 +1可以完美解决以上2个实际中点问题
2012-02-10
全文链接
Text
-
pyramid 注意事项1
pyramid 资源文件 src 路径 一定要 用 {{request.static_url(test:static/css/tipTip.css')}} 这样的写法
2012-02-08
全文链接
Text
-
pyramid 杂记1
1:sql 优化 sqlalchemy orm 查询 一个表 会select 所有字段sqlalchemy.sql.select 方法可以 实现按照需要 提取expr=select([cls.id,cls.name],cls.user_id==userId)dbSession.execute(expr).fetchall() 2:pyramid app 根目录 文件 serve 方式http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/files.html#serving-a-single-file-from-the-root
2012-02-08
全文链接
Text
-
关于 json 序列化 反序列化
关于 json 序列化 反序列化http://www.doughellmann.com/PyMOTW/json/
2012-02-06
全文链接
Text
-
2012-02-04
全文链接
Photo