Uncategorized

You are currently browsing the archive for the Uncategorized category.

其实玩过的手机不少,blackberry,android,刷机都还是比较简单的事情
今天拿到一个canada rogers的n97 mini,折腾了一下午,简单记录下过程

初始状态,有网络锁,完全无中文支持

先去taobao了一个解锁码,80
一共只有三次输入机会,看来没有盲目尝试是正确的

接下来的调研过程比较痛苦,总结一下几个线路

先使用nss改code,一组数字代表了机器的基本型号和销售市场
初始的code无法自动安装中文系统(补充:可以通过Phoenix强刷中文模块解决)
改这个比较简单,挑了个hongkong的code,改上拉倒,也就没尝试强刷的方式

如果手机本身的rom比较旧,那么用nokia自己的nsu可以自动升级
可惜手上这个自己就很新,自动升级失败

接下来通过Phoenix下载rom,之前修改过code的话,会自己找到对应的中文rom
按提示下载到Phoenix的安装目录,product目录里会多出来一个rm-555的目录

由于北美和亚太对型号的定义有区别,需要把rm-555改成rm-553
然后打开Phoenix,firmware update,搞定

穷折腾啊穷折腾

安装环境就不说了,碰到个及其sb的bug

安装莫名失败,错误代码0×80070643,source: contacts

系统日志里有某kb安装失败的提示

折腾了两个钟头,原因竟然是我禁用了windows firewall

靠靠靠

debian5 lenny

默认安装的php,今天装上zend optimizer需要跑些加密程序

挂上zendoptimizer以后,php就不停的segmentation fault

zendoptimizer和php-apc冲突,卸了后者就可以了

php-apc – APC (Alternative PHP Cache) module for PHP 5

关于硬盘

目前碰到的情况,当一台机器上既有自己的硬盘,又有外挂阵列,甚至usb存储设备
会出现每次启动sd[a b c d e...]对应设备不同的情况,一旦出现,fstab里的挂载信息就不对了
至于grub里的hd(x,x)和root参数,似乎没什么影响
解决的办法,系统正常启动后,把fstab里的挂载信息改成by-uuid的设备地址
每块硬盘设备在/dev/disk/by-uuid/里都会有对应的设备,无论sd怎么变,这个不变的

关于网卡

既有板载网卡,又有外插网卡,理论上modprobe.conf里做好alias就可以指定设备
有些特殊情况,比如板载和外插用的是一个驱动,指定编号就挺困难
最近又碰到个特例,机器安装完系统后,更换了同一型号的网卡,会导致设备dev消失的情况
这些,都可以通过修改/etc/udev/rules.d/*-persistent-net.rules来搞定
说到这,上面sd顺序混乱的问题,也可以通过修改*–persistent-storage.rules来定死,避免kernel根据设备发现的顺序分配设备号

西厢

玩意儿出来一段时间了,理论上,以它提供的功能,应该立刻火遍大江南北才对
它一直不火,也一直让我没什么尝试的动力
事实说明,无聊是一切成果的最终动力之一

原理什么的就不说了,懂行的自己去看看,也就知道了,不懂得解释也没用
由于最早的实现是在linux的netfilter上,也难怪老百姓没让它迅速的火起来
安装十分简单

第一次安装,没有实质效果,查了查,linux的NAT会直接丢弃用于迷惑GFW的包

第二次直接装到网关上,就成事了,NAT后面的客户端要怎么用,有人说要放到网关的FORWARD链上
我没有成功,也没有继续尝试,曲线一点,网关上直接装了个http proxy,也就可以了

有一些不便,西厢的设置上,需要指定访问哪些地址范围的时候,才启用功能
要手动收集twitter之类的地址范围还是挺麻烦,不过估计稍微等等,就会有人做好现成的配置包

到了这个层面上,不免要操心GFW多久会把这个漏洞堵上
原理上说,GFW为了高效对TCP连接状态的监控很有限
这几乎是个原则性的问题
直接修改策略监控所有包,成本太大,估计短期实现困难
实现一个改进些的tcp栈,运算量的成本也会增大不少,至少一个数量级,也就更容易被syn flood搞瘫痪
比较可行的,我就不去想什么可行的了
至少,这是个开头,在GFW实现完整的TCP栈之前,就是个来回斗法的过程

比较担心的,把上面搞急了,直接封禁IP,那样,我们离lan就更近了

这是些被炒的很热,多数情况下被拿出来唬人的技术名词。

虚拟化还是挺好理解的,无非是隔离了硬件与操作系统持续了数十年的直接联系。与集群技术一起,建立了软件硬件之间相互的1对n的关系。
只不过集群还发展在应用层面,对多套硬件的使用限制很多。

云是什么?当看到国内某杀毒软件打出云杀毒的概念时, 我是彻底无语了。狭隘的定义,云就是硬件和虚拟化平台的结合体。
先进在哪里?最初的标榜的优势,充分利用硬件资源,不用再为隔离应用而分别购置硬件。对于国人来说,这个优势不明显,
或者说不够充分。
先来说说需求,为什么要隔离应用。在设计大型系统时,要将功能模块话,同时将基础性的模块标示出来 。
为了提供系统稳定性,那么对基础性模块的保护就十分必要。除此之外,也不希望看到一个功能模块出问题,导致整个系统崩溃。
最坏的情况,如果有模块出现问题,能够快速恢复。

当一个系统庞大到你不可能关注每个细节的时候,满足上面的系统要求就十分关键,试想一个蹩脚程序员的一行代码,存在拖垮整个
系统的可能性,每个系统管理员心存这样的担忧已经很久很久。

云的出现,硬件资源就不再是一台一台的服务器,而是一个整体的计算能力资源,对硬件的需要,也不再是以机器为单位,
而是从云中分割出的计算能力资源。云本身对硬件资源的整合是松散而耦合的。在完美隔离应用的同时,省略了硬件配置和系统安装配置两个需要在现场的过程
最坏的情况,假如有模块受到攻击,系统被污染,在排查模块本身漏洞的同时,部署一个全新的应用环境只是几分钟的事情。
这还不够吗,全新的虚拟化技术允许动态的迁移过程。诸如有硬件提示错误了,添加新的服务器可以分担负载了等等这些情况,
可以在应用不停的情况下直接进行。

说了这么多好处,也要说说缺点。自身对计算资源的损耗,这是无可避免的。各种虚拟化技术的特点也会在这方面体现出来
诸如半虚拟化的xen和openvz性能就要优于全虚拟化的vmware和kvm,但全虚拟化保留了宿主环境的纯洁性,这也是个优点。

从云中分割出的计算资源,最大的单体也会小于云中最强主机的计算能力,如前面所说,整合硬件资源给一个应用,这是集群该干的事情。

由此诞生的框架,由云负责整合管理硬件资源,提供计算能力,对需要超量计算能力的应用,再通过单独的应用集群技术,整合云的计算资源。
有点浪费,但很灵活,也很省事。

下面来几个名词解释:

私有云     云,自己造,自己用的

公共云     诸如amazon的EC2,由企业提供,使用者租用

混杂云     跟上面不同概念的分类,指的是云中存在不同的虚拟化技术,甚至有纯粹硬件主机直接服务的存在

我的需求挺简单,现场采集视频信号,传输给服务器,再由服务器广播出去

前些年,我会毫不犹豫的选择windows media encoder + windows media services
轻车熟路,何乐而不为
不过呢,这个技术线路现在很少见,估计也在被淘汰的边缘了
作为一名进步青年,我决定尝试新技术

身边看得到的,还有个vlc
sjtu用它部署了挺大范围的视频转播系统
这是个非常好的方案,只有一个问题,它要求客户端安装软件
除此之外,我还真的很少见到vlc被部署到窄带视频应用上
(其实我也就见过sjtu的一套部署方案 – -b)

还剩下的,flash
起步于,我见过国外有网站应用这个技术转播比赛

采集编码,adobe flash media live encoder,这个是免费的,界面也很直观

flash streaming server:wowza  red5  FMS
red5开源,网上评价也不错,也就选定了

这个部署的过程真是相当的费劲
这跟我对基于java的webapp不甚了解不无关系
能找到的文档,几乎都是二次开发相关的,眼睛一扫到IDE和类
就晕了,于是反复仔细研读了red5的feature list
Streaming audio/video
Live Stream Publishing
求助文档无果的情况,决定装上试试

它的安装文档倒是相当体贴,没什么挫折,就搞定了
运行起来,通过web访问下,才知觉这玩意儿是个framework
app需要二次开发的,它自带了不少demo
然后,其中的一个demo就能满足我的要求…
oflaDemo

它实现的功能,就是个发布点,完整的形式是这样
rtmp://server.ip/oflaDemo
无论是采集发布的flash encoder还是播放的player,都连接这个地址

flash encoder会指定自己发布的stream的名称
player播放时也要加上名称参数

可以是文件名,live stream的话,可以使随意的代号

最后就是flash player的选择,网上大部分文章中提到的JW flash player
其实是不好用的….估计曾经是可以的,但是两家都顾着自己升级就出了问题

JW可以装载视频,可以快速seeking,但是不能播放,服务器的log里可以看到
Method checkBandwidth with parameters [] not found的提示

这个问题让我纠结了大半天,差点就回去找mms凑合了

换了个播放器,flowplayer,搞定。
附一个flowplayer的配置代码,也帮助理解streaming的一些概念

$f("SomeDivID", "http://releases.flowplayer.org/swf/flowplayer-3.1.5.swf", { 
 
    clip: { 
        url: 'my_lifecast', //could be a file name
        live: true,           //obviously
        provider: 'rtmp' 
    }, 
 
    // streaming plugins are configured under the plugins node 
    plugins: { 
 
        // here is our rtpm plugin configuration 
        rtmp: { 
            url: 'flowplayer.rtmp-3.1.3.swf', 
 
            // netConnectionUrl defines where the streams are found 
            netConnectionUrl: 'rtmp://cyzy7r959.rtmphost.com/flowplayer'   //发布点
        } 
    } 
});
<cluster name="example" config_version="1">
 <cman two_node="1" expected_votes="1">
 </cman>
 <clusternodes>
  <clusternode name="one" votes="1">
   <fence>
    <method name="single">
     <device name="human" ipaddr="192.168.2.1"/>
    </method>
   </fence>
  </clusternode>
  <clusternode name="two" votes="1">
   <fence>
    <method name="single">
     <device name="human" ipaddr="192.168.2.2"/>
    </method>
   </fence>
  </clusternode>
 </clusternodes>
 <fencedevices>
  <fencedevice name="human" agent="fence_manual"/>
 </fencedevices>
</cluster>
<cluster name="example" config_version="1">
         <clusternodes>
           <clusternode name="one" votes="1">
             <fence>
               <method name="single">
                 <device name="human" ipaddr="192.168.2.1"/>
               </method>
             </fence>
           </clusternode>
           <clusternode name="two" votes="1">
             <fence>
               <method name="single">
                 <device name="human" ipaddr="192.168.2.2"/>
               </method>
             </fence>
           </clusternode>
           <clusternode name="three" votes="1">
             <fence>
               <method name="single">
                 <device name="human" ipaddr="192.168.2.3"/>
               </method>
             </fence>
           </clusternode>
         </clusternodes>

         <fencedevices>
           <fencedevice name="human" agent="fence_manual"/>
         </fencedevices>
</cluster>

使用vray的ditributed rendering

之前用qube进行任务分配的时候,只要将源文件放在公共存储(CIFS)上,所有机器以相同路径访问即可
vray这样做不行

简单的试验了下,设置每台节点的working dir为公共存储上的统一文件夹
然后把所有材质都丢到那个目录去,就不会有材质丢失的问题了

 

说到这,渲染集群如果使用到公共存储,那么公共存储的IO压力是很大的
磁盘上有,网络上也有
而且这种共享,是基于文件的,SAN也不能直接解决问题
CIFS或者nfs或者openais的backend是必须的

如果相对于渲染时间,网络传输的时间及时长但也可以忽略不计,那无所谓
如果真有需求

廉价的
普通的服务器陪RAID0并做好备份,多插几块网卡,一块卡上有两个节点读数据

有钱的
上IB,存储还是RAID0,如果DAC不行,就SAN

前面有提到过QUBE!
这是个典型的集群管理软件
适用于很多人要用一个集群的情况

它对任务的切分细度取决于相关软件本身
拿3dsmax来说,frame是最小细粒度
qube!没有能力将一个frame打散再发送给渲染节点

那么对于特别复杂而耗时的单个frame,怎么利用集群的计算能力
这个属于渲染器的功能,主流的几个,v-ray,mental-ray,renderman都支持分布式渲染
它们这里的分布式渲染跟qube!的概念就不一样了

理论上,后者的灵活性应该更好一些
qube!除了管理上的优势,性能上,也还是有一些的
诸如一个1000frame的job,一个10计算节点的集群
如果采用qube!分发frame,那么一个节点计算100frame,效率提高10倍
如果采用第二种方式,10台计算节点理论上相当于一个性能十倍于单台节点的超级节点,处理单帧的时间是单机的十分之一
如果都是理想状况的话,性能没有差别,但实际情况下,随着节点数的增加,第二种方式的综合效率增长并不是线性的
拆分单帧,组合结果的复杂度和开销都会随着节点数的增加而拖慢效率

所以,混合两种方式的集群还是需要的
只是混合的方式还不太确定
一种层级式的,qube!控制的是组后后的超级节点
一种是平行的,qube!控制的还是单个节点,每个节点自身也是渲染器分布式渲染的节点

层级式的方式,每个超级节点的规模如何确定才最有效率,而且,投入所以计算能力处理一张图也就没有可能了
平行的话,两种配置是否会冲突?不同性质的任务提交的方式也不同,增加了一点点复杂度

这几天会用虚拟机先试试效果

« Older entries