lii's profile童言无忌PhotosBlogListsMore Tools Help

童言无忌

掩耳盗铃的初级阶段是掩人耳目

lii lih

No list items have been added yet.
8/23/2009

如何用 Thunderbird 订阅自己的 Twitter 朋友消息更新 timeline RSS feed 关键词筛选

Thunderbird 是一个 opensource 的 email, news, rss feed 客户端软件。它有很强的检索功能,且可以将搜索条件保存为一个虚拟的文件夹,打开这个文件夹可以得到满足搜索条件的最新结果。这样非常适合订阅朋友很多的 时候,从大量信息中筛选自己感兴趣的话题。
1. 下载安装 Thunderbird http://www.mozillamessaging.com/thunderbird/ 。我选择的是英文界面,有中文界面可以选择。
2. 运行之,选择菜单:File / New / Account:
clip_image002[6]
3. 选择 RSS News & Blogs,点击 “Next”:
clip_image004[6]
4. 填写一个名字,比如 “Life Streams”,点击“Next”:
clip_image006[6]
5. 点击 Finish:
clip_image008[6]
6. 在左侧文件夹列表中,右击“Life Streams”帐号,点击“Properties”:
clip_image010[6]
7. 选中“Check for new articles every”,设置一个间隔时间,比如 2 分钟取一次 twitter 消息。选中“By default, show the article summary”。点击“Manage Subscriptions”:
clip_image012[6]
8. 点击“Add”:
clip_image014[6]
9. 在浏览器中打开 https://twitter.com 登录你的帐号后,找到右下角的 “RSS feed” 链接:
clip_image016[6]
10. 在“RSS feed”链接上右击,选择“Copy link address”:
clip_image018[6]
11. 回到 Thunderbird 对话“Feed Properties” 窗口,将拷贝的 URL 贴入“Feed URL”输入框,选中“Show the article summary”,点击“OK”:
clip_image020[6]
12. 将看到如下“Downloading feed articles”窗口,完成后,关闭对话框:
clip_image022[6]
13. 每次更新可以获取 20 条消息,所以,如下图所示。如果你订阅的朋友消息比较多,为了不遗漏消息,你要将上述第7步中自动更新的时间间隔设置得比较短。
clip_image024[6]
14. 右击新添加的 Twitter feed,点击“Properties”:
clip_image026[6]
15. 在“General Information”页签,选中“Check this folder for new messages”,确认“Default Character Encoding”正确:
clip_image028[6]
16. 点击“Retention Policy”页签,取消“Use server defaults”,选择“Don't delete any messages”,以永久存档你的 Twitter 消息。点击“OK”。
clip_image030[6]
17. 要在 Twitter 消息中快速搜索关键词,可以在 Thunderbird 窗口右上角找到搜索框,输入要搜索的关键词,可以只显示含有此关键词的信息:
clip_image032[6]
18. 如果要进行更复杂的搜索,右击 Twitter feed,点击“Search”:
clip_image034[6]
19. 选择“Match any of the following”,“Subject”“contains”,填入“志永”,点击“+”按钮可以增加其他搜索关键词:
clip_image036[6]
20. 比如如下我用了四个关键词搜索公盟和许志永有关的消息。设定好关键词后,点击“Search”按钮,搜索的结果会列在下方窗口中:
clip_image038[6]
21. 点击“Save as Search Folder”将这一检索条件保存为搜索虚拟文件夹:
clip_image040[6]
22. 输入一个文件夹名称,比如“公盟”,点击“OK”:
clip_image042[6]
23. 这样就增加了一个文件夹“公盟”,其中是从你订阅的 Twitter 消息中筛选出来的和公盟和许志永有关的消息。在这个文件夹中,还可以进一步快速过滤信息,比如,在右上角消息过滤搜索框中输入“下载”,可以得到和公盟有 关的消息中含有关键词“下载”的消息:
clip_image044[6]
如此,即便你 follow 订阅了大量的 Twitter 消息,你也不怕太多而看不过来了。重要的信息可以过滤成搜索文件夹,比如上图中“六四”“未未”“玉娇”等新闻主题。


7/30/2009

Ogre 3D引擎笔记 [3D engine]

注意,原文 blog 上有恶意代码,通过 google reader 可以安全阅读。

http://narita1982.bokee.com/6715000.html

Ogre 3D引擎 笔记~2:键盘&鼠标响应

最近看2D又看不下去了,继续看Ogre解闷。事隔一年了,真快。可惜3D功力还没见长>_<翻了下旧帐,发现自己去 年写得东西竟然有点看不懂了,暴汗,赶紧拾起来看看。

刚觉得程序真是一件令人郁闷的东西,语言和语言之间的经验是没有办法共享的,会了一个,另一个语言能做的东西这个却做不了。放眼望去竟是不会的东 西。超有挫折感。不过后来翻了翻原先的代码,或者别人的教程,倒是发觉理解能力变强了,代码看看就知道和学过的东西哪些是共通的,哪些是特殊的。嘿嘿,没 白写那些代码。

开始看Ogre的键盘&鼠标,之前很晕的东西,现在发现其实还好啦(也可能和英语逐渐能一目十行有关-_-)

Ogre有Buffer Input和Unbuffer Input两种,其实这两种Wiki上的教程都过时了,新的Ogre,OIS已经遭淘汰了,所以Wiki的代码是调不通的。

现在想想FrameListener无非就如同MFC的OnTimer,数据变化的处理都在之中进行。

Buffer Input 是在发生输入响应事件的时候进行,而UnBuffer Input则是在FrameListener里进行。就如同Buffer Input是响应WM_MOUSEMOVE,WM_KEYDOWN一样,而Unbuffer Input则是在OnTimer里检测是否有键盘等事件。

具体的(以下现在都没有了,说说思想吧):

ExampleFrameListener有成员变量mMouse和mKeyboard。

UnBuffer Input在FrameListener里调用mMouse->Catch(),或mKeyboard->Catch()来 检测消息。然后if来处理。

Buffer Input是要继承OIS::MouseListener和OIS::KeyListener,这两个类有纯虚函数KeyPressed()和 KeyReleased()遗迹MousePressed()和MouseListener()。有处理内容的话,就重载这些纯虚函数就可以了。

目前的做法是要用到CEGUI,所以Wiki的Basic Tutorial 5和6是不用看地。


http://narita1982.bokee.com/6728107.html

OgreNewt~1:如果不能 动->Collision Tree

吐血啊,吐血……
想着“老天爷,你快让我搞定,我好去睡觉了!”,终于搞定了,老天爷真是赏脸。

查了下,有个老外和我犯了一样的错误,他花了5个小时发现的,让他狂吐;我比他吐得更厉害。心碎。

原话:I don't get it at all. It took me 5 hours to discover I had to use mNewtonWorld->setWorldSize(vector, vector) before anything would be updated.

就是说:必须调用SetWorldSize()设置世界大小,引擎才会更新。body会掉到最低处就不动了。奇怪的是,demo里没有 设置,却能更新,真是害人啊。

本来想用Newton的,后来发现最大的问题是,Newton用旋转和位移,而Ogre却用translate(),yaw(), pitch() 和roll()来旋转和位移。鉴于偶数学太差,搞不定Matrix就作罢。

设置没什么难的,Newton比Ode好的地方在于Newton文档齐全,教程齐全,整合了OpenGl因此Domo可以看到效果,编 译了lib和dll。OgreNewt和OgreOde一样,也需要自己编译lib,BasicFrameListener因为新版的Ogre输入部分的 改动,要作一些修改。

-----------------------------------------------

OgreNewt封装得很好,Newton的Collisiton Tree只是一个框架,而OgreNewt的Collision Tree部分真的是很容易,它通过节点读取entity的mesh模型,然后读取面加入到Newton的CollisionTree里,太傻瓜了吧?一点 都没有进步…… 原代码部分可以好好看下,看看怎么读Ogre的mesh模型。

http://narita1982.bokee.com/6730470.html

Ogre 3D引擎 笔记~3:摄像机绕定点转动->Overlay->RayQuery

不是很难的东西,不过想不到的话绝对可以让人吐血。

Ogre里面的转动都是自转的,所以不要改什么yaw,roll, pitch,rotate或者TS_WORLD,TS_PARENT了,即使计算部分全部自己作,它还是会傻傻地绕自己的轴转动。

看了兔子也会编游戏的月亮绕太阳公转的教程,才恍然大悟。如果公转是要转太阳,而不是月亮地。将月亮的节点绑到太阳的节点下面,月亮和太阳节点的距 离是一定的,这样当太阳自传的时候,月亮就会跟着转了。

摄像机也同理。

当需要摄像机规位的时候,也不要自己想怎么rotate回去。只要将绑定摄像机的节点removeAndDestroy(),然后重新绑定就好。

用Overlay把导航条的雏形作好了。Ogre真得太脚本化了,一点技术含量也没有。
参照ExampleFrameListener写吧。Overlay的布局,字体设置,以及图片都用txt文件设置。可以在pack文件夹里把 OgreCore解压缩看看。

不过不晓得Overlay动态处理图片的能力怎么样,有待研究。

用Ogre的射线查询(RayQuery)在导航板加入了显示高度的部分。有一点点飞行游戏的雏形了。活活~

RayQuery的教程还是满多的。Ogre wiki上的教程还满不错。http://www.ogre3d.org/wiki/index.php/Intermediate_Tutorial_2

具体的太都,就不写了吧 =P

http://narita1982.bokee.com/6732119.html

Ogre 3D引擎 笔记~4:玩转RibbonTrail

想作跟踪弹的尾迹?方法之一就是求助于RibbonTrail。




RibbonTrail的Demo(就是两条光绕头转动的那个)代码和注释的误导性太大。如果照抄的话,是很难作出想要的效果地。

代码其实分为几个部分:公告板(Billboard,就是永远朝向镜头的贴图)是用来作光线头部的贴图的,绑定Light是为了照到别的物体上有明暗效 果,而RibbonTrail是用来作轨迹的。

那一段给节点加入Track的部分完全是误导>_<,动画的部分完全不需要。 RibbonTrail的轨迹是不需要绑定若干节点的。RibbonTrail只需要绑定两个节点,一个头,一个尾。而头必须绑定在移动的节点上,用 RibbonTrail的addNode()绑定;尾则随便建一个SceneNode,用SceneNode的attachObject()绑定,这个节 点的父节点会自动设置为头部,所以如果设置位移的话不要设置成世界位移。

RibbonTrail的maxElement越多,setTrailLength()越大;渐变效果越明显,最终效果也就越真实。

另外RibbonTrail的材质是一条高1pixel,宽128pixel的图。实际上白色的部分才是表示光线的部分。

嘿嘿,RibbonTrail可以作出一些很酷的效果哦。

http://narita1982.bokee.com/6733505.html

Ogre 3D引擎 笔记~5 :碰撞检测

终于搞定了,郁闷,我得提高发现问题的速度>_<

物体间的碰撞检测我用的是OgreNewt(一个开源的物理引擎)。但是我不太在乎物理定律,因为作出精确的行为是需要满强的物理功底的。我只是需 要用到它的碰撞检测,如何初始化等就不说了,只说下问题。

Ogre的SceneNode和OgreNewt的body是绑定的。可以用SceneNode的位置设置body的位置,或者相反。但是不要用前 者,除非初始化的时候。因为不用物理规则设定body位置的话,那么碰撞就不起作用了(多么2)。

设置body的位置和方向有几种方法,setVelocity,setForce, setTorque,setOmega;分别是设置速度,受力,力矩,和角速度;因为对物理定律不熟悉,所以超级厌恶受力和力矩。所以搞一 个伪物理行为取而代之:因为对物体的实际旋转没有兴趣(比如受到撞击木块会翻滚),所以只用SetVelocity调整body的位置;而用 SceneNode来计算旋转方向。

具体……掠过……

注意虽然body和SceneNode是绑定的,实际上body位置或者SceneNode位置改变都是不影响到对方,必须自己改变另一个的位置。 改变SceneNode的位置比较正宗的方法是用Callback,OgreNewt可以设置各种各样的Callback函数,程序会自动在某种情况发生 的时候调用它们。改变位置就可以用

body->setCustomTransformCallback(customTransformCallback); 

/*定义*/

void CRider::customTransformCallback(OgreNewt::Body* me, const Ogre::Quaternion& orient, const Ogre::Vector3& pos )
{
/*获取和body绑定的指针,用body->setUserData()设定*/
 SceneNode* node=(CRider*)me->getUserData();
 node->setPosition(pos);
}

具体……掠过……

这里的callback虽然不需要传参数,但是实际上它的参数数量和形式已经是定义好的。另外,函数必须是静态的。

主要问题已经解决,我的程序因为未知原因出现了一件超级恶的事,就是body走着走着就不动了,虽然速度设置的没有错误,我想可能是物理定律发威 了。搞了好久,终于发现不动的时候TransformCallback也不会被调用了,果然是物理定律发威了。Newton会将不动的物体永久打入冷宫, 好像锁定一样,实际上是不再计算它。

然后发现有一个setAutoactiveCallback(),试验了一下,发现在不动的时候程序会不断调用这个callback。于是写了一个 callback如下。

void CRider::customAutoActiveCallback(OgreNewt::Body* me, unsigned int state)
{
     me->unFreeze();
}

终于大功告成~~~~~~







6/27/2009

Re: Invision Power Board BBS webforum

phpbb 也有打印功能。这里有一个例子: http://forums.mozillazine.org/viewtopic.php?f=39&t=653812&start=0&sid=36965ca49162daff41d44dc37236c9f9&view=print
5/31/2009

Invision Power Board BBS webforum

Invision Power Board (http://www.invisionboard.com) Invision Power Services (http://www.invisionpower.com) 主题打印功能不错,比如: http://www.ied2k.com/forum/index.php?act=Print&client=choose&f=8&t=97 vbulletin 打印分页,麻烦些, Discuz! 只打印一页,不全, phpbb 则默认没有此功能。
5/23/2009

IT related Positions and Professions

From: PC Magazine http://www.pcmag.com/demographic/ IT Positions: ---- MIS/IS/IT Management/Staff ---- Chief Information/Technology Officer (CIO/CTO) Chief Security Officer (CSO) Vice President MIS Director MIS Manager MIS Internet Manager e-Business/eCommerce Manager/director eCommerce Engineer Webmaster/ Web developer/web designer Supervisor MIS Technical Assistant Other IT management IT staff position IT Consultant ---- Corporate Management/Staff ---- CEO/COO/Chairman/President Owner/Partner/President CFO Controller/Treasurer Exec VP/General Manager Director Professional (Consultant, legal, medical, architect, etc.) Other Corporate Management Other Management Other non-IT Staff Position ---- Professional/Other ---- Student Retired Unemployed Professions: Communication Carrier Computer Manufacturer (hardware, software, etc.) Computer/Network Services/Consultant Computer-Related Retail/Wholesale/Distribution Data Processing Internet Service Provider (ISP)/(ASP) VAR/VAD/Systems or Network Integrator Technology-related, Other Accounting/Finance/Banking/Venture Capital Aerospace Architecture/Construction/Engineering Business Services/Consulting, Non-Computer Related Consulting, Other Education, K-12 Education (University/College) Education/Training, Other State/Local Government Federal Government (including Military) Hospitality/Hotel/Restaurant/Food Services Healthcare/Medical/Biotechnology Insurance/Real Estate/Legal Manufacturing/Process Industries, Other Manufacturing/Process, Non-Computer Related Online Retailer Publishing/Media/Advertising/Marketing Research & Development Lab Transportation/Freight/Delivery Services/Utilities Wholesale/Retail, Non-Computer Related Other
 
Photo 1 of 1

Feed

The owner hasn't specified a feed for this module yet.
This person's network is empty (or maybe they're keeping it private).
Thanks for visiting!
Please wait...
Sorry, the comment you entered is too long. Please shorten it.
You didn't enter anything. Please try again.
Sorry, we can't add your comment right now. Please try again later.
To add a comment, you need permission from your parent. Ask for permission
Your parent has turned off comments.
Sorry, we can't delete your comment right now. Please try again later.
You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
Complete the security check below to finish leaving your comment.
The characters you type in the security check must match the characters in the picture or audio.

Custom HTML