socketref,再见!高德

https://github.com/adoggie

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

常用链接

留言簿(54)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

#

     摘要: 项目地址: http://github.com/adoggie/TCE 从12年的时候开始想做一个rpc的东东,这些年来陆陆续续往里面增加不同的功能、特点。
tce是一个 全栈的东西,并不是 protocalbuf,或者接近 thrift。 支持语言: csharp,python,java,objc,javascript,actionscript,c++,我想这些够了。
  阅读全文
posted @ 2016-09-18 16:03 放屁阿狗 阅读(14856) | 评论 (0)编辑 收藏

干了17,8年一线技术工作,还不如刚毕业的985学生,真是好笑。 现在觉得也没啥多想的,现在乐于出去跟不同公司谈谈技术问题,面试完,基本也给对方上完一通技术课程。 晚上看一17岁小朋友在直播写带代码,满有意思,自己也想玩玩。 tce工程加入csharp支持中,本地代码差不多一半,lex分析还没开动,要抓紧了,早点能在unity上跑起来。 公司这两个月要搞个证照系统,设计完框架了,要写代码了。
posted @ 2016-08-23 04:09 放屁阿狗 阅读(441) | 评论 (2)编辑 收藏

     摘要: 有问题的c++通信代码的识别,希望写c++的码农不要犯同样的错  阅读全文
posted @ 2016-03-24 15:29 放屁阿狗 阅读(16283) | 评论 (4)编辑 收藏

近日获得一份微信营销系统的代码,看其功能比较丰富,便开始窥其代码的实现。为了将整个业务系统跑起来,还真的花了不少时间琢磨,幸好不负我的几十年功力,终于将运营环境和开发环境搭建成功,并将系统的授权代码全部剔除(软件厂商控制使用授权)。
准备条件: 
1. 互联网服务器(必须开启80,443端口)
2. 申请域名,且绑定到服务器
3. 微信公众号申请,并通过微信认证(300人民币)
先上系统部署图 : 

几个部件需要介绍一下: 
1. xampp :  开发php的套件,包含了apache,php,mysql,用起来很简单,不过我是部署在linux和mac 上,要留意的是文件目录访问权限的问题,mac下 所有的服务进程跑在root用户下;
2. phpstrom: 开发php的ide,出自jetbrains(我个人理解是目前开发工具最牛逼的公司)。 管理数据库推荐 DataGrip 软件。 
3. xdebug : 这个东西是php与phpstrom的调试接口 ,apche接收到http请求,转给php解释器,php解释器再phpStorm进行调试互动(建立xdebug的9000端口的tcp连接),开发者可以在phpStorm里面随意下断点。 注意: 在php.ini中需配置 ide-key:scott , 我是在nginx的转发头里面添加了 XDEBUG_SESSION=scott,令所有经过 nginx 服务器的http请求都被转到phpStorm中,否则无法实现代码断点。 
4. wxDebuger: 这是微信提供的本地微信页面调试工具,开发这可以利用winre来调试手机上的页面,也可以脱离手机,直接调试微信页面(要调试微信的wxjssdk必须使用wxDebuger)。 
5. nginx : 在公网服务器部署nginx作为http服务器,接收各种用户请求,并将其转发到xampp。 
6. vpn :  这个是关键,为了实现本地开发调试的目的,我在公网服务器上部署了openvpn,并在mac开发机上部署了xampp,phpstorm等,并安装vpn客户端 Tunnelblick,其自动拨号到公网服务器,获得地址10.8.0.6,nginx将http请求转发到了我本地的开发机器上,这样我可以很方便的进行远程和本地调试了。 


主要的功能描述: 
1. 手机、浏览器、调试器 发起的http请求到达公网服务器,nginx通过vpn转发到本地开发机,开发者在phpstorm中断点调试代码,并将处理结果按原路返回。 
2. 微信服务器的主要作用是获取 粉丝信息、oauth认证回调、服务器鉴权等功能 , HTTP(302)是 oauth的灵魂 。 
3. 这种配置架构很灵活的可以将开发模式切换到部署模式,只需要将xampp部署到公网服务器,并在 nginx的反向代理指到本地xampp服务即可。 



附录  nginx.conf 
 server {
        listen       80;
        server_name  wx.xxxx.com www.xxxx.com;
        proxy_set_header X-real-ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        location / {
                proxy_pass http://10.8.0.6:8081;
                proxy_set_header Cookie "$http_cookie;XDEBUG_SESSION=scott";
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-real-ip $remote_addr;
       }
    }



posted @ 2016-03-24 14:55 放屁阿狗 阅读(16204) | 评论 (1)编辑 收藏

     摘要: 6.x 版本系统自带python 2.6,升级2.7的方式网上有很多版本,本人试用下来觉得诸多不便。
工作项目中越来越多的开发特性必须要求工作在py2.7版本中,例如: django 1.7+已经不支持 py2.6.x了; pyBox2d也不支持。
这次选择的最新版本 python 2.7.11   阅读全文
posted @ 2016-01-29 14:17 放屁阿狗 阅读(16684) | 评论 (0)编辑 收藏


访问sf,记录下一下代码

(注册sf的app,登记 callback-url,执行sql查询)
#coding:utf-8
__author__ = 'scott'
import imp
imp.load_source('init','../init_script.py')
import urllib2,urllib,json,sys,os
import traceback,threading,time,struct,os,os.path,shutil,distutils.dir_util,array,base64,zlib,struct,binascii
import datetime
from libs.python.lemon import webapi
callback = 'http://localhost:8002/oauth'
client_id = '3MVG9ZL0ppGP5UrC_wQ8U02mOhowPKwjeaaLsWZ3BcYYVqiSsy1rL_D2h6qG.rGPnb_j6IcgLHPdhmvomzDFj'
client_secret = '9046731979xxxxxxx'

def accessToken(request,code,state):
    url = 'https://login.salesforce.com/services/oauth2/token'
    data = {
        'grant_type':'authorization_code',
        'code':code,
        'client_id':client_id,
        'client_secret':client_secret,
        'redirect_uri':callback
    }
    result = ''
    try:
        result = urllib2.urlopen(url,urllib.urlencode(data) )
    except:
        traceback.print_exc()
    result = result.read()
    return json.loads( result )

def oauth(request):
    cr = webapi.SuccCallReturn()
    code =  webapi.GET(request,'code','')
    state = webapi.GET(request,'state','')
    cr.result=[code,state]
    token = accessToken(request,code,state)
    cr.result.append(token)
    print token
    try:
        sqlExecute(token['access_token'],token['instance_url'])
    except:
        traceback.print_exc()
    return cr.httpResponse()

import cookielib

# -H "Authorization: OAuth token" -H "X-PrettyPrint:1" "
def sqlExecute(token,url_host):
    httpHandler = urllib2.HTTPHandler(debuglevel=1)
    httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
    opener = urllib2.build_opener(httpHandler, httpsHandler)
    urllib2.install_opener(opener)
    sf_cmd_query="%s/services/data/v20.0/query/?%s"%(url_host, urllib.urlencode({'q':'select count() from account'}))
    headers = {
        'Authorization':'OAuth %s'%token,
        'X-PrettyPrint':1
    }
    httpReq = urllib2.Request( sf_cmd_query,headers=headers )
    r = opener.open(httpReq).read()
    print r
    pass

url1 = """https://login.salesforce.com/services/oauth2/authorize?response_type=code&client_id=%s&redirect_uri=%s&state=first"""%(client_id,callback)

def launchBrowserForOAuth():
    import webbrowser
    webbrowser.open(url1)

if __name__ == '__main__':
    launchBrowserForOAuth()
posted @ 2015-06-29 20:21 放屁阿狗 阅读(914) | 评论 (0)编辑 收藏


python内部数据容器有dict和list两种 ,工作中最常用的方式是定义一些数据结构(数据即代码),例如: 

1 frog={'name':'scott',
2           'age':2,
3           'parts':{
4                     'eye':'green','leg':85
5                     },
6           ''friend":['moee','wee'],
7           "hometown":'affica'
8          }

frog对象定义了小动物的某些属性,访问frog对象属性时,通过 dict,list的取值方法进行访问,例如:  
print frog['name']
print frog['friend'][0]  
有时觉得这种表达方式太原始了,需要改进,最好是以 '.'方式访问对象属性,例如:  
print frog.name
代码来开始和结束吧, class _x 
 1 class _x:
 2     """
 3     从简单数据类型转换成python对象
 4 
 5     p = _x({'name':'boob','body':{'color':'black'},'toys':[1,2,3,],'age':100})
 6     print p['toys'][1]
 7     print len(p.toys)
 8     print p.body.colors
 9     """
10     def __init__(self,primitive):
11         self.data = primitive
12 
13     def __getattr__(self, item):
14         value = self.data.get(item,None)
15         if type(value) == dict:
16             value = _x(value)
17         return value
18 
19     def __len__(self):
20         return len(self.data)
21 
22     def __str__(self):
23         return str(self.data)
24 
25     def __getitem__(self, item):
26         value = None
27         if type(self.data) in (list,tuple):
28             value = self.data[item]
29             if type(value) in (dict,list,tuple):
30                 value = _x(value)
31         elif type(self.data) == dict:
32             value = self.__getattr__(item)
33         return value







posted @ 2015-05-26 14:44 放屁阿狗 阅读(626) | 评论 (0)编辑 收藏

相关技术:  haproxy_keepalived_nginx_uwsgi_gevent_django 

之前部署django一直采用 apache + mod_wsgi,用得倒也没啥问题,看到越来越多的人采用nginx部署,所以也尝试了一下,结果很让人欣喜。

nginx够小够简洁,编译、配置相当简单,但要知道她仅仅是个静态webserver,动态功能需要搭配相应的cgi来实现; 
uwsgi是个啥东西,看其官方文档还真写的相当详细,功能很丰富,但我的需求可能只会使用其30%的功能;
uwsgi可以认为是python代码运行的loader,或者是容器(container),这有点像java的container(resin,tomcat)。看了其配置文档,很是惊喜,其不仅可以配置为多进程+多线程模式,也可以配置为单进程+多线程模式,并能保持高并发高销率,非常感兴趣。
一直以来自己总在寻找一种 高效、灵活的django的应用容器。
apache默认都是多进程模式,http又是无状态的,不同的请求被分派到不同的进程处理,request处理都是隔离的。多进程带来的问题是高昂的系统开销(apache也支持多线程处理)。
这种隔离又带来了诸多不便,request之间不能共享状态、数据和协作,不能很好的完成与外部系统的协同工作(例如request共享同一个服务器的socket连接或者访问控制某个rs232端口)
所以很想有种类似java的应用容器这样的东东。 
接触了gevent,其核心是io异步分派,单线程模拟多协程来对应用层多任务的支持,几近疯狂io效率得到了我的认可。ps:八过smp系统就应该启动多个gevent服务,不然其他核心数都浪费了。
采用gevent+django的模式搭建了自己得app容器,也跑了几个项目,总体效果还是可以。
nginx+uwsgi+django 的配合开始应用到新项目中
posted @ 2015-01-01 00:41 放屁阿狗 阅读(740) | 评论 (0)编辑 收藏


上海交通违章查询网站: http://www.shjtaq.com/Server1/dzjc_new.asp
验证码图片获取地址: http://www.shjtaq.com/Server1/validatecode.asp?m=2304.046

服务器通过页面请求的session-id来区分之后提交的验证码。 第一次请求查询页面时,服务器将访问session(cookie)传到客户端,之后的查询和验证码获取时客户端携带之前的cookie传送到服务器,服务器端保存着当前 session-id与验证码 的对应关系。 

查询返回记录可通过 xpath或者 beautifulsoup进行解析

程序使用python完成,也是个简单的小爬虫,scrapy 之类的没必要使用了,gevent完成异步通信。

交通网的验证码生成还是比较简单,做自动识别可找几个简单的图形识别程序即可。
如若不行,则人工输入喽
posted @ 2014-10-08 00:45 放屁阿狗 阅读(1337) | 评论 (0)编辑 收藏

     摘要:   阅读全文
posted @ 2014-05-20 11:33 放屁阿狗 阅读(17164) | 评论 (0)编辑 收藏

仅列出标题
共25页: 1 2 3 4 5 6 7 8 9 Last