duangsuse::Echo
717 subscribers
4.26K photos
130 videos
583 files
6.48K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
Forwarded from duangsuse Throws
#life #tech

在微软工作是什么体验 © drakeet

早晨,我大概接近十点到公司,如果一天的计划比较多,就会提早一些,这样一天从头到尾有超过 8 小时的时间在公司


我去,我刚刚想到昨天我整整坐电脑前坐了 8 个小时,8 个小时啊!!!!!!! 😶......
(之前说的好像是不转发他的消息了,没说不让复制非 Telegram 上的文本吧
Forwarded from duangsuse Throws
#life 掐指一算,我居然从下午三点死坐电脑前到晚上 11:50... 我居然死磕了足足 8 个小时一动也不动... 😶
#dev ... 好像又很晚了没时间写 Qt 点名器了(((((... 唉
Forwarded from duangsuse Throws
数学上一些复杂的东西即便是尽可能使用简单具体而不是简洁短篇幅的语言描述,也是要花些功夫才能学会理解的

举个例子(orz 跑题了)

这是 foldl(fold aka. reduce) 在 ES6 的实现方式

function foldl(op, init, list) {
let accumlator = init;
for (let i of list)
accumlator = op(accumlator, i);
return accumlator;
}


foldl((a, b) => a + b, 0, [1, 2, 3]) //=> 6

虽然逻辑也很简单嘛,但是少说理解起来会比这个容易:

['2', '2.5', '3.0'].map(Number.parseFloat) //=> [2, 2.5, 3.0]


一个“惊人“的实事是,貌似偏向小白的工业界(因为他们还是有 JavaEE 这种偏向理论化抽象的东西)写的代码大部分都不会比这个复杂多少... ABC(Assignment、Branch、Conditions)值不会超过 10 的东西...

上面说的那个 foldl 呢,在 Haskell 这样面向篇理论派的语言里实现起来是非常简洁的,不过使用递归比较「自然」但是对小白来说不易懂就是了

myFoldl [] = init
myFoldl op init (x : xs) = op(myFoldl xs x)


好吧,上面那个我第一次写的是错的,类型推导失败

foldl f z []     = z
foldl f z (x:xs) = foldl f (f z x) xs


约等于

myFoldl op init [] = init
myFoldl op init (x : xs) = myFoldl op (op init x) xs


往递归的无限嵌套倒影里望去,看到的就是... 看不到 emmm
Forwarded from duangsuse Throws
视频压制算法是很复杂的,其中往往涉及到难懂的人工智能 人工神经网络、Fourier 傅里叶变换、线性规划、动态规划算法(臆测)

实际上,我一直以为「数学性复杂」的算法和「逻辑复杂」「简单」的算法之间最大的区别就是「数学性复杂」的算法往往先在纸上模拟和设计比较简单
逻辑复杂的往往是写伪代码、debug printf 和使用调试器调试起来比较简单
简单的算法往往不需要写伪代码、不需要在纸上演练即可使用,有 bug 最多一个 debug print 即可找到问题所在,而且单看看也不难
Forwarded from LWL 的基地台
然后版聊放松了一下的 lwl 继续回去修 MySQL
Forwarded from LWL 的基地台
……我觉得我真的需要对 MySQL 比较熟悉的 DBA 来帮我解答下疑惑
Forwarded from LWL 的基地台
啊不需要了(
$$$
$a
duangsuse::Echo
https://github.com/telegramdesktop/tdesktop/blob/d98bbca353fa12cc7b7fcecd193335db363aec35/Telegram/SourceFiles/core/click_handler_types.cpp#L32 #telegram
(其实我一直以为 Telegram Desktop 源码结构维护得那么好的话,这种链接路由应该专门分一个文件实现的,但其实内联在链接点击里实现了?(其实只不过是在那个文件里实现,不是在点击事件函数里实现的

(说实话,我不是很了解他们是怎么找到这些黑科技一样的玩法的... 我都懒得玩这些呢... 🙈 (找 @lwl12 问问去

我们来分析一下相应的算法 #telegram #algorithm #frontend #qt #cplusplus #desktop #linux #tool

... 算了直接找我要用的吧,首先我们说说 Telegram links 基本的 impact

telegramdesktop/tdesktopd/Telegram/SourceFiles/core/click_handler_types.h@d98bbca353fa12cc7b7fcecd193335db363aec35

clickHandler 就是链接派发逻辑。它分类对 Post 里内联的链接进行派发(到实际动作,如打开用户信息窗口),Types 是里面处理的数据类型,如用户 ID、网址 URL 等

public:
TextClickHandler(bool fullDisplayed = true)
QString copyToClipboardText()
QString tooltip()

class UrlClickHandler
class HiddenUrlClickHandler
class BotGameUrlClickHandler
class MentionClickHandler
class MentionNameClickHandler
class HashtagClickHandler
class CashtagClickHandler
class BotCommandClickHandler

充分体现了面向对象编程的继承性和抽象性(迫真

然后我们看看实际上的实现们

QString tryConvertUrlToLocal(QString url)
where

matchOptions = Regex::CaseInsensitive
bool telegramMeMatch = Regex::match(qsl("^https?://(www\\.)?(telegram\\.(me|dog)|t\\.me)/(.+)$"), url, matchOptions)

if
telegramMeMatch {
query = telegramMeMatch->capturedRef(4);
query->ifMatch("^joinchat/([a-zA-Z0-9\\.\\_\\-]+)(\\?|$)", x => x->ifMatch("^/\\d+/?(?:\\?|$)", url("&post=")))
query->ifMatch("^addstickers/([a-zA-Z0-9\\.\\_]+)(\\?|$)")
query->ifMatch("^share/url/?\\?(.+)$")
query->ifMatch("^confirmphone/?\\?(.+)")
query->ifMatch("iv/?\\?(.+)(#|$)")
query->ifMatch("socks/?\\?(.+)(#|$)")
query->ifMatch("proxy/?\\?(.+)(#|$)")
query->ifMatch("^([a-zA-Z0-9\\.\\_]+)(/?\\?|/?$|/(\\d+)/?(?:\\?|$))")
}

... 有点累,不用伪代码了吧,实现细节都抖出来有点多了
... 总之,我觉得应该搞一个自动正则匹配 URL 然后拿指定逻辑替换的插件,这样以后我就不用手动弄优雅(隐式)链接了

$伪 hashtag
duangsuse::Echo
好像不行吧... tg 还有个 cashtag 不知道有没有关系,再看看...
知道原因了,这个是处理链接的,我还没找到解析消息到包含 # hashtag 的代码... 找到了就知道了
duangsuse::Echo
知道原因了,这个是处理链接的,我还没找到解析消息到包含 # hashtag 的代码... 找到了就知道了
expHashtag = (^|[") + ExpressionSeparators(qsl("`\\*/")) + qsl("])#[\\w]{2,64}([\\W]|$)
nxpHashtag = /^#?\\d+$/

... ^#abc [#abc \#emm \/#dsds []#1s #saasa$