Web

2 次浏览

低碳理念与软件研发的关系?

对于可持续性(Sustainability)、环保、低碳的概念,我们总会局限于包装、环境污染、材料等等主题。然而,其实作为软件研发或产品设计者,我们的细心思考或优化同样能够带来对于低碳理念的实际践行。

您可以参考近期由 Wunderman Thompson 发布的《2022全球百大趋势》(Topic 13,page 32)有关“碳中和网页”(Carbon-Neutral Net)的概念。根据有关电子邮件污染的报告指出,如果互联网是一个国家,那么电子邮件就是世界第六大污染源。无用邮件每年仅仅在英国就相当于产生 200 万吨的二氧化碳排放。

通过对网页/软件/逻辑设计的优化,可以显著减少站点平均每次浏览产生的二氧化碳量。许多企业正在尝试对其网站、电子邮件进行持续地改进,以减少其在线活动的碳足迹。

你可以通过这个网站,估算您当前所关心的 Website 的碳足迹。

16 次浏览

OAuth 2.0 Implicit Grant Flow “隐式授权流” 不再被推荐!

Apple Safari 已经提供默认启用的隐私保护功能,称为智能跟踪保护 (ITP)。 ITP 会阻止“第三方”的 Cookie – 包含在跨域请求中的 Cookie。
常见的用户跟踪形式是:在后台将一个 iframe 加载到第三方站点,并使用 Cookie 在整个 Internet 中关联用户。【遗憾的是,此模式也是单页应用 (SPA) 中实现Oauth 2.0 的隐式流(Implicit Grant Flow)的标准方式】

当浏览器阻止第三方 Cookie 以阻止用户跟踪时,SPA 也会中断。【并非只有 Safari】通过阻止第三方 Cookie 来增强用户隐私保护。Brave 默认已阻止第三方 Cookie,而 Chromium(基于 Google Chrome 和 Microsoft Edge 的平台)也已宣布,在 2023 年年底停止支持第三方 Cookie。

因为上述的从浏览器中删除第三方 Cookie 的行为,隐式授权流不再是合适的身份验证方法。 如果没有第三方 Cookie,隐式流的无提示 SSO 功能将不起作用,导致应用程序在尝试获取新令牌时中断。 强烈建议你让所有新的应用程序都使用 【授权代码流(Authorization Code Flow)】,并让现有的单页应用也开始迁移到授权代码流。

这对于所有基于 SPA 开发并包含联合认证登录方式的网站,【都会产生重大影响】,需要你对项目进行重大重构和修改。

相关参考

Apple Safari 已经启用此限制,Chromium 将在 2023 年底前启用。这是一个类似于“微软将会从 Windows 中移除 IE” 一个级别的信息,请大家务必注意。

2,441 次浏览

JavaScript: HTML 内容折叠 (Html Content Ellipsis)

2018 年马上就要过去了,这一年真的经历了太多,本应该按惯例写写年终总结的,不过最近真的太忙了,总有些事情是更优先的,又赶上今天有人需要帮忙,索性就把解决这个小问题的代码讲一讲,全当作是对 2018 年的一个告别吧。

其实很久以前,在某个项目中也遇到过这个问题,我们在一个前端 Table (Grid) 中,希望显示出一个包含了 HTML 样式的富文本内容列,但是其内容很长,我们希望可以按照一个指定的字数进行截取(需要继续保留富文本的样式),并将字符串的剩余部分显示为 …

我们知道,通过 CSS ellipsis 也能设置 … 样式,但是这只能按照外围容器的 width 进行设定,无法按照字数进行处理。所以,为了庆祝新年,我们自己动手写一个吧!

Continue reading

1,808 次浏览

如何将 .NET DateTime 转换为 JavaScript Date – 形如:\/Date(1539953962642)\/

前言

在使用 ASP.NET MVC 开发 Web 程序时,对于 DateTime 类型的数据在 JSON 结果中,以类似于 “\/Date(1539953962642)\/” 的形式进行返回,那么这里中格式叫做什么呢?其中的数字的意义如何?

实际上这种数据格式叫做 Microsoft’s built-in JSON Date format,这不是任何一个通用规范的一部分,它是微软定义的一种格式。并且这里的数字并不是 .NET DateTime 的 Ticks!实际上这个值就是 TimeInMillis!


Ticks 和 TimeInMillis 有什么区别?

Ticks 一般是指从 0001-01-01 00:00:00.000 到现在的百纳秒计数,这个计数单位是 100 nanosecond(long 类型存储),.NET 平台使用 Ticks 方式记录时间(比如 [C#] DateTime.UtcNow.Ticks)。

TimeInMillis 一般是指从 1970-01-01 00:00:00.000 到现在的毫秒数,这个单位是 1 millisecond(long 类型存储),Java 和 JavaScript 使用 TimeInMillis 方式记录时间(比如 [JavaScript] Date.now())

所以,我们只需要通过正则表达式提取这个 Microsoft’s built-in JSON Date format 的值,直接应用于 JavaScript 即可。
Continue reading

1,977 次浏览
1,544 次浏览

WP2CSDNBlog 已无法同步文章到 CSDN

WP2CSDNBlog 是 WordPress 下的一款优秀的文章同步插件,由于 CSDN 服务器不再支持离线编写了,所以我们无法继续使用这个插件同步新建的 WordPress 文章。(援引插件作者的评论

不过 博客园 依然可以被 WP2CSDNBlog 插件支持。具体配置信息如下:

  • 博客园(CNBlogs):https://rpc.cnblogs.com/metaweblog/nista(修改为你的用户名)
  • 开源中国(OSChina):https://my.oschina.net/action/xmlrpc
  • 51CTO:http://imguowei.blog.51cto.com/xmlrpc.php
  • CSDN: http://write.blog.csdn.net/xmlrpc/index
  • 新浪博客: http://upload.move.blog.sina.com.cn/blog_rebuild/blog/xmlrpc.php
  • 网易(163):http://os.blog.163.com/word
2,431 次浏览

JavaScript: 注册粘贴事件,将剪切板中的内容去除HTML标签,并粘贴到光标位置

$("#Subject").bind('paste', function (e) {
        var pasteData = "";
        if (e.originalEvent.clipboardData) {
            pasteData = e.originalEvent.clipboardData.getData('text');
        } else {
            // for IE
            pasteData = window.clipboardData.getData("Text");
        }
        var self = this;

        // 在等待一段时间后,在当前光标位置,粘贴处理后的文本
        setTimeout(function () {
            var selection = document.getSelection();
            var cursorPos = selection.anchorOffset;
            var oldContent = selection.anchorNode.nodeValue;
        // 通过 Jquery的text() 去除所有样式
            var toInsert = $("<div>" + pasteData + "</div>").text();
            var newContent = oldContent.substring(0, cursorPos) + toInsert + oldContent.substring(cursorPos);
            selection.anchorNode.nodeValue = newContent;            
        }, 200);
        return false;
    });

2,506 次浏览

How-to: 百度结构化数据插件 Checkurl 请求失败

WordPress 在安装百度结构化数据插件后,能又快又全的向百度提交论坛网页及内容,帮助百度 Spider 收录我们的站点,对于优质的数据资源,可应用结构化摘要样式优化网站在百度搜索结果页的展现。
我们可以从下方地址下载该插件:
http://zhanzhang.baidu.com/dataplug/index

安装的过程,我们可以参考月光博客的这篇文章,安装过程非常简单,但是在安装并启用百度结构化数据插件后,我们需要对站点进行验证。这一过程经常会出现 Checkurl 请求失败 或 验证 sign 检测失败 等问题,这都是由于 WordPress 内建缓存或第三方缓存插件引起的问题,我们需要在通过验证前,将这些缓存机制临时停止。
Continue reading