月度归档:2011年12月

让2012来的更猛烈些吧

好吧,2012真的要来了!

除了上面一句,一下内容算流水账一类的内容了。

对我而言,2011年如果用一个词来描述的话,我想应该是‘初来乍到’,最大的感受就是“不容易”,关键词是“实习、毕业、父母、工作”。

2011年的时间线

2011年1月8日,考完试我就来到了北京想找一个实习机会。因为大四下学期基本上没有什么课程了,主要就是实习,考试前已经有同学去寻找实习机会了。毕竟是初生牛犊,来北京是慎重考虑的结果,而且做好了各种准备,准备了两个月左右的生活费(来之前问过一些在北京的朋友,一个月生活费,省着点的话大概2000左右),联系了一些在北京的朋友必要时提供一些帮助。来到之后,随便找了一个房子(其实是地下室吧),买了些生活必需品,之后的事情就是找工作了。经历了多次面试之后,最后决定去猛买实习,其实在猛买不像是实习,更像是正式工作,学到了很多东西。因为自己初来乍到也犯过很多错误。

2011年5月下旬,因为最后的毕业答辩要回到学校才行,随启程返回烟台。之后一个月就是各种搞论文、各种聚会、各种玩了,那是另外一个故事了,一直想写一下最后的那一个月的生活,以后有可能再补上吧!

2011年6月10日,处理完学校的事情之后回到北京,来之前我已经给张总发了一封离职邮件说明一下。所以接下来又要重新找工作,这次面试的都是一些稍大些的公司,经过一月左右的尝试,最后选择了金鹰网(2011年7月12日)。

接下来是两个月安稳时期,应是在8月初,部门经理跟我说我们部门要搬到长沙去,金鹰网北京这边应该算是一个办事处,大部队是在长沙那边,当时我的同意去长沙,毕竟年多走一些地方,长长见识是好的。

于是乎8月下旬迁往长沙,到长沙不到一周,我姐打来电话说我爸得了食道癌,当时听了之后,我一时真不知道应该怎么办了,下午跟部门经理请了两周的假。我爸得病的事突如其来,对我的打击很大,当时回济南以后就是安排老人到济南做手术,医生说如果不做手术两三个月后就不能吃东西了(其实当时吞咽已经有困难了),之后20多天就是在医院照顾父亲,值得庆幸的是父亲手术很成功。在 那20天了哭了很多次,想了很多的事情,有很多感触。

2011年10月4日回到长沙,基于当时父亲的情况,我不想走远了。和部门经理商量之后准备回北京。

2011年10月中旬再次回到北京。

毕业第一年走的不是很顺利,但这样已经很好了。

感受

  • 无力,这一年我感到前所未有的无力感,太弱小,很多东西无法改变(也是我不够努力)。
  • 人生最重要的是健康快乐,对于我们做IT的人更是如此,要多锻炼,少熬夜!
  • 坚持真的很重要,永远不要放弃。
  • 学海无涯,技术、生活、感情各个方面都有学不完的知识

收获

对自己的认识深了一层,知道自己真正想要什么东西了,其实内心一直知道自己想要什么,只不过自己不知道。

买了kindle,读书多了起来。

2012年

  • 希望爸妈、姐、侄女可以健健康康、平平安安!
  • 自己可以有所作为
  • 走更多的地方,认识更多的朋友
  • 可以赚更多的钱
  • 脱光
  • 玛雅预言失败

附:
2009总结

关于CSDN用户数据泄露的一些思考

“有很多用户的密码在网上飘荡,而且它还是明文的”

CSDN 600万的用户信息(用户名、密码和邮箱)泄露了,而且密码是明文存储的。之后又爆出了人人、多玩等众多网站的用户信息也被泄露了。当然这只是黑客门放出的一部分信息,只是冰山一角,不过管中窥豹可以知道现在互联网是多么的不安全,多么的没有隐私,翻开手机看看手机里的那些垃圾短息吧!还有接到的那些很多莫名其妙的电话。

毋庸置疑互联网时代安全是一个大问题,但是互联网的安全性和开放性始终一对矛盾,在一个开发的系统中想实现绝对的安全似乎是不可能的。在2011年的尾巴上的这次信息泄露事件,从另一侧面来看反而是一件好事,无论对于网站开发人员还是最终用户,大家的安全意识应该在这次事件中有一个提高。

如何保证信息的安全?

(1) 加密算法的选择

MD5SHABcrypt() 、PHK、SRP等究竟应该选择哪一个算法比较安全。这里做了一个关于Bcrypt 、PHK、SRP的讨论,作者指出一个越快的加密算法越不安全,快即意味着破解或者攻击所需要的时间也会减少,所以选择加密算法加密速度是一个考虑的因素,作者最后推荐的加密算法是Bcrypt。

牛逼、并且最靠谱的方法可能是自己开发一个加密算法、当然开发的算法强度至少要达到MD5,然后要严格保密这种加密算法(这又是个问题),那么被破解的概率就要小很多了。

还有一点就是选择常用的加密方法,虽然是一个笨得思路,但也许能起到一些作用。毕竟现在最完备的字典应该是MD5的,如果采用非MD5的加密方法,那么被字典攻击的时间消耗就要更长一些。

更多关于加密算法选择的讨论:

(2)如何加密

对于用户密码来说一般都是单向加密,加密时一定要加salt,而且要每一个用户一个salt,这样就会大大的增加字典破解的难度,如果选用MD5这种快速加密方法,推荐至少加密两次。

(3)强制用户使用复杂密码,这一招也很有用

用户应该怎样管理自己的密码

2009年的时候写过一篇关于密码管理的文章,这里不再重复了。

关于安全问题的讨论

相关网站
PS:
  • 今天又发现天涯4000万的用户数据,又是明文存储。不过事件的发展越来越阴谋论了,互联网在这里真好玩。(update: 2011-12-25)

未完待续···

SQL中LIKE的另类玩法

设想一个场景,我有个关键词屏蔽词库(应该很多网站都有吧),所有的关键词都存储在MySQL中,怎样查询某个字符串是否含有屏蔽关键词?

比如我们有一个屏蔽词 tom,要屏蔽任何含有tom的词语。

通常情况下LIKE这样用

SELECT * FROM `table` WHERE field LIKE ‘%字符串%’

下面我们这样玩,来解决上面的问题

SELECT * FROM `table` WHERE ‘字符串’ LIKE CONCAT(‘%’,field,’%’)

PS:

这让我想起了初中时数学课中经常用来做几何证明的逆向思考方式。

seajs 使js开发模块化

seajs一个js类库,主要实现对js的模块化开发。

对于一个大项目或者是一个需要团队协作的项目,模块化开发

可以使得对代码的管理更规范和高效。seajs就是为了满足这种需求来的。

不过我个人可能会更需要js可以按需加载,因为有些类库不是所有的页面都

需要的,我的预期是js类库只有在需要的时候才去加载。

seajs可以通过require.async来实现按需加载。

最近在关注HTML5、CSS3的相关内容,这两个东西确实会给我们带来很不一样的体验。

还有js也很活跃,后端出了nodejs,前段有各种基础类库,还有MVC框架。

还有在js上发展起来的新语言 coffee scriptdart,令人目不暇接。

确实很多东西(以论坛为主的网站将如何转型?)需要从底层变革一下了,因为他们周围的东西已经变了。

矛盾促使了这样的变革和发展。

更多内容:seajs.com

在什么场景下使用闭包?

在需要把逻辑封装到自己的范围内的情况下,闭包会十分有用。重构旧代码以进行简化并提高可读性就是这样一个例子。查看以下示例,该示例显示了在运行一些 SQL 查询时使用的记录程序。

//记录 SQL 查询的代码
$db = mysqli_connect("server","user","pass");
Logger::log('debug','database','Connected to database');
$db->query('insert into parts (part, description) values ('Hammer','Pounds nails');
Logger::log('debug','database','Insert Hammer into to parts table');
$db->query('insert into parts (part, description) values
('Drill','Puts holes in wood');
Logger::log('debug','database','Insert Drill into to parts table');
$db->query('insert into parts (part, description) values ('Saw','Cuts wood');
Logger::log('debug','database','Insert Saw into to parts table');

可以看出执行操作的重复程度。对 Logger::log() 执行的每次调用都有相同的前两个实参。为了解决此问题,我们可以把该方法调用放入闭包并转而针对该闭包执行调用。得到的代码如下所示:

//记录 SQL 查询的重构代码
$logdb = function ($string) { Logger::log('debug','database',$string); };
$db = mysqli_connect("server","user","pass");
$logdb('Connected to database');
$db->query('insert into parts (part, description) values ('Hammer','Pounds nails');
$logdb('Insert Hammer into to parts table');
$db->query('insert into parts (part, description) values
('Drill','Puts holes in wood');
$logdb('Insert Drill into to parts table');
$db->query('insert into parts (part, description) values ('Saw','Cuts wood');
$logdb('Insert Saw into to parts table');

整理自:http://www.ibm.com/developerworks/cn/opensource/os-php-5.3new2/
PS:原文有些不正确的地方,比方说到PHP 5.3.5都不可以通过闭包中的this指针访问类内的成员变量(当然可以通过其他方法实现),文章大部分内容正确,还是“尽信书不如无书”。