Linux 文件权限

Linux 文件权限 拥有者 owner, 群组 group, 其它组 other 模式 数字 rwx 7 rw- 6 r-x 5 r-- 4 -wx 3 -w- 2 -x- 1 --- 0 http://zhangfeikr.blog.51cto.com/1999170/396541 一个用户、一个组 我们来看一看 Linux 权限和所有权模型。我们已经看到每个文件属于一个用户和一个组。这正是 Linux 中权限模型的核心。您可以在 ls -l 清单中查看用户和组: $ ls -l /bin/bash -rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash 在这个特殊的示例中,/bin/bash 可执行文件属于 root 用户,并且在 wheel 组中。Linux 权限模型通过允许给每个文件系统对象设置三种独立的权限级别来工作 — 它们为文件的所有者、文件的组以及所有其他用户。 理解"ls -l" 我们来看一看我们的 ls -l 输出,检查一下这个清单的第一栏: $ ls -l /bin/bash -rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash 第一个字段 -rwxr-xr-x 包含该特殊文件的权限的符号表示。该字段中的首字符 (-) 指定该文件的类型,本例中它是一个常规文件。其它可能的首字符还有: ...

2015-02-06 · 4 min · 655 words · -

remote dev

remote dev virtualbox windows 宿主机, archlinux 虚拟机, virtualbox 安装增强包, 使用 seamless mode vscode remote ssh jetbrain remote development beta 版本 不稳定. vm@server, xforward 延迟: 22ms 内存: 16G+ cpu: 8c 无线网带宽问题,延迟 编辑器内部纵向滚动屏幕带宽占用峰值2300KB/s vm@server, rdp Ubuntu 22.04 安装 xrdp 开放 3389 端口, win10 mstsc 连接到 3389, 拖动窗口有延迟, 编辑器内部纵向滚动屏幕延迟可以接受. 拖动窗口带宽占用峰值 1700KB/s, 编辑器内部纵向滚动屏幕带宽占用峰值500KB/s 延迟: 22ms 内存: 16G+ cpu: 8c vm@server, vnc 延迟: 22ms 内存: 16G+ cpu: 8c 图形界面延迟 基于像素的传输,画质不好. wsl + x server 延迟: <1ms 内存: 16G+ cpu: 4c 内存占用问题 wsl + idea 延迟: <1ms 内存: 16G+ cpu: 4c 磁盘性能问题 windows + idea 延迟: <1ms 内存: 16G+ cpu: 4c ansible,git,leveldb 问题

2015-02-05 · 1 min · 97 words · -

ARC 与 GC 区别

ARC 与 GC 区别 http://my.oschina.net/u/566401/blog/109020 the short and sweet answer is as follow: 1.GC of java is Runtime, while ARC is compile time. 2.GC has reference to the objects at runtime and check for the dependencies of object runtime. While ARC appends the release, retain, autorelease calls at compiletime. **更多链接: ** 1.http://stackoverflow.com/questions/6385212/how-does-the-new-automatic-reference-counting-mechanism-work 2.http://stackoverflow.com/questions/7900167/objective-c-2-0-garbage-collector-vs-automatic-reference-counter-in-iOS-5-sdk 3.http://longweekendmobile.com/2011/09/07/objc-automatic-reference-counting-in-xcode-explained/

2015-02-05 · 1 min · 54 words · -

JAVA JIT Compiler(Just-in-timeCompiler) 即时编译

‘JAVA JIT Compiler(Just-in-timeCompiler) 即时编译’ JIT Compiler(Just-in-timeCompiler) 即时编译 最早的Java建置方案是由一套转译程式 (interpreter) ,将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由于一个Java指令可能被转译成十几或数十几个对等的微处理器指令,这种模式执行的速度相当缓慢。 针对这个问题,业界首先开发出JIT (just in time) 编译器。当Java执行runtime环境时,每遇到一个新的类别 (class: 类别是Java程式中的功能群组) ,JIT编译器在此时就会针对这个类别进行编译 (compile) 作业。经过编译后的程式,被优化成相当精简的原生型指令码 (native code) ,这种程式的执行速度相当快。花费少许的编译时间来节省稍后相当长的执行时间,JIT这种设计的确增加不少效率,但是它并未达到最顶尖的效能,因为某些极少执行到的Java指令在编译时所额外花费的时间可能比转译器在执行时的时间还长,针对这些指令而言,整体花费的时间并没有减少。 基于对JIT的经验,业界发展出动态编译器 (dynamiccompiler) ,动态编译器仅针对较常被执行的程式码进行编译,其余部分仍使用转译程式来执行。也就是说,动态编译器会研判是否要编译每个类别。动态编译器拥有两项利器: 一是转译器,另一则是JIT,它透过智慧机制针对每个类别进行分析,然后决定使用这两种利器的哪一种来达到最佳化的效果。动态编译器针对程式的特性或者是让程式执行几个循环,再根据结果决定是否编译这段程式码。这个决定不见得绝对正确,但从统计数字来看,这个判断的机制正确的机会相当高。事实上,动态编译器会根据「历史资料」做决策,所以程式执行的时间愈长,判断正确的机率就愈高。以整个结果来看,动态编译器产生的程式码执行的速度超越以前的JIT技术,平均速度可提高至50%。 http://baike.baidu.com/view/132440.htm?fromtitle=jit&fromid=2039740&type=syn

2015-02-05 · 1 min · 28 words · -

协程, Coroutine

协程, Coroutine 协程别名: 微线程,纤程。英文:Coroutine, Green threads, fibers 传统编程语言中子程序或者函数是层级调用的,函数可以调用其它函数, 调用者需要等待被调用者结束之后继续执行, 函数调用是通过栈实现的. 一个线程就是按顺序执行一个或几个子函数, 函数调用只有一个入口和一个出口. 协程看上去也是函数,但是执行过程中在子程序内部可以中断,然后执行别的函数, 然后再被调度回来执行. 协程比线程有更高的执行效率, 协程没有线程切换的开销 协程在用户空间调度, 不涉及系统调用或任何阻塞调用, 不需要用来守卫关键区块的同步性原语(primitive)比如互斥锁、信号量等,并且不需要来自操作系统的支持 协程不需要多线程的锁机制, 为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。 协程是协作式多任务的, 线程典型是抢占式多任务的 因为协程是一个线程执行,那怎么利用多核CPU呢?最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。 使用抢占式调度的线程实现协程,但是会失去某些利益(特别是对硬性实时操作的适合性和相对廉价的相互之间切换)。 协程是语言层级的构造,可看作一种形式的控制流,而线程是系统层级的构造 生成器 生成器,也叫作“半协程”[8],是协程的子集。 https://www.liaoxuefeng.com/wiki/1016959663602400/1017968846697824 https://zh.wikipedia.org/wiki/%E5%8D%8F%E7%A8%8B 有栈协程 有栈协程的好处,由于栈帧可以直接完全保存运行期上下文(主要是寄存器值),因此可以在任何时刻暂停协程的运行,这就很方便地支持了抢占式的调度器。 无栈协程 有栈协程的好处,由于栈帧可以直接完全保存运行期上下文(主要是寄存器值),因此可以在任何时刻暂停协程的运行,这就很方便地支持了抢占式的调度器。而无栈协程的上下文是一般通过类似结构体的方式保存在内存中,它依赖使用者显式地切换协程,否则协程不会主动让出执行权。 另外,有栈协程更方便将同步代码改造为异步代码,就像我们的例子一样,只需改动一行,加上go关键字就可以了。而无栈协程,同步改造为异步则更为复杂,甚至会导致牵一发动全身(async关键字扩散问题)。 Rust无栈协程 既然已经有了有栈协程,那么无栈协程是否还有优势呢。答案肯定的! 通常,无栈协程在内存空间和协程上下文切换的效率更高。值得说明的是,无栈协程并不是说不需要运行时的栈空间,而是和协程的创建者共用同一块运行时的栈空间。 如果一定要用一句话概括无栈协程,那就是:无栈协程可以看做是有状态的函数(generator),每次执行时会根据当前的状态和输入参数,得到(generate)输出,但不一定为最终结果。

2015-02-04 · 1 min · 39 words · -

Conway's law, 康威定律

Conway’s law, 康威定律 康威 (梅尔·康威)定律 任何组织在设计一套系统 (广义概念上的系统)时,所交付的设计方案在结构上都与该组织的沟通结构保持一致。 https://www.cnblogs.com/ghj1976/p/5703462.html 康威定律——“设计系统的组织,最终产生的设计等同于组织之内、之间的沟通结构。” 康威定律,其内涵是: 设计系统的组织,最终产生的设计等同于组织之内、之间的沟通结构。 Conway’s law(康威定律) Posted on 2016-07-25 14:43 蝈蝈俊 阅读(1952) 评论(0) 编辑 收藏 Mel Conway 康威在加利福尼亚理工学院获得物理学硕士学位,在凯斯西储大学获得数学博士学位。毕业之后,他参与了很多知名的软件项目,如 Pascal 编辑器。在他的职业生涯中,康威观察到一个现象: 软件团队开发的产品是对公司组织架构的反映。 1967 年他针对这个现象提交了一篇论文。 (http://www.melconway.com/Home/Conways_Law.html) 给 《哈佛商业评论》。结果程序员屌丝的文章不入商业人士的法眼,无情被拒,康威就投到了一个编程相关的杂志,所以被误解为是针对软件开发的。 最初这篇文章显然不敢自称定律 (law) ,只是描述了作者自己的发现和总结。后来,在Brooks Law著名的人月神话中,引用这个论点,并将其"吹捧"成了现在我们熟知"康威定律"。 image 康威定律的核心如下: Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization’s communication structure. 任何设计系统的组织,必然会产生以下设计结果: 即其结构就是该组织沟通结构的写照。简单来说: 产品必然是其组织沟通结构的缩影。 http://tech2ipo.com/102149

2015-01-29 · 1 min · 65 words · -

安卓线刷升级, flash factory image for android

安卓线刷升级, flash factory image for android download factory image from https://developers.google.com/android/nexus/images https://developer.android.com/preview/get https://developers.google.com/android/images https://developer.android.com/about/versions/12/download wget https://dl.google.com/dl/android/aosp/angler-opr6.170623.013-factory-a63b2f21.zip #edit flash-all.sh and remove the -w command for linux https://wiki.archlinux.org/index.php/android#Detect_the_device 开发者模式 … unlock 开发者模式>oem unlock adb reboot bootloader fastboot flashing unlock # 按方向键切换到unlock # 按电源键解锁 手机开启 开发者模式,打开usb调试,oem unlock 将手机连接到电脑 # 进入root sudo -s #restart adb: adb kill-server adb start-server adb devices #reboot to bootloader: adb reboot bootloader #不用sudo会一直waiting device, 另外一种waiting device的情况 是连接 电脑的typc线有问题,比如只有充电功能...我的pixelbook带的线就不能刷机用。 ./flash-all.sh if failed, flash image manually ...

2015-01-29 · 2 min · 292 words · -

安卓查看WIFI密码

安卓查看WIFI密码 打开Root Exploere,进入data/misc/wifi/wpa_supplicant.conf

2015-01-28 · 1 min · 3 words · -

抽奖概率-三种算法

抽奖概率-三种算法 http://www.cnblogs.com/younggun/p/3249772.html 一、逢"几"中奖 逢"几"中奖,即通过预估抽奖人数和奖品数来判断,“几”=(抽奖人数/奖品数)*N。这是一种最简单抽奖算法,适合抽奖人数众多,而且互相无联系的情况。如今大为流行的微博转发得奖就常常使用这种算法,即根据转发次数来决定奖品归属,透明而且具有激励性。 当然这个"几"也不单只次数,还可能是时间,逢某个时间点就可以抽中,不过这种方案可能产生无人中奖和很多人中奖的情况,时间点的安排很关键!这个时间点一旦公布出去,那就是秒杀,霍霍。。 逢"几"中奖有很多弊端,但是非常简单,很容易实现,被很多抽奖活动所采用,有些会公布抽奖规则,激励抽奖,有些则不会公布,其实后台运行的可能也是这个算法,简单高效又不失公平。在信息不透明的情况下,鬼知道你是第几个抽奖的,哈哈。。 二、概率抽奖 所谓概率抽奖是最容易想到的抽奖算法了,这个概率可以是一成不变的,也可以是一直在变化调整的,最难的是采用多大的概率,何种情况下采用何种概率。这个也没有什么通用的方案,不同的应用场景,所用的概率算法不同。下面介绍一种算法,根据奖品的过期日期来计算它当前时间的中奖率,当时间逐渐接近奖品过期时间时,中奖概率会逐渐发生变化,如果设为1表示线性衰减,2为平方衰减,以此类推。 importjava.util.Date; importjava.util.Random; publicclass LotteryTool { private double factor; private double probability; private Random rand; private LotteryTool(double probability, long expireTime, int reduce){ this.factor = (double) System.currentTimeMillis() / expireTime; this.probability = probability * Math.pow(factor, reduce); this.rand = new Random(System.currentTimeMillis()); } public static LotteryTool getInstance(double probability, longexpireTime, int reduce) { return new LotteryTool(probability, expireTime, reduce); } public boolean isLucky(long expected) { long token = generateLong(); expected = expected % (int) (1 / probability); ...

2015-01-26 · 1 min · 180 words · -

BeanFactory, ApplicationContext

BeanFactory, ApplicationContext http://blog.csdn.net/liaomin416100569/article/details/4924183 org.springframework.beans.factory.BeanFactory 是Spring IoC容器的实际代表者, IoC容器负责容纳此前所描述的bean,并对bean进行管理。 在Spring中,BeanFactory是IoC容器的核心接口。 它的职责包括: 实例化、定位、配置 应用程序中的对象及建立这些对象间的依赖。 Spring为我们提供了许多易用的BeanFactory实现, XmlBeanFactory就是最常用的一个。 该实现将以XML方式描述组成应用的对象 以 及对象间的依赖关系。XmlBeanFactory类将获取此XML配 置元数据,并用它来构建一个完 全可配置的系统或应用。 BeanFactory 提供的高级配置机制,使得管理各种对象成为可能。 ApplicationContext 是BeanFactory的扩展,功能得到了进一步增强,比如更易 与Spring AOP集成、资源处理 (国际化处理)、事件传递及各种不同应用层的context实现 (如针对web应用的WebApplicationContext)。 简而言之,BeanFactory提供了配制框架及基本功能,而 ApplicationContext 则增加了 更多支持企业核心内容的功能。 ApplicationContext完全由BeanFactory扩展而来, 因而BeanFactory所具备的能力和行为也适用于ApplicationContext。 使用getBean(String) 方法就可以取得bean的实例;BeanFactory 提供的方法极其简单。 BeanFactory接口提供 了非常多的方法,但是对于我们的应用来说,最好永远不要调用它们,当然也包括 使用getBean(String)方法,这样可以避免我们对 Spring API的依赖。 BeanFactory 同时也不具备 编译spring配置文件的功能 在容器初始化时 如果applicationContext出现错误时 BeanFactory并不能及时察觉,必须等待第一次获取bean的实例时才能抛出异常 比如实例化 BeanFactory Resource res = new FileSystemResource(“applicationContext.xml”); BeanFactory factory = new XmlBeanFactory(res); Resource resClasspath = new ClassPathResource(“applicationContext.xml.xml”); BeanFactory factory2 = new XmlBeanFactory(resClasspath); 获得BeanFactory实例时 不能检查错误 User u=(User)u.getBean(“user”); ...

2015-01-26 · 1 min · 79 words · -

java vs javaw vs javaws

java vs javaw vs javaws http://javapapers.com/core-java/java-vs-javaw-vs-javaws/ This article gives an awareness tip. Do you know the difference between java, javaw and javaws tools. All these three are java application launchers. We know well about java.exe which we use quite often. Our command line friend, mostly we use it for convenience to execute small java programs. javaw is rare for us. Sometimes we have seen that in running application list in windows task manager. javaws is web start utility. ...

2015-01-22 · 3 min · 548 words · -

JaveEE

JaveEE http://www.iteye.com/topic/153734 1.MVC的各个部分都有那些技术来实现?如何实现? 答: MVC是Model-View-Controller的简写。“Model” 代表的是应用的业务逻辑 (通过JavaBean,EJB组件实现) , “View” 是应用的表示面 (由JSP页面产生) ,“Controller” 是提供应用的处理过程控制 (一般是一个Servlet) ,通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。 2.J2EE是什么? 答: Je22是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。 http://www.wiloon.com/?p=1057 3.J2EE是技术还是平台还是框架? 答: J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。 J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。 4.STRUTS的应用(如STRUTS架构) 答: Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 Struts有如下的主要功能: 一.包含一个controller servlet,能将用户的请求发送到相应的Action对象。 二.JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。 三.提供了一系列实用对象: XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。 5.WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。 答: Web ServiceWeb Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。 JAXP(Java API for XML Parsing) 定义了在Java中使用DOM, SAX, XSLT的通用的接口。这样在你的程序中你只要使用这些通用的接口,当你需要改变具体的实现时候也不需要修改代码。 JAXM(Java API for XML Messaging) 是为SOAP通信提供访问方法和传输机制的API。 WSDL是一种 XML 格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。这种格式首先对操作和消息进行抽象描述,然后将其绑定到具体的网络协议和消息格式上以定义端点。相关的具体端点即组合成为抽象端点 (服务) 。 SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议。 ...

2015-01-22 · 2 min · 220 words · -

JSR303

JSR303 http://blog.csdn.net/caihaijiang/article/details/7463514 JSR 303 – Bean Validation 是一个数据验证的规范。 在任何时候,当你要处理一个应用程序的业务逻辑时,必须要考虑数据校验,确保输入进来的数据从语 义上来讲是正确的。在通常的情况下,应用程序是分层的,不同的层由不同的开发人员来完成。很多时候同样的数据验证逻辑会出现在不同的层,这样就会导致代码冗余、不利于维护等问题。使用Bean Validation,将验证逻辑与相应的域模型进行绑定,能够很好的避免发生这样的问题。 Bean Validation 为 JavaBean 验证定义了相应的元数据模型和 API。缺省的元数据是 Java Annotations。在应用程序中,通过使用 Bean Validation 或是你自己定义的 constraint,例如@NotNull,@Max,@Size, 就可以确保数据模型 (JavaBean) 的正确性。Bean Validation 是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。 Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。借助Hibernate Validator,可以很好的进行参数验证。 例子如下 (摘自参考文档2的内容) : maven依赖: <dependency> <groupId>com.alibaba.external</groupId> <artifactId>sourceforge.hibernate.validator</artifactId> <version>4.0.2.GA</version> </dependency> <dependency> <groupId>com.alibaba.external</groupId> <artifactId>java.validation.api</artifactId> <version>1.0.0.GA</version> </dependency> <dependency> <groupId>com.alibaba.external</groupId> <artifactId>org.slf4j.slf4j-api</artifactId> <version>1.5.6</version> </dependency> <dependency> <groupId>com.alibaba.external</groupId> <artifactId>org.slf4j.slf4j-log4j12</artifactId> <version>1.5.6</version> </dependency> <dependency> <groupId>com.alibaba.external</groupId> <artifactId>jakarta.log4j</artifactId> <version>1.2.16</version> </dependency> <dependency> <groupId>com.alibaba.external</groupId> <artifactId>sourceforge.spring</artifactId> <version>2.5.6</version> </dependency> 2. 要校验的Java Bean ```java package com.mycompany; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; public class Car { @NotNull private String manufacturer; @NotNull @Size(min = 2, max = 14) private String licensePlate; @Min(2) private int seatCount; public Car(String manufacturer, String licencePlate, int seatCount) { this.manufacturer = manufacturer; this.licensePlate = licencePlate; this.seatCount = seatCount; } //getters and setters ... } 3. 进行的校验 ```java import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; import org.junit.BeforeClass; import org.junit.Test; public class CarTest { private static Validator validator; @BeforeClass public static void setUp() { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); validator = factory.getValidator(); } @Test public void manufacturerIsNull() { Car car = new Car(null, "DD-AB-123", 4); Set<ConstraintViolation<Car>> constraintViolations = validator.validate(car); assertEquals(1, constraintViolations.size()); assertEquals("may not be null", constraintViolations.iterator().next().getMessage()); } @Test public void licensePlateTooShort() { Car car = new Car("Morris", "D", 4); Set<ConstraintViolation<Car>> constraintViolations = validator.validate(car); assertEquals(1, constraintViolations.size()); assertEquals("size must be between 2 and 14", constraintViolations.iterator().next().getMessage()); } } 更详细的使用,请看参考文档2. 参考文档: 1. JSR 303: http://jcp.org/en/jsr/summary?id=303 2. HIBERNATE Validator: http://docs.jboss.org/hibernate/validator/4.2/reference/en-US/pdf/hibernate_validator_reference.pdf 3. 中文版的: http://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html/validator-usingvalidator.html

2015-01-22 · 2 min · 236 words · -

SSH 端口转发, ssh port forward

SSH 端口转发, ssh port forward 端口转发, ssh port forward 比如在一台远程主机上运行着 Grafana: 192.168.50.100:32178, 但是 192.168.50.100 只对 192.168.50.50 开放了 22 端口, 我想从 192.168.50.50 访问 192.168.50.100 的 Grafana 就可以用 ssh 的端口转发 # -L: local port forwarding # 在 192.168.50.50 上执行 ssh -L 32179:192.168.50.100:32178 192.168.50.100 -l user0 # 32179 本地端口, 用户可以在 192.168.50.50 上用浏览器直接访问本地的 32179 端口的 grafana, http://127.0.0.1:32179 # 192.168.50.100:32178, 要访问的 ip 和 端口, 在 192.168.50.50 上访问 127.0.0.1:32179 就相当于访问 192.168.50.100:32178 # 192.168.50.100 -l user0, ssh 连接的主机和用户名, 这里用了默认的 ssh 22 端口 ssh -L 2000:192.168.50.11:5432 192.168.50.10 -l root # 2000 本地端口 # 192.168.50.11 目标主机 # 5432 目标端口 # 192.168.50.10 跳板机, 运行 ssh 服务端的主机, 并且 从192.168.50.10 能访问 192.168.50.11:5432 https://wangdoc.com/ssh/port-forwarding.html ...

2015-01-18 · 2 min · 386 words · -

git submodule

git submodule 有 submodule 的 git 仓库根目录会有 .gitmodules 文件。 # check submodule with command git submodule status # 有输出就是有 submodule 当你在一个 Git 项目上工作时,你需要在其中使用另外一个Git 项目。也许它是一个第三方开发的Git 库或者是你独立开发和并在多个父项目中使用的。这个情况下一个常见的问题产生了: 你想将两个项目单独处理但是又需要在其中一个中使用另外一个。 在 Git 中你可以用子模块 submodule 来管理这些项目,submodule 允许你将一个 Git 仓库当作另外一个 Git 仓库的子目录。这允许你克隆另外一个仓库到你的项目中并且保持你的提交相对独立。 主仓库切换分支之后,子仓库并不会跟着一起切换, 得在主仓库上执行一次 git submodule update git submodule update –init 将 git submodule init 和 git submodule update 合并成一步。如果还要初始化、抓取并检出任何嵌套的子模块, 请使用简明的 git submodule update –init –recursive。 # 添加 submodule # 为已有的 git 仓库增加子模块, 命令执行完成,会在当前工程根路径下生成一个名为“.gitmodules”的文件 # enx: 子模块的目录名 git submodule add git@github.com:wiloon/enx.git enx # 已经配置子模块的仓库, 主项目和子模块一起克隆 git clone -b branch_0 git@github.com:foo/bar.git --recursive # 查看子模块, 如果 git submodule 返回的 hash 前面有一个减号, 代表子模块还没有检出, 加号代表 submodule 距离上一次跟主仓库关联的 commit id 有新的 commit, 这时在主仓库里对 submodule 所在的目录做 git add folder0 之后 git submodule 命令返回的数据不再有加号. # git submodule 返回的 commit id 是当前 submodule 目录当前的 commit id # commit id 前面 的加号代表远程仓库关联的submodule 有更新, 执行 git submodule update 之后 , submodule 的版本会更新到与远程主仓库关联的submodule commit id 一致. git submodule # 比如只克隆了主仓库, submodule 所在的目录肯定是空的, 要用这个命令初始化一下 submodule, 然后再执行 git submodule update, submodule 目录就克隆下来了. git submodule init # 把submodule 更新到跟远程主仓库关联的 commit id 一致, git status 应该是 clear 的 git submodule update # 更新指定的 submodule 到远程仓库的最新版本 git submodule update --init --remote <submodule_path> # 把 submodule 更新到子仓库最新的 commit id, 这个 commit 有可能跟之前关联的 commit id 不一样, 一般会比之前 关联的 commit id 更新, git status 会看到 submodule 有变更需要提交, 需要更新 关联的 commit id. git submodule update --remote # 拉取子模块 的代码 git submodule update --init --recursive 使用 submodule, 主仓库 git pull 之后, submodule 不会自动更新, 还要检查一下 submodule 的版本, 可能需要执行git submodule update 更新 一下. ...

2015-01-18 · 2 min · 253 words · -

affect, influence 与 impact 的区别

affect, influence 与 impact 的区别 http://blog.sina.com.cn/s/blog_90bb205c0101ceza.html (2013-02-26 15:47:23) 转载▼ 标签: affect influence impact 分类: 词汇学习 affect 作主语通常是物而不是人,指一物对另一物产生的消极影响。 The tax increases have affected us all. 加税已经影响了我们所有的人。《简明英汉词典》 The dampness began to affect my health. 潮气开始影响我的健康。《新牛津英汉双解大词典》 Your attitude will affect how successful you are. 你的态度会影响你成功的程度。《新牛津英汉双解大词典》 influence 侧重在思想、性格、行为等方面所产生的潜移默化的影响,也可指自然力的影响。 The labour enthusiasm of the workers strongly influenced us. 工人们的劳动热情强烈地感染了我们。《简明英汉词典》 It’s all too easy to be influenced by our parents. 我们容易受父母的影响。《简明英汉词典》 The weather influences crops. 天气影响农作物。 ...

2015-01-18 · 1 min · 137 words · -

sqlite command

sqlite command 在列模式下,每条记录在一个单独地行中以数据列对齐的方式显示。列如: sqlite> .mode column 显示 列名.header on 查出所有的表: select name from sqlite_master where type=‘table’ order by name; 通过以下语句可查询出某个表的所有字段信息 PRAGMA table_info([tablename]) cur.execute(“PRAGMA table_info(table)”) print cur.fetchall() http://duduhehe.iteye.com/blog/1344858 http://www.cnblogs.com/riskyer/p/3333809.html Go sqlite import ( "database/sql" "fmt" _ "github.com/mattn/go-sqlite3" "rssx/utils/logger" ) func test() { db, err := sql.Open("sqlite3", "./foo.db") checkErr(err) createTable := `CREATE TABLE if not exists users ( id char(36) PRIMARY KEY NOT NULL, name varchar(50) DEFAULT NULL, create_time timestamp DEFAULT NULL ); ` r, err := db.Exec(createTable) checkErr(err) logger.Infof("%+v", r) stmt, err := db.Prepare("INSERT INTO `users` VALUES (?,?,?);") checkErr(err) res, err := stmt.Exec(0, "wiloon", "2017-12-07 22:10:49") checkErr(err) id, err := res.LastInsertId() checkErr(err) fmt.Println(id) db.Close() } func checkErr(err error) { if err != nil { logger.Errorf("err: %v", err) } } 导出, export, dump, 导入, import, read # export sqlite3 db/boardsprofile.db ".dump" > /var/ftp/profile.sql # import sqlite3 test.db ".read /var/ftp/profile.sql"

2015-01-17 · 1 min · 137 words · -

Go bufio

golang bufio bufio 对 io 进行了包装, 提供了缓冲. bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。 简单的说就是bufio会把文件内容读取到缓存中 (内存),然后再取读取需要的内容的时候,直接在缓存中读取,避免文件的i/o操作。同样,通过bufio写入内容,也是先写入到缓存中 (内存),然后由缓存写入到文件。避免多次小内容的写入操作I/O。 bufio.Read(p []byte) 的思路如下: 1、当缓存区有内容的时,将缓存区内容全部填入p并清空缓存区 2、当缓存区没有内容的时候且len(p)>len(buf),即要读取的内容比缓存区还要大,直接去文件读取即可 3、当缓存区没有内容的时候且len(p)<len(buf),即要读取的内容比缓存区小,缓存区从文件读取内容充满缓存区,并将p填满 (此时缓存区有剩余内容) 4、以后再次读取时缓存区有内容,将缓存区内容全部填入p并清空缓存区 (此时和情况1一样) https://www.cnblogs.com/ricklz/p/13188188.html http://www.cnblogs.com/golove/p/3282667.html // bufio 包实现了带缓存的 I/O 操作 type Reader struct { … } // NewReaderSize 将 rd 封装成一个带缓存的 bufio.Reader 对象, // 缓存大小由 size 指定 (如果小于 16 则会被设置为 16) 。 // 如果 rd 的基类型就是有足够缓存的 bufio.Reader 类型,则直接将 // rd 转换为基类型返回。 func NewReaderSize(rd io.Reader, size int) *Reader // NewReader 相当于 NewReaderSize(rd, 4096) func NewReader(rd io.Reader) *Reader ...

2015-01-16 · 7 min · 1357 words · -

httpcomponent, httpclient proxy setting

httpcomponent, httpclient proxy setting http://www.jianshu.com/p/f38a62efaa96 HttpHost proxy = new HttpHost("localhost",8888); CloseableHttpClient httpclient = HttpClients.custom() .setDefaultRequestConfig(RequestConfig.custom() .setProxy(proxy).build()).build();

2015-01-16 · 1 min · 16 words · -

zookeeper

zookeeper [16/11/21 03:20:30:030 CST] main-SendThread(192.168.50.100:2181) WARN zookeeper.ClientCnxn: Session 0x0 for server 192.168.50.100/:2181, unexpected error, closing socket connection and attempting reconnect 检查zookeeper包版本和连接的服务端版本,有可能是版本不一致 https://blog.csdn.net/richie696/article/details/112910751 向 zookeeper 发送 stat 命令 查询 zookeeper版本 echo stat | socat - TCP:192.168.50.100:2181 server # docker docker run \ --name zookeeper \ -p 2181:2181 \ -v /etc/localtime:/etc/localtime:ro \ -v zookeeper-conf:/conf \ -v zookeeper-data:/data \ -v zookeeper-datalog:/datalog \ -d \ zookeeper # podman podman run \ --name zookeeper \ -p 2181:2181 \ -v /etc/localtime:/etc/localtime:ro \ -e ZOO_4LW_COMMANDS_WHITELIST=* \ -d \ zookeeper # conf, data volume podman run \ --name zookeeper \ -p 2181:2181 \ -v /etc/localtime:/etc/localtime:ro \ -v zookeeper-conf:/conf \ -v zookeeper-data:/data \ -v zookeeper-datalog:/datalog \ -e ZOO_4LW_COMMANDS_WHITELIST=* \ -d \ zookeeper:3.7.0 # client docker run -it --rm zookeeper zkCli.sh -server 127.0.0.1 #zkCli.sh #连接zookeeper bin/zkCli.sh -server localhost:2181 #创建节点 create /k0 v0 # 删除一个节点 delete /k0 install download zookeeper cp zoo_sample.cfg zoo.cfg ...

2015-01-14 · 2 min · 425 words · -