Tuesday 27 January 2015

Show all the open windows preview in Ubuntu

Many people like the fancy feature in Mac OSX that user can show all the open windows preview, actually Ubuntu can do that also, just:

Super+W 

can do it exactly like Mac OSX.

Here is my print screen shows the fancy showing all the open windows preview in Ubuntu.



In case if you want to add Mouse Gestures to it, Like Gnome 3 you can do the following:
(as pointed out in comments)
  • Install Compiz Settings Manager
  • Run it, Go to Commands under General
  • Set Command 0 in Edge Bindings and come back to "Command" tab
  • Enter "xdotool key Super_L+w" in Command Line 0
  • Install package xdotool


    That's how it looks like in Gnome3, move your mouse to the corner and it will show up!

Wednesday 14 January 2015

韩国泡菜

隔壁搬来个漂亮的韩国妹妹,在她家里吃了不少韩国的好吃的,不过最好吃的还是韩国
泡菜,我的最爱。她虽然是出生成长在美国,可是饮食习惯还是很韩国化,她说她一天
不吃韩国泡菜,就浑身发痒,哈哈。
图片里的很多东西用带子装起来,是因为我家小朋友很怕打汁机的声音,所以打碎的步
骤是韩国妹妹在自己家里做好的,用带子装起来。
材料:
白菜: 6棵
萝卜:3根
大蒜沫:1cup
姜沫:1/3cup
洋葱:2个、
苹果:0.5个
糖:3cup
shrimp paste:8 tbsp
韩国辣椒粉(细):2cups
韩国辣椒粉(粗):1cup
鱼露:8cups(如果你比较喜欢吃咸,可以在多加两勺)
红心萝卜:切成细丝 1-1/2cups
胡萝卜:切成细丝 1-1/2cups
葱:5根 切段
青辣椒:5根 切片
糯米粉: 200克
手套:在白菜上涂辣椒糊用
辣椒糊的做法:
1)盛凉水在锅里,然后放入糯米粉,搅匀,开中火。持续搅拌,开锅冒泡后关火。
2)将红(白)萝卜,胡萝卜切丝,长辣椒切薄片。
3)洋葱,萝卜放入料理机打成细泥。
4)大蒜和姜切细粒。
5)将韩国辣椒面(细)放入锅中,搅拌均匀,然后再加入粗粒辣椒,搅拌
6)将洋葱苹果泥,大蒜姜粒,shrimp paste,糖,鱼露,葱放入糯米糊中搅拌。
7)一头大蒜,一个韩国梨,半个萝卜,一个洋葱,一点点姜(非常少),放入搅拌机
,打碎后滤去渣,留下汁水,倒入糯米糊
中。(韩国妹妹说这个是她妈妈的秘方)
白菜的做法:
1)整棵白菜切成四瓣,厨房的水池里接一池水,然后把切好的白菜泡进去。泡大概20
分钟,然后取出泡在最下面的白菜,放在准比好的大箱子里(或者大盆)开始摸盐。盐
需要海盐,每一片叶子都需要涂抹,白菜帮的部分相对的涂多一些。萝卜切块,不用单
独摸盐,直接放在箱子的缝隙中。所有的白菜涂好盐后,拿一把海盐,放入一些水(不
用太多)把海盐溶化,然后把盐水倒入白菜中。找重物压在白菜上,3个小时后,把压
在底部的白菜和顶部的对调一下,用重物继续压2个小时。
2)把压去水分的白菜取出,用力挤去水分,白菜头的部分,用刀切去,这个部分如果
不切掉的话,会影响泡菜的味道。
3)取一个挤去水分的白菜,把做好的辣椒酱,均匀的涂在每一片白菜叶上,白菜帮的
部位要多涂一些,涂好后,用手稍微挤一下,然后放入装韩国泡菜的小箱子。我用的这
个小箱子,是在韩国超市买的,专门用来做韩国泡菜的,密封很好,如果没有韩国超市
,找个密封写的罐子也一样。
4)萝卜用辣椒酱抓一抓,然后发仔白菜中,基本上铺两三层白菜,就放一层萝卜。
5)做好的泡菜,放在小箱子的密封,室温放3天。3天后开盖子,这个时候有很多的水
和起跑,用筷子或者用的顺手的东西吧泡菜大概的翻一下,叫里面的气泡跑出来,然后
用力把白菜往下压,直到气泡消失。放入冰箱,两周后可以开吃了。

Tuesday 6 January 2015

AnalyzeCovariates Plots Debug

 I didn't instal the packages of, ggplots, gplots, reshape, gsalib... etc that cause the problem.

Tag="aeae57931b40423fc3f02f707f5f9959", Date=Mon Jan 05 17:36:51 EST 2015, Content-Length=766, id-2=wUztIXs8dWN7HhoGFOSmqkc0BisAB7s3TiSzCCddguJqFMHI8p6VPE20UxCY8LZu, request-id=D5FB8DEBED8D617D, Content-MD5=rq5XkxtAQj/D8C9wf1+ZWQ==, Content-Type=application/octet-stream}]
##### ERROR ------------------------------------------------------------------------------------------
##### ERROR stack trace
org.broadinstitute.gatk.utils.R.RScriptExecutorException: RScript exited with 1
at org.broadinstitute.gatk.utils.R.RScriptExecutor.exec(RScriptExecutor.java:174)
at org.broadinstitute.gatk.utils.recalibration.RecalUtils.generatePlots(RecalUtils.java:576)
at org.broadinstitute.gatk.tools.walkers.bqsr.AnalyzeCovariates.generatePlots(AnalyzeCovariates.java:380)
at org.broadinstitute.gatk.tools.walkers.bqsr.AnalyzeCovariates.initialize(AnalyzeCovariates.java:394)
at org.broadinstitute.gatk.engine.executive.LinearMicroScheduler.execute(LinearMicroScheduler.java:83)
at org.broadinstitute.gatk.engine.GenomeAnalysisEngine.execute(GenomeAnalysisEngine.java:314)
at org.broadinstitute.gatk.engine.CommandLineExecutable.execute(CommandLineExecutable.java:121)
at org.broadinstitute.gatk.utils.commandline.CommandLineProgram.start(CommandLineProgram.java:248)
at org.broadinstitute.gatk.utils.commandline.CommandLineProgram.start(CommandLineProgram.java:155)
at org.broadinstitute.gatk.engine.CommandLineGATK.main(CommandLineGATK.java:107)
##### ERROR ------------------------------------------------------------------------------------------
##### ERROR A GATK RUNTIME ERROR has occurred (version 3.2-2-gec30cee):
##### ERROR
##### ERROR This might be a bug. Please check the documentation guide to see if this is a known problem.
##### ERROR If not, please post the error message, with stack trace, to the GATK forum.
##### ERROR Visit our website and forum for extensive documentation and answers to
##### ERROR commonly asked questions http://www.broadinstitute.org/gatk
##### ERROR
##### ERROR MESSAGE: RScript exited with 1

Saturday 3 January 2015

你会做Web上的用户登录功能吗?

Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能。下面 的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关系到用户安全的功能,希望大家能从下面的文章中能知道什么样的方法才是一个好的用户登录 功能。以下内容,转载时请保持原文一致,并请注明作者和出处

用户名和口令

首先,我们先来说说用户名和口令的事。这并不是本站第一次谈论这个事了。如何管理自己的口令让你知道怎么管理自己的口令,破解你的口令让你知道在现代这样速度的计算速度下,用穷举法破解你的口令可能会是一件很轻松的事。在这里我想告诉从开发者的角度上来做设计这个用户名和口令的事。下面一几件规则:
  • 限制用户输入一些非常容易被破解的口令。如什么qwert,123456, password之类,就像twitter限制用户的口令一样做一个口令的黑名单。另外,你可以限制用户口令的长度,是否有大小写,是否有数字,你可以用你的程序做一下校验。当然,这可能会让用户感到很不爽,所以,现在很多网站都提供了UX让用户知道他的口令强度是什么样的(比如这个有趣的UX),这样可以让用户有一个选择,目的就是告诉用户——要想安全,先把口令设得好一点。
  • 千万不要明文保存用户的口令。正如如何管理自己的口令所 说的一样,很多时候,用户都会用相同的ID相同的口令来登录很多网站。所以,如果你的网站明文保存的话,那么,如果你的数据被你的不良员工流传出去那对用 户是灾难性的。所以,用户的口令一定要加密保存,最好是用不可逆的加密,如MD5或是SHA1之类的有hash算法的不可逆的加密算法。CSDN曾明文保 存过用户的口令。(另,对于国内公司的品行以及有关部门的管理方式,我不敢保证国内网站以加密的方式保存你的口令。我觉得,做为一个有良知的人,我们应该 加密保存用户的口令)
  • 是否让浏览器保存口令。 我们有N多的方法可以不让浏览器保存用户名和口令。但是这可能对用户来说很不爽。因为在真实世界里谁也记得不住那么多的口令。很多用户可能会使用一些密码 管理工具来保存密码,浏览器只是其中一种。是否让浏览器保存这个需要你做决定,重点是看一下你的系统的安全级别是否要求比较高,如果是的话,则不要让浏览 器保存密码,并在网站明显的位置告诉用户——保存口令最安全的地方只有你的大脑。
  • 口令在网上的传输。因为HTTP是明文协议,所以,用户名和口令在网上也是明文发送的,这个很不安全。你可以看看这篇文章你 就明白了。要做到加密传输就必需使用HTTPS协议。但是,在中国还是有很多网站的Web登录方式还在使用ActiveX控件,这可能成为IE6还大量存 在的原因。我通常理解为这些ActiveX控件是为了反键盘记录程序的。 不过,我依然觉ActiveX控件不应该存在,因为在国外的众多安全很重要的站点上都看不到ActiveX的控件的身影。

用户登录状态

首先,我想告诉大家的是,因为HTTP是无状态的协议,也就是说,这个协议是无法记录用户访问状态的,其每次请求都是独立的无关联的,一笔是一笔。 而我们的网站都是设计成多个页面的,所在页面跳转过程中我们需要知道用户的状态,尤其是用户登录的状态,这样我们在页面跳转后我们才知道是否可以让用户有 权限来操作一些功能或是查看一些数据。
所以,我们每个页面都需要对用户的身份进行认证。当然,我们不可能让用户在每个页面上输入用户名和口令,这会让 用户觉得我们的网站相当的SB。为了实现这一功能,用得最多的技术就是浏览器的cookie,我们会把用户登录的信息存放在客户端的cookie里,这 样,我们每个页面都从这个cookie里获得用户是否登录的信息,从而达到记录状态,验证用户的目的。但是,你真的会用cookie吗?下面是使用 cookie的一些原则。
  • 千万不要在cookie中存放用户的密码。加密的密码都不行。因为这个密码可以被人获取并尝试离线穷举。所以,你一定不能把用户的密码保存在cookie中。我看到太多的站点这么干了。
  • 正确设计“记住密码”。这个功能简直就是一个安全隐患,我觉得并不是所有的程序员都知道怎么设计这个事。一般 的设计 是——一时用户勾选了这个功能,系统会生成一个cookie,cookie包括用户名和一个固定的散列值,这个固定的散列值一直使用。这样,你就可以在所 有的设备和客户上都可以登录,而且可以有多个用户同时登录。这个并不是很安全。下面是一些更为安全的方法供你参考:
    (——更新 2011/08/26,原文中有些小错误,并且说的不清楚,重新调整了一下——
1)在cookie中,保存三个东西——用户名登录序列登录token
用户名:明文存放。
登录序列:一个被MD5散列过的随机数,仅当强制用户输入口令时更新(如:用户修改了口令)
登录token:一个被MD5散列过的随机数,仅一个登录session内有效,新的登录session会更新它
2)上述三个东西会存在服务器上,服务器的验证用户需要验证客户端cookie里的这三个事。
3)这样的设计会有什么样的效果,会有下面的效果,
a)登录token是单实例登录。意思就是一个用户只能有一个登录实例。
b)登录序列是用来做盗用行为检测的。如果用户的cookie被盗后,盗用者使用这个cookie访问网站时,我们的系统是以为是合法用户,然后更新“登录token”,而真正的用户回来访问时,系统发现只有“用户名”和“登录序列”相同,但是“登录token” 不对,这样的话,系统就知道,这个用户可能出现了被盗用的情况,于是,系统可以清除并更改登录序列  登录token,这样就可以令所有的cookie失效,并要求用户输入口令。并给警告用户系统安全。
4)当然,上述这样的设计还是会有一些问题,比如:同一用户的不同设备登录,甚至在同一个设备上使用不同的浏览器保登录。一个设备会让另一个设备的登录token登录序列失效,从而让其它设备和浏览器需要重新登录,并会造成cookie被盗用的假象。所以,你在服务器服还需要考虑- IP 地址
a) 如果以口令方式登录,我们无需更新服务器的“登录序列”和 “登录token”(但需要更新cookie)。因为我们认为口令只有真正的用户知道。
b) 如果 IP相同 ,那么,我们无需更新服务器的“登录序列”和 “登录token”(但需要更新cookie)。因为我们认为是同一用户有同一IP(当然,同一个局域网里也有同一IP,但我们认为这个局域网是用户可以控制的。网吧内并不推荐使用这一功能)。
c) 如果 (IP不同 && 没有用口令登录),那么,“登录token” 就会在多个IP间发生变化(登录token在两个或多个ip间被来来回回的变换),当在一定时间内达到一定次数后,系统才会真正觉得被盗用的可能性很高,此时系统在后台清除“登录序列”和“登录token“,让Cookie失效,强制用户输入口令(或是要求用户更改口令),以保证多台设备上的cookie一致。
  • 不要让cookie有权限访问所有的操作。否则就是XSS攻击,这个功能请参看新浪微博的XSS攻击。下面的这些功能一定要用户输入口令:
1)修改口令。
2)修改电子邮件。(电子邮件通常用来找回用户密码,最好通发邮件或是发手机短信的方式修改,或者干脆就不让改一一用电子邮件做帐号名)
3)用户的隐私信息。
4)用户消费功能。
  • 权衡Cookie的过期时间。如果是永不过期,会有很不错的用户体验,但是这也会让用户很快就忘了登录密码。 如果设置上过期期限,比如2周,一个月,那么可能会好一点,但是2周和一个月后,用户依然会忘了密码。尤其是用户在一些公共电脑上,如果保存了永久 cookie的话,等于泄露了帐号。所以,对于cookie的过期时间我们还需要权衡。

找回口令的功能

找回口令的功能一定要提供。但是很多朋友并不知道怎么来设计这个功能。我们有很多找回口令的设计,下面我逐个点评一下。
  • 千万不要使用安全问答。事实证明,这个环节很烦人,而且用户并不能很好的设置安全问答。什么,我的生日啊,我 母亲的生日,等等。因为今天的互联网和以前不一样了,因为SNS,今天的互联比以前更真实了,我可以上facebook,开心,人人网,LinkedIn 查到你的很多的真实的信息。通过这些信息我可以使用安全问答来重设你的口令。 这里需要说一下 Facebook,Facebook的安全问答很强大,还要你通过照片认人,呵呵。
  • 不要重置用户的密码。因为这有可能让用户的密码遭到恶意攻击。当然,你要发个邮件给用户让其确认,用户点击邮 件中的一个链接,你再重置。我并不推荐这样的方法,因为用户一般都会用笔记下来这个很难记的口令,然后登录系统,因为登录系统时使用了“记住密码”的功 能,所以导致用户不会去修改密码,从而要么导到被写下来的密码被人盗取,要么又忘记了密码。
  • 好一点的做法——通过邮件自行重置。当用户申请找回口令功能的时候,系统生成一个MD5唯一的随机字串(可通 过UID+IP+timestamp+随机数),放在数据库中,然后设置上时限(比如1小时内),给用户发一个邮件,这个连接中包含那个MD5的字串的链 接,用户通过点击那个链接来自己重新设置新的口令。
  • 更好一点的做法——多重认证。比如:通过手机+邮件的方式让用户输入验证码。手机+邮件可能还不把握,因为手机要能会丢了,而我的手机可以访问我的邮箱。所以,使用U盾,SecureID(一个会变化的6位数token),或是通过人工的方式核实用户身份。当然,这主要看你的系统的安全级别了。

口令探测防守

  • 使用验证码。验证码是后台随机产生的一个短暂的验证码,这个验证码一般是一个计算机很难识别的图片。这样就可 以防止以程序的方式来尝试用户的口令。事实证明,这是最简单也最有效的方式。当然,总是让用户输入那些肉眼都看不清的验证码的用户体验不好,所以,可以折 中一下。比如Google,当他发现一个IP地址发出大量的搜索后,其会要求你输入验证码。当他发现同一个IP注册了3个以上的gmail邮箱后,他需要 给你发短信方式或是电话方式的验证码。
  • 用户口令失败次数。调置口令失败的上限,如果失败过多,则把帐号锁了,需要用户以找回口令的方式来重新激活帐号。但是,这个功能可能会被恶意人使用。最好的方法是,增加其尝试的时间成本(以前的这篇文章说过一个增加时间成本的解密算法)。如,两次口令尝试的间隔是5秒钟。三次以上错误,帐号被临时锁上30秒,5次以上帐号被锁1分钟,10次以上错误帐号被锁4小时……但是这会导致恶意用户用脚本来攻击,所以最好再加上验证码,验证码出错次数过多不禁止登录而是禁lP。
  • 系统全局防守。上述的防守只针对某一个别用户。恶意者们深知这一点,所以,他们一般会动用“僵尸网络”轮着尝 试一堆用户的口令,所以上述的那种方法可能还不够好。我们需要在系统全局域上监控所有的口令失败的次数。当然,这个需要我们平时没有受到攻击时的数据做为 支持。比如你的系统,平均每天有5000次的口令错误的事件,那么你可以认为,当口令错误大幅超过这个数后,而且时间相对集中,就说明有黑客攻击。这个时 候你怎么办?一般最常见使用的方法是让所有的用户输错口令后再次尝试的时间成本增加。
最后,再说一下,关于用户登录,使用第三方的 OAuth 和 OpenID 也不失为一个很不错的选择。

参考文章

以上内容,转载coolshell