2016. 4. 25. 16:59 Game
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | function _setCookie(sName, sValue, nDDay){ var expire = new Date(); expire.setDate(expire.getDate() + nDDay); var oCookie = sName + "=" + sValue + "; path=/ "; if(typeof nDDay != "undefined"){ oCookie += ";expires=" + expire.toGMTString() + ";"; } document.cookie = oCookie; } function _getCookie(sName){ sName = sName + '='; var cookieData = document.cookie; var start = cookieData.indexOf(sName); var sValue = ''; if(start != -1){ start += sName.length; var end = cookieData.indexOf(';', start); if(end == -1)end = cookieData.length; sValue = cookieData.substring(start, end); } return sValue; } |
[Game] Javascript로 따라 만들어 본 Swipe Bricks (0) | 2016.04.20 |
---|
2016. 4. 20. 15:57 Game
한 동안 일에 치여 살다가,
오랜만에 취미로다가-
Swipe Bricks 라는 게임을 즐겨하던 중,
따라 만들기에 크게 어렵지 않겠는데? 라는 생각으로 시작해서
이틀 꼬박 걸린 것 같은?
순수 Javascript로만 개발했는데-
내가 막 그렇게 꼼꼼한 사람도 아니고, 완벽주의 이런 거 따윈 없는지라-
소소하게 버그가 존재하는 듯하지만..
요런 게임 하나씩 개발해서 모아보는 것도 좋을 것 같음,
[Game] 두 번째 아이.. (0) | 2016.04.25 |
---|
2015. 5. 4. 20:42 Html/CSS/Javascript
Excel Export 기능은 자주는 아니지만 간간히 필요할 때가 있다-
자주가 아니기 때문에 쓸 때마다 검색에 의존하고..
점점 쉬운 방법을 찾아간다-
이전에 POI를 이용한 Excel 관련 포스팅을 한 기억이 있는데- 이 방법이 훨씬 직관적이고 쉬운 것 같다-
아, 물론 단점이 존재한다-
글자 크기라던가- 뭐.. 여튼 이런저런 서식을 전혀 이용하지 못한다-
(내가 검색을 잘 못해서 그런 걸 수도 있고-)
각설하고-
코드 들어간다-
<script type="text/javascript" src="/js/excel/xlsx.core.min.js"></script> <script type="text/javascript" src="/js/excel/Blob.js"></script> <script type="text/javascript" src="/js/excel/FileSaver.js"></script>
요 위에 세개의 js 파일을 넣고- 밑에 처럼..
var data = new Array(); var row = new Array(); row.push('val1'); row.push('val2'); row.push('val3'); data.push(row); var ws_name = 'Work Sheet1'; var wb = new Workbook(); var ws = sheet_from_array_of_arrays(data); wb.SheetNames.push(ws_name); wb.Sheets[ws_name] = ws; var wb_out = XLSX.write(wb, {bookType:'xlsx', bookSST:true, type:'binary'}); saveAs(new Blob([s2ab(wb_out)], {type:'application/octet-strean'}, 'File_Name.xlsx');
굉장히 간단하다-
아마 코드만 봐도 다 이해가 될 듯-
Ajax beforeSend, 로딩 시 화면 (0) | 2014.08.22 |
---|---|
구글 지도 API (0) | 2014.08.13 |
PPT, PDF preview, gdocsViewer (0) | 2014.08.10 |
WYSIWYG 에디터, summernote (0) | 2014.08.10 |
2015. 3. 27. 12:23 Summary of/Real MySQL
16.1 임의(랜덤) 정렬
16.1.1 지금까지의 구현
16.1.2 인덱스를 이용한 임의 정렬
mysql> SET @random_base = floor((rand() * 10000000));
mysql> SELECT * FROM ( (SELECT * FROM tb_number WHERE rand_val >= @random_base ORDER BY rand_val ASC LIMIT 30) UNION ALL (SELECT * FROM tb_number WHERE rand_val < @random_base ORDER BY rand_val DESC LIMIT 30) )tb_rand ORDER BY RAND() LIMIT 30; |
16.2 페이징 쿼리
6.2.1 지금까지의 방법
CREATE TABLE tb_article( board_id INT NOT NULL, article_id INT NOT NULL AUTO_INCREMENT, article_title VARCHAR(100) NOT NULL, … PRIMARY KEY(article_id), INDEX ix_boardid(board_id, article_id) ); |
SELECT * FROM tb_article WHERE board_id=1 ORDER BY article_id DESC LIMIT n, m; |
16.2.2 불필요한 접근을 제거하기 위한 페이징
SELECT * FROM tb_article WHERE board_id=1 AND article_id < 165 ORDER BY article_id DESC LIMIT 0, 20; |
16.3 MySQL 에서 시퀀스 구현
16.3.1 시퀀스용 테이블 준비
MySQL에서 시퀀스 구현하기
CREATE TABLE mysql_sequences( seq_name VARCHAR(10) NOT NULL, seq_currval BIGINT UNSIGNED NOT NULL, PRIMARY KEY(seq_name) )ENGINE = MyISAM |
16.3.2 시퀀스를 위한 스토어드 함수
INSERT INTO mysql_sequences SET seq_name=’시퀀스이름’, seq_currval=(@v_current_value:=1) ON DUPLICATE KEY UPDATE seq_currval=(@v_current_value:=seq_currval+1); |
SELECT @v_current_value AS nextval; |
위의 내용을 조금더 개선하면 …
DELIMITER ;;
CREATE FUNCTION nextval() RETURNS BIGINT UNSIGNED MODIFIES SQL DATA SQL SECURITY INVOKER BEGIN INSERT INTO mysql_sequences SET seq_name=’시퀀스이름’, seq_currval=(@v_current_value:=1) ON DUPLICATE KEY UPDATE seq_currval=(@v_current_value:=seq_currval+1);
RETURN @v_current_value; END |
SELECT nextval(); |
on duplicate key로 값을 조회하는것도 좋지만 위의 예제처럼 스토어드 함수로 캡슐화하면 실수를 조금 더 줄일 수 있어
16.3.3 여러 시퀀스 처리하기
DELIMITER ;;
CREATE FUNCTION nextval(p_seq_name CHAR(10) CHARSET latin1) RETURNS BIGINT UNSIGNED MODIFIES SQL DATA SQL SECURITY INVOKER BEGIN INSERT INTO mysql_sequences SET seq_name=IFNULL(p_seq_name, ‘DEFAULT’), seq_currval=(@v_current_value:=1) ON DUPLICATE KEY UPDATE seq_currval=(@v_current_value:=seq_currval+1);
RETURN @v_current_value; END |
SELECT nextval(‘ARTICLE’); |
16.3.4 시퀀스 사용 시 주의사항
SELECT NEXTVAL(); /*여기서 가져온 값이 16이라고 가정 */ INSERT INTO tb_article(article_id, …) VALUES( 16, …); |
16.4 큰 문자열 칼럼의 인덱스(해시)
16.5 테이블 파티션
16.6 SNS 의 타임라인 구현
16.6.1 예제 시나리오
|
16.6.2 인덱스 테이블 사용
16.6.3 Try & Fail 쿼리
SELECT * FROM tb_article WHERE 작성자 IN (‘김세형’,’임현석’) AND 작성일시 > ? /* 검색 범위 시작 일시 */ AND 작성일시 <= ? /* 검색 범위 종료 일시 */ ORDER BY 작성일시 DESC LIMIT 20; |
16.7 MySQL 표준 설정
16.7.1 MySQL 표준 설정의 필요성
16.7.2 표준설정의 예시(p.948 참조)
16.8 복제를 사용하지 않는 MySQL의 설정
16.9 MySQL 복제 구축
16.9.1 MySQL 복제의 형태
16.9.2 확장(스케일 아웃)
16.9.3 가용성
16.9.4 복제가 구축된 MySQL 에서의 작업
SET sql_log_bin = OFF; ALTER TABLE employees ADD INDEX ix_lastname(lastname); SET sql_log_bin = ON; |
16.10 SQL 작성 표준
16.10.1 조인 조건은 항상 ON 절에 기재
SELECT * FROM employees e LEFT JOIN dept_manager dm WHERE e.first_name=’Smith’ AND dm.emp_no = e.emp_no |
16.10.2 테이블 별칭(Alias) 사용 및 칼럼 명에 테이블 별칭 포함
SELECT first_name, last_name FROM employees e INNER JOIN dept_manager dm ON dm.emp_no = e.emp_no WHERE first_name=’Smith’; |
16.10.4 FULL GROUP BY 사용
16.10.5 DELETE, UPDATE 쿼리에서 ORDER BY.. LIMIT.. 사용 자제
16.10.6 문자열 리터럴 표기는 홑따옴표만 사용
16.10.7 서브쿼리는 조인으로 변경
16.10.8 UNION [ALL] 은 사용 자제
16.10.9 스토어드 함수는 가능하면 DETERMINISTIC 으로 정의
16.10.10 스토어드 프로그램에서는 예외 처리 코드를 작성
16.10.11 UPDATE, DELETE 쿼리와 적용 건수(Affected row counts) 체크
16.10.12 숫자 값은 반드시 숫자 타입의 칼럼으로 정의
16.13 스키마 검토
SELECT table_schema, table_name, column_name, column_type, character_set_name, collation_name FROM information_schema.columns WHERE table_schema = 'employees' AND column_name LIKE '%dept_no%'; |
|
[Real MySQL] 15장 데이터 타입 (0) | 2015.03.27 |
---|---|
[Real MySQL] 14장 데이터 모델링 (0) | 2015.03.27 |
[Real MySQL] 12장 쿼리 종류별 잠금 (0) | 2015.03.27 |
[Real MySQL] 7장 쿼리 작성 및 최적화 (4) | 2015.03.27 |
[Real MySQL] 6장 실행 계획 (0) | 2015.03.27 |
2015. 3. 27. 12:21 Summary of/Real MySQL
15.1 문자열
15.1.1 저장 공간
15.1.2 비교 방식
15.1.3 문자 집합(캐릭터 셋)
15.1.4 콜레이션
15.1.5 문자열 이스케이프 처리
15.2 숫자
15.2.1 정수
15.2.2 부동 소수점
15.2.3 DECIMAL
15.2.4 정수 타입의 칼럼을 생성할 때의 주의사항
15.2.5 자동 증가 옵션 사용
15.3 날짜와 시간
15.3.1 TIMESTAMP 타입의 옵션
15.3.2 타임존 등록 및 사용
15.4 ENUM과 SET
15.4.1 ENUM
15.4.2 SET
15.5 TEXT, BLOB
15.6 공간(Spatial) 데이터 타입
15.6.1 POINT 타입
15.6.2 LINESTRING 타입
15.6.3 POLYGON 타입
15.6.4 GEOMETRY 타입
[Real MySQL] 16장 베스트 프렉티스 (0) | 2015.03.27 |
---|---|
[Real MySQL] 14장 데이터 모델링 (0) | 2015.03.27 |
[Real MySQL] 12장 쿼리 종류별 잠금 (0) | 2015.03.27 |
[Real MySQL] 7장 쿼리 작성 및 최적화 (4) | 2015.03.27 |
[Real MySQL] 6장 실행 계획 (0) | 2015.03.27 |
2015. 3. 27. 12:20 Summary of/Real MySQL
14.1 논리 모델링
14.1.1 모델링 용어
14.1.2 용어집(p.825)
14.1.3 엔터티
( p. 828 참고)
14.1.4 어트리뷰트 (속성)
14.1.5 식별자 (Primary Key)
14.1.6 관계(릴레이션)
14.1.7 엔터티의 통합
14.1.8 관계의 통합
14.1.9 모델 정규화
14.2 물리 모델링
14.2.1 프라이머리 키 선택
14.2.2 데이터 타입 선정
14.2.3 반정규화
SELECT * FROM 게시물, 회원 WHERE 회원.회원번호 = 게시물.작성회원번호 AND 게시물.게시판번호 = 1 ORDER BY 회원.작성회원명 LIMIT 10; |
INSERT INTO access_log(..., referrer_url, referrer_url_hash, …) VALUES(..., ‘http://…...’, MD5(‘http://…...’), …); |
SELECT * FROM access_log WHERE referrer_url_hash=MD5(‘http://…...’); |
SELECT * FROM access_log WHERE referrer_url_hash=MD5(‘http://…...’) AND referrer_url=’http://…...’; |
[Real MySQL] 16장 베스트 프렉티스 (0) | 2015.03.27 |
---|---|
[Real MySQL] 15장 데이터 타입 (0) | 2015.03.27 |
[Real MySQL] 12장 쿼리 종류별 잠금 (0) | 2015.03.27 |
[Real MySQL] 7장 쿼리 작성 및 최적화 (4) | 2015.03.27 |
[Real MySQL] 6장 실행 계획 (0) | 2015.03.27 |