markdown-preview实现md预览

{% github iamcco markdown-preview.vim c09a1ca width = 30% %} nisha

命令行使用

1
2
3
4
5
MarkdownPreview
" open preview window in markdown buffer

MarkdownPreviewStop
" close the preview window and server

插件运行效果预览

图文组件及多媒体组件类图

  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
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
title 智能培训类图
center header
梳理图文组件类关系图,实现在图文列表中实现智能培训样式
endheader

'******* 类声明模块 *******'
'类型:class,abstract,interface,annotation,enum'
'访问域:(-)私有,(#)保护,(~)包私有,(+)公有'
class LayoutEngineViewController{
-- 方法组 --
-(void)widgetImageViewClickWithData: 
}

package 图文框架 <<Folder>>{

class CenterViewController{
+Part *parentPart
--二级目录数据源--
-NSMutableArray*arrParts
--初始化二级目录方法--
-(void)queryTwoPartsWithParentForEnterpriseStyle:(Part *)parent

--方法组 --
-(void)queryTwoPartsWithParent:(Part *)parent
--初始化二级目录新闻视图页面body--
-(void)createNewsRootScrollView
--通过二级目录信息,获取主体body数据方法--
-(void)addEveryNewsParts:(NSArray *)arrNewParts
-(void)addParts:(NSArray *)arrNewParts
}
note right of CenterViewController
初始化多媒体
初始化图文列表
end note
class Part {
/** 父节点Id */
@property(nonatomic, copy) NSString        *parentId
/** 栏目Id */
@property(nonatomic, copy) NSString        *partId;
///智能培训:storeId
@property(nonatomic, assign) NSString   *storeId;
}

}
package 数据库 <<Folder>>{

class DatabaseOperation{
--持久化二级目录--
+ (BOOL)insertParts:withParentId:
--查询二级目录数据--
+ (NSMutableArray *)allpartsWithParentId:
--持久化列表数据--
+ (BOOL)insertNews:withPartID:
--读取数据库数据--
+ (NSMutableArray *)allNewsWithPartId:
}
CenterViewController *-- DatabaseOperation:持久化 <
}

LayoutEngineViewController *-- CenterViewController:Part >
package 智能培训 <<Folder>>{
LayoutEngineViewController *-- JHBaseViewController:布局映射入口 >
JHBaseViewController <|-- SmartLearnViewController:反射类 >
SmartLearnViewController *-- LearnStoreListViewController: 门店列表 >
LearnStoreListViewController *-- CenterViewController:Part >
class LearnStoreListViewController{
--方法组---
-(void)loadUserStores 门店列表
-(void)loadTLNewsCenterView 获取一级目录id
-(void)pushTLNewCenterView:(Part *)part初始化图文
}
LearnStoreListViewController *-left- ReqLearnStoreServer
class ReqLearnStoreServer{
+(id)shared;
@property (nonatomic, strong) JHURLRequest * request;
-(void)reqGetUserStore:(void(^)(NSArray *))handler
-(void)reqGetParentPart:(void(^)(KnowledgePaper *))handler
}
}
CenterViewController *-- CenterNewsViewController: storeId (part.orderStatus == 0)左对齐图文样式> 
note right on link 
通过<b>storeid</b>来指定新接口,
加载智能培训数据源
end note
CenterViewController *-- JHAudioVideoList:VAStoryCategory (part.orderStatus == 6)多媒体板式
note right on link 
通过<b>storeid</b>来指定新接口,
加载智能培训数据源
end note
package JHAudioVideoList <<Folder>>{
class APListViewController{
--接口属性--
+VAStoryCategory *parentStoryCategory
--TODO: tableView数据源模型--
VAStoryVersion:添加智能培训学习进度相关属性
--TODO: 网络接口方法--
-(void)getStoryVersionsWithCatId:LastId:count:sortBy:
--block回调方法--
-getStoryVersionsCallback:(VABSAPIResponse *)res
-- 暂存方法 --
-updateCacheData()
-loadCacheData()
--交互方法--
- (void)tableView:didSelectRowAtIndexPath:
}    

APListViewController2 *-up- VAStoryCategory:构造参数 <
note top on link
构造剧集列表的参数
end note

APListViewController *-up- VAStoryCategory:构造参数 <
note top on link
构造列表的参数
end note
APListViewController *-- VAStoryVersion:单元格数据 <
note top on link
单元格学习进度等
样式/数据的源
end note
APListViewController *-- VADatabaseOperation:暂存 >
note top on link 
根据catid
更新持久化
table数据源数组
end note
APListViewController *-left- VAMediaBaseCell:单元格 <
class VAMediaBaseCell{
--// 发布时间|阅读时间--
@property (nonatomic, strong) UILabel *timeLabel;             
--// 播放次数|阅读进度--
@property (nonatomic, strong) UILabel *numLabel;              
}
class VAStoryCategory{
+NSString *catId
@property(nonatomic, copy) NSString  * parentId
@property (strong, nonatomic) NSString *storeId
}

class VAStoryVersion{
--TODO: 新增参数--
@property (assign, nonatomic) NSString *storeId;
--///学习时长--
@property (strong, nonatomic) NSString *StudySec;
--///预估总时长--
@property (strong, nonatomic) NSString *EstimateSec;
--///学习进度--
@property (strong, nonatomic) NSString *StudySchedule;
}
note bottom of VAStoryVersion
解析列表数据的模型,
在此类中添加智力培训相关属性
end note
VADatabaseOperation *-up- VAStoryVersion:持久化对象 <
class VADatabaseOperation{
--TODO:当初始化时,持久化table数据源--
-(BOOL)writeStoryVersionCacheToDB:withCatId
--当查看视频详情时,更新数据库--
+ (BOOL) updateStoryVersion:(VAStoryVersion *)newStory
+(BOOL)updatePlayListWithStoysVersion:(NSArray *)StoryVersions
}
note bottom of VADatabaseOperation
暂存列表中的数据模型,
映射到数据库中
end note
class APListViewController2{
}
note top of APListViewController2
(VideoDisplayType && part.showType == 1)
当满足这个条件时初始化该实例
end note
}

package JHVideoRecording剧集版 <<Folder>>{
APListViewController *-- VACMoviePlayerViewController:VAStoryVersion *sv >
note top on link
当点击cell初始化剧集版播放器详情页
VideoDisplayType:// 判断用新的还是旧的播放界面
end note
class VACMoviePlayerViewController{
多媒体剧集版详情
--视频播放器启动方法--
- (void)playContentURL:(NSURL *)url
}
class VACGlodalManager{
+(VACGlodalManager*)SharedObj
-VAALMoviePlayerController *pALMoviePlayerController;
}
VACMoviePlayerViewController *-- VACGlodalManager 
VACGlodalManager *-- VAALMoviePlayerController
class VAALMoviePlayerController{
VAALMoviePlayerControls *controls;
--播放控制方法组--
---//切换屏幕---
- (void)fullscreenOrEmbedded:(NSString *)strMode;
--//播放还是暂停--
- (void)playOrPause;
}
VAALMoviePlayerController *- VAALMoviePlayerControls:播放控制UI <
class VAALMoviePlayerControls{
VAALButton *fullscreenButton;
VAStoryVersion *story;
VAALMoviePlayerController *moviePlayer;
--TODO: 五定图按钮--
UIButton *showSevenImgButton;
-(void)showSevenImgListAction;
}
VACMoviePlayerViewController .|> ALMoviePlayerControllerDelegate:代理 >  
interface ALMoviePlayerControllerDelegate{
--//上一曲--
- (void)beforePlayingVideo;
--//下一曲--
- (void)afterPlayingVideo;
--//切换屏幕--
- (void)fullscreenOrEmbedded:(NSString *)strMode;
--//播放还是暂停--
- (void)playOrPause;
}
}

package JHVideoRecording列表版 <<Folder>>{
APListViewController *-- VACVideoPlayerDetailViewController:多媒体详情列表版 < 
note top on link
当选择cell初始化操作
VAStoryVersion * sv多媒体详情列表
end note
VACVideoPlayerDetailViewController *-- JHTWVideoPlayer:播放器 <
VACVideoPlayerDetailViewController *-- VAStoryVersion
VACVideoPlayerDetailViewController .|> VideoPlayDetailProtocol:代理 <  
VACVideoPlayerDetailViewController *-- VideoPlayDetailBIZ:播放器辅助类 <
JHTWVideoPlayer *-- VAStoryVersion:构造参数 <
APListViewController2 *-- VACMoviePlayerViewController:多媒体详情剧集版 > 
class VACVideoPlayerDetailViewController{
--基础属性--
+VAStoryVersion *storyVersion
-VideoPlayDetailBIZ *vpdBIZ
--播放器浮动框显示五定图相关控件--
-UIView *sevenView
--构造方法--
-initWithModel:(VAStoryVersion *)sv
--点击按钮显示五定图预览列表--
-(void)showSevenImgList 
}

class JHTWVideoPlayer{
--私有属性--
-VAStoryVersion *sv
--构造器--
+ (id)initWithFrame:model:(VAStoryVersion *)sv
--加载新视频--
+ (void)loadVideo:(VAStoryVersion *)sv
}

class VideoPlayDetailBIZ{
--接口参数--
+VAStoryVersion *currentStoryVersion
}

interface VideoPlayDetailProtocol{
--加载视频--
- (void)loadVideo:(VAStoryVersion *)sv;
}
}


package 公共组件 <<Folder>>{
APListViewController *-- VANetEngine:网络工具 <
class VANetEngine{
--TODO: 图文网络接口方法--
-(void)v5newsQueryPartsWithPartId:parentId:count:dateTime:lastMeters:lon:lat:newOrOld:modifyTime:partModifiedtimeForPart:orderType:type:del:sel
--TODO: 视频列表接口方法--
-(void)getStoryVersionsWithCatId:LastId:count:sortBy:asc:del:
--block回调方法--
-getStoryVersionsCallback:(VABSAPIResponse *)res
}
VideoPlayDetailProtocol <-- SevenImgCapture:启用五定图 <
class SevenImgCapture {
--类方法--
+(SevenImgCapture *)shared
--五定信息搜集方法--
-(void)threeInfo
--文字图片合成方法--
- (UIImage *)complexText
}
note right of VANetEngine
网络工具
end note
}

package 图文列表模块 <<Folder>>{
class BaseTableViewController{
--数据源--
+dataArray
--加载网络数据--
- (void)loadMoreData
}
BaseTableViewController <|-- PartBaseViewController:继承 >
PartBaseViewController <|-- CenterNewsViewController:继承data数据 >

class PartBaseViewController{
--重载网络数据接口--
- (void)loadMoreData
}


PartBaseViewController *- DatabaseOperation:持久化 <
class CenterNewsViewController{
--继承父类数据源--
+dataArray
-- 智能培训标示--
open storeId:String
__ 初始化cell代理方法 __
- (UITableViewCell *)tableView:cellForRowAtIndexPath:
- (id)getCellDataWith: 获取cell数据
// 根据新闻取得对应的图集cell类
- (Class)getCellInfoByNews:CellId:
--图文支持视频列表显示的方法--
#pragma mark - 进入阅读跳转
- (void)tableView:didSelectRowAtIndexPath:
//不收费,且无权限要求时,进入阅读跳转
-(void)expush_mothed:(NSIndexPath *)indexPath
} 
}
package JHAcrossNetEngin图文访问网络模块 <<Folder>>{
class NetEngine{
--新增图文列表接口--
-(void)v5newsQueryPartsWithPartId:parentId:storeId:count:dateTime:lastMeters:lon:lat:newOrOld:modifyTime:partModifiedtimeForPart:orderType:type:del:sel
}
PartBaseViewController <-down- NetEngine: 获取列表信息 <
}

package 图文详情模块 <<Rectangle>>{
class JHTWAtlasBaseCell{
+News *currentNews
+fillDataWithModel:(New *):celldata  填充数据
}
class JHTWMixedLARListCell{
-- 方法 --
[super fillDataWithModel:]
TODO:适配智能培训UI布局
}
class New{
__ 智能培训相关属性 __
@property (strong, nonatomic) NSString *StudySec;
@property (strong, nonatomic) NSString *EstimateSec;
@property (strong, nonatomic) NSString *StudySchedule;
}
note right of New
在替换新接口中,复用这个数据模型,添加智能培训相关属性
1. 添加属性:
2. 复用解析
3. 复用暂存
end note
class ListAndCardNewDetailViewController{
}
}

CenterNewsViewController o-- JHTWAtlasBaseCell:初始化图文cell数据 < 
JHTWAtlasBaseCell <|-- JHTWMixedLARListCell
JHTWMixedLARListCell o--New: picCount=1 < 
note right on link
picCount=1时,图文列表会使用单个图片样式
end note

package 多媒体 <<Rectangle>>{
class JHTWMixedMediaCell{

}
class TLNewsHomepage{
--播放器初始化方法--
-(void)playMediaNews:clickedNews playList: 
}
class JHTWMediaVideoPlayerDetailViewController{

}

}

JHTWMediaVideoPlayerDetailViewController *-- VANetEngine:五定图相关数据接口 < 
JHTWMediaVideoPlayerDetailViewController <-- SevenImgCapture: < 
CenterNewsViewController *-- TLNewsHomepage:多媒体详情 >
note right on link
当点击cell调用 `expush_mothed`方法
[clickedNews isMediaNews]当点击多媒体cell时
初始化视频播放器
end note
CenterNewsViewController *-- JHTWMixedMediaCell:多媒体cell <
note right on link
初始化图文列表时,显示多媒体cell样式
end note

TLNewsHomepage *-- JHTWMediaVideoPlayerDetailViewController:播放器详情 >
note right on link
初始化播放器页面
end note
JHTWMediaVideoPlayerDetailViewController *-- New:构造参数 <
JHTWMixedMediaCell o-- New:构造参数 <
ListAndCardNewDetailViewController *-- New:构造参数 <
CenterNewsViewController *-- ListAndCardNewDetailViewController:图文详情 > 
note right on link
当点击cell调用 `expush_mothed`方法
[clickedNews isMediaNews]当点击多媒体cell时
初始化视频播放器
end note

'JHTWAtlasBaseCell <|- JHTWMixedLARListCell 'picCount == 1
'显示/隐藏类,类方法属性等 关键字支持class,interface,enum'

'---- 声明类关系线备注,可以当做用例来参与到关系连接中 ---'
'note "图文左列表样式,复用样式,实现智能培训相关内容的显示:学习进度时长等信息" as new 

'###### 类备注模块 类声明末尾使用:note 位置: 备注#########'
note right of CenterNewsViewController
复用图文左列表样式
<b>实现智能培训相关属性显示:学习进度等。
end note


center footer
梳理图文组件类关系图
endfooter

iCompleteMe支持swift语法提示

{% github jerrymarino iCompleteMe ad0e1fe width = 30% %} iCompleteMe是基于YouCompleteMe。在花了一年多的时间试图实现对YouCompleteMe的快速支持之后,发现在YCM无法支持swift自动补齐。 iCompleteMe实现的行为对于Swift的补齐提示。iCompleteMe的核心子系统只与Swift一起工作。代码基占用的空间要小得多,这使得在CI上更容易安装、更容易理解和更稳定(理论上)。

SwiftPlayground命令操作

{% github jerrymarino SwiftPlayground.vim f603700 width = 30% %}

执行环境

在playgrounds后缀的目录中执行swift文件

熟悉vim快捷键用法

空格 + fs 保存文件:此时插件会自动运行playgrounds,显示效果 shift + H :行头 shift + L:行尾 :copen : AsyncRun显示运行日志 :AsyncRun shell命令

FSCalendar支持自定义的日历开源库

{% github it-boyer FSCalendar 1a026a4c width = 30% %}

自定义日历控件,日期图标

FSCalendar FSCalendar是一款开源iOS日历控件,支持横向、纵向滑动模式,全屏模式,带有子标题、事件设置等功能。以下是项目截图: Use Interface Builder 1、 Drag an UIView object to ViewController Scene 2、 Change the Custom Class to FSCalendar 3、 Link dataSource and delegate to the ViewController 4、 Finally, implement FSCalendarDataSource and FSCalendarDelegate in your ViewController

高效人士的七个习惯

豆瓣导图 豆瓣总结

前言 如何善用本书

第一部分 重新探索自我

第一章 由内而外全面造就自己

第二章 七个习惯——概论

第二部分 个人的成功:从依赖到独立

第三章 习惯一:积极主动——个人愿景的原则

第四章 习惯二:以终为始——自我领导的原则

个人使命宣言

以终为始最有效的方法,就是撰写一份个人使命宣言,即人生哲学或基础信念。 宣言:主要说明自己想成为怎样的品行的人。成什么样的事业,及为此奠基的价值观和原则。 家庭第一 借重宗教的力量 在诚信问题上决不妥协 念及相关的每个人 未听取正反双方的意见,不妄下断语 征求他人意见 维护不在场的人 诚恳但立场坚定 每年掌握一种新技能 今天计划明天的工作 利用等待的空闲时间 态度积极 保持幽默感 生活与工作有条不紊 别怕犯错,怕的是不能吸取教训 协助属下成功 多请教别人 专注于当前的工作,不为下一次任务或提升操心

书都不会读还想成功

处境

人到中年,职场受排挤降级,情场被抛弃不如意,怨天尤人,自怨自艾,却不思进取,死扛着压力勉强养家糊口残喘于世。

心态转折

  1. 红皇后的故事:寓意为什么在现实生活中不进则退的境地,见贤思齐,善于发现同事优点,定位榜样学习实线。

读书习惯

  1. 100天33本书: 从量到质达到,培养读书习惯的目的。

Framework实现使用swift开发

{% github it-boyer JHHomeAPP 813e4b width = 30% %}

在静态库组件中使用swift开发

基于静态库的开发,实现封装静态库/Framework并使用swiftOC混编开发

创建三个角色

  1. 主项目:JHHomeAPP
  2. 静态库组件:FirstPlug
    • SwiftInStaticLib(包含Swift源码实现的静态库)
  3. 动态库secondFramework

静态库:问题1

当静态库组件中存在swift源码时,依赖该组件的主工程会报错:

使用CocoaPods开发静态库

Cocoapods作为OS X和iOS开发平台的类库管理工具,已经非常完善和强大。通常我们用pod来管理第三方开源类库,但我们也极有可能会开发一个用pod管理依赖关系的静态类库给其他人使用,而又不愿意公开源代码,比如一些SDK,那么就需要打包成.a文件。本文将以一个依赖于ASIHTTPRequest的静态类库,来演示如何创建使用了CocoaPods的静态类库以及打包的过程。