分类 Web 下的文章

Memcached Client的序列化

如果我们需要往memcached中存储非基本类型的Object时

是需要对这个Object进行序列化的

不过,现在的memcached client都已经替你做了序列化和反序列化工作了

所以,我们在使用时,可以直接把Object传给它,让它来实现序列化和反序列化



比如,python的Client工具memcache.py中



折叠复制代码




  1. flags=0

  2. if isinstance(val, str):

  3. pass

  4. elif isinstance(val, int):

  5. flags |= Client._FLAG_INTEGER

  6. val="%d"% val

  7. # force no attempt to compress this silly string.

  8. min_compress_len=0

  9. elif isinstance(val, long):

  10. flags |= Client._FLAG_LONG

  11. val="%d"% val

  12. # force no attempt to compress this silly string.

  13. min_compress_len=0

  14. else:

  15. flags |= Client._FLAG_PICKLE

  16. file=StringIO()

  17. pickler=self.pickler(file,protocol=self.pickleProtocol)

  18. if self.persistent_id:

  19. pickler.persistent_id=self.persistent_id

  20. pickler.dump(val)

  21. val=file.getvalue()




可以看到,对于复杂的Object,它默认是调用cPickle来作为其序列化的工具的

当然,我们也可以在set之前,也可以使用marshal或其它的工具来自行序列化



java的spymemcached的Client库

 



折叠复制代码




  1. byte[]b=null;

  2. intflags=0;

  3. if(o instanceof String) {

  4. b=encodeString((String)o);

  5. } else if(o instanceof Long) {

  6. b=tu.encodeLong((Long)o);

  7. flags |= SPECIAL_LONG;

  8. .....

  9. } else {

  10. b=serialize(o);

  11. flags |= SERIALIZED;

  12. }




最后,它调用了serialize方法进行序列化的,再看serialize方法

 



折叠复制代码




  1. ByteArrayOutputStreambos=newByteArrayOutputStream();

  2. ObjectOutputStreamos=newObjectOutputStream(bos);

  3. os.writeObject(o);

  4. os.close();

  5. bos.close();




Java的另外一个memcached client:java_memcached-release_2.0.1中是用URLEncoder进行了编码处理



折叠复制代码




  1. private String sanitizeKey( String key ) throws UnsupportedEncodingException    

  2. {   

  3.     return ( sanitizeKeys ) ? URLEncoder.encode( key, "UTF-8" ) : key;   

  4. }  






由于不同的Client实现的序列化方式不同,所以如果在不同的语言


如,java,python中使用同一个memcached来存取数据,可能会造成数据不一致的问题

zdaemon的sock文件

下午部署了一次webpy程序
由于并没有修改wap的程序
当时,为了节省时间
就把cheetah编译wap下的tmpl部分给注掉了
结果,忽略了一件事情
就是,我是使用的tar部署的整个目录
结果导致wap的tmpl都没有编译
当然6601端口也就没能起来


于是,我就又把编译的给放开

cheetah -c wap/*.tmpl


重新部署一次
但是,发现wap的程序仍旧无法使用,502proxy错误
显然,还是没有正确重启
后来,我到一个服务器上,手工编译,重启
虽然,stop和start时提示如下,似乎是正常的

daemon process stopped
daemon process started, pid=31392


但无论怎么弄,访问时依旧报错

ImportError: No module named folder_list_tmpl



折腾了半天,突然想到
会不会是以前的出错的那个sock文件没有被正常关闭呢
到对应目录下一看
果然发现,对应的run.sock文件还是那个出错的sock
就是说,我用zdaemon的stop或restart,都未能干掉那个错误的sock
导致一直报错
最后,手工把那个sock文件给删除掉,再启动就ok了

多Memcached服务器负载均衡

我们的多个应用上都应用了memcached来做cache
但现在的应用的模式都一样
只使用一台memcached服务器
这样当改服务器挂掉后
所有的cache数据全都没有了
只能重新生成

其实,memcached本身是支持多个server的
也能实现cache的分布式存储
比如,对于python,我们可以这样来初始化

client = ['192.168.95.50:11222','192.168.95.51:11222']
mc = memcache.Client(client,debug=0)


这样,当我们set数据时
memcahced的client会根据key的hash值和服务器的数目取模来计算出该key对应的server
然后将key和value保存在对应的server的memcached中
get取数据也类似,到对应server上去取

采用多server,需要注意的地方:

1.由于它是按照key和服务器数目来计算对应server
   所以,我们自己部署在多server上的app应用
   在初始化client时,必须使用同样的配置
   也即服务器列表必须完全一致
   否则,可能会出现不同的app应用计算某个key对应的server不一致的情况

2.如果有一台memcached服务器出现了问题
   不会影响其它服务器的cache数据,只是该server的cache全部丢失
   对于python的client,会自动检测服务器的情况
   发现某个server挂了后,就不会往该server上set和put数据了
   当server起来后,就会又恢复正常
   这样,可能会造成在down掉的那短时间内
   同一个key数据可能会存放在2个server上

关于tomcat5.5的logging

几天前,一个以前的朋友问我个问题
说他们的tomcat服务器每天的log量太大
每天都有几十G,把磁盘都给占满了
它们的服务都是在xp或win2003上跑着的
问我有没有什么解决办法

一直以来,我们都是在Linux上处理此类问题
于是,我第一个想到的就是定期删除log
从而,就有了windows上crontab的实现
参见文章:Windows下的“任务计划”

没想到,那朋友今天又来找我
说这个办法不行,他们的log增长太快
而且,无法删除当前的log文件
最好能让tomcat不记录log

于是,在tomcat的conf目录下发现了logging.properties这个文件
显然,它应该就是tomcat的logging配置文件
它使用的是JDK的logging来记录日志的(我们的系统一般都用log4j来记录log,对这个logging的配置还真是不太熟悉)
又找到了tomcat的官方文档
Logging in Tomcat

正想着如何去更改配置,使其不记录到文件中时
突然,一个念头冒了出来:
我把这个文件干掉,它不就不会记录了吗
马上,删除该文件,发现果然就没有log了

有时,当你的思维一直停留在自己习惯的“套路”上时
是会限制你的思维向外发散的
就像这个简单的问题,却走了一段不小的弯路...
所以,经常,我们需要去打破“惯性思维”,多一些“发散性思维”......

Useful XHTML Character Entities(zz)

做wap开发时,会用到的


nbsp   no-break space = non-breaking space,
iexcl ¡ ¡ inverted exclamation mark, U+00A1 ISOnum
cent ¢ ¢ cent sign, U+00A2 ISOnum
pound £ £ pound sign, U+00A3 ISOnum
curren ¤ ¤ currency sign, U+00A4 ISOnum
yen ¥ ¥ yen sign = yuan sign, U+00A5 ISOnum
brvbar ¦ ¦ broken bar = broken vertical bar,
sect § § section sign, U+00A7 ISOnum
uml ¨ ¨ diaeresis = spacing diaeresis,
copy © © copyright sign, U+00A9 ISOnum
ordf ª ª feminine ordinal indicator, U+00AA ISOnum
laquo « « left-pointing double angle quotation mark
not ¬ ¬ not sign, U+00AC ISOnum
shy ­ ­ soft hyphen = discretionary hyphen,
reg ® ® registered sign = registered trade mark sign,
macr ¯ ¯ macron = spacing macron = overline
deg ° ° degree sign, U+00B0 ISOnum
plusmn ± ± plus-minus sign = plus-or-minus sign,
sup2 ² ² superscript two = superscript digit two
sup3 ³ ³ superscript three = superscript digit three
acute ´ ´ acute accent = spacing acute,
micro µ µ micro sign, U+00B5 ISOnum
para ¶ ¶ pilcrow sign = paragraph sign,
middot · · middle dot = Georgian comma
cedil ¸ ¸ cedilla = spacing cedilla, U+00B8 ISOdia
sup1 ¹ ¹ superscript one = superscript digit one,
ordm º º masculine ordinal indicator,
raquo » » right-pointing double angle quotation mark
frac14 ¼ ¼ vulgar fraction one quarter
frac12 ½ ½ vulgar fraction one half
frac34 ¾ ¾ vulgar fraction three quarters
iquest ¿ ¿ inverted question mark
Agrave À À latin capital letter A with grave
Aacute Á Á latin capital letter A with acute,
Acirc   latin capital letter A with circumflex,
Atilde à à latin capital letter A with tilde,
Auml Ä Ä latin capital letter A with diaeresis,
Aring Å Å latin capital letter A with ring above
AElig Æ Æ latin capital letter AE
Ccedil Ç Ç latin capital letter C with cedilla,
Egrave È È latin capital letter E with grave,
Eacute É É latin capital letter E with acute,
Ecirc Ê Ê latin capital letter E with circumflex,
Euml Ë Ë latin capital letter E with diaeresis,
Igrave Ì Ì latin capital letter I with grave,
Iacute Í Í latin capital letter I with acute,
Icirc Î Î latin capital letter I with circumflex,
Iuml Ï Ï latin capital letter I with diaeresis,
ETH Ð Ð latin capital letter ETH, U+00D0 ISOlat1
Ntilde Ñ Ñ latin capital letter N with tilde,
Ograve Ò Ò latin capital letter O with grave,
Oacute Ó Ó latin capital letter O with acute,
Ocirc Ô Ô latin capital letter O with circumflex,
Otilde Õ Õ latin capital letter O with tilde,
Ouml Ö Ö latin capital letter O with diaeresis,
times × × multiplication sign, U+00D7 ISOnum
Oslash Ø Ø latin capital letter O with stroke
Ugrave Ù Ù latin capital letter U with grave,
Uacute Ú Ú latin capital letter U with acute,
Ucirc Û Û latin capital letter U with circumflex,
Uuml Ü Ü latin capital letter U with diaeresis,
Yacute Ý Ý latin capital letter Y with acute,
THORN Þ Þ latin capital letter THORN,
szlig ß ß latin small letter sharp s = ess-zed,
agrave à à latin small letter a with grave
aacute á á latin small letter a with acute,
acirc â â latin small letter a with circumflex,
atilde ã ã latin small letter a with tilde,
auml ä ä latin small letter a with diaeresis,
aring å å latin small letter a with ring above
aelig æ æ latin small letter ae
ccedil ç ç latin small letter c with cedilla,
egrave è è latin small letter e with grave,
eacute é é latin small letter e with acute,
ecirc ê ê latin small letter e with circumflex,
euml ë ë latin small letter e with diaeresis,
igrave ì ì latin small letter i with grave,
iacute í í latin small letter i with acute,
icirc î î latin small letter i with circumflex,
iuml ï ï latin small letter i with diaeresis,
eth ð ð latin small letter eth, U+00F0 ISOlat1
ntilde ñ ñ latin small letter n with tilde,
ograve ò ò latin small letter o with grave,
oacute ó ó latin small letter o with acute,
ocirc ô ô latin small letter o with circumflex,
otilde õ õ latin small letter o with tilde,
ouml ö ö latin small letter o with diaeresis,
divide ÷ ÷ division sign, U+00F7 ISOnum
oslash ø ø latin small letter o with stroke,
ugrave ù ù latin small letter u with grave,
uacute ú ú latin small letter u with acute,
ucirc û û latin small letter u with circumflex,
uuml ü ü latin small letter u with diaeresis,
yacute ý ý latin small letter y with acute,
thorn þ þ latin small letter thorn,
yuml ÿ ÿ latin small letter y with diaeresis,
fnof ƒ ƒ latin small f with hook = function
Alpha Α Α greek capital letter alpha, U+0391
Beta Β Β greek capital letter beta, U+0392
Gamma Γ Γ greek capital letter gamma,
Delta Δ Δ greek capital letter delta,
Epsilon Ε Ε greek capital letter epsilon, U+0395
Zeta Ζ Ζ greek capital letter zeta, U+0396
Eta Η Η greek capital letter eta, U+0397
Theta Θ Θ greek capital letter theta,
Iota Ι Ι greek capital letter iota, U+0399
Kappa Κ Κ greek capital letter kappa, U+039A
Lambda Λ Λ greek capital letter lambda,
Mu Μ Μ greek capital letter mu, U+039C
Nu Ν Ν greek capital letter nu, U+039D
Xi Ξ Ξ greek capital letter xi, U+039E ISOgrk3
Omicron Ο Ο greek capital letter omicron, U+039F
Pi Π Π greek capital letter pi, U+03A0 ISOgrk3
Rho Ρ Ρ greek capital letter rho, U+03A1
Sigma Σ Σ greek capital letter sigma,
Tau Τ Τ greek capital letter tau, U+03A4
Upsilon Υ Υ greek capital letter upsilon,
Phi Φ Φ greek capital letter phi,
Chi Χ Χ greek capital letter chi, U+03A7
Psi Ψ Ψ greek capital letter psi,
Omega Ω Ω greek capital letter omega,
alpha α α greek small letter alpha,
beta β β greek small letter beta, U+03B2 ISOgrk3
gamma γ γ greek small letter gamma,
delta δ δ greek small letter delta,
epsilon ε ε greek small letter epsilon,
zeta ζ ζ greek small letter zeta, U+03B6 ISOgrk3
eta η η greek small letter eta, U+03B7 ISOgrk3
theta θ θ greek small letter theta,
iota ι ι greek small letter iota, U+03B9 ISOgrk3
kappa κ κ greek small letter kappa,
lambda λ λ greek small letter lambda,
mu μ μ greek small letter mu, U+03BC ISOgrk3
nu ν ν greek small letter nu, U+03BD ISOgrk3
xi ξ ξ greek small letter xi, U+03BE ISOgrk3
omicron ο ο greek small letter omicron, U+03BF NEW
pi π π greek small letter pi, U+03C0 ISOgrk3
rho ρ ρ greek small letter rho, U+03C1 ISOgrk3
sigmaf ς ς greek small letter final sigma,
sigma σ σ greek small letter sigma,
tau τ τ greek small letter tau, U+03C4 ISOgrk3
upsilon υ υ greek small letter upsilon,
phi φ φ greek small letter phi, U+03C6 ISOgr k3
chi χ χ greek small letter chi, U+03C7 ISOgrk3
psi ψ ψ greek small letter psi, U+03C8 ISOgrk3
omega ω ω greek small letter omega,
thetasym ϑ ϑ greek small letter theta symbol,
upsih ϒ ϒ greek upsilon with hook symbol,
piv ϖ ϖ greek pi symbol, U+03D6 ISOgrk3
bull • • bullet = black small circle,
hellip … … horizontal ellipsis = three dot leader,
prime ′ ′ prime = minutes = feet, U+2032 ISOtech
Prime ″ ″ double prime = seconds = inches,
oline ‾ ‾ overline = spacing overscore,
frasl ⁄ ⁄ fraction slash, U+2044 NEW
weierp ℘ ℘ script capital P = power set
image ℑ ℑ blackletter capital I = imaginary part,
real ℜ ℜ blackletter capital R = real part symbol,
trade ™ ™ trade mark sign, U+2122 ISOnum
alefsym ℵ ℵ alef symbol = first transfinite cardinal,
larr ← ← leftwards arrow, U+2190 ISOnum
uarr ↑ ↑ upwards arrow, U+2191 ISOnum-->
rarr → → rightwards arrow, U+2192 ISOnum
darr ↓ ↓ downwards arrow, U+2193 ISOnum
harr ↔ ↔ left right arrow, U+2194 ISOamsa
crarr ↵ ↵ downwards arrow with corner leftwards
lArr ⇐ ⇐ leftwards double arrow, U+21D0 ISOtech
uArr ⇑ ⇑ upwards double arrow, U+21D1 ISOamsa
rArr ⇒ ⇒ rightwards double arrow,
dArr ⇓ ⇓ downwards double arrow, U+21D3 ISOamsa
hArr ⇔ ⇔ left right double arrow,
forall ∀ ∀ for all, U+2200 ISOtech
part ∂ ∂ partial differential, U+2202 ISOtech
exist ∃ ∃ there exists, U+2203 ISOtech
empty ∅ ∅ empty set = null set = diameter,
nabla ∇ ∇ nabla = backward difference,
isin ∈ ∈ element of, U+2208 ISOtech
notin ∉ ∉ not an element of, U+2209 ISOtech
ni ∋ ∋ contains as member, U+220B ISOtech
prod ∏ ∏ n-ary product = product sign,
sum ∑ ∑ n-ary sumation, U+2211 ISOamsb
minus − − minus sign, U+2212 ISOtech
lowast ∗ ∗ asterisk operator, U+2217 ISOtech
radic √ √ square root = radical sign,
prop ∝ ∝ proportional to, U+221D ISOtech
infin ∞ ∞ infinity, U+221E ISOtech
ang ∠ ∠ angle, U+2220 ISOamso
and ∧ ∧ logical and = wedge, U+2227 ISOtech
or ∨ ∨ logical or = vee, U+2228 ISOtech
cap ∩ ∩ intersection = cap, U+2229 ISOtech
cup ∪ ∪ union = cup, U+222A ISOtech
int ∫ ∫ integral, U+222B ISOtech
there4 ∴ ∴ therefore, U+2234 ISOtech
sim ∼ ∼ tilde operator = varies with = similar
cong ≅ ≅ approximately equal to, U+2245 ISOtech
asymp ≈ ≈ almost equal to = asymptotic to,
ne ≠ ≠ not equal to, U+2260 ISOtech
equiv ≡ ≡ identical to, U+2261 ISOtech
le ≤ ≤ less-than or equal to, U+2264 ISOtech
ge ≥ ≥ greater-than or equal to,
sub ⊂ ⊂ subset of, U+2282 ISOtech
sup ⊃ ⊃ superset of, U+2283 ISOtech
nsub ⊄ ⊄ not a subset of, U+2284 ISOamsn
sube ⊆ ⊆ subset of or equal to, U+2286 ISOtech
supe ⊇ ⊇ superset of or equal to,
oplus ⊕ ⊕ circled plus = direct sum,
otimes ⊗ ⊗ circled times = vector product,
perp ⊥ ⊥ up tack = orthogonal to = perpendicular,
sdot ⋅ ⋅ dot operator, U+22C5 ISOamsb
lceil ⌈ ⌈ left ceiling = apl upstile,
rceil ⌉ ⌉ right ceiling, U+2309 ISOamsc
lfloor ⌊ ⌊ left floor = apl downstile,
rfloor ⌋ ⌋ right floor, U+230B ISOamsc
lang 〈 〈 left-pointing angle bracket = bra,
rang 〉 〉 right-pointing angle bracket = ket,
loz ◊ ◊ lozenge, U+25CA ISOpub
spades ♠ ♠ black spade suit, U+2660 ISOpub
clubs ♣ ♣ black club suit = shamrock,
hearts ♥ ♥ black heart suit = valentine,
diams ♦ ♦ black diamond suit, U+2666 ISOpub
quot " " quotation mark = APL quote,
amp & & ampersand, U+0026 ISOnum
lt < < less-than sign, U+003C ISOnum
gt > > greater-than sign, U+003E ISOnum
OElig ΠΠlatin capital ligature OE,
oelig œ œ latin small ligature oe, U+0153 ISOlat2
Scaron Š Š latin capital letter S with caron,
scaron š š latin small letter s with caron,
Yuml Ÿ Ÿ latin capital letter Y with diaeresis,
circ ˆ ˆ modifier letter circumflex accent,
tilde ˜ ˜ small tilde, U+02DC ISOdia
ensp     en space, U+2002 ISOpub
emsp     em space, U+2003 ISOpub
thinsp     thin space, U+2009 ISOpub
zwnj ‌ ‌ zero width non-joiner,
zwj ‍ ‍ zero width joiner, U+200D NEW RFC 2070
lrm ‎ ‎ left-to-right mark, U+200E NEW RFC 2070
rlm ‏ ‏ right-to-left mark, U+200F NEW RFC 2070
ndash – – en dash, U+2013 ISOpub
mdash — — em dash, U+2014 ISOpub
lsquo ‘ ‘ left single quotation mark,
rsquo ’ ’ right single quotation mark,
sbquo ‚ ‚ single low-9 quotation mark, U+201A NEW
ldquo “ “ left double quotation mark,
rdquo ” ” right double quotation mark,
bdquo „ „ double low-9 quotation mark, U+201E NEW
dagger † † dagger, U+2020 ISOpub
Dagger ‡ ‡ double dagger, U+2021 ISOpub
permil ‰ ‰ per mille sign, U+2030 ISOtech
lsaquo ‹ ‹ single left-pointing angle quotation mark,
rsaquo › › single right-pointing angle quotation mark,
euro € € euro sign, U+20AC NEW

office文档转换为html的实现方案

1. doc/docx
   (1)调用com组件,这种方式实现起来比较简单,使用jacob即可,见 http://danadler.com/jacob/,但其有以下局限性:
       *必须得运行在windows机器上
       *目前office提供的script功能有限,当word文档错误时,会弹出一些窗口
       *当多线程调用时,占用cpu很高,机器很容易down掉 最早解析word时,是采用的com,上线后没多久,因为不稳定,不可靠,就下线了
   (2)poi,见http://poi.apache.org,现在它对word的支持还很弱,用它来解析出txt还是可以的,转换为html就很难了
   (3)openoffice
    openoffice需要jre才能正常安装,所以首先需要安装jre,然后配置java的环境变量
    从http://zh.openoffice.org/new/zh_cn/downloads.html这里下载最新的rpm包
    

rpm -ivh *.rpm


    安装后,其服务默认是单进程但线程运行的,如果使用其默认的启动参数
    

soffice -headless "-accept=socket,host=localhost,port=18100;urp;StarOffice.ServiceManager" -nofirststartwizard &


       即使你启动多个进程,每个对应的port不同,最后soffice也只起了一个进程,但这个进程监听了多个端口,这样,其实还是单进程运行的 后来,参考了oooserver,见http://www.re.be/oooserver/index.xhtml,看了其源码后,发现启动时多加个参数,还是可以启动多个进程实例的
      

soffice -headless "-accept=socket,host=localhost,port=18100;urp;StarOffice.ServiceManager" -nofirststartwizard -env:UserInstallation=file:////tmp/ooo.1256104949540.8331950043461231013/ &


      多加了一个UserInstallation参数,该参数指定了安装目录,如果不加该参数,openoffice在启动时会检查是否已经存在了默认目录下对应的soffice的进程,如果存在,可能就不再启动新的实例了 多个进程起来后,需要自己实现一个process pool,控制协调各个进程,保证其同一个时刻只服务一个文档转换 目前,在服务器上起了5个进程,我们会根据日志情况,再来调整进程数目

2.xls
      之前也是只使用com组件,出现的问题同上
      现在,采用了poi + com来实现,先是用poi来解析,如果发现里面有嵌入组件、图片、图标等内容,则转交给com来出来,否则就由poi自己来解析
      使用poi的关键在于,自己要实现单元格合并的处理逻辑

3.pdf
     采用了xpdf工具,见http://www.foolabs.com/xpdf/,其能有效的处理中文,但现在只能parser出txt来

关于wap页面的Content-Type

以下内容来自qyb翻译的一篇文章
放在这里作个备忘
时间久了,就会忘了当初为什么在wap页面里来设置不同的Content-Type

翻译 http://www.developershome.com/wap/xhtmlmp/xhtml_mp_tutorial.asp?page=mimeTypesFileExtension

XHTML MP 可以使用三种文档类型

application/vnd.wap.xhtml+xml
application/xhtml+xml
text/html
OMA 推荐的标准 MIME 类型为 application/vnd.wap.xhtml+xml . 在某些手机浏览器上,必须使用这个类型才能正确显示

application/xhtml+xml 也可以采用,这个是 XHTML 建议的文档类型 (W3C 标准)

但是,某些情况下可能还是需要返回 text/html 类型,这事因为有些老的浏览器不支持 application/vnd.wap.xhtml+xml 或 application/xhtml+xml,比如 IE 6 就会弹出一个对话框让你打开...

【既然我们是提供移动体验,为什么还考虑 IE6 这种东西呢???我的想法是,人们有可能在别的媒介上看到 wap.vip.sohu.com 或者 wap.mail.sohu.com 这样的域名,他们有可能会用 IE 打开来看看,对于这种情况,我们最好是让他能在桌面浏览器上也了解到这个页面的功能,而不是粗暴的让他下载一个 xml 文件。 (qyb)】

解决方案是:检查用户浏览器发过来的 Accept,如果它能支持 application/vnd.wap.xhtml+xml,那么 response Content-Type header 就是 application/vnd.wap.xhtml+xml ;如果能支持 application/xhtml+xml,那么 response Content-Type header 就是 application/xhtml+xml;如果什么都不支持,那就返回 text/html

另外,页面必须是 UTF-8 编码, GB编码的 XHTML 在某些手机上无法识别

郁闷的wap cookie问题

m.mail.sohu.com上线以来
使用我的手机一直能正常登陆的
这短时间突然不行了
提示“手机不支持cookie”

开始怀疑是domain的问题
在修改了domain后,还是不成
后来又加了一些调试信息
发现cookie是设置上了
但其内容都是null

于是,怀疑是setcookie的问题
就直接在页面里set了
不再调用类的方法了
结果,就好了

够郁闷的
不知道是不是移动又调整了cmwap的什么东西了....
最后也没能找出真正的原因

还有,最初vip上线时
曾出现过在m.vip.sohu.com上就无法设置cookie
所以,后来给改成了www.vip.sohu.com/wap了
使用了新的种cookie的方法后
发现用m.vip.sohu.com也是可以的
就顺便把url也给统一了



FireFox常用的插件列表

自己常用的FireFox插件列表:

  1. FireBug:调试Ajax和Js
  2. FireCookie:获取编辑Cookie
  3. HttpFox:类似HttpWatch的插件,记录Http请求
  4. Regular Expressions Tester:正则表达式测试
  5. Sqlite Manager:一个Sqlite的管理工具
  6. DNS Flusher:修改本机Host后可以不需要重启FireFox
  7. User Agent Switcher:方便的切换本机的UA 7.Weave:同步firefox的配置,书签信息
  8. Colorful Tabs : 提供类似于IE8的选项卡分颜色显示
  9. Speed Dial : 提供类似于chrome的常用网站访问页,可以根据自己的喜好制定快速访问的页面
  10. Tab mix plus:可以定制双击关闭标签
  11. Easy DragToGo : 超级拖拽
  12. FEBE : 备份plugin
  13. JsonView:直接查看json对象
  14. FlashBug:用来在Firebug中显示Flash中的trace信息,如果在trace log中出现了很多function的调试信息,可以尝试修改c:\Documents and Settings\yushunzhi\mm.cfg文件
  15. Skip Cert Error:可以忽略Firefox中的证书错误
  16. xmarks:不同浏览器间同步书签

郁闷的CVS lock问题

今天在使用CVS的客户端工具时
不知道是做了什么操作
结果导致向某个目录commit时
报如下错误
cvs server: [10:20:09] waiting for cvs's lock in /opt/cvsroot/vipmail_new/web/images/help

上网搜了一下,大概都是这么说的

查看仓库里面在消息中提到的目录并删除它们所属以 #cvs.rfl、 #cvs.wfl 或 #cvs.lock 开始的文件。



于是,登录到cvs服务器上对应的目录下find
结果,没有发现上面所说的几个文件
后来,直接把那个lock的目录在cvs服务器上给干掉了
然后,在本地重新add,重新commit
但是,仍旧是报上面的错误
不知道那个lock信息是在哪里记录着......

实在没办法了
就修改了目录的名字
重新提交
然后就好了

真是郁闷.....

最新文章

最近回复

  • feifei435:这两个URI实际是不一样的
  • zsy: git push origin 分支 -f 给力!
  • 冼敏兵:简单易懂,good fit
  • Jack:无需改配置文件,看着累! # gluster volume se...
  • Mr.j:按照你的方法凑效了,折腾死了。。。。
  • zheyemaster:补充一句:我的网站路径:D:\wamp\www ~~菜鸟站长, ...
  • zheyemaster:wamp2.5(apache2.4.9)下局域网访问403错误的...
  • Git中pull对比fetch和merge | 炼似春秋:[…] 首先,我搜索了git pull和git fe...
  • higkoo:总结一下吧, 性能调优示例: gluster volume s...
  • knowaeap:请问一下博主,你维护的openyoudao支持opensuse吗

分类

归档

其它