2013년 10월 27일 일요일

[Nginx] PHP-FPM 실행을 했는데 500 internal error 가 나온다


삼바서버 및 PHP 등 을 통해 수십시간 삽질을 한 후...

이제 에러나면 로그 보는게 제일 빠르다는 걸 알게 되었습니다.

Nginx를 실행하고 PHP-FPM Reverse Proxy 연결하신 경우라면

PHP-FPM 로그가 아니라 Nginx 로그를 보시면 됩니다.

cat /var/log/nginx/error.log

Nginx 로그입니다.

뭘까요


Stack trace:
#0 /usr/share/nginx/html/sl/php/Predis/Connection/StreamConnection.php(94): Predis\Connection\AbstractConnection->onConnectionError('Connection refu...', 111)
#1 /usr/share/nginx/html/sl/php/Predis/Connection/StreamConnection.php(70): Predis\Connection\StreamConnection->tcpStreamInitializer(Object(Predis\Connection\ConnectionParameters))
#2 /usr/share/nginx/html/sl/php/Predis/Connection/AbstractConnection.php(95): Predis\Connection\StreamConnection->createResource()

간단하죠? Predis 에서 Redis를 이용하려 했는데 안된겁니다.

왜냐고요?

꺼져있으니까 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

/usr/local/bin/redis-server&

실행하니 잘되네요.

ㅠㅠ 내 시간들..

[CentOS] 삼바(SAMBA) 서비스가 실행이 안된다.

보안설정 50개 정도를 하고나서 갑자기 삼바가 실행이 안되었습니다.

온갖 삽질 다해보고 보안설정 이것 저것 풀어도 보고.. 삭제하고 설치하기만 몇번 했는지.

/usr/local/samba/bin/testparm /etc/samba/smb.conf 를 해봐도 이상 없고

다 지운 후 직접 컴파일도 해봤습니다.
(교훈 : 왠만하면 직접 설치는 하지말자...
지우기도 까다롭고 이 파일 저 파일 종속성도 높다)

yum -y install python-devel
mkdir /usr/local/samba
wget http://us1.samba.org/samba/ftp/samba-latest.tar.gz
tar xvfz samba-latest.tar.gz

#버젼으로 이동
cd samba-4.1.0/
./configure –prefix=/usr/local/samba –with-automount –with-pam_smbpass –with-syslog –with-utmp
make;make install
chkconfig --add smbd
cd /usr/local/samba/sbin/
cp * /sbin/

vi /usr/local/samba/etc/smb.conf
열어서 /usr/local/samba/lib 적어줌

링크도 만들어줌
# ln -s /usr/local/samba/lib/libtalloc.so.1 libtalloc.so.1
# ln -s /usr/local/samba/lib/libtdb.so.1 libtdb.so.1
# ln -s /usr/local/samba/lib/libwbclient.so.0 libwbclient.so.0


테스트 팜 실행해서 오류없나 살펴봄
/usr/local/samba/bin/testparm 

cd ..
cd bin
./smbpasswd -a root
service smbd start

그래도 안됨.

그러고보니 var/log/samba 에 로그가 쌓이죠.

cat log.smbd

로그내용
[2013/10/27 02:01:47.638162,  0] auth/auth_util.c:707(get_guest_info3)
  SamInfo3_for_guest: Unable to locate guest account [nobody]!
[2013/10/27 02:01:47.638307,  0] smbd/server.c:1205(main)
  ERROR: failed to setup guest info.

에헤헤헤헤헤헤헤헤헤헤헤헤

보안 설정 한다고 노바디 계정을 지워서 그랬어 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

vi /etc/passwd

ㅋㅋㅋㅋㅋ

2013년 10월 26일 토요일

[JAVA] Socket.io blocking(동기) Callback 방법

Hello SyntaxHighlighter

Socket.io

자바에서 Socket.io를 쓰기로 했고 저는 내부 통신 전부를 추상화된 모듈 형식으로 만들어야 했습니다.

자바는 기본적으로 Blocking으로 실행되지만, 서버인 Node.js는 Non-Blocking 입니다.

문제는 서버측에서 Emit해 주는 것을 자바에서도 비동기로 받는다는 것이었습니다.

자바스크립트에서는 비동기로 하고 싶으면 Callback을 이용해 쉽게 할 수 있는데

자바에서는 on이라는 함수가 비동기적으로 이벤트가 일어날 때 마다 받게 되어있더군요.

그래서 콜백을 직접 구현하기로 했습니다.

동작방식은 다음과 같습니다.
1.전역변수를 Null로 잡고, 자바측에서 Emit한 후 이 전역변수가 Null이 아닐때 까지 While문으로 체크합니다.
2.서버측에서 값이 전달되어 전역변수값이 바뀌면, 자바측에서 값을 받아오고 전역변수 값을 다시 Null로 만듭니다.
실제 서버에서 전달된 값이 Null일때만 조심하면 됩니다.
// 사용 : https://github.com/Gottox/socket.io-java-client
// Class명 : MyModule

static Object Emit_value=null; // 사용될 전역변수입니다.

//////////////////////////////////////////////////////////////////////////
...
public void on(String event, IOAcknowledge ack, Object... args) { 
// 이렇게 Thread 내부 on에서 event에 대한 arg를 받으면
// 그 값을 바꿉니다. 주의 할 점은 Emit_value 자체가 null 일 때 입니다.

                   Emit_value=null;
                   if(args[0]!=null){
                    Emit_value=args[0];
                   }
                   else Emit_value=-1;
               }
...
///////////////////////////////////////////////////////////////////////////

private synchronized Object callback(){
  while(Emit_value==null){try {
   Thread.sleep(20);
// 이 부분을 수정하여 timeout 이라는 변수를 하나 선언 한 후
// 다음과 같이 해주면 과도한 Block을 막을 수 있습니다. 
//Thread.sleep(timeout);
//timeout*=2; 
//if(timeout>5000) return -1;
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }}
   Object temp_value=Emit_value;
   Emit_value=null;
   return temp_value;
 }

private static String md5(String input){ //MD5 암호화
     String result = input;
     if(input != null) {
         MessageDigest md;
   try {
    md = MessageDigest.getInstance("MD5");
         md.update(input.getBytes());
         BigInteger hash = new BigInteger(1, md.digest());
         result = hash.toString(16);
         while(result.length() < 32) {
             result = "0"+result;
         }
   } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
   }
     }
     return result;
 }

public int reqLogin(String ID, String PW){
  try {
   socket.emit("c/reqLogin",new JSONObject().put("PW",PW).put("ID", ID));
   return (int) callback(); // Blocking 합니다.
  } catch (JSONException e) {
   e.printStackTrace();
  }
  return 0;
 }

//사용법 : MyModule 객체를 생성한 후, 사용하면 됩니다.
MyModule.reqLogin("bykim", md5("user_password"))


Callback 함수 While문 내부의 sleep(0)은 중요합니다.

저게 없으면 CPU 사용률이 100%가 되어 서버측에서 메시지는 보냈는데

정작 자바에서는 아무것도 못받고 소켓이 끊길 때 까지 기다리게 되는 수가 있습니다.

While문 돌 때 마다 System.out.println(); 를 찍어주면 느려지기(?) 때문에 제대로 돌아가지만
그것보단 Sleep() 이 낫겠죠?

참고 : Thread의 Context Switch에 걸리는 시간은 최소 10msec정도라고 하며
60msec정도가 한계인 irix,solaris 도 있습니다.
그리고 Sleep(0)의 경우, 다른 쓰레드가 준비 되었다고 해서 자신의 CPU의 선점을 넘겨주지 않으며,
우선순위가 서로 같아야 CPU가 넘어갑니다.

2013년 10월 11일 금요일

[Java] Ant Build Failed


ANT 빌드 실패시


Socket.io 을 자바에서 사용할 수 있는 https://github.com/Gottox/socket.io-java-client

을 사용할 일이 있어서 Ant로 빌드하려 했는데 다음과 같은 에러가 떴습니다.




보면 현재 자바 홈 디렉토리가 C:\Program Files\Java\jre7 으로 되어있다고 나오는데요,

여기에는 필요한 tools.jar파일이 없기 때문에 빌드가 되지 않았습니다.

tools.jar파일이 저는 jdk1.7.0_11 폴더의 bin 에 있었기 때문에

환경변수의 PATH에 추가했는데도 이상하게 안되더군요.

그래서 C:\Windows\System32\apache-ant-1.9.2\bin\ant.bat을

직접 수정하기로 했습니다.

윈도우 cmd쉘은 정말 쉽게 잘 만들어진 쉘 중 하나죠.. ant.bat 보면서

느꼈습니다. 역시..짱짱맨

ant.bat 을 열면 글자들이 주루룩 나오는데요

@echo off 는 명령어 출력을 끄는거고

REM은 주석을 말합니다.



주석이 끝나는 지점에

set PATH=C:\Program Files\Java\jdk1.7.0_11\bin

를 추가해주니 잘 되는군요.

물론 이 PATH는 ant.bat 에만 적용되는 겁니다.





Build Successful !!



참고 :

Jar 외부 파일 임포트하는 방법


프로젝트 오른쪽 -> Properties

Java Build Path -> Libraries -> Add External JARs...

해당 Jar 파일 열기


-추가후에 ClassNotFound 에러가 뜰 때


라이브러리 오른쪽 -> Import

File System -> Browse 에서 JAR 파일 경로 및 Jar파일 선택



2013년 10월 3일 목요일

[UCrew] 발대식과 Ativ Tab 3 사용기


최근에 Microsoft UCrew 에 지원했는데 운 좋게 합격해서 발대식에 다녀왔습니다.

UCrew Kit을 받기위해 줄을 선 UCrew 멤버들









































조금 기다린 끝에

UCrew Kit 을 받을 수 있었습니다~!

UCrew Kit : 가방, 목걸이 명함, 명함, 블루투스 마우스, ATIV Tab 3, 케이블, 야구점퍼


























추첨을 통해 ATIV Book 9 lite  / ATIV Tab 3 중에 무엇을 받을지 결정 되었는데요.

저는 노트북이 이미 있었기 때문에 ATIV Tab 3를 받게 되어 너무 좋았습니다.


왼쪽부터 ATIV Tab 3 와 블루투스 키보드



























빛나는 ATIV Tab 3 그리고 블루투스 키보드 ~

Tab 3를 블루투스 키보드에 끼웠다 뺐다 하면서 사용 가능합니다.

다만 단점이 있다면 360도 회전이 안된다는것과 자석 받침대로 가능한 각도가

사진처럼 단 하나라는 것입니다.

다른 악세서리가 빨리 나오길 바랍니다ㅠㅠ



ATIV Tab 3의 가장 큰 장점은 OS로 윈도우 8이 설치되어 있다는 건데요

탭에 Visual Studio를 깔아서 생활 코딩을 합시다!

























보시다시피 기존의 윈도우에서 돌아가는 모든 프로그램이 다 돌아갑니다. 그리고

마이크로소프트 계정이 연동되어 보시다시피 기존의 제가 사용하던 씽크패드 노트북의

Node.js 바탕화면과 탭의 바탕화면이 별도 설정 없이 동기화 되어 있습니다.





ATIV Tab 3는 윈 8입니다. 두려울게 없죠!

아무생각없이 산 64G 짜리 SDXC 카드도

바로 바로 인식되고 사용가능합니다.

SDXC 64G UHS-I (exFAT , Class10) SanDisk 











































제가 솔직하게 평가해 본 ATIV Tab 3

단점?
1. 아톰....조금 느리다.(코딩하고 빌드할 때랑 프로그램 로딩할 때 )
2. 딸려있는 블루투스 키보드가 각도 조절이 하나밖에 안되고 360도 회전이 안된다.

장점?
1. 윈8이 설치되어있다. ( 오피스, 코딩, 서버 등 모든 것을 할 수 있다. )
2. 매우 가볍다. (500g대)
3. 배터리가 오래간다.
4. 터치가 가능하다.



2013년 10월 2일 수요일

Power Mockup 라이센스 취득!


최근에 Powermockup에 대해 포스팅을 했었는데요

Wulfsoft 에 감동적인(?) 메일을 보냈더니

답장이 왔습니다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

Hello,

Thank you for the blog post. Here's your free single-user license code in return:

...중략


If you notice any problems with PowerMockup, please let me know.


Regards

Andreas Wulf

-- 
PowerMockup
http://www.powermockup.com/

Provided by Wulfsoft
Hamburger Str. 2 - 48155 Münster - Germany
VAT ID: DE225372217

Follow us on Twitter: http://twitter.com/wulfsoft

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

모든 기능을 사용할 수 있는 라이센스를 주셨네요 !

그래서 직접 한번 사용해 보았는데요.



이 프로그램의 장점은 기존의 라이브러리를 가져와 조금만 수정해서

나만의 Library를 만들 수 있다는 점입니다.



이렇게 원하는 폼을 Drag and Drop을 한 다음,





바로 Add to Stencil Library 버튼을 통해 라이브러리에 추가를 할 수 있습니다.


NewLogin이란 이름으로 추가를 해보았는데요.

검색도 가능하니까

추후 라이브러리를 엄청나게 많이 추가한 경우를 고려해서

알아보기 쉬운 이름으로 짓는게 좋겠죠.




이렇게 목업이 금방 완성되고

만들었던 라이브러리는 다른 PPT 파일에서도 곧바로 재사용이 가능합니다.



그럼 다음에 뵙도록 하겠습니다.