·

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

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

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

评论区

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

弦圈热门内容

一文读懂量子计算:现已进入“实用阶段”,“量子时代”即将到来

划重点:量子计算首次出现于20世纪80年代初,主要依靠量子力学来解决复杂的、以前不太可能解决的计算问题。IBM于2019年推出了首个IBM Q System One量子计算系统,谷歌也声称其实现了“量子霸权”。尽管量子计算行业的实际同比增长率仅为1%,但该领域初创企业2022年获得的总投资达到23.5亿美元。多数首席信息官和IT领袖认为量子计算并未被过分炒作,他们希望更多地关注这项技术,以了解即将到来的颠覆。十年内具有主动纠错功能的大型量子计算机有望诞生,21世纪也将因此被视为“量子时代”。腾讯科技讯 量子计算是一个新兴的科学领域,由于它在许多行业拥有着巨大的应用潜力,已经引起了许多国家和公司的兴趣。随着更多资源和资金的投入,量子计算技术正以极快的速度向前飞跃。有科学家预言,量子计算机正进入“实用”阶段,十年内具有主动纠错功能的大型量子计算机有望诞生,“量子时代的黎明”即将到来。01 量子计算将成改变人类历史进程的新里程碑量子计算这种变革性技术虽然仍处于起步阶段,但它将成为改变全球技术进程的科学趋势之一。量子计算首次出现于20世纪80年代初,是一种变革性的技术趋势,旨在通过快速有效地解 ...

理论深度高的数学分支(如代数几何,代数拓扑)的新一代一流数学家(如恽之玮)做研究之前一般学了多久呀?

知乎提问:感觉所需的预备知识太多,代数几何和代数数论目前只学了半年多一点。要不是我不够聪明,要不是从事这些方向的研究的预备学习时间过高。Peter Scholze倒16岁就能搞明白不少费马大定理的证明,估计他当时的学习速度比我现在的高好几倍。因此,我在学习这些过程中稍微产生了点消极感。我的回答(已删):扯淡,又在这里造谣,都说过了不要神化Peter Scholze,这是对人家的羞辱。建议看看我之前的回答,里面已经把具体的情况解释得很清楚了。求证:关于菲尔兹奖得主舒尔茨的这个非常特殊的说法,是否属实?Peter Scholze确实16岁的时候看费马大定理的证明了,但他什么都看不懂。在我看来,文献看不懂没关系,最重要的是你看不懂还能继续看下去,发现motivation,这最考验一个人的数学成熟度。数学家在做一个问题的时候,也不是全部知识都懂的,往往都是一边做问题一边学的,需要什么就学什么,这样才是效率最高的。我其实不是很明白为什么总要比多少岁看什么什么,好像这真的能完全反应一个人数学的科研能力、创造能力一样。不同的数学家风格截然不同,数学发展的路径也完全不同,很多都是非线性的。只能说有的大 ...

🇩🇪12.25 科隆

专门奔着科隆大教堂来的,只为一睹比圣家堂还牛逼,盖了600多年才交楼的烂尾楼。在里面休息的时候发现游客突然都不见了,然后发现刚好被困在了弥撒时间,来都来了于是硬着头皮速成天主教徒()管风琴的悠扬,唱诗班的吟唱,加上科隆大教堂内部本身就高大宽敞,现场气氛顿时圣洁了起来,亲身体验过真的非常震撼人心。下面的信徒们也纷纷起立捧着唱词本跟着吟唱,我只能强行跟着站起来aiueo了几句然后划十字阿门(毕生所学)神父念念有词了十来分钟只听懂了哈利路亚(悲)本来还想跟完事去讨块圣体尝尝,不知道为什么这次没有领用圣体的环节。不过也算是达成成就参加了一场天主教法事,还是在大名鼎鼎的科隆大教堂()

怎么学好代数结构?

知乎提问:怎么学好代数结构?我的回答(已删):其实抽象代数确实不太好学,抽象代数顾名思义很抽象。我刚开始学抽象代数的时候,也啃得非常吃力。对此,我建议先坚持学下去,不要停,实在不懂的话先跳过,因为后面的内容说不定能帮助你前面内容的理解。在学习的过程中,多积累一些trivial的例子,不需要太复杂的例子。学习是一个积累的过程,尤其是数学,不应心态过于急躁,对于自己弄不懂的概念要多次仔细揣摩,第一次不行就隔段时间再来一次,多学几遍是没有错的,同时可以尝试看多几本抽象代数的书,看看是不是因为不适合自己口味所以觉得很吃力,找到一本最合自己胃口的书。我个人觉得吧,抽象代数其实也只是非常基础的课程,只要有足够的时间,坚持下去,总能弄懂学会的。加油!原文发布于 2020-08-15 22:492020年8月,应该是高三高考完的那段时间,那个时间也是我数学水平、数学知识飞速提升的时间段,但我也遇到了更多的挑战。大一的时候,我一边想做望月新一的远阿贝尔几何,一边也想做Peter Scholze的算术几何。最后在导师的建议下,我选择了专注做Peter Scholze的算术几何。这个时间段,导师对我来说还是 ...

学习成绩差是一种罪吗?

知乎提问:学习成绩差是一种罪吗?我的回答(已删):能问出这种问题,证明如今社会上很多人被这种唯分数论洗脑的太严重了。学习成绩差怎么了,得罪谁了?学习成绩差本身没啥大不了的,但在zg的教育体制下,却有学习成绩差=坏孩子这种荒谬的事情。就好像在如今社会躺平就会被骂懒惰、不进取,被披上各种不友好的标签。这些都只不过是资本主义社会的产物,因为你懒惰不工作,就不能使资本发生增值,然后资本家就会跳出来给人们洗脑说这样做是不对的。况且学习成绩也跟一个人的实力没必然关系。就数学而言,数学成绩多少跟你数学的研究水平没有半毛钱关系。今年的fields奖得主Hub据说连Gre考试都做不完卷子,反应很慢,学习成绩很差,但这不影响他拿fields奖。本来考试这东西就是在有限的时间内考你教材里的内容,跟创新能力啥没有一点关系。原文发布于 2022-10-21 22:152022年当时应该大二吧,当时的菲尔兹奖得主对我还是挺鼓舞的,可以说是进一步鼓舞了我。之前我一直拿Witten、Bott等半路出家人的事例鼓舞自己,因为我就一普通得不能再普通的学生,在社会上毫无任何优势,唯一的优势或许就是早了解了那么点数学吧。

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

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

学高数有什么技巧么?

知乎提问:学高数有什么技巧么?我的回答(已删):学高等数学首先不能去想需要什么技巧,因为学高等数学最需要的是你对其的理解,技巧什么的其实是次要的。因为,理解决定了你数学的高度,如果你遇到某些概念理解不了的话,靠技巧是解决不了的。技巧大多是应用于证明上面的。想要对数学有足够深入的理解,在多看书的同时,对于同一样东西需要反复揣摩,反复与其它相关的概念对比,正如Grothendieck所说,通过构建不同数学对象之间的联系来理解数学。当你通过多次反复学习,对数学的理解到了足够高的程度,其实很多东西就变得trivial了,也并不需要太多的技巧。当然技巧还是有一些的,比如对于一些抽象的概念多看一些例子帮助理解;如果遇到某些东西理解不了,想了很久还是没有想到,可以先跳过,过段时间再去想;可以适当做些习题,但不需要做太多重复的题目,etc.原文发布于 2020-08-15 22:31这又是一篇高考后写的回答,甚是感慨。说实话那个时间段写的回答,比我现在写的会更加真实,也更加有效果,因为那个时间段我就是初学阶段。不像我现在早已过了初学阶段,进入Research做数学的阶段,过去的一些做法和细节已经遗忘了 ...

求证:关于菲尔兹奖得主舒尔茨的这个非常特殊的说法,是否属实?

知乎提问:这是我在一篇自媒体文章里看到的关于舒尔茨的学习、科研方式的说法:令人非常吃惊的是,舒尔茨对代数几何产生兴趣竟然是因为看了怀尔斯关于费马大定理的证明。与常人不同的是,舒尔茨几乎不会花时间去学基础知识,比如线性代数,抽象代数这种,他都是直接去看一些论文,当遇到一些不懂的问题时,才会去查阅相关资料,并且他还可以立即学会这些知识,例如他通过研究费马大定理的证明,学会了模形式和椭圆曲线的相关知识。这个说法和我以前理解的学习、科研方式大相径庭,所以我觉得有必要来求证一下是否属实。谢谢!我的回答(已删):你看到的这个中文翻译的采访非常有问题,严重歪曲了Peter Scholze的真实情况。首先这个采访原文的地址是The Oracle of Arithmetic | Quanta Magazine。原文中说到Peter Scholze中学的时候得知Wiles证明了费马大定理,因此去看费马大定理的证明,结果是understood nothing!At 16, Scholze learned that a decade earlier Andrew Wiles had proved the fa ...

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

知乎提问:读基础数学如何解决经济问题?我的回答(已删):读基础数学还想着赚钱干嘛,想赚钱就别读纯数了。因为如果想赚钱,这难度系数指数级上升,你做纯数可能做得已经很不错了还不如那些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 ...