QT居然支持Camera了?
今天在QT的RSS中看到一个4.7beta版本的消息,上QT官网上看了看,居然惊讶地发现对Camera的支持已经进入beta版本了,这真是个好消息。
不过还不清楚这个特性是专注与mobile相关的camera,还是通用的、跨平台的camera。如果是后者,就实在是太好了。
4.6版本对音频的支持比较让人欣喜,如果4.7版本能对视频提供完整支持,那么SIP软终端的开发工作会省不少精力。
今天在QT的RSS中看到一个4.7beta版本的消息,上QT官网上看了看,居然惊讶地发现对Camera的支持已经进入beta版本了,这真是个好消息。
不过还不清楚这个特性是专注与mobile相关的camera,还是通用的、跨平台的camera。如果是后者,就实在是太好了。
4.6版本对音频的支持比较让人欣喜,如果4.7版本能对视频提供完整支持,那么SIP软终端的开发工作会省不少精力。
看起来这是一个很普通的功能,但是在gmail的各项菜单中,居然没有察看未读邮件的选项。这确实是一件让人摸不着头脑的事情。
在讨论这个问题之前,先讨论一个别的问题:gmail对来信的时间判断。gmail不是根据gmail服务器的时间来判断的,而是根据来信自己的时间戳进行判断。如果来信的时间是非常久远之前的,则gmail将它排到列表的最后面(oldest)。有位不知名的朋友发了封信过来,在gmail的inbox中显示有一封未读来信,可是我始终找不着是哪封邮件未读,只好将583M的邮件翻了个底朝天,最后发现,来信的日期居然是2004年,gmail直接将它放在最后面了。
由此想到,如果能直接查找到未读邮件,就不用那么辛苦的去翻旧邮件了,接着就惊讶地发现,gmail居然没有这项设置。后来在google中进行搜索,才发现是通过以下方式来实现的:
在“search mail”的输入框内,输入label:unread进行搜索就可以了。
不算太麻烦,不过如果能设置成缺省功能项,则可能会更好些。
这个设置很让人意外。在菜单“工具-〉保护”中提供了对工作表和工作簿的保护,可是从使用过程看,似乎没有起到什么保护作用。
实际上是通过另外的方法来设置密码保护:保存文档时,在对话框中选择“密码保护”,然后输入密码即可。
对比Microsoft Office,感觉OpenOffice在各方面还有待加强啊。例如,上述密码保护,没有区分只读和可写等情况(也可能是我不熟悉,没找到正确的地方?)。在保存对话框中进行密码设置也比较另类,如果客户直接通过工具条上的“保存”按钮,就不会知道这些设置。
缺省情况下,Ubuntu没有安装Samba(我指的是Ubuntu的桌面版,不清楚服务器版是否缺省安装了Samba),因此首先就是要安装Samba。 然后,配置samba进行linux与windows的互相共享操作。
1、安装Samba
有两种方式:
(1)从Samba的软件中心搜索Samba,然后安装Smbfs以及Samba两个软件包。
(2)从命令行安装。键入以下命令即可:
sudo apt-get install samba
sudo apt-get install smbfs
2、配置Samba,使Windows能访问Linux
首先添加一个samba用户,例如:smbpasswd -a yxh
修改/etc/samba/smb.conf文件,基本上修改量不大。
[homes] <–去掉原有的注释即可。
comment = Home Directories
browseable = yes
create mask = 0777
directory mask = 0777 <– 没有这两项,就无法进行写入和删除操作。
valid users = %S
write list = %S
3、访问Windows文件
这个就比较简单了,直接用mount命令就可以了:
sudo mount //192.168.1.103/win_files /home/yxh/win_files/ -o username=yxh
其中,’yxh’是windows环境的用户名,”//192.168.1.103/win_files”是windows环境的共享目录。”/home/yxh/win_files/”是linux环境的目录,用于映射上述windows共享目录。
命令成功后,直接访问/home/yxh/win_files即可。
4、疑问
在Fedora系统中修改了smb.conf后,需要使用命令“service smbd restart”才能使配置起作用。而Ubuntu环境中,似乎修改后就自动应用了。难道Ubuntu是每次访问操作时,都会去读smb.conf?还是监视了smb.conf文件,发现一旦更改就自动重启samba?
最近Fedora13终于发布了,加上前段时间发布的Ubuntu10.04,Linux版本现在的发展确实日新月异,一日千里啊。
在VBox上安装了这两个版本试了试,两个版本都不错。但是毫无疑问,Ubuntu版本在界面、可操作性方面已经全面超越Fedora了。可能Fedora版本比较适合开发,内部集成了很多开发工具等。不过,我试过Ubuntu的软件中心后,感觉这方面一点都不会是问题。Ubuntu下安装软件实在是太方便了。
我认为Ubuntu“专注于用户的体验”的策略是非常成功的。而Fedora过于侧重技术方面,尤其是RedHat利用Fedora把用户当小白鼠,不尊重普通用户,太技术流。Windows比同期其他系统优秀的地方,就是足够好用的功能和足够优秀的用户体验,技术上windows也比同期其他系统要落后些吧。以史为鉴,贴近最终客户的系统才是好系统,才能有好的发展。
何况Ubuntu和Fedora同宗同源,都是基于同一个linux,真正的linux技术流高手,应该也不会care两者的差别。因此,决定最后是否成功的,就是普通用户(个人用户以及企业用户)的体验了。
Windows下应用SIPp非常简单, 直接下载SIPp的安装文件安装即可。
需要注意的是,不要直接从cmd窗口启动SIPp,而是 点击SIPp的快捷方式“start sipp”,这样,它会将SIPp的安装目录加入路径中。或者,可以将sipp的安装目录加入系统的PATH路径,然后也可以直接在cmd窗口启动 SIPp。
sipp 192.168.1.100:5060 -sf caller_basic.xml -p 5062 -m 1 -r 1 -rp 2000 -d 2000
-sf 加载外部的xml定义文件
-inf 从外部csv文件导入数据信息
-p 指定本地端口。 如果不指定的话,系统使用一个随机的空闲端口;
-m 呼叫次数
-d 每个呼叫的保持时间(毫秒)
其他常用配置参数:
-r -rp Specify the rate period for the call rate.
Example: -r 7 -rp 2000 ==> 7 calls every 2 seconds.
实际上SIPp内置了缺省的UAS和UAC,因此,我们可以不需要定制xml脚本,直接用下面的命令进行测试:
启动SIPp做呼出:sipp 192.168.1.100:5060 -sn uac -p 5062 -r 1 -rp 2000 -d 2000
启动SIPp接受呼叫:sipp 192.168.1.100:5060 -sn uas -p 5063
应用在Fedora系统
下载sipp的源代码在Fedora 9下编译时,会有编译错误“INT_MAX未定义”。 解决方法:
修改sipp.hpp文件,增加以下宏定义即可:
#ifndef INT_MAX
#define INT_MAX 0xFFFFFFFF
#endif
直接使用命令make即可进行编译,在当前目录下产生sipp可执行文件。
Activities与Tasks(任务)
一个Activity可以启动另一个Activity, 即使该Activity定义在另一个应用程序中. 用户无法区分出这两个Activity有可能是定义并运行在不同的应用程序进程中.
Android在同一个Task中维持这两个Activity, 以保持用户的体验. 简单而言, 对用户体验来说, 一个Task就是一个”应用程序”. 它是一组相关的activity,并组织在同一个堆栈中. 堆栈中根activity(root activity)就是启动当前task的activity. 堆栈最顶部的activity就是当前正在运行的activity. 当一个activity启动另一个activiey, 新的activity就推入堆栈, 称为当前运行的activity. 以前的activity保留在栈中. 当用户按下BACK键, 当前activity就从堆栈中弹出, 以前的activity恢复为当前运行的activity.
堆栈中可以包含多个对象. 如果一个task包含同一个activity的多个实例, 堆栈对每个实例都有一个独立的入口(entry). 栈中的activity永远不会重新进行调整, 只有推进(Push)和弹出(Pop).
task就是activities的栈. 没有办法对task中所有的activities独立设置值(笔注: 是指变量值吗?). task的值只能设置在根activity中.
task中的所有activities作为一个单元共同进行移动. 整个task可以设置到前台运行, 也可以送到后台运行.
亲和(Affinities)与新task
缺省情况下, 应用程序中的所有Activities共有一个affinity. 每个activity也可以设置独立的affinity. 定义在不同应用程序中的activities可以共享同一个affinity. 在同一个应用程序中的activities可以分配不同的affinities.
FLAG_ACTIVITY_NEW_TASK标识
如果传递给startActivity()的Intent包含FLAG_ACTIVITY_NEW_TASK标识, 系统会查找不同的task来承载当前的activity. 通常, 这会是个新task. 如果已经有一个task具有与当前activity相同的affinity, 则当前的activity会登录进该task.
allowTaskReparenting属性
如果allowTaskReparenting属性设置为true, activity可以从启动它的task移到另一个具有相同affinity的task中.
启动模式
standard (缺省模式)
singleTop
singleTask
singleInstance
有些单词实在不知道该怎么翻译, 或者翻译得总让人感觉不伦不类. 例如: Activity, Affinity等.
激活组件: Intents(意图)
CP收到CR的请求时就可以激活. 其他三个组件: 行为, 服务以及BR都是通过异步消息激活, 这种消息就是”intent(意图)”.
关闭组件
CP只在相应CR请求时存活, BR只在响应广播消息时存活, 因此对它们而言没有必要显式地关闭这些组件.
另一方面, Activities提供了用户界面. 它们与用户可能会有一个长期的会话过程, 会话期间即使是空闲也仍然保持激活. 类似的, 服务也可能保持运行很长一段时间. 因此Android提供方法有持续地关闭Activity和服务.
1. 可以调用Activity的finish()方法关闭Activity. 一个activity可以关闭另外一个activity.
2. 服务可以通过调用stopSelf()的方式来关闭自己, 或者调用Context.stopService()来关闭.
如果不再使用组件了, 系统也可以关闭它们, 或者当Android必须回收内存时也会关闭这些组件.
manifest文件 (?运货单文件)
Android启动一个程序组件之前, 需要知道这个组件的存在. 因此应用程序需要在一个manifest文件中声明它们的组件. manifest文件打包在.apk文件中, 该文件(.apk)还包含程序代码, 文件以及资源等.
manifest文件是一个结构化的xml文件, 并且总是命名为”AndroidManifest.xml”. 它最主要的任务就是将当前应用程序的组件情况告诉Android系统.
Intent过滤
Intent对象可以显式地命名为一个目标组件(Target Component), 此时Android可以通过manifest文件对它进行操作. 但是如果目标没有显式命名, Android就必须要查找最合适的组件来响应Intent, 方法就是将Intent对象与潜在目标的Intent filters(Intnet过滤)进行比较.
非常不错的中文模板.
其实WordExpress 3.0的缺省模板也挺好, 不过字体, 段间距, 行间距实在太大, 我也不想在这方面花太多时间去调整. 而iNove做得确实不错, 我尤其喜欢它的menu设计.
如果说iNove的缺点话, 我只是觉得抬头的黑色部分太沉重了, 换成WordExpress的缺省抬头部分可能效果会不错.