我是一个爬虫

诞生

我是一个Web Crawler , 有时候称为Spider , 你们经常说的爬虫就是我。

我想我是遇到了好时代,感谢IT政府,提供了简单的HTTP协议,还有HTML,CSS, JavaScript这一系列开放的技术, 原来的桌面应用,局域网应用都被搬到了网络上,形成了一个个的网站, 网站互联起来,形成了一个覆盖全世界的大网。

在这个大背景下,我应运而生,开始在这个大网上爬来爬去,收集、分析各种网页的数据。

我有几个亲戚在搜索引擎公司工作,听说他们的目标是把全世界的网页都给爬下来,形成索引,让人类搜索, 想想全世界网页的数量,这几位亲戚的工作实在是让人敬畏。

我的工作原理非常简单, 给我一个URL,我就可以通过HTTP协议把HTML页面下载下来。然后分析一下这个页面中有哪些元素,比如说,表单,表格,链接等等。

反正这个HTML页面是纯文本的,我想怎么折腾都可以,我可以把它形成一颗DOM树,也可以用正则表达式去获得一段我想要的内容,总之方法多得很呢!

最重要的是,我要拿到这个页面中的其他链接, 然后再拿到这些链接对应的HTML页面,继续我的分析,如此循环下去,就能把所有的页面给找出来了,所有的内容都尽在掌握!

有时候,有些HTML页面是受到保护的,必须登陆以后才能够访问,这也难不住我,人类早已经申请了很多的账号。我把这些用户名和密码拿过来,找到对应的登录框,向服务器端发送一个请求,就可以顺利登录了, 访问受保护网页的大门就敞开了。

所以说我有两个最基本的能力, 第一,通过HTTP协议访问网页; 第二,分析HTML网页。

斗争

所谓“爬亦有道”, 我们爬虫界也是有一定规范的,比如说,你在你的网站的根目录下放一个robots.txt文件,里边定义好那些内容对爬虫开放,那些内容不希望爬虫访问, 那我们就不会去爬这些内容了。

当然这只是个约定俗成的规范,而不是标准, 所以总是有一些爬虫完全不遵守规则,置这些规范于不顾。

作为程序,我们访问起网络来, 要远远比人类快得多,人类还需要在界面上移动鼠标点击,我们则是拿到URL后直接、迅速、毫不犹豫地访问, 这样一来,如果爬虫很多,常常给一些网站带来非常大的流量,给服务器带来很大的压力,影响了正常用户的访问, 从而影响了网站的收入。

断人财路,网站就急眼了, 肯定要反击, 于是他们网站便提出了各种各样的办法,成为反爬虫。 他们有反爬虫, 我们便反反爬虫,于是便引发了一场波澜壮阔,反复拉锯的战争。

首先他们得把我们给识别出来才行。最早爬虫在发出HTTP请求的时候,不注意伪装自己,不会修改User Agent ,相当于告诉对方说: 我是爬虫。

于是这些网站轻轻松松的就把我们识别出来,返回一个错误码,或者干脆禁止我们访问。

什么? 你还不知道什么是User Agent ?

User Agent其实就是HTTP Header 中的一个字符串,让服务器端能识别客户端的操作系统及版本,浏览器及版本,浏览器引擎,语言等等信息。 这样可以针对性地做一些处理,例如发送桌面版或者手机版的网页。

比如: User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)

后来我们也学精了,把这个User Agent 设置得和人类的浏览器一模一样,对方就不好识别了。

有时候我们还可以伪装成Google的爬虫,百度的爬虫, 各个网站自然希望百度和Google去对自己的网页做索引的,所以对这样的User Agent不会下狠手拒绝。

但是他们也有别的办法,比如分析我们的行为,利用我们速度快的特点, 比如说,一秒之内有多少次请求,就认为是爬虫。

我们也得斗智斗勇,访问一会儿就休眠几秒钟,然后接着再访问,让他们的策略失效。

但是我们也不能老是休息呀,如果休息得太多,那我们就会人类的速度差不多了,爬虫还有什么意义?

陷阱,验证码,投毒

有些网站会采取一些非常“恶劣”的手段,我最难以防范的就是陷阱。

具体来说,就是在网站发回的HTML页面中,包含一些人类肉眼看不到的链接,比如弄个一个像素大小的图片,上面有个链接。

人类看不到,是绝对不会点击的,但是我们爬虫是程序啊,能分析所有的链接并访问之。 但是以我们的智商,并不知道这是一个陷阱啊!

这些陷阱就像漂浮在网页中的幽灵, 只要我们一访问这些链接,服务器立刻就会知道,哼哼,又来一个爬虫,立刻启动大杀招:封IP!

他们还有一招就是验证码, 如果一段时间内访问的次数超过了某个阈值,立刻显示一个图形验证码,输入验证码以后才能继续,这实在是太讨厌了, 因为验证码是个图片, 人类肉眼轻松识别,可是我想识别还得靠别的软件或者系统,比如OCR。

但是验证现在搞得越来越复杂,什么滑块验证,什么数学题…… 单纯的OCR都不够了。

不过我也不怕,我可以做分布式,反正机器多,让每个机器上的爬虫运行得稍微慢一点,不要触发服务器端的各种讨厌的封锁策略。

我还可以用代理,让IP不断变换,封了一个IP, 就用另外一个,子子孙孙无穷匮也。

我最烦的就是“投毒”,这一招最损, 网站识别出来我是爬虫以后,并不会把我的IP关到小黑屋,而是很阴险地发送一些假数据,和真实数据混在一起,让我喜滋滋地取走,不知道过了多少天,主人用数据做分析时才发现: 嗯,这数据有点不对头啊! 到底是怎么回事!!! 于是我被拖出去打了50大板,真是冤枉啊。

新装备

最近的日子有点不大对头儿,访问一个URL后,返回的HTML特别少,JS特别多,我从HTML中几乎找不到什么有用的东西。

主人看到我干活效率骤然降低,赶紧亲自上手研究了一番,他用Chrome打开网站,按F12, 查看源代码和网络请求, 叹了一口气说: “原来的办法都不管用了,这些网站都在用JavaScript在浏览器端渲染了!”

不过他接着又兴奋地说:“这也许是一件好事情,这些JavaScript通过AJAX的方式访问后端网站的API,返回的数据都是JSON,我分析下,只要弄清楚这些API的输入和输出, 直接调用API就可以拿到数据了。”

其实都是分析,只不过原来分析HTML结构,从中取出内容,现在是分析后端服务器提供的API,直接获取到了数据,似乎更加方便。

但时候直接调用这些API也是有点小麻烦,比如很多时候,都需要进行认证,比如发个token什么的给服务器,要不然人家就不让调用。

后来主人说,算了,实在是麻烦,我给我的爬虫升级下装备吧。

新装备其实就是一个内嵌的浏览器,这个浏览器不需要界面显示, 可以在程序中静悄悄地执行,主人把他叫做无界面浏览器,或者无头浏览器。

(码农翻身注: 例如selenium,phantomjs等)

有了全功能的内嵌浏览器,相当于一个真正的人类在请求网页了,把JavaScript下载下来,不是要在浏览器中做渲染吗?等的就是你! 管你什么AJAX, token ,加密, 这里统统可以执行。

这个无头浏览器渲染完以后,我就可以拿到HTML做后续的分析了。

一切尽在掌握,这种感觉实在美妙。

不过缺点也是有的: 慢! 没办法,有得必有失嘛, 我们还可以采用分布式运行的利器,多跑一些爬虫的实例,人多力量大。

总结

我们爬虫界的终极目标就是和人类的行为保持一致,这样就网站就无法识别了,只不过路漫漫其修远兮,双方的争斗估计会一直持续下去。

在斗争中,建议大家遵循一个原则:“斗而不破”, 不能砸网站的饭碗,要不然人家一怒之下把功能下线了,那大家彻底玩完。

(完)

如何用js替换文本里的换行符 \n?

有下面一段文本, 在编辑器里的格式如下:

<div id="foo">
line1
line2
line3
</div>

切换到浏览器, 显示如下

line1line2line3

这里我想使浏览器显示效果变成如下形式

line1
line2
line3

编辑器里回车产生的换行符\n是不可见的, 这里我们用js把\n替换为<br>

尝试如下代码:

var txt=$('#id').html();
txts=txts.replace('\n','<br>')
$('.wra').html(txts);

无效, 因为replace()方法只替换匹配到的第一个字符

如下为正确代码:

var txts = $('.wra').html();
txts=txts.replace(/\n/g,'<br>')
$('.wra').html(txts);

使用带有g标识的正则, 可以搜索并替换所有匹配的字符

值得一提的是, 换行符因为操作系统不同会有差异, 因此使用下面的方法更加安全:

var txts = $('.wra').html();
txts=txts.replace(/[\n\r]/g,'<br>')
$('.wra').html(txts);

					

在线二维生成接口

http://www.liantu.com/pingtai/

微信小程序自定义组件wxss不生效,如何解决???

使用微信web开发工具开发微信小程序 自定义组件时。组件的 wxss 样式 不生效,很头疼。如何解决???

自定义的组件wxss不生效如何解决?
1.在开发者工具调试器中输入openVendor并回车;
2.开发者工具会打开一个文件夹,请删除这个文件夹下的所有文件;
3.关闭并重启开发者工具,看看这个问题是否还存在。

Fiddler实现手机抓包

手机用fiddler抓包

电脑最好是笔记本,这样能和手机保持统一局域网内;其他不多说,直接说步骤了。

一.对PC(笔记本)参数进行配置

   1. 配置fiddler允许监听到https(fiddler默认只抓取http格式的)

         打开Fiddler菜单项Tools->TelerikFiddler Options->HTTPS

         勾选CaptureHTTPS CONNECTs,点击Actions,

         勾选Decrypt HTTPS trafficIgnore servercertificate errors两项,点击OK(首次点击会弹出是否信任fiddler证书和安全提示,直接点击yes就行),见图:

阅读详细 »

mysql 多表关联删除 MySQL跨表关联删除 MySQL根据查询条件删除多表数据

两张表关联删除:

DELETE a,b FROM table1 a
INNER JOIN  table2 b
ON a.id = b.aid
WHERE a.id = '1'
//或者也可以
DELETE a,b FROM table1 a,table2 b
WHERE a.id = b.aid
AND a.id = '1'
 阅读详细 »

MySQL 设置数据按条件查询下的序号

ALTER TABLE mytable ADD forder INT DEFAULT 0;

UPDATE mytable r,(
    SELECT a.fid,(@rownum:=@rownum+1) AS forder
    FROM mytable a,(SELECT @rownum:=0) b
    ORDER BY ftype ASC,fnum ASC
) t
SET r.forder=t.forder
WHERE r.fid =t.fid

https://www.cnblogs.com/yjl49/archive/2012/08/21/2649582.html

商业模式画布是什么?

商业模式画布是会议和头脑风暴的工具,它通常由一面大黑板或干脆一面墙来呈现。这块板子按照一定的顺序被分成九个方格,方格的内容如下::
1)客户细分——你的目标用户群,一个或多个集合
2)价值主张——客户需要的产品或服务,商业上的痛点
3)渠道通路——你和客户如何产生联系,不管是你找到他们还是他们找到你,比如实体店、网店、中介
4)客户关系——客户接触到你的产品后,你们之间应建立怎样的关系,一锤子买卖抑或长期合作
5)收入来源——你将怎样从你提供的价值中取得收益
6)核心资源——为了提供并销售这些价值,你必须拥有的资源,如资金、技术、人才
7)关键业务——商业运作中必须要从事的具体业务
8)重要伙伴——哪些人或机构可以给予战略支持
9)成本结构——你需要在哪些项目付出成本

商业模式画布的优点在于让讨论商业模式的会议变得高效率、可执行,同时产生不止一套的方案,让每个决策者心中留下多种可能性。

https://github.com/FineUploader/fine-uploader

我眼中的“微信小程序”

近期微信不声不响地推送了“微信小程序”,前端圈里铺天盖地的都是这个话题。
我尝试了一下,做了个小demo,由于太小,几乎就是跟着文档刷了一遍而已。所以就不放出截图代码了。
这篇主要说一下我眼中的“微信小程序”
学习 Vue

写代码的时候很明显能感觉到有 vue 的影子。
每个page分到一个文件夹里面,这个文件夹含有至少三个文件:.wxml, .wxss, .js 还有一个可选的.json分别对应的是 DOM 结构, 样式,控制器,配置文件
完完全全就是vue的template语法的拆解版。
这样做的好处是结构特别的清晰,不像jsx一样,不用什么都写.jsx里面,学习成本就变得很低了。
控制器里面也是有些模仿的意思吧。

Page({   

    data: {   

    },   

    onLoad: function(options){   

    }   

})

其实讲道理没什么模仿吧,毕竟js就是这么写的
融合 React
我很明显地在函数中看到了这样的语法:

this.setData({   

    foo: ‘bar’   

})

语法上还是很像的,对吧?
「微信小程序」剖析(二):框架原理 在桌面浏览器上运行的尝试 这篇文章后面有一段讲的是数据变动渲染什么的。说的比较含糊,没看太懂
绑定事件上也比较像react对吧,不过我比较偏爱的是 vue 的语法,很优雅

<button @click=”handle”>click me</button>

还有点儿 Angular2 的味道
只是在页面文件分成几个部分的时候我嗅到了一些Angular2的味道,把dom和style分开,放到自己当前文件夹里。
好吧,这个理由似乎有点儿勉强 🙂
特点
我在写代码的时候,感受到的一个最大的特点就是:简单,真的不需要太多的概念,不需要很复杂的工程就能在微信这么一个可能是全世界最大的流量入口做一个可用的小程序。是不是很激动。
每个页面对应一个文件夹,文件夹里一套微信规定好的东西。页面只要填充上微信做好的组件就可以跑起来了,而且还带支付功能!
它所带来的几个特性:
低成本
学习成本很低,整个模式对于初学者是很友好的,只要了解了 pattern 就能写代码了,也不用写 native。
也不用像 Angular2, React 那样要先学很多概念才能干活。
我甚至想,微信小程序的简单程度可能直逼 jQuery。
所以培训应该会很容易搞,公司招人也不需要太高的要求了,拉进公司学半天就行了。
高收益
微信流量巨大。我之前说过,它可能是全球最大的流量入口了。
关于这一点我想说,微信用户量大总所周知。不仅量大,微信的用户粘度非常强,用户也非常活跃,走在路上很容易看到各种人走两步就刷一下朋友圈,我觉得 Instagram 还没有这么强吧。
流量入口很容易带来高收益,再加上微信支付。我想很多中小型公司,尤其是电商这些的。会很快跟进。
阿里地位岌岌可危。
跨平台
做出的产品写一遍就能跨平台了。包括没什么产品支持的 windows phone 平台
缺点
太简单,无法支撑复杂应用
简单是好事,也是坏事。

微信小应用实在太简单了。甚至连组件化都没有!

也就是说,所有页面要写一些重复的工作才能看起来是一样的。

复杂的表单,强交互的场景把controller写几千行也是很正常的吧。

更没有组件通信。当然了,毕竟连组件都没有。
有好有坏吧,加上组件要考虑的事情就会变得更多,难度自然就上来了。
ES2015+
而且我看的 demo 代码几乎没有用到 ES2015+ 的特性,不过别担心,babel都能转。
不过暂时没有看到 module 是怎么处理的。

就像上面说的,一个文件写几千行?

我对代码略有洁癖,表示不能接受。
审核问题
首先是苹果的审核,会不会不允许微信这么干,IOS 这么一个大平台如果说不同意那这个项目基本就GG了。
对于这个问题我是持乐观态度的。我猜想这个项目进行之前就已经和苹果那边有商量了。而且腾讯的能量还是相当大的,苹果就算不想支持,在博弈之后可能还得慎重考虑。
然后是微信的审核是否过关?
我想微信是都想让大家过的,只是。。。广电总局这样的部门在国内力量似乎很强大嘛。
还有就是那种“屠龙宝刀,点击就送”的应用,会不会很容易放过?
微信政策
我其实很想做微信小程序玩玩的,只是担心会不会只开放给企业用户。

我认为个人开发者才是最勇猛,最激进,最热爱技术的那批人。

我希望能够尽量让更多的人都来开发。

这个问题其实我也是持乐观态度的。

微信可能不愿意开源出来,但是他们肯定很想让所有人都用。
暂时并不能取代客户端
比较尴尬的一点是,微信小程序并不能取代客户端。

一个非常重要的点是功能太弱。很多功能还是需要独立客户端来做的。

另一个,谁甘心并且完全放心把流量入口完全交给其他人呢?说不定一个乱七八糟的政策就能搞死一个产品。
我的态度
我觉得微信小程序是一个非常棒的消息,它可以更简单地做一些轻应用。也会更好玩。
轻应用,交互简单中小企业的可以快速来一套。并尝试重心转移到这里。

重型应用可以让现有的前端花几天撸一个页面,就做展示就好了,别想做很多功能了。
微信小应用可以说一定程度上又推了一把火热的前端。可能会带更多的人踏入前端的大坑了。
然而冷静一点。多少年了,我们一直追寻的跨平台真的能够在微信小程序上得到一定程度的实现吗?
我相信前端一定会越来越好。加油~

Chrome 插件集推荐

在前端这个行业里面,浏览器担任着及其重要的角色。今天我们可以选择的浏览器有很多,Chrome,Firefox,IE,Safari… 为了能获得更佳的开发体验,大家更多地选择 Chrome。今天介绍下我平时安装的那些 Chrome Extensions。

OneTab
当您发现自己有太多的标签页时,单击OneTab图标,将所有标签页转换成一个列表。当您需要再次访问这些标签页时,可以单独或全部恢复它们。
JSONView
JSONView 是一个方便查看 Json 结构的插件,展开,折叠,看接口返回数据就是这么方便。
SnappySnippet
有时候想在 Codepen, JS Bin, jsFiddle 等平台演示 bug 或者装个五毛的 B ,但限于样式拆分得太细,难以抽离,SnappySnippet 可以快速帮你完成这项苦差事。
EditThisCookie
EditThisCookie 是个修改 Cookie 的快捷工具。
Validity
Validity 可以用来快速验证你的 HTMl 文档明显错误,比如少了个结束标签,使用了不规范标签,缺少了某些属性等等。
Responsive Web Design Tester
移动端页面适配利器,使用 Responsive Web Design Tester,你可以快速在目标尺寸上打开页面,可以自己配置尺寸,修改 UserAgent, 整体效果比 Chrome 自带模拟器更赞~
Allow-Control-Allow-Origin: *
JS 同源策略保障我们的页面安全,但是开发期间我们并不想看到这烦人的家伙,使用Allow-Control-Allow-Origin: *插件轻松解决这个问题 Allow-Control-Allow-Origin: *。
Chrome Sniffer Plus
有时候打开某家公司的页面,很好奇人家用了哪些技术库、框架,Chrome Sniffer Plus 可以为你服务。
Clear Cache
快速清除页面缓存?我用 Clear Cache。
Full Page Screen Capture
看到酷炫的页面排版,叹为观止的巧妙设计想保存下来? 使用 Full Page Screen Capture。
LastPass
管理页面密码,省去频繁输入测试账号密码的烦恼,为了安全保障,最好还是不要保存购物网站的密码哟~
Panda 5 | News & Inspiration Dashboard

Panda 的定位是一个非常优秀的资源阅读器。
Octotree
上同性社交网站的时候经常在翻别人源码的时候特别苦恼,特别是你的网络不给力的时候,简直想死,Octotree 帮助你整理出来项目文件列表。
PerfectPixel
这是一个像素级对稿的插件,如果你所在的公司也特别有情怀的话,那么这个软件可以省去大把你和设计师对稿的时间。
Postman
口碑极好的一个接口调试工具,必备神器,不多说,但是你一定要装。
AngularJS Batarang / React Developer Tools / Vue.js devtools
Angular / React / Vue 调试工具。

AngularJS Batarang 

React Developer Tools

Vue.js devtools
Stylish
Stylish 是一个自定义页面外观的工具,比如想去掉 *度 无下限的广告,给它加个 display: none!
User-Agent Switcher for Chrome
切换 User Agent 的插件。
Web Server for Chrome
快速启动小项目或Demo的神器。
一键管理所有扩展
插件装多了,不好管理? 启动慢? 好好管教管教。
广告终结者
跟烦人的广告说再见,还你一个干净有情怀的页面。
页面自动刷新
定时刷新页面,我还记得当初用它抢到一个 小米2s。
掘金
(不是广告,不是广告,不是广告,至少我没有收钱)
掘金是中国质量最高的技术分享社区,邀请稀土用户作为 Co-Editor 来分享优质的技术干货,从前端到后端开发,从设计到产品,让每一个掘金用户都能挖掘到有价值的干货。
上面的插件大部分都没有中文版,而且 Chrome 本来也在墙外,如果你发现自己打不开上面那些链接的话,趁这个机会出个墙吧。
你有什么好插件?
(工具始终都只是辅助,但是装优秀的插件可以提高开发效率。)
给你一个全新的 Chrome 你会优先装什么工具?你有什么好玩意儿在推荐推荐。

VMware USB Arbitration Service 无法启动的解决方案

VMware USB Arbitration Service 无法启动的解决方案
 
问题描述:常用VMware 虚拟机的童鞋们有事应该遇到这种情况,就是装完
VMware,启动时VMware 下面会有个黄框中有”USB disabled…”之类的提示。
当在虚拟机里装完系统后,一切皆正常。除了插入USB 设备不设别外!到本地电
脑的服务里面查看VMware 的USB 服务时,显示的是”自动”,但是却没有自动
启动,手动启动的时候提示”VMware USB Arbitration Service 无法启动,出
现错误31:连接到系统上的设备没有发挥作用”,重装虚拟机乃至重装电脑都
不能解决问题,是不是非常抓狂啊!?下面我就给出解决方案!
问题原因:AMD 主板驱动的在搞怪。
问题解决:卸载AMD 主板驱动的USB 过滤器。
具体方法:
方法一:
1. 进入Windows 的控制面板中的”添加删除程序”
2. 找到”ATI Catalyst Install Manager”,右击选择更改
3. 选择下一步
4.选择”卸载管理器”,然后选择下一步
5. 选择自定义,然后选择下一步
6. 随后会出来三个选项,在”选择要卸载的组件”之中,选中”USB 过滤器”
7. 最后,一路下一步下载后就OK 啦。然后到系统服务下面手动启动VMware
的USB 看看,是不是可以正常启动啦!
 
方法二:
开始——运行——输入regedit 来打开Windows 注册表,找到:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{36FC9E60-C
465-11CF-8056-444553540000}.
删除UpperFilter 的值。
 
找到:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\
删除usbfilter。 (不过这一步也可不做)
删除 %system32%\drivers\usbfilter.sys
重启系统后应该就OK 了。
 
方法三:
问题 :启动 VMware USB Arbitration Service 服务时提示:错误 31:连接到
系统上的设备没有发挥作用
现象 :VMWare 内不能识别 USB 设备。启动 VMware USB Arbitration Service
服务时提示:错误31:连接到系统上的设备没有发挥作用。
确认 :通过事件查看器可以看到内容形如”Detected unrecognized USB driver
(/Driver/seehcri).”的警告信息,在Windows/System32/Drivers 目录下可以
找到seehcri.sys 文件
原因 :安装索爱PC Suite 之后,seehcri.sys 会替换系统中原有的USB 驱动,
卸载PC Suite 不会卸载seehcri.sys
解决 :下载AutoRuns for Windows v8.61,解压运行autoruns.exe,在Drivers
页找到seehcri.sys,删除。重启系统,进入设备管理器,删除打黄色叹号的USB
设备,扫描硬件改动,重新安装驱动程序。

一张图,看懂七亿中国网民生存现状!

2015年,中国互联网用户已达6.89亿,其中手机网民5.57亿,人均周上网时长升至26.1小时!就像王思聪为娱乐圈操碎了心,中国网民为全世界操碎了心,这庞大的族群都在做啥?一张图看懂!
   
   

你可能不知道的10个JavaScript小技巧

尽管我使用Javascript来做开发有很多年了,但它常有一些让我很惊讶的小特性。对于我来说,Javascript是需要持续不断的学习的。在这篇文章中,我将列出10个Javascript使用小技巧,主要面向Javascript新手和中级开发者。希望每个读者都能至少从中学到一个有用的技巧。
1.变量转换
看起来很简单,但据我所看到的,使用构造函数,像Array()或者Number()来进行变量转换是常用的做法。始终使用原始数据类型(有时也称为字面量)来转换变量,这种没有任何额外的影响的做法反而效率更高。

var myVar = “3.14159”,

str = “”+ myVar,// to string

int = ~~myVar, // to integer

float = 1*myVar, // to float

bool = !!myVar, /* to boolean – any string with length

and any number except 0 are true */

array = [myVar]; // to array

转换日期(new Date(myVar))和正则表达式(new RegExp(myVar))必须使用构造函数,而且创建正则表达式的时候要使用/pattern/flags的形式。
2.十进制转换为十六进制或者八进制,或者反过来
你是不是写个单独的函数来转换十六进制(或者八进制)呢?马上停下吧!有更容易的现成的函数可以用:

(int).toString(16); // converts int to hex, eg 12 => “C”

(int).toString(8); // converts int to octal, eg. 12 => “14”

parseInt(string,16) // converts hex to int, eg. “FF” => 255

parseInt(string,8) // converts octal to int, eg. “20” => 16

3.玩转数字
除了上一节介绍的之外,这里有更多的处理数字的技巧

0xFF; // Hex declaration, returns 255

020; // Octal declaration, returns 16

1e3; // Exponential, same as 1 * Math.pow(10,3), returns 1000

(1000).toExponential(); // Opposite with previous, returns 1e3

(3.1415).toFixed(3); // Rounding the number, returns “3.142”

4.Javascript版本检测
你知道你的浏览器支持哪一个版本的Javascript吗?如果不知道的话,去维基百科查一下Javascript版本表吧。出于某种原因,Javascript 1.7版本的某些特性是没有得到广泛的支持。不过大部分浏览器都支持了1.8版和1.8.1版的特性。(注:所有的IE浏览器(IE8或者更老的版本)只支持1.5版的Javascript)这里有一个脚本,既能通过检测特征来检测JavaScript版本,它还能检查特定的Javascript版本所支持的特性。

var JS_ver = [];

(Number.prototype.toFixed)?JS_ver.push(“1.5”):false;

([].indexOf && [].forEach)?JS_ver.push(“1.6”):false;

((function(){try {[a,b] = [0,1];return true;}catch(ex) {return false;}})())?JS_ver.push(“1.7”):false;

([].reduce && [].reduceRight && JSON)?JS_ver.push(“1.8”):false;

(“”.trimLeft)?JS_ver.push(“1.8.1″):false;

JS_ver.supports = function()

{

if (arguments[0])

return (!!~this.join().indexOf(arguments[0] +”,”) +”,”);

else

return (this[this.length-1]);

}

alert(“Latest Javascript version supported: “+ JS_ver.supports());

alert(“Support for version 1.7 : “+ JS_ver.supports(“1.7”));

5.使用window.name进行简单会话处理
这个是我真的喜欢的东西。您可以为指定一个字符串作为window.name属性的值,直到您关闭该标签或窗口。虽然我没有提供任何脚本,但我强烈建议您如充分利用这个方法。举例来说,在建设一个网站或应用程序的时候,在调试和测试模式之间切换是非常有用的。
6.判断属性是否存在
这个问题包含两个方面,既有检查属性时候存在,还要获取属性的类型。但我们总是忽略了这些小事情:

// BAD: This will cause an error in code when foo is undefined

if (foo) {

doSomething();

}

// GOOD: This doesn’t cause any errors. However, even when

// foo is set to NULL or false, the condition validates as true

if (typeof foo != “undefined”) {

doSomething();

}

// BETTER: This doesn’t cause any errors and in addition

// values NULL or false won’t validate as true

if (window.foo) {

doSomething();

}

但是,有的情况下,我们有更深的结构和需要更合适的检查的时候,可以这样:

// UGLY: we have to proof existence of every

// object before we can be sure property actually exists

if (window.oFoo && oFoo.oBar && oFoo.oBar.baz) {

doSomething();

}

7.给函数传递参数
当函数既有必选又有可选参数的时候,我们可能是这样做的:
function doSomething(arg0, arg1, arg2, arg3, arg4) {

}

doSomething(”, ‘foo’, 5, [], false);

而传递一个对象总是比传递一堆的参数更方便:

function doSomething() {

// Leaves the function if nothing is passed

if (!arguments[0]) {

return false;

}

var oArgs = arguments[0]

arg0 = oArgs.arg0 || “”,

arg1 = oArgs.arg1 || “”,

arg2 = oArgs.arg2 || 0,

arg3 = oArgs.arg3 || [],

arg4 = oArgs.arg4 || false;

}

doSomething({

arg1 : “foo”,

arg2 : 5,

arg4 : false

});

这只是一个把对象作为参数传递的一个很简单的例子,例如,我们还可以声明一个对象,变量名作为Key,默认值作为Value。
8.使用document.createDocumentFragment()
您可能需要动态地追加多个元素到文档中。然而,直接将它们插入到文档中会导致这个文档每次都需要重新布局一个,相反的,你应该使用文档碎片,建成后只追加一次:

function createList() {

var aLI = [“first item”, “second item”, “third item”,

“fourth item”, “fith item”];

// Creates the fragment

var oFrag = document.createDocumentFragment();

while (aLI.length) {

var oLI = document.createElement(“li”);

// Removes the first item from array and appends it

// as a text node to LI element

oLI.appendChild(document.createTextNode(aLI.shift()));

oFrag.appendChild(oLI);

}

document.getElementById(‘myUL’).appendChild(oFrag);

}

9.为replace()方法传递一个函数
有的时候你想替换字符串的某个部分为其它的值,最好的方法就是给String.replace()传递一个独立的函数。下面是一个简单例子:

var sFlop = “Flop: [Ah] [Ks] [7c]”;

var aValues = {“A”:”Ace”,”K”:”King”,7:”Seven”};

var aSuits = {“h”:”Hearts”,”s”:”Spades”,

“d”:”Diamonds”,”c”:”Clubs”};

sFlop = sFlop.replace(/\[\w+\]/gi, function(match) {

match = match.replace(match[2], aSuits[match[2]]);

match = match.replace(match[1], aValues[match[1]] +” of “);

return match;

});

// string sFlop now contains:

// “Flop: [Ace of Hearts] [King of Spades] [Seven of Clubs]”

10.循环中标签的使用
有的时候,循环中又嵌套了循环,你可能想在循环中退出,则可以用标签:

outerloop:

for (var iI=0;iI<5;iI++) {

if (somethingIsTrue()) {

// Breaks the outer loop iteration

break outerloop;

}

innerloop:

for (var iA=0;iA<5;iA++) {

if (somethingElseIsTrue()) {

// Breaks the inner loop iteration

break innerloop;

}

}

}

联想t430u怎么设置u盘启动

尊敬的联想用户您好!
根据您的情况,您直接将第一移动项改为U盘或者光驱启动即可。
之后您需更改您的硬盘模式您可以如下操作:
1、 若您的预装系统为win8系统您需如下操作:按F1或Fn+F1进入BIOS—> security—>security boot把“security boot”项后面的enabled改为disabled,进入Startup—UEFI/Legacy Boot选项,将UEFI/Legacy Boot选项选择成Both,UEFI/Legacy Boot Priority选择成UEFI First,按F9选择Yes,,然后按F10(FN+F10保存退出 )
2、然后更改硬盘模式 :进入“Config” --> “Serial ATA(SAT A)” --> “Controller mode option” ,将原先的 “AHCI” 改成 “Compatibility”或IDE ,然后按[F10]。 需要注意的是:xp系统只能识别一个显卡,集显或者独显就无使用, 声卡的安装也可能有问题, 不建议安装xp系统。
3、若您的预装系统为win7则无需执行1操作,直接进入BIOS更改硬盘模式即可。
4、按下电源开机,出现联想LOGO时,连续点击键盘“F12”键
5、出现“BOOT MENU”菜单,用键盘,选择USB启动即可。
为您提供如何制作U盘系统盘以及U盘安装操作系统的方法: http://support1.lenovo.com.cn/lenovo/wsi/htmls/detail_13118943866256237.html 更多问题您可以咨询idea论坛:http://lenovobbs.lenovo.com.cn/forum.php?intcmp=FM_LBBS_baidureply Think论坛:http://thinkbbs.lenovo.com.cn/forum.php?intcmp=FM_LBBS_baidureply 联想乐社区:http://bbs.lenovomobile.com/forum.php?intcmp=FM_LBBS_baidureply

什么才算是真正的编程能力?

问题:什么才算是真正的编程能力?
还在读书,也在实验室帮忙做了些东西,自己也搭过几个网站。在周围人看来似乎好像我很厉害,做了那么多东西,但是我发现这些东西虽然是我做的,但是实际上我手把手自己写的代码却并没有多少,很多都是用开源的东西,我写的代码无非是把别人的东西整合下,类似于胶水一样的工作。
我之前所认为的编程是全手动一行一行敲代码,但是现在我发现哪怕是工程上也有很多人是复制黏贴来解决问题的,并且提倡不要重复造轮子。
但是靠谷歌和复制别人的轮子,虽然我做出了很多东西,可是我并不觉得自己能力上有提升,倒是利用搜索引擎的能力的确提升了不少。而学校里另外一波搞ACM的人,他们每天刷题练算法,或许倒是的确提升了点编程能力,但是对工程几乎一窍不通。
所以我现在就很困惑,所谓的编程能力到底是什么,我该如何提升自己的编程能力?
回答者:刘贺,…
非常好的一个问题。这可能是我在知乎见到过的问编程有关的问题中问得最好的一个了。我非常喜欢这个问题。
计算机科学有两类根本问题。一类是理论:算法,数据结构,复杂度,机器学习,模式识别,等等等。一类是系统:操作系统,网络系统,分布式系统,存储系统,游戏引擎,等等等等。
理论走的是深度,是在追问在给定的计算能力约束下如何把一个问题解决得更快更好。而系统走的是广度,是在追问对于一个现实的需求如何在众多的技术中设计出最多快好省的技术组合。
搞ACM的人,只练第一类。像你这样的更偏向于第二类。其实挺难得的,但很可惜的是第二类能力没有简单高效的测量考察方法,不像算法和数据结构有ACM竞赛,所以很多系统的苗子都因为缺少激励和正确引导慢慢就消隐了。
所以比尔盖茨才会说,看到现在学编程的人经常都把编程看作解各种脑筋急转弯的问题,他觉得很遗憾。
做系统,确实不提倡“重复发明轮子”。但注意,是不提倡“重复发明”,不是不提倡“重新制造”。恰恰相反的,我以为,系统的编程能力正体现在“重新制造”的能力。
能把已有的部件接起来,这很好。但当你恰好缺一种关键的胶水的时候,你能写出来吗?当一个已有的部件不完全符合你的需求的时候,你能改进它吗?如果你用的部件中有bug,你能把它修好吗?在网上繁多的类似功能的部件中,谁好谁坏?为什么?差别本质吗?一个开源代码库,你能把它从一个语言翻译到另一个语言吗?从一个平台移植到另一个平台吗?能准确估计自己翻译和移植的过程需要多少时间吗?能准确估计翻译和移植之后性能是会有提升还是会有所下降吗?
系统编程能力体现在把已有的代码拿来并变成更好的代码,体现在把没用的代码拿来并变成有用的代码,体现在把一个做好的轮子拿来能画出来轮子的设计蓝图,并用道理解释出设计蓝图中哪些地方是关键的,哪些地方是次要的,哪些地方是不容触碰的,哪些地方是还可以改进的。
如果你一点不懂理论,还是应该学点的。对于系统性能的设计上,算法和数据结构就像在自己手头的钱一样,它们不是万能的,但不懂是万万不行的。
怎么提高系统编程能力呢?土办法:多造轮子。就像学画画要画鸡蛋一样,不是这世界上没有人会画鸡蛋,但画鸡蛋能驯服手指,感受阴影线条和笔触。所以,自己多写点东西吧。写个编译器?渲染器?操作系统?web服务器?web浏览器?部件都一个个换成自己手写的,然后和已有的现成部件比一比,看看谁的性能好,谁的易用性好?好在哪儿?差在哪儿?为什么?
更聪明一点的办法:多拆轮子。多研究别人的代码是怎么写的。然而这个实践起来经常很难。原因:大部分工业上用的轮子可能设计上的思想和技术是好的,都设计和制造过程都很烂,里面乱成一团,让人乍一看毫无头绪,导致其对新手来说非常难拆。这种状况其实非常糟糕。所以,此办法一般只对比较简单的轮子好使,对于复杂的轮子,请量力而行。
轮子不好拆,其实是一个非常严重的问题。重复发明轮子固然是时间的浪费,但当轮子复杂而又不好拆的时候,尤其是原来造轮子的人已经不在场的时候,重新发明和建造轮子往往会成为无奈之下最好的选择。这是为什么工业界在明知道重复发明/制造轮子非常不好的情况下还在不断重复发明/制造轮子的根本原因。
程序本质是逻辑演绎的形式化表达,记载的是人类对这个世界的数字化理解。不能拆的轮子就像那一篇篇丢了曲谱的宋词一样,能读,却不能唱。
鄙人不才,正在自己研究怎么设计建造一种既好用又好拆的轮子。您没那么幸运,恐怕是等不到鄙人的技术做出来并发扬光大了。在那之前,多造轮子,多拆好拆的小轮子,应该是提高编程能力最好的办法了。
以上。嗯。
(文章属个人观点,与本人工作雇主无关。)
回答者:mu peng,less is more
懂得取舍。
在有限的时间内,几乎没有系统可以做到完美。要快,要安全,高并发,易扩展,效率高,容易读,高内聚,低耦合…
大到一个网站,小到几个class,工程师都要清楚,要取什么,舍什么,这并不是那么容易的事。我们都有自己的性格,有的求新,有的求稳,有的求快,但具体到一个项目时,知道如何取舍对这个项目最好,很重要。
学校里的作业,没人在意你是不是写在一个大的main()里面,能跑就行。但做项目的时候,太多的东西要考虑,有时候,宁可简单易读,也不用快那么一点点;有时候,要做太多看不到的工作,却丝毫马虎不得;有时候,写了不如不写,留白也是一个学问。
曾经接手个项目,里面几乎所有的class,每个都有interface,各种继承,各种实现,理由是灵活性高,易扩展。真的易扩展吗?
我不知道。没多久,客户的需求就改了,各种拎不清的继承实现都化为乌有,一大半要重写。
问题在哪里?
不是编程不好,而是取舍的不好。在那个阶段,为30%的需求,花200%的努力,追求设计的滴水不漏,却舍弃快速实现,取得反馈的时机,这就是失误。需求总会变,客户看到越早,修改越早,影响越小。
很聪明的人,也可能做出很难用的系统,不一定是编程不好,可能是不愿,或不屑于取舍。不同的阶段,不同的项目,要取舍的东西也不同。编程只是手段,目的是解决问题,能力高不高,要看问题解决的好不好。不在于使用了什么高端算法,或是复杂的框架。
懂得如何取舍并不容易,需要对问题的深刻理解,对技术的胸有成竹,和身后无数个踩过的坑。但重要的是有取舍的意识,主动思考取舍什么,这样学的才会快。
回答者:李遥,A Programmer
既然说的是编程能力,那首先就先把学术相关的能力排除才能说的清楚
接下来是我对编程的定义:所谓编程,就是预先设计好方案来指挥行为可预测的系统来自动(与临时手动相对)达到的想要的结果。从广义上说,企业家对一个公司的运作方式进行设计,然后这个公司自动运行产生利润也是一种编程
那么编程能力体现在两点
1.对可预测系统的理解:理解越深,预测能力越强,自己的智慧才越好发挥。这就是为什么学习软件编程最快的方式之一是“造轮子”
2.如何把自己的目标转化成指挥方案,这其实就是“做应用题”的能力,我们从小学就在练习这个能力。现实世界的应用题可不会告诉你用什么知识点去建模,也不会透露全部必要条件,因此增强这个能力需要深刻理解现实世界的运作方式。在软件行业,这被称作“理解垂直行业的业务逻辑”
顺带说一下,所谓“Hacking”,其实就是在深刻理解一个系统的基础上,用最小的代价改变这个系统来达到自己的目的。“Hacking”之所以看起来出人意料,就是因为理解越深刻,需要的做的改动越少。如果理解不深刻,那就要从头造一个系统了,那就不聪明了
回答者:丁盛豪,网络媒体HeckPsi.com创始人
谢 @花满楼 邀请。
对于编程能力这个问题其实我也想过很久,这个东西确实非常难界定。单纯靠算法水平、编程速度、工程经验都很难说是编程能力。
虽然这个东西的影响因素非常庞大,但从我日常的工作来看,其实我觉得衡量编程水平最靠谱的方法是观察这个程序员 Debug 的能力。
程序从本质上来说就是 输入 -> 处理 -> 输出 的过程,而中间的处理就像是一个巨大的黑盒子。而这个黑盒子的本身就是程序,在大多数情况下你并不能看到这个黑盒子的全貌。从常识上写一个不存在 bug 的程序是一件 几乎 不可能完成的任务。即使是敲个最简单的 Hello World 程序,你也很难保证编译器不给你抽几下风。尤其是当这个程序变得非常庞大时,写程序这件事的本身就是 盲人摸象 的过程。程序员必须要有相当好的 全局观 ,才能保证自己的程序良好运行而不出问题,并能在出了问题之后能够做出迅速的定位和修复。
所以观察一个程序员能否 迅速Debug 的过程就是一个很好的判断依据。我举个例子来说,我几周前给手机刷了机,第二天早上准备去晨跑,发现手机 GPS 不工作。于是我立刻分析了出现问题可能的地方:
GPS 模块硬件 -> GPS 驱动 -> 系统配置 -> GPS 权限 -> 软件兼容性
由于想起刚刷了机,基本可以排除硬件问题。而软件之前同样在其它 Android 5.1 机器上跑过,同时跑了下 Google Maps 也不能定位,排除兼容性问题。原生系统的权限系统非常简单,基本排除是权限。出问题的可能是第三方 ROM 的驱动有问题或者配置文件。观察到 A-GPS 基站辅助定位也不工作,基本排除 GPS 驱动问题。确认是配置文件有问题,检查 /etc/gps.conf 竟是空文件。于是就在手机上用文本编辑器顺手码了一段配置,重启后问题修复。
这就是一次非常流畅准确的对一个未知的 Bug 定位和修复的过程。
由于 Bug 的未知性,可以很好避免一些你在判断时可能遇到的 作弊 情况,我们知道现在很多人为了面试无所不用其极。就算是以前非常经典的面试问题,现在也很不靠谱。现在你问 “如何理解面向对象编程?” 和你对答如流的人可能并不真正理解 OOP,不过背的很熟而已。以前觉得算法是个很好验证水平的切入点,自从 LeetCode 背题流的出现,这招现在也不怎么靠谱。而 Debug 是个无法 提前准备的东西,所以对于编程能力的校验通常很准确。
而且,Debug 的过程中会接触到自己很多不熟悉的知识。由于编程本身就是一个 Engineering,正常的过程就是在 码字 -> 出问题 -> 学习 -> 修改 的过程中循环。如果你对算法不熟悉,那么遇到程序性能问题的时候你硬着头皮也要用学习算法知识来解决掉。所以这是一项非常综合的能力,是程序员 知识、智力、经验 的综合体现。
至于如何提升编程能力?
多写、多错、多学。没有捷径,捷径只不过是作弊。作弊能帮你找到工作,但并不能真正解决问题。
回答者:陈浩骏,call me Reid / 会写Java的猴子
MIT算法导论第一堂课:
每天都编程 x年后一定会变成专家 (忘了x多少 不是重点
轮子多造多模仿 能力自然提升

什么发展都是从量到质的 要相信
现在我也是搞系统编程 除了看source code和造轮

也是可以有空刷刷acm的

而且只有帮助没有坏处喔

系统编程一旦考虑到效能问题 离不开经典的一些算法的 
显然大部分的我们都不会成为高手如温赵轮
但是成为编程好手 进个好公司 钱多赚些 生活舒服些 应该是普遍程序员的共同目标
不要想太多 拼命code就是了
共勉
如此。
回答者:vczh,专业造轮子 https://github.com/vczh-libraries
都不知道宣传不要重复造轮子的人是怀着什么险恶的用心,原话明明是不要重新发明轮子。
这是什么意思呢?就是说你要多看论文多看书,少抄代码。
回答者:达达,服务端程序员
程序员就是把人类的需求语言翻译成计算机语言的人,所以可以通用译事三难:“信、达、雅”。
回答者:Kim Leo
其实,搭网站,写MIS/CMS/ERP这些,就算是一行行的写代码,结果也只能是你的领域知识不断提升,对于“编程能力”的提升没有多少的。就像是你根本无法解释在你写的系统中哪个地方应用了动态规划一样。
所以相对来说你所需要的是一些计算机科学内的领域知识。
还有,假如你写了代码要给别人看和给其他程序员用,应该就开始慢慢考虑接口和设计了。
或者你需要的是一本分析模式?
回答者:JX Consp
看看别人的轮子的形貌(主要是接口,其次是效率)之后自己造一个轮子
其实 STL 源码剖析 和 modern c++ design 不错,唯一问题是选择了 c++ 做教学语言
有兴趣可以学点认知和设计来了解好的接口长得是怎样的
回答者:海涛,软件开发需要低成本、快速响应
第1层:能做成东西(能运行)

第2层:做的东西能长时间或高负荷地运行

第3层:做的东西能长时间在高负荷下运行

第4层:能预先知道什么才是客户/行业需要的功能,并以最符合的代价(金钱、硬件、期限、人力)实现
回答者:DreamPiggy
多看书

多思考
改别人代码

学别人的架构

做自己的软件

写自己的架构
或许如此循环就入坑了吧。

高效,实用的chrome插件推荐

今天为大家推荐一些 高效,实用的chrome插件。希望给大家带来帮助。


Postman


前端程序员不可缺少的插件Postman,它是Google Chrome Web Store的一个工具,用来帮助我们测试RESTful API,我们可以为REST call添加任意我们指定的http头,然后模拟REST的调用,并测试结果。POST,GET,PUT等方式。很好用



下载地址:https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm


Adblock_Plus


Adblock是Mozilla Firefox网页浏览器所使用的扩展,现已发展出供Google Chrome、Internet Explorer、Opera和Android浏览器使用的版本。Adblock允许用户拦截包括广告在内的各种页面元素,并使这些内容不被下载和显示。



下载地址:https://chrome.google.com/webstore/detail/adblock-plus/cfhdojbkjhnklbpkdaibdccddilifddb?hl=zh-CN


Gestures for Google Chrome


Chrome Gestures是一个谷歌浏览器的鼠标手势插件。安装这款插件后,Chrome便能在鼠标的“指挥”下完成很多特定操作。除了能够显示出鼠标的轨迹,一个很人性化的设计就是提供了手势功能提示,于是我们便可以在操作时随时掌握即将发生的任务。



下载地址:https://chrome.google.com/webstore/detail/gestures-for-google-chrom/jpkfjicglakibpenojifdiepckckakgk?hl=zh-CN


JSONView


这是一款查看json数据的工具,很好用。



下载地址:https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc?hl=zh-CN


JSON Editor


jsoneditor 是一个基于 Web 的 JSON 数据浏览和编辑的工具。方便查看接口返回值。


下载地址:https://chrome.google.com/webstore/detail/json-editor/lhkmoheomjbkfloacpgllgjcamhihfaj


来自: IT江湖

链接:http://www.itjhwd.com/chrompl/

夫妻分开三个月以上基本可以考虑离婚了?你同意么?

夫妻分开三个月以上基本可以考虑离婚了。所谓感情最重要的就是陪伴,分开久了感情就淡了。


【钱与家庭】


我们总以为中国人是世界上最有家庭观念的种族之一,并且深深地为之自豪,但在老外的眼中,却未必如此。


有次我和澳洲的朋友谈起了中国人对家庭的重视。没想到,那几位澳洲朋友说:“你别生气,其实,我们觉得你们中国人并不爱家,并不像你们自己说的这么注重家庭。你们更爱金钱!


我愕然。于是,记下了这些真诚的对话:“无论在澳洲还是在中国当地,你们中国人的确很勤奋,中国人在海外也能比当地人积蓄更多的钱财,但我不认为这是你们中国人有经商的天赋,而是你们比我们更节俭,更能省,是通过降低生活标准来完成的金钱积累。


“你们平时很少上酒吧,周末也很少度假,甚至周末或假期都不休息。衣服都是从中国买了带过去,因为这里更便宜,我甚至看到有上海学生带了很多碗过去。”


你们会没日没夜的工作,把孩子都交给老人照管,除了关心孩子的学习成绩外,你们忙得很少和孩子一起玩。圣诞节你们甚至都不休息,而在海外春节是没有假期的,圣诞节不带着孩子去海滩,因为你们会觉得这个时候的机票、宾馆都贵,不如趁这个时候做点生意赚更多的钱,等淡季了再出门。

所以,你们华人的孩子尽管学业上很优秀,但他们总是觉得自己很另类,觉得和当地人比起来,父母更关心的是家庭的金钱收入、关心的是他们的学习分数,而不是他们的快乐。是的,我知道你要说什么,你们中国人爱说这是为了孩子,为了下一代多挣些钱,但每一代都说自己赚钱是为了下一代,那么究竟哪一代会真正地使用这笔钱呢?

生命是那么短暂,你们借口为了家庭的未来,而在现在就牺牲了家庭,我不知道这个帐是怎么算过来的,怎么还能体现你们自己很自豪的家庭观念。


你们为了工作,可以忍受长时间的夫妻分离,要在我们眼中,夫妻不在一起三个月以上,基本上就该考虑办离婚了。所以我们被派到海外来,就一定是全家一起来,我的妻子、孩子都搬到上海来。他们要是不愿意来,我就不可能接受这项工作,家庭比工作更重要呀。我在中国甚至听说过你们的上一辈人,甚至有夫妻几十年都分在两个地方的,到了退休的时候才能生活在一起。这太残酷了。难道你们就不会为了家庭放弃工作吗?工作也还可以再找呀!


我的中国公司里有很优秀的人才,但因为不是上海本地人,家庭就在另外城市,每个月甚至每两个月才能相聚一次,为什么其中的一方就不能放弃工作呢?


我知道有很多在城市里工作的农民,他们甚至只能一年回家一次,都说是为了家庭在挣钱,可这样的钱再多,又有什么意义呢?在澳洲,你们中国人基本都比当地人有钱,但没有人羡慕你们的生活,我认为你们就是金钱的机器,但你们为自己的赚钱爱好涂上了一层家庭的色彩。其实中国人真的是不会生活!

ღ_ 中国人唯一不认可的成功就是家庭和睦,人生的平淡!

英国某小镇。有一个青年人,整日以沿街为小镇的人说唱为生;这儿,有一个华人妇女,远离家人,在这儿打工。他们总是在同一个小餐馆用餐,于是他们屡屡相遇。时间长了,彼此已十分的熟悉。


有一日,我们的女同胞,关切地对那个小伙子说:“不要沿街卖唱了,去做一个正当的职业吧。我介绍你到中国去教书,在那儿,你完全可以拿到比你现在高得多的薪水。”


小伙子听后,先是一楞,然后反问道:“难道我现在从事的不是正当的职业吗?我喜欢这个职业,它给我,也给其它人带来欢乐。有什么不好?我何必要远渡重洋,抛弃亲人,抛弃家园,去做我并不喜欢的工作?”


邻桌的英国人,无论老人孩子,也都为之愕然。他们不明白,仅仅为了多挣几张钞票,抛弃家人,远离幸福,有什么可以值得羡慕的。在他们的眼中,家人团聚,平平安安,才是最大的幸福。它与财富的多少,地位的贵贱无关。于是,小镇上的人,开始可怜我们的女同胞了。


中国山东,有这样一对夫妇刚刚结婚时,妻子在济宁,丈夫在枣庄;过了若干年,妻子调到了枣庄,丈夫却一纸调令到了菏泽。若干年后,妻子又费尽周折,调到了菏泽,但不久,丈夫又被提拔到了省城济南。妻子又托关系找熟人,好不容易调到了济南。可是不到一年,丈夫又被国家电业总公司调到重庆。


于是,她所有的朋友,就给她开玩笑——你们俩呀,天生就是牛郎织女的命。要我们说呀,你也别追了,干脆辞职,跟着你们家老张算了。


但是,她以及公婆、父母,都一致反对。“干了这么多年,马上就退休了,再说, 你的这么好,辞职多可惜。要丢掉多少钱呀!再干几年吧,也给孩子多挣一些。”


其实,他们家的经济条件已经非常优越。早已是中层阶级,但是他们仍然惦念着那一退休.于是,夫妻两个至今依然是牛郎织女。


我们,是一个尚义轻利的民族。


中国人一直是为了某种自己未必真正明白的主义而活着。于是,中国人,不能在没有目标的生活中活着。而这个目标,可以是工作,可以是理想,可以是金钱,可以是孩子,可以是老人……但是,唯一不可能是的,就是自己。


中国人,可以很委屈的活着。可以是工作上的极不顺心,可以是婚姻上的勉强维持,可以是人际关系上的强作笑颜,可以是所有欲望的极端压制,可以是为了一个所谓的户口……哪怕牺牲自己一生的幸福,也在所不惜。


中国人,可以过异常艰难的日子,但并不能安贫乐道,他所遭受的一切不幸,必定有一个近乎玩笑的借口;中国人,可以把高官厚禄当作成功,中国人可以把身家百万当作理想,中国人可以抛却天伦之乐四海飘荡,但是,中国人唯一不认可的成功——是家庭的和睦,人生的平淡。


于是,一个有着五千年文明历史的国度,把爱国、崇高、献身、成功、立业的情结推向了极致——他们要么在大公无私,其实是舍本逐末的漩涡里苦苦挣扎,要么在肩负重任,其实是徒有其名的怪圈里受尽折磨……唯一遗漏的就是自由和自我。于是,在外国,众人皆知的道理;在中国,没人能明白。


人的一生,到底在追求什么?


有一个美国商人坐在墨西哥海边一个小渔村的码头上,看着一个墨西哥渔夫划着一艘小船靠岸,小船上有好几尾大黄鳍鲔鱼。这个美国商人对墨西哥渔夫能抓这么高档 的鱼恭维了一番,还问要多少时间才能抓这么多?墨西哥渔夫说,才一会儿功夫就抓到了。美国人再问,你为什么不待久一点,好多抓一些鱼?墨西哥渔夫觉得不以 为然:这些鱼已经足够我一家人生活所需啦!


美国人又问:那么你一天剩下那么多时间都在干什么?


墨西哥渔夫解释:我呀?我每天睡到自然醒,出海抓几条鱼,回来后跟孩子们玩一玩;再跟老婆睡个午觉,黄昏时晃到村子里喝点小酒,跟哥儿们玩玩吉他。我的日子可过得充满又忙碌呢!


美国人不以为然,帮他出主意,他说:我是美国哈佛大学企管硕士,我倒是可以帮你忙!你应该每天多花一些时间去抓鱼,到时候你就有钱去买条大一点的船。自然你就可以抓更多鱼,在买更多渔船。然后你就可以拥有一个渔船队。


到时候你就不必把鱼卖给鱼贩子,而是直接卖给加工厂。然后你可以自己开一家罐头工厂。如此你就可以控制整个生产、加工处理和行销。然后你可以离开这个小渔村,搬到墨西哥城,再搬到洛杉矶,最后到纽约,在那经营你不断扩充的企业。


墨西哥渔夫问:这又花多少时间呢?


美国人回答:十五到二十年。


墨西哥渔夫问:然后呢?


美国人大笑着说:然后你就可以在家当皇帝啦!时机一到,你就可以宣布股票上市,把你的公司股份卖给投资大众;到时候你就发啦!你可以几亿几亿地赚!


然后呢?


美国人说:到那个时候你就可以退休啦!你可以搬到海边的小渔村去住。每天睡到自然醒,出海随便抓几条鱼,跟孩子们玩一玩,再跟老婆睡个午觉,黄昏时,晃到村子里喝点小酒,跟哥儿们玩玩吉他。


墨西哥渔夫疑惑的说:我现在不就是这样了吗?


人的一生,到底在追求什么?


人的一生, 究竟在追求什么? 这是一个没有标准答案的问题, 一千个人可能会有一千个不同的回答。 但我们应该知道成功有很多种定义, 有些人终生都在追逐名利, 他们生活得很快乐(也许), 有些人毕生都在灯红酒绿, 他们生活得也很幸福(当然); 还有更多的人在平淡充实, 日复一日的工作和生活中度过平凡的一生, 这又何尝不是一种幸福呢。


或许, 真正的成功只有一个, 就是按照自己喜欢的方式,去度过人生。


什么叫信任?故事很短,道出人性!! 

一个小男孩和一个小女孩在玩耍,

小男孩收集了很多石头,

小女孩有很多的糖果,

小男孩想用所有的石头与小女孩的糖果做个交换,

小女孩同意了,

小男孩偷偷地把最大和最好看的石头藏了起来,

把剩下的给了小女孩,

而小女孩则如她允诺的那样,

把所有的糖果都给了男孩。


那天晚上,

小女孩睡得很香,

而小男孩却彻夜难眠,

他始终在想,

小女孩是不是也跟他一样,

藏起了很多糖果?


其实,

如果你不能给予别人百分之百的话,

你总是会怀疑别人是否给予了你百分之百,

拿出你百分之百的诚心,

对待所有的人和事,

然后睡个安稳觉吧,

生活中的很多人和事,

就如文中所说的一样,

自己到底有没有做到百分之百呢?


虽然我们深知猜疑这东西最伤感情,

可是还是会不断地忍不住地猜,

疑心是对他人的不信任,

对自己的不自信,

对彼此的折磨,

对感情的亵渎,

这是一个心魔。


世界上没有对与错,

只有因和果,

当我们付诸百分之百的真诚去对待身边的人,

不用去考虑他会以何种方式回报,

静静的等待

所有的一切都会吸引而来。