书写技术成长之路

Android gradle 下载超时解决方案

在运行flutter应用的时候遇到了下载 https://services.gradle.org/distributions/gradle-7.4-all.zip 超时的问题,究其原因必须使用代理才能访问。

解决办法就是在project目录下面,找到android文件夹下的gradle.propeties文件,修改里面的代理配置如下

org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8001
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8001

https://i.imgur.com/DlVEfNI.png

参考

https://stackoverflow.com/questions/34640698/gradle-failing-to-download-distribution-behind-company-proxy

https://developer.android.com/studio/intro/studio-config?hl=zh-cn#proxy

Rust ownership

img

为什么看起来都是一样的ownership,但结果却不一样呢?

这是因为当给变量赋值或传递参数时,数据类型有2种:

  • Copy Type 数据实现了复制,大部分的基础数据类型都实现了,或者一个数据类型实现了core::marker::Copy trait

  • Move type 大部分的非基础数据类型都属于这部分,以及struct等

参考

https://learning-rust.github.io/docs/ownership/

Flutter底部导航超过3个无法显示的问题解决

Flutter 默认的BottomNavigationBarItem最多显示3个元素,超过就会不显示或错乱,解决方案是加个type.

type:BottomNavigationBarType.fixed可以解决这个问题

bottomNavigationBar: BottomNavigationBar(
    type: BottomNavigationBarType.fixed,
    onTap: onTabTapped,
    currentIndex: _currentIndex,
    items: [
        BottomNavigationBarItem(
            icon: Icon(Icons.home),
            title: Text('首页'),
        ),
        BottomNavigationBarItem(
            icon: Icon(Icons.home),
            title: Text('首页'),
        ),
        BottomNavigationBarItem(
            icon: Icon(Icons.home),
            title: Text('首页'),
        ),
        BottomNavigationBarItem(
            icon: Icon(Icons.home),
            title: Text('首页'),
        ),
        BottomNavigationBarItem(
            icon: Icon(Icons.home),
            title: Text('首页')
        )
    ],
    ),

参考

https://stackoverflow.com/questions/50793810/how-to-display-more-than-3-items-in-a-bottomnavigationbar-while-coding-in-flutte

https://github.com/flutter/flutter/issues/13642

docker占满磁盘问题解决

前几天启动了docker创建了几个容器,几天没看,发现服务器异常的慢,登上服务器发现磁盘空间全部占满了

2019-12-30.Wwbfx3ndrY.png

解决方案如下:

执行命令 sudo docker system prune -a -f

可以用此命令来查看docker实际使用的空间,未必的container占用的 du -h /var/lib/docker | sort -H

参考

https://github.com/moby/moby/issues/33775

https://github.com/moby/moby/issues/32420

https://stackoverflow.com/questions/31712266/how-to-clean-up-docker-overlay-directory

vscode 运行flutter应用报错 dart not found

之前配置好的vscode开发flutter的环境,今天再次运行的时候突然报了个 /bin/sh: dart: command not found的错误,但是通过命令行执行flutter run是可以直接运行程序的,很是奇怪。

google一番也没找到答案,后来注意到是我在vscode里安装了flutter扩展,这个flutter扩展会附带安装dart语言的扩展,我运行flutter的时候使用的是code runner扩展,之前都是使用这个扩展直接运行flutter应用的,这次却报了这个错误

/bin/sh: dart: command not found

后来使用vscode的快捷键F5就可以正常运行程序了,大概是由于code runner的原因吧,目前只能通过vscode的快捷键F5或者vscode的Debug菜单下面的Start Debugging来运行程序了。

如果你只是开发flutter应用,那么配置完flutter的开发环境就可以了,dart的运行环境会自动安装,环境通过flutter doctor来查看就好了

参考

https://flutter.dev/docs/development/tools/vs-code

Flutter Overflow on channel: flutter/lifecycle 错误处理

之前flutter的开发环境是基于dev分支构建的,之前运行好好的环境,突然报出了错误

flutter: Overflow on channel: flutter/lifecycle.  Messages on this channel are being discarded in FIFO fashion.  The engine may not be running or you need to adjust the buffer size if of the channel.

Flutter Overflow on channel

后来上网搜索了一番,发现是channel的问题,需要切换到stable。

先用flutter channel命令查看flutter环境当前所在的channel,如果是dev就切换到stable分支进行开发

切换到stable channel flutter channel stable

初探Flutter

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。

Flutter因其支持跨平台开发只需要维护一个代码库,热重载加速调试,富有表现的UI界面等特性,使得开发移动应用程序不再困难。

下载flutter开发工具包

git clone -b dev https://github.com/flutter/flutter.git

设置环境变量

# 只针对国内用户设置镜像源
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

export PATH="$PWD/flutter/bin:$PATH"

用source命令使环境变量生效

然后运行flutter doctor来检查flutter所需要的环境是否都OK

首次运行如下所示

flutter doctor 初次执行

依次解决展示的所有问题,可以每解决一个后运行flutter doctor来查看是否成功。

最后成功的效果如下

flutter 安装成功

在vscode中打开命令行选择 Flutter: New Project来新建一个项目, 等项目完成进入到项目根目录执行 flutter run,来查看你的第一个flutter程序

flutter run 效果

2019-10-06.l8G4WgjnjC.png

常用flutter命令

flutter doctor    # 检查是否环境OK
flutter run      # 运行项目

flutter devices  # 查看可运行的设备

参考

https://flutterchina.club/get-started/install/

https://flutter.cn/docs/get-started/install

https://flutter.dev/docs/cookbook

使用caddy取代nginx

Caddy由于自动启用HTTPS,不需要安装其他依赖,简洁的yaml配置受到欢迎,可以很容易就搭建起来服务。

也可以安装很多插件,比如 jwt, geoip, ratelimit等web开发常用的插件。

下载caddy很简单,只需要执行 CADDY_TELEMETRY=on curl https://getcaddy.com | bash -s personal就可以成功安装caddy开始使用了。

安装完成后,需要新建Caddyfile文件,文件内容可参考下面的配置,修改保存后执行caddy命令即可。

执行效果如下

ilzLeUC2AL.png

下面是一些基本的配置仅供参考

# https://caddyserver.com/tutorial
# you only need to change the hostname
caddy.example.com {
    root /www/webroot
    gzip
    proxy / localhost:8088 {
        header_upstream Host {host}
        header_upstream X-Real-IP {remote}
        header_upstream X-Forwarded-For {remote}
        header_upstream X-Forwarded-Port {server_port}
        header_upstream X-Forwarded-Proto {scheme}
    }
    header /images {
        Cache-Control "public, max-age=31536000"
    }

    header (.css|.js)$ {
        Cache-Control "public, max-age=31536000"
    }

    log /var/log/caddy_access.log
    errors /var/log/caddy_error.log
}

GitHub上也有很多示例可供参考 https://github.com/caddyserver/examples

注意不能占用80和443端口,这是caddy启动服务要使用的端口,应该使用反向代理。

参考

https://caddyserver.com/docs

使用v2ray进行科学上网

近来由于shadowsocks服务器被限制的很严重,只能考虑使用其他代理软件自由上网了。

v2ray是一款不错的代理软件, 这是官网介绍 https://www.v2ray.com/en/welcome/install.html

下面讲下安装步骤

  1. 在可科学上网的服务器上下载安装脚本 wget https://install.direct/go.sh

  2. 执行脚本安装v2ray bash go.sh

  3. 将v2ray加入开机启动项 systemctl enable v2ray

  4. 启动v2ray systemctl start v2ray

  5. 查看v2ray的配置文件 vim /etc/v2ray/config.json

  6. 下载v2ray mac客户端来使用v2ray代理服务自由上网, 下载地址https://github.com/Cenmrev/V2RayX/releases

m1IuQib5ie.png

fMUgKByh1T.png

然后运行软件点击Configure选项来配置IP等参数, 按照服务器的配置填写

最后点击图标下面的第一个选项 v2ray-core: unloaded 去加载

至此就可以自由上网了。

开启BBR加速

# 下载脚本
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh

# 添加执行权限
chmod +x bbr.sh

# 执行脚本安装
bash bbr.sh

安装完成后用`lsmod | grep bbr`查看结果,如果出现tcp_bbr就说明成功了。

参考

https://www.v2ray.com/awesome/tools.html

https://symeonchen.com/2019/05/22/configuring_v2ray_on_macos/

https://github.com/teddysun/across

一键安装最新内核并开启 BBR 脚本

https://blog.naibabiji.com/ji-qiao/centos7-an-zhuang-bbr.html

php docker compose

用docker compose 构建PHP开发环境


version: '2' services: web: image: nginx:latest ports: - "8080:80" volumes: - ./code:/code - ./site.conf:/etc/nginx/conf.d/default.conf networks: - code-network php: image: php:fpm volumes: - ./code:/code - ./php.ini:/usr/local/etc/php/php.ini networks: - code-network command: > bash -c "apt-get update -y && apt-get install -y libfreetype6-dev && apt-get install -y libjpeg62-turbo-dev && apt-get install -y libpng12-dev && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && docker-php-ext-install gd" composer: image: composer/composer:php7 restart: 'no' command: install working_dir: /code volumes: - ./code:/code networks: - code-network mysql: image: mysql:5.7 environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=docker - MYSQL_USER=docker-container - MYSQL_PASSWORD=YqukX1!m!eBeP networks: - code-network redis: image: redis:5.0-alpine ports: - "16379:6379" networks: code-network: driver: bridge