const arr = [10,12,15,21];

/**结果:
 * Index: 4, element: undefined
 * Index: 4, element: undefined
 * Index: 4, element: undefined
 * Index: 4, element: undefined
 */
for (var i = 0; i < arr.length; i++){
    setTimeout(function(){
        console.log('Index: ' + i + ', element: ' + arr[i]);
    }, 3000);
}

/**
 * 下面3个,都是正确结果:
 * Index: 0, element: 10
 * Index: 1, element: 12
 * Index: 2, element: 15
 * Index: 3, element: 21
 */
for (var i = 0; i < arr.length; i++){
    setTimeout(function(i2){
        return function(){
            console.log('Index: ' + i2 + ', element: ' + arr[i2]);
        }
    }(i), 3000);
}

for (let i = 0; i < arr.length; i++){
    setTimeout(function(){
        console.log('Index: ' + i + ', element: ' + arr[i]);
    }, 3000);
}

for (var i = 0; i < arr.length; i++){
    (setTimeout(function(j){
        console.log('Index: ' + j + ', element: ' + arr[j]);
    }, 3000))(i);
}

- 阅读剩余部分 -

yii2-app-basic会经常出现一个bug,就是找不到vendor/bower这个目录,这是由于某种神秘原因,执行composer install的时候,会安装到vendor/bower-asset这个目录下。

具体原因不明。

需要做如下修改:

修改的文件路径是:vendor/yiisoft/yii2/base/Application.php,第461行, 改为bower-asset

- 阅读剩余部分 -

折腾了2个多小时,已经可以用了,虽然还是有点小问题,但已经可以用了,毕竟我的目的不是折腾这个,而是被迫搭建本地HTTPS来测试geolocation api

网上教程很多,尤其是xampp自带的那个makecert,但我本地死活搞不定,各种报错。后来是用cygwin这个神器解决了。

具体情况如下:

大前提:要把php.ini里的openssl选项给开了。当然,肯定还有其他东西也要开,这个就下次再说吧,因为我在设置这个ssl的时候,很多选项已经开了。

首先,如果你写代码调用geolocation这个api,会失败的,因为本地不是https环境,chrome console里给出一个链接。但这个链接里,我只用了2行代码,就是生成ssl证书的代码,在cygwin里生成。

https://mail.mozilla.org/pipermail/web-vr-discuss/2016-July/001272.html

openssl genrsa -out server.key 2048
openssl req -new -x509 -sha256 -key server.key -out server.pem -days 365

注意,这里生成的是server.pem,但是呢,其他教程都用server.crt,这俩就算作是一个意思吧,都是证书。

其次,在apache vhost里设置如下:

<VirtualHost *:80>
    ##ServerAdmin [email protected]
    DocumentRoot "D:\xamppwww\www\cardio\public"
    ServerName cardio.com
    ServerAlias www.cardio.com

    RewriteEngine On
    RewriteRule ^/(.*)$ https://cardio.com/$1 [R=301,L]
    ##ErrorLog "logs/dummy-host.example.com-error.log"
    ##CustomLog "logs/dummy-host.example.com-access.log" common
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "D:\xamppwww\www\cardio\public"
    ServerName cardio.com
    
    SSLEngine on
    SSLCertificateFile "D:\xampp\apache\conf\ssl\server.pem"
    SSLCertificateKeyFile "D:\xampp\apache\conf\ssl\server.key"
</VirtualHost>

这是加了强制跳转的,http强制跳转到https。

第三,要把自签的ssl证书条件到chrome信任列表里,这个要用到chrome settings里的manage certificate这个选项,把server.pem添加到信任列表里,还要在证书目的里再勾选一个客户端验证什么的,总之,就不报错了。
至于chrome仍然显示not secure,那也没懒得管了,因为geolocation api可以成功调用了。

Microsoft Edge浏览器加了就好了没这么多幺蛾子。

通常,使用mysqldump导出一般用这样的方式:

mysqldump -u root -p --no-data [db-name] > [filename.sql]

但如果在Windows环境下,不管是CMD还是PowerShell,使用这个命令都会有问题,因为这样导出的sql文件,在Linux环境下会报错:

ERROR: ASCII '0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '0' is expected.

这里显然是由于Windows环境下的编码方式和Linux不同导致。

- 阅读剩余部分 -

  • This is PascalCase: SomeVariableName
  • This is camelCase: someVariableName
  • This is snake_case: some_variable_name
  • This is kebab-case: some-variable-name

最近研究了不少小型电商网站,背后的技术都是大众化的程序,什么shopify,magento,opencart,drupal,wordpress,joomla什么的,反正没什么看着多高深的东西。

美国尊重知识产权是OK的,那么,这些现成的程序都是啥呢?给哪些要么懒,要么蠢的半吊子程序员做二次开发用的,美其名曰提高开发效率。毕竟美国程序员公司贵啊。

- 阅读剩余部分 -