普通视图

谁懂啊!LABUBU 居然从电脑屏幕跳进我手里啦

2025年8月29日 21:05

早上对着电脑发呆,看到屏幕里的 LABUBU,忽然就冒出个念头:能不能让它从屏幕里出来,握在手里?让我也过过手瘾,毕竟抢了十七八回也没抢到过~ ​🙄

282.jpg

说干就干,随手举着手机拍了张 “伸手向屏幕” 的照片,用几天前刚刚玩过的即梦AI,说不定能实现这个想法。

进入网页,选择图片生成视频,结果前前后后试了十七八遍,要么 LABUBU 卡在屏幕边缘出不来,要么动作显得很生硬,差点就放弃了。​

没想到最后一次生成时,屏幕里的 LABUBU 还真蹦出来了,对着镜头晃了晃,效果比预期好不少。不得不说,AI 确实厉害。😵​

283.gif

想 get 同款 ?口令这就奉上:

👉 打开即梦 AI,选择图片生成视频,上传 “伸手” 照片,输入口令【真实的质感,画质细腻清晰,电脑屏幕里的LABUBU看向屏幕面前的方向,它从屏幕中猛的跳出来打破了屏幕的界限,跳到屏幕前真实的手上,在手上跳两下,撒娇,真实感与动画无缝融合,极其细腻,动画流畅。视频中卡通人物的形象要保持,与人物本体保持画风一致且完整相连】,等几分钟就能出片。不光是 LABUBU,其他喜欢的摆件、角色都能试试,可能会有意外惊喜。​

当然,重要的是前天晚上 MINI LABUBU 发售,我居然抢到了,哈哈~

284.jpg

还有前两天买的 “蚊子” 手办也到了,拆开快递那一刻,感觉这个周末的兴致一下就提上来了。​

[img]285.jpg286.jpg[/img]

最后祝大家都能有自己的小乐趣,开心最重要~

  •  

喝了四天啤酒,居然还发现了人生的意义!

2025年5月15日 13:00

真的很久没写东西了,工作忙得我晕头转向,每天都在各种打转。

不过五一假期来啦,我终于能喘口气,和朋友们、发小们聚在一起,连续喝了四天,太爽啦!

说到啤酒,我觉得白啤和精酿啤酒都还不错,比那些普通的工业啤酒有意思多了,每一口都超有惊喜。

我最近特别爱喝青岛白啤和福佳白啤。

青岛白啤就像个调皮的小家伙,看起来有点朦胧,倒进杯子里,泡沫超多,而且能坚持好久。喝一口,麦芽的甜味和淡淡的香味混在一起,就像刚切开的香蕉,还带点微微的苦味,味道层次超丰富。

福佳白啤就更特别啦,里面加了橘皮和芫荽籽,喝起来特别好喝,还有点特别的味道,特别清新。喝一口,整个人都轻松了,感觉超棒!

我还喝了好多精酿啤酒呢。双合盛的小麦精酿,麦芽的香气特别纯净,喝起来顺滑又清爽,特别棒。还有小象的德式小麦精酿,麦香特别浓郁,口感醇厚,喝起来特别过瘾。

总之,啤酒就像朋友一样,总能找到适合自己的那一款。

如果你也喜欢啤酒,快给我推荐推荐吧!

说不定我也能找到属于你的那一杯快乐呢!🍺

*Ps 这两天领导不在,划划水,上博客看看有没有什么可以折腾折腾的,哈哈!

看到X上的一段话描写中年打工人的状态,太真实了!
“身边很多朋友,几乎都在步入社会几年后,明显感觉自己的心气被剥削了,疲意,麻木,无欲无求。
上班就是为了过周末,没心情搞兴趣爱好,打开书读不进去,躺着玩手机刷短视频。
说是爱钱,但也没有狠下心赚钱,浑浑噩噩,失去所有探索欲和分享欲。
学生时代大家经常一起谈论文学、电影、旅行、音乐、爱情,后来聊天主题只剩下吃饭、加班、赚钱、家庭,活得像个空心人。
贾樟柯写,“生命到这个地方就不再有奇迹出现,剩下的就是和时间做斗争的一种庸常人生。”
作为大多数的我们,有太多现实需要理清,飞速的时间,普通的自己。开始成为社会的螺丝时代的燃料,理解并成为小时候排斥的无趣的人。
不再想什么意义不意义什么高级不高级了,吃饭就吃饭,打牌就打牌,喝酒就喝酒,我做很多事,只是为了驱散生活的倦怠。”

  •  

2025年震撼来袭:你准备好了吗?

2025年1月3日 12:00

又是一年新旧交替时,站在时光的门槛上,回望这一年的旅程,心中充满了感慨。这一年,我们每个人都是自己故事的主角,有的充满欢笑,有的带着泪水;有的硕果累累,有的略显失落。但无论如何,我们都勇敢地走过了这段旅程。(嗯,这段网上抄的)

在这个迟到的新年时刻,我想对你们说:感谢你们,感谢这一年的陪伴和支持。虽然我们可能素未谋面,但在这片虚拟的天地里,我们有着共同的语言——博客,这也是我为数不多的爱好之一,也是我坚持最久的爱好之一。

年末的忙碌几乎让我忘记了新年的祝福,但在这里,我要大声说出:祝大家新年快乐呀!愿新的一年,我们都能拥有更多的欢笑和收获。

元旦后的第一个工作日,进入办公室就被同事的咖啡香唤醒,感觉整个人都充满了活力。中午,大家一起吃了美味的手枪腿,也是对新一年的美好祝愿——希望团队能够蒸蒸日上。

276.jpg

新年这几天,朋友圈里,好友们纷纷晒出了自己的“年终总结”,我也忍不住加入了这场“晒总结”。

[img]279.png278.png280.png277.png[/img]

今年的跨年夜,没有了往年的喧嚣,大家都没有聚在一起,或许是因为大家都在忙碌中找到了自己的节奏,但那份对新年的期待从未改变。

在元旦前的半个月里,我几乎把所有的业余时间都投入到了 Typecho 插件的折腾中。一切始于偶然发现的古老插件 [t github.com/tennsinn/TeWords]TeWords[/t],原本只是想简单地修复一下兼容性问题,但谁知道,一折腾就是大半个月。果然代码的魅力就像美女,一旦碰了就难以自拔。

281.jpg

原本的简单修复变成了一场折腾风暴,改得越多,想法也越多,最终完全停不下来。[t demo.jdeal.cn/time]插件效果展示[/t] 当然,当我写下这篇文章的时候,我已经暂时放下了 (因为新的一年,时间变得更加宝贵) 嗯,当然不是,是因为年底开始忙了,哈哈。

希望在2025年,我们能继续保持对生活的热爱,对新鲜事物的探索热情,继续创造不一样的故事。也希望友链圈的小伙伴们能一起坚持,一起加油,共同迎接新的挑战!

  •  

从灵感闪现到 Scriptable 组件的奇妙一周

2024年11月29日 19:00

上周出差归来,终于迎来了些许闲暇时光。然而,我爱折腾的内心似乎总是停不下来,于是又开始了新的一轮折腾。

🎊 首页动态优化:灵感与实践的碰撞

一直以来都想在首页添加一个调用片刻的展示区域,但始终没有找到满意的样式。直到有一天,手机锁屏上的通知栏给了我启发。仿照着它的设计,创建了一个自己的动态展示区。虽然成品并不完美,但它已经能够满足基本的需求,还是让我感到非常满意的,后期再慢慢优化。

273.jpg

实现这个功能的代码主要集中在 CSS,相对简单,需要的小伙伴可以自行源码里查看。

📱 Scriptable 小组件:新的尝试

接着,在木木老师的新文章 [t immmmm.com/diy-ios-widget]自制 iOS 小组件,随机显示一条 Memos[/t] 中,我发现了 Scriptable 这款应用。经过一番浅浅的研究后,成功鼓捣出了两个小组件。

🥳 RSS 动态展示:实时掌握博友圈

第一个组件连接到了之前写好的RSS API,能够解析并展示友链内好友最新发布的文章列表。这意味着,现在我可以直接通过手机桌面查看朋友们最新的创作啦!

274.jpg

🎲 Typecho 数据展示:iTerm 小组件

第二个则是受到 Scriptable 里一款模仿 iTerm 外观组件的启发,花费大约半小时时间编写了一个接口,用于获取 Typecho 网站的部分数据。根据个人喜好调整了配色方案和字体选择后,最终效果令人眼前一亮。尽管英文部分是由机翻而来,略显生硬,但这并不影响整体体验。

275.jpg

🏗 修路工程:生活中的小琐事

此外,不得不提的是,最近公司门口正在进行的道路施工,预计将持续至2026年。每天上下班都要面对拥堵不堪的交通状况以及嘈杂的施工噪音,真是让人头疼不已。

转眼间,十一月即将结束,2024年的最后一个月即将到来。让我们一起加油吧,迎接新的一年!

  •  

告白气球:让页面浪漫起来

2024年11月14日 08:00

在关注的公众号里发现一段挺可爱的源码,效果正如你进入这篇文章时看到的,屏幕上飘满了小气球。

至于这玩意有啥用,其实我也没想好。🤣 不过,有几个初步的想法:

生日小惊喜:在博主的生日那天,让气球飘满屏幕,营造出温馨而欢乐的生日氛围。

博友纪念日:记录下每位博友的首次评论时间,当在第365天再次访问时,用一场气球雨,再配些许文案,作为周年惊喜。

互动小体验:或许还可以根据用户的某些操作来触发气球雨,增加用户与网站的互动。

还有哪些可玩的花样呢?🎉

最后,话不多说,送上代码:

<script>
(function() {
    'use strict';
    var __assign = function() {
        __assign = Object.assign ||
        function __assign(t) {
            for (var s, i = 1,
            n = arguments.length; i < n; i++) {
                s = arguments[i];
                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
            }
            return t;
        };
        return __assign.apply(this, arguments);
    };
    typeof SuppressedError === "function" ? SuppressedError: function(error, suppressed, message) {
        var e = new Error(message);
        return e.name = "SuppressedError",
        e.error = error,
        e.suppressed = suppressed,
        e;
    };
    var defaultBalloonColor = "#84A332";
    var defaultLightColor = "#C0F381";
    var balloonColorProperty = "--balloon-color";
    var lightColorProperty = "--light-color";
    var widthProperty = "--balloon-width";
    var heightProperty = "--balloon-height";
    var balloonDefaultSize = {
        width: 233,
        height: 609,
    };
    var createBallonElement = function(_a) {
        var balloonColor = _a.balloonColor,
        lightColor = _a.lightColor,
        width = _a.width;
        var balloon = document.createElement("balloon");
        balloon.innerHTML = balloonSvgHTML;
        Object.assign(balloon.style, {
            position: "absolute",
            overflow: "hidden",
            top: "0",
            left: "0",
            display: "inline-block",
            isolation: "isolate",
            transformStyle: "preserve-3d",
            backfaceVisibility: "hidden",
            opacity: "0.001",
            transform: "translate(calc(-100% + 1px), calc(-100% + 1px))",
            contain: "style, layout, paint",
            transformOrigin: "".concat(width / 2, "px ").concat(width / 2, "px"),
            willChange: "transform",
        });
        balloon.style.setProperty(balloonColorProperty, balloonColor);
        balloon.style.setProperty(lightColorProperty, lightColor);
        balloon.style.setProperty(widthProperty, width + "px");
        balloon.style.setProperty(heightProperty, (width * 609) / 223 + "px");
        return balloon;
    };
    var balloonSvgHTML = "\n<svg\n\nstyle=\"width: var(".concat(widthProperty, "); height: var(").concat(heightProperty, ");\"\nviewBox=\"0 0 223 609\"\nfill=\"none\"\nxmlns=\"http://www.w3.org/2000/svg\"\n>\n<g opacity=\"0.8\" filter=\"url(#filter0_f_102_49)\" >\n  <path\n    d=\"M117.5 253C136.167 294.5 134.7 395 125.5 453C116.3 511 133.833 578.167 125.5 606\"\n    stroke=\"url(#paint0_linear_102_49)\"\n    stroke-width=\"2\"\n  />\n</g>\n<g opacity=\"0.85\" filter=\"url(#filter1_ii_102_49)\">\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M176.876 204.032C181.934 198.064 209.694 160.262 210.899 127.619C213.023 70.1236 176.876 13 118.337 13C55.7949 13 18.5828 69.332 22.2724 127.619C24.0956 156.423 38.9766 178.5 51.7922 195.372C57.7811 203.257 90.0671 238.749 112.15 245.044C111.698 248.246 112.044 253.284 116.338 254H121.838V245.71C143.277 242.292 172.085 209.686 176.876 204.032Z\"\n    fill=\"var(").concat(balloonColorProperty, ", ").concat(defaultBalloonColor, ")\"\n  />\n</g>\n<g filter=\"url(#filter2_f_102_49)\">\n  <path\n    d=\"M125 256.5C125 258.433 122.09 260 118.5 260C114.91 260 112 258.433 112 256.5C112 254.567 114.91 255 118.5 255C122.09 255 125 254.567 125 256.5Z\"\n    fill=\"var(").concat(balloonColorProperty, ", ").concat(defaultBalloonColor, ")\"\n  />\n</g>\n<g opacity=\"0.2\" filter=\"url(#filter3_f_102_49)\">\n  <path\n    d=\"M178.928 128.12C178.011 152.146 172.137 162.97 154.623 184.2C141.594 199.992 128.28 215 112.805 215C104.349 215 92.739 215 65.2673 177.844C56.1123 165.461 45.4818 149.259 44.1794 128.12C41.5436 85.3424 68.1267 44 112.805 44C154.623 44 180.55 85.6242 178.928 128.12Z\"\n    fill=\"url(#paint1_radial_102_49)\"\n  />\n</g>\n<g\n  style=\"mix-blend-mode: lighten\"\n  opacity=\"0.7\"\n  filter=\"url(#filter4_df_102_49)\"\n>\n  <path\n    d=\"M72.7992 108.638L74.0985 87.5247C74.3145 84.0152 77.4883 81.4427 80.9664 81.958L94.8619 84.0166C98.4018 84.541 100.699 88.0277 99.7828 91.4871L94.0502 113.144C93.1964 116.369 89.8758 118.278 86.659 117.394L77.1969 114.792C74.4599 114.039 72.6249 111.471 72.7992 108.638Z\"\n    fill=\"var(").concat(lightColorProperty, ", ").concat(defaultLightColor, ")\"\n  />\n</g>\n<g\n  style=\"mix-blend-mode: lighten\"\n  opacity=\"0.5\"\n  filter=\"url(#filter5_f_102_49)\"\n>\n  <path\n    d=\"M147.76 88.7366L144.842 67.9855C144.378 64.687 141.316 62.3976 138.021 62.8858L123.638 65.0166C120.098 65.541 117.801 69.0277 118.717 72.4871L124.462 94.1891C125.311 97.3967 128.602 99.3061 131.808 98.4512L143.364 95.3695C146.296 94.5878 148.182 91.7409 147.76 88.7366Z\"\n    fill=\"var(").concat(lightColorProperty, ", ").concat(defaultLightColor, ")\"\n  />\n</g>\n<g style=\"mix-blend-mode: lighten\" filter=\"url(#filter6_f_102_49)\">\n  <path\n    d=\"M46.4087 131.164C38.1642 111.726 43.2454 91.2599 47.4381 82.0988C47.7504 81.4164 48.5574 80.8601 48.8712 81.5418C48.9711 81.7589 48.9188 82.1169 48.8357 82.3409C41.2341 102.832 45.5154 122.958 47.3397 130.925C47.8434 133.124 47.2898 133.242 46.4087 131.164Z\"\n    fill=\"var(").concat(lightColorProperty, ", ").concat(defaultLightColor, ")\"\n  />\n</g>\n<g style=\"mix-blend-mode: lighten\" filter=\"url(#filter7_f_102_49)\">\n  <path\n    d=\"M46.4087 131.164C38.1642 111.726 43.2454 91.2599 47.4381 82.0988C47.7504 81.4164 48.5574 80.8601 48.8712 81.5418C48.9711 81.7589 48.9188 82.1169 48.8357 82.3409C41.2341 102.832 45.5154 122.958 47.3397 130.925C47.8434 133.124 47.2898 133.242 46.4087 131.164Z\"\n    fill=\"var(").concat(lightColorProperty, ", ").concat(defaultLightColor, ")\"\n  />\n</g>\n<g opacity=\"0.3\">\n  <g style=\"mix-blend-mode: lighten\" filter=\"url(#filter8_f_102_49)\">\n    <path\n      d=\"M190.817 150.078C196.906 136.754 196.503 119.258 195.396 111.05C195.318 110.475 194.888 109.925 194.734 110.403C194.704 110.495 194.689 110.697 194.699 110.807C196.396 129.344 191.942 144.593 190.447 149.824C190.122 150.959 190.349 151.104 190.817 150.078Z\"\n      fill=\"var(").concat(lightColorProperty, ", ").concat(defaultLightColor, ")\"\n    />\n  </g>\n  <g style=\"mix-blend-mode: lighten\" filter=\"url(#filter9_f_102_49)\">\n    <path\n      d=\"M190.817 150.078C196.906 136.754 196.503 119.258 195.396 111.05C195.318 110.475 194.888 109.925 194.734 110.403C194.704 110.495 194.689 110.697 194.699 110.807C196.396 129.344 191.942 144.593 190.447 149.824C190.122 150.959 190.349 151.104 190.817 150.078Z\"\n      fill=\"var(").concat(lightColorProperty, ", ").concat(defaultLightColor, ")\"\n    />\n  </g>\n</g>\n</svg>\n");
    var svgFiltersHtml = "\n<svg>\n  <defs>\n    <filter\n      id=\"filter0_f_102_49\"\n      x=\"114.588\"\n      y=\"250.59\"\n      width=\"20.5082\"\n      height=\"357.697\"\n      filterUnits=\"userSpaceOnUse\"\n      color-interpolation-filters=\"sRGB\"\n    >\n      <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n      <feBlend\n        mode=\"normal\"\n        in=\"SourceGraphic\"\n        in2=\"BackgroundImageFix\"\n        result=\"shape\"\n      />\n      <feGaussianBlur\n        stdDeviation=\"1\"\n        result=\"effect1_foregroundBlur_102_49\"\n      />\n    </filter>\n    <filter\n      id=\"filter1_ii_102_49\"\n      x=\"22.0213\"\n      y=\"13\"\n      width=\"188.967\"\n      height=\"241\"\n      filterUnits=\"userSpaceOnUse\"\n      color-interpolation-filters=\"sRGB\"\n    >\n      <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n      <feBlend\n        mode=\"normal\"\n        in=\"SourceGraphic\"\n        in2=\"BackgroundImageFix\"\n        result=\"shape\"\n      />\n      <feColorMatrix\n        in=\"SourceAlpha\"\n        type=\"matrix\"\n        values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n        result=\"hardAlpha\"\n      />\n      <feOffset />\n      <feGaussianBlur stdDeviation=\"4.5\" />\n      <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n      <feColorMatrix\n        type=\"matrix\"\n        values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0\"\n      />\n      <feBlend\n        mode=\"normal\"\n        in2=\"shape\"\n        result=\"effect1_innerShadow_102_49\"\n      />\n      <feColorMatrix\n        in=\"SourceAlpha\"\n        type=\"matrix\"\n        values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n        result=\"hardAlpha\"\n      />\n      <feOffset />\n      <feGaussianBlur stdDeviation=\"18\" />\n      <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n      <feColorMatrix\n        type=\"matrix\"\n        values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n      />\n      <feBlend\n        mode=\"overlay\"\n        in2=\"effect1_innerShadow_102_49\"\n        result=\"effect2_innerShadow_102_49\"\n      />\n    </filter>\n    <filter\n      id=\"filter2_f_102_49\"\n      x=\"111\"\n      y=\"253.959\"\n      width=\"15\"\n      height=\"7.04138\"\n      filterUnits=\"userSpaceOnUse\"\n      color-interpolation-filters=\"sRGB\"\n    >\n      <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n      <feBlend\n        mode=\"normal\"\n        in=\"SourceGraphic\"\n        in2=\"BackgroundImageFix\"\n        result=\"shape\"\n      />\n      <feGaussianBlur\n        stdDeviation=\"0.5\"\n        result=\"effect1_foregroundBlur_102_49\"\n      />\n    </filter>\n    <filter\n      id=\"filter3_f_102_49\"\n      x=\"0\"\n      y=\"0\"\n      width=\"223\"\n      height=\"259\"\n      filterUnits=\"userSpaceOnUse\"\n      color-interpolation-filters=\"sRGB\"\n    >\n      <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n      <feBlend\n        mode=\"normal\"\n        in=\"SourceGraphic\"\n        in2=\"BackgroundImageFix\"\n        result=\"shape\"\n      />\n      <feGaussianBlur\n        stdDeviation=\"22\"\n        result=\"effect1_foregroundBlur_102_49\"\n      />\n    </filter>\n    <filter\n      id=\"filter4_df_102_49\"\n      x=\"46.7878\"\n      y=\"59.8922\"\n      width=\"79.1969\"\n      height=\"87.7179\"\n      filterUnits=\"userSpaceOnUse\"\n      color-interpolation-filters=\"sRGB\"\n    >\n      <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n      <feColorMatrix\n        in=\"SourceAlpha\"\n        type=\"matrix\"\n        values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n        result=\"hardAlpha\"\n      />\n      <feOffset dy=\"4\" />\n      <feGaussianBlur stdDeviation=\"13\" />\n      <feComposite in2=\"hardAlpha\" operator=\"out\" />\n      <feColorMatrix\n        type=\"matrix\"\n        values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.8 0\"\n      />\n      <feBlend\n        mode=\"overlay\"\n        in2=\"BackgroundImageFix\"\n        result=\"effect1_dropShadow_102_49\"\n      />\n      <feBlend\n        mode=\"normal\"\n        in=\"SourceGraphic\"\n        in2=\"effect1_dropShadow_102_49\"\n        result=\"shape\"\n      />\n      <feGaussianBlur\n        stdDeviation=\"5.5\"\n        result=\"effect2_foregroundBlur_102_49\"\n      />\n    </filter>\n    <filter\n      id=\"filter5_f_102_49\"\n      x=\"102.515\"\n      y=\"46.8202\"\n      width=\"61.3035\"\n      height=\"67.8351\"\n      filterUnits=\"userSpaceOnUse\"\n      color-interpolation-filters=\"sRGB\"\n    >\n      <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n      <feBlend\n        mode=\"normal\"\n        in=\"SourceGraphic\"\n        in2=\"BackgroundImageFix\"\n        result=\"shape\"\n      />\n      <feGaussianBlur\n        stdDeviation=\"8\"\n        result=\"effect1_foregroundBlur_102_49\"\n      />\n    </filter>\n    <filter\n      id=\"filter6_f_102_49\"\n      x=\"34\"\n      y=\"73.2313\"\n      width=\"22.9258\"\n      height=\"67.4198\"\n      filterUnits=\"userSpaceOnUse\"\n      color-interpolation-filters=\"sRGB\"\n    >\n      <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n      <feBlend\n        mode=\"normal\"\n        in=\"SourceGraphic\"\n        in2=\"BackgroundImageFix\"\n        result=\"shape\"\n      />\n      <feGaussianBlur\n        stdDeviation=\"4\"\n        result=\"effect1_foregroundBlur_102_49\"\n      />\n    </filter>\n    <filter\n      id=\"filter7_f_102_49\"\n      x=\"40\"\n      y=\"79.2313\"\n      width=\"10.9258\"\n      height=\"55.4198\"\n      filterUnits=\"userSpaceOnUse\"\n      color-interpolation-filters=\"sRGB\"\n    >\n      <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n      <feBlend\n        mode=\"normal\"\n        in=\"SourceGraphic\"\n        in2=\"BackgroundImageFix\"\n        result=\"shape\"\n      />\n      <feGaussianBlur\n        stdDeviation=\"1\"\n        result=\"effect1_foregroundBlur_102_49\"\n      />\n    </filter>\n    <filter\n      id=\"filter8_f_102_49\"\n      x=\"186.419\"\n      y=\"106.345\"\n      width=\"13.5106\"\n      height=\"48.2987\"\n      filterUnits=\"userSpaceOnUse\"\n      color-interpolation-filters=\"sRGB\"\n    >\n      <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n      <feBlend\n        mode=\"normal\"\n        in=\"SourceGraphic\"\n        in2=\"BackgroundImageFix\"\n        result=\"shape\"\n      />\n      <feGaussianBlur\n        stdDeviation=\"1.93775\"\n        result=\"effect1_foregroundBlur_102_49\"\n      />\n    </filter>\n    <filter\n      id=\"filter9_f_102_49\"\n      x=\"189.326\"\n      y=\"109.252\"\n      width=\"7.69731\"\n      height=\"42.4855\"\n      filterUnits=\"userSpaceOnUse\"\n      color-interpolation-filters=\"sRGB\"\n    >\n      <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n      <feBlend\n        mode=\"normal\"\n        in=\"SourceGraphic\"\n        in2=\"BackgroundImageFix\"\n        result=\"shape\"\n      />\n      <feGaussianBlur\n        stdDeviation=\"0.484439\"\n        result=\"effect1_foregroundBlur_102_49\"\n      />\n    </filter>\n    <linearGradient\n      id=\"paint0_linear_102_49\"\n      x1=\"124.798\"\n      y1=\"253\"\n      x2=\"124.798\"\n      y2=\"606\"\n      gradientUnits=\"userSpaceOnUse\"\n    >\n      <stop stop-color=\"white\" />\n      <stop offset=\"0.474934\" stop-color=\"grey\" stop-opacity=\"0.1\" />\n      <stop offset=\"0.722707\" stop-color=\"white\" stop-opacity=\"0.6\" />\n      <stop offset=\"0.93469\" stop-color=\"grey\" stop-opacity=\"0.7\" />\n      <stop offset=\"1\" stop-color=\"white\" stop-opacity=\"0\" />\n    </linearGradient>\n    <radialGradient\n      id=\"paint1_radial_102_49\"\n      cx=\"0\"\n      cy=\"0\"\n      r=\"1\"\n      gradientUnits=\"userSpaceOnUse\"\n      gradientTransform=\"translate(134 149.5) rotate(-123.69) scale(82.9277 65.4692)\"\n    >\n      <stop />\n      <stop offset=\"1\" stop-opacity=\"0\" />\n    </radialGradient>\n  </defs>\n</svg>\n";
    var easings = ["cubic-bezier(0.22, 1, 0.36, 1)", "cubic-bezier(0.33, 1, 0.68, 1)", ];
    var colorPairs = [["#ffec37ee", "#f8b13dff"], ["#f89640ee", "#c03940ff"], ["#3bc0f0ee", "#0075bcff"], ["#b0cb47ee", "#3d954bff"], ["#cf85b8ee", "#a3509dff"], ];
    function createBalloonAnimation(_a) {
        var balloon = _a.balloon,
        x = _a.x,
        y = _a.y,
        z = _a.z,
        targetX = _a.targetX,
        targetY = _a.targetY,
        targetZ = _a.targetZ,
        zIndex = _a.zIndex;
        balloon.style.zIndex = zIndex.toString();
        balloon.style.filter = "blur(".concat(zIndex > 7 ? 8 : 0, "px)");
        var getAnimation = function() {
            var tiltAngle = Math.random() * (15 - 8) + 8;
            var tiltDirection = Math.random() < 0.5 ? 1 : -1;
            return balloon.animate([{
                transform: "translate(-50%, 0%) translate3d(".concat(x, "px, ").concat(y, "px, ").concat(z, "px) rotate3d(0, 0, 1, ").concat(tiltDirection * -tiltAngle, "deg)"),
                opacity: 1,
            },
            {
                transform: "translate(-50%, 0%) translate3d(".concat(x + (targetX - x) / 2, "px, ").concat(y + (y + targetY * 5 - y) / 2, "px, ").concat(z + (targetZ - z) / 2, "px) rotate3d(0, 0, 1, ").concat(tiltDirection * tiltAngle, "deg)"),
                opacity: 1,
                offset: 0.5,
            },
            {
                transform: "translate(-50%, 0%) translate3d(".concat(targetX, "px, ").concat(y + targetY * 5, "px, ").concat(targetZ, "px) rotate3d(0, 0, 1, ").concat(tiltDirection * -tiltAngle, "deg)"),
                opacity: 1,
            },
            ], {
                duration: (Math.random() * 1000 + 5000) * 5,
                easing: easings[Math.floor(Math.random() * easings.length)],
                delay: zIndex * 200,
            });
        };
        return {
            balloon: balloon,
            getAnimation: getAnimation
        };
    }
    function balloons() {
        return new Promise(function(resolve) {
            var balloonsContainer = document.createElement("balloons");
            Object.assign(balloonsContainer.style, {
                overflow: "hidden",
                position: "fixed",
                inset: "0",
                zIndex: "999",
                display: "inline-block",
                pointerEvents: "none",
                perspective: "1500px",
                perspectiveOrigin: "50vw 100vh",
                contain: "style, layout, paint",
            });
            document.documentElement.appendChild(balloonsContainer);
            var sceneSize = {
                width: window.innerWidth,
                height: window.innerHeight
            };
            var balloonHeight = Math.floor(Math.min(sceneSize.width, sceneSize.height) * 1);
            var balloonWidth = (balloonDefaultSize.width / balloonDefaultSize.height) * balloonHeight;
            var amount = Math.max(7, Math.round(window.innerWidth / (balloonWidth / 2)));
            var maxDist = Math.max((amount * balloonWidth) / 2, (balloonWidth / 2) * 10);
            var balloonPositions = [];
            for (var i = 0; i < amount; i++) {
                var x = Math.round(sceneSize.width * Math.random());
                var y = window.innerHeight;
                var z = Math.round( - 1 * (Math.random() * maxDist));
                var targetX = Math.round(x + Math.random() * balloonWidth * 6 * (Math.random() > 0.5 ? 1 : -1));
                var targetY = -window.innerHeight;
                var targetZ = z;
                balloonPositions.push({
                    x: x,
                    y: y,
                    z: z,
                    targetX: targetX,
                    targetY: targetY,
                    targetZ: targetZ,
                });
            }
            balloonPositions = balloonPositions.sort(function(a, b) {
                return a.z - b.z;
            });
            var closestBallonPosition = balloonPositions[balloonPositions.length - 1];
            balloonPositions[0];
            balloonPositions = balloonPositions.map(function(pos) {
                return (__assign(__assign({},
                pos), {
                    z: pos.z - closestBallonPosition.z,
                    targetZ: pos.z - closestBallonPosition.z
                }));
            });
            var filtersElement = document.createElement("div");
            filtersElement.innerHTML = svgFiltersHtml;
            balloonsContainer.appendChild(filtersElement);
            var currentZIndex = 1;
            var animations = balloonPositions.map(function(pos, index) {
                var colorPair = colorPairs[index % colorPairs.length];
                var balloon = createBallonElement({
                    balloonColor: colorPair[1],
                    lightColor: colorPair[0],
                    width: balloonWidth,
                });
                balloonsContainer.appendChild(balloon);
                return createBalloonAnimation(__assign(__assign({
                    balloon: balloon
                },
                pos), {
                    zIndex: currentZIndex++
                }));
            });
            requestAnimationFrame(function() {
                var animationPromises = animations.map(function(_a) {
                    var balloon = _a.balloon,
                    getAnimation = _a.getAnimation;
                    var a = getAnimation();
                    return a.finished.then(function() {
                        balloon.remove();
                    });
                });
                Promise.all(animationPromises).then(function() {
                    balloonsContainer.remove();
                    resolve();
                });
            });
        });
    }
    document.addEventListener("DOMContentLoaded",
    function() {
        balloons();
        var button = document.getElementById("releastBalloonsButton");
        button === null || button === void 0 ? void 0 : button.addEventListener("click",
        function() {
            balloons();
        });
    });
})();
</script>

以上代码为原文源代码,需要自行删减修改配合自己页面使用。

代码不复杂,主要就是SVG占用的代码量比较大,可以在需要触发时作为文件引入,避免网站代码量过大。

最后,期待各位大佬的创意发挥~

  •  

浅浅的改造:博客新变化

2024年11月12日 08:00

近日,在浏览朋友们的博客时,我受到了不少灵感的启发,决定对我的博客进行一些小小的浅浅的改造,以增添几分新鲜感。

首先是博客的背景设计。背景底色借鉴了 [t ithe.cn]枫叶[/t] 博客,同时添加了动态元素,来自 [t www.rz.sb]若志随笔[/t] 的博客。尽管初次尝试可能会有些许不协调,但我认为这正是尝试新事物的乐趣所在,后面再融合自己的元素和想法慢慢调整。长期使用纯白色的背景后,加入一点点色彩与动态元素确实让整个页面焕发一些新的活力。😀

在探索 [t www.thyuu.com]风记星辰[/t] 的“关于”页面时,我被动态背景所吸引,便萌生了为自己的“关于”页面banner添加类似效果的想法。考虑到个人风格,我在原有的基础上进行了简单的调整和借鉴,最终选用了自己的一张自拍恶搞照片作为背景。虽然这张照片可能拍的不太专业,但又不是不能用。😁 同时也对“友链”页面的banner进行了更新。

此次改动主要通过纯CSS实现,尽量保持了原有代码的简洁性。预估,背景颜色的改变增加了约0.1KB的资源加载量,其他内部页面则大约增加了0.2KB左右。

对于这次的浅浅的改造,我还是感到非常满意的。希望有时间能够继续探索更多创意,进一步优化网站的设计。如果你对这些变化感兴趣,欢迎移步 [w www.jdeal.cn/about.html]关于[/w] 和 [w www.jdeal.cn/links.html]友链[/w] 页面,体验一下新的效果。

下周,又要踏上为期一周的出差旅程。虽然工作会比较繁忙,但我相信每一次的挑战都是成长的机会。

这次尝试下出差期间,抽空更新更新博客,分享旅途中的所见所闻。加油!💪

  •  

智能家居改造之红外转射频遥控

2024年11月5日 07:00

上个礼拜,出差到几座城市,每晚都入住不同风格的酒店。令我惊奇的是,这些酒店都配备了小度智能音箱,只需轻轻一句“小度小度”,便能轻松操控房间内的各种设备。

这一切激发了我的灵感,让我想起了家中那台因费红外遥控而无法使用语音和联网控制的电器。我曾尝试过用万能遥控器作为中继,以实现对各类小型家电的统一管理,但遗憾的是,它仅支持红外及433、315MHz等频率,面对滚码、蓝牙等新型遥控方式则显得力不从心。

躺在酒店一个念头闪过脑海:如果能将红外信号转换成射频信号,不就可以解决这个难题了吗?带着这样的想法,我在某宝上开始了搜索之旅。

不出所料,真的找到了这样一款神奇的小工具:红外转射频模块。这款小巧的模块不仅安装简便,而且功能强大,能够与多种类型(理论上只要有按钮)的遥控器连接,形成一个高效的遥控信号转发系统,而且是光耦隔离的模拟开关,安全高效。

说干就干,迅速下单,出差回到家第一件事就去拿包裹,开拆后立刻开始了我的改造。

266.jpg

首先将电池取出,拆解原有的遥控器,主板上只有四个微动开关和对码信号发射元件,结构异常简单,没搞懂当初为什么没有设计成红外发射的形式啊。

267.jpg

随后,将目光转向了红外转射频模块。这块小小的电路板上,集成了五伏电源插口、四颗指示灯、四颗学习按钮、八个接线孔以及三伏输出,还有一个红外接收器,麻雀虽小五脏俱全。

268.jpg

为了实现最佳效果,我决定不将其直接装入原遥控器内,而是选择重新做个外壳,并采用外部电源供电。这样一来,不仅可以摆脱传统遥控器的束缚,还能进一步提升系统的稳定性和可靠性。

269.jpg

接下来,便是最为关键的焊接环节。将模块的三伏电源与遥控器相连,确保其供电正常工作;再通过跳线,将模块的第一路开关与遥控器的第一个开关的触点相接,以此来模拟按键动作。尽管过程有些繁琐,但最终的结果却令人满意,测试功能一切运作正常,万能遥控器成功发送了指令,目标设备也准确无误地作出了响应。

270.jpg

完成初步测试后,开始考验耐心和细致的操作了。

下面就是接接接、焊焊焊!

271.jpg

最后找来了一个稍显粗糙但足够实用的盒子,主板安置其中,正式宣告项目完工。当我对着小爱同学发出指令时,心中充满了期待。随着一声清脆的回应和设备响应,那一刻爽爆了。更重要的是,整个改造成本低廉,模块加上运费也不过16块,超高性价比的智能家居改造。

272.jpg

嗯,因为非常开心,于是写篇水文记录下~ over~ 话说下旬又要出差了,天津、太原、武汉.. 唉~

  •  

独立博客自省问卷15题

2024年10月15日 08:00

看到不少博客在写这个,我也跟个风,哈哈。


1. 你的博客更新频率是多少?
比较随意,有时候工作不忙的时候会多写几篇,忙的时候可能几个月不更,不过确保一年平均下来可以每月至少一篇吧。


2. 你的博客上次更新是什么时候?
文章更新于两个月前,片刻更新于2天前。


3. 你的博客文章是原创的吗?
绝大部分都为原创,极少部分喜欢的文章或者图片会标记转载出处。


4. 你觉得自己的文章对他人有帮助吗?
或许吧,不过写文章的人总希望自己的文章可以对别人有所帮助,我也是希望在其他时间得某个点上,可以让看过我的人想起我。


5. 你上次换博客主题/程序是什么时候?
记不太清了,应该在 2016 年左右吧,从 Wordpress 换到 Typecho


6. 你上一次捣腾博客主题代码是什么时候?
主站代码很久没有碰了,大概两三个月前优化了下片刻等页面,测试站的主题代码应该一个月前折腾过几天。


7. 你会对博客主题进行二次开发?
未来很长一段时间内不会对本站的主题进行二次开发,只会不断的优化和缩减代码量,同时一些稀奇古怪的想法和想要实现的功能都会在测试站的主题上完成,也有可能会再重新做个主题,还在构思。


8. 你多久打开自己博客自我陶醉一次?
一般情况下发表完文章的前两天会经常打开,还有就是有新评论的时候,基本上可以做到每周都浏览一次吧。


9. 你近期对自己博客域名什么感受?
域名的来历:上大学的时候一直很喜欢 ideal 这个单词,然后就结合自己的姓 J,诞生了 Jdeal 这个词,后面自己的网名也全部改成了 Jdeal,买域名的时候除了没能买到 .com 的域名有点遗憾,不过 .cn 我也很喜欢,时间很快,域名也快有十年了吧。


10. 你每天都会看网站的流量统计吗?
刚开始玩博客的时候会几乎每天都看,现在很佛系,偶尔会看,不过我的关注点是大家都是怎么找到我的站,几乎不会去关注网站的流量。


11. 你通过博客的广告赚到钱了吗?
没统计过,印象中应该在10块以内吧。不过自己花的倒是不少。


12. 你去浏览别人的博客/网站主要为什么?
一方面是为了学习新的知识,还有就是我很喜欢与众不同的网站或风格,感觉对自己的想法也会有一些帮助,会发出“咦,还可以这么玩”的感叹。


13. 看到别人分享了一篇文章,你打开第一反应是什么?
如果标题足够吸引我,会认真看完并收藏,如果是自己不太感兴趣的,会大概的过一下。


14. 你觉得博客哪方面更重要?
刚开始玩的时候觉得主题好看很重要,玩着玩着觉得主题简约大方就行了,于是开始整内容,写着写着发现内容也没什么可写的了,于是你就会发现有大量的人玩一阵子就消失了,友链也是“死”了一波又一波。其实我觉得博客哪方面都不是特别重要,除非这是你的工作,它就是一个载体,认识一群你想认识的人,有时间你就折腾,没时间你就等有时间再折腾,至于你是喜欢不停的美化主题,还是只专注于写好文章,都不重要,自己开心就行,不是嘛。


15. 近期通过写博客有哪些新收获?
看到了许多喜欢的博客,和认识了一些有趣的博主,重要的是好几位在同城市的博主,哈哈,希望有机会可以搞个线下博友见面会啊。

  •  

生命的赠予 :《论孩子》

2024年8月14日 12:12

本文是由黎巴嫩诗人 纪伯伦 所写,其主要作品有《泪与笑》《先知》《沙与沫》等。他的作品大多以“爱”与“美”为主题,通过大胆的想象和象征的手法,表达深沉的情感和高远的理想。

你们的孩子,都不是你们的孩子,

乃是“生命”为自己所渴望的儿女。

他们是借你们而来,却不是从你们而来,

他们虽和你们同在,却不属于你们。

你们可以给他们以爱,却不可给他们以思想,

因为他们有自己的思想。

你们可以荫庇他们的身体,却不能荫庇他们的灵魂,

因为他们的灵魂,是住在“明日”的宅中,那是你们在梦中也不能想见的。

你们可以努力去模仿他们,却不能使他们来像你们,

因为生命是不倒行的,也不与“昨日”一同停留。

你们是弓,你们的孩子是从弦上发出的生命的箭矢。

那射者在无穷之中看定了目标,也用神力将你们引满,使他的箭矢迅疾而遥远地射了出去。

让你们在射者手中的“弯曲”成为喜乐吧;

因为他爱那飞出的箭,也爱了那静止的弓。

本文题目虽为《论孩子》,具体内容却是论父母之道的。父母们常忽视了教育最为重要的目标之一:培养独立人格。本诗指出孩子是独立的,是与父母平等的个体,父母只能给孩子以爱,却不能代替他们思想、灵魂的形成。

  •  

当评论遇上动画:发射!

2024年7月6日 10:00

前段时间,我在捣鼓我的 [t demo.jdeal.cn]DEMO站[/t] 时,灵感如泉涌,特别是受到 若志 随笔 的启发,我决定直接将评论邮件推送功能嵌入到主题中,而非依赖插件来实现。

这一尝试虽然让我收获了不少乐趣,但也遇到了一个小问题——游客评论时,由于邮件发送是同步进行的,导致提交评论时响应有些延迟。

懒惰如我,暂时没有将同步发送改为异步的打算(毕竟,谁不想偷点懒呢?),于是我开始思考如何在等待过程中增加一些趣味元素,让用户体验不至于那么单调。

就在一次使用网易邮箱的偶然瞬间,我发现发送邮件时,那个“发送”按钮会瞬间变成纸飞机图标,并优雅地飞离,这一细节瞬间点燃了我的创意火花。于是,我决定将这份灵感融入到我的网站中,为评论按钮也添上类似的动画。

想要看看这有趣的动画吗?可以点击这里 [t demo.jdeal.cn/btn.html]评论按钮动画示例[/t],相信你会喜欢的!

这个小动画的实现其实非常简单,它主要依赖于动画和 JavaScript 来控制元素。我已经将它成功应用到了我的测试站上,效果还不错。

当然,你也可以根据自己的需求进行修改,比如评论成功时显示对勾图标、错误时叉号等,让动画更加贴合你的网站风格。

此站评论区暂时没有上线该功能,感兴趣的朋友可以直接访问 [t demo.jdeal.cn/btn.html]评论按钮动画示例[/t],查看源码使用,记得根据自己的具体需求进行适当的修改哦!

  •  
❌