不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

brew安装

1
brew install redis

问题

Could not connect to Redis at 127.0.0.1:6379: Connection refused

1
2
redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused not connected>
阅读全文 »

brew命令安装

1
2
brew install mysql
mysql --version

问题

The server quit without updating PID file (/opt/homebrew/var/mysql/neozhangdeMacBook-Pro.local.pid)

1
2
3
4
5
sudo mysql.server start
Password:
Starting MySQL
.Logging to '/opt/homebrew/var/mysql/neozhangdeMacBook-Pro.local.err'.
ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/neozhangdeMacBook-Pro.local.pid).
阅读全文 »

7月,终于下定决心给自己买一台MacBook Pro,购买的原因如下:

  • 之前笔记本电脑是装的Ubuntu 20.04 + Mac皮肤,编码没问题,但有时需要微信、Office办公套件的时候,会很麻烦,各种中转;
  • Mac一直想买,但也一直下不定决心,有的人买来很实在,有的人买来是为了装逼 hhh;
  • 尝试做自媒体剪一些视频;
  • 苹果软件生态丰富…

于是乎,开始看各种测评,官网看报价,最终决定上一款 M1 Max + 64G + 2T的配置,当然保险起见买了AC+。

上手3天,觉得MacOS做的还是很细心的,运行软件基本都是秒开,硬件方面给我最大的感触就是屏幕+音响效果,非常棒,看视频有一种在电影院的感觉呢。

软件的话我全部选择了JetBrains系列。

阅读全文 »

整体介绍

crawlergo是一个使用chrome headless模式进行URL收集的浏览器爬虫。它对整个网页的关键位置与DOM渲染阶段进行HOOK,自动进行表单填充并提交,配合智能的JS事件触发,
尽可能的收集网站暴露出的入口。内置URL去重模块,过滤掉了大量伪静态URL,对于大型网站仍保持较快的解析与抓取速度,最后得到高质量的请求结果集合。

crawlergo目前支持以下特性:

  • 原生浏览器环境,协程池调度任务
  • 表单智能填充、自动化提交
  • 完整DOM事件收集,自动化触发
  • 智能URL去重,去掉大部分的重复请求
  • 全面分析收集,包括javascript文件内容、页面注释、robots.txt文件和常见路径Fuzz
  • 支持Host绑定,自动添加Referer
  • 支持请求代理,支持爬虫结果主动推送

项目整体结构:

阅读全文 »

Scrapy VS requests+beautifulsoup

  • 1.requestsbeautifulsoup都是库,scrapy是框架
  • 2.scrapy框架中可以加入requestsbeautifulsoup
  • 3.scrapy基于twisted,性能是最大的优势
  • 4.scrapy方便拓展,提供了很多内置的功能
  • 5.scrapy内置的cssxpath selector非常方便,beautifulsoup最大的缺点就是慢

爬虫能做什么

  • 1.搜索引擎:百度、Google
  • 2.推荐引擎:今日头条
  • 3.机器学习的数据样本
  • 4.数据分析、舆情分析等

go-micro v3和micro v3是什么关系?

go-micro是什么?

  • 一个go微服务开放框架
  • Framework(程序开放框架):用来方便编写微服务
  • Clients(多语言客户端):支持多语言访问服务端

go-micro v3与micro v3的关系

  • micro v3版本类似isito把基础设施抽象成能力
  • micro的技术体系和官方平台绑定较多
  • go-micro v3为微服务开发框架,自由度相对较高
阅读全文 »

sync包还是channel

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
var cs = 0 // 模拟临界区要保护的数据
var mu sync.Mutex
var c = make(chan struct{}, 1)

func criticalSectionSyncByMutex() {
mu.Lock()
cs++
mu.Unlock()
}

func criticalSectionSyncByChan() {
c <- struct{}{}
cs++
<-c
}

func BenchmarkCriticalSectionSyncByMutex(b *testing.B) {
for n := 0; n < b.N; n++ {
criticalSectionSyncByMutex()
}
}

func BenchmarkCriticalSectionSyncByChan(b *testing.B) {
for n := 0; n < b.N; n++ {
criticalSectionSyncByChan()
}
}

/*
BenchmarkCriticalSectionSyncByMutex-8 76766581 15.41 ns/op
BenchmarkCriticalSectionSyncByChan-8 32243965 37.59 ns/op
*/

使用sync包的注意事项

sync包源文件中,我们看到以下注释:

1
2
3
4
5
// A Mutex must not be copied after first use.

// A RWMutex must not be copied after first use.

// A Cond must not be copied after first use.
阅读全文 »