Lua

Lua http://zh.wikipedia.org/zh-cn/Lua http://baike.baidu.com/view/416116.htm Lua ( /ˈluːə/ ) 程序设计语言是一个简洁、轻量、可扩展的脚本语言,是葡萄牙语中"Luna" (月亮) 的意思。 Lua 是一个动态弱类型语言,支援增量式垃圾收集策略。有内建的,与操作系统无关的协作式多线程 (coroutine) 支持 Lua的目标是成为一个很容易嵌入其它语言中使用的语言。大多数程序员也认为它的确做到了这一点。 很多应用程序使用Lua作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。这其中包括大话西游II、仙境传说、魔兽世界、战锤40k、博德之门、轩辕剑外传汉之云、愤怒的小鸟等。 Lua是一种轻量语言,它的官方版本只包括一个精简的核心和最基本的库。这使得Lua体积小、启动速度快。它用标准C语言编写并以源 代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程式里。和许多"大而全"的语言不一样,网路通讯、图形界面等都没有默认提供。但是Lua可以很 容易地被扩展: 由宿主语言 (通常是C或C++) 提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。事实上,现在已经有很多成熟的扩展模块可供选用。 Lua是一种多重编程范式的程式设计语言: 它只提供了很小的一个特性集合来满足不同编辑范式的需要,而不是为某种特定的编辑范式提供繁杂的特性支援。例如,Lua并不提供继承这个特性,但是你可以用元表来模拟它。诸如名字空间、类这些概念都没有在语言基本特性中实现,但是我们可以用表结构 (Lua唯一提供的复杂数据结构) 轻易模拟。Lua可以在运行时随时构造出一个函数,并把它看作一个对象 (正是所谓的first class function) ,这个特性可以很好的满足函数式编程的需要。这是提供了这些基本的元特性,我们可以任意的对语言进行自需的改造。 Lua 原生支援的数据类型非常之少,它只提供了数字 (缺省是双精度浮点数,可配置) 、布尔量、字符串、表、子程序、协程 (coroutine) 以及用户自定义数据这几种。但是其处理表和字符串的效率非常之高,加上元表的支援,我们可以高效的模拟出需要的复杂数据类型 (比如集合、数组等) 。

2013-02-13 · 1 min · 38 words · -

debian & SDL

‘debian & SDL’ http://www.upubuntu.com/2012/01/how-to-install-sdl-12-simple.html SDL (Simple DirectMedia Layer) is a multi-platform multimedia library used by many app/game developers in creating emulators, games, MPEG playback software, etc. Also, when installing some games or software requiring SDL under Ubuntu, you may get these errors while compiling them: configure: error: * SDL version 1.2.0 not found! ** configure: error: * SDL_image library not found! ** configure: error: * SDL_mixer library not found!** configure: error: * SDL_net library not found!** ...

2013-02-13 · 2 min · 275 words · -

SCons

SCons 一、概述 scons是一个Python写的自动化构建工具,和GNU make相比优点明显: 1、 移植性: python能运行的地方,就能运行scons 2、 扩展性: 理论上scons只是提供了python的类,scons使用者可以在这个类的基础上做所有python能做的事情。比如想把一个已经使用了Makefile大型工程切换到scons,就可以保留原来的Makefile,并用python解析Makefile中的编译选项、源/目标文件等,作为参数传递给scons,完成编译。 3、 智能: Scons继承了autoconf/automake的功能,自动解析系统的include路径、typedef等;“以全局的观点来看所有的依赖关系” 二、scons文件 scons中可能出现的文件: SConstruct,Sconstruct,sconstruct,SConscript scons将在当前目录以下次序 SConstruct,Sconstruct,sconstruct 来搜索配置文件,从读取的第一个文件中读取相关配置。 在配置文件SConstruct中可以使用函数SConscript()函数来定附属的配置文件。按惯例,这些附属配置文件被命名为"SConscript",当然也可以使用任意其它名字。 三、scons的命令行参数 执行SConstruct中脚本 ```bash scons ``` scons -c clean scons -Q 只显示编译信息,去除多余的打印信息 scons -Q -implicit-cache hello 保存依赖关系 -implicit-deps-changed 强制更新依赖关系 -implicit-deps-unchanged 强制使用原先的依赖关系,即使已经改变

2013-02-12 · 1 min · 40 words · -

shiro tag

shiro tag <shiro:principal/> - Displays the user's principal or a property of the user's principal.

2013-02-03 · 1 min · 15 words · -

Underscore

Underscore Underscore 一个非常实用的JavaScript库,提供许多编程功能的支持,就像你期望 Prototype.js (或者 Ruby), 有这些功能且不扩展任何JavaScript的原生对象。 It’s the tie to go along with jQuery’s tux. Underscore提供60多个方法,即有普通的功能,例如: map, select, invoke — 也有更多特殊的编程辅助方法,例如: 函数绑定、javascript模板、绝对相等判断等待。 如果一些现代的浏览器提供了内置的 forEach, map, reduce, filter, every,some 和 indexOf方法,Underscore就委托给浏览器原生的方法。 Underscore提供完整的测试用例集供你精读。 你也可以阅读有注释的源代码。 项目代码放在GitHub上,你可以通过issues页、Freenode的#documentcloud频道、发送tweets给@documentcloud三个途径报告bug以及参与特性讨论。 Underscore是DocumentCloud的一个开源组件

2013-02-02 · 1 min · 35 words · -

Java方法返回多个值

Java方法返回多个值 http://hi.baidu.com/xiaoyoue/item/7b905356a33d51948d12ed53 我最初学java用的教材就是《java编程思想》,觉得这本书很多知识讲的很细、很透彻,但对一些知识点不理解,有些是没有读懂,有些是觉得这些知识点 与主要内容不相关。当时项目紧,对这些不理解的知识就过去了,反正已经可以编程了。做了2年的java开发之后,重读这本书的,才发现这些不相关知识的内 在联系,如果当时理会了作者的意图,工作中将会少走很多的弯路。 我重读第12章时,想起自己解决一个问题走了很多的弯路,而在这章都做了详细的讨论与说明,把这个问题拿出来,按我走过的弯路,每一步都讨论一下,希望初学者少走些弯路。 问题一: 在写程序的时候,希望某个方法有两个返回值,如何处理? 讨 论一: 用过C语言的人都知道,其中一个可以通过返回值返回,另一个可以通过一个指针参数返回 (将一个指针变量传入函数,改变指针指向的内容,达到目的) 。 Java没有指针,如何达到这个目的?12章的一段话说的很明白: “事实上,Java中每个对象 (除基本数剧类型以外) 的标识符都属于指针的一种。但它们 的使用受到了严格的限制和规范…"。是否可以利用这点返回多个值?回答是肯定的,java.io.InputStream 类的read方法就是这么用的,参见public int read(byte[] b)。 收获一: java方法的参数传递方法有两 种: 1、按值传递: java的基本数据类型,都是采用的这种方式;2、按引用传递,其它类型的对象,都是传递引用 (句柄) 。传递引用的方式有一个问题,即 两个引用指向同一个对象,在函数中修改了一个对象,同时也修改了函数外的那个对象,即容易引起别名的副作用。 结论一: 在一些情况下,可以利用别名的副作用,达到返回多个返回值的目的。如java.io.InputStream类的read方法。 问题二: 根据结论一,对于自定义的一些类,一般可以作为输出参数,达到返回值的目的,但对于基本数据类型,如何解决呢? 讨 论二: 既然每一个数据基本类型都对应一个包装类,是否可以使用相应的包装类,来达到目的呢?实践发现,这些包装类的对象是没有办法修改的,都是只读类。这 些类的对象,一旦创建,便不能修改,不能使用包装类达到目的。这种情况下,发现用数组可以达到目的,可以创建一个基本类型数据的数组,作为参数传递到方法 中,在方法中改变数组内容,达到目的。 收获二: 发现有些类是只读类,这些类的对象一旦创建,就不能修改;基本数据类型的包装类都是只读 类。这些类实际上使用了《java与 模式》一书中提到的不变模式。不变模式的优点: 1、不变的对象比可变对象更加容易维护;2、线程安全。缺点: 一旦需要修改一个不变的对象,就必须创建一个 新的对象。一些关于String和StringBuffer的区别的讨论,无非就是String采用的是不变模式,而StringBuffer没有采用不 变模式,本质上就是不变模式的讨论而已。 结论二: 对于基本数剧类型作为方法的输出参数的变通手段: 采用基本数据类型的数组可以达到目的,对于基本数据类型的包装类,则达不到目的。 (为了将一个基本数据类型作为输出参数就创建一个数组,只是达到目的的一种方式,不值得推荐使用。) 问题三: 应用结论二,在RMI调用时,输出参数在方法调用时改变了,而在调用处却没有改变。为什么? 讨 论三: 我在写一个rmi服务接口时,采用以下的方法接口: byte[] getFaxByte(Fax fax, int[] page),其中 page作为输出参数,希望在调用时,函数改变page[0]的值,在函数调用过后,通过对page的引用得到修改后的值。在实践中我发现,rmi的服务 和调用在同一台机器上,可以得到正确结果,而rmi服务和调用不在同一台机器上,结果便不正确。 经过单步跟踪,发现了问题根源,原来是自己对rmi的原理不熟,没有理解rmi的基础。 收 获三: rmi是远程方法调用,本质上就是为了让一个JVM能够调用另外一个JVM的方法。Rmi的基本原理是利用stub和skel将远程对象伪装成自己 机器内的某个本地对象。容易忽略的一点: 远程接口的参数、返回参数必须实现Serializable接口;在远程调用时,将参数通过 Serializable传到远程的服务器上,而将远程的返回结果Serializable传回到调用的机器上。在这种情况下,由于参数在方法调用处和方 法的处理引用的不是同一个对象,因而便不会有结论一中提到的别名的副作用,在rmi调用,使用输出参数是不会成功的。 ...

2013-01-29 · 1 min · 100 words · -

java char[] 转 String

‘java char[] 转 String’ public class Test{ public static void main(String[] args){ char[] data={a,b,c}; String s=new String(data); System.out.println(s); char[] chars = s.toCharArray(); } }

2013-01-24 · 1 min · 24 words · -

Mybatis多参数查询映射

Mybatis多参数查询映射 http://fengfan876.iteye.com/blog/1473863 最近在做一个Mybatis的项目,由于是接触不久,虽然看了一下资料,但在实际开发中还是暴露了很多问题,其中最让我头疼的就是selete的parameterType问题,网上这类的帖子虽然有但是不全,很多情况下很难找到你想要的答案。 为此我对这个问题进行了总结,希望对像我这样的新手有一定的帮助。 (一) 单个参数 public List getXXBeanList(String xxCode); select 字段… from XXX where code = #{xxCode} 其中方法名和ID一致,#{}中的参数名与方法中的参数名一直, 我这里采用的是XXXBean是采用的短名字, select 后的字段列表要和bean中的属性名一致, 如果不一致的可以用 as 来补充。 (二) 多参数 public List getXXXBeanList(String xxId, String xxCode); select 字段… from XXX where id=#{0} code = #{1} 由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始 ...

2013-01-24 · 1 min · 98 words · -

history.back() webpage has expired. 网页已过期

history.back() webpage has expired. 网页已过期 http://blog.sina.com.cn/s/blog_4b3c4bfa0100vz7h.html 最近开发的时候,碰到了这个问题,就是在回到上一页的时候,IE出现了webpage has expired; Firefox会出现一个alert,是否重新提交表单. page A 提交表单给page B, 然后去到page C. 从page C回到page B的时候, 这个问题就出现了. 于是去查了一些资料,并好好检查了一下我的代码.发现了几个问题,得到一些启发,在这里总结一下. 1.http头中 cache-control的使用. 指示了浏览器的缓存的使用情况, 我是把缓存都关掉了, 导致从page C返回page B的时候,需要重新submit 表单,这是这个问题的起因之一. 介绍一篇博文: http://czy4411741.blog.163.com/blog/static/3420312720102931720414/ 对cache-control的介绍还挺好懂的. 改了cache-control以后可以达到后退的时候不重新submit表单,而是从缓存里拿,其他情况重新submit.具体的请看链接的博文,系统的学习一下. ‘Spring 的 SimpleFormController里面, 把cache-control设成了no-cache no-store.’ 2.Redirect After Post. 我的page A的表单提交方式是post.这本身没有问题,但是浏览器有一个机制防止重复提交表单(只针对post),于是在浏览器端会条出来什么网页过期啊,重复提交警告之类的.找了一下,有一个Post/Redirect/Get的设计模式. Page A 把表单Post给Page B, Page B拿到后Redirect用户去Pace C.在Page C显示结果. 从Page C返回的话,会回到Page A.(浏览器不记录Page B,因为对于浏览器来说,他只做了一个Redirect操作). 这样做的好处是不会再去到Page B, 就不会重复提交表单了. 对于严格禁止重复提交表单的操作, 使用这个设计模式是很好的选择. 解决方案 (任选其一): 1.修改cache-control设置, 并将Expires 设为-1. 看上面的总结一中的博文. jsp可以用response.setHeader(“cache-control”,“private”); 配合response.setHeader(“Expires”,"-1"); 其他语言类似. 2.将page A里表单提交方式改为get. 如果表单数据不敏感的话,可以使用. 谁叫浏览器只针对post. ...

2013-01-23 · 1 min · 78 words · -

spring mvc 标签

spring mvc 标签 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

2013-01-20 · 1 min · 7 words · -

git flow, Git 分支管理, github flow, gitlab flow

git flow, Git 分支管理, github flow, gitlab flow git flow main: 稳定的生产代码,只有发布版本才合并到这里, 长期分支,始终存在。 develop:日常开发的主分支,所有新功能和 bug 修复先合并到 develop, 长期分支,始终存在。用于整合开发中的代码 feature/xxx:新功能开发的临时分支,开发完成后合并到 develop, 合并之后删掉, 短期分支, 不是长期保持。开发新特性时创建,合并后删除 release/xxx:发布准备分支,从 develop 分出,准备发布, 短期分支, 不是长期保持。 hotfix/xxx:生产环境紧急修复,从 main 分出,修复后合并回 main 和 develop, 短期分支, 不是长期保持。 Git flow 是一个Git分支管理模型,由 Vincent Driessen 于2010年发布在其个人网站的一篇博文中《A successful Git branching model》,该模型适用于多版本管理的项目,能够有效的促进团队成员之间的协作,提升代码的清晰度。 https://nvie.com/posts/a-successful-git-branching-model/ https://www.cnblogs.com/youbins/p/17632165.html Git flow的优点是清晰可控,缺点是相对复杂,需要同时维护两个长期分支。大多数工具都将master当作默认分支,可是开发是在develop分支进行的,这导致经常要切换分支,非常烦人。 更大问题在于,这个模式是基于”版本发布”的,目标是一段时间以后产出一个新版本。但是,很多网站项目是”持续发布”,代码一有变动,就部署一次。这时,master分支和develop分支的差别不大,没必要维护两个长期分支。 github flow 只有主分支(通常是 main 或 master)和临时 feature 分支。 在 GitHub Flow 中并不推荐或保留 develop 分支。 feature/bugfix 分支:开发新功能或修复 bug 时,从 main 分出,开发完成后提 Pull Request(PR),通过代码审查后合并到 main。开发完成后通过 Pull Request 合并到 main,feature 分支随即删除。 GitHub Flow 本身不适合多版本并行维护 https://docs.github.com/en/get-started/using-github/github-flow ...

2013-01-20 · 2 min · 291 words · -

shiro 标签

shiro 标签 http://kdboy.iteye.com/blog/1155450 授权即访问控制,它将判断用户在应用程序中对资源是否拥有相应的访问权限。 如,判断一个用户有查看页面的权限,编辑数据的权限,拥有某一按钮的权限,以及是否拥有打印的权限等等。 一、授权的三要素 授权有着三个核心元素: 权限、角色和用户。 权限 权限是Apache Shiro安全机制最核心的元素。它在应用程序中明确声明了被允许的行为和表现。一个格式良好好的权限声明可以清晰表达出用户对该资源拥有的权限。 大多数的资源会支持典型的CRUD操作 (create,read,update,delete) ,但是任何操作建立在特定的资源上才是有意义的。因此,权限声明的根本思想就是建立在资源以及操作上。 而我们通过权限声明仅仅能了解这个权限可以在应用程序中做些什么,而不能确定谁拥有此权限。 于是,我们就需要在应用程序中对用户和权限建立关联。 通常的做法就是将权限分配给某个角色,然后将这个角色关联一个或多个用户。 权限声明及粒度 Shiro权限声明通常是使用以冒号分隔的表达式。就像前文所讲,一个权限表达式可以清晰的指定资源类型,允许的操作,可访问的数据。同时,Shiro权限表达式支持简单的通配符,可以更加灵活的进行权限设置。 下面以实例来说明权限表达式。 可查询用户数据 User:view 可查询或编辑用户数据 User:view,edit 可对用户数据进行所有操作 User:* 或 user 可编辑id为123的用户数据 User:edit:123 角色 Shiro支持两种角色模式: 传统角色: 一个角色代表着一系列的操作,当需要对某一操作进行授权验证时,只需判断是否是该角色即可。这种角色权限相对简单、模糊,不利于扩展。 权限角色: 一个角色拥有一个权限的集合。授权验证时,需要判断当前角色是否拥有该权限。这种角色权限可以对该角色进行详细的权限描述,适合更复杂的权限设计。 下面将详细描述对两种角色模式的授权实现。 二、授权实现 Shiro支持三种方式实现授权过程: 编码实现 注解实现 JSP Taglig实现 1、基于编码的授权实现 1.1基于传统角色授权实现 当需要验证用户是否拥有某个角色时,可以调用Subject 实例的hasRole*方法验证。 Java代码 <img alt="收藏代码" src="http://kdboy.iteye.com/images/icon_star.png" /> Subject currentUser = SecurityUtils.getSubject(); if (currentUser.hasRole("administrator")) { //show the admin button } else { //don't show the button? Grey it out? } 相关验证方法如下: ...

2013-01-20 · 3 min · 568 words · -

apache shiro 自定义过滤器

apache shiro 自定义过滤器 http://blog.csdn.net/michnus/article/details/7987367

2013-01-17 · 1 min · 4 words · -

java IO, InputStream, OutputStream

java IO, InputStream, OutputStream InputStream和OutStream是java.io包中面向字节操作的两个顶层抽象类,所有关于java同步IO字节流的操作都是基于这两个的。 什么是流? 《O’Reilly-Java Io》中是这么解释的: A stream is an ordered sequence of bytes of undetermined length. Input streams move bytes of data into a Java program from some generally external source. Output streams move bytes of data from Java to some generally external target. (In special cases streams can also move bytes from one part of a Java program to another.) 流是一个不确定长度的有序字节序列。输入流从外部资源将数据字节移动到Java程序中。输出流从Java程序中将数据字节移动到外部目标。 (特殊的情况也可以将字节从java程序中一部分移动到另一部分) 流从哪里来? 通常流来自于: 网络 文件 java内部程序 InputStream (输入流) : InputStream作为java中用于读取流中字节的顶层抽象类,定义了一些方法: public abstract int read() throws IOException public int read(byte b[], int off, int len) throws IOException public int read(byte b[]) throws IOException { return read(b, 0, b.length); } 有三个read方法用来读取字节: ...

2013-01-16 · 2 min · 315 words · -

PreparedStatement

PreparedStatement jdbc(java database connectivity,java数据库连接)的api中的主要的四个类之一的java.sql.statement要求开发者付出大量的时间和精力。在使用statement获取jdbc访问时所具有的一个共通的问题是输入适当格式的日期和时间戳: 2002-02-05 20:56 或者 02/05/02 8:56 pm。 通过使用java.sql.preparedstatement,这个问题可以自动解决。一个preparedstatement是从java.sql.connection对象和所提供的sql字符串得到的,sql字符串中包含问号 (?) ,这些问号标明变量的位置,然后提供变量的值,最后执行语句,例如: stringsql = “select * from people p where p.id = ? and p.name = ?”; preparedstatement ps = connection.preparestatement(sql); ps.setint(1,id); ps.setstring(2,name); resultset rs = ps.executequery(); 使用preparedstatement的另一个优点是字符串不是动态创建的。下面是一个动态创建字符串的例子: stringsql = “select * from people p where p.i = “+id; 这允许jvm (javavirtual machine,java虚拟机) 和驱动/数据库缓存语句和字符串并提高性能。 preparedstatement也提供数据库无关性。当显示声明的sql越少,那么潜在的sql语句的数据库依赖性就越小。 由于preparedstatement具备很多优点,开发者可能通常都使用它,只有在完全是因为性能原因或者是在一行sql语句中没有变量的时候才使用通常的statement。

2013-01-16 · 1 min · 56 words · -

BLOB

BLOB BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。 BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理 (例如: 上传、下载或者存放到一个数据库) 。 根据Eric Raymond的说法,处理BLOB的主要思想就是让文件处理器 (如数据库管理器) 不去理会文件是什么,而是关心如何去处理它。 但也有专家强调,这种处理大数据对象的方法是把双刃剑,它有可能引发一些问题,如存储的二进制文件过大,会使数据库的性能下降。在数据库中存放体积较大的多媒体对象就是应用程序处理BLOB的典型例子。 大型对象 BLOB就是使用二进制保存数据。 如: 保存位图。 CLOB使用CHAR来保存数据。 如: 保存XML文档。 Oracle中的BLOB和CLOB LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列 LONG RAW: 可变长二进制数据,最长2G CLOB: 字符大对象Clob 用来存储单字节的字符数据 NCLOB: 用来存储多字节的字符数据 BLOB: 用于存储二进制数据 BFILE: 存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在数据库内。 bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复. CLOB,NCLOB,BLOB都是内部的LOB(Large Object)类型,最长4G,没有LONG只能有一列的限制 要保存图片、文本文件、Word文件各自最好用哪种数据类型? -BLOB最好,LONGRAW也不错,但Long是oracle将要废弃的类型,因此建议用BLOB。 Blob是指二进制大对象也就是英文Binary Large Object的所写,而Clob是指大字符对象也就是英文Character Large Object的所写。由此可见这辆个类型都是用来存储大量数据而设计的,其中BLOB是用来存储大量二进制数据的;CLOB用来存储大量文本数据。 那么有人肯定要问既然已经有VARCHAR和VARBINARY两中类型,为什么还要再使用另外的两种类型呢?其实问题很简单,VARCHAR和VARBINARY两种类型是有自己的局限性的。首先说这两种类型的长度还是有限的不可以超过一定的限额,以VARCHAR再ORA中为例长度不可以超过4000;那么有人又要问了,LONGVARCHAR类型作为数据库中的一种存储字符的类型可以满足要求,存储很长的字符,那为什么非要出现CLOB类型呢?其实如果你用过LONGVARCHAR类型就不难发现,该类型的一个重要缺陷就是不可以使用LIKE这样的条件检索。 (稍候将介绍在CLOB中如何实现类似LIKE的模糊查找) 另外除了上述的问题外,还又一个问题,就是在数据库中VARCHAR和VARBINARY的存取是将全部内容从全部读取或写入,对于100K或者说更大数据来说这样的读写方式,远不如用流进行读写来得更现实一些。 在JDBC中有两个接口对应数据库中的BLOB和CLOB类型,java.sql.Blob和java.sql.Clob。和你平常使用数据库一样你可以直接通过ResultSet.getBlob()方法来获取该接口的对象。与平时的查找唯一不同的是得到Blob或Clob的对象后,我们并没有得到任何数据,但是我们可以这两个接口中的方法得到数据 例如: Blob b=resultSet.getBlob(1); InputStream bin=b.getBinaryStryeam(); Clob c=resultSet.getClob(2); Reader cReader=c.getCharacterStream(): 关于Clob类型的读取可以使用更直接的方法,就是直接通过ResultSet.getCharacterStream();方法获得字符流,但该方法并不安全,所以建议还是使用上面例子的方法获取Reader。 另外还有一种获取方法,不使用数据流,而是使用数据块。 例如 Blob b=resultSet.getBlob(1); byte data=b.getByte(0,b.length()); Clob c=resultSet.getClob(2); String str=c.getSubString(0,c.length()): 在这里我要说明一下,这个方法其实并不安全,如果你很细心的话,那很容易就能发现getByte()和getSubString()两个方法中的第二个参数都是int类型的,而BLOB和CLOB是用来存储大量数据的。而且Bolb.length()和Clob.length()的返回值都是long类型的,所以很不安全。这里不建议使用。但为什么要在这里提到这个方法呢?稍候告诉你答案,这里你需要记住使用数据块是一种方法。 ...

2013-01-15 · 1 min · 202 words · -

input file 文件上传控件隐藏后用button触发 click事件

input file 文件上传控件隐藏后用button触发 click事件 http://bbs.csdn.net/topics/320156312 <HTML> <BODY> <input type="button" value="添加附件" onmouseover="floatFile()"> <input type="button" onclick="alert($('tt').innerHTML)" value="showHTML"> </BODY> </HTML> <SCRIPT LANGUAGE="JavaScript"> function $(id) { return document.getElementById(id); } //全局变量,记录文件数; var fileNum=1; //mouseover时,把input file移到按扭上,保证点击的是file, function floatFile() { $("file"+fileNum).style.posTop=event.srcElement.offsetTop; $("file"+fileNum).style.posLeft=event.x-$("file"+fileNum).offsetWidth/2; } //选择完一个文件之后,自动创建一个新的div 和 file表单,用于下回使用,hidden刚用过的file function showText(obj) { $(obj.id+"text").innerHTML=obj.value+" 删除"; $("file"+fileNum).style.display='none'; fileNum=fileNum+1; //直接追加innerHTML(innerHTML+=)会清空原来file中的内容 $("div"+(fileNum-1)).insertAdjacentHTML('AfterEnd',''); } function del(id) { $("div"+id).innerHTML=""; $("div"+id).style.display="none"; } </SCRIPT> IE 使用 ‘filter:alpha(opacity=50);’ 通过 Filter 的 alpha 通道滤镜使元素半透明,但元素必须触发 hasLayout 特性。 ...

2013-01-14 · 1 min · 80 words · -

javascript 判断浏览器类型

javascript 判断浏览器类型 var Sys = {}; var ua = navigator.userAgent.toLowerCase(); if (window.ActiveXObject) Sys.ie = ua.match(/msie ([d.]+)/)[1] else if (document.getBoxObjectFor) Sys.firefox = ua.match(/firefox/([d.]+)/)[1] else if (window.MessageEvent && !document.getBoxObjectFor) Sys.chrome = ua.match(/chrome/([d.]+)/)[1] else if (window.opera) Sys.opera = ua.match(/opera.([d.]+)/)[1] else if (window.openDatabase) Sys.safari = ua.match(/version/([d.]+)/)[1]; //以下进行测试 if (Sys.ie) document.write('IE: ' + Sys.ie); if (Sys.firefox) document.write('Firefox: ' + Sys.firefox); if (Sys.chrome) document.write('Chrome: ' + Sys.chrome); if (Sys.opera) document.write('Opera: ' + Sys.opera); if (Sys.safari) document.write('Safari: ' + Sys.safari);

2013-01-14 · 1 min · 73 words · -

obsidian

obsidian # archlinux pacman -S obsidian https://forum-zh.obsidian.md/ flatpak install flathub md.obsidian.Obsidian flatpak run md.obsidian.Obsidian https://decoge.medium.com/how-to-install-obsidian-on-a-chromebook-53e379217adf install plugin: remotely save Obsidian> settings> community plugins> turn on community plugins> browse search remotely save and install and enable config s3 storage: setting> community plugins> remotely save Choose A Remote Service: S3 or compatible endpoint: s3.ap-southeast-1.amazonaws.com region: ap-southeast-1 ak: sk: bucket name: obsidian-w10n 调整页边距 解决编辑区域过窄的问题 ...

2013-01-12 · 1 min · 68 words · -

linux 摄像头

linux 摄像头 http://www.linuxeden.com/html/news/20101108/105418.html Webcam是一种视频捕捉设备,能通过USB端口直接连接计算机或计算机网络。新的上网本和笔记本多有内置的网络摄像头。Webcam可用于实时视频聊天和网络广播,丰富在线交流。这个小小的摄像机让用户能与朋友和家人实时聊天,发送视频电子邮件,与同事和客户举行视频会议,甚至是在互联网上建立一个类似电视的广播频道。还有人会把网络摄像头作为安全系统的一部分,安装在住宅或建筑物内,使用运动检测接收图像和发送视频入侵警报。Linuxlinks的这篇文章编辑了五款优秀的Linux摄像头工具的清单,既能让摄像头捕捉图像和视频,也能把它变成视频监控设备。这些工具包括: GNOME桌面摄像头工具Cheese,一体化安全监控解决方案ZoneMinder,支持动作检测的视频捕捉工具Motion,GNOME桌面下的开源VoIP和视频会议应用程序Ekiga等。 Webcam Tools Cheese Take pictures and videos from your webcam ZoneMinder All-in-one security camera solution Motion V4L capture program supporting motion detection Ekiga VoIP and video conferencing application HasciiCam ASCII cam streaming

2013-01-12 · 1 min · 37 words · -