没有头脑 没有概念…
web应用
记录web开发历程,这里有语言应用笔记,web机制实现技术或者一些软件介绍等信息
‘用户体验’到底 是怎么样的体验?
Jun 1st
到处都能听到建站的人在讨论用户体验的问题。无论是红得发紫的大企业还是毫不被知的小公司,都会在各种场合教育手下人去注重用户体验。没有主见的干脆就效仿搜狐,网易,新浪这些代表性的‘成功作品’,有主见的则试图处处为用户考虑。没有一个标准说像新浪网易这样的领头羊做的用户体验就是最好,相反,个人感觉他们做的超级差。那种恨不得把屏幕上每个像素点都不能浪费掉的精神,我实在无语。我们公司是什么样的公司?用我们老板的话说将是引领移动互联网未来十年,在别人只看到一米的地方的时候他已经看到了100米的地方。他会因为页面少哪怕有7个自的地方是空白而称其为浪费。我突然明白了,原来有些人把页面当作土地一般昂贵,那我们那里还有浪费之理?如果你在看到一个页面全是些密密麻麻的东东,那么就理解一下那些建站人的苦衷他们是为了能给你们提供更多的信息,才不舍浪费一星半点,我很无语了。
然而我看到另一个奇怪的现象,在豆瓣上找到一个blogbus模板相关的小组,然而那个小组分享的竟然大部分是白板,也就是界面超级简单的那种,如果你是一个开发商,是一个很注重用户体验的人,试问你提供给这群人什么样的体验,白板还是想腾讯那样优质的用户体验?
无论如何,我觉得用户体验都终归是空谈,你可以服务于用户操作方便,但不能奢望为用户提供一切!
是本来就没有用户体验?还是我们误解了它?以后的日子我会多关注一些UI,但不是用户
grep命令工具的使用
Dec 27th
grep命令是一个很方便的文本搜索工具,在我们修改代码或者学习别人写的代码时,要想搜索某些函数,文字等等所在的文件和位置,使用grep是非常快捷方便的。学习使用grep也很简单,保证自己机器上安装了grep命令,通过一些常用的正则匹配和grep参数,就可以很快掌握怎样快速准确的在很多文件中查找自己想要的结果了。
grep安装
以windows为例,可以到这里下载grep安装程序。一定别忘配置全局环境变量(path=grep安装路径(如:C:\Program Files\GnuWin32\bin),打开DOS命令窗口,输入grep,显示
Usage: grep [OPTION]… PATTERN [FILE]…
Try `grep –help’ for more information.
说明安装成功。
grep正则表达式元字符集
^ 行的开始 如:’^grep’匹配所有以grep开头的行。
$ 行的结束 如:’grep$’匹配所有以grep结尾的行。
.(点) 匹配一个非换行符的字符 如:’gr.p’匹配gr后接一个任意字符,然后是p。
* 匹配零个或多个先前字符 如:’*grep’匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。 更多 >
unbuntu安装php的curl扩展
Dec 23rd
使用命令:apt-get install php5-curl 安装curl。
找到/usr/lib/php5/20060613+lfs /curl.so,将该文件拷贝到您的extension_dir中(如’/usr/lib’)。
extension_dir可以在php.ini里配置(/etc/php5/apache2/php.ini)。
同时修改php.ini添加一行 extension=curl.so
重新启动apache,运行phpinfo()看是否生效。
一点关于apache的配置
Dec 17th
设置默认页: DirectoryIndex index.html index.htm index.php install.php
(服务器会从左到右依次检查是否存在这些文件,若存在,则默认打开)
禁止列出目录文件: Options -indexes
禁止访问网站:
Order deny,allow
Deny from all
Allow from [IP or Domain]
自定义错误页面:ErrorDocument 403 http://www.16dim.com/forbidden.html
401 – Authorization Required(未经授权)
400 – Bad request(错误的请求)
403 – Forbidden(禁止)
500 – Internal Server Error(服务器内部错误)
404 – Wrong page(文件没找到)
php 字符比较小结
Sep 20th
调试程序时遇到了关于字符串几个比较绕的问题,鼓捣了一阵子总是弄明白了几个,先大概说一下。
- empty()函数。empty($var)函数如果 $var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,”"、0、”0″、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的例如在注册时经常比较确认密码是否相等则不不适合使用empty进行判断。
- == (等于)与===(恒等于)。‘==’比较两个变量如果相等则返回true,需要注意的是’==’并不区分类型,如1==‘1’将返回true;另外‘==’还会把0与”的关系认为是等价的,所以判断变量是否为空,也不宜使用‘==’。
‘===’比较两个变量是否相等还会比较它们的类型,1===‘1’返回false。
不想说了,列代码: 更多 >
使用google托管js库的好处?
Jul 11th
刚听说google可以托管js库@-@!有些火星了。于是找g牛帮忙讲解一番,总算是弄明白了。
我们平时怎样使用js库(如:jquery,prototype,Dojo等)?
比如有一个页面a.html,要调用路径为http://www.tonsh.net/a/jquery.js,那么只要在a.html引用这个脚步库就可以了。我们在选择使用库时同时也在选择它们的性能,这些库的性能越强大,对应库的本身也就变得越来越大,这就意味着每次加载页面时的耗时也越来越多。
什么是google的js托管?
说的明白点,跟我们以往做法一样,只不过这时候的引用的js库是放在google服务器上的。比如引用jquery,则使用路径http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js即可。也就是无论是谁的网站,只要使用了将得到与在自己服务器引用一样的效果。这当然有它的优点,要不然谁还大费周折搞什么托管。
google的优势何在?
更多 >
玩玩google earth
Mar 12th
doubanclaime0fc39201a42d433
今天把google earth安装在自己的电脑上,有句诗是”坐地日行八万里“,很形象。不过到现在还没有把从北京站到软件园的路线查出来。
刚打开的时候这个地球很漂亮。 更多 >
session与cookie的关系
Jan 3rd
session与cookie最主要的区别就是,session是以对象的形式保存在服务器端,而cookie则是以字符串的形式保存在客户端。HTTP协议是一种无连接的协议,当客户端发出一个请求时,它们之间就会建立一个 连接,等服务器响应了这个请求,这个连接就会被断开,这时候服务器再也不记得先前与客户端的那次亲密接触,一些用户信息当然也就消失了。cookie就是为了处理这类的情况的,它可以把用户的信息储存起来。比如用户登录到某个网站,服务器把用户登录的信息保存到客户端的cookie中,这样用户感觉这个网站已经记着了自己。但是cookie有它的缺点不宜存储过长的数据;而且cookie是以文件的形式保存在客户端的磁盘上,所以一些重要数据很容易被修改,比如用户购买一些东西之后,修改自己的余额,然后提交给服务器,这种行为是一定不能允许的。而session就能保证数据的安全,因为它是保存在服务器上的,服务器通过一个唯一的sessionID来区别不同的用户。这个sessionID就保存在客户端的cookie中(默认)或者重定向到URL里。现在就来看看为什么要把sessionID保存到cookie中,当我们打开一个新的窗口时,系统会分配一个新的sessionID,这样服务器就会认为是不同的用户发出的请求,比如有这样一个程序:
<?php session_start(); if(!$_SESSION['val']){ $_SESSION['val']=1; } else{ $val=$_SESSION['val']; $val++; $_SESSION['val']=$val; } echo $_SESSION['val']; ?>
每次刷新页面,都会的到不同的累加值。但是如果我在浏览器的配置里禁用了cookie,再刷新页面,发现这个值没有变化,永远是1。系统给每次刷新的页面分配了新的sessionID。每次打开新的页面时,系统就会看cookie中的是否有sessionID,如果有就不会分配新的sessionID。当然还有别的办法记住sessionID,那就是重写在url里。
虽然session是保存在服务器端的,但它也是依靠cookie来实现其功能的。
zend framework实现降序查询
Dec 28th
在zf里习惯使用$table->fetchAll($where),这种格式进行查询,一句话就能省去写sql语句,感觉很cool。但是如果再遇到点更复杂点的查询,比如order by,limit等操作该怎么办,真遗憾,$where只能是where的查询,不能再代替别的。这时候就需要Zend_Db_Select类了。
个人认为Select类可以通过各种不同约束的设置,最终连接成一个完整的查询语句,然后交给query或者fetchAll函数去处理。具体这个类更多的使用方法可以参考帮助手册,这里只以实现order by为例,代码如下:
//创建select对象 $select=$table->select(); //设置约束条件,还可以添加更多 $rs=$select->where('group_id=?',3)->order("id desc"); //执行查询语句,返回RowSet类型 $result=$table->fetchAll($rs);
虽然就这三行代码,却让我捣鼓了老半天,所以才决定一定要写这篇日志才爽。凡本人写的东西仅供参考,很多东西也许并不正确,如果发现错误,希望留言指正。还有点问题,zf是支持关联表的,关联表的约束条件也是需要Zend_Db_Select的帮忙。还是上代码吧:
$test=$table->fetchAll()->current(); $select=$table->select()->order('id DESC'); $comments=$test->findDependentRowset('RelateTable','Relation',$select) ->toArray();
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
Dec 24th
mysql_fetch_row:从结果集中取得一行数据并作为数组返回。不能用字段名取值($row['id']),只能使用索引($row[0],$row[1])。
mysql_fetch_array:从结果集中取得一行数据并作为数组返回。可以使用字段名取值,也可以使用数字索引取值。
mysql_fetch_assoc:从结果集中取得一行数据并作为数组返回。只能使用字段名取值,不能使用数字索引取值。
mysql_fetch_array() 中可选的第二个参数 result_type 是一个常量,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH。其中:
mysql_fetch_assoc($result)=>mysql_fetch_array($result,MYSQL_ASSOC);
mysql_fetch_row($result)=>mysql_fetch_array($result,MYSQL_NUM);