#Hello Edgerunners, welcome to the Night-City.

Welcome!

CSS Selectors Level 4

关于 CSS Selectors Level 4 阶段性新特性的总结。 Negation pseudo-class :not :not 用于将符合规则的元素剔除, 将样式规则应用于其他元素上。 在 CSS3 中已经有 :not, 不过在 CSS3 中只能使用简单的匹配规则, 例如 :not(p) 用来选择不是 <p> </p> 的元素。 在 CSS4 中, 可以应用更复杂的匹配规则, 但是同样地不允许嵌套使用, 例如 :not(:not(...))。 .negation { color: black; } .negation .default:not([data...

Cocoa: Sending mail via Python

偶然看到一个讨论, 需求很简单, 单纯的 SMTP 邮件发送。 这样的话我想 Python 应该是一个不错的选择, 那么首先我们需要写一个 Python 程序, 我们将它保存为 mail.py: import os import smtplib import json from email import Encoders from email.MIMEBase import MIMEBase from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart from email.Utils im...

Sparkle 2: Publishing an update

配置好一些基本的内容后,是时候发布一个新版本了。 归档 首先你需要归档你的应用。 如果你使用 DMG,归档后不要再次压缩 .dmg 文件 如果你使用 ZIP,你可以通过 ditto -c -k --sequesterRsrc --keepParent 应用路径 压缩包目标路径 创建 如果你使用 PKG,保证 PKG 文件与应用同名,并以上述的任意一种形式归档 默认状态下 Sparkle 会使用 GUI 进行安装 如果你使用 .sparkle_guided.pkg 后缀而非 .pkg 则 Sparkle 不会显示 GUI,而在后台安装,不需要用户确认每一步 安全性措施 为了提升安全性、避免中...

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 加载的效果...

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.

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

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

热爱苹果、钟情色彩。

随时恭候 垂询

Outer Square Inner Square