可可熊D窝

Keep it simple, stupid


  • 首页

  • 关于

  • 标签182

  • 分类8

  • 归档359

  • 搜索

四月培养习惯总结

发表 2009-05-04 | 分类 Life | 评论数:
| 字数: 442 | 阅读 ≈ 1 分钟

先说下练字吧,只有一天没有写,去同学那里玩了,没回来,坚持的还算不错,可惜没觉得有什么进步,有时候觉得就根本没效果,所以好几天写的不认真,似乎应该端正下态度了。试着去临贴,不描红了,老爸说钢笔字重要的是字的结构、总局,没必要像写毛笔字一样描红好长时间。29/30

7点起床,几乎每个周末都没能按时起来,是不是因该把周末排除啊?很郁闷:-( 8/30

12点前睡觉,基本都做到了,没什么说的,想睡太迟也不行,不年轻了,呵呵。 28/30

睡前阅读,坚持的不好,只有21天,而且好多时候没看几分钟就睡着了,这个月看完了《明朝的那些事儿》。手机上看书真不爽,不过像这类书去买又有点浪费了:-) 21/30

这个月继续巩固吧。

Comments

wind: 乖孩子,我都开始考虑向你学习了。 哎,突然想起有句话叫做:你什么都好,就是没意思。 用来形容我们这种人还真适合阿。

cocobear: !没意思,就没意思了!

坚持一件事情: 哈哈。选择一件事情然后一直坚持下来。这是很不容易的

关于PyFetion不能在GAE上使用

发表 2009-04-25 | 分类 编程相关 | 评论数:
| 字数: 4.4k | 阅读 ≈ 4 分钟

最近有同学反映PyFetion不能在GAE上使用,我看了下别人给出的错误,问题不出在PyFetion上,无论是TCP方式还是HTTP方式,使用本机测试都可以正常工作。
应该是移动的飞信服务器屏蔽了GAE的出口IP地址(某同学反应GAE的urlopen使用的是同一IP)。

原因大概是广大GAE的爱好者众多,玩PyFetion的又比较多,所以移动不爽了,就封掉你。

问题出来了,原因也大概知道了,那怎么解决方案呢,下面就给出几个吧:

  1. 强烈要求GAE增加代理支持。
  2. 打电话给10086,然后说你的飞信上不出了,然后给客服MM说你的IP是:[GAE_IP(哪位知道这个IP来补充一下)]。
  3. 脱离GAE,使用自己的服务器。
  4. 继续使用GAE,使用另一服务器做为跳板。

Update(09.4.27):
据gohsy同学反映,GAE上不能使用是因为服务器返回了405错误,而别的fetion实现会忽略405错误,继续进行,而PyFetion遇到这个错误会产生异常。记得以前调PyFetion的时候也遇到过405错误,应该是发送的数据格式不对而造成的,所以我猜想这里是因为网络环境影响造成的数据不完整,从而使得飞信服务器返回405错误。因为在GAE上PyFetion还是可以偶尔发送成功的,所以出错的原因应该不是程序本身。

为了在GAE上能更好的使用,我修改了一下PyFetion,增加了遇到405错误时重试功能,默认重试5次,这样会使得发送的成功率提高很多,但是由于405的出现,重试多次会影响到发送的速度,这一点是无法避免的。更新请到google code查看:http://code.google.com/p/pytool/source/detail?r=30

其实根本的原因我想还是GAE上用PyFetion的人过多造成的:-)

为了在GAE上调PyFetion,在gohsy同学的帮助下,搭建了GAE环境,感觉还不错,做应用挺方便的,不错的东东。

Comments

damon: 忽忽! fetionAPI邮件列表 诞生 http://groups.google.com/group/fetionapi

hawkli: 发现r33版本也不太稳定啊,我上午刚试成功发了一个短信,吃完饭就又收不到了。我试了改了下修订bug的r30版本也一样不成功,在屏显提示上已经send msg ok了。 我估计还是fetion把地址屏蔽了的关系。 还有什么可以稳定运行的招呀,飞信比较可恶。

damon: 那你对 什么感兴趣? 分享你技术的哈 (不要想歪了) 朋友提示出来了 data = self.sock.recv(size,socket.MSG_WAITALL) 改成 data = self.sock.recv(size)

cocobear: 邮件列表的方式比较好,QQ群太麻烦。

nile997: 嗯,直接忽略405错误不可以吗?如果重试5次,时间会比较久,另外还是不能保证成功。

damon: 我的执行出来是这样的 怪 [img]http://www.jiub2b.com/py.jpg[/img] 菜鸟建群 飞信API交流 :76989585

cocobear: 你给出来的是一个不完整的提示。 我对qq群没兴趣。

cocobear: GAE(Google App Engine)

damon: O(∩_∩)O哈哈~ cocobear 还做下名词解释! 服务周到哦!

tatsuya: : ‘module’ object has no attribute ‘error’ args = (“‘module’ object has no attribute ‘error’”,) message = “‘module’ object has no attribute ‘error’” 执行PyFetion的代码后就出这个问题,不知道哪里出问题了,可可熊能不能帮忙看一下,谢谢了

草儿: 呵呵,我现在几乎不怎么用飞信了,有事直接打电话,嘿嘿

可可熊: 把完整的错误贴出来,不然看不懂。

nile997: 啊… 可惜了。 还想玩玩GAE上面的fetion呢 找另外一个服务器做跳板应该怎么做呢? 有没有推荐的服务器啊?

cocobear: 飞信的协议分析百度博客里有一份很详细的,你可以搜一下。 源码的的注释就是所有的说明了,不是很复杂的东西,所以如果你想了解的话就直接看源代码。有问题可以发邮件给我。

aoniao: PyFetion的源文件只是这个PyFetion.py吗?我都不会Python……

蓝色旋风: 谢谢熊大神,我想问下我用JSP怎么调用你的程序,怎么动态传入参数呢?我现在只会这个啊: import PyFetion fetion= PyFetion.PyFetion(“号码”,”密码”) fetion.login(); #fetion.send_sms(“我要发的消息”,to=”号码”)

蓝色旋风: 那我是否应该把这个做成一个dll然后用ASP来调用期中的函数 具体应该怎么做呢,请指教啊,我的邮箱 lsxf_xin@163.com 谢谢!

蓝色旋风: 你写的PyFethon很强啊,因为最近在做毕业设计,需要深入的理解一下你写的这个程序,能否提供一下这个源码的一些解释呢,还有Fetion协议分析能否也提供一下帮助呢,谢谢了!

蓝色旋风: 我的qq:434731902

aoniao: 非常感谢Cocobear大侠,我也是做毕业设计的,可能得调用飞信的接口来进行演示程序,可是刚刚接触Python,不了解PyFetion,我会发邮件向你请教的。到时候就麻烦你了。呵呵……

蓝色旋风: 不知你的邮箱地址是多少 我想问下如何用ASP来调用,如何传参数呢

可可熊: PyFetion目前没有做这样的功能。但是可以加进去。

cocobear: JSP不能直接调用Python的代码。

aoniao: 呵呵,我目前只是要知道,用PyFetion可以接收别人回复来的短信吗?Python我会搞定的…… 谢谢可可熊大哥!

可可熊: 只有一个文件。不会Python我也帮不了你。

damon: 哇 好快哦!~

wind: 虾米是GAE?

idoyo: 占个位置 :)

Edikud: 老大为什么自己不开发个gae blog程序呢?这方面国内还是太少了,好的如徐明micolog程序,但作者已经很少更新了,比较遗憾的,好的程序我相信会有很多人用的…

cocobear: web开发我不善长的,GAE的blog也有不少吧,在Python中文邮件列表里有很多人发过的。

rex: 请教cocobear关于pythonfetion的几个问题: 如何快速查找某飞信号的sip值: 向手机发飞信,可以使用tel:\d{11}的形式;如果发给飞信号,则需要使用sip:\d=@fetion.com.cn;p=\d+的形式。 如果只知道某飞信号,不知其对应的手机号,如何快速地将它对应的sip号码查出来?需要每次调用phone.get_contact_list(),再从里面查找吗? 我的email&gtalk是 rex[at]zhasm[dot]com ,请指正。

rex: 您提及的百度上的协议分析,上面有手机前6位减某数得p=xxx值,但是这只对于知道手机号的有效,对于不知道手机号的,就不怎么灵光了,我目前只能一个个查。

bibcc: 老大,你Google code 上的 PyFetion.py 缩进有问题有几行的缩进用的tab ,下到本地看就乱了,望修正。 支持PyFetion

可可熊: 关于sip号码,一般是一个地区后面的p=xxxx是相同的。 这个p=xxxx就类似邮编一样,如果你能把全国各地的p=xxxx全统计一下那么你就可以利用查表的方式来获取sip号码。 tab缩进我会改一下的,多谢提醒。

rex: 最新的detail?r=43 pyfetion.py,好像不支持GAE。请问哪一款是比较新的,支持GAE的?

rex: 我猜测原因是里面使用了os等模块。将其注释掉,指定utf8 coding,但是仍然无法执行。

可可熊: GAE使用没问题的。

Perry: 请教一个菜鸟问题:源代码中调试输出的部分形如“33[0;31;”的东东应该是ANSI颜色控制码?但是我无论在cmd还是在python的IDLE里运行,貌似都是把这些字符原样输出了……请教博主的环境是什么,可以支持这个的?

可可熊: Linux终端里面控制颜色输出的。

Noe: 对于GAE运行的问题,我也遇到了,但是情况比较诡异。 现象是第一次可以正常运行,之后的就不行了。 因为我是使用easy-twitter-sms调用PyFetion的,有个手动调用cron的路径。程序中加入log,第一次上传程序到gae后,手动执行一次cron,会看到解析地址,发送消息,成功,手机也可以收到。但如果之后再执行一次的话,就不出结果了。 我大概看了看代码,猜想是不是因为发送完短消息后没有logout的原因? 不是很明白gae的cron原理,但感觉似乎是由于生成了多个实例的原因。 希望所说的情况对博主有点帮助

lin: 发消息很奇怪,”<”字符及之后的文字都被扔掉了,是fetion的个性?

PopACai: cocobear的PyFetion库很赞纳。在此感谢一下。。 照着写了一份FETION。 还有一个本地GAE测试通过。结果上传上去后。报出500SERVER ERROR呢?有没有也碰到过? PS:有一些地方提一下BUG(都是很小的) 在获取列表时,我发现当我的列表非合法时PyFetion会崩溃(我有几个拉黑的啥的。)然后会崩溃掉。 删除后可以运行正常。建议try catch。 还有就是在运行一段时间后会POP一个错误的表单。这个我后来TRY CATCH后正常了。 还有就是有时SEND后,在等待FETION_Server时会没有ACK回复(就是发送成功的标记)结果程序假死了。其实这个消息已经发出去了。。 谢谢你了。。最后表示真的写的很不错。很赞,结构也很好,阅读很舒服。除了稍微有时有点费解。其他的都非常漂亮。感谢提供PYFETION。 希望交流:popacai@gmail.com

leungxh: 菜鸟弱弱的问下,那个cli客户端可不可以把手机号,密码保存起来,不然每次使用都要输入一遍,很麻烦,希望老大给讲讲

可可熊: 稍改一下代码就可以的 mobile_no = “136xxxxx” passwd = ‘1234576’

读完了Programming in Lua (first edition)

发表 2009-04-08 | 分类 Life | 评论数:
| 字数: 1k | 阅读 ≈ 1 分钟

花了差不多两周的时间读完了Lua Programming in Lua (first edition) ,没找到pdf格式的,一直在官网在线看的,不是很舒服。看的似乎有点慢,里面的英文很简单,讲的内容难点也不多,也没有太多的代码去动手实践,似乎是受别人打击了:-)(看到人家博客里写道:“花两天的时间过了一遍PIL”)。

Lua作为一个脚本语言在很多地方与Python有相似之处,不过小巧了很多,数据类型、表达式、语句等都很精简,但是这并不影响Lua成为一个流行的脚本语言,灵活的table成就了Lua的强大,table可以演化出list,dict,更强大的是table可以实现OO,Lua并没有在语言级提供OO的实现,不过Lua的作者在PIL中展示了使用table完全可以实现近乎完美的OO编程,我觉得这是对整天鼓吹OO思想的人一个极大讽刺,OO其实没什么,C语言中使用结构体,函数指针也可以有模有样的进行OO编程。

Lua中也有很多函数式编程语言的影子,所以很多人把Lua和Scheme归为了近亲,不过俺不了解Scheme,对函数式编程也是一知半解,只能凑个热闹。

Lua之所以在游戏中使用比较广泛,是因为它可以很好的和C/C++结合在一起,可以很方便的互操作,通过使用Stack的方式。还有一个很重要的原因,Lua提供的是搭积木的原料,而不是搭好的建筑,所以你可以很灵活的用自己的方式去写程序。比如你可以用table实现一个完整的OO系统,然后在OO上面写程序(这里有一点很重要,基于table实现OO是很轻量的,而不是语言级的OO);你也可以用metatable来实现Python中很强大的filter,map,reduce。

Lua中的table有点类似道家学说里面的”道”,”道生一,一生二,二生三,三生万物”,而table就是Lua中的“道”。

还得提一点Lua是完全用ANSI C编写的。

cocobear@0-0 /home/cocobear/Codes/lua-5.1.4/src $ wc *.c *.h -l | tail -1> 
 17002 total

Comments

草儿: 00?什么是00?

luguo: 我花了一个下午就把这本书的前三部分给看完了。。。。。 因为有饭局,所以第四部分没看完就赶场子去了。。。。 我是不是有点bt? 另外,我是坐在书城里白看的。。。。-_-

Amankwah: 呵呵,都玩Lua了啊~确实好东西

三月培养习惯总结

发表 2009-03-31 | 分类 Life | 评论数:
| 字数: 456 | 阅读 ≈ 1 分钟

月中开始写字,每天都能坚持写半个小时以上,不过有那么一两天写的不太认真,进步倒是看不起来,不过已经可以很自觉的去练字了,算是个进步,希望可以到7月的时候能有些进步,09年底能写得像个样子吧。15/15

晚上12点前睡觉只有一天没做到,记得是看《色戒》,可惜这电影也不怎么样。14/15

早上7点起床两个周末都没那么早起来,还有一天是因为前一天晚上看《色戒》了,没按时起来。10/15

下个月继续努力吧。

Comments

草儿: 你是不是色戒看多了,发虚了,以致起不来了?

luguo: 弱弱地同意楼上。。。。。。。。。。

可可熊: 看电影睡迟了而已,汗!

kongove: 练钢笔字吗? 我大一的时候也喜欢练,还有就是在个别无聊的课堂上。 我这两天正在坚持一个习惯,就是午休!

Amankwah: 很强大,应该发出倡议——向DP同学学习~

可可熊: 呵呵,一个一个慢慢培养,我们还年轻:-)

wind: 好孩子阿! 我已经养成1点左右睡觉,9点多起床的习惯了.

rhlei: 我发现需要养成的习惯是在太多了~~

Python与Lua中的尾部调用优化

发表 2009-03-31 | 分类 Life | 评论数:
| 字数: 3.5k | 阅读 ≈ 3 分钟
>     function foo (n)
>>       if n > 0 then return foo(n - 1) end
>>     end
> foo(100)
> foo(1000)
> foo(10000)
> foo(100000)
> foo(1000000)

如果函数最后一句是return g(…)这样的形式,Lua将会把这句解释为goto g(x),因为这里除了对g函数调用,再没有别的事做,也不需要保存堆栈里调用函数的信息。因此上面即使调用很多次也没有出现堆栈溢出的问题,把上面的代码转换为Python:

>>> def foo(n):
...     if n>0: return foo(n-1)
... 
>>> foo(100)
>>> foo(1000)
...
  File "<stdin>", line 2, in foo
  File "</stdin><stdin>", line 2, in foo
  File "</stdin><stdin>", line 2, in foo
RuntimeError: maximum recursion depth exceeded

很快出就现了堆栈溢出的问题,在这里表现为达到了递归调用的最大限制。Python自身没有实现尾部调用优化,不过也可以通过实现一个decorator办法来实现:

#!/usr/bin/env python2.4
# This program shows off a python decorator(
# which implements tail call optimization. It
# does this by throwing an exception if it is 
# it's own grandparent, and catching such 
# exceptions to recall the stack.

import sys

class TailRecurseException:
  def __init__(self, args, kwargs):
    self.args = args
    self.kwargs = kwargs

def tail_call_optimized(g):
  """
  This function decorates a function with tail call
  optimization. It does this by throwing an exception
  if it is it's own grandparent, and catching such
  exceptions to fake the tail call optimization.

  This function fails if the decorated
  function recurses in a non-tail context.
  """
  def func(*args, **kwargs):
    f = sys._getframe()
    if f.f_back and f.f_back.f_back 
        and f.f_back.f_back.f_code == f.f_code:
      raise TailRecurseException(args, kwargs)
    else:
      while 1:
        try:
          return g(*args, **kwargs)
        except TailRecurseException, e:
          args = e.args
          kwargs = e.kwargs
  func.__doc__ = g.__doc__
  return func

@tail_call_optimized
def factorial(n, acc=1):
  "calculate a factorial"
  if n == 0:
    return acc
  return factorial(n-1, n*acc)

print factorial(10000)
# prints a big, big number,
# but doesn't hit the recursion limit.

@tail_call_optimized
def fib(i, current = 0, next = 1):
  if i == 0:
    return current
  else:
    return fib(i - 1, next, current + next)

print fib(10000)
# also prints a big number,
# but doesn't hit the recursion limit.

代码来自http://code.activestate.com/recipes/474088/

在这段代码里tail_call_optimized是一个decorator,在执行factorial函数前,这个decorator先执行,tail_call_optimized中通过sys._getframe()这个方法会返回一个frame对象,包含了堆栈顶部的信息,当发现当前调用是一个递归调用:
if f.f_back and f.f_back.f_back
and f.f_back.f_back.f_code == f.f_code:

则抛出一个异常,下面的代码则截获异常,继续执行,这样就避免了堆栈的使用,很巧妙的一种方式。

在python-dev的邮件列表里,有人曾经做过一个Python的尾调用优化的补丁,不过Guido拒绝了这个补丁:
I’m not interested in adding this to the official Python release.>

One reason is that if an exception happens in such a tail-recursive> 
call, the stack trace will be confusing.> 

Another reason is that I don't think it's a good idea to try to> 
encourage a Scheme-ish "solve everything with recursion" programming> 
style in Python.> 

But feel free to maintain this as an independent modification, a la> 
Stackless -- I'm sure there are people who would like to try this> 
out.> 

--Guido van Rossum (home page: http://www.python.org/~guido/)

Comments

shellex: 唉。真是的。加入尾递归支持又不意味着大家都会do every thing with recursion… 多个选择多好…

shellex: 非得hack下。真是的。

xiongharry: 黑色主题,配深色字体,看起来真累。

Louis Vuitton Outlet San Diego California: Louis Authentic LV Outlet Handbags

1…111213…72
cocobear

cocobear

爱折腾的技术宅一枚

359 日志
8 分类
182 标签
RSS
GitHub E-Mail Twitter 豆瓣
友情链接
  • 王聪
  • 老大
0%
© 2007 – 2020 cocobear | 521k | 7:54
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Gemini v6.7.0
Hosted by GitHub Pages