Origin of Ray

一起探索互联网的秘密

之前做了个关系图谱的需求,因为导出png等图片放大会失真,所以希望导出为矢量图。但是G6自带的导出图谱功能再Canvas模式下无法导出为SVG,而SVG模式又有很多特性不支持,所以就想办法能不能把Canvas导出为SVG了。

阅读全文 »

贪心算法是比较常见的一种算法,贪心的本质是选择每一阶段的局部最优,从而达到全局最优。而模拟退火算法比较常见于人工智能当中。

这两种算法之所以放在一起考虑是因为,模拟退火算法像是加强版的贪心算法。

如果一个问题的每一步的局部最优解无法得到全局最优解,我们常规前后端程序员的算法思维想到的是动态规划。

但是对于AI开发来讲,参数可能是上亿级别的,根本没有办法动态规划,这个时候就可以尝试用模拟退火算法以一定概率跳出这个局部,去整体中找到一个更优的答案,但是,其实这种算法也不像常规算法一样,会得到一个必然的结果。

本文把两种算法放在一起进行总结和比较,看看他们分别适用于什么情况,以及如何使用。

阅读全文 »

Tailwind这个CSS的框架不算是什么新东西了,不过也一直没有去研究过,最近有需要就看了下,看起来还是比较简单的。

这东西看起来就是个新的DSL之类的,提供了许多常用且内置的css样式,封装成语法,然后提供一个PostCSS插件,把封装好的语法又处理回普通的css。

我们需要做的事就是安装Tailwind的PostCSS插件,然后使用他封装好的DSL即可。

阅读全文 »

最近在想着飞书文档的关系图是怎么实现的,于是想起了之前用的G6,于是简单实现了一版。

最终效果

主要功能如下:

  • 节点分为两部分,上半部分是图标,下半部分是文字
    • 鼠标放到图标上时,会产生水波纹的扩散特效,同时出现一圈边框
    • 文字需要有下划线以及白色背景,且水波纹特效不能被白色背景挡住
    • 文字的下划线需要是方格
  • 连线要有渐变色,且渐变色要从箭头起点到箭头终点,且如果支持双向关系,如何实现两条边
  • 连线上中间位置要有一个Label
  • 节点和连线要支持半透明
  • 整体布局要是力导向布局,且支持节点拖拽,拖拽时不能让节点之间产生重叠,但是也不能因为连线拖动其他节点(单独提出这一点是因为G6自带的力导向布局节点会被拖拽)
阅读全文 »

作为一个程序员,我们平时关注的关于管理方面的知识,最初可能是设计模式,管理的是某一个需求的复杂度,慢慢的,我们会开始关注领域划分,DDD,业务建模等,这些管理的是系统的复杂度,再后来,事情的复杂度逐渐进化到我们个人无法处理了,我们就需要团队合作了,这里管理的就是项目复杂度。

其实这三者是自始至终都会存在且相互关联的,很多理念也很相似,只是我们需要逐渐的参与实际工作才会一步步认知到这种复杂度。

关于设计模式和领域驱动设计,我之前的博客都有总结过一些我看过的书和具体的实践,这次结合亲身的体验与《知行》这本书,总结一下项目管理中的一些方法论。

阅读全文 »

最近工作上需要实现一个关系图谱,其中图中的节点布局需要用到力导向布局,于是就对其中涉及到的力导向算法产生了兴趣,就去研究了一下。

力导向绘图 (Force-directed graph drawing)可以用于描述关系图的结点之间的关系,把结点分布到画布上合理的位置,比如描述企业之间的关系,社交网络中的人际关系等。

阅读全文 »

最近在搭建自己的微信公众号机器人后台,用户向公众号发送小消息后,会被微信的服务端转发到自己设置的服务器,一开始我们可以选择明文模式,但是为了安全考虑,还是会开启安全模式,此模式下,所有的消息会被整体加密,我们需要在服务端解密,而微信官方文档写的不好,也没有nodejs版本的示例代码,于是我结合实例代码做了一版express的插件,记录一下:

阅读全文 »

程序员掌握的技术叫做信息技术,目的是为了快速的收集和处理信息,那么为什么这个技术重要呢?了解这个问题,其实也能明白AI到底给我们带来了什么

阅读全文 »

最近尝试实现了下AVL树,发现这玩意写起来还是很多细节的,搞了半天,所以就在这里记录下。

AVL树就是平衡二叉检索树,一方面它是BST,即二叉检索树,一方面它是平衡的,也就是任何一个节点为根结点的子树的左子树和右子树的高度差不到1。

阅读全文 »
0%