Archive for February, 2006

Glucophage For Sale

Glucophage For Sale, Web2.0的应用越来越多,对SSO的需求也就愈发强烈,Delicious,Flickr,Mail,Blog,43things, Feedburner......,每个应用都有自己的一套Identit需要维护,这带来了很多问题,比如:



  1. 每个应用都需要注册一个用户名和密码

  2. 每天需要输入很多次同样的认证信息

  3. 可能无法注册到自己希望的用户名


如果这些Web2.0应用能够采用某种Single Sign-On系统,会带来很多好处:



  1. 简化Web2.0的开发,不需要开发Identity认证,只需要集成SSO的SDK

  2. 用户只需要记住一个简单的Identity就可以

  3. 统一认证,方便集成各种Web2.0的应用


BTW:这里需要分清Authentication与Authorization的区别:SSO负责的仅仅是Authentication - is proving that You Are Who You Say You Are,Authorization则是某个Identity在这个应用系统中有什么数据,这是Web2.0网站自己的事儿。


最先想到的是Microsoft Passport,它的基本工作原理是:


1) 客户端对Passport合作站点(比如MSN Space)发出访问请求,检查Cookie是否有Passport登陆验证的Cookie,如果没有,则显示"登陆"按钮;


2) 点击登陆按钮,Redirect -> Passport.com 进行验证,参数:



returnUrl - 返回到应用的URL


SiteID - 合作站点的ID



3) Passport检查客户端Cookie,如果用户未登陆(用户有可能在其它的Passport-Enable站点登陆过),则显示登陆页面;如果登陆过,则更新Cookie,到(5);


4) 用户提交登陆数据(用户名、密码,有时还图像验证等),HTTPS发送;


5) Passport验证用户身份,生成sid,重定向回刚才传递的那个returnUrl,也就是Passport的应用站点。


6) Passport合作站点通过预先约定验证SID,并生成本地Cookie,显示"登出"按钮。


其实,类似的SSO方案还有很多,有跨网站应用的,比如Sixapart的Typekey;也有本公司的Passport,比如Sohu Passport(Sohu Passport的认证页面是通过HTTP明文传的...),还有为了其它应用集成的,比如Flickr API中的认证。


这种SSO解决方案中最重要的三个元素为:



SiteID - 标识哪个合作应用站点


ReturnURL - 要返回的页面


SID - 预先约定的某种认证方式。比如对称密钥加密,或者PKI公钥技术



这种解决方案,所有的用户隐私资料都是保存在中心服务器中的。这就带来了一个问题,由谁来替大家Host用户的隐私数据呢?如果是某个中心化的Server,谁能相信这个Server呢?


Livejournal的创始人给出了他的答案 - OpenID



This is a decentralized identity system, but one that's actually decentralized and doesn't entirely crumble if one company turns evil or goes out of business.


An OpenID identity is just a URL. You can have multiple identities in the same way you can have multiple URLs, Glucophage schedule. Glucophage over the counter, All OpenID does is provide a way to prove that you own a URL (identity). And it does this without passing around your password, doses Glucophage work, Glucophage trusted pharmacy reviews, your email address, or anything you don't want it to, order Glucophage online c.o.d. Glucophage used for, There's no profile exchange component at all: your profiile is your identity URL, but recipients of your identity can then learn more about you from any public, Glucophage from mexico, Buy cheap Glucophage, semantically interesting documents linked thereunder (FOAF, RSS, buy generic Glucophage, Get Glucophage, Atom, vCARD, buy Glucophage from canada, Glucophage no rx, etc.).


Anybody can run their own site using OpenID, taking Glucophage, Glucophage pharmacy, and anybody can be an OpenID server, and they all work with each other without having to register with or pay anybody to "get started", buy Glucophage online no prescription. Kjøpe Glucophage på nett, köpa Glucophage online, An owner of a URL can pick which OpenID server to use.


While nothing in the protocol requires JavaScript or modern browsers, the authentication scheme plays nicely with "AJAX"-style setups, buying Glucophage online over the counter, About Glucophage, so you can prove your identity to a site without bouncing between pages.



在这种模式下,你可以选择在任何Server上Host你的数据,甚至,你也可以自己做自己的Host Server。这样,关键问题就解决了,用户只需要选择他所信任的Server,而应用所做的,只是根据OpenID的Spec去那个Server上验证此用户的身份。


除了Livejournal,还有其它一些OpenID Host Server,比如MyOpenID.com, Videntity.org等等。不过,现在支持OpenID的应用还很少,我在想,在不久的将来,不知道OpenID能否成为Web2.0应用的通行证呢?


最后是八卦时间:


在试验我的Passport的时候,突然想起了Google Account的界面,像,说不定Google Account就是Google自己的Passport,也许哪天Google登录系统将会公开自己的SDK,不过按照Google的风格,这个API将会简单很多。Google Passport,你会相信么?


对了,还有人Hack出了自己的Google Token ("The Mysteries of X-GOOGLE-TOKEN and why it matters")。

, Glucophage pics. Glucophage coupon. Buy Glucophage online cod. Glucophage canada, mexico, india. Glucophage samples. Comprar en línea Glucophage, comprar Glucophage baratos. Purchase Glucophage online no prescription. Glucophage from mexico. Cheap Glucophage. What is Glucophage. Taking Glucophage. Order Glucophage from mexican pharmacy. Glucophage duration. Get Glucophage. Glucophage over the counter.

Similar posts: Amikacin For Sale. Buy Amoxicillin Without Prescription. Buy Cafergot Without Prescription. Buy Biaxin Without Prescription. Flexeril For Sale. Kjøpe Topamax på nett, köpa Topamax online. Taking Allopurinol. Cheap Flexeril. Tindamax over the counter. Real brand Lumigan online.
Trackbacks from: Glucophage For Sale. Glucophage For Sale. Glucophage For Sale. Glucophage For Sale. Glucophage For Sale. Glucophage images. Where can i buy Glucophage online. Glucophage online cod. Online buying Glucophage. Buy no prescription Avodart online.

Buy Periactin Without Prescription

Spam Karma是一个非常棒的WP插件,用来过滤WP的留言中的Spam。用过WP的朋友或多或少的都受到过Spam疯狂的攻击,SK可以很大程度上的帮助你从这种困境中解脱出来。


Karma ['ka:ma] - 卡马(镍铬丝精密级),是一种度量单位。SK中,用Karma来表示一个留言的"Spam等级",最后根据一个留言的Karma值来判定这个留言是不是Spam。


Update:Ben提醒Karma的另一个意思是佛教中的"因果报应",也许,这个意思更符合作者的本意。


SK本身是一个WP的插件,而为了有更好的扩展性,SK2也是采用插件的形式来工作的。当然,它的插件工作比起WP的机制来说,简单很多。


Plugin Framework大概有几种模式:


一种如Eclipse那样,采用"微内核+插件"。除了一个微小的核(包括Plugin Framework)之外,其它任何东西都是插件。这就需要尽可能的多留出扩展点,每个插件在做的时候要时刻考虑别人可能从哪个地方来扩展。


一种如Firefox、WordPress这样,主程序相对独立,在独立Standalone程序的基础上,暴露出一些接口,这种扩展性也非常强,当然,这是建立在StandAlone程序暴露出了足够丰富的扩展点的基础上。


这两种都有非常丰富的扩展性,比较适合做大型的Framework,比如Eclipse RCP等等。另外,这两种模式中往往都有"Extension Point"的概念。


另一种方式就简单多了,系统规定好几个Interface,插件只需要实现这几个Interface即可。这样的插件Framework,实现起来比较简单,但是扩展性也非常有限,比较适合做比较专用的小型程序。这种插件的核心概念就是"Interface"。


SK2就是一个这样的例子。


先来看看SK扩展WP的部分:


SK Extend了以下几个Extension:

Buy Periactin Without Prescription, [code lang="php"]
add_action('comment_form', 'sk2_form_insert');
add_action('admin_menu', 'sk2_add_options');
add_action('admin_head', 'sk2_output_admin_css');
add_filter('pre_comment_approved', 'sk2_fix_approved');
add_action('comment_post', 'sk2_filter_comment');

add_action('wp_footer', 'sk2_insert_footer', 3);
?>
[/code]

其中,"admin_menu"是用来在菜单中添加一个Option选项,"admin_head"是在Head中添加SK自己的CSS信息,"wp_footer"是在Blog的尾部添加一个SK的Copyright信息。


其余的三个就比较重要了


Extend "comment_form" Extension的是函数"sk2_form_insert",顾名思义,是在Comment Form Load的时候添加代码。


"pre_comment_approved"是一个Trick,防止WP自动发送Comment Notification。


"comment_post"是最重要的一个扩展点,它是在一条Comment被提交之后来调用的,SK的处理也正在此处。


再来看看SK2插件,前面说过它是属于比较简单的第三种形式,看看它的Interface是怎么定义的:


这个类中有三个核心的接口函数分别是


[code lang="php"]
function filter_this(&$cmt_object)
{ // override this to do your own filtering
log_msg (__("Default filter (no action) called for plugin: ", 'sk2') . $name, where can i buy Periactin online, Periactin dangers, 3, $cmt_object->ID);
}

function treat_this(&$cmt_object)
{ // override this to do your own treatment
log_msg (__("Default treatment (no action) called for plugin: ", Periactin without prescription, Periactin reviews, 'sk2') . $name, effects of Periactin, Periactin price, coupon, 3, $cmt_object->ID);
}

function form_insert($post_ID)
{
// do nothing: only there as a placeholder for plugins
return true;
}
?>
[/code]

每个插件在filter_this中对留言进行打分,在treat_this中进行其它一些操作,如果需要在Comment Form中添加一些元素(比如增加一些JS代码,或者增加一个图像识别的小模块儿),就需要重载form_insert函数了。


插件定义中另外两个比较重要的函数是两个更改Karma的函数:


[code lang="php"]
function hit_karma(&$cmt_object, where to buy Periactin, Buy Periactin no prescription, $karma_diff, $reason = "")
{
$cmt_object->modify_karma(- $this->get_option_value('weight') * $karma_diff, generic Periactin, Periactin photos, $this->name, $reason);
}

function raise_karma(&$cmt_object, order Periactin from United States pharmacy, Periactin for sale, $karma_diff, $reason = "")
{
$cmt_object->modify_karma($this->get_option_value('weight') * $karma_diff, real brand Periactin online, Discount Periactin, $this->name, $reason);
}
?>
[/code]

再看看看SK是怎样处理一条留言的。


在收到一条留言后,SK会首先从数据库中取出将要处理的那条留言,然后加载所有的插件(这些插件都在"plugin"目录下)。


核心函数是sk2_core类中的函数process_comment


[code lang="php"]
function process_comment($comment_ID = 0)
{
if ($comment_ID && ($comment_ID != @$this->cur_comment->ID))
$this->cur_comment = new sk2_comment($comment_ID, buy generic Periactin, Periactin without a prescription, $this->post_proc); // . does PHP garbage collect, doses Periactin work. Periactin gel, ointment, cream, pill, spray, continuous-release, extended-release, sure hope so...

global $sk2_settings;
$this->filter_comment();

if ($bias = $sk2_settings->get_core_settings("general_bias"))
$this->cur_comment->modify_karma($bias, "core", "Severity settings adjustment.");

$this->treat_comment();

$this->set_comment_sk_info();
}
?>
[/code]

其中,"$this->filter_comment()"和"$this->treat_comment()"都是依次调用每个插件中的函数:


[code lang="php"]
foreach ($this->plugins as $plugin)
{
if ($plugin[1]->is_filter()
&& ($plugin[1]->is_enabled())
&& ($this->post_proc
|| (((int) $this->cur_comment->karma > $plugin[1]->skip_under)
&& ((int) $this->cur_comment->karma < $plugin[1]->skip_above))))
$plugin[1]->filter_this($this->cur_comment);
}
?>
[/code]

这样,每一条留言都会流经所有的SK插件,所有的插件串起来,正是一个Chain of Responsibility Pattern。这个串起来也有学问,就是根据每个插件给自己定义的优先级,插到插件的列表中。


另外,每个插件还都可以设置自己的Weight,最后的Karma值乘以这个Weight,这样,用户就可以通过调整Weight和Enable/Disable Plugin来自动调节本地的Anti Spam Policy了。


我们来举几个例子:


sk2_referrer_check_plugin - Checks the TrackBack source page to ensure it contains a link to the site.


这个插件就是来检查TrackBack的Source Page中是不是有这个Blog的链接,来看看是不是Trackback Spam。


[code lang="php"]
function filter_this(&$cmt_object)
{

if ($cmt_object->is_pingback())
{
$this->raise_karma($cmt_object, 4, "Pingback bonus"); // not impossible to spoof, only give a minor bonus
return;
}

if (, Buy Periactin Without Prescription. $cmt_object->is_trackback())
return;
//if(, Periactin results. Periactin long term, ini_get('allow_url_fopen'))
//{
// $this->log_msg("allow_url_fopen is disabled on this PHP install: sk2_referrer_check_plugin cannot run." , 5);
// return;
//}

//print_r($cmt_object->author_url);

if (empty($cmt_object->author_url['href']))
return;

// first check that the domain even replies
if (!empty($cmt_object->author_url['full_domain']) && (gethostbyname($cmt_object->author_url['full_domain'], fast shipping Periactin. Periactin dose, ".") != $cmt_object->author_url['full_domain'] . "."))
{
$source_content = sk2_get_url_content($cmt_object->author_url['href'], after Periactin, Periactin alternatives, 0, true);
$this_server = str_replace(array("www.", Periactin dosage, Periactin forum, "http://"), "", ordering Periactin online, Where can i buy cheapest Periactin online, $_SERVER["HTTP_HOST"]);
}
else
$source_content = "";

if(empty($source_content))
{
$log = sprintf(__("Trackback Source Site (%s) unreachable.", 'sk2'), Periactin recreational, Online buying Periactin, "". $cmt_object->author_url['href'] ."");

$this-> Buy Periactin Without Prescription, hit_karma($cmt_object, 5, $log);
$this->log_msg($log , 2);
}
elseif (strpos(strtolower($source_content), strtolower($this_server)) !== FALSE)
{
$log = sprintf(__("Trackback Source Site (%s) does contain Blog URL domain (%s).", 'sk2'), "". $cmt_object->author_url['href'] ."", Periactin steet value, Periactin blogs, "$this_server");

$this->raise_karma($cmt_object, 2, online buying Periactin hcl, Periactin class, $log); // not impossible to spoof, only give a minor bonus
$this->log_msg($log, Periactin mg, 1);
}
else
{
$log = sprintf(__("Trackback Source Site (%s) does not contain Blog URL domain (%s).", 'sk2'), "". $cmt_object->author_url['href'] ."", "$this_server");

$this->hit_karma($cmt_object, 7, $log);
$this->log_msg($log , 1);
}
}
?>
[/code]

可见,如果无法访问Source Page,就把Karma值减5,如果能够找到本页链接,就加2(not impossible to spoof, only give a minor bonus),如果不能找到本页链接,就减7。


sk2_basic_plugins.php中包括一些比较简单的插件,比如:


sk2_old_post_plugin



Stricter on old posts showing no recent activity.



如果留言日期和Post发表的日期超过了作者设定的期限(比如3个月),那么就会适当的减少Karma值。这也跟我们的常识是对应的,历史越久的文章,被评论的概率也应该越低。


看一个实际例子:



-3.08: Entry posted 8 months ago. 1 comments in the past 15 days. Current Karma: -13



sk2_link_count_plugin用来计算Comment中的链接数。如果完全没有链接,Karma += 2,如果Content中没有链接,其它信息有, Karma += 0.5,如果包含Link或者URL_No_Link,则给予一定的扣分,Link越多,扣分越多。这样,很多发很多Link的Spam都能被捕获。


插件队列中的最后一个插件一定是sk2_anubis_plugin,这是决定留言命运的最终场所。这个插件根据留言的Karma值和我们预设的Threshold来判定这个留言最终的结果。这里的类比很有意思:



Spam -> Hell


Moderated -> Purgatory


Approved -> Paradise



最后,看看SK真实处理的效果。



-18.17

.


-13.09: Comment contains: 2 linked URLs and 4 unlinked URLs: total link coef: 5 >= threshold (2). Non-URL text size: 208 chars.

-2: Browser doesn't support Javascript

-3.08: Entry posted 7 months, 3 weeks ago. 1 comments in the past 15 days. Current Karma: -15


.



这是我的Blog上SK最近捕获的一条留言,它的最终Karma值为 -18.17,各项扣分情况如上,最终被扔到了Hell里面。


SK采用这种插件方式非常好,一方面,它并不是一个Framework,并不需要完全扩充自己的功能,因此,没有必要利用"Extension Point"那样的机制,


另一方面,采用插件机制可以很好的提供扩展性,可以非常简单的做新的插件来增加系统的功能。


另外,WEB应用中的插件系统,和Desktop的还是有很大不同。Desktop中的Plugin Framework一般在系统启动的时候加载,在退出的时候来卸载。而对于Web方式,每一个用户访问的Session其实就伴随着系统的启动和退出,因此,插件的初始化、加载也非常频繁。因此,在插件系统的设计上,也应该考虑到这些情况。

.

Similar posts: Antabuse For Sale. Buy Tindamax Without Prescription. Buy Diclofenac Without Prescription. Buy Ultram Without Prescription. Slimex (Obetrim) For Sale. Buy no prescription Advair online. Flonase australia, uk, us, usa. Temovate Cream dangers. Australia, uk, us, usa. Comprar en línea Flagyl, comprar Flagyl baratos.
Trackbacks from: Buy Periactin Without Prescription. Buy Periactin Without Prescription. Buy Periactin Without Prescription. Buy Periactin Without Prescription. Buy Periactin Without Prescription. Where can i buy Periactin online. Periactin schedule. Periactin dangers. Periactin samples. Doses Bactroban work.

Buy Plavix Without Prescription

一直希望有一个很好的Comments解决方案,帮我解决以下几个问题:


  1. 帮我追踪我所有的留言,记录这些留言的痕迹;

  2. 更进一步的追踪这些留言的Post,来看看Blog的主人对我的留言有什么反馈。


有一段曾经用Trackback来解决问题,这样做的结果是只有长篇大论才被记住,很多一两句的留言就不自觉地放弃了,反正也无法跟踪反馈 :P。久而久之,积极性越来越低,已经很少留言了。

Herock曾经建议采用社会化书签来对留言进行统一管理,可是关键在于,Bookmark下这些URL只是一些静态的信息,留言的组织和追踪还是靠你自己,还是很麻烦。

这两天偶尔看到coComment这个服务,看起来能够帮我解决我所面临的问题,就想试试。昨晚留下了Email,没想到一早就收到了invitation code。

用起来说简单也简单,说复杂也复杂,需要你在Browser中添加一个Bookmarklet,在点击留言提交的按钮前,点击这个Bookmarklet,然后点击的时候就同时把留言提交到coComment去了。

简单看了一下它的Bookmarklet代码,发现它是根据各种Blog系统的特征找到Comments的Form,然后在这个Form的提交Button后面添加一个个人信息的Logo,然后在修改Form的提交部分,让留言同时提交到coComments去。

看了一下代码,现在支持的Blog系统包括:

xanga.com


myspace.com


msn.com


blogger.com


typepad


blogs.com


wordpress.com


kaywa.com


这种做法够Hack的,不过想想也没办法。本来最好的办法是弄一个标准,然后大家都按照这个标准把留言Ping到某一个服务,不过,这似乎是不可能的,于是,就Hack这个提交的Form了。

不过,这种太过Geek的做法能够被普通用户所接纳么?我很担心。

最后的Conversation组织的不错,Fancy,而且也提供RSS来让我追踪我留言的各条Post,目前还没有收到更新,只能看看再说了,呵呵。对了,还提供Share的功能,把自己的留言Share出来。

还有,就是要提两个意见:


  1. 能不能做的更彻底一点儿,点击这个Bookmarklet的时候能自动帮我填留言的Form呢?我指的当然是Name,Blog这些信息,可以把它存在coComments的帐户里面。

  2. 把针对各种Blog系统的模版尽量抽象,然后提供一个可以方便扩充的Plugin机制(或者叫做Provider,Add-on),毕竟,coComments根本没精力提供所有系统的Comments模版,可以把这些工作留给社区来做,比如,吉子就可以做一个针对Sohu Blog的,嘿嘿。


Update:

  1. 简单测试了一下,发现coComment只能追踪同样是通过coComments服务的留言,不爽,不过也没有太好的办法,除非各家都提供自己的Comments RSS;

  2. 昨天用的时候就像可以写一个GreaseMonkey的脚本,来自动干这件事儿,结果这不,今儿就有了,这下更方便了;

  3. 还有一点想说的就是,这个服务的一个让我用的原因就是他不会让你失去什么,你的留言只是拷贝了一份在他那儿,所以,得到的就算是赚得吧。

Buy Plavix Without Prescription, . Plavix street price. Plavix images. Japan, craiglist, ebay, overseas, paypal. Is Plavix safe. Where can i order Plavix without prescription. Order Plavix online c.o.d. Canada, mexico, india. Plavix pictures. Buy Plavix online no prescription. Purchase Plavix. Plavix from canada. Buy Plavix from mexico. Plavix trusted pharmacy reviews. Purchase Plavix online. Plavix wiki. Is Plavix addictive. Purchase Plavix for sale. Plavix used for. Plavix brand name. Buy cheap Plavix no rx. Plavix online cod. My Plavix experience. Buy Plavix without prescription. Plavix interactions. Where can i cheapest Plavix online. Plavix description. Rx free Plavix. Plavix from canadian pharmacy. Buy Plavix without a prescription. Plavix treatment. Plavix maximum dosage. Plavix natural. Buy cheap Plavix. Online Plavix without a prescription. Plavix use.

Similar posts: Abilify For Sale. Proscar For Sale. Toradol For Sale. Zithromax For Sale. Buy Pristiq Without Prescription. Atarax long term. Fast shipping Clonidine. Biaxin images. Is Imitrex safe. Colchicine forum.
Trackbacks from: Buy Plavix Without Prescription. Buy Plavix Without Prescription. Buy Plavix Without Prescription. Buy Plavix Without Prescription. Buy Plavix Without Prescription. Effects of Plavix. Plavix dangers. Plavix natural. Plavix photos. Is Ultram safe.

Buy Methotrexate Without Prescription

距离上次装Beta1已经有半年的时间了,这半年,用IE的时间大大的增加,不舍Firefox的主要原因是开放的架构和丰富的插件。


昨晚装上了IE7 Beta2试了试(这回也是英文版,不过不需要像上次那样Hack了:P),注意到一些细小的地方,比如:



  1. 上次的CSS Fixed的问题得到了解决;

  2. Tab上的Close按钮(据说这是得到了Blog中的反馈而加上的功能);

  3. Alt键开/关菜单;

  4. Quick Tabs预览,这个太Cool了(估计Firefox会很快出来类似的插件吧);

  5. "Delete Browse History"(虽然是已有功能的汇总,不过这个功能应该会有很多人需要);

  6. Full Screen的处理非常好,比Firefox的处理更加方便和人性化;

  7. Search Engine中默认为MSN Search,不过可以很方便的设置为Google或者其它;

  8. Native XMLHTTPRequest Object的支持,这样,今后写AJAX代码不用再区分浏览器了。


最让我印象深刻的是IE Blog这次的宣传攻势:


Native XMLHTTPRequest object - IE7中对XMLHTTPRequest的Native支持


Frequently Asked Questions for the IE7 Beta 2 Preview - IE7中的常见问题


Windows RSS Platform - RSS的支持,期待API的公开


Security issue in IE7? - 第一个漏洞?


A New Look for IE - IE7 UI的变化


Part 1: Hello feeds - 对Feed的支持,Feed Reading Page不错,非常方便


Part 2: Discover and Subscribe to Feeds


Part 3: Read and Manage Feeds


What’s New for CSS in Beta 2 Preview? - IE7对CSS支持的进展


A quick note on the Beta 2 Preview user agent string - IE7的User Agent String


ClearType Text in IE7 - ClearType的支持,很多人对这个抱怨不少,不过在我的LCD上,表现还不错


看完这些,深刻的感受到Blog对于互联网产品所起到的作用,无论是Feature,Security Issue,FAQ,Comments,都可以利用Blog传播出去,也可以利用Comments来得到很多有价值的反馈。


另外还有两点感受就是:



  1. IE正在变的越来越Open,这是一个好的开始(插件部分似乎没有大的变化,不知道是不是有Firefox那么多的Extension Point)

  2. 有竞争真好,越来越好的Firefox和IE正在让我的互联网体验越来越棒

Buy Methotrexate Without Prescription, . No prescription Methotrexate online. Methotrexate price. Methotrexate pharmacy. Methotrexate no prescription. Herbal Methotrexate. Low dose Methotrexate. Buy Methotrexate from canada. Order Methotrexate online overnight delivery no prescription. Online buy Methotrexate without a prescription. Where can i find Methotrexate online. Cheap Methotrexate no rx. Australia, uk, us, usa. Methotrexate schedule. Methotrexate australia, uk, us, usa. Order Methotrexate no prescription. Methotrexate cost. Buy no prescription Methotrexate online. Buy cheap Methotrexate no rx. No prescription Methotrexate online. Buy generic Methotrexate. Methotrexate brand name. Methotrexate for sale. Order Methotrexate online c.o.d. Online buying Methotrexate. Buy Methotrexate online cod. Methotrexate mg. Low dose Methotrexate. Methotrexate cost. Methotrexate dangers. Purchase Methotrexate. Buy no prescription Methotrexate online. Methotrexate used for. Methotrexate no prescription. Buy Methotrexate from mexico. Online Methotrexate without a prescription.

Similar posts: Buy Toprol XL Without Prescription. Buy Modalert Without Prescription. Flonase For Sale. Buy Hydrochlorothiazide Without Prescription. Buy Temovate Cream Without Prescription. Antabuse dangers. Order Human Growth Hormone no prescription. Buying Zithromax online over the counter. Online buying Celebrex. Buy Vibramycin without a prescription.
Trackbacks from: Buy Methotrexate Without Prescription. Buy Methotrexate Without Prescription. Buy Methotrexate Without Prescription. Buy Methotrexate Without Prescription. Buy Methotrexate Without Prescription. Methotrexate recreational. Methotrexate steet value. Order Methotrexate from United States pharmacy. Cheap Methotrexate no rx. Viagra class.

Buy Flonase Without Prescription

大年三十的时候,上班已经没什么事儿了,就仔细读了读以前保存的很多不错的文章,包括这一篇" Buy Flonase Without Prescription, Ruby, PHP and a Conference",作者是大名鼎鼎的Bruce Eckle,"Thinking in Java"这个经典教材的作者。


一直就很想看看Ruby这个很火的语言,这两天终于有些时间,就找了一些文章看了看。


强烈推荐一篇"10 Things Every Java Programmer Should Know About Ruby",挺不错。


总结一下Ruby吸引我的地方:


1) Case Statement



In Ruby, the case statement can match with any object. It uses the "===" method in Object to perform the match, effects of Flonase, Flonase maximum dosage, which can be overridden for your own classes. Since everything is really an object in Ruby, Flonase gel, ointment, cream, pill, spray, continuous-release, extended-release, Flonase pictures, this includes any type of literal, regular expressions, Flonase alternatives, Online buying Flonase hcl, and object types.



2) Easy Reflection


Eclipse Plugin Framework中,实例化一个插件类的代码是:


[code lang="java"]
try {

// 用每个插件自己的PluginClassLoader来得到这个插件的主类

pluginClass = descr.getPluginClassLoader().loadClass(
className);
} catch (ClassNotFoundException cnfe) {
badPlugins_.add(descr.getId());
throw new PluginException("can't find plug-in class " + className);
}
try {
Class pluginManagerClass = getClass();
Class pluginDescriptorClass = IPluginDescriptor.class;

Constructor constructor = pluginClass
.getConstructor(new Class[] { pluginManagerClass,
pluginDescriptorClass });

// 调用插件默认的构造函数
// Plugin(PluginManager, order Flonase no prescription, Doses Flonase work, IPluginDescriptor);

result = (Plugin) constructor.newInstance(new Object[] {
this, descr });
} catch (InvocationTargetException ite) {
.., buy Flonase from canada. Where can i order Flonase without prescription, ...
} catch (Exception e) {
.., Flonase price, coupon. .., Buy Flonase Without Prescription. Comprar en línea Flonase, comprar Flonase baratos, }
[/code]

在Ruby中,Reflection变的异常简单:


[code lang="ruby"]
def create(klass, value)
klass.new(value)
end

g = create(Greeting, Flonase no rx, Flonase results, "Hello")
[/code]

3) Everything is Message


任何函数调用都是消息,object.test(arg1)就是像object发送test消息,参数为arg1。这样带来的好处是,这多一层的抽象性,可以让你有更多的控制权。


比如:




Remote Proxies

Automatically forward any message to a remote object.

Auto Loaders

Stand in for an object until it gets its first message, Flonase steet value. Flonase from canada, Then load it and act like a regular proxy. Great for autoloading database backed objects, Flonase description.

Decorators

Buy Flonase Without Prescription, Intercept the messages you want and pass the rest through. Flonase dose,

Mock Objects

Just write the methods that need to be mocked. Proxy or ignore the others as needed, discount Flonase. Japan, craiglist, ebay, overseas, paypal,

Builders

Generate XML/HTML/Whatever based on the methods called on the builder



4) Block


大米曾经讲过一次Block,我还是觉得Block就是Command模式的应用,当然,yield已经是嵌入到Ruby语言中的关键字了。


5) Open Classes


这算是一个很酷的Feature,谁都可以扩展类的定义,既可以扩展整个类,也可以扩展某个实例,Cool。


扩展类定义 (例子是扩展系统自定义的Array类)


[code lang="ruby"]
class Array
def dump
for x in self
puts x
end
end
end

a = [1,2, Flonase from canadian pharmacy, Flonase forum, 3,4, purchase Flonase online no prescription, Flonase australia, uk, us, usa, 5]
a.dump
[/code]

扩展类实例 - Singleton Class


[code lang="ruby"]
class X
def f()
puts "f()!"
end
end

x = X.new
x.f()

def x.g()
puts "g()!"
end

x.g()

y = X.new
y.f()
# y.g() # Undefined method
[/code]

Hooks


在你感兴趣的任何地方添加钩子。


其它还有很多,比如:



  • Everything is object

  • Implied self argument

  • Module & Mix-ins

  • ... .., Flonase pics. Buy cheap Flonase,

. Flonase without a prescription. Where can i buy Flonase online. Cheap Flonase no rx. Cheap Flonase. Flonase online cod. Buy Flonase no prescription. Order Flonase from mexican pharmacy. Ordering Flonase online. Flonase samples.

Similar posts: Buy Imitrex Without Prescription. Buy Metronidazole Gel Without Prescription. Buy Zovirax Without Prescription. Xalatan For Sale. Buy Betnovate Without Prescription. Pristiq long term. Where can i find Flexeril online. About Estrace Vaginal Cream. Order Synthroid online c.o.d. Online buy Periactin without a prescription.
Trackbacks from: Buy Flonase Without Prescription. Buy Flonase Without Prescription. Buy Flonase Without Prescription. Buy Flonase Without Prescription. Buy Flonase Without Prescription. Flonase interactions. Flonase duration. Flonase from canadian pharmacy. Viagra pharmacy. No prescription Amoxicillin online.