666
dengjiangszhan
终点开始
于此,梵高成了我最钟爱的英雄
牛逼,某一天
展开
-
git 大法
git log --reverseshows commits from start.chmod u+x /Users/jzd/Downloads/youtube-dldiff 技术:git diff @~2..@git 的 commit ,就是 snapshot原创 2021-04-29 17:11:05 · 52 阅读 · 0 评论 -
Snap Kit 增强
import Foundationimport UIKitimport SnapKitextension ConstraintMakerEditable{ @discardableResult public func insetL() -> ConstraintMakerEditable { self.description.constant = 16.constraintOffsetTargetValue retur.原创 2021-04-16 18:03:29 · 150 阅读 · 0 评论 -
Android 中,library 的使用
方法一:app 下面的build.gradle 中dependencies { implementation 'com.google.android.exoplayer:exoplayer:' + project.ext.exoPlayerVersion}原创 2021-04-13 16:46:43 · 560 阅读 · 0 评论 -
git 技巧
➜ Music git config --global https.proxy 127.0.0.1:4780➜ Music git config --global http.proxy 127.0.0.1:4780git config --global --unset http.proxygit config --global --unset https.proxy➜ git config --global https.proxy 127.0.0.1:4780➜ git config --gl原创 2021-04-09 15:24:48 · 91 阅读 · 5 评论 -
属性存取数据:使用 runtime, 让 UserDefaults 飞
封装 UserDefaults,用属性的方式存取数据告别字符串硬编码,统一形式,不再有各种类型存取方法double(forKey: _ )integer(forKey: _)主要有参考 woshiccm/RCUserDefaults调用 print(UserDefaults.std.name) UserDefaults.std.name = "two" print(UserDefaults.std.name)配置添加属性原创 2021-04-08 14:44:27 · 74 阅读 · 0 评论 -
YYModel 源码分析:模型转字典
YYModel , 模型字典,自动转化,模型转字典, 主要是通过运行时,把模型的属性名取出来,递归构建字典YYModel 设计 4 个模型,记录类与其属性信息,类 + 信息记录类属性 + 信息记录属性两个用于类,两个用于属性如果从上到下,逐个包含,就很清晰YYModel 为了方便逻辑处理,四个模型包含交叉,有点绕本文通过模型转字典,看下其运转调用: NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8原创 2021-04-02 15:04:21 · 1729 阅读 · 0 评论 -
periphery & SPM
Swift Package Manager (SwiftPM)periphery,https://github.com/peripheryapp/periphery先是安装,然后一通选择,build 和 index 建立索引的时间,很长➜ Lumiere git:(plus_One) brew tap peripheryapp/periphery && brew install periphery==> Tapping periphe...原创 2021-03-30 17:14:33 · 291 阅读 · 0 评论 -
防火墙技术
防火墙技术原创 2021-03-26 15:23:45 · 56 阅读 · 0 评论 -
git 技巧
git diff 当前,和当前的前 10 操作的区别仅仅列出文件git diff --name-status HEAD~10git diff HEAD~10git diff 当前,和当前的前 10 操作的区别list commits since certain commit?git log 2766578b9ea3d8cddbfd9b775b9cfcdaff6fe7a3..git log <hash...原创 2021-03-20 03:37:04 · 164 阅读 · 1 评论 -
iOS 中的标记配置模式
iOS 开发中,有一种常用的模式,标记配置,mark & configure步骤是:标记, mark状态恢复,reset配置, configure本文通过三个例子,来说明前两个例子,是选中状态例子一,按钮点击三个按钮,选中一个,其余两个取消选中常规做法操作指定,reset 剩余代码的维护成本大class ViewController: UIViewController { @IBOutlet weak var lhs: StateBtn!原创 2021-03-13 22:47:02 · 113 阅读 · 0 评论 -
套路继续, .txt 小说阅读器功能开发
1, 解决一个 bug正文结尾 (最后一行最后一个字)跟右边界, 有多余的空白间隔Core Text 的渲染流程,就是富文本绘制从流程上看,感觉这一页的文字分配少了,给他加点字,就满了// 拿到一个章节的富文本,计算出每一页的富文本,从哪里开始,哪里结束// 得到一个范围的数组,就知道了每一页的文字class func pagingRanges(attrString:NSAttributedString, rect:CGRect) ->[NSRange] { var r原创 2021-01-25 22:22:24 · 422 阅读 · 0 评论 -
牛客网: [编程题]三色球
牛客网: [编程题]三色球有红、黄、蓝三种颜色的气球。在牛客王国,1个红气球+1个黄气球+1个蓝气球可以兑换一张彩票。2个红气球+1个黄气球可以兑换1个蓝气球。2个黄气球+1个蓝气球可以兑换1个红气球。2个蓝气球+1个红气球可以兑换1个黄气球。现在牛牛有a个红气球,b个黄气球, c个蓝气球,牛牛想知道自己最多可以兑换多少张彩票。func solve ( _ a: Int, _ b: Int, _ c: Int) -> Int { let low =原创 2021-01-21 00:11:14 · 821 阅读 · 0 评论 -
2, 网络的组成
#### hub 和 switch , 可以形成局域网 lan原创 2021-01-14 09:40:55 · 155 阅读 · 0 评论 -
Mac 文件处理库,源码分析
JohnSundell/Files 这个文件处理库,封装的挺好本文看一下其源代码设计磁盘上的分为两种,文件和文件夹public enum LocationKind { case file case folder}文件和文件夹的共性是,他有一个路径,操作他们,都要 FileManager将文件和文件夹的共性,封装为 Storage增删改查的具体实现,交给这个类public final class Storage{ fileprivate private(se.原创 2021-01-11 21:30:26 · 105 阅读 · 0 评论 -
UMeng 统计 swift 这么处理
UMeng 统计 swift 这么处理 :看文件夹大法好,哪个文件夹里面有MobClick,就用那个 framework使用//导入UMAnalytics的OC的头文件#import <UMCommon/MobClick.h>取代//导入UMAnalytics的OC的头文件#import <UMAnalytics/MobClick.h>...原创 2021-01-08 15:29:41 · 236 阅读 · 0 评论 -
Audio Kit 查看文件波形的相关源代码,easy o
Audio Kit 查看文件波形的相关源代码,看了下,挺简单的拿到音频采样数据,用视图去展现,完了1,拿到音频采样数据获取的浮点数数据,长这样-0.014434814-0.016998291-0.0184021-0.017547607// ...获取的浮点数数据,在 -1 到 1 之间1.1 拿到音频文件let url = Bundle.main.resourceURL?.appendingPathComponent("Samples/beat.aiff")let file =原创 2020-12-29 01:36:21 · 230 阅读 · 0 评论 -
Swift 文件处理: 强迫症文本解析
背景学习 Swift 三方库源代码的时候,Xcode 里面的目录结构,与实际工程的文件结构不一致调试不方便一般 Xcode 里面看到的代码文件,是有层次的。文件夹里面的代码,都在一层,不好找Xcode 里面看到的代码文件,一个文件夹下面的太多了,不够细致根据代码里面的文件结构,创建相应的文件夹,把代码文件移入,好一些有一点强迫症的感觉本文完成第一步,文本解析案例:学习 AudioKit/AudioKit 有一个库 AudioKit/Cookbook,本文整理他的代码效果:原创 2020-12-26 01:57:22 · 170 阅读 · 0 评论 -
SwiftUI 动画,三板斧
Swift UI 是数据驱动,不是事件驱动数据驱动与事件驱动的对比,例子: 添加一个 popUp 视图数据驱动, 最上方本来就有一个 popUp,用数据控制他的显示与隐藏事件驱动,是创建一个 popUp,添加在最上面事件驱动,可能重复创建与添加,数据驱动,安全些效果 1,展开与收起@State 修饰的属性, 作为驱动数据源, source of truth,@State 修饰的属性改变,该 View 刷新@State var showMoon: String? = nil fu.原创 2020-12-22 22:16:12 · 295 阅读 · 0 评论 -
片段循环播放器的两种实现思路
给一个 mp3 音频资源,循环播放其中的一个片段本文说一下,两种实现的思路第一种,主要用 seek 方法把整个音频资源分配给播放器,跳转到片段开始的地方,就是 seek 过去,正常播放到片段结尾,再 seek 到片段开头面临的挑战: seek 会有杂音每一次 seek ,就是先调用 AVAudioPlayerNode 的 stop 方法,把分配 AVAudioPlayerNode 的音频缓冲资源清空,再把分配音频资源的指针,放到片段开始的地方,重新给 AVAudioPlayerNode 分配原创 2020-12-17 12:05:57 · 742 阅读 · 0 评论 -
简单看看,Audio Kit 录音部分的源代码
一般录音,可以简单使用 AVAudioRecorder,本文介绍下,Audio Kit 录音部分的源代码( Audio Kit 最强的是,Midi )录音调用 let engine = AudioEngine() var recorder: NodeRecorder? let mixer = Mixer() override func viewDidLoad() { super.viewDidLoad()原创 2020-12-16 17:39:38 · 579 阅读 · 0 评论 -
简单学习 Audio Kit 中的格式转换技巧
格式相关:支持的输出格式,有 4 个:[“wav”, “aif”, “caf”, “m4a”]其中 caf, 是 core audio format, 支持非压缩格式,和压缩格式 aacwav, 非压缩格式m4a, 压缩格式,里面数据一般格式是 aac 压缩格式不支持 mp3 转出,音频转 mp3, 一般采用 lame 这个库支持的输入格式:[“wav”, “aif”, “caf”, “m4a”“mp3”, “snd”, “au”, “sd2”,“aif”, “aif原创 2020-12-14 18:11:51 · 333 阅读 · 0 评论 -
歌曲网站,爬取 mp3 和 lyric
从歌曲网站,获取音频和歌词的流程:1, 输入歌曲名,查找网站中存在的歌曲 id2, 拿歌曲 id 下载歌词 lyric简单的 url 拼接3, 拿歌曲 id 下载音频 mp3先用一个 POST 请求,拿 ID 取音频资源路径,再用 GET 请求,拿到音频资源4 个网络请求,解决,搜索歌曲,获取歌词,获取音频资源路径,获取音频资源注意的是,4 个网络请求,都要模拟正常的浏览器请求,GET 请求,需要配置请求头,POST 请求,需要配置请求头和请求体1, 查找原创 2020-11-29 01:27:27 · 696 阅读 · 2 评论 -
Core Audio 中 Audio File Service 这样使用
Core Audio 中 , Audio File Service 三步走, 本地文件,转音频处理 ID 通过 AudioFileOpenURL 拿音频处理 ID , 获取信息的内存大小 AudioFileGetPropertyInfo 那前面两个,获取信息 通过频处理 ID 和信息的内存大小 ,获取信息AudioFileGetPropertyint main (int argc, const char * argv[]) { // .原创 2020-11-16 11:13:42 · 104 阅读 · 0 评论 -
编程感想: 音频 / 网络
网络流, stream,流,就是一块一块,保证数据顺序和安全的,数据块 block其他语言调用 C Java, with the Java Native Interface Ruby, via RubyInline Core Audio 把音频处理的框架,分为两大类 处理音频流的 iOS, Audio Engine,分为三种, Audio Units Audio Queues 建立在 Audio Units 之上录音就是, 输..原创 2020-11-16 10:17:32 · 58 阅读 · 0 评论 -
iOS 自定义相机,拍照旋转
1 , 自定义相机,拿到照片,校正方向AVCapturePhotoCaptureDelegate 的这个代理方法func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) 拿照片,extension ZLCustomCamera: AVCapturePhotoCaptureDelegate { public原创 2020-11-15 19:58:23 · 955 阅读 · 0 评论 -
python 下载大文件
1, 下载,肯定要看进度优秀的 progress bartqdm安装sudo python3 -m pip install tqdm1.1, 加环境变量#!/usr/bin/python3from tqdm import tqdmimport requests上一步安装 tqdm 的是 python3 ,python3 关联到了 tqdm 这个库,不加环境变量,走默认的 python 2.7,不是在 python 2.7 上,安装的这个库 tqdm2 ,原创 2020-11-12 17:38:28 · 306 阅读 · 1 评论 -
iOS 的 HTTP 返回字段
iOS 的 HTTP 返回字段response.expectedContentLength对应要下载的文件大小extension Downloader: URLSessionDataDelegate { public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @escaping (URLSes原创 2020-11-11 09:57:59 · 105 阅读 · 0 评论 -
iOS 音频处理, AVAudioEngine
音频处理的格式有 ASBD , AudioStreamBasicDescription和 ASPD, AudioStreamPacketDescription有 ASPD ,就是压缩音频,例如 mp3let isCompressed = packetDescriptionsOrNil != nil没有 ASPD ,就使用 ASBD, 就是非压缩音频,例如 wav压缩音频,里面的数据不均匀,每个包含有的帧数据不等func ParserPacketCallback(_ context: Unsaf原创 2020-11-11 09:45:05 · 579 阅读 · 0 评论 -
UIScrollView 与 SnapKit
UIScrollView 与 SnapKitimport SnapKitclass ResultCtrl: UIViewController { var containerView = UIScrollView() lazy var img = UIImageView() lazy var tShowD = UILabel() var heightConstraint: ConstraintMakerEditable?原创 2020-11-10 10:27:50 · 247 阅读 · 0 评论 -
python 项目,解决引用报错,例子是 youtube-dl
python 项目,有一个引用报错相对路径引用问题解决:main.py 文件中,用import os, sysdir_path = os.path.dirname(os.path.realpath(__file__))parent_dir_path = os.path.abspath(os.path.join(dir_path, os.pardir))sys.path.insert(0, parent_dir_path)替换import sysif __package__ is原创 2020-10-26 10:37:57 · 320 阅读 · 0 评论 -
openGL, mac 上 glad 的环境搭建
先把 glad 的库,下载到 mac 的通用文件夹上 glad 官方网站glad.dav1d.de为 mac 配置下 把刚下载的两个文件夹 glad 和 KHR, 拖到 /usr/local/include 刚下载的文件,还有一个 glad.c拖到创建的、要用的项目中...原创 2020-10-21 09:53:48 · 668 阅读 · 0 评论 -
python 自娱: code 至于,可执行的二进制文件
Mac 上,把 python 代码,编译为可执行的二进制文件 打包工具 pyinstaller ,先安装 sudo python3 -m pip install pyinstallersudo, 需要管理员的账号权限原来的文件,这样调用➜ petit git:(bee) ✗ python3 /Users/jzd/Downloads/master\ 3/0.py元気ですか 使用 pyinstaller 编译 ➜ petit git:(bee) ✗ pyinstal原创 2020-10-20 17:11:18 · 207 阅读 · 0 评论 -
RunLoop 的运行逻辑:子线程,相当于一个命令行
RunLoop 的运行逻辑:UI 界面的刷新、定时器的处理、点击事件的处理、自动释放池什么时候释放,最终都是由 RunLoop 决定什么时候来做的这个事情。点击事件的处理:先走CoreFoundation 的__CFRunLoopDoSource0,再走CoreFoundation 的__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__,过了,就进入UIKitCore 框架RunLoop...原创 2020-08-10 01:20:55 · 270 阅读 · 0 评论 -
来一点调试技巧,lldb 的 Scripting Bridge 框架,新手友好的 Debug 进阶
常常羡慕前端开发、RN 、Flutter 和 SwiftUI 开发的 live rendering, 即时渲染别家项目的框架,UI 开发,修改了,很容易渲染出来。无需每次手动漫长的编译其实,lldb 自带了一个 python 解析器。要调试代码逻辑,不需要重新编译, kill 进程。当前进程下,可以直接调试。常用的是,苹果封装的一些命令。也可以根据自己的工程,自己写定制化的 python ...原创 2020-01-29 23:44:19 · 457 阅读 · 1 评论