二月冬风即过,春风将起|2024年2月小结

前言

2月的广东天气,是热一段冷一段的,昨天可能穿着短袖还觉得有点热,今天就需要把毛衣穿上了。偶尔突然兴起想去图书馆找寻一个安静的地方写写代码,或者工作什么的,但临近出门的那一刻,感受着阳台传来的当天"新鲜"的冷空气,激情瞬间被消散得无影无踪。

这篇文章是在晚上坐在房间里写的,淡黄色的灯光下总让人少了那么点感觉。在3月1号这个节点,无论2月的目标和计划是否完成,我觉得总是要小结一下,算是对于2月的敬意,也怀抱着对3月的憧憬。

计划·Plan

当回过神来,2月已是半月过去,不过值得庆幸的是,我重新找回了"自律"的感觉。2月份定下的目标并不多,主要围绕着事业和身体两方面规划,可公开的情报如下:

自去年11月底辞职之后,我并没有第一时间寻找工作,一来是想着休息一下,二来也好调整下状态再赴职场或者做点其他事情。于是到了来年2月份,年后第一个重要的事情,便是寻找一份新工作(现在也还在找,如果有大佬内推的话,不甚感谢🙏)。

第二件事倒是比较凑齐,在休息期间,恰好本地的亲戚的工厂在寻找数字化系统的解决方案,正好我"被抓到"正在"躺平",于是乎在我"自告奋勇"的建议下,接下了第一个副业项目--- ---开发一个简易版的ERP系统。

承接上这件事情,在找人组团队的过程中,有幸与圈子里的一些大佬结缘顺势也组建了一个小团队(暂时不能透露)。大家都有想法和能力,于是"聚合"在一起尝试做一些有意思的事情,便有了RSS项目(上线后再告诉大家是什么)。

除此之外,年近而立之年,琐事繁多,于是乎便也定下了读书+运动的计划,希望也能有所收获。

执行·Do

自我管理并没有想象中那么简单,自我约束更是违反常规的事情。索性做了一件简单的事情,记录好每一天所做的重要的事情,于是乎有了以下的内容,可公开的情报如下:

没有想象中那么容易,倒也没有预期中那么复杂。事情虽然一件接一件,有时候也是应接不暇,但总会有所取舍,有所坚守。

所幸做的比较好的是坚持运动和阅读这2件事情,即便是睡到自然醒,也会做一些简单的运动,毕竟开始才是最重要的。然后是阅读,本身对于看书这件事情就有偏爱,虽做不到一目十行,但场景具象化的能力让我能够快速阅读完一本书,这也是对于看书这件事情不抗拒的主要原因。

起床后运动,睡觉前看书,中间白天时间做项目、求职,日子过得飞快的同时,也一定程度上缓解了焦虑。

分享·Share

写这篇文章很重要的一个原因是,在过去的一个月中积累了不少宝贵的"财富",总是藏着掖着,不太利于个人的发展。

一个人只要有了其他人所没有的东西,往往容易沉浸在自我满足的温柔乡中不能自拔,从而演化成自负、傲慢,这是很可怕的。

过去的包袱总是会阻碍着前行的脚步,因此最好的方式,就是将自己藏着掖着的那点小东西拿出来,分享出去。

阅读书单(持续更新)

运动因人而异,但阅读却有所侧重。2月份的阅读书单定在了大佬送的《乌合之众》,和我未婚妻喜欢看的东野圭吾系列推理小说。

比较遗憾的是,缺少场景化的描述,《乌合之众》的阅读难度比《沉默的巡游》要高很多。《沉默的巡游》几乎是在2个晚上加起来差不多4、5个小时内看完的,而《乌合之众》有点在看大学教材,实在有点"难啃"。

至于书中情节,在此就不剧透了,后续如果有机会,在阅读完书籍后应该会尝试输出「读书笔记」,也让书籍不仅仅只是经过脑子。

电影清单(持续更新)

重温了一遍《机器人瓦力》,依旧那么好看,剧情依旧那么搞笑。

ERP项目(预结案)

以往都是以公司的项目为导向,第一次自己做项目,难免会碰到很多的坑。写作最大的好处,便是能把自己过往的经历记录下来,整理分析,从而输出成为自己的方法论。

早在1月份左右,ERP项目已经完全启动,经过前期商务洽谈、需求收集、合作协议签署、需求分析、产品方案、技术方案、编程开发、系统对接、实施交付......而今已经功能开发和测试基本完成。可公开的情报如下:

项目文档(部份)

产品原型(部份)

交付效果(部份)

我主要负责的是商务+产品的部份,后期还有系统部署、交付实施部份。而前后端都有大佬们把持着,因此不用太过于担心。由于前端和后端大佬们都很给力,因此无论在UI设计还是交互、功能逻辑实现上,大家的效率也更高一些。

而我做的更多的,除了本职的产品相关的工作之外,更多的是将项目过程中所积累的经验沉淀下来,形成可复用的产品方法论。毕竟,从0到1的项目经历(真正从0到1),这种机会不是人人都有的,我很幸运。

RSS项目(预上线)

RSS项目(代称)是自上一个失败的C端AI图生图项目后的新项目,吸取了上一个项目(吸取的不多,苦笑)的经验,这一次无论在产品定位还是设计思路上,大家都下了挺大一番功夫。

在这个项目中可能收获最多的人是我了,因为我偷偷将一些经验都积累下来了,虽然很多东西暂时不能展示出来,但过程中我认为的一些不错的内容我还是想分享出来。可公开的情报如下:

色彩规范(部份)

Name Key Hex_Light RGB_Light Hex_Dark RGB_Dark
主要文本 commom_primary_text_color #333333 R:51 G:51 B:51 #F2F2F7 R:242 G:242 B:247
次要文本 commom_secondary_text_color #666666 R:102 G:102 B:102 #979797 R:151 G:151 B:151
品牌色文本 commom_brand_text_color #2F88FF R:47 G:136 B:255 #2F9CFF R:47 G:156 B:255
说明性文本 commom_illustrative_text_color #999999 R:153 G:153 B:153 #636366 R:99 G:99 B:102
链接文本 common_link_text_color #007FFC R:0 G:127 B:252 #0089FF R:0 G:137 B:255
背景颜色 common_primary_bg_color #F5F5F5 R:245 G:245 B:245 #16161A R:22 G:22 B:26
边框线颜色 common_border_color #CDD0D6 R:205 G:208 B:214 #16161A R:22 G:22 B:26
按钮颜色 common_icon_button_color #D2DFEC R:210 G:223 B:236 #243B53 R:36 G:59 B:83
分割线颜色 common_separator_color #EAEAEA R:234 G:234 B:234 #EAEAEA R:234 G:234 B:234

字体规范(部份)

Name Key Word_Weight Pt
大标题 font_size_title_big Regular 34
标题1 font_size_title1 Regular 28
标题2 font_size_title2 Regular 22
标题3 font_size_title3 Regular 20
标题 font_size_title Regular 18
正文 font_size_text_main Regular 16
小标题 font_size_title_small Regular 15
标注1 font_size_label1 Regular 13
标注2 font_size_label2 Regular 12
角注 font_size_note Regular 10

圆角规范(部份)

Name Key Pt
大圆角1 radius_large 32
大圆角2 radius_large2 16
中圆角 radius_medium 8
小圆角 radius_small 4
迷你圆角 radius_mini 2

UI设计稿(Figma挺好用)

RSS解析(自己在做需求调研的时候写的)

python 复制代码
import requests
import feedparser
from flask import Flask, jsonify, Response, request
import html
import json
import logging
from bs4 import BeautifulSoup
import re

app = Flask(__name__)

# 设置日志记录
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


def parse_rss(url):
    """
    解析给定的RSS源URL,并返回解析后的feedparser对象。

    Args:
        url (str): 要解析的RSS源URL。

    Returns:
        feedparser.FeedParserDict: 解析后的RSS源对象,如果解析失败则返回None。
    """
    try:
        # 发起请求并解析响应
        response = requests.get(url, verify=False)
        response.raise_for_status()  # 检查请求是否成功
        feed = feedparser.parse(response.text)
        return feed
    except requests.RequestException as e:
        # 记录请求异常
        logger.error(f"Failed to fetch RSS feed from {url}: {e}")
        return None
    except Exception as e:
        # 记录解析异常
        logger.error(f"An error occurred while parsing RSS feed from {url}: {e}")
        return None


def clean_html_tags(text):
    """
    从给定的文本中去除HTML标签和换行符。

    Args:
        text (str): 要去除HTML标签的文本。

    Returns:
        str: 去除HTML标签和换行符后的文本。
    """
    # 使用BeautifulSoup去除HTML标签
    soup = BeautifulSoup(text, "html.parser")
    stripped_text = soup.get_text(separator=" ")
    # 使用正则表达式去除多余的空白字符
    stripped_text = re.sub(r'\s+', ' ', stripped_text)
    return stripped_text.strip()


@app.route('/rss_feed', methods=['GET', 'POST'])
def get_rss_feed():
    """
    获取和返回给定RSS源URL的RSS Feed。

    如果请求是POST,则从表单中获取RSS源URL;如果是GET,则从查询参数中获取。
    解析获取的RSS源URL,将每个条目的标题和描述提取出来,然后返回JSON响应。

    Returns:
        flask.Response: 包含JSON格式的RSS Feed的响应。
    """
    # 根据请求方法获取RSS源URL
    if request.method == 'POST':
        rss_urls = request.form.getlist('rss_url')
    else:
        rss_urls = request.args.getlist('rss_url')

    if not rss_urls:
        # 如果没有提供RSS源URL,则返回错误响应
        return jsonify({'error': 'RSS feed URLs are required'})

    feeds_data = []

    for rss_url in rss_urls:
        if not rss_url.startswith('https://'):
            # 如果URL不是以'https://'开头,则添加该前缀
            rss_url = 'https://' + rss_url

        # 解析RSS源
        feed = parse_rss(rss_url)
        if feed and feed.entries:
            # 提取RSS源信息
            site_name = feed.feed.get("title", "")  # 获取RSS源的网站名称
            feed_site = feed.feed.get("link", "")   # 获取RSS源的网址
            language = feed.feed.get("language", "")  # 获取网址的语言

            items = []
            for idx, item in enumerate(feed.entries, start=1):
                try:
                    # 解析条目信息
                    title = html.unescape(item.title)
                    description = html.unescape(item.description)
                    link = item.link

                    # 清理HTML标签
                    description = clean_html_tags(description)

                    item_data = {
                        "id": idx,
                        "title": title,
                        "description": description,
                        "link": link
                    }
                    items.append(item_data)
                except Exception as e:
                    # 记录处理条目异常
                    logger.error(f"An error occurred while processing item: {e}")

            feed_data = {
                "id": len(feeds_data) + 1,
                "site_name": site_name,  # 添加网站名称字段
                "feed_site": feed_site,  # 添加RSS源的网址字段
                "language": language,    # 添加网址的语言字段
                "feed_url": rss_url,
                "items": items
            }
            feeds_data.append(feed_data)

    # 生成JSON响应数据
    json_data = json.dumps({"feeds": feeds_data}, ensure_ascii=False)
    # 构造响应对象
    response = Response(json_data, status=200, content_type="application/json; charset=utf-8")
    return response


if __name__ == "__main__":
    app.run(debug=True)

RSS项目目前还处于开发阶段,相信不久之后就可以和大家见面了,当然我也希望和大佬们一起做的项目,能够帮到更多的人。

webstack项目(开源了!)

会不会有很多人像我一样,每天会频繁访问很多网站,AI、产品、UI、编程......可能有些人会使用浏览器自带的标签系统,而我比较喜欢的方式是「自定义导航页」。

在很早之前我就使用过Axure(原型设计软件)制作过一个静态的导航网站,而时隔2年多,在最近在整理文档时又更新了一批网站,因此又想着重新绘制一下导航网站。

整个过程大概花了4、5个小时吧,完成之后总觉得少了点什么(分享欲),干脆开源算了。可公开的情报如下:

网站收集

产品原型

直接开源了

webstack项目使用的是Axure(生成的静态HTML)+GitHub Page方式,当然也可以使用Figma+Gitee的方式,这里我只使用了自己最擅长且最高效的方式,就不写前端代码了。

当然在GitHub上开源后,我有学到了新的东西,比如License的书写格式(可以复用):

sql 复制代码
MIT License

Copyright (c) 2024 李智威

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

还有README文件的书写格式(虽然简单,但也可以复用):

最后,项目的地址我也放出来,项目仅供参考,如有疑问,以你为主。

项目地址:github.com/RicardoWesl...

Demo预览: ricardowesleyli.github.io/webstack/in...

工作状态(求职中)

虽然在2月份的时间里没有找到合适的企业和岗位,但也完成了简历修改和投递事项,特别是在修改简历时的自我复盘,让自己对自己的认知更加深入了一点。

看了下自己的简历,感觉写得还行,那就部份公开吧,也可以给目前正在找工作的童鞋一点参考。可公开的情报如下:

简历中并没有使用很多花哨的词藻,一字一句,包括字体颜色都是仔细斟酌得出。

简历是面试官看到的面试者的第一个作品,因此书写格式以及内容十分重要,如果你找不到书写的方向,不妨"借鉴"下我的书写风格吧。

2月份其实也在惠州老家尝试投递了下简历,发现惠州市场更多的是偏向于制造业的岗位,行情还是有点失望呀。简历投递的情报我也公开下:

说在最后

2月,还是有点冷的2月,和这世界一样。许是写作能让我平静下来,许是写作是我为之骄傲的一件事情,我总会在文字中填充我的情绪,我的想法,还有我的期望。

说实话,快到而立之年的我在人生的岔路上有些晕头转向,前往的路似乎清晰可见,但同行的人不多。我好像过着很多人渴望的生活,也好像和所有普通人一样,为渴望的生活煎熬着。

我们心有不甘,不甘平凡,但最终归于平凡。

我觉得我,或者我们能做的,或许就是这样定好目标,列好计划,一步步向前。前路漫漫,与君共勉。

相关推荐
色空大师15 分钟前
23种设计模式
java·开发语言·设计模式
闲人一枚(学习中)16 分钟前
设计模式-创建型-建造者模式
java·设计模式·建造者模式
博风1 小时前
设计模式:6、装饰模式(包装器)
设计模式
A_cot1 小时前
理解设计模式与 UML 类图:构建稳健软件架构的基石
microsoft·设计模式·简单工厂模式·工厂方法模式·uml
君败红颜1 小时前
设计模式之创建模式篇
设计模式
J老熊3 小时前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程
猿java3 小时前
什么是 Hystrix?它的工作原理是什么?
java·微服务·面试
闲人一枚(学习中)4 小时前
设计模式-创建型-抽象工厂模式
设计模式·抽象工厂模式
陪学5 小时前
百度遭初创企业指控抄袭,维权还是碰瓷?
人工智能·百度·面试·职场和发展·产品运营
小白不太白9506 小时前
设计模式之 观察者模式
观察者模式·设计模式