分类目录归档:科技

Mongoose采坑杂记

1. 集合命名

Mongoose 集合命名必须最后是以s结尾,比如你新的集合名字是:fe,Mongoose读取的时候就会加上一个s:fes

如果你的集合命名是fes 则读取的时候不会在结尾处添加s

2. _id 长度问题

《MongoDB权威指南》第2章入门,本章会介绍一些MongoDB 的基本概念。本节为大家介绍_id和ObjectId。

MongoDB 中存储的文档必须有一个"_id" 键。这个键的值可以是任何类型的,默认是个ObjectId 对象。在一个集合里面,每个文档都有唯一的"_id" 值,来确保集合里面每个文档都能被唯一标识。如果有两个集合的话,两个集合可以都有一个值为123 的"_id" 键,但是每个集合里面只能有一个"_id" 是123 的文档。

  1. ObjectId

ObjectId 是"_id" 的默认类型。它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它。这是MongoDB 采用ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因,因为在多个服务器上同步自动增加主键值既费力还费时。MongoDB 从一开始就设计用来作为分布式数据库,处理多个节点是一个核心要求。后面会看到ObjectId 类型在分片环境中要容易生成得多。

ObjectId 使用12 字节的存储空间,每个字节两位十六进制数字,是一个24 位的字符串。由于看起来很长,不少人会觉得难以处理。但关键是要知道这个长长的ObjectId 是实际存储数据的两倍长。

如果快速连续创建多个ObjectId,会发现每次只有最后几位数字有变化。另外,中间的几位数字也会变化(要是在创建的过程中停顿几秒钟)。这是ObjectId 的创建方式导致的。12 字节按照如下方式生成:

前4 个字节是从标准纪元开始的时间戳,单位为秒。这会带来一些有用的属性。时间戳,与随后的. 5 个字节组合起来,提供了秒级别的唯一性。

由于时间戳在前,这意味着ObjectId 大致会按照插入的顺序排列。这对于某些方面很有用,如将其作为索引提高效率,但是这个是没有保证的,仅仅是“大致”。

这4 个字节也隐含了文档创建的时间。绝大多数驱动都会公开一个方法从ObjectId 获取这个信息。

因为使用的是当前时间,很多用户担心要对服务器进行时间同步。其实没有这个必要,因为时间戳的实际值并不重要,只要其总是不停增加就好了(每秒一次)。

接下来的3 字节是所在主机的唯一标识符。通常是机器主机名的散列值。这样就可以确保不同主机生成不同的ObjectId,不产生冲突。

为了确保在同一台机器上并发的多个进程产生的ObjectId 是唯一的,接下来的两字节来自产生ObjectId 的进程标识符(PID)。

前9 字节保证了同一秒钟不同机器不同进程产生的ObjectId 是唯一的。后3 字节就是一个自动增加的计数器,确保相同进程同一秒产生的ObjectId 也是不一样的。同一秒钟最多允许每个进程拥有2563(16 777 216)个不同的ObjectId。

  1. 自动生成_id

前面讲到,如果插入文档的时候没有"_id" 键,系统会自动帮你创建一个。可以由MongoDB 服务器来做这件事情,但通常会在客户端由驱动程序完成。理由如下。

虽然ObjectId 设计成轻量型的,易于生成,但是毕竟生成的时候还是产生开销。在客户端生成体现了MongoDB 的设计理念:能从服务器端转移到驱动程序来做的事,就尽量转移。这种理念背后的原因是,即便是像MongoDB 这样的可扩展数据库,扩展应用层也要比扩展数据库层容易得多。将事务交由客户端来处理,就减轻了数据库扩展的负担。

在客户端生成ObjectId,驱动程序能够提供更加丰富的API。例如,驱动程序可以有自己的insert 方法,可以返回生成的ObjectId,也可以直接将其插入文档。如果驱动程序允许服务器生成ObjectId,那么将需要单独的查询,以确定插入的文档中的"_id" 值。

_id和ObjectId

七牛云对象存储图片无法预览

使用了七牛云对象存储,可能是自己当时误操作,导致上传的图片无法正常语言出现以下错误:

{
    "error": "bucket is protected"
}

原因是因为开启了【原图保护】,关闭即可。


wtf,这是什么鬼错误,搜索了许久无法定位错误信息是什么导致的,无奈🤷 之余,只好走了以下七牛云的工单系统。很快(2小时)就解决了问题。特此Mark一下。

macOS 下 MySQL 出现 only_full_group_by 的错误

  • 系统:macOS Sierra 10.12.2 (16C67)

1. 先查看本地 MySQL 的安装目录

cd /usr/local/
# 列出目录文件
ls
lrwxr-xr-x   1 root  wheel    30B  4  9 12:41 mysql -> mysql-5.7.17-macos10.12-x86_64
drwxr-xr-x  12 root  wheel   408B  4  9 12:41 mysql-5.7.17-macos10.12-x86_64

PS:

mysql -> mysql-5.7.17-macos10.12-x86_64 是电脑目前使用的MySQL版本。

先查看本地 MySQL 的安装目录

2. 复制 MySQL 下的 my-default.cnfetc

sudo cp /usr/local/mysql-5.7.17-macos10.12-x86_64/support-files/my-default.cnf /etc/my.cnf 

3. 编辑 etc/my.cnf

sudo vi /etc/my.cnf

4. 设置 sql_model

找到 sql_model 并修改值:

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION  

5. 重启 mysql

重启 mysql 即可。


转自:http://blog.csdn.net/fenfenguai/article/details/53941379

GIF 2017 极客公园创新大会[杂记]

新疆界

  • 基因 人类的源代码 1990
  • crispr/cas9的发现
  • 让记基因编辑成为可能
  • 杨璐菡 让每个人都有“配件”,器官额移植 经济问题 不是科技问题
  • 手机,工具?器官?体外进化
  • 摩尔定律,正在逐渐消失…
  • 量子计算是什么?
  • 宇宙
  • 突破射星计划
  • 富豪和科学家的联手
  • 引力波
  • 在不断发展的科技面前 “不可能”只是一个观点/"impossible" is just an opinion
  • 引力波会改变什么的最佳答案:

探索

  • 埃及・马斯克 SpaceX
  • 创业公司 – 才是这个世界上最有力的推动力的力量
  • ces
  • 次时代工业化浪潮 neo-inductraialization
  • 智能化浪潮下,整个世界都需要被重新制造

鹏有说

  • 雷军:
    • 或许还需要5年,才能为之更疯狂
    • 概念手机 – 无关紧要是否成功,想怎么做就怎么做
    • 是否有人反对:无人反对做mix
    • 小米之家:提高效率、直属去管理
    • 6年发展规模很大,速度很快,局部不夯实,丢掉KPI
    • 感觉不到的设计,设计的很精致
    • 工业设计

突破

  • 建立新时代的启点
  • AI
  • 数据量爆发、计算力提升、深度学习的突破
  • 人工智能,还为成为新物种,但已经是新元素
  • AI终极目的
  • 创造力 或许是人类的最终的价值所在
  • 当我们走到人类知识的地平线:已经老到无力探索
  • 突破点:人类寿命、提高知识学习效率
  • 知识分享
  • 接受信息的“带宽” 决定我们接受知识的效率 声音
  • 在技术面前:足够的耐心与敬畏很重要

潮流

  • 共享单车
    • 担心:难道不会被偷吗?
    • 科技可以:不因为1%的恶而伤害99%的善良
    • 从现实到虚拟:共享的概念正在延续

如何清除Google Chrome控制台的历史记录(consoleHistory commandLine)

问题出现

console history

如何清除掉这些繁琐的历史记录呢:

  • clear();
  • console.clear();
  • Ctrl/control+L

然而执行完并没有什么用,历史记录还是会存在。
<!–more–>

找到问题解决方法

然后就去stackoverflow上面找到一个解决方案特简单:

clear console history

从Chrome 50起,您可以从控制台上下文菜单中使用“Clear console history(清除控制台历史记录)”。

测试是否OK

test console history

why

咦,上图怎么会有两个控制台呢:

1 打开控制台(command + option + i),控制台右上角的三个点(Customize and control DevTools\定制和控制DevTools)
console

2 光标定位到弹出来的控制台,然后按快捷键 command + option + i 定制和控制DevTools的DevTools。
console

3 恩,就酱紫,两个都出现了。
console
console

4 然后你找到 Application tab -> Storage -> Local Storage -> chrome-devtools://devtools -> consoleHistory 这个数组里面就是所有commandLine历史记录

搞定,玩的愉快🤣,Happy New Year!

Merry Christmas

Merry Christmas!

<p data-height="316" data-theme-id="light" data-slug-hash="oYVyLd" data-default-tab="result" data-user="Keystion" data-embed-version="2" data-pen-title="Google search result page christmas themes" class="codepen">See the Pen <a href="http://codepen.io/Keystion/pen/oYVyLd/">Google search result page christmas themes</a> by Keystion (<a href="http://codepen.io/Keystion">@Keystion</a>) on <a href="http://codepen.io">CodePen</a>.</p>
<script async src="https://production-assets.codepen.io/assets/embed/ei.js"></script>

意外的发现了Google为搜索Christmas设定的主题,特此Mark一下!
<a href="https://www.google.com/?gfe_rd=cr&ei=dx1aWLfxIKTz8AfF146oAg&gws_rd=cr&fg=1#newwindow=1&safe=active&q=christmas">尝试搜索一下:christmas</a>

在Nginx上修改MySQL root用户密码

phpmyadmin

vi /etc/my.cnf

/etc/my.cnf文件的[mysqld]下面(换行)添加skip-grant-tables,保存并退出(ESC->:->wq->回车)。

<!– more –>

之前

# The MySQL server
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock

之后

# The MySQL server
[mysqld]
skip-grant-tables
port            = 3306
socket          = /tmp/mysql.sock

重启MySQL:

/etc/init.d/mysql restart

成功提示:

Stopping MySQL: [ OK ] Starting MySQL: [ OK ]

接下来继续输入:mysql;输入

mysql> USE mysql ;
mysql> UPDATE user SET Password = password ( 'OHYnECf17EPdG6wb' ) WHERE User = 'root' ;
mysql> FLUSH PRIVILEGES; 
mysql> quit ->回车

完成

重启MySQL

/etc/init.d/mysqld restart

输入mysql -u root -p就会提示输入新密码,输入刚才设置的秘密就可以进去,说明设置成功。

此时你以为结束,并没有,记得把skip-grant-tables/etc/my.cnf里面删除掉,不然即使你通过刚刚的过程修改了root用户的密码最后还是无法对数据库进行

phpmyadmin

正文结束了,其实下面还有一些文字👇


一个漂亮的无纺布手提袋,不单单只是一个商品的包装袋。

还能够印上贵公司的标志或者广告语,消费者在购物的同时既得到了一个精美的手提袋,而商家也得到了无形的广告宣传两全其美。

适合任何公司、任何行业作为广告宣传、赠品以及外包装之用。

海创以专业的设计和制作工艺,为您做出优质的手提袋,欢迎订购!

联系一下子呗:15003209070

无纺布手提袋