CentOS 6.3에 netatalk 2.2.4를 컴파일 하여 설치하였는데, TimeMachine용 백업 서버를 위해 구동 중 오류가 발생했습니다.
계속 접속이 안되어 아래와 같은 방법으로 로그를 남겨보았습니다.
/usr/local/etc/netatalk/netatalk.conf 수정
# config for cnid_metad. Default log config:
CNID_CONFIG="-l log_note"
마지막줄을 주석 해제합니다.
afpd.conf 수정
- -tcp -noddp -uamlist uams_dhx.so,uams_dhx2.so -nosavepassword -setuplog "default log_info /var/log/afpd.log"
앞부분은 맞추어 설정하고, 뒤에 setuplog 부분을 추가합니다.
추가하여 /var/log/afpd.log 파일을 확인해봅니다.
Jan 03 10:42:27.449404 afpd[5904] {uams_dhx2_pam.c:321} (I:UAMS): DHX2 login: account_name
Jan 03 10:42:27.485836 afpd[5904] {uams_dhx2_pam.c:210} (I:UAMS): PAM DHX2: PAM Success
Jan 03 10:42:27.519248 afpd[5904] {uams_dhx2_pam.c:691} (I:UAMS): DHX2: PAM_Error: Module is unknown
중간 쯤 보니 로그인시 PAM Success라고 뜨는데 정작 Module is unknown 이라고 뜹니다.
한참 찾아보다 보니 /etc/pam.d/netatalk가 제대로 설정되지 않은것을 확인하였습니다.
아래 내용으로 /etc/pam.d/netatalk를 설정하고 netatalk 서비스를 재실행하면 정상작동됩니다.
#%PAM-1.0
auth include system-auth
account include system-auth
password include system-auth
session include system-auth
Posted by Parker Falcon
nginx conf 파일
server {
server_name domain.tld;

root /var/www/codeignitor;
index index.html index.php;

# set expiration of assets to MAX for caching
location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
expires max;
log_not_found off;
}

location / {
# Check if a file exists, or route it to index.php.
try_files $uri $uri/ /index.php;
}

location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
CodeIgniter application/config/config.php 파일에 수정
$config['base_url']        = "http://domain.tld/";
$config['index_page']         = "";
$config['uri_protocol']        = "REQUEST_URI";
이렇게 하면 index.php 없이 사용하는것이고, 작동은 무난히 잘 됨
출처 : http://wiki.nginx.org/Codeigniter
Posted by Parker Falcon
vsftpd에 SSL을 적용하여 ftpes를 운영하는데, Filezilla에서 GnuTLS error -12: A TLS fatal alert has been received 라는 에러가 뜨고 접속이 안되는 현상을 겪었습니다.
직접적으로 어느 부분이 문제인지는 모르겠는데, 아무튼 Filezilla의 버전을 3.6.0으로 낮추면 정상 작동 합니다. 3.6.0.1이나 3.6.0.2에서 작동이 안되는것을 확인하였습니다.
아직 SSL의 키 파일의 문제인지, vsftpd의 문제인지 Filezilla의 문제인지 GnuTLS의 문제인지는 모르지만, 당장의 해결책은 버전 다운밖에는 안보이네요 :(
Posted by Parker Falcon
페이스북 연동까지 해서 큰 SNS 연동이 iOS 6에 추가되었습니다.
그런데 기본적으로 되는것이 아니라 설정을 해주어야됩니다.
아래 블로그에 간단하게 잘 설명이 되어있습니다. 참고하시면 됩니다 :)
http://gmelon.tistory.com/183
Posted by Parker Falcon
gcc 를 컴파일 하는 과정은 멀고도 험합니다.
http://www.mpfr.org/faq.html
4번의 설명을 보면 간단하게 내용이 나오는데,
undefined reference to `__gmp_get_memory_functions'
라고 나오는 경우는 라이브러리 버전이 섞여서 설치되어있을 때 발생합니다.
--with-gmp=/usr/local 나 --with-gmp=/usr 처럼 정확하게 위치를 지정해주거나, 환경 변수를 특정지어주는 방법이 있습니다.
Posted by Parker Falcon
0. Perl, HTML::TreeBuilder::XPath, Firefox 및 Firebug addon 이 필요합니다.

1. Perl을 이용해 HTML파일의 DOM 접근이 가능합니다.
HTML::TreeBuilder::XPath 을 이용하면 매우 쉽게 이용할 수 있습니다.

2.  링크 참고
http://search.cpan.org/~mirod/HTML-TreeBuilder-XPath-0.14/lib/HTML/TreeBuilder/XPath.pm

여기에서 매뉴얼 확인 가능합니다.

3. XPath 찾기
Firefox에서 원하는 객체의 오른쪽 클릭하여 요소 검사를 선택합니다.
아래 Firebug창에서 해당 객체가 선택됩니다.
오른 클릭하여 XPath 복사를 선택하면 클립보드에 복사됩니다.

4. 활용 시 주의사항
Firefox 아래 Dom Inspector는 직접 HTML을 파싱하여 이상적인 구조로 만든 것 입니다. 즉 HTML상에는 Table 밑에 tbody가 없는 소스가 많은데, Firefox는 해당 tbody를 생성합니다. 만약 그대로 사용해서 정상적으로 작동이 안된다면, tbody 처럼 실제 소스랑 다른 부분을 확인해봅니다.
 
Posted by Parker Falcon










델파이에서 구현해보려고 DLL용 .h 파일을 .pas로 만들어보았다.
원본 SDK는 
http://www.inexio.co.kr/07_download/download02.html

에서 받을 수 있으며 ( http://www.inexio.co.kr/pdf/sdk/Nexio_SDK_v2000.zip ) 


기본적으로는 작동되는데, 몇 가지는 의심스럽긴 하다.


아무튼 필요하시면 그냥 쓰시고, 이상해서 고쳐쓰시거든 댓글로 알려주시면 감사하겠습니다.



/////////////////////////////////////////////////////////////////////////////
//
// file inexio_multi.h
//
//
//  Version 1.10
//
//  Copyright (C) 2005-  NEXIO Co., Ltd. All rights reserved
//
// Homepage : http://www.inexio.co.kr
//
/////////////////////////////////////////////////////////////////////////////




unit NexioPlug;

interface

uses Windows, Classes;

const
  MPT_TOUCH_UP = 0;
  MPT_TOUCH_DOWN = 1;
  MPT_TOUCH_MOVE = 2;

  MTOUCH_TOUCH_UP = (MPT_TOUCH_UP); //Touch Up   OutputMulti dwstate
  MTOUCH_TOUCH_DOWN = (MPT_TOUCH_DOWN); //Touch Down OutputMulti dwstate
  MTOUCH_TOUCH_MOVE = (MPT_TOUCH_MOVE); //Touch Move OutputMulti dwstate

  // MPointElement wStatus
  INACTIVE_COORDINATE = $0000;
  ACTIVE_COORDINATE = $0001;
  IMAGE_COORDINATE = $0002;
  REJECTED_COORDINATE = $0003;

  MAX_MPOINTELEMENT = 100;
  MAX_MPOINTELEMENT_V2 = 98;

  EVENT_ARRIVED = 0; //Event arrived
  TIME_WAS_OUT = 1; //Wait time was out
  UNKNOWN_ERR = 2; //Unknown error object

  NEXIO_ROTATE_0 = 0;
  NEXIO_ROTATE_L90 = 90;
  NEXIO_ROTATE_R90 = 270;
  NEXIO_ROTATE_180 = 180;
  NEXIO_ROTATE_360 = 360;
  NEXIO_ROTATE_MIRROR_V = 1;
  NEXIO_ROTATE_MIRROR_H = 2;
type
  TMPointElement = record
    // Screen Coordinate (x,y) state
    // INACTIVE_COORDINATE, ACTIVE_COORDINATE, IMAGE_COORDINATE
    wStatus: WORD;
    wIndex: WORD; // ID of point

    // Pressed touch point width at screen coordinate (x,y)
    wXLength: WORD;
    // Pressed touch point height at screen coordinate (x,y)
    wYLength: WORD;

    wXWidth: WORD; // Reserved
    wYWidth: WORD; // Reserved

    // Pressed touch x point  at screen coordinate (x,y)
    wX: WORD;
    // Pressed touch y point  at screen coordinate (x,y)
    wY: WORD;

    wXStart: WORD;   // Reserved
    wXEnd: WORD;     // Reserved

    wYStart: WORD;   // Reserved
    wYEnd: WORD;     // Reserved
  end;




  POutputMulti = ^TOutputMulti;
  TOutputMulti = record
    // Multi-touch state
    // MPT_TOUCH_UP, MPT_TOUCH_DOWN, MPT_TOUCH_MOVE
    dwState : DWORD;

    // MAX( mX, mY)
    dwNumber : DWORD;
    // Total X coordinate count
    mX : DWORD;
    // Total Y coordinate count
    mY : DWORD;

    case Integer of
      0: (mPpointsOld : Array [0 .. MAX_MPOINTELEMENT - 1] of Array [0 .. MAX_MPOINTELEMENT - 1] of TMPointElement);
      1: (
//        mPpoints : Array[0 .. MAX_MPOINTELEMENT_V2 - 1] of Array [0 .. MAX_MPOINTELEMENT - 1] of TMPointElement;
        mPpoints : Array[0 .. MAX_MPOINTELEMENT - 1] of Array [0 .. MAX_MPOINTELEMENT_V2 - 1] of TMPointElement;
        sUsbID : Array[0 .. SizeOf(TMPointElement) * MAX_MPOINTELEMENT - 1] of char;

        wUsbID : WORD;
        wMonID : WORD;
        dwRESERVED00 : Array[0 .. 4] of DWORD;
        Reserved : Array[0 .. MAX_MPOINTELEMENT-2-1] of TMPointElement;
        dwRESERVED01 : Array[0 .. 5] of DWORD;
      );
  end;




//////////////////////////////////////////////////////////////////////////
//
// Function:    OpenNexioMulti
//
// Description:
//  Open Event of NEXIO Multi-Point TouchScreen coordinate
//
// Returns:
//  TRUE if Event Open successful, FALSE if Event fails....
//
//////////////////////////////////////////////////////////////////////////
//extern "C" __declspec(dllexport)
//BOOL __stdcall OpenNexioMulti();

function OpenNexioMulti: Boolean; stdcall; external 'MultiDll.dll' name 'OpenNexioMulti';




//////////////////////////////////////////////////////////////////////////
//
// Function:    WaitNexioMulti
//
// Description:
//  Wait Event and Touch Coordinate Output
//
// Input :
// nTime : [in] event wait time :: nTime is millisecond (INFINITE wait event infinite)
// Output :
// pBuffer : [out] pointer of touch coordinate
//
// Returns:
// EVENTARRIVED : Event arrived
// TIMEWASOUT : Wait time was out
// UNKNOWNERR : Unknown error object
//
//////////////////////////////////////////////////////////////////////////

//extern "C" __declspec(dllexport)
//int __stdcall WaitNexioMulti(DWORD nTime, OutputMulti *pBuffer);

function WaitNexioMulti(nTime: DWORD; pBuffer: POutputMulti): Integer; stdcall;  external 'MultiDll.dll' name 'WaitNexioMulti';

//////////////////////////////////////////////////////////////////////////
//
// Function:    CloseNexioMulti
//
// Description:
//  Close Event of NEXIO Multi-Point TouchScreen coordinate
//
//////////////////////////////////////////////////////////////////////////
//extern "C" __declspec(dllexport)
//void __stdcall CloseNexioMulti();
procedure CloseNexioMulti; stdcall; external 'MultiDll.dll' name 'CloseNexioMulti';





//////////////////////////////////////////////////////////////////////////
//
// Function:    NexioSetRotate
//
// Description:
//  set rotation of touch-screen
//  iRotateCode : NEXIO_ROTATE_XXX
//////////////////////////////////////////////////////////////////////////
//extern "C" __declspec(dllexport)
//void __stdcall NexioSetRotate( int iRotateCode );
procedure NexioSetRotate(iRotateCode: Integer); stdcall; external 'MultiDll.dll' name 'NexioSetRotate';





//////////////////////////////////////////////////////////////////////////
//
// Function:    NexioGetRotate
//
// Description:
//  get rotation code of touch-screen
//  return : NEXIO_ROTATE_XXX
//////////////////////////////////////////////////////////////////////////
//extern "C" __declspec(dllexport)
//DWORD __stdcall NexioGetRotate();
function NexioGetRotate: DWORD; stdcall; external 'MultiDll.dll' name 'NexioGetRotate';

implementation




// x,y : point for rotation
// mx, my : width, height of screen
// fRatio : mx / my ( ratio in float )
// dwRotateAngle : angle in degree (NEXIO_ROTATE_XXX)

procedure nxRoratePoint(var x, y: Integer; mx, my: Integer; fRatio: Real; dwRotateAngle: DWORD);
var
  x0, y0: Integer;
begin
x0 := x;
y0 := y;
case dwRotateAngle of
    NEXIO_ROTATE_0:
      Exit;
    NEXIO_ROTATE_L90:
    begin
      x := Trunc( mx - y0 * fRatio );
      y := Trunc( x0 / fRatio );
      Exit;
    end;
    NEXIO_ROTATE_180:
    begin
      x := Trunc( mx - x0);
      y := Trunc( my - y0);
      Exit;
    end;
    NEXIO_ROTATE_R90:
    begin
      x := Trunc( y0 * fRatio );
      y := Trunc( my - x0 / fRatio);
      Exit;
    end;
    NEXIO_ROTATE_360:
    begin
      x := Trunc( y0 * fRatio);
      y := Trunc( x0 / fRatio );
      Exit;
    end;
    NEXIO_ROTATE_MIRROR_V: //mirror vertical
    begin
      y := my - y0;
      Exit;
    end;
    NEXIO_ROTATE_MIRROR_H: //mirror horizontal
    begin
      x := mx - x0;
      Exit;
    end;
  end;

end;





end.
Posted by Parker Falcon
구글 크롬에서 Mouse Gesture 을 사용하면 이상하게 처리됩니다.
jQuery로 간단하게 처리하세요.

jQuery('div#ChromeGesture-BackgroundSupportElement').css('position', '').css('height','').css('width','');

Posted by Parker Falcon
자동으로 USB 저장장치를 백업하는 프로그램입니다.
USB메모리를 꽂으면 자동으로 정해진 폴더에 날짜 및 시간으로 폴더를 만들어 해당 USB에 파일을 백업하는 프로그램입니다. 특히 SD카드같은것을 여러개 백업할 일이 있으실 때 매우 편리합니다.
자동으로 생성되는 폴더는 일반적으로 내 문서 아래에 OhMyUSBCloner 밑에 날짜 및 시간으로 폴더가 생성됩니다. 만약 잘 안되는 부분이 있으면 내 문서 폴더 아래에 OhMyUSBCloner 밑에 해당 날짜.log 로 생성된 로그파일을 같이 첨부해서 보내주시면 참고하겠습니다.



다운로드



Posted by Parker Falcon
Magento
PrestaShop
oscommerce
Joomla!
Zen Cart

Posted by Parker Falcon