Pages (21) « Prev 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Next »

网站类产品开发流程

1、产品制作人,写产品计划书。

2、用户体验研究员,作调查分析。

3、信息建构师,设计产品结构。

4、互动设计师,作出互动流程。

5、视觉设计师和用户界面设计师,作出页面视觉设计。

6、前台工程师,前台开发。

7、后台工程师,后台开发。

8、用户体验研究员,做用户测试确保质量。

我知道网站开发行业在国内多数企业中是没有一个科学的管理体系,甚至没有一个明确的开发流程。

他们一般只走了后四步,我觉得以上方法比较科学和可行。

Flash "Next" Sneak Peek

audio Click Here to Show/Hide Media
http://www.youtube.com/v/vqMI480D668&rel=1

令人尖声高叫的 Flash10 骨骼绑定及3D引擎

MYSQL limit的优化

MYSQL的优化是非常重要的。其他最常用也最需要优化的就是limit。mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。

同样是取10条数据

select * from visit limit 10000,10

select * from visit limit 0,10

就不是一个数量级别的。

  网上也很多关于limit的五条优化准则,都是翻译自mysql手册,虽然正确但不实用。今天发现一篇文章写了些关于limit优化的,很不错。原文地址:http://www.zhenhua.org/article.asp?id=200

  文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行测试。(测试环境win2033+p4双核(3GHZ) +4G内存 mysql 5.0.19)

1、offset比较小的时候。

select * from yanxue8_visit limit 10,10

多次运行,时间保持在0.0004-0.0005之间

 Select * From yanxue8_visit Where vid >=(

Select vid From yanxue8_visit Order By vid limit 10,1

) limit 10

多次运行,时间保持在0.0005-0.0006之间,主要是0.0006

结论:偏移offset较小的时候,直接使用limit较优。这个显然是子查询的原因。

2、offset大的时候。

select * from yanxue8_visit limit 10000,10

多次运行,时间保持在0.0187左右

Select * From yanxue8_visit Where vid >=(

Select vid From yanxue8_visit Order By vid limit 10000,1

) limit 10

多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。

[转]Web才是老大!

《2007年Web开发技术预言》是一篇难得的好新闻。仔细读读这篇文章,并且搞清楚人家在说什么,我看比忙着去追问吴莹莹同学加盟的公司够不够大有意义得多。这篇文章里赞美聚合技术的时候提到了语义Web,点了一下微格式的名,还把FeedMesh也捅出来吓人。前面告诉我们W3C标准技术一路飘红,XP潜力无限,最后又告诉我们说AJAX实在火,这哪里是预测,简直是roadmap!实在是很有教益。有心人简直就可以按图索骥了。所以,尽管我认为文章中夸大PHP、不提REST、RIA的行为近乎恶劣,但是总的来说,还是难得的好东西。

有一句话是这么说的,是IT发明了Web,现在Web反过来要吞掉IT了。说实话,现在说这个还有点早,一大票人要跳出来骂街的。但是我想按照这个趋势发展下去,再过上几年,没人敢怀疑这句话。你看看现在的IT,根本就是Web在驱动。Web说要开放,大家纷纷开放;Web说要敏捷,大家纷纷敏捷;Web说数据要可理解,XML、RSS、Microformat先后亮相;Web说服务要整合,SOAP、REST前赴后继。Web一路绝尘,整个IT都在追。跟的慢了,说不定哪天Web回头来就把你吃了。所以问问自己,是不是还在搞封闭体系里的重量级的企业应用开发?是不是真的认为“大型的、复杂的、专业的、mission critical”的应用能养你一辈子?三思吧。

还得发一两句牢骚。互联网对于中国的意义比对美国欧洲重要得多——人家是先有了现代社会,再往上面加一个互联网,而我们是要靠互联网进入现代社会。所以,要照理说,咱们中国Web产业应该不比外国落后太多,往远了说,一定得超过他们才行。但是看看我们技术社区里的讨论,好像就没有这篇文章这么高的视点(当然这篇文章里也有一些不着四六的东西)。大家好像还是热衷于讨论哪个语言什么时候会成为“企业应用开发的主流”。依我看,用什么语言根本不重要,什么企业应用也根本不重要,重要的是Web!也许在昨天,Web还只不过是我们用来做企业应用的“手段之一”,但是在明天,企业应用将只不过是Web的一个side effect。所以说,Web肯定是老大。套用方世玉他母亲的话,行走江湖,最重要的就是要跟对老大。所以,选择什么语言和工具,我看就不用再争了,原则很简单,谁能帮助你更快捷更深入地理解Web,你就选谁。

IP的归属地问题探密,PHP的IP位置转换

首先、确定两点,第一,取IP,第二,取IP位置,第三,程序语言,php

这样我们就清晰多了。关键就是通过php取IP了。baidu一下可获得以下函数

$_SERVER["REMOTE_ADDR"];

其次,就是转换IP到位置。由IP到位置,只需要在某一个已经写定的数据表中查询即可。因此我们需要一个数据库,我使用的是纯真IP数据库。

如何能完成之间的转换呢?其实只是一个算法的问题,对于很多朋友来说,并非都是程序人员,很难自己去编写算法,所以本人就使用了一个窍门。

引子:做过discuz论坛的朋友都知道,论坛有统计IP并显示来路的功能,程序语言是php,本人查看后结论是,discuz的IP数据库是纯真IP,因此只需要把程序拿出来就可以了。

经过查找,发现IP转换位置程序如下:

function convertip($ip) {

    if(!preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/", $ip)) {

        return '';

    }

    if($fd = ','fopen('ipdata/wry.dat', 'rb')) {          //IP数据库位置

        $ip = explode('.', $ip);

        $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];

        $DataBegin = fread($fd, 4);

        $DataEnd = fread($fd, 4);

        $ipbegin = implode('', unpack('L', $DataBegin));

        if($ipbegin < 0) $ipbegin += pow(2, 32);

        $ipend = implode('', unpack('L', $DataEnd));

        if($ipend < 0) $ipend += pow(2, 32);

        $ipAllNum = ($ipend - $ipbegin) / 7 + 1;

        $BeginNum = 0;

        $EndNum = $ipAllNum;

        while($ip1num > $ipNum || $ip2num < $ipNum) {

            $Middle= intval(($EndNum + $BeginNum) / 2);

            fseek($fd, $ipbegin + 7 * $Middle);

            $ipData1 = fread($fd, 4);

            if(strlen($ipData1) < 4) {

                fclose($fd);

                return 'System Error';

            }

            $ip1num = implode('', unpack('L', $ipData1));

            if($ip1num < 0) $ip1num += pow(2, 32);

            if($ip1num > $ipNum) {

                $EndNum = $Middle;

                continue;

            }

            $DataSeek = fread($fd, 3);

            if(strlen($DataSeek) < 3) {

                fclose($fd);

                return 'System Error';

            }

            $DataSeek = implode('', unpack('L', $DataSeek.chr(0)));

            fseek($fd, $DataSeek);

            $ipData2 = fread($fd, 4);

            if(strlen($ipData2) < 4) {

                fclose($fd);

                return 'System Error';

            }

            $ip2num = implode('', unpack('L', $ipData2));

            if($ip2num < 0) $ip2num += pow(2, 32);

            if($ip2num < $ipNum) {

                if($Middle == $BeginNum) {

                    fclose($fd);

                    return 'Unknown';

                }

                $BeginNum = $Middle;

            }

        }

        $ipFlag = fread($fd, 1);

        if($ipFlag == chr(1)) {

            $ipSeek = fread($fd, 3);

            if(strlen($ipSeek) < 3) {

                fclose($fd);

                return 'System Error';

            }

            $ipSeek = implode('', unpack('L', $ipSeek.chr(0)));

            fseek($fd, $ipSeek);

            $ipFlag = fread($fd, 1);

        }

        if($ipFlag == chr(2)) {

            $AddrSeek = fread($fd, 3);

            if(strlen($AddrSeek) < 3) {

                fclose($fd);

                return 'System Error';

            }

            $ipFlag = fread($fd, 1);

            if($ipFlag == chr(2)) {

                $AddrSeek2 = fread($fd, 3);

                if(strlen($AddrSeek2) < 3) {

                    fclose($fd);

                    return 'System Error';

                }

                $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));

                fseek($fd, $AddrSeek2);

            } else {

                fseek($fd, -1, SEEK_CUR);

            }

            while(($char = fread($fd, 1)) != chr(0))

                $ipAddr2 .= $char;

            $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));

            fseek($fd, $AddrSeek);

            while(($char = fread($fd, 1)) != chr(0))

                $ipAddr1 .= $char;

        } else {

            fseek($fd, -1, SEEK_CUR);

            while(($char = fread($fd, 1)) != chr(0))

                $ipAddr1 .= $char;

            $ipFlag = fread($fd, 1);

            if($ipFlag == chr(2)) {

                $AddrSeek2 = fread($fd, 3);

                if(strlen($AddrSeek2) < 3) {

                    fclose($fd);

                    return 'System Error';

                }

                $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));

                fseek($fd, $AddrSeek2);

            } else {

                fseek($fd, -1, SEEK_CUR);

            }

            while(($char = fread($fd, 1)) != chr(0))

                $ipAddr2 .= $char;

        }

        fclose($fd);

        if(preg_match('/http/i', $ipAddr2)) {

            $ipAddr2 = '';

        }

        $ipaddr = "$ipAddr1 $ipAddr2";

        $ipaddr = preg_replace('/CZ88\.NET/is', '', $ipaddr);

        $ipaddr = preg_replace('/^\s*/is', '', $ipaddr);

        $ipaddr = preg_replace('/\s*$/is', '', $ipaddr);

        if(preg_match('/http/i', $ipaddr) || $ipaddr == '') {

            $ipaddr = 'Unknown';

        }

        return $ipaddr;

    } else {

        $datadir = 'ipdata/';

        $ip_detail = explode('.', $ip);

        if(file_exists($datadir.$ip_detail[0].'.txt')) {

            $ip_fdata = ','fopen($datadir.$ip_detail[0].'.txt', 'r');

        } else {

            if(!($ip_fdata = ','fopen($datadir.'0.txt', 'r'))) {

                return 'Invalid IP data file';

            }

        }

        for($i = 0; $i <= 3; $i++) {

            $ip_detail[$i] = sprintf('%03d', $ip_detail[$i]);

        }

        $ip = join('.', $ip_detail);

        do {

            $ip_data = fgets($ip_fdata, 200);

            $ip_data_detail = explode('|', $ip_data);

            if($ip >= $ip_data_detail[0] && $ip <= $ip_data_detail[1]) {

                fclose($ip_fdata);

                return $ip_data_detail[2].$ip_data_detail[3];

            }

        } while(!feof($ip_fdata));

        fclose($ip_fdata);

        return 'UNKNOWN';

    }

}

保存成php文件,直接require "XXX.php";调用即可。

OK。目前我们已经能找到位置了,下面做一个查询的页面即可。

<?php

$ip=$_REQUEST[url];

require "XXX.php";

$cip = $_SERVER["REMOTE_ADDR"];

$clo = convertip($cip);

echo "您的IP是{$cip},来自{$clo}";

?>

<form action="">

<input type="text" name="url" size="20" value="<?echo $ip;?>"> <input type="submit" value="查看ip位置">

</form>

<?php

if($ip==""){$ip="";}else {

$lo = convertip($ip);

echo "<br><br>您查询的IP是{$ip},来自<font color=blue>{$lo}</font>";

}

?>

Pages (21) « Prev 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Next »