我这记性,忘记了你是谁,默默说一声,生日快乐
页头是
jq: error (at
jq: error (at
jq: error (at
在通知时出现:
HTTPError: Response code 401 (Unauthorized)
at onResponse (/ql/data/scripts/node_modules/.pnpm/got@11.5.1/node_modules/got/dist/source/as-promise/index.js:142:28)
解决方法:
1.打开青龙目录下的config目录 修改 task_before.sh文件,把task_before.sh里面的东西清空。
2.更新https://github.com/ccwav/QLScript2的ql.js文件到deps目录
水电话费等余额14145元
定活期,股票基金,油卡,债权等正收入,减去信用卡账单,现金类剩余223389元
因为水电等是储值性质,故统计入总资产,14145+223389=237534元
农田及亲戚来往收入共6172元。日常支出44310元,车辆支出2558,共46868元,因只统计收入情况,故两项支出不入统计。
2024年度个人净值实际部分(减去农田收入)237534-6172=231362元
2021年个人部分95276元,2022年个人计133324元,2023年个人计199596元,2024年计231362元
2021年增长39754,2022年较2021年增长38048元,2023年较2022年增长66272元,2024年较2023年增长31766元
今年共支出46868元,这年收入竟然有8万?还是不对啊。2-2024年资金统计.xlsx-2025-01-01
年假
N年前,那天晚上,没有网络,没有地图,大概是晚上11点到的武汉,没人接,也不知道具体地方,愣是找到了她,那是个什么地方,水果湖?那是什么村?那个村距离马路也很远,我是如何找到的?
一切都像梦一样
如今,早已经物不是人已非,但我,还是想去那个城市转转,看一看那记忆中熟悉的街道,路边卖菜的小铺,卖小吃的摊,下雨时有水的街道,拐了很多弯的城中村,你租的房间,铁锈的一楼门,需要有人在屋内开门的锁,楼下的烧公鸡店,走了不知道多远的网吧,差点被偷了钱财的座位,还有那个趁我通宵翻我口袋的那个老女人,一首好久不见,一首十年,一首下辈子如果我还记得你,电台情歌
美团验的几块钱,试镜挺清楚,网上配镜。
星期二,晴
这个自行车应该是在2012年左右买的,查了一下,2011年
一直没补过胎,更没换过。
快13年了,难得
前胎没气了,外胎龟裂严重,推到师傅那里,前内胎是被磨坏的。索性全换了。
前后内外胎,140元
7.15日,星期一,雨
昨天下了一天大雨,整个城市都是水
乡下的灶台始终短一些
想全部换了吧,妈不同意,也确实,除非把厨房全部翻新重建,不然真没必要。但水池这一块也应该补上。
石头灶排除了,1.5m太短。
自己砌个砖头灶其实也不错,但考虑到时间成本和手艺问题,放弃了。
不锈钢就成了首选。听说二手的便宜,7月12日那天去了柳林桥一些收卖二手的店里看看,现在这种店也挺有意思,收的二手的修一修就卖,也有新的,但也不便宜多少,算下来就410块了,还要拼凑,液化气都没地方放。也有的店打着二手的旗号实际在卖新的,更离谱的是进货标签都还在,也是拼接的。这东西有1.2米有1.6米的,没1.5的。订做也找不到。
如果老父亲身体好,我想他大概会找个电焊铺自己焊一个,要不了多少钱。或者他就可以自己砌一个出来。
最终只能在网上看了,锁定了淘宝一家店,下了一个1.45米的。
成品大概是这种
宽度加到60cm,左侧的橱柜一些格子打不开了。加宽是要把自己城里的旧的水槽装上去,店家说那尺寸只能是60,50的开不了孔。
定制灶420块。四个角阀220块。前两天买的液化气灶230块。共870块,过两天还要请人改一下自来水供水。
然后城里的买了一个台中盆,旧的改造不了。799块钱啊,我感觉值个299的样子。不管开孔,为了开孔我在鲁班到家、万师傅、奇兵到家小程序上下单,也在淘宝上找人下单,有要1500的,有要450的,官方报价128但没人接。最终在奇兵到家找到一个师傅可以在当天下午来干活,平台收费210块,他收190,水平很一般。了解到在万师傅上,管理严,对手艺要求高,无奈加到280块也没有找到当天能上门的。
在线下也问了两家,一家是当初给我装橱柜的老板,一家是打过两次交道的老板,都表示干活的师傅这一两天没空。
210块,水槽799块,1099元
为了弄这两个,2000块钱包不住。
厨房的东西可真多,为了清空厨房,摆满了整个屋子。
最终花了3个小时,基本上就是半天时间了,不杂地,手艺真不杂地。
首先建立反代网站,应该有不少教程,我是在cf的work里弄的
cf workers自建域名等自己摸索
主要是将将 worker.js 的内容替换为下面内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 |
'use strict' const hub_host = 'registry-1.docker.io' const auth_url = 'https://auth.docker.io' const workers_url = 'https://你的域名' //const home_page_url = '远程html链接' /** @type {RequestInit} */ const PREFLIGHT_INIT = { status: 204, headers: new Headers({ 'access-control-allow-origin': '*', 'access-control-allow-methods': 'GET,POST,PUT,PATCH,TRACE,DELETE,HEAD,OPTIONS', 'access-control-max-age': '1728000', }), } /** * @param {any} body * @param {number} status * @param {Object<string, string>} headers */ function makeRes(body, status = 200, headers = {}) { headers['access-control-allow-origin'] = '*' return new Response(body, {status, headers}) } /** * @param {string} urlStr */ function newUrl(urlStr) { try { return new URL(urlStr) } catch (err) { return null } } addEventListener('fetch', e => { const ret = fetchHandler(e) .catch(err => makeRes('cfworker error:\n' + err.stack, 502)) e.respondWith(ret) }) /** * @param {FetchEvent} e */ async function fetchHandler(e) { const getReqHeader = (key) => e.request.headers.get(key); let url = new URL(e.request.url); if (url.pathname === '/') { // Fetch and return the home page HTML content //return fetch(home_page_url); return new Response(indexHtml, { headers: { 'Content-Type': 'text/html' } }); } if (url.pathname === '/token') { let token_parameter = { headers: { 'Host': 'auth.docker.io', 'User-Agent': getReqHeader("User-Agent"), 'Accept': getReqHeader("Accept"), 'Accept-Language': getReqHeader("Accept-Language"), 'Accept-Encoding': getReqHeader("Accept-Encoding"), 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0' } }; let token_url = auth_url + url.pathname + url.search return fetch(new Request(token_url, e.request), token_parameter) } url.hostname = hub_host; let parameter = { headers: { 'Host': hub_host, 'User-Agent': getReqHeader("User-Agent"), 'Accept': getReqHeader("Accept"), 'Accept-Language': getReqHeader("Accept-Language"), 'Accept-Encoding': getReqHeader("Accept-Encoding"), 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0' }, cacheTtl: 3600 }; if (e.request.headers.has("Authorization")) { parameter.headers.Authorization = getReqHeader("Authorization"); } let original_response = await fetch(new Request(url, e.request), parameter) let original_response_clone = original_response.clone(); let original_text = original_response_clone.body; let response_headers = original_response.headers; let new_response_headers = new Headers(response_headers); let status = original_response.status; if (new_response_headers.get("Www-Authenticate")) { let auth = new_response_headers.get("Www-Authenticate"); let re = new RegExp(auth_url, 'g'); new_response_headers.set("Www-Authenticate", response_headers.get("Www-Authenticate").replace(re, workers_url)); } if (new_response_headers.get("Location")) { return httpHandler(e.request, new_response_headers.get("Location")) } let response = new Response(original_text, { status, headers: new_response_headers }) return response; } /** * @param {Request} req * @param {string} pathname */ function httpHandler(req, pathname) { const reqHdrRaw = req.headers // preflight if (req.method === 'OPTIONS' && reqHdrRaw.has('access-control-request-headers') ) { return new Response(null, PREFLIGHT_INIT) } let rawLen = '' const reqHdrNew = new Headers(reqHdrRaw) const refer = reqHdrNew.get('referer') let urlStr = pathname const urlObj = newUrl(urlStr) /** @type {RequestInit} */ const reqInit = { method: req.method, headers: reqHdrNew, redirect: 'follow', body: req.body } return proxy(urlObj, reqInit, rawLen, 0) } /** * * @param {URL} urlObj * @param {RequestInit} reqInit */ async function proxy(urlObj, reqInit, rawLen) { const res = await fetch(urlObj.href, reqInit) const resHdrOld = res.headers const resHdrNew = new Headers(resHdrOld) // verify if (rawLen) { const newLen = resHdrOld.get('content-length') || '' const badLen = (rawLen !== newLen) if (badLen) { return makeRes(res.body, 400, { '--error': `bad len: ${newLen}, except: ${rawLen}`, 'access-control-expose-headers': '--error', }) } } const status = res.status resHdrNew.set('access-control-expose-headers', '*') resHdrNew.set('access-control-allow-origin', '*') resHdrNew.set('Cache-Control', 'max-age=1500') resHdrNew.delete('content-security-policy') resHdrNew.delete('content-security-policy-report-only') resHdrNew.delete('clear-site-data') return new Response(res.body, { status, headers: resHdrNew }) } const indexHtml = ` <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Dockerhub镜像加速说明</title> <style> body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; line-height: 1.6; color: #333; margin: 0; padding: 20px; background-image: url('https://cdn.jsdelivr.net/gh/fireinrain/picx-images-hosting@master/20240608/wp8114669-docker-wallpapers.5h6dvj56isg0.webp'); /* Replace with your image path */ background-size: cover; background-position: center; background-repeat: no-repeat; background-attachment: fixed; } .container { max-width: 800px; margin: 0 auto; padding: 20px; background: rgba(255, 255, 255, 0.8); border-radius: 8px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } h1 { font-size: 2em; margin-bottom: 0.5em; color: #007aff; } p { margin-bottom: 1em; } pre { background: #2d2d2d; color: #f8f8f2; padding: 20px; border-radius: 8px; overflow-x: auto; position: relative; } pre::before { content: " "; display: block; position: absolute; top: 10px; left: 10px; width: 12px; height: 12px; background: #ff5f56; border-radius: 50%; box-shadow: 20px 0 0 #ffbd2e, 40px 0 0 #27c93f; } code { font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 0.875em; } .copy-button { position: absolute; top: 10px; right: 10px; background: #007aff; color: white; border: none; padding: 5px 10px; border-radius: 5px; cursor: pointer; opacity: 0; transition: opacity 0.3s; } pre:hover .copy-button { opacity: 1; } </style> </head> <body> <div class="container"> <center><h1>镜像加速说明</h1></center> <h3>为了加速镜像拉取,你可以使用以下命令设置 registry mirror:</h3> <pre><code> sudo tee /etc/docker/daemon.json <<EOF { "registry-mirrors": ["https://你的域名"] } EOF</code><button class="copy-button" onclick="copyCode(this)">复制代码</button></pre> <h3>用法:</h3> <p>原拉取镜像命令</p> <pre><code> docker pull library/alpine:latest</code><button class="copy-button" onclick="copyCode(this)">复制代码</button></pre> <h3>加速拉取镜像命令</h3> <pre><code> docker pull 你的域名/library/alpine:latest</code><button class="copy-button" onclick="copyCode(this)">复制代码</button></pre> </div> <script> function copyCode(button) { const code = button.previousSibling; const textArea = document.createElement('textarea'); textArea.value = code.textContent; document.body.appendChild(textArea); textArea.select(); document.execCommand('copy'); document.body.removeChild(textArea); button.textContent = '已复制'; setTimeout(() => { button.textContent = '复制代码'; }, 2000); } </script> </body> </html> ` |
然后进入群晖的container Manager–注册表,设置,https://index.docker.io/ 启用注册表镜像URL这里填入反代网站地址,勾选“信任的SSL自我签署证书”
千万不要对层次太低的人太好。认知水平越低,动物本性就越强,越不知道好歹。你表现出来的善良,他觉得你好欺负,就会总想占你的便宜。他们根本不明白善良背后的可贵之处。他只会不自觉地把你当成弱者看待。欺负你的心理就像欺负一只蚂蚁一样。所以俗话说小人畏威而不畏德。
客厅卫生间洗手盆出水慢,偶然发现角阀是这个所谓的jingpin角阀,买个纯铜的伟星角阀,用扳手拧旧角阀就断里面,断丝取丝器也不好用,最后在万师傅app下单,要价68。取丝并不顺利,半途让我去买快接管准备切管换,我没同意,知道那种活接不可靠,时间久了这种主水管肯定要出问题,那位置也不方便引上水管到水龙头。最后他总算搞定了,躺下的是沙发垫,天热了这沙发垫也正要洗。
这旧角阀是铝合金,垃圾的很。
看到这情况,想着另一个冷水管也要换,不知道哪天也会坏,从他那买个纯铜的角阀要20块钱,倒是不贵,也挺重,用吸铁石也吸不动,师傅说是纯铜,我让他用刀刮一下,没刮动。担心这个也会断里面,他说如果断里面了加价50,幸好,没断,不过如上图所见,也快了。
这些垃圾角阀忘记当初是怎么买的,是自己0元购还是水电师傅带来的?真该死啊,这破玩意。