分类 思考 下的文章

  • 游戏公司经常看到策划修改配置表的时候各种冲突,各种饮用到老的文件,还有在导出到游戏引擎的时候与配置表内的内容不一致,差不多两年前意识到这个问题的时候策划们的解决方案差不多就几个,分人头每人负责几个表,有交叉的地方用svn的lock功能,为了保证同步就给配置表放在svn里面,用log去表示当前内容的版本与客户端是否一致。
  • 我个人认为之所以大家这样用,是因为暂时可以规避掉互相冲突的问题,也可能是因为公司策划内可修改配置文件的人不够多,没有碰到过灾难,大不了删掉重新导。
  • 还有一个方向觉得这是个问题的就是在持续集成构建包的时候,外网的某些继承模块拿不到内网的svn数据,导致得自己手动写shell去移动进客户端和服务器工程中,然后再去测试是否一致。
  • 当时想到的就是最好的情况就是实时修改数据,实时同步到所有的策划的显示器上,在打包的时候策划和程序不需要动手,直接从外网的数据源拉取,转换格式,放进包中,服务器也一样。当时找到的方案就是google doc/sheets,当时的实时程度是废了半天的劲找朋友给他装翻墙软件来测试,实时程度是被惊叹了,国内当时有个叫石墨文档的也做同样的内容,刚刚创业起步,做的不是很好,今天想到可以试试去拉取google sheets的内容去paser试试,就做了这么个玩意,最大的问题就是google的凭据认证的过程,有网络的影响,有权限,还有大小写的影响,最后都解决掉了,一条python命令可以拿到表格中的一列内容。
  • 其中依赖两个py的库分别是,oauth2client,google-api-python-client
  • 虽然我认为完全外网的开发环境和协作的方式很好,很多人也觉得不错,但是每人会用,大部分还是因为不安全,和稳定性,他们认为内网最安全,最稳定,毕竟可以拔网线。

035D572C-D5D6-41FC-A51D-E21CA5644426.png

AD2C2E62-F707-42D7-871F-07051915FF07.png

from __future__ import print_function
import httplib2
import os

from apiclient import discovery
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage

try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None

# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/sheets.googleapis.com-python-quickstart.json
SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Google Sheets API Python Quickstart'


def get_credentials():
    """Gets valid user credentials from storage.

    If nothing has been stored, or if the stored credentials are invalid,
    the OAuth2 flow is completed to obtain the new credentials.

    Returns:
        Credentials, the obtained credential.
    """
    home_dir = os.path.expanduser('~')
    credential_dir = os.path.join(home_dir, '.credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)
    credential_path = os.path.join(credential_dir,
                                   'sheets.googleapis.com-python-quickstart.json')
    print("client_secret path = ",credential_path)
    store = Storage(credential_path)
    credentials = store.get()
    if not credentials or credentials.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        flow.user_agent = APPLICATION_NAME
        if flags:
            credentials = tools.run_flow(flow, store, flags)
        else: # Needed only for compatibility with Python 2.6
            credentials = tools.run(flow, store)
        print('Storing credentials to ' + credential_path)
    return credentials

def main():
    """Shows basic usage of the Sheets API.

    Creates a Sheets API service object and prints the names and majors of
    students in a sample spreadsheet:
    https://docs.google.com/spreadsheets/d/1sEkLLL5kCKWkQQAoQW2Pxy0uh7jXmRTFIrTSr0NmNK4/edit
    """
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
                    'version=v4')
    service = discovery.build('sheets', 'v4', http=http,
                              discoveryServiceUrl=discoveryUrl)

    spreadsheetId = '1sEkLLL5kCKWkQQAoQW2Pxy0uh7jXmRTFIrTSr0NmNK4'
    rangeName = 'test!A:A'
    result = service.spreadsheets().values().get(
        spreadsheetId=spreadsheetId, range=rangeName).execute()
    values = result.get('values', [])

    if not values:
        print('No data found.')
    else:
        print('B Cloumns:')
        for row in values:
            # Print columns A and E, which correspond to indices 0 and 4.
            if row[0]:
                print('%s' % (row[0]))


if __name__ == '__main__':
    main()

人与人之间的友好度增加起来会非常的慢,但是一次伤害就可能使这段友情降为路人,甚至仇人。我们应该学会与人沟通的技巧,减少伤害,促进交流,研究生同学聚餐被高中同学刺死的惨剧希望不会这你我之间发生。
我也曾愤青过,遇到不满的事情直言不讳,遇到佩服的事情加油点赞,也曾伤害过很多人,话语可以说非常激烈,我也后悔过,但绝大多数都道过歉了,但是彼此的信任程度得从头再来,见面,谈话也略微的尴尬。
还有我最亲近的亲人的歉至今还有有勇气说出口。

上海有很多公交车站点是有穿插一个自行车道在中间,经常会导致公交车和自行车一起到一个站点,然后在凉亭下等公交的人就要穿过自行车道去上公交,这个时候自行车要么快速穿过,要么停下让行人,而有趣的是,每次都是行人看着骑自行车的人,小碎步过自行车道,然后自行车看到有人想要过,也会减速,最终自行车先通过,行人继续通过,大家的时间都浪费了。

这既是一篇日记,也是一篇blog,来正式记录一下清明环崇明岛骑行。
还记得去年清明是很忙,忙着应付清明的第一次测试,索性清明应该就没有出去玩,到上海的第一次去户外是五一,和星子他们去的雁荡山,至今记忆犹新,认识了好多这个圈子里的人,小明,燕子,太阳花,还有那个说去四姑娘山的,两个领队就更不提了,这几个都是多次一起出去玩的。
今年的清明出行可以说是策划已久,差不多三月初就有想法了,当时是打算骑两天到昆山走一圈,顺便和坦克项目的后端程序聊一下,这期间一直都是一个人,没想过几个人一起去,毕竟我骑车的目的不纯。在差不多三月三十号的时候邻居小夏同学问我要不要去清明去骑车,当时有犹豫,问了一下详细情况决定去,毕竟人多好玩,主要是他跟我说有个妹子一起去,结果从头到尾都没有看到。
一起同行的除了我和小夏外还有三个小夏的同事,第一天五个人一起到的农家,第二天是四个人回来,那个人去找他妹子去了,我恍然大悟原来是这样。
第一天出发是2号的中午11点去集合点,12点半出发,从体育馆穿过市中心到上海火车站再到原平路,运城路到共和新路,一直北上到石洞口码头,前面在市内除了红绿灯比较多以外其他都还好,到外环外的时候有几座大桥,得有个十几二十米高的爬坡,还是有出汗了。
三点四十到的码头,运气好在是四十五刚好有一班,第一次坐会航行一个多小时的船,一直坐在过道上吹风,海风那叫一个凉快,像喝了雪碧一样,尤其是在距离码头不远的时候有一段冲刺,高速不休息。
登岛的时候已经差不多五点了,上岸赶紧拍照留念以后就匆匆离开了,从登岛码头到当晚住宿的农家差不多37公里,再加上上岛的第一段路走错了,导航到了不能走自行车的陈海公路北段,不得不回头到团建公路再继续南下,崇明的路况有这么一个特点,就是水多,到处都是河道,一旦路走错了,不是继续向前,大概方向对就可以(平原的方法),在水道多的地方可能会一个路走错几十公里都没有桥可以过河,去年过去回家的时候在高速上也碰到过,常州高速堵死,自以为下了高速差不多,结果发现要多走一百多公里去绕一大圈过河。
晚上将近八点才到农家,那时是真的累了,崇明晚上风大,再加上六点左右就天黑了,有一个半小时的夜路,还有一点就是崇明的桥真的是太多了,我们第一天过了感觉得有二三十座桥,一上一下最累人。第一天最后码表统计有将近90公里,已经不错了,毕竟12点半才出发的。
第二天我醒来的比较早,毕竟我感觉到累十点多就睡了,七点多起来洗了个澡,看到窗外的风景还是挺悠闲的,农家就在小河旁边,河对岸的公园和晨练的老人,河上打捞的渔船,岸边钓鱼的渔翁,一派祥和。等他们洗漱完毕8点20下去吃早餐,完事商量了一下当天的行程就出发了,出发的时候应该是九点半,一路向北沿x501,x523,北沿公路到x59x向西,直到南门码头,路上11点14半点休息两次,13点吃的午饭,到码头是三点半四点左右,出了北沿公路西进的这段很难走,主要是风太大,怕下雨,再加上累,速度就时快时慢,又那么一次是真的想停下来,蹬得我想推着车子走,而有时难受的感觉就是那么一会,顶一顶也就过去了,过了这一会就浑身轻松了。
从南门码头上船又回到了石洞口码头,下船的时候应该快六点了,累的我在船上呼呼睡了一个多小时,下船以后北风吹得我差点感冒。一切都挡不住回家的心情,在共和新路上一路狂飙到场中路右转灵石路,再到长寿路,江苏路,到淮海中路右转宛平路,到家已经快十点了,小夏在楼下买了个西瓜花了58,也就十来斤吧,这个季节就是贵,不过在这种久旱的状态下,吃西瓜简直凉爽。
最后带队的统计,清明两天骑了245km,又刷新了记录。