在家办公,再次搭建开发环境,加上这次多次碰到,做此记录
subl 是我安装的编辑器,如果你看到这这篇博客,把subl换成自己的编辑器(vi、vim)即可。
1.在terminal 输入:subl ~/.bashrc

2.找到这个地方并添加自己的命令,可添加多个指令,用”;”隔开

3.在terminal 输入:source ~/.bashrc (立即生效)
在家办公,再次搭建开发环境,加上这次多次碰到,做此记录
subl 是我安装的编辑器,如果你看到这这篇博客,把subl换成自己的编辑器(vi、vim)即可。
1.在terminal 输入:subl ~/.bashrc

2.找到这个地方并添加自己的命令,可添加多个指令,用”;”隔开

3.在terminal 输入:source ~/.bashrc (立即生效)
1.在terminal 输入 svn 看是否有安装svn
** **
2.如果和我一样没装有svn则执行 sudo apt install subversion
** **
** 3.在首次使用svn check out的时候,会直接提示输入账号密码。**
** 4.如果想要修改svn的账号与密码,删除目录 ~/.subversion/auth/ 下的所有文件。下一次操作svn时会提示你重新输入用户名和密码的。换成你想用的就可以了。然后系统默认会记录下来的。**
在家办公,安装开发环境后无法粘贴。查询并自己实践后,解决方法如下:
** 1. sudo apt-get autoremove open-vm-tools **
** 2. sudo apt-get install open-vm-tools-desktop **
** 3.重启虚拟机**
** **我通过以上方法即可解决,如果执行步骤1失败,可参考下查看我的另一篇博客 ,看看是否为相同的错误
“ubuntu apt-get安装软件Unable to locate package…”
由于受疫情影响(希望快点好起来),只能在家办公,再一次安装开发环境。
使用 apt-get install碰到以下问题

** 1.sudo apt-get update 更新软件源**

如果更新成功,无报错,无警告,则执行自己的下载即可
但是我执行最后有警告
Some index files failed to download. They have been ignored, or old ones used instead.
** **查询资料之后发现是自己的更新源问题,需要切换更新源,执行以下步骤
2.搜索打开 software&update

打开之后选择

选择other
** **
更换源之后执行 sudo apt-get update,无报错,之后再下载自己需要下载的即可
可能是这次下载的Ubuntu的问题,导致这个问题的出现,以前没碰到过。
博主最近的工作是开发游戏的任务系统。领导看了我的代码后,给我提出了一些意见。
任务情况大概是这样的,一个玩家登陆后,客户端会显示任务按钮,玩家点击后即可查看自己的任务。按照策划的需求,玩家目前有十几个任务。每个玩家的任务数据,都要记录在DB(数据库)中。
我最开始的做法是:
1.如果游戏开启了任务系统,当玩家登陆的时候,我会给每个任务都分配默认值。
2.将这些默认值都记录进db中。
3.在玩家点开任务图标时,客户端请求玩家的任务数据,服务器返回。
在偶然的情况下,虽然我得代码也能实现功能,但领导发现了我的代码会瞬间做很多的db操作,然后告诉我内容大概如下:“一般db操作就是我们服务器的瓶颈之一,可以不用一开始就给每个任务分配默认值,并记录进db。客户端请求的时候,直接返回一个默认值,当玩家参与了具体任务时,再对玩家的数据进行计算,并记录入数据库。”,
我之后进行思考觉得太tm有道理了。
1.可能有的玩家只登陆了一次,点开了任务图标,但是并且不做任务,我会在他点开图标时给他记录全部任务数据(默认值)。
** 2.可能有的玩家登陆了,只做了一个任务,之后便不玩了,但是我会在他点开图标时给他记录全部任务数据(默认值)。**
** 3.一瞬间,很多玩家首次点开任务图标,会造成瞬间很多很多的db操作。**
。。。。
太多的理由表明这是一个很糟糕的设计。
我在思考后,将程序改动整理后表达大概如下:
** 1.玩家点开任务图标,客户端请求任务数据时,如果数据库中没有记录玩家的数据,直接返回一个默认的值。例如:任务为杀1000只青蛙,直接则返回0只,并不用记录到db中**
** 2.当玩家参与到具体的任务时,再记录到db。例如:玩家现在杀了100只青蛙,则将100记录到db中。等到玩家下次点开任务图标时,返回存贮再db中的100。**
** 这样修改后,一开始那些默认的各种任务的默认值都不会写入db,即使有的玩家之登录一次,也点开了任务系统,也不会记录他的数据到db,一瞬间很多玩家首次点开任务系统,也不会有大量的数据瞬间要写入db。**
** **做此纪录,我可能还是有一些地方设计得不够好,欢迎相互讨论。
博主入职做游戏到现在已经是7个月的时间,框架是skynet,这段时间内,我大多写的都是游戏的活动,任务。其中这些东西都是有有效期限制的。
比如,活动是每日重新统计,每日任务是每天重新统计,每周任务是每周一的 00:00重新统计。那么就需要一个特定时间来reset用户的数据。
我刚开始的做法是,每天的 00:00,reset玩家的每日活动数据,每日任务数据。有一次我向我的经理请教问题的时候,他看了我的代码,对我的代码的评价大概是:你这么写也没什么错误,也没什么问题,但是可能会多出很多没必要的运算,比如一个玩家,他今天登陆了,之后三四天都没有登陆,但是你在这三四天也会去reset他的数据,如果有一个玩家,登陆了一次之后,再也不登陆了,你也会去reset他的数据。这样会多处很多没必要的db操作,玩家数量一上来,处理量就大了。我一听,觉得太tm的有道理了,经理果然不一样 = =!,牛逼,之后他对我进行了一下指点,做以下记录:
** 1.lazy update(好像是这么叫的),需要reset数据时,再去reset,这样可以减少很多db操作。**
** 2.每日任务,每日活动则记录玩家的参加活动时间(任务时间),当要更新活动或者任务时,再去判断当前时间与活动时间(任务时间)是否为同一天,如果是同一天,则不用reset,如果不是同一天,则reset玩家的活动与任务数据,并更新玩家的上次参加活动时间(任务时间)。**
** 3.同理别的也一样,当玩家触发事件的时间如果 大于或者等于 需要更新数据的时间,则reset玩家db中的数据。**
最近的工作是要求写一个任务系统,需要在特定日期重置任务,或者在天数后重置任务。
这就延伸出一个问题,如何得知条件天数后的日期。
这个问题的难点在于,每个月的天数不一样,加上相同的天数后每个月变化后的日期怎么处理。
例如,我们要求40天后的日期
1.算出当时间,以表表示。
2.算出40天后的日期。
程序与结果如下
1 | local now_time = os.date("*t", os.time()) |

1.os.date创建日期表时now_time,所有的字段均在有效范围之内。(例如, now_time.daya+40之后,now_time.day = 57)
2.os.time传入一个修改后的日期表now_time(now_time.day = 57)时,其中的字段不需要归一化,会自动处理,得到新时间戳
3.得到的t2时间戳通过os.date转化为日期表,及可得到40天后的被归一化日期表。
4.同理也可以通过改变hour来计算5小时后,改变min来计算100分钟后,改变month来计算6个月后的日期。
这两天工作,碰到一个实用的mysql存贮json问题,需要查找mysql中存贮的json中的json作此记录。
因为mysql是关系型数据库,所以如果想在一个key中存贮更多的数据,存贮一个json是不错的选择(支持存贮多层的json)。
我用到的activity_conf表格中activity_config中存贮的就是json。
1 | DROP TABLE IF EXISTS `activity_conf`; |
我需要获取 activity_config中存贮的end_time,而end_time是两层json如下

可用以下语句
1 | select activity_id, json_extract(activity_config, '$.end_time.conf_value') as end_time from activity_conf; |
查找结果如下

1 | select json_extract( key, '$.fir_json_key.sec_json_key') from table; |
打完收工
mysql是关系型数据库,为了方便的记录更多的数据,现在工作中用的mysql记录得value是以json的形式记录的。
例如:
player_data表格结构是这样的:
1 | DROP TABLE IF EXISTS `player_data`; |
player_data中玩家的数据是这样记录的:
key:uid — value:{“data”: { “user_prize”: 0}
我需要计算所有玩家user_prize的总和,这样即可
1 | select sum(data->"$.user_prize") from player_data where data->"$.user_prize" is not null |

mysql中存贮json,应用十分的强大,不仅可以存贮单层的key(如上),还可以可以存贮多层的key,关于多层key的应用之后在更新。