MoreRSS

site iconXulihang修改

英语专业学生。喜欢随手拍,折腾电子。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Xulihang的 RSS 预览

雾里看花,半熟恋人

2026-08-16 16:35:50

最近一档以30+人群为主题的恋爱综艺比较火,叫《半熟恋人》。其中周佑凌和徐绿杨组成的柳周cp获得的关注最多。我也好奇去看了一下,颇有雾里看花的感觉。

因为正片太长,我主要看了土豆脑袋博主剪辑的评论片段和王一快的reaction。我发现对于他们的评价相当两极分化。主要的点在于柳柳前期与多位男嘉宾暧昧不清,后期男嘉宾都跑了,只有周佑凌对她是真的喜欢,才和他在一起。柳柳自己说是男女情感的错位,但有点感情经验的人,就说她其实是在钓鱼。王一快说年轻时没少被这样的女生骗,而且这些女生后来过得都挺好。

我觉得作为年纪比较大的人谈恋爱,可能是存在不少问题。

  1. 激情来自于对过去的追忆。比如《甄嬛传》里的皇帝,喜欢和纯元皇后相似的人,所谓的莞莞类卿、替身文学。很多人喜欢的类型已经定死了。
  2. 彼此理解的难度增加。每个人都有复杂的经历和性格,不是一类人很难互相理解。董卓然猜周佑凌要约谁,猜了三次,一次都没猜对。
  3. 受伤后失去勇气。年轻时真情实感地投入,却没有换来好的结果,不敢再轻易付出真心。即使是霸总周佑凌,也在觉得柳柳端水,陷入关系的低位后希望通过不搭理、接触其它女生来跳出这种情感漩涡。
  4. 建立关系的目的复杂。两性关系,是欲望的集中体现,对性、权力、金钱的各种欲望。感情没有那么纯粹。
  5. 情感成熟度的错位。有的人30几岁,其实还像个孩子。有的人20几岁,但已经很成熟了。

我觉得柳周CP已经是很好的情侣了,他们本身是底色不错的人,生理吸引,情感需求对位,外形匹配,结合在一起又有助于事业。希望他们后续的相处,能给我们30+的人的感情提供一些借鉴。祝99。

下面是一些细节:

  1. 468。周佑凌问柳柳谈过几个男友,柳柳说一个大4岁,一个大6岁。然后周说468,下一个大8岁,因为他36,柳柳28,差8岁。这里就代入自己了。王一快这里觉得周对柳太舔了,被拿捏了。怎么说呢,人家心甘情愿、乐在其中。
  2. 1v1。周佑凌一上来就喜欢柳柳,每次to签和朋友圈都发给她。但发现认识十来天后,柳柳还是没有和他锁。他急切地需要女生给自己一个身份但没有成功,觉得她端水,不再搭理他。从海南归来,也避开和柳柳的接触。但还是很在意柳柳,柳柳的行李箱也装顺手,从凌李政手中接过。后来柳柳约他,关系突飞猛进,发现柳柳和自己想的端水大师并不一样,也和陈丹琪说明了情况。这里看,男女关系能不能成是女生主导的,选择权在女生手上。但能看出周佑凌的性格就是喜欢这种模式,可能是上海男人的一个特点。
  3. 模棱两可。柳柳一开始对谁都释放信号。被问到时都给出模棱两可的回答,被说端水。我觉得她的确太顾及别人的感受,对谁都笑眯眯,表达友好,不直接表达,是存在问题的。但的确人对自己和他人的认知能力有限的时候,很难做出正确的抉择。特别是现在人对婚姻没有那么大的向往,做决定也会变得慎重。因为没有办法直接得知对方想法,这个时候就考验爱人的能力了,引导型爱人难得。

学习Power BI

2026-08-03 15:39:50

Power BI是微软推出的一套强大的商业分析工具。它最早可追溯到Excel中的Power Pivot,Power Query。它在2015年正式发布,包含网页端的Power BI Service、桌面端的Power BI Desktop和移动版本。

Power BI专注于数据导入、清洗、呈现这一整个流程,和Excel相比,更适合可视化和分析数据。

比如我有个在线的demo,将每天统计的数据以csv的格式,保存为一个个文件,命名为YYYYMMDD.txt,例如下方示例:

2026/07/14 18:53:00, IP, Country, UserAgent, OCR
2026/07/14 18:53:00, IP, Country, UserAgent, Save

原始数据包含事件时间,访问者IP,访问者国家,浏览器UserAgent和事件名字,比如OCR、保存等等。

可以在Power BI中先建一个Semantic Model,通过Web获取这些数据,然后解析并保存。可以使用高级编辑器,使用以下命令进行存储:

let
    // 1. 定义基础域名和相对路径
    // 使用 RelativePath 参数实现相对路径引用
    BaseUrl = "https://blog.xulihang.me",
    
    // 2. 定义获取数据的日期范围(最近30天)
    Days = 30,
    EndDate = Date.AddDays(Date.From(DateTime.LocalNow()), -1),
    StartDate = Date.AddDays(EndDate, -(Days - 1)),
    
    // 3. 生成日期列表
    DateList = List.Dates(StartDate, Days, #duration(1,0,0,0)),
    
    // 4. 定义读取单个日志文件的函数
    GetLog = (LogDate as date) as nullable table =>
        let
            // 将日期转为 YYYYMMDD 格式
            DateStr = Date.ToText(LogDate, "yyyyMMdd"),
            
            // 使用 Web.Contents 和 RelativePath 获取文件
            Response = try Web.Contents(
                BaseUrl,
                [
                    RelativePath = "/" & DateStr & ".txt"
                ]
            ),
            
            // 如果文件不存在则返回 null
            Result = if Response[HasError] then
                null
            else
                let
                    // 读取文件内容并按行分割
                    Lines = Lines.FromBinary(Response[Value], null, null, 65001),
                    
                    // 解析每一行 CSV
                    ParseLine = (line as text) =>
                        let
                            Parts = Text.Split(line, ","),
                            Count = List.Count(Parts),
                            
                            // 假设至少有5列:时间, IP, 国家, UserAgent, 事件名称
                            // 如果列数多于5,将中间多余列合并(处理 UserAgent 中可能包含逗号的情况)
                            Result = if Count >= 5 then
                                {
                                    Parts{0},  // 事件时间
                                    Parts{1},  // IP
                                    Parts{2},  // 国家
                                    Text.Combine(List.Range(Parts, 3, Count - 4), ","),  // UserAgent(可能包含逗号)
                                    Parts{Count-1}  // 事件名称(最后一列)
                                }
                            else
                                null
                        in
                            Result,
                    
                    // 过滤掉空行和解析失败的行
                    Parsed = List.RemoveNulls(List.Transform(Lines, each ParseLine(_))),
                    
                    // 转换为表格
                    TableData = Table.FromRows(
                        Parsed,
                        {"事件时间", "IP", "国家", "UserAgent", "事件名称"}
                    ),
                    
                    // 添加日志日期列
                    AddDate = Table.AddColumn(
                        TableData,
                        "日志日期",
                        each LogDate,
                        type date
                    )
                in
                    AddDate
        in
            Result,
    
    // 5. 遍历所有日期,获取数据
    Tables = List.RemoveNulls(List.Transform(DateList, each GetLog(_))),
    
    // 6. 统一所有表的结构(确保列一致)
    CleanTables = List.Transform(
        Tables,
        each Table.SelectColumns(
            _,
            {"事件时间", "IP", "国家", "UserAgent", "事件名称", "日志日期"},
            MissingField.UseNull
        )
    ),
    
    // 7. 合并所有表
    Combined = Table.Combine(CleanTables),
    
    // 8. 设置正确的数据类型
    ChangedType = Table.TransformColumnTypes(
        Combined,
        {
            {"事件时间", type datetime},
            {"IP", type text},
            {"国家", type text},
            {"UserAgent", type text},
            {"事件名称", type text},
            {"日志日期", type date}
        }
    )
in
    ChangedType

以上存储的是原始数据,我们如果想基于原始数据计算出更多列,可以新建一个列,比如根据UserAgent计算操作系统:

OS = 
VAR UA = LOWER(RawLogs[UserAgent])
RETURN
SWITCH(
    TRUE(),
    CONTAINSSTRING(UA,"windows"),"Windows",
    CONTAINSSTRING(UA,"android"),"Android",
    CONTAINSSTRING(UA,"iphone") || CONTAINSSTRING(UA,"ipad"),"iOS",
    CONTAINSSTRING(UA,"macintosh"),"macOS",
    CONTAINSSTRING(UA,"linux"),"Linux",
    "Other"
)

一个经常用到的概念叫Measure,它不是存储在表格中的数据,而是需要用到时,会动态计算的一个指标。比如以下计算唯一IP数量的指标。在可视化报表中,Measure可以根据各种条件,比如时间进行动态计算。

Visitors = 
DISTINCTCOUNT(RawLogs[IP])

有了Semantic Model后,我们可以基于这个数据创建可视化报表了。有常见的饼图、折线图、漏斗图等等。

相似产品

  • Apache Superset
  • 帆软FineBI
  • Tableau

代码缩进

2026-07-16 14:27:50

代码缩进,使用4个空格或者制表符(Tab)表示一个层级,用来让代码有更好的可读性。而Python这样的语言,缩进是其语义的一部分,替代{}这样的括号。

有缩进的C语言代码:

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

没有使用缩进的C语言代码:

#include <stdio.h>

int main() {
printf("Hello, World!\n");
return 0;
}

现在一般都推荐用空格来缩进。因为使用tab,在不同编辑器,不同偏好设置的表现会不一样。有的人用两个空格宽度显示tab,有的人喜欢四个空格宽度。

代码编辑器一般都有自动调整缩进的功能。比如Visual Studio Code,使用SHIFT+ALT+F,就可以按偏好设置统一缩进,比如将四个空格缩进的改成两个空格缩进。

高跟鞋

2026-06-13 21:22:50

穿高跟鞋可以美化小腿形状、增高、抬头挺胸,增加穿着者的自信,但存在健康问题。最早高跟鞋是男人穿的,现在变成女性的专属。

高跟鞋可以突显女性的魅力,听着女人哒哒哒的脚步声,男人的心也为之一荡。和胸、屁股、长发等共同组成了女性的特质。

穿高跟鞋对脚踝能力要求比较高。随着奥戴丽好笨这样博主的出现,穿高跟鞋跑步、跳跃也成了杂技一般的表演。

蜡笔小新

2026-06-13 20:56:50

最近在b站上看了不少《蜡笔小新》,还挺有意思的。

它是一部家庭动画,讲述了孩子还上幼儿园时,一家三口(后来加上小葵和小白就是五口)的日常故事。

比如妈妈和儿子出门,结果忘带钥匙,被关在门外。妈妈听到电话响,脑补是老公出事了,用石头砸开玻璃窗;小新出门,碰到陌生大龄未婚姐姐一起躲雨。本来这位姐姐不想搭理他,最后开车送小新回家;幼儿园吉永老师一直在等待男友表白,一帮幼儿园小朋友送上助攻。

可以说是把小孩日常生活中各种场景都拍出来了,比很多知名动漫更接地气点。

AI时代还有必要写博客吗

2026-06-13 20:44:50

我的工作是写技术博客,优化网站SEO,让用户找到我们。那在AI时代,可以直接问AI了,还有必要写博客吗?

我之前写的博客,其实很多是某个技术具体的应用,比如如何用哪个Linux命令、怎么编译docbook文档。此外,还有很多常识的记录,比如记录某个疾病,可以用什么药物。这种的确问AI更方便了。但博客还是可以当作一种笔记存在,方便自己记忆和查询。

而其它很多随笔,凝聚着作者的情感和经历,是AI没有办法替代的。我看十年前的博客,就像是在跟十年前的自己对话一样。

另外,为什么写博客,要选择什么题目,也主要体现人的智慧和主观能动性。