项目重构

数据结构设计

摒弃原来的多层结构,只用一层数据结构设计,并且使用relationships 关系

account设计(兼顾账户和第二类型)

  1. accountID

  2. balance(余额)

  3. counted

  4. icon

  5. name

  6. note

  7. type

    1. 支出
    2. 收入
    3. 普通账户
    4. 信用账户
    5. 投资账户
    6. 借贷账户
  8. billingData: 账单日 credit

  9. creditLimit: 额度 credit

  10. repaymentDate: 还款日 credit

  11. rate: 百分比:利息什么的 installment , loan

  12. autoCalculate installment, loan

  13. installmentType : installment, loan

  14. destinationAccount : loan

  15. installmentTimes: 期数 loan

  16. installmentType: 年月日 loan

  17. isDEBJ: 等额本金 loan

  18. isMoneyIn: 进、出 loan

  19. person: 借贷对象 loan

  20. state: 是否结清 loan

  21. timesInterest: 单次利息 loan

  22. timesLeft: 剩余期数 loan

ios 读取csv文件

最终代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
      
.fileImporter(isPresented: $imported, allowedContentTypes: [.delimitedText], allowsMultipleSelection: false){ result in
do {

guard let fileUrl: URL = try result.get().first else {return}

if (CFURLStartAccessingSecurityScopedResource(fileUrl as CFURL)) { //不在这个if里就出错,唉
//理由:iOS的沙盒机制保护需要我们申请临时调用url的权限

guard let data = String(data: try Data(contentsOf: fileUrl), encoding: .utf8) else { return }


handleSSJdataCSV(data: data)
//done accessing the url
CFURLStopAccessingSecurityScopedResource(fileUrl as CFURL)
}
else {
print("Permission error!")
}
} catch {
// Handle failure.
print ("error reading: \(error.localizedDescription)")
}
}

//数据格式处理代码
func handleSSJdataCSV(data : String){
var csvToStruct = [SSJdata]()

//split the long string into an array of "rows " of sata. each row is a string
//detect "/n" carriage return , then split
var rows = data.components(separatedBy: "\n")

let columnCount = rows.first?.components(separatedBy: ",").count
//remove the header rows
rows.removeFirst()

//loop around each row and split into columns
for row in rows{
let csvColumes = row.components(separatedBy: ",")
if csvColumes.count == columnCount{
let genericStruct = SSJdata.init( raw: csvColumes)
csvToStruct.append(genericStruct!)
}

}
print(csvToStruct)

for singleRecord in csvToStruct{
print(singleRecord.recordType)
}
//done accessing the url
}

参考文献:
https://stackoverflow.com/questions/67731694/how-do-i-save-an-imported-file-name-as-string-after-importing-file-in-swiftui

1
2
3
4
5
//不太管用
let fileUrl = try res.get()
self.fileName = fileUrl.lastPathComponent // <--- the file name you want

let fileData = try Data(contentsOf: fileUrl)

https://betterprogramming.pub/importing-and-exporting-files-in-swiftui-719086ec712
有大用
https://github.com/acwright/ImportExport
上面那个链接内容的示范工程

PT站点升级相关要求

Power User Elite User Crazy User Insane User Veteran User Extreme User Ultimate User Nexus User
学校 50G
4周
2.0
4w做种积分
100G
8周
2.5
8w做种积分
300G
15周
3.0
15w做种积分
500G
25周
3.5
25w做种积分
1TB
40周
4.0
40w做种积分
2TB
60周
4.5
60w做种积分
5TB
80周
5.0
80做种积分
10TB
100周
5.5
100w做种积分
阿童木
海带
葡萄

u2
50G
4周
0.95
120G
8周
1.55
300G
15周
2.05
500G
25周
2.55
750G
40周
3.05
1TB
60周
3.55
1.5TB
80周
4.05
3TB
100周
4.55
备胎(除分享率外同上)
欧神
1pt吧(类似)
老师
1.05 1.55 2.05 2.55 3.05 3.55 4.05 4.55
猫站(周数有所不同) 5 10 15 25 30 35 40 45
Area 50G
4周
1.05
120G
8周
3
300G
10周
3.5
750G
12周
4
1TB
20周
4.5
2TB
25周
5
5TB
30周
5.5
10TB
40周
6
铂金家 200G
4周
1.0
2w分
350G
8周
1.1
5w分
500G
15周
1.2
20w分
1TB
25周
1.3
40w分
2TB
40周
1.5
60w分
3TB
60周
1.5
80w分
4TB
80周
1.7
100w分
6TB
100周
1.8
120w分
馒头 200G
4周
2
400G
8周
3
500G
12周
4
800G
16周
5
1TB
20周
6
2TB
24周
7
2.5TB
28周
8
3TB
32周
9
52pt 50G
4周
1.05
120G
8周
1.55
300G
15周
2.05
1.5TB
25周
2.55
2.5TB
40周
3.05
3.0TB
60周
3.55
4.5TB
80周
4.05
5TB
100周
4.55
我堡
柠檬
100G
5周
2
350G
10周
2.5
500G
15周
3
1TB
20周
3.5
2TB
25周
4
4TB
30周
4.5
6TB
40周
5
8TB
52周
5.5
天空 200G
5周
2
500G
10周
2.5
1TB
15周
3
2TB
20周
3.5
4TB
25周
4
6TB
30周
4.5
8TB
45周
5
10TB
65周
5.5
杜比 120G
2周
2.0
256G
4周
2.5
512G
8周
3.0
768G
12周
3.5
1TB
16周
4.0
2TB
20周
4.5
4TB
24周
5.0
8TB
48周
5.5
ttg 50G
5周
1.1
150G
8周
2.0
250G
8周
2.0
500G
8周
2.5
750G
16周
2.5
1TB
24周
3.0
1.5TB
24周
3.5
2.5TB
24周
4.0
3.5TB
32周
5.0
家园 128G
5周
1.6
4w分
256G
5周
1.9
10w分
512G
10周
2.3
18w分
768G
10周
2.7
28w分
1TB
20周
3.2
40w分
2TB
20周
3.7
54w分
4TB
30周
3.6
70w分
8TB
30周
4.1
100w分
50G
5周
1.0
3200
150G
10周
1.5
19200
300G
15周
2.0
76800
500G
30周
2.5
256000
1TB
60周
3.5
64w
2TB
90周
4.0
128w
3TB
120周
4.5
192w
4TB
150周
5.0
256w

摘录-关于工作、欲望、生活、健康

我觉得我最大的极简,就是少受累,保养身体,珍爱自己的生命。

挑一个性价比最高的工作,每天八小时,双休,时薪约70元。我知道我同学有选择了996的,他们挣得很多,时薪大约是我的一半。

挑一个人际关系冷漠很少团建聚餐的工作。这样不是因为我不喜欢热闹,我只是不喜欢攀比。别人炫耀名牌首饰包包名车名表的时候,我就当看不见。别人抱怨自己月光欠花呗,那都与我无关。

我和我老公都是低欲望的人,能靠家长出首付,我们就是要理直气壮的啃老,也不会996去伤身体挣那几个臭钱。既然有的选,那我们就是不肯996。毕竟我爸妈当年也是靠姥姥姥爷买的房,我们将来有钱了也会接济孩子,这样想来可不就是理直气壮吗。

脱离世俗,想想自己的理想。想想自己真正喜欢做什么。同事有贷款买豪车充门面的,我俩工薪阶层工程师,上班又不远不用车,要门面干嘛,买个十几万的车,到处去玩就足够了。

人家梦龙雪糕都不要脸的不用牛奶了,什么玩意,那些外头买的东西,又贵又舍不得用好材料还好意思说为了环保。我就自己冻酸奶雪糕吃,自己拿纯牛奶做冰淇淋。还有自己蒸馒头,烤肉,打豆浆,做果冻,奶茶,柠檬红茶。真特么的香。反正下班有的是时间。

我们还要互相捏肩捶腿,好好保养。天热喝绿豆汤,天冷喝姜汤,周末自己磨个咖啡,香飘整屋。

我每天晚上都能看着老公送我的一架古筝,弹几个曲子,总觉得好幸福啊,这可比买首饰好听多了,还要啥自行车。

我们晚上常坐在阳台上,喝点小酒,看星星看月亮。周末我喜欢玩手机,听音乐,看看闲书。

我家的老人,都是五十多就不用务农或上班了,要么半退休。能够身体健康的直到90岁,天天晨练逛公园,自己做饭,还能领几十年退休金。身体好是真的好。

作者:鸿飞满西洲

链接:https://www.zhihu.com/question/313020218/answer/2077887482

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

黑群晖安装QB

  1. 打开docker, 输入qbittorrent, 找到 linuxserver/qbittorrent
  2. 下载
  3. 创建qb文件夹,改everyone权限,内建两个新子文件夹,config和downloads
  4. docker映像设置中添加卷来映射文件夹
  5. 改端口,第三个tcp是webui端口,其他的也要改,默认的6881被大多数站点屏蔽。
  6. 配置环境变量
  7. 下一步。确认,运行。
  8. 登录qb界面,默认账户admin,默认密码 adminadmin
  9. 修改qb的连接中的监听端口为修改过的端口

意外情况:QB无法打开,提示错误:/usr/bin/qbittorrent-nox: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory
解决方法:

  1. ssh 到 群晖,然后
    docker exec -it qbittorrent4.3.3 /bin/sh
    qbittorrent4.3.3 是我容器名,参照自已的改

  2. apt update

  3. apt install binutils

  4. strip –remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5

  5. 重启容器

参考文献:
http://www.360doc.com/content/19/0601/19/27498460_839666036.shtml
https://post.smzdm.com/p/a7do76vd/
https://github.com/linuxserver/docker-qbittorrent/issues/103

SwiftUI页面跳转

  1. TabView

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    struct ContentView: View {
    @State private var selection : Tab = .home
    enum Tab {
    case home
    case journal
    case statistics
    case settings
    // case test
    case test2
    }
    var body: some View {
    TabView(selection: $selection){
    HomeView()
    .tabItem {
    Label("主页", systemImage : "house")
    }
    .tag(Tab.home)
    ViewJournal()
    .tabItem {
    Label("流水", systemImage:"newspaper")
    }
    .tag(Tab.journal)

    ViewStatistics()
    .tabItem {
    Label("统计", systemImage:"waveform.path.ecg")
    }
    .tag(Tab.statistics)

    ViewSettings()
    .tabItem {
    Label("设置", systemImage:"seal")
    }
    .tag(Tab.settings)
    }
    }
    }
  2. NavigationLink

    1
    2
    3
    4
    5
    6
    7
    8
    NavigationView {
    VStack {
    NavigationLink(destination: Text("点击后显示的视图内容")) {
    Text("可点击内容")
    }
    }
    .navigationBarTitle("这是顶部标题")
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    NavigationView {
    List(0..<3) { i in
    NavigationLink(
    destination: Text("点击列表页后进入的页面 (i)")) {
    Text("列表序号 (i)")
    }
    }
    .navigationBarTitle("标题")
    }
  3. sheet向上拉起

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    import SwiftUI
    struct ContentView:View {
    var body: some View{
    TestSheet()
    }
    }
    struct TestSheet: View {
    @State private var popoverIsShown = false
    var body: some View {
    Button("显示 Sheet") {
    self.popoverIsShown = true
    }
    .sheet(isPresented: self.$popoverIsShown) {
    RandomSheet(popoverIsShown: self.$popoverIsShown)
    }
    }
    }

    struct RandomSheet: View {
    @Binding var popoverIsShown: Bool
    var body: some View {
    Button("关闭") { self.popoverIsShown = false }
    }
    }
  4. ActionSheet

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Button("显示Sheet页") {
    showingSheet = true//点击后改显示
    }
    .actionSheet(isPresented: $showingSheet) {
    ActionSheet(
    title: Text("你想在这个页面放点啥?弹出一个提示,还可以修改信息等操作"),
    message: Text("如果要关闭此页只需要向下滑动或者点击下面的按钮..."),
    buttons: [.default(Text("关闭此面"))]
    )
    }
  5. popover

popover是一个专用的修改器来显示弹出窗口,在iPadOS上它显示为浮动气球,而在iOS上则像一张纸一样滑到屏幕上。

要显示弹出窗口,您需要某种状态来确定该弹出窗口当前是否可见,但仅此而已–与警报和操作表不同,弹出窗口可以包含所需的任何视图。因此,只要将您需要的任何东西放在弹出窗口中,SwiftUI就会处理其余的工作。

例如,当点击一个按钮时,将显示一个弹出视图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct ContentView: View {
@State private var showingPopover = false
var body: some View {
Button("显示菜单") {
showingPopover = true
}
.popover(isPresented: $showingPopover) {
Text("你要的内容在这里!")
.font(.headline)
.padding()
}
}
}

  1. alert
    1
    Alert(title: Text("弹出的标题!"), message: Text("这是消息的内容"), dismissButton: .default(Text("OK")))

参考资料:
http://www.neter8.com/ios/127.html

MacOS_VIM+LaTeX

  1. 下载MacTex
    http://tug.org/mactex/

  2. 下载skim
    https://sourceforge.net/projects/skim-app/files/latest/download

  3. 在VIM中安装插件

    1
    2
    Plug 'lervag/vimtex'
    Plug 'neoclide/coc.nvim', {'branch': 'release'}

    在 Neovim 中执行 :CocInstall coc-vimtex 即可。 自动补全

  4. 基础配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    let g:tex\_flavor = 'latex'
    let g:vimtex\_quickfix\_mode = 0


    #自动同步
    let g:vimtex_view_general_viewer
    \ = '/Applications/Skim.app/Contents/SharedSupport/displayline'
    let g:vimtex_view_general_options = '-r @line @pdf @tex'

    " This adds a callback hook that updates Skim after compilation
    let g:vimtex_compiler_callback_hooks = ['UpdateSkim']

    function! UpdateSkim(status)
    if !a:status | return | endif

    let l:out = b:vimtex.out()
    let l:tex = expand('%:p')
    let l:cmd = [g:vimtex_view_general_viewer, '-r']

    if !empty(system('pgrep Skim'))
    call extend(l:cmd, ['-g'])
    endif

    if has('nvim')
    call jobstart(l:cmd + [line('.'), l:out, l:tex])
    elseif has('job')
    call job_start(l:cmd + [line('.'), l:out, l:tex])
    else
    call system(join(l:cmd + [line('.'), shellescape(l:out), shellescape(l:tex)], ' '))
    endif
    endfunction

这样配置后,我们就可以通过 vimtex 默认的 \lv 快捷键(在按住 \ 的时候,连续点击 lv)来正向同步当前 Neovim 光标位置到 PDF 预览位置,也可以通过「Ctrl + 点击 PDF 预览相应位置」来反向同步 Neovim 光标位置了。

  1. 快捷键说明
  • \ll:使用默认编译器(latexmk)开始监听 .tex 文件的变化,编译 LaTeX 项目并打开 PDF 预览界面;

  • \lk 或第二次 \ll:停止编译器监听文件变动,停止编译;

  • \lv:正向从 Neovim 光标位置同步 PDF 显示区域;

  • \lc:清理编译生成的中间文件;

  • 快速跳转至下一个或上一个 section 章节:[[]]][[]

  • 删除包含当前内容的环境标签:dse (Delete surrounding environment);

  • 更换包含当前内容的环境标签:cse (Change surrounding environment);

  • 更换有 * 和无 * 的环境标签(比如将 equation* 更换为 equation、将 figure* 更换为 figure 等)tse (Toggle starred environment):

  • ……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
中文模板

\\documentclass\[12pt\]{article}

\\usepackage{CJK}

\\usepackage{geometry}

\\geometry{a4paper,left=1cm,right=1cm,top=1cm,bottom=1cm}

\\begin{CJK}{UTF8}{gkai}

%设定新的字体快捷命令

\\title{题目}

\\author{作者}

\\begin{document}

\\maketitle

\\section{小标题}

\\subsection{小小标题}

内容

参考文献~\\cite{lecun2015deep}

\\bibliographystyle{plain}

\\bibliography{refer}

\\end{CJK}

\\end{document}

参考文献:
https://sspai.com/post/64080
https://zhuanlan.zhihu.com/p/35498361
https://github.com/limberc/MacTeX-zh-support-template/blob/master/main.tex

崽崽

纪念一下我的小兔几,你在那边和其他小伙伴玩好。

这一张是坠吼滴!!!!

嘿!干啥呢?

吾家少女初长成

贵妃躺

2021影单

发现女巫 第二季

2021年3月1日

旺达幻视

2021年3月7日

大内密探零零发

2021年3月10日

拆弹专家2

2021年3月14日

金刚川

2021年3月15日

逃学威龙 1,2,3

2021年3月21日 ~ 24 日

神奇女侠1984

2021年4月12日

小人物 nobody

2021年4月20日

除暴 Caught in Time

2021年5月20日

你好,李焕英

2021年5月22日

小舍得(电视剧)

2021年5月22日

第一滴血 1982

2021年5月24日

第一滴血2 1985

2021年5月27日

第一滴血3 1988

2021年5月29日

第一滴血4 2008

2021年6月5日

第一滴血5:最后的血 Rambo: Last Blood 2019

2021年6月15日

黑寡妇 black widow

2021年7月10日

疯狂的赛车

2021年7月13日

控方证人

2021年8月24日

致命ID

2021年9月7日

雨人

2021年9月11日

青蛇

2021年9月12日

扫黑风暴

2021年9月25日

茶馆

2021年9月26日

上帝之城

2021年9月27日

卢旺达饭店

2021年10月01日

失控玩家

2021年10月4日

战争之王

2021年10月5日

低俗小说

2021年10月11日

驯龙高手

2021年10月14日

被解救的姜戈

2021年10月16日

千钧一发

2021年10月17日

房间

2021年10月21日

金蝉脱壳

2021年10月26日

小鬼当家

2021年11月01日

小鬼当家2

2021年11月02日

贫民窟的百万富翁

2021年11月10日

尚气与十环传奇

2021年11月11日

The Mandalorian Season 1 曼达洛人1

2021年11月17日

Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

参数 描述 默认值
layout 布局 config.default_layout
title 标题 文章的文件名
date 建立日期 文件建立日期
updated 更新日期 文件更新日期
comments 开启文章的评论功能 true
tags 标签(不适用于分页)
categories 分类(不适用于分页)
permalink 覆盖文章网址
excerpt Page excerpt in plain text. Use this plugin to format the text
disableNunjucks Disable rendering of Nunjucks tag {{ }}/{% %} and tag plugins when enabled
lang Set the language to override auto-detection Inherited from _config.yml