摘要: 1 什么是OIDC? 看一下官方的介绍(http://openid.net/connect/): OpenID Connect 1.0 is a simple identity layer on top of the OAuth 2.0 protocol. It allows Clients to 阅读全文
posted @ 2017-05-30 09:18 blackheart 阅读(71182) 评论(52) 推荐(69) 编辑
摘要: 0. Cake是什么? Cake是C# Make的缩写,是一个基于C# DSL的自动化构建系统。它可以用来编译代码,复制文件以及文件夹,运行单元测试,压缩文件以及构建Nuget包等等。 熟悉大名鼎鼎的Make的小伙伴,应该已经知道Cake大致是个什么样的工具了,Cake具有以下几个特点: 1. 一个 阅读全文
posted @ 2017-05-06 22:37 blackheart 阅读(6423) 评论(7) 推荐(1) 编辑
摘要: OAuth 2.0 规范定义了一个授权(delegation)协议,对于使用Web的应用程序和API在网络上传递授权决策非常有用。OAuth被用在各钟各样的应用程序中,包括提供用户认证的机制。这导致许多的开发者和API提供者得出一个OAuth本身是一个认证协议的错误结论,并将其错误的使用于此。让我们 阅读全文
posted @ 2017-04-09 16:59 blackheart 阅读(20254) 评论(19) 推荐(21) 编辑
摘要: 1 RFC6749还有哪些可以完善的? 1.1 撤销Token 在上篇[认证授权] 1.OAuth2授权 中介绍到了OAuth2可以帮我们解决第三方Client访问受保护资源的问题,但是只提供了如何获得access_token,并未说明怎么来撤销一个access_token。关于这部分OAuth2单 阅读全文
posted @ 2017-04-03 03:56 blackheart 阅读(26669) 评论(14) 推荐(25) 编辑
摘要: 0. 目录 C#6 新增特性目录 1. 在catch和finally块中使用await 在C#5中引入一对关键字await/async,用来支持新的异步编程模型,使的C#的异步编程模型进一步的简化(APM->EAP->TAP->await/async,关于C#中的异步编程模型的不是本篇文章的介绍重点 阅读全文
posted @ 2017-03-09 10:10 blackheart 阅读(1374) 评论(0) 推荐(0) 编辑
摘要: 1. 老版本代码 在有些场景下,我们需要一个方法返回一个以上的返回值,微软在.NET 4中引入了Tuple这个泛型类,可以允许我们返回多个参数,每个参数按照顺序被命名为 Item1;Item2,Item3 ,算是部分的解决了我们的问题,但是对于强迫症程序员来说,Item1,2,3的命名简直是不能忍的 阅读全文
posted @ 2017-03-08 17:01 blackheart 阅读(14237) 评论(11) 推荐(5) 编辑
摘要: 1 OAuth2解决什么问题的? 举个栗子先。小明在QQ空间积攒了多年的照片,想挑选一些照片来打印出来。然后小明在找到一家提供在线打印并且包邮的网站(我们叫它PP吧(Print Photo缩写 😂))。 那么现在问题来了,小明有两个方案来得到打印的服务。 针对方案(1):小明要去下载这些照片,然后 阅读全文
posted @ 2017-01-09 09:40 blackheart 阅读(42472) 评论(40) 推荐(140) 编辑
摘要: 0. 目录 C#6 新增特性目录 1. 老版本的代码 早C#3中引入的集合初始化器,可是让我们用上面的语法来在声明一个字典或者集合的时候立即初始化一些项进去,其实在C#3中这是个语法糖,实质编译后的结果是调用字典或者集合的Add方法逐一添加这些项。但是有一点小小的不直观。先看看这个版的IL吧: 本质 阅读全文
posted @ 2016-07-09 22:00 blackheart 阅读(2581) 评论(11) 推荐(0) 编辑
摘要: 0. 目录 C#6 新增特性目录 1. 老版本的代码 通常情况下,有些简单的只读属性和方法只有一行代码,但是我们也不得不按照繁琐的语法去实现它。C#6带了了一种和lambda语法高度一致的精简语法来帮助我们简化这些语法。先看看老版本的IL代码(这里我就不展开IL了,看下结构即可,都是普通的属性和方法 阅读全文
posted @ 2016-07-08 21:49 blackheart 阅读(2232) 评论(1) 推荐(0) 编辑
摘要: 0. 目录 C#6 新增特性目录 1. 老版本代码 通常情况下,C#的属性可以很好的帮助我们完成工作,比如上面的代码。在为属性赋值的时候,我们可以在任意地方为其赋值。但是并没有一种像是字段一样的声明且立即初始化的语法来简化默认值的设定。C#6为我们带来了这种新的语法,像是为字段赋值一样为属性赋值。 阅读全文
posted @ 2016-07-06 22:33 blackheart 阅读(4357) 评论(0) 推荐(0) 编辑
摘要: 0. 目录 C#6 新增特性目录 1. 老版本的代码 通常我们在格式化字符串的时候会使用string的静态方法Format来进行字符串拼接,然后使用{0}...{n}来充当占位符。如果{n}过大,代码的可读性就会急剧下降,C#6引入一个新语法来简化这种书写方式。 2. $"{xxx:}" 我们之间来 阅读全文
posted @ 2016-07-05 21:57 blackheart 阅读(2777) 评论(1) 推荐(2) 编辑
摘要: 0. 目录 C#6 新增特性目录 1. 老版本的代码 在我们使用一个对象的属性的时候,有时候第一步需要做的事情是先判断这个对象本身是不是bull,不然的话你可能会得到一个 System.NullReferenceException 的异常。虽然有时候我们可以使用三元运算符 string name = 阅读全文
posted @ 2016-07-04 21:26 blackheart 阅读(4811) 评论(6) 推荐(1) 编辑
摘要: 0. 目录 C#6 新增特性目录 1. 老版本的代码 这段代码并没什么问题,运行良好。随着时间的推移,有一天,我觉得args这个参数名不合适,想改一个更直观的名字filePaths,表示我要接受一个文件路径的数组。然后我们就直接把args这个名字给重构了,but,把 throw new Argume 阅读全文
posted @ 2016-07-03 00:34 blackheart 阅读(18498) 评论(0) 推荐(7) 编辑
摘要: 0. 目录 C#6 新增特性目录 1. 老版本的代码 上面这段代码大家再熟悉不过了,使用静态类Console的静态方法WriteLine输出一行字符串。插播点关于CLR的相关知识,CLR在执行IL的期间时候是么有命名空间的概念的,它所知道的仅仅是成员的完全限定名(C#1 类型基础)。也就是在调用Co 阅读全文
posted @ 2016-07-02 19:34 blackheart 阅读(10584) 评论(2) 推荐(4) 编辑
摘要: 1. C#6 新特性图谱 C#6的新特性主要由编译器(“Roslyn”)带来,并不依赖CLR和.NET Framework的升级,我们可以认为这个版本的新语言特性的主要目的为了简化代码书写方式,让我们以一种更直观高效的方式去编程,本质上是一些语法糖。主要特性如上图所示,针对每个特性详细介绍如下: 2 阅读全文
posted @ 2016-07-02 17:40 blackheart 阅读(1861) 评论(0) 推荐(1) 编辑
摘要: 0. 工欲善其事必先利其器 上一篇博客对比了一下Android和WinPhnoe的布局容器,后续篇章重点放在Android的开发上了。 说到开发就绕不开调试程序,调试Android App我们有2种选择,真机调试和模拟器调试:真机调试相对简单,就不做介绍了,还有一方面原因是由于安卓手机一旦插到电脑上 阅读全文
posted @ 2015-08-04 00:50 blackheart 阅读(2566) 评论(8) 推荐(4) 编辑
摘要: 0.写在前面的话 近来被HTML+CSS的布局折腾的死去活来,眼巴巴的看着CSS3中的flex,grid等更便捷更高效的的布局方式无法在项目中应用,心里那叫一个窝火啊,去你妹的兼容性,,, 最近体验下Android开发,第一件事就是翻翻看安卓提供的布局方式方便不,因为笔者现在是做WP的,于是乎有了这 阅读全文
posted @ 2015-07-24 22:43 blackheart 阅读(1203) 评论(12) 推荐(3) 编辑
摘要: 0. 所需的安装文件 笔者做了几年WP,近来对Android有点兴趣,尝试一下Android开发,废话不多说,直接进入主题,先安装开发环境,笔者的系统环境为windows8.1&x64。 安装Android Studio需要如下准备2个文件: 1. 安装JDK8并配置JAVA-HOME 众所周知An 阅读全文
posted @ 2015-07-16 22:37 blackheart 阅读(1486) 评论(11) 推荐(4) 编辑
摘要: 0.SDK之必备的基本素质 在项目中免不了要用到各种各样的第三方的sdk,在我现在的工作中就在公司内部积累了各种各样的的公共库(基于.net的,基于silverlight的等等),托管到了内部的nuget私服上,大大的方便了项目的开发。 在积累这些库的过程中走过不少弯路,今天分享给大家(借助微信公众 阅读全文
posted @ 2015-06-16 07:25 blackheart 阅读(1712) 评论(7) 推荐(3) 编辑
摘要: 0. 概述 为何高级语言需要类型系统这个概念?在汇编时代是没有完整的数据类型系统的,结构化编程引入了结构化的控制流、为结构化设计的子程序,随之这种结构化的代码所操作的数据也进一步的“抽象化、特化”,故而有了数据类型这种概念,类型系统主要用于两个用途: 一个类型系统包含一些内部类型,一种定义新类型的机 阅读全文
posted @ 2015-05-09 16:01 blackheart 阅读(2711) 评论(10) 推荐(3) 编辑
摘要: 0.概述 前面介绍了语言的演进以及一些基础概念后,从本篇开始进入了语言的核心问题中。这一篇讨论的是语言计算模型(大致可以用控制流来表述),大致如下7种: 以上7个基本类别囊括了大部分语言中出现的控制流程和结构,如果我们能以此思考问题(而非特定语言的特定语法),那么学习一门新语言就会是一件很轻松的事情 阅读全文
posted @ 2014-08-27 09:30 blackheart 阅读(1900) 评论(2) 推荐(1) 编辑
摘要: 1.名字、约束时间(Binding Time) 在本篇博文开始前先介绍两个约定:第一个是“对象”,除非在介绍面向对象语言时,本系列中出现的对象均是指任何可以有名字的东西,比如变量、常量、类型、子程序、模块等等。第二个是“抽象的”,因为我们讨论的是语言的核心概念,所以“抽象的”具体指代的是语言特征与任 阅读全文
posted @ 2014-08-03 09:09 blackheart 阅读(2027) 评论(0) 推荐(3) 编辑
摘要: 1.机器语言>汇编语言>高级语言 语言是人与人的一种交流工具,就比如我现在用汉语来写这篇博文来交流探讨技术问题;程序设计语言也是如此,只是交流对象不是人而是机器。我可以用汉语来写博文,也可以用英语来写(假如我英语熟练);我可以用PHP来写一个网站,也可以用ASP.NET来写。这就说明语言的本质就是一 阅读全文
posted @ 2014-07-20 19:58 blackheart 阅读(1726) 评论(9) 推荐(0) 编辑
摘要: 1. 开篇概览 前一周写了一篇博文“记-码农的“启蒙”之《程序设计语言-实践之路》和《面向对象分析和设计》两书”,其中说打算总结下这两本书中有哪些收获,就是关于第一本书《程序设计语言-实践之路》的系列总结博文。 1.1 为何要读这本书? 首先这是一本介绍语言的入门书籍(笔者阅读是裘宗燕老先生翻译的第 阅读全文
posted @ 2014-07-13 09:04 blackheart 阅读(2248) 评论(5) 推荐(0) 编辑
摘要: 一些废话 眨眼间已工作走出校门个年头了,总觉得时间过的好快(一把无情的杀猪刀)。 好长时间木有写过博客了,有时候突然之间好多想说的,却又不知怎么下笔;总是这样,也许是不善于语言表达吧(人在不愿做某一件事的时候总是能找出一千个理由来说服自己)。 今天想谈谈阅读的一些体会。我是始终认为在刚开始工作的几年 阅读全文
posted @ 2014-07-07 08:56 blackheart 阅读(3905) 评论(26) 推荐(7) 编辑