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 · -

linux 环境 变量, /etc/profile, /etc/profile.d/

linux 环境 变量, /etc/profile, /etc/profile.d/ ~/.bashrc, ~/.profile Archlinux Interactive, non-login shells 会加载 ~/.bashrc, login shell 不会加载 ~/.bashrc /root/.bashrc 主要是为交互式的 非登录 shell 准备的,而 root 用户登录时的默认 shell 会加载的文件是 /root/.profile,而不是 ~/.bashrc win10 WSL + zsh + oh my zsh 用 root 用户 SSH 登录 archlinux 会加载 .bash_profile, 不会加载 .bashrc win10 putty SSH 登录 同上 /etc/profile.d 自定义的环境变量要加到 /etc/profile.d 下, 这里的配置会开机加载, 配置到 ~/.zshrc 的话会每打开一个 terminal 加载一次, 不建议手动修改 /etc/profile, /etc/profile 文件属于 filesystem 包, 这个包的的更新有可能会导致 /etc/profile 的更新, 如果 filesystem 升级的时候发现 /etc/profile 被修改过, 会把新的文件安装到 /etc/profile.new 并且是不生效的状态, 有可能会导致某些不兼容的问题, 比如 perl 包安装的/etc/profile.d/perlbin.sh 使用的 append_path 函数. ...

2016-10-28 · 3 min · 521 words · -

ANTLR

ANTLR http://blog.csdn.net/dc_726/article/details/45399371 当我们实现一种语言时,我们需要构建读取句子 (sentence) 的应用,并对输入中的元素做出反应。如果应用计算或执行句子,我们就叫它解释器 (interpreter) ,包括计算器、配置文件读取器、Python解释器都属于解释器。如果我们将句子转换成另一种语言,我们就叫它翻译器 (translator) ,像Java到C#的翻译器和编译器都属于翻译器。不管是解释器还是翻译器,应用首先都要识别出所有有效的句子、词组、字词组等,识别语言的程序就叫解析器 (parser) 或语法分析器 (syntax analyzer) 。我们学习的重点就是如何实现自己的解析器,去解析我们的目标语言,像DSL语言、配置文件、自定义SQL等等。 1.2 元编程 手动编写解析器是非常繁琐的,所以我们有了ANTLR。只需编写ANTLR的语法文件,描述我们要解析的语言的语法,之后ANTLR就会自动生成能解析这种语言的解析器。也就是说,ANTLR是一种能写出程序的程序。在学习LISP或Ruby的宏时,我们经常能接触到元编程的概念。而用来声明我们语言的ANTLR语言的语法,就是元语言 (meta-language) 。 1.3 解析过程 为了简单起见,我们将解析分为两个阶段,对应我们的大脑读取文字时的过程。当我们读到一个句子时,在第一阶段,大脑会下意识地将字符组成单词,然后像查词典一样识别出它们的意思。在第二阶段,大脑会根据已识别的单词去识别句子的结构。第一阶段的过程叫词法分析 (lexical analysis) ,对应的分析程序叫做lexer,负责将符号 (token) 分组成符号类 (token class or token type) 。而第二阶段就是真正的parser,默认ANTLR会构建出一棵分析树 (parse tree) 或叫语法树 (syntax tree) 。如下图,就是简单的赋值表达式的解析过程: 语法树的叶子是输入token,而上级结点时包含其孩子结点的词组名 (phase) ,线性的句子其实是语法树的序列化。最终生成语法树的好处是: 树形结构易于遍历和处理,并且易被程序员理解,方便了应用代码做进一步处理。 多种解释或翻译的应用代码都可以重用一个解析器。但ANTLR也支持像传统解析器生成器那样,将应用处理代码嵌入到语法中。 对于因为计算依赖而需要多趟处理的翻译器来说,语法树非常有用!我们不用多次调用解析器去解析,只需高效地遍历语法树多次。

2016-10-26 · 1 min · 45 words · -

MySQL事务autocommit自动提交

MySQL事务autocommit自动提交 http://www.qttc.net/201208175.html MySQL默认操作模式就是autocommit自动提交模式。这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行。我们可以通过设置autocommit的值改变是否是自动提交autocommit模式。 通过以下命令可以查看当前autocommit模式 MySQL> show variables like ‘autocommit’; +—–+—+ | Variable_name | Value | +—–+—+ | autocommit | ON | +—–+—+ 1 row in set (0.04 sec) 从查询结果中,我们发现Value的值是ON,表示autocommit开启。我们可以通过以下SQL语句改变这个模式 MySQL> set autocommit = 0; 值0和OFF都是一样的,当然,1也就表示ON。通过以上设置autocommit=0,则用户将一直处于某个事务中,直到执行一条commit提交或rollback语句才会结束当前事务重新开始一个新的事务。 举个例子: 张三给李四转账500元。那么在数据库中应该是以下操作: 1,先查询张三的账户余额是否足够 2,张三的账户上减去500元 3,李四的账户上加上500元 以上三个步骤就可以放在一个事务中执行提交,要么全部执行要么全部不执行,如果一切都OK就commit提交永久性更改数据;如果出错则rollback回滚到更改前的状态。利用事务处理就不会出现张三的钱少了李四的账户却没有增加500元或者张三的钱没有减去李四的账户却加了500元。 MySQL默认的存储引擎是MyISAM,MyISAM存储引擎不支持事务处理,所以改变autocommit没有什么作用。但不会报错,所以要使用事务处理的童鞋一定要确定你所操作的表示支持事务处理的,如InnoDB。如果不知道表的存储引擎可以通过查看建表语句查看建表的时候有没有指定事务类型的存储引擎,如果没有指定存储引擎默认则是MyISAM不支持事务的存储引擎。 当然,事务处理是为了保障表数据原子性、一致性、隔离性、持久性。这些都是要消耗系统资源的,要谨慎选择。

2016-10-26 · 1 min · 43 words · -

tprofiler

tprofiler git clone https://github.com/alibaba/TProfiler.git #compile mvn assembly:assembly #create tprofiler.properties

2016-10-25 · 1 min · 9 words · -

MySQL 时区

MySQL 时区 default-time-zone = ‘+8:00’ http://blog.csdn.net/mchdba/article/details/9763521

2016-10-24 · 1 min · 6 words · -