三十而立——《三十而立》读后感

三十而立的王二,娶了柔道队的二妞子,在大学里面做讲师,分管一个实验室做实验室主任,手下有一个叫许由的发小。参与一个科研项目,本来想出国也没出去成。日子过得不咸不淡,平平庸庸。

三十而立的生活,很无趣,好像是西藏的一种酷刑:把人用湿牛皮裹起来放在阳光下暴晒。等牛皮干硬收缩,就把人箍得乌珠迸出。生活也如是:你一天天老下去,牛皮一天天紧起来。这张牛皮就是生活的规律:上班下班、吃饭排粪,连做爱也是其中的一环,一切按照时间表进行。

继续阅读“三十而立——《三十而立》读后感”

js中blur和click事件的冲突

问题:当焦点在输入框时,点击取消按钮会触发blur和click事件,导致需要点击两次取消按钮才能关闭弹窗

原因:这是因为blur事件比click事件先触发,而javascript为单线程,同一时间只能执行处理一个事件,所以当blur处理程序时,导致其后续click事件并不会执行

var popover = document.getElementById('popover');
var input = document.getElementById('category-name');
var btn = document.getElementById('btn-cancel');
var error = document.getElementById('error');

解决方案1:如果click事件比blur事件先触发就没有问题了,所以可以给blur事件延迟触发

var timer;
 input.onblur = function() {
    timer = setTimeout(function() {
        console.warn('onblur');
        error.style.display = 'block';
    }, 100);
 }
 btn.onclick = function() {
    console.warn('onclick');
    clearTimeout(timer);
    error.style.display = 'none';
    popover.style.display = 'none';
 }

解决方案2:将click事件改为mousedown事件,让其优先于blur事件执行(缺点是用户体验不好,鼠标按下便触发了事件)

 input.onblur = function() {
    console.warn('onblur');
    error.style.display = 'block';
 }
 btn.onmousedown = function() {
    console.warn('onmousedown');
    error.style.display = 'none';
    popover.style.display = 'none';
 }

解决方案3:给按钮添加一个mousedown事件,在其中执行event.preventDefault()阻止浏览器默认事件,这样点击按钮时输入框就不会失去焦点了

input.onblur = function() {
    console.warn('onblur');
    error.style.display = 'block';
}
btn.onmousedown = function(e) {
    console.warn('onmousedown');
    e.preventDefault();
}
btn.onclick = function() {
    console.warn('onclick');
    error.style.display = 'none';
    popover.style.display = 'none';
}

参考:https://www.jianshu.com/p/ad8569eaca0c

安卓安装apk失败错误码-15

应用仅仅属于测试的debug版本,仅限于adb安装,其他安装方式会失败。

用Android Studio编译app,调试的时候一切正常,但是在手机上安装或者是用adb安装的时候就提示失败,adb安装时提示的错误:INSTALL_FAILED_TEST_ONLY。

Android Studio 3.0以上会在debug apk的manifest文件application标签里自动添加 android:testOnly=”true”属性,导致IDE中run跑出的apk在大部分手机上只能用adb install -t 来安装,在一些安卓手机上甚至安装不了
解决办法:在gradle.properties(项目根目录或者gradle全局配置目录 ~/.gradle/)文件中添加android.injected.testOnly=false

以上方法如果还没有用的话。比如,Android Studio 不是用gradle编译的情况下,就需要用如下办法。

在新版AS中,点这个绿三角生成的apk,都会被标记为test only。

正确的做法是,选择Build APK(s),如下图所示:

参考:
https://blog.csdn.net/kernel_/article/details/78780192
https://blog.csdn.net/qq_25330791/article/details/89540054
https://blog.csdn.net/lihenhao/article/details/79146211

PHP 7.3 “continue” targeting switch is equivalent to “break”. Did you mean to use “continue 2”?

Composer PHP7.3 SHA384 is not supported by your openssl extension
在使用composer 更新时候的,报错
解决方法
composer selfupdate
composer self-update

再次报错如下:
SHA384 is not supported by your openssl extension, could not verify the phar file integrity

解决(mac)
重新下载在安装
rm -f /usr/local/bin/composer
curl -s https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

Remove Your older versions and install the latest version of Composer,
Remove Your older version: sudo rm -f /usr/local/bin/composer
Download the installer: sudo curl -s https://getcomposer.org/installer | php
Move the composer.phar file: sudo mv composer.phar /usr/local/bin/composer

参考:
https://www.heibaiketang.com/forum/show/173.html