Tuesday, March 31, 2009

ie ol has the max index 有序列表 索引数字上限 1000

在 ie 下,当 ol 里的 li 超过 1000 个时候,1000 以后的 li 的索引值会从 0 重新开始。
相当奇怪。

Monday, March 30, 2009

i love you so much 我喜欢你

我喜欢你,

非常喜欢你。

 

好吧,

我承认,

我见识过的这几对几乎都差不多的。

实在是都很类似。

 

也许,

这些事情都差不多。

就那么点事。

 

哈哈,

咋就都差不多呢。

呵呵。

 

太,

可爱了。

 

知道我谁啥,

知道我说什么,

等他们成了,

再摆出来。

 

哎,

好像有点卑劣了。

python 动态生成 zip 文件

python 中处理 zip 文件

from zipfile import ZipFile

z = ZipFile('abc.zip', 'w')
z.write('abc.txt', 't/abc.txt')
z.writestr('t/abc2.txt', 'this text is from my')
z.close()


# 即时压缩

import os
from zipfile import ZipFile
from StringIO import StringIO

f = StringIO()
z = ZipFile(f, 'w')

def safewrite(f, *arg, **kw):
    if os.path.isfile(f):
        z.write(f, *arg, **kw)
    elif os.path.isdir(f):
        for root, dirs, files in os.walk(f):
            for f_ in files:
                z.write(os.path.join(root, f_))

safewrite('flash')
safewrite('abc.txt', 't/abc.txt')
z.writestr('t/abc2.txt', 'this text is from my')
z.close()


print 'Content-Type: application/zip'
print 'Content-Disposition: attachment; filename=abc.zip'
print

print f.getvalue()

Tuesday, March 24, 2009

the js lib in my heart 我心仪的js库

yui loader
jquery dom,dom-ev,ajax
goog class,oop
jsolait fn,package,socket

 

其实 jsolait 的loader 也挺好的,不过他只能同步,不能异步的load。
jaolait 的class和oop也挺好,不过稍显复杂,偏向 goog 的方式。
jquery 提供了良好和足够的操作 dom 和大多数 ajax 的功能,
如果要纯粹的脱离 dom 的事件机制,还是自己实现一下或者用 yui 的,或者 goog 的比较好。
jsoliat 提供的包管理和 socket 机制(通过 as 实现) 也挺不错。

 

希望这个项目里能够实现这个东西。
虽然是东拼西凑,不过确实期盼了很久的东西。
不知道会不会违反他们各自的版权呢。
呵呵。

 

顺应一下国情,先搞出来,
如果有了问题,
我再学习 gnu,自己实现一遍。
只是,
比较仰慕这些已经完善的实现而已。
有对这有兴趣人不,可以一起来搞嘛。

Monday, March 23, 2009

add app on existing apache site 给apache站点添加功能

服务器上跑着 apache,服务着我们日常工作。现在要扩展一下功能。
因为之前的静态为主,而又不想用 php(其实是不熟)。所以打算用 python(webpy) 来在原有基础上扩展。
为啥注重 原有基础 呢?
因为不想另开端口。
对比了一下,决定用 scgi
apache 配置:
LoadModule scgi_module Modules/mod_scgi.so
SCGIMount /editor 127.0.0.1:8080
重启 apache,然后启动 py 程序:
python code.py 127.0.0.1:8080 scgi
这样启动起来的 py 比较麻烦,
可以考虑使用 nohup 来搞定。
nohup sudo python ./code.py 127.0.0.1:8080 scgi &
这样 py 就会在后台执行,即使你退出了 ssh 也不会把程序搞停。
如果想看看有哪些程序在后台执行,可以 jobs。
如果想激活其中的某个,就 fg n,其中 n 为 jobs 时候看到的第一列的 id。
对应 fg 的还有 bg,不过我还不知道如何使用。
激活后,用 Ctrl + D 即可退出。或者是 Ctrl + C?忘记了。呵呵。自己试试吧。
参考
  1. webpy 安装
  2. mod_wsgi
  3. 关于 nohup (这个链接可能已经不可用,可用 gr 订阅 http://www.ijiyi.com/feed 看好使不)
发现,现在越来越离不开 search 了。
看文章也习惯的先找 rss ,然后订阅到 gr ,然后才找出来看。
好处就是以后可以在 gr 里搜索看过的文章,
坏处就是 gr 里有好几k(甚至好几w,没知道) 的未读。
看的让我再也没有兴趣把未读数搞定下来。

Wednesday, March 18, 2009

what is a empty array in javascript 空数组([]) 是什么东西?

先看测试

[]==false ? 'false' : 'true'//false
[]==true ? 'true' : 'false'//false
Boolean([]) ? 'true' : 'false'//true
(![]) ? 'false' : 'true'//true
([]) ? 'true' : 'false'//true

为啥有时候是 true,有时候是 false 呢?

参看:
逻辑AND(&&)运算符

Monday, March 16, 2009

mysql index 学习

在看了 某人一次MYSQL优化 后,总在琢磨着把一个系统优化一下,今天找了找资料(MySQL索引分析和优化),
摘取部分备查。


MySQL提供多种索引类型供选择:

  • 普通索引
    这是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建:
    • 创建索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表);
    • 修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
    • 创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );

  • 唯一性索引
    这种索引和前面的"普通索引"基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。唯一性索引可以用以下几种方式创建:
    • 创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
    • 修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
    • 创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );

  • 主键
    主键是一种唯一性索引,但它必须指定为"PRIMARY KEY"。如果你曾经用过AUTO_INCREMENT类型的列,你可能已经熟悉主键之类的概念了。主键一般在创建表的时候指定,例如"CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); "。但是,我们也可以通过修改表的方式加入主键,例如"ALTER TABLE tablename ADD PRIMARY KEY (列的列表); "。每个表只能有一个主键。

  • 全文索引
    MySQL从3.23.23版开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT。 全文索引可以在VARCHAR或者TEXT类型的列上创建。它可以通过CREATE TABLE命令创建,也可以通过ALTER TABLE或CREATE INDEX命令创建。对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。本文下面的讨论不再涉及全文索引,要了解更多信息,请参见MySQL documentation

选择索引列

在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在WHERE子句中出现的列,在join子句中出现的列。
MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。可以在LIKE操作中使用索引的情形是指另一个操作数不是以通配符(%或者_)开头的情形。


更多参考:
How FriendFeed uses MySQL to store schema-less data


现在在疑惑深入学习 mysql 还是 postgresql。
谁能给点意见。 :)

Saturday, March 14, 2009

在 mac os x 上装 mysql

首先安装 macport

然后
$ port selfupdate
$ port install mysql5 +server

然后去 /opt/local/share/mysql5/mysql/ 选择一个你看着满意的 my-*.cnf,
复制到 /opt/local/etc/mysql5/my.cnf.
然后,如果你愿意的话,编辑一下它。

初始化数据库
$ mysql_install_db5

默认 root 用户的密码为空,可以这么改:
$ mysqladmin5 -u root -p newpassword 新密码
当提示密码的时候,回车即可。上面的 "新密码" 换成你想要的。

把 mysql 加入随机启动,同时也会开启 mysql 服务器
$ launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist

还不知道怎么开启 tcp/ip 连接,
就直接用的 socket 方式在 php 里。
使用方法是在 socket 路径前加冒号(:),
比如我机器上就是 ":/opt/local/var/run/mysql5/mysqld.sock"。

__END__

太刻意求来的,未必真的是如愿

凡事不必刻意追求完美,
有时候,天意真的比较重要。

地有多大,坐火车是测不出来的;
天有多高,坐飞机是测不出来的。

用心,
用身体。

退一步,
进一步,
都可以解决问题,
只是,
如果都是进的话,
也要进得更多才好,
否则就没有意义了。



《赤壁(下)》挺好看的,推荐。

Thursday, March 12, 2009

[share] 明明是谣言却普遍被大众相信的传言,今天你被骗了吗(ZT)

摘一段,大家有兴趣看看 [收藏]明明是谣言却普遍被大众相信的传言,今天你被骗了吗(ZT)
相当长见识。

28,以德抱怨
原句:"或曰:'以德报怨,何如?'子曰:"何以报德?以直报怨,以德报德"
——《论语 宪问》
以德抱怨,是我们常听到的一句话了,人们通常理解的"以德抱怨"什么意思呢?就是说:孔老夫子教我们,别人欺负你了,你要忍,被打碎牙齿也要往肚子里吞,别人来欺负你,你反而应该对他更好,要用你的爱心去感化他,用你的胸怀去感动他。
但事实上,我们根本曲解了孔子的原意,我当初,也万万没想到原来在孔子这句"以德抱怨"的后边还跟着另外一段话,什么话呢?子曰:"以德抱怨,何以报德?以直报怨,以德报德!"看完以后,幡然醒悟,原来我们都被某个断章取义的孔子FANS给玩了一把!当时的真实情况是怎么样的呢?孔子的一个弟子问他说:师傅,别人打我了,我不打他,我反而要对他好,用我的道德和教养羞死他,让他悔悟,好不好?孔子就说了,你以德抱怨,那"何以报德?"别人以德来待你的时候,你才需要以德来回报别人。可是现在别人打了你,你就应该"以直抱怨",拿起板砖飞他!看!就因为被人故意省略了一句话,刚烈如火的孔老夫子一下就被扭曲成了现在这个温婉的受气包形象。  




Monday, March 9, 2009

gnu coreutils 之 tar

windows 下我们用 winRAR 来压缩、打包文件,相当爽。
不过,不知大家发现没有,其实用 winRAR 压缩时选择 zip 格式通常会快很多(代价是会比 rar 格式大一些,不过差不多少)。
在 unix 类系统下面,打包压缩通常就是 tar 了。曾经经过相当长时间的折磨,现在来总结一些 tar 的用法。那是相当的简单。
tar cf abc.tar f1.txt f2.txt
命令 [tar] + 压缩命令 [c] + 指定文件命令 [f] + 指定的文件名 [abc.tar] + 要压缩的文件列表 [f1.txt f2.txt]
以上就把 f1 和 f2 两个 txt 文件打包到 abc.tar 里了。这里比较怪异的是 abc.tar 跟 f1.txt 加上 f2.txt 一样大,没有压缩。是不是很逊?还好,继续。
tar zcf abc.tar.gz f1.txt f2.txt
在刚才的命令中加一个 [z],把文件名改一下,那么这个打出来的包就是压缩过的了。 为啥来,因为 [z] 的意思是打包的同时给压缩一下,压缩成 gzip 格式。
tar 内置支持的格式还有一个,比较厉害 bzip2。
tar jcf abc.tar.bz2 f1.txt f2.txt
把上面命令里的 [z] 换成 [j] 即可。
通常,这样压缩出来比 gzip 要小一点(当然,更加耗时),喜好哪种格式看各位吧。
要压缩的文件列表也可以加文件夹进去,那么这个文件夹就可以打包了。
然后看如何解压缩。
tar xf abc.tar
命令 [tar] + 解压命令 [x] + 指定文件命令 [f] + 指定的文件名 [abc.tar]
这个命令就会把包里文件释放出来了。
如果我之前压缩成 gzip 了怎么解压呢?
tar zxf abc.tar.gz
告诉 tar 这个文件是 gzip 格式就行,就是加一个 [z] 参数。
同理
tar jxf abc.tar.bz2
OK,
基本上都搞定了。
还是比较简单的。吧?
再说一些吧,
打包的时候尽量打包目录,这样别人解压缩的时候就不会解压出一堆文件,看的眼花缭乱。
上面各个示例命令的参数里面可以再加一个 v,
可以显示 tar 工作的详细内容,否则他就悄悄的干活,干完了就跑了,你也不知道他都干了些啥。
tar vjxf abc.tar.bz2
应该挺简单的吧。
我学习的时候最先看到的就是最长的 4 个参数一起,根本搞不清都啥跟啥,只能每次用的时候现查。
希望这些文字可以帮助你快一点掌握 tar 的用法。
:)

Monday, March 2, 2009

程序员之制造重复的轮子

最近有感于重复制造轮子这一说法,
其实,每制造一个轮子,就有一批人程序员跟着强大起来。
所以,当我们发现有人在制造轮子的时候, 不要轻信前人总结的一些“不要重复制造轮子”的说法, 找机会抓紧加入制造大军,那么,你就很有可能是这一轮突起中的一员。
万物理相通, 装死干活吧。

what is written for us?

yes, i want to get the answer very much.
so, do you know anything about that?

i think the biggest problem is that i have nothing to share with you.
so, maybe that be an answer to me.

just follow the mind.



其实,以上文字来自观看下面2部电影的感受,热烈推荐:
贫民窟的百万富翁
《好好先生》Yes.Man