背景 第一次想到使用亚马逊 Kindle 电子书阅读器是一两年前,这也是终于将它从愿望单上划掉了......电子书商店 非常尴尬的是不同区域的的亚马逊账户账号数据不互通,单 Kindle 只能绑定至一个区域的一个账户,并且只能访问到该区域的电子书商店。...第二种是使用亚马逊 Kindle 推送服务,在 Kindle 注册后会分配推送邮箱国行版格式形如 @kindle.cn,将电子书文件发送至该邮箱将被自动推送到 Kindle 上下载,默认会保存在云端亚马逊...屏保壁纸在非越狱 Kindle 上不可修改,我没有越狱... 越狱后会有一些使用的插件可供使用,但大多比较鸡肋......关于越狱和更多的入门内容可以使用「书伴」网站,很全面、良心:https://bookfere.com KindleEar 推送服务 我平时会有浏览各种 dalao 博客和各种媒体平台内容的习惯,于是也希望在
本周的第一条推送,是工具推荐,第二条推送,是绘本推荐~ 谁让我们是爱读爱写的小伙伴呢~希望对你有帮助~ markdown-preview 安装markdown-preview插件后,通过快捷键ctrl-shift-m...一般的表格编辑软件都需要通过鼠标点击界面来进行表格编辑,这和markdown的初衷(纯文本编辑)相违背,而这款插件可以在纯文本的环境下,通过快捷键辅助编辑表格。 1....首先拷贝图片到剪贴板,然后在markdown文件里面按cmd-v(Mac) 或者 ctrl-v(Windows),图片就会自动保存到本地,并且在markdown里面自动添加对本地图片的引用。...并且支持多种图片引用方式: 1. base64 会使用base64方式编码图片,直接插入到markdown文本中,不需要额外存储图片文件 !...我个人配置了使用custom file的方式,因为我希望文件名有意义,自动生成的md5后续很难维护,虽然每次都需要手动输入文件名。
为了让各位小伙伴快速上手,加深对于 mongoose 的了解,我特地结合之前的项目整理了一下关于 mongoose 的一些基础知识,这些对于实战都是很有用的。...这里我主要说一下versionKey和timestamps: versionKey(上文有提到) 是 Mongoose 在文件创建时自动设定的。这个值包含文件的内部修订号。...versionKey 是一个字符串,代表版本号的属性名, 默认值为 __v 如果设置了 timestamps 选项, mongoose 会在你的 schema 自动添加 createdAt 和 updatedAt...('bufferCommands', false); 选项 connect 方法也接收一个 options 对象: mongoose.connect(uri, options); 这里我列举几个在日常使用中比较重要的选项...这里主要是结合我平时的项目(https://github.com/Jack-cool/rest_node_api)中对于mongoose的使用做的简单的总结。
在编译时会排除数组中的文件或文件夹 现在我们安装依赖项,使项目可以使用 TypeScript。...也就是说,我们现在可以启动服务器了——但是,我们还没有创建一些有意义的东西。所以,让我们在下一节中解决这个问题。...有了这些,我们现在可以在 DB 中保存 Todo 并返回新增的 Todo 和更新后的 todos 数组。...: ITodo } 这里, ITodo 接口需要跟 API 返回的数据类型一样。这里没有 mongoose , 所以需要加一些额外的属性来匹配 API 定义的数据类型。...然后,我们传递 ITodo 类型的数组给 useState 并且把它初始化为空数组。
分为两块视图层(View)和逻辑层(App Service) Flex:flex弹性布局 Express : http服务框架 websocket: 前后端消息的实时推送 mongoose: 操作mongodb...websocket模块 这里使用ws模块而没有选择使用http://socket.io,因为小程序客户端不支持http://socket.io const WebSocket = require('ws...我主要负责前后端的开发工作。这对从来没接触过服务端和小程序开发的我来说是一个挑战当然也是一次难得的学习机会。...从最初对小程序,服务端两眼一抹黑,到搭建出应用的雏形,实现基本的效果,再到最后的拆分整合代码,这期间经历了很多,也收获了很多。...从数据库的设计到后台数据库操作、会话管理、http服务接口一直到前后端数据交互、小程序前端,我对程序开发的大致流程有了更进一步的了解,弥补的之前对服务端知识的缺失。
功能还不够齐全并且我在使用中遇到了很多样式故障等,只用于 Side Project (那不就是全部项目了吗)就无所谓了啦 Icon 使用了一位国人设计师 dalao 的 Remix Icon (remixicon.com...数据库使用了 MongoDB (www.mongodb.org.cn),项目中使用的是基础 MongoDB 库实现的增查删改,但之后还是会换用更方面快捷的 Mongoose 之类的库。...邮件发送使用了 NodeMailer (www.npmjs.com/package/nod…) 和邮件推送(免费额度真香嘿)。使用了 SMTP 来发送邮件,所以没有用到 SDK。...定时推送任务使用了 Node-Schedule (www.npmjs.com/package/nod…),写起来到是很方便的呢,就是不知道后台常驻的性能了: // 引入依赖 const schedule...我最终是将前端后端都部署在了 Nginx 的服务器上,搜了搜技术社区推荐到了使用 Pm2 (www.npmjs.com/package/pm2) 来执行 Node.js 文件并且后台进程守护。
同时它也是一个对象数据库,没有表、行等概念,也没有固定的模式和结构,所有的数据以文档的形式存储(文档,就是一个关联数组式的对象,它的内部由属性组成,一个属性对应的值可能是一个数、字符串、日期、数组,甚至是一个嵌套的文档...学习了上面的介绍,相信你已经对Mongoose有了初步的认识和了解,千里之行,始于足下,奔跑吧,少年!...MongoDB —— 是一个对象数据库,没有表、行等概念,也没有固定的模式和结构,所有的数据以Document(以下简称文档)的形式存储(Document,就是一个关联数组式的对象,它的内部由属性组成,...拥有了Model,我们也就拥有了操作数据库的金钥匙,在后面的内容中,我们就会学习使用Model来进行增删改查的具体操作,所以,一定要熟悉他的创建格式哟!...Entity简述 Entity —— 由Model创建的实体,使用save方法保存数据,Model和Entity都有能影响数据库的操作,但Model比Entity更具操作性。
我们来看一下如何使用动规来解决。 动态规划 动规五部曲,分析如下: 确定dp数组(dp table)以及下标的含义 dp[i]:分拆数字i,可以得到的最大乘积为dp[i]。...这里我只初始化dp[2] = 1,从dp[i]的定义来说,拆分数字2,得到的最大乘积是1,这个没有任何异议!...我没有证明,而是直接用了结论。感兴趣的同学可以自己再去研究研究数学证明哈。...,就可以了,贪心的解法确实简单,但需要有数学证明,如果能自圆其说也是可以的。...,违背了dp[i]的定义!
输入仓库名称,输入描述信息(可选),下一个选项一般都是选择public,因为private需要收费,私有项目违背了开源的精神,README文件不要选,因为选择后,上传文件会比较麻烦。...点击Create repository就创建成功了。 推送到远程仓库介绍 我们先来看一下github的介绍。 ?...origin https://github.com/XXXXX/repo1.git 把本地的内容推送到远程仓库:git push -u origin master 使用SSH将本地仓库推送到远程仓库是第一种推送方式...创建ssh密钥及在github上配置公钥6 使用ssh方式将本地仓库推送到远程 在本地仓库文件夹的空白处右键,点击Git Bash Here; ?...使用ssh方式将本地仓库推送到远程1 在命令行窗口依次敲入这两行代码就可以了。 ? 使用ssh方式将本地仓库推送到远程2 期间如果出现需要回车的回车即可,如果需要输入yes的输入即可。
我年轻时注意到,我每做十件事有九件不成功,于是我就十倍地去努力干下去。...字段值可以包含其他文档,数组及文档数组,操作起来比较简单和容易。...,我们需要创建 data 文件夹,然后再 data 文件夹里创建 db 文件,之后再去执行启动服务端的命令,因为 mongodb 默认读取 D 盘的文件下的 data 如果没有就会出现闪退的情况。...2. mongoose 2.1 安装 npm i mongoose -S 2.2 使用 在 node.js 里采用的是CommonJS[4]的规范,需要我们采用 require 的方法来引入需要的包。...:'user'}) 在 mongoose 中,提供了 Schema 的类,我们可以在实例化的时候先定义mongoose.Schema,以免后续总是要出现丑陋的new mongoose.Schema()。
大家好,又见面了,我是你们的朋友全栈君。...,完全不需要,这也违背了Google设计Notification的初衷。...更关键的是,现在随便找一款App,没有推送的真是凤毛麟角,更可恶的是,做外卖的App给我推送奥运新闻,一条新闻十几个App推送,以至于现在很多用户都非常反感各种推送广告,就我本人而言,基本上会禁用所有广告类的...心跳包谁来发 既然需要定时任务,那么就需要使用AlarmManager来作定时唤醒了,原因我之前的文章有讲过,是关于处理器唤醒的原因,这里就不赘述了,大家可以参考我之前的文章: http://mp.weixin.qq.com...所以,不要再花心思去找什么进程保活的黑科技了,好好做好应用,提供用户的使用黏性,才是最佳的保活,而对于一些产品、运营所谓的『为什么微信、QQ都可以保活』这样的问题,我建议你回答它:『如果你能把产品做到微信
(注意:notifyAllObservers这个方法在《HeadFirst设计模式》中是将参数一个个传入的,那样确实便于理解,但也就仅限于教学使用,我这里就不再重复了,直接实现了一个通用的接口,可以在任何场景直接使用...我们可以看到它也需要展示空气、湿度、气压三个数据,所以,对于主题将所有参数传递过来没有什么问题,但若是它只需要其中一个或两个数据,那另外一个传递的数据不也就多余了么?...不过还没完,我想你也注意到了Java原生的API将这个方法设置为了protected,也就是说只有其子类才能使用,想在外部使用就没法了,不过,我们已经掌握了观察者模式的实现,如果需要我们可以自己实现一套而不必非得使用...总结 观察者模式也是非常的简单,当多个对象依赖于一个对象的状态改变时我们就可以使用该模式。...在JavaAPI中提供了对观察者模式的支持,但需要注意的是主题不再是一个接口,而是一个类,也就有点违背了“针对接口编程,而非针对实现编程”原则。
K了,这也激励着我不断去完善他,一方面是得对得起关注学习的人,另一方面也是想让自己能过通过慢慢完善一个项目来让自己提高。...由于一对一的方式更加简单,我现在只考虑多对多的情况,也就是在一个房间(也可以称为群组,后面都以房间称呼)中的未读消息,那么设计这样的一个功能,首相我将它分成了3种用户。...MongoDB,Node天然搭配的MongoDB的优势,这里就不再进行讲解,Node操作MongoDB的模块叫做mongoose,具体的参数方法,可以查看官方文档。...事件,来重置该用户房间内的未读消息,并且该用户加入房间列表。...接下来还需要推送,那么哪些用户需要实时地推送呢,对的,就是那些在线用户并且不在房间内的用户。因此在这里也需要一个判断。 这样就完美了,能够精确地给用户增加计数,并且精确地推送给需要的用户。
,完全不需要,这也违背了Google设计Notification的初衷。...更关键的是,现在随便找一款App,没有推送的真是凤毛麟角,更可恶的是,做外卖的App给我推送奥运新闻,一条新闻十几个App推送,以至于现在很多用户都非常反感各种推送广告,就我本人而言,基本上会禁用所有广告类的...心跳包谁来发 既然需要定时任务,那么就需要使用AlarmManager来作定时唤醒了,原因我之前的文章有讲过,是关于处理器唤醒的原因,这里就不赘述了,大家可以参考我之前的文章: Android中的睡与不睡...所以,不要再花心思去找什么进程保活的黑科技了,好好做好应用,提供用户的使用黏性,才是最佳的保活,而对于一些产品、运营所谓的『为什么微信、QQ都可以保活』这样的问题,我建议你回答它:『如果你能把产品做到微信.../eclipsexys/article/details/51283232 虽然我极力反对这种方案,我坚持认为,做好App,提升用户使用黏性,才是提升推送到达率的关键
在弹出的输入框中输入:/usr/local回车,如下: ? 将mongodb复制与此文件夹中。...配置环境变量 打开终端,输入 open-e.bash_profile(如果没有的话,先 cd~然后 touch.bash_profile创建后打开) 在打开的文件中加入 export PATH=${PATH...用Command+S保存配置,关闭上面的.bash_profile编辑窗口。 然后在下图中输入 source .bash_profile 使配 置生效。...如果我要实现某篇文章的评论统计的功能。...最牛逼的地方就是根据你定义的模型自动帮你实现后台管理界面,创建、管理、编辑和删除等,这得省掉很多功夫了。
“写一次,无处不在”它经常被引用,虽然我不会认为它有时是项目的完美解决方案,但这听起来太好了。...跨平台移动应用开发工具正好满足了开发者不断增长的跨平台开发需求,也满足了企业想要节省时间成本和人员成本的愿望。...点击苹果证书按钮 点击新增 输入证书密码,名称 这个密码不是账号密码,而是一个保护证书的密码,是p12文件的密码,此密码设置后没有其他地方可以找到,忘记了只能删除证书重新制作,所以请务必记住密码...还有为了安全起见,密码不要太简单。...否则您需要手动管理p12文件在不同电脑之间的传输,并且一但创建下载后,无法在其他电脑下载,只能手动复制文件过去。一般情况下,推荐使用appuploader服务同步。
“写一次,无处不在”它经常被引用,虽然我不会认为它有时是项目的完美解决方案,但这听起来太好了。...跨平台移动应用开发工具正好满足了开发者不断增长的跨平台开发需求,也满足了企业想要节省时间成本和人员成本的愿望。...点击苹果证书按钮点击新增输入证书密码,名称这个密码不是账号密码,而是一个保护证书的密码,是p12文件的密码,此密码设置后没有其他地方可以找到,忘记了只能删除证书重新制作,所以请务必记住密码。...还有为了安全起见,密码不要太简单。...否则您需要手动管理p12文件在不同电脑之间的传输,并且一但创建下载后,无法在其他电脑下载,只能手动复制文件过去。一般情况下,推荐使用appuploader服务同步。
这就导致了很多新手小白、学生党看不懂,不会用,瞎折腾,这完全违背了我的初衷。...于是我就照着它所拥有的功能,结合了我对版本更新的理解进行了重新设计,感兴趣的可点击查看框架UML设计图。 解决痛点 使用简单,只需一行代码即可完成版本更新功能。...早在2017年工信部就号召所有的厂商来制定统一的Android消息推送平台,可到现在也没有下文(究其原因还是这其中的利益太大了,谁也不想妥协)。...解决痛点 弱化了Android各大消息推送平台的差异。 简化了Android各大消息推送平台的集成和使用。 提供了一致性的消息推送入口和出口。 支持推送消息的过滤处理。...支持对不定长数组解析【需要注意的是,在一条协议中有且只能有一个不定长的数组,否则将无法解析成功】。
现在已经有了 npm 的日志记录模块。这些模块可以将日志存储在不同格式或级别的文件中。我们将使用流行的ORM Mongoose 讨论 Node.js Express 程序中的 API 日志记录。...changes(value, base[key]) : value }) } return changes(curr, prev) } 我使用了 lodash,这是一个提供相同功能的受欢迎的库...让我们分解上面的函数,看看发生了什么: _.transform: 它是数组 .reduce 的替代品。它会迭代你对象的 keys 和 values。它提供了一个 accumulator,是第一个参数。...isEqual:此方法支持比较数组、数组缓冲区、布尔值、日期对象、错误对象、映射、数字、对象、正则表达式、集合、字符串、符号和类型化数组。...步骤3:创建一个插件用来 diff 并将其保存到数据库 现在我们需要跟踪数据库中的前一个 document 并在保存到 mongodb 之前创建一个 diff。
/common/img/logo.png" alt=""> mongoose 操作mongodb的 npm i mongoose --save 就不一一列举所有的插件了(没有用vuex) 开发上的一些事...数据库的相关操作 我这次用mongodb,主要是因为可以用js来操作,对我来说比较简单,mysql我不会用。...初始化一条数据 如果对mongodb,mongoose没有基础的了解,建议看一看mongoose深入浅出 ,mongoose基础操作 // controllers/student.js const...,但是有很多时候不同的集合直接是需要关联的,这是就用到了mongoose提供的populate 直接看图,不同集合直接的关联,用的就是_id,比如下图中,学生参加的考试,关联了试卷,试卷里面又关联了题目...更多的可以看看我项目中的实际代码都在server/controllers下面 关联集合的新增 在系统中,教师可以增加试卷,这个时候我就不知道该怎么保存前台传过来的数据。
领取专属 10元无门槛券
手把手带您无忧上云