·

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

发布时间:2025-02-28 01:17:37阅读量:164
转载请注明来源

经过两个月的漫长艰难开发,大家期待已久的弦圈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 人喜欢

评论区

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

弦圈热门内容

数学中的「分析」是什么意思?

知乎提问:数学中许多分支名字中带有「分析」二字,如数学分析、实分析、复分析、泛函分析、调和分析、数值分析……牠们的共同点是什么(也就是,「分析」二字是什么意思)?我的回答(原文已删):我感觉分析有研究某个数学对象局部性质的意思。比如说,几何分析就是通过PDE将流形上的局部性质跟整体的拓扑性质联系起来。又比如说,任意形式的波都可以分解成傅立叶级数的形式。这些都是研究局部性质的例子吧。我不是做分析的,这只是我的粗浅理解。。原文发布于 2021-05-24 18:48我看回知乎曾经的回答,我发现2021年前的时间,回答都普遍比较简单。2021年,那时候我应该刚读大一吧,没怎么写过notes,更别提后面写多篇论文了,因此写作能力一般,也懒得长篇大论。

读基础数学如何解决经济问题?

知乎提问:读基础数学如何解决经济问题?我的回答(已删):读基础数学还想着赚钱干嘛,想赚钱就别读纯数了。因为如果想赚钱,这难度系数指数级上升,你做纯数可能做得已经很不错了还不如那些IT行业人士赚个月入过万。因此,如果你想靠纯数赚钱,你会觉得很不公平,而且在这浮躁的社会环境里,你怀着这种心态也很难沉得下心来做研究。对于经济问题,正如刘宇航前辈所说,降低需求是最好的办法。原文发布于 2021-05-24 19:06下面引用一下lyh的回答,话说我以前刚开始学数学的时候,知乎还是挺多数学大佬的,这种是真的专业的,不像现在一些数学大v压根没啥数学水平。目前来看,绝大多数数学大v都退乎了,有不少还注销账号了,回答一个也没留下来。lyh算是少数几个还坚持在知乎发言,并且还是持续性更新的,别的哪怕还留在知乎基本也很少发言了。

想做朗兰兹纲领方向,请问如何安排学习进度?

知乎提问:最近对朗兰兹纲领感兴趣,主要是向往大一统的理论,但因为这个领域很庞大,不知道从哪里入手,希望能提供学习顺序,推荐一些书目,越详细越好。另外,想知道哪些院校这方面做的比较好我的回答(已删):我并不是做Langlands programs方向的,但是也对其有所兴趣,因为算术几何跟Langlands programs也有所联系。个人觉得可以从Shimura varieties作为学习的切入点,具体的references可以看Milne的note,直接百度就有了。同时,可以看看欧阳毅的Galois representation,Scholze关于local Langlands的文章,还有Harris和Taylor的The Geometry and Cohomology of Some Simple Shimura Varieties。在看的过程中,看不懂就往下补知识,并且不要忘记了解相应知识的诞生背景,这样做效率是最高的。不过,这些东西都特别难读,反正我也很多看不懂,还是找个该方向的专家带最好。原文编辑于 2022-05-02 22:30原文评论区Milne的course notes ...

初二可以学习抽象代数吗?

知乎提问:孩子初二,数学成绩经常满分(120)。有时候117 118,孩子说想学点高端的,我想让孩子学抽象代数可行吗我的回答(已删):没必要学,这么着急学这些内容干什么呢,孩子又不一定真的感兴趣,搞不好让他讨厌起了数学更糟糕。数学是以兴趣为主的,什么提前学之类的都是渣渣,提前学又不代表你以后数学成就会很高。初二既然数学成绩还行,那就意味着孩子有更多的空余时间可以做他感兴趣的事情,家长不应该强行给孩子灌输一些不应该在他这个年龄学习的东西。除非你孩子真的很热爱数学,那么你拦都拦不住他自学,还需要你去灌输给他吗?原文发布于 2021-05-28 09:25

你是如何对数学产生兴趣的?

知乎提问:短暂的兴趣也行,有长期的更好。请大家积极分享哦我的回答(已删):我以前是因为物理喜欢数学的,当时特别崇拜Einstein,想要以后做理论物理学。因为Einstein当年也是自学微积分的,于是我也入坑微积分。刚开始,觉得特别难学,无数次想要放弃,但是最后都克服掉了这些困难,学习不少微积分的基础内容,开始感受到数学的美妙。刚开始我在学微积分的同时,还会学一些物理的东西。可是后来,我每次打算学物理最后都会被学数学取而代之,我开始对数学越来越无法自拔,以至于牺牲学习物理的时间。就这样,我就改变了曾经理论物理的方向,转为数学。再后来,我对数学的喜爱远远超过物理了,同时高考备考紧张,我干脆放弃学习物理,全身心投入到数学当中。原文发布于 2021-12-20 20:10

学数学的目的是什么?能给我带来什么?

知乎提问:学数学的目的是什么?能给我带来什么?我的回答:这个问题有点难以用语言来回答。数学带给了我的东西实在太多了,从童年开始到如今,我整个人看待世界的方式,我的三观,我的方方面面早就被数学所改变,并且与数学难以隔离。如果硬要展开来说,我能想到以下几点:首先就是审美,这种审美是指一种抽象意义上的审美,不是简单的说眼睛看到什么觉得很美。这种审美是你个人数学风格、数学品味、数学思想里最根本的东西,几乎会影响你关于数学的一切。你写下的定义、命题、定理“美不美”,你觉得某个理论“美不美”,这些都跟你的审美有关。其次数学给了我夹杂着理性的感性,我经常一边看数学,一边听音乐,这样能让我沉浸在一个独特的精神世界。呆在这个世界里,思绪会变得清晰,情感也会变得起伏,这个时候往往灵感迸发,很多原来想不懂的东西突然就想懂了。用心理学的说法解释,就是数学带给我体验超心流状态(不是心流)。最后数学还带给我理性思维、更加缜密的逻辑等等,这些其他回答也反复提过,就不说了。

怎样才能培养数学兴趣?

知乎提问:怎样才能培养数学兴趣?我的回答:想要培养数学兴趣很简单,首先你肯定要对数学有好感,如果连这点基础都没有估计也很难对数学感兴趣。然后你只需要不断的了解数学、接触数学,形成一个了解数学=&gt;进一步深入了解数学这样的一个循环,自然而然就会对数学感兴趣。具体的讲,你可以做的包括以下几条,可以根据自己的兴趣进行调整:多读数学相关的介绍文章,或者数学方面的一些资讯报道,从浅层了解数学。多读数学家相关的传记,数学家留下的话、数学家分享的经验等等,这里的数学家不仅仅包括过去杰出的数学家,还需要包括如今在世的数学家。多读不同数学领域相关的教材,多方涉猎,加深对数学各个领域的初步理解。这个做法是最能培养数学兴趣和数学品味的。上面两种方式只是辅助第三种方法,毕竟想要了解数学,培养对数学的喜爱,最直接也是最有效的方法,无疑是直接关注数学本身,直接学起来、思考起来。以上三条主要针对初学者,当你不那么初学之后,就不要目光放得太高了。我曾经有段时间就是因为看得太多名人名家的内容,反而开始看不起那些没那么杰出的人,这完全就是愚蠢的想法!多关注身边同样喜欢数学的人或同行,多交流了解对方的想法和经验,这样对 ...

大一上挂科后果严重吗?

知乎提问:大一上挂科后果严重吗?我的回答:还真问题不大,我大一的时候身边就有不少同学挂科了,结果无非是补考,或者严重点的重修,最后都能过。我大一大二的时候也是对挂科害怕不已,每次考前复习都十分紧张。直到后来快毕业的时候,我得知自己居然缺了通识课学分不能发毕业证,而我身边那些挂过科的同学全都学分修够了。那时候我才明白没啥好怕的。。。当然最后那个学分还是补上了,虚惊一场。后面我打算在 数学故事天地 写一篇因为沉迷数学导致挂科而大学无法毕业的小说,虽然我文笔不行,但是我有足够的想象力,只要我把逻辑、故事线、设定全写出来,一样会是丰富的故事内容,只不过细节描写没那么动人、生动。希尔伯特也曾经说过,数学家拥有足够丰富的想象力,完全可以当一个作家。原话我现在在网上已经找不着了,只找到了下面这句话"You know, for a mathematician, he did not have enough imagination. But he has become a poet and now he is fine." &nbsp;——David Hilbert“他曾没有足够的想象力来当数学家。不过 ...

洛必达法则为何成为禁术?

知乎提问:如题,高考用会扣分,大学微积分考试还明令禁止使用洛必达法则(我个人还是好喜欢洛必达法则)疑惑产生于大一半期考试之前,刚刚学极限没多久的时候。为了让学生更好地理解“极限”这个概念,学校用心良苦,在半期考试中ban了洛必达,仅此而已。我的回答:因为洛必达法则并不是洛必达发现的,而是洛必达买下来的😇。说到洛必达法则,我的回忆就倒回到初三和高中时期,当时做高等数学的极限题我都喜欢直接洛必达法则,我不太想考虑除了洛必达还有什么别的计算方法,没必要。因为洛必达法则明显更加友好,反而更加容易让学生熟练掌握极限,我初三乃至高中的时候,学高等数学能学懂,其中就少不了洛必达法则的功劳。其实多用几次洛必达法则感觉上来了,再去理解极限的本质,也不是不可以。只能说国内的这种教育模式非常的按部就班,就必须你按照学校指定的路径来学习,真的就流水线工厂一样,教育被整成这样,教育出来的人自然也很难有创新思维。这只是普通的通过性考试,完全没必要考虑所谓的公平性问题。就好比,初三的时候自学了高中的正弦定理、余弦定理,或者,高三的时候自学了洛必达法则、级数等微积分的东西,可以很轻松的解决某些题目。这种还勉强能狡辩一 ...

今天晚上弦圈服务器发生崩溃情况,已一切正常莫慌,目前判断是腾讯云的问题

之前我对弦圈进行了优化最近有人反馈网站卡、打不开,我自己也试过这种情况,已再次对弦圈进行优化,接着弦圈基本上就没有再出现过问题,网站浏览也很流畅。不过今天晚上前端服务器突然崩了,我发现后马上对服务器进行了重启,重启过程持续了5-10分钟左右吧,真慢。然后又发现了一点问题,就暂时用后端服务器顶替了,之后前端弄好了又重新用回原来的服务器。在这个过程中因为重启了(edge one)CDN,导致https访问会弹出证书不安全的情况,现在也全部正常了。根据我跟其他人的交流得知,他在东京的服务器前几天也突然崩了,崩的原因也是摸不着头脑的IO读写,然后我咨询客服他也没看到异常。我就一个前端服务器,2核4G就放前端代码,怎么可能会是业务问题。然后网站被黑客疯狂扫描,一直都有但也不至于弄崩服务器,目前判断可能是腾讯云自己的问题。