·

弦圈APP已开发完成,准备发布

发布时间:2025-02-28 01:17:37阅读量:114
普通文章
转载请注明来源

经过两个月的漫长艰难开发,大家期待已久的弦圈APP终于开发完成,目前正在准备发布的工作。马上弦圈APP的第一个版本就要跟大家见面了,暂时先推出安卓版,之后测试完苹果手机再推出IOS版。

目前弦圈APP的核心功能已经基本开发完毕,包括:写文章、发帖子、回答问题、创建圈子、看文章、看书、看帖子、看词条、圈子、看问题和回答、发布评论与回复、点赞与踩、收藏夹、关注用户、搜索、用户中心、个人主页、设置、消息中心等等。但是仍然有一些未完成的功能,这些功能计划之后慢慢更新吧,它们包括:创建词条、写书、提问、任务中心、商店、赞赏、钱包与充值、交易中心、签到等等。

上面提到的都是大的功能模块,下面我就提及一下APP一些细节的问题,这些问题虽然小,但也同样重要。

  • 与网页端弦圈不同,手机端弦圈APP使用markdown编辑器,用于文本格式、图片、链接等输入。关于markdown语法可自行百度,事实上markdown语法写起来比富文本要方便。至于为啥使用markdown编辑器,原因如下:

首先APP跟网页端(Web端)有很大的不同,这使得想要跟Web端一样用富文本编辑器会变得困难。绝大多数现有的富文本编辑器都是基于WebView的,而且设置繁琐,且自定义困难,加之WebView也被诟病影响性能,所以使用基于TextInput的编辑器是最好的。

然而事实上,TextInput的富文本编辑器没几个好的,如果说移动端富文本编辑器生态很差,那么TextInput编辑器可以说是尤甚于此。native的富文本编辑器也是没找到适合的,最后选择了使用native的markdown编辑器。原以为事情就这样结束了,结果react-native-live-markdown的编辑器有bug,修复不了,因此我决定自己开发一个简单的markdown编辑器,在编辑器里写的都是纯文本,想要看发布结果则可以点击预览(见下图)。

  • 弦圈APP中的HTML全部使用native渲染,不使用WebView。这不仅提高了性能,同时页面也更丝滑。这个也是APP的一大难点,也是我遇到的第一个难点。

在Web端中,想要渲染富文本编辑器产生的HTML字符串,在Vue中直接使用v-html(在React中直接使用dangerouslysetinnerhtml)就能得到渲染好的内容了。 而HTML天生与手机APP不兼容,APP不同于浏览器,除非使用WebView,否则无法直接渲染任何HTML。

使用WebView是最简单的在APP渲染HTML的方法,但是弊端也很明显,WebView卡不说,页面布局也不正常、不协调,我刚开始尝试一直没能调好,然后果断放弃。接着我又尝试了expo的'use dom'方法,似乎不能直接使用dangerouslysetinnerhtml,也放弃。而RN唯一的一个HTML渲染库react-native-render-html,这个库能将HTML转换成native组件进行渲染(即native渲染),看着蛮不错的,可惜报错了,然后库的维护也出了问题。

于是我就自己动手写了一个HTML转换Native的一个组件,效果还可以,很多情况都可以正常渲染,但某些情况还是有问题。就这样兜兜转转,我最后还是选择了react-native-render-html,我安装了一个版本所幸没有报错,接着再二次包装一遍,一切都如预期的一样。

  • 弦圈APP直接高亮代码块,且直接复制代码。非WebView方法实现。这个算是APP的一个小难点吧...

在Web端想要高亮代码块,我们有PrismJS和highlightJS可以使用(见Vue或Nuxt中如何渲染数学公式?)。然而在APP端,一切又不同了,我们无法直接使用这个JS库,所幸高亮代码块这方面的生态还算可以,我费了点劲找到了一个合适的库,最后成功实现。值得一提的是,知乎APP居然不支持高亮代码块,它就一个框把代码框起来,然后允许你复制代码。可见相比于Web端,APP的限制有多大,不过或许这也算是个无关紧要的功能吧...

  • 然后跟弦圈网页端一样,弦圈APP支持渲染数学公式,在手机你可以跟在网页端一样看到美妙的数学符号。这个可以说是APP最大的难点之一了。

这个实现起来也是十分艰难,网络上搜到的方法基本不行,都有着这样或那样的问题。渲染数学公式这个东西,在Web端的生态就一般,在移动端更是惨不忍睹,无论是RN的,还是安卓的都没一个库是还在维护的,也很少有人分享实现的方法,估计没几个人关心吧。事实上,latex的生态就只局限于它本身,搜索latex相关的东西,除了关于latex本身的问题,像什么python中转换latex、Vue或React渲染latex,有用的信息瞬间减少了。

说回RN中渲染数学公式,其中有几个库是用WebView来实现的,由于弦圈APP中的HTML是native渲染的,不是基于WebView的,如果用它们,可能就会在页面上同时渲染多个WebView,这会严重影响性能问题。RN能native实现就native实现,真用WebView我觉得还不如直接拿Tauri来写APP,这样所有Web端的东西都能用在APP了。我刚开始也是用Tauri来写弦圈APP,可是最后它的stronghold插件出了问题修复不了,就放弃了。

RN用native实现渲染数学公式的库也有,不过都是已经没在维护的了。我侥幸找到一个用mathjax渲染,且能用的库react-native-mathjax-html-to-svg,将latex代码转换成svg来渲染数学公式。要知道在Web端想要渲染数学公式,有mathjax和katex可以选(见Vue或Nuxt中如何渲染数学公式?),其中mathjax是最好的、katex是最快的。因此,发现这个库的那一刻我很激动,居然能在APP使用最好的mathjax。

将该库与react-native-render-html整合,就能渲染数学公式了。然而事实上,这个过程比我想象中的要复杂困难得多,在网上仅有的几个方法中,我尝试过很多遍,最后都没能实现我想要的效果。然后我又尝试通过后端python来渲染latex公式,将其转换为svg或者干脆转换成Unicode。这些方法实现是能实现,但是都有不少瑕疵,都比不了Web端的效果不说,有些低级问题也没能解决。能将latex转换成Unicode的pylatexenc库,就不能将$^2$转换成²。

原本我打算妥协了,放弃渲染数学公式这个功能,然而今天我突然“开窍”,彻底解决了这个难题,也算是意外之喜。这个方法算是我原创的吧,仍然是将react-native-mathjax-html-to-svg与react-native-render-html整合,但是效果完全符合预期,也没有网上一些人提到的问题。在这个过程中,还遇到个小插曲,该版本的mathjax识别不了小于号$<$,得换成HTML记号。

关于弦圈APP的其他一些开发细节,因为时间比较晚了,我就不展开说了。目前我正在准备弦圈APP的发布,这包括编译apk,以及在弦圈网页端添加APP的下载方式,尽情期待😇!之后我还会修复一些网页端的来不及修复的bug。

目前弦圈APP的代码规模为21249,还行吧一个人写的。最后不得不吐槽一句,这个apk编译是真的慢......晚安( ̄o ̄) . z Z

0 人喜欢

评论区

暂无评论,来发布第一条评论吧!

弦圈热门内容

在已经掌握大学本科微积分、线代、概率的基础上怎么更进一步学习数学?

知乎提问:如题,我在准备考研数学中终于领略到了一些数学的美妙之处了,现在特别感兴趣,想等着考完试有时间再精进一下也为下一步的学习打打基础,那么请教各位大佬们我该去先去学哪些书呢?数学分析?高等代数?我作为一个普通工科生不太了解这些书的入门顺序,请各位数学大佬指点下,谢谢啦!!!我的回答:如果对微分几何感兴趣,可以尝试读 Loring W Tu微分几何经典入门教材:An Introduction to Manifolds 和 Loring W Tu微分几何教材:Differential Geometry Connections, Curvature, and Characteristic Classes。先读第一本,第一本最简单你的基础完全够了。有了第一本的基础后,可以读第二本。把这两本读懂后可以读 Jürgen Jost黎曼几何与几何分析教材:Riemannian Geometry and Geometric Analysis。如果对代数几何感兴趣,那就先入门交换代数,可以读Zariski交换代数经典教材Commutative Algebra系列(pdf可复制版)、Atiyah交换代数 ...

最近有人反馈网站卡、打不开,我自己也试过这种情况,已再次对弦圈进行优化

最近这段时间,由于使用弦圈的人数比以前多了,尤其是同一时间使用的人数,这就导致网站加载起来会比较卡,甚至有时候出现502错误,也就是打不开网站。遇到这种问题,一般等一等刷新一下就过去了,但是还是对用户体验造成了不好的影响。昨天开始受到反馈后,我再次进行了测试,发现打开文章的速度确实比打开首页的速度要慢,也就是说弦圈部分页面的加载速度确实有问题,需要优化。接着首页打开的速度其实也慢了一些了。于是我重新优化了一下那些加载比较慢的页面的代码,然后还重新优化了一下后端的一些代码。经过今天的再次优化,目前我打开弦圈的页面,感觉也比之前顺畅了一些。不过目前服务器的配置确实有点吃不消了,CPU倒还好,主要是内存真的不够用了,可能卡主要也是内存不够的原因吧,我目前也在考虑换个内存更高的服务器。18:51更新:刚刚已经将弦圈的前端代码放到另一个内存更多的服务器上,在这个过程中一不小心让网站中断了一会儿。现在迁移已经全部完成!目前弦圈使用了两台服务器,一台2核4G用于前端,另一台2核2G用于后端,还有一台1核1G的云数据库。另外我还给域名挂上了CDN加速,目前来看应该比之前顺畅不少。

雪的不遇者

作为过来人,迎接新客,咳嗽声总在暗地里起伏,瓷勺跌在了地上和空气一样冷淡,我的第二个爱人忘记了今天是什么名字,书啊迷惘的盐,是否意味我站在早晨之外向你们投来无主的目光,那颗心早晚都会走,像以前一样寻章摘句,获得古代传承的快感当一回宾客,接触那些表象的伪装丰富的伪装,六点钟的爱情喧哗这就是我们的日子,我们定义了爱既然你不存在,我同意你的消失在我们谈话的节奏趋于平稳之后,公交也已驶来,多好的机会,我想象着网状碎片藏在脸颊里,人总在落雪之后独立,而你不能独立我们去西伯利亚的天空,俄罗斯的忧郁丛生,深灰色必将成为主的语言一点一滴,在我的血脉里横流,小人曾梦忆,却不知城市有多衰老霜花,彩灯,麦克风,只占世界的诸多分之一,你总爱权衡可秤怎么能装下喜欢走丢的心?还没到来,远山也未拾起衣冠我们只是一个相册,城市深陷其中反复圈定,养一头温良的房子接纳雪的受难,你一直都很坚定这些如同名字一样模糊的骗局引诱我们在云层里分崩离析

作为一个年轻的数学工作者,你们是如何独立于导师选定问题的?

知乎提问:感觉有意思的我做不动,我会做的又无趣(且无人关注)。那请问你们是如何自己选定一个有意思且做的动的问题的?我的回答:想要找问题,首先需要阅读很多相关的文献,但是这一步其实很多人都会做了,他们的问题是哪怕读了再多的文献,似乎也不知道有啥问题可做。其实在我看来原因无非那么几个第一是他们自以为自己掌握了正确的学习方法,看过的文献每一个细节都彻底弄懂弄透了,实际上他们连自己学的东西都没搞明白;第二是他们好高骛远,瞧不起一些比较基本的小问题,却不知道很多重要且有趣的理论往往来自于不经意间一些最简单的问题;第三就是科研能力问题了,这方面要展开太多可讲了,如数学成熟度不够、计算能力不足导致无法将脑海里的理论实现,或是想象力不足无法构想出一个一般性的理论,等等。这三点能做好,基本上就能脱离导师,独立自主做出研究成果了。其中第三点是最体现一个人数学天赋的地方了,不过其也是建立在第一点跟第二点的基础之上的。关于如何学习达到research level的程度,不是一两句话就能简单讲完的,可以参考我之前的文章和帖子,其实只要把第一点做好,且做到极致,第二点只要你调整好自己的心态就能做到。想学好数学不是 ...

基础数学几何方向应该如何学习?

前辈们好,本人是一名大二数学系学生,目前大致了解点集拓扑基本概念(但还没怎么做题),代数拓扑看过基本群和同伦型,复变和抽代这学期正在学。之所以问这个问题是因为之前看到中科大梁永祺老师的主页看到了这样一句话:让我感觉非常奇妙,也想见识一下这精华的部分(希望在大四毕业前能做到吧!😭),也激发了我学习代数与几何方向的想法。其中代数方向其实学习路径了解的差不多了,大致就是学完抽象代数后同调、交换和lie代数都可以学了,但几何方向还不甚了解,很多几何方向的课学校都是大三大四才有,甚至开不出来,因此只能自行学习。这个问题其实之前也问了不少前辈,但发现每个人的学习路径(有的是从微分几何上同调那边学,有的是先接触的代数拓扑等)都不一样,而几何方向又十分繁杂,理不清学习顺序,手头上有很多纸质书、电子书、网课等也无从下手;或者有些内容可能比较难且深入某个具体方向,以后不做这个方向可能根本不会用到,不知道该学多少合适。所以想多听取一点建议以便自己之后逐一尝试,例如:学习路径、参考书目、课程视频等等。谢谢各位!😘

关于目前各大平台引流实践的总结:如今各大平台都在封锁流量,在这么一个垄断的大背景下,小平台只能在夹缝中生存......

本文修改自我今天发推的几篇内容。以后我推特也懒得发再英文了,之前一直想搞国际化,国际化个der,我之前一直听信所谓的国外好赚钱的言论。其实真的尝试过才知道,国外也封锁你。现在弦圈的注册用户和流量仍然都是来自国内的,全靠社媒支撑着,SEO零流量,去tm的SEO,以后我也学小红书那样,把所有搜索引擎给屏蔽掉。 现在大家都在封锁自己的流量,不让你将流量引走,推特更是如此,发外链几乎零点击。现在各大社交平台,对引流管得最宽的唯有知乎了,可以给你随意发外链,而且对流量影响不大。 其他平台,如小红书、公众号,连外链都不能发,你只能发文本链接,公众号倒是可以填那个阅读原文,但谁会点? 不过即便是知乎,你发链接也仅仅只是为了引流罢了,知乎的外链有跳转页面,实测相当于屏蔽SEO。所以想要靠知乎发外链搞SEO的省省力吧,用处不大,而且外链本身就是引流的价值大于SEO,与其费时费力搞SEO,不如好好运营社媒。而在知乎上疯狂发外链引流,也不是高枕无忧的。偶尔在某些问题下回答,会引来某些无聊的人的恶意举报,一举报一个准,申诉都没用。 像那种“有什么有趣的网站推荐”、“有什么有深度的网站”,看似绝佳的网站宣传的问 ...

学习应该先追求深度还是广度?

知乎提问:学习应该先追求深度还是广度?我的回答:在我看来应该先追求广度,有了一定的广度再开始追求深度。因为选择深入哪个领域进行学习,是先需要广泛涉猎,对各个领域先有个初步的理解,接着再在这些领域中挑选一个进行深度学习。我当初学数学的时候,也是先大量的看各个数学分支的教材,广泛涉猎。然后挑选其中几个感兴趣的领域:微分几何和代数几何,开始着重学习。最后有了一定的数学成熟度,才开始全力追求深度,决定不仅是做代数几何,而且是代数几何中的算术几何。因此,比起一上来就追求深度,我认为先追求广度更加有效。因为任何一个领域都有成熟度这个概念,你没有一定的成熟度,过早的追求深度看似少走了很多弯路,但不过是拔苗助长。

语奥中的数字谜研究(一) 基础数词

语奥中的数字谜中有许多技巧,如果纯靠推理难度很大。系列文章将介绍数字谜技巧,每篇文章都无限期更新。第一篇文章,让我们走进基础数词。基础数词,顾名思义,就是一个语系中各个语言基本相同的数词。基础数词的特点就是稳定性,以至于可以帮助我们快速确定题目中一至几个单词的意思。以下举一些常见语系的例子来说明基础数词的作用。1、尼日尔(大西洋)-刚果 语系 &nbsp;$(a)ta=3$例题:2023 IOL T5 &nbsp;$taanre=3$$1.be ŋ jaaga=20 \rightarrow bee-x=20*x$$2.taanre=3 \Rightarrow ŋ kwuu \; x=80*x $$3.baa-y=y+5$$4.kampwoo=400 \Rightarrow kampwɔhii \; z=400*z$2、汉藏语系 $sam=3$$nga=5$例题:2024 APLO T5 $as ɣm=3$$pungu=5$