这段时间赋闲在家,对近些年的工作进行了复盘。工作么多年,一点小心得,分享一下。

1. 如何定义一个能力很强的游戏程序员

  • 拥有很强的battle能力,从根本上去说服一个人,改变一个人的看法,让他配合自己的工作,这个非常难(反例:级别压制,我是你是上级,或者我的上级要求这么做),更高阶是做倒知己知彼,站在多方角度考虑,给出靠谱方案。
  • 具备一定的前瞻性,在设计框架的时候充分考虑到将来的迭代计划,能预计到将来策划可能会提什么样的需求(纵使策划现在矢口否认),在现有的框架下,尽可能快的满足策划的需求。
  • 独当一面的能力,在项目的某一个方面或者某个模块,做到事无巨细,是团队里最熟悉这一模块的一员,不仅能出色得完成份内工作,还能驱动需求的迭代,给其它岗位的同事提出建议和解决方案。
  • 工作效率高,善用各类工具或者能自己写一些自动化工具进行编码,测试等。具体体现在,交付速度快,bug少,返工少,加班少。
  • 攻坚能力,有能解决核心问题,如关键算法,修复致命bug。
  • 知识面要广,不拘限于某种单一的语言或者技术。每一种语言或者技术都有它擅长的邻域,只要把它用在恰当的地方即可。

2. 如何定义一个能力很强的主程

  • 首先应该是一个能力很强的程序员plus
  • 具备很强的识人能力,在短短的面试阶段,能甄别出真正适合自己团队的人才,所谓的适合不是面试笔试对答如流,而是具备上面说的优秀程序员的特性,或者非常有潜力成为这样的程序。
  • 合理的安排任务,不把下属当工具人:根据团队成员的特性指派合适的任务,并给予高度自主权,所谓的合适,可能是该程序在某一方面的特长,或者是某一方面的技能需要历练,在出色的完成工作同时能得到能力上的提升。
  • 把控进度的能力。对于完成策划需求的用时预估要准确,在给下属留有一定缓冲的同时,尽可能早的让策划看到原型。
  • 对游戏有深刻理解,知道策划最终想要什么,还有他们此时此刻最想要什么。这有助于版本的快速迭代和上面说的进度把控。
  • 留得往人。给下属争取更多的利益,给下属足够的发展空间。很简单直接,要么钱给够,要么不让人受委屈。

3. 关于开源

  • 代码就像是程序员的底裤,不能随便给人看的。代码开源,就是把自己的内裤扒出来给人看。秀出来的,一定是很屌的东西。
  • 不能为了开源而开源。开源应该是一个造轮子的过程,这个轮子不能重复造。一定是因为某个项目,或者库,可能会对别人有帮助。不能是说,以前我做了个很牛很牛的项目,现在把它的代码开源,来炫一下技。还有一些通过歪门邪道来骗赞的就不说了。
  • 开源可以让自己的综合能力得到迅速提高。开源,其实说白了就是相互白嫖的过程。社区里什么牛马蛇神都有,大家共同维护一个项目,无私奉献和拿来主意都能各取所需,大家者有各自的需求。在这里,每设计一个接口,每提供一个功能,都会不由自主的考虑,这是不是大部分人想要的?会不会让项目变能冗余?能不能做的更通用点?扩展性好不好?等等这些问题,我们的自己的闭源项目里是很少思考的。长期以往,就会本能的写出更优质的代码,我们程序员最向往的高内聚,低耦合的代码。
阅读全文 »

vscode的C#智能提示老是会自动失效,最近又遇到了新问题
今天突然就出现了这个报错

System.Composition.Hosting.CompositionFailedException: No export was found for the contract 'ILoggerFactory'

原因是vscode的omnisharp自动更新了,在settings.json里找到omnisharp.path字段,把lastest值改为1.39.2

"omnisharp.path": "1.39.2",

1. 插件的自动更新是问题频发的根源,下面总结了一些稳定能用的版本

  • dotnet framework版本:v4.7.1
  • unity的vscode package版本:1.2.0(在manifest.json中配置, “com.unity.ide.vscode”: “1.2.0”)
  • vscode的C#插件版本:v1.24.0(在卸载按钮旁边的小剪头,点击安装另一个版本)
  • vscode的omnisharp版本:1.39.2(settings.json里的omnisharp.path字段)

2. dotnet framework默认安装路径

阅读全文 »

最近在youtube上传了个应用的预览视频,给GooglePlay展示用,但是没过几天就被GooglePlay撤掉了。猜测原因是广告问题,我点开我上传的视频,总是偶尔会有广告出来。看文档是关闭视频的创收即可,我翻遍了整个youtube的各种设置界面都找不到关闭创收的按钮或选项,我压根就没有达到youtube合作伙伴的要求,何来关闭创收一说,可是我的视频广告是从何而来呢。

折腾了好久,还是搞不定,最后只能救助于GooglePlay的客服。

我的APP视频预览看不到了,猜测原因是我的youtube视频仍存在广告。但是我的youtube账号未加入合作伙伴计划,我在创收页面找不到关闭广告的选项,在选中视频内容的时候也找不到创收的选项。请问有什么办法关闭youtube的广告,或者是其它办法让APP的视频预览恢复?

谷歌的回信

经过调查,目前系统侦测到您的宣传影片含有盈利功能,而是否含有相关功能是由系统来判定的。如果您的视频中含有广告,则必须停用广告,视频才能在 Play 商店中展示。我们希望当用户浏览 Play 商店时他们看到的视频展示的是您的应用,而不是广告,因为广告可能会令用户感到困惑。

您可以参考此帮助中心与以下视频要求:
·关闭影片中的营利功能
·上传一个不含获利声明的视频,然后在 Google Play 管理中心内更新视频网址。
·将视频的隐私设置设为公开或不公开列出。请勿将其设为不公开。
·确保您的视频可嵌入 Play 商店 Android 应用和网站。
重要提示:如果您的视频使用了受版权保护的内容,那么即使您为该视频关闭了获利功能,也可能无法避免其展示广告。在这种情况下,您需要换一个视频(该视频应不含受版权保护的内容,不带有获利声明)。

经检查发现,果然是因为我的视频里的背景音乐收到了版本主张。
Youtube对音乐版本非常严格,不像国内的抖音一类可以随便嫖。有商用需求的话,一定要避免版权问题,可以直接购买该音乐的版权(通常我们一般人做不到),又或者可以免费使用CC版权音乐。

0.0.1. 推荐几个CC版权的网站

阅读全文 »

Light Show Creator这个APP已经上架一段时间,有用户反馈说,自动模式虽然好用,但是手动模式更加适合手机平台。于是我在新版本里添加了手动模式的规划。

其实在最早的版本,是有手动模式的,实现的原理跟xLights类似,都是通过时间轴来进行编辑。结果做出来效果很不理想,时间轴的控制更加精细,更适合用鼠标的控制,而不适合触摸屏。所以我在第一个正式版本抛弃了手动模式,只保留了自动模式。

旧版本
旧版本很难用

我最近看到了一个钢琴类APP,受到了一点启发,我可以把控制车灯的方式改为类似钢琴的键盘,按下灯亮,松手灯灭。可以单独控制一边的车灯,也可以按黑键同时激活两边的车灯。

在手动录制的同时,也可以激活自动模式,只需要自己控制关键的几个车灯即可。

nginx做http代理的默认配置对请求包体大小有限制1M以内,如果超过个值会返回413错误码,及Request Entity Too Large这些的错误信息。修改一下nginx的配置即可:

http {
...
#上传文件的大小限制 默认1m
client_max_body_size 8m;
...
}

从windows直接拷贝文件到linux/macos可能会出现行尾留下”^M”符号,git diff可见到,是因为windows的换行使用的是\r\n两个字符。

1. 安装dos2unix

Ubuntu/Debian:

sudo apt-get install dos2unix

Centos:

sudo yum install dos2unix

MacOS

阅读全文 »

腾讯云的Ubuntu使用apt安装软件会报找不到源

Err:1 http://mirrors.tencentyun.com/ubuntu bionic/main amd64 m4 amd64 1.4.18-1
Something wicked happened resolving 'mirrors.tencentyun.com:http' (-5 - No address associated with hostname)
Ign:2 http://mirrors.tencentyun.com/ubuntu bionic/main amd64 autoconf all 2.69-11
Ign:3 http://mirrors.tencentyun.com/ubuntu bionic/main amd64 autotools-dev all 20180224.1
Ign:4 http://mirrors.tencentyun.com/ubuntu bionic/main amd64 automake all 1:1.15.1-3ubuntu2
Err:2 http://mirrors.tencentyun.com/ubuntu bionic/main amd64 autoconf all 2.69-11
Something wicked happened resolving 'mirrors.tencentyun.com:http' (-5 - No address associated with hostname)
Err:3 http://mirrors.tencentyun.com/ubuntu bionic/main amd64 autotools-dev all 20180224.1
Something wicked happened resolving 'mirrors.tencentyun.com:http' (-5 - No address associated with hostname)
Err:4 http://mirrors.tencentyun.com/ubuntu bionic/main amd64 automake all 1:1.15.1-3ubuntu2
Something wicked happened resolving 'mirrors.tencentyun.com:http' (-5 - No address associated with hostname)
E: Failed to fetch http://mirrors.tencentyun.com/ubuntu/pool/main/m/m4/m4_1.4.18-1_amd64.deb Something wicked happened resolving 'mirrors.tencentyun.com:http' (-5 - No address associated with hostname)
E: Failed to fetch http://mirrors.tencentyun.com/ubuntu/pool/main/a/autoconf/autoconf_2.69-11_all.deb Something wicked happened resolving 'mirrors.tencentyun.com:http' (-5 - No address associated with hostname)
E: Failed to fetch http://mirrors.tencentyun.com/ubuntu/pool/main/a/autotools-dev/autotools-dev_20180224.1_all.deb Something wicked happened resolving 'mirrors.tencentyun.com:http' (-5 - No address associated with hostname)
E: Failed to fetch http://mirrors.tencentyun.com/ubuntu/pool/main/a/automake-1.15/automake_1.15.1-3ubuntu2_all.deb Something wicked happened resolving 'mirrors.tencentyun.com:http' (-5 - No address associated with hostname)
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

看着应该是mirrors.tencentyun.com挂了,都ping不通,更换源就好了:

0.1. 首先备份源列表

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bk

0.2. 修改sources.list文件

sudo vi /etc/apt/sources.list
阅读全文 »

最近在尝试给APP引入账号第三方SDK,再三比较,如果是出海的APP,Firebase是不二选择。

接入的过程中比较坎坷,分别尝试了AS导出aar包到unity,还有从unity导出AS工程,都以失败告终(IOS还未尝试)。

其实是根本就是我没仔细阅读官方文档,google官方有提供unitypackage,将其导入unity并在后台做简单设置即可。

官方文档:https://firebase.google.com/docs/auth/unity/start

0.1. 在Firebase后台注册应用


(注意,注册的时的包名要跟应用的最终包名一致)

0.2. 在应用设置中添加SHA证书指纹

阅读全文 »

Unity在引入最新版本Firebase发现报错:

Could not determine the dependencies of task ':launcher:lintVitalRelease'.
> This project uses AndroidX dependencies, but the 'android.useAndroidX' property is not enabled. Set this property to true in the gradle.properties file and retry.
The following AndroidX dependencies are detected: androidx.fragment:fragment:1.0.0, androidx.slidingpanelayout:slidingpanelayout:1.0.0,

大致意思是项目依赖了AndroidX,但是android.useAndroidX没有enabled

解决方案:

BuildSettings->Player->Publishing Settings 勾选Custom Gradle Properties Template。之后unity会自动生模板配置 Assets/Plugins/Android/gradleTemplate.properties
在properties文件中添加以下两行:

android.useAndroidX=true
android.enableJetifier=true

修改之后:

阅读全文 »

安卓手机从Android11开始支持无线调试,终于可以抛弃数据线了。

0.1. 先决条件

  • Android 手机需要是 Android 11 以上系统;
  • 电脑上的 Android SDK 工具需要 ≥ 30.0.0 版本,确认方式是:adb –version

0.2. 使用配对码配对

  • 手机上启用开发者模式 -> USB 调试 -> 启用无线调试选项
  • 点击无线调试 –> 点击使用配对码配对设备 可以看到配对码、ip 和端口号
  • 在电脑上的终端终端运行 adb pair ipaddr:port
  • 输入 adb devices -l 即可看到通过无线连接成功的设备

0.3. 使用二维码配对

  • 手机上启用开发者模式 -> USB 调试 -> 启用无线调试选项
  • 点击扫码配对,在Android stuido设备菜单,选择Pair Devices Using WiFi
阅读全文 »