Gowhich

Durban's Blog

Nodejs于2020年9月15日安全版本发布

主要的几个版本包括

  • Node.js v10.22.1 (LTS)
  • Node.js v12.18.4 (LTS)
  • Node.js v14.11.0 (Current)

可以下载安装下试试

1
2
3
4
5
npm install v10.22.1

npm install v12.18.4

npm install v14.11.0

具体详情请点击这里查看


by Michael Dawson, 2020-09-15

今天发现一个关于TypeScript的工具

TypeScript类型挑战集合,帮助你更好的理解TypeScript类型系统

期待抽时间尝试下。

中文版本版本点击这里

之前安装了一次mac版本的PS软件,之后不想用了,就直接把PS删掉了

然后就发现系统里面多了Adobe,看起来挺烦的,我又不需要,就一个一个的删除掉了

再然后每次启动后就提示我是否要修复的提示,经过查找资料也找到了解决办法

首先我们要记得以下几个路径

1
2
3
4
5
6
7
8
9
~/Library/LaunchAgents

/Library/LaunchAgents

/Library/LaunchDaemons

/System/Library/LaunchAgents

/System/Library/LaunchDaemons

然后每个都打开,检查里面是都带有adobe的,直接删掉就好了

其次、偏好设置里面也要检查下

在“扩展”中关闭Core Sync和Core Sync Helper。

最后删除CCLibrary、CCXProcess以及CoreSync文件夹

前往/Applications/Utilities/Adobe Creative Cloud,删除CCLibrary、CCXProcess以及CoreSync文件夹。

1
cd /Applications/Utilities/Adobe\ Creative\ Cloud

最近在了解swift这个语言,试着学习一些SwiftUI

前期看了一些SwiftUI的一些基础的内容,比如Text、Image

今天了解了下列表(List),应该可以类比与Object-c的Table相关的功能

但是使用起来真的很方便,尤其是用过React的话,会更加了解

使用React的时候,应该多多少少都用过react-router,里面有Route组件,其实里面就是html中类似a标签的封装或者history的逻辑封装(大概是基于hash,也只是猜测,源码并没有了解过)

不过在SwiftUI中也用到了类似的组件,但是名字叫做Navigation,嗯,突然想起来如果用过ReactNative的话,里面也有Navigation类似名字的组件,巧

下面看下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import SwiftUI

struct CategoryHome: View {
var categories: [String: [Landmark]] {
Dictionary(
grouping: landmarkData,
by: { $0.category.rawValue }
)
}

var body: some View {
NavigationView{
List {
ForEach(categories.keys.sorted(), id: \.self) { key in
CategoryRow(categoryName: key, items: self.categories[key]!)
}
}
.navigationBarTitle(Text("Featured"))
}

}
}

struct CategoryHome_Previews: PreviewProvider {
static var previews: some View {
CategoryHome()
}
}

注意里面的NavigationView这个组件(其实还有一个是NavigationLink的组件),下面看下效果图

是不是表格的效果就出来了,如果我没记错的话,如果用Object-c的话,实现这个效果,要实现相关协议的几个方法,对比现在,简直不要很简单

SwiftUI中如何将Image固定指定大小

需求将指定图片做圆角处理,并且最终图片指定大小比如300*300

这里给一个关于最终可以使用的代码

1
2
3
4
5
6
7
Image("xxx")
.resizable()
.scaledToFit()
.clipShape(Circle())
.overlay(Circle().stroke(Color.white, lineWidth: 4))
.shadow(radius: 10)
.frame(maxWidth: 300, maxHeight: 300)

效果如如下

很长一段时间没有了解TypeScript了,今天看了下官方已经更新到4.0版本了

新版本声明在这里

这个版本有哪些更新?

以上列表来自官网

Announcd by Daniel,August 20th, 2020

之前对gc一直不了解,这玩意是个bug吧

为什么git pull的时候会出现一个git gc的命令,还提示我可以自己运行

回忆下,第一次遇到这个问题的时候就是这个状态,然后就一直没理会

最近测试服务器部署代码的时候,经常会遇到这个命令在执行

于是搜搜了下,才发现这个命令是对大文件进行压缩的

同时如果出现这个命令的执行或者提示你让你去执行这个gc的命令

说明你的项目真的很大了

或者说明你的项目存在非常大的文件

原理就是压缩了下,创建了一个包文件和一个索引文件,方便后面更快的对文件的更改进行对比(diff)操作,不然文件很大的话读取再对比其实是很慢的,这样可以理解的通透了

另外需要对git的原理有更多的理解

就是我们每次对一个文件进行更改的时候git都会生成一个全新的对象来存储新的文件内容。

推荐一篇文章,点这里,具体介绍了如何删除大文件,同时对git gc有更详细的了解

PHP Laravel 发布新版本 8.x

Version Release Bug Fixes Until Security Fixes Until
6 (LTS) September 3rd, 2019 September 3rd, 2021 September 3rd, 2022
7 March 3rd, 2020 September 10th, 2020 March 3rd, 2021
8 September 8th, 2020 March 8th, 2021 September 8th, 2021

具体详情参考这里

新版本包含新的特性

  1. Jetstream
  2. job batching
  3. powerful model factories
  4. migration squashing
  5. improved rate limiting

在用laravel做开发过程中

遇到一个问题,就是使用composer安装包

第一个问题,composer安装了什么,我看不到,我是不放心的,或者安装了哪些库,如果慢的话又是卡在了哪里

第二个问题,经常遇到,本地使用的库,在另外一个地方用不到,但是安装的时候总要依赖php的版本,但是又不想切换版本

下面这个命令解决了以上两个问题,其实之所以记录,就是想知道为什么同样的问题遇到了两次,我依然还是会忘记

1
composer install -vvv --ignore-platform-reqs

经过回忆,因为每次遇到了我没记录下来,另外是使用的这几次时间上相隔太远以至于没有了记忆。(注意上面命令中install与require的区别)

这里推荐一个composer的使用说明,比较详细,之前找了很多,都是写的很乱,无法详细的了解,想看的点击这里

我们在用 laravel 进行开发的时候,特别是前后端完全分离的时候,由于前端项目运行在自己机器的指定端口 (也可能是其他人的机器) , 例如 localhost:8000 , 而 laravel 程序又运行在另一个端口,这样就跨域了,而由于浏览器的同源策略,跨域请求是非法的。其实这个问题很好解决,只需要添加一个中间件就可以了。

中间件代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php

namespace App\Http\Middleware;

use Closure;

class EnableCrossRequestMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$response = $next($request);

$httpWay = config('app.env') == 'local' ? 'http://' : 'https://';
$domain = config('routes.H5_HOST', 'm.xxx.com');

$response->header('Access-Control-Allow-Origin', $httpWay . $domain);

$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN');
$response->header('Access-Control-Expose-Headers', 'Authorization, authenticated');
$response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS');
$response->header('Access-Control-Allow-Credentials', 'true');

return $response;
}
}

然后在App\Http\Kernel.php中添加对应的配置就可以了

我的是在

1
2
3
4
protected $routeMiddleware = [
// ...
'cross.domain' => \App\Http\Middleware\EnableCrossRequestMiddleware::class,
]

这个地方加入的中间件配置

使用的话在路由中直接调用就可以了

1
2
3
4
5
6
7
8
9
10
11
12
// api
Route::group(['domain' => config('routes.API_HOST', 'api.xx.com')], function () {
Route::group([
'middleware' => [
'cross.domain',
],
'prefix' => '/api',
'namespace' => 'XXX',
], function () {
Route::post('/xxx/xx', 'xxxController@index');
});
});

这样就实现了给指定的接口添加跨域处理的逻辑了

只是补充

1,如何创建中间件

1
php artisan make:middleware EnableCrossRequestMiddleware
0%