五子棋小游戏

看到一个帖子说腾讯前端的面试题是让写一个五子棋小游戏 实现胜负判断,并给出赢棋提示。 任意一方赢棋,锁定棋盘。 尽可能考虑游戏的扩展性,界面可用 DOM/ Canvas 实现,并且切换实现方式代价最小。 实现悔棋和撤销悔棋功能。 人机对战部分可选。 挺有意思的,尝试自己写一个。 代码:https://github.com/chairuosen/my-five demo:http://demo.ruosen.io/my-five/dist/ 思路 首先,要求渲染层可替换,那么逻辑代码就一定要高度抽象,仅对数据操作,然后每一次变动由数据渲染出画面,应该对外提供一个五子棋类,提供api查询棋盘状态,和下棋,撤销,重置等动作。然后可以注册update事件监听来更新渲染。 类 棋子: 状态[未分配,黑,白] 重置方法 因为要点击空白部分来放置棋子,与其判断点击位置来放置棋子数据,不如一开始就铺满棋子只是不显示, ... read more

js 实现 immutable

想到一种利用Proxy实现immutable的方法,非常简单,不知道为什么其他库那么大? function immutable(source) { return new Proxy(source,{ get:function(target,key){ try{ return immutable(target[key]); }catch(e){ return target[key]; } },set:function(){} }); } https://github.com/chairuosen/my-immutable-js ... read more

群晖笔记

ssh免密配完需要 chmod 755 ~,默认居然是777 配sudo免密单个用户不成功,最后把admin组改成NOPASSWD才可以,不知为何 局域网文件共享。windows需要开启网络发现。匿名共享需要开启群晖guest用户,guest用户在控制面板>用户>高级里面先去掉强制密码检查才能设置无密码。 ... read more

Firewalld 笔记

sudo service firewalld start|stop|status sudo firewall-cmd --list-ports sudo firewall-cmd --permanent --add-port=<port>[-<port>]/<protocol> sudo firewall-cmd --permanent --remove-port=<port>[-<port>]/<protocol> sudo firewall-cmd --reload ... read more

用 Vue 造了一个 jsFiddle 的轮子

Github: https://github.com/chairuosen/demo-runner Demo: http://demo.ruosen.io/demo-runner/ jsFiddle 每次提交都需要 post 请求回来才能看结果,比较慢用起来不爽,国内同类产品又没有 emmet 。 所以造了个轮子,纯前端跑结果,零延迟,像用本地编辑器一样 Ctrl+S 看预览结果。并且异步保存到后端,url自动变化,可以分享给他人。 另外,里面自己封装了一个 c9 的 ace editor 的 Vue 组件 https://github.com/chairuosen/vue-ace-editor ... read more