分类: 技术相关

番禺游记

这个周末去了一趟广州番禺,也就是中国最大的大型游戏机研发销售中心。有一些对于市场规模的了解,是我之前都不知道的。特别写一篇文章记录一下。

先感谢下之前常去的一家机厅,谢谢刘经理借我一个可以打听市场的时候可以用的,小有名气的名号。

华立的梁经理还对这家厅有所记忆,还特意问了那几组三国志大战怎么样了。

【新的认知】

1、截至2018年初,大型游戏机市场知名品牌变动

目前主流海外品牌的娱乐机代理(taitosnk playmorebandai namco entsegaIGS)已经几乎全部由华立完成。个人认为这种代理权的集中对于这个市场来说并不是好事情,尤其是当代理商决策失误的时候,可能阻碍进一步新机台的代理。

举例的话,参考下华立还在卖的 DM/GF V7 ?

哦对了, KONAMI 2017年下半年到现在没有新机台面向海外推出。

至于其他的,知名品牌还是那么多,基本每个品牌都会专注于自己的一部分产品,比如 pp虎 的厂家,再比如宝辉专注模拟,等等。

2、移动支付

管理系统行业依旧是五花八门。就这么说,在蔡三村公交站等车的时候旁边的女士都在向我推销他们的管理系统。但是由于中国移动支付行业的兴起,现在已经有面向无人值守,但也兼容一般机台投币器的直接微信扫码支付设备了。

乐摇摇投币器

在番禺走访的时候,基本推荐的都是这一家的这款设备。终端的竞争还没开始还是已经结束了呢?有点意思。

3、VR

VR 很有意思。世宇科技今年出了 5 款新的 VR 游戏。其中有一款跳舞机,两款模拟(骑行之类的),两款枪战。

世宇的 VR 是在 Windows 平台上,基于 HTC Vive 开发的。

跳舞机只有 12 首歌,有点少。

不过他们说还在添加。

可能还是以体验玩法为主。

其他家的话,星力动漫城有一整个区域是 VR 小镇。但是绝大部分店家还是以 VR 座椅之类的这些来作为把戏。意思不太大。

4、商业沟通模式

不得不承认,在刚刚过去的这个周六,我大概加了我从开始使用微信以来所加过的所有人的人数总和。而且绝大部分,特别是特定机台的 to B 端介绍材料绝大部分已经都是电子化的了。

啊,好想把这个 32G 的手机换个大一点的。

【实地探访指南】

已经有很多像我一样的,特别是近水楼台的广东本地的玩家已经探访过这里了。不过就我个人还是踩了一些坑的,因此列出来,供大家参考。

某种意义上的圣地巡礼,哈哈。

强烈推荐几人成行选择租车,因为公共交通不是很好。高铁站有神州租车的站点,不过这次我没有租车。

虽说没有租车,作为替代我体验了一下滴滴。路况也是比较堵的,而且有几个比较大的急弯,红绿灯也基本都是闪黄灯,何况还是连续的村落,经常有人横穿马路。如果自驾请一定注意安全。

我的出发地是北京,从北京西坐高铁或者动卧大概十个小时就可以直达广州的高铁站——广州南站。广州南站本身就在番禺,到市桥也很方便。

地铁有7号线,在长隆换3号线就可以到达市桥

市桥算是番禺的一个市中心,在地铁站附近就可以找到去动漫产业园的公交 番27或者番7 都可以。

说是动漫产业园,其实是几个连接起来的村子。这几个村子虽然都是相邻的,但是连起来也有五六公里的长度,而公交车在非高峰时期(上班、中午、下班)往往半小时到四十五分钟一趟,非常浪费时间。

这边早上一般九点半开始营业,下午能到五六点的样子。

我的建议是坐到龙美村下车,这里是新机台的起点。龙美村——蔡三村这一线有星力动漫产业园,也是华立、世宇等企业展厅的所在地。

然后从龙美村或者蔡三村接着往远离市区的方向坐车(番27或者番51/51B),新水坑开始就是一些二手机台的集散地了。

樟边村也是个上过调查报告的地方,整个村子都在做二手游戏机的回收、翻新、拆解等工作。有惊喜。

然后由于时间的关系,比较远的地方没能成行,比如金三村之类的,那边也有一些熟悉的企业在。

每个村子用大概四十多分钟就可以走完,遇到感兴趣的店可以多坐一会儿。

【传闻和传闻确认】

1、太鼓达人

国内太鼓玩家已经非常、非常少了。不过也正因为如此,剩下的玩家都是对这个游戏有着真爱的人。

在华立刚刚从官网删掉太鼓达人 12 亚洲版的时候,我就发过朋友圈,说国内已经没有正版太鼓了。这次去华立和世宇也确认了这件事情。世宇其实就卖过一阵子太鼓,早早就停了。华立也大概在一年前彻底停止了新的太鼓达人的机台的生产。

希望是引进太鼓达人新框体之前的市场空白期吧。

2、广州世嘉和一个不知道牌子的厂家

为什么对广州世嘉这个牌子这么有印象,是因为他们的 Logo 是仿照 SEGA 的风格做的。这一次去,星力动漫产业园的广州世嘉门店没有开门,神采飞扬的门店里面也没看到舞萌机台的身影。然后因为去的比较早,在园区里闲逛的时候看到了另一个 SEA 什么开头的店,也是这个风格的 Logo 。

看来神采这是打算走到黑呀。

哈哈。

3、新机台引进

去华立了解了一下奥特曼的机器,价格挺好的,不过运营成本比较高。感觉不会推的太开。

销售完全没有听说过 Project DIVA AC 的信息,可能也是因为级别不够。

【音乐游戏二手机台概述】

如果有货的话,很便宜。

DEAC 不砍价一万,真的就是纯硬件价格了。毕竟也是2600k + 不错的显卡。

部分机台价格居高不下,比如太鼓达人 12 亚,至今还在一万多元。不过想了想,就算很便宜也没地方摆。

绝大部分机器是台湾那边的机器,铁琴、音旋风之类的。

哦对了,有一台 Ez2dj 。写着写着想起来好像是之前线人给我发过。

剩下的热门,太鼓、 ubt 、 rb 、maimai 等等 普遍都没货。当地普遍认为音乐游戏机已经不再受市场欢迎了,而且流转比较快。

感觉想要淘机器开店的,要抓紧了。

不过说回来,有一些事情让我觉得很有意思。

第一件事是有一家店摆了一台 SDVX 3 ,卖家倒是很坦诚,说是摆了好多长得像学生的人进去看。

等等,我看上去有这么嫩么?哈哈

第二件事是有一家店说他们同时有太鼓达人 12 和 13 ,然后表示,节目可以随便换,反正就是复制。

第三件事,我觉得有一些厂家可能会官方回收二手机台,然后翻新了按照新的出。

嗯,我说的是 maimai 。

我也没有实锤,只是他们这个尿性,我觉得做得出来。

 

总之,番禺是个好地方,真的准备开那玩意的时候,再来好好转转。

nginx前端代理导致nginx暴露监听端口问题解决

其实我还是挺想吐槽一下我国的网络管理制度的。一刀切的政策导致很多爱好者交流的地方直接就毁灭于无形之中了。比如说中华相声网,再比如更多名声更小的论坛。

中华相声网

其实这个事情很简单,在我国开论坛需要企业资质+24小时值守,这两条我我们很多爱好者性质的论坛就完全没戏。
当然有些论坛我不知道是怎么备过案的,比如某新生代,再比如某吧

算了,不扯非技术,来聊聊应付这一规定中间的一些技术难题吧。

就在前两天,我们伟大的电信网络开启了前所未有的海外网站白名单制度。不仅是在黑名单上的网站、 IP 无法访问,其他的未进行白名单备案的服务器和 IP 也只能有限的访问 22 80 443 这几个端口(经过实测有些灰色 IP 比如本机甚至只能访问 443 端口)。这就逼着我把拖延症拖了快一年的全站升级 https 的事情放上议程。

经过花花的推荐,我选择了 Caddy 对 Nginx 外面包裹一层的方法来解决这个问题。

小课堂:
Caddy是个用 Go 语言开发的轻量级 http 服务器,特点是内置了全自动续命 续期的 Let's Encrypt 服务。而后者是有效期较短的免费 https 证书服务,旨在进一步提高互联网的安全等级,最重要的还是免费。

于是按照教程写了一万个 redirect 和 https 域名适配,之后发现一个很严重的 bug 。

根据这位仁兄博客的说法,具体的问题是:

但是访问子目录时,除非在子目录后面再加一条“/”,否则就会遇到网址自动重定向至Nginx监听的端口。假设你Nginx站点监听的端口是123,你本来访问的地址是http://domain.com/wp-admin,会自动重定向至http://domain.com:123/wp-admin

这位仁兄当然也给出了解决方案,也就是在 nginx 的 http 段增加配置:

port_in_redirect off;

然而在本机未生效。后来发现是 nginx 版本过低。具体的发现过程如下:

阅读 nginx 官方文档对这个参数的定义

http://nginx.org/en/docs/http/ngx_http_core_module.html#port_in_redirect

然后查看其关联指令absolute_redirect ,发现版本是1.90。
于是怒升1.8到1.12.2(上周刚发布的),搞定。

Node.js socket stream 和异步函数

考虑如下实现场景:
使用 Node.js 实现一个服务端,客户端使用 Socket 连接之后处理数据并返回。
其中,处理数据的场景中很容易出现异步函数(比如数据库查询,或者读配置文件),导致还没把 chunk 处理完,pipe就跑到下一步去了,导致客户端直接被关掉了。
查了一晚上 so 和各种官方 github ,最后还是通过读官方文档解决了。
先给出解决方案。
在 Create Server 的时候,设置 allowHalfOpen 为 true 。
官方对这一参数的解释是:
allowHalfOpen Indicates whether half-opened TCP connections are allowed. See net.createServer() and the 'end' event for details. Defaults to false.
就是允许创建的 Socket 处于半开模式(数据流暂时停止而连接仍然建立)。这样的话,就可以让处理器 (parser) 放心地去处理数据,等返回后再将处理过的 chunk 吐回到 pipe 中。
不过有一点需要注意,如果允许了 HalfOpen ,那么就一定要在处理完数据后手动关掉 Socket ,也就是文中所说的调用 Socket.end() 方法,否则的话 tcp 连接就无法正常结束了。

exp.
简单实现场景:


const server = net.createServer({allowHalfOpen :true}, (socket) => {
    socket.once('error', (err) => {
        console.log('[ERROR]');
    });

    socket
        .pipe(...)
        .pipe(through2(function(chunk,enc,callback){
            let _this = this;
            _parser.parseData(chunk).then(function(chunk){
                _this.push(chunk);
                socket.end();
            }).catch(function(err){
                _this.push(err);
                socket.end();
            });
        }))
        .pipe(...)
    .pipe(socket);
});
server.listen(..., ..., () => {
    console.log('[INFO]');
});

其中,parseData是一个使用了 asnyc 方法的函数。

初识 react-intl

5.9更新
继续踩坑。
因为要传递自定义的函数,于是将 react-router 属性中的 component 改成了 render 。结果发现props中的 match 和 history 直接不见了。原因是又踩了另外一个坑。

正确的打开姿势是:

<Match exactly pattern="/" render={(props) => <Home msg={"hello"} {...props} />} />

*还是没有超过初学者的范畴,参考 git issue : https://github.com/ReactTraining/react-router/issues/4293
=============

最近拿手头一个小项目尝试了一下 React 。项目中涉及到了国际化(其实就是中英文切换),于是(也没有第二选择地)使用了雅虎出的 react-intl
说句实在话就是文档看的有点头疼,因为 react 自带全家桶属性,而它提供的挺多东西还是没能用得上的。
开发过程中参考了两个项目:
1)https://github.com/DWboutin/react-webpack-startup
2)https://segmentfault.com/a/1190000005824920
遇到的最大的问题就是在于要提供一个切换语言的按钮。 React 的组件化让我包在最外面的整站 IntlProvider 需要一层一层地把事件传递到页面内部。
大概结构就是:


<IntlProvider ...config>
<App>
...
<Router render={()=><PageContent changeLanguageFunc={this.changeLang}/>}>
...
</App>
</IntlProvider>

然后在<PageContent/>中通过 this.props.changeLanguageFunc 来调用。如果你的这个函数还在下一级的组件里,那就要继续传递了。
这个方法主要参考的是 AlloyTeam 的这篇文章:http://www.alloyteam.com/2016/01/some-methods-of-reactjs-communication-between-components/

真正学会 React 是个漫长的过程啊~

这个假红包

早上家族群里开始群发一个假的微信红包。我不禁有点好奇,微信这么强大的智能识别还是不能解决这个问题?于是起床抓了个包。
分享的地址是
shizhuang.ifeng.com/share/topic/159053-1-0?sz_ch=friend&sz_platform=2&skt=89341487982719
查看之后发现存在 xss 。

跟进去发现跳转到了
http://m.ufoto.com.cn/post/2523312?skt=83851487983287
这个页面槽点就更多了,当初写这个页面的程序员估计坟头草都几丈高了。基本没有标签过滤,就算做了有限的处理也是可以轻松绕过的。

看了一下 JS ,有点像当年挂马玩的那一套,关键字编码后直接在页面加载完成后替换整个全屏。其实微信要屏蔽这个也不是不可能,只要禁止掉内置浏览器中的通过 document.write 或者 js dom 操作注入的 html 代码段的跨域请求就可以了。
唉,难怪微信浏览器要设白名单。

试图去保护一个逝者的梦

各位看到这篇文章的时候,我可能已经写了很久了。这篇文章里面不会有连续的干货,是我以一个局外人的身份,试图拯救一个逝者生前遗愿的过程。
当然,如果失败了,这篇文章可能永远都不会发出来,但是我依然想尽自己最大的努力。

雪拉比是我最喜欢的 精灵宝可梦·金银 世代的超神兽。这也是一个已经因病逝去的精灵宝可梦同好站 —— PM双子星 的站长的昵称。
下面的豆瓣链接是网站继任写在头七的文章。
https://www.douban.com/note/274999353/

20170223
今天早上把 PTB 的首页修整了一下,于是进行日常的友情链接清理。果然又发现了一个挂掉的链接。但是,却是我最不想看到挂掉的链接。
PM双子星。
其实我现在的角色真的有点像守墓人,每天日常清理一下 PTB 遗留下来的垃圾,挨个点一下友情链接看看谁有挂掉了。双子跟我们的关系其实是很不错的。当年从 PM杂货店 时代开始就有联系,我还去玩了一把版主。后来双子的图区几位朋友都是很好的人,包括上次去香港见到的阿米
去查了一下whois,域名是一个月以前过期的。
当然,毕竟是我是局外人,还是要先从联系相关人士起步。
根据《纪念森林の宇》一文的描述,貌似在很多年前来北京的时候跟一个相关人士有面基。于是通过方法找到了联系方式。
是的,是咖啡哦。
微博和QQ都没有理我。
更新:好在通过朋友,联系上了。
然后去搜了一下域名的备案和所有人的信息。域名的所有者留的电话,还是不要去打扰比较好。

原因有两个:
1、域名注册已经12年了,不知道信息是否还存在,虽然知道升号之后的规则。
2、不知道是谁的电话,假如是原站长的,贸然打扰逝者家属不好。

总之把消息散布出去了,看看其他人的回应吧。

23:25
域名果然过期了。外人只能干着急。

有人跑路了,真是令人悲伤啊。

23:38
拿到了后台的管理账号密码,小 IDC 真是不靠谱。

总之提个工单,明天上班打电话。

20170224
早上睡不着很早就醒了。赶紧起来电话联系空间商。
南京毕竟是安徽省会(哈哈哈),普通话还是很标准的。
好在赶在deadline之前把域名费用给结清了。
多少钱已经不重要了。

好在域名安全了。

真是松了一口气。

从微信小程序导航学到的姿势

知晓程序
最早的一个微信小程序导航,但是大家都知道,微信么,立牌坊(并没有),并不支持直接识别二维码进入小程序。于是各类导航就不能直接把二维码打印在屏幕上让程序识别。于是各位导航都是各显神通。
之前闲逛发现这家解决了一个历史难题: Safari 操作剪贴板。
Clipboard
周末做了点 maimai 相关的微小的工作,于是就把这个工作交给了还要解 ticket 的花花( @liuyanghejerry )。
花花果然很快,五分钟就搞定了。
那么先 Show the code 。

var funs = {
  copySelectedRange: function(element) {
    var range = document.createRange();
    range.selectNodeContents(element);
    var selection = document.getSelection();
    selection.removeAllRanges(),
    selection.addRange(range),
    document.execCommand("copy", true);
  },
};

之后,发挥了单身程序狗的优秀特质,去 Can I use 上看了一眼。
发现上面竟然说的是
Only supports OS clipboard reading/writing via shortcut keys, not through document.execCommand().

这脸打的。

依旧看不起Linux

最近因为某个小项目,又一头扎进了 Bay Trail 的天坑里。自从 Intel 把 Atom 系列的性能拉到了低端桌面平台的水平之后,越来越多的 x86 架构开发板就成了大家的选择(包括我)。不过毕竟 Intel 是商业公司,还是要赚钱的。所以目前绝大部分 Bay Trail 的平台都是 Windows (特别是 Windows 10)限定的。
当然,既然是 x86 那就没有不可能。因为这一平台限定使用 ia32 的 UEFI 方式启动,因此只要找到合适的 ia32 平台的 EFI bin ,就可以在板子上成功启动各种各样的 Linux 发行版。
这期间我参考的东西还真不少。

https://wyr.me/316.html
http://linuxiumcomau.blogspot.com/2016/10/running-ubuntu-on-intel-bay-trail-and.html
https://plus.google.com/+IanMORRISON/posts/UNWdwRMqy3j

其中 第二篇 中提及, Z3735f 主板的音频芯片在直到目前最新的 Linux 内核上依旧是有问题的。特别的在 Debian 发行版中,系统会将音频线路识别为一个叫做 Intel HDMI 的音频设备,导致的结果就是开发板上的 3.5mm 音频接口和 HDMI 均没有任何音频。根据相关资料和邮件(主要是 https://www.mjmwired.net/kernel/Documentation/sound/alsa/HD-Audio-Models.txt),尝试自行编译 4.9 的 Linux 内核,包括使用 Linuxium 的成品内核,均不能解决无法正确识别声卡的问题。
有点坑,早上起来去跟厂商要回了 Win 10 的镜像,晚上使用构建 PE 将板子刷回了 Win10 。
这期间的坑也挺大的。开发板客服显然有点业余,给我的 Win10 镜像是个 wim 封装,然而拆开看了一下里面的引导并不正确。
首先需要做一个板子可以引导的 ia32 uefi 的 PE 。我使用了无忧论坛的这个模板镜像和从网上随便下的一个 Win8 PE 。

PE ISO模板:度娘盘了个盘

然后把厂家的 wim 镜像拷到优盘里面进行安装。

然后,继续 Windows 呗。坑爹的 Bay Trail 。

将博客的静态资源迁移到了七牛

最近实在是比较忙。高估了自己的能力。
现在主要是编码速度实在不尽如人意。以后针对这一点好好做一下训练吧。

最近抽空把博客速度慢的问题好好解决了一下。主要使用七牛云来作为主要的托管媒介。
细分一下这个需求的话分为如下两点:
1、域名未备案导致的解析速度缓慢,由于页面内存在比较多的本地资源,导致加载速度感人,手机上的表现是白屏,电脑上也时不时抽风。
2、图片资源使用七牛默认域名(测试域名),导致新版Chrome认为资源不安全,拒绝加载。
3、JS类库来自本地或海外cdn,速度感人。

于是花了大概十分钟的时间解决了一下这个问题。不得不说,七牛的工具虽然做的比较烂,但是能用。

现将步骤记录在这里。

1、WP侧安装插件七牛云储存
插件链接:https://wordpress.org/plugins/wpjam-qiniu/
也可以直接在后台搜索安装。
正常配置,填写AK和SK, 同时为你的储存区域分配一个SSL域名(这是要收钱的,不过4毛钱1G也就那样了吧),填写为你的加速域名

2、在服务器上下载七牛迁移工具(应该是同步工具)
https://qiniu.kf5.com/hc/kb/article/68954/
按照页面说明初始化,并将wp-contents和wp-include目录中的静态资源(css、js)按照路径,以分别的目录前缀(wp-contents/和wp-include/)上传到七牛云的储存空间。

然后就可以正常的享受这个加速了。