我是一个软件开发工程师

乐观 积极 生活如此精彩

总有快乐的事情降临

这是一个精彩的世界,不是吗?

技术精要

这里是我的一些你可能需要的技术摘要

动画与效果

一些常见的动画和效果

算法与逻辑

常用的算法和逻辑推导

性能与技巧

关于性能和技巧方面的总结

Web Rust基础三

模块化

函数

函数的参数类型和返回值类型不能省略:

fn a_plus_b(a: i32, b: i32) -> i32 {
    return a + b;
}

fn main() {
    println!("{}", a_plus_b(1, 2));
}

函数的返回值可以像用 return 返回。更常见的是,函数的最后一个表达式如果不以分号结尾,它的值就是这个函数的返回值,例如:

fn a_plus_b(a: i32, b: i32) -> i32 {
    a + b
}

给函数传参时,对于字符串或者复杂 struct ,为了避免复制,通常应传递[……]

继续阅读

Web Rust基础二

循环-流程控制

循环与其他语言大致相同:

//作用域块
    let a = {
        println!("ABC"); // 输出 ABC
        "DEF" // 作为这个花括号块的值
    }; // 分号不可省略
    println!("{}", a);

    //if else
    let a1 = 1;
    let b1 = 2;
    let c1 = if a1 < b1 {
        println!("true");
        &quot[......]

继续阅读

Web Rust基础一

介绍

Web开发者使用的底层编程语言,在某些场景下,性能高于C++。

这里是多年前(大概2015年左右,那时候还在艰难的推广React库😭)的使用总结。

安装

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

安装完成后


//升级
rustup update

//查看版本
cargo --version

构建和包管理

cargo build// 可以构建项目
cargo run// 可以运行项目
cargo test// 可以测试项目
cargo doc// 可以为项目构建文档
cargo pu[......]

继续阅读

Dart使用(早年)

本文发布与2013年11月7日
本文与2021年12月23日整理

今日立冬,今年的立冬比往年显冷清。

Dart是Google正在开发中的一门语言,用于替代Javascript。相比javascript,它的语言基础更加牢靠,有利于创建更可靠的程序。鉴于现在web开发的情况为,后端有各种成熟的web框架,前端被风头正盛的各种js框架统治,所以Dart的目标只好定在“未来”,希望能在将来成为人们构建结构化web程序的首选语言。另外,Dart的作者是v8引擎的作者,仅这一点就能人以强大的信心。

我曾在很久以前简单了解了一下Dart,那个时候的它还太弱。这段时间看到Dart team正在开发[……]

继续阅读

Dart语法重新整理

很多年前简单总结了Dart的一些特点,都是基于当时的一些使用情况,从新梳理下。

Dart特点

  • 在Dart中,一切都是对象,所有的对象都是继承Object,也就是所有能够使用变量引用的都是对象,每个对象都是一个了类的实例。在Dart中甚至数字、方法和null都是对象。
  • 没有赋初值的变量都会有默认值null

  • 标识符可以以字母或者_下划线开头,后面可以是其他字符和数字的组合。

  • Dart支持顶级方法,如main方法,同时还支持在类中定义函数(静态函数和实例函数),还可以在方法中定义方法,Dart支持顶层变量,也支持类变量或对象变量。

  • Dart没有public、prote[……]

    继续阅读

Arm Flutter环境配置

本文在高通骁龙的ARM64硬件上。。。理论使用与所有ARM64的架构。

在x86或x64平台上配置环境比较简单,详见官网文档。这里使用arm-v8的aarch64架构。

Flutter安装

官网下载SDK后,按文档步骤安装即可。

1、将压缩包解压到自己认为合适的位置(手痒了可以放到系统文件夹里去🧱�)

 cd /yourself file path
 tar xf /yourself file path/flutter_linux_2.x.x-stable.tar.xz

2、添加环境变量,终端直接:

export PATH="$PATH:`pwd`/flutter/bin"

[……]

继续阅读

Webgpu基础

前两天看了下Api,变化有点大,重新整理下。

初始化

const entry: GPU = navigator.gpu;
if (!entry) {
    throw new Error('WebGPU is not supported on this browser.你类浏览器不支持。')
}

Adapter适配器

Adapter就是显卡,除了N卡还有A卡、高通骁龙的SoC等等。

Webgpu基础

let adapter: GPUAdapter = null;

adapter = await entry.requestAdapter();

Device设备

Device就是逻辑对象化[……]

继续阅读

Webgpu草案

WebGPU是针对万维网的新开放源代码图形API标准的草案提案。苹果的WebKit团队于2017年2月7日宣布了该项目。目前为止,苹果正在向W3C提出这个新标准,试图在浏览器中开发下一代图形技术。

相关Api都是实验性的,随时会改,与WebGL的区别、文档等详见官网

目前,着色器有两种:GLSL 和 WGSL。

个人推荐WGSL,未来技术应该也会是这个。

以下是测试代码,用于绘制一个多边形:

<canvas id="c" width="512" height="512"></canvas>

<script id="vs" type="x-shader[......]

继续阅读

WebGL基础

由于WebGl技术较为成熟,这里不再赘述。

资源初始化

let canvas: HTMLCanvasElement = document.getElementById('webgl') as HTMLCanvasElement;

let gl: WebGLRenderingContext = canvas.getContext('webgl');
if (!gl) {

    throw new Error('WebGL failed to initialize.');
}

gl.clearColor(0.0, 0.0, 0.0, 0.0);

gl.colorMask(true,[......]

继续阅读

近邻探寻

WebGpu已经使用一段时间了,做个近邻探寻的测试。

近邻探寻

屏幕被分成9块,红色粒子为观测对象,同一单元格中的粒子显示为黄色,
移动到下一个单元格中的粒子显示为绿色,其他粒子显示为灰色。相邻粒子应该是靠近目标块的粒子。

此外,近邻探寻中使用了双调排序

下面是完整测试例子:

<!DOCTYPE html>
<html>
<head>
    <title>近邻探寻测试-indeex</title>
    <meta charset="utf-8">
</head>
<body>
<[......]

继续阅读