作者归档:s

2023年的最后一周

一年半没有更新这里了,可能是太忙了吧。

2023年的工作其实没有大的变化,预期目标算是完成了5成。不过也算满意了。新团队一年半的时间,大方向变了2次。全局变化很大,可反而自己对外的交流变得小了。可谓是横向发展严重不足。纵向深度与之前的工作相比,应该不如22年之前。最近总能感到“危险”的气息。

好在这一年尝试的另一个项目B,初步实现了“可用”。预计在2024年要让她变得越来越好用,也预期有些收益。值得期待~

维护了十余年的项目D,2023年还能搜到她的教学视频。说明她还在持续影响着国内用户,甚感欣慰。如果有精力,还是要更新下去,为了有需要她的人。

越来越老,大感体力不如从前。打游戏反应慢、学东西忘的快,甚至吃个饭都会洒饭了。可心境还是不能稳定,易喜怒哀乐。

流水账结束,期待未来!

在cairo中使用pango文字渲染的文本显示区域是如何计算的

首先,pango可以使用pango_layout_get_pixel_extents获取ink_rect和logical_rect。

// API声明
void pango_layout_get_extents (PangoLayout    *layout,
			  PangoRectangle *ink_rect,
			  PangoRectangle *logical_rect);
// 调用示例
PangoRectangle rcInk, rcLogic;
pango_layout_get_pixel_extents(layout, &rcInk, &rcLogic);

假设使用cairo在(0, 0)位置输出文本”选项1″三个字,使用以上代码获取的 rcInk值为(x=0, y=6, w=52, h=19),rcLogi的值为(0,0,51,30)。那么输出的文字几个关键位置如下:

在绘制时,rcInk.y的值是实际墨迹的y方向起始值,可以理解为文字的顶部空白部分。这个空白在英文字母的绘制中比较明显,比如a会比i的rcInk.y的值更大,因为在四线三格中

垂直居中对齐:上图的是一个文本框的示意图,如果让“墨迹区域”在文本框box内垂直居中显示,可以按如下代码计算oy的值。

rcInk, rcLogic; 
...

topspace = rcInk.y;
oy = (box.h - ink.h) / 2 - topspace;

...
cairo_move(x, oy);
....

底部对齐:底部对齐可按如下方法 计算oy的值

rcInk, rcLogic; 
...

topspace = rcInk.y;
oy = box.h - ink.h - topsace;

...
cairo_move(x, oy);
....

关于windows系统的SetCapture

当我们需要精细化处理某个窗口的WM_MOUSEMOVE事件时,需要使用到SetCapture()。它使我们的程序可以在鼠标移出窗口区域、或在DISABLE的窗口中响应MouseMove事件。

正常情况下,我们会在WM_SETCURSOR事件中设置捕获。然后在鼠标移出窗口区域时释放捕获:

case WM_SETCURSOR:
    SetCapture(hWnd);
    break;

case WM_MOUSEMOVE:
    if (x < 0 || x > width)
        ReleaseCapture();

在Windows系统中,被 SetCapture的窗口在同一时刻只能有一个。并且当一个窗口SetCapture时,其它窗口无论是否处于上层,都将无法响应鼠标事件。所以当两个都需要设置Cature的窗口有重叠区域时,需要额外处理鼠标捕获。

如下图,窗口B在A的上层。当鼠标从起始点进入窗口A时,窗口A会首先SetCapture。但当鼠标向右移动到窗口B时,因为窗口A的Capture,窗口B是无法响应鼠标事件的。如果窗口A已经按上文描述在鼠标移出窗口A时释放捕获。当鼠标继续向右移出窗口A时,窗口B可开始捕获。

在实际应用中,可在MouseMove事件中即时检查鼠标坐标处的顶层窗口。如上图的情形,当鼠标“进入B”时,可在窗口A中释放捕获,交由窗口B继续处理。

设一个变量,Z从0到1,如何超越A&B&C&D

现在,A是业界龙头,B是紧跟其后的强劲选手,C是从一个弯道超车后起之秀。D是从零开始的新秀中的新秀。但我觉得是长还缺少一个Z,一个可以生存在夹缝中的Z。

A的情况:数据优质,用户习惯把握准确。但A在创新、新技术跟进缓慢。

B的情况:中规中矩,在自己的赛道持续发力,与A势均力敌。问题与A类似。

C的情况:忽略吧

D的情况:垂类产品,尚未看见她的布局蓝图。但整个团队更值得期待。

Z是什么

提供技术解决方案、重新定义业界。

定期的自我审视

最近换了份工作,当时给了自己两个理由。一是原公司的晋升和调薪基本没有可能,新公司涨幅不高,但考虑当前环境,勉强可以接受。二是职业生涯中靠把事做好赚钱的时间不多了。需要在不同环境下接触更多优秀的人,学一学他们的思考、做事方式。为以后打算。

新环境将近一月,最大的感受是新公司的使命和愿景显的“更年轻”、“更有活力”,至少我现在很欣赏它。从这方面看,换工作是对的。

这个新的团队正在做着以前的旧事,向左看,可以拿以前的东西直接来用,容易陷入固化的认知误区。所以新团队可能没有很好的去饯行“敢为极致”。尤其在里程碑设计、具体方案选择等方面还是基于以前的经验做着模仿的事实。我原本以为要打造一个超越甚至是颠覆的的产品。至少从现在的规划看,这个目标还要很久,2年或者5年。

向右看,之前的经验可以避坑,也可以用于改进。至少在很多方面,大家知道怎么能作的更好。可能上峰已经想到了所有,并且制定了追赶到超越的详细计划。但愿是如此~

新工作中,自身仍然存很多问题。第一,从H1的虚线管理到现在的一线开发,会很矛盾职业规划是在倒退的。但认真思考,还是应该多想想获得与得到。第二,做事快但不够细,容易留人权柄。第三,有很多的“恶意假设”,这些假设会激发负面情绪,带着情绪交流一定是失败的。第四,仍然不能做到怎么让别人接受自己的观点。