Delly's Publisher

Delly's Personal Blog Website


    Tricks for awk

    需求: 一个文件内有多行,还有不定量的列,要求找出每行中最大的一个数字

    使用awk实现:

    cat list | awk '{max[NR]=0; for(n=1;n<=NF;n++) { if($n>max[NR]) max[NR]=$n; }}END{for(i=1;i<=NR;i++) print max[i]}'
    

    输入输出示范:

    $ cat list | awk '{max[NR]=0; for(n=1;n<=NF;n++) { if($n>max[NR]) max[NR]=$n; }}END{for(i=1;i<=NR;i++) print max[i]}'
    400
    9999
    1234
    1234
    1234
    $ cat list
    200 300 400 100
    123 2122 345 9999
    222 444 333 1234
    222 444 333 1234
    222 444 333 1234
    222 444 333 1234 <<<<<<< HEAD
    

    需求: 统计每个IP对HTTP server的请求数

    awk实现(这里假设access_log每行的第一列就是访问者的IP地址):

    awk ‘{array[$1]++}END{for(i in array){print i, “accessed “, array[i], “ times”}}’ access_log sort -gr head -20

    简单解释一下:在awk内部使用变量无需事先声明,如果变量是列表,那么列表的每个新的元素的值会默认设置为0。而awk又是流处理器,前面的部分相当于对每行进行操作,得到的数组就会是array[123.123.123.123]=1这种形式。在END块里直接用一个循环输出列表中的每个元素就能得到每个IP访问了多少次了。

    ======= 222 444 333 1234

    7e6037e695c33df0c7e4f6ff16a138401b41d4a6

    Read More...



    在vim中配置Markdown Preview插件

    Vim可以算是我的主力文本编辑器,这东西上手之后是一个非常好用的工具。Vim适合写市面上大部分的开发语言和脚本,当然用来写Markdown也是非常合适的,或者说越来越合适了。

    相比较其他五花八门的Markdown编辑器,他们的书写体验都不是很好,基本上就是一个记事本加上了预览功能,但是他们共同比Vim强的一点就是:支持实时预览。今天我就要为Vim加上实时预览的功能。

    首先看一下效果,非常漂亮。感谢此开源项目的作者iamcco。

    MarkdownPreview

    本文以Win10环境为例,Linux/Mac用户请根据实际情况调整其中的参数


    第一部分:安装junegunn/vim-plug

    这是一个用来管理Vim插件的一个插件。直接把github上的项目名称配置进去,这个插件就可以通过一条命令直接下载项目,并且安装到Vim里。如果插件有更新,也可以通过一条命令直接更新全部插件,非常好用。我们用到的这个Markdown插件也是通过这个vim-plug来安装的。

    Read More...



    Java中位运算相关测试

    Java中位运算相关测试


    layout: post title: “Java中位运算相关测试” description: “” category: [“Coding”] —

    对应的代码注释如下

    package com.dellyqiao;
    
    import java.util.Arrays;
    
    public class TestBinary {
    	public static void main(String[] args) {
    		System.out.println(51&5);
    		System.out.println(51|5);
    		System.out.println(51^5); //按位取值对比,不同为1,相同为0,可用来翻转某几位(1),用0保留原值
    		//变量交换值 (a^a0b^b0。而数字^0为原数字。所以
    		//a^b为中间值,新b=中间值^b,新a=中间值^a)
    		int a = 51;
    		int b = 5;
    		a=a^b;
    		b=a^b;
    		a=a^b;
    		System.out.println(a + " " + b);
    		
    		System.out.println(~0 + " " + ~1); //取反,每一位取反
    		System.out.println(2<<1); //左移。二进制位全部左移,左边二进制位丢弃,右边补0
    		//若舍弃的高位不包含1,则每左移一位,相当于乘以2
    		System.out.println(-14<<2);
    		
    		System.out.println(4>>2); //右移。正数左补0,负数左补1,右边丢弃。
    		//每右移一位,相当于该数除以2
    		System.out.println(-14>>2);
    		
    		System.out.println(-14>>>2);//无符号右移。左补0,右丢弃
    		
    		System.out.println(Integer.toBinaryString(112)); //转二进制
    		System.out.println(Integer.toHexString(112)); //16进制
    		System.out.println(Integer.toOctalString(112)); //8进制
    		
    		System.out.println(Integer.parseInt("111001", 2)); //二进制转10进制
    		System.out.println(Integer.parseInt("27", 8)); //八进制转十进制
    		System.out.println(Integer.parseInt("1A", 16)); //16进制转十进制
    		
    		
    		//int转为byte[]
    		int id = 8143;
    		byte[] arr = new byte[4];
    		arr[0] = (byte)((int)(id >> 0*8) & 0xff);
    		arr[1] = (byte)((int)(id >> 1*8) & 0xff);
    		arr[2] = (byte)((int)(id >> 2*8) & 0xff);
    		arr[3] = (byte)((int)(id >> 3*8) & 0xff);
    		
    		System.out.println(arr[0] +"," + arr[1] + "," + arr[2] + "," + arr[3]);
    		
    		
    		//byte[]转为int
    		int rs0 = (int)((arr[0] & 0xff) << 0*8);
    		int rs1 = (int)((arr[1] & 0xff) << 1*8);
    		int rs2 = (int)((arr[2] & 0xff) << 2*8);
    		int rs3 = (int)((arr[3] & 0xff) << 3*8);
    		System.out.println(rs0 + rs1 + rs2 + rs3);
    		
    		//字符串与字节
    		String describe = "你好世界";
    		byte[] barr = describe.getBytes();
    		System.out.println(Arrays.toString(barr));
    		String des = new String(barr);
    		System.out.println(des);
    		
    	}
    }
    
    Read More...



    如何配置WAS服务跟随系统启动

    默认情况下,WAS应用服务器,NodeAgent等等WAS服务是不会跟随系统自动启动的。本文将介绍如何配置WAS使其服务跟随系统启动。

    WAS自动启动有两种方法,首先介绍第一种方法:

    配置WAS服务器跟随NodeAgent/Node自动启动

    1. 登录到管理控制台。
    2. 跳转到Servers > Server Types > WebSphere application servers。
    3. 找到希望自启动的服务器,跳转到其配置界面,打开Java and Process Management,点击Monitoring Policy,如下图:

      http://dellyqiao.qiniudn.com/2016%2F05%2F10%2Fautostart_1.png

    4. 勾选Automatic restart,并且配置“Node restart state”为“RUNNING”。如图:

      http://dellyqiao.qiniudn.com/2016%2F05%2F10%2Fautostart_2.png

    这样当NodeAgent/Node启动的时候,应用服务器也会自动启动。但是很明显,想要让这种方法生效,前提是NodeAgent/Node必须可以跟随操作系统启动。所以接下来我们需要继续配置:

    Read More...



    如何在IBM WAS上配置主从集群

    如题,如何在IBM WAS(WebSphere Application Server)上配置主从集群呢?

    一个典型的基于IBM中间件的生产环境网站系统包含这几个部分:

    1. 前端的LoadBalancer(软件或者硬件)
    2. IBM HTTP Server集群(处理静态内容,通过前端的LoadBalaner分发请求到多个节点上)
    3. IBM WebSphere Plugin(安装在IBM HTTP Server所在的主机上,用来把动态请求转发到后端的IBM WebSphere Application Server服务器集群上)
    4. WAS服务器
    5. 后端的DB服务器

    WAS集群实际上分两种情况,一种是使用了ND(Network Deployment)版本的,另一种是使用了Base版的。我们分别来探讨。

    Read More...



    基于IP地址和基于hostname的两种批量配置Apache虚拟主机的方法

    本文介绍如何从头开始为Apache配置多个虚拟主机。

    Apache可以通过三种方式实现在同一台物理机上配置多个虚拟主机:

    1. 基于不同的端口号
    2. 基于不同的IP地址
    3. 基于不同的hostname

    本文介绍2和3。

    注意:本文环境是Suse Linux,安装的Apache也是由Novell公司的Suse源里提供的Apache2.2。Apache的默认配置、文件的路径之类的可能会与其它版本的Apache有所不同,所以此文仅供参考。但是配置方法适用于所有2.2的Apache。

    Read More...



    Troubleshooting for Mobile APP intermittently slowness issue

    本文记录一次问题诊断的过程。

    问题描述

    如题,基于移动设备客户端的应用,其中一个获取人员列表的功能时快时慢。在测试过程中,100次中大概有10次移动客户端会出现timeout的错误。(timeout是在Mobile APP上设置的,Mobile APP设置的timeout值是30秒)

    Read More...



    Solve IBM Console menu missing issue

    1. Stop dmgr

       #under dmgr/bin: 
       ./stopManager.sh -username <user_name> -password <password>
      
    2. Clear these folders

       <dmgr_profile_root>/temp
       <dmgr_profile_root>/wstemp
       <dmgr_profile_root>/config/temp
      
    3. Under /usr/IBM/WebSphere/AppServer/bin

       ./iscdeploy.sh -restore
      
    4. Restart dmgr and see if everything is alright

       ./startManager.sh
      
    5. If problem still persists, please run

       <dmgr_profile>/bin/wsadmin.sh -conntype NONE -f deployConsole.py remove
       <dmgr_profile>/bin/wsadmin.sh -conntype NONE -f deployConsole.py install
      
    6. Restart dmgr to test.

    Read More...



    DoubleTake replication via command line

    废话不多说,DoubleTake文件传输的命令行配置方法如下:

    d:\DoubleTake>DTCL.exe -i
    
    Command:  logon 10.52.21.51 csc_mcs "********"
      User access level set to DT_FULL_ACCESS
    Command:  logon localhost csc_mcs "********"
      User access level set to DT_FULL_ACCESS
    //上面两条命令时登陆源服务器和目标服务器,确保用户访问权限是“DT_FULL_ACCESS",如果是别的字样,说明权限有问题,需要把账户添加到"Double-Take Admin"这个组。  
    
    Command:  source localhost
    Command:  target 10.52.21.51
    //指定源服务器和目标服务器。数据会从源到目标,如果设置错误,后果很危险。
    
    Command:  repset create newrep
    //创建一个新的replication set,也就是要同步的数据集。
    Command:  repset rule add "d:\" include to newrep
    Command:  repset rule add "d:\DoubleTake" exclude to newrep
    //为这个数据集添加规则,比如我就是需要同步D盘下所有文件,但是不要同步D:\DoubleTake这个目录。
    Command:  repset save
    Command:  repset list
      - List of rep sets -
      newrep                                              disabled
    
    Command:  connect newrep to 10.52.21.51 map exact
    //建立连接,连接之后数据就会开始传输了。
    //注意上面的map exact代表完全按照路径去映射,比如源路径是d:\,那么文件也会传到目标服务器的d:\。
    //当需要映射到不同的目标时,使用这个命令:
    //connect datafile to 10.52.21.57 map d:\ to e:\
    
    Command:  status con 1
      - Status for connection 1 -
      Time established:                 08/17/2015 13:59:07.473
      Replication set:                  newrep
      Target machine:                   10.52.21.51
      Target state:                     Mirror Required
      Mirror bytes transferred:         0
      Mirror bytes transmitted:         0
      Mirror bytes in queue:            0
      Replication bytes transferred:    2040
      Replication bytes transmitted:    2040
      Replication bytes in queue:       0
    //这个命令可以看到当前这个链接的状态。一般来说建立的第一个链接编号就是1.
    
    Command:
    

    附上一份DoubleTake命令指南: DoubleTake Command Guide

    Read More...



    解决应用部署失败的问题

    症状:

    遇到应用无法部署的问题,提示已存在相同的应用名。在profile的installedApps下面没有发现这个应用,从IBM控制台上也无法找到任何关于这个应用的信息。

    解决办法:

    到DMGR的配置文件夹下: D:\IBM\WebSphere\AppServer\profiles\Dmgr01\config\cells\CTGQ3APP05Cell01

    有两个文件夹:blas 和 cus,这两个文件夹下面有跟应用名一致的folder,删掉它们重新部署就可以了。

    Read More...