Storyboard 的优点: 可视化; XamarinStudio 自带 Storyboard 编辑器, 不用启动 Xcode 。 Storyboard 的缺点: 只有一个文件, 不利于多人同时编辑; 在 MvvmCross 不推荐使用 UIStoryboardSegue , 因为和 Mvx 的 Command 功能上冲突, 这里以 Mvx 为主。 可能是因为上面的缺点吧, Mvx 没有提供内置的 Storyboard 支持。 不过 Mvx 的扩展性是很强大的, 通过自定义 MvxTouchViewsContainer 就可以实现对 Storyboa... 阅读全文

结构 说明 Separate the construction of a complex object from its representation allowing the same construction process to create various representations. 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 适用条件 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时; 当构造过程必须允许被构造的对象有不同的表示时。 实现 abstract class PizzaBuilder... 阅读全文

Git 每次进行 Pull 和 Push 操作时都要输入用户名和密码, 非常不便。 虽然有客户端 SmartGit/HG 以及 TortiseGig 可以帮你记一下客户端, 但是每个代码库都要记录一次, 如果项目包含很多个 submodule 的话, 用起来也有些不方便。 经过一番搜索, 最终找到了让 git 客户端记住密码的方法, 现总结如下: Linux/Unix/Mac 系统 新建一个 ~/.netrc 文件, 将 git 服务器, 用户名以及密码记录在这个文件, 如下所示: machine your-git-server login your-username passwo... 阅读全文

最近需要在开发的安卓项目中添加新浪微博一件关注的功能, 本来是一个很简单的功能, 就是调用新浪微博客户端显示用户信息的 Activity , 然后用户就点击关注按钮就可以了。 本来是很简单的功能, 可以网上找到的几乎都是 JS 的代码, 或者是要注册新浪微博 SDK 的代码, 这么简单的功能应该不用注册什么 SDK 的, 也不想参合什么 JS , 只要研究一下新浪微博客户端的 Activity 就可以了。 首先我们需要使用 AXMLPrinter2.jar 反编译新浪微博的 AndroidManifest.xml , 从中查找显示用户信息的页面, 反编译代码如下: java -jar... 阅读全文

ExtJS 是一个非常优秀的 JS 框架, 由于 ExtJS 自身非常庞大, 用于开发测试的 ext-all-debug.js 文件达到了 3.24M , 如果是再加载带注释的 ext-all-debug-w-comments.js 则更是达到了 6M , 可以说是非常庞大了, 因此动态加载 ExtJS 是很有必要的, 接下来就介绍如何对 ExtJS 做动态加载。 创建一个基本的模板 首先需要先创建一个基本可用的 ExtJS 模板, 这个很简单, 如下所示: <!DOCTYPE html> <html> <head> <title&... 阅读全文

结构 说明 Provide an interface for creating families of related or dependent objects without specifying their concrete classes. 为一个产品族提供了统一的创建接口。当需要这个产品族的某一系列的时候,可以从抽象工厂中选出相应的系列创建一个具体的工厂类。 适用条件 一个系统要独立于其产品的创建、组合和表示时; 一个系统需要由多个产品系列中的一个来配置时; 需要提供一个产品类库, 而只想显示他们的接口, 而隐藏他们的实现时。 实现 public... 阅读全文

OpenTK 入门系列 2014-01-06

本来是很久以前的帖子了, 居然还有人需要, 所以又翻了出来, 重新整理并发布到 github 。 The Open Took Kit (OpenTK), 是对 OpenGL、OpanAL、OpenCL 的跨平台的封装,使用 C# 编写,可以运行在 Windows、 Linux 以及 MacOSX 平台上, 任何 .Net 语言都可以使用它做开发。 主要特点如下: 快速开发 使用 .Net 的强类型和内嵌的注释文档, 提高代码流程,并且有助于快速发现错误。 集成 可以单独使用,也可以无缝集成到 Windows Forms、 WPF 或 GTK# 等其它应用程序中。 完全免费 ... 阅读全文

数据绑定一直是 MvvmCross (Mvx) 框架的核心, 随着 Mvx 版本的版本更新, 绑定语法由 Json 变化到了 Swiss 语法, 并逐渐向 Tibet 过度。 由于基于 Json 的绑定语法在 Mvx 3.0 之后的版本已经标记为过时, 不再支持, 因此不做介绍, 本文详细介绍 Swiss 和 Tibet 语法。 Mvx 实现了跨平台的数据绑定, 概念与 WPF/Silverlight/WinPhone (Xaml) 的数据绑定一致, 可以在 Android 和 iOS 平台使用, 这也正是 Mvx 框架的魅力所在。 Swiss 绑定语法 在 Xaml 平台下, 数... 阅读全文

ROW_NUMBER 是 SQL 2005 中新增的函数, 显示结果的行号, 多用于分页, 基本的语法为 ROW_NUMBER() OVER({<partition_by_clause>}<order_by_clause>) 其中, 分区语句是可选的, 排序语句是必须的, 比如这样的语句: SELECT ROW_NUMBER() OVER(ORDER BY ProductID), CategoryID, ProductName, UnitPrice FROM Products 返回的结果为: 也可以按照 CategoryI... 阅读全文

介绍 MvvmCross (Mvx) 框架中的 ViewModel 之间的导航以及 ViewModel 的生命周期。 在 ViewModel 之间导航 Mvx 框架中, 用一个页面跳转到另一个页面, 对应的也会从一个 ViewModel 跳转到另外的 ViewModel , 页面间的跳转由 ViewModel 发起, 通常会调用 ShowViewModel 方法来完成 ViewModel 之间的导航, 这个方法提供了一下几个重载版本: protected bool ShowViewModel<TViewModel>( IMvxBundle parameterBu... 阅读全文

程序员应该要爱惜生命,做有用有意义的事情。做有用的事情,有两种方式,一、做一个对用户真正有价值的项目,这个项目是真正有意义有用的;二、朝正确的方向以正确的方式做项目。但是程序员会遇到很多失败的项目,这些系统要么是没有人用没有真正价值,要么是以不正确的方式做项目,使用不当的技术,例如,用报表工具代替查询、用ESB企业总线当作海量数据传输用,或者做一些没有实际用途的功能,如做一个万能的用户自定义查询系统、做用户自定义工作流工具、做用户自定义报表工具,这些项目无疑在浪费程序员的生命。笔者试图总结程序员浪费生命的几种方式,如下。 1、开发一个质量和性能很差的系统 程序员经常会碰到这样的项目,... 阅读全文

结构 说明 Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates. 封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改,接受这个操作的数据结构可以保持不变。 适用条件 访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的耦合解... 阅读全文