리눅스 파일지우는 명령어

서버에 디렉토리 안에 파일이 너무 많으면  시스템이 느려지므로 파일을 지워야할 경우가 생긴다. 그래서 파일을 지우려고 rm *.* 명령을 날리면 파일이 너무많아서 지울 수 없다는 에러가 나오는 경우가 있다.

그런 경우 파일을 일정부분씩 지우면 되는데, 나는 아래와 같은 방법을 사용했다.

ll | grep 파일부분이름 | grep _201601 | awk ‘{print $9}’ | xargs rm

find ./ -type f -name BM*_2015*.xml | grep /DbRecv/ | awk ‘{print $1}’ | xargs rm

참고로 디렉토리별 용량보는 명령어

du -sh *

 

window.open 변수넘길때, post방식으로 하기

 

1) GET방식

/* get */
window.open(URL + "&" + encodeURI($.param(params, true)), "popup_id", 'height=' + 650  + ',width=' + 1024 + 'fullscreen=yes');

 

2) POST방식

/* post */
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", url);
form.setAttribute("target", "popup_id");

var input = document.createElement('input');
input.type = 'hidden';
input.name = "변수1";
input.value = "변수값1";
form.appendChild(input);

input = document.createElement('input');
input.type = 'hidden';
input.name = "변수2";
input.value = "변수값2";
form.appendChild(input);

input = document.createElement('input');
input.type = 'hidden';
input.name = "변수3";
input.value = "변수값3";
form.appendChild(input);

document.body.appendChild(form);

if( /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) ){
	window.open(url, "popup_id");
}else{
	window.open(url, "popup_id", "resizable=yes,toolbar=yes,menubar=yes,location=yes");
}

form.submit();

document.body.removeChild(form);

 

실수연산 문제

자바스크립트로 실수연산할 때, 괴상망측한 값이 나오는 경우를 확인함

707.4+226.2 = 933.5999999999999

보통의 경우는 값 * 100 / 100.0 을 하면 해결되지만, 확실한 건 아니므로

값 * E / E 를 사용하도록 하자.

var E = Number('1e' + 1);
var sum =  (parseFloat(707.4) + parseFloat(226.2))*E/E

**참고블로그
영이블로그 – 실수연산문제 (http://sunychoi.github.io/javascript/2015/04/05/javascript-float-type-error.html)

 

 

mysql recusive query

[ppas query]

WITH RECURSIVE help_page(help_id, help_name, help_page, help_tag, help_main_key, help_sub_key, help_location, parent_id, show_type, depth_level, menu_seq) AS (
SELECT
hm.help_id, hm.help_name, hm.help_page, hm.help_tag, hm.help_main_key, hm.help_sub_key, concat(hm.help_name) as help_location, hm.parent_id, hm.show_type, 0 as depth_level, lpad(concat(hm.menu_seq),3,'0') as menu_seq
FROM tb_m00s22_help_meta hm
WHERE hm.parent_id is null or hm.parent_id = '' 
UNION ALL
SELECT
hm.help_id, hm.help_name, hm.help_page, hm.help_tag, hm.help_main_key, hm.help_sub_key, hp.help_location || ' > ' || concat(hm.help_name) as help_location, hm.parent_id, hm.show_type, depth_level + 1 as depth_level, hp.menu_seq || '-' || lpad(concat(hm.menu_seq),3,'0') as menu_seq
FROM tb_m00s22_help_meta hm
INNER JOIN help_page AS hp ON hm.parent_id = hp.help_id
)
SELECT *
FROM help_page
ORDER BY menu_seq

 

[mysql query]

select original_value as help_id, help_location, depth_level, menu_seq
from (
	select @ov as original_value, help_id, help_location, depth_level, menu_seq
	from (
		select t.help_id as help_id, @pv:=t.parent_id as parent_id, t.help_name
			   , @pv2:=(case when @pv2 = '' then concat(t.help_name,@pv2) else concat(t.help_name,' > ',@pv2) end) as help_location
			   , (@rownum := @rownum+1) as depth_level
			   , @menu_seq:=(case when @menu_seq = '' then concat(t.menu_seq,@menu_seq) else concat(t.menu_seq,'-',@menu_seq) end) as menu_seq
		from (select help_id, parent_id, help_name, lpad(concat(menu_seq),3,'0') as menu_seq from tb_m00s22_help_meta order by help_id desc LIMIT 100000) t
			 join (select @ov:='H300020006', @pv:='H300020006', @pv2:='', @rownum:=-1, @menu_seq:='' ) tmp
		where t.help_id = @pv
	) tt
	order by help_id asc
	limit 1
) ttt

** mysql은 subquery에서 orderby를 했는데, 외부로 나오면 다시 orderby가 원복된다.
limit를 사용하면 정렬이 유지된다.
https://mariadb.com/kb/en/library/why-is-order-by-in-a-from-subquery-ignored/

[select query]

select
	help_id, help_name, help_page, help_tag, help_main_key, help_sub_key, FN_SPLIT(help_data,'|',1) as help_location, parent_id, show_type, FN_SPLIT(help_data,'|',2) as depth_level, FN_SPLIT(help_data,'|',3) as menu_seq
from (
select help_id, help_name, help_page, help_tag, help_main_key, help_sub_key, parent_id, show_type,FN_GET_HELP_DATA(help_id) as help_data from tb_m00s22_help_meta
) t

[mysql function]

DELIMITER $$
CREATE DEFINER=`poswork`@`%` FUNCTION `FN_GET_HELP_DATA`(pv_help_id varchar(50)) RETURNS varchar(1000) CHARSET utf8
    DETERMINISTIC
BEGIN
        DECLA RE v_pv_help_id      varchar(50);
	DECLA RE v_ori_help_id     varchar(500);
        DECLA RE v_help_location   varchar(500);
        DECLA RE v_depth_level     varchar(500);
        DECLA RE v_menu_seq        varchar(500);
        DECLA RE v_rtn_value       varchar(1000);
	DECLA RE EXIT HANDLER FOR NOT FOUND RETURN null;
        
        SET v_pv_help_id = pv_help_id;
		
        IF v_pv_help_id IS NULL OR v_pv_help_id = '' THEN
                RETURN null;
        END IF;

		select original_value as help_id, help_location, depth_level, menu_seq
        INTO v_ori_help_id,v_help_location,v_depth_level,v_menu_seq
		from (
			select @ov as original_value, help_id, help_location, depth_level, menu_seq
			from (
				select t.help_id as help_id, @pv:=t.parent_id as parent_id, t.help_name
					   , @pv2:=(case when @pv2 = '' then concat(t.help_name,@pv2) else concat(t.help_name,' > ',@pv2) end) as help_location
					   , (@rownum := @rownum+1) as depth_level
					   , @menu_seq:=(case when @menu_seq = '' then concat(t.menu_seq,@menu_seq) else concat(t.menu_seq,'-',@menu_seq) end) as menu_seq
				from (select help_id, parent_id, help_name, lpad(concat(menu_seq),3,'0') as menu_seq from tb_m00s22_help_meta order by help_id desc LIMIT 100000) t
					 join (select @ov:=v_pv_help_id, @pv:=v_pv_help_id, @pv2:='', @rownum:=-1, @menu_seq:='') tmp
				where t.help_id = @pv
			) tt
			order by help_id asc
			limit 1
		) ttt;
		
		SET v_rtn_value = concat(v_help_location,'|',v_depth_level,'|',v_menu_seq);

	RETURN v_rtn_value;
    
END$$
DELIMITER ;

 

[split function]

DELIMITER $$
CREATE DEFINER=`poswork`@`%` FUNCTION `FN_SPLIT`(srcvalue varchar(500), split_char varchar(50), split_index int) RETURNS varchar(500) CHARSET utf8
    DETERMINISTIC
return if(srcvalue is null or srcvalue = '',null,substring_index(substring_index(srcvalue,split_char,split_index),split_char,-1))$$
DELIMITER ;

 

 

ajax post 실행시 content length가 2Mb 이상일 때, 서비스실패(파라미터가 null)

문제점 : Ajax로 post요청을 was로 날렸는데 서비스실패가 일어남
Was로그에서 확인해보니, controller에서 서비스는 인식하는데, 파라미터값을 null로 인식함

해결방법 : Ajax로 실행할 때, 컨텐츠데이터가 2Mb가 넘어가면 서비스가 실패함을 확인

https://docs.jboss.org/jbossweb/2.1.x/config/http.html
JBOSS에서 webservice post요청일 때, 용량을 제한하는 설정이 있으며, 디폴트로 2MB(2097152)로 되어 있음

웹서버에서 maxPostSize설정을 추가함
<connector name=”ajp” protocol=”AJP/1.3″ scheme=”http” socket-binding=”ajp” max-post-size=”5000000″/>

javascript underscore library _.defer() sample

function gogogo(arg,scope) {
document.write(scope + arg + ‘<br />’);
}

var ori = “AAA”;
var dest = “BBB”;
gogogo(“first”,ori);

setTimeout(function() {
gogogo(“setTimeout”,ori);
},1);

_.defer(function() {
gogogo(“defer”,ori);
setTimeout(function() {
gogogo(“setTimeout2”,ori);
},1);
ori = dest;
});

gogogo(“last”,ori);

결과 :

AAAfirst
AAAlast
AAAsetTimeout
AAAdefer
BBBsetTimeout2

 

테스트:
https://jsfiddle.net/7t2bV/59/

Dexie.js(indexedDB) IE에서 속도느림현상

크롬(version57)과 익스11에서 dexie 성능테스트

익스11에서는 너무 느리다.

Dexie.js 정보
http://dexie.org/docs/Dexie.js.html

jsfiddle.net에서 소스 시뮬레이션
https://jsfiddle.net/xf2zrL4p/77/

소스실행시에 익스에서는 Promise is undefine에러가 발생하므로, bluebird.js 를 넣는다.

<script src=”https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.3.5/bluebird.min.js”></script>

 

참고 웹사이트

https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/offline-for-pwa?hl=no

http://programmingsummaries.tistory.com/325