nj4xx server

nj4xx server http://192.168.60.2:7789/nj4x/ts?wsdl MySQL/heidisql redis tap0/nat config kvm rdt nexus tomcat+jenkins idea – nj4xx browse jenkins run nj4x terminal server start nj4xx-market start nj4xx-data start nj4xx-trader — MySQL/heidisql zookeeper kafka tap0/nat kvm rdt nexus tomcat+jenkins idea – nj4xx browse jenkins run nj4x terminal server start nj4xx-market

2016-12-01 · 1 min · 46 words · -

MySQL explain, 执行计划, Query Execution Plan

MySQL explain, 执行计划, Query Execution Plan 关于explain命令相信大家并不陌生,具体用法和字段含义可以参考官网explain-output,这里需要强调rows是核心指标,绝大部分rows小的语句执行一定很快 (有例外,下面会讲到) 。所以优化语句基本上都是在优化rows。 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。 (QEP: sql生成一个执行计划query Execution plan) MySQL> explain select * from servers; +—-+————-+———+——+—————+——+———+——+——+——-+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +—-+————-+———+——+—————+——+———+——+——+——-+ | 1 | SIMPLE | servers | ALL | NULL | NULL | NULL | NULL | 1 | NULL | +—-+————-+———+——+—————+——+———+——+——+——-+ 1 row in set (0.03 sec) expain出来的信息有10列,分别是 id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra,下面对这些字段出现的可能进行解释: ...

2016-11-28 · 4 min · 687 words · -

mockito check argument

mockito check argument Channel channel = Mockito.mock(XxxClass.class); Mockito.when(channel.writeAndFlush((XxxClass) Mockito.argThat(new ArgMatcher()))). thenReturn((ChannelFuture) anyObject()); private class ArgMatcher extends ArgumentMatcher { @Override public boolean matches(Object o) { String arg = o.toString(); Assert.xxx return true; } }

2016-11-25 · 1 min · 33 words · -

gource

gource https://github.com/acaudwell/Gource/wiki https://linuxtoy.org/archives/gource.html Gource, 可以在版本控制系统上轻松实现现在流行的数据可视化。 Gource 将整个项目代码当作一个树来呈现,将代码提交、分支及贡献者等信息和可视化的方式表现出来。内置对 Git, Mercurial, Bazaar 和 SVN 版本控制系统的支持。Gource 支持 Linux、OS X 及 Win 系统

2016-11-24 · 1 min · 19 words · -

golang 数组/切片/slice

golang 数组 array, 切片, slice Go 的切片类型为处理同类型数据序列提供一个方便而高效的方式。 切片有些类似于其他语言中的数组, 但是有一些不同寻常的特性。 Go的(Slice)切片是在(Array)数组之上的抽象数据类型, 因此在了解切片之前必须要先理解数组。 数组, array 声明一个数组 // var identifier [len]type var foo [5]int // 声明时没有指定数组的初始化值, 因此所有的元素都会被自动初始化为默认值 0。 //Go 语言中的数组是值类型,因此还可以用 new 来创建 bar := new([5]int) // new 返回类型的指针,因此 foo bar 的区别在于: foo 的类型为 [5]int,bar 的类型为 *[5]int。 var a [4]int a[0] = 1 i := a[0] 数组的长度在声明它的时候就必须给定,并且之后不会再改变。可以说, 数组的长度是其类型的一部分。比如, [1]string 和 [2]string 就是两个不同的数组类型。 数组可以以常规的索引方式访问,表达式 s[n] 访问数组的第 n 个元素。 golang array 特点: golang中的数组是值类型, 也就是说, 如果你将一个数组赋值给另外一个数组, 那么, 实际上就是整个数组拷贝了一份 如果 golang 中的数组作为函数的参数, 那么实际传递的参数是一份数组的拷贝, 而不是数组的指针 array 的长度也是 Type 的一部分, 这样就说明 [10]int 和 [20]int 是不一样的。 foo:= [5] int {1,2,3,4,5} // 长度为5的数组,其元素值依次为: 1,2,3,4,5 [5] int {1,2} // 长度为5的数组,其元素值依次为: 1,2,0,0,0 。在初始化时没有指定初值的元素将会赋值为其元素类型int的默认值0,string的默认值是"" [...] int {1,2,3,4,5} // 长度为5的数组,其长度是根据初始化时指定的元素个数决定的 [5] int { 2:1,3:2,4:3} // 长度为5的数组,key:value,其元素值依次为: 0,0,1,2,3。在初始化时指定了2,3,4索引中对应的值: 1,2,3 [...] int {2:1,4:3} // 长度为5的数组,起元素值依次为: 0,0,1,0,3。由于指定了最大索引4对应的值3,根据初始化的元素个数确定其长度为5 // 遍历 for i, value := range arrayOrSlice { log.Printf("%v: %v", i, value) } 切片/Slices slice 切片类型是一个引用类型, 是一个动态的指向数组切片的指针。 slice 是一个不定长的, 总是指向底层的数组 array 的数据结构。 ...

2016-11-24 · 5 min · 956 words · -

Go map set

go map map 是由 key-value 对组成的;key 只会出现一次。 Map 是一种无序的键值对的集合 map 是 mutable 的, 可以对其进行修改,map 不是线程安全的. 从map中读取一个不存在的key的时候,返回0值 Go 语言的 map 用的是哈希查找表(Hash table),并且使用链表解决哈希冲突。 Go 语言中 map 是一种特殊的数据结构,一种元素对(pair)的无序集合,pair 对应一个 key(索引)和一个 value(值),所以这个结构也称为关联数组或字典,这是一种能够快速寻找值的理想结构,给定 key,就可以迅速找到对应的 value。 map 这种数据结构在其他编程语言中也称为字典(Python)、hash 和 HashTable 等。 维基百科里这样定义 map: In computer science, an associative array, map, symbol table, or dictionary is an abstract data type composed of a collection of (key, value) pairs, such that each possible key appears at most once in the collection. ...

2016-11-23 · 4 min · 661 words · -

golang MySQL

golang MySQL http://www.cnblogs.com/hupengcool/p/4143238.html Golang操作数据库 基本概念 Open() – creates a DB Close() - closes the DB Query() - 查询 QueryRow() -查询行 Exec() -执行操作,update,insert,delete Row - A row is not a hash map, but an abstraction of a cursor Next() Scan() 注意: DB并不是指的一个connection 连接到数据库 我们以MySQL为例,使用github.com/go-sql-driver/MySQL,首先我们需要导入我们需要的包 import ( “database/sql” _ “github.com/go-sql-driver/MySQL” ) 注意我们导入github.com/go-sql-driver/MySQL 前面用了一个"_",_操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的init函数,import的时候其实是执行了该包里面的init函数,初始化了里面的变量,_操作只是说该包引入了,我只初始化里面的 init函数和一些变量,但是往往这些init函数里面是注册自己包里面的引擎,让外部可以方便的使用,就很多实现database/sql的包,在 init函数里面都是调用了sql.Register(name string, driver driver.Driver)注册自己,然后外部就可以使用了。 我们用Open()函数来打开一个database handle db, err := sql.Open(“MySQL”, “user:password@tcp(ip:port)/database”) 写一个完整的: import ( “database/sql” _ “github.com/go-sql-driver/MySQL” “log” ) func main() { db, err := sql.Open(“MySQL”, “user:password@tcp(ip:port)/database”) ...

2016-11-23 · 4 min · 824 words · -

Cython

Cython https://moonlet.gitbooks.io/cython-document-zh_cn/content/ch1-basic_tutorial.html Cython 的本质可以总结如下: Cython 是包含 C 数据类型的 Python。 Cython 是 Python: 几乎所有 Python 代码都是合法的 Cython 代码。 (存在一些限制,但是差不多也可以。) Cython 的编译器会转化 Python 代码为 C 代码,这些 C 代码均可以调用 Python/C 的 API。 Cython 可不仅仅包含这些,Cython 中的参数和变量还可以以 C 数据类型来声明。代码中的 Python 值和 C 的值可以自由地交叉混合 (intermixed) 使用, 所有的转化都是自动进行。Python 中的引用计数维护 (Reference count maintenance) 和错误检查 (error checking) 操作同样是自动进行的,并且全面支持 Python 的异常处理工具 (facilities) ,包括 try-except 和 try-finally,即便在其中操作 C 数据都是可以的。

2016-11-22 · 1 min · 58 words · -

ansible module

ansible module systemd - name: restart telegraf systemd: state: restarted daemon_reload: yes name: telegraf shell ansible-playbook显示执行shell的模块的返回结果 - name: who am i shell: "whoami" register: shell_result - debug: var: shell_result.stdout_lines local_action local_action 需要 sudo 密码 export ANSIBLE_ASK_SUDO_PASS=true --extra-vars "ansible_sudo_pass=xxx" - name: "Create an empty directory (locally)" local_action: module: file path: "/tmp/empty" state: directory tags: tag0 批量删除文件 - name: Ansible delete file glob find: paths: /etc/Ansible patterns: *.txt register: files_to_delete - name: Ansible remove file glob file: path: "{{ item.path }}" state: absent with_items: "{{ files_to_delete.files }}" lineinfile 用于改变一个文件的一行。如果想要改变文件中相似的多行,可以使用 replace模块 ...

2016-11-18 · 5 min · 983 words · -

Juc中的同步辅助类, CountDownLatch,CyclicBarrier,Semaphore

‘Juc中的同步辅助类, CountDownLatch,CyclicBarrier,Semaphore’ CountDownLatch CyclicBarrier Semaphore Phaser Exchanger CountDownLatch 在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待/阻塞 Java的concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数器里面的值。 你可以向CountDownLatch对象设置一个初始的数字作为计数值,任何调用这个对象上的await()方法都会阻塞,直到这个计数器的计数值被其他的线程减为0为止。 CountDownLatch的一个非常典型的应用场景是: 有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务执行完自己的任务后调用同一个CountDownLatch对象上的countDown()方法,这个调用await()方法的任务将一直阻塞等待,直到这个CountDownLatch对象的计数值减到0为止。 http://www.wiloon.com/?p=7869 CyclicBarrier 一种可重置的多路同步点, 在某些并发编程场景很有用. 它允许一组线程互相等待, 直到到达某个公共的屏障点 (common barrier point). 在涉及一组固定大小的线程的程序中, 这些线程必须不时地互相等待, 此时 CyclicBarrier 很有用.因为该 barrier在释放等待线程后可以重用, 所以称它为循环的barrier. CyclicBarrier类似于CountDownLatch也是个计数器, 不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数, 当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线程被唤醒并继续。 CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。 CyclicBarrier初始时还可带一个Runnable的参数,此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。 Semaphore 信号量是一类经典的同步工具. 信号量通常用来限制线程可以同时访问的 (物理或逻辑) 资源数量. 一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。拿到信号量的线程可以进入代码,否则就等待。通过acquire()和release()获取和释放访问许可。 Phaser 一种可重用的同步屏障, 功能上类似于 CyclicBarrier 和 CountDownLatch, 但使用上更为灵活. 非常适用于在多线程环境下同步协调分阶段计算任务 (Fork/Join框架中的子任务之间需同步时, 优先使用 Phaser) http://www.wiloon.com/?p=11214 Exchanger 允许两个线程在某个汇合点交换对象, 在某些管道设计时比较有用. Exchanger提供了一个同步点, 在这个同步点, 一对线程可以交换数据. 每个线程通过exchange()方法的入口提供数据给他的伙伴线程, 并接收他的伙伴线程提供的数据并返回. 当两个线程通过Exchanger交换了对象, 这个交换对于两个线程来说都是安全的. Exchanger可以认为是 SynchronousQueue 的双向形式, 在运用到遗传算法和管道设计的应用中比较有用. ...

2016-11-18 · 1 min · 73 words · -

locale command

locale command sudo vim /etc/locale.conf locale 是 Linux 系统中多语言环境的设置接口,在 Linux 中,使用 locale 命令来设置和显示程序运行的语言环境,locale 会根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统定义一个软件运行时的语言环境。 通过 locale 来设置程序运行的不同语言环境,locale 由 ANSI C 提供支持。locale 的命名规则为<语言>_<地区>.<字符集编码>,如 zh_CN.UTF-8,zh 代表中文,CN 代表大陆地区,UTF-8 表示字符集。在locale环境中,有一组变量,代表国际化环境中的不同设置。 locale 设置规则 <语言>_<地区>.<字符集编码><@修正值> zh_CN.utf8 zh:表示中文 CN:表示大陆地区 Utf8:表示字符集 de_DE.utf-8@euro de:表示德语 DE:表示德国 Utf-8:表示字符集 euro:表示按照欧洲习惯加以修正 使用详解 设置locale的根本就是设置一组总共12个LC开头的变量,不包括LANG和LC_ALL locale默认文件存放位置: /usr/share/i18n/locales (一)查看当前 locale 设置 列出所有启用的 locale: locale LANG=zh_CN.UTF-8 LC_CTYPE=“zh_CN.UTF-8” LC_NUMERIC=“zh_CN.UTF-8” LC_TIME=“zh_CN.UTF-8” LC_COLLATE=“zh_CN.UTF-8” LC_MONETARY=“zh_CN.UTF-8” LC_MESSAGES=“zh_CN.UTF-8” LC_PAPER=“zh_CN.UTF-8” LC_NAME=“zh_CN.UTF-8” LC_ADDRESS=“zh_CN.UTF-8” LC_TELEPHONE=“zh_CN.UTF-8” LC_MEASUREMENT=“zh_CN.UTF-8” LC_IDENTIFICATION=“zh_CN.UTF-8” LC_ALL= 分别介绍下: LANG:LANG 的优先级是最低的,它是所有 LC_* 变量的默认值,下方所有以 LC_ 开头变量(LC_ALL除外)中,如果存在没有设置变量值的变量,那么系统将会使用 LANG 的变量值来给这个变量进行赋值。如果变量有值,则保持不变 ...

2016-11-17 · 1 min · 191 words · -

c basic, c, c lang, c 语言

c basic, c, c lang, c 语言 hello world vim main.c #include <stdio.h> int main(){ printf("hello world!\n"); return 0; } gcc main.c ./a.out # 也可以不使用 a.out 这个名字,我们自己对其进行命名: gcc main.c -o hello ./hello 预处理(或称预编译) 预处理(或称预编译)是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。预处理指令指示在程序正式编译前就由编译器进行的操作,可放在程序中任何位置。 预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。 C语言提供多种预处理功能,主要处理#开始的预编译指令,如宏定义(#define)、文件包含(#include)、条件编译(#ifdef)等。合理使用预处理功能编写的程序便于阅读、修改、移植和调试,也有利于模块化程序设计。 头文件, header 头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件: 程序员编写的头文件和编译器自带的头文件。 在程序中要使用头文件,需要使用 C 预处理指令 #include 来引用它。前面我们已经看过 stdio.h 头文件,它是编译器自带的头文件。 引用头文件相当于复制头文件的内容,但是我们不会直接在源文件中复制头文件的内容,因为这么做很容易出错,特别在程序是由多个源文件组成的时候。 A simple practice in C 或 C++ 程序中,建议把所有的常量、宏、系统全局变量和函数原型写在头文件中,在需要的时候随时引用这些头文件。 引用头文件的语法 使用预处理指令 #include 可以引用用户和系统头文件。它的形式有以下两种: include 这种形式用于引用系统头文件。它在系统的标准列表中搜索名为 file 的文件。在编译源代码时,您可以通过 -I 选项把目录前置在该列表前。 ...

2016-11-16 · 2 min · 362 words · -

sudo 命令自动补全

命令自动补全 sudo pacman -S bash-completion echo "source /usr/share/bash-completion/bash_completion" >>/home/$USER/.bashrc

2016-11-15 · 1 min · 9 words · -

CUnit

CUnit http://blog.csdn.net/scucj/article/details/4385630 CUnit下载地址: http://sourceforge.net/projects/cunit/ CUnit 在线文档帮助:http://cunit.sourceforge.net/doc/index.html 关于CUnit, 本文主要从介绍三方面的内容: 1.CUnit的介绍。 1.1 介绍如何使用CUnit。 CUnit是一个对C语言编写的程序进行单元测试的框架,在线文档说它作为一个静态链接库被链接到用户的测试代码中。它提供了一种简洁的框架来建立测试架构,并提供丰富的断言(Assertion)来测试通用数据类型。除此之外,它还提供了许多不同的结构来运行测试用例和报告测试结果。

2016-11-14 · 1 min · 12 words · -

git server

git server 在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改。 GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。 搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。 假设你已经有sudo权限的用户账号,下面,正式开始安装。 安装git: $ sudo pacman -S git 创建一个git用户,用来运行git服务: sudo useradd git 创建证书登录: 收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。 初始化Git仓库: 先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令: $ sudo git init -bare sample.git Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git: $ sudo chown -R git:git sample.git 禁用shell登录: 出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行: git:x:1001:1001:,,,:/home/git:/bin/bash 改为: git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell 这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。 克隆远程仓库: 现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行: $ git clone git@server:/path/to/sample.git Cloning into ‘sample’… warning: You appear to have cloned an empty repository. 剩下的推送就简单了。 管理公钥 如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。 这里我们不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。 管理权限 有很多不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子 (hook) ,所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。 这里我们也不介绍Gitolite了,不要把有限的生命浪费到权限斗争中。 小结 搭建Git服务器非常简单,通常10分钟即可完成; 要方便管理公钥,用Gitosis; ...

2016-11-09 · 1 min · 101 words · -

DevOps

DevOps 由 Atlassian 提出的 DevOps (英文Development和Operations的组合) 是一组过程、方法与系统的统称,用于促进开发 (应用程序/软件工程) 、技术运营和质量保障 (QA) 部门之间的沟通、协作与整合。它的出现是由于软件行业日益清晰地认识到: 为了按时交付软件产品和服务,开发和运营工作必须紧密合作。[1]

2016-11-08 · 1 min · 12 words · -

rfkill

rfkill https://linux.cn/article-5957-1.html 很多计算机系统包含无线电传输,其中包括Wi-Fi、蓝牙和3G设备。这些设备消耗电源,在不使用这些设备时是一种能源浪费。 RFKill 是Linux内核中的一个子系统,它可提供一个接口,在此接口中可查询、激活并取消激活计算机系统中的无线电传输。当取消激活传输时,可使其处于可被软件重新激活的状态 ( 软锁定 ) 或软件无法重新激活的位置 ( 硬锁定 ) 。 RFKill 为内核子系统提供应用程序编程界面 (API) 。内核驱动程序被设计为支持RFKill使用这个API注册内核,并包含启用和禁用这个设备的方法。另外,RFKill提供用户程序可解读的通知以及用户程序查询传输状态的方法。 RFKill接口位于 /dev/rfkill,其中包含系统中所有无线电传输的当前状态。每个设备都在 sysfs 中注册当前RFKill状态。另外,在启用了RFKill的设备中每当状态更改时,RFKill会发出 uevents。 rfkill 是一个命令行工具,您可使用它查询和更改系统中启用了RFKill的设备。要获得这个工具,请安装 rfkill 软件包。 如果开机时在可以搜索到无线网络且输入密码正确但仍然无法接入的情况下,就可能是rfkill这个程序阻拦了接入,它是个用来控制无线网络及蓝牙的使用的软开关。 使用命令 rfkill list 获得设备列表,每个都包含与之关联的索引号 ,从 0 开始。 rfkill list 您可以使用这个索引号让 rfkill 停使或者使用某个设备,例如: rfkill block 0 停用系统中第一个启用RFKill的设备。 您还可以使用 rfkill 阻断某一类设备,或者所有启用了RFKill的设备。例如: rfkill block wifi 停用系统中的所有Wi-Fi设备。要停用所有启用了RFKill的设备,请运行: rfkill block all 要重新使用设备,请运行 rfkill unblock。要获得 rfkill 可停用的完整设备类别列表,请运行 rfkill help。

2016-11-08 · 1 min · 60 words · -

maven repo

maven repo aliyun https://maven.aliyun.com/mvn/view https://maven.aliyun.com/repository/public repo1 https://repo1.maven.org/maven2/ maven { url 'http://repo.grails.org/grails/repo' } maven { url 'http://repo.grails.org/grails/plugins' } http://maven.aliyun.com/nexus/content/groups/public/

2016-11-06 · 1 min · 18 words · -

gradle maven snapshot

gradle maven snapshot configurations.all { // check for updates every build resolutionStrategy.cacheChangingModulesFor 0, ‘seconds’ } dependencies { compile group: “group”, name: “projectA”, version: “1.1-SNAPSHOT”, changing: true } https://discuss.gradle.org/t/how-to-get-gradle-to-download-newer-snapshots-to-gradle-cache-when-using-an-ivy-repository/7344 gradle maven plugin https://docs.gradle.org/current/userguide/publishing_maven.html#header gradle v5.3.1 group = “com.wiloon.group0” version = “0.0.1-SNAPSHOT” plugins { java-library maven-publish id(“com.gradle.build-scan”) version “2.2.1” } tasks.register(“sourcesJar”) { from(sourceSets.main.get().allJava) archiveClassifier.set(“sources”) } tasks.register(“javadocJar”) { from(tasks.javadoc) archiveClassifier.set(“javadoc”) } publishing { publications { create(“maven”) { from(components[“java”]) artifact(tasks[“sourcesJar”]) artifact(tasks[“javadocJar”]) } } repositories { maven { val releasesRepoUrl = “http://nexus.wiloon.com/repository/maven-releases" val snapshotsRepoUrl = “http://nexus.wiloon.com/repository/maven-snapshots" url = uri(if (version.toString().endsWith(“SNAPSHOT”)) snapshotsRepoUrl else releasesRepoUrl) credentials { username = “admin” password = “password” } } } } ...

2016-11-06 · 1 min · 100 words · -

archlinux hostapd

archlinux hostapd system: archlinux interface: eth2, wlan1 无线网卡必须支持AP模式 iw list 配置 接入点的设置包含两个主要部分: 设置Wi-Fi链路层,这样无线客户端可以与电脑的"软件接入点"建立连接,从而同电脑进行通信。 配置电脑上的网络, 使电脑可以在 Internet 和无线客户端之间有效地转发IP包。 hostapd能够使得无线网卡切换为master模式,模拟AP (路由器) 功能 systemd-networkd config cd /etc/systemd/network/ vim 05-eth0.network [Match] Name=enp1s0 [Network] DHCP=yes vim 07-br0.netdev [NetDev] Name=br0 Kind=bridge vim 10-eth1.network [Match] Name=enp3s0 [Network] Bridge=br0 vim 15-wlan0.network [Match] Name=wlp2s0b1 [Network] Bridge=br0 vim 20-br0.network [Match] Name=br0 [Network] DNS=192.168.50.1 Address=192.168.97.1/24 iptables sudo iptables -vnL sudo iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE hostapd config #edit /etc/hostapd/hostapd.conf interface=wlp2s0b1 # if wlan0 already added to br0, uncomments this line bridge=br0 # 驱动接口类型 driver=nl80211 # 国家或地区代码 (ISO/IEC 3166-1) country_code=CN # 热点名 ssid=test2 # hostapd日志设置 logger_syslog=-1 logger_syslog_level=2 logger_stdout=-1 logger_stdout_level=2 ctrl_interface=/run/hostapd ctrl_interface_group=0 # 工作模式 (a = IEEE 802.11a (5 GHz), b = IEEE 802.11b (2.4 GHz) # a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g, ad = IEEE 802.11ad (60 GHz) hw_mode=g # 使用信道 channel=5 beacon_int=100 dtim_period=2 # 允许最大连接数 max_num_sta=5 # Bit 字段: bit0 = WPA, bit1 = WPA2 wpa=2 rts_threshold=-1 fragm_threshold=-1 macaddr_acl=0 auth_algs=1 # 1: hide ssid, 0: default ignore_broadcast_ssid=0 wmm_enabled=1 wmm_ac_bk_cwmin=4 wmm_ac_bk_cwmax=10 wmm_ac_bk_aifs=7 wmm_ac_bk_txop_limit=0 wmm_ac_bk_acm=0 wmm_ac_be_aifs=3 wmm_ac_be_cwmin=4 wmm_ac_be_cwmax=10 wmm_ac_be_txop_limit=0 wmm_ac_be_acm=0 wmm_ac_vi_aifs=2 wmm_ac_vi_cwmin=3 wmm_ac_vi_cwmax=4 wmm_ac_vi_txop_limit=94 wmm_ac_vi_acm=0 wmm_ac_vo_aifs=2 wmm_ac_vo_cwmin=2 wmm_ac_vo_cwmax=3 wmm_ac_vo_txop_limit=47 wmm_ac_vo_acm=0 eapol_key_index_workaround=0 eap_server=0 own_ip_addr=127.0.0.1 wpa_passphrase=hostapd0 # 加密算法 wpa_key_mgmt=WPA-PSK # 加密协议;禁用不安全的 TKIP wpa_pairwise=TKIP rsn_pairwise=CCMP start hostapd on boot systemctl enable hostapd dnsmasq #vim /etc/dnsmasq.conf interface=wlp2s0b1 listen-address=192.168.97.1 #no-dhcp-interface= dhcp-range=192.168.97.10,192.168.97.20,12h # route dhcp-option=3,192.168.97.1 # dns dhcp-option=6,192.168.97.1 #打开Linux主机网络数据转发功能 echo 1 > /proc/sys/net/ipv4/ip_forward sudo hostapd /etc/hostapd/hostapd.conf related command sudo pacman -S iw #check is support AP mode iw list ip link add name br0 type bridge ip link set br0 up ip link set eth0 up ip link set eth0 master br0 # show bridge info bridge link sudo ip addr add 192.168.49.1/24 dev wlp2s0b1 sudo ip link set wlp3s0 up sudo systemctl start dnsmasq.service sudo nft add rule nat post ip saddr 192.168.49.0/24 oif enp2s0 snat 172.16.xxx.xxx sudo hostapd /etc/hostapd/hostapd.conf sudo hostapd -B /etc/hostapd/hostapd.conf sudo systemctl start hostapd.service #设置无线接入点IP地址,命令如下: sudo ip addr add 192.168.49.1/24 dev wlp2s0b1 sudo ip link set wlp2s0b1 up #启动 hostapd和dnsmasq hostapd /etc/hostapd/hostapd.conf hostapd -B /etc/hostapd/hostapd.conf #or systemctl start hostapd.service systemctl start dnsmasq.service https://wiki.archlinux.org/index.php/software_access_point#Wi-Fi_device_must_support_AP_mode ...

2016-10-31 · 2 min · 340 words · -