手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:cookie

可怕的两周岁

本文还是来自kakapo的博客。主要是因为我看到其中的一段话:

可怕的两周岁:http://www.kakapo.cn/blog/read.php?166
  1. 威胁也不是一个选择。“穿上外套,否则我就揍你/把你自己留在家里/再也不带你出门了。”这可不是选择,而是威胁。威胁只会导致你的孩子害怕你。并且还会给父母设下一个陷阱:如果你的孩子还是拒绝穿外衣,你就只好把你的威胁变成现实,这样,只能使情况更加糟糕。  

在我的好友中。有不少都是有孩子的。有不少和我们家的孩子差不多大。我们的小孩也是刚刚2周岁出头。而我也经常有做这种威胁的事情,比如小孩子很喜欢从很小就开始盖的黄小鸭的毯子,有时候睡觉醒来就会爬过去把黄小鸭拿起来盖在身上才能继续睡,否则就不肯睡。只是,虽然他这么喜欢。他还是会用嘴咬这条毯子。估计也是更小的时候养成的习惯。因为毯子总归不太卫生,再怎么洗,总感觉还有小家伙尿床的痕迹,所以不喜欢他咬来咬去的。于是就对他说,你再咬黄小鸭,大灰狼就把它带走了。当然也会说,黄小鸭被你天天咬的很疼,你再咬啊咬的,黄小鸭就要自己走了。于是现在提到他咬毯子的事情,他就会说,大灰狼会拿走它的。。。。额,这也算是威胁了。唉。

上全文吧:
或许你的宝宝昨天还是天使,今天就开始成为挑战你忍耐力的恶魔。斯波克有句话形容2岁的孩子,说“可怕的两周岁”,听上去有些匪疑所思。但是,不可否 认,孩子这时候会有许多矛盾的特点:既有依赖性,又有独立性;既可爱又可恶;既大方又自私。有许多令人兴奋的事情都发生在这个阶段,所以该阶段无论对父母 还是孩子都是一个挑战。

■ 心理探秘
这个时期的宝宝正处于独立期,开始表现出自发性。想睡觉了、肚子饿了、感到疲倦了、对自己能 力未达到理想状态等,一点小事情都可能引起宝宝发脾气。这就是“可怕的两岁儿”,他正在渡过他人生里的第一次反抗期。

■ 理解这个时期的孩子
首先父母要理解宝宝在这个时期的拗劲,他们并非想故意和你作对,是心理发育的不平衡使他天性如此。创造一个良好的家庭环境本身 就会使宝宝减少任性。父母平时应尽量避免对他的环境做较大的变化,因为这种超过他心理接受能力的外界刺激会使宝宝感到总是无法预料和处理即将发生的变化。 这让他恼怒、害怕,只能以哭闹来应付这些变化。当然在原则性问题上,我们的确主张家长要制定一些严格的规定,但你要仔细考虑这些规定的内容和适用范围。

■ 妈妈的妙招
宝宝总会长大,也总会进入这个“难搞”的两岁,就让我们来看看各家妈妈们是怎样机智地应对宝宝的反抗期。
贴心提示:
1. 提前预留充足的时间让宝宝自己动手,在打算帮忙而宝宝说“不”时,就放手让他自己去做;
2.面对宝宝的发脾气,爸妈要找清原因,区分宝宝需求的合 理性,坚持一定的原则,让宝宝学会自己控制情绪,不能一味让步,否则容易使宝宝任性;   
3.多给宝宝一些动眼动脑和动手的机会,让他自己去感 受去实践,有利于开发宝宝的智力;   
4.经常聆听宝宝的讲话,让宝宝表达自己的想法,对宝宝的心灵成长起极大的作用。

■ 对孩子的过分要求给以拒绝时要注意你的方式
很多家长误认为拒绝孩子就是简单冷漠地说声“不行”或者给予一顿暴打。其实对孩子来说,妈妈置之不理的 表情和实际行动比语言更有效。等他安静下来,妈妈再主动邀请他玩新游戏,或把他心爱的玩具拿给他,以转移他的注意力。换句话说,对待宝宝的过分任性,要立 场坚定,态度亲切。
- 紫菜不仅含铁丰富,而且含维生素B12,铁和维生素B12都是造血所必需的营养素。可以适量给孩子添加紫菜。紫菜每次食用15克为好。为清除污染、毒素, 食用前最好用清水泡发,并换一两次水。胃肠消化功能不好或者腹痛便溏的宝宝应少吃紫菜。

违拗症  
孩子到了两三岁的时候,好象是天性促使他们自己做决定,而不允许他人干涉。但是这么大的孩子认识世界毕竟有限,因此在自行做决定和反对外来压力时心里很紧 张。正因如此,要想和两三岁的宝宝友好相处可不是一件容易的事。

■ 就爱说“不!”
无疑,这就是所谓的违拗症,或是对父母权威的 挑战。违拗症是一种经常发生的相当正常但却令人痛苦的行为,在孩子的第2年中至少会持续6个月。在某种意义上,这个阶段可以说是青春期的预演。在他们简单 的人生当中,宝宝第一次开始认识到自己是个独立的人。当你让宝宝把某个东西还给你,而他抓着那个东西不放,并说“不,我的”,你就会知道他已经有了自我意 识。随着他会说的词汇的增加,他会开始使用自己的名字,对自己的玩具表现出占有欲,开始对衣服有所挑剔,并且开始抗拒你的一些简单要求。他会开始要看看违 背你的意志的后果。“不”这个词对他充满了魅力。
孩子拒绝做你想要他做的事情是完全正常的。他这么做并非有意让你生气或是故意违抗你的意旨。他之 所以这么做是因为他发现原来自己也是一个个体,他正在尝试自己做决定的能力。

■ 爸爸妈妈要理解自己的孩子
既不要过多地干涉宝宝 做什么,也不要催促他做什么。尽可能地多说些有趣的事情来引逗他去按你的意思去做。家长固然是要制定些严格的、持之以恒的规矩,但是要仔细考虑这些规矩的 内容和适用范围。如果发现自己对孩子说“不行”的时候大大地多于“行”,就可能是你制定的规矩太多了。另外,如果家长一味地妥协,孩子就会被宠坏。所以, 关键是如何在这两者之间找到均衡。

■ 巧妙地给宝宝选择的权力
有时你可能会跟他解释,但他仍然不想做你要求他做的事情。这是因为 他想要自己做出选择。
“这一阶段如果给孩子提供选择项让他自己做出选择,会有助于锻炼他的决策技巧。“你是想穿你的绿外套呢还是黄外套?”“你是 要自己走呢还是要抱着?”只要孩子们选择其一,你的短期目标就达到了。   
但你需要确保你提供的选择项是你自己能接收的。如果你是要去某个地 方,就别说:“你是想去呢还是在家里呆着?”如果孩子选择在家呆着,而你又必须要去,那你的孩子得到的教训就是他的选择无关紧要,你提出选择时并没打算说 话算数。
还有,威胁也不是一个选择。“穿上外套,否则我就揍你/把你自己留在家里/再也不带你出门了。”这可不是选择,而是威胁。威胁只会导致你 的孩子害怕你。并且还会给父母设下一个陷阱:如果你的孩子还是拒绝穿外衣,你就只好把你的威胁变成现实,这样,只能使情况更加糟糕。

PHP笔记

1、老王的乱炖中写了一个例子。

写代码要细心【http://hi.baidu.com/thinkinginlamp/blog/item/5e8062d9b33ccc2110df9b2a.html】

看一段PHP代码,设想一下它的输出结果,可以用来做面试题:

<?php if ($a = 100 && $b = 200) { var_dump($a, $b); } ?>

我眼睛一闭就随便想了一下$a=100,$b=200。然后看标题是写代码要细心。再仔细看看。才发现。。。额,我错了。

2、yaml

yaml这东西有据可证以来,好象在国内,应该算是QeePHP最早拿来做应用(我是指开源项目中),确实这东西挺方便【现在新浪sae的配置文件就是用yaml的】

初学者可以看看http://www.lanyg.com/blog/?p=63,Tim在这里写了一些简单的入门。不过我相信,足够你使用了。

yaml主要还是写起来方便。而且不用过多的担心语法(xml还需要闭合。array的话也需要注意PHP语法),yaml反正解析出来,要么不对,要么就正确。至少不会报一些奇怪的错误。

3、HTTP协议。

这篇也是来自于tim的博客:http://www.lanyg.com/blog/?p=33,他也是转载的csdn的文章http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx,原作者是jeffrey,内容挺长。不过如果你想要模拟http POST和GET数据,你真的可以看一下这一篇东西

它介绍了【HTTP协议详解之消息报头】,也教你如何用telnet查看http协议的通讯过程(当然现在我们都是用firebug或者fildder之类的工具),文章最后介绍了一些补充协议,如代理(proxy),通道(tunnel)等。值得一看。

Tags: yaml, operation

Facebook图片管理架构(转帖学习一下)

Facebook 的照片分享很受欢迎,迄今,Facebook 用户已经上传了150亿张照片,加上缩略图,总容量超过1.5PB,而每周新增的照片为2亿2000万张,约25TB,高峰期,Facebook 每秒处理55万张照片,这些数字让如何管理这些数据成为一个巨大的挑战。本文由 Facebook 工程师撰写,讲述了他们是如何管理这些照片的。

旧的 NFS 照片架构
老的照片系统架构分以下几个层:
# 上传层接收用户上传的照片并保存在 NFS 存储层。
# 照片服务层接收 HTTP 请求并从 NFS 存储层输出照片。
# NFS存储层建立在商业存储系统之上。

因为每张照片都以文件形式单独存储,这样庞大的照片量导致非常庞大的元数据规模,超过了 NFS 存储层的缓存上限,导致每次招聘请求会上传都包含多次I/O操作。庞大的元数据成为整个照片架构的瓶颈。这就是为什么 Facebook 主要依赖 CDN 的原因。为了解决这些问题,他们做了两项优化:
# Cachr: 一个缓存服务器,缓存 Facebook 的小尺寸用户资料照片。
# NFS文件句柄缓存:部署在照片输出层,以降低 NFS 存储层的元数据开销。

新的 Haystack 照片架构
新的照片架构将输出层和存储层合并为一个物理层,建立在一个基于 HTTP 的照片服务器上,照片存储在一个叫做 haystack 的对象库,以消除照片读取操作中不必要的元数据开销。新架构中,I/O 操作只针对真正的照片数据(而不是文件系统元数据)。haystack 可以细分为以下几个功能层:
# HTTP 服务器
# 照片存储
# Haystack 对象存储
# 文件系统
# 存储空间

存储
Haystack 部署在商业存储刀片服务器上,典型配置为一个2U的服务器,包含:
# 两个4核CPU
# 16GB – 32GB 内存
# 硬件 RAID,含256-512M NVRAM 高速缓存
# 超过12个1TB SATA 硬盘

每个刀片服务器提供大约10TB的存储能力,使用了硬件 RAID-6, RAID 6在保持低成本的基础上实现了很好的性能和冗余。不佳的写性能可以通过高速缓存解决,硬盘缓存被禁用以防止断电损失。
文件系统
Haystack 对象库是建立在10TB容量的单一文件系统之上。文件系统中的每个文件都在一张区块表中对应具体的物理位置,目前使用的文件系统为 XFS。
Haystack 对象库
Haystack 是一个简单的日志结构,存储着其内部数据对象的指针。一个 Haystack 包括两个文件,包括指针和索引文件:

大小: 17.5 K
尺寸: 500 x 231
浏览: 3357 次
点击打开新窗口浏览全图

Haystack 对象存储结构

大小: 36.73 K
尺寸: 500 x 232
浏览: 3442 次
点击打开新窗口浏览全图

大小: 11.91 K
尺寸: 432 x 154
浏览: 3743 次
点击打开新窗口浏览全图

指针和索引文件结构

Haystack 写操作
Haystack 写操作同步将指针追加到 haystack 存储文件,当指针积累到一定程度,就会生成索引写到索引文件。为了降低硬件故障带来的损失,索引文件还会定期写道存储空间中。

Haystack 读操作
传到 haystack 读操作的参数包括指针的偏移量,key,代用Key,Cookie 以及数据尺寸。Haystack 于是根据数据尺寸从文件中读取整个指针。

Haystack 删除操作
删除比较简单,只是在 Haystack 存储的指针上设置一个已删除标志。已经删除的指针和索引的空间并不回收。

照片存储服务器
照片存储服务器负责接受 HTTP 请求,并转换成相应的 Haystack 操作。为了降低I/O操作,该服务器维护着全部 Haystack 中文件索引的缓存。服务器启动时,系统就会将这些索引读到缓存中。由于每个节点都有数百万张照片,必须保证索引的容量不会超过服务器的物理内存。

对于用户上传的图片,系统分配一个64位的独立ID,照片接着被缩放成4种不同尺寸,每种尺寸的图拥有相同的随机 Cookie 和 ID,图片尺寸描述(大,中,小,缩略图)被存在代用key 中。接着上传服务器通知照片存储服务器将这些资料联通图片存储到 haystack 中。

每张图片的索引缓存包含以下数据

大小: 15.81 K
尺寸: 500 x 178
浏览: 3648 次
点击打开新窗口浏览全图

Haystack 使用 Google 的开源 sparse hash data 结构以保证内存中的索引缓存尽可能小。
照片存储的写/修改操作
写操作将照片数据写到 Haystack 存储并更新内存中的索引。如果索引中已经包含相同的 Key,说明是修改操作。

照片存储的读操作
传递到 Haystack 的参数包括 Haystack ID,照片的 Key, 尺寸以及 Cookie,服务器从缓存中查找并到 Haystack 中读取真正的数据。

照片存储的删除操作
通知 Haystack 执行删除操作之后,内存中的索引缓存会被更新,将便宜量设置为0,表示照片已被删除。

重新捆扎
重新捆扎会复制并建立新的 Haystack,期间,略过那些已经删除的照片的数据,并重新建立内存中的索引缓存。

HTTP 服务器
Http 框架使用的是简单的 evhttp 服务器。使用多线程,每个线程都可以单独处理一个 HTTP 请求。

结束语
Haystack 是一个基于 HTTP 的对象存储,包含指向实体数据的指针,该架构消除了文件系统元数据的开销,并实现将全部索引直接存储到缓存,以最小的 I/O 操作实现对照片的存储和读取。

本文国际来源:http://www.facebook.com/FacebookEngineering#/note.php?note_id=76191543919&ref=mf

中文翻译来源:COMSHARP CMS 官方网站

我的来源:http://zys.8800.org/index.php/archives/334

Tags: facebook, 架构

《街霸4》PC性能测试工具

为了帮助PC玩家更好地测试自己的系统性能,Capcom今天放出了《街霸4》的基准测试工具,内置几个不可控制的非交互性对打场景,既是对游戏的展示,也是对PC硬件的考验

下载地址:TechPowerUp  WorthPlaying

顺附《街霸4》PC版推荐配置:

-操作系统:Windows Vista
-处理器:Core 2 Duo 2.0GHz等级或更高
-内存:2GB
-硬盘:10GB可用空间
-显卡:支持DX9.0c/SM3.0、512MB显存;GeForce 8600/Radeon X1900或更高
-声卡:兼容DX9.0c
-手柄:推荐Xbox 360 for PC手柄

好期待啊。。。
原文:http://www.cnbeta.com/articles/86616.htm

大小: 37.44 K
尺寸: 500 x 278
浏览: 1979 次
点击打开新窗口浏览全图

备注:

1、效果全开,FPS在8上下

2、效果全关,30上下

3、intelE2200,2G内存,nvidia 9500GT 512内存

 

Tags: sf, 街霸

Firebug中的console tab使用总结

网页开发人员使用firebug那是理所当然的事,IE8也在学习firebug,而且,快捷键都一样哦。F12打开firebug(IE也是这个快捷键,哈哈)

原文地址:http://www.cnblogs.com/cocowool/archive/2009/05/12/1454696.html

作者:小狼

内容如下:

Firebug对于Web开发人员来说,已经成为了不可或缺的工具,但是在我日常的工作中,常常感觉还没有能够深刻的挖掘出她的潜力,今天花了点时间仔细研究了Console和命令行的使用在提高工作效率方面的作用,
记下来和大家分享一下.

Firebug一共有Console,HTML,CSS,Script,DOM,NET六个Tab,今天着重说一下Console的用法。
其实我们对于Console应该非常熟悉,因为这里是Firebug给出各种信息的窗口,而这也正是Console的主要用途,日志记录(Logging)。
除此之外,Console还提供了通过命令行方式来调试Javascript的方法。下面就来学习一下Console的用法。

1、Firefox的日志记录(Logging in Firefox)。
通过Console的记录方法,我们可以不再使用烦人的alert或者document.write方法来进行调试。
Firebug提供了五种日志的类型:
    console.log:记录一行信息,无任何图标提示;
    console.debug:记录一行信息,带超链接,可以链接到语句调用的地方;
    console.error():向控制台中写入错误信息,带错误图标显示和高亮代码链接;
    console.info():向控制台中写入提示信息,带信息图标显示和高亮代码链接;
    console.warn():向控制台中写入警告信息,带警告图标显示和高亮代码链接;

    consle打印字符串支持字符串替换,使用起来就像c里面的printf(“%s",a),支持的类型包括:
    %s        string,字符串
    %d,%i    整型
    %f        浮点
    %o        对象
    如果使用%o的话,对象就会用绿色的超链接表示出来,单击后会将你带到DOM视图。

2、分组(Grouping)。
    如果某一类的信息特别多时,分组就有利于逻辑的划分。
    使用上很简单,参见代码。
            function consoleGroup(){
                var groupname = "Group 1";
                console.group("Message group %s", groupname);
                console.log("This is the 1 message in %s", groupname);
                console.log("This is the 2 message in %s", groupname);
                console.log("This is the 3 message in %s", groupname);
                console.groupEnd();
                
                goupname = "Group 2";
                console.group("Message group %s", goupname);
                console.log("This is the 1 message in %s", goupname);
                
                var subgroupname = "Sub group 1";
                console.group("Message group %s",subgroupname);
                console.log("This is the 1 message in %s", subgroupname);
                console.log("This is the 2 message in %s", subgroupname);
                console.log("This is the 3 message in %s", subgroupname);
                console.groupEnd();
                
                console.log("This is the 2 message in %s", goupname);
                console.groupEnd();
            }

   
3、console.dir和console.dirxml
    console.dir可以将一个对象的所有方法和属性打印出来,这个方法无疑是非常有用的,我们不再需要object.toString这样的方法支持了,只要有firebug,查看对象也变得很轻松
    同时,我们也可以将页面中的元素作为一个对象打印出来,但是你要小心,因为这将输出众多的信息,可能你会迷失在繁杂的信息中而找不到自己需要的条目。
    我们可以通过分组将这些大量的信息放入一个分组中,这样可以在逻辑上更清楚一些。
            function consoleDir(){
                function Car(){
                    this.Model = "Old Model";
                    this.getManu = function(){
                        return "Toyota";
                    }
                }
                
                var objCar = new Car();
                console.dir(objCar);
                console.dir(zoo);
                
                var groupname = "Css Style";
                console.group("The button Style", groupname);
                console.dir(document.getElementById('consoledir').style, groupname);
                console.groupEnd();
            }

           
    console.dirxml    打印出HTML元素的XML表示形式.

4、断言(console.assert())。
    console.assert()可以用来判断一个表达式是否正确,如果错误,他就会打印错误信息在控制台窗口中。
    
5、追踪(console.trace())。
    console.trace()是一个非常有趣的功能。我们先来看看官方的解释:打印Javascript执行时刻的堆栈追踪。
    这个函数可以打印出程序执行时从起点到终点的路径信息。
    比如如果我们想知道某个函数是何时和如何被执行的,我们将console.trace()放在这个函数中,我们就能够的看到这个函数被执行的路径。
    这个函数在调试其他人的源代码时非常有用。    

6、计时(Timing)。
    console.time(timeName)可以用来计时,这个在我们需要知道代码执行效率的时候特别有用,就不用自己造轮子了。
            function consoleTime(){
                var timeName = "timer1";
                console.time(timeName);
                var a = 0;                
                for(var i = 0; i < 100; i++){
                    for(var j = 0; j < 100; j++){
//                        console.log('Hello world');
                        a = a + 1;
                    }
                }
                
                console.log("a = %d", a);
                console.timeEnd(timeName);
            }

7、Javascript分析器(Javascript Profiler)。
    我们可以通过代码console.profile('profileName')或者单击Profiler标签来进行Javascript代码执行的分析。这个功能有点类似于console.time(),可以帮助我们评估
    代码的表现,但是能够提供比console.time()更详细的信息。

    有三种方法可以调用Javascript profiler。一种是在代码中写入分析脚本,一种是单击profile标签,最后还可以在命令行下输入命令来执行。
    执行后,可以看到详细的输出结果,下面对各项进行一些说明:
    Function Column:显示调用的函数名称;
    Call Column:显示调用次数;
    Percent Column:显示消耗的时间比;
    Own Time:显示函数内部语句执行的时间,不包括调用其他函数的时间;
    Time Column:显示函数从开始到结束的执行时间;
    Avg Column:平均时间。Avg = Own / Call;
    Min & Max Column:显示最小和最大时间;
    File Column:函数所在的文件;    

8、其他的一些选项。
    在Console Tab的最右侧有一个Options的选项,在这里可以自己定义需要显示的错误,其内容很好理解,这里就不多说了。
    有一点就是Firebug1.3以后,多了
    Show Chrome Errors
    Show Chrome Message

    等几个选项,这几个选项还没有验证过其具体的作用,哪位知道的可以共享一下。

 

[参考资料]

1、Firebug Tutorial    http://michaelsync.net/2007/09/09/firebug-tutorial-logging-profiling-and-commandline-part-i
2、Firebug Tutorial    http://michaelsync.net/2007/09/10/firebug-tutorial-logging-profiling-and-commandline-part-ii

Tags: firebug, console

Records:912