Shell's Home

linux tty部分源码阅读

Dec 19, 2011 - 1 minute read - Comments

1.事情从file开始 file的定义在include/linux/fs.h中,其中有两个field,一个叫file_operations *f_op,一个叫void *private_data。file_operations定义了所有file能够进行的操作,在tty这个层面而言,drivers/tty/tty_io.c能看到有个叫做file_operations tty_fops的东西,下面有个叫console_fops的东西。两者区别不大,就是write函数进行了一下包装而已。从这里可以看出,系统将某个file的读写操作,转包给了tty_io.c这个文件。这个转包的手法非常类似虚函数。如果将tty_io.c里面的函数看作一个类的所有成员,那么tty_fops就是虚函数表,而f_op就是虚函数指针_v_ptr。 2.tty_io的二转包 tty_io做了什么?他直接转包给了ldisc来处理这个事情。从tty_struct的结构我们能够看到,有这么一个field,tty_ldisc *ldisc。而tty_ldisc.h文件里面,我们能看到这个结构又有这么一个成员,tty_ldisc_ops *ops。同样手法,第二次使用。目标是tty/下面很多n_开始的文件,例如n_gsm,估计是处理手机的。我们的目标看起来像是n_tty.c中的tty_ldisc_ops tty_ldisc_N_TTY对象。 3.n_tty做了些什么 n_tty也做了很多转包,例如对于n_tty_write而言,他使用了tty->ops->write这个函数。我们从struct tty_struct中可以看到这个field,tty_operations *ops。目标是谁?看起来像是pty.c,他里面有很多定义,例如tty_operations master_pty_ops_bsd,tty_operations slave_pty_ops_bsd,tty_operations ptm_unix98_ops,tty_operations pty_unix98_ops。 4.pty总不转包了吧 以write而言,pty.c做的很简单,就是tty_insert_flip_string而已。不过之后调用了tty_flip_buffer_push,这个又会调用flush_to_ldisc,这个里面会调用ldisc->ops。从上文中我们知道,这个函数的实体在n_tty.c的n_tty_receive_buf。 5.n_tty_receive_buf做了些什么 这个函数对每个字符依次处理,如果是普通字符,就调用n_tty_receive_char。这个函数会调用put_tty_queue,经过两次转手,最终,这个字符进入了read_buf。这是一个循环队列。

android几个常识

Dec 16, 2011 - 1 minute read - Comments

内存问题 首先,总内存量需要被各种CPU划出部分使用,剩余才是系统可用内存。这个概念差不多相当于电脑上的共享显存,系统对划走的内存是没有管理能力的,因此在/proc/meminfo中找不到这部分内存。这部分内存既不能优化也不能使用,因此其实是不可使用内存。厂家出厂内存(标称内存)和可使用内存一定存在差,具体多少看各种机型。htcg2是288m标称191m可用,p81hd是512m标称288m可用。 可用内存是linux kernel能管理的内存,这部分再会被划出一些供系统使用/服务使用/常驻程序使用。这部分是可以优化的,少编译一些ko模块,少开一些服务,少一些常驻程序,内存就会节约一点。 最后,剩下来的内存才是程序实际能用的量,htcg2和p81hd都在100-150M上下。不过程序退出时,内存并不交还给系统。而是当系统内存不足时(memory threshold,通常24m),由系统分析目前内存中,使用频率最少的一块,然后去释放这个内存。通常而言,你在系统中开了三五个程序,然后按Home退出到桌面,再进入时程序还处于退出当时所处的状态,这就是因为还在内存中没有释放的缘故。而当你开的程序比较多,例如十多个程序,也是由Home退出到桌面,再进入最老的一个程序时,程序已经处于初始的状态。这就是因为内存不足,系统帮你杀了这个程序的缘故。如果用Back键退出,程序会直接关闭,内存释放,这个无关系统是否有空余内存。 所以,对android而言,内存只代表两件事情。一个是所能运行的最大的程序。如果总内存不足,一些一次性需要内存比较大的程序就会无法运行,特征是一运行就退出,系统没有提示错误。另一个是同时在内存中不关闭的程序的数量。内存越大,在机器中就可以保持越多的程序处于打开状态。对于新打开程序(此时内存请求较多),或者程序突然申请大量内存,系统就开始释放其他程序,此时系统会稍慢。但是在考虑是否需要使用内存优化软件的时候,不妨这么想。内存优化软件运行的时间,一般比直接kill进程还长呢。 如果觉得自己内存不足,想要优化的话,需要非常注意系统中的服务。系统中一般会有很多服务在运行,很多都是消息通知类的,例如fackbook的新消息,twitter的新消息通知,google plus的消息通知,还有微信,等等。这些消息通知每个大概都是5-10m内存不等。有的时候,如果你不需要消息通知,关闭消息通知可以有效关闭服务,例如ubersocial的消息通知是可以关闭的,而google plus和facebook就没有这个选项。如果你觉得这两个的消息浪费内存,那只有卸载他们。至于微信,你可以使用程序中的退出功能关闭微信。一旦关闭,通知服务会自动关闭。 内核模块问题 一般而言,系统内核会编译进很多东西,但是也有不少东西是不编译进去的。这些可以动态载入的东西,就叫内核模块。对android而言,其实普通用户没必要在意到底机器内的某个模块是模块形式还是编译进入了内核,所以下面统称内核功能。无论是模块还是内核形态,只要能用,就称这个功能打开。 内核常用的几个功能有,cifs,tun。 cifs是用于smb挂载的内核模块,如果内核中有这个东西,你就可以把你的某个samba服务器当作机器本地的sd卡来用。samba服务器可能听起来很陌生,不过windows文件共享就是一种samba服务器。也就是说,拥有cifs,可以将windows下面的文件当作机器的本地sd卡来随意读写。这对于家庭内使用android是个很方便的事情。 不过cifs现在用的比较少,因为ES文件管理器有个功能,可以把远程文件转换成一个http流。视频之类可以以http流模式工作的文件就可以直接远程打开。 tun是一个很重要的内核模块,因为openvpn/anyvpn都需要使用这个东西来工作。没有tun模块,这两个程序将无法工作。 存储形态问题 任何一个android设备都一定会搭配一块存储。这块存储会被切分为多个区域,模拟成一个硬盘的多个分区来使用。我们来看一个内核的启动参数,以下数据来自我的P81HD。 console=ttyS1,115200n8n androidboot.console=ttyS1 init=/init initrd=0x62000000,0x800000 mtdparts=rk29xxnand:0x00002000@0x00002000(misc),0x00004000@0x00004000(kernel),0x00008000@0x00008000(boot),0x00008000@0x00010000(recovery),0x00078000@0x00018000(backup),0x0003a000@0x00090000(cache),0x00100000@0x000ca000(userdata),0x00002000@0x001ca000(kpanic),0x00080000@0x001cc000(system),-@0x0024c000(user) bootver=2011-08-05\#2.06 firmware\_ver=0.2.3 能明显看出,存储使用的是nand,编译是针对rk29xx的,所以模块叫做rk29xxnand。mtdparts里面规定了rk29xxnand的分区特性,每组三个数据,第一个是大小,第二个是起始位置,第三个是分区名。其中userdata实际大小256m,表上面写的是1m,因此1相当于256字节。下面可以再看一下mount表。 /dev/block/mtdblock8 on /system type ext3 (ro,noatime,nodiratime,data=ordered) /dev/block/mtdblock6 on /data type ext3 (rw,nosuid,nodev,noatime,nodiratime,errors=continue,data=ordered) /dev/block/mtdblock5 on /cache type ext3 (rw,nosuid,nodev,noatime,nodiratime,errors=continue,data=ordered) 可以看出存储编号是从0开始的。分区后,存储的内容即是以ext3格式存储。 系统组织问题 android的系统组织很有意思,并不是按照FHS来组织的,却部分兼容于FHS。 android最基础的一个分区是system,这个分区被mount到/system。/etc一般都是直接link到了/system/etc下面,由此可见这个分区的重要性。这个分区一般存放所有系统内置的,不能更改的程序和数据。例如系统的内置app,framework,java基础库,so库,系统程序,等等。一般的刷机包里面,都是以zip格式打包了system的新内容。一旦这个内容被替换,系统就有了新特性。一般一个system的大小是200m-500m,不会全部用满,会留出一些方便后续的升级改造。 data里面是系统内置的存储区域,这个区域常常被误叫为手机内存。实际上内存是ram,这块类似于rom。一般是500m上下,程序安装后就是装到了这个,包括数据也保存在这里。如果这个区域不足,系统就不能安装新程序。因此有些人想出了app2sd的把戏,说白了,就是通过bind,把sd卡上的一块区域映射到这个区域的某个目录下,使得某个app的数据可以存储到sd卡上。当然,这个能够转移过去的只限于数据,代码好像是不能转移的。而且,mount需要时间,sd的读取一般也比rom更加慢和麻烦。因此app2sd后,系统启动速度会变慢,程序运行也会变慢。 一个更好的扩充data的方案(当然,也更危险)是,通过修改刷机包,将上面kernel参数改变掉,并且重新分区nand。这样,data区的大小可以增加到1g左右,而user区的大小会减小相应的量。这样处理后,手机上可以安装更多的程序,而且没有什么后遗症。 cache里面是缓存,这个直观感受并不多,也很少用满,所以不解释。程序里面一般会列出,使用多少缓存,就是指的这个区域。 权限管理问题 android手机的权限很有意思。和macbook有点类似,但不完全相同。 android手机的每个程序,都有一个权限和他相关。规定的事情可以做,不规定的不能做。估计是给程序新建了一个身份,可以做的事情做成组,然后对身份加组。但是其中,有一类特殊的权限,正常情况下是任何程序都无法申请的,即是sid权限。学过linux的应当知道,就是可以切换成root身份的权限。 android的root,基本方法都是通过某种方法将/system改成可读写,然后用自己做的su替换/system/bin/su文件。自己做的程序,会以一些方法验证某个程序是否具有su的权限(一般是弹出对话框确认),然后让他们可以拥有最高权限。可以su的程序,他们的权限表就没有意义了。 adhoc问题 adhoc是一种常见的wifi形态,特征是没有一个ap(常见的路由器即是一种ap),全部由普通的客户端电脑来进行网络连接。 android的wpa_supplicant文件做过一些修改,过滤了adhoc网络的essid。所以,如果你使用adhoc模式共享了网络,你的android设备将无法使用。 但是android是可以做出adhoc的。这是很悖论的一个事情,android自己做出的网络分享,另一台android是无法使用的。

家庭网关,三网融合

Dec 12, 2011 - 1 minute read - Comments

Sunny Sunny<sunnyboyme@gmail.com>: 要做一个关于home gateway的论文,讨论不同服务下的 Service Level Agreement (SLA),带宽,延时,数据包 schedule 策略 等等。不知大家有什么好的 想法/Question/Hypothesis,或者 以往的使用体验。 希望来个 头脑风暴,呵呵 ~~ shell: 我好像全都部署了,就是不整那么多名词而已,不知道你要干啥。 出口是光纤,20M下行/1M上行。路由器是dir-825,上面部署iptables arptables 还有tc。可以控制端口进出,还有控制机器的访问权。tc负责控制QoS。 后面主要是两台机器,一台atom,上面放2T硬盘,作为NAS/开发服务器/电视的长期支撑设备/家里的定时通知机器/闹钟/将来准备接个摄像头做更好玩的应用。 另一台amd x955 8G,两个人用。一个DVI连接显示器,一个HDMI连接电视,可以看看高清电影,开发也很舒服,一般开虚拟机干各种应用。 其余设备都走了网线或者无线,最近考虑装一个网络电话。 电视是三星的,上面集成了一个简单的android,就是app market是专用的,里面没有vnc/rdp客户端,否则我连atom都不需要登录就可以直接访问各种服务器了,更方便。 电话,电视,网络,全部走在了ethernet上面,不知道算不算三网融合。不过我吐槽过一篇文章,这年头不知道要电视和电话干吗用。给我视频网站和手机就能很high了。 在 11-12-11,Sunny Sunny<sunnyboyme@gmail.com> 写道: 哇咔咔,不错不错,可以拿来当模板用~~ 不知道你的电视和电话走网路时候用的是什么协议?或者说,用的哪家公司的服务? 电视走网络(IPTV?)会带来巨大流量,相比普通电视/数字电视有什么优势? 在 2011年12月12日 上午9:16,Stone Zhang<kelxzhang@gmail.com>写道: 其实,我感觉三网融合现在最大的问题是,在三层没有连上的时候,如果可以打电话。 就是说,在断网时(就是物理连上,但拿不到IP )普通用户如何能够打电话。 还是就是收费问题。 何必走专用协议呢?现在中国没有一家服务是大到可以称为标准协议的。 电话我还在考虑,用SIP还是skype。前者有很多现成的网关,也很容易和普通电话通话。后者看样子也不差。反正我手头有atom服务器,用skype长期开机也是没什么问题的。 电视更简单,直接上youku/tudou/verycd搜索就好。其实你本心的想一想,我们到底是为了解决问题而发明标准还是为了制造问题而发明标准?使用目前已经存在的服务能解决需求就好了。这些点播唯一的缺陷是还缺少一些连续播放的视频DJ/选材制作,我在吃饭的时候看节目往往还要自己挑。所以目前我吃饭的时候都在看电影,atom机器一天能下N部高清下来,就是我怕现在的导演们没那么多时间去拍。。。 视频走网络有什么好处?论广播能力,格式兼容性,不如RF。论节目,也比电视台差了很多。但是电视走网络胜在制式可以几乎无限上升,目前我看1024x768已经觉得不够清楚了。你觉得目前的IPTV,就算加上数字电视机顶盒,能够到多少分辨率? 至于电话问题,断网是极端情况。虽然网络比电话线不稳定,但是也不是天天断的。有网络用网络,没网络用手机。android加上sipdroid也可以当作sip客户端用。如果手机都走不了,那问题就不在三网融合的设计上了。 你可以想想,网络电话到底有什么优势?电话到底干吗用的?在我们业务类型大幅变化的时代,讨论如何将上个世纪的业务完全不差的照搬到网络时代真的有帮助么?我们真的需要在网络时代,等待一个前向兼容的标准么?实话说,这是中老年业务。我家里没有普通电话,外婆和岳母说要装一个,我和老婆都没什么兴趣。因为除了多交钱,没有任何帮助。要找我们,手机总能找到。手机找不到,电话也找不到。 传统认为,使用可以容忍的语音标准,提供持续而稳定的服务是电话服务的第一要素。实话说,在网络时代,这个可能要改为低成本,高可用性。网络(尤其是中国网络)已经把我们训练的很有抵抗力,对无法服务的系统基本可以接受,只要这个系统大部分时候能跑通。让我选择十年保证故障在1小时以内的普通电话服务,我宁可选择一年保证故障在五小时以内的网络电话服务,只要这个电话服务可以: 1.大部分时候打的通,比移动/联通打不通的机会低。 2.便宜,我可以和远程一聊数小时,甚至干脆保持一两天不断线。 3.功能集成,例如视频电话?多人电话? 为什么不选择后者呢?我正在准备把老婆家里的设备做一下定制,让她的电脑可以很方便的视频保持和我服务器的连接。这样岳母可以通过她家里的电脑和我这里保持持续通讯几个小时,甚至可以一边吃饭一边聊天,双方还能互相可见——免费。我不觉得普通电话业务能够提供这种优势,更不提昂贵的话费。 另一个例子是我一个朋友,也在shlug里面。他十月去日本,带的是一台iTouch。在日本可以很容易的连上wifi,速度还很快。通过skype打电话回家,价格便宜服务稳定。如果是我,我更希望带一个3G设备,直接用当地的3G接入保持持续通讯。你觉得带传统手机出国然后办理套餐需要多少手续和多少钱?这是一个移动电话被网络服务比下去的例子。也许有人说中国的网络没这么好——好吧,看看五年前的网络,看看今天的,想想看五年后,这个论点还有没有优势。 同样,在网络时代抱着电视不放也将会是种无谋。目前网络视频还是替换不了普通电视,不过这天总会来的。

吐槽招聘几件事

Dec 9, 2011 - 1 minute read - Comments

海投海发,要件不全 这TMD是招聘/猎头/投简历中最我X的事情了,没有之一。凡是招聘不写公司名字,不写工作地点(跨城招聘的时候),职位不写工作要求或者工作范围,一概视为不靠谱。同理,凡是简历不写自己名字(别笑,真TM有),联系方式的(哥们,我找您得烧纸是不?),工作资历或者技术专长(您干嘛来了),也一概不理。 另外,我好像写过,原来面试过一姐们,两次!这姐们一看就是内向人,话都说不利索。干IT起码得有能耐把一件事情讲述清楚(好听不是要件,易懂也不是,清晰不歧义才是),也得善于听明白别人的问题。这话都说不利索的主,您就算来八次都一样。明显是海投的时候,压根不记得这公司自己是不是来过了。 别笑,php跑到python地界上捞人的,您也差不多。事情一着急就满世界散传单的,您还指望来啥人? 乱叫乱收,文不对题 任何一个事情,信任和合作是成功的基础。所以从现在HR市场的运作来看,这事情就成不了。三四个人办的小公司,敢宣传自己资金雄厚。一个才学了半年电脑的人,做一个项目挂一个,敢说自己被多家公司挖角。 这事情是怎么来的?貌似开始的时候,小公司不说资金雄厚就没人关注。简历上说才学了半年,做项目全挂了就找不到工作。反正工作这个事情又没人核实,就拼命往里面注水。结果市场上充斥着注水猪肉,你还没辙。技术手段在高端市场是有效的,低端就不用想了。高端市场的人,往往在一个领域里面投入了相当的心血。为了简历注水被臭掉名声是不合算的。但是低端市场的人,学三个月电脑,来这个市场插草标卖一番,卖得不动,隔天就转了行。我听说过最夸张的传说是一个程序员三个月后去做了厨师,当然,另一个人也差不多,一个前端MM三个月后开了甜品店。不过后者是真心喜欢,前者算啥? 所以,这事情博弈下来,劣币驱逐良币,市场上就充斥着无效的信息。到处都是资金雄厚的公司和技术强大的程序员,偏偏HR说招不到人,程序员说找不到工作。 描述绕弯弯,内行听门道 HR懂不懂技术,招聘上就看的出。拿好听的词乱堆的,肯定是外行。 网管不叫网管,叫网络工程师。杀毒不叫杀毒,叫系统安全管理。要加班不叫要加班,叫抗压性强。工资低不叫工资低,叫做合伙。小公司不叫小公司,叫创业团队。薪水能开多低开多低不叫薪资面谈,叫待遇从优。会不叫会,一律叫精通。 MD我出门看个招聘,创业团队寻求合伙网络工程师,要求抗压性强,精通系统安全,待遇从优。 你干吗不干脆直说小公司低价招聘几个肯加班的网管,会杀毒就成,薪资面谈。这招聘写的我还以为google传奇在中国开服了呢。 招聘不妨写的肯切点,有啥说啥。尤其是在论坛之类的可以互动交流的地方招聘,大家不都是傻瓜。 关键不是你有多少,而是你给我多少 有些公司,招聘上面动辄写公司有多少多少投资注入。实话说,这有什么关系呢?如果一家有钱的公司,开3000薪水。一家小公司,开4000,我觉得还是后者更有吸引力。倒闭?找工作也就是一两个月的事。我们按照3500一个月算,差值就是7000。做半年基本就持平了。小公司只要能干上一年,肯定比号称有钱的主来的实在。 同样,类似的问题也有招聘上面写我们有多少多少大牛。实话说,这个也不重要,我们的直属领导和工作同事是不是大牛才是关键。后者对自己有直接帮助,工作起来也开心。要是总架构是个大牛,但是同事都是一帮菜鸟,那大家一起辛苦。所以我写过一篇blog,为什么大牛都爱扎堆。

python为什么叫好不叫座

Dec 8, 2011 - 1 minute read - Comments

python的招聘,看似火爆,各家都在抢人,还抢不到。但是实际操作一下,发现实际上还是较好不叫座。八成以上的人去应聘,都找不到心仪的工作。当然这个原因很多,我只说我听闻的几个。 1.python的快速开发名气 这是中枪最多的原因,这个传说是从阿北开始的。想当年他一人做豆瓣,几个月就出活了。后来一帮做系统的一听这名声,都投靠了python,而且无一例外的都是django。他们的希望,就是超越阿北的传奇。一个人三个月出个系统,那我们找三个人,加班加班,一个月也能出个系统了。好,后来的事情大家都懂了。 当然这个故事纯属虚构,很多公司在计划上还是半年出系统的。但是实际执行上,老板要求能多快就多快,工资能多低多低。这种公司你指望他开多少薪水?15K?别傻了。偏偏python这东西学的贼快,有三个月就能出来混事了,你和他们比工资低,傻了吧。 这帮人也许接触过网络开发,也许没有,不过他们应当都没看过“人月传说”。即使没看过,傻子也应该想到,阿北当时的工作状态和水准,要给自己发工资该发多少?找一帮接触电脑都没满一年的人来搞人海战术,那铁定是找虐的。 2.在找第二主程 我和thomas说过一个观点,一家IT公司永远也不应当停止招聘,他们只有提高标准和降低标准两个情况而已。在公司里面缺人的时候,标准低一点。在不缺人的时候,标准高一点。一旦停止招聘,停止HR相关的工作,有些大牛刚好出来你就抢不到。 去这样的招聘是很容易被鄙视的,因为标准很高。他们也不担心招不到人,反正只是碰碰运气而已么。有一些大公司发招聘你去了什么消息都没有,就是这种情况。 所以,对一些已经成熟的团队,你还是认识一下里面的人,多接触多聊聊比较好。一方面可以学一些东西,另一方面搞清楚里面现在是缺人还是爆仓。也许一家靠谱的公司,本来处于爆仓状态。讨论决定做一个产品,一下子就缺人了呢。 3.其实我们在找披着python皮的其他工种 python用途很广,所以老耿说过,我们不招python程序员。他的本意大概是,你是个好程序员,又刚好会点python,那就是我们找的人。如果不会python,学一下就是我们找的人。很多公司在表达的时候,其实反了过来。他们要找一个sa,会一些python,能够写程序,于是HR的需求出炉就是——python程序员。系统程序员,抓取分析,报表统计,凡是需要你会一些python,但是主要是其他工作的时候,这其实都是一样的。他们找的是披着python皮的其他工种。 你要是个程序,去了一准被鄙视。

啥叫智能

Dec 7, 2011 - 1 minute read - Comments

这年头的营销人员老爱乱用术语,瞎整个词就在那里吹。据说这是个营销行业历史悠久的传统,当年圆珠笔就叫原子笔,配合原子弹吹了一把。这年头连化肥都用上了纳米科技——估计真相是生产化肥的机器的某个核心部件使用纳米材料来减少磨损。营销在那里乱吹,搞的普通用户晕呼呼的也就算了——不晕就没法骗钱,没钱技术人员也就没工资。偏偏很多技术人员也不靠谱,居然也跟风晕。 我问你们,如果你告诉一个人,红灯的时候停车,绿灯的时候开车。然后他照做了,这个人叫智能么?如果你写个操作手册,看到上面有红头文件下发,就组织传达精神,这叫智能么?如果你写个程序,依次判断几个地方是否有文件,如果发现就加载执行,这叫智能么? 如果这叫智能,那你的脑子就是个图灵等效机。 偏偏有人说,我的程序会智能判断你的系统类型,然后加载合适的组件。。。 什么叫智能?相对来说,贝叶斯,相似性判断这些东西更接近智能。程序员没有写过,给某某用户推荐什么。但是很神奇的,程序会告诉你——有人和你兴趣相似,什么什么是垃圾邮件。 区别在哪里?一个是程序员预设了逻辑,然后交由电脑执行。这种情况叫智能太过了点,叫自动差不多。而另一个是程序员没有预设逻辑,程序由行为数据中学习到了下面的行为,如果要把这个称为智能还是有道理的。

拨号的几个简化

Dec 6, 2011 - 1 minute read - Comments

1.pptp client 安装pptp-linux,使用pptpsetup,按照man来。使用pon configname启动,poff关闭,plog看日志。 2.3g网卡拨号 应当使用usb_modeswitch进行编码转换,然后用wvdial拨号。MF190而言,至少我这里modeswitch会自动转换的。后者直接编辑/etc/wvdial.conf,然后输入wvdial开始拨号。wvdial有个包装叫做gnome-ppp,依赖很少,在其他桌面也可以用。我还没有研究出来怎么玩。 附,MF190使用的usb_modeswitch配置(debian自带): ######################################################## # ZTE devices DefaultVendor= 0x19d2 DefaultProduct= 0x2000 TargetVendor= 0x19d2 TargetProductList="0001,0002,0015,0016,0017,0031,0037,0052,0055,0063,0064,0066,0091,0108,0117,0128,2002" MessageContent="5553424312345678000000000000061e000000000000000000000000000000" MessageContent2="5553424312345679000000000000061b000000020000000000000000000000" MessageContent3="55534243123456702000000080000c85010101180101010101000000000000" NeedResponse=1 CheckSuccess=20 附,MF190可用的wvdial.conf: [Dialer Defaults] Modem = /dev/ttyUSB2 Init1 = ATZ Init3 = ATE0V1 Init5 = ATS0=0 Init6 = AT+CGDCONT=1,"IP","uninet" Init7 = AT+CFUN=1 Modem Type = USB Modem Baud = 460800 New PPPD = yes ISDN = 0 Phone = *99# Password = any Username = any Stupid Mode

python conf 2011无线组网总结和分享

Dec 5, 2011 - 1 minute read - Comments

这次python conf 2011结束了,具体成败sting去总结。我主要负责网络部分,把网络部分的总结一下吧。总体来说,网络不算成功也不算失败。在现有条件下,资源没有都发挥出来。但是万幸的是,关键部分还没有掉链子。下面是具体总结。 1.没在场地里面拉好线并且实地测定过所有地点信号的不算部署完毕。 这次的会场平时不允许进入,只能在工作日去,所以只能在会议前一天跑现场。而且进入时没有长网线,墙壁上也没有网线接口。因此是会议前一天先根据具体环境完成了设定,支支下午去买了线,第二天早上部署的。这留下一个严重隐患,我把设备间当成了贵宾室,凭经验估计信号覆盖范围的时候出了错,信号没有覆盖到贵宾室,而且没有考虑门口。第一天的嘉宾和志愿者们,是否感觉信号像渣一样(尤其是杨毅涛)。其实这主要就是因为根本没有考虑到信号覆盖的问题所致的。 要解决这个问题,必须先知道会场结构,包括贵宾室,设备间,签到处等等重要但是部署时又不容易想起来的地方。然后估算需要多少个多强的AP才能覆盖。例如本次的贵宾室,最佳方案是拉40米网线到贵宾室,然后再架一个AP。会场往往没有线,需要自带网线。因此最好是有人知道会场大致结构(手绘亦可,但是标注一下承重墙),然后计算AP位置和网线长度,再去购买。或者直接买一箱网线,配上水晶头打线剪自己做。会议前至少一天去部署,用android测试每个点的信号强度,最好都达到-70db以上。完成后把电线和网线都用胶带封在地上,以防绊倒。 2.足够的AP和信号。 在估算AP和信号的时候,这次经验是,多一个天线,信号强10db。支支的三天线AP信号明显强于我的双天线AP。AP的信号是和距离的立方成反比的,一个AP保证20-30米的无阻挡会场是没问题的。但是每穿一道墙,信号就会下降大约20db。低于-70db就开始出现大量掉包了,-80db的时候tcp重传严重,导致基本无法使用。 一个AP可以接入的客户端是有限的,按照我看下来,大约在50上下(TP-LINK)。这个和事先估计一致。本来我想用6个AP,但是很难凑够这么多,而且带宽不足,就没借这么多。预定就是需要一些人没有设备或者接不上去的,否则就是所有人都不能顺利上网了。结果有一个AP在连接10个设备后就会崩溃,所以等于无法容纳用户。大部分用户都拥挤在同一个AP上,导致踢掉非常严重。会场峰值时刻,300人,有120个设备试图获得IP或者已经获得成功,但是AP在线只有20/50(AP1/AP2),即40%左右的设备被踢掉或者自动断开了Wifi(部分手机为了省电会发生这样的事情)。如果三个AP完好,120人在线刚刚好支撑的起来(20/50/50),但是这样的话连线设备可能还要多一些。 下次部署的时候,除了要考虑信号覆盖问题,还要考虑预留一些AP作为备用。因为会场AP都是民用过去支持,这些设备以前也没有做过大容量测试。我只能说TP-LINK的两台机器很给力,说到50就到50,多了就不能支撑,但是不死机。有台机器就频频死机,这样就需要备机更换。 另外,我们这次最高三个AP,因此分别设定为1/6/11频道就行了。如果AP还要多,请注意让同样频段的设备分到会场的远端。 3.世界真的很麻烦,有的时候有位置却没有电源。 这次电源还算给力,从墙上引出了不少拖线板,基本满足组委需求。至于普通听众就抱歉了,自带拖线板坐到边上的,互相交错给便携设备还能充个电。中间听众只有依靠地接。偏偏地接基本都拉给了组委的摄像机,周围一圈的人可以沾沾摄像机拖线板的光,其他人就只能相信电池续航了。 我们的AP3,第二天搬到了贵宾室那个方向。反正上面只能接不到10个人,给贵宾室小规模用用还可以。结果线只有30米,拉不到贵宾室。合适的位置又没有电源。只好委屈在后门口接了一下,把贵宾室的信号提高了不到10db。 据说有的会场更恶心,只有一两个电源接口。这种会场就必须带够插线板和移动设备来保证电力。 3.留出会议运营所需资源。 这次还算成功的一点,是为大会组委和志愿者/嘉宾保留了一路AP。大会的签到系统,嘉宾演讲都需要Wifi支持,为了让听众上网导致演讲失败就本末倒置了。为嘉宾保留的是AP1,上面还有一些比较活跃,或者着急使用网络的普通听众,一般大约20人左右,相对比较空。可是这个AP又不敢开放给听众使用,一使用就怕嘉宾没法演讲了。 wifi管理者比较怕的问题,主要就是有人使用wifi下载比较大的内容。因此开始的时候,会议需要网络的时候,我都用平板监控网络使用状况。如果有人正在使用大流量,就准备踢人。幸好,大家都很安分(或者是AP上不来)。后来也就放松警惕了,结果老外演讲的时候延迟很厉害,我差点就跑去拔掉AP2的电源了。这会断开所有人的网络,但是演讲者的使用就通畅了。 按照雨苍说的,组委wifi组一个重要任务往往就是封锁各个debian/ubuntu镜像的下载。我们这次没有出现这么恶劣的问题,谢天谢地。 4.会场的网络使用有非常强的峰值效应 这次会议只有2M带宽,因此我一直担心不够。后来开始看看还不错。但是休息的时候一直接到wifi很慢的投诉,空下来一直测不出。我第二天休息的时候去测试了一下,我的天,带宽全满,延时超高。说明演讲者水准很不错,大家专心听会,不怎么用网络。一休息,得,网络不够了。 这个没法解决,要解决只有增加带宽,或者在不休息的时候再使用一些比较耗费流量的业务。一个缓解的办法是使用qos系统,但是这次dir-825没有前往会场,所以没机会调试qos系统。 相对来说,路由器的NAT让我很放心。TP-LINK普通路由器的NAT在支撑80-90人的极限在线的时候仍然很稳健,速度不快是带宽问题,路由器没有崩溃就是万幸。 5.根据具体情况配置。 WEP比较节约资源,所以我们开始配置的是WEP信号。但是测试下来,苹果系统对WEP的支持非常差,基本接不上去。所以就不要节约了,使用WPA/WPA2。 运营商的接入情况比较多变,而且很难控制。这次运营商给我们的是一个内网IP,192.168.1.2。他们已经有了一个路由器在前面。我使用了双重NAT方案,而且避开192.168.1.x网段,来避免修改它们的路由器(我们无权控制)。 这次我们使用的是192.168.0.1⁄24网段,三台AP的连接模式是一主多桥。一个主router负责DHCP和NAT,其余的全部当单纯的AP使用。从1到3分别分配0.1-3的IP,2/3的DHCP关闭,1的DHCP从20开始分配起,直到254,共计最高容纳234人在线。20以前的IP让组委的人作为静态IP预留。如果还要多,建议使用192.168.2.0/23网段,最高可以容纳500人不到,足够大部分的会展使用。如果再不够——你们考虑10网段吧。 最后的经验总结。 1.会前勘察真的很重要,尤其是会场平面结构,承重墙位置,会场部署,电源插座位置,一定要提前至少三天确认。提前一天的时候要配好所有AP,备件和网线到会场部署,然后测试信号。 2.会场带宽一定要大,万一实在不够大,想办法ban掉debian/ubuntu的镜像,然后做qos或者squid。 3.自带足够材料,如果没有胶带/接线板/剪刀,那很多事情就要抓瞎。 4.据说TP-LINK之类的路由器在人数多到一定程度的时候会自爆,推荐使用高级设备或者电脑来做NAT/DHCP。不过我至少肯定100人的时候还没问题。

从网页中爬链接的一个小技巧

Dec 2, 2011 - 1 minute read - Comments

没啥好多说的,从verycd中爬所有的ed2k链接。 lynx -dump -listonly -nonumbers <http://www.verycd.com/topics/XXX/> | grep ed2k >> ed2k.txt 要看到ed2k未转码的内容也不难。 import sys, urllib with open(sys.argv\[1\], 'r') as fi: print urllib.unquote(fi.read())