jQuery MiniUI - 快速开发WebUI

[不指定 2012/11/30 10:58 | by ipaddr ]
jQuery MiniUI - 快速开发WebUI。


它能缩短开发时间,减少代码量,使开发者更专注于业务和服务端,轻松实现界面开发,带来绝佳的用户体验。
使用MiniUI,开发者可以快速创建Ajax无刷新、B/S快速录入数据、CRUD、Master-Detail、菜单工具栏、弹出面板、布局导航、数据验证、分页表格、树、树形表格等典型WEB应用系统界面。
产品定位:

快速开发WEB界面
使用效果:

缩短开发时间,减少代码量,提升用户体验
技术亮点:

快速开发:使用Html配置界面,减少80%界面代码量。
易学易用:简单的API设计,可以独立、组合使用控件。
性能优化:内置数据懒加载、低内存开销、快速界面布局等机制。
丰富控件:包含表格、树、数据验证、布局导航等超过50个控件。
超强表格:提供锁定列、多表头、分页排序、行过滤、数据汇总、单元格编辑、详细行、Excel导出等功能。
第三方兼容:与ExtJS、jQuery、YUI、Dojo等任意第三方控件无缝集成。
浏览器兼容:支持IE6+、FireFox、Chrome等。
跨平台支持:支持Java、.NET、PHP等。
支持服务:

5*8与7*24的电话支持服务、电子邮件服务、即时通讯服务、产品培训、现场疑难解答、按人月的项目现场开发服务、新功能定制研发服务、源代码讲解研发服务等。

CMAKE的使用

[不指定 2012/07/21 13:04 | by ipaddr ]

一、基本使用
安装:下载二进制包后可直接解压使用

从源码安装则执行命令:./bootstrap; make; make install——尝试执行bootstrap失败

使用:cmake dir_path,生成工程文件或makefile文件

二、概念
out-of-source build,与in-source build相对,即将编译输出文件与源文件放到不同目录中;

三、基本结构
1,依赖CMakeLists.txt文件,项目主目标一个,主目录中可指定包含的子目录;

2,在项目CMakeLists.txt中使用project指定项目名称,add_subdirectory添加子目录

3,子目录CMakeLists.txt将从父目录CMakeLists.txt继承设置(TBD,待检验)

四、语法
1.  #注释

2.  变量:使用set命令显式定义及赋值,在非if语句中,使用${}引用,if中直接使用变量名引用;后续的set命令会清理变量原来的值;

3.  command (args ...)  #命令不分大小写,参数使用空格分隔,使用双引号引起参数中空格

4.  set(var a;b;c) <=> set(var a b c)  #定义变量var并赋值为a;b;c这样一个string list

5.  Add_executable(${var}) <=> Add_executable(a b c)   #变量使用${xxx}引用

6.  条件语句:

if(var) #var 非empty 0 N No OFF FALSE... #非运算使用NOT
       …
else()/elseif() … endif(var)

7.  循环语句

Set(VAR a b c)
Foreach(f ${VAR})       …Endforeach(f)

8.  循环语句

WHILE() … ENDWHILE()

五、内部变量
CMAKE_C_COMPILER:指定C编译器

CMAKE_CXX_COMPILER:

CMAKE_C_FLAGS:编译C文件时的选项,如-g;也可以通过add_definitions添加编译选项

EXECUTABLE_OUTPUT_PATH:可执行文件的存放路径

LIBRARY_OUTPUT_PATH:库文件路径

CMAKE_BUILD_TYPE::build 类型(Debug, Release, ...),CMAKE_BUILD_TYPE=Debug

BUILD_SHARED_LIBS:Switch between shared and static libraries

内置变量的使用:

>> 在CMakeLists.txt中指定,使用set

>> cmake命令中使用,如cmake -DBUILD_SHARED_LIBS=OFF

六、命令
project (HELLO)   #指定项目名称,生成的VC项目的名称;

>>使用${HELLO_SOURCE_DIR}表示项目根目录

include_directories:指定头文件的搜索路径,相当于指定gcc的-I参数

>> include_directories (${HELLO_SOURCE_DIR}/Hello)  #增加Hello为include目录

link_directories:动态链接库或静态链接库的搜索路径,相当于gcc的-L参数

>> link_directories (${HELLO_BINARY_DIR}/Hello)     #增加Hello为link目录

add_subdirectory:包含子目录

>> add_subdirectory (Hello)

add_executable:编译可执行程序,指定编译,好像也可以添加.o文件

>> add_executable (helloDemo demo.cxx demo_b.cxx)   #将cxx编译成可执行文件——

add_definitions:添加编译参数

>> add_definitions(-DDEBUG)将在gcc命令行添加DEBUG宏定义;

>> add_definitions( “-Wall -ansi –pedantic –g”)

target_link_libraries:添加链接库,相同于指定-l参数

>> target_link_libraries(demo Hello) #将可执行文件与Hello连接成最终文件demo

add_library:

>> add_library(Hello hello.cxx)  #将hello.cxx编译成静态库如libHello.a

add_custom_target:

message( status|fatal_error, “message”):

set_target_properties( ... ): lots of properties... OUTPUT_NAME, VERSION, ....

link_libraries( lib1 lib2 ...): All targets link with the same set of libs

七、说明
1,CMAKE生成的makefile能够处理好.h文件更改时只编译需要的cpp文件;

八、FAQ
1)怎样获得一个目录下的所有源文件
>> aux_source_directory(<dir> <variable>)

>> 将dir中所有源文件(不包括头文件)保存到变量variable中,然后可以add_executable (ss7gw ${variable})这样使用。

2)怎样指定项目编译目标
>>  project命令指定

3)怎样添加动态库和静态库
>> target_link_libraries命令添加即可

4)怎样在执行CMAKE时打印消息
>> message([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)

>> 注意大小写

5)怎样指定头文件与库文件路径
>> include_directories与link_directories

>>可以多次调用以设置多个路径

>> link_directories仅对其后面的targets起作用

6)怎样区分debug、release版本
>>建立debug/release两目录,分别在其中执行cmake -DCMAKE_BUILD_TYPE=Debug(或Release),需要编译不同版本时进入不同目录执行make即可;

Debug版会使用参数-g;Release版使用-O3 –DNDEBUG

>> 另一种设置方法——例如DEBUG版设置编译参数DDEBUG

IF(DEBUG_mode)

    add_definitions(-DDEBUG)

ENDIF()

在执行cmake时增加参数即可,例如cmake -D DEBUG_mode=ON

7)怎样设置条件编译
例如debug版设置编译选项DEBUG,并且更改不应改变CMakelist.txt

>> 使用option command,eg:

option(DEBUG_mode "ON for debug or OFF for release" ON)

IF(DEBUG_mode)

    add_definitions(-DDEBUG)

ENDIF()

>> 使其生效的方法:首先cmake生成makefile,然后make edit_cache编辑编译选项;Linux下会打开一个文本框,可以更改,该完后再make生成目标文件——emacs不支持make edit_cache;

>> 局限:这种方法不能直接设置生成的makefile,而是必须使用命令在make前设置参数;对于debug、release版本,相当于需要两个目录,分别先cmake一次,然后分别make edit_cache一次;

>> 期望的效果:在执行cmake时直接通过参数指定一个开关项,生成相应的makefile——可以这样做,例如cmake –DDEBUGVERSION=ON

8)怎样添加编译宏定义
>> 使用add_definitions命令,见命令部分说明

9)怎样添加编译依赖项
用于确保编译目标项目前依赖项必须先构建好

>>add_dependencies

10)怎样指定目标文件目录
>> 建立一个新的目录,在该目录中执行cmake生成Makefile文件,这样编译结果会保存在该目录——类似

>> SET_TARGET_PROPERTIES(ss7gw PROPERTIES

                      RUNTIME_OUTPUT_DIRECTORY "${BIN_DIR}")

11)很多文件夹,难道需要把每个文件夹编译成一个库文件?
>> 可以不在子目录中使用CMakeList.txt,直接在上层目录中指定子目录

12)怎样设定依赖的cmake版本
>>cmake_minimum_required(VERSION 2.6)

13)相对路径怎么指定
>> ${projectname_SOURCE_DIR}表示根源文件目录,${ projectname _BINARY_DIR}表示根二进制文件目录?

14)怎样设置编译中间文件的目录
>> TBD

15)怎样在IF语句中使用字串或数字比较
>>数字比较LESS、GREATER、EQUAL,字串比STRLESS、STRGREATER、STREQUAL,

>> Eg:

set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)

set(AAA abc)

IF(AAA STREQUAL abc)

    message(STATUS "true")   #应该打印true

ENDIF()

16)更改h文件时是否只编译必须的cpp文件
>> 是

17)机器上安装了VC7和VC8,CMAKE会自动搜索编译器,但是怎样指定某个版本?
>> TBD

18)怎样根据OS指定编译选项
>> IF( APPLE ); IF( UNIX ); IF( WIN32 )

19)能否自动执行某些编译前、后命令?
>> 可以,TBD

20)怎样打印make的输出
make VERBOSE=1

参考文献:
[1] CMake_Tutorial.pdf
[2] CMake使用总结,http://blog.csdn.net/keensword007/archive/2008/07/16/2663235.aspx
[3] http://www.cmake.org/
[4] 安装包中文档
[5] Andrej Cedilnik,HOWTO: Cross-Platform Software Development Using CMake,October, 2003
[6] Cjacker,CMake实践.PDF

在线代码高亮 CodeMirror

[不指定 2012/05/29 20:17 | by ipaddr ]

又一款“Online Source  Editor”,基于Javascript,短小精悍,实时在线代码高亮显示,他不是某个富文本编辑器的附属产品,他是许多大名鼎鼎的在线代码编辑器的基础库。

本站的在线LESS编译器Markdown编辑器就是采用这个组件开发。

可以看出,CodeMirror的作者是一个十分向往自由的人。但他的CodeMirror绝对不简单,看看下面这份清单:

上述的这些在线代码编辑器都是基于CodeMirror的,是不是感到惊讶,里面有你熟悉的JS Library。

CodeMirror本身的定位也很明确,短小精悍,但代码质量很高,在Google  Group的群里面,人们热烈的进行着用CodeMirror做各式各样改造的讨论,可见对他的欢迎。以下有各种不同语言的Demo演示:

假如你有项目需要在线代码编辑,还等什么?CodeMirror,绝对是你最好的选择。

为了尊重作者对自由的向往,请在使用前认真阅读以下License,并严格尊重作者的声明:

https://github.com/marijnh/CodeMirror2/blob/master/LICENSE

也谈铁路订票系统的优化

[不指定 2012/01/17 12:10 | by ipaddr ]

近来诸多牛人在讨论12306.cn网站的优化,做为一名电商网站的技术人员,以及多次在12306.cn网站购票成功的IT人士,也参与大致分析一下。

网上传播较广的优化文章主要有两篇:
1. 云风同学设计的排队系统:  http://blog.codingnow.com/2012/01/ticket_queue.html
没细看,个人觉得这系统意义不大,解决不了关键问题,再牛B的排队系统,队伍排得再漂亮,没人插队,没人攻击,用户登录后,你提醒他前面还有8亿人在等待,再过2小时后来试试运气,照样骂声一片。当然适当运用队列系统来缓解后端压力,避免雪崩,也是可以参考的。(比如现在的12306,后端处理不过来,直接拒绝登录,让你在门外排队)

2. 陈皓同学的整站性能分析: http://www.udpwork.com/item/6708.html
对业务场景的分析很到位,12306.cn网站,与新闻门户,IM聊天工具,网游,微博业务完全不一样;根据CAP理论,后者由于对数据一致性要求不是很高,或者没有集中的数据资源,所以对数据做分区和平行扩展是容易很多很多的。另外,此文的结论也高度赞同。

这类电商网站具有很强的事务性,对数据一致性要求极高,不可能同一个座位卖给两个人,也不可能卖得超载,否则非在车上打起来不可。订单逻辑比淘宝之类的还要复杂一些,因为还有一个分配座位这个逻辑。

而且还有一个极其变态的规则:票是稀缺资源,不可能人手一张,只能靠抢;这就直接导致大家在放票的那段时间,全部登录到系统抢票,注定这类系统容易雪崩,系统设计时一定要考虑极端情况,在达到性能瓶颈时必须快速的丢掉一些用户请求,保证系统可用。

强事务的系统,数据层的分区设计和优化才是关键;
WEB层优化比较容易,js,css,image之类的使用常规的压缩、合并、客户端缓存、CDN分布,基本上没啥难度;
逻辑层也不复杂,不存在数据,可以很容易的平行扩展,但设计很关键;
数据层会是整个系统的性能瓶颈,因为最底层下订单时,必须会有锁表,可能在车次,或者是车箱级别锁表,下订单是串行的,这里没法并发。

以下简单讲一下核心业务逻辑(下订单)的一个优化思路。

主要有二个核心操作:
a. 查询车次
b. 下订单和分配座位

几个关键的数据:
1.库存表(余票信息)
2.订单表

数据库的优化:
1. 库存表
a. 数据按日期分区,因为前端入口是按日期来查询的,所以按日期分区是相当容易的。
b. 余票信息,分两张表:
     表A:  用来实时生成订单,这张表会锁表
     关键字段如下: 日期 | 车次 | 席别(坐,卧,无) | 余票数
     注意,这里同一个车次,将不同席别分成了多条记录,以避免单行锁表时,不影响其它席别的购票。可根据机器性能情况,按车次再进行数据分区。如果性能仍不能满足要求,可以再细分到车箱级别进行锁表。

     表B:  用于用户订票的第一个查询车次的页面,需要将表A的数据,定期同步过来,做些汇总给用户查询,这里的数据只读,并且可以复制N多份,数据量不大,可全内存化,以优化查询性能。
     关键字段如下:日期 | 车次 |坐余票数 |卧余票数| 无坐余票数
     注意,数据是旁路进程从表A同步过来的,非实时数据,同步粒度可以是秒级或分钟级,这地方没有实时数据的要求,因为这类系统库存信息变化太快,用户在第一个页面看到的库存,一定不等于下订单页面的库存。

2. 订单表

分两张表,分别为实时订单,以及取票订单表
     实时订单表:在下订单页面,只存在写操作,性能问题不大
     关键字段:日期 |证件号|车次 | 席别 | 数量(1)| 所属用户 | 其它信息
     注意:这里没有座位号信息,下订单时,不需要分配座位号


     取票订单表:用户支付成功后,由一个旁路进程(位置分配进程),将实时订单表的数据,按坐位分配规则,写入到这张表。为便于取票,可以按证件号将数据进行分区。
     关键字段: 日期 |证件号|车次 |席别 | 座位号

业务逻辑优化:

根据上面的表设计,基本可以看出业务如何实现了:
1. 查询车次页面:读余票B表,只读,可复制N份,平行扩展。
2. 下订单:根据用户请求,对余票A表进行锁表,行级锁,读出余票数,判断是否有余票,有的话,余票数减1,订票成功,写实时订单表。这地方千万不要去分配座位
3. 用户支付
4. 支付成功后,通知用户订票成功,后端进程再去分配座位。分配座位实时性要求不高,可以几小时后完成,发邮件或短信通知用户都OK。
5. 除此之外,以上逻辑没有考虑单个证件订多张票的问题,这个可以将订单A表的非实时数据,多复制几份进行查询。

经过以上优化,性能应该有很大提升,数据层也有了很大的平行扩展的能力了。

总结一下:

A.  经过以上调整,性能会有较大提升,但肯定还会有骂声,因为核心问题是票不够抢,假设10分钟内所有票都卖完了,估计没抢到的会骂娘,民工兄弟也会骂娘。
B.  不管骂声多大,铁老大开通网站卖票,并承诺不断改进,这绝对是一个进步
C.  核心问题是运力不足,如果车次能增加一倍的话,估计啥问题都解决了,也没人抢票了。(是车次增加一倍,不是铁轨增加一倍,要加强调度能力了)
D. 再深层点的原因,是地区发展不平衡导致,如果大家都在离家100公里内的地方工作,没必要这么折腾了。


http://code.google.com/p/fqueue/

FQueue是一个高性能、基于磁盘持久存储的队列消息系统。兼容memcached协议,能用memcached的语言都可以良好的与它通信。 FQueue为你提供一个不需要特别优化,高性能的一个消息系统。

特性

  • 基于磁盘持久化存储。
  • 支持memcached协议。
  • 支持多队列,密码验证功能。
  • 高性能,能达到数十万qps。
  • 低内存消耗。100-300M内存即可工作得很好。
  • 高效率IO读写算法,IO效率高。
  • 纯JAVA代码。支持进程内JVM级别的直接调用。
  • 在不需要强顺序的场景下,支持多机负载均衡。

不支持

  • 不支持topic方式的订阅功能。
  • 不支持主从复制。

POCO C++ Libraries

[不指定 2011/12/30 22:45 | by ipaddr ]
Modern, powerful open source C++ class libraries and frameworks for building network- and internet-based applications that run on desktop, server and embedded systems.

写JAVA程序时用到了在一个构造函数里调用另一个构造函数的方法。在JAVA里的使用方法是:this(参数...)。当时脑子里冒出一个问题:在C++里构造函数如何调用另构造函数?因此本人写了如下一段程序来看测试:

#include<iostream>
using namespace std;

class A{
    public:
        int a;
    public:
    A(int _a)  {
        a = _a;
    }
    A()  {
        A(11);
    }
};
int main(int argc,char* argv[])
{
    A aa;
    cout<<aa.a<<endl;
    return 0;
}

该程序的运行结果让我傻眼了,结果输出a的值不确定。为什么在默认构造函数中调用另一个构造函数确没有改变a的值呢???后来才明白,其实A(11)是调用另一构造函数并产生一临时变量,而不是去用另一构造函数去构造默认构造函数。
1)在c++里,由于构造函数允许有默认参数,使得这种构造函数调用构造函数来重用代码的需求大为减少。

2)如果仅仅为了一个构造函数重用另一个构造函数的代码,那么完全可以把构造函数中的公共部分抽取出来定义一个成员函数(推荐为private),然后在每个需要这个代码的构造函数中调用该函数即可。

3)偶尔我们还是希望在类的构造函数里调用另一个构造函数,可以按下面方式做:

在构造函数里调用另一个构造函数的关键是让第二个构造函数在第一次分配好的内存上执行,而不是分配新的内存,这个可以用标准库的placement new做到。
最近在CDT中发现一些include提示“Unresolved inclusion“,但编译正常,经网上搜索可按以下方法修复:
打开 Windows-->Preferences-->C/C++-->Build-->Environment增加Environment variables to set

及点Add添加:

Name: C_INCLUDE_PATH

Value: /usr/include:/usr/include/i386-linux-gnu


Name: CPLUS_INCLUDE_PATH

Value: /usr/include/c++/4.6  (如gcc版本不同,需改为正确的路径)

重启CDT后问题解决。

birdeye 绘制拓扑关系图

[不指定 2011/09/30 11:48 | by ipaddr ]

BirdEye是一个开源的Adobe Flex图表制作组件。用于创建多维数据分析可视化界面。

birdeye 可以绘制 拓扑图,关系图,流程图,星空图,地图,饼图 等等..

birdeye 项目地址:http://code.google.com/p/birdeye/

birdeye 源码下载:http://code.google.com/p/birdeye/source/checkout  需要用SVN.

birdeye Demo:http://birdeye.googlecode.com/svn/branches/ng/examples/demo/BirdEyeExplorer.html

birdeye  svn源码地址:

svn checkout http://birdeye.googlecode.com/svn/trunk/ birdeye-read-only

作为一个Web开发人员,有时候也需要关注一下你的网站在移动设备上的表现,或者需要通过移动设备来管理网站。下面为你推荐7款免费的Android应用,有助于你更好的工作。

1.Firefox 4 Beta Mobile

2.AndFTP

AndFTP是Android手机上的支持FTP,SFTP,SCP,FTPS的客户端软件,可管理多个FTP服务器,自带文件浏览器和FTP文件浏览器,提供下载和上传的功能,可对文件进行重命名、删除、复制以及权限设置、创建目录等操作。

3.Android CodePad

Android CodePad是一个简单的源码浏览器,支持语法高亮显示,支持所有类C、类Bash和类XML的语言的语法高亮,可自动根据文件来选择不同的语法。

4.Devcheats

该软件为开发者提供了在手机上直接浏览各种开发工具的api手册,包括:php, python, ruby on rails, jquery, css, seo, apache, regular expressions, svn, bash, c++, drupal, gcc, gdb, html5, javascript, microformats, mysql, postgreesql, unix, wordpress.

5.CSS Reference

这是一个用来学习CSS所有的属性、包括语言、示例以及浏览器限制说明,提供CSS1和CSS2的属性列表,同时还包含了可直接浏览效果的例子:border-style, cursor, font-style, font-variant, font-weight, text-decoration and text-transform等属性.

6.W3C Cheatsheet

W3C Cheatsheet提供快速访问HTML5的有用信息。

7.Eval Your Java Script

该工具可让你测试JavaScript的执行情况,在编辑框中输入JavaScript代码,然后运行来获取结果。不过这工具我相信用起来非常费劲,在手机上输入JavaScript代码?别逗了!

原文出处:开源中国社区

分页: 2/13 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]