技术文章

为什么这些UI设计很糟糕?什么是好的UI设计?

て烟熏妆下的殇ゞ 提交于 2021-02-17 10:54:14
UI(User Interface) ,即界面设计,它是网站、App给用户在感觉(视觉、触觉、听觉等)和情感上带来的第一体验,包括人机交互、界面逻辑、界面美观设计三个方面 。简单来讲,UI不仅是一种表现形式,更是用户对界面的体验和信息交互意愿。显而易见,好的UI设计不仅让软件有个性、品位,还让用户操作简单舒适,从而进一步体现软件的定位和特点。那么,到底什么才算是好的UI设计呢?在UI设计中有哪些常见的错误呢?UI设计师还有哪些应该避免的问题呢?下面小编一一为你来解答。 好的UI设计 Vs. 糟糕的UI设计 ,区别在哪? 除了众所周知的Kiss(Keep it simple and easy)产品设计原则外,好的UI设计应该也符合4个E的标准,即: - Easy to use(方便使用) - Easy to understand(简单易懂) - Error-free(零错误) - Effective for the end-goal (or product)(有助于最终目标的实现) 相反地,糟糕的UI设计给人一种复杂难懂、太过平凡甚至落后的感觉。如果是好的UI设计,会以一种直观的方式地让用户明白如何与网站进行交互,即便是首次访问某个页面或App,也能快速了解它的操作流程及原理;而坏的UI设计,不仅无法体现设计者的创意,而且会在无意中给用户传递误导的信息,从而带来不安感、糊涂感、挫折感

Saga分布式事务

孤者浪人 提交于 2021-02-17 10:50:12
前言 说到分布式事务,大部分人都会知道ACID,两阶段提交,TCC等常见模式。 在微服务大行其道的今天,基于Saga实现的分布式事务则更具普适性。 微服务事务 微服务是将服务粒度控制在上下文内的松耦合的服务架构。对于微服务架构的事务建议对于数据库提供强一致的事务,在服务上下文之间依靠最终一致性方案来解决服务之间协同的问题。 Saga saga是30年前的一篇数据库论文提到的概念。 论文中定义 saga事务是一个长事务,整个事务可以由多个本地事务组成,每个本地事务有相应的执行模块和补偿模块,当saga事务中任意一个事务出错了,可以调用相关事务进行对应的补偿恢复,达到事务的最终一致性 。 幂等 由于分布式系统中网络带来的不可靠性,saga调用服务提出了服务应该支持幂等,在服务调用超时重试情况下,不至于产生问题。 隔离性 saga事务没有准备阶段,不具备隔离性,如果多个saga事务同时操作同一资源会遇到多线程临界资源的情况,产生数据丢失或者脏数据。 为解决隔离性,可以参考TCC模式,在业务层加入session及锁机制保证操作串型化,通过业务层面达到隔离效果。 事件 saga在分布式架构下,采用事务驱动方式,让服务进行相关交互,业务方订阅相关领域事件即可。 通过事件方式降低系统复杂度,提升系统扩展性,但要注意事件循环依赖的问题。 Saga事务框架实现 组成部分: 服务发现模块

python 相对路径和绝对路径的区别

别等时光非礼了梦想. 提交于 2021-02-17 10:49:45
一, Python中获得当前目录和上级目录 获取当前文件的路径: from os import path d = path.dirname(__file__) #返回当前文件所在的目录 # __file__ 为当前文件, 若果在ide中运行此行会报错,可改为 #d = path.dirname('.') 获得某个路径的父级目录:( 强烈建议使用该方法!可以逐层获取到根目录的地址,例如D:/) parent_path = os.path.dirname(d) #获得d所在的目录,即d的父级目录 parent_path = os.path.dirname(parent_path) ##获得parent_path所在的目录即parent_path的父级目录 获得规范的绝对路径: abspath = path.abspath(d) #返回d所在目录规范的绝对路径 ​ 二,路径拼接 Python3 os.path.join()用法 功能描述:os.path.join()函数用于路径拼接文件路径。 语法:os.path.join(path1 [,path2 [,...]]) os.path.join()函数中可以传入多个路径: 1.会从第一个以“/”开头的参数开始拼接,之前的参数全部丢弃。 2.优先判定上一种情况。若无,则如果出现“./”开头的参数,会从“./”开头的参数的上一个参数开始拼接。

LSTPopView 简易的iOS万能弹框

ぐ巨炮叔叔 提交于 2021-02-17 10:49:01
LSTPopView 简易的iOS万能弹框 前言 在每个项目中,弹框的需求都有,而且各种各样,花里胡哨, 很是烦恼. LSTPopView的出现,可以让我们更专注弹框页面的布局.省心省力! 提高开发效率! 欢迎coder们发现问题或者提供更好的idea,一起努力完善 博客地址 github: https://github.com/LoSenTrad/LSTPopView CSDN: https://blog.csdn.net/u012400600/article/details/106279654 简书: https://www.jianshu.com/p/8023a85dc2a2 LSTPopView 属性接口介绍 特性 提供丰富的api,高度自定义弹框,简单入手使用 支持弹出动画,消失动画,主动动画等多重动画搭配 支持多弹框管理:编队,堆叠,优先级等 支持指定弹框父类,eg: UIWindow,self.view等 安全且内存占用小 自动规避键盘,防止被键盘遮挡 支持横竖屏切换 支持纯代码/xib页面 提供生命周期api,自定义动画控制 支持定时器,多定时器机制 支持多代理机制 支持二次封装,比如组件LSTHUD,LSTAlertView等 安装 CocoaPods安装: 在podfile文件中添加以下描述,然后 pod install 或者 pod update pod

electron热更新与windows下的安装包

前提是你 提交于 2021-02-17 10:46:29
帮朋友公司做了点东西,他说有很多bug,我一看,基本问题都是浏览器兼容引起的,而electron内带Chromium内核,正好一直想尝试下electron,所以研究了一波。这里只是简单的使用electron作为壳,把自己的项目嵌进去,更多深入研究以后再来。 打包自己的项目 这里没啥说的自己的项目打包下来,类似下面 快速开始electron 上手electron,官方提供了一个非常好的快速上手实例"electron-quick-start"。 git clone https://github.com/electron/electron-quick-start cd electron-quick-start npm install 把自己的项目拷进去 npm run start就启动起来了 npm run packager就打包出来了 热更新 因为Chromium的缘故,即使很小的项目打包出来也有120M左右,如果给客户使用,不可能每次有点改动就让客户重新安装,显然我们需要热更新。 热更新的原理:每次启动程序我们就去拿本地的版本号和服务器上的版本号做对比,如果不一致就去请求资源,下载下来更新本地文件。 首先我们观察打包出来的文件,发现原始文件都放在resources/app下面的,也即是说我们下载下来的文件直接覆盖到resources/app下就可以达到更新了。 这里我推荐七牛云

vue 双向绑定

Deadly 提交于 2021-02-17 10:28:45
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue双向绑定原理分析</title> </head> <style> body{ margin: 0; padding: 0; } </style> <body> <div id="app"> {{name}} </div> </body> <script> //vue类 class Vue { constructor(options={}) { this.data = options.data this.el = options.el // 数据劫持 observe(this.data) // 模版编译 compile(this.el || document.body,this) } } class Ovserver { constructor(data) { this.data = data this.walk(this.data) } walk(data) { Object.keys(data).forEach(key=>objectDefinedDate(data,key,data[key])) } } observe=(data)=>{ if (!data || typeof data !=='object') { return }

Hive on MR调优

≯℡__Kan透↙ 提交于 2021-02-17 10:24:05
当HiveQL跑不出来时,基本上是数据倾斜了,比如出现count(distinct),groupby,join等情况,理解 MR 底层原理,同时结合实际的业务,数据的类型,分布,质量状况等来实际的考虑如何进行系统性的优化。 Hive on MR 调优主要从三个层面进行,分别是基于MapReduce优化、Hive架构层优化和HiveQL层优化。 MapReduce调优   如果能够根据情况对shuffle过程进行调优,对于提供MapReduce性能很有帮助。一个通用的原则是给shuffle过程分配尽可能大的内存,当然你需要确保map和reduce有足够的内存来运行业务逻辑。因此在实现Mapper和Reducer时,应该尽量减少内存的使用,例如避免在Map中不断地叠加。 运行map和reduce任务的JVM,内存通过mapred.child.java.opts属性来设置,尽可能设大内存。容器的内存大小通过mapreduce.map.memory.mb和mapreduce.reduce.memory.mb来设置,默认都是1024M。 1 map调优   在map阶段主要包括:数据的读取、map处理以及写出操作(排序和合并/sort&merge),其中可以针对spill文件输出数量、Combiner的merge过程和数据压缩进行优化,避免写入多个spill文件可能达到最好的性能

Unity3d dotween

无人久伴 提交于 2021-02-17 10:21:38
位置 1. 移动到指定位置 obj.transform.DOMove( new Vector3( 0 , 3 , 0 ), 2f); a. 单方向可以用DOMoveX、DOMoveY、DOMoveZ b. 本地坐标系版本:DOLocalMove (Scale、Rotate有类似方法) 2. 相对移动 // X轴方向向前移动100(如果.SetRelative(true)拿掉则表示移动到x坐标为100的位置) obj.transform.DOLocalMoveX( 100 , 1f).SetRelative( true ); obj.transform.DOLocalMove( new Vector3( 100 , 100 ), 2f).SetRelative( true ) //还可以使用方法 DOBlendableLocalMoveBy DOBlendableMoveBy (Scale、Rotate有类似方法) 透明度 obj.DOFade( 0 , 1f) // 注意不是transform 颜色 obj.DOColor(Color.gray, 1f) 缓动动画 // 缓动动画 效果demo: http://robertpenner.com/easing/easing_demo.html obj.transform.DOLocalMove( new Vector3( 100 ,

AD 域服务简介(一)- 基于 LDAP 的 AD 域服务器搭建及其使用(转)

大兔子大兔子 提交于 2021-02-17 10:18:37
一、前言 1.1 AD 域服务 什么是目录(directory)呢? 日常生活中使用的电话薄内记录着亲朋好友的姓名、电话与地址等数据,它就是 telephone directory(电话目录);计算机中的文件系统(file system)内记录着文件的文件名、大小与日期等数据,它就是 file directory(文件目录)。 如果这些目录内的数据能够由系统加以整理,用户就能够容易且迅速地查找到所需的数据,而 directory service(目录服务)提供的服务,就是要达到此目的。在现实生活中,查号台也是一种目录;在 Internet 上,百度和谷歌提供的搜索功能也是一种目录服务。 Active Directory 域内的 directory database(目录数据库)被用来存储用户账户、计算机账户、打印机和共享文件夹等对象,而提供目录服务的组件就是 Active Directory (活动目录)域服务(Active Directory Domain Service,AD DS),它负责目录数据库的存储、添加、删除、修改与查询等操作。一般适用于一个局域网内。 在 AD 域服务(AD DS)内,AD 就是一个命名空间(Namespace)。利用 AD,我们可以通过对象名称来找到与这个对象有关的所有信息。 在 TCP/IP 网络环境内利用 Domain Name System

GUI设计和UI设计有什么区别?

ε祈祈猫儿з 提交于 2021-02-17 10:15:56
首先从技术的角度分析两者处于包含与被包含的关系。 GUI=Graphical User Interface ,是指在计算机出现后,在屏幕上使用图形界面来帮助(User)与机器打交道用的界面接口,泛指在计算机上所做的界面设计。 图形用户界面 (Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。然而这界面若要通过在显示屏的特定位置,以”各种美观而不单调的视觉消息“提示用户”状态的改变“,势必得比简单的消息呈现花上更多的计算能力。 图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。 随着中国 IT 产业,移动通讯产业,家电产业的迅猛发展,在产品的人机交互界面设计水平发展上日显滞后,这对于提高产业综合素质,提升与国际同等业者的竞争能力等等方面无疑起了制约的作用