Session 10119 - 在 Safari 上开发浏览器插件
本文基于Session 10119梳理。本文首发于小专栏《WWDC23 内参》, 更多文章见《WWDC23 内参》
前言在 WWDC 2020 和 WWDC 2021,苹果宣布了支持 Chrome 风格的 Safari Web 插件。开发者现在可以在 macOS 和 iOS 的 Safari 上使用 Chrome 插件。在 WWDC 2022 上,Safari Web 插件又有了新的变化,引入了 Manifest V3,并且支持了 declarative net request。这使得 Safari Web 插件越来越接近 Chrome 插件。本文将介绍 WWDC 2023 Safari Web 插件的新特性,以及 Safari Web 插件的发展历程。最后,我们将介绍 Safari Web Extension 和 Chrome Extension 之间的区别。
本文将实现一个简单的 macOS 上的 Safari Web Extension,这个插件的功能是在网页上添加一个按钮,点击按钮后,可以前往网页的最顶端,暂时命名为 autoScroll。
什么是 Safari Web Ex ...
解决Swift Package Manager 下载过慢的问题
换了新 Macbook 差不多配完开发环境,项目用到 Swift Package Manager。之前在公司习惯了,都是配好代理,家里没有这个环境,swift package manager 安装起来很慢,网上找了一些方法,选择最实用的哪一种。
我成功的是最后一个方法,其他可以当作参考
方法一这方法我失败了,但还是列出来。
设置好全局代理,并且设置好系统变量
1export ALL_PROXY=socks5://ip:port
因为 xcode 不会走代理,所以要用 Terminal 打开 Xcode
1open -a Xcode.app
Done
不过我试了下没有成功
方法二首先还是设置好全局代理。
然后在项目根目录运行swift package resolve , resole 结束后,把目录下.build 文件夹中所有文件复制到 DerivedData 下 SourcePackages 目录中,重新打开项目。
方法三不需要代理,因为 swift package manager 的库大多都是 Github 托管,所以本质上是要解决访问 Github 过慢的问题。可以通过修改 ho ...
Swift用贝塞尔曲线做弧形进度条(Mac版)
项目需求,需要通过类似弧形进度条展示某项数据,在简单查阅后,根据几个作者的iOS版本进行修改,完成了Mac版本。利用贝塞尔曲线,不很复杂。
1. 主要思路
绘制背景layer层,设置lineWidth,fillColor,strokeColor与lineCap
为layer添加贝塞尔曲线路径
绘制前置进度条层,除strokeColor外均与背景layer相同
根据需求,暴露设置百分比的方法,同时会根据百分比改变进度条颜色。
2. 具体实现2.1 背景layer层绘制背景是一个CAShapeLayer,这是常规思路,为这个layer设置各种参数,其中lineCap是指路径起点终点的样式,默认.butt,我选择了.round
1234567let backgroundLayer = CAShapeLayer()backgroundLayer.frame = CGRect.init(x: 0, y: 0, width: rect.size.width, height: rect.size.height)backgroundLayer.lineWidth = self.lineWidthb ...
在Mac上安装gdb
公司为新员工每周安排了一节ETP课程,这周在上安全编码,课上一些实践内容在gdb调试下有助于理解,但发现Mac使用gdb似乎不是那么简单,特此记录以下大致流程.
通过homebrew安装gdb brew install gdb本以为这样就可以用了,gdb之后发现,Mac下需要对gdb进行签名.于是有了后面的流程.
打开Keychain Access, 在Menu中选择Certificate AssistantCreate -> a Certificate,在打开的窗口中创建证书.为证书命名,我使用了gdbcert,这个随意.下面的窗口分别选择
Identity Type:Self Signed RootCertificate Type:Code Signing勾选Let me override defaults checkbox
之后一路Continue,直到Specify a Location For The Certificate页面,在下拉菜单中选择System.这里可能会报错Certificate Error: Unknown Error =-2,147,414,00 ...
使用Azure自动化机器学习模型搭建一个分类模型
基于Azure提供的相关文档,搭建一个机器学习分类模型,建立的模型为自动化模型,即不需要代码,完全有Microsoft Azure提供的接口,建立一个用于预测某金融机构客户是否会继续认购定期理财产品的分类模型。
0. 准备工作
创建Azure账号
下载训练数据bankmarketing_train.csv
1. 创建worksapce用Azure进行试验、训练以及部署机器学习时,需要使用workspace将Azure订阅和其他资源绑定起来。Azure提供了一个网页控制台,即Azure Machine Learning Studio,用以建立管理workspace。
大致流程如下:
登录到Azure账号
在Azure左上角,选择Create a Resource
在搜索栏搜索“Machine Learning”
进入machine learning后,点击Create
随后对以下字段进行配置:
Field
Description
Workspace Name
输入用于标识工作区的唯一名称。使用易于记忆且区别于其他人所创建工作区的名称。
Subscr ...
the swift programming language-Day3
书接上回 继续讨论结构体和类.
1. 方法在Swift中,除了类之外,结构体和枚举都能够定义方法.与结构体相比,类还有如下的附加功能:
继承允许一个类继承另一个类的特征
类型转换允许在运行时检查和解释一个类实例的类型
析构器允许一个类实例释放任何其所被分配的资源
引用计数允许对一个类的多次引用
1.1 在实例方法中修改值类型结构体和枚举是值类型,默认情况下,值类型的属性不能像类一样在它的实例方法中被修改.如果需要对其进行修改,可以在修改的方法中选择mutating行为,便可以改变结构体的属性,并且在方法执行结束后写回到原始结构.甚至还可以给self赋予全新的实例,在方法执行结束后替换现存实例.
e.g.
1234567891011121314151617181920212223242526272829303132 struct Point { var x = 0.0, y = 0.0 mutating func moveBy(x deltaX: Double, y deltaY: Double) { x += deltaX ...
the swift programming language-Day2
1.函数1.1 函数基础 使用func声明函数,之后是函数名,参数名,最后用->表明返回值类型
e.g.1234func greet(person: String, day: String) -> String { return "Hello \(person), today is \(day)."}greet(person: "Bob", day: "Tuesday")
函数默认使用参数名作为参数的标识,也可以在参数名之前加标识,或者用_表明没有标识.
e.g.1234func greet(_ person: String, on day: String) -> String { return "Hello \(person), today is \(day)."}greet("John", on: "Wednesday")
返回值可以使用元组(tuple)来返回多个值,使用返回值时可 ...
the swift programming language-Day1
0.前言总是开新坑,总是不填坑。不过以前是兴趣,现在是工作需求,应该能有一点记录的。因为工作,开始了Mac APP开发,Objective-C还没上手,又要开始用Swift去做新项目。
不过自然不会去翻译书,只是记录一些遇到的有点新东西,顺便也方便以后的sharing。
1. 变量1.1 var和let 在swift中,定义常数使用关键字let,定义变量使用关键字let .
在使用let和 var时,需要声明变量的类型,如果没有明确说明,编译器会根据实际值自行确定类型.e.g.123456let implicitInteger = 70let implicitDouble = 70.0let explicitDouble: Double = 70var myVariable = 42 myVariable = 50//can be changed swift is a type safe language.
2. 字符串 数组 集合 字典 可以使用String()进行强制类型转换,使用\()把数据加入到字符串中.使用"""定义多行数组 1234567 ...
强化学习(Reinforcement Learning)学习笔记(一)
0. 前言因为入职之前需要完成公司安排的红心大战的task,所以在改论文之余稍微学习了一下强化学习。选择了Alpha Go第一作者David Sliver在伦敦大学的强化学习课程。
0.1 资料
课件
视频资源Youtube 或者b站搜索强化学习
推荐书籍:
Algorithms for Reinforcement Learning
Reinforcement Learning An Introduction second edition
0.2 课程目录
Lecture 1: Introduction to Reinforcement Learning
Lecture 2: Markov Decision Processes
Lecture 3: Planning by Dynamic Programming
Lecture 4: Model-Free Prediction
Lecture 5: Model-Free Control
Lecture 6: Value Function Approximation
Lecture 7: Policy Gradient ...
15道面试题
最近在准备各种实习面试,感觉基础很薄弱,所以找来一些基础恶补一下。在此博客看到15道据说出现频率很高的算法题,原博用C++实现,我决定用python重新完成一下。
目录1、合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元2、合并两个已经排序的单链表3、倒序打印一个单链表4、给定一个单链表的头指针和一个指定节点的指针,在O(1)时间删除该节点5、找到链表倒数第K个节点6、反转单链表7、通过两个栈实现一个队列8、二分查找9、快速排序10、获得一个int型的数中二进制中的个数11、输入一个数组,实现一个函数,让所有奇数都在偶数前面12、判断一个字符串是否是另一个字符串的子串13、把一个int型数组中的数字拼成一个串,这个串代表的数字最小14、输入一颗二叉树,输出它的镜像(每个节点的左右子节点交换位置)15、输入两个链表,找到它们第一个公共节点
本文中链表节点和树节点定义如下
12345678910class NodeL:#链表节点 def __init__(self,value): self.value = value self. ...