在七月和某个人相识,在七月又和这个人重回陌路,在这个伤感的七月,让我来水一篇博客。

  已经很久没有写博客了,最近现在来写一篇,总结一下这个七月。

  今年的暑假特别的长,大概六月中旬就考完试了,而开学一直要到九月初。中间有两个月的假期,可以好好的“玩”和学学编程了。虽然暑假很长,但是感觉时间过得特别快,每天都是起床,往电脑前面一座,然后天黑了,继续睡觉,就一直这样重复重复。一晃眼好几周就过去了。但总的来说呢,这个七月还是干了点事儿的。

  七月初的时候,回了一趟家,在家呆了大概七天左右,然后就回学校实习去了。说起实习,感觉的确是好尴尬。虽然面试到了一家互联网公司,但是面试的职位是个编辑,题库编辑,就是很苦逼的一天校对文本,文本录入,对着电脑看一天的word,感觉很枯燥,很无聊。所以干了整整七天后,离职了。离职后其实也挺好,我终于有大把的时间来看看编程方面的东西了。

  之前一直学习C#,算是入了微软的坑了,现在反正就是.net方面的都有看,但看的都不多。微软前不久发布了.Net Core 1.0,感觉是个很牛的东西。本着也来学学它的精神,在七月中旬我开始制作一个个人博客(www.cjw1115.com),用的自然就是基于asp.net core了,而在数据存储方面用了ef core和sqlite。由于我的前端功底真的很渣,所以没有怎么做美化界面的事儿,整个博客系统也没有用到AJAX,想着以后慢慢加吧。值得一提的是,作为微软MSP的奖励,我有一年的msdn订阅,各种微软正版软件免费用,好爽!里面还包含有azure的订阅,我自然是把网站全面部署到了Azure上,不过貌似现在也只有Azure的虚拟机的iis支持Asp.net Core吧。

  说的有些跑题了,在七月末,我开始了制作这个爱恋动漫BT的UWP客户端,不过很坑爹的一件事儿是这个爱恋动漫BT和wp一样,也是个小众的产品,它甚至没有安卓和IOS客户端,不过本着练手的原则,我还是简单的开发了一下。

  开发有两个重点,一个就是爱恋动漫bt相关内容展示方面的开发,另外一个就是内置下载器的开发。

  一、就爱恋动漫本身来说,大概有这么几步吧

  1.获取各种资源的接口:这个就很尴尬了,这个网站没有官方app,但是有一个针对移动设备优化过的移动版的web站点,很遗憾,它所有页面全部是由服务器端渲染完成后返回的,整个站点找遍了,连个json的毛都没找到。那所有的数据只能通过解析html来获取了。

  2.数据解析:因为基本页面其实就两个,一个是资源列表页面,用了大量的<li>标签,这个很容易获取;而另一个页面是关于资源的详情展示页面,我在这儿偷了一个懒,把详情展示页面不变动的地方本地化了,把具体的资源描述内容这种变化比较大的,通过webview直接展示,不仅省力,而且还不失美观。

  3.页面设计:关于页面设计,很自然的和官方的页面一一对应就行。用了MVVM,针对这种大量数据的,用数据绑定真的好爽。

  二、下载器方面主要有以下几点

  1.下载器无非就两个页面,一个下载中,一个下载完成,所有数据的存储都使用了sqlite,通过ef core来操作sqlite的确是非常便捷。

  2.整个下载其实完全依赖了uwp自带的BackgroundTransfer类。整个下载过程只需要控制开始,暂停,结束就行了。

  3.有想过做p2p的下载,但是这个工作量应该不小,所以就先缓缓。

  整个工程中,其实都是MVVM和Code-hehind混合使用的,的确设计的很乱,以后应该要好好整理一下,好好做做分层。

  在发布后,我从商店下载安装使用了一下,很明显的两个bug就暴露出来了。

  第一个就是顶部状态栏编程一道白条,遮挡了系统状态栏的所有图标和信息。其实之前在做工大助手的时候也有遇见过,但当时以为是系统的bug,所以没有关心,这次才发现,是有一个判断平台特定api可用性的函数失效导致的(估计是.net native编译有关),所以最后的解决办法就是直接判断平台是什么,而不是判断这个api是不是适用于这个平台。

//不可靠的方法
if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent(typeof(StatusBar).ToString()))
{
StatusBar statusBar = Windows.UI.ViewManagement.StatusBar.GetForCurrentView();
statusBar.BackgroundOpacity = ;
statusBar.BackgroundColor = brush.Color;
}
//可靠方法
if ("Windows.Mobile" == Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily)
{
StatusBar statusBar = Windows.UI.ViewManagement.StatusBar.GetForCurrentView();
statusBar.BackgroundOpacity = ;
statusBar.BackgroundColor = brush.Color;
}

  第二个BUG也是最让我纠结的一个,因为在发布版本里面会出现这个问题,但是在调试的时候并不会。后来注意到,发布的时候是全新的.net native编译方式,而调试的时候是传统的编译方式,这就很尴尬了,我必须去用.net native编译后测试,让人最受不了的就是这种编译方式太慢了,编译的时间长到足以让我去打个水,回来再泡个茶,这个还不够,剩余时间还能去上个厕所!不过还好,最后也发现问题了,问题在于,我在项目里使用sqlite和ef时,使用的是ef 7相关的一些程序集,在构造我的实体类的时候,会发生类型初始化错误。后来把ef 7换成了ef core 1.0后问题就解决了。

顺便附上最权威的相关资源学习地址

1.Asp.net Core

2.EntityFramework Core

哎,不过最忧伤的事儿还是喜欢的姑娘和她男朋友分手了,她却把我的微信删了.......

并不是吐槽她什么,只是觉着这种处理方式有些欠妥......

毕竟我没有做错什么......

求老司机指点!

[UWP]爱恋动漫BT开发小记的更多相关文章

  1. NodeJS+Express+MySQL开发小记(2):服务器部署

    http://borninsummer.com/2015/06/17/notes-on-developing-nodejs-webapp/ NodeJS+Express+MySQL开发小记(1)里讲过 ...

  2. 带农历日历的DatePicker控件!Xamarin控件开发小记

    原文:带农历日历的DatePicker控件!Xamarin控件开发小记 闲来无事开发了个日期选择控件,感兴趣的同学前往: https://github.com/MatoApps/Mato.DatePi ...

  3. UWP开发小记

    针对个人的上一篇文章中提到的遇到的几个问题,做一下个人解答 DLL部署的问题,可以将DLL添加到工程中,属性中设置content为true,这样,部署目录下就会有这个文件. 需要说明的是,这个文件确实 ...

  4. 承接微信小程序外包 H5外包就找北京动点软件开发团队

    承接小程序外包 微信小程序外包 H5外包 就找北京动点软件 长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询,索取案例! QQ:372900288 ...

  5. thu-learn-lib 开发小记(转)

    原创:https://harrychen.xyz/2019/02/09/thu-learn-lib/ 今天是大年初五,原本计划出门玩,但是天气比较糟糕就放弃了.想到第一篇博客里面预告了要给thu-le ...

  6. 手把手教你使用FineUI+动软代码生成器开发一个b/s结构的取送货管理信息系统(附源码)之开篇

    一 本系列随笔概览及产生的背景 近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座, ...

  7. Electron Angular 开发小记

    一介绍 electron分为主进程和渲染进程,主进程负责和原生交互,控制窗口等. 渲染进程就是普通网页.主进程和渲染进程可以通过ipcMain(主进程使用)及ipcRenderer(渲染进程用)通信 ...

  8. 微软颜龄Windows Phone版开发小记

    随着微软颜龄中文网cn.how-old.net的上线,她也顺势来到了3大移动平台. 用户在微软颜龄这一应用中选择一张包含若干人脸的照片,就可以通过云计算得到他们的性别和年龄. 今天我们就和大家分享一下 ...

  9. MQTT开发小记(一)

    最近在协助公司硬件组进行MQTT协议的嵌入式SDK包开发. 简述一下MQTT MQTT简单的来说是一种订阅/发布模式的通信形式,一般分为客户端和服务器端. MQTT服务器端可以简单理解为一个消息中转站 ...

随机推荐

  1. java程序员从ThinkPad到Mac的使用习惯改变

    https://blog.csdn.net/yczz/article/details/49993417

  2. [leetcode]131. Palindrome Partitioning字符串分割成回文子串

    Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...

  3. 43-python-自己的词典

    可以用python实现一个自己的词典, 就是在网上下一个英汉词典,作为自己的词库,然后整理出一个json文件,存起来,查词时,直接读取查询: 处理时可以用正则表达式处理: https://www.cn ...

  4. tp5在apache下能访问,但放到nginx下报404

    index index.php index.html index.htm; if ( -f $request_filename) { break; } if ( !-e $request_filena ...

  5. window.name跨域实现

    参考:window.name实现的跨域数据传输 有三个页面: a.com/app.html:应用页面. a.com/proxy.html:代理文件,一般是一个没有任何内容的html文件,需要和应用页面 ...

  6. async 和 await

    win8 app开发中使用async,await可以更方便地进行异步开发. async,await的使用可参考代码:Async Sample: Example from "Asynchron ...

  7. UVaLive 3487 Duopoly (最小割)

    题意:有两个公司A和B在申请一些资源,现在给出两个公司所申请的内容,内容包括价钱和申请的资源 ,现在你做为官方,你只能拒绝一个申请或者接受一个申请,同一个资源不能两个公司都拥有,且申请的资源不能只给部 ...

  8. java获取变量的类型

    对于简单类型变量,是无法直接获得变量类型的://要想获取,必须自定义函数进行返回 对于包装类型变量,是可以直接获得的,变量名称.getClass().getName(); java中获取变量的类型可以 ...

  9. ansible-api 调试

    使用api的时候有时候会遇到一些难以想象到的错误,可以通过以下几种方式来定位. 1.使用 自定义 callback class ResultCallback(CallbackBase): def v2 ...

  10. C#中验证sql语句是否正确(不执行语句)

    SET PARSEONLY检查每个 Transact-SQL 语句的语法并返回任何错误消息,但不编译和执行语句.SET PARSEONLY { ON | OFF }当 SET PARSEONLY 为 ...