标签/Tag为[多说]的文章

再见了,多说 ,

网上闲逛,点开了好久不去的多说,结果居然发现了一个令人惋惜的消息:重要通知: 多说即将关闭

因公司业务调整,非常遗憾的向大家宣布多说项目即将关闭。 我们将于2017年6月1日正式关停服务,在此之前您可以通过后台的数据导出功能导出自己站点的评论数据。 对此给您造成的不便,我们深表歉意,感谢您的一路相伴。

也就是说多说**了。。。。

一声叹息,好的互联网产品又死了一个。

好的产品,不能变现,脱离了早期的创业激情外,我们还剩下什么? 不说什么了。

多说,一路走好,感谢这么多年你曾经为广大网友提供的交流平台和服务。

--EOF--

[杂记]临时下线多说评论系统和 MovableType 6.2 发布 ,

时间总是飞速。 转眼国庆长假已经过去一周?

博客也好久没有更新了。 随便写点记录。

  1. 临时下线多说评论系统,原因嘛。最近的的多说越来越不正常了。。。评论显示不全,阵发性评论框不显示等等。。。。
    既然本博的每条多说评论都实现了实时写回本地数据库,不存在丢失评论问题,那么暂时下架吧。。
    下线的办法也很简单。 仅仅在我自己写的 js 中 设置easunConfig.load_duoshuo = false; 就万事大吉。

  2. MovableType 6.2 发布了。
    其实貌似发布在 10月8日。只是一直没有去看而已。
    仔细看了一下说明,主要更新为:

New and enhanced asset management features:

Upload multiple files asynchronously

You can upload multiple files by drag-and-drop from the posting screen and also from the "Upload Asset" menu. When upload is finished, you can edit the name, description and tags on the fly. Edit images easily

This new feature provide image editing function. You can scale images, rotate images and cropping images before to inserting the entries and web pages. Also, you can remove the GPS metadata and EXIF metadata. Default upload settings

Website administrator (and Blog administrator) can configure default settings for upload that including default upload destination and more.

Data API v3

Changed the authentication password

In the Data API v3, authentication password for "/authentication" endpoint was changed from user's password to user's web services password. The reason is security improvement. v1 and v2 are not changed. Possible to filter by date range.

The endpoints that list the objects such as listEntries, can now do filtering by date range.

主要热点为 多附件拖动上传。 因为打算停留在 5.x ,也就了解一下,跟新的朋友可以升级。

--EOF--

[JS随笔]网站评论、显示界面细微调整和杂谈 ,,

随笔写下一些东西,作为 SiteLog 和备忘。

都是一些评论、显示界面的调整,一个意图:用户体验。 说的不好听的就是"路杨的强迫症又犯了",反正是折腾无极限。。

这两个月, 整个 Blog 的 js 估计被我修改过不下10次,有些是纯粹为了闭包,有些是为了美观和清晰流程。。。

简单记下曾经的修改吧。

先说前端:

  1. ajax提交优化。 所有流程彻底闭包为一个函数,和 json 显示本地评论互动,增加了提交成功后如果通过审查的话,动态加载新评论及动画,并同时重置评论提交表单。
  2. 多说评论界面优化。 绑定了原来系统的显示/隐藏评论、 显示/隐藏评论框的函数,让原来界面的操作同时操作两个系统的界面。 在 SOTHINK提示下,虽然依然设置多说评论框为默认,但是登录本地系统(包括QQ等本地系统支持的社交帐号)的朋友则显示"本地评论系统评论框"。 代码片段为:

    codevar check_mt_user = function(u) {
    if(typeof duoshuoQuery.is_ds_hide =='undefined') {
    if (!u) u = w.mtGetUser();
    if (u && u.is_authenticated) { duoshuoQuery.is_ds_hide=true;}
    else duoshuoQuery.is_ds_hide=false;
    }
    };
    
  3. 本地json评论界面优化。 彻底完成本地评论js的闭包。进一步和多说评论界面糅合, 增加了刷新重载 两个操作界面,前者从本地文本静态json cache中重新获取本地评论,后者读取 MySQL 库实时获取本地评论。

  4. 延迟加载图片重写。 也完成了一次JS闭包。 美化了延迟加载图片时候占位的动画,因为目前本站仅在评论者头像上使用延迟加载图片技术,也许大家并不能彻底体验到界面的加载过程(因为加载的太快了)。。。

上面的所有修改,均可以查看本站现有 JS 来获得代码。 本站的 JS 并无加密 :P

再说后台:

  1. 彻底解决了QQ头像、Gravatar 头像显示问题。 并缓存Gravatar 头像到本地。 不同原来的做法。这次写 插件,直接 hook 了 MT::Author::userpic_url 。 比较极端的做法。 代码如下:

    codeour($old);
    {
    no warnings 'redefine';
    no strict 'refs';
    require MT::Author;
    If ($old = MT::Author->can('userpic_url')) {
    *MT::Author::userpic_url = sub{
    my ($author) = @_;
    if ( ($author->auth_type =~ m/^QQ/ ) && $author->hint && ($author->hint=~ m!^https?://!) ) { return $author->hint. '#QQ' ;}
    my ($oldurl) = $old->(@_);
    return $oldurl if ($oldurl);
    my $email = $author->email;
    return &_hdlr_gravatar_url_mail($email);
    };
    }
    }
    
  2. 更换了后台插入图片后的显示,适应 HTML5。 这个没有写插件,直接Hacklib/MT/Asset/Image.pm 中的 can_html 。 更加的简单粗暴。 代码片段如下:

    code$text = sprintf(
    '<figure class="post-image"><img title="%s" src="%s" %s %s /></figure>',
    MT::Util::encode_html( $asset->label ),
    MT::Util::encode_html( $asset->url ),
    undef,undef,
    );
    

要查看详细的修改文件,可以移步到我的 GitHub

其他:

话说,多说 服务器维护了。 貌似以为会好一点,结果似乎结果一样? 另外,多说评论加载不出来时候,下面的加载动画一直显示的时候, 这个时候刷新就OK了,觉很奇怪, 查看了一下 log。 结果,100% 的在出现这个状态的时候,浏览器报错:

17:24:55.691 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://easun.duoshuo.com/api/threads/listPosts.json?thread_key=301&author_key=1&url=http%3A%2F%2Feasun.org%2Fblog%2Farchives%2Fgodaddy_cpanel_perl_dbdmysql.html&title=Godaddy%20cPanel%20%E4%B8%BB%E6%9C%BA%E5%92%8C%20Perl%E6%A8%A1%E5%9D%97%20DBD%3Amysql&require=site%2Cvisitor%2Cnonce%2Clang%2Cunread%2Clog%2CextraCss&site_ims=1442293934&lang_ims=1442293934&referer=http%3A%2F%2Feasun.org%2Fblog%2F&v=15.4.27. (Reason: CORS header 'Access-Control-Allow-Origin' missing).1

干啥子嘛~~
明显的服务器响应问题。。。
判断跨域的服务端脚本的得到没有执行。。
其实listPosts.json 返回数据了,可惜被浏览器拒绝了。 难怪不显示。。。。。。
话说,抛开 服务器 判断跨域的服务端脚本的问题。 listPosts.json 难道一定要用 JSON 模式? 又不是 POST, GET 而已,换成 JSONP 模式不就万事大吉了,而且也能节省服务器的判断跨域,输出 Access-Control-Allow-Origin header。。。。。。

另外,服务器维护了, 貌似脚本的版本还是 2015-04-27 。。。。

--EOF--

[SiteLog]近日网站折腾小记 ,

8月快过去了。时间真的是。。。。
顺便记下这几天对网站的一些小小的折腾吧。

1. 多说评论显示逻辑调整:

还是要从多说说起: 路杨已经基本上实现了把所有的多说评论同步到了本地。 默认同步到多说评论处于未发布状态,防止和多说JS载入的评论形成重复评论。 定时把本地数据库的多说评论转成发布状态,以防止多说服务器抽风导致评论不显示。

但是问题来了: 怎么让同步并本地发布的同一条评论只显示一次呢? 原来的实现办法是在 多说JS 中识别这条评论是否已经本地发布,如果发布则 hook 多说JStemplates.post 函数,让它不生成这条评论
核心代码如下:

codevar DSinMTids = [];
function check_ds_in_mts() {
DSinMTids = [];
$("#comments-content div.ds-post-self").each(function()
{
if ( ( $(this).attr("data-source") == 'duoshuo' ))
{
DSinMTids.push($(this).attr("data-post-id"));
}
});
}
check_ds_in_mts();
var _D_post=DUOSHUO.templates.post;
DUOSHUO.templates.post=function (e,t){
var rs=_D_post(e,t);
if ( $.inArray(e.post.post_id, DSinMTids) != -1 return '';
/* sth others*/
return rs;
}

[随笔]Movable Type 的数据库瓶颈与多说评论反向同步 ,

随笔 而已,能力所限,只是个人看法。

就向大家看见的这样,由于多说服务器的原因,路杨正在逐步把 多说的评论写回本地 Movable Type 的数据库。

过程不算难。通过 API 获得 JSON 数据,分析后写入MT评论数据库罢了。 为了区分和拓展,给 MT 数据库的评论表增加了3行,分别记录 远程服务器名(remote_service),远程服务器ID (remote_id) 和 UA ( agent)。

mt_db_table_comment.png

开始直接 Perl 脚本。核心代码为

[随笔]多说的几项不足 ,

ds.png

昨天晚上,又经历了一次多说服务器的当机。SQLSTATE[08004] [1040] Too many connections 。显然是数据库连接数超过资源限制。
于是乎,多说的稳定性又得到了挑战。

看看长草的官方 和久久不更新的Blog。。不由叹息: 这本来是多好的互联网产品啊。。。

不说这些了。这几天抽空在研究 多说的API,为把多说的评论同步回本地而做准备。 研究过程中谈谈多说的一些不足吧。

  1. API文档严重不足: 这倒是像搞技术的通病。茶壶里的饺子的事情,不说也罢。 不单是多说的API这样,腾讯的API文档也是。
  2. 数据库储存逻辑很奇怪。 从反向同步API返回的数据来看。 多说对于用户评论并没有真正的删除说法,而是永久存储? 所谓的删除仅仅是新加上一条记录。 设置 metadelete 或者 delete-forever。 开始没有搞明白这个逻辑,将 http://api.duoshuo.com/log/list.json?short_name=short_name&secret=secret_key&limit=200 拉下来的数据直接写入数据库,发现了很多已经删除的评论。。。
    多说的数据库真的富裕成这个样子了吗?
  3. 用户。 在多说管理界面添加或者同步的本地用户http://short_name.duoshuo.com/admin/users/)无法删除。。 这个是什么逻辑?
  4. 删除评论: API文档中没有告诉你怎么*删除评论*。 只有怎么发表评论。 其实这个删除功能还是很必要的,我的想法,同步到本地后随即删除已经同步的的远程服务器评论,是一个多么合适的选择。可惜,官方并没有提供。
  5. 对于 ssl(https) 的漠视: 其实多说自身的代码已经很好的支持https ,但是在 https 下会汇报风险的原因,只是因为头像和表情的地址不支持 https 罢了。 但是官方客服在讨论区中明确回复: 头像和表情不需要HTTPS.。 虽然,第3方修改JS可以完全实现全站https, 但是第3方的修改总是第3方的。

嗯,随便写点流水帐。 附上自写的部分处理逻辑

code return if ( @{$action->{'delete-forever'}} ~~ /$ds->{'post_id'}/ );
return if ( @{$action->{'delete'}} ~~ /$ds->{'post_id'}/);
return if ( @{$action->{'spam'}} ~~ /$ds->{'post_id'}/);

--EOF--

网站启用ajax无刷新技术(pjax)和多说的一些小技巧 ,

先说ajax无刷新技术吧
因为 Godaddy 空间中资源和国内访问速度的原因,能节省一点资源就节省一点资源吧。虽然对于传统的 ajax 来说,更新版的 pjax 可以同时写入浏览器历史( pushState )和动态更换 url 显示,但是对于我来说,貌似还有一下不足:

  1. 浏览器缓存(内存)不会释放,会让老爷机的朋友感觉到机器卡。
  2. 不利于SEO(当然比 ajax 已经很好了)。 pjax 再先进也只更新某个容器,对于 head 内的一些 meta 是不会处理的,强迫症的伤不起啊。
  3. url 虽然写进了浏览器历史( pushState ),但是在 FireFox 下用 Backspace 返回时候。很多时间只是浏览器的url变了,但是内容还需要再次刷新。

好处也就不说了。减小重复资源的http请求
言归正传,简单说说本站是怎么启用这个吧:
直接用了 defunkt/jquery-pjax 这位大神的成熟方案。对本站的链接(a)做了处理。 代码如下:

code$.getScript("http://Path/to//js/jquery.pjax.js", function() { $(function() { easun_pjax(); }); });

其中 easun_pjax(); 为核心函数。 简单如下:

codefunction easun_pjax()
{
$(document).pjax('a[target!=_blank]', '#content', {fragment:'#content', timeout:6000});
$(document).on('pjax:send', function() {
$('#content').fadeTo(700,0.0);
});
$(document).on('pjax:complete', function() { $('#content').fadeTo(700,1); });
}

这样基本完成, 如果一些需要在替换#content(<div id="content">...<div>)的内容需要 js 实现的。请在pjax:complete中(上面有示例)中重新运行一次。

成功后实例可以参见本站的各博文之间的切换。

再说多说的一些小技巧吧

用多说一段时间了。乱七八糟的改了一起。多说的自定义其实还很强的,只是官方似乎不是很重视这些小技巧? (官方现在都长草了)

  • 彻底自定义CSS。
    不是官方说的在某些位置加入CSS,而是彻底把多说的CSS 放在自己的网站。 其实很简单。就是定义duoshuoQuery.theme= 'none' 即可。
    再说的清楚点就是这样定义duoshuoQuery:
    var duoshuoQuery = { short_name: "YOURKEY", theme:'none'};

这样,多说就不会加载任何 CSS ,变成了一张白纸,自己享受重头定义本地 CSS 的乐趣吧。

  • 让评论加载不在颤抖。
    大家也许都注意到,有时间加载多说的评论会先从没有任何 CSS 样式再切换到有CSS样式。
    原来以为是 CSS 没有及时加载进来。 后来一看官方的 CSS 才知道。 CSS 根本没有定义 .ds-thread(class="ds-thread")而只定义了#ds-thread(id="ds-thread")。
    而多说的机制是找到.ds-thread 并以其做为容器加载评论文章,最后再给这个容器加上id(#ds-thread)。
    奇怪的逻辑~~ 为什么不直接以 ID 操作呢? 多说自己的不自信?
    知道原因了,让评论加载不颤抖也就很简单,把加载评论的 <div class="ds-thread" ...> 提前改成 <div class="ds-thread" id="ds-thread" ...> 就可以了。 或者,你也可以按照彻底定义CSS的办法重新对 .ds-thread 做 CSS定义。

  • pjax 动态加载 评论。
    其实也就是上面的问题的延伸。 在pjax:complete中加载即可。 代码为

    if ($('.ds-thread').length > 0) { if (typeof DUOSHUO !== 'undefined') DUOSHUO.EmbedThread('.ds-thread'); else $.getScript("//static.duoshuo.com/embed.js"); }

完整代码如下:

code$(document).on('pjax:complete', function() { $('#content').fadeTo(700,1);
if ( $('.ds-thread').length > 0 ) {
if (typeof DUOSHUO !== 'undefined') DUOSHUO.EmbedThread('.ds-thread');
else $.getScript("//static.duoshuo.com/embed.js");
}
});
}

--EOF--

[多说]不本地化embed.js使多说评论显示UA ,

title.jpg

个性化 多说显示,让多说显示评论者的 UA,貌似教程很多。


比如: 我的那些事 - 多说回复后显示浏览器及操作系统信息(Useragent) 这里。


但是方案都是 本地化 embed.js 然后修改 embed.js 完成。

不想本地化 embed.js ,搜索了一下网络, 发现有不本地化 用 JS Hook 方式修改的办法,见
https://github.com/huhuime/make_duoshuo_show_ua

但是,根据这个修改后无效, 检测了多说的 embed.js 代码,发现是因为版本更新导致变量失效,修改 e.agent 为e.post.agent 即可。

简单整理如下。

在 多说 自己的 JS 导入后面的任意位置添加以下代码:

<script src="您的网站地址/ua-parser.min.js"></script>

<script type="text/javascript">
    if (typeof DUOSHUO !== 'undefined')hookDUOSHUO_tp();
    else $('[src="http://static.duoshuo.com/embed.js"]')[0].onload=hookDUOSHUO_tp;
    function hookDUOSHUO_tp(){
        var _D_post=DUOSHUO.templates.post
        DUOSHUO.templates.post=function (e,t){
            var rs=_D_post(e,t);
            var agent=e.post.agent;
            if(agent&&/^Mozilla/.test(agent))rs=rs.replace(/<\/div><p>/,show_ua(agent)+'</div><p>');
            return rs;
        }
    }
    function show_ua(string){
        console.log(string)
        $.ua.set(string);
        var sua=$.ua;
        if(sua.os.version=='x86_64')sua.os.version='x64';
        return '<span class="this_ua platform '+sua.os.name+'">'+sua.os.name+' '+sua.os.version+'</span><span class="this_ua browser '+sua.browser.name+'">'+sua.browser.name+'|'+sua.browser.version+'</span>';
    }
    </script>

多说,社交登录评论平台 ,

This is a SiteLog for Easun.org。

 多说 是一款追求极致体验的社会化评论框,可以用微博、QQ、人人、豆瓣等帐号登录并评论。

恩,就是这样。

写下这个的原因是路杨正式启用 多说 作为本站博客的评论系统, MT 本身的 评论系统也保留。

原因很简单: MT 的留言系统资源问题。

其实在 多说 和 Disqus 之间选择的时候, 第一选择的是 Disqus,但是分析后发现, Disqus载入方式是 iframe ?

对于 iframe 我貌似有点轻度洁癖。 于是选择 多说。

分析了多说的代码, 利用 JS 把多说的评论框排版折腾的和 原来 MT 布局差不错多了。

觉得 多说 的系统的自定义和配置方面还小有瑕疵,等有空写写。

--EOF--