现在答辩完了,有时间来写这篇日志,也许可以给6月份去九寨的人一点帮助。
很久前都想去九寨沟,但是一直苦于花费较多,就一直没去,这次因为马上就要离开四川了,所以一定要去一次,而且这次是我一个人去的,本来事先约好的同学,但是同学觉得还没答辩,出去玩不好,时间也比较紧张,就放弃了。想了又想,然后同事鼓励了一下,我就决定,一个人去旅行,而且不跟团,也算是一种经历吧,以后就没这种机会了。
6月12日在成都新南门车站坐上到九寨沟景区的长途大巴,这个票最好提前一天买,免得耽误旅程,票钱141块,车一般都是8点左右的,一般情况要跑10个小时,所以要早上发车,晚上到,那里的路如果晚上跑的话,是很危险的,全是盘山公路。
住的地方可以在网上事先定好,这样去了后就比较方便,如果你想住的舒服点的话,可以在携程网这样的网站上定好酒店,那边有好几个酒店,3星到5星的都有。如果你想像我一样省钱的话,可以定青旅,那边青旅还是蛮多的,用google搜索一下,就会找到很多的。我住的卓玛青旅,在这里顺便说一下,觉得我是做广告的,就忽略这一段吧,别人也没给我什么好处,只是觉得老板人比较好,而且服务的也蛮走到的,下车后,会有车来接,然后到了后,安排好房间,这个青旅还提供饮食服务,有个厨师,价格在这样的景区算便宜的了,味道也蛮不错。然后小老板会给你讲游览线路,你还可以找老板借个地图,用完了还回来就可以了,这里还有WIFI,有代买车票服务,不过要加10元手续费,如果你想住在沟内的话,也可以让他们帮忙联系一下。另外还有刻盘服务,具体的你去他们网站看看吧,或者打电话咨询一下。这里的房间嘛,没有空调,电视比较小,不过青旅就不要要求那么多了,有电热毯,这里晚上气温一直较低,有空调一般也会用制热的功能的。这些服务,其他青旅大多也都提供,我在网上看到是这样的,当时因为这家便宜,就定了这一家。
下面是九寨沟的地图,粗线路是公路,里面有游览车,90块的车费,可以在里面随便坐,如果想一天玩完的话,车是必须的,当然也有逃票的方法,不过要走好远一段距离,不太划算。

第二天开始游览,按照老板介绍的游览线路,先去镜海下车,可以看上面的地图,据说早上镜海特别漂亮,但是得是晴朗的天空才行,我那天很不巧,早上进去的时候在下雨,很遗憾。游览完镜海,接着坐游览车到右边的那条沟的最顶端,也就是原始森林,然后就下车,去走原始森林的栈道,九寨沟里一直坐车很没意思的,一定要走栈道,走多少是由你的体力决定的。我去的时候,天鹅海的栈道塌方了,不让走,这一段就只好坐车下来了,到了箭竹海,我就开始走栈道了,然后右边的一整条沟就全部走栈道了,特被是珍珠滩瀑布,这个一定要去看,是西游记片头曲的那个瀑布,你挑着担。。。 然后下面的诺日朗瀑布也不错,一定要去看。
我走完这条沟,大约12点半,然后就去诺日朗服务中心,坐到长海,也就是左边这条沟的车了,路上可以看到三个季节海全是干的,所以也就没必要去看了,直接坐到最顶端,看长海,然后走栈道下去看五彩池,五彩池的水也比较少,看完这些再坐车回到诺日朗中心站,这个时候体力一般就下降了,可以在诺日朗休息一下,然后根据你的体力情况决定是否坐车到犀牛海,从诺日朗到犀牛海走栈道有4公里左右,我是走的栈道,比较累。即使是坐车到犀牛海,下车了也最好去接着走栈道,往下下,沿途的风景很好,但是到了盆景海之后就没什么必要走了,下面没什么好看的了,这个时候一般体力也不行了,时间也差不多了,这个时候就可以。根据自己的时间决定是否出沟。
因为现在不是最佳季节,天鹅海不让走栈道,左边的几个湖都是干的,所以我觉得一天玩完就够了,如果你想多体验里面的风景的话,可以在沟里住一天,可以省下第二天的门票钱和游览车钱,但是要注意安全,别被抓住,据卓玛旅舍老板说,他们安排的很安全,这个我也无从查证,我也没在沟内,反正注意安全就对了。如果决定玩两天的话,就可以慢慢走栈道,多停留欣赏风景了。
如果有空的话,可以接着去黄龙去玩,可以在旅舍租车过去。因为前段时间我同学过去过,说黄龙现在水很少,所以我就没去了。加上学习这边好要忙毕设的事情,比较忙。
九寨沟回成都的车票据说不好买,如果走的当天早上去买有可能买不到,那就惨了,我在中午12点决定只玩一天后,马上打电话给旅舍让帮忙买的第二天回成都的票,加10块钱的手续费,150块。
门票和车票连着的有两张明星片,带好了邮票的,出去的时候,在门口有盖九寨沟纪念邮戳的,6元钱,我盖了纪念邮戳寄给了师父和姐姐,另外回到旅舍,又买了明信片寄给了同事和同学们。买的明星片是没邮票的,也没找到买邮票的地方,我给老板邮费,让他帮我发的。
下一篇博客我会发一些九寨沟6月份的美景。
http://news.163.com/10/0603/04/687PSPBB00011229.html
请看这个新闻,是个概率题,意思是求从 1-786中抽出203个数字,求这203个数字中出现5个连续数字的概率是多大。
先来看看杭州14中的数学老师的结果:

概率
我的第一感觉是,这个概率不可能很低,不应该是小概率事件,随后打开网易评论,看着乐死了,一群自以为是的家伙,不管动不动概率,有的给出一个式子,有的凭自己想象,算出来的结果千奇百怪。
于是我也想算,拿起很就没拿过的笔和草稿纸,开始算,结果发现不会算,试了好几种方法,随后都被否决了,概率是个严密的东西,数学都是严密的吧,要考虑到所有的情况才行,我的方法总是有漏的或者重复的,而且无法计算着多余的或者少的,概率学的不过关啊,只好放弃了。
然后写程序模拟了好几万次,发现概率接近 50% 但是低于50%,当然这个也不排除计算机生成随机数不是平均分布的,所以结果可能和真实结果还有差别,不过肯定是个不小的概率,发生这个情况是完全可能的,而且很有可能发生。
很多网民自我膨胀的厉害,以为有了网络自己就什么都懂了,该低调的时候还是要低调啊。
有没有达人能告诉我这个要怎么算呢?可以发 email 给我,在 about me 页面可以找到我的联系方式。
另外,高中数学老师的概率素养也太差了吧,凭感觉也得不出是个小概率时间的结论啊,而且如果真的懂概率的话,应该知道很多时候感觉都不靠谱啊,不能信口胡说啊。
昨天晚上学习并分享了手持设备浏览器的 touchstart, touchend, touchmove 事件,突然又想到这个事件和 click 事件在应用的过程中是否会有冲突呢?
如果我们允许用户在页面上用类似桌面浏览器鼠标手势的方式来控制WEB APP,这个页面上肯定是有很多可点击区域的,如果用户触摸到了那些可点击区域怎么办呢?
带着这些疑问,我测试了我的 Android 1.5,发现系统已经很好的帮我们处理好了,具体说来,当明显的手指在屏幕上滑动,是不会触发 click 事件的,当明显的点击的时候,同时出发 click 事件和 touch类事件。有了这些我们已经很方便的控制程序来做我们想做的事情了,我们可以通过 touchstart事件和 touchend 事件的 pageX,pageY属性来判断用户到底是想做什么操作了,如果偏移值很大,很明显的就是滑动操作了,如果偏移很短,就不做操作,这个时候很有可能是会触发click事件了。
测试例子在:http://lab.allenm.me/touch_click.html,和上一篇文章一样,你可以使用你的移动手持设备去访问,测试。
各位看官,不管你年龄多大,祝你儿童节快乐。
另外按阳历,今天是我生日,是的,23年前,我妈妈在儿童节生下来我,感谢妈妈给了我生命。
另外,今天收到了师父送的礼物,一个军用指南针,因为我是路痴,所以师父特意送了指南针,很高兴啊,真庆幸能进入阿里这样的公司,能有个这么好的师父,在我刚进入社会的时候,能有这么开放的环境,这么细心的师父来帮助我适应这个社会。
感谢国家,感谢妈妈,感谢师父。
你为移动互联网准备好了吗?
大家都可以感受到iPhone,Android,iPad带来了移动互联网革命,前端程序员们,大家准备好了吗?移动互联网早已不是那个WAP的时代,WAP基本被淘汰了,新一代的智能移动终端,都具有了标准的HTML,CSS,JS的解析能力,但是又和桌面不同,比如这样的终端是没有光标的,也就是我们平时经常用到的 mouseover这些光标相关的东西,在这些终端上是没有作用的。同时,这些终端又具有一些他们自己的特色,比如 touch 事件,因为操作全是 touch ,所以这个事件如果好好利用,在移动互联网开发中会发挥大用处的。
正好现在手里有个 Android 设备,做毕设用的,现在也想为毕设搞点新鲜内容,所以就做了对 Android 浏览器的 touch 事件的测试。说了这么多,是因为这个东西很简单,不说点废话撑下门面,那这个博文就太短了。
touth相关的事件有 touchstart,touchend,touchmove。这三个事件最重要的属性是 pageX和 pageY,表示X,Y坐标。
其中 touchstart 在开始触摸的时间激发, touchend 在触摸结束的时间激发, touchmove 这个事件比较奇怪,按道理在触摸到过程中不断激发这个事件才对,但是在我的 Android 1.5 中,在 touchstart 激发后激发一次,然后剩余的都和 touchend 差不多同时激发。
这三个事件都都有一个 timeStamp 的属性,查看 timeStamp 属性,可以看到顺序是 touchstart -> touchmove ->touchmove -> … -> touchmove ->touchend,但是在我这里测试实际看到的确是上一段中提到的那样。
现在 Android 官方也没有一个好的关于 WEB APP 的文档,不过有了 touchstart, touchend 这两个事件的 pageX,pageY,timeStamp 属性已经可以开发出好玩的东西了。比如我想让用户通过划屏幕,来做 tab 切换。
关于 touch 事件的测试,你可以用你的 iPhone,Android,iPad访问 http://lab.allenm.me/touch.html,然后触摸屏幕,看结果。注意由于为了完整展示效果,所以对屏幕宽度有要求,最好横批浏览。同时,预告一下,我以后会用 allenm.me 这个域名,等有空了做迁移。
另外附上apple 官方关于这个事件的文档.有兴趣的可以去看看,iPhone 可是支持多点触摸的,在这个文档里,我们也可以看到处理多点触摸的方法。
今天遇到了个好玩的js函数,看题目已经了解的就可以忽略了,或许是我太土了。这个函数我在 权威指南里都没找到,晚上回来后,查了下文档,mozilla的文档和W3C的。
这个函数是干什么的呢?通过这个函数,我们可以通过找到文档中任意一点所对应的 element ,这个是我在看 firebug 源码的时候发现的,写了简单的代码测试了一下,目前我机器上的浏览器都支持,分别是 firefox3.6+, chrome 5+, opera 10+, IE 8.其他浏览是是否支持未知。
用法就是 var el= document.elementFromPoint(offsetX, offsetY); 就可以获得元素了,你可以把我下面的代码加入到任意网页中,看看效果便知,为了在 非firefox浏览器测试方便,加入了 firebug lite
贴代码:
<script type='text/javascript'
src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
<script type="text/javascript">
if(document.addEventListener){
document.addEventListener("mousemove",logThis,true);
}else{
document.attachEvent("onmousemove",logThis);
}
var time=0;
function logThis(e){
if(new Date()-time>500){
var el= document.elementFromPoint(e.clientX, e.clientY);
console.log(el);
time=+new Date();
}
}
</script>
根据 firebug 的源码显示,在 opera和safari中有滚动条的情况下,会表现的不一致,需要 X Y 分别要加上scroll.x和 scroll.y。firebug 里的代码是这样的
var scroll = this.getWindowScrollPosition();
return this.document.elementFromPoint(x + scroll.left, y + scroll.top);
var scroll = this.getWindowScrollPosition();
return this.document.elementFromPoint(x + scroll.left, y + scroll.top);
有兴趣的可以去看看文档,明天要去舟山玩,写的条理比较乱,不过这个函数也没什么难度,应该很容易就看懂了。
写上篇文章的时候意外的发现Android shell 是没有 cp 命令的,于是删除了上篇文章里的 复制文件的操作部分。理论上,可以自己编译 cp 程序进来,但是对于像我这样的菜鸟,还是变通变通比较划算,用以下两个命令之一就可以实现 cp 的效果了。
cat source_file > dest_file
OR
dd if=source_file of=dest_file
例如上篇博客中提到的 q5.txt,如果还存在在 sdcard/test/ 目录下,我们想复制到sdcard目录下,并重命名为 5.txt,那么先CD 到 test 目录,执行 cat q5.txt > ../5.txt 或者执行 dd if=q5.txt of=../5.txt都可以完成任务。
这个 tips 来自这里(请自备梯子)
相信很多用智器Q5的童鞋,都曾经试过连接91助手做安装软件等操作,但是大多都失败了吧,91助手对智器Q5的支持很差,谁让智器Q5的Android是民间自制系统呢。91助手当然强大,但是如果我们仅仅是只需要安装个软件,同步个文件,那么有更简单,而且一般不会失败的办法,那就是 Android 自带的 ADB 工具。
使用这个方法的前提是要求你的电脑和Q5在同一个局域网网段下面,一般Q5的用户都有WIFI用吧,所以这个不是问题,因为USB模式灰常不稳定,用WIFI不用装驱动,要好的多。
1,首先我们下载 Android SDK(给的链接不是官方站,不喜勿点,谢谢,我也喜欢官方站,但是那个很多人访问不了。)一般下载等于你的版本或者比你装的 Android 版本高的就可以了。然后解压到某个文件夹,例如 d:\android\ 文件夹(以下讲解以这个文件夹为例)。
2,为了一会儿使用方便,我们把SDK的 tools 文件夹添加到系统环境变量里,添加环境变量的方法是,右键我的电脑,选择属性,在“高级”选项卡下边可以看到环境变量,点击进去,添加这个文件夹到系统环境变量里就可以了(注:每两个环境变量之间用”;” 分号隔开),没做过此操作的童鞋建议先Google一下详细方法。
3,按 windows+r 输入CMD 回车,进入CMD模式,输入 adb 回车,看是否已经可以使用 ADB 命令了,如果可以了,那就成功一半了,如果不能用,请检查环境变量设置,或者先 CD 到 android\tools\文件夹,再 执行 adb。
4,如果ADB已经可以运行,那就来看看 ADB 的几个常用命令吧。首先我们可以查看一下Q5的IP现在是多少,运行 3G dialer 这个程序就可以看到了,如果你的机器上没这个软件,那就通过你的路由器来判断机器的IP吧。执行 adb connect ip:port 这个命令连接Q5设备,例如你当前Q5的IP是 192.168.1.101, 那么就执行 adb connect 192.168.1.101:5555 ,如果成功会提示 connected,不成功请重试或者检察IP是否正确。
5,连接成功后,就可以进行各种操作了,先来说安装软件吧,例如你有一个Android APK 软件包,名字叫 a.apk 放在 d:\AnroidSoftware 这个文件夹,并且前面的系统变量已经成功添加,那么就可以在CMD里先cd到 d:\AndroidSoftware这个文件夹,然后执行 adb install a.apk 等一会儿就可以看到安装成功的信息了,这个时候就可以进入到Q5的菜单里找你刚安装的软件了。
6,传文件到 Android设备:我们也可以通过 adb 传文件到 Q5中,例如我们有个文件名字叫 q5.txt,想把这个文件上传到Q5的SD卡上, 同样在上面放软件的那个目录下面,那么我们可以执行 adb push q5.txt sdcard 执行完毕返回成功信息后你可以通过q5里安装的文件管理器查看到。
7,移动/重命名/删除文件:如果我们想对Q5里的文件做上述操作,那么我可以执行 adb shell 执行完毕后,我们就进入了q5的shell,也就是Linux的shell,因为q5是基于linux的,所以这个shell基本上是和你常见到的linux shell是一样的,例如我们想对刚才上传的 q5.txt 做以上操作,先执行 cd sdcard,再执行 ls ,这个时候我们可以看到 q5.txt 的存在了也证明了第6条操作是对的。我们先把它移动到一个不存在的 test 目录里面去,执行 mkdir test 新建 test 目录, mv q5.txt test/q5.txt 就移动了,现在再来重命名这个文件为 5.txt,执行 cd test,然后执行 mv q5.txt 5.txt。现在我们要把这个 5.txt 删除,执行 rm 5.txt,就可以了。通知在shell里面,我们还可以执行 sqlite3来查看数据库,开发者会用的上。
学会了这些基本操作,很多时候我们都不再需要去折腾91助手了,我也认为91助手做的好,但是智器Q5装了Android后,连接91助手不那么容易,所以就介绍了这个方法。
如果你是一名Android开发者,或者拥有一台Android设备,就可以忽略此文了。
我的毕设是Android软件开发,因为老师手里暂时没有Android设备,我人又在杭州,所以就先让老师用虚拟机试用一下我的程序了,可能很多人都是在 eclipse 做开发的时候用虚拟机,在IDE中启动,但是为了试玩程序,装个 eclipse 显然不现实,其实只需要几部就可以体验 Android 虚拟机了。
- Android SDK 需要 JAVA运行环境,所以请确保你的机器上有装 JAVA,如果没有自己去下载 JRE 并安装。
- 以1.5版本为例,到http://www.android123.com.cn/sdkxiazai/357.html 这里下载 SDK(因为官方的因为众所周知的原因不能访问,所以给了这个网址,非广告,和我无关,搜索引擎结果)
- 下载后解压到某个目录,例如 解压到 d:\android\ 一下以这个为基准举例
- 到 android\tools\ 目录去运行 android.bat ,会见到这样的界面:

- 点击新建就可以新建 虚拟机了, name 随便取,target 选择合适的版本就可以了,如果是在我给的那个地址下载的话,只能选择 1.5或者 1.6 版本的。更高版本的可以在那个网站里找到,方法一样。
- 新建虚拟机,就可以回到上面那个界面中,选择要启动的虚拟机,点击 start 了,这个时候就会看到 Android 虚拟机的启动界面了,耐心的等待一段时间后,就可以看到 Android 系统的真面目了。这个时候就可以体验Android 系统自带的一些功能了。
- 如果想体验某个软件的功能,请按照步骤继续。
- 下载你想体验的软件 apk 打包文件,这个是 Android 程序打包格式。放到 tools 文件夹。
- 用CMD 模式 先 CD 到 android\tools\ 目录,然后运行 adb 可以查看 adb 支持的命令。使用 adb devices 可以查看当前连接的虚拟机,如果你的虚拟机正常运行的话,这个时候可以看到 List 下面会有一个虚拟机。
- 然后 使用 adb install 命令就可以安装 这个软件了,例如这个软件的文件名是 a.apk 那么就执行 adb install a.apk ,当看到 success 的时候,就可以进虚拟机的菜单里找到那个程序,运行了。
步骤写的比较多,但是实际上还是很简单的,操作一次就熟悉了,如果你知道环境变量是什么东西的话,那就直接添加 tools 目录到系统环境变量里吧,这样就更方便了。另外 adb 支持的命令,你也可以通过查阅文档获取更多,功能还是很丰富的。
相信如果你没有Android设备,又不是一个开发者,只是想体验某个Android程序的话,可以用这个方式来快速体验一下。
我的毕业设计是写个Android程序,SDK是要用JAVA的,可是JAVA我基本不会,写起来是非常痛苦,加上时间也不多了,萌生出了写WEB APP的念头,可是运行在浏览器里的WEB APP有点不大符合老师想要的结果。于是寻找让WEB APP变成本地APP的形式。
昨天刚好看到腾讯发布的Android QQ,据说就是把Mini WEB QQ包装了一下,那么,我应该也可以用这种方式包装,搜索了一下,才知道有个叫PhoneGap的东西,可以实现我的这些东西,仔细折腾了一个晚上,终于配置好了,可以用HTML+CSS+JS来开发了,但是还不知道具体效果怎么样,折腾起来好费时间,因为我没有一个稳定的Android设备,在智器Q5上折腾是很痛苦的,第三方开发的Android固件不稳定,WIFI 不稳定,91助手不能连,换了好几个版本的固件,刷机,然后换91助手的版本才搞定,很是折腾,另外稳定的固件都是Android 1.5 版本的,但是 PhoneGap 这个东西,最新版的已经不支持 1.5 的了,只好去找老版本的,终于才成功把 PhoneGap 生成的程序运行在了智器 Q5上了,下一步就是加快开发了,写 WEB APP 对于前端程序员来说,是个很容易的时期,应该只需要考虑这个设备的特殊特性,查查API就可以了。
如果你也是前端程序员,也想给Android开发程序,不妨来试试这个。