清空库数据sql
Unity3D合并着色器
移动端手势事件 hammer.JS插件
Linux下软件的卸载
安装phpstudy之后发现80端口被占用
Android工程内嵌Flutter
WPF–3Dmax+blend+WPF综合运用
WPF–3Dmax+blend+WPF综合运用

引自:http://blog.sina.com.cn/s/blog_95dbdf9e0100we3z.html 本人小菜,WPF刚入门,只是写一下最近的项目心得。欢迎各位前辈们前来拍砖指正,感激不敬!先申明,小弟我入门仓促,很多东西也是一知半解,所以很多问题甚至是不求甚解,所以大神们就直接绕路算了。 总结一:3D max+blend+WPF综合运用 开发环境: Autodesk 3ds Max Design 2012 Micosoft Expression Blend 4 , Microsoft Visual Studio 2010 小弟之前参加一个项目,得用到WPF3D编程,但是WPF的3D只有最基本的3D场景元素,比如摄像机,光照等。如果想要在WPF中画一个正方体或者球 体,都得自己一步一步的把每个网格点的坐标算好,三角网格的顶点顺序添加好,设置法向量,贴图的话也得自己指定好对应的顶点坐标。画个简单的模型都如此麻 烦了,稍微复杂点的模型,只能依赖第三方建模软件来构建模型,然后把模型转换成松散的XAML文件,才能导入到WPF中去,或者把模型的相应XAML代码 直接嵌入到程序中去。 工欲善其事必先利其器,下面是我找到的相关工具和相关示例,有些我自己也没用过: 1.  3D Max Studio有导出XAML的插件:http://max2xaml.codeplex.com/ 2. 还有开源的Blender: http://www.blender.org/ 以及相应的导出XAML的插件: http://xamlexporter.codeplex.com/ 3. 还有Viewer3ds-3ds to xaml converter: http://www.wpf-graphics.com/Viewer3ds.aspx 4. WPF(c#)有专门的3D建模工具,使用起来和3DMax差不多,制作完成后可直接导出XAML语言方便快捷:ZAM 3D : http://www.erain.com/products/zam3d/DefaultPDC.asp 示例: 1.WPF加载obj格式的3D模型:http://www.pin5i.com/showtopic-26486.html 2.3ds Max建模,Blend设计,VS2008控制WPF的3D模型例 http://www.cnblogs.com/foundation/archive/2008/05/23/1205892.html http://www.cnblogs.com/couhujia/archive/2010/07/28/1787103.html http://zhouwenqi.com/blog/board_33.html 现在网上可以下载到很多绚丽逼真的3D模型,模型有很多格式,我们这次之所以选择了.Max格式,因为网上很多模型(尤其是游戏角色原型)都是.max格式,其他的格式大多都可以在3Dmax中打开,然后再保存为.max格式。 小弟的3Dmax门都没入,项目做到一半恨不得马上找一个传设的女友帮我建模做美工,无奈之下,去图书馆速度借了2本3Dmax的书,需要的时候啃两下,因此只掌握了最基本的模型导入,导出和修改合成的功能。 下面以一个游戏角色原型(诛仙中的某个武士)为例,这个原型是在网上下载的,具体网址是我忘记了。在3Dmax中打开这个模型后,可以随心所欲的修改,肢解,或合体。 提醒:打开模型时如何文件单位比例和系统单位比例不匹配时,就会弹出以下的对话框让你选 […]

KOA2框架原理解析和实现
KOA2框架原理解析和实现

koa是一个基于node实现的一个新的web框架,从头实现一个koa框架,它是由express框架的原班人马打造的。它的特点是优雅、简洁、表达力强、自由度高。它更express相比,它是一个更轻量的node框架,因为它所有功能都通过插件实现,这种插拔式的架构设计模式,很符合unix哲学。 koa框架现在更新到了2.x版本,本文从零开始,循序渐进,讲解koa2的框架源码结构和实现原理,展示和详解koa2框架源码中的几个最重要的概念,然后手把手教大家亲自实现一个简易的koa2框架,帮助大家学习和更深层次的理解koa2,看完本文以后,再去对照koa2的源码进行查看,相信你的思路将会非常的顺畅。 本文所用的框架是koa2,它跟koa1不同,koa1使用的是generator+co.js的执行方式,而koa2中使用了async/await,因此本文的代码和demo需要运行在node 8版本及其以上,如果读者的node版本较低,建议升级或者安装babel-cli,用其中的babel-node来运行本文涉及到的代码。 koa源码结构 上图是koa2的源码目录结构的lib文件夹,lib文件夹下放着四个koa2的核心文件:application.js、context.js、request.js、response.js。 application.js application.js是koa的入口文件,它向外导出了创建class实例的构造函数,它继承了events,这样就会赋予框架事件监听和事件触发的能力。application还暴露了一些常用的api,比如toJSON、listen、use等等。 listen的实现原理其实就是对http.createServer进行了一个封装,重点是这个函数中传入的callback,它里面包含了中间件的合并,上下文的处理,对res的特殊处理。 use是收集中间件,将多个中间件放入一个缓存队列中,然后通过koa-compose这个插件进行递归组合调用这一些列的中间件。 context.js 这部分就是koa的应用上下文ctx,其实就一个简单的对象暴露,里面的重点在delegate,这个就是代理,这个就是为了开发者方便而设计的,比如我们要访问ctx.repsponse.status但是我们通过delegate,可以直接访问ctx.status访问到它。 request.js、response.js 这两部分就是对原生的res、req的一些操作了,大量使用es6的get和set的一些语法,去取headers或者设置headers、还有设置body等等,这些就不详细介绍了,有兴趣的读者可以自行看源码。 实现koa2的四大模块 上文简述了koa2源码的大体框架结构,接下来我们来实现一个koa2的框架,笔者认为理解和实现一个koa框架需要实现四个大模块,分别是: 封装node http server、创建Koa类构造函数 构造request、response、context对象 中间件机制和剥洋葱模型的实现 错误捕获和错误处理 下面我们就逐一分析和实现。 模块一:封装node http server和创建Koa类构造函数 阅读koa2的源码得知,实现koa的服务器应用和端口监听,其实就是基于node的原生代码进行了封装,如下图的代码就是通过node原生代码实现的服务器监听。 let http = require('http');let server = http.createServer((req, res) => { res.writeHead(200); res.end('hello world');});server.listen(3000, () => { console.log('listenning on 3000');}); 我们需要将上面的node原生代码封装实现成koa的模式: const http = require('http');const Koa = require('koa');const app […]

002-Spring Boot将WAR文件部署到Tomcat
002-Spring Boot将WAR文件部署到Tomcat

一、概述   springboot 带有内置Tomcat 服务器,可以直接将项目打包成jar运行,如果在需要把项目打成war包,使用外置tomcat部署。下面是将springboot项目部署为war项目的一些步骤。 二、Springboot程序打成war包 1、在pom.xml中将打包形式 jar 修改为war <packaging>war</packaging> 2、将springboot内置的Tomcat依赖移除,但是为了我们在本机测试方便,我们还需要引入它,所以配置如下: 原生Tomcat依赖移除 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> 如果是thymeleaf 模板引擎依赖移除 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> 3、如果jsp,servlet等需求,需添加tomcat-servelt-api依赖 <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-servlet-api</artifactId> <version>7.0.42</version> <scope>provided</scope> </dependency> 4、修改入口方法 继承一个SpringBootServletInitializer类,并且覆盖configure方法 public class ServletInitializer […]

pxe+kickstart 无人值守安装CentOS7.1
pxe+kickstart 无人值守安装CentOS7.1

 CentOS6.6下PXE+Kickstart无人值守安装CentOS7.1操作系统 一.简介 1.1 什么是PXE Pxe(Pre-boot Execution Environment,预启动执行环境)是由Inter公司开发的最新技术,工作与Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过 网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。 严格来说,PXE并不是一种安装方式,而是一种引导方式。进行PXE安装的必要条件是在要安装的计算机中必须包含一个pxe支持的网卡(NIC),即网卡必须要有PXE Client。PXE协议可以使计算机通过网络启动。此协议分为Client端和server端,而PXEclient 则在网卡的ROM中。当计算机引导时。BIOS把PXE Client调入内存中执行,然后由PXE client将放置在远端的文件通过网络下载到本地执行。运行PXE协议需要设置DHCP服务器和TFTP服务器。DHCP服务器会给PXE Client(将要安装系统的主机)分配一个IP地址,由于是给PXE Client分配地址,所以在配置DHCP服务器时需要增加相应的PXE设置,此外,在PXEClient的ROM中,已经存在了TFTP Client,那么它就可以通过TFTP协议到TFTP Server上下载所需的文件了。 PXE的工作过程: PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP; DHCP服务器返回分配给客户起的IP,以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上); PXE Client 向本网络的TFTP服务器索取pxelinux.0文件; PXE Client 取得pxelinux.0文件后执行该文件; 根据pxelinu.0的执行结果,通过TFTP服务器加载内核和文件系统; 进入安装画面,此时可以通过选择HTTP.FTP、NFS方式之一进行安装; 详细工作流程,请参考下面这幅图: 1.2 什么是Kickstart kicstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录的典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。 PXE+Kickstart无人值守安装操作系统完整过程如下: 二、系统安装 实验环境:VMware Workstation 12 系统平台:CentOS release 7.1( 最小化安装) 网络模式:NAT模式(共享主机的IP地址) DHCP /TFTP IP: 10.0.0.7 […]

XUtils3框架的初始体验(一)
XUtils3框架的初始体验(一)

1、开源地址       https://github.com/wyouflf/xUtils3.git    如果使用eclipse可以 点击这里下载aar文件, 然后用zip解压, 取出jar包和so文件. 2、导入工程  使用Gradle构建时添加一下依赖即可: compile 'org.xutils:xutils:3.2.2' 使用Eclipse构建时操作步骤如下: 1、下载aar文件并使用然后用zip解压, 取出jar包和so文件.        2、将xutils-3.2.0.jar 以及armeabi添加到工程的libs中即可。 3、简单介绍     XUtils3一共有4大功能:注解模块,网络模块,图片加载模块,数据库模块。  注解模块 Activity的注解 1.在Application的oncreate方法中加入下面代码: x.Ext.init(this); x.Ext.setDebug(BuildConfig.DEBUG);2.在Activity的oncreate方法中加入下面代码: x.view().inject(this); 3.加载当前的Activity布局需要如下注解: @ContentView加入到Activity的上方 4.给View进行初始化需要如下注解: @InjectView 5.处理控件的各种响应事件需要如下注解: @Envent    一下是一个简单的Demo 其中加载网络图片需要添加权限 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 项目目录截图    @ContentView(R.layout.activity_main)public class MainActivity extends Activity { private Context context; @ViewInject(R.id.id_but1) private Button button1; @ViewInject(R.id.id_but2) private Button […]

LOJ3044. 「ZJOI2019」Minimax 搜索
LOJ3044. 「ZJOI2019」Minimax 搜索

LOJ3044. 「ZJOI2019」Minimax 搜索 https://loj.ac/problem/3044 分析: 假设\(w(1)=W\),那么使得这个值变化只会有两三种可能,比\(W\)小的值变成\(W+1\),比\(W\)大的值变成\(W-1\),或直接修改\(W\)。 先考虑第一部分,设\(f_{x}\)表示只改变权值\(<W\)的节点,\(x\)节点权值\(\le W\)的概率,这样能推出\(dp\)式子 \(f_x=\prod\limits_{t}f_t​\) \((dep_x\ is \ odd)​\) \(f_x=1-\prod\limits_{t}(1-f_t)​\) \((dep_x\ is\ even)​\) 手动展开可以发现\(f'_x=\prod\limits_{t}(1-f'_x)​\) \((f'_x=(-1)^{dep_x+1}f_x)​\) 对于另一个,我们设\(g_x\)表示只改变\(>W\)的点,\(x\)节点权值\(<W\)的概率,这样使得两个转移方程相同。 然后对于不同的\(K\)可以看做是对两个节点的修改,动态\(dp\)即可。 \(f_x=\prod\limits_{t\in child_x}(1-f_t)​\) 设\(g_x=\prod\limits_{t\in child_x,t\not =s}(1-f_t)\) \(s\)为\(x\)的重儿子 那么\(f_x=(1-f_s)\times g_x\) \(=g_x-f_s\times g_x\)\(\left[ \begin{matrix}-g_x&g_x\\0&1\end{matrix}\right]\times \left[\begin{matrix}f_s\\1\end{matrix}\right]=\left[\begin{matrix}f_x\\1\end{matrix}\right]\) 容易发现矩阵只需要存左上和右上,用两个变量维护即可。 这里可能需要除\(0​\),需要记录一下非\(0​\)部分和\(0​\)的数量。 代码: #include <cstdio>#include <cstring>#include <algorithm>#include <cstdlib>#include <iostream>using namespace std;#define N 200050#define mod 998244353#define ls ch[p][0]#define rs ch[p][1]#define db(x) cerr<<#x<<" = […]