- 龙之信条2 DEBUG版 报错修复方法
与凌风000
教程
DEBUG版报错修复补丁启用说明解压后将“Game”里的文件覆盖并替换到游戏根目录,运行“runtime_il2cpp.exe”开始游戏。不用补丁报错解决方案2先将DD2.EXE备份,防止出错,将runtime_il2cpp.exe文件复制出一个副本,改名DD2.exe,替换掉文件里原本的dd2.exe,用改名的dd2.exe启动游戏如果还是闪退报错请参考:1.更新显卡驱动2.强制使用window
- C# 索引器(Indexer)
C#索引器(Indexer)引言在C#编程语言中,索引器(Indexer)是一种特殊类型的属性,它允许我们通过索引来访问和设置对象的成员。索引器是动态数组和集合的基石,同时也可以用于创建自定义的数据结构,如字典等。本文将深入探讨C#索引器的概念、实现方式以及在实际开发中的应用。索引器的基本概念索引器是一种属性,它允许通过索引来访问和设置对象的成员。与普通的属性相比,索引器可以接受一个或多个参数,从
- 【Python从零到壹】Python中的标识符和保留字
互联网老辛
#Python从零到壹Python
保留字,也叫关键字,这些关键字是python直接提供给我们使用的,因此,我们在定义标识符的时候,不能用这些保留字。比如教育局就属于官方用的,你开个公司起名就不能叫教育局怎么查看关键字?importkeywordprint(keyword.kwlist)输出结果:E:\Python_demo\vippython\venv\Scripts\python.exeE:/Python_demo/vippyt
- python selenium 滚动页面到定位元素
我有一个希哥
pythonselenium前端
用js语句target=driver.find_element_by_id("id")driver.execute_script("arguments[0].scrollIntoView();",target)或target=WebDriverWait(driver,3).until(expected_conditions.presence_of_element_located((By.ID,"i
- Zellij 详细教程:一个比 tmux 更友好、强大的终端复用工具
vortex5
工具命令zellijtmuxlinux
在终端环境中,终端复用器(TerminalMultiplexer)是一种不可或缺的工具。它能够将单一的终端会话分割为多个独立的工作区域,不仅实现“一心多用”,还便于会话管理,确保任务不会因误关闭终端窗口或SSH连接中断而丢失。这种特性对于开发者、系统管理员以及命令行爱好者来说尤为重要。提到终端复用器,许多人首先想到的是经典的tmux,其名称正是“terminalmultiplexer”的缩写。凭借
- 【教程】使用Visual Studio debug exe和dll
yunquantong
visualstudioide
如何Debugexe和dll在实际项目中,我们经常需要对可执行文件(exe)和动态链接库(dll)进行调试。本文详细总结如何通过远程和本地调试exe,以及如何调试dll,包括常规与资源路径调试。一、Debugexe1.远程调试exe(使用VSRemoteTools)适用场景:程序必须在服务器上运行。步骤:在目标服务器上部署对应版本的VisualStudioRemoteDebugger(如msvsm
- Cline中配置MCP
Alexon Xu
MCP
1、自动安装MCP默认AI生成的配置会报错:spawnnpxENOENTspawnnpxENOENT,然后排查了npx安装都是OK的,需要使用cmd运行npx,配置如下:{"mcpServers":{"sequentialthinking":{"autoApprove":[],"disabled":false,"timeout":60,"command":"cmd.exe","args":["/c
- 游戏研发高效利器:SVN资源动态项目管理解决方案
还债大湿兄
游戏项目管理
一、问题背景与解决方案传统资源分发痛点:人工打包耗时:平均每次版本发布需2小时版本隔离:不同团队无法同时使用多个版本资源冲突:美术/QA/策划资源版本不一致动态管理方案优势:二、系统核心流程//完整工作流控制器voidGameResourceManager::executeFullWorkflow(){//1.凭证验证if(!validateCredentials()){showError("认证
- 无线USB转换器TOS-WLink的无线USB助手配置文件详细胡扯
开源的6lowpan
linux运维无线USB转换器无线调试器无线串口无线JLink
1,TOS无线USB助手配置文件tos.ini[Config]mode=autodev=BluetoothLE#BluetoothLE0c:9a:3c:69:e6:f4-b4:c2:e0:b1:2f:b4pd=jybdwjgxrgIP=192.168.1.29HB=10拿到货的或者在网盘公共区间看过TOS无线USB助手的,它目录下面是三个exe文件;和一个tos.ini配置文件;mode字段---
- flowable 修改历史变量
小云小白
springbootflowable修改历史变量springboot
简洁场景:对已结束流程的变量进行改动方法包含2个类1)核心方法,flowablecommand类:HistoricVariablesUpdateCmd2)执行command类:BpmProcessCommandService然后springboot执行方法即可:bpmProcessCommandService.executeUpdateHistoricVariables(processInstan
- Process.Start 方法的五个重载
小柚子~
C#c#
一、system.Diagnostics.Product.start方法主要用来启动一个进程资源,例如:打开一个exe,根据路径打开一个文件夹,打开一个txt,我工作项目中主要是用来打开exe。二、start重载微软提供了5个方法重载Process.Start方法(System.Diagnostics)|MicrosoftDocs:1、Start(stringfilename,stringargu
- 量子机器学习前沿:量子神经网络与混合量子-经典算法
软考和人工智能学堂
人工智能#深度学习Python开发经验量子计算
1.量子计算基础1.1量子比特与量子门importnumpyasnpfromqiskitimportQuantumCircuit,Aer,executefromqiskit.visualizationimportplot_histogram#单量子比特操作演示defsingle_qubit_demo():qc=QuantumCircuit(1)qc.h(0)#Hadamard门创建叠加态qc.rz
- Pytorch模型安卓部署
python&java
pytorch人工智能python
Pytorch是一种流行的深度学习框架,用于算法开发,而Android是一种广泛应用的操作系统,多应用于移动设备当中。目前多数的研究都是在于算法上,个人觉得把算法落地是一件很有意思的事情,因此本人准备分享一些模型落地的文章(后续可能分享微信小程序部署,PyQt部署以及exe打包,ncnn部署,tensorRT部署,MNN部署)。本篇文章主要分享Pytorch的Android端部署。看这篇文章的读者
- RabbitMQ demo案例
M-bao
rabbitmq分布式
1.下载和安装RabbitMQRabbitMQ依赖Erlang运行时,所以得先装Erlang,再装RabbitMQ。下面以Ubuntu为例,Windows和macOS也顺便提一下。1.1安装ErlangRabbitMQ需要Erlang支持,先装它。Windows:去Erlang官网下载最新版(比如OTP26.x的.exe)。双击安装,记得用管理员权限,全程点“下一步”就行。macOS:用Homeb
- python的执行顺序
蓦然回首却已人去楼空
FluentPythonpython开发语言
Python的执行顺序是“自上而下、逐行执行”,但要结合具体语句的类型(如定义、表达式、导入、类定义等)来理解。简单例子讲解test5.pyprint("test5module:startexecuting")x=10deffunc():print("test5module:funccalled")classMyModClass:print("test5module:MyModClassbodye
- 使用YOLOv5-ONNX-PyQT-EXE: 全栈式对象检测应用的构建与部署
使用YOLOv5-ONNX-PyQT-EXE:全栈式对象检测应用的构建与部署去发现同类优质开源项目:https://gitcode.com/在计算机视觉领域,实时对象检测是一个至关重要的任务。是一个开源项目,它将流行的YOLOv5对象检测模型集成到ONNX(OpenNeuralNetworkExchange)中,并通过PyQT构建了一个可执行的应用程序,使得非开发人员也能轻松地进行对象检测。项目简
- Git安装避坑指南大纲
小王酷酷酷
git
Git安装避坑指南大纲安装前的准备工作检查操作系统版本(Windows/macOS/Linux)是否兼容目标Git版本。确认网络环境稳定,避免下载中断。关闭杀毒软件或防火墙,防止安装过程中误拦截关键文件。下载官方安装包优先从Git官网(git-scm.com)下载,避免第三方来源的篡改风险。选择与操作系统匹配的安装包(如Windows的.exe或macOS的.dmg)。核对安装包的哈希值或签名,确
- ThreadPoolExecutor的submit正确的使用方式
项目场景:线程池的地方用的还是挺多的,一般来说用的多的还是execute方法,submit方法还是用的挺少的,一般ThreadPoolExecutor的submit方法通常用于将一个任务提交到线程池中执行。这个方法会返回一个Future对象,可以用来检查任务的执行状态,获取任务的返回值或者取消任务的执行。使用submit方法可以将任务提交到线程池中,由线程池中的线程来执行任务,从而避免了为每个任务
- [特殊字符] 我在CSDN下载专区上传了《外星人大战》游戏资源!
程序鸠
pythonpygame游戏
我在CSDN下载专区上传了《外星人大战》游戏资源!大家好!想跟大家分享一下,我在CSDN下载专区上传了几个《外星人大战》相关的游戏资源,都是我自己整理或发布的,感兴趣的朋友可以来看看:上传的资源有:外星人大战-64位版exebate版发布时间:2025.05.02类型:.exe(可执行游戏文件)说明:游戏的测试版本。外星人大战-64位版1.00.01exe发布时间:2025.05.02类型:.ex
- wsl2配置
daoboker
windows
1.启用WSL2相关功能通过PowerShell启用(管理员权限):#启用“适用于Linux的Windows子系统”dism.exe/online/enable-feature/featurename:Microsoft-Windows-Subsystem-Linux/all/norestart#启用“虚拟机平台”dism.exe/online/enable-feature/featurename
- 设计模式-策略模式
设计模式-策略模式前言策略模式前言由于作者做的C++开发比较多所以本文实例都以C++语言方式给出。策略模式//具体策略AclassConcreteStrategyA:publicStrategy{public:voidexecute()constoverride{std::coutstrategy;public:explicitContext(std::unique_ptrs):strategy(
- 2021-01-12
牛奶能压惊Becky
量化经验分享
Wind量化因子回测学习记录将anaconda和wind联动起来,快捷的做法:先在wind终端里面点点点,量化——修复插件——修复Python插件,就不放图了,最终小窗口都是绿色小对勾就好啦。再继续点点点,量化——API接口——Python接口,就出来了WindPy的安装教程。需要找到1.anaconda安装目录下的python.exe2.Wind安装的位置,在电脑自己的cmd里输入如下三个路径即
- IDE如何快速切换JLINK版本
空气中的告白
菜鸟需知ide
JLINK是比较常用的调试器,因为产品维护,我们的电脑上可是装了好几个版本的JLINK,怎么进行快速的切换呢?方法如下:1、使用Everything工具搜索JLinkDLLUpdater.exe,找到当前需要使用的JLINK版本安装目录下的JLinkDLLUpdater.exe。2、双击JLinkDLLUpdater.exe,在弹出的窗口勾上将要使用的IDE,点击OK就搞定了。
- visual studio调试时提示找不到.dll库
qq_16740151
windows开发工具visualstudio开发工具visualstudio
调试解决办法"项目"=》"属性"=》"配置属性"=》"调试"=》"环境"一栏,添加如下内容PATH=[dlldirectory][dlldirectory]指实际dll库目录,多个目录PATH后用”;“号隔开。单独运行exe解决办法上述方法在visualstudio中调试时没问题,单独执行生成的exe会报错方式1:将dll所在库目录加到系统环境的PATH里.该方法在其他运行该程序的机器也需要设置。
- vue2.0+electron生成.exe文件
Fairyasd
electronjavascript
vue2.0+electron生成.exe文件1.安装插件cnpminstallelectron--save-devcnpminstallelectron-packager--save-dev2.在package.json中增加指令如图:"name":"ticketing_client","version":"1.0.0","description":"AVue.jsproject","priva
- SAPGUI 里运行的 ABAP 报表,能够执行本地操作系统应用程序的技术原理
汪子熙
ABAP百科全书sapabapNetWeaver思爱普
笔者之前的文章使用ABAP弹出Windows操作系统的通知消息,介绍了运行在SAPGUI里的ABAP程序,如何触发Windows操作系统的消息提醒服务:实现方法就是使用cl_gui_frontend_services=>execute启动本地编写好的Node.js应用。在国内的SAP项目实施中,很多顾问朋友也喜欢使用cl_gui_frontend_services=>execute来启动本地操作系
- [报错] VSCODE无法识别相对路径
这么神奇
报错解决方案vscode
报错背景:在使用VSCODE进行代码运行时,明明是正确的相对路径,文件却无法被打开;报错为:无法找到对应文件;解决方法:打开VSCODE-->setting-->execute-->勾选ExecuteinfileDir选项;如下图所示:设置完毕后再执行对应语句:df=pd.read_csv(r'./Game_Data.csv',encoding='gbk')执行结果:问题解决!
- RuntimeError: Unsupported image type, must be 8bit gray or RGB image.
Roc-xb
Pythonpythoncv2opencv
(face)E:\code\运行代码>C:/Users/29847/Anaconda3/envs/face/python.exee:/code/运行代码/face.pyTraceback(mostrecentcalllast):File“e:\code\运行代码\face.py”,line76,insuccess=registrator.register_face(“Mark_Zuckerberg
- Docker指令
小李小李晴空万里
docker容器运维
查看容器实例dockerps执行容器的命令窗口dockerexec-it容器名称或容器ID/bin/bash如何把docker里面的文件复制出来dockercp:/path/to/file/path/on/host例如,如果你想从名为my_container的容器中复制/app/data.txt文件到主机的/tmp目录,可以使用以下命令:dockercpmy_container:/app/data
- 面试-线程池
win-coding
面试面试
线程池核心参数详解与设置策略1.1、核心参数深度解析1.核心线程数(corePoolSize)本质作用资源基线:维持线程池的基本处理能力,避免频繁创建/销毁线程的开销。稳定性保障:即使无任务,核心线程保持存活,应对突发流量时快速响应。动态调整Java允许通过executor.setCorePoolSize(int)动态调整,但需谨慎操作://动态扩容核心线程数(如大促期间)e
- 对于规范和实现,你会混淆吗?
yangshangchuan
HotSpot
昨晚和朋友聊天,喝了点咖啡,由于我经常喝茶,很长时间没喝咖啡了,所以失眠了,于是起床读JVM规范,读完后在朋友圈发了一条信息:
JVM Run-Time Data Areas:The Java Virtual Machine defines various run-time data areas that are used during execution of a program. So
- android 网络
百合不是茶
网络
android的网络编程和java的一样没什么好分析的都是一些死的照着写就可以了,所以记录下来 方便查找 , 服务器使用的是TomCat
服务器代码; servlet的使用需要在xml中注册
package servlet;
import java.io.IOException;
import java.util.Arr
- [读书笔记]读法拉第传
comsci
读书笔记
1831年的时候,一年可以赚到1000英镑的人..应该很少的...
要成为一个科学家,没有足够的资金支持,很多实验都无法完成
但是当钱赚够了以后....就不能够一直在商业和市场中徘徊......
- 随机数的产生
沐刃青蛟
随机数
c++中阐述随机数的方法有两种:
一是产生假随机数(不管操作多少次,所产生的数都不会改变)
这类随机数是使用了默认的种子值产生的,所以每次都是一样的。
//默认种子
for (int i = 0; i < 5; i++)
{
cout<<
- PHP检测函数所在的文件名
IT独行者
PHP函数
很简单的功能,用到PHP中的反射机制,具体使用的是ReflectionFunction类,可以获取指定函数所在PHP脚本中的具体位置。 创建引用脚本。
代码:
[php]
view plain
copy
// Filename: functions.php
<?php&nbs
- 银行各系统功能简介
文强chu
金融
银行各系统功能简介 业务系统 核心业务系统 业务功能包括:总账管理、卡系统管理、客户信息管理、额度控管、存款、贷款、资金业务、国际结算、支付结算、对外接口等 清分清算系统 以清算日期为准,将账务类交易、非账务类交易的手续费、代理费、网络服务费等相关费用,按费用类型计算应收、应付金额,经过清算人员确认后上送核心系统完成结算的过程 国际结算系
- Python学习1(pip django 安装以及第一个project)
小桔子
pythondjangopip
最近开始学习python,要安装个pip的工具。听说这个工具很强大,安装了它,在安装第三方工具的话so easy!然后也下载了,按照别人给的教程开始安装,奶奶的怎么也安装不上!
第一步:官方下载pip-1.5.6.tar.gz, https://pypi.python.org/pypi/pip easy!
第二部:解压这个压缩文件,会看到一个setup.p
- php 数组
aichenglong
PHP排序数组循环多维数组
1 php中的创建数组
$product = array('tires','oil','spark');//array()实际上是语言结构而不 是函数
2 如果需要创建一个升序的排列的数字保存在一个数组中,可以使用range()函数来自动创建数组
$numbers=range(1,10)//1 2 3 4 5 6 7 8 9 10
$numbers=range(1,10,
- 安装python2.7
AILIKES
python
安装python2.7
1、下载可从 http://www.python.org/进行下载#wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz
2、复制解压
#mkdir -p /opt/usr/python
#cp /opt/soft/Python-2
- java异常的处理探讨
百合不是茶
JAVA异常
//java异常
/*
1,了解java 中的异常处理机制,有三种操作
a,声明异常
b,抛出异常
c,捕获异常
2,学会使用try-catch-finally来处理异常
3,学会如何声明异常和抛出异常
4,学会创建自己的异常
*/
//2,学会使用try-catch-finally来处理异常
- getElementsByName实例
bijian1013
element
实例1:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/x
- 探索JUnit4扩展:Runner
bijian1013
java单元测试JUnit
参加敏捷培训时,教练提到Junit4的Runner和Rule,于是特上网查一下,发现很多都讲的太理论,或者是举的例子实在是太牵强。多搜索了几下,搜索到两篇我觉得写的非常好的文章。
文章地址:http://www.blogjava.net/jiangshachina/archive/20
- [MongoDB学习笔记二]MongoDB副本集
bit1129
mongodb
1. 副本集的特性
1)一台主服务器(Primary),多台从服务器(Secondary)
2)Primary挂了之后,从服务器自动完成从它们之中选举一台服务器作为主服务器,继续工作,这就解决了单点故障,因此,在这种情况下,MongoDB集群能够继续工作
3)挂了的主服务器恢复到集群中只能以Secondary服务器的角色加入进来
2
- 【Spark八十一】Hive in the spark assembly
bit1129
assembly
Spark SQL supports most commonly used features of HiveQL. However, different HiveQL statements are executed in different manners:
1. DDL statements (e.g. CREATE TABLE, DROP TABLE, etc.)
- Nginx问题定位之监控进程异常退出
ronin47
nginx在运行过程中是否稳定,是否有异常退出过?这里总结几项平时会用到的小技巧。
1. 在error.log中查看是否有signal项,如果有,看看signal是多少。
比如,这是一个异常退出的情况:
$grep signal error.log
2012/12/24 16:39:56 [alert] 13661#0: worker process 13666 exited on s
- No grammar constraints (DTD or XML schema).....两种解决方法
byalias
xml
方法一:常用方法 关闭XML验证
工具栏:windows => preferences => xml => xml files => validation => Indicate when no grammar is specified:选择Ignore即可。
方法二:(个人推荐)
添加 内容如下
<?xml version=
- Netty源码学习-DefaultChannelPipeline
bylijinnan
netty
package com.ljn.channel;
/**
* ChannelPipeline采用的是Intercepting Filter 模式
* 但由于用到两个双向链表和内部类,这个模式看起来不是那么明显,需要仔细查看调用过程才发现
*
* 下面对ChannelPipeline作一个模拟,只模拟关键代码:
*/
public class Pipeline {
- MYSQL数据库常用备份及恢复语句
chicony
mysql
备份MySQL数据库的命令,可以加选不同的参数选项来实现不同格式的要求。
mysqldump -h主机 -u用户名 -p密码 数据库名 > 文件
备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
mysqldump -–add-drop-table -uusername -ppassword databasename > ba
- 小白谈谈云计算--基于Google三大论文
CrazyMizzz
Google云计算GFS
之前在没有接触到云计算之前,只是对云计算有一点点模糊的概念,觉得这是一个很高大上的东西,似乎离我们大一的还很远。后来有机会上了一节云计算的普及课程吧,并且在之前的一周里拜读了谷歌三大论文。不敢说理解,至少囫囵吞枣啃下了一大堆看不明白的理论。现在就简单聊聊我对于云计算的了解。
我先说说GFS
&n
- hadoop 平衡空间设置方法
daizj
hadoopbalancer
在hdfs-site.xml中增加设置balance的带宽,默认只有1M:
<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>10485760</value>
<description&g
- Eclipse程序员要掌握的常用快捷键
dcj3sjt126com
编程
判断一个人的编程水平,就看他用键盘多,还是鼠标多。用键盘一是为了输入代码(当然了,也包括注释),再有就是熟练使用快捷键。 曾有人在豆瓣评
《卓有成效的程序员》:“人有多大懒,才有多大闲”。之前我整理了一个
程序员图书列表,目的也就是通过读书,让程序员变懒。 程序员作为特殊的群体,有的人可以这么懒,懒到事情都交给机器去做,而有的人又可以那么勤奋,每天都孜孜不倦得
- Android学习之路
dcj3sjt126com
Android学习
转自:http://blog.csdn.net/ryantang03/article/details/6901459
以前有J2EE基础,接触JAVA也有两三年的时间了,上手Android并不困难,思维上稍微转变一下就可以很快适应。以前做的都是WEB项目,现今体验移动终端项目,让我越来越觉得移动互联网应用是未来的主宰。
下面说说我学习Android的感受,我学Android首先是看MARS的视
- java 遍历Map的四种方法
eksliang
javaHashMapjava 遍历Map的四种方法
转载请出自出处:
http://eksliang.iteye.com/blog/2059996
package com.ickes;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
/**
* 遍历Map的四种方式
- 【精典】数据库相关相关
gengzg
数据库
package C3P0;
import java.sql.Connection;
import java.sql.SQLException;
import java.beans.PropertyVetoException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class DBPool{
- 自动补全
huyana_town
自动补全
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml&quo
- jquery在线预览PDF文件,打开PDF文件
天梯梦
jquery
最主要的是使用到了一个jquery的插件jquery.media.js,使用这个插件就很容易实现了。
核心代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.
- ViewPager刷新单个页面的方法
lovelease
androidviewpagertag刷新
使用ViewPager做滑动切换图片的效果时,如果图片是从网络下载的,那么再子线程中下载完图片时我们会使用handler通知UI线程,然后UI线程就可以调用mViewPager.getAdapter().notifyDataSetChanged()进行页面的刷新,但是viewpager不同于listview,你会发现单纯的调用notifyDataSetChanged()并不能刷新页面
- 利用按位取反(~)从复合枚举值里清除枚举值
草料场
enum
以 C# 中的 System.Drawing.FontStyle 为例。
如果需要同时有多种效果,
如:“粗体”和“下划线”的效果,可以用按位或(|)
FontStyle style = FontStyle.Bold | FontStyle.Underline;
如果需要去除 style 里的某一种效果,
- Linux系统新手学习的11点建议
刘星宇
编程工作linux脚本
随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起。这里介绍学习Linux的一些建议。
一、从基础开始:常常有些朋友在Linux论坛问一些问题,不过,其中大多数的问题都是很基础的。例如:为什么我使用一个命令的时候,系统告诉我找不到该目录,我要如何限制使用者的权限等问题,这些问题其实都不是很难的,只要了解了 Linu
- hibernate dao层应用之HibernateDaoSupport二次封装
wangzhezichuan
DAOHibernate
/**
* <p>方法描述:sql语句查询 返回List<Class> </p>
* <p>方法备注: Class 只能是自定义类 </p>
* @param calzz
* @param sql
* @return
* <p>创建人:王川</p>
* <p>创建时间:Jul