Posted
Filed under 프로그래밍/PHP

str_pad

(PHP 4 >= 4.0.1, PHP 5)

str_pad문자열을 지정한 길이가 되도록 다른 문자열로 채웁니다

string str_pad ( string $input , int $pad_length [, string $pad_string [, int $pad_type ]] )

<?php
$input 
"Alien"
;
echo 
str_pad($input10);                      
// "Alien     "을 생성.
echo str_pad($input10"-="STR_PAD_LEFT);  
// "-=-=-Alien"을 생성.
echo str_pad($input10"_"STR_PAD_BOTH);   
// "__Alien___"을 생성.
echo str_pad($input"___");               
// "Alien_"을 생성.
?>


iconv

(PHP 4 >= 4.0.5, PHP 5)

iconvConvert string to requested character encoding

string iconv ( string $in_charset , string $out_charset , string $str )

<?php
$text 
"안녕";

echo 
'Original : '$textPHP_EOL;
echo 
'TRANSLIT : 'iconv("UTF-8""EUC-KR//TRANSLIT"$text), PHP_EOL;
echo 
'IGNORE   : 'iconv("UTF-8""EUC-KR//IGNORE"$text), PHP_EOL;
echo 
'Plain    : 'iconv("UTF-8""EUC-KR"$text), PHP_EOL;

echo 'Plain    : 'iconv("EUC-KR""UTF-8"$text), PHP_EOL;


?>

2013/07/05 18:22 2013/07/05 18:22
Posted
Filed under 프로그래밍
기술 면접시 나온 질문하나가 도메인이 다른 원격지의 데이터를 어떻게 가지고 올꺼냐는거였다.
내 대답은 서브도메인을 하나 만들어 제공하거나 데이터를 가지고 오는걸 따로 만들어서 사용하거나 jQuery로 하겠다고했다.

여기서는 jQuery로 원격지 데이터를 가지고 오는 방법을 소개한다. (jsonp)


여기서 jsonp:"list' 는 콜백변수 이다.

get_total에서는 받은 콜백변수를 앞에 반드시 출력해줘야한다.

콜백변수:list변수출력({"totalcount":"123"})



  $.ajax({
   url : "http://www.www.co.kr/get_total",
   type : "POST",
   dataType : "jsonp",
   jsonp:"list",
   data: {
      num: "1"
   },
   success:function(data){
     alert(data.totalcount);
   },
   error: function(e){
    alert("불러오기 오류");
   }
  });

2013/07/04 10:43 2013/07/04 10:43
Posted
Filed under 프로그래밍/PHP

* notice에러 방지
$ret = $arr[var];
-> $ret = $arr['var'];


* notice에러 방지
if ($_POST['var'])
-> if (isset($_POST['var']))


* 남용하면 이해할수 없는 코드가 됨
isset($_POST['var'])? $_POST['var']:NULL;
-> 삼항연산자는 남용하지 않는다.


* 무한루프 방지
for($i=0; $i<$max; $i++) {
-> for($i=0, $max = count($loop); $i<$max; $i++) {


* 메모리 절약
$msg = '안녕하세요';
echo $msg;
-> echo '안녕하세요';


* 에러 방지
echo "안녕 $msg";
-> echo '안녕 '.$msg;


foreach가 빠르다

explode가 빠르다

모든 변수는 선언하지 않은채 사용하면 notice에러가 발생한다.

2013/07/04 10:34 2013/07/04 10:34
Posted
Filed under 프로그래밍

$("#id",opener.document).text("aa");
$("#id",parent.document).text("aa");
2013/07/03 18:50 2013/07/03 18:50
Posted
Filed under 프로그래밍/PHP
개발을 하다보면 설정파일이 필요할때가 있다
프레임웍을 사용하면 자체적으로 별도의 설정파일을 세팅할수 있게 지원하지만 네이티브로 개발할경우
많이 사용하는 방식을 소개한다.

parse_ini_file

설정파일 내용은 기본적으로 php의 ini파일 형태이고
; This is a sample configuration file
; Comments start with ';', as in php.ini

[first_section]
one = 1
five = 5
animal = BIRD

[second_section]
path = "/usr/local/bin"
URL = "http://www.example.com/~username"

[third_section]
phpversion[] = "5.0"
phpversion[] = "5.1"
phpversion[] = "5.2"
phpversion[] = "5.3"

 

사용방법은

<?php
$ini_array parse_ini_file("sample.ini"true);
echo $ini_array['first_section']['one'];
?>




배열의 형태로 사용한다.
두번째인자의 true는 그룹명까지 결과에 포함하겠냐는거다


ini파일 노출이 껄그러우면 파일을 php로 만들어버리면 된다
 ;<? /*
; This is a sample configuration file
 ; Comments start with ';', as in php.ini

 [first_section]
 one = 1
 five = 5
 animal = BIRD

 [second_section]
 path = "/usr/local/bin"
 URL = "http://www.example.com/~username"

 [third_section]
 phpversion[] = "5.0"
 phpversion[] = "5.1"
 phpversion[] = "5.2"
 phpversion[] = "5.3"
;*/?>

2013/07/02 09:47 2013/07/02 09:47
Posted
Filed under 프로그래밍/PHP

잘돌아가던게 php 5.4로 업그레이드후 오류가 뜬다

2013/06/09 12:46:16 [error] 2952#0: *11681 FastCGI sent in stderr: "PHP message: PHP Fatal error:
Call-time pass-by-reference has been removed in /home/miyu/html/zboard/zboard.php on line 197"
while reading response header from upstream

 

&$error 와 같이  reference 처리된것은 모두 에러처리 되고 프로그램이 중단된다.
$error 와 같이 모든 코드를 교체해야한다.

예전에는 php.ini에서 allow_call_time_pass_reference = On으로 처리했지만
5.4부터는 사라졌다.

더불어 globals_register와 magic_quotes도 사라졌다.

The ini option allow_call_time_pass_reference was removed
Register globals, magic quotes and safe mode were removed

 

2013/06/09 13:21 2013/06/09 13:21
Posted
Filed under 프로그래밍/PHP
PHP 5.4.15로 업그레이드를 했다
근데 기존에 없던 옵션이 생겼네?
security.limit_extensions 라는 놈이다

php-fpm.conf 을 열어보면
;security.limit_extensions = .php .php3 .php4 .php5

이렇게 되어있을것이다.
주석을 풀어주고 php코드가 들어간 확장자를 추가해준다.

security.limit_extensions = .php .php3 .php4 .php5 .htm .html

기본값이 .php 이기때문에 다른게 들어오면 막아버리는것이다.


2013/05/30 01:21 2013/05/30 01:21
Posted
Filed under 프로그래밍

    $("#BtnDateSearch").click(function() {
     if(!$("#Date1").val()) { alert("시작날짜를 선택하세요");  return false; }
     if(!$("#Date2").val()) { alert("끝날짜를 선택하세요");  return false; }
     var date1 = new Date($("#Date1").datepicker("getDate"));
     var date2 = new Date($("#Date2").datepicker("getDate"));
      if (date2 - date1 < 0){
      alert("끝 날짜가 시작날짜보다 이전일수 없습니다"); return false;
     }
     $("#DateSearchForm").submit();

    });

 

2013/04/25 11:39 2013/04/25 11:39
Posted
Filed under 프로그래밍

mysql 에서 CHAR, VARCHAR 타입은 유사하다.

단지 저장하고 읽을 때만 살짝 다르다.

 

CHAR(40) 에 "mydata" 를 저장할 때, 6바이트를 저장하고 나머지 34바이트의 비어 있는 공간에는 공백을 채워서 저장한다.

그리고 읽어들일 때, 임의로 채워진 공백들은 제거되어서 읽혀진다. (물론, PAD_CHAR_TO_FULL_LENGTH 모드를 활성화하면 공백까지 다 읽어온다)

 

VARCHAR(40) 에 "mydata" 를 저장할 때, 6바이트를 저장하고, 뒤에 1바이트(255길이 미만) 또는 2바이트(255길이 이상)의 길이 정보를 추가한다.

따라서 VARCHAR 에는 공백을 채워넣지 않으므로, 가변 길이의 정보에 적합하다.

문제는 VARCHAR(40) 에 새로운 데이터가 업데이트 될 경우이다. 더 큰 길이의 데이터가 저장되면, 공간이 부족하여 새로운 저장 영역에 새로 할당해야 하기 때문이다. 이 때문에, 데이터 파편화가 심해진다.


테이블 ROW 중에 CHAR, VARCHAR 타입이 섞여 있으면 데이터 파편화는 발생할 수 밖에 없다. 파편화를 염두하고 설계한다면, 테이블의 데이터 타입 중에 VARCHAR 타입을 두어선 안될 것이다.

그러나 MySQL 에서는 다음의 쿼리를 적용하면 파편화를 막을 수 있다. 

ALTER TABLE tblname ROW_FORMAT = FIXED;

VARCHAR 타입을 CHAR 타입처럼 동작하도록 강제로 지정하는 것이다. 덕분에 저장 용량은 증가하지만, VARCHAR 로 인한 파편화로 성능 저하는 막을 수 있다.

 

물론 VARCHAR 로 선언한다고 무조건 파편화가 발생하는 것은 아니다. 앞서서 적은대로, 처음에 데이터를 INSERT 한 뒤에, 다른 크기의 데이터로 UPDATE 가 발생할 경우에 파편화가 발생하는 것이다.

그러므로 LOG 테이블처럼 INSERT 만 허용되는 테이블에는 이 문제가 적용되지 않을 것이다.

 

 

그리고, 다음의 쿼리를 통해서 저장된 데이터를 분석해볼 수도 있다.

SELECT * FROM tblname PROCEDURE ANALYSE();

 

 

마지막으로, 테이블 설계할 때부터 데이터 타입은 신중하게 고려하면 좋다. IPv4 문자열 주소는 CHAR(15) 형태로 한다든가, 아니면 아예 INT 값으로 저장할 수도 있다.(IPv6 라면 CHAR(39) 이다.)

그리고 MD5 암호키 정보는 CHAR(32) 형태로 하는 것이다.



출처 : http://netmaid.tistory.com/44

2013/04/23 14:07 2013/04/23 14:07
Posted
Filed under 프로그래밍

* 스크럼 (SCRUM) 구성요소
 Product Owner (제품 소유자)
 Scrum Master (스크럼 마스터)
 Scrum Team (스크럼 팀)
 Sprint (스프린트)
 Sprint Goal (스프린트 목표)
 Product Backlog (제품 백로그)
 Sprint Backlog (스프린트 백로그)
 Sprint Task (스프린트 작업)
 Sprint Planning Meeting (스프린트 계획 회의)
 Sprint Review Meeting (스프린트 검토 회의)
 Daily Scrum Meeting (일일 스크럼 회의)
 Scrum Retrospective Meeting (스크럼 회고 미팅)
 Velocity (속도)
 Release (릴리즈)
 Release Burndown Chart (릴리즈 번다운 챠트)
 Burndown Chart (번다운 챠트)
 Impediments (장애)


* 제품 소유자 (Product Owner)
 제품 백로그를 책임지는 사람
 고객 요구사항 식별을 대표하는 사람
 제품 소유자는 프로젝트 착수 시점부터 프로젝트 일원이 된다.

* 스크럼 마스터 (Scrum Master)
 프로젝트 관리자와 비슷하나, 관리자보다는 리더에 가까운 역할이다.
 팀에 봉사하는 역할을 수행 - Servant 리더십이 필요하다.

* 스크럼 팀 (Scrum Team)
 4~7명의 개발자로 구성된다.
 모두 함께 한다는 자세로 일한다.
 자기 주도적인 팀이다.
 팀원 스스로 의사결정을 한다.

* 스프린트 (Sprint)
 하나의 이터레이션을 의미한다.
 하나의 스프린트는 보통 30일 정도이다.
 
* 스프린트 목표 (Sprint Goal)
 스프린트 종료 시점에 시연이 가능한 결과를 얻는 목표를 수립한다.

* 제품 백로그 (Product Backlog)
 제품에 필요한 모든 기능을 담은 목록이다.
 백로그에는 기술적인 작업도 있고, 좀더 사용자 중심적인 작업도 있다.

* 스프린트 백로그 (Sprint Backlog)
 해당 스프린트에서 개발되는 제품 백로그
 
* 스프린트 태스크 (Sprint Task)
 제품 백로그를 개발하기 위해 필요한 작업이다.
 일반적으로, 시간단위로 분할되어진다.
 태스크가 분할되면, 팀 회의를 통해서, 개발할 담당자를 결정한다.
 
* 스프린트 계획 회의 (Sprint Planning Meeting)
 스프린트가 시작할 때마다 열린다.
 회의는 하루종일 열린다.

* 제품 소유자, 스크럼 마스터, 팀의 개발자 전체가 회의에 참석한다.
 스프린트 검토 회의 (Sprint Review Meeting)
 한달간의 스프린트를 마쳤을 때, 잠재적으로 출시 가능한 소프트웨어를 고객에게 검토를 받는다.
 가능한 비공식적인 미팅으로 수행한다. 형식적인 자료를 만들기 위한 시간을 줄이기 위함이다.
 
* 일일 스크럼 회의 (Daily Scrum Meeting)
 각 팀원은 다음과 같은 세가지 질문에 대답한다.
 어제 무엇을 했는가?
 오늘 무엇을 할 것인가?
 장애 요소는 무엇인가?

* 스크럼 회고 회의 (Scrum Retrospective Meeting)
 스크럼 검토 회의 종료후에 실시한다.
 스크럼 마스터와 팀은 다음 단계에서 좀 더 개선해야할 것이 무엇인 지를 정의한다.

* 속도 (Velocity)
 한 스프린트에서 개발해야할 스토리포인트 또는 제품 백로그 갯수이다.
 
* 릴리즈
 인도가능한 제품이 변화되는 모습
 하나의 릴리즈는 보통 하나 또는 여러개의 스프린트로 구성된다.

* 릴리즈 번다운 챠트 (Release Burndown Chart)
 프로젝트 진행 현황을 표시한 챠트

* 번다운 챠트 (Burndown Charts)
 하나의 스프린트에서 작업에 대한 완료 추이를 그린 챠트

* 장애 (Impediments)
 스크럼 팀이 효과적으로 일하는 것을 방해하는 요소

2013/04/16 10:55 2013/04/16 10:55
Posted
Filed under 프로그래밍
1.터미널에서 이클립스 폴더로 이동
2.vi Contents/Info.plist
3.</dict> 위에 
<key>NSHighResolutionCapable</key>
<true/>
추가후 저장
4.Info.plist 파일을 다른 폴더로 이동시켰다가 다시 Contents으로 이동 (맥OS가 파일캐싱을 하기때문임)
5.이클립스 실행

 

http://lists.apple.com/archives/webobjects-dev/2012/Jul/msg00004.html
2013/04/11 12:05 2013/04/11 12:05
Posted
Filed under 프로그래밍
사용자 삽입 이미지



2013/03/31 22:29 2013/03/31 22:29
Posted
Filed under 프로그래밍/JAVA
스프링의 스케쥴러를 사용하기 위해

servlet-context.xml에 task를 추가한다

xmlns:task=http://www.springframework.org/schema/task

xsi:schemaLocation 에도 추가
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.2.xsd

아래 내용도 추가
<task:executor id="executor" pool-size="5-10" queue-capacity="255" />
<task:scheduler id="scheduler" pool-size="3" />
<task:annotation-driven executor="executor" scheduler="scheduler" />


void타입의 return 이 없고 파라미터가 없는 메서드에 사용가능하다

@Scheduled(fixedRate=5000)

fixedRate : 지정한 시간 주기로 작업을 실행
fixedDelay : 지정된 시간 간격으로 작업을 실행
cron : cron 표현식을 이용해서 작업을 실행

5000 -> 5초


아래 오류 발생시...
cvc-complex-type.2.4.c: The matching wildcard is strict...

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 이 부분을
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 으로 변경해주면
오류는 발생하지 않는다. (3.0에서 3.2로)


2013/03/04 17:29 2013/03/04 17:29
Posted
Filed under 프로그래밍

getValue로 찍어보면 [Object Object]만 나온다.
노파심에...

Exr4.getCmp('라디오그룹아이디').getValue().radiofield의 name명

라디오그룹아이디가 radiog 이고 라디오버튼의 name이 bt면

Exr4.getCmp('radiog').getValue().bt



2013/02/20 16:58 2013/02/20 16:58
Posted
Filed under 프로그래밍/PHP
네이버 일본어 번역기를 몰래 사용하다가 차단당했는지 언젠가부터 안된다.ㅋㅋㅋ
구글은 유료로 바꼈고....
뭐 없나 찾아봤더니 마소 빙(Bing)에서 번역기를 무료로 사용할수 있다.
Microsoft Translator인데 이게 그냥 사용하기에는 사용방법이 어렵네?

간단하게 사용하는 방법은..

<?
  $trans_mode="&To=%27ko%27&From=%27ja%27";
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://api.datamarket.azure.com/Data.ashx/Bing/MicrosoftTranslator/v1/Translate?Text=%27'.urlencode($msg).'%27'.$trans_mode.'&$top=100&$format=Raw');
  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic API코드'));
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $msg_trans=strip_tags(curl_exec($ch));
?>


2013/02/19 11:42 2013/02/19 11:42