Write the Code. Change the World.

分类目录
10月 08

去掉bom的perl脚本

#!/usr/bin/perl
@file=;
$file[0] =~ s/^\xEF\xBB\xBF//;
print(@file);

转换编码的iconv命令

下载地址
http://gnuwin32.sourceforge.net/packages/libiconv.htm
还需要这个,否则会报少dll文件
http://downloads.sourceforge.net/project/gnuwin32/make/3.81/make-3.81-dep.zip?r=http%3A%2F%2Fgnuwin32.sourceforge.net%2Fpackages%2Fmake.htm&ts=1295607625&use_mirror=surfnet
把make-3.81-dep.zip中bin目录里的libintl3.dll拷贝到iconv.exe所在目录下

#查看支持的编码
iconv -l
#转换编码
iconv -f utf-8 -t gbk utf8.csv.rbom gbk.csv

完整的命令

removebom.pl utf8bom.csv utf8.csv.rbom && iconv -f utf-8 -t gbk utf8.csv.rbom gbk.csv
8月 05

一般操作excel 有两种方式,
一种是画好表格了,填固定的空,这种情况直接找到格子,填入就行了
另外一种是只画好表头了,但实际表内容的行数是不固定的,需要程序根据数据的实际行数来添加行。
这种加行在 XSSF模式下,直接写入单元格会报错。要先加行,再加单元格,再写入,才可以。

public class ExcelUtil {
    private XSSFWorkbook wb = null;

    public void OpenXLSXFile(String FilePath) throws IOException {
        InputStream ExcelFileToRead = new FileInputStream(FilePath);
        wb = new XSSFWorkbook(ExcelFileToRead);
    }

    public void CreateRow(String SheetName, int rownum) {
        Sheet 
8月 05

1 问题

由于网络架构升级,原有http直接访问java 容器(jboss),变成https 访问haproxy 由haproxy 通过http再调用 java 容器。
实际测试发现一个问题,之前项目中使用response.sendRedirect("http://aaa.aaa/aaa");这种方式设置绝对路径跳转的,通过https代理到https访问后都无法访问了,因为jboss访问是http,因此应用拼接的绝对路径也是http的

2 分析

尝试解决,将绝对路径改为相对路径response.sendRedirect("/aaa"),发现没有效果,抓包看http应答的hearder location还是发送了绝对路径http://aaa.aaa/aaa。
搜索发现原因是由于旧版的http1.1协议不允许location头使用相对路径,因此容器在实现response.sendRedirect时自动做了补全绝对路径。
详见:
Can a redirect to relative path be sent from Java Servlet API?
https://stackoverflow.com/questions/30844807/can-a-redirect-to-relative-path-be-sent-from-java-servlet-api
原因是http1.1必须是一个完整的uri,但在rfc 7231更新时已经允许相对url了

An obsolete version of the HTTP 1.1 …

7月 26

我要在腾讯云申请亚信的免费证书,把验证文件直接放到了jboss 的welcome-content目录,但是亚信验证时报应答没有Content type,搜了一下说welcome-content的静态资源是没有Content type的,要换一种方式,用应用发布的方式来发布静态资源就正常了。
如下

  1. 停止jboss服务

  2. 修改配置文件stanalone.xml,将 enable-welcome-root 改为 false

    <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
      <configuration>
      <mime-mapping name="manifest" value="text/xml"/>
      </configuration>
    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
    <virtual-server name="default-host" enable-welcome-root="false">
    <alias name="localhost"/>
    </virtual-server>
    </subsystem>
  3. 在应用发布目录 创建一个 ROOT.war 文件夹
    然后照如下创建子目录和jboss-web.xml文件

               ROOT.war
               ROOT.war/WEB-INF
               ROOT.war/WEB-INF/jboss-web.xml

    编辑jboss-web.xml

4月 21

开机自动登录

运行 Control UserPasswords2
用户账号-勾选“要使用本计算机,用户必须输入用户名和密码”,确定
然后在来一遍把刚才的勾去掉。会弹出输入密码的框,输入用户名密码即可。

开机自动运行程序

运行 shell:startup
会打开开始菜单-启动文件夹,把程序的快捷方式拖进去即可

定时自动重启

步骤1

新建一个 restart.bat 批处理文件
填入下面的命令
shutdown -r -f -t 20
保存

步骤2

打开控制面板 搜索 计划任务
创建基本任务
随便起个名字
选每天运行
设置每天执行的时间
任务操作选启动程序
点浏览-选刚新建的 restart.bat
下一步
完成
即可

参考

Windows系统通过计划任务设置定时重启
https://help.aliyun.com/knowledge_detail/40818.html

4月 14

查看占内存最多的进程

ps auxw|head -1;ps auxw|sort -rn -k4|head -50

也可以top -c 然后按shift+m 看

修改宝塔自带的php-fpm配置

cd /www/server/php/56/etc/
cp php-fpm.conf php-fpm.conf.bk
vi php-fpm.conf
把这几个配置改小,主要是pm.max_children 最大进程数,不要太多,一个进程占50-60m内存
pm.max_children = 15
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
保存退出

重启php-fpm

/etc/init.d/php-fpm-56 restart

好啦

参考

3月 11

参考 sf的解答
https://stackoverflow.com/questions/1237286/how-can-i-compile-my-perl-script-so-it-can-be-executed-on-systems-without-perl-i

我是用的 Strawberry Perl
cpan -i PAR::Packer
就装好了

然后用pp编译即可
pp -o example.exe example.pl…

12月 24

超时设置

ftp = new FTPClient();
ftp.setDefaultTimeout(defaultTimeoutSecond * 1000);
ftp.setConnectTimeout(connectTimeoutSecond * 1000);
ftp.setDataTimeout(dataTimeoutSecond * 1000);

兼容windows iis ftp


public FTPClientConfig getFTPClientConfig() { String systemKey; if (isWinFtp) { systemKey = FTPClientConfig.SYST_NT; } else { systemKey = FTPClientConfig.SYST_UNIX; } // String systemKey =
12月 23

笔记本有有线和无线两个网卡,其中无线网卡是dhcp自动获得ip和dns设置,用来连接外网的,但我想通过有线网卡设置的内网dns服务器来进行dns解析。
可以通过调整网络服务访问网卡优先顺序来实现,如下:

调整网卡优先级

打开控制面板,依次进入“网络和Internet连接->网络和共享中心->管理网络连接”,打开网络连接窗口。按下Alt键,待该窗口上出现菜单栏后依次点击“高级/高级设置”,打开高级设置窗口。在“连接”列表中,需要使用的dns服务器设置所在的网卡挪到其他网卡上面。

通过nslookup 命令可以确认当前使用的dns服务器ip

刷新dns缓存

立刻生效还需要刷新windows系统的dns缓存

#查看
ipconfig /flushdns
#刷新
ipconfig /displaydns

其他

另外浏览器如chrome还有dns缓存,直接关掉重开就好了。

参考

多网卡使用优先顺序
http://kms.lenovots.com/kb/article.php?id=12300

Vista/Win7以上系统查看和清除本地DNS缓存新方法
https://www.cnblogs.com/yryz/archive/2012/02/13/2299756.html…

11月 18

默认是xfs文件系统
如果是xfs,收缩会损坏文件系统,导致文件丢失,要先备份。

mount 会报错 can't read superblock xfs
这时只能格式化了 mkfs.xfs -f /dev/mapper/centos-home

1、提前备份重要数据,xfs减小会导致数据丢失

备份可以用xfsdump,数据不大也可以备份到机器之外(此处略)

2、卸载卷/dev/mapper/cl-home

umount /home

3、减少卷/dev/mapper/cl-home大小(该步骤会导致数据丢失,请看第1点)

[root@localhost ~]# lvreduce -L 10G /dev/mapper/cl-home

WARNING: Reducing active logical volume to 10.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do …