设计基本练习生成器的初衷,是希望能按我们所习惯的语言顺序,将我们的需要自然地迁移到代码上,即:
将“动机”按指定“节奏型”,设定好“优先上/下行”的顺序,用指定的“模进方式”,沿着指定的“序列”,延伸“几个八度”,还可以在上下行的结尾设置“调整”,最后是配备相应的“指法”。
只是几句话的事情,却花费了大量的功夫,特别是从这个例子的up主得到的代码,在处理了节奏型问题的基础上,解决了许多细节上的问题。
现在,将下面这个文件下载后,在lilypond文件里用\include命令引用,就可以按着自己的要求生成基本练习了。
https://files.cnblogs.com/files/lilypondgaspard/commands-from-lilypondgaspard.zip
因为个人能力原因,这个生成器肯定还有许多问题,看看能不能综合一下各位读者的意见,以做出更多改进
---------------------
基本练习生成器,实质上是一个有多个参数设置的函数。我目前规定的语法是这样的:
\BasicExercise %以下是参数 \relative c'{ c df c d } % 1. 动机 {} % 2. 下行时动机(可以缺省) {c8. c16} % 3. 节奏型、连断等 #UP % 4. 先上行/下行 Transpose % 5. 模进方式 {c cs d ds e f g gs a bf b} % 6. 模进序列 #2 % 7. 延伸几个八度 {} % 8. 上行结尾补充 {c'1} % 9. 下行结尾补充 {s8._3 s16_4} % 10. 指法 换言之,设定了这些参数之后,就能自动生成一个完整的基本练习啦!
本文仅供学习交流使用,如侵立删! 记一次 网易易盾滑块验证分析并通过 操作环境 win10 、 mac Python3.9 selenium、PIL、numpy、scipy、matplotlib 分析 网易易盾滑块验证,就长下面这个样子 具体验证原理有兴趣的可自行查询官方文档:网易易盾开发文档
话不多少,借助之前写阿里云盾滑块和极验滑块的经验,直接上代码,详细可参考:[阿里云盾滑块验证]极验滑块验证(https://cenjy.blog.csdn.net/article/details/124357598)
解决方案 使用selenium请求url,并触发滑块验证 def open(self): # 初始化浏览器 wait = WebDriverWait(self.driver, 5) # 点击对应标签 self.driver.get(cfg.TEST_URL) button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, cfg.HD_SELECOTR))) button.click() self.tc_item = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, cfg.TC_SELECOTR))) self.tc_item.click() # 得到背景和滑块的item, 以及滑动按钮 time.sleep(2) self.background_item = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, cfg.BG_SELECOTR)) ) self.slider_item = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, cfg.HK_SELECOTR)) ) self.slider_btn = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, cfg.HD_BTN))) self.offset = cfg.offset self.background_path = cfg.background_path self.slider_path = cfg.slider_path 获取验证图片并计算滑块距离 def get_images(self): 获取验证码图片 :return: 图片的location信息 url = selenium_item.
简述 本文简要讲述启动调试之前如何配置debug。
点击魔术棒,进入debug选项界面,如下图: 我们可以选择软件仿真,也可以选择硬件仿真。(软件仿真不需要接开发板和仿真器) 具体配置说明如下:
左侧settings:配置特定于设备的模拟器选项,例如启动功能和 BUS 特性(仅适用于某些设备)。
右侧settings:配置目标驱动程序选项,例如跟踪选项。还可以使用调试配置文件 (dbgconf) 管理目标选项,如下图: 选择你的debug配置(你也可以编辑调试配置文件) Limit Speed to Real-Time:将 CPU 模拟的速度限制为实时。此设置仅对模拟速度快于实时的目标有用。 如果你的PC主机cpu工作频率是5GHz,而目标设备的cpu频率是48MHz,那就按照48MHz模拟运行;如果目标设备的cpu频率是10GHz,则只能按照5GHz模拟运行。
Load Application at Startup:将在Options for Target - Output - Name of Executable名称字段中指定的目标文件加载到 uVision 调试器中。
Run to main():执行指令直到到达 main() 并停止执行。禁用时,应用程序在第一条指令处停止。无论此选项如何,都会执行初始化文件中定义的命令
Initialization File:指定可以包含Debug Commands,Debug Functions,、调试器配置设置和设备初始化命令的文件。如下图: Restore Debug Session Settings:恢复在先前调试会话中为断点、观察窗口和性能分析器、内存窗口、工具箱和系统查看器定义的设置。
DLL:软件仿真和硬件仿真都需要使用动态库,动态库文件保存在keil安装目录的ARM/BIN下面。 如何设置DLL? 查看你选择的目标设备的database,如下图所示:
一、ioc( Inversion of Control )控制反转
1、原本IoC容器负责对象的创建、初始化等一系列工作,交给“别人”创建
2、spring技术实现了ioc的思想,所以原本要自己主动new的对象交给了spring进行new(创建),在spring中被创建或被管理的对象在IoC容器中统称为Bean
3、spring怎么创建呢?spring提供了一个称为spring容器或者是(ioc容器)的一个容器,用来创建对象
4、总的来说就是由主动new对象转成由ioc容器提供对象
5、IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean
二、DI ( Dependency Injection )依赖注入 1、在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入
2、充分解耦:使用ioc容器管理bean,在ioc容器内将有依赖关系的bean进行关系绑定
最终效果:使用对象时不仅可以直接从IoC容器中获取,并且获取到的bean已经绑定了所有的依赖关系 三、Ioc入门案例 1.导入spring的坐标spring-context,对应版本是5.2.10.RELEASE
2.配置bean:bean 标签标示配置bean,id属性标示给bean起名字,class属性表示给bean定义类型
3.获取Ioc容器
ApplicationContext ctx=new ClassPathXmlApplicationContext(applicationContext.xml); 4.获取bean
BookDao bookDao = (BookDao) ctx.getBean(bookDao);bookDao.save(); 四、DI入门案例 1.删除业务层的new创建dao对象
2.提供对应的set方法
配置server与dao的关系 property标签表示配置当前bean的属性name属性表示配置那个具体的当前类里面的那个属性ref属性表示参照哪一个bean 五、bean配置 1.基本配置 2.bean别名配置 在bean中使用name配置
3.bean的作用范围 通过在bean标签配置scope=prototype即可设置,默认是singleton
六、bean的实例化 1.使用构造方法(常用) 2.通过静态工厂创建 在bean中class指向静态工厂类,通过使用factory-method=getOrderDao指定使用工厂的方法new对象
3、使用实例工厂创建对象
4、使用实例工厂FactoryBean实例化bean 1.创建UserDaoFactoryBean类
2.配置
七、依赖注入 1、set注入 2、构造器注入 八、自动装配 1、按类型 配置中使用bean标签autowire属性设置自动装配的类型集合注入
目录一:Flask请求响应1.请求相关信息2.flask新手四件套3.响应相关信息(响应response增加数据返回)二:session1.session与cookie简介2.在使用session之前必须现在设置一下密钥3.dajngo中session与Flask的session差别4.session使用5.set_cookie其他参数6.整体代码三:源码分析SecureCookieSessionInterface1.f'lask框架session源码分析2.分析SecureCookieSessionInterface3.分析save_seesion响应与open_session请求来的时候4.整体代码四:闪现1.示例:五:请求扩展1 before_request2 after_request3 before_first_request4 teardown_request5 errorhandler6 template_global自定义标签7 template_filter自定义过滤器8.总结:六:中间件(了解)蓝图1.使用步骤2.不使用蓝图,自己分文件3.使用蓝图之中小型系统4.使用蓝图之大型系统七:flask 项目演示
一:Flask请求响应 # 导入模块 from flask import Flask,jsonify from flask import views from flask import Flask from flask import request from flask import render_template from flask import redirect from flask import make_response app = Flask(__name__) app.debug=True @app.route('/login.html', methods=['GET', POST]) def login(): 1.请求相关信息 request.method # 提交的方法 print(request.args.get('name')) # get请求提交的数据---GET print(request.form) # post请求提交数据----POST print(request.values) # get和post的汇总 print(request.query_string) # b'name=lqz&age=19' request.args # get请求提及的数据 request.
前言 这部分绝大多数的软件都是用yay安装
注1:pacman默认安装目录为根目录,可以修改,但没有必要,所以我在第二次重装系统的时候给根分区多划分了300G ... ---- 根分区战神
注2: Linux上软件有多种安装方式,这里只记录一些我用过的。第一部分是各种安装方式的简单介绍,第二部分是具体的软件安装。第二部分的作用大概是在系统崩了的时候快速重新安装各种应用
一. 软件安装方式 1. 包管理器 安装软件的时候建议先在系统的包管理器先搜索,包管理器总是完善的
本机上安装的是 pacman 和 基于pacman的yay
# 如果不知道软件的具体名字,比如网抑云音乐,可以在aur(软件库)中检索 yay -q netease ### 显示信息 ... 3 aur/netease-musicbox-git 0.3.1.r3.ga0a6969-3 (+18 0.00) A sexy command line interface musicbox for NetEase based on Python 2 aur/netease-cloud-music 1.2.1-7 (+91 0.01) Netease Cloud Music, converted from .deb package 1 community/feeluown-netease 0.8-1 (53.7 KiB 216.5 KiB) [feeluown-full] feeluown netease plugin # 输入 2 安装即可,不用去到官网下载,也不用自己手动安装 # 如果知道软件的具体名字,如 foxit(福昕) sudo pacman -S firefox 如果要卸载也比较方便
目录一:g对象简介1.g对象和session的区别2.g对象实战代码二:flask-session(借助于第三方插件连接redis保存session )1.方式一:2.方式二(flask使用第三方插件的通用方案):3.效果1:(访问地址浏览器生成session)4.效果2:(session存入redis)5.如何设置session的过期时间?6.设置cookie时,如何设定关闭浏览器则cookie失效三:数据库连接池1.pymsql链接数据库2.问题:3.解决:4.数据库连接池版四:信号1.内置信号2.内置信号的使用3.内置信号使用步骤:4.自定义信号5.自定制信号流程五:flask-script1.安装2.文件名称(启动的manage.py):manage.py3.自定制命令4.自定制有什么用?六:SQLAlchemy(orm框架)1.安装SQLAlchemy2.sqlalchemy执行ORM3.models模型层
一:g对象 简介 1.专门用来存储用户信息的g对象,g的全称的为global,g对象是全局的 2.g对象在一次请求中的所有的代码的地方,都是可以使用的,g对象在当次请求中一直有效 1.g对象和session的区别 1.session对象是可以跨request的,只要session还未失效,不同的request的请求会获取到同一个session, 2.但是g对象不是,g对象不需要管过期时间,请求一次就g对象就改变了一次,或者重新赋值了一次 2.g对象实战代码 from flask import Flask,g,request,session app = Flask(__name__) @app.before_request def first(): session['name']='dlrb' request.form='egon' g.name='lqz' @app.after_request def after(response): print('11111',g.name) return response @app.route('/') def hello_world(): print('00000',g.name) return 'Hello World!' if __name__ == '__main__': app.run() 二:flask-session(借助于第三方插件连接redis保存session ) 作用:将默认保存的签名cookie中的值 保存到 redis/memcached/file/Mongodb/SQLAlchemy
安装:pip3 install flask-session
1.方式一: from flask import Flask,g,request,session from flask_session import RedisSessionInterface app = Flask(__name__) app.debug=True # 开启debug,没上线为True,方便查询错误 app.
目录一:flask-sqlalchemy操作1.引入:2.Flask-Migrate扩展3.flask-sqlalchemy与slask_migrate作用4.flask-migrate初始化与迁移数据库介绍5.flask-sqlalchemy 操作迁移数据库6.导出项目依赖二:Flask-Migrate的作用负责表结构同步(一) 安装插件(二)使用1、实例化2、添加命令(三) 同步表结构1、init 初始化,只需执行一次2、migrate--将模型的变更生成迁移文件3、upgrade
一:flask-sqlalchemy操作 flask-sqlalchemy : 让flask更好的集成sqlalchemy flask_migrate :类似于django的makemigrations和migrate,因为sqlalchemy不支持表修改(删除,增加字段) 1.引入: 1.在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。 2.更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。 2.Flask-Migrate扩展 1.在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。 2.为了导出数据库迁移命令,Flask-Migrate提供了一个MigrateCommand类,可以附加到flask-script的manager对象上。 3.flask-sqlalchemy与slask_migrate作用 flask-sqlalchemy : 让flask更好的集成sqlalchemy flask_migrate :类似于django的makemigrations和migrate,因为sqlalchemy不支持表修改(删除,增加字段) 4.flask-migrate初始化与迁移数据库介绍 python3 manage.py db init 初始化:项目开始只执行一次(生成migrations文件夹) python3 manage.py db migrate 等同于 makemigartions(models模型层,增删改记录) python3 manage.py db upgrade 等同于migrate(同步记录到models模型层内) 5.flask-sqlalchemy 操作迁移数据库 # 1.先导入,实例化得到一个对象 from flask_sqlalchemy import SQLAlchemy # 2.生成db对象 db = SQLAlchemy() # 3.所有表模型都继承 db.Model # 4.在视图函数中查询那个session对象 db.session 6.导出项目依赖 # 安装:pip3 install pipreqs #导出:pipreqs .
C# winform 程序窗口不显示在任务栏及alt+tab不显示 1.winform窗口不显示在任务栏 this.ShowInTaskbar = false; 2.winform窗口alt+tab不显示 /// <summary> /// 让程序不显示在alt+Tab视图窗体中 /// </summary> protected override CreateParams CreateParams { get { const int WS_EX_APPWINDOW = 0x40000; const int WS_EX_TOOLWINDOW = 0x80; CreateParams cp = base.CreateParams; cp.ExStyle &= (~WS_EX_APPWINDOW); cp.ExStyle |= WS_EX_TOOLWINDOW; return cp; } }
1,创建线程 在java中,线程也是一个对象,执行完毕Runnable接口里的run方法,线程就结束了。 当一个进程里所有的线程都执行结束了,一个进程也就执行结束了。 线程相当于是cpu,会从入口开始执行代码。一段代码可以被多个线程同时执行,可以通过Thread.currentThread()获取执行当前代码的线程。 例子 public class test { public static void main(String[] args) throws InterruptedException { System.out.println(当前线程为:+Thread.currentThread().getName()); //非多线程执行 long start = System.currentTimeMillis(); for(int i=0; i<10; i++){ //System.out.println(+i+ +getSum(1, 1)); getSum(1, 1); } System.out.println(总耗时 + (System.currentTimeMillis()-start)); //多线程执行 start = System.currentTimeMillis(); for(int i=0; i<10; i++){ Thread thread = new Thread(()->{ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } }); thread.start(); } System.out.println(总耗时 + (System.currentTimeMillis()-start)); } static int getSum(int a, int b) throws InterruptedException { Thread.