分类: 作品

发表跟作品有关日志、截图、幻灯、文档、帮助等的目录,可能和其他频道有重叠

  • 复盘 mywordle.org

    复盘 mywordle.org

    去年,有位开发者设计了一个填字游戏 wordle,取得了巨大的成功,最后被纽约时报斥资百万收购。就像众多成功产品一样,wordle 也有很多追随者和模仿者,其中就包括我们做的 mywordle.org

    刚上线时,因为优化得当,排名不错;如今,随着 wordle 游戏的关注度消退,这个产品已经趋于平静,访问量跌入谷底。于是写篇文章总结下技术、产品、运营方面的经验得失。

    技术向

    技术栈

    之前发过笔记:使用 Vite+Vue3+TypeScript+Tailwind CSS 开发 Wordle

    • Vue3 + Vue-router + Vuex
    • Vite
    • TypeScript
    • TailwindCSS
    • 骨架屏
    • nginx
    • i18n (编辑本地 json)
    • PWA

    纯静态页面,通过构建脚本一次性发布,后面就不需要服务器运算,只需要 CDN,运维成本很低,容易扩展。

    前端通过适当的分包实现按需加载,加快打开速度,提升用户体验。实际效果不错,搜索排名和留存都相当好。Lighthouse 一度基本满分。

    挑战0:全新技术栈

    项目启动时,Vite、Vue3、TypeScript 的内容不算很多,技术生态也没有完全适配,花了不少时间去学习。不过好在当时有时间,慢慢也捋顺了,虽然有一些问题到今天也没能妥善解决,但并没有影响整体进度。

    挑战1:多语言多模式共存

    当时存在两个模式:

    • hourly,每小时一个词
    • unlimited,随便玩

    以及十几种语言。因为我们是静态网站,想实现 /:lang/:type 和 /:type/:lang 共存,就要同时打包这么多组目录组合。如果将来又增加其它类型,就还要成倍增加。但是几个目录里的内容又是完全一样的,很浪费。

    现在想想,应该通过 nginx 来解决这个问题,不要放在前端构建脚本端。

    挑战2:WebRTC

    我们准备尝试用 WebRTC 实现多人对战,如果能成的话,将来还有很多应用场景。可惜 WebRTC 比我想象中复杂很多,不是抽点时间看看文档就能搞定的。当时我已经开始在 code.fun 的全职工作,时间不如启动时充足。

    于是此功能最终停留在 demo,未能整合进产品,更别提上线。

    未解决问题

    • import 类型的时候必须 import type { xxx } from '@/some/types',经常出错
    • TailwindCSS 添加新样式时无法即时生效,需要等下一次更新,或者手动刷新页面
    • ESLint 有很多误报,主要是 <script setup> 导致的未使用变量问题

    产品/运营向

    原始版 wordle 一天只能猜一次,一个词。很多玩家感觉不过瘾,所以搜索 wordle unlimited 就很多,我们也是那会儿做好,然后优化得当,排名很靠前,Google 前4(最好前3),吃了不少流量。

    但是很快,wordle unlimited 的搜索量就下降了,到现在跌了90%,只有一成。

    这是流量统计,外国人也是上班摸鱼,周末不玩页游 [Facepalm]

    这部分流量流去了 quodle 关键词,还是这个猜词游戏,但是一次猜 4 个词,更考验技巧和统筹能力。

    有趣的是,quodle 主流分两个模式:daily 和 practice。daily 还是一天一次,用的是高频词,比较好猜;practice 相当于我们做的 unlimited,不限次数,但是,用的是全部词库,几乎猜不到。

    本来有两个方向,quodle 和 pvp,我说服朋友搞 pvp:我说 quodle 这种玩法太硬核了,没人爱玩;pvp 用 WebRTC 搞联机,成本低效果好,用户粘性大。结果还是我的锅,以前没搞过 WebRTC,搞了两周没搞出来,工作一忙就扔掉了……

    总结,wordle 是个比较轻量的游戏,玩法简单,可玩性有限。daily 模式可能更合适;unlimited 有些饮鸩止渴,快速消耗掉了玩家的热情。quodle 的开发者注意到这一点,一方面提供新的玩法刺激用户,另一方面利用全量词库难以游戏的特点尽量将玩家留在每天一次的游戏里。

    总结

    从这个项目中,我学到很多技术之外的知识,产品和运营方面都刷新了我的知识边界、扩展了我的视野,很有意思。

    比如,mywordle.org 是纯静态网站,运维只需要 CDN,加上优化得当,费用很低。凭借早发优势和一些 SEO,流量和广告收入都不错。即使以我的工资标准和开发习惯(动不动重构、选择新技术栈,等)来支付开发费用,也能达到不错的收益结果(目前折算 1/3 吧)。后期收入虽低,但很稳定,也不需要继续投入研发成本,而且还能作为高质量搜索导入来源。以后我应该多做几个类似的网站。

    项目启动时,我刚被金山开除,于是可以投入大量的时间去学习使用没接触过的技术栈;后面开始继续全职工作了,就只有一点时间可以支配,以至于 WebRTC 都没能用上。不知道将来还有没有类似的机会——我的心情很矛盾,既希望有,又希望没有,哈哈。

  • 超全面全栈入门项目:fastest

    超全面全栈入门项目:fastest

    TL;DR.

    前些天做了个覆盖面很广的项目:FastTest。涉及到静态网站、node.js 后端 API、响应式、多语言、Vue3 全家桶、前端工具链、nginx 配置等一系列技术,都是很基础的应用,相信对大家入门很有帮助。

    GitHub:https://github.com/meathill/fasttest

    欢迎阅读学习,有任何问题均可提问或提 issue。


    前些日子有个朋友找到我,想请我帮他做个项目。我看了一眼需求,不太想接:这个项目太小,要多了不合适;要少了感觉又不值当——有那时间还不如砍两把胖虎。

    后来我仔细一想,感觉这个项目很适合拿来做教程,而且是非常全面的全栈入门教程。

    先来看需求。他的需求很简单:开发一个测速应用。用户打开页面,点击按钮,然后下载一些东西,下载完成之后,告诉他他的网速是多少。与之前的测速产品不同,这个应用不下载大文件,而是从各种 CDN 下载 JS 库和 SDK,因为大部分 web 应用都依赖这些资源,所以可能更接近真实体验。

    关于需求我们不深入讨论(我觉得挺有道理,但也未必有道理到哪儿去……),只看实现。为了满足这个需求,我们需要开发这些东西:

    1. 静态页,让用户能够测速。这就需要:
      1. HTML+CSS+JS,静态资源
      2. 响应式,支持桌面和移动端
      3. 多语言支持
    2. 后台,能调整待测资源、修改翻译、控制广告、查看数据。这就需要:
      1. 友好的 Admin panel:vue 全家桶
      2. 后端 API:express.js + node.js server
      3. 自动发布静态页(webpack 前端工具链)
    3. 部署到服务器:
      1. 静态服务供给用户端页面和资源
      2. SPA 服务,提供后台 Admin Panel 给管理员
      3. 反向代理 express.js API
      4. 配置 CDN
    4. 其它,比如版本管理、前端预处理工具,等等

    这些东西可以说是非常全栈,除了没有移动 App、没有数据库操作,其它 Web 开发的东西都用到了。而且涉及到技术也都很基础,没有特别深入的东西。再加上,这个项目会上线,会迭代,是个真实产品。所以,很适合拿来做教程,大部分观众,不管是什么背景,都可以拿来入门。

    于是我就答应了,然后断断续续在直播的时间把它做了出来。当然还有一些问题,不过大部分功能都就绪了。

    项目放在 GitHub 上:https://github.com/meathill/fasttest,有需要的同学请自由取用。对其中任何技术点有问题都可以提问或者开 issue。

    网站地址在 https://afasttest.com

    视频还需要一些时间来整理,将来慢慢放出来吧。着急且有时间的同学可以自行从百度网盘下载:https://pan.baidu.com/s/1KPuCM-9gPd0hQsr5Df_PnA 提取码: w8f2。

  • 《Electron + Vue 实战建站工具开发》读者圈开启

    《Electron + Vue 实战建站工具开发》读者圈开启

    今年很努力的做视频培训,收效一般。不过在社区收获了一些声望,还得到一个写书的机会,跟编辑讨论再三,确定下内容:Electron + Vue 实战开发。

    然后呢,也不是我有意拖延,因为很快就入职贵司,一直都很忙,将近两个月,渐渐熟悉了框架,也适应了节奏(希望如此),现在得抓紧时间补书稿了。

    最开始想在知加边写边发,结果知加没挺到现在,所以只好退而求其次,在 SF 开了读者圈——倒不是说 SF 不好,而是他们家的“技术圈”从产品形态上来看,不是非常合适。

    Anyway,欢迎大家加入圈子,您会得到:

    1. 读到这本书全文,并且更早读到
    2. 获得实时问题解答
    3. 得到实时勘误
    4. 得到实体书(具体看出版社给多少了……)

    入圈链接

  • 第一次视频直播结束

    第一次视频直播结束

    经过认真准备,热情推销,今天进行了第一次视频课程直播。

    我有点紧张,比面对小胖陈胜他们紧张得多,呵呵。所以表现不太理想,中间卡壳好几次,不过也有观众说看现场写代码 Debug 也挺好的。

    另外就是人数略显惨淡,15人在线,29人购买,还有很多是我主动推销的……

    希望以后会更好。

    录像回看地址:https://segmentfault.com/l/1500000008694676

    Slide 地址:https://meathill-lecture.github.io/jquery-backbone-vue/


    下一场预告:

    下一场是关于 Promise 应用的,结合之前写 Meart 的经验,应该也很值得一看。

    地址:https://segmentfault.com/l/1500000008757392

  • 新站点,填坑

    新站点,填坑

    Nodejs发展起来后,出现类似WordPress这样的开源博客工具是早晚的事儿。作为前端和新技术爱好者,我一直很关注这方面的动态,所以Ghost出现之后我就准备尝试一下。看过前面博客的同学可能也知道,我买过不少机器,所以很快搭了个新站点出来。

    搭博客很容易,就是不知道写啥,然后Ghost版本从0.3拖到如今都0.5.8了……想来想去决定在上面专发系列文章,比如之前挖下坑的《ActionScript3中的插件模式开发》,正好被几个人催更,虽然只是几个人,但也是鼓励嘛,所以新年要在新博客连载完。

    新博客的地址:http://serial.meathill.com/,敬请关注。
    正在更新的连载:ActionScript3中的插件模式开发,也请关注。

    所以以后就是俩博客一起跑,这个博客记录知识点和生活,那个博客系统的写一些比较大的题目。

  • 山维空间2014

    山维空间2014

    (图为花莲七星潭,与文章无关。明天去台湾呀,咿呀咿呀哟~~)

    开博客以来,虽然也挂着广告,但我其实并不是很操心访问量——我当然希望有人来看,但是因为懒,不想太花时间……而且你看电视上网站一上线就会有人访问……同样的缘故,我一直只向Google提交sitemap,所以百度开始并未收录这个博客。今年国庆后,不知为何百度突然开始引流,访问量蹭蹭涨起来。但是广告收入几乎一点没变……

    WordPress每逢年底都会给一份总结报告,其中“TOP文章排行榜”引起了我的注意。访问量最高的文章里,有些写作时间较早,可能当时我的认识理解还不到位,也可能技术本身发生了不小的变化,总之某些内容已经不适用了。所以今年除去早就计划好的长篇连载之外,我准备把这些文章也翻出来更新一下。

    以下就是今年的TOP10文章:

    导出Table数据并保存为Excel

    这篇文章还算比较新,问题不大。关于多表格的操作可以补进去。

    禁用鼠标滚轮事件

    说实话我很不明白为啥这篇文章的访问量这么高,可能是页游开发的同行吧。看内容的话,随着浏览器升级似乎也该更新了,不过考虑到现在Flash的市场状况,往后放吧。

    HTML5的File API应用

    这篇文章写于肉大师第一版时,很早以前。正如我在更新中所说,当时我弄混了FileFileSystem。其实这个题目很大,还是写成系列文章罢。

    悲催的Android Webview——记新版广告墙开发Android Hybrid App四大坑原来早期Android的WebView真的很奇葩

    关于Android Hybrid应用的几篇文章,内容没太大问题,多半是表述方面的,不很影响阅读或者后来的实施。长篇连载时会好好说说。

    Backbone.Collection.fetch小优化一则

    使用Backbone两年之后,我终于明白这才是正确姿势……回头写一篇Backbone最佳实践吧。

    本地部署weinre帮助移动开发

    工具应用,没什么问题。

    重写Backbone.js的加载动作

    刚开始使用Backbone那会儿写的,问题比较大,得改一改。

    Phonegap 2.6在Android上的Icon设置

    其实问题不在phonegap,而是小米手机的图标刷新很慢。

    总结

    一些排名靠后的文章也有问题,我就不一一列举了。整体说来,可以分成三部分:Backbone最佳实践、Hybrid应用开发、HTML5文件API。慢慢写吧。

  • 新个人首页

    新个人首页

    最近比较忙,为了排遣压力,把我的首页重新整了一下:点我访问

    感谢各种开源组织和个人,感谢github提供静态托管服务,感谢点乐让我成长起来,可以随手一搞就完成这个项目。

    (更多…)

  • 二维码小工具

    这两天利用业余时间,做了个二维码的小工具,用来在页面里插入二维码。这个工具比较方便编辑同学在自己的文章或者专题里添加二维码,推广手机应用,或者手机网站。——要么说第一份工作很重要呢,离开媒体那么多年,想做点独立项目还是跟编辑工作有关。

    工具地址是:http://meatqr.sinaapp.com/

    代码也是完全开放的,采用MIT协议,托管在Github上,地址是:http://meathill.github.com/qrcode.js

    有兴趣的同学试用下吧,记得给我反馈哟,我会不断更新维护的。


  • 新年写书计划——《ActionScript 3.0高级编程》

    看到那个年仅21岁的外国男孩,周游世界,写完《Javascript Web应用开发》,然后入职twitter,无法不佩服起老外的敢想敢做。

    新年是一个定各种计划,许各种愿的时候。此时此刻我决定写一本书,书名暂定《ActionScript 3.0 高级编程》,内容可想而知。这本书未必能最终付印,可能最后会成为我博客上的一系列教程,总之我决定写出来,因为写书这件事儿听起来太nb了。

    (更多…)

  • Astinus 0.2版升级计划

    我决定,正式将“肉山用户路径分析系统”命名为“Astinus”,中文名“阿斯特纽斯”。关于阿斯特纽斯,可以看下这个链接

    在8月内,我计划对该产品进行一次升级,升级的主要Features如下:

    (更多…)