解决MAC系统下使用Navicat连接MAMP的MySql报错

mac系统的Navicat如果连接MAMP的MySql跟连接系统默认的MySql有一点区别。需要设置一下套接字地址,不然会报错。
1. 首页进入MAMP的主页在页面的MySql面板下找到 Socket /Applications/MAMP/tmp/mysql/mysql.sock 这行,把MySql的Socket地址复制下来。
2. 在Navicat编辑连接的窗口中选择“高级”选项卡,在使用套接字文件的地方把连接粘贴上去即可。

理解JS中的迭代器和生成器

一、迭代器

在解释什么是迭代器之前先看一下下面的这段代码

var arr = [1,2,3]
for (var i = 0, len - arr.length; i < len; i++){
    console.log(arr[i])
}

这是一个非常常见的for循环,不过它存在一个问题。就是如果嵌套的过多的话,就特别容易出问题,难以维护,还有大量的重复性代码。
就像Promise为了解决回调地域一样,迭代器就是要解决这些嵌套的for循环,让代码更简洁和更容易维护。

特征:迭代器函数定义了一个next()方法,这个方法执行后会返回一个对象,拥有value和done两个属性。为了更好的理解迭代器的运行方式,我们可以自己手写一个迭代器函数,代码如下:

function createIterator (items){
    var i = 0
    return {
        next: function () {
            var done = (i >= items.length)
            var value = !done ? items[i++] : undefined
            return {
                done,
                value
            }
        }
    }
}
var iterator = createIterator([1,2,3])
console.log(iterator.next()) // {value:1, done:false}
console.log(iterator.next()) // {value:2, done:false}

我们定义了一个函数,这个函数每次执行它的next方法的时候都会返回它下次执行的时候的返回值和是否到头了。

二、生成器

如果上面的迭代器理解了,那么我们就来了解一下生成器。
定义:一句话描述生成器就是“一个能够返回一个迭代器函数的函数”。
特征:生成器函数用*function来表示,内部可以使用yield关键字。
现在把上面迭代器的那段代码现在换成生成器的方式来写:

function *createIterator(){
    yield 1
    yield 2
    yield 3
}
let iterator = createIterator()

console.log(iterator.next().value) //1
console.log(iterator.next().value) //2
console.log(iterator.next().value) //3

这样返回的结果和上面的代码一样,不过这些值都是写死的,所以我们改一下,让它能够接受参数。代码如下:

function *createIterator(items){
    for (let i = 0; i< items.length; i++){
        yield items[i]
    }
}
let iterator = createIterator([1,2,3])

console.log(iterator.next()); // { value:1, done: false }
console.log(iterator.next()); // { value:2, done: false }
console.log(iterator.next()); // { value:3, done: false }
console.log(iterator.next()); // { value:undefined, done: true }

好了,看到这里就算是基本理解了,至于一些使用的细节,比如代码格式什么的,去查文档吧。使用场景呢,需要自己去实践中练习。本文追求简单,高效的让你理解什么是迭代器和生成器,所以不能写的太详细和啰嗦,好的文章就是要“干”一点。

小程序项目采坑记录之利用try catch跟踪问题

最近忙了半年的小程序终于上线了,第一天上线就暴露出来很多问题,面对每日几万人的使用量,n种不同的终端设备,测试部门测不出来一些问题也是情有可原。
其中比较典型的一个问题就是,小程序的管理后台会报警提示我一个页面进来的参数JSON格式不正确,但是这个问题出现的几率十分不规律。1万个人里面可能也就2-3个人会出现吧。而且测试部的同事根本就不能复现出来这个bug。
因为告警只提示你摸个页面会出现JSON错误,而没有具体的Log。
困扰了很久之后,我终于想出来了一个办法,利用try chatch把报错信息捕捉到,然后把JSON对象打印到页面上面。就这样用了一个很简单的小办法就解决了这个难题,现在把这个技巧分享出来,代码如下:

 onLoad(options) {
        let that = this
        let params = {}
        let p = decodeURIComponent(options.params || '')
        try {
            params = JSON.parse(p || '{}')
        }
        catch (exception) {
            wx.showModal({
                title: '数据错误',
                content: '错误代码:' + p,
                showCancel: false,
            })
            console.log(exception)
            return
        }
        ......

通过VUE项目的proxyTable配置实现本地跨域

1. 首先我们找一个用来实验的请求地址

(如果下面这个地址访问不了,那就是距离这篇文章发表的时间过得太久导致连接已经失效。你可以随便到某个网站找一条get请求的地址):

https://shared-https.ydstatic.com/gouwuex/ext/script/load_url_s.txt

这是一个get请求,可以通过浏览器的地址栏直接访问,返回的结果是

{"src":"https://shared-https.ydstatic.com/gouwuex/ext/script/extension_3_1.js?v=1513057776750" }

Read More

Mac下使用Sequel Pro连接MySql失败

Mac下使用MySql的dmg安装包安装后,使用Sequel Pro连接会报一个错误,如下:

Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/lib/plugin/caching_sha2_password.so, 2): image not found

原因:

就是在链接数据库时不能加载‘caching_sha2_password’这个插件,也就是不能对身份验证。

解决方案:

  1. 打开系统偏好设置,找到mysql,点击Initialize Database。
  2. 输入你的新密码,记住这个密码,用于后期链接数据库的登陆使用。
  3. 选择‘Use legacy password‘。
  4. 重启mysql服务。

xcode 9 免证书真机调试

iso应用在xcode 7之前,真机调试需要花99美元申请开发者账号。现在最新的xcode9可以无证书调试了。很简单,只需要三步。

一. 创建证书

  1. 运行Xcode, Xcode–》Preference–》添加账号(就是你的appstore账号)
  2. 登录成功之后,选择右下角的Manage Certificates
  3. 在弹出的对话框里面点击左下角的+号,然后选择IOS Development 。然后点击done完成。

二.  配置工程

  1. 点击工程根目录,在工程的General面板中找到Singing部分,在Team选项中选择刚才添加的账号。
  2. 执行build.

三. 信任开发者

  1. 手机中点击设置(Settings) —> 通用(General)—>设备管理—>点击对应的账号 —->信任(Trust)

Linux运行守护进程和查杀进程

如果用ssh方式登录远程服务器运行一个服务(比如python的web服务),当你关掉命令窗口的时候,那个服务也跟停止了。

解决办法:

使用nohup命令运行守护进程,然后下次登录的时候可以查看已经运行的进程和杀掉你想停止的进程。红色文字是可替换部分。

运行守护进程
nohup python3 -m http.server

查看相关进程
ps -ef | grep python

杀指定进程
kill -s 9 11464

远程传输文件到Liunx服务器指定目录

使用scp命令就可以了,不需要安装配置ftp什么的那么麻烦

例如在A服务器上将/root/liuxiaofan目录下所有的文件传输到B的/home/liuxiaofan/code目录下,
命令为:

scp -r /root/liuxiaofan root@43.224.34.73:/home/liuxiaofan/code

也可以先进入到你要上传的目录然后

cd /xxx/xxx/xxx/abc
cd ..
scp -r abc root@43.224.34.73:/home/liuxiaofan/code

解决Mac系统VMware Fusion虚拟机访问web服务不能的办法

问题描述:

Mac系统下使用VMware Fusion虚拟机软件安装了centOS后,网络使用的是Nat模式。centOS系统联网正常,mac可以通过ssh与centOS连接,但是centOS启动了web服务后只能在虚拟机内部访问,mac系统下不能通过浏览器直接访问。

问题原因:

centOS默认的防火墙策略是不允许外部直接访问web服务的

解决方案:

第一步 设置默认允许规则

iptables -F
iptables -P INPUT ACCEPT

第二步 设置linux防火墙
在 /etc/sysconfig/iptables 添加

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8000 -j ACCEPT

这样两条规则就添加了80和8000端口的访问权限了