Product Design

一个提供Mash-up Service的站点本身是否应该以Mash-up方式建立?

一个提供Mash-up Service的站点本身是否应该以Mash-up方式建立? 也就是说facebook站点里面的like button也是通过iframe或者xfbml包含进来的? 我看了一下facebook,它没这样搞; twitter呢,现在连不上,等下再研究 我们可以分析它的好处和坏处 1.好处:   a. HTML代码只写一套,相应的校验、展现逻辑,如果有的话,也只需写一套   b. 确保第三方站点嵌入的mash-up的页面风格和原站点(如facebook)一致 2.坏处:   a. 每mash一个页面,就是一个http request; 如果一个主页要mash 30个页面,性能可能会很糟糕   b. 页面设计将处处掣肘,要使它既符合本站,又符合mash站点,这比较难 有个折衷的办法是“服务端包含”。 mash站点通过html包含一个对mash-up的URL请求,而本站则的主页则包含mash-up的jsp。当然,这个也不能玩过火,如果一个button都包含,则灵活性就会差了。

Twitter 的 Mash-up Service的集成方式

Twitter 的 UI Mash-up Service可分为三大块:   1. Web Intents  — 一些链接,点了就能产生twitter的内容   2. Button       — 你的页面上将看到一些Button   3. Widget       — 你的页面上将看到一些widget,点其中的按钮或链接后将弹出新页面 下面逐个介绍一下这三类Service,重点将放在集成方式上(js or iframe, 页面大小等) 1. Web Intents Web Intents就是指向twitter网站一些特定内容的链接 <p><a href="http://twitter.com/intent/tweet?in_reply_to=51113028241989632">Reply</a></p> <p><a href="http://twitter.com/intent/retweet?tweet_id=51113028241989632">Retweet</a></p> <p><a href="http://twitter.com/intent/favorite?tweet_id=51113028241989632">Fav</a></p> 不过,twitter建议以pop-up的方式使用这些链接,并让弹出窗口的大小保持在550 * 420 你可以手动实现这种方式,也可以使用twitter提供的out-of-box支持:引入http://platform.twitter.com/widgets.js <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> <p><a href="http://twitter.com/intent/tweet?in_reply_to=51113028241989632">Reply</a></p> <p><a href="http://twitter.com/intent/retweet?tweet_id=51113028241989632">Retweet</a></p> <p><a href="http://twitter.com/intent/favorite?tweet_id=51113028241989632">Fav</a></p> 那用iframe行不行? <iframe src="http://twitter.com/intent/tweet?in_reply_to=51113028241989632"/> 我试了一下,第一个页面的展现没有问题,但如果在iframe里玩tweet时,很容易出现窗口大小问题和滚动条等问题。所以Twitter并不推荐这种做法:“While you can …

Twitter 的 Mash-up Service的集成方式 Read More »

Facebook的 Mash-up Service的集成方式

两种方式:   1. iframe   2. XFBML 1. iframe <iframe src="http://www.facebook.com/plugins/like.php?href=google.com" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe> 2. XFBML <script src="http://connect.facebook.net/en_US/all.js#appId=APP_ID&amp;xfbml=1"></script> <fb:comments href="example.com" num_posts="2" width="500"></fb:comments> 它实际上还是会生成一个iframe

Mash-up Service中一些常见的usability问题

我遇到的usability问题有这些:    1. iframe中的页面变大后,会出现滚动条    2. 被嵌入的按钮被点击,或者被嵌入的表单被提交后,在原位置应该显示什么东西?    3. 被嵌入页面代表一个web flow操作(wizard),web flow进行到一半时,用户刷新浏览器会导致web flow从头开始 1. iframe里的页面内容变多导致滚动条   这种情况一般出现在表单提交时。iframe的大小以表单页面的大小为准,而提交后的结果页面又比大表单页面大的多   解决办法有:     a. 提供一个宽高的参考值,建议用户采用     b. Mashup消费者不指定宽高,而让服务端根据结果页面的大小自动设定。这时候Mashup消费者一般不会直接写iframe,而是通过服务端现成的javascript来构建自己的widget. 2. 提交后该显示什么结果   提交后的结果页面应该与表单页面具备相当的信息量。如果结果页面只显示“提交成功”几个字,会让用户觉得很奇怪。   按照我对facebook和twitter的观察,大概有以下几种方式:      1. 表单页面即结果页面,结果页面即表单页面。比如facebook的 like button,既提供一个按钮让人点,同时按钮本身上的图案也表征当前的like状态。facebook的comments是另一个例子。这个widget的上方是一个评论输入框,而下方则是最近最新几条评论,所以它既适用于表单页面,又适于结果页面。     2. 提交后强行跳转到第三个页面,规避这种问题。facebook的register plugin就是这样,等你注册后,不允许再呆在原页面。     3. 只准嵌入按钮,不准嵌入页面,也可以规避这种问题。Twitter就是这样干的。用户点了按钮后,浏览器就会弹出一个窗口,然后在窗口里完成未竞的事业; 虽说twitter也可以嵌入比较大的widget,但点击widget中的每个按钮,都会弹出窗口。 3. 被嵌入页面中的web flow被用户的刷新动作中断   一个超过三个页面的web flow执行一半时,如果用户按了一下F5刷新浏览器,那被嵌入的iframe就会显示这个flow的第一个页面,用户辛辛苦苦填入的数据就会化为乌有。   目前我还没发现一种银弹式的解决方案。不过twitter的简单风格可以帮你化解这个问题。前面说了,twitter所有的表单、结果页面都不希望被嵌入,而是作为弹出窗口使用的。弹出窗是独立的,这样就不存在刷新主窗口导致子窗口从头开始的问题。

Google’s infrastructure

“a corporate infrastructure needed to maintain Google’s rapid growth as a company and on ensuring that quality remains high while product development cycle times are kept to a minimum.” “You have to have the culture (of innovation), and you have to get it right.”

SalesForce: 两种访问控制机制结合

一般的系统中,一个User有好几种Role,每种Role有好几种Permission SalesForce.com中,这种机制仍然存在,不过这里的Role被称作"Profile" 同时User还有一种头衔,如CEO, VP,Manager等等,这种头衔被统称为"Role" Profile用来定义User对Object及其Fields的权限,比如 Standard User可以看Account,但不能删Campaign 而Role则用来定义User对具体哪些记录有权限。比如CEO可以看所有人的 Lead,而Manager A 不能看 Manager B的Lead

SalesForce中的Workflow其实就是业务触发器

SalesForce命名法真够雷人! Workflow并不是让你定义什么工作流。它只是让你定义 “某种业务规则成立时可以触发什么事情”。 “业务规则”定义在Business Object上,比如 Account的姓名改成了"Obama" “触发事情”则不外乎改变一下某Business Object的值,分配一下Task,或者发封邮件而已。 所以说,它只是一个Trigger; 不过要注意, SalesForce中已经有Trigger 这个概念。这种Trigger是技术上而言的,它只在对象被持久化时触发;由于这种Trigger要用APEX来实现,因此又叫APEX  Trigger ================================================ SalesForce还是支持自定义WorkFlow的,这在SalesForce里叫做 "Approval Processes"