Qt, GTK

Qt, GTK 查看Qt 版本 qmake -v Qt debug export QT_DEBUG_PLUGINS=1 Qt 是一个跨平台的 C++ 图形用户界面库,由挪威 TrollTech公司出品,目前包括Qt, 基于 Framebuffer 的 Qt Embedded,快速开发工具 Qt Designer,国际化工具 Qt Linguist 等部分. Qt支持所有 Unix 系统,当然也包括 Linux,还支持WinNT/Win2k,Win95/98 平台。 Trolltech 公司在 1994 年成立,但是在 1992 年,成立 Trolltech 公司的那批程序员就已经开始设计 Qt 了,Qt 的第一个商业版本于 1995 年推出然后 Qt 的发展就很快了,下面是 Qt 发展史上的一 些里程碑: 1996 Oct KDE 组织成立 1998 Apr 05 Trolltech 的程序员在 5 天之内将 Netscape5.0 从 Motif 移植到 Qt 上 1998 Apr 08 KDE Free Qt 基金会成立 ...

2013-02-24 · 3 min · 477 words · -

Hsqldb

Hsqldb Hsqldb是一个开放源代码的JAVA数据库,其具有标准的SQL语法和JAVA接口, 在HSQLDB中,有三种比较常用模式: 服务器模式 Server模式提供了最大的可访问性。应用程序 (客户端) 通过Hsqldb的JDBC驱动连接服务器。在服务器模式中,服务器在运行的时候可以被指定为最多10个数据库。根据客户端和服务器之间通信协议的不同,Server模式可以分为以下三种: 1、 Hsqldb Serve 这种模式是首选的也是最快的。它采用HSQLDB专有的通信协议。启动服务器需要编写批处理命令。Hsqldb提供的所有工具都能以java class归档文件(也就是jar)的标准方式运行。假如hsqldb.jar位于相对于当前路径的../lib下面。我们的命令将这样写: java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 demoDB 现在你可能会疑惑,[-database.0 ]、 [dbname.0]为什么在后面加[0]。_… …我们不是在前面说服务模式运行的时候可以指定10个数据库吗,如有多个数据库,则继续写命令行参数-database.1 aa -dbname.1 aa -database.2 bb-dbname.2 bb … … 新建文本文件保存上面命令,文件名可以随意,将后缀名改成bat,然后直接执行批处理文件即可。在以后介绍的执行启动工具的命令采用同样方法。 上面启动服务器的命令启动了带有一个 (默认为一个数据库) 数据库的服务器,这个数据库是一个名为"mydb.*“文件,这些文件就是mydb.Properties、mydb.script、mydb.log等文件。其中demoDB是mydb的别名,可在连接数据库时使用。 2、 Hsqldb Web Server 这种模式只能用在通过HTTP协议访问数据库服务器主机,采用这种模式唯一的原因是客户端或服务器端的防火墙对数据库对网络连接强加了限制。其他情况下,这种模式不推荐被使用。 运行web服务器的时候,只要将刚才命令行中的主类 (main class) 替换成: org.hsqldb.WebServer 3、 Hsqldb Servlet 这种模式和Web Server一样都采用HTTP协议,当如Tomcat或Resin等servlet引擎 (或应用服务器) 提供数据库的访问时,可以使用这种模式。但是Servlet模式不能脱离servlet引擎独立启动。为了提供数据库的连接,必须将HSQLDB.jar中的hsqlServlet类放置在应用服务器的相应位置。 Web Server和Servlet模式都只能在客户端通过JDBC驱动来访问。Servlet模式只能启动一个单独的数据库。请注意做为应用程序服务器的数据库引擎通常不使用这种模式。 连接到以Server模式运行的数据库 当HSQLDB服务器运行时,客户端程序就可以通过hsqldb.jar中带有的HSQLDB JDBC Driver连接数据库。 java 代码 try{ Class.forName(“org.hsqldb.jdbcDriver”) ; }catch(ClassNotFoundException e){ e.printStackTrace(); } Connection c = DriverManager.getConnection(“jdbc:hsqldb:hsql://localhost/xdb”, “sa”, “”); ...

2013-02-23 · 1 min · 173 words · -

String#intern, String.intern()

String#intern, String.intern() public class StringIntern { public static void main(String[] args) { String s0 = "foo"; String s1 = "foo"; String s2 = new String("foo"); String s3 = s2.intern(); String s4 = new String("foo").intern(); String s5 = new String("s5"); System.out.println(s0==s1); System.out.println(s0==s2); System.out.println(s0==s3); System.out.println(s2==s3); System.out.println(s0==s4); System.out.println(s0==s5); } } true false true false true false 在Java8中,String类维护了一个字符串常量池 (注意此常量池在运行期间位于堆中),当调用intern方法时,首先在常量池中查看是否已有相同的字符串 (字符串是否相同使用String的equal方法判断),如果常量池中已有,则直接返回该字符串的引用,如果没有,则将当前字符串对象加入常量池中,并返回当前字符串的引用。 ...

2013-02-22 · 7 min · 1311 words · -

UTM

UTM browse utm gallery> archlinux arm> open in utm archlinux arm default user/password: root/root sudo mkdir -p /mnt/share sudo mount -t 9p -o trans=virtio hostshare /mnt/share Use Apple Virtualization 使用 Apple 自家的 虚拟化框架(Apple Virtualization Framework) 来运行虚拟机,而不是使用传统的仿真(emulation)技术。 性能更高 资源占用更少 boot from kernel image 勾选这个之后就不会出现 boot from iso image 的选项了 archlinux arm 不提供 iso ARM 架构设备的安装方式与 PC 不同 x86_64 架构(标准 PC):通常使用 Live ISO 镜像引导电脑,然后手动安装系统。 ARM 设备(如 Raspberry Pi、Pine64 等):没有传统 BIOS/UEFI 通用引导机制,因此需要预制好系统镜像,直接刷写到 SD 卡或 eMMC 上。

2013-02-22 · 1 min · 73 words · -

Use Story Points, task hours

Use Story Points, task hours [http://www.scrumalliance.org/articles/439-story-points-versus-task-hours]1 http://www.mountaingoatsoftware.com/blog/why-i-dont-use-story-points-for-sprint-planning

2013-02-21 · 1 min · 7 words · -

jstatd

jstatd jstatd 是一个基于RMI (Remove Method Invocation) 的服务程序,它用于监控基于HotSpot的JVM中资源的创建及销毁,并且提供了一个远程接口允许远程的监控工具连接到本地的JVM执行命令。 jstatd是基于RMI的,所以在运行jstatd的服务器上必须存在RMI注册中心,如果没有通过选项"-p port"指定要连接的端口,jstatd会尝试连接RMI注册中心的默认端口。后面会谈到如何连接到一个默认的RMI内部注册中心,如何禁止默认的RMI内部注册中心的创建,以及如何启动一个外部注册中心。 参数选项 jstatd 命令支持如下的选项: -nr 如果RMI注册中心没有找到,不会创建一个内部的RMI注册中心。 -p port RMI注册中心的端口号,默认为1099。 -n rminame 默认为JStatRemoteHost;如果同一台主机上同时运行了多个jstatd服务,rminame可以用于唯一确定一个jstatd服务;这里需要注意一下,如果开启了这个选项,那么监控客户端远程连接时,必须同时指定hostid及vmid,才可以唯一确定要连接的服务,这个可以参看jps章节中列出远程服务器上Java进程的示例。 -J 用于传递jvm选项到由javac调用的java加载器中,例如,"-J-Xms48m"将把启动内存设置为48M,使用-J选项可以非常方便的向基于Java的开发的底层虚拟机应用程序传递参数。 安全性 jstatd 服务只能监视具有适当的本地访问权限的JVM,因此jstatd进程与被监控的JVM必须运行在相同的用户权限中。但是有一些特殊的用户权限,如基于UNIX (TM) 为系统的root用户,它有权限访问系统中所有JVM的资源,如果jstatd进程运行在这种权限中,那么它可以监视系统中的所有JVM,但是这也带来了额外的安全问题。 jstatd 服务不会对客户端进行任何的验证,因此运行了jstatd服务的JVMs,网络上的任何用户的都具有访问权限,这种暴露不是我们所希望的,因此在启动jstatd之前本地安全策略必须要加以考虑,特别是在生产环境中或者是在不安全的网络环境中。 如果没有其他安全管理器被安装,jstatd服务将会安装一个RMISecurityPolicy的实例,因此需要在一个安全策略文件中指定,该策略文件必须符合的默认策略实施的策略文件语法。 下面的这个示例策略将允许jstatd服务具有JVM全部的访问权限: grant codebase “file:${java.home}/../lib/tools.jar” { permission java.security.AllPermission; }; 注: 此处策略中的java.home,和JAVA_HOME不是一个概念,童鞋们不要搞错了,此处的java.home指的是JRE的路径, 这个是Java的系统属性,不需要手工指定,通常是这个jdk下面的jre路径,即可以认为${java.home}和${JAVA_HOME}/jre是等价, 如果想查看这个变量的值,可以任意找一个运行着的Java应用,找到它的PID,然后通过如下jinfo命令查看就可以查看到java.home的值 jinfo ${PID}|grep java.home 也可以在Java代码中通过如下方式获取到: System.out.println(System.getProperty("java.home")) 将上面的策略内容拷贝一个文件中,文件名可以随意取,为了形象我们将文件名命名为jstatd.all.policy,文件存放的路径也可以随意,只有你当前登陆的用户具有访问权限就可以,然后执行以下命令就可以启动jstatd服务: ```bash jstatd -J-Djava.security.policy=jstatd.all.policy 如果是在具有安全限制的环境中,jstatd的策略安全一定要设置得当,并且只允许受信任的服务器或者网络访问,以免遭受网络攻击,如果存在安全隐患,最好不要启动jstatd服务,就在本地使用jstat及jps等工具对JVM进行监控了。 示例 4.1、使用内部RMI注册中心 下面这个示例演示了通过内部RMI注册中心启动jstatd,这个示例假设没有其它的服务绑定到默认的RMI注册中心端口 (默认端口是1099) 。 ...

2013-02-21 · 2 min · 221 words · -

SubSonic

SubSonic SubSonic就是一个ORM开源框架。作者是Robe Conery,用c#写的. SubSonic遵循了Ruby on Rails的一些准则,比如在建表时一些约定(建议每个表都加CreatedOn[Datetime],CreatedBy[nvarchar],ModifyOn[DateTime],ModifyBy[nvarchar])….,这些详细信息可以去参考Ruby on Rails. 该ORM框架可以支持多种数据库,包括sql server,MySQL,oracle,sqlite…,

2013-02-21 · 1 min · 10 words · -

jib-maven-plugin

jib-maven-plugin Jib 是一个构建 Docker 或者 OCI 镜像的 Maven 插件 https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin <plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>3.2.1</version> <configuration> <from> <image>openjdk:17.0.2-jdk</image> </from> <to> <image>${docker.prefix}foo/${project.name}:${project.version}</image> </to> <container> <environment> <TZ>Asia/Shanghai</TZ> </environment> <jvmFlags> <jvmFlag>-Xms128m</jvmFlag> </jvmFlags> <mainClass>${project.main.class}</mainClass> <creationTime>USE_CURRENT_TIMESTAMP</creationTime> </container> </configuration> </plugin>

2013-02-21 · 1 min · 33 words · -

windows bat, 批处理获取当前时间

批处理获取当前时间 rem CODE BY t0nsha rem 关于提取date,time输出结果的一个批处理 rem “:” (冒号) 和"“波浪号必不可少! rem ““后的数字: 为正数表示舍弃输出结果的前几位;直接跟负数表示取到输出结果的后第几位。 rem “,“后的数字: 为正数表示取到输出结果的前第几位;为负数表示舍弃输出结果的后几位。 echo %date% echo %date:~4% ::下行表示舍弃前0位,取到第10位 (即取输出结果的前10位) echo %date:~0,10% echo %date:4,-5% pause echo %time% echo %time:-3% echo %time:~2,-3% pause echo %date:~4% %time:~0,-3% pause BTW 使用批处理产生日期 (时间) 文件、文件夹 帮别人整Sql server自动备份 发现无法使用网络映射驱动器作为备份文件存放路径 而本机磁盘空间实在是不够 于是决定在本机只备份最新2天数据 再写个批处理,做成系统调度 每周将备份数据复制到网络驱动器上存档 从网上搜到批处理产生日期文件的办法 下面是实现的比较好的 批处理文件: @echo off set aFile=bak-%DATE:~4,4%%DATE:~9,2%%DATE:~12,2% set bFile=bak-%TIME:~0,2%%TIME:~3,2%%TIME:~6,2% set cFile=bak-%DATE% echo Afile=%aFile% echo Bfile=%bFile% echo Cfile=%cFile% ...

2013-02-20 · 1 min · 121 words · -

udev

udev udev 是Linux kernel的设备管理器, 2012年4月,udev被合并至systemd。 https://linux.cn/article-13691-1.html https://www.jianshu.com/p/f9385d5703a7

2013-02-19 · 1 min · 7 words · -

shell map

shell map Map定义 在使用map时,需要先声明,否则结果可能与预期不同,array 可以不声明 方式1: declare -A myMap myMap["my03"]="03" 方式2: declare -A myMap=(["my01"]="01" ["my02"]="02") myMap["my03"]="03" myMap["my04"]="04" Map初始化: 与array类似,可以使用括号直接初始化,也可以通过添加的方式来初始化数据,与array不同的是,括号直接初始化时使用的为一个键值对,添加元素时,下标可以不是整数 myMap[“my03”]=“03” myMap[“my04”]=“04” 输出Map所有的key、value、长度: 复制代码 输出所有的key #若未使用declare声明map,则此处将输出0,与预期输出不符,此处输出语句格式比arry多了一个! echo ${!myMap[@]} #2)输出所有value #与array输出格式相同 echo ${myMap[@]} #3)输出map长度 #与array输出格式相同 echo ${#myMap[@]} 复制代码 Map遍历: 复制代码 #1)遍历,根据key找到对应的value for key in ${!myMap[*]};do echo $key echo ${myMap[$key]} done #2)遍历所有的key for key in ${!myMap[@]};do echo $key echo ${myMap[$key]} done #3)遍历所有的value for val in ${myMap[@]};do echo $val done 复制代码 Map测试: 复制代码 [root@cdh-143 shell-test]# more map-test.sh #!/bin/sh ...

2013-02-19 · 1 min · 176 words · -

PriorityBlockingQueue

PriorityBlockingQueue 这就是带优先级的无界阻塞队列,每次出队都返回优先级最高或者最低的元素(这里规则可以自己制定),内部是使用平衡二叉树实现的,遍历不保证有序; https://www.cnblogs.com/wyq1995/p/12289462.html

2013-02-19 · 1 min · 3 words · -

GDebi

GDebi GDebi is a tool that can install .deb packages. It is available with a graphical interface, but also has a command line option.

2013-02-18 · 1 min · 24 words · -

Regsvr32

Regsvr32 Regsvr32命令的作用是将动态链接库文件注册为注册表中的命令组成。WInXP系统的regsvr32.exe在windowssystem32文件夹下;2000系统的regsvr32.exe在winntsystem32文件夹下。 Regsvr 32命令是Windows中控件文件(如扩展名为DLL、OCX、CPL的文件)的注册和反注册工具。命令格式 Regsvr32 [/s] [/n] [/i[:cmdline]] dllname /u 卸载安装的控件,卸载服务器注册; /s 注册成功后不显示操作成功信息框; /i 调用DllInstall函数并把可选参数[cmdline]传给它,当使用/u时用来卸载DLL; /n 不调用DllRegisterServer,该参数必须和/i一起使用。 简单实例 要手工注册"E:\CPCW.dll",只需在"开始→运行"中键入"Regsvr32 E:\CPCW.dll",单击"确定"按钮后会弹出提示信息"DllRegisterServer in CPCW.dll succeeded",说明组件注册成功;如果要卸载此组件,在"开始→运行"中键入"Regsvr32 /u E:\CPCW.dll"即可。 格式: regsvr32 [/s] [/n] [/i[:cmdline]] DLLname 使用参数—解除服务器注册 使用参数[/s]—无声;不显示消息框 使用参数—调用DllInstall,给其传递一个可选[cmdline];跟/u参数一起使用时卸载DLL。 使用参数[/n]—不用调用DLLRegisterServer。这个参数必须跟/i一起使用。 实例1: IE无法打开新窗口 regsvr32 actxprxy.dll regsvr32 shdocvw.dll 重启后如果还不能解决 regsvr32 mshtml.dll regsvr32 urlmon.dll regsvr32 msjava.dll regsvr32 browseui.dll regsvr32 oleaut32.dll regsvr32 shell32.dll 实例2: IE无法保存HTML格式文件 regsvr32 inetcomm.dll 实例3: MSN无法登陆 regsvr32 softpub.dll 实例4: windows默认的文件关联混乱 regsvr32 /i shdocvw.dll regsvr32 /i shell.dll ...

2013-02-18 · 1 min · 139 words · -

OLAP, OLTP

OLAP, OLTP http://www.cnblogs.com/beyondstorm/archive/2006/08/12/475011.html OLAP和OLTP的区别(基础知识) 联机分析处理 (OLAP) 的概念最早是由关系数据库之父E.F.Codd于1993年提出的,他同时提出了关于OLAP的12条准则。OLAP的提出引起了很大的反响,OLAP作为一类产品同联机事务处理 (OLTP) 明显区分开来。 当今的数据处理大致可以分成两大类: 联机事务处理OLTP (on-line transaction processing) 、联机分析处理OLAP (On-Line Analytical Processing) 。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。下表列出了OLTP与OLAP之间的比较。 OLTP OLAP 用户 操作人员,低层管理人员 决策人员,高级管理人员 功能 日常操作处理 分析决策 DB 设计 面向应用 面向主题 数据 当前的, 最新的细节的, 二维的分立的 历史的, 聚集的, 多维的集成的, 统一的 存取 读/写数十条记录 读上百万条记录 工作单位 简单的事务 复杂的查询 用户数 上千个 上百个 DB 大小 100MB-GB 100GB-TB

2013-02-17 · 1 min · 52 words · -

迭代长度

迭代长度 http://space.itpub.net/13633641/viewspace-312630 很多教材上都有关于这个问题的解答。迭代长度通常建议为 2-6 周,这是一个经验数值。到底选择几周为一次迭代,这个问题其实不太难,因为你只有 1、2、3、4、5、6 这 6 个数字需要选择。 我们太极敏捷派的建议是这样的: 如何确定迭代长度,有这样几个关键点需要权衡。 第一,我们希望每次迭代开发,可以获得实质性的进展,完成足够的开发任务,所以对于普通项目 1 周的迭代长度就显得有点短,做不了几天的开发就要 close,不合算。 第二,迭代任务 (包括模块集成、系统测试、评审等等) 的完成,应该比较顺畅 (streamlined) 、从容或者适度紧张,没有非常紧迫、仓促的感觉。如果在某次迭代开发中,需要砍掉很多完成不了的任务,感到进度很紧张,那么很可能说明迭代的长度设置太短了,在下一轮的开发中应该增加迭代的长度。 第三,总体上我们希望迭代越短越好,它有个下限,短于这个下限就可能得不偿失。那么,迭代时间为什么不能过长?它的上限是多少呢?迭代的主要目的是为了及时获得各方面反馈,确认已开发的内容是正确和可靠的,从而减少风险,保证开发能够始终稳步地前进。显然迭代过长,很长时间不对已开发的系统部分进行验证、反馈,随之而累积的各种风险就可能增加。如果超过一个半月 (6 周) 以上,还都拿不出一些可以执行、验证和 demo 的软件程序,那么这样的项目开发显然不能说是高效的。 从 2 到 6 周,建议选择偶数 2、4、6 周作为迭代长度,排除奇数 3、5 周。执行周计划周总结和月计划月总结是国内很多企业比较普遍的做法,显然设置迭代长度为半个月、一个月或一个半月,就能与之相合拍,更自然和便于管理。设想,当您做月度总结的时候,只完成了 1 又 1/3 的迭代,会是什么感觉? 迭代长度通常还与整个项目的工期 (或复杂度、规模) 有关。如果项目的工期在 1 年以上,那么 1 个月或 1.5 个月的迭代长度就是比较合适的。假设 2 周就要完成一次迭代,持续干上一年,大家会不会感到太累、太频繁?如果整个项目工期小于 3 个月,那么 2 周迭代甚至 1 周迭代,就是非常合适的。对于进度这么紧的项目,可能每周都是非常宝贵的。 通常,张恂会向客户推荐采取 2 周或 4 周作为迭代长度的首选,3 周、5 周和 6 周作为备选,往往大项目、比较复杂的项目才会采用 6 周,6 周以上基本不考虑。2 周通常适合各方面很成熟的开发团队。如果一个传统瀑布团队,要尝试着转向迭代开发方式,从 4 周的迭代开始学习、积累经验,然后逐步缩短迭代长度,是比较稳妥的。 ...

2013-02-17 · 1 min · 86 words · -

敏捷开发之稳定迭代周期

敏捷开发之稳定迭代周期 http://www.blogjava.net/josson/archive/2011/01/31/341341.html **1、什么是iteration和release? ** iteration和release是两个不同的概念,但在敏捷实践活动中,我们往往认识的比较模糊,一个Iteration就是一次release,其实不然。那么,具体有什么区别和联系呢? **Iteration (迭代) **: 在固定的周期内,经过需求分析、设计、实现、测试等活动,完成计划的的业务需求,迭代结束提供一个可工作的产品。计划的业务需求,可能是一个完整的User Story,也可能是一个Story中的若干task。 Release(发布): 经过一个或若干个iteration后,完成计划中的所有User Story,经过测试后才release,最终真正交付给客户使用。 在我们的实践活动中,一个User Story所需的工作量超过我们的有效资源,无法安排在一个iteration内。我们就会想当然的会去延长迭代周期,增加有效资源以适应所需工作量。殊不知,这更象是形式上的迭代开发,无异于瀑布式项目开发过程。 2、建立固定的迭代周期,保持稳定的开发节奏 Scurm方法也非常强调稳定的迭代节奏,一个稳定的迭代节奏就如同项目的的心跳。Simon Baker描述说: “就像心脏有规律地跳动来保持身体运行,固定的迭代长度提供了一个恒量,有助于建立开发和交付的节奏。根据我的经验,节奏是帮助取得不变的步幅的重要因素” (2004) 。对于敏捷开发的团队而言,稳定的迭代节奏可以让产品保持更稳定的交付。 3、如何保持稳定的开发节奏? 当一个迭代期内可提供的有效资源无法实现一个User Story时,我们如何按排呢? 在 谈迭代周期控制的困惑中已谈到,这里不在细述。 4、如何选择适合自己团队的迭代周期? 一般需要考虑以下因素: 、整个项目周期长度 (完成计划的商业需求所需时间) 较短的迭代周期将会有以下一些好处: 更频繁的向客户展示/交付可用的软件;更频繁的度量开发进度;更频繁的取得反馈并改进;一般大的项目最好有多次(3次或以上)获取反馈、修正的机会,根据项目周期调整迭代周期长度。 、不确定性的多少 不确定性有多种形式,客户到底想要的是什么?小组的工作效率,时间?技术门槛等都不存在不确定性,不确定性越多,迭代就应该越短。 、获得反馈的难易程度 指小组获取反馈数量、频度和及时性,视所处的环境不同,选择合适的迭代长度; 、优先级要以多久保持不变 开发小组承诺在一次迭代中完成一组特定的功能,重要的是不要改变他们的目标方向,优先级不会被改变的时间长度是选择迭代长度时需要考虑的因素。 、迭代的系统开销 每次迭代的成本 (时间) ,如迭代中进行的完整回归测试。最佳迭代周期的目标之一就是减少或近似消除每次迭代的系统开销。如每次回归时间成本很高,那决定周期长度时更倾向于长一些。 、团队成员的紧迫感 Niels Malotaux指出: “只要项目的结束日期还在遥远的将来,我们就不会感到任何压力,并从容不迫的工作。当结束日期逼近时,我们才会开始更努力的工作”。意思指项目开始大家比较放松,而越临近结束,工作越忙压力越大。因此,选择一个合适的迭代周期长度,让团队成员在整个迭代过程中感受到的压力更平均,不是给团队更多的压力,而是压力总量平均分布在迭代过程中。 每个团队根据所在环境和条件确定一个合适的迭代长度,一般建议2~4周。在我们的实践中,以2周一次迭代的频率,保持相对稳定的开发和交付的节奏。

2013-02-17 · 1 min · 47 words · -

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 · -