0%

最近入了台联想小新PRO 13 2020 锐龙R7 笔记本。性能非常好。
装的是Windows 10, 从MacOS 切换过来还真有点不习惯。
总体上开发效率比MacOS 会低些,使用体验也差些。可是MacBook Pro 又贵性能又差。 嗯,AMD Yes!

这里列出我用到的软件和配置,供参考

Read more »

一. 10个goroutinue顺序打印0-9

常规的做法是用10个channel来挨个控制,其实可以用原子包实现,相当于加锁

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
func printInOrder() {
wg := sync.WaitGroup{}
var curr int32
for i := int32(0); i < 10; i++ {
wg.Add(1)
go func(num int32) {
defer wg.Done()
for {
if n := atomic.LoadInt32(&curr); n == num {
fmt.Println(num)
atomic.AddInt32(&curr, 1)
break
}
time.Sleep(time.Nanosecond)
}
}(i)
}

wg.Wait()
}

二. 两个goroutinue分别打印奇偶数

同上,还是用原子包

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
func printMix() {
wg := sync.WaitGroup{}
var curr int32
wg.Add(2)
go func() {
defer wg.Done()
for curr < 10 {
if n := atomic.LoadInt32(&curr); n%2 == 1 {
fmt.Println("A:", n)
atomic.AddInt32(&curr, 1)
} else {
time.Sleep(time.Nanosecond)
}
}
}()
go func() {
defer wg.Done()
for curr < 10 {
if n := atomic.LoadInt32(&curr); n%2 == 0 {
fmt.Println("B:", n)
atomic.AddInt32(&curr, 1)
} else {
time.Sleep(time.Nanosecond)
}
}
}()

wg.Wait()
}

最近疫情严重,口罩成了硬通货,有钱也不一定能买到。本地政府上线了预约购买口罩,需要准时抢。
第一反应就是写个脚本自动抢。抓包看了下接口很简单,只是验证码比较头疼。
验证码长这样:

首先去github搜索下验证码识别的项目,主要有两种:1.opencv降噪后用tesseract识别;2.用TensorFlow,PyTorch之类的机器学习框架训练模型。
这里有个合集:https://github.com/ZYSzys/awesome-captcha

先说第一种:
可以看这篇文章,https://www.cnblogs.com/qqandfqr/p/7866650.html
这里的问题是干扰线比较粗,去不干净。最后识别率很低,没法用。

再看第二种:
思路很简单:拿到大量(万级别)验证码图片并标注,训练之,生成个模型。
问题是怎么拿到大量标注好的验证码图片呢?可以花钱找打码平台识别,但是现在很多打码平台都被封了。
自己生成呢?得跟要识别的验证码图片样式一样才行。
机智如我,看预约口罩的接口是java写的(url里有servlet),做这种政府项目的技术都很一般,生成验证码的代码估计也是复制来的。Google 搜索下”java 验证码”,果然找到一篇教程,里面的验证码样式跟上面一样。
简直天助我也,果断复制代码生成一万个验证码图片,自带标注,美滋滋。
训练完后准确率高达90%。

最后顺利抢到了口罩。

2019好像没啥大事。
大概看了十本书,坚持背了大半年英语单词,学了半年流利说,坚持跑步。
陪梦哥买了房,我自己还没买,惭愧。
工作波澜不惊,或者说不太开心。
北京太冷了,怀念南方。
美股全出了,今年收益率虽然说有60%,但也错过了很多机会,总体是亏的。只能说不炒股是最赚的。没有如果。

还是没有财务自由,目测2020年也不会。
最好是能搞点副业,来个睡后收入。

加油吧。

这篇教程是利用现成的TensorFlow轮子快速实现一个图片分类器。
先说下背景:最新在做一个有趣的网站:meizigif.com 主要是抓取微博上好看的小姐姐图片贴到网站上。但是我又懒得一张张筛选,因为小姐姐们有时会发抠脚大汉的图。这时就需要一个”鉴黄“服务:检查图片是否sexy。
最开始用的是这个open_nsfw , 效果不好。 还是得用自己的图片集训练。
具体做法如下:
GitHub上找到一个现成的轮子sourcedexter/tfClassifier
照着这个教程操作即可。
有几个注意点:

  1. 至少要有两个分类, 我这个case是用sexy和not sexy 两类
  2. 这种错误是因为图片有问题,直接删掉即可。文件名就在错误提示前一行

    1
    Fail to slurp xxx file, reason: Failed to read from given file
  3. 这个错误是因为TensorFlow 版本不同, 把retrain.py中的SummaryWriter改成tf.summary.FileWriter即可

    1
    AttributeError: module 'tensorflow.python.training.training' has no attribute 'SummaryWriter'
  4. 验证效果

    1
    python3 retrain_model_classifier.py xxx.jpg

这时如果提示找不到output.pb,是因为教程中的命令生成的是output文件, 需要重命名成output.pb。默认的labels.txt在/tmp/下面, 需要mv过来。

以上
简单用没啥技术含量,但迅速解决了我的需求。