Write the Code. Change the World.

8月 26

package and github

https://packagist.org/packages/johnlui/aliyun-oss

https://github.com/johnlui/AliyunOSS

适应 laravel7 版本的请看
https://github.com/johnlui/AliyunOSS-Laravel7

操作一波

composer require johnlui/aliyun-oss

新建配置文件 config/alioss.php,填充下边的 code 。

<?php
return [
    'AccessKeyId' => env('ALIOSS_KEYID', null),                     // key
    'AccessKeySecret' => env('ALIOSS_KEYSECRET', null),             // secret
    'BucketName' => env('ALIOSS_BUCKETNAME', null)                  // bucket
];

并且在 .env.example 中加入下边的配置(养成好的习惯)。

# OSS 配置
ALIOSS_KEYID=
ALIOSS_KEYSECRET=
ALIOSS_BUCKETNAME=

阅读全文 >>

8月 26

阿里的 rds 外网怎么连呢。需要一台能连接外网的 ecs 就可以。

操作一波

打开 navicat,新建一个连接。切换到 ssh 页签,输入 ssh 服务器的地址,账号和密码。如下图所示:

然后切换到 General(常规) 页签,填入 rds 的地址、用户名、密码,点击 test connection 即可。如下图所示:

好吧,就这样了。

阅读全文 >>

8月 25

基于定位获取周边的数据的场景还是蛮多的。这不就用到了,就记录下怎么整吧。

准备

因为用到的是 laravel 框架, ORM 这些会使用到。会用到 scope。假如这里有一个模型 Meet,对用的表名是 meets, 表里有这些字段:title、content、region_code、latitude、longitude、address、created_at、updated_at

模型如下:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;

class Idc extends Model
{
    use HasFactory;

    protected $fillable = ['title', 'content', 'region_code', 'latitude', 'longitude', 'address'];
}

开始

我们准备一个 distanc 的 scope

use Illuminate\Support\Facades\DB;

……

public function scopeDistance($query, $lat, $long, $distance)
{
    return $query->having('distance', '<', $distance)
    ->select(
        DB::raw("*,
        (3959 * ACOS(COS(RADIANS($lat))
        * COS(RADIANS(latitude))
        * COS(RADIANS($long) - RADIANS(longitude))
        + SIN(RADIANS($lat))
        * SIN(RADIANS(latitude)))) AS distance")
        )->orderBy('distance', 'asc');
}

3959 计算出来的是英里,换成 6378.138 计算出来的是公里。也就是地球的半径。

然后使用

$latitude = 31.0811;
$longitude = 121.26035;
$meets = Meet::distance($latitude,$longitude, 5)->get(['id','title', 'content', 'latitude', 'longitude', 'address']);

这样就计算出距离该坐标 5 km 内的数据了。

参考来源

https://www.it1352.com/1542694.html

https://www.box3.cn/tools/lbs.html

阅读全文 >>

8月 21

操作一波

先安装

yarn add element-china-area-data

然后在 code 中

<el-cascader size="large" :options="options" v-model="selectedOptions" @change="handleChange"> 

import { regionData , CodeToText } from "element-china-area-data";

handleChange() {
    var loc = "";
    for (let i = 0; i < this.selectedOptions.length; i++) {
        loc += CodeToText[this.selectedOptions[i]];
    }
    alert(loc);
}

阅读全文 >>

8月 18

params 的字符串和 array 的转换

$array = ['gender' => 1, 'target' => 2, 'region' => 310100];

$paramsStr = $str = http_build_query($array);

var_dump($paramsStr);

parse_str($paramsStr, $paramsArr);

var_dump($paramsArr);

在线测试:https://www.json.cn/runcode/run_php/

输出结果

string(31) "gender=1&target=2®ion=310100"
array(3) {
  ["gender"]=>
  string(1) "1"
  ["target"]=>
  string(1) "2"
  ["region"]=>
  string(6) "310100"
}

阅读全文 >>

8月 13

直接开始

在这里找到最新的版本 https://www.python.org/ftp/python/,当前 3.9.6 版本。

cd /usr/local/src

wget https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tgz

tar -xzvf Python-3.9.6.tgz

cd Python-3.9.6

mkdir /usr/local/python39

./configure --enable-optimizations --prefix=/usr/local/python39

make && make install

建立软链

ln -s /usr/local/python39/bin/python3.9 /usr/bin/python

ln -s /usr/local/python39/bin/pip3.9 /usr/bin/pip

参考

https://www.cnblogs.com/yangjisen/p/13171063.html

阅读全文 >>

8月 09

一个项目,一般不仅有 mysql 数据库,还会有 redis、mongodb 等数据库。那 下边记录下 laravel 中配置和使用 mongodb。

准备

安装 mongdb 和 mongdb 扩展

# 最快最简单的安装方式
pecl install mongodb

# 在 php.ini 中配置 mongodb

# 先找到 php.ini 的位置
php -i | grep php.ini

# 开始配置
vim php.ini
# 加入 extension=mongodb.so

# 重启
/etc/init.d/php-fpm restart

# 看看扩展
php -m |grep mongodb

项目中

https://github.com/jenssegers/laravel-mongodb

composer require jenssegers/mongodb

在 config/database.php 的 connections 中配置

        'mongodb' => [
            'driver' => 'mongodb',
            'host' => env('MONGO_DB_HOST', '127.0.0.1'),
            'port' => env('MONGO_DB_PORT', 27017),
            'database' => env('MONGO_DB_DATABASE', 'homestead'),
            'username' => env('MONGO_DB_USERNAME', 'homestead'),
            'password' => env('MONGO_DB_PASSWORD', 'secret'),
            'options' => [
                'database' => env('MONGO_DB_AUTHENTICATION_DATABASE', 'admin'), // required with Mongo 3+
            ],
        ]

        # 或
        'mongodb' => [
            'driver' => 'mongodb',
            'dsn' => env('MONGO_DB_DSN'),
            'database' => env('MONGO_DB_DATABASE', 'homestead'),
        ],

在 .env 中进行 MONGO_DB_DSN 和 MONGO_DB_DATABASE 配置。

使用

这里,我既使用 mysql, 也使用 mongodb。并且都使用 ORM。 mysql 是默认驱动方式。

php artisan make:model Moment

### 编辑 App\Models\Moment ,如下
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Jenssegers\Mongodb\Eloquent\Model;

class Moment extends Model
{
    use HasFactory;

    // 驱动
    protected $connection = 'mongodb';

   // 表
    protected $collection = 'detail.idc';
}

用 tinker 试试:

php artisan tinker;

use App\Models\Moment;
Moment::first();

参考

https://www.bubaijun.com/page.php?id=230

阅读全文 >>

8月 04

mac 默认安装的是 python 2.7。即使你安装了 3.x 版本,终端中默认也不会使 调用这个。可以配置下就可以。

操作

处理之前

python --version
# 输出 Python  2.7

python3 --verison
# 输出 Python 3.9.6

pip list 
# 找不到

我自己的终端改成 item 了。对应的是 ~/.zshrc。默认是 ~/.bash_profile。
好了,我们改一波。

vim ~/.zshrc

# GG 移动到末尾 添加下边配置
alias python="/usr/local/bin/python3"
alias pip="/usr/local/bin/pip3"

# 然后 source 一下,要不不立马生效
source ~/.zshrc

好了,就这样了。然后再测试下版本以及pip。

阅读全文 >>

8月 02

在某些场景下,需要对区域进行首字母排序。不仅要提取出地区的首字母,并且还要对相同首字母的地区也进行排序。

开始

首先,我们有这样的一些数据:

var cityData = [
    [
        {
            "label":"北京市",
            "value":1101
        }
    ],
    [
        {
            "label":"天津市",
            "value":1201
        }
    ],
    [
        {
            "label":"石家庄",
            "value":1301
        },
        {
            "label":"唐山",
            "value":1302
        },
        {
            "label":"秦皇岛",
            "value":1303
        }
    ]
]

这是一个二维数组,可以先把它弄成一维数组。然后通过 pinyin.js 取出每个 label 的首字母,并且有相同首字母的数据放在同一个数组里。然后进行二次排序。这里在 pinyin.js 中新增加了一个 getFirstChar 方法。

    /**
     * 获取整个词汇的首字母
     * @param {String} str 输入的中文字符串
     */
    getFirstChar(str) {
        if (typeof(str) != "string")
            throw new Error(-1, "函数getCamelChars需要字符串类型参数!");

        if (!str) {
            throw new Error(-1, "不能是空字符串");
        }

        str = str.substr(0, 1);
        return this._getChar(str);
    }

计算如下。

import Pinyin from '../../../static/js/pinyin.js';

let pinyin = new Pinyin();

let temp = {};
let keys = [];
for(let item1 of city) {
    for(let item2 of item1) {
        if (item2.label == '直辖市') {
            continue;
        }

        let fc = pinyin.getFirstChar(item2.label);
        if (temp[fc]) {
            temp[fc].push(item2);
        } else {
            keys.push(fc);
            temp[fc] = [item2];
        }
    }
}
keys = keys.sort();

let list = [{
     title: '热门',
     letter: 'hot',
     value: []
}]

function sortItem(item1, item2) {
    return item1['label'].localeCompare(item2['label']);
}

for(let key of keys) {
    list.push({
        title: key,
        letter: key,
        value: temp[key].sort(sortItem)
    });
}

参考类库

https://github.com/waterchestnut/pinyin

https://www.w3school.com.cn/js/jsref_localeCompare.asp

阅读全文 >>

8月 01

在 uniapp 中,如果 view 定义了 display:flex ,那么 v-show 就无效了。也就是总是 true,总是会显示出来。

阅读全文 >>