baidu120 - language
type: channel
link: http://blog.baidu120.cc/category/language/
description: language 笔记
items: mac 外置设备延时解决方案
items: 百度营销开发者文档字段提取为json
items: (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)'))
items: likeadmin项目（python版）从搭建到部署遇到的问题汇总
items: 如何提取init_boot.img防止手机变砖
items: Socket.io学习笔记
items: js 简单变量替换解密
items: vscode devsense.phptools-vscode crack
items: css ui
items: ps 插件

mac 外置设备延时解决方案
type: item
date: 2025-02-05T16:16:00+08:00
description: 找到蓝牙设备 忽略设备找到对应硬件设备 关闭再开启

百度营销开发者文档字段提取为json
type: item
date: 2024-08-29T11:36:00+08:00
description: function extractTableData() { const table = document.querySelector('table'); const rows = table.querySelectorAll('tbody tr'); const jsonData = []; const stack = []; const levelCounts = {}; // Track the count of items at each level rows.forEach(row => { const cells = row.querySelectorAll('td'); const level = parseInt(row.getAttribute('level') || 0, 10); // Update the count for this level if (!levelCounts[level]) { levelCounts[level] = 0; } levelCounts[level]++; // Retain "必填" initially and then clean up let fieldText = cells[0].textContent.trim(); let hasRequired = false; if (fieldText.includes('必填')) { fieldText = fieldText.replace('必填', '').trim(); // Remove "必填" and trim spaces hasRequired = true; } const rowData = { field: fieldText, type: cells[1].textContent.trim(), description: cells[2].textContent.trim() + ' ### ' + cells[3].textContent.trim(), hasRequired: hasRequired, children: [] }; // Determine where to place the current row data based on the level while (stack.length > 0 && stack[stack.length - 1].level >= level) { stack.pop(); } if (stack.length > 0) { stack[stack.length - 1].data.children.push(rowData); } else { jsonData.push(rowData); } // Push the current row data onto the stack stack.push({ data: rowData, level: level }); }); console.log(`Number of items at level 1: ${levelCounts[1] || 0}`); // Print number of items at level 1 return jsonData; } function generateKeyValuePairs(data, level = 0) { let result = ''; data.forEach((item, index) => { // Indent according to the level to maintain hierarchy const indent = ' '.repeat(level); // Add the field and its empty value result += `${indent}"${item.field}":`; // Format the comment based on whether "必填" is present const commentPrefix = item.hasRequired ? ' // !必填 ' : ' // '; const description = item.description; // If there are children, format as an object if (item.children.length > 0) { result += ` {\n`; // Add the formatted comment result += `${indent} ${commentPrefix}${description}\n`; // Recursively …

(Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)'))
type: item
date: 2024-08-22T09:47:00+08:00
description: import ssl print(ssl.get_default_verify_paths())如果不存在 /usr/local/openssl/ssl/cert.pemln /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem /usr/local/openssl/ssl/cert.pem

likeadmin项目（python版）从搭建到部署遇到的问题汇总
type: item
date: 2024-07-09T18:00:00+08:00
description: 一、我的环境python：3.11.3node：16.20.2mysql：8.0redis：5.0.7nginx：1.18二、克隆项目官方地址：https://gitee.com/likeadmin/likeadmin_python.git三、python后端项目配置1、数据库新建数据库，字符集：utf8mb4导入sql，sql路径sql/install.sql2、配置redis3、配置nginx这块部署的时候配置即可，需要局部或者全局配置文件大小和超时时长我在局部配置的，这块当时主要是影响了文件的上传，上传报错location / { proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect http:// https://; proxy_pass http://127.0.0.1:8000; client_max_body_size 500M; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_request_buffering off; proxy_send_timeout 300; proxy_read_timeout 300; proxy_connect_timeout 300; } CnCopy4、python项目配置安装依赖虚拟环境就不多说了server目录下 pip install -r requirements.txt安装依赖过程中暂时没有遇到报错将server包下的.example.env复制一份重命名为.env,修改内容1、mysql连接串 DATABASE_URL改为自己的用户名密码和数据库名称eg: DATABASE_URL=’mysql+pymysql://root:root@127.0.0.1:3306/likeadmin?charset=utf8mb4′2、Redis连接串REDIS_URL改为自己的Redis信息eg: REDIS_URL=’redis://:@127.0.0.1:6379/0′ (空密码空用户名)3、上传文件的目录 UPLOAD_DIRECTORY，根据自己需要修改4、DOMAIN 修改为http://127.0.0.1:8000配置文件修改server/like/config.py1、图片和视频限制根据上传文件大小配置，否则后续文件上传超限报的错误很难查找我遇到的情况，上传实际是超限和超时，但是前端报的错误并不是图片扩展也要检查一下，有的项目里将jpg写的是jpj，需要修正2、配置默认请求超时时间，可以适当调时间长点request_timeout = 3003、domain有的是https，有是的80端口，修改如下，如果是https的话，修改为httpdomain = ‘http://127.0.0.1:8000’ 配置server/like/plugins/storage/engine/aliyun.py如果你使用阿里云OSS的话，需要修改这块，写死的endpoint，改成config.get(“domain”)配置server/like/utils/urls.py转绝对路径这个方法有一个拼接错误的问题，当你使用阿里云或者七牛云的时候，文件上传成功后返回文件地址，后端还会调用一个url转绝对路径的方法，导致转换后的path错误，具体见server/like/plugins/storage/storage_driver.py问题点：上传阿里云或者七牛云之后，返回的资源url实际是可用url，但是这个方法处理之后就加了一个前缀，导致最终的path无法访问，具体情况大家可以对照一下数据库里面的配置对照一下逻辑即清楚解决方法：加个判断或者优化下判断逻辑即可解决我在上面判断了下url是http开头，直接return url了水平有限，大佬肯定有更好的优化方法了遇到的报错之一上传视频报错ploadAjaxError: fail to post https://xxx…

如何提取init_boot.img防止手机变砖
type: item
date: 2024-06-28T09:16:08+08:00
description: 第一步，通过adb进入临时root进入fastboot，电脑端adb输入fastboot boot my.imgmy.img可以是你用magisk修补过的rom包里的init_boot.img或者是kernelsu对应安卓内核版本的android13-x-boot.img第二步，找到目前手机系统init_boot.img的位置cd dev/block/by-name ls -l init_boot_a或者ls -l init_boot_b第三步，输出dd if=/dev/block/sdaxx of=/sdcard/init_boot_img第二步会得到sdaxx具体是什么在刷magisk或者kernelsu时手机变砖，可以用fastboot flash init_boot init_boot.img恢复原厂init_boot.img

Socket.io学习笔记
type: item
date: 2024-04-13T12:30:00+08:00
description: Socket.io是什么Socket.io是一个用于在浏览器和服务器之间进行实时，双向和基于事件的通信库。 Socket.io包装了websocket，在浏览器支持的情况下优先使用websocket进行连接，否则回退到HTTP长轮询的方式，解决了部分浏览器暂不支持websocket的问题。安装方法在node.js服务端使用时，通过npm安装 npm install socket.io在浏览器中使用时可通过两种方式第一种 // socket.io在服务端的程序会自动将客户端的文件在该路径下暴露出来， // 因此直接通过src标签引入即可 第二种 // 在服务端... // 如果不想通过服务端暴露的文件引用，则可以禁用该功能 const io = require('socket.io')({ // 不启用 serveClient: false }); // 在客户端 // 然后通过cdn等方式引入（减轻自己服务器的压力） 与Express一起使用 const app = require('express')(); const server = require('http').createServer(app); const options = { /* ... */ }; const io = require('socket.io')(server, options); io.on('connection', socket => { /* ... */ }); server.listen(3000);基本概念命名空间(namespace)命令空间是一个通信的通道，它便于分割应用的逻辑例如：将所有客户端分割成两个空间，一个是Default空间，一个是Admin空间。对于Default空间我们可以做一些通用的操作，而对于Admin空间，我们用于做一些专用的操作。 // 在服务端... // 建立admin命名空间 const adminNamespace = io.of('/admin'); // 对admin命名空间中的所有socket使用该中间件 adminNamespace.use((socket, next) => { // 例如做一些验证操作 // ensure the user has sufficient rights next(); }); // 监听admin命名空间中所有客户端的connection事件 adminNamespace.on('connection', socket => { ... }); // 在客户端... // 连接admin命名空间 const socket = io('/admin'); // 监听connection事件 socket.on('connection', socket => { ... });默认命名空间默认命名空间 /, 所有的客户端都会默认的连接到这个命名空间房间(room)在每个命名空间内，可以定义任意的通道，称为“ Room”，套接字可以加入和退出 // 在服务端... io.on('connection', socket => { // 客户端建立连接之后，将其加入房间 socket.join('some room'); // 使用同样的方式离开一个房间 socket.leave('some room') });默认房间每一个socket都有一个随机分配的标识符Socket#id，每一个socket都会自动加入以其ID标识的房间使用中间件 // 为默认命名空间注册一个中间件 io.use((socket, next) => { if (isValid(socket.request)) { next(); } else { next(new Error('invalid')); } }); // 为自定义的命名空间制定一个中间件 io.of('/admin').use(async (socket, next) => { const user = await fetchUser(socket.handshake.query); if (user.isAdmin) { socket.user = user; next(); } else { next(new Error('forbidden')); } }); ================================================ // 可以为一个命名空间注册多个中间件，他们会依次执行 io.use((socket, next) => { next(); }); io.use((socket, next) => { next(new Error('thou shall not pass'));…

js 简单变量替换解密
type: item
date: 2024-03-27T15:26:00+08:00
description: const fs = require('fs'); var _0x1033 = [ "", ]; var data = fs.readFileSync("./suning.com.js", "utf-8"); for (let index = 0; index < _0x1033.length; index++) { const v = _0x1033[index]; let regex = new RegExp(`_0x1033\\\[${index}\\]`, 'g'); console.log(regex) data=data.replace(regex, `"${v}"`); } fs.writeFileSync('./suning.com.decode.js', data)

vscode devsense.phptools-vscode crack
type: item
date: 2023-12-05T15:34:00+08:00
description: 1、搜索 promptText 找yield ybe(n)这个函数function eE() { return B(this, null, function* () { let t = yield me.window.showInputBox({ prompt: oe.promptText, placeHolder: oe.placeHolder, ignoreFocusOut: !0 }); if (t) { // 以下更改代码 let n = '{ "signature":"9A67311816caZfsGXE6TxeS4NyN2UkaQC"}'; yield ybe(n); // let r; // if (t.length > 32) try { // var e = JSON.parse(t); // e.signature && (r = t); // } catch (n) { // r = void 0; // } // r || (r = yield me.window.withProgress({ // location: me.ProgressLocation.Notification, // title: oe.phptools_activate_title // }, () => B(this, null, function* () { // // console.log(111111111111,$r(mbe), $r(hbe), new (JN())($r(R6)).encrypt(t, "base64").replace(/\+/g, "-").replace(/\//g, "|").replace(/=/g, "_"), () => eE()); // return yield O6($r(mbe), $r(hbe), new (JN())($r(R6)).encrypt(t, "base64").replace(/\+/g, "-").replace(/\//g, "|").replace(/=/g, "_"), () => eE()); // }))), r && (yield ybe(r)); } //else _u(); }); }2、搜索 ybe( 上面的函数名称function ybe(t) { // 以下更改代码 pu.globalState.update('Ahmed', t) return B(this, null, function* () { try { // pu.globalState.update(eI + $r(Zh) + "." + (0, qp.userInfo)().username, t) switch (JSON.parse(t),pu.globalState.update('Ahmed', t), si.appendLine(oe.licenseStored), (yield fu())[0]) { case 2: me.window.showInformationMessage(oe.activationSucceeded); break; case 1: me.window.showInformationMessage(oe.expired); break; case 3: default: me.window.showInformationMessage(oe.invalidLicenseKey); break; } } catch (e) { si.appendLine(oe.licenseError), me.window.showErrorMessage(oe.invalidLicenseKey), bi(e), _u(); } N6(); }); }3、搜索 .expirationfunction fu() { return B(this, null, function* () { // let t = yield Tbe(); // 以下主要代码 找到连续三个冒号取第二个冒号值，三个值分别代表（expired flag,valid flag,invalid flag） return [2, !0] // if (t) { // var e = Cm()((0, qp.userInfo)().username) + "#" + t.license + "#" + t.expiration, // r = new (JN())($r(R6)).verify(e, t.signature, "utf8", "base64"); // return r ? (yield Cbe(t)) ? [1, !0] : [2, !0] : [3, !0]…

css ui
type: item
date: 2023-09-23T14:21:50+08:00
description: css ui/** 初始化 **/ body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,input,button,textarea,p,blockquote,th,td,form,pre{margin: 0; padding: 0; -webkit-tap-highlight-color:rgba(0,0,0,0);} a:active,a:hover{outline:0} img{display: inline-block; border: none; vertical-align: middle;} li{list-style:none;} table{border-collapse: collapse; border-spacing: 0;} h1,h2,h3,h4{font-weight: 700;} h5,h6{font-weight: 500; font-size: 100%;} button,input,select,textarea{font-size: 100%; } input,button,textarea,select,optgroup,option{font-family: inherit; font-size: inherit; font-style: inherit; font-weight: inherit; outline: 0;} pre{white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;} /** 初始化全局标签 **/ body{line-height: 1.6; color: #333; color: rgba(0,0,0,.85); font: 14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif;} hr{height: 0; line-height: 0; margin: 10px 0; padding: 0; border: none!important; border-bottom: 1px solid #eee !important; clear: both; overflow: hidden; background: none;} a{color: #333; text-decoration:none;} a:hover{color: #777;} a cite{font-style: normal; *cursor:pointer;} /** 基础通用 **/ .border-box, .border-box *{box-sizing: border-box;} /* 消除第三方ui可能造成的冲突 */.box, .box *{box-sizing: content-box;} .clear{clear: both; *zoom: 1;} .clear:after{content:'\20'; clear:both; *zoom:1; display:block; height:0;} .clear-space{word-spacing: -5px;} .inline{position: relative; display: inline-block; *display:inline; *zoom:1; vertical-align: middle;} /* 三角形 */.edge{position: relative; display: inline-block; vertical-align: middle; width: 0; height: 0; border-width: 6px; border-style: dashed; border-color: transparent; overflow: hidden;} .edge-top{top: -4px; border-bottom-color: #999; border-bottom-style: solid;} .edge-right{border-left-color: #999; border-left-style: solid;} .edge-bottom{top: 2px; border-top-color: #999; border-top-style: solid;} .edge-left{border-right-color: #999; border-right-style: sol…

ps 插件
type: item
date: 2023-08-09T18:42:00+08:00
description: 目录WIN系统公共插件目录：C:\Program Files (x86)\Common Files\Adobe\CEP\extensions WIN系统私有插件目录：你的PS文件夹\Plug-ins\ MAC系统公共插件目录：资源库/Application Support/Adobe/CEP/extensionsremove.bg token4pBEz5EFthxUmrVTHxV4vNjW kPFsVb8ajqaeegnLRwHQg5wg pxvvF152FPs2G47reAjdSQFv dMvFs2L8PWTjcMjbDo6jiQDb ggY6xY9yGE2frQAGst7M7FtS KhJUHr65KhauFvkRrUvXEUYm Ue1rcGF6pG1Fbnuq83a8jX6U YJBUt3pTq9A1G22553Kpcm95 3Jh2rJSFNHk4Fg31zYAaYHnY cn5C3F8xb628aKKX2DEQJs5q FCcqMzi9w95p499DNifnyqtc k6niQBfpxXsD1EfyQ8AagPRx eSt8w3vwT41B1KSMcAZ88dbp FPRKfddyw6QtX2GAzQHfGXzY EQrFePowinNS5Q7TeDnRFLse LKvvZDGYwcakJkFR6HHkf2J7 8jSsx7iWVvwy4M49CMTYNwfX LiM4rfc1rr8FdWqikronMbdm W2Vz6osKSR4z2o7V7qVHFJzg 6oQcwGozeFyPS7NZPiRAKdw2 1psMbURiL3nCBrnsWMhHmkNJ