2017년 4월 30일 일요일

[JSP,ADNROID]4월 미니프로잭트들

계획



1주차2주차3주차4주차
planning,prepareandroid chatting 완성jsp project 완성여유기간


현실

1주차2주차3주차4주차
planning,prepare
socket방식 chatting 구현
firebase방식 chatting구현 및, jsp 프로잭트 시작.
(socket type suspend 결정)
jsp project + android support 코어기능 몇개 빼고 불안하게 마감



socket 기반 프로잭트 는 시간 대비 결과물이 늦었기 때문에, 병행중이던 firebase타입을 하는 팀원에게 인계
JSP 프로잭트는 스터디룸 관리 프로그램 으로, 강압으로 인해 부득이하게 client side는 android로 결정
jsp는 팀원이 잘해서 무리없이 해결했으니, android는 기능자가 없기때문에 2주동안 고전-> 주요기능 몇가지를 빼고 겨우 마감..


클라이언트 구동예제

https://drive.google.com/open?id=0B-9iXJHL2oVMQlZMaWhZT1ZtWlE
[suspended] socket type project

https://drive.google.com/open?id=0B-9iXJHL2oVMVkc2d05rQW5vLVU
firebase type project

https://drive.google.com/open?id=0B-9iXJHL2oVMMWxSNGZxLXNwZHM
jsp projects

2017년 4월 22일 토요일

[Android 2.3] scroll view, 스크롤 되게 하기

s이전버전은 뭔가 스크롤하게 하는게 엄청 빡시게 적어놔서 잔뜩 겁먹고 검색했는데,
2.3버전부터는 너무나도 심플해졌다.

초간단 예시를 들자면 이러하다.

... 에 자신이 넣고자 하는 컨텐츠들을 넣는다는 가정하에


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:layout_width="match_parent"              android:layout_height="match_parent"              android:orientation="vertical"              android:gravity="center">

    <ScrollView         
     android:layout_width="match_parent"         
     android:layout_height="match_parent">
        <LinearLayout             
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:orientation="vertical">
            ...
            ... 
        </LinearLayout>
    </ScrollView>
</LinearLayout>




사장님..너무 쉬운거같아요!
세상에나마상에나 네줄만 추가하면 된다.
응용하면 더 힘들겠지만 일단은 이러했다.

2017년 4월 18일 화요일

[jsp,java]유효성 검사


유효성 패턴 Character Classes


구조 해석
[abc] a or b or c
[^abc] not a or b or c(NOT)
[a-zA-Z] a to z or A to Z
[0-4[6-8]] one of "0 1 2 3 4 6 7 8(OR?)"
[0-9&&[3-5]] one of 3 4 5 (AND)
[0-9&&[^345]] one of 0 1 2 6 7 8 9(NAND)

"검사대상문자열".matches("유효성검사문자열"); 로 확인 할 수 있다 고 하는데 나는 이게 먹히드라
"검사대상문자열".matches("(.*)["유효성검사문자열"](.*)")


문자열 유효성 검사를 jsp에서 배우긴 했는데, 뭔지 잘 이해도 안됬고, 응용도 못하는데 이제 필요해져서 찾아봤음

역시 자바도 사용 할 수 있는듯 하다.
응용하면 회원가입 양식 따위의 유효성 검사를 할 수 있을 것.


방금 찾다보니 특수문자의 경우에는 몇가지 예외사항이 있기때문에,  숙지해야할 사항이 몇가지 있다.
기본 자바에서 설명하는 몇 단어들은 :
\'  작은따움표는
\'' 큰따움포
\\역슬레쉬등..
참조사이트 : https://www.tutorialspoint.com/java/java_characters.htm

그 이외, 상기 사이트에 설명이 없는 케이스들은:

+ $  | ,의 경우에는[] 줘야한다 
[^[*]]  == not * 경우


\\ 필요한 경우는 ( ) { } [ ] ^ 
[^\\^]


이런 작업이 필요없는 문자는
!# % & @ ` ; : -  < > ~ '

띄어쓰기는 \\s+

위에 두 케이스를 없에고싶어서 삽질했는데 결국은 이거네
.matches("(.*)[[!#%&@`;:-<>~'][+$|][\\^(){}][\\[][\\]][.,\"\\\'\"\\s+]](.*)")  matches 안의 구간에서 띄어쓰기 하면 작동안되요

[android] Log 관련


처음 들어오고 보는 안드로이드의 엄청난 버튼들때문에 기가죽어서 어디부터 손댈지 감도 안왔는데, 사흘정도 만지다보니 이제 조금씩 뭔지 알아가기 시작하는중.

우선 로그를 어디서 봐야할지 몰랐기때문에, 간단하게 지금까지 알아낸 사항을 적어본다.

1LogCat 사용하기.

안드로이드 개발 툴에서 alt + 6 누르면 하단에서 튀어나오는 logCat에서 우리가 자바에서나 보는 에러코드들이 쏟아지는곳인듯 하다. 다만 안드로이드 설계상 미리 짜여져 있는 코드들이 수두룩하기 때문에 내가 찍은 로그가 어디서 출력되는지 조차도 알아내기 힘들다..
우선 촤즉 상단이 디버깅한 기기 목록인데, 목록중에 [DISCONNECTED] 뜬걸 켜놓고 로그가 안나오나 답답해 하는 케이스가 있다. 앱을 실행 채고 목록을 누르면 disconencted 안뜬, 디버깅중인 창을 열면 된다.

그다음 우측상단창은 뭔가 클래스별로인건지 프로세스별인지 각각의 로그들이 나름대로 정렬되어 있는곳인디, 기본값으로 켜지는부분이 우리가 만지는 MainActivity 클래스창 인듯하다. 메인 클래스를 끄적이는 단계에서는 일단 이것에 만족중.

가끔 로그가 터져나가서 로그켓이 죽어버리는 상황이 나오던데, 여러방법이 있다고는 하나 나같은 경우에는 그냥 안드로이드 스튜디오 제실행이 답이었다.

우측 두번쨰 란에 필터가 있는데, 이걸로 어느정도 메세지들을 필터링 있다.

근데 어연일인지 System.out.println(); 여기서 안찍히고 넘어가는 일이 빈번한데, 원인을 알고싶다.

이러한 이유로 다른방법은 없는가? 해서 찾아낸게
Log.d("String 태그",메시 혹은 변수값 ..);
이용할 있다고 한다.
코드를 사용하면 근데 어디서 출력되는건가 싶어서 조금 뒤져보니, 역시 logcat 뜬다고 한다. 장점이라 하면 :
앞에 인자값인 태그를 알맛게 정의하면 태그를 검색해서 태그 이름하에 나온 모든 로그들을 한곳에서 볼수 있다고 한다.

[android] Thread 와 aSyncTask, Handler ..삽질하며 배운내용..

우선 책은 일절 참조하지 않은상태에서 작성했던 내용을 토대로 정리한것이므로, 정확하지도, 어쩌면 틀릴 가능성이 매우 높으니. 나처럼 지식이 전무한 사람들이  보고 어디부터 어떻게 시작할지 감이라도 잡히길 바라며 남기는 노트입니다.





안드로이드에서 메인 쓰레드는 이미 존재한다, 당연하게도 우리는 main 보지 못하고, MainActivity 클래스에서 onCreate 함수가 시작점 이라는것을 짐작해서 알고있으니, 어디선가 main함수가 있긴 있었다는 이야기가 된다.

메인 Thread 안드로이드의 UI 총괄적인 담당을 맡고있다, 이런 이유에서 우리는 함부로 UI Thread 건드리지 않는것을 권장받는다. 이를 건드릴시, 딜레이나 작동오류 따위의 퍼포먼스부터 실행까지 중대한 문제가 발생할 가능성이 높다.

이미 UI관련으로 많은 작업을 main Thread 맡고 있는 이유덕분에,  우리는 이곳에서 추가적인 Thread 필요한 작업들을 없게 접근제한을 당한다. Eg) socket통신.

이러한 문제를 해결하기위해 우리는 Annonymous Class따위나 신규 class 이용해 새로운 Thread/Runnable 생성할 있는데, 케이스에 따라서 매우 만족스럽지 못한 사태가 발생하던데, main Thread에서 모든 점유율을 가지고있는 사태가 발생한다. 똑바로 작동을 하지 않았었다.

여기서 나는 Thread 우선순위 조정이나, sleep 시도할까 했지만, 앞서 언급된 UI Thread 건드리는것은 중대한 퍼포먼스 이슈를 야기할 있다는 경고덕분에, 그만두기로 마음먹었다.

그렇다면 어떻게 Thread 이용하나 고민하는데, 몇가지 방법이 있는데 내가 들은것은 handler  AsyncTask 라는 기본 제공 API 있다는 이야기를 접했다.

AsyncTask 일종의 Thread Haandler 역활을 모두 담당 관리 해주는 놈인거 같은데,
해당 클래스는
1 : 추상클래스
2: 기본제공 메소드는 (아마)4가지
3: 각각의 메소드의 타입을 미리 정해야 한다<Void,Void,Void>리턴타입이 없다면 Void 쓰는듯 하다.     
     (primitive type 안먹히는듯 하다. Refrence type 가능하다)

기본제공 메소드는:
1.doInBackground() 실행 메소드 이안에서 작업내용을 준비하는듯 하며
2.onProgressUpdate() 다음 메소드가 자동적으로 호출된다 이는 사용자에게 진행을 알릴떄에 사용
3.onPostExecute()  백그라운드 작업이 종료되면 호출되어 결과를 뽑아냄
4.onPreExecute() 마치 생성자 같은놈 인듯 하다. aSyncTask 실행하기 전에 호출되는듯 하다.
있다.

그리고 생성한 aSyncTask .execute() 하면 작동한다.

이때 한가지 발견한 문제점이, aSyncTask 1 execute 있다. 두번째 실행에서 오류를 뿜으며 프로그램이 종료되는것을 확인 있었다.
해결방안은 여라가지 있겠지만 당장 생각나는것은, 매번 새롭게 class 선언 실행, 다른거 쓰기
정도가 있지 않을까 한다.

쓰레드들이 여러 선언되어 동작하고 있어도 쓰레드들은 결국에는 독립적인 존재임은 자바 쓰레드 기초정도만 알아도 이해 있다.(해결하기위해 synchronization등을 썻지) 이러한 이유때문에, 메인 쓰레드가 아닌곳에서 무엇인가 정보의 업데이트가 이루어진들, UI 변화가 없는것은 당연한 일이다.

그런 문제를 해결하기 위해 Thread 함꼐 붙어있는 Handler 필요하게 된다.

Handler Thread간의 연결에 필요한 기능인데,
주로 UI 화면 업데이트에 매우 긴밀한 연관이 있는듯 하다.

Handler.sendMessage() ->개발자 정의 쓰레드에서 호출하고, 메시지 큐에 메세지를 저장한다.
Handler.handleMessage()-->UI쓰레드에서 호출하여 Queue 저장된 메세지를 뿌려, UI 업데이트 하는 방법이다.

지금까지 알아본 바로는 handler 사용자즹어 쓰레드간의 연결이 아닌 UI 사용자정의 쓰레드 간의 연결인듯 하며, 핸들러가 있지 않아도, 작동에는 문제가 없다. 다만 어렵거나 매우 재한적이겠지.

사용법은 MainActivity에서 handler extends 이너클래스를 생성 한다.
이너클래스에서는 handleMessage() 메소드를 만들며, android.os.Message 작동할 상황을 정해서 case문처럼 있는듯 하다. 이제 handlemessage 작업내역을 작성하고 실행하는듯하다.

2017년 4월 17일 월요일

http , jsp 주석방법


Html <!-- -->  문제점 : 소스노출 의 위험! 더 쉽게 말하면 개나소나 주식친거 볼 수 있다!

Jsp <% -- --%> html의 문제점을 보안했음. jsp단은 소스보기에서 노출되지 않는다!

2017년 4월 15일 토요일

[test]테스트용 페이지

https://ufile.io/dacdf

안드로이드 4.1 버전 이상.
0.1 버전 테스트
접속가능 ip는   2.5.20




port   8082
닉네임은 한영 상관음슴

2017년 4월 14일 금요일

[DBtest]url용





















공부하면서 쓸 URL따려고 업로드한건데 이거 긁어다 상업적으로 쓰다가 아야해도 몰라요

2017년 4월 13일 목요일

5주차 팀플. 안드로이드로 만든 우쿨렐레






5주차 팀플..이라 하기에도 민망한 난이도이고, 다른 프로잭트가 많아서, 기능구현만 하고 끝내자고 결정내서 만 하루정도 걸려서 만든 녀석.
기타 스트로크 기능을 개발완료 후에 찾아냈으나, 설계미스의 이유로 설계부터 다시 디자인해야함을 감안하여 포기.

클릭시 바뀌는 이미지는 ImageButton
사운드는 Soundpool 이건 좀 더 좋은 메소드를 찾아야 할듯하다. 불편하고 답답했음.

2017년 4월 7일 금요일

[jsp]깜짝 과제 계산기

Insert title here

2017년 4월 5일 수요일

[jsp]기초 연습

Insert title here

색상:
크기:
취소선 굵게 기울임
위첨자 아래첨자 소문자 대문자
result ist display here!!!

2017년 4월 3일 월요일

[html] 돌발! 쪽지시험

쪽지시험 내용:
여태까지 배운 기능을 통해, 화면의 예시를 보여주며
센터에다 회원가입 창을 생성, 좌측 상단에 자동 재생되는 bgm을 삽입,
하단 중앙의 좌측 회원가입 버튼을 누를시 메일 전송창 띄우기(입력 내용출력기능은 다음에!)
우측 메뉴 클릭시 입력된 내용 초기화.
제한시간 1시간.
펼침매뉴 구현,
테이블 구현,
버튼과 <form> 태그를 이용해, 폼 안의 내용 삭제,
이메일 보내기 구현
이 주 사항.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<audio controls="controls" src="./title.wav" autoplay></audio>
<form>
<table width="640" height="440" border="1" align="center">
    <tr colspan="2"></tr>
    <tr>
        <td colspan="2" bgcolor="CadetBlue" align="center">회원 기본 정보</td>
    </tr>
    <tr>
        <td bgcolor="BlanchedAlmond" align="center">아이디:</td>
        <td bgcolor="Azure"><input type="text" name="id" size="13" maxlength="12">&nbsp;&nbsp;4~12자의 영문 대소문자 숫자로만 입력</td>
    </tr>
    <tr>
        <td bgcolor="BlanchedAlmond" align="center">비밀번호:</td>
        <td bgcolor="Azure"><input type="password" name="pw" size="14" maxlength="12">&nbsp;&nbsp;4~12자의 영문 대소문자 숫자로만 입력</td>
    </tr>
    <tr>
        <td bgcolor="BlanchedAlmond" align="center">비밀번호 확인:</td>
        <td bgcolor="Azure"><input type="password" name="pw2" size="14" maxlength="12">&nbsp;&nbsp;</td>
    </tr>
    <tr>
        <td bgcolor="BlanchedAlmond" align="center">메일주소:</td>
        <td bgcolor="Azure"><input type="email" name="mail" size="17" maxlength="25">&nbsp;&nbsp; 예) admin@admin.com </td>
    </tr>
    <tr>
        <td bgcolor="BlanchedAlmond" align="center">이름:</td>
        <td bgcolor="Azure"><input type="text" name="name" size="17" maxlength="12">&nbsp;&nbsp;</td>
    </tr>
    <tr>
        <td colspan="2" bgcolor="CadetBlue" align="center">개인 신상 정보</td>
    </tr>
    <tr>
        <td bgcolor="BlanchedAlmond" align="center">주민등록번호:</td>
        <td bgcolor="Azure"><input type="text" name="registnum" size="17" maxlength="13">&nbsp;&nbsp;예) 920613-0000000 </td>
    </tr>
    <tr>
        <td bgcolor="BlanchedAlmond" align="center">생일:</td>
        <td bgcolor="Azure">
            <select name="year">
                <option value="1990">1990</option>
                <option value="1991">1991</option>
                <option value="1992">1992</option>
                <option value="1993">1993</option>
                <option value="1994">1994</option>
                <option value="1995">1995</option>
            </select>
            <select name="month">
                <option value="jan">1</option>
                <option value="feb">2</option>
                <option value="mar">3</option>
                <option value="apr">4</option>
                <option value="may">5</option>
                <option value="june">6</option>
            </select>
            <select name="day">
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
            </select>일 </td>
    </tr>
    <tr>
        <td bgcolor="BlanchedAlmond" align="center">관심분야:</td>
        <td bgcolor="Azure">
            <input type="checkbox" name="hobby" value="computer">컴퓨터
            <input type="checkbox" name="hobby" value="internet">이너넷
            <input type="checkbox" name="hobby" value="webserf">여행
            <input type="checkbox" name="hobby" value="movie">영화
            <input type="checkbox" name="hobby" value="music">음악 
        </td>
    </tr>
    <tr height="130px">
        <td bgcolor="BlanchedAlmond" align="center">자기소개:</td>
        <td bgcolor="Azure"><textarea name="etc" rows="7" cols="60"></textarea></td>
    </tr>
</table>
<p align="center">
<input name="submit" type="submit" value="회원가입" onclick="parent.location='mailto:juicycool92@gmail.com'">
<input type="reset" value="다시입력" onclick="reset">
</p>
</form>
    
</body>
</html>