这是 MDN上的一篇文章,介绍JavaScript的继承和原型链的基础知识,在此简单翻译一下,加深理解。当然MDN上已经有了中文的版本

对于有基于类语言(class-based language, 如Java和C++)经验的开发者来说,初接触JavaScript可能有一些疑惑,因为它是动态类型的,并且本身不提供类型实现(class implementation),虽然ES6中引入了class关键字,但是也只是一个语法糖,JavaScript仍然是原型继承的(prototype-based)。

阅读全文 »

snp是前段时间开始的一个个人项目,受Chrome导航插件 FVD SpeedDial的启发,做一个自定义的导航页,后面会陆续写一些这个项目的文档,今天主要是总结一下到现在为止,MongoDB设计的一些失误。

snp使用MongoDB作为数据存储,MongoDB作为一个老牌的NoSQL数据库,比较适合这个项目的需求,之前一直是使用MySQL做数据库,虽然MySQL肯定也能满足需求,但是一来为了熟练一些MongoDB的使用,而来NoSQL存储对应的数据确实更加方便,就没有选用MySQL了;一开始设计时还考虑过使用SQL Lite做存储,因为SQL Lite足够小,部署比较方便,不过snp本来是一个练手的项目,学习MongoDB也是其中目的,也就没有使用SQL Lite了。

数据描述

我们知道NoSQL的一个很大的优势是没有了关系型数据库的模式约束,可以在一个数据集合中快速存取不同“schema”的数据。

阅读全文 »

今天登录前段时间买的VPS,发现motd消息中有一段如下:

There were 405 failed login attempts since the last successful login

基本过几个小时再登录就有这个消息,小的几百次失败登录尝试,多个可能几千次,看来网络上真的是错综复杂,不安全呐,整天有人想着办法要“勾搭”互联网上的server。没办法只好配置一下SSHD,要不这么一天到晚被尝试登录也受不了。

如果是购买的远程主机建议配置到普通用户的密钥登录,关闭root登录权限和密码登录权限,最好把sshd的端口改了,因为大部分尝试登录都是针对默认端口22的。下面是操作步骤。

因为是远程主机所以操作要按照一定的顺序,要不然可能导致不能登录,注意的是在配置过程中不要退出已登录的回话,直到配置完再退出最初的会话。

创建新用户

用现在的用户名密码登录到服务器,这个session不要关闭,中间对sshd的配置及sshd服务重启不会断开这个连接的。

useradd me
passwd me
usemod -aG wheel me

这里假设已经编辑 visudo 将wheel用户组设置为拥有 sudo 权限。如果还没有的话使用 sudo visudo 找到相应的行取消注释即可,注意千万不要手动编辑 /etc/sudoers 文件,以前同学手动编辑该文件导致的惨烈后果记忆犹新。。。。

配置无密码登录

我们都知道要实现无密码登录就是在本地生成一个密钥对,然后使用用户名密码将公钥(.pub)上传到服务器,然后登陆时指定对应的私钥,就不需要输入密码了。

生产密钥对

使用下面的命令

ssh-keygen -t rsa -f me.server
阅读全文 »

notepad++是一个非常好用的免费文本编辑器,用来替代Windows默认的编辑器非常的方便,但是在编辑时CJK字符会把一句话看作一个“单词”,导致换行显示的很奇怪,找了一下好像没有直接设置的选项,需要装一个插件来运行一个脚本(在每次启动时运行一次)

具体步骤如下:

  1. Install NppExec (through the Plugin Manager is easiest)
  2. In the menu go to, Plugins->NppExec->Execute…
    Paste this text
sci_sendmsg SCI_SETWRAPMODE SC_WRAP_CHAR
npp_console 0

Click save and give it a name

  1. Go to Plugins->NppExec->Advanced Options…
    In the top right you can select a script to run at startup, select the script you just saved

This should set this option each time you start up N++

这是官方wiki的一个页面,很有用就搬移过来,关于Go中slice的使用的tricks的总结:

Since the introduction of the append built-in, most of the functionality of the container/vector package, which was removed in Go 1, can be replicated using append and copy.

Here are the vector methods and their slice-manipulation analogues:

AppendVector

a = append(a, b...)

Copy

b = make([]T, len(a))
copy(b, a)
// or
b = append([]T(nil), a...)

Cut

a = append(a[:i], a[j:]...)

阅读全文 »

之前一直使用 LiteIDE 编写Go的程序,在单个文件或文件比较少的时候liteide还是挺好用的,但是文件多了的时候自动提示总是不能即使更新,新添加的方法总是没有提示,感觉是自动提示的索引更新太慢的原因。

前几天把IDEA的golang插件装了一下,发现用IDEA写go的项目舒服多了,intellij的IDE不愧是宇宙最好的IDE之一。免费的社区版(IDEA 15 CE)也支持Golang插件,不过CE没有Nodejs支持,后来装 Vue.js 的插件时遇到了问题,所以如果对盗版没有愧疚的话装 IDEA的ultimate版本也可以。

安装语言支持插件

先安装Golang语言支持的插件,插件地址:https://github.com/go-lang-plugin-org/go-lang-idea-plugin,在默认的插件库中没有,需要手动添加 File->Settings->Plugins->Browser repositories->Manage repositories 点右侧的加号,添加源:

Paste the URL for the version you need:

然后到安装插件那搜索 go 就可以了。

配置SDK

在IDEA中添加GO SDK: File->Project Structure->SDKs 点击添加,选择Go SDK,如果系统配置好了Go的环境变量的话会自动定位到Go的目录比如我的 C:\Go,添加好SDK后修改项目的SDK。

File->Project Structure->Project 现在Project SDK下拉框应该可以选择Go的SDK了。

这样就可以了,之后写Go的项目就非常方便了

一些常用的工具分列:

Web管理界面

adminMongo:一个基于Web的MongoDB管理工具, https://github.com/mrvautin/adminMongo,功能没有phpMyAdmin那么强,但是勉强可用,Windows下的mongo shell 太弱鸡了。

RockMongo:一个PHP开发的Web管理工具,看起来和phpMyAdmin很像,应该比adminMongo好用,网站: http://www.rockmongo.com/

个人觉得,这些mongodb的管理工具远不如Linux下的命令行客户端方便

Chrome插件

最常用的一些插件

  1. Advertising Terminator
  2. Chromium Wheel Smooth Scroller
  3. CSS3 Generator
  4. Enable Copy
  5. Extension Manager(aka Switcher)
  6. Flashcontrol
  7. Force Custom Fonts
  8. Free Download Manager Chrome extension
  9. Hasher
  10. HTTP Headers
  11. HTTPS Everywhere
  12. JSONView
  13. LastPass: Free Password Manager
  14. PHP Ninja Manual
  15. Postman
  16. Proxy SwitchyOmega
  17. Smooth Key Scroll
  18. Speed Dial[FVD - New Tab Page, 3D…
  19. Stylish
  20. uBlock Origin
  21. Vimium
  22. Vue.js devtools
  23. WhatFont
  24. WordsBaking+

Windows增强

  1. Clover,资源管理器标签化工具,早期的Windows10兼容性不太好经常会崩溃,现在没有问题了
  2. ALTRun 快速启动工具,虽然很久没有维护了,但是功能很强大,各版本Windows都兼容
  3. Proxifier,全局代理设置工具,再也不需要去各个软件下找设置代理的方法了,还可以为本身不支持代理的软件设置代理
  4. Wgesture,全局手势工具,可以对不同软件定义手势行为,非常方便
  5. XShell, SSH客户端,学生和家庭免费使用,好用,方便
  6. f.lux 屏幕自动调节色温,这个见仁见智,有人喜欢,有人不喜欢,个人使用了挺长时间了
  7. Sublime Text,强大的文本编辑器,也可以当作IDE使用,推荐给别人没有不喜欢的,可玩性非常高
  8. 4t Tray Minimizer,一个为Windows的窗口添加增强功能的工具,能添加置顶、收缩、透明等效果。

今天在使用mgo(go的mongodb驱动)时遇到了一个奇怪的坑。我想一次性插入一组数据到一个collection,看insert方法的定义如下:

func (c *Collection) Insert(docs ...interface{}) error {
_, err := c.writeOp(&insertOp{c.FullName, docs, 0}, true)
return err
}

使用一个可变参数,是 interface{} 类型的,应该传一个对象数组就可以了,之前按照mgo的example使用是这样的:

阅读全文 »

很久之前(大概一年前)玩过一阵mongo,也就是安装了,curd什么的操作操作,到现在基本都忘记了,今天准备做个东西,想用mongo来存储,就顺便做点笔记吧。

还好之前安装的mongo的server还在,是3.0.7的,也能用了,就不升级了。

启动服务:

sudo systemctl start mongod

登录及常用操作,因为是本地服务也没有帐号密码直接就登录了:

mongod
use new_db
new_db.new_collection.insert({"name":"mi", "site":"baidu.com"})

这里,新建一个db并不要特殊的命令,只要 use 加新db的名字,然后再往里面插入一条数据,同样新的collection也直接使用就可以了,这样下来 show dbs 就能看到刚刚的db了。

use new_db	// change current database to new_db
show dbs // list dbs
show collections // show collections of current database

golang 的 mongo驱动:mgo

mgo是Go的mongoDB 驱动,网站是: https://labix.org/mgo, 文档比较可用但是也不是很全。

向要在项目内复用mgo的连接,结果实现很不好,似乎在 import 的时候会重新导入文件的变量,搞了半天都没有搞定复用连接

太二逼了,有一个底层调用用的旧的方法,所以总是新建了连接,我靠,花了好长时间才找出来,怪不得各种搜都搜不到内容