지금 현재 사용하고 있는 수많은 앱들 중 그래도 쓸만한 유틸 프로그램들을 하나씩 생각날때마다 공유 하고자 합니다. 


그 첫번째로 공유 하고자 하는 앱은 Call Flash Light 라는 앱으로 이 앱은 전화가 들어 오거나 문자 메세지가 들어올 경우 카메라 LED 라이트를 깜빡이게 하여 사용자에게 알림을 주는 그런 앱입니다. 


[구글 플레이 다운로드 URL]

https://play.google.com/store/apps/details?id=com.prorsum.incomingcallflashlight






개인적으로 업무 중 또는 미팅 중에는 휴대폰을 무음 상태로 두고 사용 하고 있는데요. 비슷한 앱을 깔아서 사용해 보고 괜찮은 기능인 것 같아 여러 앱을 다운받아 테스트 해봤습니다. 


많은 앱들이 부분 유료화 또는 무료 버전과 유료 버전을 따로 운영하고 있는데 반해 제가 소개 드리는 앱은 타 앱에서 유료로 사용 가능한 기능들을 무료로 제공 하고 있어 마음에 들었습니다. 


스크린샷은 영문으로 나오는 것으로 되어 있으나 실제로 설치 해보니 한글 제공이 되고 있습니다. 


모든 기기에서 호환 되는 것으로 되어 있는데요. 필자는 아래 표에 있는 단말들에서 동작 여부 확인 했습니다. 


 갤럭시 노트4 

 정상 

 갤럭시 노트5 

 정상

 갤럭시 S3

 정상

 갤럭시 S4 

 정상

 갤럭시 S5

 정상

 갤럭시 S7

 정상

 갤럭시 A8 

 정상 

 LG G4

 OS 업데이트 이후 정상 동작 (OS 버전을 미처 확인 못했습니다)

 LG G5

 정상

 LG V20

 정상



앱 추천하는 글을 작성 하면서 최소한의 테스트는 필수라 생각하여 회사 보유 단말 몇개를 동원하여 테스트 진행 했습니다 ^^


아쉽게도 외산폰에 대한 테스트는 화웨이 단말 한종 밖에 못했는데요. 그 폰 소유자분께 단말 기종 확인을 못했습니다 ㅠㅠ 

추후 확인 되면 표에 추가 하도록 하겠습니다. 



게임도 즐겨 했었지만 최근들어 게임에 흥미가 없어지네요.

나이가 들어서 인지 아니면 게임할 시간에 다른 유익한 일을 하고 싶은 열망 때문인지는 모르겠지만 (후자이길 ㅎㅎ) 혹 기회가 된다면 게임도 제 흥미를 끄는게 있다면 추천 해보도록 하겠습니다. 



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,


▶ Android Studio 의 디폴트 셋팅 되어 있는 단축키 목록

DescriptionWindows/LinuxMac
General
Save allControl + SCommand + S
SynchronizeControl + Alt + YCommand + Option + Y
Maximize/minimize editorControl + Shift + F12Control + Command + F12
Add to favoritesAlt + Shift + FOption + Shift + F
Inspect current file with current profileAlt + Shift + IOption + Shift + I
Quick switch schemeControl + ` (backquote)Control + ` (backquote)
Open settings dialogueControl + Alt + SCommand + , (comma)
Open project structure dialogControl + Alt + Shift + SCommand + ; (semicolon)
Switch between tabs and tool windowControl + TabControl + Tab
Navigating and Searching Within Studio
Search everything (including code and menus)Press Shift twicePress Shift twice
FindControl + FCommand + F
Find nextF3Command + G
Find previousShift + F3Command + Shift + G
ReplaceControl + RCommand + R
Find actionControl + Shift + ACommand + Shift + A
Search by symbol nameControl + Alt + Shift + NCommand + Option + O
Find classControl + NCommand + O
Find file (instead of class)Control + Shift + NCommand + Shift + O
Find in pathControl + Shift + FCommand + Shift + F
Open file structure pop-upControl + F12Command + F12
Navigate between open editor tabsAlt + Right/Left ArrowControl + Right/Left Arrow
Jump to sourceF4 / Control + EnterF4 / Command + Down Arrow
Open current editor tab in new windowShift + F4Shift + F4
Recently opened files pop-upControl + ECommand + E
Recently edited files pop-upControl + Shift + ECommand + Shift + E
Go to last edit locationControl + Shift + BackspaceCommand + Shift + Backspace
Close active editor tabControl + F4Command + W
Return to editor window from a tool windowEscEsc
Hide active or last active tool windowShift + EscShift + Esc
Go to lineControl + GCommand + L
Open type hierarchyControl + HControl + H
Open method hierarchyControl + Shift + HCommand + Shift + H
Open call hierarchyControl + Alt + HControl + Option + H
Writing Code
Generate code (getters, setters, constructors, hashCode/equals, toString, new file, new class)Alt + InsertCommand + N
Override methodsControl + OControl + O
Implement methodsControl + IControl + I
Surround with (if...else / try...catch / etc.)Control + Alt + TCommand + Option + T
Delete line at caretControl + YCommand + Backspace
Collapse/expand current code blockControl + minus/plusCommand + minus/plus
Collapse/expand all code blocksControl + Shift + minus/plusCommand + Shift + minus/plus
Duplicate current line or selectionControl + DCommand + D
Basic code completionControl + SpaceControl + Space
Smart code completion (filters the list of methods and variables by expected type)Control + Shift + SpaceControl + Shift + Space
Complete statementControl + Shift + EnterCommand + Shift + Enter
Quick documentation lookupControl + QControl + J
Show parameters for selected methodControl + PCommand + P
Go to declaration (directly)Control + B or Control + ClickCommand + B or Command + Click
Go to implementationsControl + Alt + BCommand + Alt + B
Go to super-method/super-classControl + UCommand + U
Open quick definition lookupControl + Shift + ICommand + Y
Toggle project tool window visibilityAlt + 1Command + 1
Toggle bookmarkF11F3
Toggle bookmark with mnemonicControl + F11Option + F3
Comment/uncomment with line commentControl + /Command + /
Comment/uncomment with block commentControl + Shift + /Command + Shift + /
Select successively increasing code blocksControl + WOption + Up
Decrease current selection to previous stateControl + Shift + WOption + Down
Move to code block startControl + [Option + Command + [
Move to code block endControl + ]Option + Command + ]
Select to the code block startControl + Shift + [Option + Command + Shift + [
Select to the code block endControl + Shift + ]Option + Command + Shift + ]
Delete to end of wordControl + DeleteOption + Delete
Delete to start of wordControl + BackspaceOption + Backspace
Optimize importsControl + Alt + OControl + Option + O
Project quick fix (show intention actions and quick fixes)Alt + EnterOption + Enter
Reformat codeControl + Alt + LCommand + Option + L
Auto-indent linesControl + Alt + IControl + Option + I
Indent/unindent linesTab/Shift + TabTab/Shift + Tab
Smart line joinControl + Shift + JControl + Shift + J
Smart line splitControl + EnterCommand + Enter
Start new lineShift + EnterShift + Enter
Next/previous highlighted errorF2 / Shift + F2F2 / Shift + F2
Build and Run
BuildControl + F9Command + F9
Build and runShift + F10Control + R
Debugging
DebugShift + F9Control + D
Step overF8F8
Step intoF7F7
Smart step intoShift + F7Shift + F7
Step outShift + F8Shift + F8
Run to cursorAlt + F9Option + F9
Evaluate expressionAlt + F8Option + F8
Resume programF9Command + Option + R
Toggle breakpointControl + F8Command + F8
View breakpointsControl + Shift + F8Command + Shift + F8
Refactoring
CopyF5F5
MoveF6F6
Safe deleteAlt + DeleteCommand + Delete
RenameShift + F6Shift + F6
Change signatureControl + F6Command + F6
InlineControl + Alt + NCommand + Option + N
Extract methodControl + Alt + MCommand + Option + M
Extract variableControl + Alt + VCommand + Option + V
Extract fieldControl + Alt + FCommand + Option + F
Extract constantControl + Alt + CCommand + Option + C
Extract parameterControl + Alt + PCommand + Option + P
Version Control / Local History
Commit project to VCSControl + KCommand + K
Update project from VCSControl + TCommand + T
View recent changesAlt + Shift + COption + Shift + C
Open VCS popupAlt + ` (backquote)Control + V



▶ 단축키 변경은 아래와 같은 방법으로 진행 하면 된다.

File > Settings > Keymap (on Windows)

File > Properties > Keymap (on Mac)


 



▶ eclipse 에 익숙한 경우 Keymap 을 eclipse 로 선택 적용 하면 된다 

 



원하는 Keymap 을 선택 한 후 추가적으로 원하는 단축키 설정을 하면 끝


※ 단축키 표 출처 : 

https://developer.android.com/studio/intro/keyboard-shortcuts.html#custom

블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

안드로이드 마시멜로 이상 단말에서는 앱을 사용하기 전, 해당앱에서 사용 하는 기능들에 대한 사용자의 승인을 받아야 한다. 


만약 앱에서 사용하는 기능들이 여러가지 있으나 그중 한가지 이상의 사용자 승인을 받지 않거나 사용자가 승인 거부를 했을 경우 해당 기능을 사용하려 할 경우 오류 발생으로 인한 강제 종료 현상이 발생 할 수도 있다. 물론, 승인 거부를 한 경우 해당 기능을 앱 내부에서 사용하지 못하도록 막을 경우 오류로 인한 강제 종료 현상이 발생 하지 않는다.


그러므로 앱에서 사용 하고자 하는 모든 권한에 대한 정의 및 사용자에게 해당 기능의 사용 승인을 꼭 받아야 한다. 






사용방법


1. AndroidManifest.xml 에 아래와 같은 uses-permission 설정

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.CAMERA" />


2. 퍼미션 요청

private void requestPermissions(){
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.READ_CONTACTS)) {

} else {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE}, MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);
}
}

if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.RECEIVE_SMS)) {

} else {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.RECEIVE_SMS}, MY_PERMISSIONS_REQUEST_PROCESS_RECEIVE_SMS);
}
}

if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.CAMERA)) {

} else {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_PROCESS_CAMERA);
}
}

}


3. 요청한 퍼미션의 결과 처리 (onRequestPermissionResult 호출)

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_PHONE_STATE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
requestPermissions();
} else {
// 이 퍼미션과 관련된 기능 사용하지 못하도록 처리 (그렇지 않을 경우 강제 종료 현상 발생)
}
return;
}
case MY_PERMISSIONS_REQUEST_PROCESS_RECEIVE_SMS: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
requestPermissions();
} else {
// 이 퍼미션과 관련된 기능 사용하지 못하도록 처리 (그렇지 않을 경우 강제 종료 현상 발생)
}
return;
}
case MY_PERMISSIONS_REQUEST_PROCESS_CAMERA: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
requestPermissions();
} else {
// 이 퍼미션과 관련된 기능 사용하지 못하도록 처리 (그렇지 않을 경우 강제 종료 현상 발생)
}
return;
}
}
}



위와 같이 처리 하는 방식도 있지만 그렇지 않고 permission 들을 array 에 담아서 처리 하는 방식도 있다. 


Runtime Permission 관련하여 아래 링크에서 자세히 설명하고 있다.

https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en


블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

vi 명령어 사용법

Linux 2017. 1. 25. 00:56

Linux 와 Unix 의 vi 명령어 사용법 정리


vi 시작 명령어

 vi filename

 파일 열기, 해당 파일명의 파일이 없을 경우 신규 생성
 vi +18 filename 18행으로 파일 열기
 vi +/"문자열" fn "문자열"의 처음발생 단어부터 열기
 vi -r filename 손상된 파일 회복
 view filename 읽기 전용으로 파일 열기
vi 커서 이동 명령어
 h(←) 왼쪽으로 커서 이동
 j(↓) 아래로 커서 이동
 k(↑) 위로 커서 이동
 l(→) 오른쪽으로 커서 이동
 w 오른쪽 한 단어의 끝 부분으로 커서 이동
 e 오른쪽 한 단어의 앞 부분으로 커서 이동
 b 왼쪽 한 단어의 앞 부분으로 커서 이동
 Enter 한 행 아래로 커서 이동
 Back space 한 문자 왼쪽으로 커서 이동
 Space Bar 한 문자 오른쪽으로 커서 이동
 ^ 행의 맨 왼쪽으로 커서 이동
 $ 행의 맨 오른쪽으로 커서 이동
 H 화면의 맨 위로 이동
 M 화면의 중간으로 이동
 L 화면의 맨 아래로 이동
 숫자G 숫자만큼 지정한 줄로 커서 이동
 Ctrl + f 한 화면 위로 이동
 Ctrl + b 한 화면 아래로 이동
 Ctrl + d 반 화면 위로 이동
 Ctrl + u 반 화면 아래로 이동
 Ctrl + e 한 줄씩 위로 이동
 Ctrl + y 한 줄씩 아래로 이동
문자,행 삽입 명령어
 a (종료:ESC) 커서 오른쪽에 문자 삽입
 A (종료:ESC) 커서 오른쪽, 행의 끝에 문자 삽입
 i (종료:ESC) 커서 왼쪽에 문자 삽입
 I (종료:ESC) 커서 왼쪽, 행의 처음에 문자 삽입
 o (종료:ESC) 커서 아래에 행 삽입
 O (종료:ESC) 커서 위에 행 삽입
텍스트 변경 명령어
 cw (종료:ESC) 단어 변경
 cc (종료:ESC) 행 변경
 C (종료:ESC) 커서 오른쪽의 행 변경
 s (종료:ESC) 커서가 위치한 문자열 대체
 S (종료:ESC) 커서가 위치한 라인의 문자열 대체
 r 커서 위치 문자를 다른 문자로 대체
 r-Enter 행 분리
 J 현재 행과 아래 행 결합
 xp 커서 위치 문자와 오른쪽 문자 교환
 ~ 문자형(대,소문자) 변경
 u 이전 명령 취소
 U 행 변경 사항 취소
 :u 이전의 최종 행 취소
 . 이전 최종 명령 반복
텍스트 삭제 명령어
 x 커서가 있는 문자 삭제
 5x 커서가 있는 위치부터 5개의 문자를 삭제
 dw 현재 커서가 있는 한단어 삭제
 dd 커서가 있는 라인 삭제
 5dd 커서가 있는 라인부터 5개의 라인 삭제
 db 커서의 위치에서 꺼꾸로 한단어 삭제
 D 커서 오른쪽 행 삭제
 :5,10d 5-10번째 행 삭제
복사 및 이동 명령어
 yy 행 yank 또는 복사
 Y 행 yank 또는 복사
 P yank되거나 삭제된 행 현재 행 위에 삽입
 p yank되거나 삭제된 행 현재 행 아래에 삽입
 :1,2 co 3 1-2행을 3행 다음으로 복사
 :4,5 m 6 4-5행을 6행 위로 이동
행 번호 설정 명령어
 :set nu 행 번호 표시
 :set nonu 행 번호 숨기기
행 찾기 명령어
 G 파일의 마지막 행으로 가기
 숫자G 파일의 "숫자"번째 행으로 가기
 Ctrl + G 현재의 filename과 line수를 알려줌
저장 및 종료 명령어
 :w 변경사항 저장
 :w filename 버퍼를 파일로 저장
 :wq 변경사항 저장 후 vi 종료
 ZZ 변경사항 저장 후 vi 종료
 :q! 변경사항 저장하지 않고 종료
 q 수정한 파일을 저장하지 않고 vi 종료
e!수정한 것을 무시하고 다시 편집상태로


Reference : 


블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

Front End 개발 중 자주 대면하게 되는 문제점중 하나가 한글 인코딩 문제이다.

한글을 그대로 파싱 할 경우 오류가 발생하게 되는데 이를 해결하는 방법은 아래와 같다.


http://www.mywebpage.com/한글.jsp


위와 같이 한글이 포함된 URL 이 있다고 가정했을 경우 URL 인코딩을 하게 되면 


http://www.mywebpage.com/%ED%95%9C%EA%B8%80.jsp

위와 같이 이스케이프 처리 되며 이를 받는 쪽에서는 decode 처리 하여 처음 원했던 URL 을 획득할 수 있다. 



인터넷에서 URL 처리는 ASCII 캐릭터 셋으로만 처리되는데 한글을 ASCII 코드로 변환할 필요가 있음으로 URL 인코딩을 하게 된다.




처리 방법은 아래와 같다.


▶ 한글 인코딩 > encodeURI() 함수 사용

var encodeStr = encodeURI("http://www.mywebpage.com/한글.jsp");

// 결과 값 >>> http://www.mywebpage.com/%ED%95%9C%EA%B8%80.jsp


▶ 인코딩 된 한글 디코딩 > decodeURI() 함수 사용

var decodeStr = decodeURI(encodeStr);

// 결과 값 >>> http://www.mywebpage.com/한글.jsp



encodeURI() 및 decodeURI() 는 한글만 처리 해주고 있지만 URL 전체를 처리하고자 할 경우 

encodeURIComponent() 및 decodeURIComponent() 를 사용하면 된다.


▶ URL 전체 인코딩 > encodeURIComponent() 함수 사용

var encodeStr = encodeURI("http://www.mywebpage.com/한글.jsp");

// 결과 값 >>> http%3A%2F%2Fwww.mywebpage.com%2F%ED%95%9C%EA%B8%80.jsp


▶ 인코딩 된 URL 전체 디코딩 > decodeURIComponent() 함수 사용

var decodeStr = decodeURI(encodeStr);

// 결과 값 >>> http://www.mywebpage.com/한글.jsp



사용 목적에 따라 encodeURI() / decodeURI() 또는 encodeURIComponent() / decodeURIComponent() 를 사용하면 된다. 



HTML5 에서의 default character set 은 UTF-8 이며, 아래는 ASCII 코드 표 이다.

( Reference : http://www.w3schools.com/tags/ref_urlencode.asp )

CharacterFrom Windows-1252From UTF-8
space%20%20
!%21%21
"%22%22
#%23%23
$%24%24
%%25%25
&%26%26
'%27%27
(%28%28
)%29%29
*%2A%2A
+%2B%2B
,%2C%2C
-%2D%2D
.%2E%2E
/%2F%2F
0%30%30
1%31%31
2%32%32
3%33%33
4%34%34
5%35%35
6%36%36
7%37%37
8%38%38
9%39%39
:%3A%3A
;%3B%3B
<%3C%3C
=%3D%3D
>%3E%3E
?%3F%3F
@%40%40
A%41%41
B%42%42
C%43%43
D%44%44
E%45%45
F%46%46
G%47%47
H%48%48
I%49%49
J%4A%4A
K%4B%4B
L%4C%4C
M%4D%4D
N%4E%4E
O%4F%4F
P%50%50
Q%51%51
R%52%52
S%53%53
T%54%54
U%55%55
V%56%56
W%57%57
X%58%58
Y%59%59
Z%5A%5A
[%5B%5B
\%5C%5C
]%5D%5D
^%5E%5E
_%5F%5F
`%60%60
a%61%61
b%62%62
c%63%63
d%64%64
e%65%65
f%66%66
g%67%67
h%68%68
i%69%69
j%6A%6A
k%6B%6B
l%6C%6C
m%6D%6D
n%6E%6E
o%6F%6F
p%70%70
q%71%71
r%72%72
s%73%73
t%74%74
u%75%75
v%76%76
w%77%77
x%78%78
y%79%79
z%7A%7A
{%7B%7B
|%7C%7C
}%7D%7D
~%7E%7E
 %7F%7F
`%80%E2%82%AC
%81%81
%82%E2%80%9A
ƒ%83%C6%92
%84%E2%80%9E
%85%E2%80%A6
%86%E2%80%A0
%87%E2%80%A1
ˆ%88%CB%86
%89%E2%80%B0
Š%8A%C5%A0
%8B%E2%80%B9
Œ%8C%C5%92
%8D%C5%8D
Ž%8E%C5%BD
%8F%8F
%90%C2%90
%91%E2%80%98
%92%E2%80%99
%93%E2%80%9C
%94%E2%80%9D
%95%E2%80%A2
%96%E2%80%93
%97%E2%80%94
˜%98%CB%9C
%99%E2%84
š%9A%C5%A1
%9B%E2%80
œ%9C%C5%93
%9D%9D
ž%9E%C5%BE
Ÿ%9F%C5%B8
 %A0%C2%A0
¡%A1%C2%A1
¢%A2%C2%A2
£%A3%C2%A3
¤%A4%C2%A4
¥%A5%C2%A5
¦%A6%C2%A6
§%A7%C2%A7
¨%A8%C2%A8
©%A9%C2%A9
ª%AA%C2%AA
«%AB%C2%AB
¬%AC%C2%AC
%AD%C2%AD
®%AE%C2%AE
¯%AF%C2%AF
°%B0%C2%B0
±%B1%C2%B1
²%B2%C2%B2
³%B3%C2%B3
´%B4%C2%B4
µ%B5%C2%B5
%B6%C2%B6
·%B7%C2%B7
¸%B8%C2%B8
¹%B9%C2%B9
º%BA%C2%BA
»%BB%C2%BB
¼%BC%C2%BC
½%BD%C2%BD
¾%BE%C2%BE
¿%BF%C2%BF
À%C0%C3%80
Á%C1%C3%81
Â%C2%C3%82
Ã%C3%C3%83
Ä%C4%C3%84
Å%C5%C3%85
Æ%C6%C3%86
Ç%C7%C3%87
È%C8%C3%88
É%C9%C3%89
Ê%CA%C3%8A
Ë%CB%C3%8B
Ì%CC%C3%8C
Í%CD%C3%8D
Î%CE%C3%8E
Ï%CF%C3%8F
Ð%D0%C3%90
Ñ%D1%C3%91
Ò%D2%C3%92
Ó%D3%C3%93
Ô%D4%C3%94
Õ%D5%C3%95
Ö%D6%C3%96
×%D7%C3%97
Ø%D8%C3%98
Ù%D9%C3%99
Ú%DA%C3%9A
Û%DB%C3%9B
Ü%DC%C3%9C
Ý%DD%C3%9D
Þ%DE%C3%9E
ß%DF%C3%9F
à%E0%C3%A0
á%E1%C3%A1
â%E2%C3%A2
ã%E3%C3%A3
ä%E4%C3%A4
å%E5%C3%A5
æ%E6%C3%A6
ç%E7%C3%A7
è%E8%C3%A8
é%E9%C3%A9
ê%EA%C3%AA
ë%EB%C3%AB
ì%EC%C3%AC
í%ED%C3%AD
î%EE%C3%AE
ï%EF%C3%AF
ð%F0%C3%B0
ñ%F1%C3%B1
ò%F2%C3%B2
ó%F3%C3%B3
ô%F4%C3%B4
õ%F5%C3%B5
ö%F6%C3%B6
÷%F7%C3%B7
ø%F8%C3%B8
ù%F9%C3%B9
ú%FA%C3%BA
û%FB%C3%BB
ü%FC%C3%BC
ý%FD%C3%BD
þ%FE%C3%BE
ÿ%FF%C3%BF


블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,
티스토리에 드디어 입성하는군요
앞으로 프로그래밍 관련 및 여행 관련 내용을 담아갈 예정입니다
블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,