javascript webUI组件推荐《artDialog》

artDialog是什么?

artDialog是一个精巧的web对话框组件,压缩后只有十多KB,并且不依赖其他框架。

她有什么特点?

1.能够自适应内容

artDialog的特殊布局结构能够原生的适应内容变化,你不必像以前一样去考虑消息内容大小,她能自己去适应内容。当然她仍然可以接受一个固定高宽的参数,她能够防止内容溢出或截断,同时也不会产生难看的滚动条,甚至能够自动处理文本对齐方式。

2.优雅灵活的接口
她提供了丰富的可选配置参数,同时每次调用还会返回内部控制接口,控制接口支持链式操作。

3.精心设计的UI机制
artDialog采用九宫格的XHTML结构,CSS类钩子比较丰富,可以定制类似桌面软件般精致的皮肤。她支持多皮肤共存,这些皮肤的背景图片在页面载入时就会被缓存好,调用时几乎感觉不到延时。

4.细致的用户体验
她支持Esc快捷键关闭;如果对话框内容有输入控件她将支持Ctrl+Enter提交;智能给按钮添加焦点;小对话框自动采用黄金比例垂直居中;超过指定面积大小的对话框拖动自动采用替身挪动;自动计算边界防止超出可操作范围;……

5.跨浏览器兼容
兼容:IE6+、Firefox、Chrome、Safari、Opera,浏览器版本越高体验越好。并且IE6下也能支持现代浏览器的静止定位(fixed),支持覆盖下拉控件。

演示地址
http://www.planeart.cn/demo/artDialog/

项目下载地址
http://code.google.com/p/artdialog/downloads/list

主要应用案例有哪些?

PHPCMS、CMSEASY


阅读全文 »

11月18

敏捷开发管理体会与心得

一、真正理解什么是敏捷开发

整个技术团队先充分学习与理解什么是敏捷开发,不深刻理解敏捷开发,很难真正与公司实际结合,无法真正进行敏捷开发。

二、按实际情况部署合适的模式

根据公司和团队的实际情况,选择合理合适的敏捷开发管理模式。

三、转变项目管理人员的传统意识

上到下的关系要及时转换成双向沟通。

四、工具要合理

根据拟定好的模式选择相应更贴近的工具,从而提高效率,保证敏捷开发的流畅性。

五、公司其它部门或其它团队的理解与配合

敏捷开发与传统开发方式有很大不同,对于时间性和工作量均有较大的不同,所以各部门或不同的团队协作必须有充足的事先沟通。

六、不能照搬别人的模式

没有直接搬过来就可以用的敏捷模式,要适合自身的模式,肯定要做一些相应的调整的。

阅读全文 »

11月17

Discuz!X2 数据字典(已经更新)

目前还在整理,内部交流版,待整理后共享(已经更新,见下面)。

抢先预览一下:

-----------------------------------------------------------------------------

Discuz!X2 数据字典



--------------------------------更新分割线------------------------------------------

↓↓↓CHM格式下载↓↓↓(by Frears

来自 蓝色理想 http://bbs.blueidea.com/thread-3032720-1-2.html


阅读全文 »

04月07

DiscuzX1.5和X2的function_core.php有哪些差别?

1.updatesession 增加了cookie值ulastactivity优化

2.调整了getuserbyuid,去除了两处条left join,不在调用common_member_count和common_member_status的内容

3.优化了getuserprofile中$data内容获取,避开了不同状态下不必要的查询

4.增加了dintval()取整函数

5.dheader函数增加手机判断

6.增加了手机检测函数checkmobile()

7.lang()增加了手机语言处理,优化了插件语言脚本的加载(设置为了缓存方式),增加{_G/xxx/xxx/xxx/xxx}语言键值

8.checktplrefresh()增加了$targettplname

9.template()增加手机处理,在mobile/目录

10.loadcache()去除了$_G['perm']

11.cachedata()、save_syscache()优化了$isfilecache判断

12.优化了dgmdate()

13.优化block_get(),增加memory('get'...处理

14.增加dstrlen()长度检测函数

15.aidencode()增加$tid参数

16.调整getforumimg()中$key值的加密方式authcode()调整为md5()

17.rewritedata()、rewriteoutput()增加了home_blog、forum_archiver的重写,去除了all_script

18.增加了mobilereplace()、mobileoutput()

19.调整了output()

20.增加了output_replace(),为了配合调整output()、output_ajax()等

21.runhooks()增加了手机处理,增加了HOOKTYPE常量的定义

22.hookscript()中增加home的判断处理,HOOKTYPE来替代hookscript

23.hookscriptoutput()的优化和增加QQ浏览器的相关处理

24.pluginmodule()中的showmessage提示调整

25.checklowerlimit()代码结构简化调整,增加_checklowerlimit()函数

26.updatemembercount()代码结构简化调整,增加_updatemembercount()函数

27.checkusergroup()中的include_once调整为require_once

28.debuginfo()的queries次数调整

29.adshow()中的hookscript优化

30.showmessage()调整增加libfile('function/message')和dshowmessage()

31.submitcheck()增加QQ浏览器相关

32.multi()分页中增加手机翻页处理

33.censor()增加用户组控制url相关处理

34.censormod()增加url处理

35.runlog()调整writelog()来简化代码结构

36.dreferer()增加处理“'&”

37.ftpcmd()增加错误捕获

38.优化diconv转换函数,在能用内置函数的情况就不是用自定义的libfile('class/chinese')

39.增加了getstatus、setstatus函数

40.优化notification_add()函数

41.增加了manage_addnotify()函数

42.sendpm()增加返回操作

43.g_icon()进行了样式调整

44.getposttablebytid()增加了支持$tids (array())

45.调整getposttable(),去除getposttableid()、getcountofposts()、getfieldsofposts()、getallwithposts()

46.优化了insertpost()、updatepost()

47.getcount()进行了结果intval

48.forumperm()优化了认证项,不局限于只有6个认证项

49.manyoulog()进行了状态检测

50.增加了useractionlog()用户动作日志

51.增加了getuseraction()

52.增加了get_url_list() url处理,增加了iswhitelist()、checkurl()

53.增加了update_template_block()

54.对http_build_query函数进行判断处理,无则定义

55.增加getrelatedlink()

56.增加了connect_valid()、connect_get_sig()、connect_get_access_token()QQ互联函数

57.增加getattachtablebyaid()、getattachtableid()、getattachtablebytid()、getattachtablebypid()、getattachnewaid()附件相关函数

58.增加SEO相关函数get_seosetting()

59.增加了strreplace_strip_split()、get_title_page()、getimgthumbname()、updatemoderate()、userappprompt()


阅读全文 »

04月02

简化的if结构

php的if结构为:

if($condition){

     //do something...

}

其实我们可以简化她:

<?php
$needle = false;
!$needle && _e();
function _e(){
echo('needle is false');
}
?>

阅读全文 »

03月31

如何检测是否是蜘蛛访问呢?

我们可以根据useragent来判断。预先定义好蜘蛛spider的useragent和用户浏览器的useragent,然后进行匹配检测。 

function checkrobot($useragent = '') {

static $_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';
static $_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';


$useragent = empty($useragent) ? $_SERVER['HTTP_USER_AGENT'] : $useragent;


if(!strexists($useragent, 'http://') && preg_match("/($_browsers)/i", $useragent)) {
return false;
} elseif(preg_match("/($_spiders)/i", $useragent)) {
return true;
} else {
return false;
}
}

阅读全文 »

03月31

XSS跨站脚本攻击检测

当$_SERVER['REQUEST_METHOD'] 为 'GET' 和$_SERVER['REQUEST_URI']不为空的时候,我们应该进行XSS检测。


function xss_check() {

$tmp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
if(strpos($tmp, '<') !== false || strpos($tmp, '"') !== false || strpos($tmp,'CONTENT-TRANSFER-ENCODING')!==false) {
exit('request_tainting');
}
return true;
}

阅读全文 »

03月31

如何获取客户端的IP地址?

如何获取客户端的ip呢?

下段代码比较经典!

function get_client_ip() {

$ip = $_SERVER['REMOTE_ADDR'];
if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
foreach ($matches[0] AS $xip) {
if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
$ip = $xip;
break;
}
}
}
return $ip;
}

阅读全文 »

03月31

微探讨·软件项目管理中十个误区

软件项目管理中十个误区:


1.需求分析阶段只和客户的只达成基本轮廓.

2.需求可以持续改变.

3.编码阶段是核心.

4.写出所有程序的伪码.

5.测试过多使用"黑盒法".

6.技术部门全权负责.

7.开发进度滞后情况下聘更多程序员.

8.技术骨干应为项目经理.

9.开发进度分开关注.

10.通过加薪来留住核心程序员.



--------------------------应对-----------------------------------

软件项目管理中误区一:需求分析阶段只和客户的只达成基本轮廓.

[分析:十分危险.多数软件项目失败的最大的因素是需求阶段对问题的描述不细致,导致预算超出或者进度缓慢.][对策:需求分析阶段,双方必须全面细致地讨论项目的应用背景/功能/性能/界面/软件接口/评估标准等,还需要建立直通沟通渠道等等.]

--------------------------备注-----------------------------------

以上内容来自aiens的新浪微博,误区分析暂时只说到了第一点,接下来,我会在博客里面剩下的九点都分析一下。


阅读全文 »

03月27

重组MD5值函数

<?php

/**
 * 重组md5值
 * @date 2011-03-08
 * @author Aiens
 */
function makeKey($params=array()){
$str = '';
foreach($params as $val){
if(isset($val)){
$str .= $val;
}
}
$needlestr = 'a`b`c`d`e`f`0`1`2`3`4`5`6`7`8`9';
$keystr = 'c`X`y`7`8`L`Q`0`A`a`2`1`P`n`m`w';
$strarr = explode('`',$needlestr);
$keyarr = explode('`',$keystr);
$md5str = md5($str.'blueidea');
$key = '';
for($i=0;$i<32;$i++){
$md5word = substr($md5str,$i,1);
foreach($strarr as $k=>$val){
if($md5word==$val){
foreach($keyarr as $k1=>$val1){
if($k==$k1){
$key .= $val1;
}
}
}
}
}
return $key;
}

?>


简单使用示例:

<?php

$params = ...

阅读全文 »

03月27

HTTP请求类 CURL

<?php
/**
 * aCURL HTTP请求类
 * @date 2011-03-08
 * @author shellbill
 */
 
class aCurl{
private $ch = null; //curl句柄
private $info = array(); //curl执行过程相关信息
//curl setopt信息
private $setopt = array(
   //访问端口
   'port'=>80,
//客户端 USERAGENT,为空则使用用户的浏览器
'userAgent'=>'',
//超时时间
'timeOut'=>30,
//是否使用 COOKIE 
'useCookie'=>true,
//是否支持SSL
'ssl'=>false,
//\是否支持 gzip压缩
'gzip'=>true
   );

/**
* 构造函数
*
* @param array $setopt
*/
public function __construct($setopt=array()){

阅读全文 »

03月27

契约式编程技术

什么是契约式编程呢?

简单说,契约式编程就是在编写类之前,先声明好接口的一种编程方式。

契约式编程有什么好处?

这样的方式能够保证良好的封装线。

打个比方吧。

部署和使用契约式编程,我们在创建应用之前就定义出将要实现的功能,就好比修建楼房之前先画好图纸一样。

契约式编程应用到什么情况?

一般的,团队开发经常会使用契约式编程技术,这样会大大改善流程。我们在实现类之前,定义好类之间的交互行为,是团队成员能够明确对象必须要有什么行为,然手实现就比较快捷,无需瞻前顾后了。接口被完整实现后,测试类只要使用定义在接口上的规则进行就可以了。

我会在以后贴出相关示例。一般都用在程序插件的背景下。

阅读全文 »

02月16