2018년 11월 11일 일요일

Air Comic Server

소개

Air Comic Server 는 안드로이드 코믹/이미지 뷰어인 Air Comic Viewer 의 서버용 프로그램 입니다. Air Comic Server 프로그램을 사용할 경우 여러분의 안드로이드 기기에 파일을 복사할 필요없이 Viewer 에서 직접 접속하여 스트리밍으로 여러분의 파일을 볼 수 있습니다.

Air Comic Server의 특징은 아래와 같습니다.
  • 가볍고 빠르다
  • Java를 사용하여 Windows/Linux/Mac 지원은 물론 Java를 지원하는 모든 기기에서 사용 가능
  • 이미지 전송 사이즈 최소화
    • 디바이스의 해상도에 맞춰 전송하는 이미지 사이즈를 최적화하며, Google webp 포맷을 지원하여 품질을 떨어뜨리지 않고 원본대비 40%로 데이터 사용량을 줄임
  • 멀티 디바이스 사용자의 이어보기를 지원
  • UPnP 포트 포워딩 지원


업데이트 내역

구 버전 Change log

v0.9.0 (2018/11/11)
  • webp 지원 추가(only for Windows/Linux/Mac)
  • 서버 동작 중 UPnP 설정이 지워질 경우 주기적으로 확인하여 복구
  • CLI 환경 사용법 변경
  • 윈도우 부팅시(로그온) 자동 실행 동작 안되는 버그 수정
  • 로그가 파일로 남도록 변경
  • Rar 파일 처리 성능 개선
  • JPEG 호환성 개선
  • 사용자 히스토리 저장 방법 개선
v0.9.1 (2018/11/27)
  • 서버 히스토리 삭제 기능 추가
  • CLI 환경에서 -h 옵션 시 버전 정보 출력
v0.9.2 (2018/12/07)
  • 디렉토리 마지막이 "/" 일 경우 상위 디렉토리에 접근 가능한 문제 수정
v0.9.3 (2018/12/12)
  • UPnP 기능을 끄는 CLI 용 옵션 파라메터 "--noupnp" 추가
v0.9.4 (2019/09/18)
  • 서버 접속 시 History 리스트의 순서가 제대로 정렬되지 않는 문제점 수정

실행 방법 (GUI 환경 - 일반 사용자용)

Air Comic Server 실행을 위해서는 최신버전 Java가 설치되어 있어야 합니다.

Java 설치 방법(Windows)

리눅스의 경우 리눅스 별 Oracle Java 8 설치방법을 확인하셔서 설치하시면 됩니다.

Java가 설치되었다면 하단에 첨부된 파일을 다운 받고 압축을 푼 후 AirComicServer.jar를 클릭하여 실행하시면 됩니다.




옵션 안내

  • IP Address
    • IP address 에는 AirComicServer가 동작하는 컴퓨터의 모든 IP 주소가 표시됩니다. 만약 공유기를 사용하는 환경일 경우 공유기가 UPnP를 지원하면 IP 가 두 개(external, internal) 나옵니다. 와이파이 환경으로 집에서 접속할 때는 internal IP를, 외부에서 접속할때는 external IP를 사용하시면 됩니다.
  • TCP Port
    •  통신을 하기 위해서 필요한 내용입니다. Air Comic Viewer에서 서버 생성시 위에서 설정한 숫자와 동일하게 생성 하시면 됩니다.
  • Password
    • 비밀번호를 설정하고 싶을 경우 원하시는 비밀번호를 적으시면 되며, Air Comic Viewer에서 서버 생성시 위에서 설정한 내용과 맞춰 주시면 됩니다.
  • Don't Resize
    • AirComicServer 는 기본적으로 각 안드로이드 기기에 맞도록 이미지 크기를 최적화 해서 보내줍니다. 서버 사양이 너무 낮아서 성능이 안 나오는 경우 이 옵션을 선택하면 이 크기 최적화를 수행하지 않아서 성능부하를 낮출 수 있습니다.
  • Don't convert WEBP
    • AirComicServer 는 v0.9.0 버전부터 안드로이드 기기로 이미지 전송시 구글의 WEBP 포맷을 이용하여 이미지 품질 저하 없이 데이터 사용량을 약 40% 감소시킵니다. 서버 사양이 너무 낮아서 성능이 안 나오는 경우 이 옵션을 선택하면 Webp 변환을 수행하지 않아서 성능부하를 낮출 수 있습니다.
  • Run at startup
    • 프로그램을 실행하자 마자 서버가 Start 되도록 합니다.
  • Runs at windows logon
    • Windows OS 에서만 사용할 수  있는 기능이며 컴퓨터 부팅 후 사용자가 로그인시 자동으로 프로그램이 실행되게 합니다.
  • Add Directory/Remove Directory
    • 공유할 디렉토리를 추가하거나 삭제합니다.

 설정 완료 후 Start Server 버튼을 누르면 아래쪽의 빨간색 박스가 녹색으로 바뀌며 서버가 동작 중이라고 변경됩니다.

방화벽 경고가 뜰 경우 "차단 해제"를 선택 해주시기 바랍니다.

최신 버젼이 나왔는지 확인하시려면 Check Update 버튼을 누르시면 됩니다. 결과가 나오는데 시간이 좀 걸릴 수도 있으니 기다리시기 바랍니다.




실행 방법 (CLI 환경 - 고급 사용자용)

그래픽 환경이 아닌 콘솔 CLI 환경에서 실행하는 방법입니다.

최신버전 Java (Java 7 이상)가 설치되었다면 하단에 첨부된 파일을 다운 받고 압축을 풀고 아래 Argument를 사용하여 실행하시면 됩니다. 자세한 옵션 설명은 GUI 내용을 보시기 바랍니다.

Argument

  • -h : 사용법을 봅니다.
  • -c : CLI 사용을 위한 필수 옵션 입니다.
  • -d 디렉토리1 디렉토리2 ... : 공유 대상 디렉토리를 space로 구분하여 입력합니다. 디렉토리에 space 문자가 있을 경우 "디렉토리1" 형태로 ""를 사용하시면 됩니다.
  • -p : TCP Port 번호 설정 (옵션. 기본값 21002)
  • --password  : 서버 접속을 위한 비밀번호 설정(옵션)
  • --noresize (옵션)
  • --nowebp (옵션)

실행 예제
java -jar AirComicServer-vX.X.X.jar -c -d /home/dir1 /home/dir2 -p 21002 --password p1


부팅 시 자동실행 설정

Windows의 경우 "Runs at windows logon" 옆의 체크박스를 체크하시면 됩니다.
Linux, Mac OS의 GUI 환경일 경우 "Auto Start" 옵션을 체크 후 시작시 실행되도록 등록하시면 됩니다.

프로그램 다운


FAQ.

1. AirComicServer-vX.X.X.jar를 더블클릭해도 실행이 안됩니다.
 >> 여러가지 원인이 있지만 가장 간단한 해결방법은 Java를 다시 설치하는 것입니다.



버그 리포팅 & 추가 기능 요구사항은 댓글로 달아주세요.

댓글 15개:

Unknown :

오랜만의 업데이트 감사합니다. 폰과 8인치 태블릿에서 잘 쓰고 있습니다.
최근에 E-ink 기기에도 깔아서 쓰려고 하는데요
아무래도 기기 특성상 화면잔상이 남다보니,화면 넘김효과가 있으면 잔상이 더 심한게 단점입니다. 그래서 어쩔 수 없이 퍼펙트뷰어나 문리더등을 깔고 화면 전환 효과 없음으로 해서 쓰고 있는데요.
만화책 용량이 크기도 하고 일일히 넣어서 보기도 번거롭구요
에어코믹 만큼 편한게 없어서요
혹시 장 넘어갈때 효과가 없는 부분도 선택 가능하게 만들어주실 수 없을까 부탁드려봅니다.

GnomeWarrior64 :

이미지 뷰어 설정에 해당 옵션 추가하였습니다. 업데이트 부탁드립니다.

Unknown :

개발자님 정말 감사합니다. 장넘김효과없이 E-ink 기기인 Likebook mars 에서 잘 작동합니다. 피드백이라고 해야하나 요청사항이라고 해야 하나? 하나 더 말씀드려보면, 설정 중에 볼륨키로 페이지 넘기는 부분 있죠?
일반적인 방향 left to right인 경우 여타 리더 어플들은 페이지 다운 버튼이페이지 넘김이 되게 되어있는데요. 현재 어플은 반대로 설정되어있거든요. 아무래도 right to left인 일본 만화책 기준인듯 싶은데요. 읽는 방향에 따라 페이지 업다운 설정을 바꿀 수 있는 부분도 있으면 어떨까 싶습니다.
이게 사실은 페이지 업다운을 블루투스 리모콘 키에 할당해서 넘기는 이북기기 유저들이 많다보니 동일한 사용자 경험? 측면에서 말씀드려봅니다.

GnomeWarrior64 :

페이지 이동 버튼을 입력받아서 할당이 가능하도록 변경할 예정입니다. 피드백 감사합니다.

오후네시 :

웹툰처럼 세로가 길 때 가로 맞춤시 이미지가 안보이고 검은색만 보입니다.
옛날 버젼에도 이런 버그가 있었습니다.
네트워크 오류시나 로딩이 길 때 화면에서 빠져 나올 수가 없습니다.
상태바와 네비게이션바를 숨긴상태에서 네트워크 오류가 발생하면 화면을 누를 수가 없기 때문에 마냥 기다릴 수 밖에 없습니다.시간제한오나 제스처,키를 동시에 누르는 등의 대책이 필요합니다.
묻지않고 이어보기 사용중에 다음 화일 열 때 자주 히스토리탭으로 빠져나오는 경우가 많습니다.

오늘까지 사용중에 이 세가지만 버그가 있네요^^

GnomeWarrior64 :

이미지 로딩 화면 탈출 불가 관련하여 상/하단 스와이프로 상태/네비게이션바가 나타나도록 변경 할 예정입니다.

가로 맞춤시 검은색 문제와 이어보기 시 히스토리탭으로 나가는 문제는 확인하였으며 수정할 예정입니다.

문제 제보 감사합니다.

담배값좀내려 :

안녕하세요. 간만에 업데이트시네요 고맙습니다^^
리눅스 환경에서 서버를 구동 중인데 몇가지 문제가 될 수 있는 부분을 발견하여 공유드립니다

1. 지정된 디렉토리 외 타 디렉토리 조회 가능
2. 프로세스 조회 시 실행 옵션이 모두 보임. --password 확인 가능

1번의 경우 java를 실행하는 사용자 권한에 종속되기 때문에 새로 계정을 만들어 AirComixServer를 실행시키면 어느정도 보안이 가능하지만 권한이 잘못 설정된 파일을 읽을 수 있기 때문에 지정된 디렉토리 상위로 이동을 불가하게 하는 기능이 필요하다 생각됩니다.
2번의 경우 비밀번호를 전처럼 실행파일이 아닌 전달인자로 줘버려서 프로세스 조회 시 비밀번호가 뭔지 다 보이네요 ㅎㅎ 일단 뭐 대충 비밀번호를 아무거나 설정을 하고 있습니다 ㅋㅋ
추가 개발에 시간내기가 힘드시다면 오픈소스로 돌려보는건 어떨지 추천드립니다.
그리고 다들 윈도우즈를 쓰실거 같긴 한데 혹시 systemd 기반에서 돌리시는 분들을 위해 service 파일을 적어놓겠습니다.

좋은 프로그램 고맙습니다^^

[Unit]
Description=AirComicServer Daemon
After=network.target

[Service]
User=aircomic
Type=simple
ExecStart=/bin/java -jar /opt/AirComicServer/AirComicServer-v0.9.1.jar -c -d /home//comic/ -p 21002 --password PASSWORD
ExecReload=/bin/kill -s HUP $MAINPID

[Install]
WantedBy=multi-user.target

GnomeWarrior64 :

1번 문제 수정한 v0.9.2 버전을 올렸으니 다운로드 부탁드립니다.
비밀번호는 잊어버릴시 쉽게 참조하시라고 서버에서는 일부로 노출하였습니다.
systemd service 내용 공유 감사합니다.

Unknown :

빠른 수정 고맙습니다^^ 혹시 CLI 명령어 옵션으로 uPNP 기능을 끌 수 있게도 좀 가능할까요?

익명 :

2페이지 분활시에 일본제책 방식 셋팅시에 페이지가 우,좌 가 나오는게 아니고 좌,우,좌 로 페이지로 나옵니다. 먼저 버전에선 그렇진 않았는데 현재버전에서 문제가 나네요. 확인 부탁드립니다.

GnomeWarrior64 :

@Unknown
--noupnp 옵션 추가한 v0.9.3 올렸습니다.

GnomeWarrior64 :

@익명
이미지뷰어 화면에서 화면 가운데 클릭하면 메뉴바를 보이게 할 수 있는데 제목 옆에 있는 화살표가 읽기 방향입니다.
-> : 좌에서 우 (한국식)
<- : 우에서 좌 (일본식)
이며 클릭하면 방향을 바꾸실 수 있습니다.

오후네시 :

스마트폰 또는 안드로이드에 서버를 설치 할 수 없나요?
안드로이드 TV 박스에 설치하면 좋을 것 같아서...

익명 :

그 화살표가 문제가 아니고 잘린 이미지가 우에서좌가 나와야되는데 좌쪽이 한번 더 나옵니다.

담배값좀내려 :

Server에서 예외를 뱉어내네요 ㅋㅋ

Exception in thread "NanoHttpd Request Processor (#68)" java.lang.NoClassDefFoundError: Could not initialize class com.twelvemonkeys.image.ImageUtil
at com.twelvemonkeys.image.ResampleOp.createCompatibleDestImage(ResampleOp.java:812)
at com.twelvemonkeys.image.ResampleOp.filter(ResampleOp.java:566)
at pe.gw64.aircomicserver.ImageManager.loadAndResizeImage(ImageManager.java:45)
at pe.gw64.aircomicserver.ImageManager.readImage(ImageManager.java:27)
at pe.gw64.aircomicserver.HttpServer.getCompressedImageFile(HttpServer.java:361)
at pe.gw64.aircomicserver.HttpServer.serve(HttpServer.java:156)
at fi.iki.elonen.NanoHTTPD$HTTPSession.execute(NanoHTTPD.java:840)
at fi.iki.elonen.NanoHTTPD$ClientHandler.run(NanoHTTPD.java:189)
at java.lang.Thread.run(Thread.java:748)

댓글 쓰기