陈沙克

Aug 102021
 

筹划这个,其实也就3个月左右的时间,如果不记录下来,估计日后朋友问起,回答不上。

筹划

小孩已经10岁,已经是五年级,这个时候,面临上初中的问题,很多外地朋友问北京上学政策。对于没有北京户口的小孩,是可以上完初中,但是没法中考。这样其实会导致,初三读就没意义。你就只能读初中两年。

小孩到了5年级,也听到了这样的讨论,也引起了很大的焦虑。如何解决这个问题呢?最简单的,其实是出国上学,这样你基本上就是花钱就可以,不需要找人,关系,等待。

选择

可以留学的地方很多,身边的朋友都有过去,澳洲,新西兰,加拿大,目前这些国家疫情严重,不过对于留学的签证,还是非常鼓励。这些地方,如果是小孩一个人去上学,大概是20万人民币一年的费用,学费和生活费。这个肯定是最低标准。

东南亚,那么就3个地方可以选择,新加坡,马来西亚,和泰国,那么这三个地方,新加坡的学费是最贵的,马来西亚,其实也不贵。选择泰国,是因为相对来说没有太多的排华和佛教的国家。

泰国有几个地方你可以选择,曼谷,清迈。清迈是不靠近海,不过国际学校数量很多,教育资源很丰富。最后选择的清迈。

费用

这清迈上国际学校的费用,估计是国内的国际学校的费用一个零头而已。不同学校费用跨度很大,从3万人民币到15万人民币。其实可以根据自己来选择。

理论上,小孩和陪读,2人的费用,这清迈,应该10万人民币,应该是可以搞定。当然这是最低消费。20万,就比较舒服,可以天天喝完下午茶,去接小孩。

当然,第一年过去,落地的费用,还是比较高的,尤其现在。需要加上隔离的费用,机票是全家,防疫费用,保险,大概增加5万左右的费用,相比2020年以前。当然你也会遇到省钱的地方,学校学费降低,房租降低等。

租房

其实你刚去,肯定是租房,清迈是旅游城市,租房是非常发达,爱彼迎,公寓,都可以选择先找一个地方,短租,慢慢熟悉后,再做计划。

大概是2000人民币一个月,在爱彼迎上都租金。现在阶段,租公寓是很便宜的。

二手车

你过去泰国,需要做的一件事情,搞定你的驾照,做公证,你这样去泰国可以换驾照,在当地开车,可以购买二手车。

泰国的二手车,价格相对国内比较贵。日本车的天下,好处就是,二手车比较发达,你不喜欢,可以置换。

由于疫情,大量的人离开,也导致二手车的价格下降很多,不过真的比较满意,估计需要10万人民币左右。

申请学校

这个听起来很复杂,其实很简单,自己做功课,选学校,还有就是找中介帮忙。当你选择清迈,你就很容易找到相应的资源。

学校面试,基本是一个形式,后续就是交学费,发通知书。需要交1年的学费,支付宝交可以搞定支付。

  • 安排面试,大概1周,面试时间,大概30分钟,基本是形式。

Aug 102021
 

当第一次听到这个,感觉就是这种需求是变态,把虚拟机的东西,搬到容器来搞。我也到外面转了一圈,当时真的没有那家容器厂商搞过这个。

后来看了一下文档,发现k8s官方真的有相应的功能。K8s 1.18的版本,已经是默认打开。

  • https://docs.qq.com/doc/DSkNYQWt4bHhva0F6
  • https://docs.openshift.com/container-platform/4.8/scalability_and_performance/using-topology-manager.html
  • https://imroc.cc/k8s/best-practice/single-numa-node/
  • https://builders.intel.com/docs/networkbuilders/topology-management-implementation-in-kubernetes-technology-guide.pdf

改天拿到机器来测试一下这个。

Aug 092021
 

简单描述一下环境

  • CentOS 7.9 vm
  • docker 20.10.7 : 阿里repo
  • docker compose: yum install docker-compose
  • IP地址:10.0.38.127
  • 主机域名:harbor.chenshake.site,确认ping 域名,可以返回IP地址:10.0.38.127
  • 免费域名ssl证书

由于域名在DNSPOD 上,所以申请证书,自动完成域名归属的确认问题,就省掉了一个确认的过程,直接下载回来就可以使用。最底下那条记录:dnsauth,就是用来验证域名是你的。

直接就可以下载当前域名的ssl证书,一个zip包。到时候上传到linux机器上就可以。

先提前准备一下,一个是docker的存储,一个是存放证书的目录。

mkdir -p /data/harbor
mkdir -p /data/cert

上传证书

scp harbor.chenshake.site.zip root@10.0.38.127:/data/cert
unzip harbor.chenshake.site.zip 

看看解压后到情况,由于harbar的离线安装包,是采用nginx,所以你只需要把配置文件的路径指向Nginx就可以。

下载最新版本的离线安装包

wget https://github.com/goharbor/harbor/releases/download/v2.3.1/harbor-offline-installer-v2.3.1.tgz
tar zxvf harbor-offline-installer-v2.3.1.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml

后面就是编辑这个yml文件,重点就是证书的路径和访问的主机名字。

# Configuration file of Harbor

# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: harbor.chenshake.site

# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 80

# https related config
https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /data/cert/Nginx/1_harbor.chenshake.site_bundle.crt
  private_key: /data/cert/Nginx/2_harbor.chenshake.site.key

docker 存储路径

# The default data volume
data_volume: /data/harbor

密码你自己看着办。

./install.sh --with-chartmuseum

这个应该很快,几分钟搞定。

https://harbor.chenshake.site 直接访问,这可是信任证书。docker login,也是没问题。

github 加速的办法

#这里提供两个最常用的镜像地址:

https://github.com.cnpmjs.org
https://hub.fastgit.org
Aug 062021
 

企业内部搭建的很多服务,都是私有地址,如果使用域名,那么就只能修改hosts文件,就算是自己搭建一套dns,其实问题也很多,因为每个人的dns server是不一样的。现在使用k8s搞CICD,服务的发布,都是使用ip+端口发布,而不是域名发布,这种方式也非常不好,以前Openshift,全部都是通过域名的方式来发布应用。

怎么使用域名的方式来发布应用,因为Ip地址都是内网的,总不能让所有人都改hosts文件。解决的办法其实也很简单,去DNSpod注册一个域名,现在域名种类太多了。你选一个自己喜欢的。价格都很便宜。10块钱左右。

https://dnspod.cloud.tencent.com/

如果你只是解析私有地址,那么其实过程简单很多,上传身份证复印件,进行实名后,大概等待几个小时,就可以开始使用。

搞完这些,你会发现,你其实已经注册了一个腾讯云的账号,腾讯云多了一个用户。

内网地址解析

在你域名下面,添加一条A记录,应该马上生效,你ping的返回的地址,就是私有IP地址。

可以通过api,脚本添加记录,马上可以生效。

% ping tools.chenshake.site
PING tools.chenshake.site (10.0.38.167): 56 data bytes
64 bytes from 10.0.38.167: icmp_seq=0 ttl=63 time=3.979 ms
64 bytes from 10.0.38.167: icmp_seq=1 ttl=63 time=2.394 ms
64 bytes from 10.0.38.167: icmp_seq=2 ttl=63 time=2.400 ms

泛解析

这个其实是关键,支持泛解,可以解决很多问题。例如容器云平台的ingress,你可以通过设置

*.app.abc.com    10.0.38.167

这样设置后,你就会发现,ping xxx.app.chenshake.site , 无论xxx是什么,都会返回相同的ip地址: 192.168.1.100。

自动签发证书

这个问题就很高端,主要是要解决ingress,泛解的域名的https的问题。

  • https://imroc.cc/k8s/trick/cert-manager-webhook-dnspod/
  • https://github.com/qqshfox/cert-manager-webhook-dnspod
  • https://cloud.tencent.com/document/product/457/49368#.E9.85.8D.E7.BD.AE-dns
  • https://www.lishuai.fun/2021/08/01/k8s-create-cert-manager/

结合DNSPOD,解决证书管理的问题。

Jul 252021
 

这节课的内容,主要是碰撞。还有就是统计分数。

  • 设定字体,显示分数
  • 更换图片,这块需要理解,不能更改blit的图片,而是设置一个变量来替换
import pygame, time, random 
from random import randint as rd
pygame.init()
pygame.key.set_repeat(50)

screen = pygame.display.set_mode([1024,640])
bg=pygame.image.load('res/c1.png')

hero = pygame.sprite.Sprite()
hero.image = pygame.image.load('res/hero.png')
hero.rect = pygame.Rect(0,200,70,90)
hero.money = 0

d = pygame.sprite.Sprite()
d.image = pygame.image.load('res/diamonds.png')
d.rect = pygame.Rect(500,250,50,50)


door_open = pygame.image.load('res/house_open.png')
door_close = pygame.image.load('res/house_close.png')
house = pygame.sprite.Sprite()
house.image = door_close
house.rect = pygame.Rect(700,250,80,80)

f = pygame.font.SysFont('Times New Roman',60)


def draw():        
        screen.blit(bg,(0,0))
        screen.blit(hero.image,hero.rect)
        screen.blit(d.image,d.rect)
        core = f.render('Core :'+str(hero.money),1,0)
        screen.blit(core,(0,0))
        screen.blit(house.image,house.rect)

        if hero.rect.colliderect(d.rect):
                d.rect.x+=1000
                hero.money+=50

        if hero.rect.colliderect(house.rect) and hero.money >= 50:                
                house.image=door_open


                
        
        pygame.display.flip()

def keydown(i):
    if i.key == pygame.K_UP:
        hero.rect.y-=10
    if i.key == pygame.K_DOWN:
        hero.rect.y+=10
    if i.key == pygame.K_RIGHT:
        hero.rect.x+=10
    if i.key == pygame.K_LEFT:
        hero.rect.x-=10

p=1
while p ==1:
    draw()
    
    e = pygame.event.get()
    for i in e:
        if i.type == pygame.QUIT:
            p = 0     
        if i.type == pygame.KEYDOWN:
            keydown(i)   
pygame.quit()
Jul 252021
 

这是儿子的编程作业,这次比较崩溃,开始的时候,儿子提交作业没问题,我就没去听他的课程,结果过了几次课程,突然有地方搞不定,我就只能从头开始听课,一步一步的搞下去,回答儿子的问题。真的是自己给自己挖坑。

儿子写的代码,我很难看懂,他为了省事,变量都用一个字母,真的很难读。这个时候,才真正理解,为啥程序员不爱读别人的代码,我连儿子的代码读的都那么痛苦。

这里保存的代码就当git处理,每次课程,都会基于上次课程的代码继续。

  • 用了sprite,直接就有image和rect
  • load,图片
  • 碰撞后消失的实现。
import pygame, time, random 
from random import randint as rd
pygame.init()
pygame.key.set_repeat(50)

screen = pygame.display.set_mode([1024,640])
bg=pygame.image.load('res/c1.png')

hero = pygame.sprite.Sprite()
hero.image = pygame.image.load('res/hero.png')
hero.rect = pygame.Rect(0,200,70,90)

d = pygame.sprite.Sprite()
d.image = pygame.image.load('res/diamonds.png')
d.rect = pygame.Rect(500,250,50,50)

def draw():        
        screen.blit(bg,(0,0))
        screen.blit(hero.image,hero.rect)
        screen.blit(d.image,d.rect)

        if hero.rect.colliderect(d.rect):
                d.rect.x+=1000
                d.rect.y+=1000
        
        pygame.display.flip()

def keydown(i):
    if i.key == pygame.K_UP:
        hero.rect.y-=10
    if i.key == pygame.K_DOWN:
        hero.rect.y+=10
    if i.key == pygame.K_RIGHT:
        hero.rect.x+=10
    if i.key == pygame.K_LEFT:
        hero.rect.x-=10

p=1
while p ==1:
    draw()
    
    e = pygame.event.get()
    for i in e:
        if i.type == pygame.QUIT:
            p = 0     
        if i.type == pygame.KEYDOWN:
            keydown(i)   
pygame.quit()