首页 文章 精选 留言 我的

精选列表

搜索[递归超智能],共10002篇文章
优秀的个人博客,低调大师

python链表冒泡排序、二叉树顺序递归遍历、顺序表的快排

一、python实现链表冒泡排序 - 冒泡排序的概念:冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直至没有反序的记录为止。因为按照该算法,每次比较会将当前未排序的记录序列中最小的关键字移至未排序的记录序列最前(或者将当前未排序的记录序列中最大的关键字移至未排序的记录序列最后),就像冒泡一样,故以此为名。 - 冒泡排序算法的算法描述如下: -- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 -- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 -- 针对所有的元素重复以上的步骤,除了最后一个。 -- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 1、基本的冒泡排序实现: li = [23, 43, 1, 2, 4, 5, 253] def bubble(li): if not len(li): return count = 0 for i in range(len(li)): for j in range(len(li) - 1): count+=1 if li[i] < li[j]: li[i], li[j] = li[j], li[i] print(count) return li ret_li = bubble(li) print(ret_li) 42 //循环的次数 [1, 2, 4, 5, 23, 43, 253] //排序结果 2、基本优化 这种方法利用了双重循环,会造成不必要的比较,所以优化一下,可以考虑从尾部开始,这样可以将以排好序的部分不再检查 def bubble(li): if not len(li): return count = 0 for i in range(len(li)): j = len(li) - 1 while j > i: count +=1 if li[j] < li[j - 1]: li[j], li[j - 1] = li[j - 1], li[j] j -= 1 print(count) return li ret_li = bubble(li) print(ret_li) 21//循环的次数 [1, 2, 4, 5, 23, 43, 253] //排序结果 3、进一步优化 通过设置flag来判断某次循环是否没有出现位置交换,没有交换就说明排序已完成 def bubble(li): if not len(li): return count = 0 for i in range(len(li)): flag = False j = len(li) - 1 while j > i: count += 1 if li[j] < li[j - 1]: li[j], li[j - 1] = li[j - 1], li[j] flag = True j -= 1 if not flag: print(count) return li return li ret_li = bubble(li) print(ret_li) 20 //循环次数 [1, 2, 4, 5, 23, 43, 253] //排序结果 二、二叉树的顺序遍历 二叉树是有限个元素的集合,该集合或者为空、或者有一个称为根节点(root)的元素及两个互不相交的、分别被称为左子树和右子树的二叉树组成。 -- 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。 -- 二叉树的第i层至多有2^{i-1}个结点 -- 深度为k的二叉树至多有2^k-1个结点; -- 对任何一棵二叉树T,如果其终端结点数为N0,度为2的结点数为N2,则N0=N2+1 二叉树有三种遍历方式:先序遍历,中序遍历,后续遍历 即:先中后指的是访问根节点的顺序 eg:先序 根左右 中序 左根右 后序 左右根 遍历总体思路:将树分成最小的子树,然后按照顺序输出 #实现树结构的类,树的节点有三个私有属性 左指针 右指针 自己的值 class Node(): def __init__(self,data =None,left=None,right = None): self._data = data self._left = left self._right = right #先序遍历 遍历过程 根左右 def pro_order(tree): if tree == None: return False print(tree._data) pro_order(tree._left) pro_order(tree._right) #后序遍历 遍历过程 左右根 def pos_order(tree): if tree == None: return False # print(tree.get_data()) pos_order(tree._left) pos_order(tree._right) print(tree._data) #中序遍历 遍历过程 左根右 def mid_order(tree): if tree == None: return False # print(tree.get_data()) mid_order(tree._left) print(tree._data) mid_order(tree._right) #层次遍历 def row_order(tree): # print(tree._data) queue = [] queue.append(tree) while True: if queue==[]: break print(queue[0]._data) first_tree = queue[0] if first_tree._left != None: queue.append(first_tree._left) if first_tree._right != None: queue.append(first_tree._right) queue.remove(first_tree) if __name__ == '__main__': tree = Node('A',Node('B',Node('D'),Node('E')),Node('C',Node('F'),Node('G'))) pro_order(tree) mid_order(tree) pos_order(tree) row_order(tree) 三、python实现顺序表的快排 1、快排的介绍: 快速排序采用的思想是分治思想,先简单的介绍一下分治的思想。分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可以得到原问题的解。下面这张图会说明分治算法是如何进行的:将cn分成了两个cn/2,转而分成了cn/4,cn/8......我们通过这样一层一层的求解规模小的子问题,将其合并之后就能求出原问题的解。 图解.jpg 2、快排的基本思路是: 在待排序的序列中选取一个值作为一个基准值,按照这个基准值得大小将这个序列划分成两个子序列,基准值会在这两个子序列的中间,一边是比基准小的,另一边就是比基准大的。这样快速排序第一次排完,我们选取的这个基准值就会出现在它该出现的位置上。这就是快速排序的单趟算法,也就是完成了一次快速排序。然后再对这两个子序列按照同样的方法进行排序,直到只剩下一个元素或者没有元素的时候就停止,这时候所有的元素都出现在了该出现的位置上。 附图:快排的图解 快排.jpg 3、快排的特点 快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。因此总的比较和交换次数就少了,速度自然就提高了。当然在最坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它的平均时间复杂度为O(NlogN)。其实快速排序是基于一种叫做“二分”的思想。 4、快排的代码实现 def quick_sort(li): if len(li) <= 1: return li base_value = li[len(li) // 2] left_part = [item for item in li if item < base_value] right_part = [item for item in li if item > base_value] eq_part = [item for item in li if item == base_value] return quick_sort(left_part) + eq_part + quick_sort(right_part) print(quick_sort(li = [23, 43, 1, 2, 4, 5, 253])) 简洁版的快排,两种代码其实是一样的 def quick_sort(li): if len(li) <= 1: return li return quick_sort([item for item in li[1:] if item < li[0]])+ li[0:1] + quick_sort([item for item in li[1:] if item > li[0]]) print(quick_sort(li = [23, 43, 1, 2, 4, 5, 253]))

优秀的个人博客,低调大师

RWKV Runner 详细 API 指南

大家好,今天我们带来 RWKV Runner API 的详细用法。 本文会列出 RWKV Runner 每一个 API 的作用、请求主体的参考结构、必需字段和可选字段等内容,帮助大家更轻松、更灵活地调用 RWKV Runner 的 API 。 如果你还不了解 RWKV Runner ,我们建议你从 RWKV 中文官网- RWKV Runner 简介开始阅读。 接下来,让我们先从一些 RWKV 模型的基础知识开始吧! RWKV 模型解码参数(预备知识) 你可能注意到了,很多 RWKV 部署/体验工具都支持调整 Temperature、Top_P、Presence penalty 和 Frequency Penalty 等 RWKV 模型解码参数。 这些主要解码参数对应的效果如下: 参数 效果 Temperature 采样温度,就像给模型喝酒,数值越大随机性越强,更具创造力,数值越小则越保守稳定。 Top_P 就像给模型喂镇静剂,优先考虑前 n% 概率质量的结果。如设置成 0.1 则考虑前 10% , 生成内容质量更高但更保守。如设置成 1 ,则考虑所有质量结果,内容质量降低但更多样。 Presence penalty 存在惩罚,根据“新 token 在至今的文本中是否出现过”来对其进行惩罚。值越大,模型涉及新话题的可能性越高。 Frequency Penalty 频率惩罚,根据“新 token 在至今的文本中出现的频率/次数”来进行惩罚。值越大,模型重复相同短语/句子的可能性越低。 max_tokens 模型生成文本时的最大 token 数。如果你在对外提供服务,建议限制单个请求的 max_tokens,太高可能导致极端情况下单个响应消耗大量的服务器资源。 续写小说和对话这一类需要创造性的任务,需要高 Temperature + 低 Top_P 的参数组合,可以尝试以下四种参数搭配: Temperature 1.2 ,Top_P 0.5 Temperature 1.4 ,Top_P 0.4 Temperature 1.4 ,Top_P 0.3 Temperature 2 ,Top_P 0.2 举个例子,续写小说可以尝试将 Temperature 设为 2 ( Temperature 增加会提高文采,但逻辑会下降),然后将 Top_P 设为 0.1 ~ 0.2 (Top_P 越低,逻辑能力越强),这样生成的小说内容逻辑和文采都很好。 完成相对机械的任务,例如材料问答、文章摘要等,则可将参数设为: Temperature 1 ,Top_P 0.2 Temperature 1 ,Top_P 0.1 Temperature 1 ,Top_P 0 举个例子,如果你正在执行像关键词提取之类的机械任务,不需要模型进行任何开放性思考,则可以将 Temperature 设为 1 ,Top_P、Presence penalty、Frequency Penalty 都设为 0 。 现在,你应该对 RWKV 模型最主要的四个解码参数有所了解了,现在我们开始了解 RWKV Runner 的所有 API 具体用法! Completions (续写) API RWKV Runner 的续写 API 分为聊天续写和基础续写两种,其中聊天续写 API 拥有“role - 角色”参数,因此支持角色扮演等进阶任务。 /chat/completions v1/chat/completions 和 /chat/completions 是相同的 API,用于 RWKV 的聊天续写模式,也就是和模型对话。 必需参数 "messages": 消息对象列表,包含两个元素: * "content": 提供给模型的 prompt ,即对话内容 * "role": 扮演的角色名称,可以从"user", "assistant" 和 "system"选一个。 因此,聊天 API 的基础请求主体如下: { "messages": [ { "content": "hello", "role": "user" } ] } 注意,上面是一个最简单的聊天续写请求,如果你希望控制模型的创作风格、回答的最大字数等细节,请按需添加以下参数: 可选参数 下面列出了聊天续写 API 的所有可选参数: 参数名称 类型 参数解释 max_tokens integer 生成文本的最大token数,最大 102400,对外部署时建议限制文本长度。 temperature number 解码参数之一,具体效果参考前文,范围[0, 3] top_p number 解码参数之一,具体效果参考前文,范围 [0, 1] presence_penalty number 解码参数之一,具体效果参考前文,范围 [-2, 2] frequency_penalty number 解码参数之一,具体效果参考前文,范围 [-2, 2] penalty_decay number 频率的衰减参数,范围 [0.99, 0.999],不建议修改 top_k integer 模型生成内容的候选词数量,范围 [0, 25] 不建议修改 global_penalty boolean 是否应用全局惩罚,不建议修改 state string 指定使用的 RWKV state 文件路径 model string | null 指定使用的 RWKV 模型路径 stream boolean 是否以流模式生成文本。 stop string | array | null 指定生成文本时的停止词。 user_name string | null 聊天模式的用户名,不建议修改 assistant_name string | null 聊天模式的助手名,不建议修改 system_name string | null 聊天模式的系统名,不建议修改 /completions /completions和 v1/completions是相同的续写 API,对应的是 RWKV Runner 的基础续写模式,也就是让模型接着你的 prompt 继续生成内容。 必需参数 "prompt": 你提供给模型的续写 prompt 。 因此,聊天 API 的基础请求主体如下: { "prompt": "那一天,人们又想起来被暴雨支配的恐惧..." } 可选参数 下面列出了续写 API 的所有可选参数: 参数名称 类型 参数解释 max_tokens integer 生成文本的最大token数,最大 102400,对外部署时建议限制文本长度。 temperature number 解码参数之一,具体效果参考前文,范围[0, 3] top_p number 解码参数之一,具体效果参考前文,范围 [0, 1] presence_penalty number 解码参数之一,具体效果参考前文,范围 [-2, 2] frequency_penalty number 解码参数之一,具体效果参考前文,范围 [-2, 2] penalty_decay number 频率的衰减参数,范围 [0.99, 0.999],不建议修改 top_k integer 模型生成内容的候选词数量,范围 [0, 25] 不建议修改 global_penalty boolean 是否应用全局惩罚,不建议修改 state string 指定使用的 RWKV state 文件路径 model string | null 指定使用的 RWKV 模型路径 stream boolean 是否以流模式生成文本。 stop string | array | null 指定生成文本时的停止词。 RWKV Runner 默认使用 \n\nUser 作为停止词,如果你希望修改默认的模型停止词,则可以指定 stop 字段(一个字符串或者是一个字符串列表)。可参考以下停止词: ["\n\nUser", "\n\nQuestion", "\n\nQ", "\n\nHuman", "\n\nBob", "\n\nAssistant", "\n\nAnswer", "\n\nA", "\n\nBot", "\n\nAlice"] Embeddings API RWKV Runner 的 Embeddings API 还停留在 RWKV-4,未针对 RWKV5/6 架构更新,因此不建议使用。 Configs(配置类) API /switch-model 这个 API 用于切换并重新部署 RWKV 模型。 必需字段 "model":用于切换 RWKV 模型,填 RWKV 模型文件的路径 "strategy":模型部署的方法,如"cuda fp16" 。 可选字段 参数名称 类型 参数解释 model string | null 指定使用的 RWKV 模型路径 strategy string 驱动 RWKV 模型的方法 tokenizer string | nulls 指定使用的 RWKV 分词器路径,不建议修改 customCuda boolean 是否启用自定义 cuda 算子,如果是比较新的 Nvidia 显卡,建议改成 true deploy boolean 是否启用部署模式,启用部署模式会屏蔽掉会屏蔽掉/switch-model、 /exit和其他有风险的 API /update-config /update-config API 用于用于更新模型默认配置,或者说缺省参数,包括解码参数、是否挂载 state 文件等。 当调用续写 API ( /chat/completions 或者 /completions) 且没有传递参数时,将使用 /update-config 设置的默认参数。 可选字段 参数名称 类型 参数解释 max_tokens integer 生成文本的最大token数,最大 102400,对外部署时建议限制文本长度。 temperature number 解码参数之一,具体效果参考前文,范围[0, 3] top_p number 解码参数之一,具体效果参考前文,范围 [0, 1] presence_penalty number 解码参数之一,具体效果参考前文,范围 [-2, 2] frequency_penalty number 解码参数之一,具体效果参考前文,范围 [-2, 2] penalty_decay number 频率的衰减参数,范围 [0.99, 0.999],不建议修改 top_k integer 模型生成内容的候选词数量,范围 [0, 25] 不建议修改 global_penalty boolean 是否应用全局惩罚,不建议修改 state string 指定使用的 RWKV state 文件路径 参考的请求主体: { "frequency_penalty": 1, "global_penalty": false, "max_tokens": 1000, "penalty_decay": 0.996, "presence_penalty": 0, "state": "models/", "temperature": 1, "top_p": 0.3 } /status 这个 API 用于获取 RWKV Runner 及运行设备的状态,比如运行状态、进程 ID 、GPU 型号。 参考的 **响应结构: ** { "status": 3, # 模型工作的状态码 "pid": 34776, # 模型的进程ID(Process ID) "device_name": "NVIDIA GeForce RTX 3080 Laptop GPU" #模型工作的 GPU 型号 } RWKV Runner 状态码:0 是模型离线,2 是模型正在载入,3 是模型正常工作中 MIDI 相关 API RWKV Runner 的 MIDI API 用于处理 midi 乐谱文件(.mid),比如文本转 MIDI 、MIDI 转 WAV 音频文件等。 /text-to-midi 这个 API 用于将 MIDI 格式的文本(text)转换为 MIDI 乐谱文件(.mid)。 必需字段 "text": 提供给模型的 MIDI 乐谱文本,即 MIDI 乐谱内容。 参考的请求主体: { "text": "p:24:a p:2a:a p:31:a p:39:a p:3b:a p:45:a b:26:a g:3e:a g:3e:a g:42:a g:42:a g:45:a g:45:a pi:3e:a pi:42:a pi:45:a t14 p:24:0 p:2a:0 p:31:0 p:39:0 p:3b:0 p:45:0 t2 p:2a:a p:3b:a p:45:a t14 p:2a:0 p:3b:0 p:45:0 b:26:0 g:3e:0" } /midi-to-text 这个 API 用于将 MIDI 乐谱文件(.mid) 转换为 MIDI 格式的文本(text)。 必需字段 file_data:提供给模型的 MIDI 乐谱文件,也可以是 string($binary) - 字符串格式的二进制数据。 参考的响应结构: { "text": " p:24:a p:2a:a " } /txt-to-midi 这个 API 用于将 MIDI 内容的文本文件(.txt)转换为 MIDI 乐谱文件(.mid)。 必需字段 "midi/sample.mid": 转化完毕的 MIDI 文件保存路径 "midi/sample.txt":需要转化的 TXT 文件路径 参考的请求主体: { "midi_path": "midi/sample.mid", "txt_path": "midi/sample.txt" } /midi-to-wav 这个 API 用于将 MIDI 乐谱文件(.mid) 转换为 WAV 音频文件(.wav)。 这个 API 与 RWKV 模型无关,且需要先安装 fluidsynth 。 必需字段 "midi_path": 需要转换的 MIDI 文件路径 "wav_path": WAV 文件保存路径 可选字段 "sound_font_path":影响 MIDI 音色和合成参数的 SoundFont 文件路径 参考的请求主体 { "midi_path": "midi/sample.mid", "sound_font_path": "assets/default_sound_font.sf2", "wav_path": "midi/sample.wav" } /text-to-wav 这个 API 用于将 MIDI 乐谱文本(text)转换为 WAV 音频文件(.wav)。 必需字段 "text": 提供给模型的 MIDI 乐谱文本,即 MIDI 乐谱内容。 "wav_name": 转化后返回的 WAV 文件名称 可选字段 sound_font_path:影响 MIDI 音色和合成参数的 SoundFont 文件路径 参考的请求主体 { "sound_font_path":"assets/default_sound_font.sf2", "text":"p:24:a p:2a:a p:31:a", "wav_name":"sample" } 文件处理 API 文件处理 API 目前只有 /file-to-text,用于解析 PDF 和 txt 文件。 API 查询参数 file_name(必需参数):指定需要解析的文件名称,如 ?file_name=233.PDF 。这里必须正确填写你上传的文件类型后缀(.txt 或者 .pdf),因为 PDF 文件需要特殊处理。 file_encoding:指定解析的文件编码,如 &file_encoding=utf-8 必需字段 file_data:类型 *string($binary),上传一个 txt 或者 PDF 的二进制数据 MISC API 这部分 API 主要用于兼容 OpenAI API ,以便开发者能将 RWKV 模型用在 ChatGPT 客户端中。 State Cache 相关 API State 缓存相关 API 没有请求主体,下面是几个 State API 的作用: /disable-state-cache:禁用 state 缓存 /enable-state-cache:启用 state 缓存 /reset-state-cache:重置 state 设置 有关 State 文件是什么,以及它的详细用法,请参考RWKV State 介绍文章。 常见疑问 问题 1:我要去哪里查看 RWKV Runner 的 API 文档? 本地启动 RWKV Runner 并启动一个模型,你将可以在 http://localhost:8000/docs 中查看 RWKV Runner 的 API 文档。 问题 2: deploy 模式下,哪些 API 会因“危险权限”而被屏蔽? 在部署模式下,一切会影响服务器系统和硬件的 API 都会被屏蔽掉,这是为了安全起见。 比如:/switch-model 、 /exit 以及 State Cache 相关的 API 都会被屏蔽。 问题 3:为什么我本地部署 RWKV Runner 默认开启了 deploy 模式? 在 RWKV Runner 中,如果你勾选了 “启用 WebUI“ ,那么默认开启了 deploy 模式。 你可以通过关闭此选项,来解除部署模式,进而使用一些危险权限的 API 。 问题 4 :为什么 RWKV Runner 的 embaddings API 用不了? 截至目前(2023-07-05,RWKV Runner V 1.8.4) 不建议使用 RWKV Runner 文档中提供的 embaddings API 。 文档中的 embaddings API 目前停留在 RWKV-4,未针对 RWKV5/6 架构进行重构,因此会报错。 更多 RWKV Runner 及 API 使用问题,欢迎加入 QQ 群交流: RWKV Runner 交流群:818930736 RWKV 模型交流群:224287095

优秀的个人博客,低调大师

GitHub 宕机 2 个小时

根据外媒的报道,GitHub 今天经历了长达两个多小时的宕机,影响了数以千计甚至数百万依赖其众多服务的开发者。报道称,GitHub 在美国东部时间下午 3:45 左右开始出现问题,包括 Git 操作、API 请求、GitHub Actions、GitHub Packages、GitHub Pages 和拉取请求等服务都受到影响。 当时 GitHub status 页面写道:“我们正在积极调查影响 GitHub 服务的错误,并将尽快提供更新。” 宕机期间,GitHub Status 的官方推特帐号在持续更新 GitHub 的最新状态。从时间线来看,最早出现性能下降的服务是 GitHub Actions,随后扩散到 issue、PR 合并和拉取,以及 GitHub Packages 等服务。直到两个多小时之后才定位到问题,并进行修复。 GitHub 现在为超过 7300 万开发者提供服务,并托管了 1 亿多个仓库,这些仓库的开发者和维护者依靠 GitHub 提供的服务进行版本控制以及其他项目管理操作,因此任何故障都会影响到大量组织。去年 GitHub 曾因为服务出现错误导致宕机两个多小时,这次宕机的原因尚未公布,目前已完全恢复。

优秀的个人博客,低调大师

Chrome OS便捷安装指南

Chrome OS是一款Google开发的基于PC的操作系统。 Google Chrome OS是一款基于Linux的开源操作系统。Google在自己的官方博客表示,初期,这一操作系统将定位于上网本、紧凑型以及低成本电脑。这款开源软件将被命名为Chrome OS,谷歌公司于2010年12月7日(北京时间12月8日2点30分)在美国举行Chrome相关产品发布会,发布会上正式发布[Chrome Web store](https://baike.baidu.com/item/Chrome Web store)和Chrome OS。 百度百科-GOOGLE CHROME OS 最近在操作系统领域的一则新闻引起了大家的注意,在 IDC 的数据统计中我们看到了谷歌的Chrome OS操作系统的市场份额超越了MacOS升至第二,仅次于微软的Windows。第一眼看到这个统计非常令人意外,平时都不怎么听说过的Chrome OS的增长势头居然如此的凶猛。不过一想原因其实也能理解,在国内由于某些原因,对于Google的产品大家本身接触的机会就不多,更别说会使用Chromebook笔记本了。 随手一搜就能看到很多关于Chrome OS的新闻: Chrome OS市场份额超越MacOS 出于好奇,我决定体验一下这个听起来很厉害的Chrome OS。下面是整个安装体验过程: 安装步骤 制作U盘启动器 安装Chrome OS 制作U盘启动器(适用于Windows环境下) 由于谷歌方面并没有开放Chrome OS镜像文件的下载,不过类似于Chrome浏览器,Chrome OS也拥有自己的开源版本系统Chromium OS,所以第三方可以基于Chromium OS来开发出类似于Chrome OS的系统。所以在本文中我将安装基于Chromium OS的CloudReady系统(一个基于Chromium OS开发出来的操作系统,国内也有类似的操作系统如:fyde OS)来体验Chrome OS的魅力。 1.进入CloudReady官网页面 进入CloudReady官网页面,鼠标下拉到如下位置: 选择版本 CloudReady提供了三种版本的系统供用户选择,这里我们选择第三种面向个人和家庭的免费版本。点击“GET THE FREE VERSION”按钮,进入系统镜像的下载页面。 2.下载U盘启动器制作工具 在制作U盘启动器之前需要准备一个容量大于8GB的U盘,CloudReady官方也提供了制作U盘启动器的工具,不过目前此工具只针对Windows用户,如果是Mac用户可以使用后面我提供的方法来制作系统启动盘。 进入下载页面,页面下拉到如下位置: 下载u盘启动器制作工具 点击“DOWNLOAD USB MAKER”将工具下载至本地,并安装。 3.制作USB启动盘 将准备的U盘插入电脑中,随后打开刚刚安装的启动盘制作工具,按如下步骤进行操作: 制作U盘启动器 操作至此,在windows下,我们的CloudReady U盘启动器已制作完成。 制作U盘启动器(适用于MacOS、ChromeOS环境下) 我们看到了在Windws下制作CloudReady的U盘启动器非常的方便快捷,不过如果我们的操作系统是Mac OS或者Chrome OS的时候,U盘启动器的制作过程会略微复杂一点。 1.下载镜像 进入下载页面之后,鼠标下拉到如下位置: 镜像下载 点击图中的“DOWNLOAD 64-BIT IMAGE”按钮将镜像下载至本地。 2.安装并启动Chromebook Recovery Utility 下载Chromebook Recovery Utility 扩展并将其添加到您的Chrome浏览器中(如果没有安装Chrome浏览器,则需要先安装chrome浏览器)。 添加扩展 随后在Add "Chrome Recovery Utility"的提示下,点击“Add app”: add app 此时Chrome Recovery Utility应用已被添加至系统的应用程序列表中,打开Chrome Recovery Utility: 打开Chrome Recovery Utility 如果找不到该页面,可以手动在浏览器地址栏中输入chrome://apps来访问。 打开Chrome Recovery Utility后,点击应用窗口右上角的设置图标,并点击“Use Local Image”,随后选择刚刚下载的镜像文件: use local image 点击“Get started”按钮,进入下一步,此时插入我们准备好的U盘,并进行如下操作: 插入u盘 选中我们插入的U盘,继续点击下一步。 此时出现启动盘制作进度条,等待完成,至此U盘启动器制作完成: 制作完成 安装CloudReady 将制作完成的U盘启动器插入计算机,随后重启我们的计算机并进入BIOS系统(关于如何进入BIOS读者可以自行百度,不同品牌的计算机进入方式不同),在BIOS的Boot选项中修改计算机的启动顺序(将从U盘启动放在第一位),然后退出BIOS重启计算机,稍等片刻CloudReady将在计算机中启动。 如果是Mac用户,在计算机重启的过程中一直按住“option”键,进入启动项选择界面,选择我们插入的U盘作为启动项启动。 至此,类Chrome OS系统CloudReady就已经成功启动,等待片刻,剩下的步骤就是体验或者安装到本机。 启动中... 注意事项:由于在国内访问Google相关站点时会受到一定的限制,所以需要提前准备一些工具手段来连接到Google的服务。 参考: https://www.lifewire.com/install-chrome-os-on-pc-4174289 https://guide.neverware.com/build-installer/working-mac-os/#download-cloudready 🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟 欢迎访问笔者博客:https://www.techflower.cn 关注笔者公众号,推送各类原创/优质技术文章 ⬇️ 😂🤣🤨🤩🥴😘🥸我也是一名低调的Up主:https://space.bilibili.com/330000719

优秀的个人博客,低调大师

实用Mac软件分享(二)

上一次推荐了一些软件,发给一些朋友后,大家试用了一下说有些还是不错的。后来又有朋友陆陆续续推荐了一些其他软件,并且我发现自己还有一些软件也没全写上,所以再做个续篇吧。 DasyDisk:Mac上非常强大的硬盘文件大小分析软件。全盘分析所有文件夹的大小,并用饼图和列表的方式显示。界面华丽,功能实用。在目前SSD价格昂贵,普遍都是128G和256G小盘的情况下,在查找大文件清理硬盘时,极其有用。 Xslimmer:应用程序减肥的工具,很多软件都带有PPC二进制程序和多语言包,这些东西占用了巨大的空间。Xslimmer可以将这些空间都释放掉。 Geekbench:Mac系统跑分软件。可以看到排行榜哦!跑分控可用。 Alfred:超强快速启动软件,在知乎和许多著名blog上都被强力推荐。在支持workflow插件模式后,大量插件如雨后春笋般冒出,远远超越了系统自带的SpotLight和著名的QuickSilver。 BlueStacks:跨平台Android模拟器,神器!在电脑上模拟器Android系统噢!支持windows和mac噢!速度不错,可以直接在电脑上体验产品,非常方便。而且还可以用作开发,支持调试呢。貌似国内用的开发者不多啊,咋回事捏。(PS:BlueStacks在国内和数字公司合作搞什么产品试用呢,你们还是去官网找正版下载吧) 鼠须管:我在Windows和Android上用的都是Google输入法,在iOS上用的是自带输入法,但是Mac上曾经没有什么好的输入法,Google曾经开发过,可惜失败了,直到我找到了这个鼠须管输入法。这是一个“非著名”开源跨平台输入法的Mac版。该输入法代码托管在GitHub,下载地址在Google Code。支持三个平台,Mac版叫鼠须管,Linux版叫中州韵,Windows版叫小狼毫。名字起的都很有文艺,作者一定是个有趣的家伙。这个输入法项目,更新是很活跃的哦。 至于国内那些著名大厂出的输入法,还是算了吧,你可以相信他们的技术,但是你绝不能相信他们的节操。21世纪个人电脑什么最重要,安全!安全!还是TMD安全!国内开发公司(除非是内网开发的),因为安装输入法杀毒软件聊天软件造成的信息泄密也不是一点半点了。 Vox:非常好的音频播放器。界面简洁,支持多种格式(支持APE哦!),而且还是免费的。Mac自带的iTunes非常笨重,格式支持也不多。 本文转自 老G 51CTO博客,原文链接:http://blog.51cto.com/goldlion/1348806,如需转载请自行联系原作者

优秀的个人博客,低调大师

某商虚拟化方案

◆ 现状 通过初步沟通,了解到如下情况: 1、服务器数量多: 目前是每个门店一台服务器,承担本地的业务和数据存储;总部为多台服务器,每个 erp 模块使用一台服务器。目前有六个模块,加上数据库等服务器,数量预估在 10 台左右(需要大致确认一下)。如果加上门店的服务器,数量可能会更多一些。 2、可用性低: (1)门店服务器及总部服务器都存在单点,任何一个设施故障,都可能导致业务停止。 (2)服务器放总部办公室,稳定性(网络、电力保障等)比较低,后期扩容也不灵活。 3、管理成本高: 基础设施分布到不通的区域,人力和时间成本不可忽视。 ◆ 基本目标 ◎ 简化结构:去掉各个门店的中间层服务器,让门店终端直接连接到总部的服务器。先前因为担心网络中断而导致本地业务终止,可以通过多接入线路解决掉(联通电信加无线4G)。网络接入的成本,由于取消服务器而降低维护成本和设备成本、能源耗费,基本可以抵消掉,甚至更低一些。 ◎ 提高保障能力:建议把总部服务器托管到专业的 idc 机房,电力、网络、服务保障都是办公室场景无法比拟的。托管到电信运营商的idc机房可能会比自己拉专线成本高一些(具体成本请咨询当地运营商),但因此带来的稳定性,为核心业务的连续性提供强有力的保障,实际上是很值得的。 ◎ 服务器私有云化:私有云,是指企业自己使用的云,它所有的服务不是供别人使用,而是供自己内部人员或分支机构使用。私有云的部署比较适合于有众多分支机构的大型企业或政府部门。随着这些大型企业数据中心的集中化,私有云将会成为他们部署IT系统的主流模式。使用私有云,能解决的问题包括但不限于: (1)提高整个系统的可用性:通过良好的设计,部分磁盘损坏、甚至是部分物理服务器损坏,都不会影响业务的正常运行。 (2)提高资源利用率:通过管理平台,合理分布计算资源,也可以在运行过程中,根据负载状况,灵活调整计算资源。以前需要很多物理服务器来运行不同的业务单元,各服务器负载可能很低,资源被白白的浪费掉了。云端化以后,不仅仅提高资源利用率,还能降低服务器的数量。 (3)极大的降低管理成本:整个平台有统一的管理接口,主机、虚拟机、存储等,全部通过管理界面完成。部署应用相对于物理主机,效率要高得多(预先创建好模版,以此模版创建虚拟机,分分钟就把应用部署完毕)。 ◆ 具体措施 ◎ 重点部分:虚拟化。由四台计算节点服务器,一台共享存储及一台备份服务器构成。共享存储也nfs方式为计算节点提供服务,即iso镜像、虚拟机模版、快照等存储于共享存储。云端平台,运行在四个节点服务器,所有的应用资源,按负载情况合理分布与这四个计算节点。项目初期,至少创建18个虚拟主机(6个模块、每个物理机指定6个模块,3个物理服务器都创建,留一个物理服务器作为故障接管)。下图为模块分布结构: 门店请求通过负载均衡转发到三个物理服务器的任意一个实例(模块),负载能力提高了三倍,可用性也提高了三倍。假设某个时刻,坏掉了一个物理服务器,负载均衡自动把它从转发队列里边踢掉,再把请求转发到正常的模块上,保证业务不中断。 ◎ 接入及托管 1、门店接入:多运营商线路加多接入路由,为了更进一步的保障网络可用,可购买4G无线网络设备备用。撤销所有专线,降低成本。 2、寻找本地有实力,性价比高、服务质量好的idc机房,代替办公网络。 ◆ 所需工具 ◎ 负载均衡:可以是硬件,为节省成本,建议用低配服务器,部署开源负载均衡软件。 ◎ 云管理平台:开源的proxmox足以满足业务需求。 ◎ 监控:流量监控、主机资源监控、服务监控等,开源工具可以解决。 ◆ 改造前后结构对比 现有的结构 私有云结构 ◆ 项目实施成本 成本包括两部分:配件采购和技术实施及后期维护。 ◎ 需要采购的设备如下 名称 规格 数量 参考价 备注 硬盘 10000转企业级,2.5寸,1.2T 4 1500元/块 4个服务器都用4块硬盘,现有的硬盘拔下来,插在另外一个服务器上,做数据备份使用 内存 16G 4 1500元/条 4个服务器都扩展到,备份服务器不需要扩充 参看价格有京东所查,具体采购价格,需自行协商,我方不负责供货或者代买。 ◎ 技术实施费用:包括技术实施加3个月维护支持,差旅费(车费及住宿费)实报实销。实施费总计****元,不含税。 ◎ 实施以公司为主体(北京****有限责任公司),开具发票,需要被实施方承担税费。 ◆ 验收标准 1、底层宿主安装正确:网络联通、相互可以互访; 2、集群状态可见且正常; 3、管理平台可管理主机、存储资源、上传windows镜像; 4、可创建虚拟机,且虚拟机可按要求分布在指定宿主主机; 5、虚拟机安装好erp以后,正常且能对外提供服务(erp由甲方自行安装,我方协助); 6、门店服务器的数据库可跟云端数据库进行同步(甲方负责完成,我方协助)。 ◆ 方案补充 门店保留服务器,云端一对一创建门店实例。正常情况下,门店充当业务服务,一旦系统故障,自动切换到云端服务实例。实现的方法:总部负载均衡设置vip,转发到后端(包括门店服务器及云端实例),配置上云端实例指定为 backup。

优秀的个人博客,低调大师

Univer Clipsheet:一款功能全面还简单的 Chrome 开源爬虫插件

​Clipsheet是一款完全开源的Chrome爬虫插件, 通过易用的交互界面以所见即所得的方式, 快速的从页面中采集到你想要的表格,且可以通过简单配置将采集工作自动化。 [Github]:https://github.com/dream-num/univer-clipsheet [官方网站]:Univer | ClipSheet [Chrome商店]:Chrome插件商店-Clipsheet 如何安装 Clipsheet ? ​可以直接访问上面的 Chrome商店链接安装,如果无法访问外网,可以通过该下载链接Docs,下载插件的压缩包安装。 ​[插件压缩包安装教程]:Univer clipsheet 下载链接 快速开始 安装插件成功后,以亚马逊的列表页作为展示, 可以看到Clipsheet插件已经在该网页中自动检测到 4 个表格,此时插件内快速采集的按钮也是高亮的, 直接点击按钮就可以通过插件采集到我们的第一个表格 高级功能教程: 仅通过所见即所得的方式从网页中采集表格可能是不够的,Clipsheet插件还提供各种高级功能以便我们将采集这一过程自动化,我们这里列出了插件高级功能的教程,如果使用上还有任何问题,欢迎及时联系我们反馈 采集器讲解-执行操作 操作步骤: 1、先打开要采集的网站,并点击右上角的小插件 2、通过滚动页面,可以获取更多元素哦,查看右上角的×行元素知道大概的采集行数 ​ 3、根据不同网页加载数据的方式在采集器内设置对应的操作 数据量较大时建议将间隔时间设置的稍微长一些 4、想要采集标题对应的内容时可以设置下钻,选择想要的内容区域 5、可以通过查看预览页自定义调整列 6、运行采集器时会打开一个新的页面,可以通过该页面确定采集的进度 7、采集完成后通过侧边栏 - 数据查看文档并导出​编辑​编辑 工作流讲解:定时采集&定时更新采集 操作步骤: 1、新增工作流,会展示选择数据源选项 选择数据源时,会往对应的表格内新增数据 未选择数据源时,会自动采集生成一个文档 2、在数据合并页面绑定要运行的采集器(教程见采集器讲解) ,自定义调整列后点击下一步 可以绑定多个采集器,数据会统一汇总的到表格内 3、默认去重(比较所有的列),如不需要去重可以点击反选取消 4、在数据筛选页面可以设置过滤规则,采集想要的关键词数据等 5、上面都设置完成后,我们就可以设置定时并保存运行啦 到时间点后会自动采集数据,在侧边栏的数据内可查看数据并导出 看完想要开发开发自己的爬虫插件?我教你! 开发插件的内容较多,单独开了新的文章去更新这部分内容,请通过以下文章阅读~ https://my.oschina.net/u/6977969/blog/17119015 联系我们 Clipsheet插件使用中有任何问题或者优化建议,欢迎通过github来提交issue上报问题,或通过以下方式来联系我们 [微信用户群] 下滑到文档最下方扫码进入https://xakbyahbro.feishu.cn/docx/YU2BdTIqYo4rtIxZxLOctWvxnCh [Discord]https://discord.gg/rbZcJPm4un

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册