2018. 9. 7. 14:11

+ curl을 활용하여 공인 IP 확인 하기


> curl bot.whatismyipaddress.com

> curl http://ipecho.net/plain

> curl icanhazip.com

> curl ipv4.icanhazip.com

> curl ipv4.ipogre.com

'LINUX' 카테고리의 다른 글

[httpd] - 디렉토리 권한 문제  (3) 2012.11.09
버전, 비트 확인하기  (0) 2012.09.24
자바 프로세스 종료  (0) 2012.08.27
[RPM] - 명령어 정리  (1) 2012.08.06
ssh 연결방법  (0) 2012.08.06
Posted by 짱가쟁이

SQL Server version 2012 이후 부터 사용 가능 하다고 함


SELECT FORMAT(GETDATE(), 'yyyyMMddHHmmssfff');

>> 20161216152721827


SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss');

>> 2016-12-16 15:27:21



Posted by 짱가쟁이

유한상태기계(Finite State Machine, FSM)


 > 장치나 모델이 가질 수 있는 유한개의 상태를 정의하고, 조건에 맞는 이벤트가 발생되면 해당 상태로 변경되는 방식으로 동작하는 것을 유한상태기계라 한다.


 e.g. 전등의 스위치는 ON일때 불이 들어오고, OFF일때 불이 꺼진다. 

      이런 형태로 정해진 이벤트를 받아서 동작하는 장치나 모델을 보고 유한상태기계라 한다.

'java > etc' 카테고리의 다른 글

[etc] - enum 사용 예  (0) 2014.12.24
Domain name to ip address  (0) 2012.05.15
[URL] - FTP 접속 URL  (0) 2012.05.15
[AES] - 256bit 키를 인식하지 못할 때 사용하는 방법  (0) 2011.11.30
[etc] - 테스트 유형  (0) 2010.12.21
Posted by 짱가쟁이

[2016-05-04 17:42] 

위 형태로 에디터창에 충력하고 싶을 때 하위 플러그인 코드를 삽입하면 된다.



# Tools > New Plugin

# Save as signature.py


import datetime, getpass

import sublime, sublime_plugin


class SignatureCommand(sublime_plugin.TextCommand):

    def run(self, edit):


        signature = "[%s]\n\n\t" % (datetime.datetime.now().strftime("%Y-%m-%d %H:%M"))


        self.view.insert(edit, self.view.sel()[0].begin(), signature)



'개발도구' 카테고리의 다른 글

[크롬] - Rest test client  (0) 2012.07.05
Posted by 짱가쟁이

로컬 저장소를 생성하지 않고, jar 파일을 추가하고 싶을 때 간단하게 사용하면 편하다.

팀으로 개발한다면, 개발환경을 맞춰야 하고 젠킨스를 통한 배포 시 배포서버에 경로를 맞춰야 한다는 불편함이 존재한다.



<dependency>

<groupId>ktis.taxrefund.utils</groupId>

<artifactId>ktis.taxrefund.utils</artifactId>

<version>0.1</version>

<scope>system</scope>

<systemPath>D:\home\ubuntu\libs\xxx.jar</systemPath>

<!-- <systemPath>/home/ubuntu/libs/xxx.jar</systemPath> -->

</dependency>




'maven' 카테고리의 다른 글

jobss 7.1.Final 배포  (0) 2015.02.06
[cobertura] - 코드 커버리지 플러그인  (0) 2015.02.03
[PMD] - reporting 설정  (0) 2015.02.02
Posted by 짱가쟁이


Local 디렉토리에 있는 파일을 다운로드하는 예제 소스


** 컨트롤러

@RequestMapping(value="/demo/download.do")

public void download(

 HttpServletRequest request

, HttpServletResponse response) throws Exception {

// 다운로드 파일 정보 조회

String downloadFilePath = "/tmp/original.jpg";

InputStream inputStream = getFileInputStream(downloadFilePath);

// HTTP 다운로드 프로토콜 정의

ServletContext context = request.getSession().getServletContext();

int contentLengt = inputStream.available();

setHttpDowndloadProtocol(context, response , downloadFilePath, contentLengt);

// 다운로드 파일 쓰기

OutputStream outStream = response.getOutputStream();

writeToResponse(inputStream, outStream);


inputStream.close();

outStream.close();

}



- 다운로드 파일 조회

private InputStream getFileInputStream(String downloadFilePath) throws FileNotFoundException {

File downloadFile = new File(downloadFilePath);

return new FileInputStream(downloadFile);

}


- HTTP 다운로드 프로토콜 정의

private void setHttpDowndloadProtocol(

 ServletContext context

, HttpServletResponse response

, String downloadFilePath

, int contentLength) {

String mimeType = getMimeType(context, downloadFilePath);

response.setContentType(mimeType);

response.setContentLength(contentLength);


String contentDisposition = String.format("attachment; filename=\"%s\"", "download.jpg");

response.setHeader("Content-Disposition", contentDisposition);

}


private String getMimeType(

  ServletContext context

, String downloadFilePath) {

String mimeType = context.getMimeType(downloadFilePath);

if (mimeType == null) {

  mimeType = "application/octet-stream";

}

return mimeType;

}


- 다운로드 파일 쓰기

private void writeToResponse(

  InputStream inputStream

, OutputStream outStream) throws IOException {

byte[] buffer = new byte[1024];

int bytesRead = -1;


while ((bytesRead = inputStream.read(buffer)) != -1) {

  outStream.write(buffer, 0, bytesRead);

}

}


Posted by 짱가쟁이

[추상화-abstraction]

  - 관심있는 부분만을 추출하여 형상화하는 것.

 

[일반화 - generalization]

- 추상화된 관심중에 공통된 성질만을 추출하여 형상화 하는 것.


'study' 카테고리의 다른 글

[도서] - 자바 병렬 프로그래밍  (0) 2010.06.30
[도서] - Java Performance Fundamental  (0) 2010.06.30
[Apache Click] - 클릭(??)  (0) 2010.06.28
용어정리  (0) 2010.06.28
Posted by 짱가쟁이
2015. 12. 8. 09:58

서버는 하드웨어 성능상에 문제가 없어도, 클리아인트의 접속수가 많이지면 OS 파일 디스크립터나 메모리 사용량에 따른 콘텍스트 스위치 등에 의해 문제가 발생한다. 이를 해결하기 위해 하나의 프로세스로 복수의 접속을 처리하는 논블로킹 I/O 기법을 사용한다. 논블로킹 I/O는 OS 시스템 콜로 구현한다. netty, node.js, Nginx, GlassFish 등이 논블로킹 I/O를 채택하고 있다.


출처 - 그림으로 공부하는 IT 인프라 구조 (제이펍)

Posted by 짱가쟁이

Ajax를 사용하여 페이지를 전환하면, history에 기록되지 않아 Back 버튼이 동작하지 않는다. 물론 해당 방식이 꼭 문제가 되는것은 아니지만, 모바일 웹 어플리케이션 개발에는 문제가 될 수 있다. 예를들어, 플리킹으로 페이징 후 상세로 전환하고 이전으로 돌아오는 씬을 Ajax로 구현하면 이전 페이징 정보를 history에 저장하고 있지 않기 때문에 처음(1페이지)으로 이동하게 된다. 사실 날코딩으로 해당 이슈를 해결할 수 있겠지만 생산성이 떨어진다는 문제가 있다.


좀더 쉽게 해결할 수 있는 방법이 없을까? 라는 물음으로 구글신한테 물어보니, pushState <- 요넘이 검색되더라. 해당 기능을 활용하여 날코딩하니, 깔금하게 동작은 하나 역시나 생산성 및 가독성이 현저하게 떨어지는 문제가 발생했다.


한번더! 도전하는 마음으로 웹전문가 후배님한테 연락 하니, 역쉬 전문가는 전문가 pjax를 알려주더라. 부랴부랴 레퍼런스를 읽어보니, 오호~ 좋더란말이쥐 ^^


샘플 데모를 작성하여 기록용으로 남긴다.


main.html

<!DOCTYPE html>
<html lang="ko">
 <head>
  <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
     <meta name="description" content="">
     <meta name="author" content="">
    <meta http-equiv="Expires" CONTENT="-1">
    <meta http-equiv="Cache-Control" CONTENT="no-cache">
    <meta http-equiv="Pragma" CONTENT="no-cache">
   
  <title>pjax-demo</title>
  
  <script src="../js/jquery-1.11.3.min.js"></script>
  <script src="../js/jquery.pjax.js"></script>

  
  <script>
   function moveDetail() {
     $.pjax({url: '../pjax/detail.html', container: '#pjax-container'})
   }


   function more() {
    var html = "";
    for(var i = 0;i<50;i++)
     html += "<div onclick='moveDetail()'>append"+i+"</div>";
    
     $("#list").append(html);
   }
  </script>
  
 </head>
 
 <body>
 <div id="pjax-container">
  <div id="list">
   <div onclick="moveDetail()">
    안녕
   </div>
   <div onclick="moveDetail()">
    안녕
   </div>
   <div onclick="moveDetail()">
    안녕
   </div>
   <div onclick="moveDetail()">
    안녕
   </div>   
  </div>
  <div onclick="more()">
   더보기
  </div>
 </div>  
 </body>
</html>


detail.html

 <head>
  <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
     <meta name="description" content="">
     <meta name="author" content="">
  
     <meta http-equiv="Expires" CONTENT="-1">
     <meta http-equiv="Cache-Control" CONTENT="no-cache">
     <meta http-equiv="Pragma" CONTENT="no-cache">
   
  <title>pjax-demo</title>
  
  <script src="../js/jquery-1.11.3.min.js"></script>
  <script src="../js/jquery.pjax.js"></script>
  
 </head>
 
 <body>
 <div id="pjax-container">
  <div id="detail">
   상세
  </div>
 </div>
 </body>


Posted by 짱가쟁이

한글을 바이너리 데이터로 변환하자

1> %% utf-8 encode data 만들기

1> B = unicode:characters_to_binary("한글", utf8).
<<237,149,156,234,184,128>>


? 디코드

 -> unicode:characters_to_list(B).


2> %% 출력
2> io:format("~ts~n", [B]).
한글
ok


3> %% 실행 경로 변경

3> cd("d:").
D:/
ok


4> %% 파일 저장

4> file:write_file("/tmp/test", [B]).
ok


'Erlang' 카테고리의 다른 글

Symmetric Multiprocessing (SMP:대칭형 다중처리)  (0) 2015.08.28
분산 테스트  (0) 2015.08.17
참조 투명성?  (0) 2015.08.04
Erlang/OTP 란?  (0) 2015.08.03
Posted by 짱가쟁이