아름다운 세상속에
그대는 나의 모든걸
가져간 바람둥이..

NearFondue PopupNotice_plugin
7 일동안 열지 않음 close

과일야채샐러드 - 312번째 이야기

Category : 데이터뱅크/Life/Food
266 x 266 pixels
슈퍼에서 파는 과일 요거트로 손쉽게 만들어 먹는 과일 샐러드,다이어트 웰빙 요리입니다.

1인분20분0Kcal

주재료 토마토1/2, 양상치 1/2 , 게맛살 2개, 무순 새싹 약간, 치컬리 약간, 떠먹는 요구르트 1개








150 x 230 pixels

조리법
1. 우선 게맛살은 모양이 보기 좋게 마름모꼴로 만드세요.
2. 양상치와 치커리는 깨끗하게 씻어 먹기 좋게 한입크기로 뜯어줍니다.
3. 토마토는 익혀도 되고, 그냥 생으로 먹으면 좋으니, 한 입크기로 썰어주세요.
4. 무순 새싹도 깔끔하게 씻어 주세요.
5. 재료를 예쁜 그르셍 담고 위로 떠먹는 요구르트를 솔솔 뿌려주세요.



요리TIP 생으로 먹기 때문에 비타민 손실이 적어요. 소스를 만들필요없이 400원짜리 떠먹는 요구르트 하나면 금방 만들수 있어 좋답니다.

요거 요거!!! 해먹어야지.. ㅋㅋ


  * 스크랩 출처
       네이버 요리
Writer profile
author image
LonnieNa 입니다.
http://www.needlworks.org
여러분과 나의 세상에 바라보는 시선을 달리합니다.
위로

영문 입력시 테이블 깨짐 방지 - 311번째 이야기

Category : 데이터뱅크/Web
테이블이 늘어나는 경우
(td style="word-break:break-all;")

이미지로 인해 깨지는 테이블이 늘어나는 경우
테이블넓이에 따라 이미지만 보여준다.
(table style="table-layout:fixed;")


  * 스크랩 출처
       const34
Writer profile
author image
LonnieNa 입니다.
http://www.needlworks.org
여러분과 나의 세상에 바라보는 시선을 달리합니다.
위로

여러가지 체크로직 script - 310번째 이야기

Category : 데이터뱅크/Web
  1. <!--  
  2.     //최상위 체크 로직(chars로 넘긴 값이 있다면 true)  
  3.     function containsCharsOnly(input,chars) {  
  4.         for (var inx = 0; inx < input.value.length; inx++) {  
  5.             if (chars.indexOf(input.value.charAt(inx)) == -1)  
  6.                 return false;  
  7.         }  
  8.         return true;  
  9.     }  
  10.     //최상위 체크 로직(chars로 넘긴 값이 있다면 false)  
  11.  function containsChars(input,chars) {  
  12.      for (var inx = 0; inx < input.value.length; inx++) {  
  13.         if (chars.indexOf(input.value.charAt(inx)) != -1)  
  14.             return true;  
  15.      }  
  16.      return false;  
  17.  }  
  18.     // 숫자 체크  
  19.     function isNum(input) {  
  20.         var chars = "0123456789";  
  21.         return containsCharsOnly(input,chars);  
  22.     }  
  23.  //이름체크  
  24.  function nameCheck(input){  
  25.   var chars = '0123456789~!#$%^&amp;amp;amp;amp;*()_-+=|{}[]<>,./?@';  
  26.   
  27.         return containsChars(input,chars);  
  28.  }  
  29.     // 전화 번호 Check  
  30.     function isPhoneCheck(input) {   
  31.      var chars = "0123456789( ).-,<>{}[]_~";  
  32.         return containsCharsOnly(input,chars);  
  33.     }  
  34.     // 영문 판별  
  35.     function isPhoneCheck(input) {   
  36.      var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";  
  37.         return containsCharsOnly(input,chars);  
  38.     }  
  39.     // 영숫자 판별  
  40.     function isPhoneCheck(input) {   
  41.      var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";  
  42.         return containsCharsOnly(input,chars);  
  43.     }  
  44.  // 입력값이 숫자,대시(-)로 되어있는지 체크  
  45.  function isNumDash(input) {  
  46.      var chars = "-0123456789";  
  47.      return containsCharsOnly(input,chars);  
  48.  }  
  49.  // 입력값이 숫자,콤마(,)로 되어있는지 체크  
  50.  function isNumComma(input) {  
  51.      var chars = ",0123456789";  
  52.      return containsCharsOnly(input,chars);  
  53.  }  
  54.  // 입력값이 사용자가 정의한 포맷 형식인지 체크  
  55.  // 자세한 format 형식은 자바스크립트의 ''regular expression''을 참조  
  56.  function isValidFormat(input,format) {  
  57.      if (input.value.search(format) != -1) {  
  58.          return true; file://올바른 포맷 형식  
  59.      }  
  60.      return false;  
  61.  }  
  62.  /** 
  63.   * 입력값이 이메일 형식인지 체크 
  64.   * ex) if (!isValidEmail(form.email)) { 
  65.   *         alert("올바른 이메일 주소가 아닙니다."); 
  66.   *     } 
  67.   */  
  68.  function isValidEmail(input) {  
  69.  //    var format = /^(\S+)@(\S+)\.([A-Za-z]+)$/;  
  70.      var format = /^((\w|[\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/;  
  71.      return isValidFormat(input,format);  
  72.  }  
  73.  /** 
  74.   * 입력값이 전화번호 형식(숫자-숫자-숫자)인지 체크 
  75.   */  
  76.  function isValidPhone(input) {  
  77.      var format = /^(\d+)-(\d+)-(\d+)$/;  
  78.      return isValidFormat(input,format);  
  79.  }  
  80.  // 콤마 없애기  
  81.  function removeComma(input) {  
  82.      return input.value.replace(/,/gi,"");  
  83.  }  
  84.  // 문자 변환 함수  
  85.     function alterString(str,before,after) {  
  86.      var returnStr = "";  
  87.      for(i = 0; i < str.length; i++) {  
  88.       value = str.charAt(i);  
  89.       index = before.indexOf(value);  
  90.       if(index >= 0) value = after.charAt(index);  
  91.       returnStr += value;  
  92.      }  
  93.      return returnStr;  
  94.     }  
  95.     // 소 --> 대문자 변환 함수  
  96.     function ToUpper(arg) {  
  97.      var str1 = "abcdefghijklmnopqrstuvwxyz";  
  98.      var str2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";  
  99.      return alterString(arg,str1,str2);  
  100.     }  
  101.     // 대 --> 소문자 변환 함수  
  102.     function ToLower(arg){  
  103.      var str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";  
  104.      var str2 = "abcdefghijklmnopqrstuvwxyz";  
  105.      return alterString(arg,str1,str2);  
  106.     }  
  107.     // 반각 문자를 전각문자로  
  108.     function convert2ByteChar(x_char) {  
  109.         var x_2byteChar = ""//컨버트된 문자  
  110.         var c = x_char.charCodeAt(0);  
  111.         if(32 <= c && c <= 126) { //전각으로 변환될수 있는 문자의 범위  
  112.             if(c == 32) { //스페이스인경우 ascii 코드 32  
  113.                 x_2byteChar = unescape("%uFFFC");  
  114.             } else {  
  115.                 x_2byteChar = unescape("%u"+gf_DecToHex(c+65248));  
  116.             }  
  117.         }  
  118.         return  x_2byteChar;  
  119.     }  
  120.     // 10진수를 16진수로  
  121.     function gf_DecToHex(x_dec) {  
  122.         var x_Hex = new Array();  
  123.         var x_serial = 0;  
  124.         var x_over16 = x_dec;  
  125.         var x_tempNum = 0;  
  126.         while(x_dec > 15) {  
  127.             var x_h = x_dec % 16; //나머지  
  128.             x_dec = parseInt(x_dec/16); //몫  
  129.             x_Hex[x_serial++] = (x_h > 9 ? String.fromCharCode(x_h + 55) : x_h); //16진수코드변환  
  130.         }  
  131.         //마지막은 몫의 값을 가짐  
  132.         x_Hex[x_serial++] = (x_dec > 9 ? String.fromCharCode(x_dec + 55) : x_dec); //16진수코드변환  
  133.         //몫,나머지,나머지,.....  
  134.         var retValue = "";  
  135.         for(var i=x_Hex.length ; i>0 ;i--) {  
  136.             retValue += x_Hex[i-1];  
  137.         }  
  138.         return retValue;  
  139.     }  
  140.     // input box에 space, &nbsp;등 만으로 넣고 장난 칠때 이들 문자 뺀 길이를 통해 유효성 체크한다...  
  141.     function CheckStr(strOriginal, strFind, strChange){   
  142.         var position, strOri_Length;   
  143.         position = strOriginal.indexOf(strFind);    
  144.         while (position != -1){   
  145.             strOriginal = strOriginal.replace(strFind, strChange);   
  146.             position = strOriginal.indexOf(strFind);   
  147.         }   
  148.         strOri_Length = strOriginal.length;   
  149.         return strOri_Length;   
  150.     }   
  151.     // 체크 박스에 체크가 되어 있으면 true  
  152.  function checkValidator(str) {   
  153.   if(str.checked) return true;   
  154.   else return false;  
  155.  }  
  156.  // 비밀번호는 4자 등 최대 최소 길이를 파람으로 주고 처리...   
  157.     function checkLength(str,minLng,maxLng){  
  158.         var ckstr = str.value.length;   
  159.         if (parseInt(ckstr) < parseInt(minLng) || parseInt(ckstr) > parseInt(maxLng)) return false;  
  160.         return true;  
  161.     }  
  162.     // 숫자만 받아서 아니면 메세지 보여 주는   
  163.     function onlyNumber(objEv) {  
  164.         if(!isNum(objEv)){  
  165.             alert("숫자만 입력가능합니다.");  
  166.             objEv.value = "";  
  167.             objEv.focus();  
  168.             return;  
  169.         }  
  170.     }  
  171.     // 숫자를 체크하다가 6자 등 원하는 만큼 이동후 다음 input 박스로 이동 시키는...  
  172.     function goJump(fname, len, goname){  
  173.         onlyNumber(fname);  
  174.         if (document.all[fname].value.length == len) document.all[goname].focus();  
  175.     }  
  176.   
  177.     // 주민등록번호 체크 로직  
  178.     function check_ResidentNO(str_f_num,str_l_num){    
  179.         var i3=0  
  180.         for (var i=0;i<str_f_num.length;i++){  
  181.          var ch1 = str_f_num.substring(i,i+1);  
  182.             if (ch1<'0' || ch1>'9') i3=i3+1;  
  183.         }  
  184.         if ((str_f_num == '') || ( i3 != 0 )) return false;  
  185.         var i4=0;  
  186.         for (var i=0;i<str_l_num.length;i++){  
  187.             var ch1 = str_l_num.substring(i,i+1);  
  188.             if (ch1<'0' || ch1>'9') i4=i4+1;   
  189.         }  
  190.         if ((str_l_num == '') || ( i4 != 0 )) return false;  
  191.         if(str_f_num.substring(0,1) < 4) return false;  
  192.         if(str_l_num.substring(0,1) > 2) return false;  
  193.         if((str_f_num.length > 7) || (str_l_num.length > 8)) return false;  
  194.         if ((str_f_num == '72') || ( str_l_num == '18'))  return false;  
  195.                   
  196.         var f1=str_f_num.substring(0,1)  
  197.         var f2=str_f_num.substring(1,2)  
  198.         var f3=str_f_num.substring(2,3)  
  199.         var f4=str_f_num.substring(3,4)  
  200.         var f5=str_f_num.substring(4,5)  
  201.         var f6=str_f_num.substring(5,6)  
  202.         var hap=f1*2+f2*3+f3*4+f4*5+f5*6+f6*7  
  203.         var l1=str_l_num.substring(0,1)  
  204.         var l2=str_l_num.substring(1,2)  
  205.         var l3=str_l_num.substring(2,3)  
  206.         var l4=str_l_num.substring(3,4)  
  207.         var l5=str_l_num.substring(4,5)  
  208.         var l6=str_l_num.substring(5,6)  
  209.         var l7=str_l_num.substring(6,7)  
  210.         hap=hap+l1*8+l2*9+l3*2+l4*3+l5*4+l6*5  
  211.         hap=hap%11  
  212.         hap=11-hap  
  213.         hap=hap%10  
  214.         if (hap != l7) return false;  
  215.         return true;   
  216.     }  
  217.     // 바이트 구하기  
  218.     function getByteLen(str){  
  219.         return(str.length+(escape(str)+"%u").match(/%u/g).length-1);  
  220.     }  
  221.  // url 가져오기  
  222.     function getUrlAddress(){  
  223.         var pageUrl = document.location;   
  224.      pageUrl  = new String(pageUrl);  
  225.       return pageUrl.substring(0,pageUrl.lastIndexOf("/"));  
  226.     }  
  227.     // 오른마우스 금지, 나중에 해당 주석 풀고 사용  
  228.     function rightbutton(e){  
  229.         if (navigator.appName == 'Netscape' &&  (e.which == 3 || e.which == 2))  
  230.             return false;  
  231.         else if (navigator.appName == 'Microsoft Internet Explorer' && (event.button == 2 || event.button == 3))  
  232.         {  
  233.             alert("죄송합니다!! 정보무단복제를 막기 위하여 오른쪽 마우스 사용을 허용하지 않습니다.");  
  234.             return false;  
  235.         }  
  236.         return true;  
  237.     }  
  238.     //document.onmousedown=rightbutton;  
  239.       
  240.     // 컨트롤 키 금지, 나중에 해당 주석 풀고 사용  
  241.     function checkCtl(){  
  242.         if (document.all){  
  243.             if(event.keyCode==17) {  
  244.                 alert("죄송합니다!! 컨트롤키 사용을 허용하지 않습니다.");  
  245.                 return false;  
  246.             }  
  247.         }  
  248.     }  
  249.     //document.onkeydown = checkCtl;  
  250.   
  251.  function setCookie(name,value) {  
  252.      document.cookie = name+"="+escape(value)+";path=/;domain=.kkaok.pe.kr;";  
  253.  }  
  254.    
  255.  function setCookie(name,value, expires) {  
  256.      document.cookie = name + "=" + escape(value) +  
  257.      "; path=/; expires=" + expires.toGMTString();  
  258.  }  
  259.    
  260.  function getCookie(Name) {  
  261.      var search = Name + "="  
  262.      if (document.cookie.length > 0) { // 쿠키가 설정되어 있다면  
  263.          offset = document.cookie.indexOf(search)  
  264.          if (offset != -1) { // 쿠키가 존재하면  
  265.              offset += search.length  
  266.              // set index of beginning of value  
  267.              end = document.cookie.indexOf(";", offset)  
  268.              // 쿠키 값의 마지막 위치 인덱스 번호 설정  
  269.              if (end == -1)  
  270.                  end = document.cookie.length  
  271.              return unescape(document.cookie.substring(offset, end));  
  272.          }  
  273.      }  
  274.  }  
  275.   
  276.    //문자 바꾸기, 사용법 var str = 문자열.replaceAll("a", "1");    
  277.     String.prototype.trim = function(){  
  278.         return this.replace(/(^\s*)|(\s*$)/gi, "");  
  279.     }  
  280.   
  281.     String.prototype.replaceAll = function(str1, str2) {  
  282.         var temp_str = "";  
  283.         if (this.trim() != "" && str1 != str2) {  
  284.             temp_str = this.trim();  
  285.             while (temp_str.indexOf(str1) > -1){  
  286.                 temp_str = temp_str.replace(str1, str2);  
  287.             }  
  288.         }  
  289.         return temp_str;  
  290.     }  
  291.   
  292. //-->  


head 부분에 script src로 삽입시키면 되겠지.

  * 스크랩 출처
Writer profile
author image
LonnieNa 입니다.
http://www.needlworks.org
여러분과 나의 세상에 바라보는 시선을 달리합니다.
위로

태터에 미니위니 플래시 뮤직 플래이어 달기 - 277번째 이야기

Category : 데이터뱅크/Tatter Tip

계정속도가 느려서 처음재생하는데 시간이 좀 걸릴수 있습니다.

기본적인 사용법과 swf 파일 다운로드는 아래의 링크를 참조.
미니위니 플래시 뮤직박스 0.1

아이콘 다운로드후 태터 images 폴더에 miniwini_flash_bgm.gif 라는 이름으로 업로드 하고
위 미니위니 링크에서 다운받은 miniwiniFlashMusicbox.swf는 태터 기본 폴더에 삽입.

태터에 스크립트 삽입
inc_global.php 를 열어 160여번째 줄의 function set_palette() 부분 아래 table 영역안에 해당 기능 아이콘을 보여줄 원하는 위치에 아래의 스크립트를 삽입.

more..



사용법
글 쓰기에 가서 음악파일(mp3)의 경로(http포함)를 마우스로 블럭시킨후 해당 플래시 뮤직 플레이어 삽입 아이콘을 클릭하면 자동으로 스크립트가 들어간다.
추가적으로 여러개의 음악파일을 동시에 재생하게 하려면..
음악파일경로,음악파일경로,음악파일경로 이렇게 , 으로 추가해서 해주면 된다.
Writer profile
author image
LonnieNa 입니다.
http://www.needlworks.org
여러분과 나의 세상에 바라보는 시선을 달리합니다.
위로

이미지 링크 방지 .htaccess와 워터마킹이용 - 139번째 이야기

Category : 데이터뱅크/Web
개인 계정에서 블로그등의 사이트를 운영하시는 분들 중 가끔 외부에서의 컨텐츠 직링크로 인해 트래픽 초과에 걸리시는 분들이 많습니다. 트래픽 문제가 아니더라도, 무단 링크로 인해 저작권을 침해받는 경우도 있겠죠.
이를 해결하기 위해 레퍼러비교 같은 방법도 쓰곤 하는데, 아마 .htaccess 파일을 이용한 것도 많이들 아실 겁니다.

간단히, .htaccess와 워터마킹 기술을 이용해 이미지 링크 제어를 하는 법을 소개합니다.

일단, 이미지들이 저장되는 디렉토리에 .htaccess파일을 만듭니다. (이미 존재한다면 아래의 소스를 마지막에 추가하시면 됩니다.)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} .*jpg$|.*gif$|.*png$ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !explug\.com [NC]
RewriteCond %{HTTP_REFERER} !eouia0\. [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteRule (.*) image.php?image=$1

...........
잠깐 설명을 하자면,

RewriteCond %{HTTP_REFERER} !explug\.com [NC]
RewriteCond %{HTTP_REFERER} !eouia0\. [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]

이 부분에 링크를 허용할 URL들을 기재합니다. 정규식 패턴이므로 잘 알아서.. :)
위의 예의 경우 explug.com, eouia0가 포함되는 사이트, google 등에 링크를 허용한 경우입니다. 이 경우에는 원본 이미지를 마음대로 가져다 쓸 수 있습니다.
그외의 URL에서 링크가 걸릴 경우에는

RewriteRule (.*) image.php?image=$1

에 따라, image.php?image=파일이름 으로 리다이렉트됩니다. 만약 그냥 링크 자체를 끊고 싶으시다면 여기에 아무거나 써주셔도 되지요.

이제 워터마킹 처리를 위해 image.php를 작성합니다. GD라이브러리를 사용했으므로 GD가 사용가능한 계정이어야 합니다.

define ("WATERMARK", "watermark.jpg");

header("Content-type: image/jpeg");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

$pic = strip_tags( $_GET['image'] );

$image_url = urldecode($pic);

if (!@fopen($image_url, "r")) {
$dst_img = imagecreatefromjpeg(WATERMARK);
$res = imagejpeg($dst_img, "", 100);
die();
}

$file = pathinfo($image_url);
switch(strtoupper($file["extension"])) {
case "JPG":
$src_img = imagecreatefromjpeg($image_url);
break;
case "GIF":
$src_img = imagecreatefromgif($image_url);
break;
case "PNG":
$src_img = imagecreatefrompng($image_url);
break;
}

$src_w = imagesx($src_img);
$src_h = imagesy($src_img);

$portion = $src_h / $src_w;
$dest_w = 300;
$dest_h = round($dest_w * $portion);

$dst_img = imagecreatetruecolor($dest_w, $dest_h);
imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, $dest_w, $dest_h, $src_w, $src_h);

$watermark = imagecreatefromjpeg(WATERMARK);

$watermark_w = imagesx($watermark);
$watermark_h = imagesy($watermark);

$overlay_img = imagecreatetruecolor($watermark_w, $watermark_h);
imagecopy($overlay_img, $watermark, 0,0,0,0, $watermark_w, $watermark_h);
imagedestroy($watermark);

$white = imagecolorallocate($overlay_img, 0xFF, 0xFF, 0xFF);
imagecolortransparent($overlay_img, $white);

$offsetX = $dest_w - $watermark_w - 3;
$offsetY = $dest_h - $watermark_h - 3;

imagecopymerge($dst_img,$overlay_img,$offsetX,$offsetY,0,0,$watermark_w,$watermark_h, 100);
imagedestroy($overlay_img);

$res = imagejpeg($dst_img, "", 100);
imagedestroy($dst_img);
?>

링크를 허용한 사이트에서는 원본이, 링크를 허용하지 않은 사이트에서는 image.php에 의해 워터마크처리된 이미지로 링크가 걸리게 됩니다. 여기에서는 예를 위해 워터마킹 처리된 이미지의 사이즈를 가로 300으로 고정시켰지만 이 부분은 적당히 소스를 고치시면 원하는 대로 적용시키실 수 있으실 겁니다.



* 스크랩 출처
Writer profile
author image
LonnieNa 입니다.
http://www.needlworks.org
여러분과 나의 세상에 바라보는 시선을 달리합니다.
위로

프로그램 설치시 Windows Installer 에러 - 184번째 이야기

Category : 데이터뱅크/etc
프로그램 설치시 Windows Installer 서비스를 액세스할 수 없습니다.
Windows를 안전 모드에서 실행하거나 Windows Installer가 올바르게 설치되지 않은 경우에 이 문제가 발생할 수 있습니다.
라는 에러 메시지가 뜰 때 해결 방법입니다.

1. 시작 - 실행 msiexec /unregister 확인
2. 시작 - 실행 msiexec /regserver 확인
Writer profile
author image
LonnieNa 입니다.
http://www.needlworks.org
여러분과 나의 세상에 바라보는 시선을 달리합니다.
위로

해상도에 따라 스크롤바가 생기지 않는 최대영역 - 185번째 이야기

Category : 데이터뱅크/Web
익스플로러 기준으로 위에 파일, 편집, 보기, 이런거 있는 메뉴바와
큰 아이콘으로 된 뒤로, 앞으로, 중지 이런것이 있는 도구바, 주소랑
연결이 한줄씩 있을 경우 익스에 가득 차는 크기를 알려 드리겠습니다.

800 x 600 해상도에서는 770 x 416 크기가 익스에 딱 맞아 들어갑니다.
1024 x 786 경우에는 996 x 572 가 맞습니다.
572는 1~2 필셀 정도? 틀릴 수도 있습니다.

1024×768 : (1004 × 617) / 800×600 : (780×449)
Writer profile
author image
LonnieNa 입니다.
http://www.needlworks.org
여러분과 나의 세상에 바라보는 시선을 달리합니다.
위로