友人C - 内容
type: channel
link: https://www.ihewro.com/tag/内容/
items: 提醒事项与微软ToDo的比较
items: 全设备markdown写作使用指南
items: 终端与shell的区别
items: 2019北邮考研我的个人经历
items: java实现Apriori算法——频繁项集的计算
items: 工作环境多设备同步问题
items: 为js动态创建的元素绑定事件
items: typecho博客实现ajax评论
items: 记录一次vivo x5max+的root经历
items: 利用upyun又拍云CDN服务配置全站HTTPS

提醒事项与微软ToDo的比较
type: item
date: 2019-11-08T21:22:00+08:00
description: 苹果IOS/Ipad OS 10.13 OSX10.15 全系列更新后，有一个内置软件变化很大，那就是「提醒事项」。使用Android设备，尝试了无数款规划类的应用，比如什么四象限类型的。但没能坚持下来规划任务。但是Microsoft Todo 还是留在了我的Android手机上，虽然也没怎么使用。换了iphone之后，也是在研究生生活中，每天其实有很多琐碎的事情，如果不记录下来，简直一团糟（和本科混吃等死很不一样）ToDo 在iPhone上同样适用，与此同时微软时隔几年之后在Mac也上架了ToDo,使得这款应用成为一个跨平台的利器。但随着不断使用中，发现了一些我很不喜欢的地方，新版本的「提醒事项」，有着ToDo的影子，所以考虑是否切换到该内置应用。下面是两款软件的对比，也可以给大家做一些参考：ToDo设计问题「我的一天」「我的一天」这个微软介绍的截图中的“特性”。但却很有问题。对任意一个任务可以选择「添加到我的一天」，但是「我的一天」和「已计划的日程」却是完全独立的。「我的一天」里面的任务却不会出现在「已计划的日程」，除非你再次给这个日程添加一个「截止日期」/「提醒日期」为今天。这看起很复杂。如果我需要安排今天的任务，而且希望今天的任务也出现在「已计划的日程」中，则必须操作两次……对于「提供我的一天的建议」这个功能似乎很酷，但，其实就是显示一些未完成的清单列表嘛…… 我几乎没使用过这个功能。「任务」到底是什么任务？很早，ToDo 是没有文件夹分类清单，只能添加清单一级。所以「任务」这一栏就显示了所有的任务。后来增加了清单文件夹📂这一个功能，「任务」里面只会显示“未归类的任务”。对于我来说，「任务」这一栏就是空的，因为我所有的任务都会归属某个清单。这个功能就很……截止日期和提醒日期对于每个任务，ToDo 有两个时间设置。看起来，这两个时间的定义不同，但是实际操作起来却没什么必要。一个任务提醒你需要去完成了，为什么这个时间点不是截止时间呢。除非这个任务是时间跨度很长。但非常不建议添加这样模糊的任务到清单中。每一个任务尽量是具体的、可以很快执行完毕的，如果是长期任务一定要进行划分，否则这样的模糊的任务很大可能是无法进行的。我在使用ToDo的时候设置这两个时间完全就是跟随心情，有时候点截止日期，有时候点提醒日期，这让我很迷茫，尽管这两种方式都会让任务出现在「已计划日程」中。容易误触「已完成」在IOS上，如果选择「隐藏已完成任务」，在任务清单中，选中 一项未完成的任务 的「完成按钮」，这项任务就会立即消失在这个列表中。天知道，我已经很多次的误触这个「完成按钮」，导致不知道把哪个任务不小心给点「已完成」了。正确的体验应该是，点击已完成，不会立即消失，而是再次刷新列表的时候再去消失这一项。优点优点也有一些。跨平台，Android、IOS，Mac，Linux（虽然用不到）。但是我偶尔会用我的旧Android手机睡觉前看新闻（嘿嘿就是focus软件），偶尔也会记录一些突然想起来的任务。动画很不错。很多操作都有动画，比如任务消失，显示在清单列表中，列表的显示等排序的方式很多一些小细节做的比较完善一点，我喜欢的是这个：选择「提醒时间」的时候，会有「今日晚些时候」，而对于「明天」、「下周」这样的选项也会有一个默认的时间（不仅仅是日期）。因为很多时间，我的任务并不是精确到某个时间点，而是某天内完成都可以的，自己再去选择一个时间就有点麻烦和纠结了。对于今天超时的任务，选择「今日晚些时候」就很方便的再拖一会儿。提醒事项设计优点几乎ToDo的设计缺陷（我认为的）都修正了。「今天」的任务列表是“提醒时间为今天”的任务列表，没有对任务进行「添加到今天」这一步多余步骤。「全部」类似于ToDo的「任务」的功能，但是这里会“按照清单”分别显示所有的任务只有提醒日期一个时间设置，更简单IOS上，对任务点击已完成，不会立即消失。（但是Mac上也会立即消失，好在可以command+z 撤销操作）上面最膈应我的四个问题，「提醒事项」都修复了。除此之外还有一些亮点：能够对自然语言进行解析，这个Android 版本的Todo也是支持的，但是到了苹果平台就没有了，可能还来得及迭代。和电脑端可以使用「接力」任务提醒自动关联日历的日程中会在日历📅的小部件中显示，系统提醒非常及时和准确。但自身仍然也有一些问题。缺点提醒我，需要手动指定一个时间没有想ToDo那样的默认时间，就有点麻烦了！没有指定时间的任务如果一个任务的提醒时间只指定日期，但不指定时间，这个任务不会自动添加到日历的日程中，也不会有弹窗提醒。不提醒可以理解，但好歹应该加到日历中的日程中吧。同样的在IOS 13.12中，联系人的生日如果只选择日期，不选择年份不会添加到日历的日程中，在新版本中修复了这个问题。所以有理由相信这个设…

全设备markdown写作使用指南
type: item
date: 2019-10-05T17:21:00+08:00
description: 我的选择Mac端：mweb 2.0移动端 ： 1writer这样我的跨平台写作流程是：在iCloud里面设置一个文件夹 写作文档。电脑端使用mweb的外部模式，打开该文件夹，进行写作。同时iCloud会进行同步。移动端使用1writer 打开外部文件夹，可以继续写作。[album type='photos'][/album]其他同类型应用使用体验一点吐槽首先统一吐槽一些软件，非得自己搞什么“文档库”，文档都不知道被软件存储到什么位置，然后必须使用软件内部的iCloud同步才能跨平台写作。最关键的是文件也不知道存储在iCloud的什么位置。我个人觉得写作软件：首先做好显示外部文件夹层次和文件就可以了。现在手机、电脑设备的文件系统都比较完善了。没必要搞什么应用内部的文档库，给我一种不安全感，因为我不知道文件存哪了其次应用内部也完全没必要搞iCloud同步，如果软件本身就支持打开iCloud外部文件夹，同步问题就自然解决了。而不是把用户的文档数据转成应用内部的数据，然后再用iCloud同步，这不是多此一举吗。评分标准满分100分。写作软件只要有以下优点，我个人就觉的是一款完美的软件：价格合理（20分）细节处理（比如主题切换、空格习惯设置、实时预览等等）（20分）支持对文件夹、标题和内容快速搜索，搜索结果呈现简单明了（10分）显示外部文件夹的层次结构以及相应的内容（20分）markdown解析流畅，对中文支持好，支持大部分的markdown语法（10分）对图片的上传有一个合理的方式（10分）至于能够同步博客、medium之类的功能对于我个人来说可有可无（5分）ui颜值不错，太丑的界面实在让人觉得 ...当然习惯了可能就好了吧（5分）除此之外的什么聚焦模式，打字机模式，有则优，没有其实根本也不影响写作体验。（0分）bear（移动端）（75分）[album][/album]字段价格(20')细节处理(20')支持外部文件夹(20')搜索功能(10')markdown解析(10')图片上传(10')第三方服务同步(5')UI界面(5')说明10元/月各种小功能考虑的比较好不支持支持内容、标题解析的样式好看，可以换主题 不支持同步博客之类的不是ios原生那种，但却是很精致得分1020010101005但是单就不支持外部文件夹对于我来说已经不会使用了。ia writer（移动端）（38分）因为我先用了ia writer，觉得差强人意，于是决定在移动端使用这款软件，没想到用户体验几乎为0。而且售价60，我不知道谁给他的勇气。[album][/album]字段价格(20')细节处理(20')支持外部文件夹(20')搜索功能(10')markdown解析(10')图片上传(10')第三方服务同步(5')UI界面(5')说明60元/买断自带markdown小键盘，有聚焦模式不支持支持搜索内容、标题，但搜索结果只有标题，没有匹配的内容差强人意，不支持公式如果是iCloud的文档，图片会自动放到iCloud里面，本地文档是无法上传图片的无不说了得分1015085500缺点：界面劝退，线条蓝色图标，我感觉像是上世界的Android风格，完全没有iOS的界面元素不支持外部文件夹打开，只支持外部某个文件打开，劝退1writer（移动端）（76分）[album][/album]字段价格(20')细节处理(20')支持外部文件夹(20')搜索功能(10')markdown解析(10')图片上传(10')第三方服务发布(5')UI界面(5')说明30元/买断有markdown工具条，还有一些个性化的设置我在iOS平台唯一看到的支持外部文件夹的软件只支持搜索标题差强人意会把图片自动放到相同文件夹类，无法自己设置无中等偏上，有改进的空间，虽然用了一些iOS设计风格，但整体上还是不够iOS得分20152055803ulysses（移动端）（45分）[album][/album]字段价格(20')细节处理(20')支持外部文件夹(20')搜索功能(10')markdown解析(10')图片上传(10')第三方服务发布(5')UI界面(5')说明28元/月，太贵了，iCloud一个月才6月呢这个软件打开你就能感受到花了很多功夫不支持支持内容、标题搜索，搜索界面也很好看不支持表格，样式还是很好看的没找到本地图片上传，只找到一个附件，但是和文章是分离开来的支持wp,ghost,mediumios原生界面，完美得分5200105055ia writer（电脑端）（66分）因为有试用期，我就下载了。基本功能还行，流畅性不够，尤其是右侧的编辑器区域，滚动起来就是不流畅，就是不流畅。而且聚焦模式用起来很……很不舒服。（可能我不习惯这个聚焦模式，内容始终显示在中间，上面还会有空白）语法高亮对…

终端与shell的区别
type: item
date: 2019-04-19T14:59:00+08:00
description: 当我从Linux转换开始使用macOS的时候，我发现macOS的终端很丑，它长这样：于是我找到这样一篇文章：Mac OS 终端 iTerm2 并配置 zsh。所以什么是终端，什么是zsh。终端很久很久以前，终端这个概念是这样的：是一种硬件，是一种输入输出设备，用于和计算机交换信息。终端的工作：用户通过终端输入命令，终端将命令传入计算机，执行后，并把结果输入到终端上显示。从这个概念不难可以看到电传打印机符合这个概念：但是现在计算机硬件一体化程度越来越高，硬件质量也越来越强，输入输出设备完全没必要单独用一个硬件和计算机进行交换信息了，取而代之使用软件终端和计算机进行交互信息。这就是终端模拟器 (Terminal Emulator)，也就是我们现在所讨论的终端。除了它不是硬件，它符合终端的概念和工作流程。举个例子，下面这些软件都是终端：1GNU/Linux：gnome-terminal、Konsole；macOS：Terminal.app、iTerm2；Windows：Win32 控制台、ConEmu 等。shell我之前很迷惑一个问题是，有终端就够了嘛，输入命令，执行并把结果输出，要shell干什么。更让人抓狂的shell还有很多种类，bash,cshell,zsh。这些到底是做什么的？所以需要明确下终端负责的工作。终端的工作范围：接收用户的输入，显示传过来的输出。（此外还提供一些优化用户体验的功能，比如支持文字复制粘贴、软件背景颜色的调整等）终端的工作其实是很少的哦，简单来说3点：GUI软件界面、接收输入、显示输出。而shell的核心工作就是操控计算机内核（如新建文件等等），即访问操作系统中的某个具有一定功能、可以处理具体事务的文件(二进制文件 ---- 此类文件经常被称作工具)、或包含一定内容的文件(文本文件)2shell分为：图形化 shell（图形化的桌面环境），如Windows Explorer （文件管理器）、 Linux的桌面环境有：KDE、GNOME、CDE、 XFCE等。命令行 shell。如bash 、sh 、csh 、ksh我们一般讨论shell都是指命令行shell。shell为什么叫做命令解释器不管是GUI shell 还是命令行 Shell，其实都是在解释命令，只不过GUI shell隐藏解释命令细节，用户通过点击鼠标的操作操作内核命令。shell为什么叫做壳如上图，shell通过解析命令调用 系统调用和相关API操作内核命令，进而读写硬件完成任务。shell是最外的一层的接收用户操作，像一层壳一样裹在整个调用过程中。为什么有这么多命令行shellshell与shell脚本语言并不完全相同的概念。shell除了包括对命令的语法规范（shell语言）和对命令解析，还包括一些额外的功能（如命令补全、主题等等）。shell语言和我们学习的任何其他高级语言c,python,java没有太大区别。不同的shell语言可以看做java语言的不同版本。不同shell的区别主要是两方面：脚本语言语法有差异功能、外观、自定义美化上有差异脚本语言早期的sh甚至不支持给长命令设置别名的语法。3zsh虽然完全兼容bash的语法，但还有一些语法差异，具体可以看Zsh和Bash，究竟有何不同 坑很深自定义功能配置除非我们需要编写shell脚本，普通用户一般很难发现不同shell脚本语言差异。对文件操作ls、pwd等等这些常用命令所有shell都一样支持。所以我们普通用户更关注是细节、外观、功能上的差距。这一点zsh做的格外的优秀。比如色彩高亮、命令提示、智能补全、快速跳转等等附加功能。4我们在讨论配置终端的时候，实际上是在讨论配置shell。为什么zsh如此受欢迎？这个较新的shell与bash兼容，但包括更多的功能。 zsh shell提供内置的拼写校正，改进的命令行完成，充当shell插件的可加载模块，允许您在命令行上别名文件名或其他任何东西的全局别名，而不仅仅是命令，以及更多主题支持。 它像bash，但有很多附加功能，附加功能和可配置选项，你可能会喜欢，如果你在命令行上花费大量的时间。3总结： 终端就是软件，是最外层的，shell = shell脚本语言解析器+编辑、外观等额外功能不同shell的切换输入cat /etc/shells，可以查看本机上的所有shell：临时切换比如切换bash，直接输入bash，即可切换到bash环境下，输入exit，复原默认shell环境。默认切换5#使用系统自带的 zsh：输入密码成功切换，重启终端即可使用 zsh。 chsh -s /bin/zsh #使用第三方的 zsh，如从 brew 安装的 zsh。 sudo chsh -s /usr/local/bin/zsh 命令行界面 (CL…

2019北邮考研我的个人经历
type: item
date: 2019-03-31T12:46:00+08:00
description: [scode type="red" size="simple"] （网络计算研究院2020年被合入了计算机学院）关于网研1组的名额的事情我是完全不清楚，抱歉[/scode]本来这篇文章是很早之前写的，写到一半写不下去。现在上岸了，我打算完结这篇文章。可能是写的心情不一样吧。知乎上初试学习方法帖子很多，我的初试成绩也不高，所以我只打算一些我曾经迷惑的问题。报考：北京邮电大学 网络技术研究院 计算机科学与技术 {人工智能、网络智能化、人机交互}研究方向笔记集合[post cid="916" size="small" /]初试总分： 342(101)思想政治理论：58(201)英语一：66(301)数学一：100(803)计算机学科基础综合：118我希望我的一些文字能让你更轻松的面对考研。当我回过头来看，我们作为大学四年的成年人，我们不应该再和高三一样，把考研当做人生的一道坎，或者当做一个特殊而重大的任务。我们应该把考研当做生命的一种经历，一个过程，一个体验。就像我之前说的，我觉得人生不应该是工作、放假、工作、放假这样的循环。不管是很累的工作、还是放松下来的假期，我们都应该坦然的去经历。去年这个时候我还待在家里，考研我一无所知，我不知道怎么报名，我当然还幻想可能可以保研，也不知道考研只能报一首学校，以及如果学习准备我也一无所知。所以我想说的是2020年考研的小伙伴完全来的及，先不必急。我当时只是心里有点着急，但实际上什么也没做。不知道考研是自己看书还是听视频。正式备考（7月份）之前，也随大流的一样的每天拿的数学训练册做几题玩一会手机，又或是看看课本，根本都不做题。到了8月份时候，我发现我之前看的高数，线代，概率论，我彻底彻底忘了，我看到一些概念，我甚至不知道什么意思。因为我没做题。我回答一下可能疑惑的一些问题，这也是我当年困惑的问题：考研累吗累，但是别无选择。我是7月份开始备考的，当时夏天天气最炎热的时候。一开始学习效率不高，第一个月还偶尔去看电影。不是很紧张。学习过程中看手机。但是我很快调整过来的，因为时间太紧了。我觉得可以从这几个方面缓解：首先，自己为什么考研？我自己考研首先我的专业课知识学的太不扎实，考研前，我的计网一塌糊涂，数据链路层我没理解这个链路到底什么意思？一条路吗？所以我没办法找工作。其次，我希望我在研究生中能学到更深层次的理论知识，如果一旦工作，基本很少有学习时间和自己的空闲时间的，我觉得我没办法很快接受这样的环境。其次，给自己复习订一个整体时间规划：我当时规划是这样，7-8月看完数学课本，7-9两个月看完4门专业课。10-12月每个月大概完成什么任务。每天也要有每天需要完成的计划，我一开始总是每天计划内容太多，导致完成不了，所以计划一定要合理。计划需要定期根据你的进度调整，这样你心里有数，你的进度到哪了。ps：也不至于网上说的不洗头，没必要，该整理自己还是要整理的干干净净的，头要洗，不然头发都没了每天学多长时间我每天早上9点醒，10点才开始起床学习。10-11：50 上午学习13：00 - 17：50 下午19：00 - 22：00 晚上这样一天也有10个小时了，到了10月份之后，晚上学到22：30左右。对于我来说，可以了。我早上起的很晚，大家可以根据自己作息安排，保证一天任务量能够完成即可。我也尝试过早起7点或者8点。试了几天，发现上午特别困，都快睡着了，根本学不进去，就索性放弃了。学习时候带手机吗不带。我一开始带。到了10月份之后就彻底不带，因为时间彻底不够了。有人说，查单词啊，要用手机……我觉得没必要，张剑的英语黄皮书，赠送了一个词汇本，遇到单词用这个查并标记好就行了，上面查不到的单词就没必要管。当然个人有不同安排，但是我建议不带。因为真的学习过程中很枯燥的，尤其是前期，不是太紧张的话很容易松懈。跨考计算机难度大吗我今天问了室友才知道三跨是什么意思。跨专业、跨省、跨学校。其实难度最大的应该是跨专业。跨专业的同学认为自己底子差，和计算机专业同学没办法竞争。老实说，本科学校交给我们的实在是太少太少，而且本科上课不积极，不认真。计算机网络、组成原理本科学的时候我也没有学明白，只是为了应付考试，做了一些题目，获得不错的分数。这些专业课知识都是我在考研期间才学的更仔细了一些。我是学渣，我摊牌了本科上课学的语言C / C++/ Java，其实都是学的很浅。C的语言我忘了差不多了，C++ 没仔细学，主要用的最多是java。语言你学了一门，你会发现语言是很有基础语法是差不多，所以跨考的同学熟练掌握一门语言我认为可以了，在这个基础上，再了解别的语言不会花费很多时间。(我个人认为java是门很容易基本使用的语言，因为很多方法都是jdk提供的，比如动态数组、list，当然c++也有，我更喜欢java)所以跨考学生不必要担心和别的…

java实现Apriori算法——频繁项集的计算
type: item
date: 2017-11-20T23:01:00+08:00
description: 前言之前学校开的选修课《数据挖掘》，布置的两道算法题，时间有限完成其中一道：用Apriori算法求特定支持度的频繁项集。算法本身不难，java萌新我却花费了一天的时间，特此记录。算法描述我们目的是求出项数为K的频繁项集即L(K)。Apriori算法的核心步骤是：L(K-1)通过自连接求出项数为K的候选项集合C(K)通过对C(K)进行一系列处理（剪枝 + 支持度判断） 得到L(K)集合在说明下面更多内容之前，先对一部分概念进行说明：事务：如第一张图中，每一行就是一个事务，如 T100 I1,I2,I5。其中T100是事务编号，这个随便命名，只要保证唯一即可。后面的I1 I2 I5是该事务中的项数据集：如图一，整个表就是数据集，就是所有的事务的集合。即D = {T100,T200…}项集：包含若干个项（如I1 、I2这样的项）的集合。可以看出项集和事务似乎有点项。但是项集更随意一点，任意几个项都能组成一个项集。但是事务是人为规定好的。可信度：项集在数据集中出现的重复次数。项集不一定需要在事务中连续出现。如{I1,I2,I5}项集在数据集中出现的次数为2次，分别是第一个和倒数第二个事务。接下来，详细分析算法中的两个步骤：1. 自连接：怎么个连接法呢？以图二中的L2频繁集的集合为例：项集支持度{I1,I2}4{I1,I3}4{I1,I5}2{I2,I3}4{I2,I4}2{I2,I5}2判断两个项集是否可以自连接要看两个项集的K-1项是否完全相同。如果满足条件，连接后的项集 = 第一个项集 + 第二个项集的最后一个元素。比如{I1 I2}与{I1 I3}满足自连接条件，连接后的项集为{I1 I2 I3}。2. 剪枝：剪枝是这个算法的核心，如果不进行这个步骤的话，也能得出正确结果，但是时间就会大大增加了。剪枝的核心是若某个集合存在一个非空子集不是频繁项集，则该集合不是频繁项集。我们通过自连接组成新的K项的候选项集后，需要通过剪枝判断是否满足条件。即找出该候选项集的含有(K-1)项的子集，并分别判断每个子集是否存在于K-1项频繁项集里。只要有一个不存在，那么该K项候选项集也不可能是频繁项集。这里我们只需要找含有K-1项的子集，而不用找所有的子集，因为这个算法是从下不断递归上来的，含有更少项的子集肯定是在频繁子集里的。问题关键是怎么寻找某个K项集的K-1项子集呢？很简单，依次把K项集中的每个元素去掉一个就可以了。完成了这两步骤，就完成了这个算法了核心步骤。3. 对精简后候选集统计每一个项集的支持度4. 根据最小支持度将候选项集转换为K项频繁项集合可以看出，如果不剪枝的话，第三步的工作量是非常大的。剪枝过后，候选集的体积大大减小了。但是获取含有一项的频繁项集因为没有候选项集，就需要特殊处理。这个很简单，就是统计数据集中的每一项的支持度，并和最小支持度进行比较，得到含有一项的频繁项集。代码分析github项目地址：https://github.com/ihewro/Aprioriimport java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.*; /** * @author hw * 算法名称：数据挖掘：Apriori算法求特性支持度下的所有的频繁集 * 算法原理： * * 0. 获取C1的时候，因为没有L(0)频繁集，所以单独处理一个函数 * 1. 已经频繁集L(k-1)，{}自连接+剪枝}求出精简后的候选集C(k) * 2. 根据精简后的候选集C(k)根据求出频繁集L(k) * * 数据结构： * 1. 使用List<String> 存储整个数据库的数据，string代表每一行的数据 * 2. 使用HashMap<String,Integer> 存储项集以及项集的重复次数，便于查找。是{项集}的集合。 * 3. 每个项集用String类型存储。项集中的每一项使用String.split(" ")方法变成数据，以便取用项集中的每一项 * * 给定的数据格式： * 1. 每个数据以空格隔开 * 2. 每一行代表一个事务T,事务编号就是行号 * * 示例数据： * 1. {11，12，13}是一个频繁项集，是属于HashMap<String,Integer>中的一个元素，数据类型为String. * 2. Set<String> = HashMap.keySet(); 用来存储HashMap的所有key的值，也就是存储所有的项集（不包括项集的重复次数） * * 相关概念： * 1. 支持度百分比 * 2. 支持度 * 3. 事务 * 4. 候选…

工作环境多设备同步问题
type: item
date: 2017-09-12T22:04:00+08:00
description: 按文件类型分类其实无非4种：文档代码项目资源即时文件上面是我对我所遇到的所有文件进行的分类，基于以下几种原则电脑上任何重要文件必须是同步的电脑的非同步文件定时清理博客只有一个，用于记录比较体系化的内容。其余的笔记都存储在Github上，坚果云备份。日记则专用APP记录大部分代码项目只使用GitHub存储小部分代码项目（由于每次写完都不行做一次commit的）采用坚果云 + Github同步存储绝不用网盘存储大型文件（除非临时中转）这样一来，文件归类非常明确，尽量避免重复叠加的现象。虽然有的项目用坚果云+github存储，但是并不是造成重复的困扰，这个我后面在提到。按照使用同步的软件分类可以分为8类：博客日记APP坚果云Github硬盘U盘Google PhotosiCloud坚果云的作用：坚果云是同步盘，而不同于百度网盘、硬盘等等备份工具，是一种无形之中就能同步备份的很好的备份工具。而Github则需要每次写完一个功能，commit + push 才能够备份。所以选择坚果云备份[一些不能每次都提交的代码项目]和[学习记录]。Google Photos的作用：Google的图片备份与同步十分强大，我用来备份所有设备上需要同步的图片：MacOS + Windows + Android。其中很厉害的一点，按照不同人物、场景进行识别归类，减少自己归类的时间，十分爽！iCloud作用：其实没卵用，至少对于现在的我来说，用处不大。因为苹果设备我只有电脑一台，没办法和其他的设备同步，而且iCloud只有限制5GB，权当桌面、文稿备份，定期清空即可。最重要一点是，Windows别分盘，不然的话，太乱太麻烦了！就这样了~

为js动态创建的元素绑定事件
type: item
date: 2017-08-01T01:15:00+08:00
description: 问题描述handsome主题评论的时候，如果是子评论，评论内容前面会有一个@某人的锚点链接。由于主题顶部的导航占用了50px的高度，所以点击锚点链接的时候必须向下偏移原来的位置50px，才能正常显示。为此，之前写了一个解决方法：锚点链接跳转后位置上下偏移一定位置方法但是，对于ajax生成的评论，如果不刷新页面的话，点击子评论左边的锚点链接却不会向下偏移。即：以前写的js对动态生成的页面元素不管用！举个很简单的demo，见下面的代码： 这是一个段落。 请点击任意一个 p 元素，它会消失。包括本段落。 在本按钮后面插入一个新的 p 元素 这段代码很简单。有两个功能：点击按钮会插入一个 标签及其内部内容点击p标签会 隐藏 或 显示 当前 p 元素但是这段代码的问题是：点击按钮生成 p 标签，如果点击生成的这个 p 标签，则无法 隐藏 或 显示 当前 p 元素。问题出在哪儿呢？解决方法原因在于，浏览器解析js代码的时候，会寻找当前页面的所有 p 标签，并给每个 p 标签绑定上相关事件（slideToggle()）。但是未来动态生成的 p 标签却无法再次重新绑定相关的事件了！因为js已经被浏览器解析完了 这里可以使用jQuery中的delegate()方法。我们通过bind绑定的点击（click）事件，只适用于当前页面的元素使用delegate绑定的点击事件，却可以适用于当前或未来的元素（比如由脚本创建的新元素）。所以核心代码改成$(document).ready(function(){ $("div").delegate("p","click",function(){ $(this).slideToggle(); }); });delegate的语法是：$(selector).delegate(childSelector,event,data,function)简单来说，即为指定元素（selector）的子元素（childSelector） ，监听某些事件（event），绑定相关函数（function）。该bug会在handsome v3.3.0 版本中得到解决参考文章js动态加载HTML元素时出现的无效的点击事件 - 何甘霖 - 博客园

typecho博客实现ajax评论
type: item
date: 2017-07-26T23:43:00+08:00
description: 前言系列文章：typecho博客实现pjaxinstantclick 中文文档相关文章： Typecho · JS简单实现评论ajaxTypecho全站pjax方案阅读前须知：以下内容对于实现了pjax效果的站点，可能需要自行增加回调函数。以下内容完全适用于实现了instantclick站点标有（*）内容为可选内容，可略去不读如有疑问可以发送邮件或者直接评论，千万不要加我QQ提问代码分析ajax的基础知识这里使用的是jQuery ajax的底层的一个方法：$.ajax()，执行这个方法的时候，会返回一个创建的XMLHttpRequest对象。基本语法：$.ajax({ url: ,//发送请求的地址 type: ,//请求方式，是post还是get请求 data: ,//要发送到服务器的数据 error: function() { //请求失败执行的回调函数 }, success: function(data) { //请求成功执行的回调函数，参数data是请求成功后的页面的纯文本 HTML 代码 } }) 实现步骤监听comment_form评论框的提交事件：$(comment_form).submit(function() { //提交事件 }）(*) 检查评论内容以及作者邮箱内容是否符合规则（预检）：这段代码比较简单易懂，不再赘述，直接看代码就行了。发起ajax请求：就是最基础的$.ajax() 请求：$.ajax({ url: $(this).attr('action'),//提交表form的action属性 type: $(this).attr('method'),//提交表form的method属性 data: $(this).serializeArray(),//要发送到服务器的数据 error: function() { //这里写一下提示信息代码即可 }, success: function(data) { //这部分内容在第四步中会解释 } }) 获取到ajax请求的数据，从这些数据中找到最新评论的内容，并把该内容插入到当前页面中：如何从ajax成功返回的数据中找到最新评论，我有两个思路：从ajax请求成功返回的数据中寻找到最新的评论插入到当前页面中。直接在提交的时候，拿一个变量把用户提交的内容保存起来，然后，直接按照你的评论结构组装成一条评论插入到当前页面中我是第一种方法，所以以下代码分析均只适用与第一种方法。第一个问题：理解ajax请求成功后返回的数据是什么东西？返回的数据是执行提交操作后页面的html代码，换句话说，返回的数据（data）就相当于手动刷新当前页面后的html代码所以，在返回的数据里面，肯定是可以找到最新评论的！第二个问题：如何找到最新评论的内容和应该插入到什么位置？首先你得保证你的评论将较新的的评论显示在前面。其次，我把用户评论简单分成两种：母评论（parent）：直接评论文章的子评论（children）：评论文章中的某条评论我们先来看如何找到最新评论的内容：其实很简单：typecho生成commentID的时候总是越来越大的，所以只要找到数据中最大的那个commentID就是用户刚才评论的最新评论了！代码就是：new_id = $(comment_list, data).html().match(/id=\"?comment-\d+/g).join().match(/\d+/g).sort(function(a, b) { return a - b }).pop(); 但是其实还是存在一个问题的：如果你启用了评论分页功能，由于typecho显示最新评论总是在第一页，所以当用户不在第一页发出了母评论，那么从数据（data）中找到的ID最大的评论并不是最新评论，这个时候，发送ajax请求成功后，就没必要向当前页面插入评论，因为最新评论再第一页。if ($('.page-navigator .prev').length && parent_id == ""){ new_id = ''; }//做一个判断 ... if (new_id)//new_id不为空的时候才会插入 $('#' + parent_id + " .comment-children .comment-list").prepend(data);接下来就是插入的位置问题:其实很简单，如果是母评论，直接插入到comment_list的最前面即可：$(comment_list).prepend(data);如果是子评论，要在监听页面中的回复链接，当鼠标点击回复按钮的时候，通过父元素的父元素（根据个人的评论结构而定），找到回复当前的评论ID(parentID)：$(comment_reply + ' a').click(functi…

记录一次vivo x5max+的root经历
type: item
date: 2017-02-17T14:05:00+08:00
description: 本篇单纯为个人记录，仅以备用与参考，仅适用于vivo X5max+ 2015-02-25b版本 ，360 也木有任何广告费~ root手机对各位机友来说，应该是家常便饭，但对于vivo手机真的是！很麻烦！首先这款手机查遍了互联网，也找不到第三方rec,就根本没办法通过线刷[超级权限SU]来破解root，只能用360root，尽管流氓，还得破解了。但是root成功后，一旦重启，system仍然会被锁，就成为[不完全root]，只能看看wifi密码之类的，不能修改核心文件。所以，一切需要写入system的操作都得在没重启之前。之前一直用[Google相册],不得不说Google公司技术确实没话说，国产软件还没有与Google相册相平衡的。我喜欢的这个软件有几点：自动备份并且，不限量的免费上传空间额度（高清画质）自动整理与归纳相册内容但是！更新后，一进入，一会儿就自动退出，连相片都没办法备份了（在挂V P N前提下）。Google 三件套之前一直没有刷到系统内置应用，所以想通过root，直接把Google三件套刷到系统中去，提高应用的稳定性。前期工作备份手机的信息（联系人，信息，重要相册之类）恢复出厂设置，清除SD卡所有内容（SD杂乱的东西都不要了！太占空间！）通过电脑把官方签名的降级ROM包下载到SD卡中 [PD1408BL_B_1.7.18-update-full.zip],其他版本的ROM包不确定能否root成功。刷降级包关机。然后开机键+上音量键 同时按，选择[recovery mode]，进入rec 模式双清缓存和用户应用数据，双清，防止后续可能出现未知错误把降级包刷进系统，出现[正在更新系统……]的界面启动手机(reboot phone)使用360root 获取系统权限下载电脑端的360 root，按照提示，会发现root成功！这时候千万不要关机，不要重启！否则一切功亏一篑下载[酷安]与[shadowsocks-Android]，在酷安中搜索[Link2SD]、[GO谷歌安装器] 、[绿色守护]、Lux。先挂上VPN，然后打开[GO谷歌安装器]，赋予root权限，直接把Google三件套刷进系统，然后在这个软件中选择[谷歌套件更新]，不然的话就提示，Google play 服务出错，闪退。在Google Play store 中下载[Google 相册]。使用[Link2SD]把[绿色守护]、[Lux]、[Google 相册] 转换为系统应用(注2:)。这时候，重启一下手机，Google相册正常使用了，Hooray!* 注1：[酷安]软件市场强烈推荐，因为上面的APP都是正版，评论区对于付费软件还有破解版（尽管并不好，但是很方便），[Link2SD]获取root权限后，可以直接把应用变成系统应用。[绿色守护]、[Lux] 为个人爱好，可以不装。* 注2：同上，[绿色守护]、[Lux] 为个人爱好，可以不刷进系统。至此，一切看起来差不多了~vivo X5max+上似乎没办法装Xposed 模块，所以更高级的玩法也没办法实现了。

利用upyun又拍云CDN服务配置全站HTTPS
type: item
date: 2017-02-10T00:27:00+08:00
description: 2017年是一个https加密时代，最新的chrome浏览器，任何没有https协议的表单页面都会被标记为不安全。https不仅能反劫持运营商的广告，并且还能让你的网址多一个s（逃）。如果你是VPS或者独立IP或者主机面板有导入SSL证书的选项，那么给博客添加SSL都会有大把的教程帮助你快速搞定。但是如果你的主机和我一样，是共享IP的渣渣虚拟主机，主机商又不提供SSL证书安装服务，那只能通过CDN在传输过程中全站HTTPS，这种方式更简单。以下介绍的就是使用又拍云的CDN服务配置全站HTTPS。注1：又拍云有一个[又拍云联盟]的站长扶持计划，只要在博客页脚加上upyun的logo，通过审核后，每个月有免费的15G流量和10G存储空间，对于我们这种个人博客基本够了。注2：除了国内的又拍云还有国外的cloudlfare同样支持免费CDN服务，我以前用过一次，效果不是很理想。首先进入又拍云首页,点击控制台，好了进入到了管理界面了。滑动到页面最底部，有一栏叫做[又拍云服务]，下面有一个栏目叫[全网加速服务],对，没有看错，就是这个栏目，点击[立即创建]。好了，进入好正题了。这个页面分为三栏目：创建服务回源配置为服务授权（操作员）第三项不用考虑，可以直接跳过！（第三项不用考虑，可以直接跳过！）创建服务又拍云和七牛的后台管理不一样，使用前，使用任何服务，都需要先创建一个服务项目。以我为例，名称为：ihewro。源站类型：当然填写自主源了。源站指的就是我们主机上的数据。加速域名：当然是自己博客的域名：www.ihewro.com。前提是要备案，回源配置回源是什么回事呢？其实也很好理解。使用了CDN服务后，用户访问你的博客是这样的一个过程：用户输入域名地址DNS服务器解析得到又拍云的CDN的CNAME记录根据用户地理位置 对CNAME记录继续解析获取距离最近的缓存服务器的IP地址，浏览器向缓存服务器发出请求缓存服务器根据浏览器提供的域名，通过Cache内部专用DNS 解析得到真正主机的IP地址。缓存服务器向真实主机IP地址发起请求缓存服务器从实际IP地址得得到内容以后，一方面在本地进行保存，以备以后使用，二方面把获取的数据返回给客户端，完成数据服务过程；看了上面对CDN过程是不是有了很明确的概念了，什么？根本没看懂？好吧，简单来说的过程是这样：输入域名——解析出 CNAME记录（CDN服务商提供的）——解析出地理位置最近的缓存服务器的IP地址——解析出真实主机的IP地址（主机商提供的）——向主机发起数据请求——得到数据并且存储到缓存服务器上——over！所以呢，CDN的关键就是通过CDN服务商提供的CNAME记录，使用户每次请求都是访问距离最近的缓存服务器，缓存服务器如果已经有数据了，直接返回数据。如果缓存服务商没有请求的数据，就继续向真实主机发起数据请求。而向真实主机请求数据的过程就是回源的过程。如果你还是很模糊，也没关系，上面那些都不重要！重要的是下面：第一项是填写[回源 Host],可以不填，那就不填！其实就是上面的第四步中的浏览器提供的域名。第二项是回源协议，一般共享IP地址的主机不能自主上传SSL证书的，如果强行以https访问，则会自动跳转到主机商设定的固定页面（我的主机就是这样），所以只能选HTTP,不影响后面配置全站HTTPS。（这项之后也可以修改的）第三项是线路配置，就是回源配置。回源地址是什么意思呢？就是CDN通过回源地址来获取你的真实主机上面的内容。回源地址分为：源站IP和源站地址两种。源站IP就是你主机的真实IP。一般主机商提供了A记录就是源站IP地址，直接填上IP地址即可！后面不需要改。如果回源地址填写的是域名地址，这个域名地址不能和加速域名相同，虽然这个域名叫做源站域名，其实可以理解为通过解析这个域名来获得源站IP的域名。这个[源站]非你想的那个[源站]。更换DNS解析记录如果上面CDN原理弄清楚了，会发现DNS解析记录必须更改为CDN服务商的提供的CNAME记录。这个记录在哪呢？点开 控制台——服务 可以看见你刚才新建的那个服务名称。点击配置，再点击解析，就可以看到CNAME记录。去你的域名解析管理那儿把你的域名CNAME记录指导这儿就行了！到这儿，全站CDN基本上大功告成了，可以用奇云测测试你的网站，可以看到有很多个节点！接下来就是配置全站HTTPS，后面就很简单了。配置全站HTTPS在该服务下，有一个HTTPS的栏目，点击管理，就可以自主申请免费HTTPS证书，流程都有说明了，不再赘述。申购是自动流程化，一般一个小时之内就能审核成功，然后在工具箱——SSL证书服务上面，点击HTTPS配置，就可以选择强制HTTPS访问了。最后一丁点文中图片如果是http资源一定要改成https地址，通过数据库的SQL语句,先进…