当前git是大部分开发团队的首选版本管理工具,一个好的流程规范可以让大家有效地合作,像流水线一样有条不紊地进行团队协作。
业界包含三种flow:
当前git是大部分开发团队的首选版本管理工具,一个好的流程规范可以让大家有效地合作,像流水线一样有条不紊地进行团队协作。
业界包含三种flow:
最近 WordPress 上传图片的时候,偶尔会发生失败,报错 503。以前比较少,最近越来越频繁,于是跟踪了一下服务器的日志,看到如下报错信息:
查看 PHP 的日志,却找不到任何有用的日志,只看到如下警告:
起初是百思不得其解,按理说应该有相关报错才对。
后来仔细思考了一下,才想明白,原来是并发数超过最大限制了,默认的并发数量是 5,这个绝对是不够的,并发超过限制是没有任何报错信息的,日志只会给出一个警告。
详细的解决方案如下:
If you encounter such an error in the php logs, then it is time to modify max_children. The php logs are usually located in /var/log/
, and in my case they are in /var/log/php7.4-fpm.log
Search for the file where the max_children variable is located, in my case the file is www.conf
and is located in the folder: /etc/php/7.4/fpm/pool.d/
Change the value pm.max_children = 8
to a larger one, 16 for example
save the .conf file and restart the web server:
or only the php-fpm service as follows:
Eventually you can check these logs, who knows, you may not even know you have such a problem!
** As I noticed, for HestiaCP (VestaCP) users max_children can be found in both the /etc/php/7.4/fpm/pool.d/www.conf
file and the file /usr/local/hestia/php/etc/php-fpm.conf
** Attention, you must also have enough memory for this, otherwise the results are not as expected!
Check the memory used by each php-fpm service-child with the following command:
Then, to see the memory required for these processes, we need to add the rss parameter which is “Resident Set Size” or the physical memory. Note: Modify php-fpm7.4 to suit your version of PHP:
These numbers are in Kbytes , so we calculate an average of the displayed values and multiply by max_children
, and we find approximately the memory needed only for php, but don’t forget, the server also needs memory for Apache, Nginx, mysql … maybe Varnish, HAproxy, Redish, etc. .. so, check these values carefully!
Solved! WARNING: [pool ***] server reached max_children, consider raising it
在尝试安装 nvidia-docker 的时候(ubuntu 22.04系统Docker和Nvidia-docker的安装、测试,及运行GUI应用),执行如下命令增加 nvidia 源:
系统发出如下警告:
经过分析,是脚本中的如下部分导致:
解决方法为修改为使用如下脚本:
完整修改后的脚本如下:
快速搭建所需开发环境
Docker文档:https://docs.docker.com/,Docker安装指南: Install Docker Engine on Ubuntu
Dokcer安装
Docker测试
其他Docker命令:
Tips:Docker中一般Crtl+C退出,传送门:停止、删除所有的 docker 容器和镜像。
Nvidia-docker安装
查看nvidia版本
参考链接:官网 installation guide
Github:NVIDIA/nvidia-docker测试
Docker 容器 GUI
若遇到X Error时,添加参数:--ipc=host 或 --env="QT_X11_NO_MITSHM=1",参考链接:
How to fix X Error: BadAccess, BadDrawable, BadShmSeg while running graphical application using Docker?
Docker: gazebo: cannot connect to X server
若遇到 libGL error: No matching fbConfigs or visuals found libGL error... ,参考链接:
使用docker时出现libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver...
已成功测试上述链接中的 pull image 方式
使用nvidia-smi查看nvidia driver和cuda版本,根据 nvidia/cudagl ,选择合适的TAG
创建新的长期镜像:
如果遇到如下报错:
上述报错目前没有找到很好的解决方法,应该是某个安装包意外修改了系统配置,导致出现问题,重装系统可以顺利解决此问题。
dart extension 的使用场景是无法修改原类的时候,通过扩展的方式来增加原类的方法,也可以增加 getter,setters,and operators。
比如
如果 String 有 pareseInt 方法,我们可以这样写
为了达到这个目标,需要写一个 Extension
然后就可以使用了。
注意到前面加的 NumberParsing 了吗?这个是为 extension 起的名字。起名字的作用是有冲突的时候可以方便的控制显隐。比如 NumberParsing2 也定义了 parseInt 方法与 NumberParsing 的 parseInt 冲突,如果只想要 NumberParsing 的 parseInt,只需要把 NumberParsing2 隐藏就好了。
或者可以 给 NumberParsing2 经起个别名
可以只给 int 类型的 list 加 sum 方法,其它类型的 list 不能使用 sum。
dart extension 不可以用于 dynamic 类型
dart extension 权限很大,这也意味着,很可能被过度使用。所以在使用的时候一定要再三权衡,一定要可读性,可维护性优先。
上面的代码是比较简单的,但是如果类型比较复杂,不明确指定类型,类似如下的形式,也是可能会报错的:
GPU | 128-core Maxwell |
---|---|
CPU | Quad-core ARM A57 @ 1.43 GHz |
内存 | 4 GB 64-bit LPDDR4 25.6 GB/s |
存储 | micro SD 卡 |
视频编码 | 4K @ 30 | 4x 1080p @ 30 | 9x 720p @ 30 (H.264/H.265) |
视频解码 | 4K @ 60 | 2x 4K @ 30 | 8x 1080p @ 30 | 18x 720p @ 30 (H.264/H.265) |
摄像头 | 2x MIPI CSI-2 D-PHY lanes |
联网 | 千兆以太网,M.2 Key E 接口外扩 (可外接: AC8265 双模网卡 ) |
显示 | HDMI 和 DP 显示接口 |
USB | 4x USB 3.0,USB 2.0 Micro-B |
扩展接口 | GPIO,I2C,I2S,SPI,UART |
其他 | 260-pin 连接器 |
1、JetPack介绍
JetPack SDK包括最新的Linux驱动程序包(L4T),带有Linux操作系统和CUDA-X加速库,以及用于深度学习、计算机视觉、加速计算和多媒体的API。 它还包括用于主机和开发人员套件的示例、文档和开发人员工具,并支持更高级别的SDK,例如用于流式视频分析的DeepStream和用于机器人的Isaac。
2、JetPack 4.4
JetPack 目前最新版本是4.4,支持Vulkan 1.2、TensorRT 7.1.3 、cuDNN 8.0、CUDA 10.2 等。
3、下载和安装
1.执行更新
2.安装vino服务端
这个vino服务端我使用的镜像文件是安装好了的,但是古早版的镜像文件可能没有,所以可以执行下代码看看是否有安装。
3.开启VNC 服务
4.配置VNC服务
1.创建VNC自动启动文件
创建文件夹,然后创建一个自动启动文件
2.添加以下内容到vino-server.desktop文件中
这个时候,虽说是自动启动了,但是只有进入桌面后才自动启动服务,所以需要取消登录密码,启动就进入桌面。
这段时间把App的targetSDKVersion
升级到了27,昨晚上线之后今早看到后台一堆崩溃,全是 Android 8.0 的设备,因为手头设备有限,测试的时候只测了Android 8.1的设备,没想到还有一个这个坑埋在这里,记录一下处理办法。
当targetSDKVersion
为26或者27时,在 Android 8.0 的设备上,一些设置了windowIsTranslucent
标志,将背景设为透明,同事将屏幕方向锁定的Activity
,会崩溃并抛出这个异常:
这个问题网上有很多讨论以及解决方法,问题的原因出自这里
这里做了当屏幕方向锁定了并且不为全屏并且 App 的targetSdkVersion
大于 Android O
的话,就会抛出这个异常。
是否为全屏的判定如下:
手头的 Android 8.1 的机器并没有触发这个问题,是因为这个问题在 8.1 里已经修复了。
解决方法有如下几种:
降级targetSDKVersion
到26以下(废话!!)
移除mainfest
文件里的screenOrientation
属性
取消Activity主题里的windowIsTranslucent
属性或者windowSwipeToDismiss
属性或者windowIsFloating
属性(根据你设置了什么属性来具体分析)
(推荐)移除manifest
文件里的screenOrientation
属性,并在Activity
的onCreate
方法里设置屏幕方向
解决 Only fullscreen opaque activities can request orientation
1、什么是Android的冷启动时间?
冷启动时间是指点击桌面LOGO那一刻起到启动页面的Activity调用onCreate()之前的时间段。
2、冷启动的时间段内发生了什么?
在一个Activity打开时,如果Application还没有启动,系统会创建一个进程,进程的创建和初始化会消耗一些时间,在这个时间中,WindowManager会先加载APP的主题样式里的窗口背景(windowBackground)作为预览元素,然后才会真正的加载布局,如果这个时间过长,会给用户造成一种错觉:APP卡顿不流畅
上面做法可以达到秒开效果,但属于掩耳盗铃。
Google以前不推荐使用闪屏的使用,但是后来很多APP都在使用闪屏,Google希望让启动屏的制作更简单。
Android Oreo中提供了Splash Screen API,允许开发者把一个drawable资源设置为闪屏。
新建values-v26目录:
通过windowSplashscreenContent设置的drawable资源将会覆盖在windowBackground顶部,在系统状态栏之下,如果不想受到System Bars限制,请使用全屏主题。
System.exit(0):终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。
System.exit(0)正常终止程序,有时候在退出安卓应用会使用到。
使用这个方法如果前面存在没有finish()掉的Activity会重新启动,导致退出失败。
MainActivity代码:
直接启动第二个Activity:
NewActivity代码:
此时点击button退出应用重启,修改MainActivity:启动新的Activity,finish存在MainAcitvity
因为应用栈中还存在别的activity没有finish,导致应用重新启动。
使用System.exit(0)时,确保任务栈中所有activity已经finish。