CaveOps: Night-City
#Hello Edgerunners, welcome to the Night-City.

Welcome!

Sparkle 1: Setup

做 Mac 开发的同学应该至少都听说过 Sparkle,一个应用升级框架,Sparkle 是开源的,参考 Github。 不过需要注意的是,Sparkle 的使用场景应仅仅局限于 非 App Store 且非 Sandbox 应用。 使用 Sparkle 几乎不需要写代码,但需要做一些 Xcode 配置还是必要的。 添加 Sparkle 到你的项目 CocoaPods: pod 'Sparkle' 记得要使用 use_frameworks!。 手动 下载 最新版本 用 Xcode 打开你的项目并将 Sparkle.framework 文件拖入你 拖入时请勾选 Copy ...

颓废了一阵子,又雀跃了一阵子,但不论是怎样的感情,就像这四年间许许多多不明的日子一样,都会过去。

people come and go, but coffee is forever.

NSImage: Get size in pixels

Just simple: let rep = originImage.representations.first let pixelSize = CGSize(width: (rep?.pixelsWide)!, height: (rep?.pixelsHigh)!) ...

Haskell Primer 008: 类型类

在 Haskell 中,类型类 (typeclass) 是定义类型行为的接口,如果一个类型是某类型类的实例 (Instance),那么它一定实现了该类型类所描述的行为。 这里需要注意,不要将 Haskell 中的类型类与一般面向对象语言中的类 (Class) 混淆。 举例说明,前面已经多次用到了相等性判断 == 函数,现在我们来看看它的类型: Haskell> :t (==) (==) :: Eq a => a -> a -> Bool Haskell> 这里出现一个新的事物 —— 符号 =>,它被用作类型约束 (Type Constraint),即...

Haskell Primer 007: 类型初识

有了前面一些基础介绍,现在我们开始介绍 Haskell 中关于类型的各种知识。 由于 Haskell 支持类型推导 (Type Inference),允许我们不对类型进行显示声明,但对于初学者,有时我们可能依旧需要类型检查来帮助我们理解和学习。在 GHCi 中,可以使用 :t 表达式 命令来检查类型: Haskell> :t 'a' 'a' :: Char Haskell> :t True True :: Bool Haskell> :t (1, 'a') (1, 'a') :: Num t => (t, ...

Haskell Primer 006: 模式匹配

模式匹配主要用来定义一些数据必须遵循的规则,根据他们来解析数据。 例如: sevencheck :: Integer -> Bool sevencheck 7 = True sevencheck x = False head' [x] = x head' [] = "error" head' (x:_) x 你也可以对数据进行引用,可以添加 引用名称@: firstletter :: String -> String firstletter "" = "empty" firstletter a...

Haskell Primer 005: 认识元组

学习了列表之后,我们再来认识一下元组 (Tuple)。 什么是元组 学习过 C++ 的朋友应该对这个词不陌生,元组允许我们将多个不同类型的值组合为一个单一值。元组与列表有些类似,但元组含有的内容可以是多种类型的,此外,元组的长度是固定的,将元素存入元组时就需明确这一点。 Haskell> (1,2) (1,2) Haskell> (2, 'a', "hello", 3.14) (2,'a',"hello",3.14) Haskell> 上面这样的数据都是元组,他们是使用圆括号 ((、)) 包含的一组元...

Haskell Primer 004: 玩玩列表

列表 (List),是一种单类型 (Homogeneous) 数据结构,用于存储一个或多个同类型元素,例如一系列的数字。 将一系列的元素使用方括号 ([]) 包含,元素间使用逗号 (,) 分隔,就形成了列表。列表允许嵌套。 Haskell> let aList = [1,2,3,4,5,435,213,546,34,54345] Haskell> aList [1,2,3,4,5,435,213,546,34,54345] Haskell> 此处的 let 被用于在 GHCi 中定义常量,let a = 0 与先在 .hs 文件中写入 a = 0 后通过 :l 加载的效果...

Haskell Primer 003: 函数定义

尝试了一些函数调用之后,紧接着了解一下函数的定义,这与调用的形式类似,只是多了函数行为的定义: 函数名 参数1 参数2 参数3 参数4 ... = 函数行为 例如: doubleIt x = x * 2 doubleThem x y = (x + y) * 2 将这两个函数定义语句保存在一个 .hs 文件中,例如 /Users/Meniny/func.hs。 然后将终端工作目录切换到 (cd) 该目录,进入 GHCi 并执行 :l func 命令: Haskell> :l func [1 of 1] Compiling Main ( func.hs, in...

OS X: How to get the path of Home directory

We all know that NSHomeDirectory() is retuning the sandbox root (not the home directory), [@"~" stringByExpandingTildeInPath] is doing the same thing. This /Users/username/Library/Containers/appID/Data is what's being returned. The only thing its really good for is setting a sane default to the fil...

Haskell Primer 002: 函数初探

通过上一篇我们简单尝试了 Haskell 语言,也许你没有察觉,其实我们自始至终都在使用着函数。 前面我们使用的运算符 +、-、*、/ 其实都是函数,像这样置于两个参数之间调用的函数,称为中缀函数 (Infix Function)。类似的还有前缀函数 (Prefix Function),通过函数名后空格并接以参数列表的形式调用,其中参数列表也以空格分隔。 Haskell> succ 1 2 Haskell> min 100 200 100 Haskell> max 20 99 99 Haskell> 其中 succ 表示获取后继,一个整数的后继,就是比它大 1 的下...

What's this?

The Night-City version of CaveOps inspired by Cyberpunk 2077. Not finished yet.

Pinned Message

The Founder and CEO of Infeca Technology.

Developer, Designer, Blogger.

Big fan of Apple, Love of colour.

Feel free to contact me.

反曲点科技创始人和首席执行官。

开发、设计与写作皆为所长。

热爱苹果、钟情色彩。

随时恭候 垂询