260×260

科学搜查官yuchanns

追寻计算机炼金术的贤者之石
  • Shenzhen, China
  • 后端开发工程师
readme.md

嗨~我是@yuchanns,网友们通常叫我羽毛,我的常用中文网名是科学搜查官,取自《逆转裁判》中的女角色宝月茜的职业。

我的头像是一只喝着咖啡敲着代码的地鼠,姿势模仿了《崩坏3》的布洛尼娅的一个表情包,由我不愿透露姓名的朋友所绘。

readme

你现在所看到的博客是我使用gatsby编写的主题博客gatsby-theme-yuchanns,融合了github和reddit两者中我所喜爱的元素,目前还在完善中;等vuerpess-next功能完善后将会提供基于vuepress的版本。

我还编写过另一个主题vuepress-theme-hermit,这是一个hugo-hermit的vuepress实现。

到现在为止我谈到的都是前端相关的作品,但前端只是我的兴趣——实际上我是一名后端开发工程师,使用过php、python,目前的主力开发语言是go,并且我对自己的gopher身份而感到自豪。

Posted in 7 hours

【投稿】一个事务的故事-01

一个事务的故事是一系列数据库技术短文,由作者-没什么调性连载投稿。

hello

小明要给小王转100块钱,而银行卡只有100块钱,银行就要做增删查改,一个事务完成。

一个事务要么是完成,要么是失败。

在MySQL中,事物支持是在引擎层实现的。 MySQL是一个支持多引擎的系统,但并不是所有的引擎都支持事务。 比如MySQL原生的MyISAM引擎就不支持事务,这也是MyISAM被InnoDB取代的重要原因之一。

隔离性与隔离级别

事务ACID肯定要想到(Atomicity, Consistency, Isolation, Durability), 其中I,就是隔离性。

当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)问题,为了解决这些问题,就有了隔离级别的概念。

Posted 7 days ago

[WIP]用Yew写一个井字棋

用Rust编写的WASM前端Web框架Yew实现一个井字棋。

本文参照React入门教程Tic Tac Toe实现。

最终成品

Posted 7 days ago

Rust类型系统学习笔记

parts of ferris the crab

本文为《Rust编程之道》学习笔记。

友情提示:文中代码可以使用Rust Playground在线运行。

Rust是显式静态强类型的类型安全语言

  • 静态表明它在编译期进行类型检查
  • 强类型表明它不允许类型自动隐式转换,不同类型无法进行计算
  • 类型安全表明它保证运行时的内存安全
  • 显示是因为它的类型推导在某些时候需要显示指定

类型大小

动态大小类型

Rust中大部分类型都可以在编译期确定大小。

对于无法确定大小的类型(即DST, Dynamic Sized Type),只能在运行时分配,使用指针关联。

这样的指针存储了内存地址和长度信息,被称为胖指针

例如&str字符串类型,它是一个引用类型,我们可以获取它指向的地址和长度信息:

fn main() { let str = "yuchanns"; let ptr = str.as_ptr(); let len = str.len(); println!("{:p}", ptr); println!("{:?}", len); } // 0x558706bd2000 // 8

由于存储内存地址和长度的变量类型都为usize(在64位系统上为8字节),所以胖指针可在编译期确定为16字节,分配到栈上。

可以通过下面的代码清单查看胖指针&str

Posted 15 days ago

安装macOS

最近给手头的mbp更换了sn750作为启动盘,记录一下安装过程。

install mbp

准备

  • 备份:将当前启动盘的系统用TimeMachine备份起来
  • 镜像:从AppStore搜索并下载BigSur
  • U盘:一个经过格式化没有任何内容的U盘

为什么要从AppStore下载?

因为直接使用在线安装系统到新的启动盘视网络状况可能会花费好几个小时,然后因为网络波动断开前功尽弃。

制作U盘安装盘

下载好的镜像不要选择安装,而是直接退出。镜像AppImage被保存在/Applications/Install\ macOS\ BigSur.app

假设U盘格式化后命名为yuchanns,那么硬盘的路径为/Volumes/yuchanns

打开终端,执行下列命令,将系统安装工具注入到U盘:

sudo /Applications/Install\ macOS\ BigSur.app/Contents/Resources/createinstallmedia --volume /Volumes/yuchanns

等待终端执行完毕,会发现U盘名称被改写成Install macOS BigSur

格式化新启动盘

重启mbp,在Apple Logo界面按住command+R直到出现进度条后松开,进入到macOS实用工具

Posted 17 days ago

了解栈区和堆区

Posted 23 days ago

Rust语言精要

parts of ferris the crab

一文总结Rust语言精要,快速形成整体风格认知。

文章构成

  • 环境安装与工具链

    • 环境安装
    • 编译器与包管理器
    • 核心库与标准库
  • 语法和语义介绍

    • 语句与表达式
    • 变量声明语义
    • 函数与闭包
    • 流程控制
  • 类型系统

    • 基础类型
    • 复合类型
    • 标准库通用集合类型
    • 智能指针
    • 泛型
    • trait
  • 错误处理
  • 注释与打印

环境安装与工具链

Rust语言使用rustup作为安装器,它可以安装、更新和管理Rust的所有官方工具链。绝大多数情况下建议使用者使用该工具进行环境安装。

环境安装

对于*nix系统用户而言,执行:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

对于Windows系统用户而言,下载安装rustup-init.exe

安装完毕后可以通过rustup show获取工具链安装地址,进一步查看有哪些工具链,例如在笔者的macOS上是:

❯ rustup show Default host: x86_64-apple-darwin rustup home: /Users/yuchanns/.rustup stable-x86_64-apple-darwin (default) rustc 1.49.0 (e1884a8e3 2020-12-29) ❯ ls /Users/yuchanns/.rustup settings.toml toolchains update-hashes ❯ ls /Users/yuchanns/.rustup/toolchains stable-x86_64-apple-darwin ❯ ls /Users/yuchanns/.rustup/toolchains/stable-x86_64-apple-darwin bin etc lib share ❯ ls /Users/yuchanns/.rustup/toolchains/stable-x86_64-apple-darwin/bin cargo cargo-clippy cargo-fmt clippy-driver rust-gdb rust-gdbgui rust-lldb rustc rustdoc rustfmt

通过rustup doc可以打开本地的Rust文档,而不用网络。

编译器与包管理器

rustc官方编译器,负责将源代码编译为可执行文件或库文件。经过分词和解析生成AST,然后处理为HIR(进行类型检查),接着编译为MIR(实现增量编译),最终翻译为LLVM IR

Posted a month ago

Rust中文社区

Posted a month ago

Rust Playground

Posted a month ago

Go Playground

Posted a month ago

protobuf的使用

protobuf是谷歌开发的一款跨平台跨语言强扩展性的用于序列化数据的协议,就像人们常用的xml、json一样。它主要由C++编写,用户按照相应的接口描述语言(Interface description language, IDL)可以批量生成对应语言的代码模板,用于诸如微服务rpc交换数据之类的通信。

而grpc是使用protobuf协议实现的一个RPC框架,由谷歌开发。

本文通过一个小例子演示创建grpc的go服务端以及php和node的客户端进行通信,并为go服务端启用grpc gateway使之支持http访问。

注意:本文只适用于Linux或者macOS。

protobuf

环境安装

  • 安装protoc
  • 安装go插件
  • 安装php插件
  • 安装node插件

安装protoc

protoc是protobuf的编译器。就像其他编程语言,用户编写代码,编译器将其编译成其他后端语言,protoc…

Posted a month ago

自下而上的github actions使用笔记

github action 01

前言

笔者常常在github上使用一些XXexample的仓库记录使用某种语言的过程中对第三方包的试用或者验证一些思路和想法,时间一长,整个仓库就显得杂乱无比。

于是笔者打算采用Monorepo的方式对这些仓库进行管理,将各自的记录过程进行隔离,并且独立运行对应的单元测试。

调研过程一开始想到的是熟悉的CircleCI,遗憾的是这个工具官方不支持分割配置文件,所有的job都需要塞到同一个config.yml里,同样会显得冗长繁杂(民间是有通过makefile进行分割合并的解决方案,但是笔者觉得太过复杂);再者印象中曾看过别人使用github自带的CI/CD工具Actions似乎支持多个工作流,而且天然亲近github自身,于是决定新年的第一天就把它掌握了,用于接下来的Monorepo管理辅助。

注:在这篇文章中,笔者假定读者都已经掌握了yaml配置语法。

开始

  • 2021
  • 2020
  • 2019
  • 2017
  • 2016