log4e

log4e Log4e是一个免费的Eclipse Plugin,它可帮助你在你的Java工程中快速加入Log; 我们可以在http://log4e.jayefem.de/index.php/Download 网站上下载Log4e最新版本。下载后将相应文件夹拷贝到Eclipse的插件目录下,重新Eclipse,在首选项中会多出一个Log4e选项。 go to http://log4e.jayefem.de/ Eclipse Update URL: http://log4e.jayefem.de/update

2011-08-29 · 1 min · 12 words · -

RxJava

RxJava Reactive Extension (RX) RX在Future和Promise的基础上更进了一步,将单一的事件处理扩展到多个先后相关的事件流处理。举个例子,鼠标拖拽事件,是由一个MouseDown事件加多个MouseMove事件以及一个MouseUp事件构成,Promise处理这种情况需要处理器具有状态记住拖拽的阶段。RX将MouseDown和MouseUp这些事件的处理标准化,并且将拖拽阶段的这一共享状态从业务处理器中抽离,而固化到事件处理流程中。RX抽象了大量的事件操作,使得我们可以将重心放到事件流程建模中,而不是具体的一个接一个事件的处理。共享状态从处理器中抽离也有利于业务处理器的重用以及并发处理。 综上,响应式编程中的事件驱动,要求 对事件建模 对事件流程建模 对事件相关性建模 在那个RxJava刚刚火爆的年代,那是一个荒蛮的年代。我们在异步方面资源匮乏,手头仅有ThreadPool,AsyncTask和Handler这些基础封装的异步库。所以当我们看见RxJava这个新奇的小玩意,当我们看到异步还可以这么简单,轻而易举的解决Concurrency问题。我们当然如获至宝。 而我们现在选择就更多了,无论是Java 8本身提供的CompletableFuture。还是后起之秀Kotlin上的Coroutine,还有Android 上官方提供的LiveData 作者:W_BinaryTree 链接:https://juejin.cn/post/6844903838978146317 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 RxJava 在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM” (一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库) ReactiveX是Reactive Extensions的缩写,一般简写为Rx,最初是LINQ的一个扩展,由微软的架构师Erik Meijer领导的团队开发,在2012年11月开源,Rx是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流,Rx库支持.NET、JavaScript和C++,Rx近几年越来越流行了,现在已经支持几乎全部的流行编程语言了,Rx的大部分语言库由ReactiveX这个组织负责维护,比较流行的有RxJava/RxJS/Rx.NET,社区网站是 reactivex.io。 Netflix参考微软的Reactive Extensions创建了Java的实现RxJava,主要是为了简化服务器端的并发。2013年二月份,Ben Christensen 和 Jafar Husain发在Netflix技术博客的一篇文章第一次向世界展示了RxJava。 RxJava也在Android开发中得到广泛的应用。 ReactiveX An API for asynchronous programming with observable streams. A combination of the best ideas from the Observer pattern, the Iterator pattern, and functional programming. ...

2011-08-29 · 1 min · 80 words · -

命令模式, Command pattern

命令模式, Command pattern 命令模式, Command pattern , 行动(Action)模式或者交易(Transaction)模式 定义 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或者交易(Transaction)模式。 命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 命令模式的结构 命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分隔开,委派给不同的对象。 每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方接收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收、以及操作是否被执行、何时被执行、怎么被执行的。 命令允许请求的一方和接收请求的一方能够独立演化,从而具有如下的优点: 命令模式使新的命令很容易被加入到系统里。 允许接受请求的一方决定是否要否决请求。 能较容易的设计一个命令队列。 可以容易的实现对请求的撤销和恢复。 在需要的情况下,可以较容易的将命令记入日志。 下面是一个示意性的系统,说明命令模式的结构: 示意性命令模式结构 命令模式涉及到五个角色,他们分别是: 客户端角色(Client):创建一个具体命令ConcreteCommand对象并确定其接收者。 命令角色(Command): 声明一个给所有具体命令类的抽象接口。 具体命令角色(ConcreteCommand):定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的相应操作。execute()方法通常叫做执行方法。 请求者角色(Invoker):负责调用命令对象执行请求,相关的方法叫做行动方法。 接收者角色(Receiver):负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。 命令模式的优点 更松散的耦合 命令模式是的发起命令的对象——客户端,和具体实现命令的对象——接收者对象完全解耦,也就是说发起命令的对象完全不知道具体实现对象是谁,也不知道如何实现。 更动态的控制 命令模式把请求封装起来,可以动态的对它进行参数化、队列化和日志化等操作,从而使得系统更灵活。 很自然的复合命令 命令模式中的命令对象能够很容易的组合成复合命令,也就是宏命令,从而是系统操作更简单,功能更强大。 更好的拓展性 由于发起命令的对象和具体的实现完全解耦,因此拓展新的命令就很容易,只需要实现新的命令对象,然后在装配的时候,把具体的实现对象设置到命令对象中,然后就可以使用这个命令对象,已有的实现完全不用变化。 作者:步积 链接:https://www.jianshu.com/p/5901e76a6348 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/command.html

2011-08-29 · 1 min · 43 words · -

函数式编程, Functional Programming

函数式编程, Functional Programming 函数式编程已经存在了很长了时间,早在50年代 Lisp 编程语言的介绍中就有提过。如果你有关注近两年里内热门的 Clojure,Scala,Erlang,Haskell,Elixir 等语言的话,其中都有函数式编程的概念。 函数式编程的简要历史 正如我们所说的,早在50年代函数式编程开始之前,Lisp 语言就已经在 IBM 700/7000 系列的科学计算机上运行了。Lisp 引入了很多与我们现在的函数式编程有关的示例与功能,我们甚至可以称 Lisp 是所有函数式编程语言的鼻祖。 这也是函数式编程中最有趣的方面,所有函数式编程语言都是基于相同的 λ演算,这种简单数学基础。 λ演算是图灵完备的,它是一种通用的计算模型,可用于模拟任何一台单带图灵机。它名字中的希腊字母 lambda (λ),被使用在了 lambda 表达式和 lambda 项绑定函数中的变量中。 λ演算是一个极其简单但又十分强大的概念。它的核心主要有两个概念: 函数的抽象,通过引入变量来归纳得出表达式; 函数的应用,通过给变量赋值来对已得出的表达式进行计算; 什么是函数式编程 什么是函数式编程?它是一种编程范式,即一切都是数学函数。函数式编程语言里也可以有对象,但通常这些对象都是恒定不变的 —— 要么是函数参数,要什么是函数返回值。函数式编程语言里没有 for/next 循环,因为这些逻辑意味着有状态的改变。相替代的是,这种循环逻辑在函数式编程语言里是通过递归、把函数当成参数传递的方式实现的。 函数式编程单看上面的理论无疑是无法理解的,所以,需要通过它的一些特点来感受什么是函数式编程 函数是"第一等公民" 所谓"第一等公民" (first class),指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。 举例来说,下面代码中的print变量就是一个函数,可以作为另一个函数的参数。 只用"表达式",不用"语句" “表达式” (expression)是一个单纯的运算过程,总是有返回值;“语句” (statement)是执行某种操作,没有返回值。函数式编程要求,只使用表达式,不使用语句。也就是说,每一步都是单纯的运算,而且都有返回值。 原因是函数式编程的开发动机,一开始就是为了处理运算 (computation),不考虑系统的读写 (I/O)。“语句"属于对系统的读写操作,所以就被排斥在外。 当然,实际应用中,不做I/O是不可能的。因此,编程过程中,函数式编程只要求把I/O限制到最小,不要有不必要的读写行为,保持计算过程的单纯性。 没有"副作用” 所谓"副作用" (side effect),指的是函数内部与外部互动 (最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。 函数式编程强调没有"副作用",意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值. 不修改状态 上一点已经提到,函数式编程只是返回新的值,不修改系统变量。因此,不修改变量,也是它的一个重要特点。 在其他类型的语言中,变量往往用来保存"状态" (state)。不修改变量,意味着状态不能保存在变量中。函数式编程使用参数保存状态,最好的例子就是递归。 引用透明 引用透明 (Referential transparency),指的是函数的运行不依赖于外部变量或"状态",只依赖于输入的参数,任何时候只要参数相同,引用函数所得到的返回值总是相同的。 OO (object oriented,面向对象)是抽象数据,FP (functional programming,函数式编程)是抽象行为。 在java中,函数式编程是通过lambda表达式实现的。 lambada表达式 基本表达形式如下: ...

2011-08-28 · 1 min · 110 words · -

javadoc

javadoc eclipse 在项目列表中按右键,选择Export (导出) ,然后在Export(导出)对话框中选择java下的javadoc. Java8下 忽略Javadoc编译错误 org.apache.maven.plugins maven-javadoc-plugin 2.10.3 attach-javadocs jar -Xdoclint:none http://www.javajia.com/JAVAbiancheng/7713.html

2011-08-28 · 1 min · 14 words · -

buddyinfo, slabinfo, zoneinfo

buddyinfo, slabinfo, zoneinfo /proc/buddyinfo是linuxbuddy系统管理物理内存的debug信息。 在linux中使用buddy算法解决物理内存的外碎片问题,其把所有空闲的内存,以2的幂次方的形式,分成11个块链表,分别对应为1、2、4、8、16、32、64、128、256、512、1024个页块。 而Linux支持NUMA技术,对于NUMA设备,NUMA系统的结点通常是由一组CPU和本地内存组成,每一个节点都有相应的本地内存,因此buddyinfo 中的Node0表示节点ID;而每一个节点下的内存设备,又可以划分为多个内存区域(zone),因此下面的显示中,对于Node0的内存,又划分类DMA、Normal、HighMem区域。而后面则是表示空闲的区域。 此处以Normal区域进行分析,第二列值为100,表示当前系统中normal区域,可用的连续两页的内存大小为1002PAGE_SIZE;第三列值为52,表示当前系统中normal区域,可用的连续四页的内存大小为522^2PAGE_SIZE cat /proc/buddyinfo Node 0, zone DMA 23 15 4 5 2 3 3 2 3 1 0 Node 0, zone Normal 149 100 52 33 23 5 32 8 12 2 59 Node 0, zone HighMem 11 21 23 49 29 15 8 16 12 2 142 文件/proc/slabinfo统计slab分配器相关信息 % cat /proc/slabinfo https://zhuanlan.zhihu.com/p/358891862 slab 分配器 在Linux中,伙伴分配器(buddy allocator)是以页为单位管理和分配内存。 但在内核中的需求却以字节为单位(在内核中面临频繁的结构体内存分配问题)。 假如我们需要动态申请一个内核结构体(占 20 字节), 若仍然分配一页内存,这将严重浪费内存。那么该如何分配呢? slab 分配器专为小内存分配而生, 由 Sun 公司的一个雇员 Jeff Bonwick 在 Solaris 2.4中 设计并实现。slab 分配器分配内存以字节为单位, 基于伙伴分配器的大内存进一步细分成小内存分配。换句话说,slab 分配器仍然从 Buddy 分配器中申请内存,之后自己对申请来的内存细分管理。 ...

2011-08-28 · 1 min · 113 words · -

迭代器模式, Iterator

迭代器模式, Iterator 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。把游走的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各得其所。 @startuml abstract class Aggregate Aggregate : public abstract Iterator createIterator() class ConcreteAggregate ConcreteAggregate : Object[] objArray ConcreteAggregate : public ConcreteAggregate(Object[] objArray) ConcreteAggregate : public Iterator createIterator() ConcreteAggregate : public Object getElement(int index) ConcreteAggregate : public int size() Aggregate<|--ConcreteAggregate interface Iterator Iterator : public void first() Iterator : public void next() Iterator : public boolean isDone() Iterator : public Object currentItem() class ConcreteIterator ConcreteIterator : private ConcreteAggregate agg ConcreteIterator : private int index ConcreteIterator : private int size ConcreteIterator : public ConcreteIterator(ConcreteAggregate agg) ConcreteIterator : public void first() ConcreteIterator : public void next() ConcreteIterator : public boolean isDone() ConcreteIterator : public Object currentItem() Iterator<|--ConcreteIterator ConcreteAggregate .right.> ConcreteIterator ConcreteIterator-left->ConcreteAggregate class Client Client .left.> Aggregate Client .right.> Iterator @enduml 迭代器模式涉及到以下几个角色: ...

2011-08-27 · 2 min · 425 words · -

mplayer

mplayer 基本播放控制 → 前进10秒 ← 后退10秒 ↑ 前进60秒 ↓ 后退60秒 PageUP 前进10分钟 PageDown 后退10分钟 Enter 全屏 Space 暂停 Esc 退出 q 退出 音量调节 9 降低音量 0 增大音量 / 降低音量 * 增大音量 a 切换声道 mplayer command monitoraspect mplayer -monitoraspect 1.25 6.rmvb 全屏 mplayer -aspect 16:9 -fs debian 6 smplayer 声音小 Options > preferences > audio > output driver select “alsa” http://www.wiloon.com/?p=2850 smplayer 中文字幕 option > preference > subtitles > encoding select utf8 ...

2011-08-27 · 1 min · 84 words · -

Yasm

Yasm Yasm是一个完全重写的NASM汇编。目前,它支持x86和AMD64指令集,接受NASM和气体汇编语法,产出二进制, ELF32 , ELF64 , COFF , Mach - O的 ( 32和64 ) , RDOFF2 ,的Win32和Win64对象的格式,并生成STABS 调试信息的来源,DWARF 2 ,CodeView 8格式。

2011-08-27 · 1 min · 21 words · -

OpenVSCode Server

OpenVSCode Server podman run -d --name openvscode -p 1025:3000 -v "openvscode-data:/home/workspace:cached" gitpod/openvscode-server

2011-08-27 · 1 min · 12 words · -

Hash, MAC, HMAC

Hash, MAC, HMAC HMAC Hash-MD5, SHA-1, integrity MAC- keyed hash, integrity & authenticity. HMAC 长度和其所用的hash长度一样 Hash 是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。 如果两个散列值是不相同的 (根据同一函数),那么这两个散列值的原始输入也是不相同的。 这个特性是散列函数具有确定性的结果,具有这种性质的散列函数称为单向散列函数。 但另一方面,散列函数的输入和输出不是唯一对应關係的,如果两个散列值相同,两个输入值很可能是相同的。 但也可能不同,這種情況稱為「碰撞」,這通常是兩個不同長度的散列值,刻意計算出相同的輸出值。 Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入 (又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。 简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系 了解了hash基本定义,就不能不提到一些著名的hash算法,MD5 和 SHA1 可以说是目前应用最广泛的Hash算法。 MD5(RFC1321) 是 Rivest 于 1991 年对 MD4 的改进版本,将任意长的明文 hash 成 128 bit 的杂凑值。 MD5是一种不可逆的加密算法,目前是最牢靠的加密算法之一,尚没有能够逆运算的程序被开发出来,它对应任何字符串都可以加密成一段唯一的固定长度的代码。 那么它有什么用呢?很简单,通过它可以判断原始值是否正确 (是否被更改过)。一般用于密码的加密。而我们所提供的MD5校验码就是针对安装程序的唯一对应的一段代码。你可以使用任何MD5运算器对下载的文件进行运算,运算出来的结果如果完全符合我们提供的MD5校验码,那么说明你下载的这个程序没有被中途修改过。 这个特征码有如下特性,首先它不可逆,例如我有一段秘密的文字如:“My Secret Words”,经算法变换后得到MD5码(b9944e9367d2e40dd1f0c4040d4daaf7),把这个码告诉其他人,他们根据这个MD5码是没有系统的方法可以知道你原来的文字是什么的。 其次,这个码具有高度的离散性,也就是说,原信息的一点点变化就会导致MD5的巨大变化,例如"ABC" MD5(902fbdd2b1df0c4f70b4a5d23525e932)和"ABC " (多了一空格)MD5(12c774468f981a9487c30773d8093561)差别非常大,而且之间没有任何关系,也就是说产生的MD5码是不可预测的。 最后由于这个码有128位那么长,所以任意信息之间具有相同MD5码的可能性非常之低,通常被认为是不可能的。 所以一般认为MD5码可以唯一地代表原信息的特征,通常用于密码的加密存储,数字签名,文件完整性验证等。 SHA1 是由 NIST NSA 设计为同 DSA 一起使用的,sha 是 Secure Hash algorithm 的缩写;它对长度小于 2^64 的输入,产生长度为 160bit 的散列值; SHA-1 设计时基于和 MD4 相同原理,并且模仿了该算法。 ...

2011-08-25 · 1 min · 211 words · -

Math

Math http://blog.csdn.net/jiutianhe/article/details/41349649 Section 1 linear 线性代数 (矩阵为主) Vector 向量 Matrix 矩阵 Matrix Decomposition 矩阵分解 Section 2 analysis 数学分析 (函数为主) Function 函数 Polynomial 多项式函数 Interpolation 插值 Integration 积分 Solver 求解 Section 3 Probabilityand Statistics 概率和统计 1) distribution 分布 2) fraction and complex 分数和复数 3) random and statistics 随机生成和统计初步 1) cluster and regression聚类和回归

2011-08-24 · 1 min · 51 words · -

modprobe, `lsmod`

modprobe, lsmod modprobe 可载入指定的个别模块,或是载入一组相依的模块。modprobe 会根据 depmod 所产生的相依关系,决定要载入哪些模块。 若在载入过程中发生错误,在 modprobe 会卸载整组的模块 https://blog.csdn.net/future_fighter/article/details/3862795 lsmod 功能: 列出内核已载入模块的状态 用法: lsmod 描述: lsmod 列出 /proc/modules 的内容。 输出为: Module(模块名) Size(模块大小) Used by(被…使用) # 查看某一个模块是否已经被加载 lsmod|grep wireguard 手动加载卸载 控制内核模块载入/移除的命令是 kmod 软件包提供的 # 手动加载内核模块 sudo modprobe wireguard # 手动卸载内核模块 modprobe -r wireguard # 或者 rmmod wireguard load kernel module at boot vim /etc/modules-load.d/wireguard.conf # load wireguard module at boot wireguard command systool -v -m module_name modprobe --show-depends modinfo 查看内核模块的信息,包括开发人员信息,依赖信息 modinfo module_name https://wiki.archlinux.org/index.php/Kernel_modules_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87

2011-08-20 · 1 min · 74 words · -

grep command

grep command grep: Global Regular Expression Print 按行处理, 输出文件中包含搜索字符串的所有行。 grep [OPTION...] PATTERNS [FILE...] 或 grep -E '123|abc' filename // 找出文件(filename)中包含 123 或者包含 abc 的行 egrep '123|abc' filename // 用 egrep 同样可以实现 判断指定文件中是否包含指定的字符串 # 文件中包含字符串,命令正常退出 $? = 0, 不包含 $? = 1 grep "prod" /path/to/file/web.xml > /dev/null if [ $? -eq 0 ]; then echo "Found!" else echo "Not found!" fi grep xxx -A5 grep xxx -B1 grep -C 5 foo file 显示 file 文件里匹配 foo 字串那行以及上下 5 行 #regex grep ".*A.*" foo.txt grep "foo\|bar" foo.txt # 统计某个字符串出现的次数 grep -o objStr filename|wc -l # 搜索子目录, recursively grep -r 'linux' * 参数 -i, –ignore-case: 忽略大小写 -A, –after-context=NUM print NUM lines of trailing context -B <显示行数> -before-context=<显示行数> #除了显示符合样式的那一行之外,并显示该行之前的内容。 -C 显示 file 文件里匹配 foo 字串那行以及上下5行 -r, -recursive, 搜索子目录 -l, -files-with-matches, 查询多文件时只输出包含匹配字符的文件名, 不打印匹配的文件内容。 -G, -basic-regexp BRE 模式,也是默认的模式 -E, -extended-regexp ERE 模式 -h, 查询多文件时不显示文件名。 -a, –text: 强制作为文本文件处理, 报错: Binary file [some_file] matches 的时候可以用。 -w pattern files : 只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical') -q, –quiet, –silent, 不显示任何东西到 stdout -P, –perl-regexp 使用 PCREs -n, –line-number 打印行号 grep 正则 https://blog.csdn.net/yufenghyc/article/details/51078107 ...

2011-08-20 · 7 min · 1447 words · -

dmesg

dmesg # 显示时间戳 dmesg -T Display messages in kernel ring buffer Linux命令dmesg用来显示开机信息,kernel会将开机信息存储在 ring buffer 中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/var/log目录中,名称为dmesg的文件里。 dmesg[1] - print or control the kernel ring buffer dmesg用于检测和控制内核环缓冲。程序用来帮助用户了解系统的启动信息 dmesg |grep scsi -A 3 https://www.jianshu.com/p/4a029091b705

2011-08-20 · 1 min · 31 words · -

Provider 模式

Provider 模式 首先什么是Provider模式?Provider是由两个设计模式融合而来的: 策略模式+抽象工厂模式。这两个模式具体的介绍我在这里就不多说了,网上一搜一大把。provider 模式的作用是为一个API进行定义和实现的分离。这样就通过核心功能的灵活性和易于修改的特点使得API具有灵活性。通俗一点来说就是实现了定义和实现的分离,最终效果就是不需要更改代码即可实现程序不同逻辑的改变。 在 BlogEngine中,provider 模式被应用于提供不同的数据的持久化。为了保证解压后就能使用默认采用的是 xmlProvider。本文研究的重点就是了解这个 Provider模式,并知道 BlogEngine如何通过provider 模式使得不同数据持久化方式之间的灵活切换。 https://www.cnblogs.com/qianlifeng/archive/2010/12/07/1899343.html

2011-08-20 · 1 min · 13 words · -

Debian

Debian Debian 10 “buster”

2011-08-20 · 1 min · 4 words · -

yaml

yaml http://www.ruanyifeng.com/blog/2016/07/yaml.html YAML 语言 (发音 /ˈjæməl/ ) 的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。 它的基本语法规则如下。 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格。 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 # 表示注释,从这个字符一直到行尾,都会被解析器忽略。 YAML 支持的数据结构有三种。 对象: 键值对的集合,又称为映射 (mapping) / 哈希 (hashes) / 字典 (dictionary) 数组: 一组按次序排列的值,又称为序列 (sequence) / 列表 (list) 纯量 (scalars) : 单个的、不可再分的值

2011-08-19 · 1 min · 36 words · -

gitea

gitea Gitea是一款使用Golang编写的可自运营的代码管理工具。 在这个领域,名气最响的应该是Gitlab。但实际使用中Gitlab也有点问题,首先就是资源占用。Gitlab是使用ruby编写的,好几年之前刚出来的时候,一台1G内存的虚拟主机连安装运行都做不到,着实震惊。时至今日都已经发展到了以docker镜像分发,gitlab仍旧会有体积和运行时资源占用的问题。另一点就是功能,对于一般标准团队来说,gitlab的功能太过于丰富,这是往好的地方说,往坏的地方说就是它包含了太多不需要的东西,而这些东西还占用磁盘和运行时资源。 于是着手查看开源的alternative方案,很快就找到了golang研发的gitea。使用golang研发的软件分发都很容易,体积小,安装使用简单,运行时占用资源少。且gitea的功能很完备,某些自身不具备的功能也能通过第三方来解决,比如CI就可以结合同样是golang研发的drone来实施。 https://xenojoshua.com/2019/12/gitea-note/

2011-08-19 · 1 min · 5 words · -

emacs 启动 窗口最大化

emacs 启动 窗口最大化 (defun fullscreen (&optional f) (interactive) (x-send-client-message nil 0 nil “_NET_WM_STATE” 32 ‘(2 “_NET_WM_STATE_MAXIMIZED_VERT” 0)) (x-send-client-message nil 0 nil “_NET_WM_STATE” 32 ‘(2 “_NET_WM_STATE_MAXIMIZED_HORZ” 0))) (add-hook ‘window-setup-hook ‘fullscreen)

2011-08-18 · 1 min · 29 words · -