SwiftUI 的 DSL 语法分析(一)some View

范型 Generics 范型的意义在于可复用函数,比如要求写一个交换两个整数的方法,很简单: func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temp = a a = b b = temp } 那我再要求你写一个交换两个字符串,交换两个浮点数的方法呢?再重新写一遍?很明显是不可取的,所以编程语言都会有一种解决方案叫做范型,比如这里就可以用范型来解决这个问题。 func swapTwo<T>(_ a: inout

  • ninjiacoder
    ninjiacoder
3 min read

【翻译】如果我想给 Swift 编译器做贡献我该学什么

前几天在看到 iOS 老司机周报上看到了这个帖子,在 Swift 论坛上有人提了这一个问题: 我想在 2019 年给 Swift 编译器做一些贡献 我大部分的软件开发经验都是在 iOS 开发商,从来没有做过编译器相关的工作,自从 3 年前在大学期间学习数据结构和算法再也没有接触过 C> 有没有特定的 C++ 知识需要了解?有没有编译器开发相关的东西需要学习。 为什么别人的目标这么宏伟! 楼下有很多大佬回答了,这里看到了 Alejandro 的回复,很具体。下面是这个回答的翻译。 首先要说的是,不同的人学习方式不同,

  • ninjiacoder
    ninjiacoder
10 min read

xv6 源码之 spinlock

What’s lock? Why lock? What’s lock? 多个进程可能对同一片地址空间操作并共享其中的数据结构,所以需要一种机制防止他们互相干扰。所以提出了锁,锁提供互斥功能。如果只能在持有特定锁时才能操作某个数据结构,就能保证在同一时间只有一个进程操作这个数据结构。 Why lock? 竞争条件 比如在 xv6-book 中提到的例子: 1 struct list{ 2 int data; 3 struct list *next; 4 }; 5 6

  • ninjiacoder
    ninjiacoder
6 min read

grep、管道与数据重定向

Motivation最近在做操作系统的实验,经常用到 grep 命令和管道,之前也经常用到这样的命令:ps aux | grep nginx 但是对于很多 grep 和管道的用法还不是很熟悉,所以干脆就单独拿出来学习一下。grep维基百科给出了 grep 命令的介绍:在给出文件列表或标准输入后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本。grep  的全称是 global regular expression print ,所以其实 grep 命令就是 linux 下的一个强大的使用正则的文本搜索命令。比如上面用到的例子

  • ninjiacoder
    ninjiacoder
4 min read
macos_develop

如何监听 NSTextField 的焦点事件

最近在写一个 MacOS 的小应用,其中有一个小需求是:点击输入框时显示几个选项,而失去焦点时就不显示了。具体效果就像滴答清单 MacOS 版中创建新任务的效果差不多。失去焦点后获取焦点后找了很多资料,终于想出了一个解决办法。Step1 How to get onFocus/onBlur events参考资料:onFocus/onBlur events (or becomeFirstResponder/resignFirstResponder) on NSTextField Cocoa Swift这里的解决办法是写一个 NSTextField 的子类,然后重写 mouseDown 方法和

  • ninjiacoder
    ninjiacoder
4 min read
iOS

iOS 内存管理浅谈

之前一直关注业务的实现,几乎没有研究一些基础的较为底层的知识,趁着春招面试的机会来学习一下。首先学习的是 iOS 中内存管理的内容。堆和栈什么是堆?什么是栈?栈(stack)大家接触的应该比较多,是一种先进后出的数据结构,但是堆(heap)可能就没有那么了解了。堆,又称为优先队列(priority queue)。队列是先进先出(FIFO),堆也一样,堆底插入元素,堆顶取出元素,但不是按入堆顺序排列,而是按一定的优先顺序排列。内存分配中的栈和堆堆栈空间分配栈由操作系统自动分配、释放,存放函数的参数值,局部变量等,其操作类似数据结构中的栈;堆一般由程序员分配,若程序员不释放,

  • ninjiacoder
    ninjiacoder
8 min read

谈谈「全周期工程师」与团队开发

全栈工程师已经过去时,现在是全周期工程师进行时最近有一个新的名词出现:「全周期工程师」,但看了这张图,似乎并没有那么陌生,因为作为一个正在走上独立开发道路上的我来说,已经很熟悉了。在独立开发的过程中,你不仅仅是一个程序员,你更是一个产品经理,设计师,运维,客服……所以与其说独立开发者是「全栈工程师」,还不如说是「全周期工程师」。团队开发这个寒假的前半段在学习准备春招和做自己的独立开发工作,后半段参与了两个团队项目的开发。结合着之前在@一周CP实习的经验谈一谈团队开发首先是学校同学自发组织的一个开源组织,正在开发这个组织的第一个正式产品(1.0.0版本目前进度已经90%以上)。主要参与者3人,两个后端,一个前端。讲一讲这个团队吧,两个后端都是学长(大四),一个暑假在微博

  • ninjiacoder
    ninjiacoder
5 min read

谈谈使用 Flutter 独立开发的感受

最近趁着寒假的时间,上架了一个「记录倒数日和纪念日」的应用,其实很惭愧,在最初几乎没有完整功能的时候就上架,美其名曰「为了激励自己先上架」;再到一次大版本更新,上架前都不好好做好测试,导致了在 Price Tag 上宣传之后用户反馈并不好,这里做个自我反省。为什要做独立开发首先本来就在学生时代,除了平时练手的小 demo 就基本碰不到什么项目,做独立开发的目的之一就是将所学到的开发技能运用起来;其次,在去年还是前年的时候,开始关注图拉鼎,接着认识到了很多大佬,一些同龄或者大几届的 WWDC Scholarship Winner 的学长,都在做一些独立开发的工作,再后来知道 61 老板和图拉鼎一群人创办了「

  • ninjiacoder
    ninjiacoder
3 min read
开发

钉钉机器人的消息通知实现——认识 webhook

今天在钉钉的群组里面加了一个 Coding.net 的机器人,但是按照官方给出的设置方法不能实现代码 commit 的消息提醒,于是尝试了使用自定义机器人进行配置,顺便了解了一下什么是 webhook什么是 webhook网络钩子是“用户定义的HTTP回调”。网络钩子通常被某些事件激活,比如将代码推送到源或评论博客。当此事件发生时,原网站将向为网络钩子配置的URL发送HTTP请求。用户可配置它们引发网页上的事件以调用另一个网站的行为。此操作可为任何事件。这是来自维基百科的定义,webhook 的中文直译叫做“网络钩子”,“网络钩子通常被某些事件激活,比如将代码推送到源或评论博客”。我觉得这句话很好的概括了 webhook 是什么和适用场景。webhook 与 API 的区别API 是如何工作的API 的工作方式就像上中画的这样,

  • ninjiacoder
    ninjiacoder
4 min read
Flutter

Flutter 中的本地存储与 sqflite

最近在写 Flutter 的应用,因为 iOS 版已经上架了,但是我想的功能还没有完全做完,而且牵扯到了本地存储,于是走了很多坑。 Flutter 中的本地存储在参考文章 1 中提到了三种本地存储的方法:Preferences 存储文件数据库 sqlite因为在我的开发过程中只用到了 Prefernces 和 sqlite,所以主要围绕这两个,当然 sqlite 才是重点Preferences 存储写过原生安卓或者iOS应用的都知道 Shared Preferences and NSUserDefaults。在 Flutter 中也有这样的存储方式,不过需要第三方组件 shared_

  • ninjiacoder
    ninjiacoder
5 min read
碎碎念

2019 博客新的开始

最近有不少同学来问我说,诶你博客挂了吗?在这统一回复一下:原来rayzhao98.top的域名指向的博客首页是在一台日本服务器上,主要是用来搭SS用的,后来莫名其妙挂了,然后直接destroy了那台机子,首页也跟着没了。不过去年的hexo博客依然还在。今天得空重新审视了一下自己的博客,大部分博客还是对别人文章的浓缩,原创的文章很少,2019年打算写一些高质量的原创,而不再是简单的去浓缩别人的文章。因此原来的hexo博客依然会保留,不过会启blog2018的新子域名,而这边将是全新学习成果的展示。望周知

  • ninjiacoder
    ninjiacoder
1 min read

2018 年终总结

没有记日记的习惯,似乎很多细节都不记得了,去年写年终总结的时候,正值「少数派」的年终文章征集,记得那时候领到了「Todoist」一年的会员,可惜并没有一直坚持下去,之后我也会谈一谈这一年用到的效率工具学习课程侥幸大二一年又低分飘过留在培优班,总结来说这一年花在这些大学课程上的时间还是不够多,可能对这些课程提不上兴趣,感觉这些课都没有什么用。不过今年看了一些国外大学的公开课,比较好的有 MIT 的算法导论MIT 6.006 Introduction to Algorithms, Fall 2011 - YouTube以及 CMU 的 CSAPPCMU: 2015 Spring: 15-213

  • ninjiacoder
    ninjiacoder
7 min read

Subscribe to NINJIACODER | 忍者小屋