Andriod开发从入门到放弃

1 安装 安装android-studio,如android-studio-2020.3.1.26-windows.exe 1 安装SDK!建议找比较完整的SDK目录压缩包下载 第一步不装avd(andriod模拟器),下载雷电模拟器来替代 下载必要的依赖库okhttp-3.8.1.jar\okio-1.14.0.jar等(吐槽下JAVA这个服务器开发语言,居然没有好用的HTTP封装类,和C++没有标准的网络库一样,属实难崩) *安装postman等工具用于测试 2 配置 首先配置SDK目录: 配置gradle(大坑一个,参考2) step-1:修改hosts文件,附加: # dl.google.com fucking andriod 58.254.149.225 dl.google.com 220.181.174.97 dl.google.com 180.163.151.161 dl.google.com 220.181.174.33 dl.google.com 58.254.137.161 dl.google.com 203.208.39.193 dl.google.com step-2:创建 C:\Users\Liudx1985\.gradle\init.gradle allprojects{ repositories { def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public' def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/public' def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google' def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin' all { ArtifactRepository repo -> if(repo instanceof MavenArtifactRepository){ def url = repo.……

阅读全文

electron-vite-vue开发指北

1. 准备nodejs环境 set up nvm via Releases · coreybutler/nvm-windows (github.com) config mirror #设置npm_mirror: nvm npm_mirror https://npmmirror.com/mirrors/npm/ #设置node_mirror: nvm node_mirror https://npmmirror.com/mirrors/node/ install nodejs @Previous Releases | Node.js (nodejs.org) nvm uninstall 10.13.0 # 删掉低版本的 10.13.0 nvm list available# check nodejs available @ nvm install 14.21.3 # version 16.XX nvm install lts #最新的 LTS 版本 nvm install latest # 安装最新版本的 Node.js,也就是 Current 版本: use nodejs……

阅读全文

Vue3高阶组件技术

1.Props | Vue.js (vuejs.org) ​ 父组件需要向子组件注入数据,可以使用props,类似于attrs:<comp label="xxxx"> 特别注意! props是单向从父到子数据流,如果是子组件修改父组件属性,需要用#3 event props在子组件是只读的,意味我们无法修改props! <script setup> const props = defineProps(['foo']) console.log(props.foo) const props2 = defineProps({ label: { type: String, require: true, }, name: { type: String, require: true, } }) </script> 通常prop的玩法是: 1,通过父组件直接修改props绑定的变量,子组件内props自动更新界面!2、初始化给内部的原生组件,然后在原生组件事件里把prop值更新回去,所谓的v-model模式。 PS,如果我们要强行额外写入属性怎么办呢,可以利用provide\inject跨层级传输接口依赖注入 | Vue.js (vuejs.org)!: provide('currentTab', currentTab) # 父组件写变量 inject("currentTab") # 子组件注入变量,注意,这个变量是Ref,并不位于props! 2.……

阅读全文

利用Tesseract对图片或pdf进行OCR

1. 准备 下载OCR核心工具包Tesseract并安装,参考Tesseract OCR 下载及安装教程 (中英文语言包)_eng.traineddata下载-CSDN博客,注意中文语言包需要下载,如果不下载语言包,可能无法识别中文。 下载PDF转图片工具包Releases · oschwartz10612/poppler-windows (github.com);如果仅仅是OCR图片,可以不用下载这个 完成后,将上述两个的(tesseract.exe&pdfimages.exe)目录加入到电脑的环境变量PATH中: 2 安装python 依赖 下面安装Python 的依赖 pip install pytesseract pip install pdf2image 3 识别图片 def ocr_image(): from PIL import Image # 打开图片 image = Image.open('demo.png') # 使用pytesseract进行OCR识别 text = pytesseract.image_to_string(image, lang='chi_sim') # lang设置为中文 # 输出识别结果 print(text) 4 识别pdf def ocr_pdf(pdf): from pdf2image import convert_from_path # 设置tesseract.exe的路径 pytesseract.pytesseract.tesseract_cmd = r'D:\Games\TesseractOCR5\tesseract.……

阅读全文

JavaScript 模块:CommonJS VS Es6

[TOC] JavaScript 模块有两种:CommonJS和ES6模块化规范12: 1. CommonJS 模块规范 node.js的默认方式,使用exports(aka. global.module.exports) 对象导出,使用require 函数导入,下面是一个简单的示例(上面是模块,下面是调用): // circle.js const PI = 3.1415 function area(r) { return PI * r * r } // exports exports.PI = PI exports.area = area // 也可以写成下面的方式: exports.PI = 3.14;exports.area=(r)=> PI * r * r // 或者:exports = {PI, area} // main.js const circle = require("./circle.js")// 就是上面模块的exports对象。 console.log(circle.PI) console.log(circle.area(5)) // 或者,结合对象解构赋值写成 const {area,PI} = require('./circle') // 可省略.js console.log(PI) console.log(area(5)) 2 ES6模块规范 ​ ES6新增export、import 关键字用于支持模块化。注意前后台都可以使用ES6模块,有一些细微的不同。……

阅读全文

Javascript迭代器、生成器、异步

1 Javascript 迭代器 ES6 新增了一个新玩具iterator:迭代器iterator协议1主要规定了可迭代协议允许 JavaScript 对象定义或定制它们的迭代行为,例如,在一个 for..of 结构中,哪些值可以被遍历到。一些内置类型同时是内置的可迭代对象,并且有默认的迭代行为,比如 Array 或者 Map,而其他内置类型则不是(比如 Object)。下面是一个简单的fibonacci迭代器,可以无限生产一个数列1,1,2,3,5,8.... /** * @description function *迭代器对象 * @returns a fibonacci iterable object */ const fib = { [Symbol.iterator]() { let n1 = 1, n2 = 1 return { // 使迭代器编程iterable [Symbol.iterator]() { return this; }, next() { let c = n2; n2 = n1 n1 = n1 + c return { value: c, done: false }; }, return(v) { console.……

阅读全文

PySide6界面程序编写及打包

1. setup 安装Pyside6,建议使用tsinghua源anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror # 创建env conda create --name gui # 激活env conda active gui # 安装PySide6框架~ pip install --upgrade pip pip install pyqt6-tools # 安装UI 设计工具,for QTDesigner, PyUIC pip install pyside6 # +打包工具+ pip install pyinstaller auto-py-to-exe 设置pyCharm解释器 ​ 参考1 配置external Tools,在菜单中方便使用:目录类似: C:\Users\37556\anaconda3\envs\gui\Lib\site-packages\PySide6\designer.exe C:\Users\37556\anaconda3\envs\gui\Scripts\auto-py-to-exe.exe 2 编写代码 2.1 打开QtDesigner,设计界面: ​ 运行工具QtDesinger,设计一个界面led.……

阅读全文

Argsort 以及Rank的Javascript代码练习

1 引言:argsort以及rank排序问题 $\P$ argsort-定义 假设一个数组$a$由$$\underbrace{[x_0,x_1,\dots,x_i, \dots,x_n]}_{0\dots n乱序}$$构成,那么$b=argsort(a)$定义为:经过排序后a中元素(即$0..n$)的索引数组: $$ \underbrace{[a中第0大数的索引,\dots,a中第i大数的索引, \dots,a中第n大数的索引]}_{0\dots n} $$ 我们假设$a[i]= x$,由于$i是a中第x大的数$,那么$i在b中位置就是x$,${b[x]=i}$,如图所示: 消去x,可得: $$ b[x]=b[a[i]]=i $$ $\S$如果对a进行两次argsort,会发生神魔事情呢,这里由一个文章回答为什么对数列使用两次argsort后能得到原数列的rank数列? - 知乎 (zhihu.com),摘抄如下: 对于一个从0~k-1组成序列a来说,执行argsort得到序列b就是b[a[i]]=i,再执行一次得到c就是c[b[j]]=j,代入j=a[i]得c[b[a[i]]]=a[i],c[i]=a[i],所以一个rank序列两次argsort之后自然会变回原样 结合上面的假设a是一个0…n 乱序而来的数组,那么a里面存储的正好是数组a中各元素的排名。推广到任意乱序的序列S,我们只需要将S里的元素一一映射到$[(S_i,a_i)],a_i\in {0..n}$,然后对$S_i$排序,$argsort.argsort(a)=rank(a)$。 2. Show me the code! // a[i],b[i] = > {...a[i]:b[i]...} zip = function (a, b) { let r = [] for (let i in a) { r.push([a[i], b[i]]) } return r; } // argsort返回的是索引 r,[a[r[0]]..a[r[n]]] 就是将a排序好的数组 function argsort(arr, cmp = (a, b) => a - b) { let arr_ind = zip(arr, range(arr.……

阅读全文

CSS3动画入门

1 CSS 3 动画简介 ​ 我们平时看到的动画是由一张一张静态的画面拼接而成的,我们通常用帧数来体现出动画效果的好与坏。 每一帧都是静止的图象,快速连续地显示帧便形成了运动的假象。 高的帧率可以得到更流畅、更逼真的动画。1 ​ ​ css中实现动画有两种方式:过渡动画transitions|自定义动画animation;两者均可以通过元素的旋转(rotate),缩放(scale),倾斜(skew)或平移translate(*也可使用较复杂的矩阵API:(transform))、颜色(color|background)、透明度(opcaticy)完成帧动画效果。下列示例是一个旋转的实例,可查阅MDN文档学习其他位置变换属性、颜色背景等。 <html> <head> <style> #arrow-right{ display: inline-block; /*修改未行内元素、可修改高&宽*/ margin:4px; width: 10px; height: 10px; border-right:2px solid black; border-bottom:2px solid black; transform-origin: 0% 100%; /*中心*/ transform: rotate(-45deg); /*然后逆时针旋转45°*/ } #arrow-left{ display: inline-block; margin:4px; width: 10px; height: 10px; border-top:2px solid black; border-left:2px solid black; transform: rotate(-45deg); /*原地逆时针旋转45°*/ } .……

阅读全文

Mysql绿色安装方法

1. install 下载MySQLXX.zip, visitMySQL :: Download MySQL Community Server For further information on MySQL or additional documentation, visit http://dev.mysql.com/doc/ 添加 MYSQL/bin到环境变量 在mysql根目录增加my.ini如下: [mysqld] #设置3306端口号 port=3306 #设置MySQL的安装目录 basedir=D:\Games\mysql-8.0.31 #设置MySQL数据库的数据存放目录 datadir=D:\Games\mysql-8.0.31\data #运行最大连接数 max_connections=200 #运行连接失败的次数。这也是为了防止有人从该主机试图攻击数据库系统 max_connect_errors=10 #服务端使用的字符集默认为utf-8 character-set-server=utf8 [mysql] #客户端使用的字符集默认为utf8 default-character-set=utf8 [client] #客户端默认端口号为3306 port=3306 以管理员身份打开命令行!,进入mysql/bin目录 执行 # 安装服务 mysqld -remove MySQL mysqld --install mysql57 # 初始化data;这里,初始化会产生一个随机密码后面初次登录会使用!YD;W2Q9Tj,bs mysqld --initialize --console # 如果报错,试试这个 mysqld --initialize-insecure --console 开启mysql的服务net start mysql57……

阅读全文