收藏的blog

酷壳 – CoolShell.cn plantegg ManateeLazyCat Julia Evans 作者的编程杂志非常好看 happy xiao | Substack lazycat推荐,以前已经关注过 yihong0618/gitblog: People Die, but Long Live GitHub 亦宏大佬,还推荐了一大堆好的博客 ooh.directory: a place to find good blogs that interest you happy xiao推荐 Netflix TechBlog 青衣十三楼 一个坚持用txt写blog的人 个人主页 - 微博-本恰恰 kk Blog —— 通用基础 dog250-CSDN博客 CFC4N的博客 – 榫卯江湖,编码人生。 Memozine - Es muss sein? Es muss sein! 婉兮清扬 云风的 BLOG Essays · Gwern.net ginobefun/BestBlogs: bestblogs.dev - 汇集顶级编程、人工智能、产品、科技文章,大语言模型摘要评分辅助阅读,探索编程和技术未来 Engineering Blogs 将 506 个工程师的博客的 RSS 给订阅起来,将每天有更新的自动同步到网站上,甚至你可以汇集的方式来订阅。 ...

2026-01-19 ·  (🌟Updated: 2026-02-27) · 1 min · 87 words · tomyli

众乐乐-weekly 2026-W02

Read 📖 读完 《世界简单史》 开始读 《丝绸之路:一部全新的世界史》 Tools 🧰 买的胜利碳音max球到了,试了一下冬天打不错 新增chrome插件 PeekLink - Chrome Web Store 尝试使用obsidian的 media-extended 插件来看视频并记日记,logseq这方面不太给力 在弄obsidian的在线播放youtube视频时,学会了使用script为proxyman增加request header的方法 Image 🖼️ 麦当劳桌子上都有无线充了 Speech 💬 阅读使人丰富,写作使人精确,讨论使人完备 – 培根 Wiki一下 https://en.wikipedia.org/wiki/Reuters?useskin=vector 路透社,英国报社,2008年被汤姆森公司收购

2026-01-16 ·  (🌟Updated: 2026-01-16) · 1 min · 31 words · tomyli

众乐乐-weekly 2026-W01

Read 📖 继续读《20世纪简史》,预计下周就可以读完 Tools 🧰 升级完Idea,好多按键都不好使了,尤其是AI相关 尝试了一下Obsidian,还是更喜欢Logseq,两者各有千秋:Logseq 是“思考的空间”,Obsidian 是“输出的空间 给每日回顾模板增加每天和每周的review任务 pdd上买的电脑立式支架到了,试了一下,感觉一般,直接退了 开始使用Dropzone AI的辅助编程还是用云端的模型更准确 NotebookLLM最终推荐的人挺多,准备深入研究一下 Image 🖼️ Speech 💬 好的评论不是给出答案,而是打开问题 Wiki一下

2026-01-12 ·  (🌟Updated: 2026-01-12) · 1 min · 20 words · tomyli

大鹏慢读-tomyli的读书2026

DONE 20世纪简史 (豆瓣) DONE 丝绸之路 (豆瓣) TODO 极端的年代:1914—1991 (豆瓣) TODO 别闹了,费曼先生! TODO 超越感觉 TODO 练习的心态

2026-01-06 ·  (🌟Updated: 2026-02-28) · 1 min · 15 words · tomyli

收集的命令行工具

Atuin - Shell History & Executable Runbooks 一个命令行工具, 可以在你的所有机器上同步/搜索/备份shell命令历史 Watchman - A file watching service | Watchman 监控文件变化并及时通知 bensadeh/tailspin: 🌀 A log file highlighter 日志文件高亮 yihong0618/epubhv: Make your epub books vertical or horizontal. 任意转换 epub 书的横竖排。(可批量) os-health/ssar: Site Reliability Engineering System Activity Reporter 磁盘 io 监控,作者开发的其它工具也很好用 Curl by example: Interactive guide curl命令指南,还有互动的示例

2025-12-31 ·  (🌟Updated: 2025-12-31) · 1 min · 52 words · tomyli

众乐乐-weekly 2025-W52

Read 📖 开始读 20世纪简史 Tools 🧰 新买的耳机到了,测试了一下不错,随后又买了中空耳塞和耳机转typec转接器,这样手机电脑就都可以用了 准备看 坠落的审判 ReaderWise 播客内容解析功能显示真的是一塌糊涂,全都连在了一起 帮朋友弄一个双旦的海报,试了几个工具效果都不好,用豆包和comet的效果也不好,最好还是同事帮弄了一下 网盘filen续费 在网上看到一个三角支架,可以手机电脑使用,有点心动 Amazing AI需要高版本的15.2才能安装,准备升级 Speech 💬 拥有资源并不意味着就能找到方向 Wiki一下 Mira Murati,她创立了一家名为Thinking Machines Lab的人工智能初创公司,之前在OpenAI和Tesla任职。

2025-12-26 ·  (🌟Updated: 2025-12-26) · 1 min · 24 words · tomyli

众乐乐-weekly 2025-W51

Read 📖 在读《简读中国史》,作为科普读物,这本书写的很多,给人一个中国历史发展的大地图。 受 https://ciceroxiao.github.io/hong525/2025/12/16/2025-W50.html 启发,在2025年末开启周报模式 Tools 🧰 最近在深度使用Logseq,有点感觉了,还是得尊重人是视觉动物的原则 使用Logseq整理以前收藏的内容,发现自己是严重的收集狂,于是又开始进行归类、删除 更新完Emacs和陈大神的配置后,搜索不能记录历史了 Speech 💬 故事不能替代现实,只能帮助我们面对现实 Wiki一下

2025-12-19 ·  (🌟Updated: 2025-12-19) · 1 min · 15 words · tomyli

重拾Android的快乐-Handler

说明 Handler 是Android提供的一个用于处理消息与可运行对象的组件,它有两个功能: 将消息与可运行对象在安排在未来某个时间点运行 在其它线程上操作队列 为什么提供Handler机制 Android在启动后会有一个主线程,它不允许子线程去改变主UI线程的内容,为了防止一些耗时操作导致主UI线程无响应而闪退,是Android提供的一种保护机制。在现实中确实有一些耗时长的需求使用异步线程,比如调用三方接口,加载完后来刷新UI,这种需要就可以用Android提供的 Handler 机制来实现,可以认为 Handler 是一个与Android主进程的通道 常用方法 sendMessage 发送消息 handleMessage 接收消息 obtainMessage 从全局消息pool获取一个Message对象 post 提交可运行对象,后缀带AtTime表示在指定时间提交,后续带Delayed表示提交延迟运行 removeMessages 移除消息队列中等待中的消息 hasMessages 判断消息队列中是否有某个指定消息 实战 实现一个指定时间切换图片的功能,最终效果如下 页面 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/RelativeLayout1" android:gravity="center"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imgAnimation" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" /> </RelativeLayout> 代码比较简单,就是一个图片,居中显示 代码逻辑 var imgAnimation: ImageView? = null var imgstart = 0 val imgids = arrayOf( R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5 ) private fun testHandler() { setContentView(R.layout.handler_sample) imgAnimation = findViewById(R.id.imgAnimation) val handler = ImgAnimationHandler() Timer().schedule( object : TimerTask() { override fun run() { handler.sendEmptyMessage(101) } }, 0, 500 ) } class ImgAnimationHandler : Handler() { override fun handleMessage(msg: Message) { if (msg.what == 101) { imgAnimation?.setImageResource(imgids[imgstart++ % imgids.size]) } } } 消息处理:主要是新建了一个 ImgAnimationHandler ,它覆写了 handleMessage 方法来处理信息,当消息what值=101 时,从 imgids 中顺序选择一个 sourceId 来达到图片切换的效果 发送消息:主线程中创建一个Timer的schedule线程每隔 500ms 通过 ImgAnimationHandler 发送消息 (what=101) 在子线程中调用Handler 在子线程中调用Handler,需要设置指定 Looper 的Handler(在创建 Handler 时,官方不再建议使用默认的构造函数创建 Handler,而是推荐 传入 Looper 实例作为构建参数的构造函数) ...

2025-08-01 ·  (🌟Updated: 2025-08-04) · 1 min · 188 words · tomyli

重拾Android的快乐-Service

说明 REF https://developer.android.com/develop/background-work/services

2025-07-29 · 1 min · 3 words · tomyli

重拾Android的快乐-ListView组件

说明 ListView 组件用来以垂直滚动的显示View集合,配置方式如下: <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" /> ListView 实现动态数据展示 ListView 是一个 AdapterView,它不关心要显示的数据,只负责展示 ListView 显示的数据是交由 ListAdapter 进行处理,ListAdapter 本质是一个 Adapter,它是ListView和展示数据的桥,这样就可以实现内容与数据的分离 BaseAdapter 抽象基类,自定义扩展都会继承这个类 ArrayAdapter 支持泛型操作,实现最简单的展示一行文字 SimpleAdapter 具有良好扩展性的Adapter,支持Map类型的List数据(List<Map>),支持自定义多种效果 重点关注一下 Adapter 的 getView 方法,它提供获取显示数据的View,这个View可以直接创建或者从XML layout中创建 实战 实现一个最简单的列表 最终效果 核心代码 ListView 容器layout <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/listView" /> </LinearLayout> 文件名为: list_item1 在线性布局下定义一个 ListView , 设置id为 listView MainActivity 代码 private fun testListView1() { setContentView(R.layout.list_item1) val list = listOf("111", "222", "333", "444", "555") val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, list) val listView = findViewById<ListView>(R.id.listView) listView.adapter = adapter } 主要关注创建 ArrayAdapter 的代码,创建时需要的参数: ...

2025-07-25 ·  (🌟Updated: 2025-08-04) · 1 min · 115 words · tomyli