初学者从Windows转向Mac要做的事

刚从windows转向mac的朋友,往往玩不转这个别人说起来非常酷的系统,但如果掌握了一些小技巧,上手就容易多了。

1. 触摸板设置

苹果的触摸板和普通的不太一样,没有“鼠标左右键”,而且刚拿到机子时,甚至觉得“我双击了触摸板,怎么没反应”。因为默认设置下,要用力往下按触摸屏(就像点原先触摸板左键那样)才能触发鼠标的左键。如果想保持原先在windows下的触摸板习惯,那么请这么设置:系统偏好设置 -> 触摸板 -> 光标点按 -> 轻拍来点按 这个勾选上。比如下面这样。这么设置完之后,轻拍触摸板就可以点击了。

然后这里说的“点按”就指的是鼠标左键,而“辅助点按”指的就是鼠标右键。在下图这么设置下面,用两个指头同时点击就是鼠标右键功能。mac系统非常贴心地在右侧做了引导,照做就行了。

触摸板设置

在这个界面上,还有更多的设置项,跟着引导做设置就成。用好触摸板会让工作效率提高非常多,这点还是比windows pc做得好得多了。

2. 安装和卸载软件

mac软件是dmg格式的,一般双击就可以看到安装说明。一般是把软件拖到“应用程序”里就好了。卸载,把这个软件的图标拖到“废纸篓”里就可以了。Windows下的软件到Mac下是不能使用的(虽然有wine可以模拟),刚开始的时候会不习惯,但工作上似乎就那几个软件,我觉得还好。

3. 文档放哪里

Windows下的“我的电脑”或是“资源管理器”,在Mac下对应的是Finder。Mac下没有C/D/E盘这些的硬盘分区之分,你只要管你的应用和文件就行了,我觉得分区没啥用。

4. 中文输入

如果你想用ctrl+空格切换输入法。那您就错了。ctrl+空格是查找,而且是个很nb的查找。找文件、应用什么的,效率非常高很好用。
切换输入法是用command+空格,推荐去下一个qq输入法,然后在“语言与文本偏好设置”里把qq输入法选上。qq输入法有拼音和五笔,比自带的靠谱我觉得。

语言设置

5. 从浏览器里下载的东西在哪里

Finder -> 下载 里,各个浏览器都会把下载的文件放到这里。

6. 看电影

在AppStore里可以找到PPS和PPTV,或是去各视频网站上看。也可以去找一个MPlayer的软件,它可以看DVD或是下载回来的电影。

7. 淘宝

支付比较麻烦一点,我用招行信用卡,还比较顺利。如果实在不行,只好转到Windows下去做支付了。

8. 我真的很想用Windows

要么装双系统,要么用虚拟机。但都是很痛苦的事儿。

呃,想不起来还有什么要注意的了,有需要再补充吧。

 

一个准确的JavaScript倒计时怎么做

站上有个功能,叫推币竞拍。就是东西拿出来拍卖,在最后关头价高者得。

这个策略其实很有趣,普通玩家会很兴奋地不断地去拿币去拍。而老玩家则是静静等到最后快结束的时候,出高价,争取秒杀。

让我们想想页面上的表现。通常页面上会显示一个倒计时的标志,说离结束时间(比如17:00:00)还有多长时间。然后JS拿个定时器去触发事件,更新这个倒计时里面的html(比如还剩120秒)。

问题:还剩多长时间,这个leftTime, 是endTime – currentTime得到的。currentTime一般我们拿客户端的时间,也就是JS拿到的。而endTime,事实上的逻辑,却是服务器的时间。
也就是说,如果客户端(用户的机子)和服务器上的时间不一致,就一定会出现问题。
如果服务器的endTime比客户端的要早,那客户端在endTime的时候竞拍,服务端早就过了这时间,于是在服务端就会报说竞拍时间已过。反之则可能出现我出的价格比别人低,然后错失再次出价或前端已经不允许出价的机会。

所以一个比较正确的方法是,leftTime = endTime – currentTime + offset
这个offset是指服务器时间和客户端时间的差值。
获取offset也很简单,服务器输出一个时间,然后客户端马上判断当前时间和这个值的差值就可以了。

用PHP写的话差不多是这样的。挺简单的。

<script>
<?php
$time = time();
echo "var server_time = new Date($time);";
?>
var client_time = new Date();
var offset = server_time - client_time/1000;
</script>

这里我把offset写成以秒为单位。如果要毫秒的,就在PHP上改成取毫秒的就OK了。剩下的事儿就是一个正常的倒计时了。这时候客户端的时间和服务端的时间就同步上了。

简单的小技巧,但往往被程序员忽略,却会引起用户使用上的困扰、麻烦。所以程序员不能只会写代码,而要从系统的眼光来写代码,从用户的角度来写代码。

可供折腾的优秀前端框架

我现在接触到的前端框架是有一些,思想都不错。简单介绍一下。

blueprint, 一个基础的CSS框架。它把页面元素分成这么几类,forms表单元素,typography可见的其它元素(特别是可打印的)比如p、ul、li之类,还有一个最重要的,就是grid栅格。
所谓栅格,就是把页面分成16或24或40列。一个元素要多宽,左对齐怎么排,空多少列到下一个元素,在css中都用“列”做单位来体现。 比如页面是960宽。你需要左右两栏。左栏要占1/3,右栏占2/3。这么一个布局。在blueprint里很可能是这么写的:

<div class='container'>
<div class='span-8'>left column</div>
<div class='span-16 last'>right column</div>
</div

用栅格对程序员最大的好处是,看起来非常清晰。很容易对未来产生的页面有感觉。而且栅格很美,不是么。

类似的还有960gs,  同样有一套类似的体系。但960gs没有实现24个栅格的。我觉得24个是最好的。因为24=可以被2、3、4整除。布局是最灵活的。
[经网友Derek指点,24栅格的960gs在这里]

有了一个css框架不意味着所有事儿都干完了。用上面说的两个css框架可以把一个黑白灰纯文字的站点外观搞定,但对于现在的站来说显然是不够的。你要加上更多的颜色,交互效果等等,才能形成一个真正自己站点的css framework。

OK,现在说说JS。JS可谓各显神通。
jQuery大行其道,有jQuery了很多事情都变得简单了。包括后面出的jqtouch,把更多的交互效果给搞定了。但神器不只有jquery一个。

Tangram,百度出的javascript框架。很不幸地,它的命名空间是baidu。我可不喜欢在我公司的项目里用着一个其它公司名字的命名空间的框架。
但其实tangram不是我特别想推荐的,特别想推荐的是百度的另一个开源产品: UEditor,这是一个在线编辑器。比之前的fckeditor感觉好太多了。可以从里面找到不少好东西来,谁用谁知道。

KISSY,淘宝使用的JS框架。这个比百度的靠谱太多了。对国内做中大型站点来说,KISSY积累的代码经验非常棒,特别要推荐他们的前端开发规范:html、css、JS要怎么写,通通可以拿来主义。

最后出场的,一定是大牛。所以最后推荐的是twitter的前端框架:bootstrap,目前它的代码是托管在github上的。
新版的bootstrap,实际提供了常用的css和js的一套解决方案,包括在小屏幕的移动设备上的。也就是说,同一套html代码在手机上不用重写就可以得到相当好的浏览效果。
它提供了12列的栅格系统(少了点,不过可以用less重新生成你想要的)、表单、按钮、表格、常用的图标。然后还有group button,tab,drop-down menu等等等等。
它还提供了一些非常常用的jquery插件,比如弹出层,tooltip,警告框等,每个都非常实用。
美中不足的是——它只支持ie7以上的浏览器。ie6?骚瑞,提到这个浏览器蛋都要碎成泥了。。

苹果机试用半月心得

去年年终老大发了台macbook pro,激动啊~
然后用上了。
小半个月下来,和windows, linux桌面的区别,首先是好看、非常精致的图标。然后是神乎其技的触控板手势印象很深。
然后就是没有360这样的流氓,所以我可以相对专心地做一件事情。

至于其它,MacOS仍然有非常长的一段路要走。没有狂热的果粉说的那般那般好。然后隐隐觉得app for macos在中国还是一片蓝海的样子。

那些年,我们一起追的女孩

青春是场不想停的雨。
收拾完忽然想补习一下电影。于是下了这部片子。
很成功地,看完电影,我能感到眼角是湿润的。

我喜欢这样的电影。
之前我有说过我偏爱爱情电影,可爱情电影拍得动人的几乎想不起来。但这部电影真的把我打败了。
对于喜剧和悲剧而言,喜剧让人开怀,而悲剧能让人记住它,才是让人怀念的那种。

每个男生心中都有一个沈佳宜。那是因为每个男生都曾经是那场雨中的柯景腾。幼稚、笨蛋、大笨蛋,什么都不懂。等我们真的长大一些了,留下的就只有印象中的那场雨和满天的星光。

年会上张导的大片中,我等群众演员都被问了同样一个问题:如果让你回到过去,你最想回到什么时候,做些什么。
当被问到这个问题的时候,我确实“卡壳”了一下,或许是因为真的有认真在想这个问题。当然,我不可能老实地说,我想回到什么什么时候,怎么怎么样。因为过去就是过去,回去何用。正如小魔兔同学说的,不想啊,我觉得现在挺好的。可惜台词已经被抢了。于是我另打了一个哈哈过去了。ps, 田田估计和我是同样的内心反应。

因为,人生本来就有很多事是徒劳无功的。
送给你,那些年,我一起追的女孩。

 

 

2012展望

如果有些事,你坚持到今年年底的话,算不算坚持到世界末日了?
有些事要坚持,而,另一些,你要懂得放下。

2012,我想好好用一年时间吃吃推荐系统。这是一个新的领域。看到那些参考书的时候,我觉得我的数学实在太烂了。重新看起那些晦涩的数学公式,揣摩他们背后的含义,可苦死老衲了。但他们发挥的力量不可小视。

从web2.0提出的UGC到现在风行,不,疯行的pinterest给我们带来的UCC,从长篇的博客,到140字的微博。从T9输入,到触摸屏,到siri语音。无不展示了一个趋势——人是越来越懒的。
如果某个应用能让一些人懒起来,肯定有的玩。
比如已经死去的kissrice,可惜他们没有撑到现在。

我觉得今年会:

1. 无娱乐不应用,会有更多的应用加入游戏元素
2. 会有更多的应用把用户从线上拉到线下
3. 对的,我说的一直是“应用”
4. 电商,我觉得类似初刻、NOP这样重视品牌建设、个性的小电商依然可以活的很滋润
5. 谁知道呢

2011小结

马上就世界末日了,我很淡定。

去年接触了更多的前段知识,年末接触了些推荐系统的东西,然后微博有800多粉丝,技术上似乎就这样了。

有了孩子。
很像我。

家里长短更牵动我心。
只叹分身乏术。

成就只是各种脏活累活,别人不愿意做的,你做了,坚持了,那就是成就。

看的越多,心越虚,觉得自己懂得太少。

博客从怨妇转型为技术和思考和观察。从日经变成月经贴。

仍然对乔妹有着坚持。仍然对美女没有抵抗力。

庆幸的是,我仍然在追逐梦想的路上。

JavaScript跨域神器easyXDM

总会有想跨域的时候的。
虽然各大公司的前端组有share很多经验出来,但对于我等懒人来说,还是要有神器才是永恒的!

于是就找到了easyXDM,n种浏览器兼容。 使用方法看github上的readme,再也不用烦恼了。

什么ie6,7, ie8+,什么proxy, flash, hash方法的,统统搞定。

说说密码那点事儿

其实csdn的库早就被拖过了。只是到现在才爆出来。
今天有一个,唔,说是图虫网的攻城湿,在微博上爆了这么一贴

#CSDN密码事件#中的核心问题在于CSDN竟然在数据库里保存了用户的明文密码。这是严重缺乏职业道德的行为,CSDN这种做法的居心叵测。图虫从第一天起,就从来没有保存过用户的明文密码,而是保存md5加密之后的密码。md5加密是不可逆的,也就是说即使图虫的数据库被攻破 ,黑客也无法获得任何用户的密码

然后,还附了张图。

看着好像是非常安全的一事儿吧?其实我们对安全了解得还太少。

比如我拿着数据库中第一行的值,到cmd5.com这网站上一反查,就得到了它加密前的字串:“20010901”。cmd5有近80T的数据。

微博评论中,说要加盐。盐是怎么一回事呢?好吧,以我肤浅的编程经验说说这历史。
我们要验证用户是否可登录,一般会拿到username和password,然后拿到数据库中比对。
最早的逻辑一般是这样的:
$user = User::findByUserName($username);
if(!$user){
echo “找不到用户”;
}
if($user['password'] == $password) {
echo “密码正确”;
} else {
echo “密码错误”;
}

首页通过用户名找用户对应的那行数据。找不到就说明这个用户没注册。找到了就比对密码。最土的方法就是我在注册的时候,把用户的密码写到数据库里,这样一比对就实现功能了嘛!
是的,CSDN的早期的攻城湿也是这么想的。但服务器或程序没写好,数据库被人抓到了。于是黑客就拿到了数据库中user表的username和password这两个字段。 于是,咳,黑客拿着用户名和密码到各网站去试,因为很多人习惯在各地使用相同的用户名和密码,于是就……

后来捏,就有了md5加密这回事。
在数据库中存放的是md5($password),然后比较的时候,把用户输入的密码也md5一下,再和数据库中的值做比较,要是对应上了就放用户进来。
这有个好处就是密码不是明文的了,当年的黑客要同样抓到username和password,但看到的是一个加密过的密码,解不出来,十有八九就放弃了。

但技术的更新是飞快的。。于是就有了cmd5这种站。原理么,就是收集尽可能多的字串,然后把它的md5值记下来。然后反查。
现在普通的md5值也是会被解密出来的。所以现在md5也变得不靠谱了。
所以就有了盐(salt)。盐是一个字串。
数据库中密码存放的是md5(md5(password)+md5(salt)) ,比如密码是123456,salt是ilovethisgame,那么数据库中的字段存放的就是md5(md5(123456)+md5(ilovethisgame))。
这也是现在大部分程序使用的方法。但还有破点儿的程序使用的是这种加密:md5(password+salt),或是md5(md5(password)+salt),这有用么?笨蛋。

好了,现在应该蛮难搞出123456了吧。 其实还不会。如果有了社工库的帮助。猜出一个用户在salt下的密码还不算很难。因为你的salt可能还是很简单,比如就是123456,或是网站名,或是常用字串。
所以就有了随机盐,也就是每个用户有自己的salt。
用户A的salt是123456, B用户的可能是kisstherain,之类。然后把盐也保存到数据库里。这样去比对。

唉,不幸的是,我们的数据库还是被人抓走了,现在username, password, salt都在他们手里了,解出密码不是分分钟的事儿?
好吧,那我们就用md5(md5(password)+md5(SECRET)+md5(personal_salt))来保存密码吧。其中SECRET应该是写在程序里的一个字串。这样黑客们猜出所有密码的代价就非常非常大了。

除非你的用户真的非常非常有价值。
除非你的代码和数据库都被人抓到了。
你的用户的密码应该还是比较安全的。