即刻App年轻人的同好社区
下载
App内打开
即刻Engineering
2关注2k被关注3夸夸
即刻工程师团队
一个只分享技术知识的账号
即刻iOS team正在招人,请联系hr@iftech.io
欢迎投稿
即刻Engineering
2年前
为了给即友提供更好的即刻搜索体验,我们上线了检索图片中文字的功能!现在,你可以在即刻里搜到更多有意思的动态了。(点图1了解如何使用)

识别图片中文字的技术称为OCR(Optical Character Recognition,光学字符识别),是指对图像进行分析识别,从中获取文字内容,以文本形式返回的过程。

OCR分析流程主要分为文本检测和文字识别,文本检测是指识别出图片中文字存在的区域并进行框选的过程,文字识别则是从已经框选出文字区域的图片中提取文字。在经过一系列技术调研和演进之后,我们最终采用DBNet+CRNN的模型组合作为解决方案,取得了不错的效果,如图2,3所示。

即刻搜索系统遵循业界的通用流程,主要分为召回和排序两个步骤。

召回指的是从内容候选池中根据规则筛选出数千条符合条件的动态的过程,在这个过程中实现动态数量从数百万到数千的降级。当即友在搜索栏中输入搜索内容点击搜索后,搜索服务会对输入文字进行分词,将分词结果与不同规则结合组成多条召回通道,例如命中搜索内容的热门动态或最新动态等,以不同维度从内容候选池中筛选满足条件的动态。

排序指的是对召回得到的动态交由Learning to Rank排序模型排序并取topK个结果的过程,这个过程完成了动态数量从数千到数百的降级。

实践中,我们在内容候选池中存储了每条动态的图片OCR结果,并新增了一路OCR检索的召回通道。当搜索内容命中图片OCR结果时,将命中图片所属的动态与其他召回通道筛选得到的动态一起交由模型完成排序。

目前的实现只是我们在搜索中的初步优化,我们之后会持续优化搜索服务以提供更好的搜索体验。大家有什么意见或建议,欢迎随时反馈!
10395
即刻Engineering
3年前
Google开源了一个利用SIMD的快速排序算法,比C++ std::sort快10倍

https://opensource.googleblog.com/2022/06/Vectorized%20and%20performance%20portable%20Quicksort.html?m=1

58
即刻Engineering
3年前
最近Height(一个项目管理工具)写了两篇质量很高的文章。
《构建一个符合直觉的右键菜单》 height.app
右键菜单(Context Menu) 每个应用都有,看起来很简单,但想做好却不容易。
位置: 把Menu放在正确的位置上,并在需要时(空间不够等)重新调整位置
键盘导航:
- 通过输入字母,前缀匹配菜单项
- 通过上下左右、Enter、Esc键正确的在菜单项、不同层级间导航
反馈: 在选中时,被点击的菜单项应该有反馈
简单且快的transition: Height只有一级菜单有transition,所有的submenu都没有animation。
符合直觉的子菜单: 文章介绍了 Safe Triangle(图1 bjk5.com ) 来避免用户切换submenu时误操作。

《Web应用中的滚动条》 height.app
Web应用中可以使用原生滚动条也可以自己实现。由于Windows和macOS的原生滚动条样式差别很大,所以Height选择自己实现滚动条。

Height、Figma、Linear都写了很多高质量的技术文章。这些工具是面向开发者、设计师的,写高质量文章是赢得大家尊重和信任的好办法。还有 LogRocket、Digital Ocean也靠写大量技术文章使他们在搜索引擎的排名极高,有什么技术问题也会去这些网站上查找。
23
即刻Engineering
3年前
今天给大家分享一下mold(一个更快的链接器)的设计理念和细节,在这篇文章里作者介绍了mold是如何提升大文件的读写性能以及mold是如何提升多核利用率以实现一个只比cp慢2倍的超高链接速度的

https://github.com/rui314/mold/blob/main/docs/design.md

34
即刻Engineering
3年前
即刻Engineering
3年前
操作一个整数是不是永远是原子性的?

比如:
int num = 0;
num++;

这段代码经过GCC编译之后生成汇编指令:
mov DWORD PTR [rbp-4], 0
add DWORD PTR [rbp-4], 1

对于赋值操作, 一般来说就是把值写进对应的内存地址, 可以认为是原子性的, 而对num++来说, 虽然只有一行汇编指令, 但是CPU内部却是分多步执行的, 需要先把num的值读取到寄存器中, 然后对寄存器中的值进行+1操作, 最后再把寄存器中的值写回内存中, 可见这个指令就不是原子性的

当然不同的CPU架构对应的指令可能不同, 更多内容可参考链接:

Can num++ be atomic for 'int num'?

45
即刻Engineering
3年前
65
即刻Engineering
3年前
即刻Engineering
3年前
pointfree发现了一个办法可以生成一个Xcode中只有SwiftUI,MainThreadChecker可以用的紫色warning。这其实是os_log的一个功能,os_log只允许少数几个系统框架输出这样的warning。

但是pointfree发现只要在调用的时候传入了SwiftUI的dsohandle来绕过检查,就能用在自己的代码中。

* 关于dso是什么 twitter.com
* 详细内容 www.pointfree.co

另外,关于文章后半部份介绍的如何获得SwiftUI的这个image的指针,这里有一个更好的办法,你可以用_dyld开头的一组API直接遍历images根据名字就能找到SwiftUI。
43