socketref,再见!高德

https://github.com/adoggie

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

常用链接

留言簿(54)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

#

     摘要: 之前开发酒店广告投放系统编写的Http代理服务程序,功能实现广告插播进Html DOM结构内。一般都是DIV被插入,当然包括script都是可以从数据库中动态获得。简单修改之后当做Http代理服务器程序,在浏览器中设置Http转发程序的Ip即可,只要代理程序的机器能上网,客户机便能上网(其中涉及Page gzip的工作有点麻烦) Code highlighting produced by Act...  阅读全文
posted @ 2010-09-30 00:16 放屁阿狗 阅读(7677) | 评论 (2)编辑 收藏

IMC-SDK

Instant Message Communication 开发工具包

 

作为即时通信软件的底层通信功能被独立分隔出来,同样也可以以用于其他的通信需求.

IMCACEICE吸收优秀的概念和技术,通信处理不免都是C/S的模式,一头请求,另外一头接收处理并返回处理结果. Ice一样,所有操作都 被视为远程调用RPC

不同的应用需求,在设计开发时,我们将定义无数的数据类型影射到应用模型对象,并被序列化传输到远端,这些编码工作无疑是容易出错的,并且是令人沮丧的。既然是RPC的一种实现,IDL是好的中间语言,所有的应用模型都可以定义在IDL,通过slice工具将其翻译到不同的实现语言,slice将处理好数据对象的Marshalling&UnMarshalling等工作。

IMCICE的相同:

采用一致的数据类型(int,byte,short,long,float,double,string)

一致的通信协议定义,参考ice1.3文档

支持同步和异步调用;支持oneway调用

支持参数的out

 

IMCICE不同之处:

IMC 不支持class;接口不能被当作参数传递;

 

 

支持TcpUDT通信方式,tcpudt的连接(connection)上进行双向的Rpc调用(Ice一般在一个连接上是单向的)

 

调用的返回:

1.      同步调用: 

1.1. 接收到返回结果

1.2. 超时(timeout调用时)

1.3. 连接(connection)断开

1.4. 系统结束处于终止清理阶段(将删除所有的connection)

2.      异步调用:

即可返回

 

函数序列化(operator):

         参数支持INOUT类型,但不支持 INOUT类型,且OUT类型必须在IN之后被定义(ice)。每个函数(operator)都将有一个仅对于interface内的索引编号(integer),参数将被置于参数栈(ParameterStack).

         字节流到函数参数时,先从包内找出此次调用接口的类型,根据函数编号找到解析此参数栈的函数,并将剩余的字节流传递到以上函数去解析

 

Struct OperatorMap{

         Int  index;

         String name;

         Void decode(ByteArray& bytes);

};

Class Security{

Virtual string close(int reason);

Friend __security_decode_close;

}

Static __security_decode_close(ByteArray& bytes, void* obj);

OperatorMap __omap_security={0,”close”,__security_decode_close};

 

//解码字节到函数参数,并最终调用Rpc函数

//以下代码自动生成

ParameterStack __security_decode_close(ByteArray& bytes, void* obj){

         Security * sec = (Security*)obj;

         Parameter p;

         ParameterStack pstack;

P = unMarshallingParameter(bytes,”int”);

Int reason = p;

         P = Sec->close(reason);

         Pstack.push(p);

         Return pstack;

}

 

 

posted @ 2010-09-24 02:13 放屁阿狗 阅读(279) | 评论 (0)编辑 收藏

一个朋友经常碰到要将大批量的照片输出到写真机,就不停的将图片加载进photoshop,然后排版,效率够慢的,便写个脚本把这些工作简化了
config.txt配置信息
1 item_hspace=0.5
2 item_vspace=0.5
3 item_width = 20 #15cm
4 item_height = 15
5 DPI=96
6 canvas_heigth=88 #200cm
7 canvas_rotation=90 
8 source = D:\共享\2010.9.20\小天鹅幼儿园小4班照片
9 outfile=final2.tiff

main.py处理代码
  1 #-*- coding:utf-8 -*-
  2 #
  3 #name: config.py
  4 #brief:
  5 #    系统配置文件
  6 #author: scott
  7 #
  8 
  9 
 10 import os,sys,time,os.path,traceback
 11 import zlib,binascii
 12 import PIL,Image
 13 import config
 14 
 15 DPI=96.0
 16 
 17 POINTS_PER_METER = DPI/2.54 * 100 #每米多少个像素
 18 POINT_PER_CMETER = DPI/2.54
 19 
 20 ITEM_HSPACE=0
 21 ITEM_VSPACE=1
 22 ITEM_WIDTH =#照片的宽度
 23 ITEM_HEIGTH = 0 #照片宽度决定了高度
 24 CANVAS_HEIGHT= 0 #画板高度,长度是无限制的
 25 CANVAS_ROTATION = -90 #最终输出照片进行旋转输出
 26 
 27 conf = config.SimpleConfig()
 28 conf.open('config.txt')
 29 DPI = conf.getPropertyValueAsFloat('DPI',96.0)
 30 ITEM_HSPACE = conf.getPropertyValueAsFloat('item_hspace',0.5* POINT_PER_CMETER
 31 ITEM_VSPACE = conf.getPropertyValueAsFloat('item_vspace',0.5* POINT_PER_CMETER
 32 ITEM_WIDTH = conf.getPropertyValueAsFloat('item_width',15* POINT_PER_CMETER
 33 ITEM_HEIGHT = conf.getPropertyValueAsFloat('item_height',10* POINT_PER_CMETER
 34 
 35 CANVAS_HEIGHT = conf.getPropertyValueAsFloat('canvas_heigth',200* POINT_PER_CMETER
 36 CANVAS_ROTATION = conf.getPropertyValueAsFloat('canvas_rotation',-90
 37 
 38 ITEM_HSPACE = int(ITEM_HSPACE)
 39 ITEM_VSPACE = int(ITEM_VSPACE)
 40 ITEM_WIDTH = int(ITEM_WIDTH)
 41 ITEM_HEIGHT = int(ITEM_HEIGHT)
 42 CANVAS_HEIGHT = int( CANVAS_HEIGHT)
 43 
 44 print conf.getPropertyValueAsFloat('canvas_rotation',-90)
 45 
 46 rows = CANVAS_HEIGHT / (ITEM_HEIGHT+ITEM_VSPACE)
 47 
 48 source = conf.getPropertyValue('source')
 49 final = conf.getPropertyValue('outfile')
 50 
 51 files = []
 52 
 53 imgsize=[0,0]
 54 
 55 for f in os.listdir(source):
 56     if os.path.isdir( "%s/%s"%(source,f)):
 57         continue
 58     try:
 59         imgfile = Image.open("%s/%s"%(source,f))
 60         size = imgfile.size
 61         if size[0]<size[1]:
 62             imgfile = imgfile.rotate(90)
 63             imgfile.save("%s/%s"%(source,f))
 64     except:
 65         continue
 66     files.append(    "%s/%s"%(source,f))
 67 #计算输出文件的大小
 68 cols = len(files)/(rows)
 69 cols = int(cols)
 70 if  len(files)%(rows) != 0:
 71     cols +=1
 72     
 73 CANVAS_WIDTH = cols * (ITEM_VSPACE+ITEM_WIDTH)
 74 imgsize = (CANVAS_WIDTH,CANVAS_HEIGHT)
 75 imgcanvas = Image.new('RGB',imgsize,0xffffff)
 76 
 77 print CANVAS_WIDTH,CANVAS_HEIGHT
 78 print cols,rows
 79 
 80 for c in range(cols):
 81     x = c * (ITEM_WIDTH+ITEM_HSPACE)
 82     for r in range( int(rows)):
 83         y = r * (ITEM_HEIGHT+ITEM_VSPACE)
 84         if len(files):
 85             file = files[0]
 86             files.remove(file)
 87             try:
 88                 print 'open file:',file
 89                 imgfile = Image.open(file)
 90                 print (x,y,x+ITEM_WIDTH,y+ITEM_HEIGHT)
 91                 imgfile = imgfile.resize((ITEM_WIDTH,ITEM_HEIGHT))
 92                 imgcanvas.paste(imgfile,(x,y,x+ITEM_WIDTH,y+ITEM_HEIGHT))
 93                 
 94                 #imgcanvas.paste(imgfile,(x,y))
 95             except:
 96                 print traceback.print_exc()
 97                 #sys.exit()
 98 if CANVAS_ROTATION:
 99     print CANVAS_ROTATION
100     imgcanvas = imgcanvas.rotate(CANVAS_ROTATION)
101     pass
102     
103 imgcanvas.save(final)
104 
105 



posted @ 2010-09-22 19:50 放屁阿狗 阅读(1661) | 评论 (0)编辑 收藏


/etc/resolv.conf
whois

/etc/exports
    /home/nfs 192.168.14.22(ro)

mount 192.168.14.2:/home/nfs /mnt/a




ls -F -S
wall
write
hostname,who ,id,
touch -c
rm -fr
df -h
du -hs
quota

cpio
制造文件或是目录的拷贝档案。

例1:find . | cpio-ocv > /dev/rmt/0m创建一个当前目录下的所有文件的存档文件。

例2:cpio –icdmv < /dev/rmt/0m从一个档案文件中恢复所有的文件

-o  制造一个备份。读取标准输入并且拷贝每一个文件到标准输出

-i  恢复一个备份。读取备份文件并且在磁盘上重新创建文件。             

-c  写文件头为ASCII码格式(如果同-o一起使用,在-i同样要使用这个选项)

-d  在需要时,重新建立目录结构

-m  保留当前修改的数据。(在版本控制时,十分有用)

-t  显示备份档案的内容列表

-u  无条件恢复(如果文件已经存在,这个选项会覆盖这个文件

-v  显示被拷贝的文件的一个列表

-x  处理特殊的设备文件
posted @ 2010-08-24 13:07 放屁阿狗 阅读(195) | 评论 (0)编辑 收藏

ice的slice由 scanner.l,grammar.y构成语法,并映射到不同的程序语言
posted @ 2010-07-16 12:47 放屁阿狗 阅读(462) | 评论 (0)编辑 收藏


我来这里加入5173的一个游戏研发部门,开发一项隐秘项目的开发。
项目又急工作量也大,难度也是不小,又是隐秘。
5173是做网络游戏虚拟货物交易,网游这么热,用户群体非常庞大,从而产生的交易行为具5173的统计能做到日2000w的单次,从中5173收取交易的佣金。很简单,5173就是一个中介,一个信用的中介,从02年起家,05年风头接入,现在号称做到全国最大的交易平台,据说现在在评测一款网游,准备也开始做游戏运营。
5173号称3000人的规模,交易员约2500人之众,要求每个员工上班都着西装,所以休息时间能看到比较壮观的现象,就是有密集的20岁上下的统一着装的小孩簇拥着一起过马路去食堂吃饭。 在金华的5173生活号称是生活消费为0,就是吃住公司全包。
扯远些了,继续谈5173的工作内容。由于交易量在增加,所以管理和支撑这么员工的开销必然很大,所以必须有一种解决方案来解决这个问题,那就是游戏自动交易机器人系统,也就是原本人工接入的交易买卖行为交由计算自动来解决。
顺便说一下,人工交易,就是买卖双方将自己的游戏账户、密码、金钱交与5173的交易员,由5173交易员来人工打开游戏,登录不同用户的账户来完成虚拟物品的交换或者买卖。对于交易员的职业道德素质也有一定的要求,这就不用过多解释了。。。
那机器人交易如何工作呢 ? 运行时,讲有几百台的游戏主机上线,安装好机器人和游戏之后由控制服务器自动下发从5173业务服务器发过来的订单到每台主机的游戏机器人,由机器人启动游戏进行交易。
机器人的实现有3种,一种叫外挂,可以通过模拟键盘鼠标来模拟游戏行为;第二种叫内挂,也是比较高深的技术,通过游戏进程注入二进制代码来结合系统钩子或者驱动来截获游戏运行的入口,加上分析游戏通信协议进行修改、分析、模拟游戏的行为;第三种叫做脱机,就是不用运行游戏客户端,直接破解了游戏的通信协议之后,采用socket开发模拟游戏的通信客户端来操作游戏行为。这三种技术在这里都有实现,4,5款游戏有10人负责开发,这个工作叫做逆向。
游戏的现在放外挂、盗号应经做得很完善了,而且通过频繁的更新游戏版本来防止外挂,所以做逆向的人非常的忙。这些人很专,工作也很专注,有几个专用汇编来做开发的,跟我聊天说道只会汇编,所以找不到工作,只好做这个,听了我笑了出来。
我的工作就是做游戏机器人的系统框架,将逆向的工作成果整合成一个系统,完成交易行为,也就是说他们做发动机,而我是做汽车的组装。
换成是n年前,我定是非常高兴的来到这里,因为能学点东,学点逆向的东西,可现在没有这种想法了,也不想去深入,毕竟这个东西非常耗精力,自己已经耽误不起。
为何说隐秘工作,道理在于并不想被游戏运营产商知道这里的存在,毕竟修改游戏是件不齿的事情,且如果游戏厂商来分析逆向的代码的话,这里的工作成果马上被游戏检测出来而使机器人 无效。
这个项目做了3个月了,这些人以前也是同一个团队,都是比较团结,来5173完成这个项目或者说系统,现在也是跟5173一体了。

01.07 三战金华
想来也有1个月时间在5173混了
两个抽烟倒霉鬼据说是被抓了正式开除了
刚吃完晚饭,再为这公司奉献的心血和视力、脑力、体力和键盘的磨损力
这里也是的冷,故说暂时取消了正式着装的制度,随便都可以了除了光小屁股


01.22 金华第二日
5点到了金华,这里的天气还是挺冷的
开了间108块的小旅店客房便去了公司
寒暄一番,里面挺热
晚上开了小时的会议,深刻感到要做游戏自动交易的难度和工作量
5173存在到现在且能做到游戏交易老大位置而不动摇就是用钱堆集出来的
5173这么容易的赚钱模式自己非常的眼红,可是无法效仿,没有大量钱投入简直无法做任何事情。
大的交易单量和人力成本的支出非常的矛盾
客服、运维、单包、邮寄这些交易的基本流程一个都不能少,开会又让我对5173业务上有新的认识,
异地单子的投诉单单电话费将是非常的大
晚上到了1,2点才搞到了数据的交易信息表,非常的累,同事都不知道那台1.137的主机在哪里,跑上去迅速备份了交易表,同时将监控器的日志也备份下来等待之后的分析
发现数据库被昨日清空了,说是为了备份,奶奶的,只得到了一点点数据。

继续想。。。




金华12.15
天继续阴沉,心情又是颇差
这么一堆的人,显得自己略老了些,做这一行确实有点绝望的感觉。还要自己努力表现跟这些小孩子去争什么呢
来这里 本事很轻松的心态,就是走走,看看,听听,想想,可是到现在为何这么的难受,仔细想想,大概是自己已经脱离坐班制度已经很久了,一直以来是轻轻松松的度过 每一天,一切都是自由自在;其次,自己不由自主的又陷入到努力工作去解决问题的恶性循环里去了,似乎不管是谁活,自己都是会忘我的投入进去,看到自己是这 个样子,其实很想将自己把出来,似乎像是毒品一样上瘾;再次就是这个垃圾公司,已经第三次跟门卫吵架了,要求穿西装,没有办法,晚上去超市买了条深色裤子 来应付。
有点想家的感觉了,想念那个氛围。仔细想来,原本自己不是这样的人,要么是人老了,心态老了,之前呆过几家公司对于封闭开发,出差我都是非常积极的,可现在却是十分的反感,没有感觉到有一种归属感,氛围的归属,也找不到了那种同事和朋友的那种感觉,只是在这里打工。
这些天很少想到自己的事情,该好好抽空想想来这里的目的了
感冒好了些,但鼻涕还有许多

金华 12.14
14一个要死的日志
这里的天气阴沉,有密语;感冒在持续,讲话都是嗡嗡的声音
这里的开发还是如火如荼的进行中,虽然有点乱头无序,但我还是比较投入的参与进去
前两天完成了第一个任务:解决100台游戏主机自动更新和启停游戏的功能,今天继续完善修正部分bug,搞了半天发现了python创建目录函数mkpath()的问题,此函数无法连续使用,最后没法采用os.mkdir()循环创建了多层目录
虽然嗓子还是有点不舒服,大概是出于刻意的放松的目的,去阳台抽了几口烟,呼吸了一下空气。
左右踱摆,到底是何种心态来这个公司,参与这个项目,现在自己也有点搞不明白了,本着想切入一下游戏交易行业,了解一下行业的业务内容,现在也是了解大半了;

金华.12.12
来金华已经第5日,基本生活在这个地方可以实现生活0成本,吃住都可以由公司解决
10点上班一般都是晚上12点才回去,许多人更晚。在这里的几天胃口变大了,9点的宾馆自助早餐,中饭、晚饭还有夜宵饭,这些都一顿没少且不要钱
心态还是要放好一点,多思考一下自己接下来的目标和内容

5173.10日
7日下午到达5173总部,这里好称有2.5k人,刚来到公司大楼门口便见一群西装革履的年轻人从左至右鱼贯而来,原来到了吃饭时间
人的确很多,还是指纹打卡,这里都是3班倒的坐班制度,这些nk的人都是游戏交易员,也就是本地的廉价劳动力。
我们办公地点是在5楼,人也有20来个,很多都是做逆向的,所谓逆向就是分析游戏的处理逻辑,然后就是模拟这些人与游戏交互的行为,也成为cracker。
在这里没吃过早饭,晚饭5点半就吃了,晚上10点半也有夜宵,吃得人也要排队,不过都不要钱
这些人都是睡觉的人,10上班到晚上11点都还不愿意走,这也是要不得的

到2010年6月,我考虑离职了,公司的环境非常的不舒服,当初人事介绍的诸多公司福利等现在全然无存,有点上当的感觉
工资12k扣完拿9.5k,没有多考虑就提交了erp的离职申请,正好回家看世界杯,部门头也同意了
本想混完6月再跑路的,据说有季度奖,我换算了一下有2k,不过由于不爽就不想压抑自己了,不要了
5173是没有年终奖的,但全年发13个月工资,多出来的一个作为季度奖金来发放,2-2-2-4,最后一个季度发放40%


posted @ 2010-06-19 16:27 放屁阿狗 阅读(561) | 评论 (1)编辑 收藏

     摘要: 5173.com提出抓取同行交易系统的业务信息来做数据分析而提出这么个需求给我,花了1天用python完成 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->  1 # -*- coding:utf-8...  阅读全文
posted @ 2010-06-10 23:23 放屁阿狗 阅读(6268) | 评论 (1)编辑 收藏

http://118.126.7.153/maps/test_map.html
12级别采用tilecache产生图块到postgres存储,绘制过程花费了12天,真希望有海量空间和更多的机器供我使用阿


posted @ 2010-05-16 17:08 放屁阿狗 阅读(418) | 评论 (0)编辑 收藏

Boost
Qt
wxWidgets
Ace
Ice

posted @ 2010-05-13 03:12 放屁阿狗 阅读(218) | 评论 (2)编辑 收藏

Ice的设计思想非常好,通过slice定义之后产生一堆的通信框架代码来自动化完成对象数据的序列化
由于ice是基于Rpc的,底层通信细节被屏蔽掉了,甚至是连接的自动重复建立,可喜又可悲,有些应用必须要关心这些底部的通信细节,
如果直接用socket又嫌太麻烦了,不同的应用都是在重复的进行开发通信协议,解包和打包花销很很多的精力,这些工作都是重复的,没有技术含量而且容易出错.
之前开发过mtslib通信库来解决socket通信问题,使两端都是以消息包的形式进行通信,解决了socket两段buffer的管理
也看过ice的代码实现,slice2cpp用yacc&lex进行词法语法的处理
对象的自动序列化这是我所感兴趣的,同ice一样提供一个通信环境,然后用户可以自定义自己的通信数据,通过idl的形式自动产生序列化代码并编译进用户工程.
这种方式与ice又不同在于没有那么傻瓜化,但简化了用户处理消息报的过程.
这样要完成一个类似ice的rpc调用也是没有那么简单
yacc/lex,lemon,

posted @ 2010-05-10 15:27 放屁阿狗 阅读(501) | 评论 (1)编辑 收藏

仅列出标题
共25页: First 8 9 10 11 12 13 14 15 16 Last