博文

最近在读《CSS彻底研究》,做个读书笔记

一直以来都希望以严格的标准来要求自己写出标准的网页,为此也去研读过W3school的教材,学习过了XML、XSLT、XHTML、HTML5、CSS,但是总感觉对CSS的了解不够深入,只是知道怎么用,但是对某些项目的具体定义依然感觉很模糊,还是需要更多的深入了解,了解它的内核,让自己成为一个浏览器,如果我是个浏览器,我应该如何解释这样一段的CSS呢?只有自己解释出来的东西和实际情况一致,我相信这个才是一种真正的理解了。于是为了这个,还是找了不少的CSS方面的教材,这本《CSS彻底研究》就是其中一本了。 书中有很多可以说让我茅塞顿开的地方,于是还是摘录一下了: CSS中允许使用@import "other.css";这样的语句来导入式引用其他的CSS,但是这样引用的CSS将会在页面加载完成之后再次加载可能会导致页面出现“闪烁”的情况。 善于使用嵌套选择器可以减少无用Class的出现。 CSS定义层叠的情况下优先级顺序:一个元素定义了两个类别样式,此二个样式互相冲突时,以写在前面的那个为主。比如:<div class="a b"></div>,发生冲突时,最后显示的结果应该是a的样式,无论定义CSS的时候把a和b何者先定义。其他的情况还是ID>Class>类别,定义两次的时候后定义的更优先。 宽度Width和高度height的定义是内容的宽度和高度,也就是Content的宽度和高度,但是盒模型实际的高度等于内容+内边距+边框+外边距,也就是Content+Padding+Border+Margin。 颜色简写的含义:#369=#336699 对于可以上下左右顺序定义的属性值的解释(比如Padding: 0 0 1px 1px),如果只定义一个,那么就是四周,如果定义两个,第一个是上下,第二个是左右,如果定义三个,那么第一个是上,第二个是左右,第三个是下。 旧版本的IE Border下的背景无法显示出来,但是所占的位置是存在的。 背景色或者背景图显示的范围是Content+Padding+Border Margin值存在垂直塌陷情况,也就是垂直相邻的两个盒模型之间的的实际Margin值从二者之间较大的Margin值(上面的margin-bottom和下面的margin-top...

解决Document base not exist or is not a readable directory问题

Java最让我头疼的就是莫名其妙的就没办法使用Eclipse了…… 我已经莫名其妙的出现过无数次这种问题了,偶尔是正在使用中之前可以用,突然就500了,或者是突然就丢掉环境了,完全让人摸不清楚头脑的各种错误让人头皮发麻。 今天早晨就是如此了,早晨还是好好的,突然启动就报告: Document base .metadata\.plugins\org.eclipse.wst.server.coredoes\tmpxxxx not exist or is not a readable directory 找了半天终于发现了一个解释详细的解决方案: http://tdcq.iteye.com/blog/367516 原因是因为:没有正确的配置Server服务。当然,我就不抱怨什么诡异的服务为什么总是自己消失的问题了,这种问题在Tomcat上简直是层出不穷…… 解决方法也大致形同,似乎唯一不同的就是他用的是Tomcat 6.0,而我用的是7.0这点不同了。 不过还是照抄下来一下吧: 1.在Server选项卡中右击Server - Properties - Switch Location,让它变成/Server/Tomcat 7.0 at localhost 2.双击左边的这个Server,勾选上Publish Module Contexts to Separate XML files。 3.在项目上右击 - Properties - Server - 选中Tomcat 7.0 at localhost 重启eclipse,问题解决。 2011/8/31最后修改: 后来发现这个东西就是Tomcat的缓存的问题,只要出现这类的问题,解决方案很简单,在Server上右击,选择Clean,然后就没事了.

Oracle用DMP导入导出部分表

一直都是用Oracle的dmp语句来导入导出整个库,但是这次为了减低工作量,采用了部分表更新的方式,所以选择了部分导出。 刚开始的时候打算像MySQL一样采用SQL语句导入导出的方式,结果也就4000多条数据而已,2M的一个SQL语句,直接让PL/SQL立扑了。看来对于Oracle这方法行不通。于是还是想到使用dmp,但是我本机只是安装了一个简化的客户端,捣鼓了半天还是没办法用dmp,于是只能在服务器上做这个操作。 语句就很简单了,导出: exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2) 导入: imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1)  ignore=y 但是发现似乎只要是数据库中还存在那两张表,就没办法正确的导入进去,必须要先Drop掉,才可以顺利的导入进去,这次速度就快多了,不到10秒就完成了。 如果有多个以某个字符开头的表,比如AAA_A,AAA_B这样的,要实现批量导出可以先运行: select  table_name   from   user_tables t WHERE t.TABLE_NAME LIKE 'AAA_%' 将导出的文件形成一个CSV,然后编辑它,把它变成类似table1,table2这样的模式(正则表达式很容易做到这点) 然后为了能够顺利的导入,最好先truncate表,于是把这个文件再次操作一下变成类似 truncate table AAAA_A; truncate table AAAA_B; ... 这样的形式,然后保存为SQL文件,例如1.sql 然后在字符界面下运行: sqlplus  system/manager@TEST   @D:\1.sql 批处理执行SQL文件即可,然后再导入表,就不会报告那么多错误了

Nexus S使用两周了,小感一下

迫于无奈,不得不换了手机。 之前的黑莓8820突然不知道怎么着抽风,充电的口就这么挂掉了,然后一直就处于一种无法充电的状态,就算是它再怎么省点,最终也是要充电的啊,但是只要是一充电就会断断续续的充电,连接电脑也是断断续续的连接,很明显的接触不良了,但是这东西又没有办法更换,只有选择买新机器了。 适逢市面上的Nexus S降价,于是2500大洋出手,入了。 造型方面就不说啥了,比IPhone4大了好大一圈,我一只手只能勉强拿下,全屏幕触摸带来的坏处就是盲打是不可能的了,之前的BB虽然是全键盘,其实熟悉了之后也一样可以盲打很多字的,但是这全屏触摸是绝对没办法盲打了。而且按错的概率还相当的高,或者是因为我的手指太大了? Nexus S不愧是Google的亲儿子,系统直接就是最新的,刚刚买的时候是2.3.3,买回家就发现了OTA,升级到了2.3.4.这两天又接着升级了系统组件,Google Maps,Google Music之类的都跟着升级了。 手机拿到手的第一件事自然是导数据了,我的BB之前就用了Google的同步工具,本身就与Google的账号是同步的,这样很明显减低了我导数据的麻烦程度,我只需要在手机中也把那个账号绑定就可以了,但是就算是这样,还是碰上了一点麻烦。因为我通常用的Gmail账号里面太多的人是网上加的,其实很多人并没有手机号码,而实际上有手机号码的人很多并没有Gmail账号,为了解决这个问题,我在之前就设立了另外一个Gmail账户专门用于存放手机联系人,但是Android虽然可以绑定两个账号并且设置各自需要同步的内容,但是我发现Google Talk则并没有这么智能,它永远只能登录你系统输入的第一个账号,结果我第一次的时候输入了我同步联系人的账号,结果GT怎么也没办法登录其他账号了,没办法,只能系统重置然后重新登录。 接下来就是安装软件让手机真正跑起来了,总的说来,Android安装软件比BB简单的多,可以直接网上下载,也可以把APK搞到手然后用Apk Manager来装,我是二者兼用,毕竟国内下载Android Market的速度实在是慢到吐血。 输入法方面就是默认安装了Google拼音了,没啥可圈可点的地方,中规中矩的拼音输入法,不带手写功能,后来换了一个Baidu输入法,这下好玩了,可以自定义表情(颜文字),可以自定义符...

最近迷上了平泽进

一句话可以概括他:“跟他比前卫,你就败了啊” 在《Quit》里面狂笑了整整一分钟,在《白虎野の娘》里面无比诡异的和声,各种元素都可以体现在他的音乐中。听他的音乐感觉就像是看着不断的跃出创意的火花,总可以让人眼前一亮的感觉。 当然了,提到他基本上都会提到三大最有名的了 《剑风传奇》里面的《Forces》、《千年女优》里面的《Lotus-2》、《Paprika》里面的《白虎野の娘》,不过其实CD也有很多可圈可点的 比如我一直都很喜欢《千年女优》里面的《千代子のテーマ MODE-3》那种丝丝入扣的钢琴音,与整张CD的紧凑形成了强烈的对比,和同一张CD里面的《千代子のテーマ MODE-2》少了很多和声,给人的感觉就极大的不同了。 当然了,如果不介意前卫,可以听《聖馬蹄形惑星の大詐欺師》之类的囧歌…… 转一下歌词: BERSERK ~Forces~ 作詞:平沢進/作曲:平沢進 編曲:平沢進/歌:平沢進 時は雲をつくような波をたて襲うよ 消されて夜道を這う声たちに答えて 時代彷如要衝破雲層一般 捲起浪濤襲擊而來 回應著所有被消除而匍匐於夜路的聲音 忘れはしない キミのことは かなわぬ道に なおひとり立ち 不會忘記 你的事情 即使是無法實現的道路 仍然一人獨立 撃たれた鳥のような 優雅さで雨に耐え 宛如被攻擊的鳥兒 優雅地承受風雨 癒えない地上の血に洗われて眠る 星よ壮絶に 物語れ この夜を 受那無法痊癒的大地之血洗滌而眠 星辰啊 以壯烈之勢 訴說此夜 忘れはしない キミのことは 凍えて夜を ただひとり生き 不會忘記 你的事情 在嚴寒夜晚 獨自生存 消えない声よ今 蘇れ力へと 不消逝的聲音啊此刻 向那復甦的力量呼喊 Hai Yai Forces Hai Yai Forces Hai Yai Forces Hai Yai Forces 聞けよ 風さえ泣き そびえ立つ影の塔 撃たれて夜道を這うキミに灯をともせよ 聽啊 連風都不禁哭泣 那聳立的影之塔 為受攻擊而匍匐於夜路的妳 點亮燈火 忘れはしない キミのことは かなわぬ道に なおひとり立ち 不會忘記 你的事情 即使是無法實現的道路 仍然一人獨立 行けよしょうぜつの 影よ来て導け 走吧那險峻的 身影啊...

我还是从了MySQL的客户端好了...

之前一直在用PHP手写代码来操作数据库,虽然也算是能够用,但是总感觉很不是那么回事,万一写错了我就泪流满面了…… 之前也用过一款MySQL的客户端,也就是上传一个PHP文件,然后就可以通过那个类似探针一样的PHP文件来处理SQL请求,比PHPMyAdmin这样的重量级的需要在VPS上上传很久的家伙友好多了。 可惜已过去这么久了,我连那款软件的名字都忘了,现在还是重新找了…… 于是就找到了 Navicat……虽然本身是收费软件,但是Navicat Lite版是免费的,我也用不到那么多的功能,它给我一个SQL窗口我就很满足了,把PHP探针传上去,然后改个诡异的名字,配置好MySQL的用户名和密码就可以使用了相当的方便。另外发现这个软件居然还支持Oracle和SQLite之类的,真是不错~

利用客户端缓存优化服务器带宽

最近看了《构建高性能WEB站点》,非常有启发。于是立即着手开始改进Share站。 当然了,里面对现在的我来说最实用的的就是如何让动态脚本利用客户端缓冲的部分了(原书第6章内容),现在主要的改进方案也是依据与此章的内容。 首先先说下Share.popgo.org 站现在的缓冲策略: Share站主要采用的是XML+XSLT缓冲,其中XSLT为静态文件,由Nginx服务器端设置了Cache-Control:Max-age缓冲,缓冲时间为284400秒,相当长的时间了。 然后XML文件是服务器端通过静态文件缓冲,然后由PHP程序调用生成的,其缓冲策略为: 如果有客户提交新的种子或者编辑现有的种子,那么立即刷新缓冲; 如果在设定的时间段内没有刷新过缓冲,那么强制刷新,刷新的时间可以在后台指定。 刷新的时间判断由PHP来读取文件的最后修改时间来实现。 虽然XML是静态文件在服务器上,但是每次调用的是PHP,Nginx服务器把它认为是动态脚本,是不允许客户端进行缓冲的。现在我需要调整的就是让客户端也可以动态的缓冲这个XML文件,不用我每次都去读取和判断这个XML文件。最好是能够在我加载处理缓冲这几个类文件之前就做这个操作,也节约很多PHP程序处理的时间。 改起来就相当的简单了,首先先在所有的输出的地方加上: header("Last-Modified: ".gmdate ("D, d M Y H:i:s", time())." GMT"); 然后在开头的地方加上 $modified_time = $_SERVER['HTTP_IF_MODIFIED_SINCE']; if(strtotime($modified_time) && strtotime($modified_time) > time() - $getnewindex )//如果没有过期 { header("HTTP/1.1 304 Not Modified"); exit; } 就应该可以了……然后我满怀希望的打开FF+Firebug。结果发现在网络窗口中,依然每次返回的都是200而不是预想中的304…… 到底出了什么问题? ...