易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
可怕的两周岁

可怕的两周岁

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

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

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

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

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

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

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

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

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

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

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

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

pack 和 unpack 的使用

pack 和 unpack 的使用

来自kakapo的博客:http://www.kakapo.cn/blog/read.php?112,主要是实在不懂。事实上,我看完,我也不懂。

任何一款拥有socket操作能力的语言都有一个专门用于组包的函数,php也不例外!

用了很久php了却很少有机会用php进行一些二进制操作。 最近用php写一个socket客户端连接一个用C++语言开发的游戏服务端。 服务器端开发人员使用了二进制的形式来定义协议的格式。协议格式如下:

包头(2bytes)+加密(1byte)+命令码(2bytes)+帧内容

1.包头的内容是记录帧内容的长度;
2. 加密:0表示不加密,1表示加密;
3. 命令码为服务端命令识别符号;

一开始不了解php原来有pack可以来组装二进制包, 走了弯路,让服务端开发人员用C语言帮忙开发了的几个内存操作函数,按照协议规则返回二进制包,然后我将这几个方法编译成一组扩展函数供php使用。

话归正题,本文是介绍如何使用pack和unpack这两个方法的。php官方手册举例太少,不能很容易理解,特别是那些格式化参数的使用。

转 摘的参数中文说明:

pack/unpack 的摸板字符字符 含义
a 一个填充空的字节串
A 一个填充空格的字节串
b 一个位串,在每个字节里位的顺序都是升序
B 一个位串,在每个字节里位的顺序都是降序
c 一个有符号 char(8位整数)值
C 一个无符号 char(8位整数)值;关于 Unicode 参阅 U
d 本机格式的双精度浮点数
f 本机格式的单精度浮点数
h 一个十六进制串,低四位在前
H 一个十六进制串,高四位在前
i 一个有符号整数值,本机格式
I 一个无符号整数值,本机格式
l 一个有符号长整形,总是 32 位
L 一个无符号长整形,总是 32 位
n 一个 16位短整形,“网络”字节序(大头在前)
N 一个 32 位短整形,“网络”字节序(大头在前)
p 一个指向空结尾的字串的指针
P 一个指向定长字串的指针
q 一个有符号四倍(64位整数)值
Q 一个无符号四倍(64位整数)值
s 一个有符号短整数值,总是 16 位
S 一个无符号短整数值,总是 16 位,字节序跟机器芯片有关
u 一个无编码的字串
U 一个 Unicode 字符数字
v 一个“VAX”字节序(小头在前)的 16 位短整数
V 一个“VAX”字节序(小头在前)的 32 位短整数
w 一个 BER 压缩的整数
x 一个空字节(向前忽略一个字节)
X 备份一个字节
Z 一个空结束的(和空填充的)字节串
@ 用空字节填充绝对位置


string pack ( string $format [, mixed $args [, mixed $...]] )

一些规则:
1. 每个字母后面都可以跟着一个数字,表示 count(计数),如果 count 是一个 * 表示剩下的所有东西。
2.如果你提供的参数比 $format 要求的少,pack 假设缺的都是空值。如果你提供的参数比 $format 要求的多,那么多余的参数被忽略。

下面还 是用例子来说明用法会容易理解一点:

关于Pack:

下 面的第一部分把数字值包装成字节:
$out = pack("CCCC", 65, 66, 67, 68); # $out 等于"ABCD"
$out = pack("C4", 65, 66, 67, 68); # 一样的东西

下面 的对 Unicode 的循环字母做同样的事情:
$foo = pack("U4", 0x24b6, 0x24b7, 0x24b8, 0x24b9);

下面的做类似的事情,增加了一些空:
$out = pack("CCxxCC", 65, 66, 67, 68); # $out 等于 "AB\0\0CD"

打包你的短整数并不意味着你就可移植了:
$out = pack("s2", 1, 2);
# 在小头在前的机器上是 "\1\0\2\0"
# 在大头在前的机器上是 "\0\1\0\2"

在二进制和十六进制包装上,count 指的是位或者半字节的数量,而不是生成的字节数量:
$out = pack("B32", "...");
$out = pack("H8", "5065726c"); # 都生成“Perl”

a 域里的长度只应用于一个字串:
$out = pack("a4", "abcd", "x", "y", "z"); # "abcd"

要绕开这个限制,使用多倍声明:
$out = pack("aaaa", "abcd", "x", "y", "z"); # "axyz"
$out = pack("a" x 4, "abcd", "x", "y", "z"); # "axyz"

a 格式做空填充:
$out = pack("a14", "abcdefg"); # " abcdefg\0\0\0\0\0\0"


关于unpack:

array unpack ( string $format, string $data )

$data = "010000020007";
unpack("Sint1/Cchar1/Sint2/Cchar2",$data);

## array('int1'=>1, 'char1'=>'0','int2'=>2,'char2'=>7);

最后本文开头讲到的协议使用pack/unpack 举例程序代码为 :

$lastact = pack('SCSa32a32',0x0040, 0x00, 0x0006, $username, $passwd );

unpack('Sint1/Cchar1/Sint2/Cchar2/',$lastmessage);
IE中iframe跨域丢失Session问题(续 p3p)

IE中iframe跨域丢失Session问题(续 p3p)

P3P,不算是新名词,但还是有些人不清楚。事实上我也不清楚。。。在百度上看到有这玩意就备份下来。说真的,我只是知道用,但不知道为什么用。额。。很明显,因为在ucenter同步的时候,在discuz的ui/api里有写过。

看内容吧。。。。

IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox目前还不支持P3P安全特性,firefox中自然也不存 在此问题了。

在frameset里面,也就是里面的frame是来自第三方站点(不同IP或不同域名),那么默认情况下IE会自动禁用这些站点的cookie, 也就是在请求某url时在HTTP header里不发送它们的cookie,包括session的cookie。注意,这些站点在response里面设置的cookie还是会被发送到浏 览器的。

在用户浏览a.php时 A.com写入的为第一方Cookie,其嵌入的iframe指向 b.php.这时B.com写入的就为第三方Cookie了,所以它是被IE当在了大门外。 所以,每次当用户提交的cookie提交时,就挂掉了.因为传不到真实的服务器.

解决方案.

PHP的程序,可以直接在B网站中写入www.kobsky.cn 小眼世界ýñ ëÕRÏz-Z

<?php
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
?>
这样就能接受第三方的Cookie啦。

lighttpd的服务器

server.modules = ("mod_setenv")
setenv.add-response-header = ( "P3P" => "CP='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR'")
apache的服务器

<VirtualHost>
Header set P3P 'CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'
</VirtualHost>
IIS的服务器www.kobsky.cn 小眼世界ýñ ëÕRÏz-Z

增加一个网站http头来解决问题;www.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
管理工具——〉选择一个网站——〉属性——〉 http头,增加一个http头www.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
然后输入头名:P3Pwww.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
输入头内容:CP=CAO PSA OUR

jsp页面:

<%
response.setHeader("P3P","CP=CAO PSA OUR");
%>
java代码最简单的办法,增加一个filte:
public class TransNameFilter extends HttpServlet implements Filter {
private static org.apache.commons.logging.Log logWriter =
LogFactory.getLog(TransNameFilter.class.getName());

/**
*
*/
public TransNameFilter() {
super();

}
/* (非 Javadoc)
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig arg0) throws ServletException {

}

/* (非 Javadoc)
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {

HttpServletRequest hreq = (HttpServletRequest) request;
String transName = hreq.getParameter("transName");
if (Util.isNullOrEmpty(transName)) {
logWriter.fatal(" there is no transName for this request");
} else {

logWriter.info(" transName is " + transName);
}

HttpServletResponse res = (HttpServletResponse) response;
//iframe引起的内部cookie丢失
res.setHeader("P3P","CP=CAO PSA OUR");
if (chain != null)
chain.doFilter(request, response);

}

/* (非 Javadoc)
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {

}

}
PHP笔记

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)等。值得一看。

typecho 插件开发(三)

typecho 插件开发(三)

在typecho开发插件的时候,很有可能会用到关联插件(即,部分信息需要从其他插件里来读取)因此,在插件激活的时候就得先判断是否关联插件已经启用。

最初我的代码是:

$mailOptions = Typecho_Widget::widget('Widget_Options')->plugin('CommentToMail');
if(emptyempty($mailOptions)){//这里会出现两个empty,这是编辑器的关系,代码中只有一个
throw new Typecho_Plugin_Exception(_t('对不起,数据库备份插件需启用CommentToMail插件。'));
}
但是在这样处理的时候,会提示“找不到CommentToMail插件的配置信息”,直接就抛出异常

于是代码改成:

try{
$mailOptions = Typecho_Widget::widget('Widget_Options')->plugin('CommentToMail');
}catch(Exception $e){
throw new Typecho_Plugin_Exception(_t('对不起,数据库备份插件需启用CommentToMail插件。'));
}

于是这样的出错提示信息就较为友好了。

由于关联了其他插件,因此在处理的时候,还要再判断这个$mailOption是否存在,因此我把它设为了protected static $mailOptions,然后在要处理的页面会判断这个变量是否为empty。如果是后台处理就抛出异常,前台处理则直接return;不作继续

cookie,又见cookie

cookie,又见cookie

提起这个问题,很沉重。在cookie上我遇到很多很多奇怪的问题了(其实只是看起来奇怪而已)

一一列一下吧
1、页面是200状态,就是打不开。一直显示正在打开。但其他页面正常(首页并无其他特别的长耗时的代码)
2、页面显示XXX错误(不记得代码是多少了。。以前在做测试的时候遇到过)
3、cookie明明注册了。但却总是无效。

一一列解吧。
1、cookie数过多了,事实上,我没有设很多的cookie,只是,我在访问的时候,很多其他链接也帮我带上了cookie,导致在我这个域名根下,cookie数量过多。
在Cookie常识 一文中我转载过DBA notes里的几句话:Cookie 是个很有趣的话题。根据 RFC 2109 的描述,每个客户端最多保持 300 个 Cookie,针对每个域名最多 20 个 Cookie (实际上多数浏览器现在都比这个多,比如 Firefox 是 50 个) ,每个 Cookie 最多 4K,注意这里的 4K 根据不同的浏览器可能不是严格的 4096 。别扯远了,对于 Cookie 最重要的就是,尽量控制 Cookie 的大小,不要塞入一些无用的信息。
解决方法:清空cookie或者删除非本站cookie
2、cookie长度超出限制了。当时是在apache的服务器下,我用的是firefox,出错情况是提示cookie超长(错误代码记不清,最后是清空cookie解决 )
这里也有一位朋友有类似情况:Cookie 太大导致页面无应答的问题,这是他的总结:

  1. 好像在IIS6下特定环境下就会出现这个问题,因为当时整个项目有10多台Web服务器做了F5,但只有2台出现这个问题。针对这个问题,我在 IIS7下也进行了一下测试,发现当Cookie的大小达到30000多字节时,就会出现有应答为200的包,但应答的内容为空,在IE上显示为“ Internet Explorer cannot display the webpage ”,所以具体能使用cookie有多大,IIS6和IIS7下标准不一。
  2. 建议不要将用户配置等过大的信息写入cookie,搞不清楚什么时候IIS就出错了

3、检查一下服务器时间与本地时间是否一致。对于PHP5,有的人总是忽略了时差。检查一下吧。

最后:
1、对多窗口浏览器,其实很郁闷的,你设置的cookie如果是没有过期时间,即关闭窗口即自动删除时,如果不关闭整个浏览器,而关闭当前tab,那么,是无法删除的
2、对于swfupload,IE和FF下面会有不同的情况,传说中flash读的cookie是IE生成的,因此很多时间如果swfupload涉及到了用户登录情况时,总会不正常(后台在上传),记得把param中加个session_id的参数,POST过去。

BTW:这个,我真的很郁闷。有时候我的网站首页会无法打开,为什么呢?因为sablog(或者是我做的hacker)中生成了两个PHPSESSION的cookie,一个所属neatstudio.com,而另一个是.neatstudio.com,结果就导致了页面无法打开(看来,以后还是需要打开neatstudio.com后自动跳转到www.neatstudio.com才比较好,这样就不会出现类似的问题了。懒得改代码了。等 Session消失后就OK了。是不是太不注意用户体验了?)

笔记:json_encode和jquery等

笔记:json_encode和jquery等

一些笔记
1、json_encode与json_decode的。开花石头在村里说,如果json_encode是字符串,那么在解码的时候还是字符串而不是数组,这点与手册上写的不太一样(是指json_decode的第二个参数是true的情况)
具体我没有测试,我想石头既然能够发出来那么一定是有这种情况发生,因此算是做个笔记

2、jquery。在使用$('.xxx').hover时,如何知道当前hover对象在整个$('.xxx')对象中的索引值。事实上,我早就知道有$('li').index()之类的用法,但真的一次都没有成功过。简单的例子:

$('#test li').hover(function(){
alert( $('#test li').index(this) );
},function(){
//...
});

差不多就是这样。了解到索引值是多少后,就可以针对它们做很多事。$("xxx:eq("+index+")").text()等操作都可以操作了。

3、在InfoQ上看到有为PHP用户写的AS简单教程(InfoQ上的PDF下载时为显示404,请使用此链接:http://www.riameeting.com/magazine/pdf/RIAMeetingWeeklyReportNum24.pdf),这个版本是在线的,http://blog.csdn.net/lihe111/archive/2010/01/14/5189572.aspx

4、还是InfoQ,领域驱动设计这本书的简化版,原书我有,只是看infoQ上介绍说,这几章是精选出来的。因此想简单了解的话,确实不错:http://www.infoq.com/resource/minibooks/domain-driven-design-quickly/zh/pdf/dddquickly-chinese-version.pdf

5、对于WEB开发人员来说,dreamweaver和fireworks等是必备工具,如果不是专业的前端人员,d8和f8就足够了。而且很小,只有100M都不到。因为这些不是正版所以我不提供下载地址。

新闻:开源公司 IronTec将推动PHP进驻Android平台

新闻:开源公司 IronTec将推动PHP进驻Android平台

看到这个新闻不转载一下恐怕对不起自己。
本来都以为自己会学习scala然后进行android的开发了,现在看来,还有其他的途径啊。当然,效率可能不能保证吧?(小应用估计没大问题。)不过在看到新闻的同时也要想到,PHP做界面的话,可不一定就OK呀。

上新闻:

对Java心生厌恶的朋友们 不妨来看看Android上的新玩意--PHP。

PHP可不仅仅只能在互联网站上发 展,一个PHP for Android (PFA)网站表示他们将可以发布编程模型、工具盒文档让PHP在Android上实现应用。

该项目的主要赞助商是开源公司IronTec,PFA使用Scripting Layer for Android (SL4A),也就是Androd Scripting Environment (ASE)来实现这一点,您可以参看他们的网站来了解更多技术内幕。

【事实上,我并未找到这个网站,而对于ASE,其实在09年infoQ上已经有介绍】

Android Scripting Environment(ASE)项目为Android增加了脚本支持。通过安装ASE,我们可以在设备上编写脚本并执行。

虽然现在已经涌现出了不少工具用于开发Android应用,但如果能在设备上编写脚本将是一件很爽的事情,这样我们就可以直接在设备上进行试验并快 速编写原型而无需启动IDE、编译、部署等。

ASE通过两种手段来访问Android API。目前我们可以通过ASE使用Python及Lua运行时来运行脚本,这些运行时都是本地应用,他们通过JSON-RPC来访问Android API。

由于Android本身基于Java,因此我们还可以运行基于JVM的语言。目前可以使用的是BeanShell——Java语言的动态版本。基于JVM的解释器就 在ASE内部加载,无需间接的RPC调用。

ASE还计划让更多的JVM语言运行在Android上。虽 然JRuby早就能运行在Android上了,但却存在一些问题,首当其冲的就是Android使用了Dalvik VM(Android应用被编译成Dalvik VM字节码)。

有兴趣的话就去看看ASE 的SVN仓库吧,那上面清 楚地表明了未来的Ruby支持也将基于JSON-RPC。

我们还可以通过Rhodes在 Android设备上使用Ruby。

大家都对ASE未来的发展拭目以待。iPhone不允许上面的应用自带解释器,而ASE却通过脚本扩展了Android,并且用户可以创建、编辑这 些脚本。

InfoQ原文:http://www.infoq.com/cn/news/2009/07/android-scripting

Neatpic 修正BUG

Neatpic 修正BUG

这次neatpic重新修正了一些BUG,但代码还没有整理,因此暂时不放出下载,等代码整理好后再放出来。
目前测试地址为:http://neatstudio.com/neatpic/
修正:
1、支持中文文件名、目录名(怀疑所有的文件系统都是ansi方式读取而不是UTF8,不能确认)
2、文件名、路径隐藏(采用?file=imagexxxxxxxx)之类的方式,因为只显示缩略图,所以读上几十个缩略图的代价应该还是可以忍受的。

其他没有什么特别的更新,可能也会BUG被改出来,敬请测试

basename的郁闷

basename的郁闷

又是basename,其实真的不想谈它,只是这两天在修正neatpic的BUG时,又被它折腾了。
前两天有朋友在回复里说,还是对中文处理一下吧。所以,我想了想,对中文又重新更新了下,结果问题就来了。我明明文件名是:“图片2副本.jpg”,但在cache之后就成了“2副本.jpg”,2前面的图片两个字就没有了。。这个,也太妖异了。得,你说不支持中文吧,干脆连后面的副本也没有就算了。却偏偏把前面的中文去掉了。

后来用pathinfo也测试了一下,同样的问题。。。

但是我在win服务器下却一切正常。后来我检查了一下我的WEB服务器,我的版本是5.2.6,

测试代码:echo basename('E:/test/图片2副本');点击查看测试页。

这个真叫一个妖啊。。。

所以我现在是:str_replace(dirname($filename).DIRECTORY_SEPARATOR,'',$filename);

希望遇到同样问题的能够再次避免吧。。