hypyland实现alt + tab切换到任意工作区的窗口

hypyland使用过程中,遇到开了很多工作区和很多窗口时,找指定的窗口会比较麻烦 依赖 一键安装 yay -S jq rofi-lbonn-wayland-git jq rofi 脚本 把以下脚本存放到~/.config/hypr/scripts/switch_windows 1 2 3 4 #!/usr/bin/env bash NAME=`hyprctl clients -j | jq -r '.[] | select(.title != "") | .title' | rofi -dmenu` WINDOW=`hyprctl clients -j | jq -r ".[] | select(.title == \"${NAME}\") | .address"` hyprctl dispatch focuswindow address:${WINDOW} 添加快捷键 1 bind = ALT, Tab, exec, ${HOME}/.config/hypr/scripts/switch_windows 效果 按alt + tab后,在弹出的窗口选择对应窗口的标题, 可以自动跳转到对应的窗口 截图_2023-10-13_160749

2023/10/13
articleCard.readMore

使用泛型设计gorm扩展字段

大型项目经常需要在标准的用户表或员工表加些扩展字段,如果你有一套标准的用户管理系统的话,要么每个项目复制过来改一遍或者添加十几个固定的自定义字段Def1~Def10, 现在可以用在gorm定义模型时使用泛型来解决这个问题 gorm embeded嵌入字段 使用gorm:"embedded"定义嵌入字段 1 2 3 4 5 6 7 8 9 10 11 type User struct { gorm.Model Username string Password string Extend UserExtendField `gorm:"embedded"` // 添加embed tag } type UserExtendField struct { OpenID string UnionID string } 上面的model等价于这个, 两个生成的表结构是一致的 1 2 3 4 5 6 7 type User struct { gorm.Model Username string Password string OpenID string UnionID string } 上面两个模型都会生成同样的ddl sql, 如下 1 2 3 4 5 6 7 8 9 10 11 12 13 create table if not users ( id bigint unsigned auto_increment primary key, created_at datetime(3) null, updated_at datetime(3) null, deleted_at datetime(3) null, username longtext null, password longtext null, org_id longtext null, open_id longtext null, union_id longtext null ) 使用泛型定义可扩展的模型 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 type User[ExtendField any] struct { gorm.Model Username string Password string Extend ExtendField `gorm:"embedded"` } // 需要自定义表名,否则gorm识别到的泛型的表名是不符合数据库标准的,建表会错误 func (User[Extend, Item]) TableName() string { return "ma_users" } // 定义扩展字段结构 type ExtendUserField struct { OrgID string OpenID string UnionID string } 使用方法 1 2 3 4 5 6 // 生成数据库表结构 db.AutoMigrate(User[ExtendUserField]) // 查找 var list []User[ExtendUserField] db.model(&User[ExtendUserField]).Find(&list) 可扩展的子表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 type User[ExtendField any,Item any] struct { gorm.Model Username string Password string Extend ExtendField `gorm:"embedded"` Items Item `gorm:"foreignKey:user_id"` // 这里需要写外键 } // 需要自定义表名,否则gorm识别到的泛型的表名是不符合数据库标准的,建表会错误 func (User[Extend, Item]) TableName() string { return "ma_users" } type UserItem struct { gorm.Model UserID uint Product string } // 定义扩展字段结构 type ExtendUserField struct { OrgID string OpenID string UnionID string } 使用方法 1 2 3 // 查找 var list []User[ExtendUserField, UserItem] db.model(&User[ExtendUserField, UserItem]).Find(&list) 使用类型别名简化泛型类型 使用类型别名, 可以把上面的泛型代码简化 1 2 3 4 type MyUser = User[ExUserField, UserItem] var list []MyUser db.model(&MyUser).Find(&list)

2023/9/25
articleCard.readMore

使用qemu8.0安装龙芯loongarch64版本archlinux

准备 Loong Arch Linux官网 qemu镜像下载 QEMU_EFI_8.0.fd: 固件 archlinux-xfce4-2023.05.10-loong64.qcow2.zst: 系统镜像, 下载后需要解压出qcow2文件 安装依赖 建议安装qemu-full包, 我以前安装的不是这个, 导致gpu加载不了 1 sudo pacman -S qemu-full 启动系统 注意固件版本和系统镜像版本 1 2 3 4 5 6 7 8 9 10 11 12 13 qemu-system-loongarch64 \ -m 4G \ -cpu la464-loongarch-cpu \ -machine virt \ -smp 4 \ -bios ./QEMU_EFI_8.0.fd \ -serial stdio \ -device virtio-gpu-pci \ -net nic -net user \ -device nec-usb-xhci,id=xhci,addr=0x1b \ -device usb-tablet,id=tablet,bus=xhci.0,port=1 \ -device usb-kbd,id=keyboard,bus=xhci.0,port=2 \ -hda archlinux-xfce4-2023.05.10-loong64.qcow2 image image

2023/7/20
articleCard.readMore

在archlinux aur上提交龙芯loongarch的软件包

image 发现安装好龙芯后, laur软件仓库就自带了yay和paru, 可以直接使用pacman安装. 我有一个软件kaf-cli是go写的可以直接编译到龙芯上.本文记录一下PKGBUILD的写法 PKGBUILD脚本 脚本基本上和x86上的没什么区别, 只需要 在arch字段上添加loong64构架 添加source_loong64软件安装包的源 添加sha512sums_loong64校验值, 还可以是md5sum_loong64, sha1sums_loong64 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # Maintainer: YSTYLE <lxy5266@live.com> pkgname=kaf-cli pkgver=v1.3.5 pkgrel=2 epoch= pkgdesc="把txt文本转成epub与mobi电子书的命令行工具" arch=('x86_64' 'aarch64' 'loong64') url="https://github.com/ystyle/kaf-cli" license=('MulanPSL') optdepends=('kindlegen: 在x86_64上用于生成标准的mobi格式') source_x86_64=("https://github.com/ystyle/TmdTextEpub/releases/download/$pkgver/kaf-cli_${pkgver}_linux_amd64.zip") source_aarch64=("https://github.com/ystyle/TmdTextEpub/releases/download/$pkgver/kaf-cli_${pkgver}_linux_arm64.zip") source_loong64=("https://github.com/ystyle/TmdTextEpub/releases/download/$pkgver/kaf-cli_${pkgver}_linux_loong64.zip") sha512sums_x86_64=('29d3f3e0138f2348024d8a3e2a7a19dfe00b0098e9247c2ea364f3e4ab992575fc68bbbf56258be341c335b94e989ecbe37c0c32419b61ee2d45034f5c5e00de') sha512sums_aarch64=('72d2519dec242be92869d0d2eb7022d836147624ff79ba797ff287eb0444eb3dd33e910c01422e1448d486955dbbea0fbc2166e942213e1be03038993945e28f') sha512sums_loong64=('c6af9aeb904f934c0fbee06dda83fed02a22c0ec41cccd1b685cbe5e232b5dd66ad5888a91ab2aadeef7007870c94a063a4537a3e32f150d4ea12453cb3f1b54') package() { install -Dm755 kaf-cli "$pkgdir/usr/bin/kaf-cli" } 然后生成安装包清单信息 1 makepkg --printsrcinfo > .SRCINFO 测试生成安装包 1 makepkg -f 直接安装软件 1 makepkg -si 没问题直接用git推送到aur上就可以了

2023/7/19
articleCard.readMore

k3s云上master+内网agent的部署方式

公网master和内网agent使用wireguard-native通信, 只要在所有节点上安装了wireguard模块,k3s会自动处理所有通信流量 准备 在云端master开放 tcp 6443 端口, udp 51820 端口 先在所有机器上安装wireguard-native, 点击查看安装命令 如果内网有防火墙,需要开放master公网ip的6443和51820端口 在云上安装master 需要替换下面的master_public_ip为master公网ip, 能正常起来一般就没问题了 1 2 export INSTALL_KAS_EXEC="--node-external-ip=master_public_ip --flannel-backend=wireguard-native --flannel-external-ip" curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh - INSTALL_KAS_EXEC的参数是最少的开启wireguard-native功能的参数 在msater上执行cat /var/lib/rancher/k3s/server/node-token获取token, 等下子节点需要用 在内网安装agent 我是在树苺派上安装的。 下面的token需要换成上一步获取的, 然后把x.x.x.x换成上面的master_public_ip的master公网ip 1 2 export TOKEN=K1004a306bd3e78de0bfb4e9a485659e847dd16be3192b5b16407f53f991dc7d7f7::server:58dcf4e6e4fd7c6023976c331d1xxxxxx curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://x.x.x.x:6443 K3S_TOKEN=${TOKEN} sh -s - --docker --node-external-ip=x.x.x.x 只需要添加--node-external-ip参数就能启用wireguard-native功能了 。 如果没加这参数,是普通的节点,公网master和内网agent就不能正常通信 验证方法 先查看节点是否正常,不需要重启master或agent的服务,如果重启后才看到的话,可能没安装成功 1 2 3 4 $ kubelct get node NAME STATUS ROLES AGE VERSION ubuntu-20.04 Ready control-plane,master 14d v1.25.6+k3s1 archlinux-rpi Ready <none> 156m v1.25.6+k3s1 用nodeSelector分别在master和内网机器上部署nginx的deploy, 再分别创建对应的service 再在其中一个deploy的pod里执行curl 另一个deploy的service名称,如果能请求到nginx默认界面,说明是通的

2023/3/11
articleCard.readMore

阿里云网盘映射本地硬盘

下载aliyundrive-webdav 下载地址: https://github.com/messense/aliyundrive-webdav/releases/latest 解压并放在一个目录里 准备脚本 把以下内容存为run.ps1 1 2 3 4 $env:REFRESH_TOKEN="484b469b3ef74dcaba5cf21aeadae2ca" $env:WEBDAV_AUTH_USER="admin" $env:WEBDAV_AUTH_PASSWORD="123456" Start-Process -FilePath aliyundrive-webdav.exe -ArgumentList ("--port=8080") -Wait -WindowStyle Hidden 脚本配置说明: $env:REFRESH_TOKEN: 为阿里云网盘登陆后的token, 必需改为自己的 获取阿里云网盘REFRESH_TOKEN的方法 $env:WEBDAV_AUTH_USER: webdav用户名 $env:WEBDAV_AUTH_PASSWORD: webdav密码 --port=8080 为webdav的访问端口,被占用时可以换成其它的 设计开机启动 win + s搜索任务计划程序打开 在打开界面选择任务计划程序库 在右边点创建基本任务,输入名字: aliyundrive-webdav (名字可以随意写) 下一步选择: 计算机启动时 下一步选择: 启动程序 下一步: 在【程序或者脚本】写: powershell.exe 在【添加参数】填写: -WindowStyle Hidden -file run.ps1 在【起始于】填写:存放run.ps1和 aliyundrive-webdav的目录 下一步点击:完成 启动服务: 在服务列表选择aliyundrive-webdav并在右边选项里选择启动 映射本地硬盘 修改注册表,以支持webdav的http协议 打开文件管理器,在此电脑右键-选择映射网络驱动器 在弹窗选择一个盘符,并在文件夹填写: http://127.0.0.1:8080, 点完成,在弹窗输入用户名和密码

2022/1/1
articleCard.readMore

go mod 拉取 gogs 私有仓库

环境变量设置 添加环境变量或设置go env 1 2 3 export GOPRIVATE=git.hofo.co # 或者 go env -w GOPRIVATE=git.hofo.co git设置 在git设置http.extraheader PRIVATE-TOKEN生成方式: 在点击gogs右上头像-用户设置-授权应用-生成新的token 1 git config --global http.extraheader "PRIVATE-TOKEN: 5737d215af7f9a41a2abe98631d312e9e9311d29d" 在git添加url配置, ystyle:5737d215af7f9a41a2abe98631d312e9e939d29d11是用户名和上一步生成的token 1 git config --global url."https://ystyle:5737d215af7f9a41a2abe98631d312e9e939d29d11@git.hofo.co".insteadOf "https://git.hofo.co"

2021/6/22
articleCard.readMore

开源鸿蒙网络和hdc连接方法

hdc下载 如果下载了源码,可以在源码目录找到: developtools/hdc_standard/prebuilt/windows/hdc_std.exe 远程仓库地址: https://gitee.com/openharmony/developtools_hdc_standard hdc使用手册: https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/hdc_std-%E4%BD%BF%E7%94%A8%E6%8C%87%E5%AF%BC.md 通过usb连接鸿蒙 通过hi3516背面的type-c口连接电脑, 目前只有这口能传数据, 底下的口不行 如果成功,可以在电脑 设备管理-用串行总线设备下面看到HDC Device 打开终端, 输入hdc list targets列出设备 鸿蒙连接本地有线网络 插入有线网线 在hitool串口中连接上hi3516后执行 /system/xbin/su 获取root权限 ifconfig eth0 192.168.3.197 netmask 255.255.255.0 网络IP要换成自己的网段 用hdc通过tcp连接鸿蒙 在连接hitool串口后执行hdcd -t 在自己电脑主机上打开终端执行 hdc tconn 192.168.3.197:10178 显示 Connect OK 就表示连接上了 执行hdc list targets -v 显示设备 执行hdc -t 192.168.3.197:10178 shell 连接鸿蒙系统的shell, 注: tcp连接时要用-t指定连接的ip:端口 执行hdc -t 192.168.3.197:10178 file send localfile remotefile 发送文件 其实命令请查看使用手册

2021/6/6
articleCard.readMore

鸿蒙开发板HI3516用命令行连接wifi

鸿蒙的HI3516编译里已经有wpa_supplicant相关工程了,但编译时没有包进去, 所以只要修改配置文件后就能编译出来了 主要修改文件: communication/BUILD.gn#L17-18 行之间添加, 以下第2行 1 2 3 features = [ "wpa_supplicant:wpa_sample", ] 编译过程 1 2 3 docker run --rm -ti -e HARDWARE=ipcamera_hi3516dv300 -v ${PWD}/out:/OpenHarmony/out ystyle/open-harmony bash sed -i '17a\ \ \ \ \ \ "wpa_supplicant:wpa_sample",' applications/sample/camera/communication/BUILD.gn python build.py ${HARDWARE} -b debug 然后wpa_supplicant在编译目录/out/ipcamera_hi3516dv300/bin/, 把wpa_supplicant复制出来就可以直接使用 使用方法 先创建配置文件,wpa_supplicant.conf 1 2 3 4 5 6 7 8 9 10 country=GB ctrl_interface=udp network={ #要连接的SSID ssid="example" #如果不需要加密就写key_mgmt=NONE #key_mgmt=NONE #如果需要加密就写这行密码 psk="AA123456" } 把wpa_supplicant和配置文件复制到hi3516, 执行以下命令连接wifi 1 2 cd /nfs/wifi ./wpa_supplicant -i wlan0 -c ./wpa_supplicant.conf

2020/12/18
articleCard.readMore

Quest2 使用Netch激活与无线串流的设置

Quest2 激活与无线串流的设置 更新后自带Airlink串流,不需要买virtual desktop了 连网激活 需要可上网,与tcp、udp转发, 激活更新系统时需要udp转发才能正常更新系统, 本方法完美支持,只需要有支持wifi网卡的电脑 Netch: socket5、ss、vmess(v2ray) 转wifi 安装.NET Desktop runtime 5.0 x64和Visual C++ 运行库 打开Netch, 添你的代理,然后选择ByPass LAN and China, 启动 在win10开启wifi移动热点 在网络适配器管理界面,把带tap的网卡,右键属性-切换到分享, 把第一个勾上,下拉选择wifi热点的网卡 在quest2连接热点,等一会后,联网界面下的确定按钮亮了之后,会进入系统更新 更新系统后,可以切回wifi+http代理方式玩(wifi连接输入密码,下边点高级,可以填入http代理) Airlink串流 电脑上安装或升级oculus home到最新版 登陆帐号后到设置-公测版打开Airlink设置 更新quest2系统到最新版 在实验室打开Airlink 之后在设置-快捷操作-Airlink搜索电脑,连接上后点启动, 就进入电脑版的操作台了。 开发者模式 注册开发者帐号或进入别人的开发者团队 下载adb驱动, 解压后右键【androidwinusb.inf】选择安装即可。 安装手机oculus app 用数据线连接quest2和电脑 在手机oculus app上连接quest2, 并在设置开启开发者模板 在电脑上安装sidequest, 可以下载一些第三方游戏。 展开查看 virtual desktop 串流 ### virtual desktop - 在quest2上购买virtual desktop - virtual desktop必需买,sidequest上的只是个串流用的插件 - 在电脑上安装virtual desktop streamer串流软件, 官方网站直接免费下载 - 用数据线连接电脑 - 安装sidequest, 用它给quest2安装串流插件virtual desktop vr patch ### 购买virtual desktop - 注册paypal - 绑定支持银联的银行卡(我用的是邮政的储蓄卡,只有银联,没其它标识) - 在oculus home、oculus网站、或手机oculus app绑定paypal - 在上述软件中搜索virtual desktop点购买,如果出现执行查询出现错误就更换代理节点(我用美国节点的会出现这个) - 按汇率,卡里需要137RMB - steam 里的virtual desktop不支持quest2 ### 串流设置 - 连接到与电脑同wifi(激活时用的热点也可以用的) - 打开电脑上的virtual desktop streamer,并在username填写自己的oculus帐户名 - 在quest2上打开virtual desktop软件 - 这时会显示一个巨大的电脑屏幕, 打开支持steam vr或oculus home的游戏,会自动串流到quest2里 - 这时可以愉快的玩耍了 参考 Oculus Quest / Quest2 如何设置 VirtualDesktop 实现无线串流【详细教程】_kasaiki的博客-CSDN博客 Oculus Quest 国内玩家无障碍使用指南 - VR42 本文的Netch是此文中方案4的Sstap替代品,sstap已经多年不更新了 【干货】Oculus quest 2电脑连接串流教程|有线+无线_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

2020/12/6
articleCard.readMore

移植lua到鸿蒙 - 首个移植成功的编程语言

惯例先放hello world hello world 本项目地址: https://gitee.com/ystyle/lua 下载二进制文件 准备环境 安装 docker docker pull ystyle/open-harmony ps: 本文使用与鸿蒙系统一同编译的方法。 如果自己有本地环境,可以把lua项目放鸿蒙代码目录里(或者使用软接连) 下载lua官方代码 1 2 3 mkdir -p ~/code/ohos/ cd ~/code/ohos/ git clone https://github.com/lua/lua.git 编写BUILD.gn文件 因为要与系统一起编译, 为了方便,直接用替换掉示例的方法,这样就只需要写一个BUILD.gn就好了 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 # Copyright (c) 2020 YSTYLE(lxy5266@live.com) # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import("//build/lite/config/component/lite_component.gni") import("//build/lite/ndk/ndk.gni") static_library("hello_world") { sources = [ "lapi.c", "lauxlib.c", "lbaselib.c", "lcode.c", "lcorolib.c", "lctype.c", "ldblib.c", "ldebug.c", "ldo.c", "ldump.c", "lfunc.c", "lgc.c", "linit.c", "liolib.c", "llex.c", "lmathlib.c", "lmem.c", "loadlib.c", "lobject.c", "lopcodes.c", "loslib.c", "lparser.c", "lstate.c", "lstring.c", "lstrlib.c", "ltable.c", "ltablib.c", "ltests.c", "ltm.c", "lua.c", "lundump.c", "lutf8lib.c", "lvm.c", "lzio.c" ] include_dirs = [ "include", ] } lite_component("camera_app") { target_type = "executable" features = [ ":hello_world", ] } ndk_lib("app_sample") { deps = [ ":hello_world" ] head_files = [ "include" ] } static_library里的source参照lua/makefile 编译脚本 创建编译脚本build-ohos.sh文件 1 2 3 cd ~/code/ohos/lua touch build-ohos.sh chmod +x build-ohos.sh 文件内容如下 1 2 3 4 5 6 7 8 9 10 11 set -e rm -rf ./out ./bin docker run --rm -ti \ -e HARDWARE=ipcamera_hi3516dv300 \ -v ${PWD}/out:/OpenHarmony/out \ -v ${PWD}:/OpenHarmony/applications/sample/camera/app \ ystyle/open-harmony mkdir -p ./bin cp ./out/ipcamera_hi3516dv300/bin/camera_app ./bin/lua tar -zcf lua-5.4.2-ohos.tar.gz ./bin echo 'build success!' 与鸿蒙一起编译,这里使用我之前的docker镜像 1 2 3 cd ~/code/ohos/lua ./build-ohos.sh # 看到 ohos ipcamera_hi3516dv300 build success! build success! 就编译成功了。 编译后软件在鸿蒙的 ./out/ipcamera_hi3516dv300/bin/camera_app 脚本会把lua单独打包出来 单独的lua可执行文件在bin目录 演示 io操作 官方测试用例1 官方测试用例2 官方测试用例3

2020/11/7
articleCard.readMore

harl-鸿蒙应用开发实机热更新工具

鸿蒙应用开发实机热更新工具 依赖 debug 版本的hi3516镜像(release版本不支持shell) nfs v3 配置过程 配置过程可能遇到的问题 serial(串口) dev tools (可以从鸿蒙编译目录/out/ipcamera_hi3516dv300/dev_tools/bin复制到nfs挂载目录) aa (管理APP启动,关闭) bm (安装卸载APP) USAGE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ➜ harl.exe NAME: harl - Open Harmony OS Dev tools USAGE: harl.exe [global options] command [command options] [arguments...] VERSION: v0.1.2 COMMANDS: init, i init .harm.yml watch, w watch and reload app install install hap uninstall uninstall hap shell open a shell reboot reboot help, h Shows a list of commands or help for one command GLOBAL OPTIONS: --help, -h show help (default: false) --version, -v print the version (default: false) 下载应用 cd /your-project-dir 切换到项目目录 harl init 初始化配置文件 harl w 监听项目文件修改 监听时支持输入命令, 若看不到提示符请在调试日志暂停打印时按回车 可以用^run [command name]的方式执行command里定义的脚本 如执行示例配置文件的setup脚本, ^run setup 目前命令只支持在项目目录执行 配置文件 .harl.yaml 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 30 watch: # 监听文件修改并自动编译、安装的参数 excludes: # 排除的文件 - .gradle - .idea - gradle - entry/build - entry/node_modules includes: # 监听的文件类型 - .css - .hml - .js - .hap - .json delay: 100 # 监听频率,单位ms nfs: # nfs 配置 ldir: H:/bin # 本地nfs挂载目录 rdir: /nfs # 远程nfs(开发板)挂载目录 shell: # 开发板连接参数 com: COM5 # 串口号 command: # 定义常用命令, 在shell或watch里可执行 setup: # 命令执行方式: ^run setup - dhclient eth0 # 命令一行一个, 顺序执行错误不会中断 - mkdir /nfs - mount 192.168.3.12:/nfsshare /nfs nfs kill: # 关闭应用 - cd /nfs - ./aa terminate -p top.ystyle.ohos.js.testapp start: # 启动应用 - cd /nfs - ./aa start -p top.ystyle.ohos.js.testapp -n default 支持情况 只支持windows 只测试过liteWearable项目改的smartVision 只在hi3516d上测试过

2020/10/25
articleCard.readMore

使用Docker快速上手鸿蒙

准备 在机器上安装好Docker 编译鸿蒙系统镜像 打开终端执行以下命令 1 2 3 mkdir ~/OpenHarmony cd ~/OpenHarmony docker run --rm -ti -v ${PWD}/out:/OpenHarmony/out ystyle/open-harmony 编译成功后各镜像在out目录下面, 默认编译的是Hi3861开发板的系统镜像, 可自行烧录到固定测试 如果要编译其它板子可以设置dokcer镜像的环境变量HARDWARE 目前支持: wifiiot、ipcamera_hi3516dv300、ipcamera_hi3518ev300 更新代码并编译 1 2 3 4 5 mkdir ~/OpenHarmony cd ~/OpenHarmony docker run --rm -ti -e HARDWARE=ipcamera_hi3516dv300 -v ${PWD}/out:/OpenHarmony/out ystyle/open-harmony bash repo sync -c python build.py ${HARDWARE} -b debug 编写应用程序 示例在这Hi3861开发板第二个示例程序 创建一个代码目录: my_first_app 新建文件hello_world.c 1 2 3 4 5 6 7 8 #include "ohos_init.h" #include "ohos_types.h" void HelloWorld(void) { printf("[DEMO] Hello world.\n"); } SYS_RUN(HelloWorld); 新建文件BUILD.gn 1 2 3 4 5 6 7 8 static_library("myapp") { sources = [ "hello_world.c" ] include_dirs = [ "//utils/native/liteos/include" ] } 新建文件APP_BUILD.gn 1 2 3 4 5 6 7 import("//build/lite/config/component/lite_component.gni") lite_component("app") { features = [ "my_first_app:myapp", ] } 现在的目录结构为 1 2 3 4 . ├── APP_BUILD.gn ├── BUILD.gn └── hello_world.c 编译代码 1 2 3 4 5 6 docker run --rm \ -e HARDWARE=wifiiot \ -v ${PWD}/out:/OpenHarmony/out \ -v ${PWD}/APP_BUILD.gn:/OpenHarmony/applications/sample/wifi-iot/app/APP_BUILD.gn \ -v ${PWD}:/OpenHarmony/applications/sample/wifi-iot/app/my_first_app \ ystyle/open-harmony 编译后的文件在out目录 1 2 3 4 5 6 . ├── APP_BUILD.gn ├── BUILD.gn ├── hello_world.c └── out └── wifiiot 其它问题 如果实际开发,建议直接替换掉 整个/OpenHarmony/applications/sample/wifi-iot/app/ 目录, 目录里边的都是示例代码. 如果要修改启动编译的命令的话,可以写好shell 脚本, run时指定cmd命令 构建命令为: python build.py ${HARDWARE} -b debug docker run --rm -v ${PWD}/mybuild.sh:/OpenHarmony/mybuild.sh ystyle/open-harmony /OpenHarmony/mybuild.sh 更新鸿蒙代码: 用修改镜像启动命令的方法,在/OpenHarmony目录执行repo sync -c 命令 其它驱动开发或系统组件开发也可以用挂载的方式把工程目录映射到容器,开发并编译 本文所使用Docker镜像的dockerfile文件 参考@keithyau所写的Dockerfile修改而来 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 FROM ubuntu:20.04 AS build-env LABEL version=2020-10-15 # Set your hardware ENV HARDWARE=wifiiot # Prevent interactive ENV DEBIAN_FRONTEND=noninteractive # Setting up the build environment RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \ sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \ apt-get clean -y && \ apt-get -y update && \ apt-get remove python* -y && \ apt-get install git curl build-essential libdbus-glib-1-dev libgirepository1.0-dev -y && \ apt-get install zip libncurses5-dev pkg-config -y && \ apt-get install python3-pip -y && \ apt-get install scons dosfstools mtools mtd-utils default-jdk default-jre -y && \ rm -rf /var/lib/apt/lists/* # Setup python # Make sure python install on the right python version path RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1 && \ pip3 install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple && \ pip3 install ninja kconfiglib pycryptodome ecdsa -i https://mirrors.aliyun.com/pypi/simple && \ pip3 install six --upgrade --ignore-installed six -i https://pypi.tuna.tsinghua.edu.cn/simple && \ rm -rf /var/cache/apt/archives #Fix Dash RUN rm -rf /bin/sh && \ ln -s /bin/bash /bin/sh #Setup gn ENV PATH /tools/gn:$PATH RUN mkdir /tools && \ cd /tools && \ curl -LO https://repo.huaweicloud.com/harmonyos/compiler/gn/1523/linux/gn.1523.tar && \ tar xvf /tools/gn.1523.tar && \ rm -rf /tools/gn.1523.tar #Setup LLVM #ADD ./llvm-linux-9.0.0-34042.tar /tools ENV PATH /tools/llvm/bin:$PATH RUN cd /tools && \ curl -LO https://repo.huaweicloud.com/harmonyos/compiler/clang/9.0.0-34042/linux/llvm-linux-9.0.0-34042.tar && \ tar xvf /tools/llvm-linux-9.0.0-34042.tar && \ rm -rf /tools/llvm-linux-9.0.0-34042.tar #Setup hc-gen ENV PATH /tools/hc-gen:$PATH RUN cd /tools && \ curl -LO https://repo.huaweicloud.com/harmonyos/compiler/hc-gen/0.65/linux/hc-gen-0.65-linux.tar && \ tar xvf /tools/hc-gen-0.65-linux.tar && \ rm -rf /tools/hc-gen-0.65-linux.tar #Setup hmos_app_packing_tool and hapsigntool // 必需是这目录,编译脚本写死了 ENV PATH /root/developtools/:$PATH RUN mkdir /root/developtools/ && cd /root/developtools/ && \ curl -LO https://repo.huaweicloud.com/harmonyos/develop_tools/hmos_app_packing_tool.jar && \ curl -LO https://repo.huaweicloud.com/harmonyos/develop_tools/hapsigntoolv2.jar #Setup gcc_riscv32 ENV PATH /tools/gcc_riscv32/bin:$PATH RUN cd /tools && \ curl -LO http://tools.harmonyos.com/mirrors/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz && \ tar xvf /tools/gcc_riscv32-linux-7.3.0.tar.gz && \ rm -rf /tools/gcc_riscv32-linux-7.3.0.tar.gz #Create work dir RUN mkdir /OpenHarmony WORKDIR /OpenHarmony # Gitee Repo tool and download # Make sure requests install at the right location RUN curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/bin/repo && \ chmod a+x /usr/bin/repo && \ pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests #Download source, update to your info RUN git config --global user.email "lxy5266@live.com" && \ git config --global user.name "ystyle" && \ git config --global color.ui false && \ git config --global credential.helper store && \ repo init -u https://gitee.com/openharmony/manifest.git -b master --repo-branch=stable --no-repo-verify && \ repo sync -c # compile ENV LANGUAGE en ENV LANG en_US.utf-8 RUN export|grep LANG CMD ["/bin/bash", "-c", "python build.py ${HARDWARE} -b debug"]

2020/9/11
articleCard.readMore

转换在线漫画为mobi格式

转换在线漫画为mobi格式的工具 支持的网站 动漫之家 喵同人 使用方法 必需安装谷歌浏览器chrome 下载comic-cli: https://pan.baidu.com/s/1EPkLJ7WIJYdYtRHBEMqw0w, 提取码:h4np 新建一个文件文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 注释: 以#号或//开头的行会被忽略,空行也会被忽略 // 本文件会生成三个漫画文件 // 下载整个动漫,直接写列表地址 https://www.dmzj.com/info/wodenvpengyouyoudianqiguaidanshihenkeai.html // 也可以载指定的章节,填写需要下载的章节地址,同一漫画的章节会合并成同一个文件 https://www.dmzj.com/view/benghuai3rd/102129.html#@page=1 https://www.dmzj.com/view/benghuai3rd/101570.html // 这行地址的章节会被忽略 # https://www.dmzj.com/view/benghuai3rd/101013.html // 喵同人网站的写列表地址就好了 https://zh.nyahentai.site/g/326699/ 然后把文件拖到comic-cli里边就会自动把漫画转为mobi格式 如果没有生成则把kindlegen.exe放到c:/windows里再试试 图文教程 目前存在的问题 转换工程文件到mobi格式时,可能失败,kindlegen没输出原因和错误内容,目前无法解决, 只能多次重试了。 其它工具 txt文件转epub和mobi的工具TmdTextEpub和kaf 喵同人在线转换为mobi格式hcc

2020/9/4
articleCard.readMore

Linux kde文件管理器连接华为Share

华为手机设置 打开华为Share 长按华为Share图标进入华为分享 打开共享至电脑选项 Linux 设置 检查文件夹没有就创建一个 1 2 mkdir ~/.smb vim ~/.smb/smb.conf 然后在文件填写 1 2 [global] client min protocol = NT1 打开Dolphin 选择网络在文件管理地址栏填写手机ip: smb://192.168.3.129 回车 在弹窗填写用户名和密码 右键添加到标签(下次直接在标签点击就能访问了) 访问华为Share 修改标签名称

2020/9/3
articleCard.readMore

Dokcer编译方舟引擎(MapleEngine)

文档 方舟引擎发布公告 官方文档 - 方舟引擎编译说明 官方文档 - 构建Java 核心库 Docker 文件 复制到方舟引擎代码根目录, 文件名为Dockerfile 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 30 FROM ubuntu:16.04 MAINTAINER https://www.openarkcompiler.cn # Setting up the build environment RUN sed -i 's/archive.ubuntu.com/mirrors.163.com/g' /etc/apt/sources.list && \ apt-get -y update && \ apt install --no-install-recommends -y build-essential git wget clang cmake libffi-dev libelf-dev libunwind-dev \ libssl-dev openjdk-8-jdk-headless unzip python-minimal python3 curl && \ rm -rf /var/lib/apt/lists/* # 在国内请反注释下行, 因为容器也是个单独的系统,所以别用127.0.0.1 #ENV http_proxy=http://192.168.3.81:1081 \ # https_proxy=http://192.168.3.81:1081 # copy source COPY . /maple_engine WORKDIR /maple_engine # custom java/lang/Object.java RUN cd /maple_engine/maple_build/jar/ && \ bash -c "cp /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/{rt.jar,jce.jar,jsse.jar,charsets.jar} . " && \ mkdir -p java/lang/ && \ curl -L http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/raw-file/jdk8u265-b01/src/share/classes/java/lang/Object.java > java/lang/Object.java && \ sed -i '/public class Object {/a\long reserved_1; int reserved_2;' java/lang/Object.java && \ javac -target 1.8 -g java/lang/Object.java && \ jar uf rt.jar java/lang/Object.class && \ rm -rf java # compile RUN bash -c "source ./envsetup.sh && ./maple_build/tools/build-maple.sh && ./maple_build/tools/build-libcore.sh && rm -rf /maple_engine/maple_build/out/*" 编译方舟引擎 方舟编译器,也会一起编译,注意: 编译libjava时会占用25G左右的内存,不足25G建议添加swap分区 本人机器是16G内存,20G的SSD swap分区 1 docker build -t ystyle/maple-engine . 编译占用 测试 镜像已经推送到docker hub, 可以直接使用下面的镜像编译hello world或其它软件 1 2 3 4 5 6 7 8 9 10 docker run --rm -ti ystyle/maple-engine bash # 设置基础环境 source ./envsetup.sh # 编译java hello world cd ./maple_build/examples/HelloWorld $MAPLE_BUILD_TOOLS/java2asm.sh HelloWorld.java # 生成把.s文件编译为.so $MAPLE_BUILD_TOOLS/asm2so.sh HelloWorld.s # 运行软件 $MAPLE_BUILD_TOOLS/run-app.sh -classpath ./HelloWorld.so HelloWorld 编译执行结果 调试应用程序 方舟多语言调试器介绍 方舟多语言调试器项目说明 方舟多语言调试器用户手册 1 2 3 4 5 6 7 8 9 10 11 12 docker run --rm -ti ystyle/maple-engine:gdb bash # 设置jdk源码路径 $JDK_SRC 为本地的openjdk源码 # docker run --rm -ti -v ${JDK_SRC}:/root/my_openjdk8/jdk/src/ ystyle/maple-engine:gdb bash # 设置基础环境 source ./envsetup.sh # 编译java hello world cd ./maple_build/examples/HelloWorld $MAPLE_BUILD_TOOLS/java2asm.sh HelloWorld.java # 生成把.s文件编译为.so $MAPLE_BUILD_TOOLS/asm2so.sh HelloWorld.s # 调试应用程序 "$MAPLE_BUILD_TOOLS"/run-app.sh -gdb -classpath ./HelloWorld.so HelloWorld

2020/7/21
articleCard.readMore

Windows右键菜单添以Window Terminal命令行打开文件

应用场景: 在文件右键打开windows terminal, 并在执行的命令中以选择的文件为参数运行。 本示例为在windows terminal使用micro编辑器打开选中文件 先创建一个右键菜单项 1 2 3 4 5 6 7 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\Open with Micro] "Icon"="E:\\Code\\Go\\bin\\micro-logo-mark.ico" [HKEY_CLASSES_ROOT\*\shell\Open with Micro\command] @="C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe new-tab -p \"Windows PowerShell\" micro.exe \"%1\"" 键的说明 [HKEY_CLASSES_ROOT\*\shell\Open with Micro] 中的 Open with Micro为右键菜单名 Icon 是右键菜单项的图标 command 里的是菜单项点击后要执行的命令 wt.exe new-tab -p \"Windows PowerShell\" micro.exe '%1' wt 必需要写全路径,不写会弹出【选择打开文件需要的应用】那个窗口 new-tab 是打开一个新的windows terminal 页签(不过在我电脑会打开新的一个应用实例) -p \"Windows PowerShell\" 是新页签需要用的的shell,可以是windows terminal的配置中的 name或guid micro.exe \"%1\" 是需要执行的命令, \"%1\"是当前右键的文件占位符 效果

2020/5/31
articleCard.readMore

uTorrent BT软件入门

软件设置并不能解决百分百的问题,BT是有死链的概念的,这种怎么设置都无法下载,还有些冷门内容速度慢是无法解决的,但大家可以尽量少用讯雷下载。 讯雷p2p只上传给自己的服务器,别的下载工具得不到p2p加速,并且还免费给讯雷做下载点 如果遇到喜欢的资源,想让更多的人知道、下载就多给种子挂【做种】吧,下载完后默认就开了的,建议分享率大于1时再关,有条件的可以一直挂着 全局设置 连接设置 监听端口部分照着设置就行 代理服务器: 代理ip和端口看你用的代理工具,要勾上使用代理进行主机名查询 任务设置 DHT和UDP tracker一定要勾上 传出连接选择强制, 去掉[允许传入旧式中接] 建议按我的设置 去广告 把以下设置为false offers.sponsored_torrent_offer_enabled offers.left_rail_offer_enabled gui.show_plus_upsell 下载任务设置 主要是开DHT,和设置tracker, DHT开在连接上面的任务里说过了 Tracker是什么 一般下载文件是用http/ftp/smb协议的域名或ip来明确指向文件存放在哪个IP的服务器上, 但BT是用识别码来标识文件,而没有明确的文件地址。 所以为了找到文件就需要有一个机制来确定目标文件在哪些机器上能下载到。 DHT和Tracker服务器都能做到文件寻址。 DHT: 是内嵌在BT软件里边的,会和电脑能识别并能连接上的BT网络进行数据交换和查询,从而找到文件需要到哪个IP去下载。 Tracker: 是运行在别人搭建好的服务器上,你只需要在下载时填写别人提供的Tracker连接就好了,BT软件会连接服务器进行文件查询并取到下载文件的IP地址 设置Tracker 在任务上右键-属性 打开https://github.com/ngosang/trackerslist 把 trackers_best_ip.txt 或 trackers_all.txt 的内容复制到tracker里 trackers_best_ip 如果部分tracker被墙了域名,可以用这个试试 trackers_all 一般是域名的,如果墙了域名的可能连接不上,破解方法在上面 【全局设置 - 连接设置 - 设置代理】 终极方法是启用全局代理,但梯子月费比较贵,流量也少,所以以上都用不了时才开来下载 一般是勾上了DHT的,没有勾的,自行勾上 制作种子或磁力链接 点击文件-制作新的torrent 或 工具栏 箭头那个图标 在选择源添加文件或目录 有必要时在Tracker里添加新的链接 勾选【开始做种】, 默认已经选上 点创建,选择种子保存位置, 这种子可以发给别人 生成磁力链接: 在【做种中】界面 右键任务 - 【复制Magnet链接】 边下边播功能 选择正在下载的任务 在下面板选择文件 在下载中的文件右键复制串流地址 打开其它支持播放url的播放器 打开这网址,就能实现边下边播放的功能了

2020/4/25
articleCard.readMore

Windows Terminal 添加SSH到Tabs里

注意替换路径 用git-bash带的SSH 命令一定要用转义的双引号包起来, key的路径用git bash的路径方式,没key的话,删掉-i后面的就好,但每次都要输入密码. key登陆百度搜索SSH免密登陆 1 2 3 4 5 6 7 8 9 10 11 12 13 { "guid": "{43d5c880-802b-42c7-aeaf-21b112a3569b}", "name": "腾讯云", "icon":"E:\\Images\\tx.ico", "commandline": "E:\\Application\\Git\\bin\\bash.exe -c \"ssh ubuntu@140.143.205.68 -i /e/Code/Docker/tx.key\"", "useAcrylic":true, "acrylicOpacity": 0.75, "backgroundImage" : "E:\\Images\\壁纸\\03.jpg", "backgroundImageOpacity" : 0.5, "startingDirectory": "./", "scrollbarState": false, "hidden": false } 用Power Shell自带的SSH 基本是一样的,但key的目录必需在当前用户的主目录下,路径是windwos的标准格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 { // Make changes here to the powershell.exe profile "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44ba}", "name": "腾讯云", "icon":"E:\\Images\\tx.ico", "commandline": "powershell.exe -c \"ssh ubuntu@140.143.205.68 -i C:/Users/Administrator/tx.key\"", "useAcrylic":true, "acrylicOpacity": 0.75, "backgroundImage" : "E:\\Images\\壁纸\\03.jpg", "backgroundImageOpacity" : 0.5, "startingDirectory": "./", "scrollbarState": false, "background": "#0000FF", "hidden": false } 添加右键菜单-在任意地方打开Window Terminal 图标下载 1 2 3 4 5 6 7 8 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background\shell\wt] @="Windows Terminal here" "Icon"="\"E:\\Images\\terminal.ico\"" [HKEY_CLASSES_ROOT\Directory\Background\shell\wt\command] @="C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe" 效果预览

2020/3/15
articleCard.readMore

KDE添加右键菜单

文件存放位置 位置 $HOME/.local/share/kservices5/ /usr/share/kservices5/ 文件后缀: .desktop 示例 1 2 3 4 5 6 7 8 9 10 11 [Desktop Entry] Actions=OptimisePNG; MimeType=image/png; Type=Service X-KDE-ServiceTypes=KonqPopupMenu/Plugin Icon=tools-wizard.png [Desktop Action OptimisePNG] Name=Optimise PNG Image Icon=tools-wizard.png Exec=optipng -o7 %f 说明 [Desktop Entry] Actions: 在该菜单中的菜单项,多个用英文分号隔开 MimeType: 在指定的文件类型中启动该菜单 inode/directory 在目录中启用 image/png 只在png图片启用 all/allfiles在所有文件中启用(不包括文件夹) image/allfiles 在所有图片启用 Type=Service: 表示服务,不会在开始菜单中显示, 改为Application表示应用,会显示在开始菜单 X-KDE-ServiceTypes=KonqPopupMenu/Plugin: 只在kde中支持, 表示显示在右键-动作下边 X-KDE-Priority=TopLevel 表示显示在顶级菜单中,右键直接显示 Icon Type=Service 时图标不会显示 [Desktop Action OptimisePNG] OptimisePNG为自定义的动作,填写在上边的Actions里 Name菜单项名称 Icon菜单显示图标 Exec点击菜单时执行的命令 %f 文件列表。用于可一次打开多个本地文件的应用程序。每个文件都作为单独的参数传递给可执行程序。 %F 即使选择了多个文件,也只有一个文件名(包括路径)。读取桌面条目的系统应认识到所讨论的程序无法处理多个文件参数,并且如果该程序无法处理其他文件参数,则应该为每个选定文件生成并执行该程序的多个副本。如果文件不在本地文件系统上(即,在HTTP或FTP位置),则文件将被复制到本地文件系统,%f并将展开以指向临时文件。用于不了解URL语法的程序。 [Desktop Action XXXX] 的条目在一个文件中可以有多个 如果新建无误后显示不出来的话, 执行一下kbuildsycoca5如果有错误会有提示`

2020/2/21
articleCard.readMore