第二世

策马江湖的程序世界.

解决有乱码与换行问题的文件

| Comments

话说windows与其他系统相处说会有那么些不和谐的事——乱码与换行(自行百科),下面实例记录一下解决办法.

Office Excel里的一些数据(直接复制过来):

1
2
3
4
5
6
7
8
9
10
曼谷   3049072 泰国  亚洲
清迈    2941909 泰国  亚洲
普吉岛 2914508 泰国  亚洲
首尔    2479881 韩国  亚洲
东京    2144100 日本  亚洲
新加坡 1803367 新加坡   亚洲
大阪    1513988 日本  亚洲
亚庇    1503552 马来西亚    亚洲
济州岛 1235938 韩国  亚洲
马累    1223937 马尔代夫    亚洲

直接另存为csv文件

在Terminal下打开显示乱码

1
Âü¹È;3049072;Ì©¹ú;ÑÇÖÞ^MÇåÂõ;2941909;Ì©¹ú;ÑÇÖÞ^MÆÕ¼ªµº;2914508;Ì©¹ú;ÑÇÖÞ^MÊ׶û;2479881;º«¹ú;ÑÇÖÞ^M¶«¾©;2144100;ÈÕ±¾;ÑÇÖÞ^MмÓÆÂ;1803367;мÓÆÂ;ÑÇÖÞ^M´óÚæ;1513988;ÈÕ±¾;ÑÇÖÞ^MÑDZÓ;1503552;ÂíÀ´Î÷ÑÇ;ÑÇÖÞ^M¼ÃÖݵº;1235938;º«¹ú;ÑÇÖÞ^MÂíÀÛ;1223937;Âí¶û´ú·ò;ÑÇÖÞ

iconv直接一步搞定乱码

1
iconv -f GB18030 -t UTF8 test.csv > test1.csv

再次打开后乱码的问题没有了

1
曼谷;3049072;泰国;亚洲^M清迈;2941909;泰国;亚洲^M普吉岛;2914508;泰国;亚洲^M首尔;2479881;韩国;亚洲^M东京;2144100;日本;亚洲^M新加坡;1803367;新加坡;亚洲^M大阪;1513988;日本;亚洲^M亚庇;1503552;马来西亚;亚洲^M济州岛;1235938;韩国;亚洲^M马累;1223937;马尔代夫;亚洲

等等,为什么变成一行了?还多了一个^M是什么?原来是换行符导致的

这次用VIM的替换命令吧

1
%s/^M/^M/g

第一个^M的输入是依次按下Ctrl+vCtrl+M,第二个^M的输入是依次按下Ctrl+v换行键,

再看一下:

1
2
3
4
5
6
7
8
9
10
曼谷;3049072;泰国;亚洲
清迈;2941909;泰国;亚洲
普吉岛;2914508;泰国;亚洲
首尔;2479881;韩国;亚洲
东京;2144100;日本;亚洲
新加坡;1803367;新加坡;亚洲
大阪;1513988;日本;亚洲
亚庇;1503552;马来西亚;亚洲
济州岛;1235938;韩国;亚洲
马累;1223937;马尔代夫;亚洲

大功告成!

进一步了解LXC

| Comments

LXC是什么

LXC is the well known set of tools, templates, library and language bindings. It’s pretty low level, very flexible and covers just about every containment feature supported by the upstream kernel ——linuxcontainers.org

LXC是Linux Containers的简称,是一种基于容器操作系统级轻量级的虚拟化技术,相对于其他的虚拟化方案(如VMWare、Xen等硬件抽象级的),LXC的虚拟化开销小的多,能更大程度地利(zha)用(gan)宿主服务器的资源,因此得到许多公司的青睐,笔者当前就职公司就是其中之一

另外,当前比较流行的Docker就是基于LXC(Docker被用来管理LXC环境)

关于本文

本文源于14年年初笔者在部门内做的一次分享——《LXC与虚拟化》,重新整理了一下,发上来充个数,欢迎各位看官留言或邮件交流指点

本文不是一篇介绍LXC如何安装与使用的文章,而是介绍LXC背后的一些东西(rootfs、cgroup、namespace)、这些东西在linux系统中的使用以及LXC中如何实现的

Pig编程实践

| Comments

简介

Hadoop这个名词的火起让不少人恨不得马上安装好环境小试身手一番,虽然Map/Reduce应用程序并不十分复杂,但是仍然需要一些开发经验并且开发效率不高,Pig就是在这样的一种情况下诞生的,作为Hadoop生态环境比较高的一层,其由Pig Latin和运行Pig Latin程序的环境组成,提供易于编程、自动优化、可扩展等特性以提高开发效率,如:Twitter数据分析的80%以上的代码都是由Pig产生

背景

笔者使用Pig也仅仅数月。以移动APP应用的分析统计为例写下这篇入门级的实例,仅为了对阶段性的工作/学习做一个总结。如果能让刚接触Pig的同学从中受益或者能得到高手的指点,则荣幸之至

开胃菜

先以一个简单的程序来开始吧——统计每天的启动次数

1
2
3
4
5
6
7
8
9
start_log = load 'yidong.event_start' USING org.apache.hcatalog.pig.HCatLoader();
day_start_log = filter start_log by dateline == '$date';

day_start_d = foreach day_start_log generate appid,channel,platform,1 as start_num;
start_g = group day_start_d  by (appid,channel,platform);
start_gd = foreach start_g  generate FLATTEN(group),SUM(day_start_d.start_num) as start_num;
start_save_d = foreach start_gd generate appid,channel,platform,start_num;

STORE start_save_d INTO '/tmp/start_result' using PigStorage('\t');

PHP编译过程常见错误&解决方法

| Comments

环境

  • Ubuntu 12.04 x86_64
  • php5.6.9

错误提示&解决方法

xml2-config not found. Please check your libxml2 installation.

1
sudo apt-get install libxml2-dev

Cannot find OpenSSL’s <evp.h>

1
sudo apt-get install libcurl4-openssl-dev

Web安全那些事儿

| Comments

安全原则

  • Secure By Default
    • 白名单/黑名单
    • 最小权限
  • 纵深防御
    • 不同层面、不同角度
  • 数据与代码分离
  • 不可预测性

    使用加密算法、随机数、哈希算法对敏感数据进行处理,以使其不可预测

Python基础笔记

| Comments

实用函数

开发调试之必备

  • id() 返回对象的唯一身份标识
  • type() 返回对象的类型
  • dir() 显示对象的属性(没有参数显示全局变量)

Vim正则替换一例

| Comments

Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$result = array(
    0,
    $v['user'] ? round($v['day1']/$v['user'], 4) * 100 : 0;
    $v['user'] ? round($v['day2']/$v['user'], 4) * 100 : 0;
    $v['user'] ? round($v['day3']/$v['user'], 4) * 100 : 0;
    $v['user'] ? round($v['day4']/$v['user'], 4) * 100 : 0;
    $v['user'] ? round($v['day5']/$v['user'], 4) * 100 : 0;
    $v['user'] ? round($v['day6']/$v['user'], 4) * 100 : 0;
    $v['user'] ? round($v['day7']/$v['user'], 4) * 100 : 0;
    $v['user'] ? round($v['day14']/$v['user'], 4) * 100 : 0;
    $v['user'] ? round($v['day30']/$v['user'], 4) * 100 : 0;
);

需求

将Demo中的所有$v[‘dayN’]替换为($v[‘user’] – $v[‘dayN’])(其中N为1,2,3,4,5,7,14,30这几个数字)