豪翔天下

Change My World by Program

0%

趁着上了几天夜班,今天在工作日休息,记录一下8月份去山东旅游的一些事情。

这次的旅游主要是刚加了几天的通宵夜班,又正好公司出了个旅游补贴,8月份老婆的工作也不是很忙,所以就请假出去玩儿了。本来想着出去避暑的,但是真正能避暑的地方应该是云南和川西,这两个地方其实我们可以自驾去的,所以这次打算去远一点的地方。三亚太远太贵太热,就决定去威海,正好大学室友在日照,然后只有青岛有直达重庆的飞机,所以主要就是游览了这三个地方。

阅读全文 »

疫情后实在憋得太久了,7月的重庆也实在太热了,于是找个周末说走就走。好在我现在是在电脑上面工作,所以周四晚上就能出发。

行程

Day1: 贵阳

第一天是周五我也没请假,于是我一个人在酒店,老婆带着孩子出去玩儿的。下班后我们再一起在贵阳城区逛逛。

黔灵山森林公园、贵阳的几条好吃街、甲秀楼、贵阳白宫

阅读全文 »

Instance

  • 如果停止或者重启卡住了,是无法进行强制操作的,最多要等15分钟才能恢复
1
sudo apt remove iptables-persistent -y && sudo ufw disable && sudo iptables -F	# 关闭机器内部的防火墙

使用Bastion跳板机登录Instance

  • 在Instance详情页的Virtual Cloud Agent中打开Bastion,然后在Bastion的管理面板中创建session,(注意,bastion的private ip需要加入到机器的network中添加一条路由,允许22端口),最后复制登录命令即可,例如:

    1
    ssh -i <privateKey> -o ProxyCommand="ssh -i <privateKey> -W %h:%p -p 22 ocid1.bastionsession.oc1.us-sanjose-1.xxxxxx@host.bastion.us-sanjose-1.oci.oraclecloud.com" -p 22 ubuntu@10.0.8.89
  • 如果登录报错(sign_and_send_pubkey: no mutual signature supported)可以尝试在~/.ssh/config中添加配置:

    1
    2
    3
    Host *
    PubkeyAcceptedKeyTypes=+ssh-rsa
    HostKeyAlgorithms=+ssh-rsa

OCI(Oracle Cloud Infrasturcture)

  • Oracle的命令行工具

安装

1
2
3
4
5
oci setup config
Enter a location for your config [/home/ubuntu/.oci/config]: # 默认即可
Enter a user OCID: # 这里的user OCID来自于user profile里面的OCID
Enter a tenancy OCID: # 来自于右上角头像里面的Tenancy里面的OCID
# 其他默认即可
  • 上传Public Key(/home/ubuntu/.oci/oci_api_key_public.pem)到API Keys(My Profile -> API keys -> Paste a public key)中,上传后可能需要等几分钟才生效

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 用户管理iam
oci iam compartment list --all # 列出所有的compartment,可以获取到compartment id,下面很多命令都需要的

# 计算资源compute
oci compute instance list --compartment-id=ocidxxxxx # 列出所有的实例
oci compute instance get --instance-id=ocid1.xxxxx # 获取实例详情,但是这里不会返回IP,要获取IP还是得用vinc来弄

# 公网IP,public-ip
oci network public-ip list --compartment-id=ocidxxxxx --scope=REGION # 列出所有的公网IP
oci network public-ip update --public-ip-id=ocid1.publicip.xxxxxxx --private-ip-id= # 将公网IP与私有IP解绑,解绑后服务器内部kennel
oci network public-ip update --public-ip-id=ocid1.publicip.xxxxxxx --private-ip-id=ocid1.privateip.xxxxxx # 将公网IP绑定到指定的私有IP
oci network public-ip create --compartment-id={COMPARTMENT_ID} --lifetime=RESERVED --display-name=test # 创建新的reversed ip
oci network public-ip delete --public-ip-id=ocid1.publicip.xxxxxxx --force # 删除public ip,加了--force参数就不会询问你了

# 私网IP,private-ip来自于VNIC Details里面的Private IP Address
oci network private-ip get --private-ip-id=ocid1.privateip.xxxxxxx

# 获取VNIC详情, VNIC的OCID在VPIC Details里面获取,注意不是那个FQDN
oci network vnic get --vnic-id=ocid1.vnic.xxxxx

  • 使用Nodejs编写跨平台桌面应用程序
  • Electron Fiddle是官方的沙盒程序

安装配置

  • 可以使用React脚手架来初始化electron-react-boilerplate

    • 虽然它推荐的是Electron Store来存储状态,但是依然可以用redux或者mobx,并且持久化也可以直接用localStorage,mobx的话就是mobx-persist-store
1
2
3
4
npm run start 	# 运行APP
npm run build # 编译
ANALYZE=true npm run build # 能够直接分析build完成后包的各部分所占的体积
npm run package # 打包app,能直接打包成zip或者dmg。可以在package.json中修改package参数,如果添加-mwl表示同时打包--mac, --win, --linux
  • 添加依赖

    1
    2
    ./package.json # 非native的module,或者类型依赖@types/*
    ./release/app/package.json # native modules需要安装在这里,不需要编译
  • package.json配置

    1
    2
    3
    4
    5
    6
    7
    {
    "build": {
    "mac": {
    "identity": "Apple Development: xxxx (xxx)" // 指定签名的identity,否则可能会自动选择到一个无效的identity导致应用打不开,可以用security find-identity -v查看当前所有的identity
    }
    }
    }
阅读全文 »

  • 使用起来比redux好用多了,就凭这一点我就放弃redux
  • redux将数据保存在单一的store中,mobx则是分散在多个store中
  • react-mobx-typescript-realworld-example-app: 一个很好的example项目

安装配置

  • React集成方式: 注意看里面的Tips,如果不是用的mobx-react-lite,很多东西就不用写了,比如Provider,observable props(不需要在组件外部包裹observer了,默认store变化的时候会自动重新渲染),并且observer自动使用的就是React.memo,不需要单独为了优化性能去useMemo
1
2
3
4
npm install --save mobx
npm install mobx-utils --save # 最好同时安装这个库,提供了更多的帮助方法,例如带参数的computedFn

# 如果实用Typescript或者https://mobx.js.org/enabling-decorators.html可以参考这个文档修改一下配置即可
阅读全文 »

疫情终于结束了,希望今年全国人民各行各业都能缓过来!

2022总结

看了下2021年定的2022年的目标,本以为大多数都没能完成,没想到还是完成了许多的。

阅读全文 »

每年的认知小结

人生

  • 结婚大事已交卷,生娃任务已完成,只要不生病,家人平安健康,慢慢赚钱,其余都是锦上添花。——网络

  • 家总要成,钱总要挣,奔走红尘,勿忘曾经是书生——网络

  • 做人要有责任和担当,应该把钱都拿出来买房,拯救国家经济——网络

  • 努力的意义就是:当好运降临在自己身上时,你会觉得我配,而不是眼看着好事落在别人身上,然后愤愤地说 我呸。——网络

  • 我上了那么多年学,熬了那么多夜,做那么多习题,顶着各种各样的压力,参加各种残酷的考试,谈恋爱,分手,工作,加班。

    我这么辛苦,竟然是为了成为一个普通人——网络

  • 礼物不重要,重要的是礼物背后的心意:我依旧被你重视,被你放在心上。最好的婚姻,不是乍见之欢,而是久处不厌。最好的夫妻,是一起享受生活的平淡,却也喜欢带给对方的惊喜和温暖。

  • 当爱情开花结果,就是另一场冒险的开始。

  • 和你在一起的目的很简单,生个孩子,看你小时候的样子。——老君书屋

  • 即使老婆在自己医院产检我也要陪她去,这样好的消息可以第一时间分享,坏的消息也能第一时间承担。

生活

  • 一个东西的性价比只来自于它的使用频次。——刘飞
  • 当你每次回家,腋窝下面都夹着一些东西,比如妻子的礼物,孩子的礼物,家庭的礼物,那样的话,你会觉得回家,是一种快乐。——涂磊

Xcode常用操作

模拟器打开keyboard键盘

  • 默认是不会弹出键盘的,直接用电脑的键盘进行输入,但是有时候想要调试一下键盘弹出的效果,可以点击顶部菜单I/O -> Keyboard -> Toggle Software Keyboard

Apple设计资源

图标

  • App Icon Generator: iOS或者android各种尺寸图标一键生成,生成后直接拖到xcode即可

App需要提供图标的规格为40/588/60/80/87/120/160/180/1024,另外,如果最好是将png图片转换为jpg,因为默认会把png不存在的地方背景设置为黑色。准备好图标素材以后,直接在xcode里面的Images.xcassets将图标拖入即可。

App 上架流程

  1. 注册开发者账号
  2. App Store Connect新建一个APP
  3. 从Xcode上传APP至App Store Connect
    1. 下载P12文件(申请发布(Distribution)证书)
    2. 导入P12文件(我操作的时候是别人直接发给我的,所以这里就没记录步骤了,应该可以参考这里),有一点需要注意的时候,双击P12文件安装成功后,还需要在keychain里点击其private key,修改Access Control,需要修改配置Allow all applications to access this item,否则下面在上传的时候会提示missing private key或者让你无限输入电脑用户名密码的问题
    3. 点击Product->Archive,完成后会自动弹出一个对话框(当然,这个对话框也可以通过Window->Organizer打开,要选择对应的APP)
    4. 选择Distribute App,然后选择App Store Connect,再Upload,一直下一步应该就可以了。(如果打包能成功,但是上传却说认证失败,可能是网络问题)
    5. 上传完成后可以在App Store Connect后台的TestFlight看到刚才的build了,这时候可以去添加测试用户,点击左侧菜单App Store Connect User进行添加,添加方式见页面提示即可,很简单,添加完成后会发送邮件给用户,里面有个兑换码,在ios的testflightapp上点击redeem输入兑换码即可下载,如果下载时提示the app couldn't be installed because testflight isn't available,那就等大概五分钟试试
阅读全文 »

  • 目前我用到的react-native平台对native支持最好的表格组件了

安装配置

1
2
3
4
5
6
7
8
npm install --save victory
npm install --save victory-native react-native-svg # react-native,注意还需要执行pod install


# react-native需要忽略下面的warning
LogBox.ignoreLogs([
"Require cycle: node_modules/victory",
]);

Charts

VictoryArea

  • 每个横坐标都对应两个纵坐标形成一个area,也可以不提供y0,默认就从y最小值开始
1
2
3
4
5
6
7
8
9
10
11
12
13
<VictoryArea
domain={{x: [minX, maxX], y: [minY, maxY]}} // 可手动设置x和y轴的边界值
domain={{y: [minY, maxY]}} // 也可以单独设置某个轴,和上面的一样,最小值和最大值必须不一样,否则会报一个prop type warning,就只能自己先设置默认值了
data={[
{ x: 1, y: 2, y0: 0 },
{ x: 2, y: 3, y0: 1 },
{ x: 3, y: 5, y0: 1 },
{ x: 4, y: 4, y0: 2 },
{ x: 5, y: 6, y0: 2 }
]}
dataComponent={<Area />} // 指那一块区域而不是某个点
interpolation={'basis'} // 默认是linear折线,basis平滑曲线,其他的其实都有差别,但说不上名字了,可以挨个试试:natural/basis/bundle/cardinal/catmullRom/monotoneY/monotoneX/step(电子信号那种)/stepAfter/stepBefore
/>
阅读全文 »