Windows 上也有很多优秀的工具软件是 Mac 上没有的, 装虚拟机的话太浪费, 而且效率不高, 幸好可以通过 Wine 来运行 Windows 程序, 通过 HomeBrew 使得 Wine 的安装非常容易, 通过 WineTricks 来配置 Wine 也没有多大困难, 下面是我在 Mac 上安装和配置 Wine 的纪录。 安装 Wine 和 WineTricks 这一步推荐通过 HomeBrew 进行安装, 命令如下: brew install wine brew install winetricks 装完之后先运行一下 winecfg 命令, 初始化配置, 什么也不... 阅读全文

微软在 OWIN 框架中对 OAuth 认证的支持非常好, 使用现有的 OWIN 中间件可以做到: 使用 Microsoft.Owin.Security.OAuth 搭建自己的 OAuth2 服务端, 没做过的可以参考这个简单教程: 使用 OWIN 搭建 OAuth2 服务器 ; 使用 Microsoft.Owin.Security.Facebook 连接 Facbook 认证, 让用户使用 Facebook 帐户来登录; 使用 Microsoft.Owin.Security.Google 连接 Google 认证, 让用户使用 Google 帐户登录; 使用 Mic... 阅读全文

前段时间在使用 Nginx 和 Git 搭建了一个简单的 Git 源代码服务器, 随着项目的增多, 管理起来有些不便, 于是打算再安装一个 GitLab CE 作为内部的源代码管理服务器。 准备操作系统 操作系统用的是最新发布的 Ubuntu 16.04 LTS, 这个也是 GitLab 的安装文档中推荐的操作系统。 新建虚拟机, 全新安装 Ubuntu 16.04 LTS , 一切都顺利。 安装 GitLab CE GitLab 有两种安装方式, 分别是从源代码安装和用 deb 软件包安装, 如果打算进行二次开发的话, 可以考虑从源代码安装。 不过对我来说, 不打算进行二次开发... 阅读全文

Controller 在 AngularJS 应用中可以说是无处不在, 可以在 html 中通过 ngController 指令来指定 Controller , 语法为: <ANY ng-controller="expression"> ... </ANY> 在 ngRoute 模块中使用, 语法为: $routeProvider .when('/my-url', { controller: 'MyController' }); 在 ui.route 模块中使用, 语法为: $stateProvider... 阅读全文

在 TypeScript 中, 经常要使用 export 和 import 两个关键字, 这两个关键字和 es6 中的语法是一致的, 因为 TypeScript = es6 + type ! 注意: 目前没有任何浏览器实现 export 和 import ,要在浏览器中执行, 必须借助 TypeScript 或者其它的转换器! export export 语句用于从文件(或模块)中导出函数, 对象或者基础类型, 语法如下: export { name1, name2, …, nameN }; export { variable1 as name1, variable2 a... 阅读全文

Angular2 已经发布 beta9 , 是时候折腾一下了。 Angular2 和 AngularJS 1.x 相比, 可以说是全新的框架, 除了名字有延续性之外, 能延续的真的不多。 准备开发环境 Angular2 通过 npm 发布, 因此推荐使用 node/npm 环境, 要开始使用 Angular2 , 先准备一个目录 learning-angular , 在这个目录中初始化项目: mkdir learning-angular cd learning-angular npm init 编辑生成的 package.json 文件, 添加 angular2 的 npm 包... 阅读全文

多年前发表过一篇在 Windows 系统上配置 Apache Git 服务器的博文, 主要是用 Apache 的 Basic 认证 + git-http-backend 实现, 现在需要在公司的 vps 上再部署一个类似的简单 git 服务器, 这次的软件环境如下: Ubuntu 14.04.4 LTS nginx/1.4.6 (Ubuntu) git version 1.9.1 使用 git-http-backend 搭建 git 服务的原理都是类似的, 主要是利用 web 服务器 (apache/nginx) 进行用户认证, 并将用户信息传递给 CGI 程序 gi... 阅读全文

在计算机程序中, 规格模式是一种特殊的软件设计模式,业务规则可以使用布尔逻辑组成规则连而重新组合, 这种模式通常在领域驱动设计中使用。 规格模式描述的是一个业务规则可以和另外的业务规则聚合, 在这种模式中, 业务逻辑单元继承自可聚合的抽象规格基类类,该基类有一个返回布尔值的方法 IsSatisfiedBy 。 在初始化之后, 规格可以和其它规格进行逻辑组合, 使新的规格很容易维护, 实现高度自定义的业务逻辑。 规格模式的 UML 图如下: 实现代码如下: public interface ISpecification<TTarget> { bool Is... 阅读全文

分享一个自己写的 OWIN 静态文件处理中间件, 功能如下: 支持标准的 OWIN 环境, 跨平台运行 (.Net, Mono) 为 OWIN 环境开发, 只依赖 Owin.dll , 和具体的 OWIN 宿主无关, 可以在 .Net 和 Mono 环境下运行; 支持实体标签 (HTTP ETag) 实体标签 是HTTP协议提供的若干机制中的一种Web缓存验证机制,并且允许客户端进行缓存协商。这就使得缓存变得更加高效,而且节省带宽。(参考维基百科) 支持 Html5 路径模式 支持 AngularJS... 阅读全文

升级到 VS2015 之后, TypeScript 文件不能自动编译成 js 文件, 要编译项目才能讲所有的 ts 文件 编译成 js 文件, 不过 VS2015 支持 Gulp , 而 Gulp 有 TypeScript 插件, 这样使用 Gulp 自动编译 ts 文件的方法就可以实现了。 假设项目结构如下: 我们要把 app 目录下的 ts 文件编译到 wwwroot/app 目录下, 使用 Gulp 的做法是这样的: 1、 添加 gulp 和 gulp-typescript NPM 包 打开 package.json , 在 devDependencies 节点下添加:... 阅读全文

在 OWIN 的设计当中, 一切都是松散耦合的, 基于职责链的中间件处理模式给开发者提供了很大的自由, 基于 OWIN 的应用甚至可以脱离 Windows/IIS , 运行在 Linux/Mono 之上。 Microsoft.Owin 中奇葩的设计 不过今天要吐槽的是 Microsoft.Owin 的设计, 在传统的 System.Web 命名空间下, 有一个很庞大的 HttpContext 对象, 让开发者又爱又恨, 它位于 System.Web.dll 之中, 紧密依赖与 Windows/IIS , 而且无所不包, 在 Windows/IIS 上完美运行, 然而也正是因为它紧密依... 阅读全文

AngularJS 中使用 ng-repeat 显示列表数据应该都不陌生了, 用起来很简单, 也很方便, 比如要显示一个产品表格, Controller 的 Javascript 代码如下: angular.module('app', []) .controller('MyController', MyController); MyController.$inject = ['$scope']; function MyController($scope) { // 要显示的产品列表数据; $scope.products = [ { ... 阅读全文